Version 2.15.0-4.0.dev

Merge commit '6393841036f9f0f14e2cc1c62309b4a9657dd029' into 'dev'
diff --git a/pkg/dart2js_info/.github/move.yml b/pkg/dart2js_info/.github/move.yml
new file mode 100644
index 0000000..67155b2
--- /dev/null
+++ b/pkg/dart2js_info/.github/move.yml
@@ -0,0 +1,16 @@
+# Configuration for move-issues - https://github.com/dessant/move-issues
+
+# Delete the command comment when it contains no other content.
+deleteCommand: true
+
+# Close the source issue after moving.
+closeSourceIssue: true
+
+# Lock the source issue after moving.
+lockSourceIssue: false
+
+# Mention issue and comment authors.
+mentionAuthors: true
+
+# Preserve mentions in the issue content.
+keepContentMentions: true
diff --git a/pkg/dart2js_info/.github/workflows/test-package.yml b/pkg/dart2js_info/.github/workflows/test-package.yml
new file mode 100644
index 0000000..065727f
--- /dev/null
+++ b/pkg/dart2js_info/.github/workflows/test-package.yml
@@ -0,0 +1,61 @@
+name: Dart CI
+
+on:
+  # Run on PRs and pushes to the default branch.
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+  schedule:
+    - cron: "0 0 * * 0"
+
+env:
+  PUB_ENVIRONMENT: bot.github
+
+jobs:
+  # Check code formatting and static analysis on a single OS (linux)
+  # against Dart dev.
+  analyze:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        sdk: [dev]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: ${{ matrix.sdk }}
+      - id: install
+        name: Install dependencies
+        run: dart pub get
+      - name: Check formatting
+        run: dart format --output=none --set-exit-if-changed .
+        if: always() && steps.install.outcome == 'success'
+      - name: Analyze code
+        run: dart analyze
+        if: always() && steps.install.outcome == 'success'
+
+  # Run tests on a matrix consisting of two dimensions:
+  # 1. OS: ubuntu-latest, (macos-latest, windows-latest)
+  # 2. release channel: dev
+  test:
+    needs: analyze
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        # Add macos-latest and/or windows-latest if relevant for this package.
+        os: [ubuntu-latest]
+        sdk: [2.12.0, dev]
+    steps:
+      - uses: actions/checkout@v2
+      - uses: dart-lang/setup-dart@v1.0
+        with:
+          sdk: ${{ matrix.sdk }}
+      - id: install
+        name: Install dependencies
+        run: dart pub get
+      - name: Run VM tests
+        run: dart test --platform vm
+        if: always() && steps.install.outcome == 'success'
diff --git a/pkg/dart2js_info/.gitignore b/pkg/dart2js_info/.gitignore
new file mode 100644
index 0000000..2bc83b8
--- /dev/null
+++ b/pkg/dart2js_info/.gitignore
@@ -0,0 +1,14 @@
+.buildlog
+.DS_Store
+*.swp
+*.swo
+.idea
+*.iml
+.pub/
+.settings/
+build/
+packages
+.packages
+pubspec.lock
+bin/inference/client.dart.js*
+.dart_tool/
diff --git a/pkg/dart2js_info/.status b/pkg/dart2js_info/.status
new file mode 100644
index 0000000..364ca4b
--- /dev/null
+++ b/pkg/dart2js_info/.status
@@ -0,0 +1,4 @@
+# Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
diff --git a/pkg/dart2js_info/AUTHORS b/pkg/dart2js_info/AUTHORS
new file mode 100644
index 0000000..e8063a8
--- /dev/null
+++ b/pkg/dart2js_info/AUTHORS
@@ -0,0 +1,6 @@
+# Below is a list of people and organizations that have contributed
+# to the project. Names should be added to the list like so:
+#
+#   Name/Organization <email address>
+
+Google Inc.
diff --git a/pkg/dart2js_info/CHANGELOG.md b/pkg/dart2js_info/CHANGELOG.md
new file mode 100644
index 0000000..ea4fe67b
--- /dev/null
+++ b/pkg/dart2js_info/CHANGELOG.md
@@ -0,0 +1,180 @@
+## 0.6.5
+
+* Drop unused dependencies.
+
+## 0.6.4
+
+* Make compatible with the null-safe version of `args`. 
+
+## 0.6.3
+
+* Broaden version ranges for `fixnum` and `protobuf` dependencies to make
+  `dart2js_info` compatible with null-safe `protobuf` version.
+
+## 0.6.2
+
+* Update `protobuf` dependency.
+* Set min SDK to `2.3.0`, as generated code contains this version.
+
+## 0.6.1
+
+* Move binary subcommands under src folder. Otherwise, `pub global activate`
+  fails.
+
+## 0.6.0
+
+This release contains several **breaking changes**:
+
+* The fields `Info.id` and `Info.serializedId` have been removed. These
+  properties were only used for serialization and deserialization. Those values
+  are now computed during the serialization process instead.
+
+* Added `CodeSpan` - a representation of code regions referring to output files.
+  This will be used to transition to a lighterweight dump-info that doesn't
+  embed code snippets (since they are duplicated with the output program).
+
+  Encoder produces a new format for code-spans, but for a transitional period
+  a flag is provided to produce the old format. The decoder is still backwards
+  compatible (filling in just the `text` in `CodeSpan` where the json contained
+  a String).
+
+* Deleted unused `Measurements`.
+
+* Split the json codec from info.dart.
+
+* Introduced `lib/binary_serialization.dart` a lighterweight
+  serialization/deserialization implementation. This will eventually be used by
+  default by dart2js.
+
+* Added backwards compatibility flag to the JSON codec, to make transition to
+  new tools more gradual.
+
+* Added a tool to dump info files in a readable text form.
+
+* Consolidated all binary tools under a single command. Now you can access all
+  tools as follows:
+  ```
+  pub global activate dart2js_info
+  dart2js_info <command> [arguments] ...
+  ```
+
+  See updated documentation in README.md
+
+## 0.5.17
+
+* Make `live_code_size_analysis` print library URIs and not library names.
+
+## 0.5.16
+
+* Split out IO dependency from `util.dart`, so all other utilities can be used
+  on any platform.
+
+## 0.5.15
+
+* Add `BasicInfo.resetIds` to free internal cache used for id uniqueness.
+
+## 0.5.14
+* Updates `coverage_log_server.dart` and `live_code_size_analysis.dart` to make
+  them strong clean and match the latest changes in dart2js.
+
+## 0.5.13
+
+* Use a more efficient `Map` implementation for decoding existing info files.
+
+* Use a relative path when generating unique IDs for elements in non-package
+  sources.
+
+## 0.5.12
+
+* Improved output of `dart2js_info_diff` by sorting the diffs by
+  size and outputting the summary in full output mode.
+
+## 0.5.11
+
+* Added `--summary` option to `dart2js_info_diff` tool.
+
+## 0.5.10
+
+* Set max SDK version to `<3.0.0`, and adjust other dependencies.
+
+## 0.5.6+4
+
+- Changes to make the library strong mode (runtime) clean.
+
+## 0.5.6
+
+- Added `isRuntimeTypeUsed`, `isIsolateInUse`, `isFunctionApplyUsed` and `isMirrorsUsed` to
+  `ProgramInfo`.
+
+## 0.5.5+1
+
+- Support the latest versions of `shelf` and `args` packages.
+
+## 0.5.5
+
+- Added `diff` tool.
+
+## 0.5.4+2
+
+- Updated minimum SDK dependency to align with package dependencies.
+- Allowed the latest version of `pkg/quiver`.
+- Updated the homepage.
+- Improved the stability and eliminated duplicates in "holding" dump info
+  output.
+
+## 0.5.4+1
+
+- Remove files published accidentally.
+
+## 0.5.4
+
+- Added script to show inferred types of functions and fields on the command
+  line.
+
+## 0.5.3+1
+
+- Improved the stability of `ConstantInfo.id`.
+
+## 0.5.3
+
+- Made IDs in the JSON format stable. Improves plain text diffing.
+
+## 0.2.7
+- Make dart2js_info strong-mode clean.
+
+## 0.2.6
+- Add tool to get breakdown of deferred libraries by size.
+
+## 0.2.5
+- Changed the `deferred_library_check` tool to allow parts to exclude packages
+  and to not assume that unspecified packages are in the main part.
+
+## 0.2.4
+- Added `imports` field for `OutputUnitInfo`
+
+## 0.2.3
+- Moved `deferred_library_check` functionality to a library
+
+## 0.2.2
+- Added `deferred_libary_check` tool
+
+## 0.2.1
+- Merged `verify_deps` tool into `debug_info` tool
+
+## 0.2.0
+- Added `AllInfoJsonCodec`
+- Added `verify_deps` tool
+
+## 0.1.0
+- Added `ProgramInfo.entrypoint`.
+- Added experimental information about calls in function bodies. This will
+  likely change again in the near future.
+
+## 0.0.3
+- Added executable names
+
+## 0.0.2
+- Add support for `ConstantInfo`
+
+## 0.0.1
+- Initial version
diff --git a/pkg/dart2js_info/CONTRIBUTING.md b/pkg/dart2js_info/CONTRIBUTING.md
new file mode 100644
index 0000000..6f5e0ea
--- /dev/null
+++ b/pkg/dart2js_info/CONTRIBUTING.md
@@ -0,0 +1,33 @@
+Want to contribute? Great! First, read this page (including the small print at
+the end).
+
+### Before you contribute
+Before we can use your code, you must sign the
+[Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual)
+(CLA), which you can do online. The CLA is necessary mainly because you own the
+copyright to your changes, even after your contribution becomes part of our
+codebase, so we need your permission to use and distribute your code. We also
+need to be sure of various other things—for instance that you'll tell us if you
+know that your code infringes on other people's patents. You don't have to sign
+the CLA until after you've submitted your code for review and a member has
+approved it, but you must do it before we can put your code into our codebase.
+
+Before you start working on a larger contribution, you should get in touch with
+us first through the issue tracker with your idea so that we can help out and
+possibly guide you. Coordinating up front makes it much easier to avoid
+frustration later on.
+
+### Code reviews
+All submissions, including submissions by project members, require review.
+
+### File headers
+All files in the project must start with the following header.
+
+    // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+    // for details. All rights reserved. Use of this source code is governed by a
+    // BSD-style license that can be found in the LICENSE file.
+
+### The small print
+Contributions made by corporations are covered by a different agreement than the
+one above, the
+[Software Grant and Corporate Contributor License Agreement](https://developers.google.com/open-source/cla/corporate).
diff --git a/pkg/dart2js_info/DEVELOPER.md b/pkg/dart2js_info/DEVELOPER.md
new file mode 100644
index 0000000..6f517b8
--- /dev/null
+++ b/pkg/dart2js_info/DEVELOPER.md
@@ -0,0 +1,54 @@
+# Notes for developers
+
+## Developing locally together with dart2js:
+
+* Use a path dependency on this repo to prepare changes.
+
+## Submitting changes.
+
+* Submit changes in this repo first.
+* Update the sdk/DEPS and sdk/tools/deps/dartium.deps/DEPS to use the latest
+  hash of this repo.
+* Submit dart2js changes together with the roll in DEPS.
+
+## Updating the dart2js\_info dart docs
+
+We use `dartdoc` and host the generated documentation as a [github page][1] in
+this repo. Here is how to update it:
+
+* Make sure you have the dartdoc tool installed:
+
+```
+pub global activate dartdoc
+```
+
+* Run the dartdoc tool on the root of the repo in master, specify an out
+  directory different than `doc`:
+
+```sh
+dartdoc --output _docs
+```
+
+* Switch to the `gh-pages` branch:
+
+```
+git checkout gh-pages
+git pull
+```
+
+* Override the existing docs by hand:
+
+```
+rm -r doc/api
+mv _docs doc/api
+git diff # validate changes look right
+git commit -a -m "Update documentation ... "
+```
+
+* Update the gh-pages branch in the server
+```
+git push origin gh-pages
+```
+
+
+[1]: http://dart-lang.github.io/dart2js_info/doc/api/dart2js_info.info/AllInfo-class.html
diff --git a/pkg/dart2js_info/LICENSE b/pkg/dart2js_info/LICENSE
new file mode 100644
index 0000000..dbd2843
--- /dev/null
+++ b/pkg/dart2js_info/LICENSE
@@ -0,0 +1,27 @@
+Copyright 2015, the Dart project authors. 
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google LLC nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/dart2js_info/README.md b/pkg/dart2js_info/README.md
new file mode 100644
index 0000000..2f2fe11
--- /dev/null
+++ b/pkg/dart2js_info/README.md
@@ -0,0 +1,520 @@
+# Dart2js Info
+
+This package contains libraries and tools you can use to process info
+files produced when running dart2js with `--dump-info`.
+
+The info files contain data about each element included in the output of your
+program. The data includes information such as:
+
+  * the size that each function adds to the `.dart.js` output,
+  * dependencies between functions,
+  * how the code is clustered when using deferred libraries, and
+  * the declared and inferred type of each function argument.
+
+All of this information can help you understand why some piece of code is
+included in your compiled application, and how far was dart2js able to
+understand your code. This data can help you make changes to improve the quality
+and size of your framework or app.
+
+This package focuses on gathering libraries and tools that summarize all of that
+information. Bear in mind that even with all these tools, it is not trivial to
+isolate code-size issues. We just hope that these tools make things a bit
+easier.
+
+## Status
+
+[![Build Status](https://github.com/dart-lang/dart2js_info/workflows/Dart%20CI/badge.svg)](https://github.com/dart-lang/dart2js_info/actions?query=workflow%3A"Dart+CI"+branch%3Amaster)
+
+Currently, most tools available here can be used to analyze code-size and
+attribution of code-size to different parts of your app. With time, we hope to
+add more data to the info files, and include better tools to help
+understand the results of type inference.
+
+This package is still in flux and we might make breaking changes at any time.
+Our current goal is not to provide a stable API, we mainly want to expose the
+functionality and iterate on it.  We recommend that you pin a specific version
+of this package and update when needed.
+
+## Tools
+
+All tools are provided as commands of a single command-line interface. To
+install:
+```console
+pub global activate dart2js_info
+```
+
+To run a tool, then run:
+```console
+dart2js_info <command> [arguments]
+```
+
+There is a short help available on the tool, and more details are provided
+below.
+
+## Format
+
+There are several formats of info files. Dart2js today produces a JSON format,
+but very soon will switch to produce a binary format by default.
+
+## Info API
+
+This package also exposes libraries to parse and represent the information from
+the info files. If there is data that is stored in the info files but not
+exposed by one of our tools, you may be able to use the info APIs to quickly put
+together your own tool.
+
+[AllInfo][AllInfo] exposes a Dart representation of all of the collected
+information. There are deserialization libraries in this package to decode any
+info file produced by the `dart2js` `--dump-info` option. See
+`lib/binary_serialization.dart` and `lib/json_info_codec.dart` to find the
+binary and JSON decoders respectively. For convenience,
+`package:dart2js_info/src/io.dart` also exposes a helper method that can choose,
+depending on the extension of the info file, whether to deserialize it using the
+binary or JSON decoder.  For example:
+
+```dart
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+main(args) async {
+  var infoPath = args[0];
+  var info = await infoFromFile(infoPath);
+  ...
+}
+```
+
+## Available tools
+
+The following tools are a available today:
+
+  * [`code_deps`][code_deps]: simple tool that can answer queries about the
+    dependency between functions and fields in your program. Currently it only
+    supports the `some_path` query, which shows a dependency path from one
+    function to another.
+    
+  * [`diff`][diff]: a tool that diffs two info files and reports which
+    program elements have been added, removed, or changed size. This also
+    tells which elements are no longer deferred or have become deferred.
+
+  * [`library_size`][library_size]: a tool that shows how much code was
+    attributed to each library. This tool is configurable so it can group data
+    in many ways (e.g. to tally together all libraries that belong to a package,
+    or all libraries that match certain name pattern).
+
+  * [`deferred_check`][deferred_check]: a tool that verifies that code
+    was split into deferred parts as expected. This tool takes a specification
+    of the expected layout of code into deferred parts, and checks that the
+    output from `dart2js` meets the specification.
+
+  * [`deferred_size`][deferred_size]: a tool that gives a breakdown of
+    the sizes of the deferred parts of the program. This can show how much of
+    your total code size can be loaded deferred.
+
+  * [`deferred_layout`][deferred_layout]: a tool that reports which
+    code is included on each output unit.
+
+  * [`function_size`][function_size]: a tool that shows how much
+    code was attributed to each function. This tool also uses dependency
+    information to compute dominance and reachability data. This information can
+    sometimes help determine how much savings could come if the function was not
+    included in the program.
+
+  * [`coverage_server`][coverage_server] and [`coverage_analysis`][coverage_analysis]:
+    dart2js has an experimental feature to gather coverage data of your
+    application. The `coverage_log_server` can record this data, and
+    `live_code_size_analysis` can correlate that with the info file, so you
+    determine why code that is not used is being included in your app.
+
+  * [`convert`][convert]: a tool that converts info files from one format to
+    another. Accepted inputs are JSON or the internal binary form, outputs can
+    be JSON, backward-compatible JSON, binary, or protobuf schema (as defined in
+    `info.proto`).
+
+  * [`show`][show]: a tool that dumps info files in a readable text format.
+
+Next we describe in detail how to use each of these tools.
+
+### Code deps tool
+
+This command-line tool can be used to query for code dependencies. Currently
+this tool only supports the `some_path` query, which gives you the shortest path
+for how one function depends on another.
+
+Run this tool as follows:
+```console
+# activate is only needed once to install the dart2js_info tool
+$ pub global activate dart2js_info
+$ dart2js_info code_deps some_path out.js.info.data main foo
+```
+
+The arguments to the query are regular expressions that can be used to
+select a single element in your program. If your regular expression is too
+general and has more than one match, this tool will pick
+the first match and ignore the rest. Regular expressions are matched against
+a fully qualified element name, which includes the library and class name
+(if any) that contains it. A typical qualified name is of this form:
+
+    libraryName::ClassName.elementName
+
+If the name of a function your are looking for is unique enough, it might be
+sufficient to just write that name as your regular expression.
+
+### Diff tool
+
+This command-line tool shows a diff between two info files. It can be run
+as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info diff old.js.info.data new.js.info.data [--summary]
+```
+
+The tool gives a breakdown of the difference between the two info files.
+Here's an example output:
+
+```
+total_size_difference -2688
+total_added 0
+total_removed 2321
+total_size_changed -203
+total_became_deferred 0
+total_no_longer_deferred 0
+
+ADDED (0 bytes)
+========================================================================
+
+REMOVED (2321 bytes)
+========================================================================
+dart:_js_helper::getRuntimeTypeString: 488 bytes
+dart:_js_helper::substitute: 479 bytes
+dart:_js_helper::TypeImpl.toString: 421 bytes
+dart:_js_helper::computeSignature: 204 bytes
+dart:_js_helper::getRuntimeTypeArguments: 181 bytes
+dart:_js_helper::extractFunctionTypeObjectFrom: 171 bytes
+dart:_js_helper::getTypeArgumentByIndex: 147 bytes
+dart:_js_helper::runtimeTypeToString: 136 bytes
+dart:_js_helper::setRuntimeTypeInfo: 94 bytes
+dart:core::Object.runtimeType: 0 bytes
+dart:_js_helper::getRawRuntimeType: 0 bytes
+dart:_js_helper::invoke: 0 bytes
+dart:_js_helper::invokeOn: 0 bytes
+dart:_js_helper::getField: 0 bytes
+dart:_js_helper::getClassName: 0 bytes
+dart:_js_helper::getRuntimeType: 0 bytes
+dart:_js_helper::TypeImpl.TypeImpl: 0 bytes
+
+CHANGED SIZE (-203 bytes)
+========================================================================
+dart:_interceptors::JSUnmodifiableArray: -3 bytes
+dart:core::List: -3 bytes
+dart:_interceptors::ArrayIterator: -4 bytes
+dart:_js_helper::TypeImpl._typeName: -10 bytes
+dart:_js_helper::TypeImpl._unmangledName: -15 bytes
+dart:_js_names::: -30 bytes
+dart:_js_names::extractKeys: -30 bytes
+dart:core::StringBuffer: -40 bytes
+dart:core::StringBuffer._writeAll: -40 bytes
+dart:core::: -43 bytes
+dart:_interceptors::JSArray.+: -63 bytes
+dart:_interceptors::JSArray: -66 bytes
+dart:_interceptors::: -73 bytes
+dart:_js_helper::TypeImpl: -481 bytes
+dart:_js_helper::: -2445 bytes
+
+BECAME DEFERRED (0 bytes)
+========================================================================
+
+NO LONGER DEFERRED (0 bytes)
+========================================================================
+
+```
+
+You can also pass `--summary` to only show the summary section.
+
+### Library size split tool
+
+This command-line tool shows the size distribution of generated code among
+libraries. It can be run as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info library_size out.js.info.data
+```
+
+
+Libraries can be grouped using regular expressions. You can
+specify what regular expressions to use by providing a `grouping.yaml` file
+with the `--grouping` flag:
+
+```console
+$ dart2js_info library_size out.js.info.data --grouping grouping.yaml
+```
+
+The format of the `grouping.yaml` file is as follows:
+
+```yaml
+groups:
+- { regexp: "package:(foo)/*.dart", name: "group name 1", cluster: 2}
+- { regexp: "dart:.*",              name: "group name 2", cluster: 3}
+```
+
+The file should include a single key `groups` containing a list of group
+specifications.  Each group is specified by a map of 3 entries:
+
+  * `regexp` (required): a regexp used to match entries that belong to the
+  group.
+
+  * `name` (optional): the name given to this group in the output table. If
+  omitted, the name is derived from the regexp as the match's group(1) or
+  group(0) if no group was defined. When names are omitted the group
+  specification implicitly defines several groups, one per observed name.
+
+  * `cluster` (optional): a clustering index for how data is shown in a table.
+  Groups with higher cluster indices are shown later in the table after a
+  dividing line. If missing, the cluster index defaults to 0.
+
+Here is an example configuration, with comments about what each entry does:
+
+```yaml
+groups:
+# This group shows the total size for all libraries that were loaded from
+# file:// urls, it is shown in cluster #2, which happens to be the last
+# cluster in this example before the totals are shown:
+- name: "Loose files"
+  regexp: "file://.*"
+  cluster: 2
+
+# This group shows the total size of all code loaded from packages:
+- { name: "All packages", regexp: "package:.*", cluster: 2}
+
+# This group shows the total size of all code loaded from core libraries:
+- { name: "Core libs", regexp: "dart:.*", cluster: 2}
+
+# This group shows the total size of all libraries in a single package. Here
+# we omitted the `name` entry, instead we extract it from the regexp
+# directly.  In this case, the name will be the package-name portion of the
+# package-url (determined by group(1) of the regexp).
+- { regexp: "package:([^/]*)", cluster: 1}
+
+# The next two groups match the entire library url as the name of the group.
+- regexp: "package:.*"
+- regexp: "dart:.*"
+
+# If your code lives under /my/project/dir, this will match any file loaded
+from a file:// url, and we use as a name the relative path to it.
+- regexp: "file:///my/project/dir/(.*)"
+```
+
+Regardless of the grouping configuration, the tool will display the total code
+size attributed of all libraries, constants, and the program size.
+
+**Note**: eventually you should expect all numbers to add up to the program
+size. Currently dart2js's `--dump-info` is not complete, so numbers for
+bootstrapping code and lazy static initializers are missing.
+
+### Deferred library verification
+
+This tool checks that the output from dart2js meets a given specification,
+given in a YAML file. It can be run as follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info deferred_check out.js.info.data manifest.yaml
+```
+
+The format of the YAML file is:
+
+```yaml
+main:
+  include:
+    - some_package
+    - other_package
+  exclude:
+    - some_other_package
+
+foo:
+  include:
+    - foo
+    - bar
+
+baz:
+  include:
+    - baz
+    - quux
+  exclude:
+    - zardoz
+```
+
+The YAML file consists of a list of declarations, one for each deferred
+part expected in the output. At least one of these parts must be named
+"main"; this is the main part that contains the program entrypoint. Each
+top-level part contains a list of package names that are expected to be
+contained in that part, a list of package names that are expected to be in
+another part, or both. For instance, in the example YAML above the part named
+"baz" is expected to contain the packages "baz" and "quux" and exclude the
+package "zardoz".
+
+The names for parts given in the specification YAML file (besides "main")
+are the same as the name given to the deferred import in the dart file. For
+instance, if you have `import 'package:foo/bar.dart' deferred as baz;` in your
+dart file, then the corresponding name in the specification file is 'baz'.
+
+### Deferred library size tool
+
+This tool gives a breakdown of all of the deferred code in the program by size.
+It can show how much of the total code size is deferred. It can be run as
+follows:
+
+```console
+pub global activate dart2js_info # only needed once
+dart2js_info deferred_size out.js.info.data
+```
+
+The tool will output a table listing all of the deferred imports in the program
+as well as the "main" chunk, which is not deferred. The output looks like:
+
+```
+Size by library
+------------------------------------------------
+main                                    12345678
+foo                                      7654321
+bar                                      1234567
+------------------------------------------------
+Main chunk size                         12345678
+Deferred code size                       8888888
+Percent of code deferred                  41.86%
+```
+
+### Deferred library layout tool
+
+This tool reports which code is included in each output unit.  It can be run as
+follows:
+
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info deferred_layout out.js.info.data
+```
+
+The tool will output a table listing all of the deferred output units or chunks,
+for each unit it will list the set of libraries that contribute code to this
+unit. If a library contributes to more than one output unit, the tool lists
+which elements are in one or another output unit. For example, the output might
+look like this:
+
+```
+Output unit main:
+  loaded by default
+  contains:
+     - hello_world.dart
+     - dart:core
+     ...
+
+Output unit 2:
+  loaded by importing: [b]
+  contains:
+     - c.dart:
+       - function d
+     - b.dart
+
+Output unit 1:
+  loaded by importing: [a]
+  contains:
+     - c.dart:
+       - function c
+     - a.dart
+```
+
+In this example, all the code of `b.dart` after tree-shaking was included in the
+output unit 2, but `c.dart` was split between output unit 1 and output unit 2.
+
+### Function size analysis tool
+
+This command-line tool presents how much each function contributes to the total
+code of your application.  We use dependency information to compute dominance
+and reachability data as well.
+
+When you run:
+```console
+$ pub global activate dart2js_info # only needed once
+$ dart2js_info function_size out.js.info.data
+```
+
+the tool produces a table output with lots of entries. Here is an example entry
+with the corresponding table header:
+```
+ --- Results per element (field or function) ---
+    element size     dominated size     reachable size Element identifier
+    ...
+     275   0.01%     283426  13.97%    1506543  74.28% some.library.name::ClassName.myMethodName
+```
+
+Such entry means that the function `myMethodName` uses 275 bytes, which is 0.01%
+of the application. That function however calls other functions, which
+transitively can include up to 74.28% of the application size. Of all those
+reachable functions, some of them are reachable from other parts of the program,
+but a subset are dominated by `myMethodName`, that is, other parts of the
+program starting from `main` would first go through `myMethodName` before
+reaching those functions. In this example, that subset is 13.97% of the
+application size. This means that if you somehow can remove your dependency on
+`myMethodName`, you will save at least that 13.97%, and possibly some more from
+the reachable size, but how much of that we are not certain.
+
+### Coverage tools
+
+Coverage information requires a bit more setup and work to get them running. The
+steps are as follows:
+
+  * Compile an app with dart2js using `--dump-info` and
+    `--experiment-call-instrumentation`
+
+```console
+$ dart2js --dump-info --experiment-call-instrumentation main.dart
+```
+
+  The flag only works dart2js version 2.2.0 or newer.
+
+  * Launch the coverage server tool to serve up the JS code of your app:
+
+```console
+$ dart2js_info coverage_server main.dart.js
+```
+
+  * (optional) If you have a complex application setup, you may need to serve an
+    html file or integrate your application server to proxy to the log server
+    any GET request for the .dart.js file and /coverage POST requests that send
+    coverage data.
+
+  * Load your app and use it to exercise the entire code.
+
+  * Shut down the coverage server (Ctrl-C). This will emit a file named
+    `mail.dart.js.coverage.json`
+
+  * Finally, run the live code analysis tool given it both the info and
+    coverage json files:
+
+```console
+$ dart2js_info coverage_analysis main.dart.info.data main.dart.coverage.json
+```
+
+## Code location, features and bugs
+
+This package is developed in [github][repo].  Please file feature requests and
+bugs at the [issue tracker][tracker].
+
+[repo]: https://github.com/dart-lang/dart2js_info/
+[tracker]: https://github.com/dart-lang/dart2js_info/issues
+[code_deps]: https://github.com/dart-lang/dart2js_info/blob/master/bin/code_deps.dart
+[diff]: https://github.com/dart-lang/dart2js_info/blob/master/bin/diff.dart
+[library_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/library_size_split.dart
+[deferred_check]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_check.dart
+[deferred_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_size.dart
+[deferred_layout]: https://github.com/dart-lang/dart2js_info/blob/master/bin/deferred_library_layout.dart
+[coverage_server]: https://github.com/dart-lang/dart2js_info/blob/master/bin/coverage_log_server.dart
+[coverage_analysis]: https://github.com/dart-lang/dart2js_info/blob/master/bin/live_code_size_analysis.dart
+[function_size]: https://github.com/dart-lang/dart2js_info/blob/master/bin/function_size_analysis.dart
+[AllInfo]: http://dart-lang.github.io/dart2js_info/doc/api/dart2js_info.info/AllInfo-class.html
+[convert]: https://github.com/dart-lang/dart2js_info/blob/master/bin/convert.dart
+[show]: https://github.com/dart-lang/dart2js_info/blob/master/bin/text_print.dart
diff --git a/pkg/dart2js_info/bin/src/code_deps.dart b/pkg/dart2js_info/bin/src/code_deps.dart
new file mode 100644
index 0000000..91b9222
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/code_deps.dart
@@ -0,0 +1,131 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command to query for code dependencies. Currently this tool only
+/// supports the `some_path` query, which gives you the shortest path for how
+/// one function depends on another.
+///
+/// You can run this tool as follows:
+/// ```bash
+/// pub global activate dart2js_info
+/// dart2js_info code_deps some_path out.js.info.json main foo
+/// ```
+///
+/// The arguments to the query are regular expressions that can be used to
+/// select a single element in your program. If your regular expression is too
+/// general and has more than one match, this tool will pick
+/// the first match and ignore the rest. Regular expressions are matched against
+/// a fully qualified element name, which includes the library and class name
+/// (if any) that contains it. A typical qualified name is of this form:
+///
+///     libraryName::ClassName.elementName
+///
+/// If the name of a function your are looking for is unique enough, it might be
+/// sufficient to just write that name as your regular expression.
+library dart2js_info.bin.code_deps;
+
+import 'dart:collection';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/graph.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+class CodeDepsCommand extends Command<void> with PrintUsageException {
+  final String name = "code_deps";
+  final String description = "";
+
+  CodeDepsCommand() {
+    addSubcommand(new _SomePathQuery());
+  }
+}
+
+class _SomePathQuery extends Command<void> with PrintUsageException {
+  final String name = "some_path";
+  final String description = "find a call-graph path between two elements.";
+
+  @override
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 3) {
+      usageException("Missing arguments for some_path, expected: "
+          "info.data <element-regexp-1> <element-regexp-2>");
+      return;
+    }
+
+    var info = await infoFromFile(args.first);
+    var graph = graphFromInfo(info);
+
+    var source = info.functions
+        .firstWhere(_longNameMatcher(new RegExp(args[1])), orElse: () => null);
+    var target = info.functions
+        .firstWhere(_longNameMatcher(new RegExp(args[2])), orElse: () => null);
+    print('query: some_path');
+    if (source == null) {
+      usageException("source '${args[1]}' not found in '${args[0]}'");
+    }
+    print('source: ${longName(source)}');
+    if (target == null) {
+      usageException("target '${args[2]}' not found in '${args[0]}'");
+    }
+    print('target: ${longName(target)}');
+    var path = new SomePathQuery(source, target).run(graph);
+    if (path.isEmpty) {
+      print('result: no path found');
+    } else {
+      print('result:');
+      for (int i = 0; i < path.length; i++) {
+        print('  $i. ${longName(path[i])}');
+      }
+    }
+  }
+}
+
+/// A query supported by this tool.
+abstract class Query {
+  run(Graph<Info> graph);
+}
+
+/// Query that searches for a single path between two elements.
+class SomePathQuery {
+  /// The info associated with the source element.
+  Info source;
+
+  /// The info associated with the target element.
+  Info target;
+
+  SomePathQuery(this.source, this.target);
+
+  List<Info> run(Graph<Info> graph) {
+    var seen = <Info, Info>{source: null};
+    var queue = new Queue<Info>();
+    queue.addLast(source);
+    while (queue.isNotEmpty) {
+      var node = queue.removeFirst();
+      if (identical(node, target)) {
+        var result = new Queue<Info>();
+        while (node != null) {
+          result.addFirst(node);
+          node = seen[node];
+        }
+        return result.toList();
+      }
+      for (var neighbor in graph.targetsOf(node)) {
+        if (seen.containsKey(neighbor)) continue;
+        seen[neighbor] = node;
+        queue.addLast(neighbor);
+      }
+    }
+    return [];
+  }
+}
+
+typedef bool LongNameMatcher(FunctionInfo info);
+
+LongNameMatcher _longNameMatcher(RegExp regexp) =>
+    (e) => regexp.hasMatch(longName(e));
diff --git a/pkg/dart2js_info/bin/src/convert.dart b/pkg/dart2js_info/bin/src/convert.dart
new file mode 100644
index 0000000..f79233d
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/convert.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:args/command_runner.dart';
+
+import 'to_json.dart' show ToJsonCommand;
+import 'to_binary.dart' show ToBinaryCommand;
+import 'to_proto.dart' show ToProtoCommand;
+import 'usage_exception.dart';
+
+/// This tool reports how code is divided among deferred chunks.
+class ConvertCommand extends Command<void> with PrintUsageException {
+  final String name = "convert";
+  final String description = "Convert between info formats.";
+
+  ConvertCommand() {
+    _addSubcommand(new ToJsonCommand());
+    _addSubcommand(new ToBinaryCommand());
+    _addSubcommand(new ToProtoCommand());
+  }
+
+  _addSubcommand(Command<void> command) {
+    addSubcommand(command);
+    command.argParser
+      ..addOption('out',
+          abbr: 'o',
+          help: 'Output file '
+              '(to_json defauts to <input>.json, to_binary defaults to\n'
+              '<input>.data, and to_proto defaults to <input>.pb)')
+      ..addFlag('inject-text',
+          negatable: false,
+          help: 'Whether to inject output code snippets.\n\n'
+              'By default dart2js produces code spans, but excludes the text. This\n'
+              'option can be used to embed the text directly in the output.\n'
+              'Note: this requires access to dart2js output files.\n');
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/coverage_log_server.dart b/pkg/dart2js_info/bin/src/coverage_log_server.dart
new file mode 100644
index 0000000..d43d410
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/coverage_log_server.dart
@@ -0,0 +1,220 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// A tool to gather coverage data from an app generated with dart2js. This
+/// depends on code that has been landed in the bleeding_edge version of dart2js
+/// and that we expect to become publicly visible in version 0.13.0 of the Dart
+/// SDK).
+///
+/// This tool starts a server that answers to mainly 2 requests:
+///    * a GET request to retrieve the application
+///    * POST requests to record coverage data.
+///
+/// It is intended to be used as follows:
+///    * generate an app by running dart2js with the environment value
+///      -DtraceCalls=post provided to the vm, and the --dump-info
+///      flag provided to dart2js.
+///    * start this server, and proxy requests from your normal frontend
+///      server to this one.
+library dart2js_info.bin.coverage_log_server;
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+import 'package:path/path.dart' as path;
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf/shelf_io.dart' as shelf;
+
+import 'usage_exception.dart';
+
+class CoverageLogServerCommand extends Command<void> with PrintUsageException {
+  final String name = 'coverage_server';
+  final String description = 'Server to gather code coverage data';
+
+  CoverageLogServerCommand() {
+    argParser
+      ..addOption('port', abbr: 'p', help: 'port number', defaultsTo: "8080")
+      ..addOption('host',
+          help: 'host name (use 0.0.0.0 for all interfaces)',
+          defaultsTo: 'localhost')
+      ..addOption('uri-prefix',
+          help:
+              'uri path prefix that will hit this server. This will be injected'
+              ' into the .js file',
+          defaultsTo: '')
+      ..addOption('out',
+          abbr: 'o',
+          help: 'output log file',
+          defaultsTo: _DEFAULT_OUT_TEMPLATE);
+  }
+
+  void run() async {
+    if (argResults.rest.isEmpty) {
+      usageException('Missing arguments: <dart2js-out-file> [<html-file>]');
+    }
+
+    var jsPath = argResults.rest[0];
+    var htmlPath = null;
+    if (argResults.rest.length > 1) {
+      htmlPath = argResults.rest[1];
+    }
+    var outPath = argResults['out'];
+    if (outPath == _DEFAULT_OUT_TEMPLATE) outPath = '$jsPath.coverage.json';
+    var server = new _Server(argResults['host'], int.parse(argResults['port']),
+        jsPath, htmlPath, outPath, argResults['uri-prefix']);
+    await server.run();
+  }
+}
+
+const _DEFAULT_OUT_TEMPLATE = '<dart2js-out-file>.coverage.json';
+
+class _Server {
+  /// Server hostname, typically `localhost`,  but can be `0.0.0.0`.
+  final String hostname;
+
+  /// Port the server will listen to.
+  final int port;
+
+  /// JS file (previously generated by dart2js) to serve.
+  final String jsPath;
+
+  /// HTML file to serve, if any.
+  final String htmlPath;
+
+  /// Contents of jsPath, adjusted to use the appropriate server url.
+  String jsCode;
+
+  /// Location where we'll dump the coverage data.
+  final String outPath;
+
+  /// Uri prefix used on all requests to this server. This will be injected into
+  /// the .js file.
+  final String prefix;
+
+  // TODO(sigmund): add support to load also simple HTML files to test small
+  // simple apps.
+
+  /// Data received so far. The data is just an array of pairs, showing the
+  /// hashCode and name of the element used. This can be later cross-checked
+  /// against dump-info data.
+  Map data = {};
+
+  String get _serializedData => new JsonEncoder.withIndent(' ').convert(data);
+
+  _Server(this.hostname, this.port, String jsPath, this.htmlPath, this.outPath,
+      String prefix)
+      : jsPath = jsPath,
+        jsCode = _adjustRequestUrl(new File(jsPath).readAsStringSync(), prefix),
+        prefix = _normalize(prefix);
+
+  run() async {
+    await shelf.serve(_handler, hostname, port);
+    var urlBase = "http://$hostname:$port${prefix == '' ? '/' : '/$prefix/'}";
+    var htmlFilename = htmlPath == null ? '' : path.basename(htmlPath);
+    print("Server is listening\n"
+        "  - html page: $urlBase$htmlFilename\n"
+        "  - js code: $urlBase${path.basename(jsPath)}\n"
+        "  - coverage reporting: ${urlBase}coverage\n");
+  }
+
+  _expectedPath(String tail) => prefix == '' ? tail : '$prefix/$tail';
+
+  FutureOr<shelf.Response> _handler(shelf.Request request) async {
+    var urlPath = request.url.path;
+    print('received request: $urlPath');
+    var baseJsName = path.basename(jsPath);
+    var baseHtmlName = htmlPath == null ? '' : path.basename(htmlPath);
+
+    // Serve an HTML file at the default prefix, or a path matching the HTML
+    // file name
+    if (urlPath == prefix ||
+        urlPath == '$prefix/' ||
+        urlPath == _expectedPath(baseHtmlName)) {
+      var contents = htmlPath == null
+          ? '<html><script src="$baseJsName"></script>'
+          : await new File(htmlPath).readAsString();
+      return new shelf.Response.ok(contents, headers: HTML_HEADERS);
+    }
+
+    if (urlPath == _expectedPath(baseJsName)) {
+      return new shelf.Response.ok(jsCode, headers: JS_HEADERS);
+    }
+
+    // Handle POST requests to record coverage data, and GET requests to display
+    // the currently coverage results.
+    if (urlPath == _expectedPath('coverage')) {
+      if (request.method == 'GET') {
+        return new shelf.Response.ok(_serializedData, headers: TEXT_HEADERS);
+      }
+
+      if (request.method == 'POST') {
+        _record(jsonDecode(await request.readAsString()));
+        return new shelf.Response.ok("Thanks!");
+      }
+    }
+
+    // Any other request is not supported.
+    return new shelf.Response.notFound('Not found: "$urlPath"');
+  }
+
+  _record(List entries) {
+    for (var entry in entries) {
+      var id = entry[0];
+      data.putIfAbsent('$id', () => {'name': entry[1], 'count': 0});
+      data['$id']['count']++;
+    }
+    _enqueueSave();
+  }
+
+  bool _savePending = false;
+  int _total = 0;
+  _enqueueSave() async {
+    if (!_savePending) {
+      _savePending = true;
+      await new Future.delayed(new Duration(seconds: 3));
+      await new File(outPath).writeAsString(_serializedData);
+      var diff = data.length - _total;
+      print(diff == 0
+          ? ' - no new element covered'
+          : ' - $diff new elements covered');
+      _savePending = false;
+      _total = data.length;
+    }
+  }
+}
+
+/// Removes leading and trailing slashes of [uriPath].
+_normalize(String uriPath) {
+  if (uriPath.startsWith('/')) uriPath = uriPath.substring(1);
+  if (uriPath.endsWith('/')) uriPath = uriPath.substring(0, uriPath.length - 1);
+  return uriPath;
+}
+
+_adjustRequestUrl(String code, String prefix) {
+  var url = prefix == '' ? 'coverage' : '$prefix/coverage';
+  var hook = '''
+      self.dartCallInstrumentation = function(id, name) {
+        if (!this.traceBuffer) {
+          this.traceBuffer = [];
+        }
+        var buffer = this.traceBuffer;
+        if (buffer.length == 0) {
+          window.setTimeout(function() {
+            var xhr = new XMLHttpRequest();
+            xhr.open("POST", "/$url");
+              xhr.send(JSON.stringify(buffer));
+              buffer.length = 0;
+            }, 1000);
+        }
+        buffer.push([id, name]);
+     };
+     ''';
+  return '$hook$code';
+}
+
+const HTML_HEADERS = const {'content-type': 'text/html'};
+const JS_HEADERS = const {'content-type': 'text/javascript'};
+const TEXT_HEADERS = const {'content-type': 'text/plain'};
diff --git a/pkg/dart2js_info/bin/src/debug_info.dart b/pkg/dart2js_info/bin/src/debug_info.dart
new file mode 100644
index 0000000..5aa7607
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/debug_info.dart
@@ -0,0 +1,321 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Tool used mainly by dart2js developers to debug the generated info and check
+/// that it is consistent and that it covers all the data we expect it to cover.
+library dart2js_info.bin.debug_info;
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/graph.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+class DebugCommand extends Command<void> with PrintUsageException {
+  final String name = "debug";
+  final String description = "Dart2js-team diagnostics on a dump-info file.";
+
+  DebugCommand() {
+    argParser.addOption('show-library',
+        help: "Show detailed data for a library with the given name");
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+
+    var info = await infoFromFile(args.first);
+    var debugLibName = argResults['show-library'];
+
+    validateSize(info, debugLibName);
+    validateParents(info);
+    compareGraphs(info);
+    verifyDeps(info);
+  }
+}
+
+/// Validates that codesize of elements adds up to total codesize.
+validateSize(AllInfo info, String debugLibName) {
+  // Gather data from visiting all info elements.
+  var tracker = new _SizeTracker(debugLibName);
+  info.accept(tracker);
+
+  // Validate that listed elements include elements of each library.
+  Set<Info> listed = new Set()
+    ..addAll(info.functions)
+    ..addAll(info.fields);
+  // For our sanity we do some validation of dump-info invariants
+  var diff1 = listed.difference(tracker.discovered);
+  var diff2 = tracker.discovered.difference(listed);
+  if (diff1.length == 0 || diff2.length == 0) {
+    _pass('all fields and functions are covered');
+  } else {
+    if (diff1.length > 0) {
+      _fail("some elements where listed globally that weren't part of any "
+          "library (non-zero ${diff1.where((f) => f.size > 0).length})");
+    }
+    if (diff2.length > 0) {
+      _fail("some elements found in libraries weren't part of the global list"
+          " (non-zero ${diff2.where((f) => f.size > 0).length})");
+    }
+  }
+
+  // Validate that code-size adds up.
+  int realTotal = info.program.size;
+  int totalLib = info.libraries.fold(0, (n, lib) => n + lib.size);
+  int constantsSize = info.constants.fold(0, (n, c) => n + c.size);
+  int accounted = totalLib + constantsSize;
+
+  if (accounted != realTotal) {
+    var percent =
+        ((realTotal - accounted) * 100 / realTotal).toStringAsFixed(2);
+    _fail('$percent% size missing: $accounted (all libs + consts) '
+        '< $realTotal (total)');
+  }
+  int missingTotal = tracker.missing.values.fold(0, (a, b) => a + b);
+  if (missingTotal > 0) {
+    var percent = (missingTotal * 100 / realTotal).toStringAsFixed(2);
+    _fail('$percent% size missing in libraries (sum of elements > lib.size)');
+  }
+}
+
+/// Validates that every element in the model has a parent (except libraries).
+validateParents(AllInfo info) {
+  final parentlessInfos = new Set<Info>();
+
+  failIfNoParents(List<Info> infos) {
+    for (var info in infos) {
+      if (info.parent == null) {
+        parentlessInfos.add(info);
+      }
+    }
+  }
+
+  failIfNoParents(info.functions);
+  failIfNoParents(info.typedefs);
+  failIfNoParents(info.classes);
+  failIfNoParents(info.fields);
+  failIfNoParents(info.closures);
+  if (parentlessInfos.isEmpty) {
+    _pass('all elements have a parent');
+  } else {
+    _fail('${parentlessInfos.length} elements have no parent');
+  }
+}
+
+class _SizeTracker extends RecursiveInfoVisitor {
+  /// A library name for which to print debugging information (if not null).
+  final String _debugLibName;
+
+  _SizeTracker(this._debugLibName);
+
+  /// [FunctionInfo]s and [FieldInfo]s transitively reachable from [LibraryInfo]
+  /// elements.
+  final Set<Info> discovered = new Set<Info>();
+
+  /// Total number of bytes missing if you look at the reported size compared
+  /// to the sum of the nested infos (e.g. if a class size is smaller than the
+  /// sum of its methods). Used for validation and debugging of the dump-info
+  /// invariants.
+  final Map<Info, int> missing = {};
+
+  /// Set of [FunctionInfo]s that appear to be unused by the app (they are not
+  /// registed [coverage]).
+  final List unused = [];
+
+  /// Tracks the current state of this visitor.
+  List<_State> stack = [new _State()];
+
+  /// Code discovered for a [LibraryInfo], only used for debugging.
+  final StringBuffer _debugCode = new StringBuffer();
+  int _indent = 2;
+
+  void _push() => stack.add(new _State());
+
+  void _pop(info) {
+    var last = stack.removeLast();
+    var size = last._totalSize;
+    if (size > info.size) {
+      // record dump-info inconsistencies.
+      missing[info] = size - info.size;
+    } else {
+      // if size < info.size, that is OK, the enclosing element might have code
+      // of it's own (e.g. a class declaration includes the name of the class,
+      // but the discovered size only counts the size of the members.)
+      size = info.size;
+    }
+    stack.last
+      .._totalSize += size
+      .._count += last._count
+      .._bodySize += last._bodySize;
+  }
+
+  bool _debug = false;
+  visitLibrary(LibraryInfo info) {
+    if (_debugLibName != null) _debug = info.name.contains(_debugLibName);
+    _push();
+    if (_debug) {
+      _debugCode.write('{\n');
+      _indent = 4;
+    }
+    super.visitLibrary(info);
+    _pop(info);
+    if (_debug) {
+      _debug = false;
+      _indent = 4;
+      _debugCode.write('}\n');
+    }
+  }
+
+  _handleCodeInfo(info) {
+    discovered.add(info);
+    var code = info.code;
+    if (_debug && code != null) {
+      bool isClosureClass = info.name.endsWith('.call');
+      if (isClosureClass) {
+        var cname = info.name.substring(0, info.name.indexOf('.'));
+        _debugCode.write(' ' * _indent);
+        _debugCode.write(cname);
+        _debugCode.write(': {\n');
+        _indent += 2;
+        _debugCode.write(' ' * _indent);
+        _debugCode.write('...\n');
+      }
+
+      print('$info ${isClosureClass} \n${info.code}');
+      _debugCode.write(' ' * _indent);
+      var endsInNewLine = code.endsWith('\n');
+      if (endsInNewLine) code = code.substring(0, code.length - 1);
+      _debugCode.write(code.replaceAll('\n', '\n' + (' ' * _indent)));
+      if (endsInNewLine) _debugCode.write(',\n');
+      if (isClosureClass) {
+        _indent -= 2;
+        _debugCode.write(' ' * _indent);
+        _debugCode.write('},\n');
+      }
+    }
+    stack.last._totalSize += info.size;
+    stack.last._bodySize += info.size;
+    stack.last._count++;
+  }
+
+  visitField(FieldInfo info) {
+    _handleCodeInfo(info);
+    super.visitField(info);
+  }
+
+  visitFunction(FunctionInfo info) {
+    _handleCodeInfo(info);
+    super.visitFunction(info);
+  }
+
+  visitTypedef(TypedefInfo info) {
+    if (_debug) print('$info');
+    stack.last._totalSize += info.size;
+    super.visitTypedef(info);
+  }
+
+  visitClass(ClassInfo info) {
+    if (_debug) {
+      print('$info');
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('${info.name}: {\n');
+      _indent += 2;
+    }
+    _push();
+    super.visitClass(info);
+    _pop(info);
+    if (_debug) {
+      _debugCode.write(' ' * _indent);
+      _debugCode.write('},\n');
+      _indent -= 2;
+    }
+  }
+}
+
+class _State {
+  int _count = 0;
+  int _totalSize = 0;
+  int _bodySize = 0;
+}
+
+/// Validates that both forms of dependency information match.
+void compareGraphs(AllInfo info) {
+  var g1 = new EdgeListGraph<Info>();
+  var g2 = new EdgeListGraph<Info>();
+  for (var f in info.functions) {
+    g1.addNode(f);
+    for (var g in f.uses) {
+      g1.addEdge(f, g.target);
+    }
+    g2.addNode(f);
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        g2.addEdge(f, g);
+      }
+    }
+  }
+
+  for (var f in info.fields) {
+    g1.addNode(f);
+    for (var g in f.uses) {
+      g1.addEdge(f, g.target);
+    }
+    g2.addNode(f);
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        g2.addEdge(f, g);
+      }
+    }
+  }
+
+  // Note: these checks right now show that 'uses' links are computed
+  // differently than 'deps' links
+  int inUsesNotInDependencies = 0;
+  int inDependenciesNotInUses = 0;
+  _sameEdges(f) {
+    var targets1 = g1.targetsOf(f).toSet();
+    var targets2 = g2.targetsOf(f).toSet();
+    inUsesNotInDependencies += targets1.difference(targets2).length;
+    inDependenciesNotInUses += targets2.difference(targets1).length;
+  }
+
+  info.functions.forEach(_sameEdges);
+  info.fields.forEach(_sameEdges);
+  if (inUsesNotInDependencies == 0 && inDependenciesNotInUses == 0) {
+    _pass('dependency data is consistent');
+  } else {
+    _fail('inconsistencies in dependency data:\n'
+        '   $inUsesNotInDependencies edges missing from "dependencies" graph\n'
+        '   $inDependenciesNotInUses edges missing from "uses" graph');
+  }
+}
+
+// Validates that all elements are reachable from `main` in the dependency
+// graph.
+verifyDeps(AllInfo info) {
+  var graph = graphFromInfo(info);
+  var entrypoint = info.program.entrypoint;
+  var reachables = new Set.from(graph.preOrder(entrypoint));
+
+  var functionsAndFields = []
+    ..addAll(info.functions)
+    ..addAll(info.fields);
+  var unreachables =
+      functionsAndFields.where((func) => !reachables.contains(func));
+  if (unreachables.isNotEmpty) {
+    _fail('${unreachables.length} elements are unreachable from the '
+        'entrypoint');
+  } else {
+    _pass('all elements are reachable from the entrypoint');
+  }
+}
+
+_pass(String msg) => print('\x1b[32mPASS\x1b[0m: $msg');
+_fail(String msg) => print('\x1b[31mFAIL\x1b[0m: $msg');
diff --git a/pkg/dart2js_info/bin/src/deferred_library_check.dart b/pkg/dart2js_info/bin/src/deferred_library_check.dart
new file mode 100644
index 0000000..5493c66
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_check.dart
@@ -0,0 +1,71 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// A command that verifies that deferred libraries split the code as expected.
+///
+/// This tool checks that the output from dart2js meets a given specification,
+/// given in a YAML file. The format of the YAML file is:
+///
+///     main:
+///       packages:
+///         - some_package
+///         - other_package
+///
+///     foo:
+///       packages:
+///         - foo
+///         - bar
+///
+///     baz:
+///       packages:
+///         - baz
+///         - quux
+///
+/// The YAML file consists of a list of declarations, one for each deferred
+/// part expected in the output. At least one of these parts must be named
+/// "main"; this is the main part that contains the program entrypoint. Each
+/// top-level part contains a list of package names that are expected to be
+/// contained in that part. Any package that is not explicitly listed is
+/// expected to be in the main part. For instance, in the example YAML above
+/// the part named "baz" is expected to contain the packages "baz" and "quux".
+///
+/// The names for parts given in the specification YAML file (besides "main")
+/// are arbitrary and just used for reporting when the output does not meet the
+/// specification.
+library dart2js_info.bin.deferred_library_check;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/deferred_library_check.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:yaml/yaml.dart';
+
+import 'usage_exception.dart';
+
+/// A command that computes the diff between two info files.
+class DeferredLibraryCheck extends Command<void> with PrintUsageException {
+  final String name = "deferred_check";
+  final String description =
+      "Verify that deferred libraries are split as expected";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException('Missing arguments, expected: info.data manifest.yaml');
+    }
+    var info = await infoFromFile(args[0]);
+    var manifest = await manifestFromFile(args[1]);
+
+    var failures = checkDeferredLibraryManifest(info, manifest);
+    failures.forEach(print);
+    if (failures.isNotEmpty) exitCode = 1;
+  }
+}
+
+Future manifestFromFile(String fileName) async {
+  var file = await new File(fileName).readAsString();
+  return loadYaml(file);
+}
diff --git a/pkg/dart2js_info/bin/src/deferred_library_layout.dart b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
new file mode 100644
index 0000000..c647344
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This tool reports how code is divided among deferred chunks.
+library dart2js_info.bin.deferred_library_layout;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+/// This tool reports how code is divided among deferred chunks.
+class DeferredLibraryLayout extends Command<void> with PrintUsageException {
+  final String name = "deferred_layout";
+  final String description = "Show how code is divided among deferred parts.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    await _showLayout(args.first);
+  }
+}
+
+_showLayout(String file) async {
+  AllInfo info = await infoFromFile(file);
+
+  Map<OutputUnitInfo, Map<LibraryInfo, List<BasicInfo>>> hunkMembers = {};
+  Map<LibraryInfo, Set<OutputUnitInfo>> libToHunks = {};
+  void register(BasicInfo info) {
+    var unit = info.outputUnit;
+    var lib = _libOf(info);
+    if (lib == null) return;
+    libToHunks.putIfAbsent(lib, () => new Set()).add(unit);
+    hunkMembers
+        .putIfAbsent(unit, () => {})
+        .putIfAbsent(lib, () => [])
+        .add(info);
+  }
+
+  info.functions.forEach(register);
+  info.classes.forEach(register);
+  info.fields.forEach(register);
+  info.closures.forEach(register);
+
+  var dir = Directory.current.path;
+  hunkMembers.forEach((unit, map) {
+    print('Output unit ${unit.name ?? "main"}:');
+    if (unit.name == null || unit.name == 'main') {
+      print('  loaded by default');
+    } else {
+      print('  loaded by importing: ${unit.imports}');
+    }
+
+    print('  contains:');
+    map.forEach((lib, elements) {
+      var uri = lib.uri;
+      var shortUri = (uri.scheme == 'file' && uri.path.startsWith(dir))
+          ? uri.path.substring(dir.length + 1)
+          : '$uri';
+
+      // If the entire library is in one chunk, just report the library name
+      // otherwise report which functions are on this chunk.
+      if (libToHunks[lib].length == 1) {
+        print('     - $shortUri');
+      } else {
+        print('     - $shortUri:');
+        for (var e in elements) {
+          print('       - ${kindToString(e.kind)} ${e.name}');
+        }
+      }
+    });
+    print('');
+  });
+}
+
+_libOf(e) => e is LibraryInfo || e == null ? e : _libOf(e.parent);
diff --git a/pkg/dart2js_info/bin/src/deferred_library_size.dart b/pkg/dart2js_info/bin/src/deferred_library_size.dart
new file mode 100644
index 0000000..2ea7089
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/deferred_library_size.dart
@@ -0,0 +1,90 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This tool gives a breakdown of code size by deferred part in the program.
+library dart2js_info.bin.deferred_library_size;
+
+import 'dart:math';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+/// This tool gives a breakdown of code size by deferred part in the program.
+class DeferredLibrarySize extends Command<void> with PrintUsageException {
+  final String name = "deferred_size";
+  final String description = "Show breakdown of codesize by deferred part.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    // TODO(het): Would be faster to only parse the 'outputUnits' part
+    var info = await infoFromFile(args.first);
+    var sizeByImport = getSizeByImport(info);
+    printSizes(sizeByImport, info.program.size);
+  }
+}
+
+class ImportSize {
+  final String import;
+  final int size;
+
+  const ImportSize(this.import, this.size);
+
+  String toString() {
+    return '$import: $size';
+  }
+}
+
+void printSizes(Map<String, int> sizeByImport, int programSize) {
+  var importSizes = <ImportSize>[];
+  sizeByImport.forEach((import, size) {
+    importSizes.add(new ImportSize(import, size));
+  });
+  // Sort by size, largest first.
+  importSizes.sort((a, b) => b.size - a.size);
+  int longest = importSizes.fold('Percent of code deferred'.length,
+      (longest, importSize) => max(longest, importSize.import.length));
+
+  _printRow(label, data, {int width: 15}) {
+    print('${label.toString().padRight(longest + 1)}'
+        '${data.toString().padLeft(width)}');
+  }
+
+  print('');
+  print('Size by library');
+  print('-' * (longest + 16));
+  for (var importSize in importSizes) {
+    // TODO(het): split into specific and shared size
+    _printRow(importSize.import, importSize.size);
+  }
+  print('-' * (longest + 16));
+
+  var mainChunkSize = sizeByImport['main'];
+  var deferredSize = programSize - mainChunkSize;
+  var percentDeferred = (deferredSize * 100 / programSize).toStringAsFixed(2);
+  _printRow('Main chunk size', mainChunkSize);
+  _printRow('Deferred code size', deferredSize);
+  _printRow('Percent of code deferred', '$percentDeferred%');
+}
+
+Map<String, int> getSizeByImport(AllInfo info) {
+  var sizeByImport = <String, int>{};
+  for (var outputUnit in info.outputUnits) {
+    if (outputUnit.name == 'main' || outputUnit.name == null) {
+      sizeByImport['main'] = outputUnit.size;
+    } else {
+      for (var import in outputUnit.imports) {
+        sizeByImport.putIfAbsent(import, () => 0);
+        sizeByImport[import] += outputUnit.size;
+      }
+    }
+  }
+  return sizeByImport;
+}
diff --git a/pkg/dart2js_info/bin/src/diff.dart b/pkg/dart2js_info/bin/src/diff.dart
new file mode 100644
index 0000000..d013349
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/diff.dart
@@ -0,0 +1,183 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/diff.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+/// A command that computes the diff between two info files.
+class DiffCommand extends Command<void> with PrintUsageException {
+  final String name = "diff";
+  final String description =
+      "See code size differences between two dump-info files.";
+
+  DiffCommand() {
+    argParser.addFlag('summary-only',
+        defaultsTo: false,
+        help: "Show only a summary and hide details of each library");
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException(
+          'Missing arguments, expected two dump-info files to compare');
+      return;
+    }
+
+    var oldInfo = await infoFromFile(args[0]);
+    var newInfo = await infoFromFile(args[1]);
+    var summaryOnly = argResults['summary-only'];
+
+    var diffs = diff(oldInfo, newInfo);
+
+    // Categorize the diffs
+    var adds = <AddDiff>[];
+    var removals = <RemoveDiff>[];
+    var sizeChanges = <SizeDiff>[];
+    var becameDeferred = <DeferredStatusDiff>[];
+    var becameUndeferred = <DeferredStatusDiff>[];
+
+    for (var diff in diffs) {
+      switch (diff.kind) {
+        case DiffKind.add:
+          adds.add(diff as AddDiff);
+          break;
+        case DiffKind.remove:
+          removals.add(diff as RemoveDiff);
+          break;
+        case DiffKind.size:
+          sizeChanges.add(diff as SizeDiff);
+          break;
+        case DiffKind.deferred:
+          var deferredDiff = diff as DeferredStatusDiff;
+          if (deferredDiff.wasDeferredBefore) {
+            becameUndeferred.add(deferredDiff);
+          } else {
+            becameDeferred.add(deferredDiff);
+          }
+          break;
+      }
+    }
+
+    // Sort the changes by the size of the element that changed.
+    for (var diffs in [adds, removals, becameDeferred, becameUndeferred]) {
+      diffs.sort((a, b) => b.info.size - a.info.size);
+    }
+
+    // Sort changes in size by size difference.
+    sizeChanges.sort((a, b) => b.sizeDifference - a.sizeDifference);
+
+    var totalSizes = <List<Diff>, int>{};
+    for (var diffs in [adds, removals, becameDeferred, becameUndeferred]) {
+      var totalSize = 0;
+      for (var diff in diffs) {
+        // Only count diffs from leaf elements so we don't double count
+        // them when we account for class size diff or library size diff.
+        if (diff.info.kind == InfoKind.field ||
+            diff.info.kind == InfoKind.function ||
+            diff.info.kind == InfoKind.closure ||
+            diff.info.kind == InfoKind.typedef) {
+          totalSize += diff.info.size;
+        }
+      }
+      totalSizes[diffs] = totalSize;
+    }
+    var totalSizeChange = 0;
+    for (var sizeChange in sizeChanges) {
+      // Only count diffs from leaf elements so we don't double count
+      // them when we account for class size diff or library size diff.
+      if (sizeChange.info.kind == InfoKind.field ||
+          sizeChange.info.kind == InfoKind.function ||
+          sizeChange.info.kind == InfoKind.closure ||
+          sizeChange.info.kind == InfoKind.typedef) {
+        totalSizeChange += sizeChange.sizeDifference;
+      }
+    }
+    totalSizes[sizeChanges] = totalSizeChange;
+
+    reportSummary(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+        becameUndeferred, totalSizes);
+    if (!summaryOnly) {
+      print('');
+      reportFull(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+          becameUndeferred, totalSizes);
+    }
+  }
+}
+
+void reportSummary(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred,
+    Map<List<Diff>, int> totalSizes) {
+  var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
+  print('total_size_difference $overallSizeDiff');
+
+  print('total_added ${totalSizes[adds]}');
+  print('total_removed ${totalSizes[removals]}');
+  print('total_size_changed ${totalSizes[sizeChanges]}');
+  print('total_became_deferred ${totalSizes[becameDeferred]}');
+  print('total_no_longer_deferred ${totalSizes[becameUndeferred]}');
+}
+
+void reportFull(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred,
+    Map<List<Diff>, int> totalSizes) {
+  // TODO(het): Improve this output. Siggi has good suggestions in
+  // https://github.com/dart-lang/dart2js_info/pull/19
+
+  _section('ADDED', size: totalSizes[adds]);
+  for (var add in adds) {
+    print('${longName(add.info, useLibraryUri: true)}: ${add.info.size} bytes');
+  }
+  print('');
+
+  _section('REMOVED', size: totalSizes[removals]);
+  for (var removal in removals) {
+    print('${longName(removal.info, useLibraryUri: true)}: '
+        '${removal.info.size} bytes');
+  }
+  print('');
+
+  _section('CHANGED SIZE', size: totalSizes[sizeChanges]);
+  for (var sizeChange in sizeChanges) {
+    print('${longName(sizeChange.info, useLibraryUri: true)}: '
+        '${sizeChange.sizeDifference} bytes');
+  }
+  print('');
+
+  _section('BECAME DEFERRED', size: totalSizes[becameDeferred]);
+  for (var diff in becameDeferred) {
+    print('${longName(diff.info, useLibraryUri: true)}: '
+        '${diff.info.size} bytes');
+  }
+  print('');
+
+  _section('NO LONGER DEFERRED', size: totalSizes[becameUndeferred]);
+  for (var diff in becameUndeferred) {
+    print('${longName(diff.info, useLibraryUri: true)}: '
+        '${diff.info.size} bytes');
+  }
+}
+
+void _section(String title, {int size}) {
+  print('$title ($size bytes)');
+  print('=' * 72);
+}
diff --git a/pkg/dart2js_info/bin/src/function_size_analysis.dart b/pkg/dart2js_info/bin/src/function_size_analysis.dart
new file mode 100644
index 0000000..cb2c591
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/function_size_analysis.dart
@@ -0,0 +1,181 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Tool presenting how much each function contributes to the total code.
+library compiler.tool.function_size_analysis;
+
+import 'dart:math' as math;
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/graph.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'usage_exception.dart';
+
+/// Command presenting how much each function contributes to the total code.
+class FunctionSizeCommand extends Command<void> with PrintUsageException {
+  final String name = "function_size";
+  final String description = "See breakdown of code size by function.";
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+    }
+    var info = await infoFromFile(args.first);
+    showCodeDistribution(info);
+  }
+}
+
+showCodeDistribution(AllInfo info,
+    {bool filter(Info info), bool showLibrarySizes: false}) {
+  var realTotal = info.program.size;
+  if (filter == null) filter = (i) => true;
+  var reported = <BasicInfo>[]
+    ..addAll(info.functions.where(filter))
+    ..addAll(info.fields.where(filter));
+
+  // Compute a graph from the dependencies in [info].
+  Graph<Info> graph = graphFromInfo(info);
+
+  // Compute the strongly connected components and calculate their size.
+  var components = graph.computeTopologicalSort();
+  print('total elements: ${graph.nodes.length}');
+  print('total strongly connected components: ${components.length}');
+  var maxS = 0;
+  var totalCount = graph.nodeCount;
+  var minS = totalCount;
+  var nodeData = {};
+  for (var scc in components) {
+    var sccData = new _SccData();
+    maxS = math.max(maxS, scc.length);
+    minS = math.min(minS, scc.length);
+    for (var f in scc) {
+      sccData.size += f.size;
+      for (var g in graph.targetsOf(f)) {
+        var gData = nodeData[g];
+        if (gData != null) sccData.deps.add(gData);
+      }
+    }
+    for (var f in scc) {
+      nodeData[f] = sccData;
+    }
+  }
+  print('scc sizes: min: $minS, max: $maxS, '
+      'avg ${totalCount / components.length}');
+
+  // Compute a dominator tree and calculate the size dominated by each element.
+  // TODO(sigmund): we need a more reliable way to fetch main.
+  var mainMethod = info.functions.firstWhere((f) => f.name == 'main');
+  var dominatorTree = graph.dominatorTree(mainMethod);
+  var dominatedSize = {};
+  helper(n) {
+    int size = n.size;
+    assert(!dominatedSize.containsKey(n));
+    dominatedSize[n] = 0;
+    dominatorTree.targetsOf(n).forEach((m) {
+      size += helper(m);
+    });
+    dominatedSize[n] = size;
+    return size;
+  }
+
+  helper(mainMethod);
+  reported.forEach((n) => dominatedSize.putIfAbsent(n, () => n.size));
+  reported.sort((a, b) =>
+      (dominatedSize[b] + nodeData[b].maxSize) -
+      (dominatedSize[a] + nodeData[a].maxSize));
+
+  if (showLibrarySizes) {
+    print(' --- Results per library ---');
+    var totals = <LibraryInfo, int>{};
+    var longest = 0;
+    reported.forEach((info) {
+      var size = info.size;
+      while (info != null && info is! LibraryInfo) {
+        info = info.parent;
+      }
+      if (info == null) return;
+      LibraryInfo lib = info;
+      totals.putIfAbsent(lib, () => 0);
+      totals[lib] += size;
+      longest = math.max(longest, '${lib.uri}'.length);
+    });
+
+    _showLibHeader(longest + 1);
+    var reportedByLibrary = totals.keys.toList();
+    reportedByLibrary.sort((a, b) => totals[b] - totals[a]);
+    reportedByLibrary.forEach((info) {
+      _showLib('${info.uri}', totals[info], realTotal, longest + 1);
+    });
+  }
+
+  print('\n --- Results per element (field or function) ---');
+  _showElementHeader();
+  reported.forEach((info) {
+    var size = info.size;
+    var min = dominatedSize[info];
+    var max = nodeData[info].maxSize;
+    _showElement(
+        longName(info, useLibraryUri: true), size, min, max, realTotal);
+  });
+}
+
+/// Data associated with an SCC. Used to compute the reachable code size.
+class _SccData {
+  int size = 0;
+  Set deps = new Set();
+  _SccData();
+
+  int _maxSize;
+  int get maxSize {
+    compute();
+    return _maxSize;
+  }
+
+  void compute() {
+    if (_maxSize != null) return;
+    var max = 0;
+    var seen = new Set();
+    helper(n) {
+      if (!seen.add(n)) return;
+      max += n.size;
+      n.deps.forEach(helper);
+    }
+
+    helper(this);
+    _maxSize = max;
+  }
+}
+
+_showLibHeader(int namePadding) {
+  print(' ${pad("Library", namePadding, right: true)}'
+      ' ${pad("bytes", 8)} ${pad("%", 6)}');
+}
+
+_showLib(String msg, int size, int total, int namePadding) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  print(' ${pad(msg, namePadding, right: true)}'
+      ' ${pad(size, 8)} ${pad(percent, 6)}%');
+}
+
+_showElementHeader() {
+  print('${pad("element size", 16)} '
+      '${pad("dominated size", 18)} '
+      '${pad("reachable size", 18)} '
+      'Element identifier');
+}
+
+_showElement(String name, int size, int dominatedSize, int maxSize, int total) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  var minPercent = (dominatedSize * 100 / total).toStringAsFixed(2);
+  var maxPercent = (maxSize * 100 / total).toStringAsFixed(2);
+  print('${pad(size, 8)} ${pad(percent, 6)}% '
+      '${pad(dominatedSize, 10)} ${pad(minPercent, 6)}% '
+      '${pad(maxSize, 10)} ${pad(maxPercent, 6)}% '
+      '$name');
+}
diff --git a/pkg/dart2js_info/bin/src/inject_text.dart b/pkg/dart2js_info/bin/src/inject_text.dart
new file mode 100644
index 0000000..8dfe157
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/inject_text.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+
+/// Modify [info] to fill in the text of code spans.
+///
+/// By default, code spans contains the offsets but omit the text
+/// (`CodeSpan.text` is null). This function reads the output files emitted by
+/// dart2js to extract the code denoted by each span.
+void injectText(AllInfo info) {
+  // Fill the text of each code span. The binary form produced by dart2js
+  // produces code spans, but excludes the orignal text
+  info.functions.forEach((f) {
+    f.code.forEach((span) => _fillSpan(span, f.outputUnit));
+  });
+  info.fields.forEach((f) {
+    f.code.forEach((span) => _fillSpan(span, f.outputUnit));
+  });
+  info.constants.forEach((c) {
+    c.code.forEach((span) => _fillSpan(span, c.outputUnit));
+  });
+}
+
+Map<String, String> _cache = {};
+
+_getContents(OutputUnitInfo unit) => _cache.putIfAbsent(unit.filename, () {
+      var uri = Uri.base.resolve(unit.filename);
+      return new File.fromUri(uri).readAsStringSync();
+    });
+
+_fillSpan(CodeSpan span, OutputUnitInfo unit) {
+  if (span.text == null && span.start != null && span.end != 0) {
+    var contents = _getContents(unit);
+    span.text = contents.substring(span.start, span.end);
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/library_size_split.dart b/pkg/dart2js_info/bin/src/library_size_split.dart
new file mode 100644
index 0000000..1d252c4
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/library_size_split.dart
@@ -0,0 +1,230 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command-line tool to show the size distribution of generated code among
+/// libraries. Libraries can be grouped using regular expressions. You can
+/// specify what regular expressions to use by providing a `grouping.yaml` file.
+/// The format of the `grouping.yaml` file is as follows:
+/// ```yaml
+/// groups:
+/// - { regexp: "package:(foo)/*.dart", name: "group name 1", cluster: 2}
+/// - { regexp: "dart:.*",              name: "group name 2", cluster: 3}
+/// ```
+/// The file should include a single key `groups` containing a list of group
+/// specifications.  Each group is specified by a map of 3 entries:
+///
+///   * regexp (required): a regexp used to match entries that belong to the
+///   group.
+///
+///   * name (optional): the name given to this group in the output table. If
+///   omitted, the name is derived from the regexp as the match's group(1) or
+///   group(0) if no group was defined. When names are omitted the group
+///   specification implicitly defines several groups, one per observed name.
+///
+///   * cluster (optional): a clustering index for how data is shown in a table.
+///   Groups with higher cluster indices are shown later in the table after a
+///   dividing line. If missing, the cluster index defaults to 0.
+///
+/// Here is an example configuration, with comments about what each entry does:
+///
+/// ```yaml
+/// groups:
+/// # This group shows the total size for all libraries that were loaded from
+/// # file:// urls, it is shown in cluster #2, which happens to be the last
+/// # cluster in this example before the totals are shown:
+/// - { name: "Loose files", regexp: "file://.*", cluster: 2}
+///
+/// # This group shows the total size of all code loaded from packages:
+/// - { name: "All packages", regexp: "package:.*", cluster: 2}
+///
+/// # This group shows the total size of all code loaded from core libraries:
+/// - { name: "Core libs", regexp: "dart:.*", cluster: 2}
+///
+/// # This group shows the total size of all libraries in a single package. Here
+/// # we omitted the `name` entry, instead we extract it from the regexp
+/// # directly.  In this case, the name will be the package-name portion of the
+/// # package-url (determined by group(1) of the regexp).
+/// - { regexp: "package:([^/]*)", cluster: 1}
+///
+/// # The next two groups match the entire library url as the name of the group.
+/// - regexp: "package:.*"
+/// - regexp: "dart:.*"
+///
+/// # If your code lives under /my/project/dir, this will match any file loaded
+/// from a file:// url, and we use as a name the relative path to it.
+/// - regexp: "file:///my/project/dir/(.*)"
+///```
+///
+/// This example is very similar to [defaultGrouping].
+library dart2js_info.bin.library_size_split;
+
+import 'dart:io';
+import 'dart:math' show max;
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:yaml/yaml.dart';
+
+import 'usage_exception.dart';
+
+/// Command presenting how much each library contributes to the total code.
+class LibrarySizeCommand extends Command<void> with PrintUsageException {
+  final String name = "library_size";
+  final String description = "See breakdown of code size by library.";
+
+  LibrarySizeCommand() {
+    argParser.addOption('grouping',
+        help: 'YAML file specifying how libraries should be grouped.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 1) {
+      usageException('Missing argument: info.data');
+      print('usage: dart tool/library_size_split.dart '
+          'path-to-info.json [grouping.yaml]');
+      exit(1);
+    }
+
+    var info = await infoFromFile(args.first);
+
+    var groupingFile = argResults['grouping'];
+    var groupingText = groupingFile != null
+        ? new File(groupingFile).readAsStringSync()
+        : defaultGrouping;
+    var groupingYaml = loadYaml(groupingText);
+    var groups = [];
+    for (var group in groupingYaml['groups']) {
+      groups.add(new _Group(
+          group['name'], new RegExp(group['regexp']), group['cluster'] ?? 0));
+    }
+
+    var sizes = {};
+    var allLibs = 0;
+    for (LibraryInfo lib in info.libraries) {
+      allLibs += lib.size;
+      groups.forEach((group) {
+        var match = group.matcher.firstMatch('${lib.uri}');
+        if (match != null) {
+          var name = group.name;
+          if (name == null && match.groupCount > 0) name = match.group(1);
+          if (name == null) name = match.group(0);
+          sizes.putIfAbsent(name, () => new _SizeEntry(name, group.cluster));
+          sizes[name].size += lib.size;
+        }
+      });
+    }
+
+    var allConstants = 0;
+    for (var constant in info.constants) {
+      allConstants += constant.size;
+    }
+
+    var all = sizes.keys.toList();
+    all.sort((a, b) => sizes[a].compareTo(sizes[b]));
+    var realTotal = info.program.size;
+    var longest = 0;
+    var rows = <_Row>[];
+    _addRow(String label, int value) {
+      rows.add(new _Row(label, value));
+      longest = max(longest, label.length);
+    }
+
+    _printRow(_Row row) {
+      if (row is _Divider) {
+        print(' ' + ('-' * (longest + 18)));
+        return;
+      }
+
+      var percent = row.value == realTotal
+          ? '100'
+          : (row.value * 100 / realTotal).toStringAsFixed(2);
+      print(' ${_pad(row.label, longest + 1, right: true)}'
+          ' ${_pad(row.value, 8)} ${_pad(percent, 6)}%');
+    }
+
+    var lastCluster = 0;
+    for (var name in all) {
+      var entry = sizes[name];
+      if (lastCluster < entry.cluster) {
+        rows.add(const _Divider());
+        lastCluster = entry.cluster;
+      }
+      var size = entry.size;
+      _addRow(name, size);
+    }
+    rows.add(const _Divider());
+    _addRow("All libraries (excludes preambles, statics & consts)", allLibs);
+    _addRow("Shared consts", allConstants);
+    _addRow("Total accounted", allLibs + allConstants);
+    _addRow("Program Size", realTotal);
+    rows.forEach(_printRow);
+  }
+}
+
+/// A group defined in the configuration.
+class _Group {
+  /// Name of the group. May be null if the name is derived from the matcher. In
+  /// that case, the name would be group(1) of the matched expression if it
+  /// exist, or group(0) otherwise.
+  final String name;
+
+  /// Regular expression matching members of the group.
+  final RegExp matcher;
+
+  /// Index used to cluster groups together. Useful when the grouping
+  /// configuration describes some coarser groups than orders (e.g. summary of
+  /// packages would be in a different cluster than a summary of libraries).
+  final int cluster;
+
+  _Group(this.name, this.matcher, this.cluster);
+}
+
+class _SizeEntry {
+  final String name;
+  final int cluster;
+  int size = 0;
+
+  _SizeEntry(this.name, this.cluster);
+
+  int compareTo(_SizeEntry other) =>
+      cluster == other.cluster ? size - other.size : cluster - other.cluster;
+}
+
+class _Row {
+  final String label;
+  final int value;
+  const _Row(this.label, this.value);
+}
+
+class _Divider extends _Row {
+  const _Divider() : super('', 0);
+}
+
+_pad(value, n, {bool right: false}) {
+  var s = '$value';
+  if (s.length >= n) return s;
+  var pad = ' ' * (n - s.length);
+  return right ? '$s$pad' : '$pad$s';
+}
+
+/// Default grouping specification that includes an entry per library, and
+/// grouping entries for each package, all packages, all core libs, and loose
+/// files.
+final defaultGrouping = """
+groups:
+- { name: "Loose files", regexp: "file://.*", cluster: 2}
+- { name: "All packages", regexp: "package:.*", cluster: 2}
+- { name: "Core libs", regexp: "dart:.*", cluster: 2}
+# We omitted `name` to extract the group name from the regexp directly.
+# Here the name is the name of the package:
+- { regexp: "package:([^/]*)", cluster: 1}
+# Here the name is the url of the package and dart core libraries:
+- { regexp: "package:.*"}
+- { regexp: "dart:.*"}
+# Here the name is the relative path of loose files:
+- { regexp: "file://${Directory.current.path}/(.*)" }
+""";
diff --git a/pkg/dart2js_info/bin/src/live_code_size_analysis.dart b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
new file mode 100644
index 0000000..77c02fd
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/live_code_size_analysis.dart
@@ -0,0 +1,138 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command-line tool presenting combined information from dump-info and
+/// coverage data.
+///
+/// This tool requires two input files an `.info.json` and a
+/// `.coverage.json` file. To produce these files you need to follow these
+/// steps:
+///
+///   * Compile an app with dart2js using --dump-info and defining the
+///     Dart environment `traceCalls=post`:
+///
+///      DART_VM_OPTIONS="-DtraceCalls=post" dart2js --dump-info main.dart
+///
+///     Because coverage/tracing data is currently experimental, the feature is
+///     not exposed as a flag in dart2js, but you can enable it using the Dart
+///     environment flag. The flag only works dart2js version 1.13.0 or newer.
+///
+///   * Launch the coverage server tool (in this package) to serve up the
+///     Javascript code in your app:
+///
+///      dart tool/coverage_log_server.dart main.dart.js
+///
+///   * (optional) If you have a complex application setup, integrate your
+///     application server to proxy to the log server any GET request for the
+///     .dart.js file and /coverage POST requests that send coverage data.
+///
+///   * Load your app and use it to exercise the entire code.
+///
+///   * Shut down the coverage server (Ctrl-C)
+///
+///   * Finally, run this tool.
+library compiler.tool.live_code_size_analysis;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/io.dart';
+import 'package:dart2js_info/src/util.dart';
+
+import 'function_size_analysis.dart';
+import 'usage_exception.dart';
+
+class LiveCodeAnalysisCommand extends Command<void> with PrintUsageException {
+  final String name = "coverage_analysis";
+  final String description = "Analyze coverage data collected via the"
+      " 'coverage_server' command";
+
+  LiveCodeAnalysisCommand() {
+    argParser.addFlag('verbose',
+        abbr: 'v', negatable: false, help: 'Show verbose details.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException('Missing arguments, expected: info.data coverage.json');
+    }
+    await _liveCodeAnalysis(args[0], args[1], argResults['verbose']);
+  }
+}
+
+_liveCodeAnalysis(infoFile, coverageFile, bool verbose) async {
+  var info = await infoFromFile(infoFile);
+  var coverage = jsonDecode(new File(coverageFile).readAsStringSync());
+
+  int realTotal = info.program.size;
+  int totalLib = info.libraries.fold(0, (n, lib) => n + lib.size);
+
+  int totalCode = 0;
+  int reachableCode = 0;
+  List<Info> unused = [];
+
+  void tallyCode(Info f) {
+    totalCode += f.size;
+
+    var data = coverage[f.coverageId];
+    if (data != null) {
+      // Validate that the name match, it might not match if using a different
+      // version of the app.
+      // TODO(sigmund): use the same name.
+      // TODO(sigmund): inject a time-stamp in the code and dumpinfo and
+      // validate just once.
+      var name = f.name;
+      if (name.contains('.')) name = name.substring(name.lastIndexOf('.') + 1);
+      var otherName = data['name'];
+      if (otherName.contains('.')) {
+        otherName = otherName.substring(otherName.lastIndexOf('.') + 1);
+      }
+      if (otherName != name && otherName != '') {
+        print('invalid coverage: $data for $f, ($name vs $otherName)');
+      }
+      reachableCode += f.size;
+    } else {
+      // we should track more precisely data about inlined functions
+      unused.add(f);
+    }
+  }
+
+  info.functions.forEach(tallyCode);
+  info.fields.forEach(tallyCode);
+
+  _showHeader('', 'bytes', '%');
+  _show('Program size', realTotal, realTotal);
+  _show('Libraries (excluding statics)', totalLib, realTotal);
+  _show('Code (functions + fields)', totalCode, realTotal);
+  _show('Reachable code', reachableCode, realTotal);
+
+  print('');
+  _showHeader('', 'count', '%');
+  var total = info.functions.length + info.fields.length;
+  _show('Functions + fields', total, total);
+  _show('Reachable', total - unused.length, total);
+
+  // TODO(sigmund): support grouping results by package.
+  if (verbose) {
+    print('\nDistribution of code that was not used when running the app:');
+    showCodeDistribution(info,
+        filter: (f) => !coverage.containsKey(f.coverageId) && f.size > 0,
+        showLibrarySizes: true);
+  } else {
+    print('\nUse `-v` to see details about the size of unreachable code');
+  }
+}
+
+_showHeader(String msg, String header1, String header2) {
+  print(' ${pad(msg, 30, right: true)} ${pad(header1, 8)} ${pad(header2, 6)}');
+}
+
+_show(String msg, int size, int total) {
+  var percent = (size * 100 / total).toStringAsFixed(2);
+  print(' ${pad(msg, 30, right: true)} ${pad(size, 8)} ${pad(percent, 6)}%');
+}
diff --git a/pkg/dart2js_info/bin/src/show_inferred_types.dart b/pkg/dart2js_info/bin/src/show_inferred_types.dart
new file mode 100644
index 0000000..521af34
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/show_inferred_types.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Simple script that shows the inferred types of a function.
+library compiler.tool.show_inferred_types;
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/src/util.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'usage_exception.dart';
+
+class ShowInferredTypesCommand extends Command<void> with PrintUsageException {
+  final String name = "show_inferred";
+  final String description = "Show data inferred by dart2js global inference";
+
+  ShowInferredTypesCommand() {
+    argParser.addFlag('long-names',
+        abbr: 'l', negatable: false, help: 'Show long qualified names.');
+  }
+
+  void run() async {
+    var args = argResults.rest;
+    if (args.length < 2) {
+      usageException(
+          'Missing arguments, expected: info.data <function-name-regex>');
+    }
+    _showInferredTypes(args[0], args[1], argResults['long-names']);
+  }
+}
+
+_showInferredTypes(String infoFile, String pattern, bool showLongName) async {
+  var info = await infoFromFile(infoFile);
+  var nameRegExp = new RegExp(pattern);
+  matches(e) => nameRegExp.hasMatch(longName(e));
+
+  bool noResults = true;
+  void showMethods() {
+    var sources = info.functions.where(matches).toList();
+    if (sources.isEmpty) return;
+    noResults = false;
+    for (var s in sources) {
+      var params = s.parameters.map((p) => '${p.name}: ${p.type}').join(', ');
+      var name = showLongName ? longName(s) : s.name;
+      print('$name($params): ${s.returnType}');
+    }
+  }
+
+  void showFields() {
+    var sources = info.fields.where(matches).toList();
+    if (sources.isEmpty) return;
+    noResults = false;
+    for (var s in sources) {
+      var name = showLongName ? longName(s) : s.name;
+      print('$name: ${s.inferredType}');
+    }
+  }
+
+  showMethods();
+  showFields();
+  if (noResults) {
+    print('error: no function or field that matches $pattern was found.');
+    exit(1);
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/text_print.dart b/pkg/dart2js_info/bin/src/text_print.dart
new file mode 100644
index 0000000..a38cd55
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/text_print.dart
@@ -0,0 +1,210 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/util.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Shows the contents of an info file as text.
+class ShowCommand extends Command<void> with PrintUsageException {
+  final String name = "show";
+  final String description = "Show a text representation of the info file.";
+
+  ShowCommand() {
+    argParser.addOption('out',
+        abbr: 'o', help: 'Output file (defauts to stdout)');
+
+    argParser.addFlag('inject-text',
+        negatable: false,
+        help: 'Whether to inject output code snippets.\n\n'
+            'By default dart2js produces code spans, but excludes the text. This\n'
+            'option can be used to embed the text directly in the output.');
+  }
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+    }
+
+    String filename = argResults.rest[0];
+    AllInfo info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+
+    var buffer = new StringBuffer();
+    info.accept(new TextPrinter(buffer, argResults['inject-text']));
+    var outputPath = argResults['out'];
+    if (outputPath == null) {
+      print(buffer);
+    } else {
+      new File(outputPath).writeAsStringSync('$buffer');
+    }
+  }
+}
+
+class TextPrinter implements InfoVisitor<void> {
+  final StringBuffer buffer;
+  final bool injectText;
+
+  TextPrinter(this.buffer, this.injectText);
+
+  int _indent = 0;
+  String get _textIndent => "  " * _indent;
+  void _writeIndentation() {
+    buffer.write(_textIndent);
+  }
+
+  void _writeIndented(String s) {
+    _writeIndentation();
+    buffer.writeln(s.replaceAll('\n', '\n$_textIndent'));
+  }
+
+  void _writeBlock(String s, void f()) {
+    _writeIndented("$s");
+    _indent++;
+    f();
+    _indent--;
+  }
+
+  void visitAll(AllInfo info) {
+    _writeBlock("Summary data", () => visitProgram(info.program));
+    buffer.writeln();
+    _writeBlock("Libraries", () => info.libraries.forEach(visitLibrary));
+    // Note: classes, functions, typedefs, and fields are group;ed by library.
+
+    if (injectText) {
+      _writeBlock("Constants", () => info.constants.forEach(visitConstant));
+    } else {
+      int size = info.constants.fold(0, (n, c) => n + c.size);
+      _writeIndented("All constants: ${_size(size)}");
+    }
+    _writeBlock("Output units", () => info.outputUnits.forEach(visitOutput));
+  }
+
+  void visitProgram(ProgramInfo info) {
+    _writeIndented('main: ${longName(info.entrypoint, useLibraryUri: true)}');
+    _writeIndented('size: ${info.size}');
+    _writeIndented('dart2js-version: ${info.dart2jsVersion}');
+    var features = [];
+    if (info.noSuchMethodEnabled) features.add('no-such-method');
+    if (info.isRuntimeTypeUsed) features.add('runtime-type');
+    if (info.isFunctionApplyUsed) features.add('function-apply');
+    if (info.minified) features.add('minified');
+    if (features.isNotEmpty) {
+      _writeIndented('features: ${features.join(' ')}');
+    }
+  }
+
+  String _size(int size) {
+    if (size < 1024) return "$size b";
+    if (size < (1024 * 1024)) {
+      return "${(size / 1024).toStringAsFixed(2)} Kb ($size b)";
+    }
+    return "${(size / (1024 * 1024)).toStringAsFixed(2)} Mb ($size b)";
+  }
+
+  void visitLibrary(LibraryInfo info) {
+    _writeBlock('${info.uri}: ${_size(info.size)}', () {
+      if (info.topLevelFunctions.isNotEmpty) {
+        _writeBlock('Top-level functions',
+            () => info.topLevelFunctions.forEach(visitFunction));
+        buffer.writeln();
+      }
+      if (info.topLevelVariables.isNotEmpty) {
+        _writeBlock('Top-level variables',
+            () => info.topLevelVariables.forEach(visitField));
+        buffer.writeln();
+      }
+      if (info.classes.isNotEmpty) {
+        _writeBlock('Classes', () => info.classes.forEach(visitClass));
+      }
+      if (info.typedefs.isNotEmpty) {
+        _writeBlock("Typedefs", () => info.typedefs.forEach(visitTypedef));
+        buffer.writeln();
+      }
+      buffer.writeln();
+    });
+  }
+
+  void visitClass(ClassInfo info) {
+    _writeBlock(
+        '${info.name}: ${_size(info.size)} [${info.outputUnit.filename}]', () {
+      if (info.functions.isNotEmpty) {
+        _writeBlock('Methods:', () => info.functions.forEach(visitFunction));
+      }
+      if (info.fields.isNotEmpty) {
+        _writeBlock('Fields:', () => info.fields.forEach(visitField));
+      }
+      if (info.functions.isNotEmpty || info.fields.isNotEmpty) buffer.writeln();
+    });
+  }
+
+  void visitField(FieldInfo info) {
+    _writeBlock('${info.type} ${info.name}: ${_size(info.size)}', () {
+      _writeIndented('inferred type: ${info.inferredType}');
+      if (injectText) _writeBlock("code:", () => _writeCode(info.code));
+      if (info.closures.isNotEmpty) {
+        _writeBlock('Closures:', () => info.closures.forEach(visitClosure));
+      }
+      if (info.uses.isNotEmpty) {
+        _writeBlock('Dependencies:', () => info.uses.forEach(showDependency));
+      }
+    });
+  }
+
+  void visitFunction(FunctionInfo info) {
+    var outputUnitFile = '';
+    if (info.functionKind == FunctionInfo.TOP_LEVEL_FUNCTION_KIND) {
+      outputUnitFile = ' [${info.outputUnit.filename}]';
+    }
+    String params =
+        info.parameters.map((p) => "${p.declaredType} ${p.name}").join(', ');
+    _writeBlock(
+        '${info.returnType} ${info.name}($params): ${_size(info.size)}$outputUnitFile',
+        () {
+      String params = info.parameters.map((p) => "${p.type}").join(', ');
+      _writeIndented('declared type: ${info.type}');
+      _writeIndented(
+          'inferred type: ${info.inferredReturnType} Function($params)');
+      _writeIndented('side effects: ${info.sideEffects}');
+      if (injectText) _writeBlock("code:", () => _writeCode(info.code));
+      if (info.closures.isNotEmpty) {
+        _writeBlock('Closures:', () => info.closures.forEach(visitClosure));
+      }
+      if (info.uses.isNotEmpty) {
+        _writeBlock('Dependencies:', () => info.uses.forEach(showDependency));
+      }
+    });
+  }
+
+  void showDependency(DependencyInfo info) {
+    var mask = info.mask ?? '';
+    _writeIndented('- ${longName(info.target, useLibraryUri: true)} $mask');
+  }
+
+  void visitTypedef(TypedefInfo info) {
+    _writeIndented('${info.name}: ${info.type}');
+  }
+
+  void visitClosure(ClosureInfo info) {
+    _writeBlock('${info.name}', () => visitFunction(info.function));
+  }
+
+  void visitConstant(ConstantInfo info) {
+    _writeBlock('${_size(info.size)}:', () => _writeCode(info.code));
+  }
+
+  void _writeCode(List<CodeSpan> code) {
+    _writeIndented(code.map((c) => c.text).join('\n'));
+  }
+
+  void visitOutput(OutputUnitInfo info) {
+    _writeIndented('${info.filename}: ${_size(info.size)}');
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/to_binary.dart b/pkg/dart2js_info/bin/src/to_binary.dart
new file mode 100644
index 0000000..1d90ed2
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_binary.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js in JSON to binary format.
+class ToBinaryCommand extends Command<void> with PrintUsageException {
+  final String name = "to_binary";
+  final String description = "Convert any info file to binary format.";
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+      exit(1);
+    }
+
+    String filename = argResults.rest[0];
+    AllInfo info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+    String outputFilename = argResults['out'] ?? '$filename.data';
+    var outstream = new File(outputFilename).openWrite();
+    binary.encode(info, outstream);
+    await outstream.done;
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/to_json.dart b/pkg/dart2js_info/bin/src/to_json.dart
new file mode 100644
index 0000000..fff4d34
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_json.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'dart:convert';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js in binary format to JSON.
+class ToJsonCommand extends Command<void> with PrintUsageException {
+  final String name = "to_json";
+  final String description = "Convert any info file to JSON format.";
+
+  ToJsonCommand() {
+    argParser.addFlag('compat-mode',
+        negatable: false,
+        help: 'Whether to generate an older version of the JSON format.\n\n'
+            'By default files are converted to the latest JSON format, but\n'
+            'passing `--compat-mode` will produce a JSON file that may still\n'
+            'work in the visualizer tool at:\n'
+            'https://dart-lang.github.io/dump-info-visualizer/.\n\n'
+            'This option enables `--inject-text` as well, but note that\n'
+            'files produced in this mode do not contain all the data\n'
+            'available in the input file.');
+  }
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+    }
+
+    String filename = argResults.rest[0];
+    bool isBackwardCompatible = argResults['compat-mode'];
+    AllInfo info = await infoFromFile(filename);
+
+    if (isBackwardCompatible || argResults['inject-text']) {
+      injectText(info);
+    }
+
+    var json = new AllInfoJsonCodec(isBackwardCompatible: isBackwardCompatible)
+        .encode(info);
+    String outputFilename = argResults['out'] ?? '$filename.json';
+    new File(outputFilename)
+        .writeAsStringSync(const JsonEncoder.withIndent("  ").convert(json));
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/to_proto.dart b/pkg/dart2js_info/bin/src/to_proto.dart
new file mode 100644
index 0000000..fcbfaa8
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/to_proto.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Command-line tool to convert an info.json file ouputted by dart2js to the
+/// alternative protobuf format.
+
+import 'dart:io';
+
+import 'package:args/command_runner.dart';
+
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:dart2js_info/src/io.dart';
+
+import 'inject_text.dart';
+import 'usage_exception.dart';
+
+/// Converts a dump-info file emitted by dart2js to the proto format
+class ToProtoCommand extends Command<void> with PrintUsageException {
+  final String name = "to_proto";
+  final String description = "Convert any info file to proto format.";
+
+  void run() async {
+    if (argResults.rest.length < 1) {
+      usageException('Missing argument: <input-info>');
+      exit(1);
+    }
+
+    String filename = argResults.rest[0];
+    final info = await infoFromFile(filename);
+    if (argResults['inject-text']) injectText(info);
+    final proto = new AllInfoProtoCodec().encode(info);
+    String outputFilename = argResults['out'] ?? '$filename.pb';
+    final outputFile = new File(outputFilename);
+    await outputFile.writeAsBytes(proto.writeToBuffer(), mode: FileMode.write);
+  }
+}
diff --git a/pkg/dart2js_info/bin/src/usage_exception.dart b/pkg/dart2js_info/bin/src/usage_exception.dart
new file mode 100644
index 0000000..4499da3
--- /dev/null
+++ b/pkg/dart2js_info/bin/src/usage_exception.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'package:args/command_runner.dart';
+
+abstract class PrintUsageException implements Command<void> {
+  // TODO(rnystrom): Use "Never" for the return type when this package is
+  // migrated to null safety.
+  usageException(String message) {
+    print(message);
+    printUsage();
+    exit(1);
+  }
+}
diff --git a/pkg/dart2js_info/bin/tools.dart b/pkg/dart2js_info/bin/tools.dart
new file mode 100644
index 0000000..40495a8
--- /dev/null
+++ b/pkg/dart2js_info/bin/tools.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:args/command_runner.dart';
+
+import 'src/code_deps.dart';
+import 'src/coverage_log_server.dart';
+import 'src/debug_info.dart';
+import 'src/diff.dart';
+import 'src/deferred_library_check.dart';
+import 'src/deferred_library_size.dart';
+import 'src/deferred_library_layout.dart';
+import 'src/convert.dart';
+import 'src/function_size_analysis.dart';
+import 'src/library_size_split.dart';
+import 'src/live_code_size_analysis.dart';
+import 'src/show_inferred_types.dart';
+import 'src/text_print.dart';
+
+/// Entrypoint to run all dart2js_info tools.
+void main(args) {
+  var commandRunner = new CommandRunner("dart2js_info",
+      "collection of tools to digest the output of dart2js's --dump-info")
+    ..addCommand(new CodeDepsCommand())
+    ..addCommand(new CoverageLogServerCommand())
+    ..addCommand(new DebugCommand())
+    ..addCommand(new DiffCommand())
+    ..addCommand(new DeferredLibraryCheck())
+    ..addCommand(new DeferredLibrarySize())
+    ..addCommand(new DeferredLibraryLayout())
+    ..addCommand(new ConvertCommand())
+    ..addCommand(new FunctionSizeCommand())
+    ..addCommand(new LibrarySizeCommand())
+    ..addCommand(new LiveCodeAnalysisCommand())
+    ..addCommand(new ShowInferredTypesCommand())
+    ..addCommand(new ShowCommand());
+  commandRunner.run(args);
+}
diff --git a/pkg/dart2js_info/info.proto b/pkg/dart2js_info/info.proto
new file mode 100644
index 0000000..b8e8f09
--- /dev/null
+++ b/pkg/dart2js_info/info.proto
@@ -0,0 +1,267 @@
+syntax = "proto3";
+
+option go_package = "dart2js_info";
+
+package dart2js_info.proto;
+
+message DependencyInfoPB {
+  /** The dependency element's serialized_id, references as FunctionInfo or FieldInfo. */
+  string target_id = 1;
+
+  /** Either a selector mask indicating how this is used, or 'inlined'. */
+  string mask = 2;
+}
+
+/** The entire information produced when compiling a program. */
+message AllInfoPB {
+  /** Summary information about the program. */
+  ProgramInfoPB program = 1;
+
+  /** All the recorded information about elements processed by the compiler. */
+  map<string, InfoPB> all_infos = 2;
+
+  /** Details about all deferred imports and what files would be loaded when the import is resolved. */
+  repeated LibraryDeferredImportsPB deferred_imports = 3;
+}
+
+/*
+ * Common interface to many pieces of information generated by the dart2js
+ * compiler that are directly associated with an element (compilation unit,
+ * library, class, function, or field).
+ */
+message InfoPB {
+  /** Name of the element associated with this info. */
+  string name = 1;
+
+  /** An id to uniquely identify this info among infos of the same kind. */
+  int32 id = 2;
+
+  /** A globally unique id which combines kind and id together. */
+  string serialized_id = 3;
+
+  /** Id used by the compiler when instrumenting code for code coverage. */
+  string coverage_id = 4;
+
+  /** Bytes used in the generated code for the corresponding element. */
+  int32 size = 5;
+
+  /** The serialized_id of the enclosing element. */
+  string parent_id = 6;
+
+  /** How does this function or field depend on others. */
+  repeated DependencyInfoPB uses = 7;
+
+  /** The serialized_id of the output unit the element is generated into. */
+  string output_unit_id = 8;
+
+  /** Reserved tags for future common fields. */
+  reserved 9 to 99;
+
+  /** The concrete info type. */
+  oneof concrete {
+    /** Information about a library element. */
+    LibraryInfoPB library_info = 100;
+
+    /** Information about a class element. */
+    ClassInfoPB class_info = 101;
+
+    /** Information about a function element. */
+    FunctionInfoPB function_info = 102;
+
+    /** Information about a field element. */
+    FieldInfoPB field_info = 103;
+
+    /** Information about a constant element. */
+    ConstantInfoPB constant_info = 104;
+
+    /** Information about an output unit element. */
+    OutputUnitInfoPB output_unit_info = 105;
+
+    /** Information about a typedef element. */
+    TypedefInfoPB typedef_info = 106;
+
+    /** Information about a closure element. */
+    ClosureInfoPB closure_info = 107;
+  }
+}
+
+/** General metadata about the dart2js invocation. */
+message ProgramInfoPB {
+  /** serialized_id for the entrypoint FunctionInfo. */
+  string entrypoint_id = 1;
+
+  /** The overall size of the dart2js binary. */
+  int32 size = 2;
+
+  /** The version of dart2js used to compile the program. */
+  string dart2js_version = 3;
+
+  /** The time at which the compilation was performed in microseconds since epoch. */
+  int64 compilation_moment = 4;
+
+  /** The amount of time spent compiling the program in microseconds. */
+  int64 compilation_duration = 5;
+
+  /** The amount of time spent converting the info to protobuf in microseconds. */
+  int64 to_proto_duration = 6;
+
+  /** The amount of time spent writing out the serialized info in microseconds. */
+  int64 dump_info_duration = 7;
+
+  /** true if noSuchMethod is used. */
+  bool no_such_method_enabled = 8;
+
+  /** True if Object.runtimeType is used. */
+  bool is_runtime_type_used = 9;
+
+  /** True if dart:isolate library is used. */
+  bool is_isolate_used = 10;
+
+  /** True if Function.apply is used. */
+  bool is_function_apply_used = 11;
+
+  /** True if dart:mirrors features are used. */
+  bool is_mirrors_used = 12;
+
+  /** Whether the resulting dart2js binary is minified. */
+  bool minified = 13;
+}
+
+/** Info associated with a library element. */
+message LibraryInfoPB {
+  /** The canonical uri that identifies the library. */
+  string uri = 1;
+
+  /** The serialized_ids of all FunctionInfo, FieldInfo, ClassInfo and TypedefInfo elements that are defined in the library. */
+  repeated string children_ids = 2;
+}
+
+/**
+ * Information about an output unit. Normally there is just one for the entire
+ * program unless the application uses deferred imports, in which case there
+ * would be an additional output unit per deferred chunk.
+ */
+message OutputUnitInfoPB {
+  /** The deferred imports that will load this output unit. */
+  repeated string imports = 1;
+}
+
+/** Information about a class element. */
+message ClassInfoPB {
+  /** Whether the class is abstract. */
+  bool is_abstract = 1;
+
+  /** The serialized_ids of all FunctionInfo and FieldInfo elements defined in the class. */
+  repeated string children_ids = 2;
+}
+
+/** Information about a constant value. */
+message ConstantInfoPB {
+  /** The actual generated code for the constant. */
+  string code = 1;
+}
+
+/** Information about a field element. */
+message FieldInfoPB {
+  /** The type of the field. */
+  string type = 1;
+
+  /** The type inferred by dart2js's whole program analysis. */
+  string inferred_type = 2;
+
+  /** The serialized_ids of all ClosureInfo elements nested in the field initializer. */
+  repeated string children_ids = 3;
+
+  /** The actual generated code for the field. */
+  string code = 4;
+
+  /** Whether the field is a const declaration. */
+  bool is_const = 5;
+
+  /** When isConst is true, the serialized_id of the ConstantInfo initializer expression. */
+  string initializer_id = 6;
+}
+
+/** Information about a typedef declaration. */
+message TypedefInfoPB {
+  /** The declared type. */
+  string type = 1;
+}
+
+/** Available function modifiers. */
+message FunctionModifiersPB {
+  /** Whether the function is declared as static. */
+  bool is_static = 1;
+
+  /** Whether the function is declared as const. */
+  bool is_const = 2;
+
+  /** Whether the function is a factory constructor. */
+  bool is_factory = 3;
+
+  /** Whether the function is declared as extern. */
+  bool is_external = 4;
+}
+
+/** Information about a function parameter. */
+message ParameterInfoPB {
+  string name = 1;
+  string type = 2;
+  string declared_type = 3;
+}
+
+/** Information about a function or method. */
+message FunctionInfoPB {
+  /** Modifiers applied to the function. */
+  FunctionModifiersPB function_modifiers = 1;
+
+  /** serialized_ids of any ClosureInfo elements declared in the function. */
+  repeated string children_ids = 2;
+
+  /** The declared return type. */
+  string return_type = 3;
+
+  /** The inferred return type. */
+  string inferred_return_type = 4;
+
+  /** Name and type information for each parameter. */
+  repeated ParameterInfoPB parameters = 5;
+
+  /** Side-effects of the function. */
+  string side_effects = 6;
+
+  /** How many function calls were inlined into the function. */
+  int32 inlined_count = 7;
+
+  /** The actual generated code. */
+  string code = 8;
+
+  /** Measurements collected for this function. */
+  reserved 9;
+}
+
+/** Information about a closure, also known as a local function. */
+message ClosureInfoPB {
+  /** serialized_id of the FunctionInfo wrapped by this closure. */
+  string function_id = 1;
+}
+
+message DeferredImportPB {
+  /** The prefix assigned to the deferred import. */
+  string prefix = 1;
+
+  /** The list of filenames loaded by the import. */
+  repeated string files = 2;
+}
+
+/** Information about deferred imports within a dart library. */
+message LibraryDeferredImportsPB {
+  /** The uri of the library which makes the deferred import. */
+  string library_uri = 1;
+
+  /** The name of the library, or "<unnamed>" if it is unnamed. */
+  string library_name = 2;
+
+  /** The individual deferred imports within the library. */
+  repeated DeferredImportPB imports = 3;
+}
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
new file mode 100644
index 0000000..382c37e
--- /dev/null
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -0,0 +1,459 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Info serialization to a binary form.
+///
+/// Unlike the JSON codec, this serialization is designed to be streamed.
+
+import 'dart:convert';
+
+import 'src/binary/sink.dart';
+import 'src/binary/source.dart';
+import 'info.dart';
+
+void encode(AllInfo info, Sink<List<int>> sink) {
+  new BinaryPrinter(new BinarySink(sink)).visitAll(info);
+}
+
+AllInfo decode(List<int> data) {
+  return new BinaryReader(new BinarySource(data)).readAll();
+}
+
+class BinaryPrinter implements InfoVisitor<void> {
+  final BinarySink sink;
+
+  BinaryPrinter(this.sink);
+
+  void writeDate(DateTime date) {
+    sink.writeString(date.toIso8601String());
+  }
+
+  void writeDuration(Duration duration) {
+    sink.writeInt(duration.inMicroseconds);
+  }
+
+  void writeInfoWithKind(Info info) {
+    sink.writeEnum(info.kind);
+    info.accept(this);
+  }
+
+  void visitAll(AllInfo info) {
+    sink.writeInt(info.version);
+    sink.writeInt(info.minorVersion);
+    sink.writeList(info.libraries, visitLibrary);
+    // TODO(sigmund): synthesize the following lists instead of serializing the
+    // values again.
+    sink.writeList(info.classes, visitClass);
+    sink.writeList(info.functions, visitFunction);
+    sink.writeList(info.typedefs, visitTypedef);
+    sink.writeList(info.fields, visitField);
+    sink.writeList(info.constants, visitConstant);
+    sink.writeList(info.closures, visitClosure);
+
+    void writeDependencies(CodeInfo info) {
+      sink.writeList(info.uses, _writeDependencyInfo);
+    }
+
+    info.fields.forEach(writeDependencies);
+    info.functions.forEach(writeDependencies);
+
+    sink.writeInt(info.dependencies.length);
+    info.dependencies.forEach((Info key, List<Info> values) {
+      writeInfoWithKind(key);
+      sink.writeList(values, writeInfoWithKind);
+    });
+    sink.writeList(info.outputUnits, visitOutput);
+    sink.writeString(jsonEncode(info.deferredFiles));
+    visitProgram(info.program);
+    sink.close();
+  }
+
+  void visitProgram(ProgramInfo info) {
+    visitFunction(info.entrypoint);
+    sink.writeInt(info.size);
+    sink.writeStringOrNull(info.dart2jsVersion);
+    writeDate(info.compilationMoment);
+    writeDuration(info.compilationDuration);
+    // Note: we don't record the 'toJsonDuration' field. Consider deleting it?
+    writeDuration(info.dumpInfoDuration);
+    sink.writeBool(info.noSuchMethodEnabled);
+    sink.writeBool(info.isRuntimeTypeUsed);
+    sink.writeBool(info.isIsolateInUse);
+    sink.writeBool(info.isFunctionApplyUsed);
+    sink.writeBool(info.isMirrorsUsed);
+    sink.writeBool(info.minified);
+  }
+
+  void _visitBasicInfo(BasicInfo info) {
+    sink.writeStringOrNull(info.name);
+    sink.writeInt(info.size);
+    sink.writeStringOrNull(info.coverageId);
+    _writeOutputOrNull(info.outputUnit);
+    // Note: parent-pointers are not serialized, they get deduced during deserialization.
+  }
+
+  void visitLibrary(LibraryInfo library) {
+    sink.writeCached(library, (LibraryInfo info) {
+      sink.writeUri(info.uri);
+      _visitBasicInfo(info);
+      sink.writeList(info.topLevelFunctions, visitFunction);
+      sink.writeList(info.topLevelVariables, visitField);
+      sink.writeList(info.classes, visitClass);
+      sink.writeList(info.typedefs, visitTypedef);
+    });
+  }
+
+  void visitClass(ClassInfo cls) {
+    sink.writeCached(cls, (ClassInfo info) {
+      _visitBasicInfo(info);
+      sink.writeBool(info.isAbstract);
+      sink.writeList(info.fields, visitField);
+      sink.writeList(info.functions, visitFunction);
+    });
+  }
+
+  void visitField(FieldInfo field) {
+    sink.writeCached(field, (FieldInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.closures, visitClosure);
+      sink.writeString(info.inferredType);
+      sink.writeList(info.code, _visitCodeSpan);
+      sink.writeString(info.type);
+      sink.writeBool(info.isConst);
+      if (info.isConst) {
+        _writeConstantOrNull(info.initializer);
+      }
+    });
+  }
+
+  _visitCodeSpan(CodeSpan code) {
+    sink.writeIntOrNull(code.start);
+    sink.writeIntOrNull(code.end);
+    sink.writeStringOrNull(code.text);
+  }
+
+  void _writeConstantOrNull(ConstantInfo info) {
+    sink.writeBool(info != null);
+    if (info != null) {
+      visitConstant(info);
+    }
+  }
+
+  void visitConstant(ConstantInfo constant) {
+    sink.writeCached(constant, (ConstantInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.code, _visitCodeSpan);
+    });
+  }
+
+  void _visitFunctionModifiers(FunctionModifiers mods) {
+    int value = 0;
+    if (mods.isStatic) value |= _staticMask;
+    if (mods.isConst) value |= _constMask;
+    if (mods.isFactory) value |= _factoryMask;
+    if (mods.isExternal) value |= _externalMask;
+    sink.writeInt(value);
+  }
+
+  void _visitParameterInfo(ParameterInfo info) {
+    sink.writeString(info.name);
+    sink.writeString(info.type);
+    sink.writeString(info.declaredType);
+  }
+
+  void visitFunction(FunctionInfo function) {
+    sink.writeCached(function, (FunctionInfo info) {
+      _visitBasicInfo(info);
+      sink.writeList(info.closures, visitClosure);
+      _visitFunctionModifiers(info.modifiers);
+      sink.writeString(info.returnType);
+      sink.writeString(info.inferredReturnType);
+      sink.writeList(info.parameters, _visitParameterInfo);
+      sink.writeString(info.sideEffects);
+      sink.writeIntOrNull(info.inlinedCount);
+      sink.writeList(info.code, _visitCodeSpan);
+      sink.writeString(info.type);
+    });
+  }
+
+  void _writeDependencyInfo(DependencyInfo info) {
+    writeInfoWithKind(info.target);
+    sink.writeStringOrNull(info.mask);
+  }
+
+  void visitClosure(ClosureInfo closure) {
+    sink.writeCached(closure, (ClosureInfo info) {
+      _visitBasicInfo(info);
+      visitFunction(info.function);
+    });
+  }
+
+  void visitTypedef(TypedefInfo typedef) {
+    sink.writeCached(typedef, (TypedefInfo info) {
+      _visitBasicInfo(info);
+      sink.writeString(info.type);
+    });
+  }
+
+  void _writeOutputOrNull(OutputUnitInfo info) {
+    sink.writeBool(info != null);
+    if (info != null) {
+      visitOutput(info);
+    }
+  }
+
+  void visitOutput(OutputUnitInfo output) {
+    sink.writeCached(output, (OutputUnitInfo info) {
+      _visitBasicInfo(info);
+      sink.writeStringOrNull(info.filename);
+      sink.writeList(info.imports, sink.writeString);
+    });
+  }
+}
+
+class BinaryReader {
+  final BinarySource source;
+  BinaryReader(this.source);
+
+  DateTime readDate() {
+    return DateTime.parse(source.readString());
+  }
+
+  Duration readDuration() {
+    return new Duration(microseconds: source.readInt());
+  }
+
+  Info readInfoWithKind() {
+    InfoKind kind = source.readEnum(InfoKind.values);
+    switch (kind) {
+      case InfoKind.library:
+        return readLibrary();
+      case InfoKind.clazz:
+        return readClass();
+      case InfoKind.function:
+        return readFunction();
+      case InfoKind.field:
+        return readField();
+      case InfoKind.constant:
+        return readConstant();
+      case InfoKind.outputUnit:
+        return readOutput();
+      case InfoKind.typedef:
+        return readTypedef();
+      case InfoKind.closure:
+        return readClosure();
+    }
+    return null;
+  }
+
+  AllInfo readAll() {
+    var info = new AllInfo();
+    int version = source.readInt();
+    int minorVersion = source.readInt();
+    if (info.version != version || info.minorVersion != minorVersion) {
+      print("warning: data was encoded with format version "
+          "$version.$minorVersion, but decoded with "
+          "${info.version}.${info.minorVersion}");
+    }
+    info.libraries = source.readList(readLibrary);
+    info.classes = source.readList(readClass);
+    info.functions = source.readList(readFunction);
+    info.typedefs = source.readList(readTypedef);
+    info.fields = source.readList(readField);
+    info.constants = source.readList(readConstant);
+    info.closures = source.readList(readClosure);
+
+    void readDependencies(CodeInfo info) {
+      info.uses = source.readList(_readDependencyInfo);
+    }
+
+    info.fields.forEach(readDependencies);
+    info.functions.forEach(readDependencies);
+
+    int dependenciesTotal = source.readInt();
+    while (dependenciesTotal > 0) {
+      Info key = readInfoWithKind();
+      List<Info> values = source.readList(readInfoWithKind);
+      info.dependencies[key] = values;
+      dependenciesTotal--;
+    }
+
+    info.outputUnits = source.readList(readOutput);
+
+    Map<String, Map<String, dynamic>> map =
+        jsonDecode(source.readString()).cast<String, Map<String, dynamic>>();
+    for (final library in map.values) {
+      if (library['imports'] != null) {
+        // The importMap needs to be typed as <String, List<String>>, but the
+        // json parser produces <String, dynamic>.
+        final importMap = library['imports'] as Map<String, dynamic>;
+        importMap.forEach((prefix, files) {
+          importMap[prefix] = (files as List<dynamic>).cast<String>();
+        });
+        library['imports'] = importMap.cast<String, List<String>>();
+      }
+    }
+    info.deferredFiles = map;
+    info.program = readProgram();
+    return info;
+  }
+
+  ProgramInfo readProgram() {
+    var info = new ProgramInfo();
+    info.entrypoint = readFunction();
+    info.size = source.readInt();
+    info.dart2jsVersion = source.readStringOrNull();
+    info.compilationMoment = readDate();
+    info.compilationDuration = readDuration();
+    info.toJsonDuration = new Duration(microseconds: 0);
+    info.dumpInfoDuration = readDuration();
+    info.noSuchMethodEnabled = source.readBool();
+    info.isRuntimeTypeUsed = source.readBool();
+    info.isIsolateInUse = source.readBool();
+    info.isFunctionApplyUsed = source.readBool();
+    info.isMirrorsUsed = source.readBool();
+    info.minified = source.readBool();
+    return info;
+  }
+
+  void _readBasicInfo(BasicInfo info) {
+    info.name = source.readStringOrNull();
+    info.size = source.readInt();
+    info.coverageId = source.readStringOrNull();
+    info.outputUnit = _readOutputOrNull();
+    // Note: parent pointers are added when deserializing parent nodes.
+  }
+
+  LibraryInfo readLibrary() => source.readCached<LibraryInfo>(() {
+        LibraryInfo info = new LibraryInfo.internal();
+        info.uri = source.readUri();
+        _readBasicInfo(info);
+        info.topLevelFunctions = source.readList(readFunction);
+        info.topLevelVariables = source.readList(readField);
+        info.classes = source.readList(readClass);
+        info.typedefs = source.readList(readTypedef);
+
+        setParent(BasicInfo child) => child.parent = info;
+        info.topLevelFunctions.forEach(setParent);
+        info.topLevelVariables.forEach(setParent);
+        info.classes.forEach(setParent);
+        info.typedefs.forEach(setParent);
+        return info;
+      });
+
+  ClassInfo readClass() => source.readCached<ClassInfo>(() {
+        ClassInfo info = new ClassInfo.internal();
+        _readBasicInfo(info);
+        info.isAbstract = source.readBool();
+        info.fields = source.readList(readField);
+        info.functions = source.readList(readFunction);
+
+        setParent(BasicInfo child) => child.parent = info;
+        info.fields.forEach(setParent);
+        info.functions.forEach(setParent);
+        return info;
+      });
+
+  FieldInfo readField() => source.readCached<FieldInfo>(() {
+        FieldInfo info = new FieldInfo.internal();
+        _readBasicInfo(info);
+        info.closures = source.readList(readClosure);
+        info.inferredType = source.readString();
+        info.code = source.readList(_readCodeSpan);
+        info.type = source.readString();
+        info.isConst = source.readBool();
+        if (info.isConst) {
+          info.initializer = _readConstantOrNull();
+        }
+        info.closures.forEach((c) => c.parent = info);
+        return info;
+      });
+
+  CodeSpan _readCodeSpan() {
+    return new CodeSpan()
+      ..start = source.readIntOrNull()
+      ..end = source.readIntOrNull()
+      ..text = source.readStringOrNull();
+  }
+
+  ConstantInfo _readConstantOrNull() {
+    bool hasOutput = source.readBool();
+    if (hasOutput) return readConstant();
+    return null;
+  }
+
+  ConstantInfo readConstant() => source.readCached<ConstantInfo>(() {
+        ConstantInfo info = new ConstantInfo.internal();
+        _readBasicInfo(info);
+        info.code = source.readList(_readCodeSpan);
+        return info;
+      });
+
+  FunctionModifiers _readFunctionModifiers() {
+    int value = source.readInt();
+    return new FunctionModifiers(
+        isStatic: value & _staticMask != 0,
+        isConst: value & _constMask != 0,
+        isFactory: value & _factoryMask != 0,
+        isExternal: value & _externalMask != 0);
+  }
+
+  ParameterInfo _readParameterInfo() {
+    return new ParameterInfo(
+        source.readString(), source.readString(), source.readString());
+  }
+
+  FunctionInfo readFunction() => source.readCached<FunctionInfo>(() {
+        FunctionInfo info = new FunctionInfo.internal();
+        _readBasicInfo(info);
+        info.closures = source.readList(readClosure);
+        info.modifiers = _readFunctionModifiers();
+        info.returnType = source.readString();
+        info.inferredReturnType = source.readString();
+        info.parameters = source.readList(_readParameterInfo);
+        info.sideEffects = source.readString();
+        info.inlinedCount = source.readIntOrNull();
+        info.code = source.readList(_readCodeSpan);
+        info.type = source.readString();
+        info.closures.forEach((c) => c.parent = info);
+        return info;
+      });
+
+  DependencyInfo _readDependencyInfo() =>
+      new DependencyInfo(readInfoWithKind(), source.readStringOrNull());
+
+  ClosureInfo readClosure() => source.readCached<ClosureInfo>(() {
+        ClosureInfo info = new ClosureInfo.internal();
+        _readBasicInfo(info);
+        info.function = readFunction();
+        info.function.parent = info;
+        return info;
+      });
+
+  TypedefInfo readTypedef() => source.readCached<TypedefInfo>(() {
+        TypedefInfo info = new TypedefInfo.internal();
+        _readBasicInfo(info);
+        info.type = source.readString();
+        return info;
+      });
+
+  OutputUnitInfo _readOutputOrNull() {
+    bool hasOutput = source.readBool();
+    if (hasOutput) return readOutput();
+    return null;
+  }
+
+  OutputUnitInfo readOutput() => source.readCached<OutputUnitInfo>(() {
+        OutputUnitInfo info = new OutputUnitInfo.internal();
+        _readBasicInfo(info);
+        info.filename = source.readStringOrNull();
+        info.imports = source.readList(source.readString);
+        return info;
+      });
+}
+
+const int _staticMask = 1 << 3;
+const int _constMask = 1 << 2;
+const int _factoryMask = 1 << 1;
+const int _externalMask = 1 << 0;
diff --git a/pkg/dart2js_info/lib/deferred_library_check.dart b/pkg/dart2js_info/lib/deferred_library_check.dart
new file mode 100644
index 0000000..8a7e98b
--- /dev/null
+++ b/pkg/dart2js_info/lib/deferred_library_check.dart
@@ -0,0 +1,177 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// This tool checks that the output from dart2js meets a given specification,
+/// given in a YAML file. The format of the YAML file is:
+///
+///     main:
+///       include:
+///         - some_package
+///         - other_package
+///
+///     foo:
+///       include:
+///         - foo
+///         - bar
+///
+///     baz:
+///       include:
+///         - baz
+///         - quux
+///       exclude:
+///         - zardoz
+///
+/// The YAML file consists of a list of declarations, one for each deferred
+/// part expected in the output. At least one of these parts must be named
+/// "main"; this is the main part that contains the program entrypoint. Each
+/// top-level part contains a list of package names that are expected to be
+/// contained in that part, a list of package names that are expected to be in
+/// another part, or both. For instance, in the example YAML above the part
+/// named "baz" is expected to contain the packages "baz" and "quux" and not to
+/// contain the package "zardoz".
+///
+/// The names for parts given in the specification YAML file (besides "main")
+/// are the same as the name given to the deferred import in the dart file. For
+/// instance, if you have `import 'package:foo/bar.dart' deferred as baz;` in
+/// your dart file, then the corresponding name in the specification file is
+/// 'baz'.
+library dart2js_info.deferred_library_check;
+
+import 'info.dart';
+
+List<ManifestComplianceFailure> checkDeferredLibraryManifest(
+    AllInfo info, Map manifest) {
+  var includedPackages = new Map<String, Set<String>>();
+  var excludedPackages = new Map<String, Set<String>>();
+  for (var part in manifest.keys) {
+    for (var package in manifest[part]['include'] ?? []) {
+      (includedPackages[part] ??= {}).add(package);
+    }
+    for (var package in manifest[part]['exclude'] ?? []) {
+      (excludedPackages[part] ??= {}).add(package);
+    }
+  }
+
+  // There are 2 types of parts that are valid to mention in the specification
+  // file. These are the main part and directly imported deferred parts. The
+  // main part is always named 'main'; the directly imported deferred parts are
+  // the outputUnits whose list of 'imports' contains a single import. If the
+  // part is shared, it will have more than one import since it will include the
+  // imports of all the top-level deferred parts that will load the shared part.
+  List<String> validParts = ['main']..addAll(info.outputUnits
+      .where((unit) => unit.imports.length == 1)
+      .map((unit) => unit.imports.single));
+  List<String> mentionedParts = []
+    ..addAll(includedPackages.keys)
+    ..addAll(excludedPackages.keys);
+  var partNameFailures = <_InvalidPartName>[];
+  for (var part in mentionedParts) {
+    if (!validParts.contains(part)) {
+      partNameFailures.add(new _InvalidPartName(part, validParts));
+    }
+  }
+  if (partNameFailures.isNotEmpty) {
+    return partNameFailures;
+  }
+
+  var mentionedPackages = {
+    for (var values in includedPackages.values) ...values,
+    for (var values in excludedPackages.values) ...values
+  };
+  var actualIncludedPackages = new Map<String, Set<String>>();
+
+  var failures = <ManifestComplianceFailure>[];
+
+  checkInfo(BasicInfo info) {
+    if (info.size == 0) return;
+    var lib = _getLibraryOf(info);
+    if (lib != null && _isPackageUri(lib.uri)) {
+      var packageName = _getPackageName(lib.uri);
+      if (!mentionedPackages.contains(packageName)) return;
+      var containingParts = <String>[];
+      if (info.outputUnit.name == 'main') {
+        containingParts.add('main');
+      } else {
+        containingParts.addAll(info.outputUnit.imports);
+      }
+      for (var part in containingParts) {
+        (actualIncludedPackages[part] ??= {}).add(packageName);
+        if (excludedPackages[part].contains(packageName)) {
+          failures
+              .add(new _PartContainedExcludedPackage(part, packageName, info));
+        }
+      }
+    }
+  }
+
+  info.functions.forEach(checkInfo);
+  info.fields.forEach(checkInfo);
+
+  includedPackages.forEach((part, packages) {
+    for (var package in packages) {
+      if (!actualIncludedPackages.containsKey(part) ||
+          !actualIncludedPackages[part].contains(package)) {
+        failures.add(new _PartDidNotContainPackage(part, package));
+      }
+    }
+  });
+  return failures;
+}
+
+LibraryInfo _getLibraryOf(Info info) {
+  var current = info;
+  while (current is! LibraryInfo) {
+    if (current == null) {
+      return null;
+    }
+    current = current.parent;
+  }
+  return current;
+}
+
+bool _isPackageUri(Uri uri) => uri.scheme == 'package';
+
+String _getPackageName(Uri uri) {
+  assert(_isPackageUri(uri));
+  return uri.pathSegments.first;
+}
+
+class ManifestComplianceFailure {
+  const ManifestComplianceFailure();
+}
+
+class _InvalidPartName extends ManifestComplianceFailure {
+  final String part;
+  final List<String> validPartNames;
+  const _InvalidPartName(this.part, this.validPartNames);
+
+  String toString() {
+    return 'Manifest file declares invalid part "$part". '
+        'Valid part names are: $validPartNames';
+  }
+}
+
+class _PartContainedExcludedPackage extends ManifestComplianceFailure {
+  final String part;
+  final String package;
+  final BasicInfo info;
+  const _PartContainedExcludedPackage(this.part, this.package, this.info);
+
+  String toString() {
+    return 'Part "$part" was specified to exclude package "$package" but it '
+        'actually contains ${kindToString(info.kind)} "${info.name}" which '
+        'is from package "$package"';
+  }
+}
+
+class _PartDidNotContainPackage extends ManifestComplianceFailure {
+  final String part;
+  final String package;
+  const _PartDidNotContainPackage(this.part, this.package);
+
+  String toString() {
+    return 'Part "$part" was specified to include package "$package" but it '
+        'does not contain any elements from that package.';
+  }
+}
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
new file mode 100644
index 0000000..d2019ca
--- /dev/null
+++ b/pkg/dart2js_info/lib/info.dart
@@ -0,0 +1,549 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Data produced by dart2js when run with the `--dump-info` flag.
+library dart2js_info.info;
+
+/// Common interface to many pieces of information generated by the dart2js
+/// compiler that are directly associated with an element (compilation unit,
+/// library, class, function, or field).
+abstract class Info {
+  /// An identifier for the kind of information.
+  InfoKind get kind;
+
+  /// Name of the element associated with this info.
+  String name;
+
+  /// Id used by the compiler when instrumenting code for code coverage.
+  // TODO(sigmund): It would be nice if we could use the same id for
+  // serialization and for coverage. Could we unify them?
+  String coverageId;
+
+  /// Bytes used in the generated code for the corresponding element.
+  int size;
+
+  /// Info of the enclosing element.
+  Info parent;
+
+  T accept<T>(InfoVisitor<T> visitor);
+}
+
+/// Common information used for most kind of elements.
+// TODO(sigmund): add more:
+//  - inputSize: bytes used in the Dart source program
+abstract class BasicInfo implements Info {
+  final InfoKind kind;
+
+  String coverageId;
+  int size;
+  Info parent;
+
+  String name;
+
+  /// If using deferred libraries, where the element associated with this info
+  /// is generated.
+  OutputUnitInfo outputUnit;
+
+  BasicInfo(this.kind, this.name, this.outputUnit, this.size, this.coverageId);
+
+  BasicInfo.internal(this.kind);
+
+  String toString() => '$kind $name [$size]';
+}
+
+/// Info associated with elements containing executable code (like fields and
+/// methods)
+abstract class CodeInfo implements Info {
+  /// How does this function or field depend on others.
+  List<DependencyInfo> uses = [];
+}
+
+/// The entire information produced while compiling a program.
+class AllInfo {
+  /// Summary information about the program.
+  ProgramInfo program;
+
+  /// Information about each library processed by the compiler.
+  List<LibraryInfo> libraries = <LibraryInfo>[];
+
+  /// Information about each function (includes methods and getters in any
+  /// library)
+  List<FunctionInfo> functions = <FunctionInfo>[];
+
+  /// Information about type defs in the program.
+  List<TypedefInfo> typedefs = <TypedefInfo>[];
+
+  /// Information about each class (in any library).
+  List<ClassInfo> classes = <ClassInfo>[];
+
+  /// Information about fields (in any class).
+  List<FieldInfo> fields = <FieldInfo>[];
+
+  /// Information about constants anywhere in the program.
+  // TODO(sigmund): expand docs about canonicalization. We don't put these
+  // inside library because a single constant can be used in more than one lib,
+  // and we'll include it only once in the output.
+  List<ConstantInfo> constants = <ConstantInfo>[];
+
+  /// Information about closures anywhere in the program.
+  List<ClosureInfo> closures = <ClosureInfo>[];
+
+  /// Information about output units (should be just one entry if not using
+  /// deferred loading).
+  List<OutputUnitInfo> outputUnits = <OutputUnitInfo>[];
+
+  /// Details about all deferred imports and what files would be loaded when the
+  /// import is resolved.
+  // TODO(sigmund): use a different format for dump-info. This currently emits
+  // the same map that is created for the `--deferred-map` flag.
+  Map<String, Map<String, dynamic>> deferredFiles;
+
+  /// A new representation of dependencies from one info to another. An entry in
+  /// this map indicates that an [Info] depends on another (e.g. a function
+  /// invokes another). Please note that the data in this field might not be
+  /// accurate yet (this is work in progress).
+  Map<Info, List<Info>> dependencies = {};
+
+  /// Major version indicating breaking changes in the format. A new version
+  /// means that an old deserialization algorithm will not work with the new
+  /// format.
+  final int version = 6;
+
+  /// Minor version indicating non-breaking changes in the format. A change in
+  /// this version number means that the json parsing in this library from a
+  /// previous will continue to work after the change. This is typically
+  /// increased when adding new entries to the file format.
+  // Note: the dump-info.viewer app was written using a json parser version 3.2.
+  final int minorVersion = 0;
+
+  AllInfo();
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitAll(this);
+}
+
+class ProgramInfo {
+  FunctionInfo entrypoint;
+  int size;
+  String dart2jsVersion;
+  DateTime compilationMoment;
+  Duration compilationDuration;
+  Duration toJsonDuration;
+  Duration dumpInfoDuration;
+
+  /// `true` if `noSuchMethod` is used.
+  bool noSuchMethodEnabled;
+
+  /// `true` if `Object.runtimeType` is used.
+  bool isRuntimeTypeUsed;
+
+  /// `true` if the `dart:isolate` library is in use.
+  bool isIsolateInUse;
+
+  /// `true` if `Function.apply` is used.
+  bool isFunctionApplyUsed;
+
+  /// `true` if `dart:mirrors` features are used.
+  bool isMirrorsUsed;
+
+  bool minified;
+
+  ProgramInfo(
+      {this.entrypoint,
+      this.size,
+      this.dart2jsVersion,
+      this.compilationMoment,
+      this.compilationDuration,
+      this.toJsonDuration,
+      this.dumpInfoDuration,
+      this.noSuchMethodEnabled,
+      this.isRuntimeTypeUsed,
+      this.isIsolateInUse,
+      this.isFunctionApplyUsed,
+      this.isMirrorsUsed,
+      this.minified});
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitProgram(this);
+}
+
+/// Info associated with a library element.
+class LibraryInfo extends BasicInfo {
+  /// Canonical uri that identifies the library.
+  Uri uri;
+
+  /// Top level functions defined within the library.
+  List<FunctionInfo> topLevelFunctions = <FunctionInfo>[];
+
+  /// Top level fields defined within the library.
+  List<FieldInfo> topLevelVariables = <FieldInfo>[];
+
+  /// Classes defined within the library.
+  List<ClassInfo> classes = <ClassInfo>[];
+
+  /// Typedefs defined within the library.
+  List<TypedefInfo> typedefs = <TypedefInfo>[];
+
+  // TODO(sigmund): add here a list of parts. That can help us improve how we
+  // encode source-span information in metrics (rather than include the uri on
+  // each function, include an index into this list).
+
+  /// Whether there is any information recorded for this library.
+  bool get isEmpty =>
+      topLevelFunctions.isEmpty && topLevelVariables.isEmpty && classes.isEmpty;
+
+  LibraryInfo(String name, this.uri, OutputUnitInfo outputUnit, int size)
+      : super(InfoKind.library, name, outputUnit, size, null);
+
+  LibraryInfo.internal() : super.internal(InfoKind.library);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitLibrary(this);
+}
+
+/// Information about an output unit. Normally there is just one for the entire
+/// program unless the application uses deferred imports, in which case there
+/// would be an additional output unit per deferred chunk.
+class OutputUnitInfo extends BasicInfo {
+  String filename;
+
+  /// The deferred imports that will load this output unit.
+  List<String> imports = <String>[];
+
+  OutputUnitInfo(this.filename, String name, int size)
+      : super(InfoKind.outputUnit, name, null, size, null);
+
+  OutputUnitInfo.internal() : super.internal(InfoKind.outputUnit);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitOutput(this);
+}
+
+/// Information about a class element.
+class ClassInfo extends BasicInfo {
+  /// Whether the class is abstract.
+  bool isAbstract;
+
+  // TODO(sigmund): split static vs instance vs closures
+  /// Functions (static or instance) defined in the class.
+  List<FunctionInfo> functions = <FunctionInfo>[];
+
+  /// Fields defined in the class.
+  // TODO(sigmund): currently appears to only be populated with instance fields,
+  // but this should be fixed.
+  List<FieldInfo> fields = <FieldInfo>[];
+
+  ClassInfo(
+      {String name, this.isAbstract, OutputUnitInfo outputUnit, int size: 0})
+      : super(InfoKind.clazz, name, outputUnit, size, null);
+
+  ClassInfo.internal() : super.internal(InfoKind.clazz);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitClass(this);
+}
+
+/// A code span of generated code. A [CodeSpan] object is associated with a
+/// single [BasicInfo]. The offsets in the span corresponds to offsets on the
+/// file of [BasicInfo.outputUnit].
+class CodeSpan {
+  /// Start offset in the generated file.
+  int start;
+
+  /// end offset in the generated file.
+  int end;
+
+  /// The actual code (optional, blank when using a compact representation of
+  /// the encoding).
+  String text;
+
+  CodeSpan({this.start, this.end, this.text});
+}
+
+/// Information about a constant value.
+// TODO(sigmund): add dependency data for ConstantInfo
+class ConstantInfo extends BasicInfo {
+  /// The actual generated code for the constant.
+  List<CodeSpan> code;
+
+  // TODO(sigmund): Add coverage support to constants?
+  ConstantInfo({int size: 0, this.code, OutputUnitInfo outputUnit})
+      : super(InfoKind.constant, null, outputUnit, size, null);
+
+  ConstantInfo.internal() : super.internal(InfoKind.constant);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitConstant(this);
+}
+
+/// Information about a field element.
+class FieldInfo extends BasicInfo with CodeInfo {
+  /// The type of the field.
+  String type;
+
+  /// The type inferred by dart2js's whole program analysis
+  String inferredType;
+
+  /// Nested closures seen in the field initializer.
+  List<ClosureInfo> closures;
+
+  /// The actual generated code for the field.
+  List<CodeSpan> code;
+
+  /// Whether this corresponds to a const field declaration.
+  bool isConst;
+
+  /// When [isConst] is true, the constant initializer expression.
+  ConstantInfo initializer;
+
+  FieldInfo(
+      {String name,
+      String coverageId,
+      int size: 0,
+      this.type,
+      this.inferredType,
+      this.closures,
+      this.code,
+      OutputUnitInfo outputUnit,
+      this.isConst})
+      : super(InfoKind.field, name, outputUnit, size, coverageId);
+
+  FieldInfo.internal() : super.internal(InfoKind.field);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitField(this);
+}
+
+/// Information about a typedef declaration.
+class TypedefInfo extends BasicInfo {
+  /// The declared type.
+  String type;
+
+  TypedefInfo(String name, this.type, OutputUnitInfo outputUnit)
+      : super(InfoKind.typedef, name, outputUnit, 0, null);
+
+  TypedefInfo.internal() : super.internal(InfoKind.typedef);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitTypedef(this);
+}
+
+/// Information about a function or method.
+class FunctionInfo extends BasicInfo with CodeInfo {
+  static const int TOP_LEVEL_FUNCTION_KIND = 0;
+  static const int CLOSURE_FUNCTION_KIND = 1;
+  static const int METHOD_FUNCTION_KIND = 2;
+  static const int CONSTRUCTOR_FUNCTION_KIND = 3;
+
+  /// Kind of function (top-level function, closure, method, or constructor).
+  int functionKind;
+
+  /// Modifiers applied to this function.
+  FunctionModifiers modifiers;
+
+  /// Nested closures that appear within the body of this function.
+  List<ClosureInfo> closures;
+
+  /// The type of this function.
+  String type;
+
+  /// The declared return type.
+  String returnType;
+
+  /// The inferred return type.
+  String inferredReturnType;
+
+  /// Name and type information for each parameter.
+  List<ParameterInfo> parameters;
+
+  /// Side-effects.
+  // TODO(sigmund): serialize more precisely, not just a string representation.
+  String sideEffects;
+
+  /// How many function calls were inlined into this function.
+  int inlinedCount;
+
+  /// The actual generated code.
+  List<CodeSpan> code;
+
+  FunctionInfo(
+      {String name,
+      String coverageId,
+      OutputUnitInfo outputUnit,
+      int size: 0,
+      this.functionKind,
+      this.modifiers,
+      this.closures,
+      this.type,
+      this.returnType,
+      this.inferredReturnType,
+      this.parameters,
+      this.sideEffects,
+      this.inlinedCount,
+      this.code})
+      : super(InfoKind.function, name, outputUnit, size, coverageId);
+
+  FunctionInfo.internal() : super.internal(InfoKind.function);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitFunction(this);
+}
+
+/// Information about a closure, also known as a local function.
+class ClosureInfo extends BasicInfo {
+  /// The function that is wrapped by this closure.
+  FunctionInfo function;
+
+  ClosureInfo(
+      {String name, OutputUnitInfo outputUnit, int size: 0, this.function})
+      : super(InfoKind.closure, name, outputUnit, size, null);
+
+  ClosureInfo.internal() : super.internal(InfoKind.closure);
+
+  T accept<T>(InfoVisitor<T> visitor) => visitor.visitClosure(this);
+}
+
+/// Information about how a dependency is used.
+class DependencyInfo {
+  /// The dependency, either a FunctionInfo or FieldInfo.
+  final Info target;
+
+  /// Either a selector mask indicating how this is used, or 'inlined'.
+  // TODO(sigmund): split mask into an enum or something more precise to really
+  // describe the dependencies in detail.
+  final String mask;
+
+  DependencyInfo(this.target, this.mask);
+}
+
+/// Name and type information about a function parameter.
+class ParameterInfo {
+  final String name;
+  final String type;
+  final String declaredType;
+
+  ParameterInfo(this.name, this.type, this.declaredType);
+}
+
+/// Modifiers that may apply to methods.
+class FunctionModifiers {
+  final bool isStatic;
+  final bool isConst;
+  final bool isFactory;
+  final bool isExternal;
+
+  FunctionModifiers(
+      {this.isStatic: false,
+      this.isConst: false,
+      this.isFactory: false,
+      this.isExternal: false});
+}
+
+/// Possible values of the `kind` field in the serialized infos.
+enum InfoKind {
+  library,
+  clazz,
+  function,
+  field,
+  constant,
+  outputUnit,
+  typedef,
+  closure,
+}
+
+String kindToString(InfoKind kind) {
+  switch (kind) {
+    case InfoKind.library:
+      return 'library';
+    case InfoKind.clazz:
+      return 'class';
+    case InfoKind.function:
+      return 'function';
+    case InfoKind.field:
+      return 'field';
+    case InfoKind.constant:
+      return 'constant';
+    case InfoKind.outputUnit:
+      return 'outputUnit';
+    case InfoKind.typedef:
+      return 'typedef';
+    case InfoKind.closure:
+      return 'closure';
+    default:
+      return null;
+  }
+}
+
+InfoKind kindFromString(String kind) {
+  switch (kind) {
+    case 'library':
+      return InfoKind.library;
+    case 'class':
+      return InfoKind.clazz;
+    case 'function':
+      return InfoKind.function;
+    case 'field':
+      return InfoKind.field;
+    case 'constant':
+      return InfoKind.constant;
+    case 'outputUnit':
+      return InfoKind.outputUnit;
+    case 'typedef':
+      return InfoKind.typedef;
+    case 'closure':
+      return InfoKind.closure;
+    default:
+      return null;
+  }
+}
+
+/// A simple visitor for information produced by the dart2js compiler.
+abstract class InfoVisitor<T> {
+  T visitAll(AllInfo info);
+  T visitProgram(ProgramInfo info);
+  T visitLibrary(LibraryInfo info);
+  T visitClass(ClassInfo info);
+  T visitField(FieldInfo info);
+  T visitConstant(ConstantInfo info);
+  T visitFunction(FunctionInfo info);
+  T visitTypedef(TypedefInfo info);
+  T visitClosure(ClosureInfo info);
+  T visitOutput(OutputUnitInfo info);
+}
+
+/// A visitor that recursively walks each portion of the program. Because the
+/// info representation is redundant, this visitor only walks the structure of
+/// the program and skips some redundant links. For example, even though
+/// visitAll contains references to functions, this visitor only recurses to
+/// visit libraries, then from each library we visit functions and classes, and
+/// so on.
+class RecursiveInfoVisitor extends InfoVisitor<Null> {
+  visitAll(AllInfo info) {
+    // Note: we don't visit functions, fields, classes, and typedefs because
+    // they are reachable from the library info.
+    info.libraries.forEach(visitLibrary);
+    info.constants.forEach(visitConstant);
+  }
+
+  visitProgram(ProgramInfo info) {}
+
+  visitLibrary(LibraryInfo info) {
+    info.topLevelFunctions.forEach(visitFunction);
+    info.topLevelVariables.forEach(visitField);
+    info.classes.forEach(visitClass);
+    info.typedefs.forEach(visitTypedef);
+  }
+
+  visitClass(ClassInfo info) {
+    info.functions.forEach(visitFunction);
+    info.fields.forEach(visitField);
+  }
+
+  visitField(FieldInfo info) {
+    info.closures.forEach(visitClosure);
+  }
+
+  visitConstant(ConstantInfo info) {}
+
+  visitFunction(FunctionInfo info) {
+    info.closures.forEach(visitClosure);
+  }
+
+  visitTypedef(TypedefInfo info) {}
+  visitOutput(OutputUnitInfo info) {}
+  visitClosure(ClosureInfo info) {
+    visitFunction(info.function);
+  }
+}
diff --git a/pkg/dart2js_info/lib/json_info_codec.dart b/pkg/dart2js_info/lib/json_info_codec.dart
new file mode 100644
index 0000000..f32c80f
--- /dev/null
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -0,0 +1,600 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Converters and codecs for converting between JSON and [Info] classes.
+
+import 'dart:collection';
+import 'dart:convert';
+
+import 'package:collection/collection.dart';
+import 'src/util.dart';
+import 'info.dart';
+
+List<String> _toSortedSerializedIds(
+        Iterable<Info> infos, Id Function(Info) getId) =>
+    infos.map((i) => getId(i).serializedId).toList()..sort(compareNatural);
+
+// TODO(sigmund): add unit tests.
+class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
+  // Using `MashMap` here because it's faster than the default `LinkedHashMap`.
+  final Map<String, Info> registry = new HashMap<String, Info>();
+
+  AllInfo convert(Map<String, dynamic> json) {
+    registry.clear();
+
+    var result = new AllInfo();
+    var elements = json['elements'];
+    // TODO(srawlins): Since only the Map values are being extracted below,
+    // replace `as` with `cast` when `cast` becomes available in Dart 2.0:
+    //
+    //     .addAll(elements['library'].values.cast<Map>().map(parseLibrary));
+    result.libraries.addAll(
+        (elements['library'] as Map).values.map((l) => parseLibrary(l)));
+    result.classes
+        .addAll((elements['class'] as Map).values.map((c) => parseClass(c)));
+    result.functions.addAll(
+        (elements['function'] as Map).values.map((f) => parseFunction(f)));
+
+    // TODO(het): Revert this when the dart2js with the new codec is in stable
+    if (elements['closure'] != null) {
+      result.closures.addAll(
+          (elements['closure'] as Map).values.map((c) => parseClosure(c)));
+    }
+    result.fields
+        .addAll((elements['field'] as Map).values.map((f) => parseField(f)));
+    result.typedefs.addAll(
+        (elements['typedef'] as Map).values.map((t) => parseTypedef(t)));
+    result.constants.addAll(
+        (elements['constant'] as Map).values.map((c) => parseConstant(c)));
+
+    json['holding'].forEach((k, deps) {
+      CodeInfo src = registry[k];
+      assert(src != null);
+      for (var dep in deps) {
+        var target = registry[dep['id']];
+        assert(target != null);
+        src.uses.add(new DependencyInfo(target, dep['mask']));
+      }
+    });
+
+    json['dependencies']?.forEach((String k, dependencies) {
+      List<String> deps = dependencies;
+      result.dependencies[registry[k]] = deps.map((d) => registry[d]).toList();
+    });
+
+    result.outputUnits
+        .addAll((json['outputUnits'] as List).map((o) => parseOutputUnit(o)));
+
+    result.program = parseProgram(json['program']);
+
+    if (json['deferredFiles'] != null) {
+      final deferredFilesMap =
+          (json['deferredFiles'] as Map).cast<String, Map<String, dynamic>>();
+      for (final library in deferredFilesMap.values) {
+        if (library['imports'] != null) {
+          // The importMap needs to be typed as <String, List<String>>, but the
+          // json parser produces <String, dynamic>.
+          final importMap = library['imports'] as Map<String, dynamic>;
+          importMap.forEach((prefix, files) {
+            importMap[prefix] = (files as List<dynamic>).cast<String>();
+          });
+          library['imports'] = importMap.cast<String, List<String>>();
+        }
+      }
+      result.deferredFiles = deferredFilesMap;
+    }
+
+    // todo: version, etc
+    return result;
+  }
+
+  OutputUnitInfo parseOutputUnit(Map json) {
+    OutputUnitInfo result = parseId(json['id']);
+    result
+      ..filename = json['filename']
+      ..name = json['name']
+      ..size = json['size'];
+    result.imports
+        .addAll((json['imports'] as List).map((s) => s as String) ?? const []);
+    return result;
+  }
+
+  LibraryInfo parseLibrary(Map json) {
+    LibraryInfo result = parseId(json['id']);
+    result
+      ..name = json['name']
+      ..uri = Uri.parse(json['canonicalUri'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size'];
+    for (var child in json['children'].map(parseId)) {
+      if (child is FunctionInfo) {
+        result.topLevelFunctions.add(child);
+      } else if (child is FieldInfo) {
+        result.topLevelVariables.add(child);
+      } else if (child is ClassInfo) {
+        result.classes.add(child);
+      } else {
+        assert(child is TypedefInfo);
+        result.typedefs.add(child);
+      }
+    }
+    return result;
+  }
+
+  ClassInfo parseClass(Map json) {
+    ClassInfo result = parseId(json['id']);
+    result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..isAbstract = json['modifiers']['abstract'] == true;
+    assert(result is ClassInfo);
+    for (var child in json['children'].map(parseId)) {
+      if (child is FunctionInfo) {
+        result.functions.add(child);
+      } else {
+        assert(child is FieldInfo);
+        result.fields.add(child);
+      }
+    }
+    return result;
+  }
+
+  FieldInfo parseField(Map json) {
+    FieldInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..coverageId = json['coverageId']
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..type = json['type']
+      ..inferredType = json['inferredType']
+      ..code = parseCode(json['code'])
+      ..isConst = json['const'] ?? false
+      ..initializer = parseId(json['initializer'])
+      ..closures = (json['children'] as List)
+          .map<ClosureInfo>((c) => parseId(c))
+          .toList();
+  }
+
+  ConstantInfo parseConstant(Map json) {
+    ConstantInfo result = parseId(json['id']);
+    return result
+      ..code = parseCode(json['code'])
+      ..size = json['size']
+      ..outputUnit = parseId(json['outputUnit']);
+  }
+
+  TypedefInfo parseTypedef(Map json) {
+    TypedefInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..type = json['type']
+      ..size = 0;
+  }
+
+  ProgramInfo parseProgram(Map json) {
+    var programInfo = new ProgramInfo()
+      ..entrypoint = parseId(json['entrypoint'])
+      ..size = json['size']
+      ..compilationMoment = DateTime.parse(json['compilationMoment'])
+      ..dart2jsVersion = json['dart2jsVersion']
+      ..noSuchMethodEnabled = json['noSuchMethodEnabled']
+      ..isRuntimeTypeUsed = json['isRuntimeTypeUsed']
+      ..isIsolateInUse = json['isIsolateInUse']
+      ..isFunctionApplyUsed = json['isFunctionApplyUsed']
+      ..isMirrorsUsed = json['isMirrorsUsed']
+      ..minified = json['minified'];
+
+    // TODO(het): Revert this when the dart2js with the new codec is in stable
+    var compilationDuration = json['compilationDuration'];
+    if (compilationDuration is String) {
+      programInfo.compilationDuration = _parseDuration(compilationDuration);
+    } else {
+      assert(compilationDuration is int);
+      programInfo.compilationDuration =
+          new Duration(microseconds: compilationDuration);
+    }
+
+    var toJsonDuration = json['toJsonDuration'];
+    if (toJsonDuration is String) {
+      programInfo.toJsonDuration = _parseDuration(toJsonDuration);
+    } else {
+      assert(toJsonDuration is int);
+      programInfo.toJsonDuration = new Duration(microseconds: toJsonDuration);
+    }
+
+    var dumpInfoDuration = json['dumpInfoDuration'];
+    if (dumpInfoDuration is String) {
+      programInfo.dumpInfoDuration = _parseDuration(dumpInfoDuration);
+    } else {
+      assert(dumpInfoDuration is int);
+      programInfo.dumpInfoDuration =
+          new Duration(microseconds: dumpInfoDuration);
+    }
+
+    return programInfo;
+  }
+
+  /// Parse a string formatted as "XX:YY:ZZ.ZZZZZ" into a [Duration].
+  Duration _parseDuration(String duration) {
+    if (!duration.contains(':')) {
+      return new Duration(milliseconds: int.parse(duration));
+    }
+    var parts = duration.split(':');
+    var hours = double.parse(parts[0]);
+    var minutes = double.parse(parts[1]);
+    var seconds = double.parse(parts[2]);
+    const secondsInMillis = 1000;
+    const minutesInMillis = 60 * secondsInMillis;
+    const hoursInMillis = 60 * minutesInMillis;
+    var totalMillis = secondsInMillis * seconds +
+        minutesInMillis * minutes +
+        hoursInMillis * hours;
+    return new Duration(milliseconds: totalMillis.round());
+  }
+
+  FunctionInfo parseFunction(Map json) {
+    FunctionInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..coverageId = json['coverageId']
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..type = json['type']
+      ..returnType = json['returnType']
+      ..inferredReturnType = json['inferredReturnType']
+      ..parameters =
+          (json['parameters'] as List).map((p) => parseParameter(p)).toList()
+      ..code = parseCode(json['code'])
+      ..sideEffects = json['sideEffects']
+      ..inlinedCount = json['inlinedCount']
+      ..modifiers =
+          parseModifiers(new Map<String, bool>.from(json['modifiers']))
+      ..closures = (json['children'] as List)
+          .map<ClosureInfo>((c) => parseId(c))
+          .toList();
+  }
+
+  ParameterInfo parseParameter(Map json) =>
+      new ParameterInfo(json['name'], json['type'], json['declaredType']);
+
+  FunctionModifiers parseModifiers(Map<String, bool> json) {
+    return new FunctionModifiers(
+        isStatic: json['static'] == true,
+        isConst: json['const'] == true,
+        isFactory: json['factory'] == true,
+        isExternal: json['external'] == true);
+  }
+
+  ClosureInfo parseClosure(Map json) {
+    ClosureInfo result = parseId(json['id']);
+    return result
+      ..name = json['name']
+      ..parent = parseId(json['parent'])
+      ..outputUnit = parseId(json['outputUnit'])
+      ..size = json['size']
+      ..function = parseId(json['function']);
+  }
+
+  Info parseId(id) {
+    String serializedId = id;
+    if (serializedId == null) {
+      return null;
+    }
+    return registry.putIfAbsent(serializedId, () {
+      if (serializedId.startsWith('function/')) {
+        return new FunctionInfo.internal();
+      } else if (serializedId.startsWith('closure/')) {
+        return new ClosureInfo.internal();
+      } else if (serializedId.startsWith('library/')) {
+        return new LibraryInfo.internal();
+      } else if (serializedId.startsWith('class/')) {
+        return new ClassInfo.internal();
+      } else if (serializedId.startsWith('field/')) {
+        return new FieldInfo.internal();
+      } else if (serializedId.startsWith('constant/')) {
+        return new ConstantInfo.internal();
+      } else if (serializedId.startsWith('typedef/')) {
+        return new TypedefInfo.internal();
+      } else if (serializedId.startsWith('outputUnit/')) {
+        return new OutputUnitInfo.internal();
+      }
+      assert(false);
+      return null;
+    });
+  }
+
+  List<CodeSpan> parseCode(dynamic json) {
+    // backwards compatibility with format 5.1:
+    if (json is String) {
+      return [new CodeSpan(start: null, end: null, text: json)];
+    }
+
+    if (json is List) {
+      return json.map((dynamic value) {
+        Map<String, dynamic> jsonCode = value;
+        return new CodeSpan(
+            start: jsonCode['start'],
+            end: jsonCode['end'],
+            text: jsonCode['text']);
+      }).toList();
+    }
+
+    return [];
+  }
+}
+
+class AllInfoToJsonConverter extends Converter<AllInfo, Map>
+    implements InfoVisitor<Map> {
+  /// Whether to generate json compatible with format 5.1
+  final bool isBackwardCompatible;
+  final Map<Info, Id> ids = new HashMap<Info, Id>();
+  final Set<int> usedIds = new Set<int>();
+
+  AllInfoToJsonConverter({this.isBackwardCompatible: false});
+
+  Id idFor(Info info) {
+    var serializedId = ids[info];
+    if (serializedId != null) return serializedId;
+
+    assert(
+        info is LibraryInfo ||
+            info is ConstantInfo ||
+            info is OutputUnitInfo ||
+            info.parent != null,
+        "$info");
+
+    int id;
+    if (info is ConstantInfo) {
+      // No name and no parent, so `longName` isn't helpful
+      assert(info.name == null);
+      assert(info.parent == null);
+      assert(info.code != null);
+      // Instead, use the content of the code.
+      id = info.code.first.text.hashCode;
+    } else {
+      id = longName(info, useLibraryUri: true, forId: true).hashCode;
+    }
+
+    while (!usedIds.add(id)) {
+      id++;
+    }
+    serializedId = new Id(info.kind, '$id');
+    return ids[info] = serializedId;
+  }
+
+  Map convert(AllInfo info) => info.accept(this);
+
+  Map _visitList(List<Info> infos) {
+    // Using SplayTree to maintain a consistent order of keys
+    var map = new SplayTreeMap<String, Map>(compareNatural);
+    for (var info in infos) {
+      map['${idFor(info).id}'] = info.accept(this);
+    }
+    return map;
+  }
+
+  Map _visitAllInfoElements(AllInfo info) {
+    var jsonLibraries = _visitList(info.libraries);
+    var jsonClasses = _visitList(info.classes);
+    var jsonFunctions = _visitList(info.functions);
+    var jsonTypedefs = _visitList(info.typedefs);
+    var jsonFields = _visitList(info.fields);
+    var jsonConstants = _visitList(info.constants);
+    var jsonClosures = _visitList(info.closures);
+    return {
+      'library': jsonLibraries,
+      'class': jsonClasses,
+      'function': jsonFunctions,
+      'typedef': jsonTypedefs,
+      'field': jsonFields,
+      'constant': jsonConstants,
+      'closure': jsonClosures,
+    };
+  }
+
+  Map _visitDependencyInfo(DependencyInfo info) =>
+      {'id': idFor(info.target).serializedId, 'mask': info.mask};
+
+  Map _visitAllInfoHolding(AllInfo allInfo) {
+    var map = new SplayTreeMap<String, List>(compareNatural);
+    void helper(CodeInfo info) {
+      if (info.uses.isEmpty) return;
+      map[idFor(info).serializedId] = info.uses
+          .map(_visitDependencyInfo)
+          .toList()
+        ..sort((a, b) => a['id'].compareTo(b['id']));
+    }
+
+    allInfo.functions.forEach(helper);
+    allInfo.fields.forEach(helper);
+    return map;
+  }
+
+  Map _visitAllInfoDependencies(AllInfo allInfo) {
+    var map = new SplayTreeMap<String, List>(compareNatural);
+    allInfo.dependencies.forEach((k, v) {
+      map[idFor(k).serializedId] = _toSortedSerializedIds(v, idFor);
+    });
+    return map;
+  }
+
+  Map visitAll(AllInfo info) {
+    var elements = _visitAllInfoElements(info);
+    var jsonHolding = _visitAllInfoHolding(info);
+    var jsonDependencies = _visitAllInfoDependencies(info);
+    return {
+      'elements': elements,
+      'holding': jsonHolding,
+      'dependencies': jsonDependencies,
+      'outputUnits': info.outputUnits.map((u) => u.accept(this)).toList(),
+      'dump_version': isBackwardCompatible ? 5 : info.version,
+      'deferredFiles': info.deferredFiles,
+      'dump_minor_version': isBackwardCompatible ? 1 : info.minorVersion,
+      'program': info.program.accept(this)
+    };
+  }
+
+  Map visitProgram(ProgramInfo info) {
+    return {
+      'entrypoint': idFor(info.entrypoint).serializedId,
+      'size': info.size,
+      'dart2jsVersion': info.dart2jsVersion,
+      'compilationMoment': '${info.compilationMoment}',
+      'compilationDuration': info.compilationDuration.inMicroseconds,
+      'toJsonDuration': info.toJsonDuration.inMicroseconds,
+      'dumpInfoDuration': info.dumpInfoDuration.inMicroseconds,
+      'noSuchMethodEnabled': info.noSuchMethodEnabled,
+      'isRuntimeTypeUsed': info.isRuntimeTypeUsed,
+      'isIsolateInUse': info.isIsolateInUse,
+      'isFunctionApplyUsed': info.isFunctionApplyUsed,
+      'isMirrorsUsed': info.isMirrorsUsed,
+      'minified': info.minified,
+    };
+  }
+
+  Map _visitBasicInfo(BasicInfo info) {
+    var res = {
+      'id': idFor(info).serializedId,
+      'kind': kindToString(info.kind),
+      'name': info.name,
+      'size': info.size,
+    };
+    // TODO(sigmund): Omit this also when outputUnit.id == 0 (most code is in
+    // the main output unit by default).
+    if (info.outputUnit != null) {
+      res['outputUnit'] = idFor(info.outputUnit).serializedId;
+    }
+    if (info.coverageId != null) res['coverageId'] = info.coverageId;
+    if (info.parent != null) res['parent'] = idFor(info.parent).serializedId;
+    return res;
+  }
+
+  Map visitLibrary(LibraryInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(
+            [
+              info.topLevelFunctions,
+              info.topLevelVariables,
+              info.classes,
+              info.typedefs
+            ].expand((i) => i),
+            idFor),
+        'canonicalUri': '${info.uri}',
+      });
+  }
+
+  Map visitClass(ClassInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        // TODO(sigmund): change format, include only when abstract is true.
+        'modifiers': {'abstract': info.isAbstract},
+        'children': _toSortedSerializedIds(
+            [info.fields, info.functions].expand((i) => i), idFor)
+      });
+  }
+
+  Map visitField(FieldInfo info) {
+    var result = _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(info.closures, idFor),
+        'inferredType': info.inferredType,
+        'code': _serializeCode(info.code),
+        'type': info.type,
+      });
+    if (info.isConst) {
+      result['const'] = true;
+      if (info.initializer != null) {
+        result['initializer'] = idFor(info.initializer).serializedId;
+      }
+    }
+    return result;
+  }
+
+  Map visitConstant(ConstantInfo info) => _visitBasicInfo(info)
+    ..addAll(<String, Object>{'code': _serializeCode(info.code)});
+
+  // TODO(sigmund): exclude false values (requires bumping the format version):
+  //     var res = <String, bool>{};
+  //     if (isStatic) res['static'] = true;
+  //     if (isConst) res['const'] = true;
+  //     if (isFactory) res['factory'] = true;
+  //     if (isExternal) res['external'] = true;
+  //     return res;
+  Map _visitFunctionModifiers(FunctionModifiers mods) => {
+        'static': mods.isStatic,
+        'const': mods.isConst,
+        'factory': mods.isFactory,
+        'external': mods.isExternal,
+      };
+
+  Map _visitParameterInfo(ParameterInfo info) =>
+      {'name': info.name, 'type': info.type, 'declaredType': info.declaredType};
+
+  Map visitFunction(FunctionInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{
+        'children': _toSortedSerializedIds(info.closures, idFor),
+        'modifiers': _visitFunctionModifiers(info.modifiers),
+        'returnType': info.returnType,
+        'inferredReturnType': info.inferredReturnType,
+        'parameters':
+            info.parameters.map((p) => _visitParameterInfo(p)).toList(),
+        'sideEffects': info.sideEffects,
+        'inlinedCount': info.inlinedCount,
+        'code': _serializeCode(info.code),
+        'type': info.type,
+        // Note: version 3.2 of dump-info serializes `uses` in a section called
+        // `holding` at the top-level.
+      });
+  }
+
+  Map visitClosure(ClosureInfo info) {
+    return _visitBasicInfo(info)
+      ..addAll(<String, Object>{'function': idFor(info.function).serializedId});
+  }
+
+  visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type;
+
+  visitOutput(OutputUnitInfo info) => _visitBasicInfo(info)
+    ..['filename'] = info.filename
+    ..['imports'] = info.imports;
+
+  Object _serializeCode(List<CodeSpan> code) {
+    if (isBackwardCompatible) {
+      return code.map((c) => c.text).join('\n');
+    }
+    return code
+        .map<Object>((c) => {
+              'start': c.start,
+              'end': c.end,
+              'text': c.text,
+            })
+        .toList();
+  }
+}
+
+class AllInfoJsonCodec extends Codec<AllInfo, Map> {
+  final Converter<AllInfo, Map> encoder;
+  final Converter<Map, AllInfo> decoder = new JsonToAllInfoConverter();
+
+  AllInfoJsonCodec({bool isBackwardCompatible: false})
+      : encoder = new AllInfoToJsonConverter(
+            isBackwardCompatible: isBackwardCompatible);
+}
+
+class Id {
+  final InfoKind kind;
+  final String id;
+
+  Id(this.kind, this.id);
+
+  String get serializedId => '${kindToString(kind)}/$id';
+}
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
new file mode 100644
index 0000000..d199d09
--- /dev/null
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -0,0 +1,312 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Converters and codecs for converting between Protobuf and [Info] classes.
+
+import 'dart:convert';
+import 'package:fixnum/fixnum.dart';
+
+import 'info.dart';
+import 'src/proto/info.pb.dart';
+import 'src/util.dart';
+
+export 'src/proto/info.pb.dart';
+
+class ProtoToAllInfoConverter extends Converter<AllInfoPB, AllInfo> {
+  AllInfo convert(AllInfoPB info) {
+    // TODO(lorenvs): Implement this conversion. It is unlikely to to be used
+    // by production code since the goal of the proto codec is to consume this
+    // information from other languages. However, it is useful for roundtrip
+    // testing, so we should support it.
+    throw new UnimplementedError('ProtoToAllInfoConverter is not implemented');
+  }
+}
+
+class AllInfoToProtoConverter extends Converter<AllInfo, AllInfoPB> {
+  final Map<Info, Id> ids = {};
+  final Set<int> usedIds = new Set<int>();
+
+  Id idFor(Info info) {
+    if (info == null) return null;
+    var serializedId = ids[info];
+    if (serializedId != null) return serializedId;
+
+    assert(info is LibraryInfo ||
+        info is ConstantInfo ||
+        info is OutputUnitInfo ||
+        info.parent != null);
+
+    int id;
+    if (info is ConstantInfo) {
+      // No name and no parent, so `longName` isn't helpful
+      assert(info.name == null);
+      assert(info.parent == null);
+      assert(info.code != null);
+      // Instead, use the content of the code.
+      id = info.code.first.text.hashCode;
+    } else {
+      id = longName(info, useLibraryUri: true, forId: true).hashCode;
+    }
+    while (!usedIds.add(id)) {
+      id++;
+    }
+    serializedId = new Id(info.kind, id);
+    return ids[info] = serializedId;
+  }
+
+  AllInfoPB convert(AllInfo info) => _convertToAllInfoPB(info);
+
+  DependencyInfoPB _convertToDependencyInfoPB(DependencyInfo info) {
+    var result = new DependencyInfoPB()
+      ..targetId = idFor(info.target)?.serializedId;
+    if (info.mask != null) {
+      result.mask = info.mask;
+    }
+    return result;
+  }
+
+  static ParameterInfoPB _convertToParameterInfoPB(ParameterInfo info) {
+    return new ParameterInfoPB()
+      ..name = info.name
+      ..type = info.type
+      ..declaredType = info.declaredType;
+  }
+
+  LibraryInfoPB _convertToLibraryInfoPB(LibraryInfo info) {
+    final proto = new LibraryInfoPB()..uri = info.uri.toString();
+
+    proto.childrenIds
+        .addAll(info.topLevelFunctions.map((func) => idFor(func).serializedId));
+    proto.childrenIds.addAll(
+        info.topLevelVariables.map((field) => idFor(field).serializedId));
+    proto.childrenIds
+        .addAll(info.classes.map((clazz) => idFor(clazz).serializedId));
+    proto.childrenIds
+        .addAll(info.typedefs.map((def) => idFor(def).serializedId));
+
+    return proto;
+  }
+
+  ClassInfoPB _convertToClassInfoPB(ClassInfo info) {
+    final proto = new ClassInfoPB()..isAbstract = info.isAbstract;
+
+    proto.childrenIds
+        .addAll(info.functions.map((func) => idFor(func).serializedId));
+    proto.childrenIds
+        .addAll(info.fields.map((field) => idFor(field).serializedId));
+
+    return proto;
+  }
+
+  static FunctionModifiersPB _convertToFunctionModifiers(
+      FunctionModifiers modifiers) {
+    return new FunctionModifiersPB()
+      ..isStatic = modifiers.isStatic
+      ..isConst = modifiers.isConst
+      ..isFactory = modifiers.isFactory
+      ..isExternal = modifiers.isExternal;
+  }
+
+  FunctionInfoPB _convertToFunctionInfoPB(FunctionInfo info) {
+    final proto = new FunctionInfoPB()
+      ..functionModifiers = _convertToFunctionModifiers(info.modifiers)
+      ..inlinedCount = info.inlinedCount ?? 0;
+
+    if (info.returnType != null) {
+      proto.returnType = info.returnType;
+    }
+
+    if (info.inferredReturnType != null) {
+      proto.inferredReturnType = info.inferredReturnType;
+    }
+
+    if (info.code != null) {
+      proto.code = info.code.map((c) => c.text).join('\n');
+    }
+
+    if (info.sideEffects != null) {
+      proto.sideEffects = info.sideEffects;
+    }
+
+    proto.childrenIds
+        .addAll(info.closures.map(((closure) => idFor(closure).serializedId)));
+    proto.parameters.addAll(info.parameters.map(_convertToParameterInfoPB));
+
+    return proto;
+  }
+
+  FieldInfoPB _convertToFieldInfoPB(FieldInfo info) {
+    final proto = new FieldInfoPB()
+      ..type = info.type
+      ..inferredType = info.inferredType
+      ..isConst = info.isConst;
+
+    if (info.code != null) {
+      proto.code = info.code.map((c) => c.text).join('\n');
+    }
+
+    if (info.initializer != null) {
+      proto.initializerId = idFor(info.initializer).serializedId;
+    }
+
+    proto.childrenIds
+        .addAll(info.closures.map((closure) => idFor(closure).serializedId));
+
+    return proto;
+  }
+
+  static ConstantInfoPB _convertToConstantInfoPB(ConstantInfo info) {
+    return new ConstantInfoPB()..code = info.code.map((c) => c.text).join('\n');
+  }
+
+  static OutputUnitInfoPB _convertToOutputUnitInfoPB(OutputUnitInfo info) {
+    final proto = new OutputUnitInfoPB();
+    proto.imports.addAll(info.imports.where((import) => import != null));
+    return proto;
+  }
+
+  static TypedefInfoPB _convertToTypedefInfoPB(TypedefInfo info) {
+    return new TypedefInfoPB()..type = info.type;
+  }
+
+  ClosureInfoPB _convertToClosureInfoPB(ClosureInfo info) {
+    return new ClosureInfoPB()..functionId = idFor(info.function).serializedId;
+  }
+
+  InfoPB _convertToInfoPB(Info info) {
+    final proto = new InfoPB()
+      ..id = idFor(info).id
+      ..serializedId = idFor(info).serializedId
+      ..size = info.size;
+
+    if (info.name != null) {
+      proto.name = info.name;
+    }
+
+    if (info.parent != null) {
+      proto.parentId = idFor(info.parent).serializedId;
+    }
+
+    if (info.coverageId != null) {
+      proto.coverageId = info.coverageId;
+    }
+
+    if (info is BasicInfo && info.outputUnit != null) {
+      // TODO(lorenvs): Similar to the JSON codec, omit this for the default
+      // output unit. At the moment, there is no easy way to identify which
+      // output unit is the default on [OutputUnitInfo].
+      proto.outputUnitId = idFor(info.outputUnit).serializedId;
+    }
+
+    if (info is CodeInfo) {
+      proto.uses.addAll(info.uses.map(_convertToDependencyInfoPB));
+    }
+
+    if (info is LibraryInfo) {
+      proto.libraryInfo = _convertToLibraryInfoPB(info);
+    } else if (info is ClassInfo) {
+      proto.classInfo = _convertToClassInfoPB(info);
+    } else if (info is FunctionInfo) {
+      proto.functionInfo = _convertToFunctionInfoPB(info);
+    } else if (info is FieldInfo) {
+      proto.fieldInfo = _convertToFieldInfoPB(info);
+    } else if (info is ConstantInfo) {
+      proto.constantInfo = _convertToConstantInfoPB(info);
+    } else if (info is OutputUnitInfo) {
+      proto.outputUnitInfo = _convertToOutputUnitInfoPB(info);
+    } else if (info is TypedefInfo) {
+      proto.typedefInfo = _convertToTypedefInfoPB(info);
+    } else if (info is ClosureInfo) {
+      proto.closureInfo = _convertToClosureInfoPB(info);
+    }
+
+    return proto;
+  }
+
+  ProgramInfoPB _convertToProgramInfoPB(ProgramInfo info) {
+    var result = new ProgramInfoPB()
+      ..entrypointId = idFor(info.entrypoint).serializedId
+      ..size = info.size
+      ..compilationMoment =
+          new Int64(info.compilationMoment.microsecondsSinceEpoch)
+      ..compilationDuration = new Int64(info.compilationDuration.inMicroseconds)
+      ..toProtoDuration = new Int64(info.toJsonDuration.inMicroseconds)
+      ..dumpInfoDuration = new Int64(info.dumpInfoDuration.inMicroseconds)
+      ..noSuchMethodEnabled = info.noSuchMethodEnabled ?? false
+      ..isRuntimeTypeUsed = info.isRuntimeTypeUsed ?? false
+      ..isIsolateUsed = info.isIsolateInUse ?? false
+      ..isFunctionApplyUsed = info.isFunctionApplyUsed ?? false
+      ..isMirrorsUsed = info.isMirrorsUsed ?? false
+      ..minified = info.minified ?? false;
+
+    if (info.dart2jsVersion != null) {
+      result.dart2jsVersion = info.dart2jsVersion;
+    }
+    return result;
+  }
+
+  Iterable<MapEntry<String, InfoPB>> _convertToAllInfosEntries<T extends Info>(
+      Iterable<T> infos) sync* {
+    for (final info in infos) {
+      final infoProto = _convertToInfoPB(info);
+      final entry = MapEntry<String, InfoPB>(infoProto.serializedId, infoProto);
+      yield entry;
+    }
+  }
+
+  static LibraryDeferredImportsPB _convertToLibraryDeferredImportsPB(
+      String libraryUri, Map<String, dynamic> fields) {
+    final proto = new LibraryDeferredImportsPB()
+      ..libraryUri = libraryUri
+      ..libraryName = fields['name'] ?? '<unnamed>';
+
+    Map<String, List<String>> imports = fields['imports'];
+    imports.forEach((prefix, files) {
+      final import = new DeferredImportPB()..prefix = prefix;
+      import.files.addAll(files);
+      proto.imports.add(import);
+    });
+
+    return proto;
+  }
+
+  AllInfoPB _convertToAllInfoPB(AllInfo info) {
+    final proto = new AllInfoPB()
+      ..program = _convertToProgramInfoPB(info.program);
+
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.libraries));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.classes));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.functions));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.fields));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.constants));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.outputUnits));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.typedefs));
+    proto.allInfos.addEntries(_convertToAllInfosEntries(info.closures));
+
+    info.deferredFiles?.forEach((libraryUri, fields) {
+      proto.deferredImports
+          .add(_convertToLibraryDeferredImportsPB(libraryUri, fields));
+    });
+
+    return proto;
+  }
+}
+
+/// A codec for converting [AllInfo] to a protobuf format.
+///
+/// This codec is still experimental, and will likely crash on certain output
+/// from dart2js.
+class AllInfoProtoCodec extends Codec<AllInfo, AllInfoPB> {
+  final Converter<AllInfo, AllInfoPB> encoder = new AllInfoToProtoConverter();
+  final Converter<AllInfoPB, AllInfo> decoder = new ProtoToAllInfoConverter();
+}
+
+class Id {
+  final InfoKind kind;
+  final int id;
+
+  Id(this.kind, this.id);
+
+  String get serializedId => '${kindToString(kind)}/$id';
+}
diff --git a/pkg/dart2js_info/lib/src/binary/sink.dart b/pkg/dart2js_info/lib/src/binary/sink.dart
new file mode 100644
index 0000000..7cacadc
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/binary/sink.dart
@@ -0,0 +1,401 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:typed_data';
+
+/// Interface for serialization.
+// TODO(sigmund): share this with pkg:compiler/src/serialization/*
+abstract class DataSink {
+  /// The amount of data written to this data sink.
+  ///
+  /// The units is based on the underlying data structure for this data sink.
+  int get length;
+
+  /// Flushes any pending data and closes this data sink.
+  ///
+  /// The data sink can no longer be written to after closing.
+  void close();
+
+  /// Writes a reference to [value] to this data sink. If [value] has not yet
+  /// been serialized, [f] is called to serialize the value itself.
+  void writeCached<E>(E value, void f(E value));
+
+  /// Writes the potentially `null` [value] to this data sink. If [value] is
+  /// non-null [f] is called to write the non-null value to the data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readValueOrNull].
+  void writeValueOrNull<E>(E value, void f(E value));
+
+  /// Writes the [values] to this data sink calling [f] to write each value to
+  /// the data sink. If [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readList].
+  void writeList<E>(Iterable<E> values, void f(E value),
+      {bool allowNull: false});
+
+  /// Writes the boolean [value] to this data sink.
+  void writeBool(bool value);
+
+  /// Writes the non-negative integer [value] to this data sink.
+  void writeInt(int value);
+
+  /// Writes the potentially `null` non-negative [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readIntOrNull].
+  void writeIntOrNull(int value);
+
+  /// Writes the string [value] to this data sink.
+  void writeString(String value);
+
+  /// Writes the potentially `null` string [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readStringOrNull].
+  void writeStringOrNull(String value);
+
+  /// Writes the string [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readStrings].
+  void writeStrings(Iterable<String> values, {bool allowNull: false});
+
+  /// Writes the [map] from string to [V] values to this data sink, calling [f]
+  /// to write each value to the data sink. If [allowNull] is `true`, [map] is
+  /// allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSource.readStringMap].
+  void writeStringMap<V>(Map<String, V> map, void f(V value),
+      {bool allowNull: false});
+
+  /// Writes the enum value [value] to this data sink.
+  // TODO(johnniwinther): Change the signature to
+  // `void writeEnum<E extends Enum<E>>(E value);` when an interface for enums
+  // is added to the language.
+  void writeEnum(dynamic value);
+
+  /// Writes the URI [value] to this data sink.
+  void writeUri(Uri value);
+}
+
+/// Mixin that implements all convenience methods of [DataSink].
+abstract class DataSinkMixin implements DataSink {
+  @override
+  void writeIntOrNull(int value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeInt(value);
+    }
+  }
+
+  @override
+  void writeStringOrNull(String value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeString(value);
+    }
+  }
+
+  @override
+  void writeStrings(Iterable<String> values, {bool allowNull: false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (String value in values) {
+        writeString(value);
+      }
+    }
+  }
+
+  @override
+  void writeStringMap<V>(Map<String, V> map, void f(V value),
+      {bool allowNull: false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((String key, V value) {
+        writeString(key);
+        f(value);
+      });
+    }
+  }
+
+  @override
+  void writeList<E>(Iterable<E> values, void f(E value),
+      {bool allowNull: false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      values.forEach(f);
+    }
+  }
+
+  @override
+  void writeValueOrNull<E>(E value, void f(E value)) {
+    writeBool(value != null);
+    if (value != null) {
+      f(value);
+    }
+  }
+}
+
+/// Data sink helper that canonicalizes [E] values using indices.
+class IndexedSink<E> {
+  final void Function(int) _writeInt;
+  final Map<E, int> _cache = {};
+
+  IndexedSink(this._writeInt);
+
+  /// Write a reference to [value] to the data sink.
+  ///
+  /// If [value] has not been canonicalized yet, [writeValue] is called to
+  /// serialize the [value] itself.
+  void write(E value, void writeValue(E value)) {
+    int index = _cache[value];
+    if (index == null) {
+      index = _cache.length;
+      _cache[value] = index;
+      _writeInt(index);
+      writeValue(value);
+    } else {
+      _writeInt(index);
+    }
+  }
+}
+
+/// Base implementation of [DataSink] using [DataSinkMixin] to implement
+/// convenience methods.
+abstract class AbstractDataSink extends DataSinkMixin implements DataSink {
+  IndexedSink<String> _stringIndex;
+  IndexedSink<Uri> _uriIndex;
+  Map<Type, IndexedSink> _generalCaches = {};
+
+  AbstractDataSink() {
+    _stringIndex = new IndexedSink<String>(_writeIntInternal);
+    _uriIndex = new IndexedSink<Uri>(_writeIntInternal);
+  }
+
+  @override
+  void writeCached<E>(E value, void f(E value)) {
+    IndexedSink sink =
+        _generalCaches[E] ??= new IndexedSink<E>(_writeIntInternal);
+    sink.write(value, (v) => f(v));
+  }
+
+  @override
+  void writeEnum(dynamic value) {
+    _writeEnumInternal(value);
+  }
+
+  @override
+  void writeBool(bool value) {
+    assert(value != null);
+    _writeIntInternal(value ? 1 : 0);
+  }
+
+  @override
+  void writeUri(Uri value) {
+    assert(value != null);
+    _writeUri(value);
+  }
+
+  @override
+  void writeString(String value) {
+    assert(value != null);
+    _writeString(value);
+  }
+
+  @override
+  void writeInt(int value) {
+    assert(value != null);
+    assert(value >= 0 && value >> 30 == 0);
+    _writeIntInternal(value);
+  }
+
+  void _writeString(String value) {
+    _stringIndex.write(value, _writeStringInternal);
+  }
+
+  void _writeUri(Uri value) {
+    _uriIndex.write(value, _writeUriInternal);
+  }
+
+  /// Actual serialization of a URI value, implemented by subclasses.
+  void _writeUriInternal(Uri value);
+
+  /// Actual serialization of a String value, implemented by subclasses.
+  void _writeStringInternal(String value);
+
+  /// Actual serialization of a non-negative integer value, implemented by
+  /// subclasses.
+  void _writeIntInternal(int value);
+
+  /// Actual serialization of an enum value, implemented by subclasses.
+  void _writeEnumInternal(dynamic value);
+}
+
+/// [DataSink] that writes data as a sequence of bytes.
+///
+/// This data sink works together with [BinarySource].
+class BinarySink extends AbstractDataSink {
+  final Sink<List<int>> sink;
+  BufferedSink _bufferedSink;
+  int _length = 0;
+
+  BinarySink(this.sink) : _bufferedSink = new BufferedSink(sink);
+
+  @override
+  void _writeUriInternal(Uri value) {
+    _writeString(value.toString());
+  }
+
+  @override
+  void _writeStringInternal(String value) {
+    List<int> bytes = utf8.encode(value);
+    _writeIntInternal(bytes.length);
+    _bufferedSink.addBytes(bytes);
+    _length += bytes.length;
+  }
+
+  @override
+  void _writeIntInternal(int value) {
+    assert(value >= 0 && value >> 30 == 0);
+    if (value < 0x80) {
+      _bufferedSink.addByte(value);
+      _length += 1;
+    } else if (value < 0x4000) {
+      _bufferedSink.addByte2((value >> 8) | 0x80, value & 0xFF);
+      _length += 2;
+    } else {
+      _bufferedSink.addByte4((value >> 24) | 0xC0, (value >> 16) & 0xFF,
+          (value >> 8) & 0xFF, value & 0xFF);
+      _length += 4;
+    }
+  }
+
+  @override
+  void _writeEnumInternal(dynamic value) {
+    _writeIntInternal(value.index);
+  }
+
+  void close() {
+    _bufferedSink.flushAndDestroy();
+    _bufferedSink = null;
+    sink.close();
+  }
+
+  /// Returns the number of bytes written to this data sink.
+  int get length => _length;
+}
+
+/// Puts a buffer in front of a [Sink<List<int>>].
+// TODO(sigmund): share with the implementation in
+// package:kernel/binary/ast_to_binary.dart
+class BufferedSink {
+  static const int SIZE = 100000;
+  static const int SAFE_SIZE = SIZE - 5;
+  static const int SMALL = 10000;
+  final Sink<List<int>> _sink;
+  Uint8List _buffer = new Uint8List(SIZE);
+  int length = 0;
+  int flushedLength = 0;
+
+  Float64List _doubleBuffer = new Float64List(1);
+  Uint8List _doubleBufferUint8;
+
+  int get offset => length + flushedLength;
+
+  BufferedSink(this._sink);
+
+  void addDouble(double d) {
+    _doubleBufferUint8 ??= _doubleBuffer.buffer.asUint8List();
+    _doubleBuffer[0] = d;
+    addByte4(_doubleBufferUint8[0], _doubleBufferUint8[1],
+        _doubleBufferUint8[2], _doubleBufferUint8[3]);
+    addByte4(_doubleBufferUint8[4], _doubleBufferUint8[5],
+        _doubleBufferUint8[6], _doubleBufferUint8[7]);
+  }
+
+  void addByte(int byte) {
+    _buffer[length++] = byte;
+    if (length == SIZE) {
+      _sink.add(_buffer);
+      _buffer = new Uint8List(SIZE);
+      length = 0;
+      flushedLength += SIZE;
+    }
+  }
+
+  void addByte2(int byte1, int byte2) {
+    if (length < SAFE_SIZE) {
+      _buffer[length++] = byte1;
+      _buffer[length++] = byte2;
+    } else {
+      addByte(byte1);
+      addByte(byte2);
+    }
+  }
+
+  void addByte4(int byte1, int byte2, int byte3, int byte4) {
+    if (length < SAFE_SIZE) {
+      _buffer[length++] = byte1;
+      _buffer[length++] = byte2;
+      _buffer[length++] = byte3;
+      _buffer[length++] = byte4;
+    } else {
+      addByte(byte1);
+      addByte(byte2);
+      addByte(byte3);
+      addByte(byte4);
+    }
+  }
+
+  void addBytes(List<int> bytes) {
+    // Avoid copying a large buffer into the another large buffer. Also, if
+    // the bytes buffer is too large to fit in our own buffer, just emit both.
+    if (length + bytes.length < SIZE &&
+        (bytes.length < SMALL || length < SMALL)) {
+      _buffer.setRange(length, length + bytes.length, bytes);
+      length += bytes.length;
+    } else if (bytes.length < SMALL) {
+      // Flush as much as we can in the current buffer.
+      _buffer.setRange(length, SIZE, bytes);
+      _sink.add(_buffer);
+      // Copy over the remainder into a new buffer. It is guaranteed to fit
+      // because the input byte array is small.
+      int alreadyEmitted = SIZE - length;
+      int remainder = bytes.length - alreadyEmitted;
+      _buffer = new Uint8List(SIZE);
+      _buffer.setRange(0, remainder, bytes, alreadyEmitted);
+      length = remainder;
+      flushedLength += SIZE;
+    } else {
+      flush();
+      _sink.add(bytes);
+      flushedLength += bytes.length;
+    }
+  }
+
+  void flush() {
+    _sink.add(_buffer.sublist(0, length));
+    _buffer = new Uint8List(SIZE);
+    flushedLength += length;
+    length = 0;
+  }
+
+  void flushAndDestroy() {
+    _sink.add(_buffer.sublist(0, length));
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/binary/source.dart b/pkg/dart2js_info/lib/src/binary/source.dart
new file mode 100644
index 0000000..5ada983
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/binary/source.dart
@@ -0,0 +1,296 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:typed_data';
+import 'dart:convert';
+
+/// Interface for deserialization.
+// TODO(sigmund): share this with pkg:compiler/src/serialization/*
+abstract class DataSource {
+  /// Reads a reference to an [E] value from this data source. If the value has
+  /// not yet been deserialized, [f] is called to deserialize the value itself.
+  E readCached<E>(E f());
+
+  /// Reads a potentially `null` [E] value from this data source, calling [f] to
+  /// read the non-null value from the data source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeValueOrNull].
+  E readValueOrNull<E>(E f());
+
+  /// Reads a list of [E] values from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeList].
+  List<E> readList<E>(E f(), {bool emptyAsNull: false});
+
+  /// Reads a boolean value from this data source.
+  bool readBool();
+
+  /// Reads a non-negative integer value from this data source.
+  int readInt();
+
+  /// Reads a potentially `null` non-negative integer value from this data
+  /// source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeIntOrNull].
+  int readIntOrNull();
+
+  /// Reads a string value from this data source.
+  String readString();
+
+  /// Reads a potentially `null` string value from this data source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeStringOrNull].
+  String readStringOrNull();
+
+  /// Reads a list of string values from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeStrings].
+  List<String> readStrings({bool emptyAsNull: false});
+
+  /// Reads a map from string values to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSink.writeStringMap].
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false});
+
+  /// Reads an enum value from the list of enum [values] from this data source.
+  ///
+  /// The [values] argument is intended to be the static `.values` field on
+  /// enum classes, for instance:
+  ///
+  ///    enum Foo { bar, baz }
+  ///    ...
+  ///    Foo foo = source.readEnum(Foo.values);
+  ///
+  E readEnum<E>(List<E> values);
+
+  /// Reads a URI value from this data source.
+  Uri readUri();
+}
+
+/// Mixin that implements all convenience methods of [DataSource].
+abstract class DataSourceMixin implements DataSource {
+  @override
+  E readValueOrNull<E>(E f()) {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return f();
+    }
+    return null;
+  }
+
+  @override
+  List<E> readList<E>(E f(), {bool emptyAsNull: false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = new List<E>(count);
+    for (int i = 0; i < count; i++) {
+      list[i] = f();
+    }
+    return list;
+  }
+
+  @override
+  int readIntOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readInt();
+    }
+    return null;
+  }
+
+  @override
+  String readStringOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readString();
+    }
+    return null;
+  }
+
+  @override
+  List<String> readStrings({bool emptyAsNull: false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<String> list = new List<String>(count);
+    for (int i = 0; i < count; i++) {
+      list[i] = readString();
+    }
+    return list;
+  }
+
+  @override
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull: false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<String, V> map = {};
+    for (int i = 0; i < count; i++) {
+      String key = readString();
+      V value = f();
+      map[key] = value;
+    }
+    return map;
+  }
+}
+
+/// Data source helper reads canonicalized [E] values through indices.
+class IndexedSource<E> {
+  final int Function() _readInt;
+  final List<E> _cache = [];
+  final Set<int> _pending = new Set();
+
+  IndexedSource(this._readInt);
+
+  /// Reads a reference to an [E] value from the data source.
+  ///
+  /// If the value hasn't yet been read, [readValue] is called to deserialize
+  /// the value itself.
+  E read(E readValue()) {
+    int index = _readInt();
+    if (_pending.contains(index)) throw "serialization cycles not supported";
+    if (index >= _cache.length) {
+      _pending.add(index);
+      _cache.add(null);
+      E value = readValue();
+      _pending.remove(index);
+      _cache[index] = value;
+      return value;
+    } else {
+      return _cache[index];
+    }
+  }
+}
+
+/// Base implementation of [DataSource] using [DataSourceMixin] to implement
+/// convenience methods.
+abstract class AbstractDataSource extends DataSourceMixin
+    implements DataSource {
+  IndexedSource<String> _stringIndex;
+  IndexedSource<Uri> _uriIndex;
+  Map<Type, IndexedSource> _generalCaches = {};
+
+  AbstractDataSource() {
+    _stringIndex = new IndexedSource<String>(_readIntInternal);
+    _uriIndex = new IndexedSource<Uri>(_readIntInternal);
+  }
+
+  @override
+  E readCached<E>(E f()) {
+    IndexedSource source =
+        _generalCaches[E] ??= new IndexedSource<E>(_readIntInternal);
+    return source.read(f);
+  }
+
+  @override
+  E readEnum<E>(List<E> values) {
+    return _readEnumInternal(values);
+  }
+
+  @override
+  Uri readUri() {
+    return _readUri();
+  }
+
+  Uri _readUri() {
+    return _uriIndex.read(_readUriInternal);
+  }
+
+  @override
+  bool readBool() {
+    int value = _readIntInternal();
+    assert(value == 0 || value == 1);
+    return value == 1;
+  }
+
+  @override
+  String readString() {
+    return _readString();
+  }
+
+  String _readString() {
+    return _stringIndex.read(_readStringInternal);
+  }
+
+  @override
+  int readInt() {
+    return _readIntInternal();
+  }
+
+  /// Actual deserialization of a string value, implemented by subclasses.
+  String _readStringInternal();
+
+  /// Actual deserialization of a non-negative integer value, implemented by
+  /// subclasses.
+  int _readIntInternal();
+
+  /// Actual deserialization of a URI value, implemented by subclasses.
+  Uri _readUriInternal();
+
+  /// Actual deserialization of an enum value in [values], implemented by
+  /// subclasses.
+  E _readEnumInternal<E>(List<E> values);
+}
+
+/// [DataSource] that reads data from a sequence of bytes.
+///
+/// This data source works together with [BinarySink].
+class BinarySource extends AbstractDataSource {
+  int _byteOffset = 0;
+  final List<int> _bytes;
+
+  BinarySource(this._bytes);
+  int _readByte() => _bytes[_byteOffset++];
+
+  @override
+  String _readStringInternal() {
+    int length = _readIntInternal();
+    List<int> bytes = new Uint8List(length);
+    bytes.setRange(0, bytes.length, _bytes, _byteOffset);
+    _byteOffset += bytes.length;
+    return utf8.decode(bytes);
+  }
+
+  @override
+  int _readIntInternal() {
+    var byte = _readByte();
+    if (byte & 0x80 == 0) {
+      // 0xxxxxxx
+      return byte;
+    } else if (byte & 0x40 == 0) {
+      // 10xxxxxx
+      return ((byte & 0x3F) << 8) | _readByte();
+    } else {
+      // 11xxxxxx
+      return ((byte & 0x3F) << 24) |
+          (_readByte() << 16) |
+          (_readByte() << 8) |
+          _readByte();
+    }
+  }
+
+  @override
+  Uri _readUriInternal() {
+    String text = _readString();
+    return Uri.parse(text);
+  }
+
+  @override
+  E _readEnumInternal<E>(List<E> values) {
+    int index = _readIntInternal();
+    assert(
+        0 <= index && index < values.length,
+        "Invalid data kind index. "
+        "Expected one of $values, found index $index.");
+    return values[index];
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/diff.dart b/pkg/dart2js_info/lib/src/diff.dart
new file mode 100644
index 0000000..2d43f28
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/diff.dart
@@ -0,0 +1,165 @@
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/src/util.dart';
+
+class Diff {
+  final BasicInfo info;
+  final DiffKind kind;
+  Diff(this.info, this.kind);
+}
+
+enum DiffKind { add, remove, size, deferred }
+
+class RemoveDiff extends Diff {
+  RemoveDiff(BasicInfo info) : super(info, DiffKind.remove);
+}
+
+class AddDiff extends Diff {
+  AddDiff(BasicInfo info) : super(info, DiffKind.add);
+}
+
+class SizeDiff extends Diff {
+  final int sizeDifference;
+  SizeDiff(BasicInfo info, this.sizeDifference) : super(info, DiffKind.size);
+}
+
+class DeferredStatusDiff extends Diff {
+  final bool wasDeferredBefore;
+  DeferredStatusDiff(BasicInfo info, this.wasDeferredBefore)
+      : super(info, DiffKind.deferred);
+}
+
+List<Diff> diff(AllInfo oldInfo, AllInfo newInfo) {
+  var differ = new _InfoDiffer(oldInfo, newInfo);
+  differ.diff();
+  return differ.diffs;
+}
+
+class _InfoDiffer extends InfoVisitor<Null> {
+  final AllInfo _old;
+  final AllInfo _new;
+
+  BasicInfo _other;
+
+  List<Diff> diffs = <Diff>[];
+
+  _InfoDiffer(this._old, this._new);
+
+  void diff() {
+    _diffList(_old.libraries, _new.libraries);
+  }
+
+  @override
+  visitAll(AllInfo info) {
+    throw new StateError('should not diff AllInfo');
+  }
+
+  @override
+  visitProgram(ProgramInfo info) {
+    throw new StateError('should not diff ProgramInfo');
+  }
+
+  @override
+  visitOutput(OutputUnitInfo info) {
+    throw new StateError('should not diff OutputUnitInfo');
+  }
+
+  // TODO(het): diff constants
+  @override
+  visitConstant(ConstantInfo info) {
+    throw new StateError('should not diff ConstantInfo');
+  }
+
+  @override
+  visitLibrary(LibraryInfo info) {
+    var other = _other as LibraryInfo;
+    _checkSize(info, other);
+    _diffList(info.topLevelVariables, other.topLevelVariables);
+    _diffList(info.topLevelFunctions, other.topLevelFunctions);
+    _diffList(info.classes, other.classes);
+  }
+
+  @override
+  visitClass(ClassInfo info) {
+    var other = _other as ClassInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.fields, other.fields);
+    _diffList(info.functions, other.functions);
+  }
+
+  @override
+  visitClosure(ClosureInfo info) {
+    var other = _other as ClosureInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList([info.function], [other.function]);
+  }
+
+  @override
+  visitField(FieldInfo info) {
+    var other = _other as FieldInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.closures, other.closures);
+  }
+
+  @override
+  visitFunction(FunctionInfo info) {
+    var other = _other as FunctionInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+    _diffList(info.closures, other.closures);
+  }
+
+  @override
+  visitTypedef(TypedefInfo info) {
+    var other = _other as TypedefInfo;
+    _checkSize(info, other);
+    _checkDeferredStatus(info, other);
+  }
+
+  void _checkSize(BasicInfo info, BasicInfo other) {
+    if (info.size != other.size) {
+      diffs.add(new SizeDiff(info, other.size - info.size));
+    }
+  }
+
+  void _checkDeferredStatus(BasicInfo oldInfo, BasicInfo newInfo) {
+    var oldIsDeferred = _isDeferred(oldInfo);
+    var newIsDeferred = _isDeferred(newInfo);
+    if (oldIsDeferred != newIsDeferred) {
+      diffs.add(new DeferredStatusDiff(oldInfo, oldIsDeferred));
+    }
+  }
+
+  bool _isDeferred(BasicInfo info) {
+    var outputUnit = info.outputUnit;
+    return outputUnit.name != null &&
+        outputUnit.name.isNotEmpty &&
+        outputUnit.name != 'main';
+  }
+
+  void _diffList(List<BasicInfo> oldInfos, List<BasicInfo> newInfos) {
+    var oldNames = <String, BasicInfo>{};
+    var newNames = <String, BasicInfo>{};
+    for (var oldInfo in oldInfos) {
+      oldNames[longName(oldInfo, useLibraryUri: true)] = oldInfo;
+    }
+    for (var newInfo in newInfos) {
+      newNames[longName(newInfo, useLibraryUri: true)] = newInfo;
+    }
+    for (var oldName in oldNames.keys) {
+      if (newNames[oldName] == null) {
+        diffs.add(new RemoveDiff(oldNames[oldName]));
+      } else {
+        _other = newNames[oldName];
+        oldNames[oldName].accept(this);
+      }
+    }
+    for (var newName in newNames.keys) {
+      if (oldNames[newName] == null) {
+        diffs.add(new AddDiff(newNames[newName]));
+      }
+    }
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/graph.dart b/pkg/dart2js_info/lib/src/graph.dart
new file mode 100644
index 0000000..1eaabce
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/graph.dart
@@ -0,0 +1,334 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// A library to work with graphs. It contains a couple algorithms, including
+/// Tarjan's algorithm to compute strongly connected components in a graph and
+/// Cooper et al's dominator algorithm.
+///
+/// Portions of the code in this library was adapted from
+/// `package:analyzer/src/generated/collection_utilities.dart`.
+// TODO(sigmund): move this into a shared place, like quiver?
+library dart2js_info.src.graph;
+
+import 'dart:math' as math;
+
+abstract class Graph<N> {
+  Iterable<N> get nodes;
+  bool get isEmpty;
+  int get nodeCount;
+  Iterable<N> targetsOf(N source);
+  Iterable<N> sourcesOf(N source);
+
+  /// Run a topological sort of the graph. Since the graph may contain cycles,
+  /// this results in a list of strongly connected components rather than a list
+  /// of nodes. The nodes in each strongly connected components only have edges
+  /// that point to nodes in the same component or earlier components.
+  List<List<N>> computeTopologicalSort() {
+    _SccFinder<N> finder = new _SccFinder<N>(this);
+    return finder.computeTopologicalSort();
+  }
+
+  /// Whether [source] can transitively reach [target].
+  bool containsPath(N source, N target) {
+    Set<N> seen = new Set<N>();
+    bool helper(N node) {
+      if (identical(node, target)) return true;
+      if (!seen.add(node)) return false;
+      return targetsOf(node).any(helper);
+    }
+
+    return helper(source);
+  }
+
+  /// Returns all nodes reachable from [root] in post order.
+  Iterable<N> postOrder(N root) sync* {
+    var seen = new Set<N>();
+    Iterable<N> helper(N n) sync* {
+      if (!seen.add(n)) return;
+      for (var x in targetsOf(n)) {
+        yield* helper(x);
+      }
+      yield n;
+    }
+
+    yield* helper(root);
+  }
+
+  /// Returns an iterable of all nodes reachable from [root] in preorder.
+  Iterable<N> preOrder(N root) sync* {
+    var seen = new Set<N>();
+    var stack = <N>[root];
+    while (stack.isNotEmpty) {
+      var next = stack.removeLast();
+      if (!seen.contains(next)) {
+        seen.add(next);
+        yield next;
+        stack.addAll(targetsOf(next));
+      }
+    }
+  }
+
+  /// Returns a list of nodes that form a cycle containing the given node. If
+  /// the node is not part of a cycle in this graph, then a list containing only
+  /// the node itself will be returned.
+  List<N> findCycleContaining(N node) {
+    assert(node != null);
+    _SccFinder<N> finder = new _SccFinder<N>(this);
+    return finder._componentContaining(node);
+  }
+
+  /// Returns a dominator tree starting from root. This is a new graph, with the
+  /// same nodes as this graph, but where edges exist between a node and the
+  /// nodes it immediately dominates. For example, this graph:
+  ///
+  ///       root
+  ///       /   \
+  ///      a     b
+  ///      |    / \
+  ///      c   d   e
+  ///       \ / \ /
+  ///        f   g
+  ///
+  /// Produces this tree:
+  ///
+  ///       root
+  ///       /|  \
+  ///      a |   b
+  ///      | |  /|\
+  ///      c | d | e
+  ///        |   |
+  ///        f   g
+  ///
+  /// Internally we compute dominators using (Cooper, Harvey, and Kennedy's
+  /// algorithm)[http://www.cs.rice.edu/~keith/EMBED/dom.pdf].
+  Graph<N> dominatorTree(N root) {
+    var iDom = (new _DominatorFinder(this)..run(root)).immediateDominators;
+    var graph = new EdgeListGraph<N>();
+    for (N node in iDom.keys) {
+      if (node != root) graph.addEdge(iDom[node], node);
+    }
+    return graph;
+  }
+}
+
+class EdgeListGraph<N> extends Graph<N> {
+  /// Edges in the graph.
+  Map<N, Set<N>> _edges = new Map<N, Set<N>>();
+
+  /// The reverse of _edges.
+  Map<N, Set<N>> _revEdges = new Map<N, Set<N>>();
+
+  Iterable<N> get nodes => _edges.keys;
+  bool get isEmpty => _edges.isEmpty;
+  int get nodeCount => _edges.length;
+
+  final _empty = new Set<N>();
+
+  Iterable<N> targetsOf(N source) => _edges[source] ?? _empty;
+  Iterable<N> sourcesOf(N source) => _revEdges[source] ?? _empty;
+
+  void addEdge(N source, N target) {
+    assert(source != null);
+    assert(target != null);
+    addNode(source);
+    addNode(target);
+    _edges[source].add(target);
+    _revEdges[target].add(source);
+  }
+
+  void addNode(N node) {
+    assert(node != null);
+    _edges.putIfAbsent(node, () => new Set<N>());
+    _revEdges.putIfAbsent(node, () => new Set<N>());
+  }
+
+  /// Remove the edge from the given [source] node to the given [target] node.
+  /// If there was no such edge then the graph will be unmodified: the number of
+  /// edges will be the same and the set of nodes will be the same (neither node
+  /// will either be added or removed).
+  void removeEdge(N source, N target) {
+    _edges[source]?.remove(target);
+  }
+
+  /// Remove the given node from this graph. As a consequence, any edges for
+  /// which that node was either a head or a tail will also be removed.
+  void removeNode(N node) {
+    _edges.remove(node);
+    var sources = _revEdges[node];
+    if (sources == null) return;
+    for (var source in sources) {
+      _edges[source].remove(node);
+    }
+  }
+
+  /// Remove all of the given nodes from this graph. As a consequence, any edges
+  /// for which those nodes were either a head or a tail will also be removed.
+  void removeAllNodes(List<N> nodes) => nodes.forEach(removeNode);
+}
+
+/// Used by the [SccFinder] to maintain information about the nodes that have
+/// been examined. There is an instance of this class per node in the graph.
+class _NodeInfo<N> {
+  /// Depth of the node corresponding to this info.
+  int index = 0;
+
+  /// Depth of the first node in a cycle.
+  int lowlink = 0;
+
+  /// Whether the corresponding node is on the stack. Used to remove the need
+  /// for searching a collection for the node each time the question needs to be
+  /// asked.
+  bool onStack = false;
+
+  /// Component that contains the corresponding node.
+  List<N> component;
+
+  _NodeInfo(int depth)
+      : index = depth,
+        lowlink = depth,
+        onStack = false;
+}
+
+/// Implements Tarjan's Algorithm for finding the strongly connected components
+/// in a graph.
+class _SccFinder<N> {
+  /// The graph to process.
+  final Graph<N> _graph;
+
+  /// The index used to uniquely identify the depth of nodes.
+  int _index = 0;
+
+  /// Nodes that are being visited in order to identify components.
+  List<N> _stack = new List<N>();
+
+  /// Information associated with each node.
+  Map<N, _NodeInfo<N>> _info = <N, _NodeInfo<N>>{};
+
+  /// All strongly connected components found, in topological sort order (each
+  /// node in a strongly connected component only has edges that point to nodes
+  /// in the same component or earlier components).
+  List<List<N>> _allComponents = new List<List<N>>();
+
+  _SccFinder(this._graph);
+
+  /// Return a list containing the nodes that are part of the strongly connected
+  /// component that contains the given node.
+  List<N> _componentContaining(N node) => _strongConnect(node).component;
+
+  /// Run Tarjan's algorithm and return the resulting list of strongly connected
+  /// components. The list is in topological sort order (each node in a strongly
+  /// connected component only has edges that point to nodes in the same
+  /// component or earlier components).
+  List<List<N>> computeTopologicalSort() {
+    for (N node in _graph.nodes) {
+      var nodeInfo = _info[node];
+      if (nodeInfo == null) _strongConnect(node);
+    }
+    return _allComponents;
+  }
+
+  /// Remove and return the top-most element from the stack.
+  N _pop() {
+    N node = _stack.removeAt(_stack.length - 1);
+    _info[node].onStack = false;
+    return node;
+  }
+
+  /// Add the given node to the stack.
+  void _push(N node) {
+    _info[node].onStack = true;
+    _stack.add(node);
+  }
+
+  /// Compute the strongly connected component that contains the given node as
+  /// well as any components containing nodes that are reachable from the given
+  /// component.
+  _NodeInfo<N> _strongConnect(N v) {
+    // Set the depth index for v to the smallest unused index
+    var vInfo = new _NodeInfo<N>(_index++);
+    _info[v] = vInfo;
+    _push(v);
+
+    for (N w in _graph.targetsOf(v)) {
+      var wInfo = _info[w];
+      if (wInfo == null) {
+        // Successor w has not yet been visited; recurse on it
+        wInfo = _strongConnect(w);
+        vInfo.lowlink = math.min(vInfo.lowlink, wInfo.lowlink);
+      } else if (wInfo.onStack) {
+        // Successor w is in stack S and hence in the current SCC
+        vInfo.lowlink = math.min(vInfo.lowlink, wInfo.index);
+      }
+    }
+
+    // If v is a root node, pop the stack and generate an SCC
+    if (vInfo.lowlink == vInfo.index) {
+      var component = new List<N>();
+      N w;
+      do {
+        w = _pop();
+        component.add(w);
+        _info[w].component = component;
+      } while (!identical(w, v));
+      _allComponents.add(component);
+    }
+    return vInfo;
+  }
+}
+
+/// Computes dominators using (Cooper, Harvey, and Kennedy's
+/// algorithm)[http://www.cs.rice.edu/~keith/EMBED/dom.pdf].
+class _DominatorFinder<N> {
+  final Graph<N> _graph;
+  Map<N, N> immediateDominators = {};
+  Map<N, int> postOrderId = {};
+  _DominatorFinder(this._graph);
+
+  run(N root) {
+    immediateDominators[root] = root;
+    bool changed = true;
+    int i = 0;
+    var nodesInPostOrder = _graph.postOrder(root).toList();
+    for (var n in nodesInPostOrder) {
+      postOrderId[n] = i++;
+    }
+    var nodesInReversedPostOrder = nodesInPostOrder.reversed;
+    while (changed) {
+      changed = false;
+      for (var n in nodesInReversedPostOrder) {
+        if (n == root) continue;
+        bool first = true;
+        N idom;
+        for (var p in _graph.sourcesOf(n)) {
+          if (immediateDominators[p] != null) {
+            if (first) {
+              idom = p;
+              first = false;
+            } else {
+              idom = _intersect(p, idom);
+            }
+          }
+        }
+        if (immediateDominators[n] != idom) {
+          immediateDominators[n] = idom;
+          changed = true;
+        }
+      }
+    }
+  }
+
+  N _intersect(N b1, N b2) {
+    var finger1 = b1;
+    var finger2 = b2;
+    while (finger1 != finger2) {
+      while (postOrderId[finger1] < postOrderId[finger2]) {
+        finger1 = immediateDominators[finger1];
+      }
+      while (postOrderId[finger2] < postOrderId[finger1]) {
+        finger2 = immediateDominators[finger2];
+      }
+    }
+    return finger1;
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/io.dart b/pkg/dart2js_info/lib/src/io.dart
new file mode 100644
index 0000000..b37c331
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/io.dart
@@ -0,0 +1,15 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+
+Future<AllInfo> infoFromFile(String fileName) async {
+  var file = new File(fileName);
+  if (fileName.endsWith('.json')) {
+    return new AllInfoJsonCodec().decode(jsonDecode(await file.readAsString()));
+  } else {
+    return binary.decode(file.readAsBytesSync());
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/proto/info.pb.dart b/pkg/dart2js_info/lib/src/proto/info.pb.dart
new file mode 100644
index 0000000..910b7b2
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -0,0 +1,1318 @@
+///
+//  Generated code. Do not modify.
+//  source: info.proto
+//
+// @dart = 2.3
+// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+
+import 'dart:core' as $core;
+
+import 'package:fixnum/fixnum.dart' as $fixnum;
+import 'package:protobuf/protobuf.dart' as $pb;
+
+class DependencyInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('DependencyInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'targetId')
+    ..aOS(2, 'mask')
+    ..hasRequiredFields = false;
+
+  DependencyInfoPB._() : super();
+  factory DependencyInfoPB() => create();
+  factory DependencyInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory DependencyInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  DependencyInfoPB clone() => DependencyInfoPB()..mergeFromMessage(this);
+  DependencyInfoPB copyWith(void Function(DependencyInfoPB) updates) =>
+      super.copyWith((message) => updates(message as DependencyInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static DependencyInfoPB create() => DependencyInfoPB._();
+  DependencyInfoPB createEmptyInstance() => create();
+  static $pb.PbList<DependencyInfoPB> createRepeated() =>
+      $pb.PbList<DependencyInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static DependencyInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<DependencyInfoPB>(create);
+  static DependencyInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get targetId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set targetId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasTargetId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearTargetId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get mask => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set mask($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasMask() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearMask() => clearField(2);
+}
+
+class AllInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('AllInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOM<ProgramInfoPB>(1, 'program', subBuilder: ProgramInfoPB.create)
+    ..m<$core.String, InfoPB>(2, 'allInfos',
+        entryClassName: 'AllInfoPB.AllInfosEntry',
+        keyFieldType: $pb.PbFieldType.OS,
+        valueFieldType: $pb.PbFieldType.OM,
+        valueCreator: InfoPB.create,
+        packageName: const $pb.PackageName('dart2js_info.proto'))
+    ..pc<LibraryDeferredImportsPB>(3, 'deferredImports', $pb.PbFieldType.PM,
+        subBuilder: LibraryDeferredImportsPB.create)
+    ..hasRequiredFields = false;
+
+  AllInfoPB._() : super();
+  factory AllInfoPB() => create();
+  factory AllInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory AllInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  AllInfoPB clone() => AllInfoPB()..mergeFromMessage(this);
+  AllInfoPB copyWith(void Function(AllInfoPB) updates) =>
+      super.copyWith((message) => updates(message as AllInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static AllInfoPB create() => AllInfoPB._();
+  AllInfoPB createEmptyInstance() => create();
+  static $pb.PbList<AllInfoPB> createRepeated() => $pb.PbList<AllInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static AllInfoPB getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AllInfoPB>(create);
+  static AllInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  ProgramInfoPB get program => $_getN(0);
+  @$pb.TagNumber(1)
+  set program(ProgramInfoPB v) {
+    setField(1, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasProgram() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearProgram() => clearField(1);
+  @$pb.TagNumber(1)
+  ProgramInfoPB ensureProgram() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.Map<$core.String, InfoPB> get allInfos => $_getMap(1);
+
+  @$pb.TagNumber(3)
+  $core.List<LibraryDeferredImportsPB> get deferredImports => $_getList(2);
+}
+
+enum InfoPB_Concrete {
+  libraryInfo,
+  classInfo,
+  functionInfo,
+  fieldInfo,
+  constantInfo,
+  outputUnitInfo,
+  typedefInfo,
+  closureInfo,
+  notSet
+}
+
+class InfoPB extends $pb.GeneratedMessage {
+  static const $core.Map<$core.int, InfoPB_Concrete> _InfoPB_ConcreteByTag = {
+    100: InfoPB_Concrete.libraryInfo,
+    101: InfoPB_Concrete.classInfo,
+    102: InfoPB_Concrete.functionInfo,
+    103: InfoPB_Concrete.fieldInfo,
+    104: InfoPB_Concrete.constantInfo,
+    105: InfoPB_Concrete.outputUnitInfo,
+    106: InfoPB_Concrete.typedefInfo,
+    107: InfoPB_Concrete.closureInfo,
+    0: InfoPB_Concrete.notSet
+  };
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('InfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..oo(0, [100, 101, 102, 103, 104, 105, 106, 107])
+    ..aOS(1, 'name')
+    ..a<$core.int>(2, 'id', $pb.PbFieldType.O3)
+    ..aOS(3, 'serializedId')
+    ..aOS(4, 'coverageId')
+    ..a<$core.int>(5, 'size', $pb.PbFieldType.O3)
+    ..aOS(6, 'parentId')
+    ..pc<DependencyInfoPB>(7, 'uses', $pb.PbFieldType.PM,
+        subBuilder: DependencyInfoPB.create)
+    ..aOS(8, 'outputUnitId')
+    ..aOM<LibraryInfoPB>(100, 'libraryInfo', subBuilder: LibraryInfoPB.create)
+    ..aOM<ClassInfoPB>(101, 'classInfo', subBuilder: ClassInfoPB.create)
+    ..aOM<FunctionInfoPB>(102, 'functionInfo',
+        subBuilder: FunctionInfoPB.create)
+    ..aOM<FieldInfoPB>(103, 'fieldInfo', subBuilder: FieldInfoPB.create)
+    ..aOM<ConstantInfoPB>(104, 'constantInfo',
+        subBuilder: ConstantInfoPB.create)
+    ..aOM<OutputUnitInfoPB>(105, 'outputUnitInfo',
+        subBuilder: OutputUnitInfoPB.create)
+    ..aOM<TypedefInfoPB>(106, 'typedefInfo', subBuilder: TypedefInfoPB.create)
+    ..aOM<ClosureInfoPB>(107, 'closureInfo', subBuilder: ClosureInfoPB.create)
+    ..hasRequiredFields = false;
+
+  InfoPB._() : super();
+  factory InfoPB() => create();
+  factory InfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory InfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  InfoPB clone() => InfoPB()..mergeFromMessage(this);
+  InfoPB copyWith(void Function(InfoPB) updates) =>
+      super.copyWith((message) => updates(message as InfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static InfoPB create() => InfoPB._();
+  InfoPB createEmptyInstance() => create();
+  static $pb.PbList<InfoPB> createRepeated() => $pb.PbList<InfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static InfoPB getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<InfoPB>(create);
+  static InfoPB _defaultInstance;
+
+  InfoPB_Concrete whichConcrete() => _InfoPB_ConcreteByTag[$_whichOneof(0)];
+  void clearConcrete() => clearField($_whichOneof(0));
+
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get id => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set id($core.int v) {
+    $_setSignedInt32(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasId() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearId() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get serializedId => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set serializedId($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasSerializedId() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearSerializedId() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get coverageId => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set coverageId($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCoverageId() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCoverageId() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get size => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set size($core.int v) {
+    $_setSignedInt32(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasSize() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearSize() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get parentId => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set parentId($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasParentId() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearParentId() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.List<DependencyInfoPB> get uses => $_getList(6);
+
+  @$pb.TagNumber(8)
+  $core.String get outputUnitId => $_getSZ(7);
+  @$pb.TagNumber(8)
+  set outputUnitId($core.String v) {
+    $_setString(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasOutputUnitId() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearOutputUnitId() => clearField(8);
+
+  @$pb.TagNumber(100)
+  LibraryInfoPB get libraryInfo => $_getN(8);
+  @$pb.TagNumber(100)
+  set libraryInfo(LibraryInfoPB v) {
+    setField(100, v);
+  }
+
+  @$pb.TagNumber(100)
+  $core.bool hasLibraryInfo() => $_has(8);
+  @$pb.TagNumber(100)
+  void clearLibraryInfo() => clearField(100);
+  @$pb.TagNumber(100)
+  LibraryInfoPB ensureLibraryInfo() => $_ensure(8);
+
+  @$pb.TagNumber(101)
+  ClassInfoPB get classInfo => $_getN(9);
+  @$pb.TagNumber(101)
+  set classInfo(ClassInfoPB v) {
+    setField(101, v);
+  }
+
+  @$pb.TagNumber(101)
+  $core.bool hasClassInfo() => $_has(9);
+  @$pb.TagNumber(101)
+  void clearClassInfo() => clearField(101);
+  @$pb.TagNumber(101)
+  ClassInfoPB ensureClassInfo() => $_ensure(9);
+
+  @$pb.TagNumber(102)
+  FunctionInfoPB get functionInfo => $_getN(10);
+  @$pb.TagNumber(102)
+  set functionInfo(FunctionInfoPB v) {
+    setField(102, v);
+  }
+
+  @$pb.TagNumber(102)
+  $core.bool hasFunctionInfo() => $_has(10);
+  @$pb.TagNumber(102)
+  void clearFunctionInfo() => clearField(102);
+  @$pb.TagNumber(102)
+  FunctionInfoPB ensureFunctionInfo() => $_ensure(10);
+
+  @$pb.TagNumber(103)
+  FieldInfoPB get fieldInfo => $_getN(11);
+  @$pb.TagNumber(103)
+  set fieldInfo(FieldInfoPB v) {
+    setField(103, v);
+  }
+
+  @$pb.TagNumber(103)
+  $core.bool hasFieldInfo() => $_has(11);
+  @$pb.TagNumber(103)
+  void clearFieldInfo() => clearField(103);
+  @$pb.TagNumber(103)
+  FieldInfoPB ensureFieldInfo() => $_ensure(11);
+
+  @$pb.TagNumber(104)
+  ConstantInfoPB get constantInfo => $_getN(12);
+  @$pb.TagNumber(104)
+  set constantInfo(ConstantInfoPB v) {
+    setField(104, v);
+  }
+
+  @$pb.TagNumber(104)
+  $core.bool hasConstantInfo() => $_has(12);
+  @$pb.TagNumber(104)
+  void clearConstantInfo() => clearField(104);
+  @$pb.TagNumber(104)
+  ConstantInfoPB ensureConstantInfo() => $_ensure(12);
+
+  @$pb.TagNumber(105)
+  OutputUnitInfoPB get outputUnitInfo => $_getN(13);
+  @$pb.TagNumber(105)
+  set outputUnitInfo(OutputUnitInfoPB v) {
+    setField(105, v);
+  }
+
+  @$pb.TagNumber(105)
+  $core.bool hasOutputUnitInfo() => $_has(13);
+  @$pb.TagNumber(105)
+  void clearOutputUnitInfo() => clearField(105);
+  @$pb.TagNumber(105)
+  OutputUnitInfoPB ensureOutputUnitInfo() => $_ensure(13);
+
+  @$pb.TagNumber(106)
+  TypedefInfoPB get typedefInfo => $_getN(14);
+  @$pb.TagNumber(106)
+  set typedefInfo(TypedefInfoPB v) {
+    setField(106, v);
+  }
+
+  @$pb.TagNumber(106)
+  $core.bool hasTypedefInfo() => $_has(14);
+  @$pb.TagNumber(106)
+  void clearTypedefInfo() => clearField(106);
+  @$pb.TagNumber(106)
+  TypedefInfoPB ensureTypedefInfo() => $_ensure(14);
+
+  @$pb.TagNumber(107)
+  ClosureInfoPB get closureInfo => $_getN(15);
+  @$pb.TagNumber(107)
+  set closureInfo(ClosureInfoPB v) {
+    setField(107, v);
+  }
+
+  @$pb.TagNumber(107)
+  $core.bool hasClosureInfo() => $_has(15);
+  @$pb.TagNumber(107)
+  void clearClosureInfo() => clearField(107);
+  @$pb.TagNumber(107)
+  ClosureInfoPB ensureClosureInfo() => $_ensure(15);
+}
+
+class ProgramInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ProgramInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'entrypointId')
+    ..a<$core.int>(2, 'size', $pb.PbFieldType.O3)
+    ..aOS(3, 'dart2jsVersion')
+    ..aInt64(4, 'compilationMoment')
+    ..aInt64(5, 'compilationDuration')
+    ..aInt64(6, 'toProtoDuration')
+    ..aInt64(7, 'dumpInfoDuration')
+    ..aOB(8, 'noSuchMethodEnabled')
+    ..aOB(9, 'isRuntimeTypeUsed')
+    ..aOB(10, 'isIsolateUsed')
+    ..aOB(11, 'isFunctionApplyUsed')
+    ..aOB(12, 'isMirrorsUsed')
+    ..aOB(13, 'minified')
+    ..hasRequiredFields = false;
+
+  ProgramInfoPB._() : super();
+  factory ProgramInfoPB() => create();
+  factory ProgramInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ProgramInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  ProgramInfoPB clone() => ProgramInfoPB()..mergeFromMessage(this);
+  ProgramInfoPB copyWith(void Function(ProgramInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ProgramInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ProgramInfoPB create() => ProgramInfoPB._();
+  ProgramInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ProgramInfoPB> createRepeated() =>
+      $pb.PbList<ProgramInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ProgramInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ProgramInfoPB>(create);
+  static ProgramInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get entrypointId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set entrypointId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasEntrypointId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearEntrypointId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get size => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set size($core.int v) {
+    $_setSignedInt32(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasSize() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSize() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get dart2jsVersion => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set dart2jsVersion($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasDart2jsVersion() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearDart2jsVersion() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $fixnum.Int64 get compilationMoment => $_getI64(3);
+  @$pb.TagNumber(4)
+  set compilationMoment($fixnum.Int64 v) {
+    $_setInt64(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCompilationMoment() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCompilationMoment() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $fixnum.Int64 get compilationDuration => $_getI64(4);
+  @$pb.TagNumber(5)
+  set compilationDuration($fixnum.Int64 v) {
+    $_setInt64(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasCompilationDuration() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearCompilationDuration() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $fixnum.Int64 get toProtoDuration => $_getI64(5);
+  @$pb.TagNumber(6)
+  set toProtoDuration($fixnum.Int64 v) {
+    $_setInt64(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasToProtoDuration() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearToProtoDuration() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $fixnum.Int64 get dumpInfoDuration => $_getI64(6);
+  @$pb.TagNumber(7)
+  set dumpInfoDuration($fixnum.Int64 v) {
+    $_setInt64(6, v);
+  }
+
+  @$pb.TagNumber(7)
+  $core.bool hasDumpInfoDuration() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearDumpInfoDuration() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.bool get noSuchMethodEnabled => $_getBF(7);
+  @$pb.TagNumber(8)
+  set noSuchMethodEnabled($core.bool v) {
+    $_setBool(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasNoSuchMethodEnabled() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearNoSuchMethodEnabled() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.bool get isRuntimeTypeUsed => $_getBF(8);
+  @$pb.TagNumber(9)
+  set isRuntimeTypeUsed($core.bool v) {
+    $_setBool(8, v);
+  }
+
+  @$pb.TagNumber(9)
+  $core.bool hasIsRuntimeTypeUsed() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearIsRuntimeTypeUsed() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.bool get isIsolateUsed => $_getBF(9);
+  @$pb.TagNumber(10)
+  set isIsolateUsed($core.bool v) {
+    $_setBool(9, v);
+  }
+
+  @$pb.TagNumber(10)
+  $core.bool hasIsIsolateUsed() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearIsIsolateUsed() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.bool get isFunctionApplyUsed => $_getBF(10);
+  @$pb.TagNumber(11)
+  set isFunctionApplyUsed($core.bool v) {
+    $_setBool(10, v);
+  }
+
+  @$pb.TagNumber(11)
+  $core.bool hasIsFunctionApplyUsed() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearIsFunctionApplyUsed() => clearField(11);
+
+  @$pb.TagNumber(12)
+  $core.bool get isMirrorsUsed => $_getBF(11);
+  @$pb.TagNumber(12)
+  set isMirrorsUsed($core.bool v) {
+    $_setBool(11, v);
+  }
+
+  @$pb.TagNumber(12)
+  $core.bool hasIsMirrorsUsed() => $_has(11);
+  @$pb.TagNumber(12)
+  void clearIsMirrorsUsed() => clearField(12);
+
+  @$pb.TagNumber(13)
+  $core.bool get minified => $_getBF(12);
+  @$pb.TagNumber(13)
+  set minified($core.bool v) {
+    $_setBool(12, v);
+  }
+
+  @$pb.TagNumber(13)
+  $core.bool hasMinified() => $_has(12);
+  @$pb.TagNumber(13)
+  void clearMinified() => clearField(13);
+}
+
+class LibraryInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'uri')
+    ..pPS(2, 'childrenIds')
+    ..hasRequiredFields = false;
+
+  LibraryInfoPB._() : super();
+  factory LibraryInfoPB() => create();
+  factory LibraryInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory LibraryInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  LibraryInfoPB clone() => LibraryInfoPB()..mergeFromMessage(this);
+  LibraryInfoPB copyWith(void Function(LibraryInfoPB) updates) =>
+      super.copyWith((message) => updates(message as LibraryInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static LibraryInfoPB create() => LibraryInfoPB._();
+  LibraryInfoPB createEmptyInstance() => create();
+  static $pb.PbList<LibraryInfoPB> createRepeated() =>
+      $pb.PbList<LibraryInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static LibraryInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<LibraryInfoPB>(create);
+  static LibraryInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get uri => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set uri($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasUri() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUri() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get childrenIds => $_getList(1);
+}
+
+class OutputUnitInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('OutputUnitInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..pPS(1, 'imports')
+    ..hasRequiredFields = false;
+
+  OutputUnitInfoPB._() : super();
+  factory OutputUnitInfoPB() => create();
+  factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory OutputUnitInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  OutputUnitInfoPB clone() => OutputUnitInfoPB()..mergeFromMessage(this);
+  OutputUnitInfoPB copyWith(void Function(OutputUnitInfoPB) updates) =>
+      super.copyWith((message) => updates(message as OutputUnitInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static OutputUnitInfoPB create() => OutputUnitInfoPB._();
+  OutputUnitInfoPB createEmptyInstance() => create();
+  static $pb.PbList<OutputUnitInfoPB> createRepeated() =>
+      $pb.PbList<OutputUnitInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static OutputUnitInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<OutputUnitInfoPB>(create);
+  static OutputUnitInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<$core.String> get imports => $_getList(0);
+}
+
+class ClassInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClassInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOB(1, 'isAbstract')
+    ..pPS(2, 'childrenIds')
+    ..hasRequiredFields = false;
+
+  ClassInfoPB._() : super();
+  factory ClassInfoPB() => create();
+  factory ClassInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ClassInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  ClassInfoPB clone() => ClassInfoPB()..mergeFromMessage(this);
+  ClassInfoPB copyWith(void Function(ClassInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ClassInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ClassInfoPB create() => ClassInfoPB._();
+  ClassInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ClassInfoPB> createRepeated() => $pb.PbList<ClassInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ClassInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ClassInfoPB>(create);
+  static ClassInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.bool get isAbstract => $_getBF(0);
+  @$pb.TagNumber(1)
+  set isAbstract($core.bool v) {
+    $_setBool(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasIsAbstract() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearIsAbstract() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get childrenIds => $_getList(1);
+}
+
+class ConstantInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ConstantInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'code')
+    ..hasRequiredFields = false;
+
+  ConstantInfoPB._() : super();
+  factory ConstantInfoPB() => create();
+  factory ConstantInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ConstantInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  ConstantInfoPB clone() => ConstantInfoPB()..mergeFromMessage(this);
+  ConstantInfoPB copyWith(void Function(ConstantInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ConstantInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ConstantInfoPB create() => ConstantInfoPB._();
+  ConstantInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ConstantInfoPB> createRepeated() =>
+      $pb.PbList<ConstantInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ConstantInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ConstantInfoPB>(create);
+  static ConstantInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get code => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set code($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasCode() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearCode() => clearField(1);
+}
+
+class FieldInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FieldInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'type')
+    ..aOS(2, 'inferredType')
+    ..pPS(3, 'childrenIds')
+    ..aOS(4, 'code')
+    ..aOB(5, 'isConst')
+    ..aOS(6, 'initializerId')
+    ..hasRequiredFields = false;
+
+  FieldInfoPB._() : super();
+  factory FieldInfoPB() => create();
+  factory FieldInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory FieldInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  FieldInfoPB clone() => FieldInfoPB()..mergeFromMessage(this);
+  FieldInfoPB copyWith(void Function(FieldInfoPB) updates) =>
+      super.copyWith((message) => updates(message as FieldInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FieldInfoPB create() => FieldInfoPB._();
+  FieldInfoPB createEmptyInstance() => create();
+  static $pb.PbList<FieldInfoPB> createRepeated() => $pb.PbList<FieldInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static FieldInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FieldInfoPB>(create);
+  static FieldInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get type => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set type($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasType() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearType() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get inferredType => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set inferredType($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasInferredType() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearInferredType() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<$core.String> get childrenIds => $_getList(2);
+
+  @$pb.TagNumber(4)
+  $core.String get code => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set code($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasCode() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCode() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.bool get isConst => $_getBF(4);
+  @$pb.TagNumber(5)
+  set isConst($core.bool v) {
+    $_setBool(4, v);
+  }
+
+  @$pb.TagNumber(5)
+  $core.bool hasIsConst() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearIsConst() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get initializerId => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set initializerId($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasInitializerId() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearInitializerId() => clearField(6);
+}
+
+class TypedefInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('TypedefInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'type')
+    ..hasRequiredFields = false;
+
+  TypedefInfoPB._() : super();
+  factory TypedefInfoPB() => create();
+  factory TypedefInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory TypedefInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  TypedefInfoPB clone() => TypedefInfoPB()..mergeFromMessage(this);
+  TypedefInfoPB copyWith(void Function(TypedefInfoPB) updates) =>
+      super.copyWith((message) => updates(message as TypedefInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static TypedefInfoPB create() => TypedefInfoPB._();
+  TypedefInfoPB createEmptyInstance() => create();
+  static $pb.PbList<TypedefInfoPB> createRepeated() =>
+      $pb.PbList<TypedefInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static TypedefInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<TypedefInfoPB>(create);
+  static TypedefInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get type => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set type($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasType() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearType() => clearField(1);
+}
+
+class FunctionModifiersPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionModifiersPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOB(1, 'isStatic')
+    ..aOB(2, 'isConst')
+    ..aOB(3, 'isFactory')
+    ..aOB(4, 'isExternal')
+    ..hasRequiredFields = false;
+
+  FunctionModifiersPB._() : super();
+  factory FunctionModifiersPB() => create();
+  factory FunctionModifiersPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory FunctionModifiersPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  FunctionModifiersPB clone() => FunctionModifiersPB()..mergeFromMessage(this);
+  FunctionModifiersPB copyWith(void Function(FunctionModifiersPB) updates) =>
+      super.copyWith((message) => updates(message as FunctionModifiersPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FunctionModifiersPB create() => FunctionModifiersPB._();
+  FunctionModifiersPB createEmptyInstance() => create();
+  static $pb.PbList<FunctionModifiersPB> createRepeated() =>
+      $pb.PbList<FunctionModifiersPB>();
+  @$core.pragma('dart2js:noInline')
+  static FunctionModifiersPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FunctionModifiersPB>(create);
+  static FunctionModifiersPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.bool get isStatic => $_getBF(0);
+  @$pb.TagNumber(1)
+  set isStatic($core.bool v) {
+    $_setBool(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasIsStatic() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearIsStatic() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isConst => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isConst($core.bool v) {
+    $_setBool(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasIsConst() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsConst() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.bool get isFactory => $_getBF(2);
+  @$pb.TagNumber(3)
+  set isFactory($core.bool v) {
+    $_setBool(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasIsFactory() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearIsFactory() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.bool get isExternal => $_getBF(3);
+  @$pb.TagNumber(4)
+  set isExternal($core.bool v) {
+    $_setBool(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasIsExternal() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearIsExternal() => clearField(4);
+}
+
+class ParameterInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ParameterInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'name')
+    ..aOS(2, 'type')
+    ..aOS(3, 'declaredType')
+    ..hasRequiredFields = false;
+
+  ParameterInfoPB._() : super();
+  factory ParameterInfoPB() => create();
+  factory ParameterInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ParameterInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  ParameterInfoPB clone() => ParameterInfoPB()..mergeFromMessage(this);
+  ParameterInfoPB copyWith(void Function(ParameterInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ParameterInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ParameterInfoPB create() => ParameterInfoPB._();
+  ParameterInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ParameterInfoPB> createRepeated() =>
+      $pb.PbList<ParameterInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ParameterInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ParameterInfoPB>(create);
+  static ParameterInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get type => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set type($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasType() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearType() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get declaredType => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set declaredType($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasDeclaredType() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearDeclaredType() => clearField(3);
+}
+
+class FunctionInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('FunctionInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOM<FunctionModifiersPB>(1, 'functionModifiers',
+        subBuilder: FunctionModifiersPB.create)
+    ..pPS(2, 'childrenIds')
+    ..aOS(3, 'returnType')
+    ..aOS(4, 'inferredReturnType')
+    ..pc<ParameterInfoPB>(5, 'parameters', $pb.PbFieldType.PM,
+        subBuilder: ParameterInfoPB.create)
+    ..aOS(6, 'sideEffects')
+    ..a<$core.int>(7, 'inlinedCount', $pb.PbFieldType.O3)
+    ..aOS(8, 'code')
+    ..hasRequiredFields = false;
+
+  FunctionInfoPB._() : super();
+  factory FunctionInfoPB() => create();
+  factory FunctionInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory FunctionInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  FunctionInfoPB clone() => FunctionInfoPB()..mergeFromMessage(this);
+  FunctionInfoPB copyWith(void Function(FunctionInfoPB) updates) =>
+      super.copyWith((message) => updates(message as FunctionInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static FunctionInfoPB create() => FunctionInfoPB._();
+  FunctionInfoPB createEmptyInstance() => create();
+  static $pb.PbList<FunctionInfoPB> createRepeated() =>
+      $pb.PbList<FunctionInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static FunctionInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<FunctionInfoPB>(create);
+  static FunctionInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  FunctionModifiersPB get functionModifiers => $_getN(0);
+  @$pb.TagNumber(1)
+  set functionModifiers(FunctionModifiersPB v) {
+    setField(1, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasFunctionModifiers() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearFunctionModifiers() => clearField(1);
+  @$pb.TagNumber(1)
+  FunctionModifiersPB ensureFunctionModifiers() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get childrenIds => $_getList(1);
+
+  @$pb.TagNumber(3)
+  $core.String get returnType => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set returnType($core.String v) {
+    $_setString(2, v);
+  }
+
+  @$pb.TagNumber(3)
+  $core.bool hasReturnType() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearReturnType() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get inferredReturnType => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set inferredReturnType($core.String v) {
+    $_setString(3, v);
+  }
+
+  @$pb.TagNumber(4)
+  $core.bool hasInferredReturnType() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearInferredReturnType() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.List<ParameterInfoPB> get parameters => $_getList(4);
+
+  @$pb.TagNumber(6)
+  $core.String get sideEffects => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set sideEffects($core.String v) {
+    $_setString(5, v);
+  }
+
+  @$pb.TagNumber(6)
+  $core.bool hasSideEffects() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearSideEffects() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.int get inlinedCount => $_getIZ(6);
+  @$pb.TagNumber(7)
+  set inlinedCount($core.int v) {
+    $_setSignedInt32(6, v);
+  }
+
+  @$pb.TagNumber(7)
+  $core.bool hasInlinedCount() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearInlinedCount() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.String get code => $_getSZ(7);
+  @$pb.TagNumber(8)
+  set code($core.String v) {
+    $_setString(7, v);
+  }
+
+  @$pb.TagNumber(8)
+  $core.bool hasCode() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearCode() => clearField(8);
+}
+
+class ClosureInfoPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClosureInfoPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'functionId')
+    ..hasRequiredFields = false;
+
+  ClosureInfoPB._() : super();
+  factory ClosureInfoPB() => create();
+  factory ClosureInfoPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory ClosureInfoPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  ClosureInfoPB clone() => ClosureInfoPB()..mergeFromMessage(this);
+  ClosureInfoPB copyWith(void Function(ClosureInfoPB) updates) =>
+      super.copyWith((message) => updates(message as ClosureInfoPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static ClosureInfoPB create() => ClosureInfoPB._();
+  ClosureInfoPB createEmptyInstance() => create();
+  static $pb.PbList<ClosureInfoPB> createRepeated() =>
+      $pb.PbList<ClosureInfoPB>();
+  @$core.pragma('dart2js:noInline')
+  static ClosureInfoPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<ClosureInfoPB>(create);
+  static ClosureInfoPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get functionId => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set functionId($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasFunctionId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearFunctionId() => clearField(1);
+}
+
+class DeferredImportPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeferredImportPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'prefix')
+    ..pPS(2, 'files')
+    ..hasRequiredFields = false;
+
+  DeferredImportPB._() : super();
+  factory DeferredImportPB() => create();
+  factory DeferredImportPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory DeferredImportPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  DeferredImportPB clone() => DeferredImportPB()..mergeFromMessage(this);
+  DeferredImportPB copyWith(void Function(DeferredImportPB) updates) =>
+      super.copyWith((message) => updates(message as DeferredImportPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static DeferredImportPB create() => DeferredImportPB._();
+  DeferredImportPB createEmptyInstance() => create();
+  static $pb.PbList<DeferredImportPB> createRepeated() =>
+      $pb.PbList<DeferredImportPB>();
+  @$core.pragma('dart2js:noInline')
+  static DeferredImportPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<DeferredImportPB>(create);
+  static DeferredImportPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get prefix => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set prefix($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasPrefix() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPrefix() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get files => $_getList(1);
+}
+
+class LibraryDeferredImportsPB extends $pb.GeneratedMessage {
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo('LibraryDeferredImportsPB',
+      package: const $pb.PackageName('dart2js_info.proto'),
+      createEmptyInstance: create)
+    ..aOS(1, 'libraryUri')
+    ..aOS(2, 'libraryName')
+    ..pc<DeferredImportPB>(3, 'imports', $pb.PbFieldType.PM,
+        subBuilder: DeferredImportPB.create)
+    ..hasRequiredFields = false;
+
+  LibraryDeferredImportsPB._() : super();
+  factory LibraryDeferredImportsPB() => create();
+  factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(i, r);
+  factory LibraryDeferredImportsPB.fromJson($core.String i,
+          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(i, r);
+  LibraryDeferredImportsPB clone() =>
+      LibraryDeferredImportsPB()..mergeFromMessage(this);
+  LibraryDeferredImportsPB copyWith(
+          void Function(LibraryDeferredImportsPB) updates) =>
+      super.copyWith((message) => updates(message as LibraryDeferredImportsPB));
+  $pb.BuilderInfo get info_ => _i;
+  @$core.pragma('dart2js:noInline')
+  static LibraryDeferredImportsPB create() => LibraryDeferredImportsPB._();
+  LibraryDeferredImportsPB createEmptyInstance() => create();
+  static $pb.PbList<LibraryDeferredImportsPB> createRepeated() =>
+      $pb.PbList<LibraryDeferredImportsPB>();
+  @$core.pragma('dart2js:noInline')
+  static LibraryDeferredImportsPB getDefault() => _defaultInstance ??=
+      $pb.GeneratedMessage.$_defaultFor<LibraryDeferredImportsPB>(create);
+  static LibraryDeferredImportsPB _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get libraryUri => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set libraryUri($core.String v) {
+    $_setString(0, v);
+  }
+
+  @$pb.TagNumber(1)
+  $core.bool hasLibraryUri() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearLibraryUri() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get libraryName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set libraryName($core.String v) {
+    $_setString(1, v);
+  }
+
+  @$pb.TagNumber(2)
+  $core.bool hasLibraryName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLibraryName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<DeferredImportPB> get imports => $_getList(2);
+}
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
new file mode 100644
index 0000000..9990b57
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
@@ -0,0 +1,6 @@
+///
+//  Generated code. Do not modify.
+//  source: info.proto
+//
+// @dart = 2.3
+// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
new file mode 100644
index 0000000..00eff86
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
@@ -0,0 +1,381 @@
+///
+//  Generated code. Do not modify.
+//  source: info.proto
+//
+// @dart = 2.3
+// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+
+const DependencyInfoPB$json = const {
+  '1': 'DependencyInfoPB',
+  '2': const [
+    const {'1': 'target_id', '3': 1, '4': 1, '5': 9, '10': 'targetId'},
+    const {'1': 'mask', '3': 2, '4': 1, '5': 9, '10': 'mask'},
+  ],
+};
+
+const AllInfoPB$json = const {
+  '1': 'AllInfoPB',
+  '2': const [
+    const {
+      '1': 'program',
+      '3': 1,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ProgramInfoPB',
+      '10': 'program'
+    },
+    const {
+      '1': 'all_infos',
+      '3': 2,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.AllInfoPB.AllInfosEntry',
+      '10': 'allInfos'
+    },
+    const {
+      '1': 'deferred_imports',
+      '3': 3,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.LibraryDeferredImportsPB',
+      '10': 'deferredImports'
+    },
+  ],
+  '3': const [AllInfoPB_AllInfosEntry$json],
+};
+
+const AllInfoPB_AllInfosEntry$json = const {
+  '1': 'AllInfosEntry',
+  '2': const [
+    const {'1': 'key', '3': 1, '4': 1, '5': 9, '10': 'key'},
+    const {
+      '1': 'value',
+      '3': 2,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.InfoPB',
+      '10': 'value'
+    },
+  ],
+  '7': const {'7': true},
+};
+
+const InfoPB$json = const {
+  '1': 'InfoPB',
+  '2': const [
+    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    const {'1': 'id', '3': 2, '4': 1, '5': 5, '10': 'id'},
+    const {'1': 'serialized_id', '3': 3, '4': 1, '5': 9, '10': 'serializedId'},
+    const {'1': 'coverage_id', '3': 4, '4': 1, '5': 9, '10': 'coverageId'},
+    const {'1': 'size', '3': 5, '4': 1, '5': 5, '10': 'size'},
+    const {'1': 'parent_id', '3': 6, '4': 1, '5': 9, '10': 'parentId'},
+    const {
+      '1': 'uses',
+      '3': 7,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.DependencyInfoPB',
+      '10': 'uses'
+    },
+    const {'1': 'output_unit_id', '3': 8, '4': 1, '5': 9, '10': 'outputUnitId'},
+    const {
+      '1': 'library_info',
+      '3': 100,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.LibraryInfoPB',
+      '9': 0,
+      '10': 'libraryInfo'
+    },
+    const {
+      '1': 'class_info',
+      '3': 101,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ClassInfoPB',
+      '9': 0,
+      '10': 'classInfo'
+    },
+    const {
+      '1': 'function_info',
+      '3': 102,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FunctionInfoPB',
+      '9': 0,
+      '10': 'functionInfo'
+    },
+    const {
+      '1': 'field_info',
+      '3': 103,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FieldInfoPB',
+      '9': 0,
+      '10': 'fieldInfo'
+    },
+    const {
+      '1': 'constant_info',
+      '3': 104,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ConstantInfoPB',
+      '9': 0,
+      '10': 'constantInfo'
+    },
+    const {
+      '1': 'output_unit_info',
+      '3': 105,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.OutputUnitInfoPB',
+      '9': 0,
+      '10': 'outputUnitInfo'
+    },
+    const {
+      '1': 'typedef_info',
+      '3': 106,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.TypedefInfoPB',
+      '9': 0,
+      '10': 'typedefInfo'
+    },
+    const {
+      '1': 'closure_info',
+      '3': 107,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.ClosureInfoPB',
+      '9': 0,
+      '10': 'closureInfo'
+    },
+  ],
+  '8': const [
+    const {'1': 'concrete'},
+  ],
+  '9': const [
+    const {'1': 9, '2': 100},
+  ],
+};
+
+const ProgramInfoPB$json = const {
+  '1': 'ProgramInfoPB',
+  '2': const [
+    const {'1': 'entrypoint_id', '3': 1, '4': 1, '5': 9, '10': 'entrypointId'},
+    const {'1': 'size', '3': 2, '4': 1, '5': 5, '10': 'size'},
+    const {
+      '1': 'dart2js_version',
+      '3': 3,
+      '4': 1,
+      '5': 9,
+      '10': 'dart2jsVersion'
+    },
+    const {
+      '1': 'compilation_moment',
+      '3': 4,
+      '4': 1,
+      '5': 3,
+      '10': 'compilationMoment'
+    },
+    const {
+      '1': 'compilation_duration',
+      '3': 5,
+      '4': 1,
+      '5': 3,
+      '10': 'compilationDuration'
+    },
+    const {
+      '1': 'to_proto_duration',
+      '3': 6,
+      '4': 1,
+      '5': 3,
+      '10': 'toProtoDuration'
+    },
+    const {
+      '1': 'dump_info_duration',
+      '3': 7,
+      '4': 1,
+      '5': 3,
+      '10': 'dumpInfoDuration'
+    },
+    const {
+      '1': 'no_such_method_enabled',
+      '3': 8,
+      '4': 1,
+      '5': 8,
+      '10': 'noSuchMethodEnabled'
+    },
+    const {
+      '1': 'is_runtime_type_used',
+      '3': 9,
+      '4': 1,
+      '5': 8,
+      '10': 'isRuntimeTypeUsed'
+    },
+    const {
+      '1': 'is_isolate_used',
+      '3': 10,
+      '4': 1,
+      '5': 8,
+      '10': 'isIsolateUsed'
+    },
+    const {
+      '1': 'is_function_apply_used',
+      '3': 11,
+      '4': 1,
+      '5': 8,
+      '10': 'isFunctionApplyUsed'
+    },
+    const {
+      '1': 'is_mirrors_used',
+      '3': 12,
+      '4': 1,
+      '5': 8,
+      '10': 'isMirrorsUsed'
+    },
+    const {'1': 'minified', '3': 13, '4': 1, '5': 8, '10': 'minified'},
+  ],
+};
+
+const LibraryInfoPB$json = const {
+  '1': 'LibraryInfoPB',
+  '2': const [
+    const {'1': 'uri', '3': 1, '4': 1, '5': 9, '10': 'uri'},
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+  ],
+};
+
+const OutputUnitInfoPB$json = const {
+  '1': 'OutputUnitInfoPB',
+  '2': const [
+    const {'1': 'imports', '3': 1, '4': 3, '5': 9, '10': 'imports'},
+  ],
+};
+
+const ClassInfoPB$json = const {
+  '1': 'ClassInfoPB',
+  '2': const [
+    const {'1': 'is_abstract', '3': 1, '4': 1, '5': 8, '10': 'isAbstract'},
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+  ],
+};
+
+const ConstantInfoPB$json = const {
+  '1': 'ConstantInfoPB',
+  '2': const [
+    const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'},
+  ],
+};
+
+const FieldInfoPB$json = const {
+  '1': 'FieldInfoPB',
+  '2': const [
+    const {'1': 'type', '3': 1, '4': 1, '5': 9, '10': 'type'},
+    const {'1': 'inferred_type', '3': 2, '4': 1, '5': 9, '10': 'inferredType'},
+    const {'1': 'children_ids', '3': 3, '4': 3, '5': 9, '10': 'childrenIds'},
+    const {'1': 'code', '3': 4, '4': 1, '5': 9, '10': 'code'},
+    const {'1': 'is_const', '3': 5, '4': 1, '5': 8, '10': 'isConst'},
+    const {
+      '1': 'initializer_id',
+      '3': 6,
+      '4': 1,
+      '5': 9,
+      '10': 'initializerId'
+    },
+  ],
+};
+
+const TypedefInfoPB$json = const {
+  '1': 'TypedefInfoPB',
+  '2': const [
+    const {'1': 'type', '3': 1, '4': 1, '5': 9, '10': 'type'},
+  ],
+};
+
+const FunctionModifiersPB$json = const {
+  '1': 'FunctionModifiersPB',
+  '2': const [
+    const {'1': 'is_static', '3': 1, '4': 1, '5': 8, '10': 'isStatic'},
+    const {'1': 'is_const', '3': 2, '4': 1, '5': 8, '10': 'isConst'},
+    const {'1': 'is_factory', '3': 3, '4': 1, '5': 8, '10': 'isFactory'},
+    const {'1': 'is_external', '3': 4, '4': 1, '5': 8, '10': 'isExternal'},
+  ],
+};
+
+const ParameterInfoPB$json = const {
+  '1': 'ParameterInfoPB',
+  '2': const [
+    const {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
+    const {'1': 'type', '3': 2, '4': 1, '5': 9, '10': 'type'},
+    const {'1': 'declared_type', '3': 3, '4': 1, '5': 9, '10': 'declaredType'},
+  ],
+};
+
+const FunctionInfoPB$json = const {
+  '1': 'FunctionInfoPB',
+  '2': const [
+    const {
+      '1': 'function_modifiers',
+      '3': 1,
+      '4': 1,
+      '5': 11,
+      '6': '.dart2js_info.proto.FunctionModifiersPB',
+      '10': 'functionModifiers'
+    },
+    const {'1': 'children_ids', '3': 2, '4': 3, '5': 9, '10': 'childrenIds'},
+    const {'1': 'return_type', '3': 3, '4': 1, '5': 9, '10': 'returnType'},
+    const {
+      '1': 'inferred_return_type',
+      '3': 4,
+      '4': 1,
+      '5': 9,
+      '10': 'inferredReturnType'
+    },
+    const {
+      '1': 'parameters',
+      '3': 5,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.ParameterInfoPB',
+      '10': 'parameters'
+    },
+    const {'1': 'side_effects', '3': 6, '4': 1, '5': 9, '10': 'sideEffects'},
+    const {'1': 'inlined_count', '3': 7, '4': 1, '5': 5, '10': 'inlinedCount'},
+    const {'1': 'code', '3': 8, '4': 1, '5': 9, '10': 'code'},
+  ],
+  '9': const [
+    const {'1': 9, '2': 10},
+  ],
+};
+
+const ClosureInfoPB$json = const {
+  '1': 'ClosureInfoPB',
+  '2': const [
+    const {'1': 'function_id', '3': 1, '4': 1, '5': 9, '10': 'functionId'},
+  ],
+};
+
+const DeferredImportPB$json = const {
+  '1': 'DeferredImportPB',
+  '2': const [
+    const {'1': 'prefix', '3': 1, '4': 1, '5': 9, '10': 'prefix'},
+    const {'1': 'files', '3': 2, '4': 3, '5': 9, '10': 'files'},
+  ],
+};
+
+const LibraryDeferredImportsPB$json = const {
+  '1': 'LibraryDeferredImportsPB',
+  '2': const [
+    const {'1': 'library_uri', '3': 1, '4': 1, '5': 9, '10': 'libraryUri'},
+    const {'1': 'library_name', '3': 2, '4': 1, '5': 9, '10': 'libraryName'},
+    const {
+      '1': 'imports',
+      '3': 3,
+      '4': 3,
+      '5': 11,
+      '6': '.dart2js_info.proto.DeferredImportPB',
+      '10': 'imports'
+    },
+  ],
+};
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbserver.dart b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
new file mode 100644
index 0000000..8f63e58
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/proto/info.pbserver.dart
@@ -0,0 +1,8 @@
+///
+//  Generated code. Do not modify.
+//  source: info.proto
+//
+// @dart = 2.3
+// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
+
+export 'info.pb.dart';
diff --git a/pkg/dart2js_info/lib/src/string_edit_buffer.dart b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
new file mode 100644
index 0000000..dc314f7
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/string_edit_buffer.dart
@@ -0,0 +1,113 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Defines [StringEditBuffer], a buffer that can be used to apply edits on a
+/// string.
+// TODO(sigmund): this should move to a separate package.
+library dart2js.src.string_edit_buffer;
+
+/// A buffer meant to apply edits on a string (rather than building a string
+/// from scratch). Each change is described using the location information on
+/// the original string. Internally this buffer keeps track of how a
+/// modification in one portion can offset a modification further down the
+/// string.
+class StringEditBuffer {
+  final String original;
+  final _edits = <_StringEdit>[];
+
+  StringEditBuffer(this.original);
+
+  bool get hasEdits => _edits.length > 0;
+
+  /// Edit the original text, replacing text on the range [begin] and
+  /// exclusive [end] with the [replacement] string.
+  void replace(int begin, int end, String replacement, [int sortId]) {
+    _edits.add(new _StringEdit(begin, end, replacement, sortId));
+  }
+
+  /// Insert [string] at [offset].
+  /// Equivalent to `replace(offset, offset, string)`.
+  void insert(int offset, String string, [sortId]) =>
+      replace(offset, offset, string, sortId);
+
+  /// Remove text from the range [begin] to exclusive [end].
+  /// Equivalent to `replace(begin, end, '')`.
+  void remove(int begin, int end) => replace(begin, end, '');
+
+  /// Applies all pending [edit]s and returns a new string.
+  ///
+  /// This method is non-destructive: it does not discard existing edits or
+  /// change the [original] string. Further edits can be added and this method
+  /// can be called again.
+  ///
+  /// Throws [UnsupportedError] if the edits were overlapping. If no edits were
+  /// made, the original string will be returned.
+  String toString() {
+    var sb = new StringBuffer();
+    if (_edits.length == 0) return original;
+
+    // Sort edits by start location.
+    _edits.sort();
+
+    int consumed = 0;
+    for (var edit in _edits) {
+      if (consumed > edit.begin) {
+        sb = new StringBuffer();
+        sb.write('overlapping edits. Insert at offset ');
+        sb.write(edit.begin);
+        sb.write(' but have consumed ');
+        sb.write(consumed);
+        sb.write(' input characters. List of edits:');
+        for (var e in _edits) {
+          sb.write('\n    ');
+          sb.write(e);
+        }
+        throw new UnsupportedError(sb.toString());
+      }
+
+      // Add characters from the original string between this edit and the last
+      // one, if any.
+      var betweenEdits = original.substring(consumed, edit.begin);
+      sb.write(betweenEdits);
+      sb.write(edit.string);
+      consumed = edit.end;
+    }
+
+    // Add any text from the end of the original string that was not replaced.
+    sb.write(original.substring(consumed));
+    return sb.toString();
+  }
+}
+
+/// A single edit in a [StringEditBuffer].
+class _StringEdit implements Comparable<_StringEdit> {
+  // Offset where edit begins
+  final int begin;
+
+  // Offset where edit ends
+  final int end;
+
+  // Sort index as a tie-breaker for edits that have the same location.
+  final int sortId;
+
+  // String to insert
+  final String string;
+
+  _StringEdit(int begin, this.end, this.string, [int sortId])
+      : begin = begin,
+        sortId = sortId == null ? begin : sortId;
+
+  int get length => end - begin;
+
+  String toString() => '(Edit @ $begin,$end: "$string")';
+
+  int compareTo(_StringEdit other) {
+    int diff = begin - other.begin;
+    if (diff != 0) return diff;
+    diff = end - other.end;
+    if (diff != 0) return diff;
+    // use edit order as a tie breaker
+    return sortId - other.sortId;
+  }
+}
diff --git a/pkg/dart2js_info/lib/src/table.dart b/pkg/dart2js_info/lib/src/table.dart
new file mode 100644
index 0000000..85abcd3
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/table.dart
@@ -0,0 +1,126 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js_info.src.table;
+
+import 'dart:math' show max;
+
+/// Helper class to present data on the command-line in a table form.
+class Table {
+  int _totalColumns = 0;
+  int get totalColumns => _totalColumns;
+
+  /// Abbreviations, used to make headers shorter.
+  Map<String, String> abbreviations = {};
+
+  /// Width of each column.
+  List<int> widths = <int>[];
+
+  /// The header for each column (`header.length == totalColumns`).
+  List header = [];
+
+  /// The color for each column (`color.length == totalColumns`).
+  List colors = [];
+
+  /// Each row on the table. Note that all rows have the same size
+  /// (`rows[*].length == totalColumns`).
+  List<List> rows = [];
+
+  /// Columns to skip, for example, if they are all zero entries.
+  List<bool> _skipped = <bool>[];
+
+  /// Whether we started adding entries. Indicates that no more columns can be
+  /// added.
+  bool _sealed = false;
+
+  /// Current row being built by [addEntry].
+  List _currentRow;
+
+  /// Add a column with the given [name].
+  void declareColumn(String name,
+      {bool abbreviate: false, String color: _NO_COLOR}) {
+    assert(!_sealed);
+    var headerName = name;
+    if (abbreviate) {
+      // abbreviate the header by using only the initials of each word
+      headerName =
+          name.split(' ').map((s) => s.substring(0, 1).toUpperCase()).join('');
+      while (abbreviations[headerName] != null) headerName = "$headerName'";
+      abbreviations[headerName] = name;
+    }
+    widths.add(max(5, headerName.length + 1));
+    header.add(headerName);
+    colors.add(color);
+    _skipped.add(_totalColumns > 0);
+    _totalColumns++;
+  }
+
+  /// Add an entry in the table, creating a new row each time [totalColumns]
+  /// entries are added.
+  void addEntry(entry) {
+    if (_currentRow == null) {
+      _sealed = true;
+      _currentRow = [];
+    }
+    int pos = _currentRow.length;
+    assert(pos < _totalColumns);
+
+    widths[pos] = max(widths[pos], '$entry'.length + 1);
+    _currentRow.add('$entry');
+    if (entry is int && entry != 0) {
+      _skipped[pos] = false;
+    }
+
+    if (pos + 1 == _totalColumns) {
+      rows.add(_currentRow);
+      _currentRow = [];
+    }
+  }
+
+  /// Add an empty row to divide sections of the table.
+  void addEmptyRow() {
+    var emptyRow = [];
+    for (int i = 0; i < _totalColumns; i++) {
+      emptyRow.add('-' * widths[i]);
+    }
+    rows.add(emptyRow);
+  }
+
+  /// Enter the header titles. OK to do so more than once in long tables.
+  void addHeader() {
+    rows.add(header);
+  }
+
+  /// Generates a string representation of the table to print on a terminal.
+  // TODO(sigmund): add also a .csv format
+  String toString() {
+    var sb = new StringBuffer();
+    sb.write('\n');
+    for (var row in rows) {
+      var lastColor = _NO_COLOR;
+      for (int i = 0; i < _totalColumns; i++) {
+        if (_skipped[i]) continue;
+        var entry = row[i];
+        var color = colors[i];
+        if (lastColor != color) {
+          sb.write(color);
+          lastColor = color;
+        }
+        // Align first column to the left, everything else to the right.
+        sb.write(
+            i == 0 ? entry.padRight(widths[i]) : entry.padLeft(widths[i] + 1));
+      }
+      if (lastColor != _NO_COLOR) sb.write(_NO_COLOR);
+      sb.write('\n');
+    }
+    sb.write('\nWhere:\n');
+    for (var id in abbreviations.keys) {
+      sb.write('  $id:'.padRight(7));
+      sb.write(' ${abbreviations[id]}\n');
+    }
+    return sb.toString();
+  }
+}
+
+const _NO_COLOR = "\x1b[0m";
diff --git a/pkg/dart2js_info/lib/src/util.dart b/pkg/dart2js_info/lib/src/util.dart
new file mode 100644
index 0000000..31e9ffc
--- /dev/null
+++ b/pkg/dart2js_info/lib/src/util.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js_info.src.util;
+
+import 'package:dart2js_info/info.dart';
+
+import 'graph.dart';
+
+/// Computes a graph of dependencies from [info].
+Graph<Info> graphFromInfo(AllInfo info) {
+  print('  info: dependency graph information is work in progress and'
+      ' might be incomplete');
+  // Note: we are combining dependency information that is computed in two ways
+  // (functionInfo.uses vs allInfo.dependencies).
+  // TODO(sigmund): fix inconsistencies between these two ways, stick with one
+  // of them.
+  // TODO(sigmund): create a concrete implementation of InfoGraph, instead of
+  // using the EdgeListGraph.
+  var graph = new EdgeListGraph<Info>();
+  for (var f in info.functions) {
+    graph.addNode(f);
+    for (var g in f.uses) {
+      graph.addEdge(f, g.target);
+    }
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        graph.addEdge(f, g);
+      }
+    }
+  }
+
+  for (var f in info.fields) {
+    graph.addNode(f);
+    for (var g in f.uses) {
+      graph.addEdge(f, g.target);
+    }
+    if (info.dependencies[f] != null) {
+      for (var g in info.dependencies[f]) {
+        graph.addEdge(f, g);
+      }
+    }
+  }
+
+  return graph;
+}
+
+/// Provide a unique long name associated with [info].
+// TODO(sigmund): guarantee that the name is actually unique.
+String longName(Info info, {bool useLibraryUri: false, bool forId: false}) {
+  var infoPath = [];
+  while (info != null) {
+    infoPath.add(info);
+    info = info.parent;
+  }
+  var sb = new StringBuffer();
+  var first = true;
+  for (var segment in infoPath.reversed) {
+    if (!first) sb.write('.');
+    // TODO(sigmund): ensure that the first segment is a LibraryInfo.
+    // assert(!first || segment is LibraryInfo);
+    // (today might not be true for for closure classes).
+    if (segment is LibraryInfo) {
+      // TODO(kevmoo): Remove this when dart2js can be invoked with an app-root
+      // custom URI
+      if (useLibraryUri && forId && segment.uri.isScheme('file')) {
+        assert(Uri.base.isScheme('file'));
+        var currentBase = Uri.base.path;
+        var segmentString = segment.uri.path;
+
+        // If longName is being called to calculate an element ID (forId = true)
+        // then use a relative path for the longName calculation
+        // This allows a more stable ID for cases when files are generated into
+        // temp directories – e.g. with pkg:build_web_compilers
+        if (segmentString.startsWith(currentBase)) {
+          segmentString = segmentString.substring(currentBase.length);
+        }
+
+        sb.write(segmentString);
+      } else {
+        sb.write(useLibraryUri ? segment.uri : segment.name);
+      }
+      sb.write('::');
+    } else {
+      first = false;
+      sb.write(segment.name);
+    }
+  }
+  return sb.toString();
+}
+
+/// Produce a string containing [value] padded with white space up to [n] chars.
+pad(value, n, {bool right: false}) {
+  var s = '$value';
+  if (s.length >= n) return s;
+  var pad = ' ' * (n - s.length);
+  return right ? '$s$pad' : '$pad$s';
+}
diff --git a/pkg/dart2js_info/pubspec.yaml b/pkg/dart2js_info/pubspec.yaml
new file mode 100644
index 0000000..77980f6
--- /dev/null
+++ b/pkg/dart2js_info/pubspec.yaml
@@ -0,0 +1,25 @@
+name: dart2js_info
+version: 0.6.5
+
+description: >-
+  Libraries and tools to process data produced when running dart2js with
+  --dump-info.
+homepage: https://github.com/dart-lang/dart2js_info/
+
+environment:
+  sdk: '>=2.3.0 <3.0.0'
+
+dependencies:
+  args: ^1.4.3
+  collection: ^1.10.1
+  fixnum: '>=0.10.5 <2.0.0'
+  path: ^1.3.6
+  protobuf: '>=1.0.1 <3.0.0'
+  shelf: ^0.7.3
+  yaml: ^2.1.0
+
+dev_dependencies:
+  test: ^1.2.0
+
+executables:
+  dart2js_info: tools
diff --git a/pkg/dart2js_info/test/binary_serialization_test.dart b/pkg/dart2js_info/test/binary_serialization_test.dart
new file mode 100644
index 0000000..e38f3cb
--- /dev/null
+++ b/pkg/dart2js_info/test/binary_serialization_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/binary_serialization.dart' as binary;
+import 'package:test/test.dart';
+
+class ByteSink implements Sink<List<int>> {
+  BytesBuilder builder = new BytesBuilder();
+
+  add(List<int> data) => builder.add(data);
+  close() {}
+}
+
+main() {
+  group('json to proto conversion with deferred files', () {
+    test('hello_world_deferred', () {
+      var helloWorld = new File(
+          'test/hello_world_deferred/hello_world_deferred.js.info.json');
+      var contents = helloWorld.readAsStringSync();
+      var json = jsonDecode(contents);
+      var info = new AllInfoJsonCodec().decode(json);
+
+      var sink = new ByteSink();
+      binary.encode(info, sink);
+      var info2 = binary.decode(sink.builder.toBytes());
+      var json2 = new AllInfoJsonCodec().encode(info2);
+
+      info.program.toJsonDuration = new Duration(milliseconds: 0);
+      var json1 = new AllInfoJsonCodec().encode(info);
+      var contents1 = const JsonEncoder.withIndent("  ").convert(json1);
+      var contents2 = const JsonEncoder.withIndent("  ").convert(json2);
+      expect(contents1 == contents2, isTrue);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/graph_test.dart b/pkg/dart2js_info/test/graph_test.dart
new file mode 100644
index 0000000..4934adf
--- /dev/null
+++ b/pkg/dart2js_info/test/graph_test.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:dart2js_info/src/graph.dart';
+import 'package:test/test.dart';
+
+main() {
+  var graph = makeTestGraph();
+
+  test('preorder traversal', () {
+    expect(graph.preOrder('A').toList(), equals(['A', 'E', 'D', 'C', 'B']));
+  });
+
+  test('postorder traversal', () {
+    expect(graph.postOrder('A').toList(), equals(['C', 'E', 'D', 'B', 'A']));
+  });
+
+  test('topological sort', () {
+    expect(
+        graph.computeTopologicalSort(),
+        equals([
+          ['C'],
+          ['E'],
+          ['D', 'B', 'A']
+        ]));
+  });
+
+  test('contains path', () {
+    expect(graph.containsPath('A', 'C'), isTrue);
+    expect(graph.containsPath('B', 'E'), isTrue);
+    expect(graph.containsPath('C', 'A'), isFalse);
+    expect(graph.containsPath('E', 'B'), isFalse);
+  });
+
+  test('dominator tree', () {
+    // A dominates all other nodes in the graph, the resulting tree looks like
+    //       A
+    //    / / | |
+    //    B C D E
+    var dom = graph.dominatorTree('A');
+    expect(dom.targetsOf('A').length, equals(4));
+  });
+
+  test('cycle finding', () {
+    expect(graph.findCycleContaining('B'), equals(['A', 'D', 'B']));
+    expect(graph.findCycleContaining('C'), equals(['C']));
+  });
+}
+
+/// Creates a simple test graph with the following structure:
+/// ```
+///      A -> E
+///     / ^   ^
+///    /  \  /
+///   v   v /
+///  B -> D
+///  \  /
+///  v v
+///   C
+/// ```
+Graph<String> makeTestGraph() {
+  var graph = new EdgeListGraph<String>();
+  graph.addEdge('A', 'B');
+  graph.addEdge('A', 'D');
+  graph.addEdge('A', 'E');
+  graph.addEdge('B', 'C');
+  graph.addEdge('B', 'D');
+  graph.addEdge('D', 'A');
+  graph.addEdge('D', 'C');
+  graph.addEdge('D', 'E');
+  return graph;
+}
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.dart b/pkg/dart2js_info/test/hello_world/hello_world.dart
new file mode 100644
index 0000000..800db1c
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world/hello_world.dart
@@ -0,0 +1,3 @@
+main() {
+  print("Hello, World!");
+}
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
new file mode 100644
index 0000000..afe12f8
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -0,0 +1,1618 @@
+{
+  "elements": {
+    "library": {
+      "60281205": {
+        "id": "library/60281205",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 85,
+        "children": [
+          "function/531925466"
+        ],
+        "canonicalUri": "file:///Users/kevmoo/source/github/dart2js_info/test/hello_world/hello_world.dart"
+      },
+      "174368900": {
+        "id": "library/174368900",
+        "kind": "library",
+        "name": "_foreign_helper",
+        "size": 0,
+        "children": [
+          "class/949988971"
+        ],
+        "canonicalUri": "dart:_foreign_helper"
+      },
+      "238986171": {
+        "id": "library/238986171",
+        "kind": "library",
+        "name": "dart2js._js_primitives",
+        "size": 483,
+        "children": [
+          "function/864228238"
+        ],
+        "canonicalUri": "dart:_js_primitives"
+      },
+      "325218131": {
+        "id": "library/325218131",
+        "kind": "library",
+        "name": "_interceptors",
+        "size": 0,
+        "children": [
+          "class/1019758482"
+        ],
+        "canonicalUri": "dart:_interceptors"
+      },
+      "631335891": {
+        "id": "library/631335891",
+        "kind": "library",
+        "name": "dart.core",
+        "size": 0,
+        "children": [
+          "class/36312556",
+          "class/56472591",
+          "class/93352366",
+          "class/143626168",
+          "class/175705485",
+          "class/948502579",
+          "class/974704527",
+          "class/991730135",
+          "function/399195151"
+        ],
+        "canonicalUri": "dart:core"
+      },
+      "689380639": {
+        "id": "library/689380639",
+        "kind": "library",
+        "name": "dart._internal",
+        "size": 0,
+        "children": [
+          "field/908476008",
+          "function/606513838"
+        ],
+        "canonicalUri": "dart:_internal"
+      },
+      "754126564": {
+        "id": "library/754126564",
+        "kind": "library",
+        "name": "dart.collection",
+        "size": 0,
+        "children": [
+          "field/522978319"
+        ],
+        "canonicalUri": "dart:collection"
+      },
+      "965528565": {
+        "id": "library/965528565",
+        "kind": "library",
+        "name": "dart2js._embedded_names",
+        "size": 0,
+        "children": [
+          "class/73206861",
+          "class/716671121",
+          "field/55541185",
+          "field/1020283310"
+        ],
+        "canonicalUri": "dart:_js_embedded_names"
+      },
+      "966364039": {
+        "id": "library/966364039",
+        "kind": "library",
+        "name": "_js_helper",
+        "size": 0,
+        "children": [
+          "class/138211367",
+          "class/156108056",
+          "class/269073412",
+          "class/317291728",
+          "class/324980341",
+          "class/354160010",
+          "class/644348892",
+          "class/866150578",
+          "class/1019636942",
+          "field/417944821",
+          "field/526089142"
+        ],
+        "canonicalUri": "dart:_js_helper"
+      }
+    },
+    "class": {
+      "36312556": {
+        "id": "class/36312556",
+        "kind": "class",
+        "name": "ConcurrentModificationError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/376257386"
+        ]
+      },
+      "56472591": {
+        "id": "class/56472591",
+        "kind": "class",
+        "name": "AssertionError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/840751619"
+        ]
+      },
+      "73206861": {
+        "id": "class/73206861",
+        "kind": "class",
+        "name": "JsGetName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/965528565",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/159930244",
+          "field/190934046",
+          "field/202409972",
+          "field/391942199",
+          "field/422530140",
+          "field/447707988",
+          "field/586155906",
+          "field/626399440",
+          "field/645423404",
+          "field/667376711",
+          "field/701716969",
+          "field/743971885",
+          "field/844410756",
+          "field/864119084",
+          "field/875039735",
+          "field/914172423",
+          "field/960584371",
+          "field/1012317118",
+          "field/1019580176"
+        ]
+      },
+      "93352366": {
+        "id": "class/93352366",
+        "kind": "class",
+        "name": "CyclicInitializationError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/944915314"
+        ]
+      },
+      "138211367": {
+        "id": "class/138211367",
+        "kind": "class",
+        "name": "BoundClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/125830184",
+          "field/180845508",
+          "field/302220255",
+          "field/435101137",
+          "field/709451133",
+          "field/1061931090"
+        ]
+      },
+      "143626168": {
+        "id": "class/143626168",
+        "kind": "class",
+        "name": "ArgumentError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/4524053",
+          "field/509005655",
+          "field/727752212",
+          "field/759319863"
+        ]
+      },
+      "156108056": {
+        "id": "class/156108056",
+        "kind": "class",
+        "name": "ReflectionInfo",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/116849538",
+          "field/130159427",
+          "field/206386055",
+          "field/259683855",
+          "field/338588500",
+          "field/420557924",
+          "field/446360348",
+          "field/603434183",
+          "field/656800516",
+          "field/840091021",
+          "field/911662921"
+        ]
+      },
+      "175705485": {
+        "id": "class/175705485",
+        "kind": "class",
+        "name": "IndexError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/505549528",
+          "field/954188953"
+        ]
+      },
+      "269073412": {
+        "id": "class/269073412",
+        "kind": "class",
+        "name": "TypeImpl",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/70141207",
+          "field/412345286"
+        ]
+      },
+      "317291728": {
+        "id": "class/317291728",
+        "kind": "class",
+        "name": "Closure",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/386221903"
+        ]
+      },
+      "324980341": {
+        "id": "class/324980341",
+        "kind": "class",
+        "name": "TypeErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/319720392"
+        ]
+      },
+      "354160010": {
+        "id": "class/354160010",
+        "kind": "class",
+        "name": "Primitives",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/118657756"
+        ]
+      },
+      "644348892": {
+        "id": "class/644348892",
+        "kind": "class",
+        "name": "CastErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/185234473"
+        ]
+      },
+      "716671121": {
+        "id": "class/716671121",
+        "kind": "class",
+        "name": "JsBuiltin",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/965528565",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/17152193",
+          "field/153611669",
+          "field/221593932",
+          "field/413692838",
+          "field/483247773",
+          "field/793498792",
+          "field/805748014",
+          "field/936474054",
+          "field/1063003009"
+        ]
+      },
+      "866150578": {
+        "id": "class/866150578",
+        "kind": "class",
+        "name": "RuntimeError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/653339731"
+        ]
+      },
+      "948502579": {
+        "id": "class/948502579",
+        "kind": "class",
+        "name": "StateError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/190358771"
+        ]
+      },
+      "949988971": {
+        "id": "class/949988971",
+        "kind": "class",
+        "name": "JS_CONST",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/174368900",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/249142929"
+        ]
+      },
+      "974704527": {
+        "id": "class/974704527",
+        "kind": "class",
+        "name": "RangeError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/111931226",
+          "field/649547880"
+        ]
+      },
+      "991730135": {
+        "id": "class/991730135",
+        "kind": "class",
+        "name": "UnsupportedError",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/140571055"
+        ]
+      },
+      "1019636942": {
+        "id": "class/1019636942",
+        "kind": "class",
+        "name": "TypeVariable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/856247106",
+          "field/874766737",
+          "field/1068071433"
+        ]
+      },
+      "1019758482": {
+        "id": "class/1019758482",
+        "kind": "class",
+        "name": "ArrayIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/112618843",
+          "field/237146195",
+          "field/504170901",
+          "field/577142640"
+        ]
+      }
+    },
+    "function": {
+      "399195151": {
+        "id": "function/399195151",
+        "kind": "function",
+        "name": "print",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/631335891",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value mask: [\"Hello, World!\"] type: [exact=JSString]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "(Object) -> void",
+        "measurements": null
+      },
+      "531925466": {
+        "id": "function/531925466",
+        "kind": "function",
+        "name": "main",
+        "size": 62,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/60281205",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 0,
+        "code": "main: function() {\n  H.printString(\"Hello, World!\");\n}\n",
+        "type": "() -> dynamic",
+        "measurements": null
+      },
+      "606513838": {
+        "id": "function/606513838",
+        "kind": "function",
+        "name": "printToConsole",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": true
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "line",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "(String) -> void",
+        "measurements": null
+      },
+      "864228238": {
+        "id": "function/864228238",
+        "kind": "function",
+        "name": "printString",
+        "size": 460,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/238986171",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": null,
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "Depends on [] field store static store, Changes [] field static.",
+        "inlinedCount": 0,
+        "code": "printString: function(string) {\n  if (typeof dartPrint == \"function\") {\n    dartPrint(string);\n    return;\n  }\n  if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n    console.log(string);\n    return;\n  }\n  if (typeof window == \"object\")\n    return;\n  if (typeof print == \"function\") {\n    print(string);\n    return;\n  }\n  throw \"Unable to print message: \" + String(string);\n}\n",
+        "type": "(String) -> void",
+        "measurements": null
+      }
+    },
+    "typedef": {},
+    "field": {
+      "4524053": {
+        "id": "field/4524053",
+        "kind": "field",
+        "name": "_hasValue",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "Value mask: [true] type: [exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "17152193": {
+        "id": "field/17152193",
+        "kind": "field",
+        "name": "getType",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "55541185": {
+        "id": "field/55541185",
+        "kind": "field",
+        "name": "MANGLED_GLOBAL_NAMES",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value mask: [\"mangledGlobalNames\"] type: [exact=JSString]",
+        "code": null,
+        "type": "dynamic",
+        "const": true
+      },
+      "70141207": {
+        "id": "field/70141207",
+        "kind": "field",
+        "name": "_typeName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/269073412",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "111931226": {
+        "id": "field/111931226",
+        "kind": "field",
+        "name": "start",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "num"
+      },
+      "112618843": {
+        "id": "field/112618843",
+        "kind": "field",
+        "name": "_length",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSUInt32]",
+        "code": null,
+        "type": "int"
+      },
+      "116849538": {
+        "id": "field/116849538",
+        "kind": "field",
+        "name": "areOptionalParametersNamed",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "118657756": {
+        "id": "field/118657756",
+        "kind": "field",
+        "name": "DOLLAR_CHAR_VALUE",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/354160010",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "125830184": {
+        "id": "field/125830184",
+        "kind": "field",
+        "name": "_self",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "130159427": {
+        "id": "field/130159427",
+        "kind": "field",
+        "name": "OPTIONAL_PARAMETERS_INFO",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "140571055": {
+        "id": "field/140571055",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/991730135",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "153611669": {
+        "id": "field/153611669",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "159930244": {
+        "id": "field/159930244",
+        "kind": "field",
+        "name": "CALL_CATCH_ALL",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "180845508": {
+        "id": "field/180845508",
+        "kind": "field",
+        "name": "_target",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "185234473": {
+        "id": "field/185234473",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/644348892",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "190358771": {
+        "id": "field/190358771",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/948502579",
+        "children": [],
+        "inferredType": "Value mask: [\"No element\"] type: [exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "190934046": {
+        "id": "field/190934046",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "202409972": {
+        "id": "field/202409972",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETER_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "206386055": {
+        "id": "field/206386055",
+        "kind": "field",
+        "name": "jsFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "221593932": {
+        "id": "field/221593932",
+        "kind": "field",
+        "name": "isFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "237146195": {
+        "id": "field/237146195",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSArray]",
+        "code": null,
+        "type": "JSArray<E>"
+      },
+      "249142929": {
+        "id": "field/249142929",
+        "kind": "field",
+        "name": "code",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/949988971",
+        "children": [],
+        "inferredType": "Value mask: [\"function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n}\"] type: [exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "259683855": {
+        "id": "field/259683855",
+        "kind": "field",
+        "name": "functionType",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "302220255": {
+        "id": "field/302220255",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "319720392": {
+        "id": "field/319720392",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/324980341",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "338588500": {
+        "id": "field/338588500",
+        "kind": "field",
+        "name": "requiredParameterCount",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "376257386": {
+        "id": "field/376257386",
+        "kind": "field",
+        "name": "modifiedObject",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/36312556",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "Object"
+      },
+      "386221903": {
+        "id": "field/386221903",
+        "kind": "field",
+        "name": "functionCounter",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/317291728",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int"
+      },
+      "391942199": {
+        "id": "field/391942199",
+        "kind": "field",
+        "name": "OPERATOR_AS_PREFIX",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "412345286": {
+        "id": "field/412345286",
+        "kind": "field",
+        "name": "_unmangledName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/269073412",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "413692838": {
+        "id": "field/413692838",
+        "kind": "field",
+        "name": "rawRuntimeType",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "417944821": {
+        "id": "field/417944821",
+        "kind": "field",
+        "name": "_inTypeAssertion",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "420557924": {
+        "id": "field/420557924",
+        "kind": "field",
+        "name": "isAccessor",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "422530140": {
+        "id": "field/422530140",
+        "kind": "field",
+        "name": "TYPEDEF_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "435101137": {
+        "id": "field/435101137",
+        "kind": "field",
+        "name": "selfFieldNameCache",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "446360348": {
+        "id": "field/446360348",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETERS_INFO",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "447707988": {
+        "id": "field/447707988",
+        "kind": "field",
+        "name": "RTI_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "483247773": {
+        "id": "field/483247773",
+        "kind": "field",
+        "name": "rawRtiToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "504170901": {
+        "id": "field/504170901",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "E"
+      },
+      "505549528": {
+        "id": "field/505549528",
+        "kind": "field",
+        "name": "indexable",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "Union of [[exact=IndexError], [exact=JSString], [exact=StringBuffer], [subclass=JSArray]]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "509005655": {
+        "id": "field/509005655",
+        "kind": "field",
+        "name": "name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "Value mask: [\"index\"] type: [null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "522978319": {
+        "id": "field/522978319",
+        "kind": "field",
+        "name": "_toStringVisiting",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/754126564",
+        "children": [],
+        "inferredType": "Container mask: [subclass=JSArray] length: null type: [exact=JSExtendableArray]",
+        "code": null,
+        "type": "List"
+      },
+      "526089142": {
+        "id": "field/526089142",
+        "kind": "field",
+        "name": "_constructorNameFallback",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JS_CONST]",
+        "code": null,
+        "type": "dynamic",
+        "const": true
+      },
+      "577142640": {
+        "id": "field/577142640",
+        "kind": "field",
+        "name": "_index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": null,
+        "type": "int"
+      },
+      "586155906": {
+        "id": "field/586155906",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "603434183": {
+        "id": "field/603434183",
+        "kind": "field",
+        "name": "cachedSortedIndices",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "List"
+      },
+      "626399440": {
+        "id": "field/626399440",
+        "kind": "field",
+        "name": "FUNCTION_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "645423404": {
+        "id": "field/645423404",
+        "kind": "field",
+        "name": "CALL_NAME_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "649547880": {
+        "id": "field/649547880",
+        "kind": "field",
+        "name": "end",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "num"
+      },
+      "653339731": {
+        "id": "field/653339731",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/866150578",
+        "children": [],
+        "inferredType": "Value mask: [\"Intercepted function with no arguments.\"] type: [exact=JSString]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "656800516": {
+        "id": "field/656800516",
+        "kind": "field",
+        "name": "data",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSFixedArray]",
+        "code": null,
+        "type": "List"
+      },
+      "667376711": {
+        "id": "field/667376711",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_RETURN_TYPE_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "701716969": {
+        "id": "field/701716969",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_VOID_RETURN_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "709451133": {
+        "id": "field/709451133",
+        "kind": "field",
+        "name": "receiverFieldNameCache",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "727752212": {
+        "id": "field/727752212",
+        "kind": "field",
+        "name": "invalidValue",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "743971885": {
+        "id": "field/743971885",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_NAMED_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "759319863": {
+        "id": "field/759319863",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "793498792": {
+        "id": "field/793498792",
+        "kind": "field",
+        "name": "isGivenTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "805748014": {
+        "id": "field/805748014",
+        "kind": "field",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "840091021": {
+        "id": "field/840091021",
+        "kind": "field",
+        "name": "optionalParameterCount",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "840751619": {
+        "id": "field/840751619",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/56472591",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Object"
+      },
+      "844410756": {
+        "id": "field/844410756",
+        "kind": "field",
+        "name": "DEFAULT_VALUES_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "856247106": {
+        "id": "field/856247106",
+        "kind": "field",
+        "name": "bound",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019636942",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int"
+      },
+      "864119084": {
+        "id": "field/864119084",
+        "kind": "field",
+        "name": "OBJECT_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "874766737": {
+        "id": "field/874766737",
+        "kind": "field",
+        "name": "owner",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019636942",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "Type"
+      },
+      "875039735": {
+        "id": "field/875039735",
+        "kind": "field",
+        "name": "NULL_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "908476008": {
+        "id": "field/908476008",
+        "kind": "field",
+        "name": "printToZone",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/689380639",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Function"
+      },
+      "911662921": {
+        "id": "field/911662921",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_INDEX",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "914172423": {
+        "id": "field/914172423",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "936474054": {
+        "id": "field/936474054",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "944915314": {
+        "id": "field/944915314",
+        "kind": "field",
+        "name": "variableName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/93352366",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "954188953": {
+        "id": "field/954188953",
+        "kind": "field",
+        "name": "length",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "960584371": {
+        "id": "field/960584371",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "1012317118": {
+        "id": "field/1012317118",
+        "kind": "field",
+        "name": "SIGNATURE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "1019580176": {
+        "id": "field/1019580176",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "1020283310": {
+        "id": "field/1020283310",
+        "kind": "field",
+        "name": "STATIC_FUNCTION_NAME_PROPERTY_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value mask: [\"$static_name\"] type: [exact=JSString]",
+        "code": null,
+        "type": "dynamic",
+        "const": true
+      },
+      "1061931090": {
+        "id": "field/1061931090",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "1063003009": {
+        "id": "field/1063003009",
+        "kind": "field",
+        "name": "isCheckPropertyToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "1068071433": {
+        "id": "field/1068071433",
+        "kind": "field",
+        "name": "name",
+        "size": 0,
+        "outputUnit": "outputUnit/987444055",
+        "parent": "class/1019636942",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      }
+    },
+    "constant": {},
+    "closure": {}
+  },
+  "holding": {
+    "function/399195151": [
+      {
+        "id": "function/606513838",
+        "mask": "inlined"
+      }
+    ],
+    "function/531925466": [
+      {
+        "id": "function/399195151",
+        "mask": "null"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606513838",
+        "mask": "null"
+      },
+      {
+        "id": "function/864228238",
+        "mask": "null"
+      },
+      {
+        "id": "function/864228238",
+        "mask": "null"
+      }
+    ]
+  },
+  "dependencies": {},
+  "outputUnits": [
+    {
+      "id": "outputUnit/987444055",
+      "kind": "outputUnit",
+      "name": null,
+      "size": 10324,
+      "imports": [
+        null
+      ]
+    }
+  ],
+  "dump_version": 5,
+  "deferredFiles": {},
+  "dump_minor_version": "0",
+  "program": {
+    "entrypoint": "function/531925466",
+    "size": 10324,
+    "dart2jsVersion": "1.23.0-dev.11.7",
+    "compilationMoment": "2017-04-17 09:46:41.661617",
+    "compilationDuration": 357402,
+    "toJsonDuration": 4000,
+    "dumpInfoDuration": 0,
+    "noSuchMethodEnabled": false,
+    "minified": false
+  }
+}
\ No newline at end of file
diff --git a/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart b/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart
new file mode 100644
index 0000000..a719959
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/deferred_import.dart
@@ -0,0 +1 @@
+const helloWorld = "Hello, World!";
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart
new file mode 100644
index 0000000..9baf023
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart
@@ -0,0 +1,6 @@
+import 'deferred_import.dart' deferred as deferred_import;
+
+Future<void> main() async {
+  await deferred_import.loadLibrary();
+  print(deferred_import.helloWorld);
+}
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
new file mode 100644
index 0000000..7098f4a
--- /dev/null
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -0,0 +1,26128 @@
+{
+  "elements": {
+    "library": {
+      "174368900": {
+        "id": "library/174368900",
+        "kind": "library",
+        "name": "_foreign_helper",
+        "size": 65,
+        "children": [
+          "class/949988971"
+        ],
+        "canonicalUri": "dart:_foreign_helper"
+      },
+      "237882207": {
+        "id": "library/237882207",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "field/162036481",
+          "field/241563122"
+        ],
+        "canonicalUri": "dart:_async_await_error_codes"
+      },
+      "238986171": {
+        "id": "library/238986171",
+        "kind": "library",
+        "name": "dart2js._js_primitives",
+        "size": 483,
+        "children": [
+          "function/864228238"
+        ],
+        "canonicalUri": "dart:_js_primitives"
+      },
+      "239009133": {
+        "id": "library/239009133",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 0,
+        "children": [
+          "field/83424460"
+        ],
+        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/deferred_import.dart"
+      },
+      "325218131": {
+        "id": "library/325218131",
+        "kind": "library",
+        "name": "_interceptors",
+        "size": 8861,
+        "children": [
+          "class/86936801",
+          "class/245082925",
+          "class/359696216",
+          "class/418854932",
+          "class/506846212",
+          "class/523978038",
+          "class/535478555",
+          "class/699388972",
+          "class/793539876",
+          "class/851867060",
+          "class/1003011102",
+          "class/1019758482",
+          "class/1034266724",
+          "field/406601007",
+          "function/821285776"
+        ],
+        "canonicalUri": "dart:_interceptors"
+      },
+      "527944179": {
+        "id": "library/527944179",
+        "kind": "library",
+        "name": "dart._js_names",
+        "size": 137,
+        "children": [
+          "function/203738274",
+          "function/508874693"
+        ],
+        "canonicalUri": "dart:_js_names"
+      },
+      "631335891": {
+        "id": "library/631335891",
+        "kind": "library",
+        "name": "dart.core",
+        "size": 9004,
+        "children": [
+          "class/36312556",
+          "class/56472591",
+          "class/70813553",
+          "class/93352366",
+          "class/143626168",
+          "class/175705485",
+          "class/217690375",
+          "class/293821936",
+          "class/314168330",
+          "class/335005182",
+          "class/347664883",
+          "class/351911148",
+          "class/481500691",
+          "class/542248491",
+          "class/562873772",
+          "class/595024907",
+          "class/627219877",
+          "class/631051714",
+          "class/635685670",
+          "class/803883908",
+          "class/893386369",
+          "class/948502579",
+          "class/959990109",
+          "class/974704527",
+          "class/991730135",
+          "class/1052045656",
+          "field/261042870",
+          "function/399195151"
+        ],
+        "canonicalUri": "dart:core"
+      },
+      "689380639": {
+        "id": "library/689380639",
+        "kind": "library",
+        "name": "dart._internal",
+        "size": 3245,
+        "children": [
+          "class/60704969",
+          "class/171867442",
+          "class/202804702",
+          "class/365655194",
+          "class/540398347",
+          "class/680257415",
+          "class/737466373",
+          "field/908476008",
+          "function/606513838"
+        ],
+        "canonicalUri": "dart:_internal"
+      },
+      "754126564": {
+        "id": "library/754126564",
+        "kind": "library",
+        "name": "dart.collection",
+        "size": 10695,
+        "children": [
+          "class/113750884",
+          "class/123522748",
+          "class/143510818",
+          "class/476286669",
+          "class/607623563",
+          "class/614050497",
+          "class/748502014",
+          "class/758572498",
+          "class/812154630",
+          "class/868658259",
+          "class/943457796",
+          "class/975959345",
+          "class/1059387371",
+          "class/1070558590",
+          "field/522978319",
+          "function/778541068",
+          "function/921677904"
+        ],
+        "canonicalUri": "dart:collection"
+      },
+      "934372066": {
+        "id": "library/934372066",
+        "kind": "library",
+        "name": "<unnamed>",
+        "size": 996,
+        "children": [
+          "function/921486255"
+        ],
+        "canonicalUri": "file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/hello_world_deferred.dart"
+      },
+      "965528565": {
+        "id": "library/965528565",
+        "kind": "library",
+        "name": "dart2js._embedded_names",
+        "size": 0,
+        "children": [
+          "class/73206861",
+          "class/716671121",
+          "field/43092689",
+          "field/55541185",
+          "field/110087164",
+          "field/125761045",
+          "field/214758996",
+          "field/637404994",
+          "field/698350444",
+          "field/879032432",
+          "field/1020283310"
+        ],
+        "canonicalUri": "dart:_js_embedded_names"
+      },
+      "966364039": {
+        "id": "library/966364039",
+        "kind": "library",
+        "name": "_js_helper",
+        "size": 53313,
+        "children": [
+          "class/8008562",
+          "class/17649844",
+          "class/27679401",
+          "class/44790816",
+          "class/138211367",
+          "class/156108056",
+          "class/216047131",
+          "class/269073412",
+          "class/294355530",
+          "class/317291728",
+          "class/324980341",
+          "class/354160010",
+          "class/373504153",
+          "class/388380492",
+          "class/466061502",
+          "class/500662026",
+          "class/518228506",
+          "class/644348892",
+          "class/692496355",
+          "class/722522722",
+          "class/742137989",
+          "class/790616034",
+          "class/866150578",
+          "class/954836234",
+          "class/958488954",
+          "field/8965675",
+          "field/126292751",
+          "field/244162491",
+          "field/417944821",
+          "field/496557243",
+          "field/526089142",
+          "field/670005717",
+          "field/907727246",
+          "field/926265914",
+          "function/21667157",
+          "function/53631526",
+          "function/64968119",
+          "function/79175019",
+          "function/108053021",
+          "function/109394176",
+          "function/136972596",
+          "function/163889622",
+          "function/193787732",
+          "function/225159691",
+          "function/230858033",
+          "function/257728434",
+          "function/263798810",
+          "function/264370095",
+          "function/265638794",
+          "function/268773900",
+          "function/275681184",
+          "function/292889014",
+          "function/299781104",
+          "function/306374693",
+          "function/308590446",
+          "function/309114439",
+          "function/310457557",
+          "function/316732114",
+          "function/326542993",
+          "function/418915149",
+          "function/419713835",
+          "function/435575019",
+          "function/445547062",
+          "function/467155193",
+          "function/483766990",
+          "function/486797615",
+          "function/487598887",
+          "function/491418529",
+          "function/499330809",
+          "function/501712645",
+          "function/528985088",
+          "function/544746737",
+          "function/551570860",
+          "function/553851206",
+          "function/555987509",
+          "function/560797298",
+          "function/607704865",
+          "function/638664464",
+          "function/639806883",
+          "function/658082982",
+          "function/665676035",
+          "function/668300184",
+          "function/679532174",
+          "function/689069465",
+          "function/708419578",
+          "function/710092165",
+          "function/714600619",
+          "function/717561594",
+          "function/722993348",
+          "function/734834560",
+          "function/736875717",
+          "function/737782244",
+          "function/751200407",
+          "function/756575134",
+          "function/764768055",
+          "function/772250195",
+          "function/788412943",
+          "function/798288240",
+          "function/813370328",
+          "function/827571674",
+          "function/906921796",
+          "function/967508646",
+          "function/984452543",
+          "function/992679489",
+          "function/1012615396",
+          "function/1049802380",
+          "function/1060205580"
+        ],
+        "canonicalUri": "dart:_js_helper"
+      },
+      "1052666095": {
+        "id": "library/1052666095",
+        "kind": "library",
+        "name": "dart.async",
+        "size": 35210,
+        "children": [
+          "class/32494041",
+          "class/80405414",
+          "class/185316425",
+          "class/240292734",
+          "class/410333734",
+          "class/438137149",
+          "class/471305727",
+          "class/566341130",
+          "class/577121337",
+          "class/611525899",
+          "class/714718140",
+          "class/733467750",
+          "class/770824752",
+          "class/784178238",
+          "class/850763763",
+          "class/934351233",
+          "class/952584796",
+          "class/1012203707",
+          "class/1040168844",
+          "class/1059755229",
+          "field/29748263",
+          "field/370436126",
+          "field/639289778",
+          "field/931441116",
+          "field/952591811",
+          "function/67701762",
+          "function/82702408",
+          "function/116583875",
+          "function/160969748",
+          "function/205154197",
+          "function/262026503",
+          "function/271854590",
+          "function/330018012",
+          "function/336168458",
+          "function/337937411",
+          "function/364010339",
+          "function/412886703",
+          "function/415620823",
+          "function/635153575",
+          "function/650942169",
+          "function/658921946",
+          "function/663282901",
+          "function/710611585",
+          "function/831655802",
+          "function/835692712",
+          "function/887884267"
+        ],
+        "canonicalUri": "dart:async"
+      }
+    },
+    "class": {
+      "8008562": {
+        "id": "class/8008562",
+        "kind": "class",
+        "name": "DeferredNotLoadedError",
+        "size": 160,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/826222890",
+          "function/116203851",
+          "function/179653294"
+        ]
+      },
+      "17649844": {
+        "id": "class/17649844",
+        "kind": "class",
+        "name": "JsNoSuchMethodError",
+        "size": 763,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/345425066",
+          "field/347443343",
+          "field/627383241",
+          "function/336352070",
+          "function/636061569"
+        ]
+      },
+      "27679401": {
+        "id": "class/27679401",
+        "kind": "class",
+        "name": "UnknownJsTypeError",
+        "size": 167,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/346735010",
+          "function/430193009",
+          "function/793410068"
+        ]
+      },
+      "32494041": {
+        "id": "class/32494041",
+        "kind": "class",
+        "name": "_TimerImpl",
+        "size": 786,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/9743357",
+          "field/710218156",
+          "field/889385105",
+          "function/773230206"
+        ]
+      },
+      "36312556": {
+        "id": "class/36312556",
+        "kind": "class",
+        "name": "ConcurrentModificationError",
+        "size": 473,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/376257386",
+          "function/701409225",
+          "function/745741399"
+        ]
+      },
+      "44790816": {
+        "id": "class/44790816",
+        "kind": "class",
+        "name": "TearOffClosure",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "56472591": {
+        "id": "class/56472591",
+        "kind": "class",
+        "name": "AssertionError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/840751619"
+        ]
+      },
+      "60704969": {
+        "id": "class/60704969",
+        "kind": "class",
+        "name": "SubListIterable",
+        "size": 2236,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/52345936",
+          "field/373519716",
+          "field/850921879",
+          "function/150523169",
+          "function/199851072",
+          "function/494094492",
+          "function/784650927",
+          "function/990521259",
+          "function/1016194181"
+        ]
+      },
+      "70813553": {
+        "id": "class/70813553",
+        "kind": "class",
+        "name": "Iterable",
+        "size": 323,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/66015995",
+          "function/430236296"
+        ]
+      },
+      "73206861": {
+        "id": "class/73206861",
+        "kind": "class",
+        "name": "JsGetName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/159930244",
+          "field/190934046",
+          "field/202409972",
+          "field/391942199",
+          "field/422530140",
+          "field/447707988",
+          "field/496083304",
+          "field/586155906",
+          "field/626399440",
+          "field/645423404",
+          "field/667376711",
+          "field/701716969",
+          "field/743971885",
+          "field/842452872",
+          "field/844410756",
+          "field/854910375",
+          "field/864119084",
+          "field/875039735",
+          "field/914172423",
+          "field/960584371",
+          "field/1012317118",
+          "field/1019580176"
+        ]
+      },
+      "80405414": {
+        "id": "class/80405414",
+        "kind": "class",
+        "name": "_FutureListener",
+        "size": 683,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/79374407",
+          "field/187449514",
+          "field/304825305",
+          "field/343514633",
+          "field/378321689",
+          "field/421412262",
+          "field/449691021",
+          "field/516194057",
+          "field/708528118",
+          "field/714493219",
+          "field/966669333",
+          "field/969673523",
+          "field/1055298109",
+          "function/39768413",
+          "function/68051831",
+          "function/95599505",
+          "function/171287120",
+          "function/350333970",
+          "function/370120278",
+          "function/373761717",
+          "function/430787578",
+          "function/552271305",
+          "function/692185405",
+          "function/748173162",
+          "function/795411795",
+          "function/919469907",
+          "function/1030881401",
+          "function/1055095230"
+        ]
+      },
+      "86936801": {
+        "id": "class/86936801",
+        "kind": "class",
+        "name": "Interceptor",
+        "size": 341,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/425007214",
+          "function/796179660",
+          "function/944731702"
+        ]
+      },
+      "93352366": {
+        "id": "class/93352366",
+        "kind": "class",
+        "name": "CyclicInitializationError",
+        "size": 269,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/944915314",
+          "function/150705145",
+          "function/681643547"
+        ]
+      },
+      "113750884": {
+        "id": "class/113750884",
+        "kind": "class",
+        "name": "_LinkedHashSetIterator",
+        "size": 645,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/65712884",
+          "field/635439616",
+          "field/646361925",
+          "field/795932009",
+          "function/176842663",
+          "function/676035370",
+          "function/834909172"
+        ]
+      },
+      "123522748": {
+        "id": "class/123522748",
+        "kind": "class",
+        "name": "_LinkedHashSet",
+        "size": 3795,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/60920969",
+          "field/229586442",
+          "field/347672432",
+          "field/410301694",
+          "field/435679137",
+          "field/459351028",
+          "field/676869951",
+          "function/702510",
+          "function/16600620",
+          "function/30570662",
+          "function/31139860",
+          "function/98156511",
+          "function/99251871",
+          "function/114607430",
+          "function/130131853",
+          "function/275957193",
+          "function/336424489",
+          "function/380929608",
+          "function/448031436",
+          "function/616072379",
+          "function/649401243",
+          "function/870367819",
+          "function/920500080",
+          "function/969026469",
+          "function/998984172",
+          "function/1002752870"
+        ]
+      },
+      "138211367": {
+        "id": "class/138211367",
+        "kind": "class",
+        "name": "BoundClosure",
+        "size": 1734,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/125830184",
+          "field/180845508",
+          "field/302220255",
+          "field/435101137",
+          "field/709451133",
+          "field/1061931090",
+          "function/15478302",
+          "function/292195356",
+          "function/393060060",
+          "function/564404904",
+          "function/705889064",
+          "function/724475372",
+          "function/762030080",
+          "function/791079680",
+          "function/906797235"
+        ]
+      },
+      "143510818": {
+        "id": "class/143510818",
+        "kind": "class",
+        "name": "LinkedHashSet",
+        "size": 31,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/128684509"
+        ]
+      },
+      "143626168": {
+        "id": "class/143626168",
+        "kind": "class",
+        "name": "ArgumentError",
+        "size": 967,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/4524053",
+          "field/509005655",
+          "field/727752212",
+          "field/759319863",
+          "function/448227795",
+          "function/464959827",
+          "function/606572177",
+          "function/717852932",
+          "function/885768717"
+        ]
+      },
+      "156108056": {
+        "id": "class/156108056",
+        "kind": "class",
+        "name": "ReflectionInfo",
+        "size": 756,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/116849538",
+          "field/130159427",
+          "field/206386055",
+          "field/259683855",
+          "field/338588500",
+          "field/420557924",
+          "field/446360348",
+          "field/603434183",
+          "field/656800516",
+          "field/840091021",
+          "field/911662921",
+          "function/222294695",
+          "function/684612786"
+        ]
+      },
+      "171867442": {
+        "id": "class/171867442",
+        "kind": "class",
+        "name": "SkipIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/648221667"
+        ]
+      },
+      "175705485": {
+        "id": "class/175705485",
+        "kind": "class",
+        "name": "IndexError",
+        "size": 742,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/505549528",
+          "field/954188953",
+          "function/275271990",
+          "function/620005669",
+          "function/985926244"
+        ]
+      },
+      "185316425": {
+        "id": "class/185316425",
+        "kind": "class",
+        "name": "_Zone",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/57158184"
+        ]
+      },
+      "202804702": {
+        "id": "class/202804702",
+        "kind": "class",
+        "name": "EfficientLengthIterable",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "216047131": {
+        "id": "class/216047131",
+        "kind": "class",
+        "name": "StringMatch",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/231027572",
+          "field/402795939",
+          "field/404664193"
+        ]
+      },
+      "217690375": {
+        "id": "class/217690375",
+        "kind": "class",
+        "name": "_Exception",
+        "size": 121,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/650081226",
+          "function/431897853",
+          "function/806420362"
+        ]
+      },
+      "240292734": {
+        "id": "class/240292734",
+        "kind": "class",
+        "name": "StreamIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/357627841"
+        ]
+      },
+      "245082925": {
+        "id": "class/245082925",
+        "kind": "class",
+        "name": "JSBool",
+        "size": 225,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/175997763",
+          "function/991909617"
+        ]
+      },
+      "269073412": {
+        "id": "class/269073412",
+        "kind": "class",
+        "name": "TypeImpl",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/70141207",
+          "field/412345286"
+        ]
+      },
+      "293821936": {
+        "id": "class/293821936",
+        "kind": "class",
+        "name": "StringBuffer",
+        "size": 836,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/1047452024",
+          "function/210296716",
+          "function/335045122",
+          "function/358340511",
+          "function/372037963",
+          "function/388977016",
+          "function/521874428",
+          "function/789545114",
+          "function/843997665"
+        ]
+      },
+      "294355530": {
+        "id": "class/294355530",
+        "kind": "class",
+        "name": "TypeErrorDecoder",
+        "size": 2490,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/55197673",
+          "field/79943715",
+          "field/123513767",
+          "field/146902950",
+          "field/169031325",
+          "field/189240247",
+          "field/337959975",
+          "field/359397062",
+          "field/366629653",
+          "field/368849633",
+          "field/381082880",
+          "field/645317327",
+          "field/646744185",
+          "field/817840529",
+          "field/906853360",
+          "field/1012307238",
+          "function/219348673",
+          "function/229841336",
+          "function/473156332",
+          "function/553278458",
+          "function/611761598",
+          "function/640815092",
+          "function/642221110",
+          "function/698206676",
+          "function/725505159",
+          "function/814002251",
+          "function/932567378"
+        ]
+      },
+      "314168330": {
+        "id": "class/314168330",
+        "kind": "class",
+        "name": "double",
+        "size": 25,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "317291728": {
+        "id": "class/317291728",
+        "kind": "class",
+        "name": "Closure",
+        "size": 266,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/386221903",
+          "function/253794122",
+          "function/273024378",
+          "function/320253842",
+          "function/476860251",
+          "function/899124813",
+          "function/922840913",
+          "function/1051093947"
+        ]
+      },
+      "324980341": {
+        "id": "class/324980341",
+        "kind": "class",
+        "name": "TypeErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/319720392"
+        ]
+      },
+      "335005182": {
+        "id": "class/335005182",
+        "kind": "class",
+        "name": "num",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "347664883": {
+        "id": "class/347664883",
+        "kind": "class",
+        "name": "StackTrace",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/272589495"
+        ]
+      },
+      "351911148": {
+        "id": "class/351911148",
+        "kind": "class",
+        "name": "Null",
+        "size": 200,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/565013754",
+          "function/860159722"
+        ]
+      },
+      "354160010": {
+        "id": "class/354160010",
+        "kind": "class",
+        "name": "Primitives",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/118657756",
+          "function/507333070",
+          "function/540949546",
+          "function/549577701",
+          "function/712365042",
+          "function/873863767",
+          "function/890739228",
+          "function/993180100"
+        ]
+      },
+      "359696216": {
+        "id": "class/359696216",
+        "kind": "class",
+        "name": "JSDouble",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "365655194": {
+        "id": "class/365655194",
+        "kind": "class",
+        "name": "ListIterator",
+        "size": 707,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/153843292",
+          "field/154746101",
+          "field/525450391",
+          "field/626762025",
+          "function/80270395",
+          "function/581270226",
+          "function/1047605700"
+        ]
+      },
+      "373504153": {
+        "id": "class/373504153",
+        "kind": "class",
+        "name": "LinkedHashMapKeyIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/499560688",
+          "function/739160294",
+          "function/950782810"
+        ]
+      },
+      "388380492": {
+        "id": "class/388380492",
+        "kind": "class",
+        "name": "ExceptionAndStackTrace",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/701889804",
+          "field/909027003",
+          "function/259223906"
+        ]
+      },
+      "410333734": {
+        "id": "class/410333734",
+        "kind": "class",
+        "name": "DeferredLoadException",
+        "size": 262,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/443749531",
+          "function/72077250",
+          "function/754771250"
+        ]
+      },
+      "418854932": {
+        "id": "class/418854932",
+        "kind": "class",
+        "name": "JSNull",
+        "size": 268,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/519947595",
+          "function/878987098",
+          "function/962973203"
+        ]
+      },
+      "438137149": {
+        "id": "class/438137149",
+        "kind": "class",
+        "name": "Future",
+        "size": 1279,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/1016218670",
+          "function/385444888",
+          "function/513053773",
+          "function/754498726"
+        ]
+      },
+      "466061502": {
+        "id": "class/466061502",
+        "kind": "class",
+        "name": "StaticClosure",
+        "size": 238,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/143567266",
+          "function/285148179"
+        ]
+      },
+      "471305727": {
+        "id": "class/471305727",
+        "kind": "class",
+        "name": "Completer",
+        "size": 31,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/350634082",
+          "function/1014821943"
+        ]
+      },
+      "476286669": {
+        "id": "class/476286669",
+        "kind": "class",
+        "name": "MapMixin",
+        "size": 195,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/891910474",
+          "function/1008544093"
+        ]
+      },
+      "481500691": {
+        "id": "class/481500691",
+        "kind": "class",
+        "name": "bool",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/173469993",
+          "function/808159833"
+        ]
+      },
+      "500662026": {
+        "id": "class/500662026",
+        "kind": "class",
+        "name": "LinkedHashMapCell",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/192950192",
+          "field/431266734",
+          "field/509651846",
+          "field/996559228",
+          "function/481547973"
+        ]
+      },
+      "506846212": {
+        "id": "class/506846212",
+        "kind": "class",
+        "name": "UnknownJavaScriptObject",
+        "size": 38,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "518228506": {
+        "id": "class/518228506",
+        "kind": "class",
+        "name": "_StackTrace",
+        "size": 393,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/127038922",
+          "field/460958077",
+          "function/272627576",
+          "function/436231120"
+        ]
+      },
+      "523978038": {
+        "id": "class/523978038",
+        "kind": "class",
+        "name": "JSArray",
+        "size": 3800,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/80736041",
+          "function/144469777",
+          "function/144469778",
+          "function/162825675",
+          "function/221934998",
+          "function/369614033",
+          "function/405266426",
+          "function/407139250",
+          "function/437395524",
+          "function/453686242",
+          "function/456567103",
+          "function/478486472",
+          "function/482441661",
+          "function/653699436",
+          "function/952130975",
+          "function/979933658",
+          "function/997099929",
+          "function/1024143730"
+        ]
+      },
+      "535478555": {
+        "id": "class/535478555",
+        "kind": "class",
+        "name": "JSInt",
+        "size": 47,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "540398347": {
+        "id": "class/540398347",
+        "kind": "class",
+        "name": "ListIterable",
+        "size": 161,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/852972506"
+        ]
+      },
+      "542248491": {
+        "id": "class/542248491",
+        "kind": "class",
+        "name": "StackOverflowError",
+        "size": 121,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/93381370",
+          "function/632290992"
+        ]
+      },
+      "562873772": {
+        "id": "class/562873772",
+        "kind": "class",
+        "name": "int",
+        "size": 25,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "566341130": {
+        "id": "class/566341130",
+        "kind": "class",
+        "name": "_RootZone",
+        "size": 1610,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/63166902",
+          "function/164775669",
+          "function/338379080",
+          "function/351622741",
+          "function/390828239",
+          "function/417406426",
+          "function/613322203",
+          "function/633677177",
+          "function/644221207",
+          "function/888466063",
+          "function/904115316",
+          "function/968241519",
+          "function/992393187",
+          "function/1036675160"
+        ]
+      },
+      "577121337": {
+        "id": "class/577121337",
+        "kind": "class",
+        "name": "AsyncError",
+        "size": 137,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/24026359",
+          "field/1023319897",
+          "function/11804710",
+          "function/613119304"
+        ]
+      },
+      "595024907": {
+        "id": "class/595024907",
+        "kind": "class",
+        "name": "NullThrownError",
+        "size": 101,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/730595126",
+          "function/968358412"
+        ]
+      },
+      "607623563": {
+        "id": "class/607623563",
+        "kind": "class",
+        "name": "ListBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/1060110710"
+        ]
+      },
+      "611525899": {
+        "id": "class/611525899",
+        "kind": "class",
+        "name": "_AsyncRun",
+        "size": 688,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/932611099",
+          "function/67489885",
+          "function/163884478",
+          "function/165003912",
+          "function/546320785",
+          "function/608925525"
+        ]
+      },
+      "614050497": {
+        "id": "class/614050497",
+        "kind": "class",
+        "name": "LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/116599339"
+        ]
+      },
+      "627219877": {
+        "id": "class/627219877",
+        "kind": "class",
+        "name": "Object",
+        "size": 378,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/167405219",
+          "function/749970393",
+          "function/837956997"
+        ]
+      },
+      "631051714": {
+        "id": "class/631051714",
+        "kind": "class",
+        "name": "Exception",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/301932486"
+        ]
+      },
+      "635685670": {
+        "id": "class/635685670",
+        "kind": "class",
+        "name": "String",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "644348892": {
+        "id": "class/644348892",
+        "kind": "class",
+        "name": "CastErrorImplementation",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/185234473"
+        ]
+      },
+      "680257415": {
+        "id": "class/680257415",
+        "kind": "class",
+        "name": "SkipIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/51929026",
+          "field/824622307"
+        ]
+      },
+      "692496355": {
+        "id": "class/692496355",
+        "kind": "class",
+        "name": "Es6LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/494583530"
+        ]
+      },
+      "699388972": {
+        "id": "class/699388972",
+        "kind": "class",
+        "name": "JSUnmodifiableArray",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "714718140": {
+        "id": "class/714718140",
+        "kind": "class",
+        "name": "_AsyncCompleter",
+        "size": 383,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/102471615",
+          "function/779765691",
+          "function/1065856678"
+        ]
+      },
+      "716671121": {
+        "id": "class/716671121",
+        "kind": "class",
+        "name": "JsBuiltin",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/17152193",
+          "field/153611669",
+          "field/221593932",
+          "field/413692838",
+          "field/434352794",
+          "field/483247773",
+          "field/563519506",
+          "field/618333384",
+          "field/680112395",
+          "field/701363438",
+          "field/793498792",
+          "field/805748014",
+          "field/936474054",
+          "field/1063003009"
+        ]
+      },
+      "722522722": {
+        "id": "class/722522722",
+        "kind": "class",
+        "name": "JsLinkedHashMap",
+        "size": 5142,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/202484522",
+          "field/232791153",
+          "field/269363605",
+          "field/650800220",
+          "field/742643375",
+          "field/795691913",
+          "field/818740436",
+          "function/538046",
+          "function/38646490",
+          "function/123959555",
+          "function/245651187",
+          "function/315128565",
+          "function/370295194",
+          "function/400990606",
+          "function/542135743",
+          "function/573775196",
+          "function/585544091",
+          "function/636443477",
+          "function/665416673",
+          "function/669694580",
+          "function/687991937",
+          "function/689271731",
+          "function/702114504",
+          "function/731794670",
+          "function/756812986",
+          "function/813862273",
+          "function/820195095",
+          "function/889342435",
+          "function/897413385",
+          "function/1015140651",
+          "function/1033661873"
+        ]
+      },
+      "733467750": {
+        "id": "class/733467750",
+        "kind": "class",
+        "name": "_AsyncCallbackEntry",
+        "size": 41,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/607252",
+          "field/221913650",
+          "function/895978326"
+        ]
+      },
+      "737466373": {
+        "id": "class/737466373",
+        "kind": "class",
+        "name": "IterableElementError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/458931695"
+        ]
+      },
+      "742137989": {
+        "id": "class/742137989",
+        "kind": "class",
+        "name": "LinkedHashMapKeyIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/60719081",
+          "field/130629664",
+          "field/635780781",
+          "field/1051861725"
+        ]
+      },
+      "748502014": {
+        "id": "class/748502014",
+        "kind": "class",
+        "name": "MapBase",
+        "size": 379,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/987508329"
+        ]
+      },
+      "758572498": {
+        "id": "class/758572498",
+        "kind": "class",
+        "name": "SetMixin",
+        "size": 137,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/176570718"
+        ]
+      },
+      "770824752": {
+        "id": "class/770824752",
+        "kind": "class",
+        "name": "_Completer",
+        "size": 510,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/1025923114",
+          "function/766396929"
+        ]
+      },
+      "784178238": {
+        "id": "class/784178238",
+        "kind": "class",
+        "name": "_Future",
+        "size": 15179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/240049228",
+          "field/285504086",
+          "field/370348518",
+          "field/485816538",
+          "field/786919906",
+          "field/840661601",
+          "field/927731351",
+          "field/978504898",
+          "function/15925204",
+          "function/16930089",
+          "function/18599313",
+          "function/22227107",
+          "function/51167109",
+          "function/94108092",
+          "function/96457955",
+          "function/263363184",
+          "function/271674536",
+          "function/292751514",
+          "function/325386239",
+          "function/352514166",
+          "function/492708773",
+          "function/519629171",
+          "function/533906117",
+          "function/553149607",
+          "function/556268777",
+          "function/574550003",
+          "function/599927967",
+          "function/638807044",
+          "function/664449932",
+          "function/717417998",
+          "function/722405802",
+          "function/772606842",
+          "function/823929753",
+          "function/853973218",
+          "function/901078366",
+          "function/941710296",
+          "function/971160936",
+          "function/983564685",
+          "function/1031131035",
+          "function/1058735230"
+        ]
+      },
+      "790616034": {
+        "id": "class/790616034",
+        "kind": "class",
+        "name": "NullError",
+        "size": 429,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/23408725",
+          "field/414662379",
+          "function/143741280",
+          "function/148863126"
+        ]
+      },
+      "793539876": {
+        "id": "class/793539876",
+        "kind": "class",
+        "name": "JSString",
+        "size": 1983,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/186999466",
+          "function/204916897",
+          "function/312768442",
+          "function/347974666",
+          "function/550544609",
+          "function/726979110",
+          "function/773528822",
+          "function/942227822"
+        ]
+      },
+      "803883908": {
+        "id": "class/803883908",
+        "kind": "class",
+        "name": "Duration",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/186466978",
+          "field/299693352",
+          "field/478876039",
+          "field/728368328",
+          "field/790173099",
+          "field/795392143",
+          "field/849640421",
+          "field/914591285",
+          "field/951952385",
+          "field/962499289",
+          "field/996584734",
+          "function/357240896"
+        ]
+      },
+      "812154630": {
+        "id": "class/812154630",
+        "kind": "class",
+        "name": "IterableBase",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/430480673",
+          "function/580865640"
+        ]
+      },
+      "850763763": {
+        "id": "class/850763763",
+        "kind": "class",
+        "name": "_AsyncAwaitCompleter",
+        "size": 1026,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/334228980",
+          "field/368460625",
+          "function/618126497",
+          "function/693686431",
+          "function/852141617",
+          "function/1014074245"
+        ]
+      },
+      "851867060": {
+        "id": "class/851867060",
+        "kind": "class",
+        "name": "JavaScriptObject",
+        "size": 182,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/91425461",
+          "function/380325809"
+        ]
+      },
+      "866150578": {
+        "id": "class/866150578",
+        "kind": "class",
+        "name": "RuntimeError",
+        "size": 123,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/653339731",
+          "function/841192189",
+          "function/848267879"
+        ]
+      },
+      "868658259": {
+        "id": "class/868658259",
+        "kind": "class",
+        "name": "_LinkedHashSetCell",
+        "size": 52,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/295541341",
+          "field/839347349",
+          "field/914365883",
+          "function/411231605"
+        ]
+      },
+      "893386369": {
+        "id": "class/893386369",
+        "kind": "class",
+        "name": "Error",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/302617892",
+          "function/355012434",
+          "function/1042482096"
+        ]
+      },
+      "934351233": {
+        "id": "class/934351233",
+        "kind": "class",
+        "name": "_ZoneFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/303835005",
+          "field/657138181"
+        ]
+      },
+      "943457796": {
+        "id": "class/943457796",
+        "kind": "class",
+        "name": "SetBase",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "948502579": {
+        "id": "class/948502579",
+        "kind": "class",
+        "name": "StateError",
+        "size": 240,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/190358771",
+          "function/130041650",
+          "function/271556856"
+        ]
+      },
+      "949988971": {
+        "id": "class/949988971",
+        "kind": "class",
+        "name": "JS_CONST",
+        "size": 32,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/174368900",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/249142929"
+        ]
+      },
+      "952584796": {
+        "id": "class/952584796",
+        "kind": "class",
+        "name": "_SyncCompleter",
+        "size": 495,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/99501118",
+          "function/162872908",
+          "function/477609809"
+        ]
+      },
+      "954836234": {
+        "id": "class/954836234",
+        "kind": "class",
+        "name": "_StringAllMatchesIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/771598536"
+        ]
+      },
+      "958488954": {
+        "id": "class/958488954",
+        "kind": "class",
+        "name": "_StringAllMatchesIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/16888485",
+          "field/275000790",
+          "field/661173290"
+        ]
+      },
+      "959990109": {
+        "id": "class/959990109",
+        "kind": "class",
+        "name": "List",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/210974499",
+          "function/436170439"
+        ]
+      },
+      "974704527": {
+        "id": "class/974704527",
+        "kind": "class",
+        "name": "RangeError",
+        "size": 1580,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/111931226",
+          "field/649547880",
+          "function/243489700",
+          "function/349997389",
+          "function/427434111",
+          "function/539017937",
+          "function/965257927",
+          "function/1024465827"
+        ]
+      },
+      "975959345": {
+        "id": "class/975959345",
+        "kind": "class",
+        "name": "_HashSetBase",
+        "size": 29,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "991730135": {
+        "id": "class/991730135",
+        "kind": "class",
+        "name": "UnsupportedError",
+        "size": 264,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/140571055",
+          "function/208283907",
+          "function/474133145"
+        ]
+      },
+      "1003011102": {
+        "id": "class/1003011102",
+        "kind": "class",
+        "name": "JSNumber",
+        "size": 967,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/717638099",
+          "field/1001207931",
+          "function/440018750",
+          "function/499807915",
+          "function/738104072",
+          "function/752981084",
+          "function/830798781",
+          "function/854200700"
+        ]
+      },
+      "1012203707": {
+        "id": "class/1012203707",
+        "kind": "class",
+        "name": "Timer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "function/367762222"
+        ]
+      },
+      "1019758482": {
+        "id": "class/1019758482",
+        "kind": "class",
+        "name": "ArrayIterator",
+        "size": 574,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/112618843",
+          "field/237146195",
+          "field/504170901",
+          "field/577142640",
+          "function/950708086",
+          "function/977867690",
+          "function/1027535878"
+        ]
+      },
+      "1034266724": {
+        "id": "class/1034266724",
+        "kind": "class",
+        "name": "PlainJavaScriptObject",
+        "size": 38,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": []
+      },
+      "1040168844": {
+        "id": "class/1040168844",
+        "kind": "class",
+        "name": "_StreamIterator",
+        "size": 66,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/51249772",
+          "field/172148876",
+          "field/305114389",
+          "function/188708191"
+        ]
+      },
+      "1052045656": {
+        "id": "class/1052045656",
+        "kind": "class",
+        "name": "Map",
+        "size": 28,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": []
+      },
+      "1059387371": {
+        "id": "class/1059387371",
+        "kind": "class",
+        "name": "_LinkedIdentityHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "function/120153851"
+        ]
+      },
+      "1059755229": {
+        "id": "class/1059755229",
+        "kind": "class",
+        "name": "Zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "modifiers": {
+          "abstract": true
+        },
+        "children": [
+          "field/42778158",
+          "function/343621437",
+          "function/460512542",
+          "function/975105635"
+        ]
+      },
+      "1070558590": {
+        "id": "class/1070558590",
+        "kind": "class",
+        "name": "_LinkedCustomHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "modifiers": {
+          "abstract": false
+        },
+        "children": [
+          "field/398469089",
+          "field/882420015",
+          "field/973809471"
+        ]
+      }
+    },
+    "function": {
+      "538046": {
+        "id": "function/538046",
+        "kind": "function",
+        "name": "_newHashTable",
+        "size": 234,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_newHashTable$0: function() {\n  var table = Object.create(null);\n  this._setTableEntry$3(table, \"<non-identifier-key>\", table);\n  this._deleteTableEntry$2(table, \"<non-identifier-key>\");\n  return table;\n}\n",
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "702510": {
+        "id": "function/702510",
+        "kind": "function",
+        "name": "_getTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "11804710": {
+        "id": "function/11804710",
+        "kind": "function",
+        "name": "AsyncError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=AsyncError]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "15204906": {
+        "id": "function/15204906",
+        "kind": "function",
+        "name": "call",
+        "size": 1534,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/963665986",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var completeResult, e, s, t1, exception, t2, originalSource;\n  completeResult = null;\n  try {\n    t1 = this.listener;\n    completeResult = t1.result._zone.run$1(t1.callback);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    if (this.hasError) {\n      t1 = this._box_1.source._resultOrListeners.get$error();\n      t2 = e;\n      t2 = t1 == null ? t2 == null : t1 === t2;\n      t1 = t2;\n    } else\n      t1 = false;\n    t2 = this._box_0;\n    if (t1)\n      t2.listenerValueOrError = this._box_1.source._resultOrListeners;\n    else\n      t2.listenerValueOrError = new P.AsyncError(e, s);\n    t2.listenerHasError = true;\n    return;\n  }\n  if (!!J.getInterceptor(completeResult).$isFuture) {\n    if (completeResult instanceof P._Future && completeResult.get$_state() >= 4) {\n      if (completeResult.get$_state() === 8) {\n        t1 = this._box_0;\n        t1.listenerValueOrError = completeResult.get$_resultOrListeners();\n        t1.listenerHasError = true;\n      }\n      return;\n    }\n    originalSource = this._box_1.source;\n    t1 = this._box_0;\n    t1.listenerValueOrError = completeResult.then$1(new P._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource));\n    t1.listenerHasError = false;\n  }\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "15478302": {
+        "id": "function/15478302",
+        "kind": "function",
+        "name": "toString",
+        "size": 257,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var receiver = this._receiver;\n  if (receiver == null)\n    receiver = this._self;\n  return \"Closure '\" + H.S(this._name) + \"' of \" + (\"Instance of '\" + H.Primitives_objectTypeName(receiver) + \"'\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "15925204": {
+        "id": "function/15925204",
+        "kind": "function",
+        "name": "_complete",
+        "size": 590,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_complete$1: function(value) {\n  var t1, t2, listeners;\n  t1 = this.$ti;\n  t2 = H.checkSubtypeV1(value, \"$isFuture\", t1, \"$asFuture\");\n  if (t2) {\n    t1 = H.checkSubtypeV1(value, \"$is_Future\", t1, null);\n    if (t1)\n      P._Future__chainCoreFuture(value, this);\n    else\n      P._Future__chainForeignFuture(value, this);\n  } else {\n    listeners = this._removeListeners$0();\n    this._state = 4;\n    this._resultOrListeners = value;\n    P._Future__propagateToListeners(this, listeners);\n  }\n}\n",
+        "type": "void Function(dynamic)",
+        "measurements": null
+      },
+      "16600620": {
+        "id": "function/16600620",
+        "kind": "function",
+        "name": "_add",
+        "size": 563,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_add$1: function(element) {\n  var rest, hash, bucket;\n  rest = this._rest;\n  if (rest == null) {\n    rest = P._LinkedHashSet__newHashTable();\n    this._rest = rest;\n  }\n  hash = this._computeHashCode$1(element);\n  bucket = rest[hash];\n  if (bucket == null)\n    rest[hash] = [this._newLinkedCell$1(element)];\n  else {\n    if (this._findBucketIndex$2(bucket, element) >= 0)\n      return false;\n    bucket.push(this._newLinkedCell$1(element));\n  }\n  return true;\n}\n",
+        "type": "bool Function(_LinkedHashSet.E)",
+        "measurements": null
+      },
+      "16930089": {
+        "id": "function/16930089",
+        "kind": "function",
+        "name": "_thenNoZoneRegistration",
+        "size": 253,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<_thenNoZoneRegistration.E>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic Function(_Future.T)"
+          },
+          {
+            "name": "onError",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_thenNoZoneRegistration$2: function(f, onError) {\n  var result = new P._Future(0, $.Zone__current, null, [null]);\n  this._addListener$1(new P._FutureListener(null, result, onError == null ? 1 : 3, f, onError));\n  return result;\n}\n",
+        "type": "Future<_thenNoZoneRegistration.E> Function(dynamic Function(_Future.T),Function)",
+        "measurements": null
+      },
+      "18599313": {
+        "id": "function/18599313",
+        "kind": "function",
+        "name": "_addListener",
+        "size": 869,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/181809904"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "listener",
+            "type": "[exact=_FutureListener]",
+            "declaredType": "_FutureListener<dynamic,dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_addListener$1: function(listener) {\n  var t1, source;\n  t1 = this._state;\n  if (t1 <= 1) {\n    listener._nextListener = this._resultOrListeners;\n    this._resultOrListeners = listener;\n  } else {\n    if (t1 === 2) {\n      source = this._resultOrListeners;\n      if (source.get$_state() < 4) {\n        source._addListener$1(listener);\n        return;\n      }\n      this._state = source._state;\n      this._resultOrListeners = source._resultOrListeners;\n    }\n    t1 = this._zone;\n    t1.toString;\n    P._rootScheduleMicrotask(null, null, t1, new P._Future__addListener_closure(this, listener));\n  }\n}\n",
+        "type": "void Function(_FutureListener<dynamic,dynamic>)",
+        "measurements": null
+      },
+      "21667157": {
+        "id": "function/21667157",
+        "kind": "function",
+        "name": "areAssignableV1",
+        "size": 631,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=JSArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "allowShorter",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "areAssignableV1: function(s, t, allowShorter) {\n  var t1, sLength, tLength, i, t2;\n  t1 = t == null;\n  if (t1 && s == null)\n    return true;\n  if (t1)\n    return allowShorter;\n  if (s == null)\n    return false;\n  sLength = s.length;\n  tLength = t.length;\n  if (allowShorter) {\n    if (sLength < tLength)\n      return false;\n  } else if (sLength !== tLength)\n    return false;\n  for (i = 0; i < tLength; ++i) {\n    t1 = s[i];\n    t2 = t[i];\n    if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n      return false;\n  }\n  return true;\n}\n",
+        "type": "bool Function(List<dynamic>,List<dynamic>,bool)",
+        "measurements": null
+      },
+      "22227107": {
+        "id": "function/22227107",
+        "kind": "function",
+        "name": "_setError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "30570662": {
+        "id": "function/30570662",
+        "kind": "function",
+        "name": "_setTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "void Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "31139860": {
+        "id": "function/31139860",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  return this._collection$_length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "38646490": {
+        "id": "function/38646490",
+        "kind": "function",
+        "name": "_setTableEntry",
+        "size": 83,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_setTableEntry$3: function(table, key, value) {\n  table[key] = value;\n}\n",
+        "type": "void Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "39412415": {
+        "id": "function/39412415",
+        "kind": "function",
+        "name": "call",
+        "size": 526,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/938184478",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "theError",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "theStackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$2: function(theError, theStackTrace) {\n  var t1, t2;\n  t1 = this._box_0;\n  t2 = --t1.remaining;\n  if (t1.values != null) {\n    t1.values = null;\n    if (t1.remaining === 0 || this.eagerError)\n      this.result._completeError$2(theError, theStackTrace);\n    else {\n      t1.error = theError;\n      t1.stackTrace = theStackTrace;\n    }\n  } else if (t2 === 0 && !this.eagerError)\n    this.result._completeError$2(t1.error, t1.stackTrace);\n}\n",
+        "type": "Null Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "39768413": {
+        "id": "function/39768413",
+        "kind": "function",
+        "name": "handlesValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "51167109": {
+        "id": "function/51167109",
+        "kind": "function",
+        "name": "_error",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "AsyncError",
+        "inferredReturnType": "[null|exact=AsyncError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 8,
+        "code": null,
+        "type": "AsyncError Function()",
+        "measurements": null
+      },
+      "53631526": {
+        "id": "function/53631526",
+        "kind": "function",
+        "name": "loadDeferredLibrary",
+        "size": 4011,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [
+          "closure/601101415",
+          "closure/624687097",
+          "closure/844800611",
+          "closure/965562379"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<Null>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "loadId",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "loadDeferredLibrary: function(loadId) {\n  var _box_0, indexes, t1, uris, hashes, index2uri, index2hash, i, index, total, waitingForLoad, isHunkLoaded;\n  _box_0 = {};\n  indexes = init.deferredLibraryParts[loadId];\n  if (indexes == null) {\n    t1 = new P._Future(0, $.Zone__current, null, [P.Null]);\n    t1._asyncComplete$1(null);\n    return t1;\n  }\n  uris = [];\n  hashes = [];\n  index2uri = init.deferredPartUris;\n  index2hash = init.deferredPartHashes;\n  for (i = 0; i < indexes.length; ++i) {\n    index = indexes[i];\n    uris.push(index2uri[index]);\n    hashes.push(index2hash[index]);\n  }\n  total = hashes.length;\n  waitingForLoad = P.List_List$filled(total, true, false);\n  _box_0.nextHunkToInitialize = 0;\n  isHunkLoaded = init.isHunkLoaded;\n  t1 = new H.loadDeferredLibrary_initializeSomeLoadedHunks(_box_0, total, waitingForLoad, uris, hashes, init.isHunkInitialized, isHunkLoaded, init.initializeLoadedHunk);\n  return P.Future_wait(P.List_List$generate(total, new H.loadDeferredLibrary_loadAndInitialize(isHunkLoaded, hashes, waitingForLoad, uris, t1), true), null, false).then$1(new H.loadDeferredLibrary_closure(_box_0, t1, total, loadId));\n}\n",
+        "type": "Future<Null> Function(String)",
+        "measurements": null
+      },
+      "57158184": {
+        "id": "function/57158184",
+        "kind": "function",
+        "name": "inSameErrorZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/185316425",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "otherZone",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function(Zone)",
+        "measurements": null
+      },
+      "63166902": {
+        "id": "function/63166902",
+        "kind": "function",
+        "name": "run",
+        "size": 152,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "run.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "run.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "run$1: function(f) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$0();\n  return P._rootRun(null, null, this, f);\n}\n",
+        "type": "run.R Function(run.R Function())",
+        "measurements": null
+      },
+      "64968119": {
+        "id": "function/64968119",
+        "kind": "function",
+        "name": "tryStringifyException",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "66015995": {
+        "id": "function/66015995",
+        "kind": "function",
+        "name": "toString",
+        "size": 102,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/70813553",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return P.IterableBase_iterableToShortString(this, \"(\", \")\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "67489885": {
+        "id": "function/67489885",
+        "kind": "function",
+        "name": "_scheduleImmediateJsOverride",
+        "size": 382,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/231160067"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_AsyncRun__scheduleImmediateJsOverride: [function(callback) {\n  self.scheduleImmediate(H.convertDartClosureToJS(new P._AsyncRun__scheduleImmediateJsOverride_internalCallback(callback), 0));\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateJsOverride$closure\", 4, 0, 3]\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "67701762": {
+        "id": "function/67701762",
+        "kind": "function",
+        "name": "_hasTimer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "68051831": {
+        "id": "function/68051831",
+        "kind": "function",
+        "name": "handleError",
+        "size": 409,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "asyncError",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "handleError$1: function(asyncError) {\n  var errorCallback, t1;\n  errorCallback = this.errorCallback;\n  t1 = this.result._zone;\n  if (H.functionTypeTest(errorCallback, {func: 1, args: [P.Object, P.StackTrace]}))\n    return t1.runBinary$3(errorCallback, asyncError.error, asyncError.stackTrace);\n  else\n    return t1.runUnary$2(errorCallback, asyncError.error);\n}\n",
+        "type": "dynamic Function(AsyncError)",
+        "measurements": null
+      },
+      "72077250": {
+        "id": "function/72077250",
+        "kind": "function",
+        "name": "toString",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"DeferredLoadException: '\" + this._s + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "79175019": {
+        "id": "function/79175019",
+        "kind": "function",
+        "name": "_isWorker",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "80270395": {
+        "id": "function/80270395",
+        "kind": "function",
+        "name": "current",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "ListIterator.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$current: function() {\n  return this.__internal$_current;\n}\n",
+        "type": "ListIterator.E Function()",
+        "measurements": null
+      },
+      "80736041": {
+        "id": "function/80736041",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return H.Primitives_objectHashCode(receiver);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "81057679": {
+        "id": "function/81057679",
+        "kind": "function",
+        "name": "call",
+        "size": 69,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/310226650",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bindCallback.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  return this.$this.run$1(this.f);\n}\n",
+        "type": "bindCallback.R Function()",
+        "measurements": null
+      },
+      "82702408": {
+        "id": "function/82702408",
+        "kind": "function",
+        "name": "_startMicrotaskLoop",
+        "size": 415,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_startMicrotaskLoop: [function() {\n  $._isInCallbackLoop = true;\n  try {\n    P._microtaskLoop();\n  } finally {\n    $._lastPriorityCallback = null;\n    $._isInCallbackLoop = false;\n    if ($._nextCallback != null)\n      $.$get$_AsyncRun__scheduleImmediateClosure().call$1(P.async___startMicrotaskLoop$closure());\n  }\n}, \"call$0\", \"async___startMicrotaskLoop$closure\", 0, 0, 1]\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "91425461": {
+        "id": "function/91425461",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/851867060",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "93381370": {
+        "id": "function/93381370",
+        "kind": "function",
+        "name": "toString",
+        "size": 66,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/542248491",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"Stack Overflow\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Stack Overflow\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "94108092": {
+        "id": "function/94108092",
+        "kind": "function",
+        "name": "_Future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 5,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "95599505": {
+        "id": "function/95599505",
+        "kind": "function",
+        "name": "handleWhenComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "96457955": {
+        "id": "function/96457955",
+        "kind": "function",
+        "name": "_completeWithValue",
+        "size": 222,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_Future.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_completeWithValue$1: function(value) {\n  var listeners = this._removeListeners$0();\n  this._state = 4;\n  this._resultOrListeners = value;\n  P._Future__propagateToListeners(this, listeners);\n}\n",
+        "type": "void Function(_Future.T)",
+        "measurements": null
+      },
+      "98156511": {
+        "id": "function/98156511",
+        "kind": "function",
+        "name": "contains",
+        "size": 534,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "contains$1: function(_, object) {\n  var strings, nums;\n  if (typeof object === \"string\" && object !== \"__proto__\") {\n    strings = this._strings;\n    if (strings == null)\n      return false;\n    return strings[object] != null;\n  } else if (typeof object === \"number\" && (object & 0x3ffffff) === object) {\n    nums = this._nums;\n    if (nums == null)\n      return false;\n    return nums[object] != null;\n  } else\n    return this._contains$1(object);\n}\n",
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "99251871": {
+        "id": "function/99251871",
+        "kind": "function",
+        "name": "iterator",
+        "size": 172,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<_LinkedHashSet.E>",
+        "inferredReturnType": "[exact=_LinkedHashSetIterator]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 0,
+        "code": "get$iterator: function(_) {\n  var t1 = new P._LinkedHashSetIterator(this, this._modifications, null, null);\n  t1._cell = this._first;\n  return t1;\n}\n",
+        "type": "Iterator<_LinkedHashSet.E> Function()",
+        "measurements": null
+      },
+      "99501118": {
+        "id": "function/99501118",
+        "kind": "function",
+        "name": "complete",
+        "size": 325,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/952584796",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "complete$1: [function(value) {\n  var t1 = this.future;\n  if (t1._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  t1._complete$1(value);\n}, function() {\n  return this.complete$1(null);\n}, \"complete$0\", \"call$1\", \"call$0\", \"get$complete\", 0, 2, 15]\n",
+        "type": "void Function([dynamic])",
+        "measurements": null
+      },
+      "102471615": {
+        "id": "function/102471615",
+        "kind": "function",
+        "name": "complete",
+        "size": 208,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "complete$1: function(value) {\n  var t1 = this.future;\n  if (t1._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  t1._asyncComplete$1(value);\n}\n",
+        "type": "void Function([dynamic])",
+        "measurements": null
+      },
+      "108053021": {
+        "id": "function/108053021",
+        "kind": "function",
+        "name": "hasNoField",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "109394176": {
+        "id": "function/109394176",
+        "kind": "function",
+        "name": "jsonEncodeNative",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "114607430": {
+        "id": "function/114607430",
+        "kind": "function",
+        "name": "_getBucket",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "List<dynamic> Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "116203851": {
+        "id": "function/116203851",
+        "kind": "function",
+        "name": "toString",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Deferred library \" + H.S(this.libraryName) + \" was not loaded.\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "116583875": {
+        "id": "function/116583875",
+        "kind": "function",
+        "name": "_asyncRethrow",
+        "size": 143,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Completer<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncRethrow: function(object, completer) {\n  completer.completeError$2(H.unwrapException(object), H.getTraceFromException(object));\n}\n",
+        "type": "dynamic Function(dynamic,Completer<dynamic>)",
+        "measurements": null
+      },
+      "116599339": {
+        "id": "function/116599339",
+        "kind": "function",
+        "name": "LinkedHashMap._empty",
+        "size": 126,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/614050497",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>",
+        "inferredReturnType": "[subclass=JsLinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "LinkedHashMap_LinkedHashMap$_empty: function() {\n  return new H.JsLinkedHashMap(0, null, null, null, null, null, 0);\n}\n",
+        "type": "LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V> Function()",
+        "measurements": null
+      },
+      "120153851": {
+        "id": "function/120153851",
+        "kind": "function",
+        "name": "_LinkedIdentityHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059387371",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedIdentityHashSet]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "123959555": {
+        "id": "function/123959555",
+        "kind": "function",
+        "name": "JsLinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JsLinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "128684509": {
+        "id": "function/128684509",
+        "kind": "function",
+        "name": "LinkedHashSet",
+        "size": 156,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143510818",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "LinkedHashSet<LinkedHashSet.E>",
+        "inferredReturnType": "[subclass=_LinkedHashSet]",
+        "parameters": [
+          {
+            "name": "equals",
+            "type": "[null]",
+            "declaredType": "bool Function(LinkedHashSet.E,LinkedHashSet.E)"
+          },
+          {
+            "name": "hashCode",
+            "type": "[null]",
+            "declaredType": "int Function(LinkedHashSet.E)"
+          },
+          {
+            "name": "isValidKey",
+            "type": "[null]",
+            "declaredType": "bool Function(dynamic)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "LinkedHashSet_LinkedHashSet: function(equals, hashCode, isValidKey, $E) {\n  return new P._LinkedHashSet(0, null, null, null, null, null, 0, [$E]);\n}\n",
+        "type": "LinkedHashSet<LinkedHashSet.E> Function({bool Function(LinkedHashSet.E,LinkedHashSet.E) equals,int Function(LinkedHashSet.E) hashCode,bool Function(dynamic) isValidKey})",
+        "measurements": null
+      },
+      "130041650": {
+        "id": "function/130041650",
+        "kind": "function",
+        "name": "toString",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Bad state: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "130131853": {
+        "id": "function/130131853",
+        "kind": "function",
+        "name": "_contains",
+        "size": 212,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_contains$1: function(object) {\n  var rest = this._rest;\n  if (rest == null)\n    return false;\n  return this._findBucketIndex$2(rest[this._computeHashCode$1(object)], object) >= 0;\n}\n",
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "136972596": {
+        "id": "function/136972596",
+        "kind": "function",
+        "name": "isFunctionSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "139456351": {
+        "id": "function/139456351",
+        "kind": "function",
+        "name": "call",
+        "size": 297,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/637664934",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "k",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "v",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$2: function(k, v) {\n  var t1, t2;\n  t1 = this._box_0;\n  if (!t1.first)\n    this.result._contents += \", \";\n  t1.first = false;\n  t1 = this.result;\n  t2 = t1._contents += H.S(k);\n  t1._contents = t2 + \": \";\n  t1._contents += H.S(v);\n}\n",
+        "type": "Null Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "143567266": {
+        "id": "function/143567266",
+        "kind": "function",
+        "name": "StaticClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/466061502",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StaticClosure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "143741280": {
+        "id": "function/143741280",
+        "kind": "function",
+        "name": "toString",
+        "size": 214,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1 = this._method;\n  if (t1 == null)\n    return \"NullError: \" + H.S(this._message);\n  return \"NullError: method not found: '\" + H.S(t1) + \"' on null\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "144469777": {
+        "id": "function/144469777",
+        "kind": "function",
+        "name": "length",
+        "size": 308,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "newLength",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "set$length: function(receiver, newLength) {\n  if (!!receiver.fixed$length)\n    H.throwExpression(P.UnsupportedError$(\"set length\"));\n  if (newLength < 0)\n    throw H.wrapException(P.RangeError$range(newLength, 0, null, \"newLength\", null));\n  receiver.length = newLength;\n}\n",
+        "type": "void Function(int)",
+        "measurements": null
+      },
+      "144469778": {
+        "id": "function/144469778",
+        "kind": "function",
+        "name": "length",
+        "size": 72,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length: function(receiver) {\n  return receiver.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "148863126": {
+        "id": "function/148863126",
+        "kind": "function",
+        "name": "NullError",
+        "size": 130,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NullError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "match",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "NullError$: function(_message, match) {\n  return new H.NullError(_message, match == null ? null : match.method);\n}\n",
+        "type": "dynamic Function(String,dynamic)",
+        "measurements": null
+      },
+      "150523169": {
+        "id": "function/150523169",
+        "kind": "function",
+        "name": "_startIndex",
+        "size": 221,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_startIndex: function() {\n  var $length, t1;\n  $length = J.get$length$as(this.__internal$_iterable);\n  t1 = this._start;\n  if (t1 > $length)\n    return $length;\n  return t1;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "150705145": {
+        "id": "function/150705145",
+        "kind": "function",
+        "name": "toString",
+        "size": 222,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1 = this.variableName;\n  return t1 == null ? \"Reading static variable during its initialization\" : \"Reading static variable '\" + H.S(t1) + \"' during its initialization\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "160969748": {
+        "id": "function/160969748",
+        "kind": "function",
+        "name": "_rootRunUnary",
+        "size": 323,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRunUnary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "_rootRunUnary.R Function(_rootRunUnary.T)"
+          },
+          {
+            "name": "arg",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_rootRunUnary.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootRunUnary: function($self, $parent, zone, f, arg) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$1(arg);\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$1(arg);\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
+        "type": "_rootRunUnary.R Function(Zone,ZoneDelegate,Zone,_rootRunUnary.R Function(_rootRunUnary.T),_rootRunUnary.T)",
+        "measurements": null
+      },
+      "162825675": {
+        "id": "function/162825675",
+        "kind": "function",
+        "name": "join",
+        "size": 383,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \"\n\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "join$1: function(receiver, separator) {\n  var t1, list, i, t2;\n  t1 = receiver.length;\n  list = new Array(t1);\n  list.fixed$length = Array;\n  for (i = 0; i < receiver.length; ++i) {\n    t2 = H.S(receiver[i]);\n    if (i >= t1)\n      return H.ioore(list, i);\n    list[i] = t2;\n  }\n  return list.join(separator);\n}\n",
+        "type": "String Function([String])",
+        "measurements": null
+      },
+      "162872908": {
+        "id": "function/162872908",
+        "kind": "function",
+        "name": "_SyncCompleter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/952584796",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_SyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "163884478": {
+        "id": "function/163884478",
+        "kind": "function",
+        "name": "_scheduleImmediateWithSetImmediate",
+        "size": 395,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/817717319"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_AsyncRun__scheduleImmediateWithSetImmediate: [function(callback) {\n  self.setImmediate(H.convertDartClosureToJS(new P._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(callback), 0));\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateWithSetImmediate$closure\", 4, 0, 3]\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "163889622": {
+        "id": "function/163889622",
+        "kind": "function",
+        "name": "wrapException",
+        "size": 402,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "wrapException: function(ex) {\n  var wrapper;\n  if (ex == null)\n    ex = new P.NullThrownError();\n  wrapper = new Error();\n  wrapper.dartException = ex;\n  if (\"defineProperty\" in Object) {\n    Object.defineProperty(wrapper, \"message\", {get: H.toStringWrapper});\n    wrapper.name = \"\";\n  } else\n    wrapper.toString = H.toStringWrapper;\n  return wrapper;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "164775669": {
+        "id": "function/164775669",
+        "kind": "function",
+        "name": "registerCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerCallback.R Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerCallback.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "registerCallback.R Function() Function(registerCallback.R Function())",
+        "measurements": null
+      },
+      "165003912": {
+        "id": "function/165003912",
+        "kind": "function",
+        "name": "_initializeScheduleImmediate",
+        "size": 1331,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [
+          "closure/607767883",
+          "closure/913475889"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_AsyncRun__initializeScheduleImmediate: function() {\n  var t1, div, span;\n  t1 = {};\n  if (self.scheduleImmediate != null)\n    return P.async__AsyncRun__scheduleImmediateJsOverride$closure();\n  if (self.MutationObserver != null && self.document != null) {\n    div = self.document.createElement(\"div\");\n    span = self.document.createElement(\"span\");\n    t1.storedCallback = null;\n    new self.MutationObserver(H.convertDartClosureToJS(new P._AsyncRun__initializeScheduleImmediate_internalCallback(t1), 1)).observe(div, {childList: true});\n    return new P._AsyncRun__initializeScheduleImmediate_closure(t1, div, span);\n  } else if (self.setImmediate != null)\n    return P.async__AsyncRun__scheduleImmediateWithSetImmediate$closure();\n  return P.async__AsyncRun__scheduleImmediateWithTimer$closure();\n}\n",
+        "type": "Function Function()",
+        "measurements": null
+      },
+      "167405219": {
+        "id": "function/167405219",
+        "kind": "function",
+        "name": "toString",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(this) + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "171287120": {
+        "id": "function/171287120",
+        "kind": "function",
+        "name": "_onError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[null|subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Function Function()",
+        "measurements": null
+      },
+      "173469993": {
+        "id": "function/173469993",
+        "kind": "function",
+        "name": "toString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/481500691",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "175997763": {
+        "id": "function/175997763",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/245082925",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return receiver ? 519018 : 218159;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "176570718": {
+        "id": "function/176570718",
+        "kind": "function",
+        "name": "toString",
+        "size": 101,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/758572498",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return P.IterableBase_iterableToFullString(this, \"{\", \"}\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "176842663": {
+        "id": "function/176842663",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 480,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 0,
+        "code": "moveNext$0: function() {\n  var t1 = this._set;\n  if (this._modifications !== t1._modifications)\n    throw H.wrapException(P.ConcurrentModificationError$(t1));\n  else {\n    t1 = this._cell;\n    if (t1 == null) {\n      this._collection$_current = null;\n      return false;\n    } else {\n      this._collection$_current = t1._element;\n      this._cell = t1._next;\n      return true;\n    }\n  }\n}\n",
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "179653294": {
+        "id": "function/179653294",
+        "kind": "function",
+        "name": "DeferredNotLoadedError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=DeferredNotLoadedError]",
+        "parameters": [
+          {
+            "name": "libraryName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "186999466": {
+        "id": "function/186999466",
+        "kind": "function",
+        "name": "length",
+        "size": 72,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length: function(receiver) {\n  return receiver.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "188708191": {
+        "id": "function/188708191",
+        "kind": "function",
+        "name": "_StreamIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_StreamIterator]",
+        "parameters": [
+          {
+            "name": "stream",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Stream<_StreamIterator.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(Stream<_StreamIterator.T>)",
+        "measurements": null
+      },
+      "193787732": {
+        "id": "function/193787732",
+        "kind": "function",
+        "name": "_getRuntimeTypeAsStringV1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
+        "measurements": null
+      },
+      "199851072": {
+        "id": "function/199851072",
+        "kind": "function",
+        "name": "SubListIterable",
+        "size": 232,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=SubListIterable]",
+        "parameters": [
+          {
+            "name": "_iterable",
+            "type": "Union([exact=SubListIterable], [subclass=JSArray])",
+            "declaredType": "Iterable<SubListIterable.E>"
+          },
+          {
+            "name": "_start",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_endOrLength",
+            "type": "[null]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "SubListIterable$: function(_iterable, _start, _endOrLength) {\n  var t1 = new H.SubListIterable(_iterable, _start, _endOrLength);\n  t1.SubListIterable$3(_iterable, _start, _endOrLength);\n  return t1;\n}\n",
+        "type": "dynamic Function(Iterable<SubListIterable.E>,int,int)",
+        "measurements": null
+      },
+      "203738274": {
+        "id": "function/203738274",
+        "kind": "function",
+        "name": "extractKeys",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "victim",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "extractKeys: function(victim) {\n  return J.JSArray_JSArray$markFixed(victim ? Object.keys(victim) : []);\n}\n",
+        "type": "List<dynamic> Function(dynamic)",
+        "measurements": null
+      },
+      "204916897": {
+        "id": "function/204916897",
+        "kind": "function",
+        "name": "_codeUnitAt",
+        "size": 203,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_codeUnitAt$1: function(receiver, index) {\n  if (index >= receiver.length)\n    throw H.wrapException(H.diagnoseIndexError(receiver, index));\n  return receiver.charCodeAt(index);\n}\n",
+        "type": "int Function(int)",
+        "measurements": null
+      },
+      "205154197": {
+        "id": "function/205154197",
+        "kind": "function",
+        "name": "_registerErrorHandler",
+        "size": 498,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Function",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "errorHandler",
+            "type": "[subclass=Closure]",
+            "declaredType": "Function"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 0,
+        "code": "_registerErrorHandler: function(errorHandler, zone) {\n  if (H.functionTypeTest(errorHandler, {func: 1, args: [P.Object, P.StackTrace]}))\n    return zone.registerBinaryCallback$1(errorHandler);\n  if (H.functionTypeTest(errorHandler, {func: 1, args: [P.Object]}))\n    return errorHandler;\n  throw H.wrapException(P.ArgumentError$value(errorHandler, \"onError\", \"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a a valid result\"));\n}\n",
+        "type": "Function Function(Function,Zone)",
+        "measurements": null
+      },
+      "208283907": {
+        "id": "function/208283907",
+        "kind": "function",
+        "name": "UnsupportedError",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=UnsupportedError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "UnsupportedError$: function(message) {\n  return new P.UnsupportedError(message);\n}\n",
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "210296716": {
+        "id": "function/210296716",
+        "kind": "function",
+        "name": "StringBuffer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StringBuffer]",
+        "parameters": [
+          {
+            "name": "content",
+            "type": "[exact=JSString]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function([Object])",
+        "measurements": null
+      },
+      "210974499": {
+        "id": "function/210974499",
+        "kind": "function",
+        "name": "List.filled",
+        "size": 268,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/959990109",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "List<List.E>",
+        "inferredReturnType": "Union([exact=JSExtendableArray], [exact=JSFixedArray])",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "fill",
+            "type": "Value([exact=JSBool], value: true)",
+            "declaredType": "List.E"
+          },
+          {
+            "name": "growable",
+            "type": "Value([exact=JSBool], value: false)",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "List_List$filled: function($length, fill, growable) {\n  var result, t1, i;\n  result = J.JSArray_JSArray$fixed($length);\n  if ($length !== 0 && true)\n    for (t1 = result.length, i = 0; i < t1; ++i)\n      result[i] = true;\n  return result;\n}\n",
+        "type": "List<List.E> Function(int,List.E,{bool growable})",
+        "measurements": null
+      },
+      "219348673": {
+        "id": "function/219348673",
+        "kind": "function",
+        "name": "provokeCallErrorOnNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "221934998": {
+        "id": "function/221934998",
+        "kind": "function",
+        "name": "+",
+        "size": 369,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<JSArray.E>",
+        "inferredReturnType": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "List<JSArray.E>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "$add: function(receiver, other) {\n  var totalLength, t1;\n  totalLength = C.JSInt_methods.$add(receiver.length, C.JSInt_methods.get$length(other));\n  t1 = [];\n  this.set$length(t1, totalLength);\n  this.setRange$3(t1, 0, receiver.length, receiver);\n  this.setRange$3(t1, receiver.length, totalLength, other);\n  return t1;\n}\n",
+        "type": "List<JSArray.E> Function(List<JSArray.E>)",
+        "measurements": null
+      },
+      "222294695": {
+        "id": "function/222294695",
+        "kind": "function",
+        "name": "ReflectionInfo.internal",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ReflectionInfo]",
+        "parameters": [
+          {
+            "name": "jsFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "data",
+            "type": "[exact=JSFixedArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "isAccessor",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "requiredParameterCount",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "optionalParameterCount",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "areOptionalParametersNamed",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "functionType",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,List<dynamic>,bool,int,int,bool,dynamic)",
+        "measurements": null
+      },
+      "225159691": {
+        "id": "function/225159691",
+        "kind": "function",
+        "name": "checkNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "Value([exact=JSString], value: \"/\")",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value([exact=JSString], value: \"/\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "229841336": {
+        "id": "function/229841336",
+        "kind": "function",
+        "name": "provokePropertyErrorOn",
+        "size": 255,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "expression",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "TypeErrorDecoder_provokePropertyErrorOn: function(expression) {\n  return function($expr$) {\n    try {\n      $expr$.$method$;\n    } catch (e) {\n      return e.message;\n    }\n  }(expression);\n}\n",
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "230858033": {
+        "id": "function/230858033",
+        "kind": "function",
+        "name": "runtimeTypeToStringV1",
+        "size": 736,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "runtimeTypeToStringV1: function(rti, onTypeVariable) {\n  var typedefInfo;\n  if (rti == null)\n    return \"dynamic\";\n  if (typeof rti === \"object\" && rti !== null && rti.constructor === Array)\n    return rti[0].builtin$cls + H.joinArgumentsV1(rti, 1, onTypeVariable);\n  if (typeof rti == \"function\")\n    return rti.builtin$cls;\n  if (typeof rti === \"number\" && Math.floor(rti) === rti)\n    return H.S(rti);\n  if (typeof rti.func != \"undefined\") {\n    typedefInfo = rti.typedef;\n    if (typedefInfo != null)\n      return H.runtimeTypeToStringV1(typedefInfo, onTypeVariable);\n    return H._functionRtiToStringV1(rti, onTypeVariable);\n  }\n  return \"unknown-reified-type\";\n}\n",
+        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
+        "measurements": null
+      },
+      "231669663": {
+        "id": "function/231669663",
+        "kind": "function",
+        "name": "call",
+        "size": 470,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/30023746",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var e, s, t1, exception;\n  try {\n    t1 = this.listener;\n    this._box_0.listenerValueOrError = t1.result._zone.runUnary$2(t1.callback, this.sourceResult);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    t1 = this._box_0;\n    t1.listenerValueOrError = new P.AsyncError(e, s);\n    t1.listenerHasError = true;\n  }\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "243489700": {
+        "id": "function/243489700",
+        "kind": "function",
+        "name": "checkValidRange",
+        "size": 379,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "start",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "end",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "startName",
+            "type": "[null]",
+            "declaredType": "String"
+          },
+          {
+            "name": "endName",
+            "type": "[null]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "RangeError_checkValidRange: function(start, end, $length, startName, endName, message) {\n  if (start > $length)\n    throw H.wrapException(P.RangeError$range(start, 0, $length, \"start\", message));\n  if (start > end || end > $length)\n    throw H.wrapException(P.RangeError$range(end, start, $length, \"end\", message));\n  return end;\n}\n",
+        "type": "int Function(int,int,int,[String,String,String])",
+        "measurements": null
+      },
+      "245651187": {
+        "id": "function/245651187",
+        "kind": "function",
+        "name": "_isNumericKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "248499885": {
+        "id": "function/248499885",
+        "kind": "function",
+        "name": "call",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/741043867",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.$this._completer.completeError$2(this.e, this.st);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "248883787": {
+        "id": "function/248883787",
+        "kind": "function",
+        "name": "call",
+        "size": 240,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/601101415",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  var t1, t2;\n  t1 = this.waitingForLoad;\n  t2 = this.i;\n  if (t2 >= t1.length)\n    return H.ioore(t1, t2);\n  t1[t2] = false;\n  this.initializeSomeLoadedHunks.call$0();\n}\n",
+        "type": "Null Function(Object)",
+        "measurements": null
+      },
+      "249771766": {
+        "id": "function/249771766",
+        "kind": "function",
+        "name": "call",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/637416128",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var t1 = this.$this;\n  t1._handle = null;\n  t1._tick = 1;\n  this.callback.call$0();\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "253794122": {
+        "id": "function/253794122",
+        "kind": "function",
+        "name": "fromTearOff",
+        "size": 2845,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "functions",
+            "type": "[exact=JSFixedArray]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "reflectionInfo",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "isStatic",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "jsArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "propertyName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_fromTearOff: function(receiver, functions, reflectionInfo, isStatic, jsArguments, propertyName) {\n  var $function, callName, functionType, $prototype, $constructor, t1, isIntercepted, trampoline, signatureFunction, getReceiver, i, stub, stubCallName, t2;\n  $function = functions[0];\n  callName = $function.$callName;\n  if (!!J.getInterceptor(reflectionInfo).$isList) {\n    $function.$reflectionInfo = reflectionInfo;\n    functionType = H.ReflectionInfo_ReflectionInfo($function).functionType;\n  } else\n    functionType = reflectionInfo;\n  $prototype = isStatic ? Object.create(new H.StaticClosure().constructor.prototype) : Object.create(new H.BoundClosure(null, null, null, null).constructor.prototype);\n  $prototype.$initialize = $prototype.constructor;\n  if (isStatic)\n    $constructor = function() {\n      this.$initialize();\n    };\n  else {\n    t1 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t1, 1);\n    $constructor = new Function(\"a,b,c,d\" + t1, \"this.$initialize(a,b,c,d\" + t1 + \")\");\n  }\n  $prototype.constructor = $constructor;\n  $constructor.prototype = $prototype;\n  if (!isStatic) {\n    isIntercepted = jsArguments.length == 1 && true;\n    trampoline = H.Closure_forwardCallTo(receiver, $function, isIntercepted);\n    trampoline.$reflectionInfo = reflectionInfo;\n  } else {\n    $prototype.$static_name = propertyName;\n    trampoline = $function;\n    isIntercepted = false;\n  }\n  if (typeof functionType == \"number\")\n    signatureFunction = function(getType, t) {\n      return function() {\n        return getType(t);\n      };\n    }(H.getType, functionType);\n  else if (typeof functionType == \"function\")\n    if (isStatic)\n      signatureFunction = functionType;\n    else {\n      getReceiver = isIntercepted ? H.BoundClosure_receiverOf : H.BoundClosure_selfOf;\n      signatureFunction = function(f, r) {\n        return function() {\n          return f.apply({$receiver: r(this)}, arguments);\n        };\n      }(functionType, getReceiver);\n    }\n  else\n    throw H.wrapException(\"Error in reflectionInfo.\");\n  $prototype.$signature = signatureFunction;\n  $prototype[callName] = trampoline;\n  for (t1 = functions.length, i = 1; i < t1; ++i) {\n    stub = functions[i];\n    stubCallName = stub.$callName;\n    if (stubCallName != null) {\n      t2 = isStatic ? stub : H.Closure_forwardCallTo(receiver, stub, isIntercepted);\n      $prototype[stubCallName] = t2;\n    }\n  }\n  $prototype[\"call*\"] = trampoline;\n  $prototype.$requiredArgCount = $function.$requiredArgCount;\n  $prototype.$defaultValues = $function.$defaultValues;\n  return $constructor;\n}\n",
+        "type": "dynamic Function(dynamic,List<dynamic>,dynamic,bool,dynamic,String)",
+        "measurements": null
+      },
+      "257728434": {
+        "id": "function/257728434",
+        "kind": "function",
+        "name": "isDartFunctionTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "259223906": {
+        "id": "function/259223906",
+        "kind": "function",
+        "name": "ExceptionAndStackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ExceptionAndStackTrace]",
+        "parameters": [
+          {
+            "name": "dartException",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "262026503": {
+        "id": "function/262026503",
+        "kind": "function",
+        "name": "_rootRun",
+        "size": 307,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRun.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "_rootRun.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootRun: function($self, $parent, zone, f) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$0();\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$0();\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
+        "type": "_rootRun.R Function(Zone,ZoneDelegate,Zone,_rootRun.R Function())",
+        "measurements": null
+      },
+      "263363184": {
+        "id": "function/263363184",
+        "kind": "function",
+        "name": "_asyncCompleteError",
+        "size": 420,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/411607690"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncCompleteError$2: function(error, stackTrace) {\n  var t1;\n  this._state = 1;\n  t1 = this._zone;\n  t1.toString;\n  P._rootScheduleMicrotask(null, null, t1, new P._Future__asyncCompleteError_closure(this, error, stackTrace));\n}\n",
+        "type": "void Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "263798810": {
+        "id": "function/263798810",
+        "kind": "function",
+        "name": "convertDartClosureToJS",
+        "size": 412,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arity",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "convertDartClosureToJS: function(closure, arity) {\n  var $function = closure.$identity;\n  if (!!$function)\n    return $function;\n  $function = function(closure, arity, invoke) {\n    return function(a1, a2, a3, a4) {\n      return invoke(closure, arity, a1, a2, a3, a4);\n    };\n  }(closure, arity, H.invokeClosure);\n  closure.$identity = $function;\n  return $function;\n}\n",
+        "type": "dynamic Function(dynamic,int)",
+        "measurements": null
+      },
+      "264370095": {
+        "id": "function/264370095",
+        "kind": "function",
+        "name": "rawRtiToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "265638794": {
+        "id": "function/265638794",
+        "kind": "function",
+        "name": "unwrapException",
+        "size": 4652,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [
+          "closure/771507318"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "unwrapException: function(ex) {\n  var t1, message, number, ieErrorCode, nsme, notClosure, nullCall, nullLiteralCall, undefCall, undefLiteralCall, nullProperty, undefProperty, undefLiteralProperty, match, t2;\n  t1 = new H.unwrapException_saveStackTrace(ex);\n  if (ex == null)\n    return;\n  if (ex instanceof H.ExceptionAndStackTrace)\n    return t1.call$1(ex.dartException);\n  if (typeof ex !== \"object\")\n    return ex;\n  if (\"dartException\" in ex)\n    return t1.call$1(ex.dartException);\n  else if (!(\"message\" in ex))\n    return ex;\n  message = ex.message;\n  if (\"number\" in ex && typeof ex.number == \"number\") {\n    number = ex.number;\n    ieErrorCode = number & 65535;\n    if ((C.JSInt_methods._shrOtherPositive$1(number, 16) & 8191) === 10)\n      switch (ieErrorCode) {\n        case 438:\n          return t1.call$1(H.JsNoSuchMethodError$(H.S(message) + \" (Error \" + ieErrorCode + \")\", null));\n        case 445:\n        case 5007:\n          return t1.call$1(H.NullError$(H.S(message) + \" (Error \" + ieErrorCode + \")\", null));\n      }\n  }\n  if (ex instanceof TypeError) {\n    nsme = $.$get$TypeErrorDecoder_noSuchMethodPattern();\n    notClosure = $.$get$TypeErrorDecoder_notClosurePattern();\n    nullCall = $.$get$TypeErrorDecoder_nullCallPattern();\n    nullLiteralCall = $.$get$TypeErrorDecoder_nullLiteralCallPattern();\n    undefCall = $.$get$TypeErrorDecoder_undefinedCallPattern();\n    undefLiteralCall = $.$get$TypeErrorDecoder_undefinedLiteralCallPattern();\n    nullProperty = $.$get$TypeErrorDecoder_nullPropertyPattern();\n    $.$get$TypeErrorDecoder_nullLiteralPropertyPattern();\n    undefProperty = $.$get$TypeErrorDecoder_undefinedPropertyPattern();\n    undefLiteralProperty = $.$get$TypeErrorDecoder_undefinedLiteralPropertyPattern();\n    match = nsme.matchTypeError$1(message);\n    if (match != null)\n      return t1.call$1(H.JsNoSuchMethodError$(message, match));\n    else {\n      match = notClosure.matchTypeError$1(message);\n      if (match != null) {\n        match.method = \"call\";\n        return t1.call$1(H.JsNoSuchMethodError$(message, match));\n      } else {\n        match = nullCall.matchTypeError$1(message);\n        if (match == null) {\n          match = nullLiteralCall.matchTypeError$1(message);\n          if (match == null) {\n            match = undefCall.matchTypeError$1(message);\n            if (match == null) {\n              match = undefLiteralCall.matchTypeError$1(message);\n              if (match == null) {\n                match = nullProperty.matchTypeError$1(message);\n                if (match == null) {\n                  match = nullLiteralCall.matchTypeError$1(message);\n                  if (match == null) {\n                    match = undefProperty.matchTypeError$1(message);\n                    if (match == null) {\n                      match = undefLiteralProperty.matchTypeError$1(message);\n                      t2 = match != null;\n                    } else\n                      t2 = true;\n                  } else\n                    t2 = true;\n                } else\n                  t2 = true;\n              } else\n                t2 = true;\n            } else\n              t2 = true;\n          } else\n            t2 = true;\n        } else\n          t2 = true;\n        if (t2)\n          return t1.call$1(H.NullError$(message, match));\n      }\n    }\n    return t1.call$1(new H.UnknownJsTypeError(typeof message === \"string\" ? message : \"\"));\n  }\n  if (ex instanceof RangeError) {\n    if (typeof message === \"string\" && message.indexOf(\"call stack\") !== -1)\n      return new P.StackOverflowError();\n    message = function(ex) {\n      try {\n        return String(ex);\n      } catch (e) {\n      }\n      return null;\n    }(ex);\n    return t1.call$1(new P.ArgumentError(false, null, null, typeof message === \"string\" ? message.replace(/^RangeError:\\s*/, \"\") : message));\n  }\n  if (typeof InternalError == \"function\" && ex instanceof InternalError)\n    if (typeof message === \"string\" && message === \"too much recursion\")\n      return new P.StackOverflowError();\n  return ex;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "268773900": {
+        "id": "function/268773900",
+        "kind": "function",
+        "name": "getIndex",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 14,
+        "code": null,
+        "type": "dynamic Function(dynamic,int)",
+        "measurements": null
+      },
+      "271556856": {
+        "id": "function/271556856",
+        "kind": "function",
+        "name": "StateError",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StateError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "StateError$: function(message) {\n  return new P.StateError(message);\n}\n",
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "271674536": {
+        "id": "function/271674536",
+        "kind": "function",
+        "name": "_propagateToListeners",
+        "size": 7272,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/30023746",
+          "closure/69029087",
+          "closure/830531955",
+          "closure/963665986"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          },
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "declaredType": "_FutureListener<dynamic,dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Future__propagateToListeners: function(source, listeners) {\n  var _box_1, t1, _box_0, hasError, asyncError, t2, t3, listeners0, sourceResult, zone, t4, oldZone, current, result;\n  _box_1 = {};\n  _box_1.source = source;\n  for (t1 = source; true;) {\n    _box_0 = {};\n    hasError = t1._state === 8;\n    if (listeners == null) {\n      if (hasError) {\n        asyncError = t1._resultOrListeners;\n        t1 = t1._zone;\n        t2 = asyncError.get$error();\n        t3 = asyncError.stackTrace;\n        t1.toString;\n        P._rootHandleUncaughtError(null, null, t1, t2, t3);\n      }\n      return;\n    }\n    for (; listeners0 = listeners._nextListener, listeners0 != null; listeners = listeners0) {\n      listeners._nextListener = null;\n      P._Future__propagateToListeners(_box_1.source, listeners);\n    }\n    t1 = _box_1.source;\n    sourceResult = t1._resultOrListeners;\n    _box_0.listenerHasError = hasError;\n    _box_0.listenerValueOrError = sourceResult;\n    t2 = !hasError;\n    if (t2) {\n      t3 = listeners.state;\n      t3 = (t3 & 1) !== 0 || t3 === 8;\n    } else\n      t3 = true;\n    if (t3) {\n      t3 = listeners.result;\n      zone = t3._zone;\n      if (hasError) {\n        t4 = t1._zone;\n        t4.toString;\n        t4 = t4 == null ? zone == null : t4 === zone;\n        if (!t4)\n          zone.toString;\n        else\n          t4 = true;\n        t4 = !t4;\n      } else\n        t4 = false;\n      if (t4) {\n        t1 = t1._zone;\n        t2 = sourceResult.get$error();\n        t3 = sourceResult.stackTrace;\n        t1.toString;\n        P._rootHandleUncaughtError(null, null, t1, t2, t3);\n        return;\n      }\n      oldZone = $.Zone__current;\n      if (oldZone == null ? zone != null : oldZone !== zone)\n        $.Zone__current = zone;\n      else\n        oldZone = null;\n      t1 = listeners.state;\n      if (t1 === 8)\n        new P._Future__propagateToListeners_handleWhenCompleteCallback(_box_1, _box_0, listeners, hasError).call$0();\n      else if (t2) {\n        if ((t1 & 1) !== 0)\n          new P._Future__propagateToListeners_handleValueCallback(_box_0, listeners, sourceResult).call$0();\n      } else if ((t1 & 2) !== 0)\n        new P._Future__propagateToListeners_handleError(_box_1, _box_0, listeners).call$0();\n      if (oldZone != null)\n        $.Zone__current = oldZone;\n      t1 = _box_0.listenerValueOrError;\n      if (!!J.getInterceptor(t1).$isFuture) {\n        if (t1._state >= 4) {\n          current = t3._resultOrListeners;\n          t3._resultOrListeners = null;\n          listeners = t3._reverseListeners$1(current);\n          t3._state = t1._state;\n          t3._resultOrListeners = t1._resultOrListeners;\n          _box_1.source = t1;\n          continue;\n        } else\n          P._Future__chainCoreFuture(t1, t3);\n        return;\n      }\n    }\n    result = listeners.result;\n    current = result._resultOrListeners;\n    result._resultOrListeners = null;\n    listeners = result._reverseListeners$1(current);\n    t1 = _box_0.listenerHasError;\n    t2 = _box_0.listenerValueOrError;\n    if (!t1) {\n      result._state = 4;\n      result._resultOrListeners = t2;\n    } else {\n      result._state = 8;\n      result._resultOrListeners = t2;\n    }\n    _box_1.source = result;\n    t1 = result;\n  }\n}\n",
+        "type": "void Function(_Future<dynamic>,_FutureListener<dynamic,dynamic>)",
+        "measurements": null
+      },
+      "271854590": {
+        "id": "function/271854590",
+        "kind": "function",
+        "name": "_asyncReturn",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Completer<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncReturn: function(object, completer) {\n  completer.complete$1(object);\n}\n",
+        "type": "dynamic Function(dynamic,Completer<dynamic>)",
+        "measurements": null
+      },
+      "272589495": {
+        "id": "function/272589495",
+        "kind": "function",
+        "name": "current",
+        "size": 381,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/347664883",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "StackTrace_current: function() {\n  var stackTrace, exception;\n  if ($.$get$_hasErrorStackProperty() === true)\n    return H.getTraceFromException(new Error());\n  try {\n    throw H.wrapException(\"\");\n  } catch (exception) {\n    H.unwrapException(exception);\n    stackTrace = H.getTraceFromException(exception);\n    return stackTrace;\n  }\n}\n",
+        "type": "StackTrace Function()",
+        "measurements": null
+      },
+      "272627576": {
+        "id": "function/272627576",
+        "kind": "function",
+        "name": "_StackTrace",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_StackTrace]",
+        "parameters": [
+          {
+            "name": "_exception",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "273024378": {
+        "id": "function/273024378",
+        "kind": "function",
+        "name": "forwardCallTo",
+        "size": 1632,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "isIntercepted",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_forwardCallTo: function(receiver, $function, isIntercepted) {\n  var stubName, arity, lookedUpFunction, t1, t2, selfName, $arguments;\n  if (isIntercepted)\n    return H.Closure_forwardInterceptedCallTo(receiver, $function);\n  stubName = $function.$stubName;\n  arity = $function.length;\n  lookedUpFunction = receiver[stubName];\n  t1 = $function == null ? lookedUpFunction == null : $function === lookedUpFunction;\n  t2 = !t1 || arity >= 27;\n  if (t2)\n    return H.Closure_cspForwardCall(arity, !t1, stubName, $function);\n  if (arity === 0) {\n    t1 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t1, 1);\n    selfName = \"self\" + H.S(t1);\n    t1 = \"return function(){var \" + selfName + \" = this.\";\n    t2 = $.BoundClosure_selfFieldNameCache;\n    if (t2 == null) {\n      t2 = H.BoundClosure_computeFieldNamed(\"self\");\n      $.BoundClosure_selfFieldNameCache = t2;\n    }\n    return new Function(t1 + H.S(t2) + \";return \" + selfName + \".\" + H.S(stubName) + \"();}\")();\n  }\n  $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity).join(\",\");\n  t1 = $.Closure_functionCounter;\n  $.Closure_functionCounter = J.$add$ans(t1, 1);\n  $arguments += H.S(t1);\n  t1 = \"return function(\" + $arguments + \"){return this.\";\n  t2 = $.BoundClosure_selfFieldNameCache;\n  if (t2 == null) {\n    t2 = H.BoundClosure_computeFieldNamed(\"self\");\n    $.BoundClosure_selfFieldNameCache = t2;\n  }\n  return new Function(t1 + H.S(t2) + \".\" + H.S(stubName) + \"(\" + $arguments + \");}\")();\n}\n",
+        "type": "dynamic Function(dynamic,dynamic,bool)",
+        "measurements": null
+      },
+      "275271990": {
+        "id": "function/275271990",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"RangeError\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorName: function() {\n  return \"RangeError\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "275681184": {
+        "id": "function/275681184",
+        "kind": "function",
+        "name": "getType",
+        "size": 64,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": "getType: function(index) {\n  return init.types[index];\n}\n",
+        "type": "dynamic Function(int)",
+        "measurements": null
+      },
+      "275957193": {
+        "id": "function/275957193",
+        "kind": "function",
+        "name": "add",
+        "size": 724,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "add$1: function(_, element) {\n  var strings, nums;\n  if (typeof element === \"string\" && element !== \"__proto__\") {\n    strings = this._strings;\n    if (strings == null) {\n      strings = P._LinkedHashSet__newHashTable();\n      this._strings = strings;\n    }\n    return this._addHashTableEntry$2(strings, element);\n  } else if (typeof element === \"number\" && (element & 0x3ffffff) === element) {\n    nums = this._nums;\n    if (nums == null) {\n      nums = P._LinkedHashSet__newHashTable();\n      this._nums = nums;\n    }\n    return this._addHashTableEntry$2(nums, element);\n  } else\n    return this._add$1(element);\n}\n",
+        "type": "bool Function(_LinkedHashSet.E)",
+        "measurements": null
+      },
+      "282990063": {
+        "id": "function/282990063",
+        "kind": "function",
+        "name": "call",
+        "size": 191,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/771507318",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(error) {\n  if (!!J.getInterceptor(error).$isError)\n    if (error.$thrownJsError == null)\n      error.$thrownJsError = this.ex;\n  return error;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "285148179": {
+        "id": "function/285148179",
+        "kind": "function",
+        "name": "toString",
+        "size": 194,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/466061502",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var $name = this.$static_name;\n  if ($name == null)\n    return \"Closure of unknown static method\";\n  return \"Closure '\" + $name + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "292195356": {
+        "id": "function/292195356",
+        "kind": "function",
+        "name": "computeFieldNamed",
+        "size": 441,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [
+          {
+            "name": "fieldName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_computeFieldNamed: function(fieldName) {\n  var template, names, t1, i, $name;\n  template = new H.BoundClosure(\"self\", \"target\", \"receiver\", \"name\");\n  names = J.JSArray_markFixedList(Object.getOwnPropertyNames(template));\n  for (t1 = names.length, i = 0; i < t1; ++i) {\n    $name = names[i];\n    if (template[$name] === fieldName)\n      return $name;\n  }\n}\n",
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "292751514": {
+        "id": "function/292751514",
+        "kind": "function",
+        "name": "_prependListeners",
+        "size": 1333,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/827328529"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "declaredType": "_FutureListener<dynamic,dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_prependListeners$1: function(listeners) {\n  var _box_0, t1, existingListeners, cursor, cursor0, source;\n  _box_0 = {};\n  _box_0.listeners = listeners;\n  if (listeners == null)\n    return;\n  t1 = this._state;\n  if (t1 <= 1) {\n    existingListeners = this._resultOrListeners;\n    this._resultOrListeners = listeners;\n    if (existingListeners != null) {\n      for (cursor = listeners; cursor0 = cursor._nextListener, cursor0 != null; cursor = cursor0)\n        ;\n      cursor._nextListener = existingListeners;\n    }\n  } else {\n    if (t1 === 2) {\n      source = this._resultOrListeners;\n      if (source.get$_state() < 4) {\n        source._prependListeners$1(listeners);\n        return;\n      }\n      this._state = source._state;\n      this._resultOrListeners = source._resultOrListeners;\n    }\n    _box_0.listeners = this._reverseListeners$1(listeners);\n    t1 = this._zone;\n    t1.toString;\n    P._rootScheduleMicrotask(null, null, t1, new P._Future__prependListeners_closure(_box_0, this));\n  }\n}\n",
+        "type": "void Function(_FutureListener<dynamic,dynamic>)",
+        "measurements": null
+      },
+      "292889014": {
+        "id": "function/292889014",
+        "kind": "function",
+        "name": "extractFunctionTypeObjectFromInternal",
+        "size": 294,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "extractFunctionTypeObjectFromInternal: function(o) {\n  var signature;\n  if (\"$signature\" in o) {\n    signature = o.$signature;\n    if (typeof signature == \"number\")\n      return init.types[signature];\n    else\n      return o.$signature();\n  }\n  return;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "299781104": {
+        "id": "function/299781104",
+        "kind": "function",
+        "name": "isJsArray",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 8,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "301932486": {
+        "id": "function/301932486",
+        "kind": "function",
+        "name": "Exception",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/631051714",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Exception",
+        "inferredReturnType": "[exact=_Exception]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Exception Function([dynamic])",
+        "measurements": null
+      },
+      "302617892": {
+        "id": "function/302617892",
+        "kind": "function",
+        "name": "_objectToString",
+        "size": 227,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Error__objectToString: function(object) {\n  var t1 = J.getInterceptor(object);\n  if (!!t1.$isClosure)\n    return t1.toString$0(object);\n  return \"Instance of '\" + H.Primitives_objectTypeName(object) + \"'\";\n}\n",
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "306374693": {
+        "id": "function/306374693",
+        "kind": "function",
+        "name": "isDartDynamicTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "308590446": {
+        "id": "function/308590446",
+        "kind": "function",
+        "name": "throwExpression",
+        "size": 70,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "ex",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "throwExpression: function(ex) {\n  throw H.wrapException(ex);\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "309114439": {
+        "id": "function/309114439",
+        "kind": "function",
+        "name": "invokeClosure",
+        "size": 535,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Function"
+          },
+          {
+            "name": "numberOfArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg3",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arg4",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "invokeClosure: function(closure, numberOfArguments, arg1, arg2, arg3, arg4) {\n  switch (numberOfArguments) {\n    case 0:\n      return closure.call$0();\n    case 1:\n      return closure.call$1(arg1);\n    case 2:\n      return closure.call$2(arg1, arg2);\n    case 3:\n      return closure.call$3(arg1, arg2, arg3);\n    case 4:\n      return closure.call$4(arg1, arg2, arg3, arg4);\n  }\n  throw H.wrapException(new P._Exception(\"Unsupported number of arguments for wrapped closure\"));\n}\n",
+        "type": "dynamic Function(Function,int,dynamic,dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "310457557": {
+        "id": "function/310457557",
+        "kind": "function",
+        "name": "isAssignableV1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "311229745": {
+        "id": "function/311229745",
+        "kind": "function",
+        "name": "call",
+        "size": 1345,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/844800611",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var t1, i, t2, t3, t4, t5, t6, t7, t8, t9, uri, hash;\n  for (t1 = this._box_0, i = t1.nextHunkToInitialize, t2 = this.total, t3 = this.initializer, t4 = this.isHunkLoaded, t5 = this.isHunkInitialized, t6 = this.uris, t7 = this.hashes, t8 = this.waitingForLoad, t9 = t8.length; i < t2; ++i) {\n    if (i >= t9)\n      return H.ioore(t8, i);\n    if (t8[i])\n      return;\n    ++t1.nextHunkToInitialize;\n    if (i >= t6.length)\n      return H.ioore(t6, i);\n    uri = t6[i];\n    if (i >= t7.length)\n      return H.ioore(t7, i);\n    hash = t7[i];\n    if (t5(hash)) {\n      $.$get$_eventLog().push(\" - already initialized: \" + uri + \" (\" + hash + \")\");\n      continue;\n    }\n    if (t4(hash)) {\n      $.$get$_eventLog().push(\" - initialize: \" + uri + \" (\" + hash + \")\");\n      t3(hash);\n    } else {\n      t1 = $.$get$_eventLog();\n      t1.push(\" - missing hunk: \" + uri + \" (\" + hash + \")\");\n      if (i >= t6.length)\n        return H.ioore(t6, i);\n      throw H.wrapException(P.DeferredLoadException$(\"Loading \" + t6[i] + \" failed: the code with hash '\" + hash + \"' was not loaded.\\nevent log:\\n\" + C.JSArray_methods.join$1(t1, \"\\n\") + \"\\n\"));\n    }\n  }\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "312768442": {
+        "id": "function/312768442",
+        "kind": "function",
+        "name": "substring",
+        "size": 531,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "endIndex",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "substring$2: function(receiver, startIndex, endIndex) {\n  if (endIndex == null)\n    endIndex = receiver.length;\n  if (startIndex > endIndex)\n    throw H.wrapException(P.RangeError$value(startIndex, null, null));\n  if (endIndex > receiver.length)\n    throw H.wrapException(P.RangeError$value(endIndex, null, null));\n  return receiver.substring(startIndex, endIndex);\n}\nsubstring$1: function($receiver, startIndex) {\n  return this.substring$2($receiver, startIndex, null);\n}\n",
+        "type": "String Function(int,[int])",
+        "measurements": null
+      },
+      "315128565": {
+        "id": "function/315128565",
+        "kind": "function",
+        "name": "_isStringKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "316732114": {
+        "id": "function/316732114",
+        "kind": "function",
+        "name": "isDartFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "320253842": {
+        "id": "function/320253842",
+        "kind": "function",
+        "name": "isCsp",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "325386239": {
+        "id": "function/325386239",
+        "kind": "function",
+        "name": "_chainFuture",
+        "size": 641,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/385965656"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[exact=_Future]",
+            "declaredType": "Future<_Future.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_chainFuture$1: function(value) {\n  var t1 = H.checkSubtypeV1(value, \"$is_Future\", this.$ti, null);\n  if (t1) {\n    if (value._state === 8) {\n      this._state = 1;\n      t1 = this._zone;\n      t1.toString;\n      P._rootScheduleMicrotask(null, null, t1, new P._Future__chainFuture_closure(this, value));\n    } else\n      P._Future__chainCoreFuture(value, this);\n    return;\n  }\n  P._Future__chainForeignFuture(value, this);\n}\n",
+        "type": "void Function(Future<_Future.T>)",
+        "measurements": null
+      },
+      "326542993": {
+        "id": "function/326542993",
+        "kind": "function",
+        "name": "_loadHunk",
+        "size": 4563,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [
+          "closure/21475",
+          "closure/566195572",
+          "closure/566195573",
+          "closure/566195574",
+          "closure/566195575",
+          "closure/566195576",
+          "closure/581471934"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<Null>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "hunkName",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_loadHunk: function(hunkName) {\n  var t1, deferredLibraryLoader, failure, jsSuccess, jsFailure, error, stackTrace, t2, future, t3, uri, t4, completer, exception, index, xhr, script;\n  t1 = {};\n  t2 = $.$get$_loadingLibraries();\n  future = t2.$index(0, hunkName);\n  t3 = $.$get$_eventLog();\n  t3.push(\" - _loadHunk: \" + hunkName);\n  if (future != null) {\n    t3.push(\"reuse: \" + hunkName);\n    return future.then$1(new H._loadHunk_closure());\n  }\n  uri = $.$get$thisScript();\n  t1.uri = uri;\n  uri = C.JSString_methods.substring$2(uri, 0, J.lastIndexOf$1$as(uri, \"/\") + 1) + hunkName;\n  t1.uri = uri;\n  t3.push(\" - download: \" + hunkName + \" from \" + uri);\n  deferredLibraryLoader = self.dartDeferredLibraryLoader;\n  t3 = P.Null;\n  t4 = new P._Future(0, $.Zone__current, null, [t3]);\n  completer = new P._AsyncCompleter(t4, [t3]);\n  t3 = new H._loadHunk_success(hunkName, completer);\n  failure = new H._loadHunk_failure(t1, hunkName, completer);\n  jsSuccess = H.convertDartClosureToJS(t3, 0);\n  jsFailure = H.convertDartClosureToJS(new H._loadHunk_closure0(failure), 1);\n  if (typeof deferredLibraryLoader === \"function\")\n    try {\n      deferredLibraryLoader(t1.uri, jsSuccess, jsFailure);\n    } catch (exception) {\n      error = H.unwrapException(exception);\n      stackTrace = H.getTraceFromException(exception);\n      failure.call$3(error, \"invoking dartDeferredLibraryLoader hook\", stackTrace);\n    }\n  else if ((!self.window && !!self.postMessage) === true) {\n    index = J.lastIndexOf$1$as(t1.uri, \"/\");\n    t1.uri = J.substring$2$s(t1.uri, 0, index + 1) + hunkName;\n    xhr = new XMLHttpRequest();\n    xhr.open(\"GET\", t1.uri);\n    xhr.addEventListener(\"load\", H.convertDartClosureToJS(new H._loadHunk_closure1(xhr, failure, t3), 1), false);\n    xhr.addEventListener(\"error\", new H._loadHunk_closure2(failure), false);\n    xhr.addEventListener(\"abort\", new H._loadHunk_closure3(failure), false);\n    xhr.send();\n  } else {\n    script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    script.src = t1.uri;\n    t1 = $.$get$_cspNonce();\n    if (t1 != null && t1 !== \"\")\n      script.nonce = t1;\n    script.addEventListener(\"load\", jsSuccess, false);\n    script.addEventListener(\"error\", jsFailure, false);\n    document.body.appendChild(script);\n  }\n  t2.$indexSet(0, hunkName, t4);\n  return t4;\n}\n",
+        "type": "Future<Null> Function(String)",
+        "measurements": null
+      },
+      "330018012": {
+        "id": "function/330018012",
+        "kind": "function",
+        "name": "_asyncAwait",
+        "size": 97,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "void Function(int,dynamic)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncAwait: function(object, bodyFunction) {\n  P._awaitOnObject(object, bodyFunction);\n}\n",
+        "type": "dynamic Function(dynamic,void Function(int,dynamic))",
+        "measurements": null
+      },
+      "335045122": {
+        "id": "function/335045122",
+        "kind": "function",
+        "name": "_writeString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 10,
+        "code": null,
+        "type": "void Function(dynamic)",
+        "measurements": null
+      },
+      "336168458": {
+        "id": "function/336168458",
+        "kind": "function",
+        "name": "scheduleMicrotask",
+        "size": 354,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "scheduleMicrotask: function(callback) {\n  var currentZone = $.Zone__current;\n  if (C.C__RootZone === currentZone) {\n    P._rootScheduleMicrotask(null, null, C.C__RootZone, callback);\n    return;\n  }\n  currentZone.toString;\n  P._rootScheduleMicrotask(null, null, currentZone, currentZone.bindCallbackGuarded$1(callback));\n}\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "336352070": {
+        "id": "function/336352070",
+        "kind": "function",
+        "name": "JsNoSuchMethodError",
+        "size": 238,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JsNoSuchMethodError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "match",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "JsNoSuchMethodError$: function(_message, match) {\n  var t1, t2;\n  t1 = match == null;\n  t2 = t1 ? null : match.method;\n  return new H.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver);\n}\n",
+        "type": "dynamic Function(String,dynamic)",
+        "measurements": null
+      },
+      "336424489": {
+        "id": "function/336424489",
+        "kind": "function",
+        "name": "_computeHashCode",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_computeHashCode$1: function(element) {\n  return J.get$hashCode$(element) & 0x3ffffff;\n}\n",
+        "type": "int Function(dynamic)",
+        "measurements": null
+      },
+      "337937411": {
+        "id": "function/337937411",
+        "kind": "function",
+        "name": "_awaitOnObject",
+        "size": 1004,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/745039293",
+          "closure/745039294"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "void Function(int,dynamic)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_awaitOnObject: function(object, bodyFunction) {\n  var thenCallback, errorCallback, t1, future;\n  thenCallback = new P._awaitOnObject_closure(bodyFunction);\n  errorCallback = new P._awaitOnObject_closure0(bodyFunction);\n  t1 = J.getInterceptor(object);\n  if (!!t1.$is_Future)\n    object._thenNoZoneRegistration$2(thenCallback, errorCallback);\n  else if (!!t1.$isFuture)\n    object.then$2$onError(thenCallback, errorCallback);\n  else {\n    future = new P._Future(0, $.Zone__current, null, [null]);\n    future._state = 4;\n    future._resultOrListeners = object;\n    future._thenNoZoneRegistration$2(thenCallback, null);\n  }\n}\n",
+        "type": "void Function(dynamic,void Function(int,dynamic))",
+        "measurements": null
+      },
+      "338379080": {
+        "id": "function/338379080",
+        "kind": "function",
+        "name": "errorCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "AsyncError",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "AsyncError Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "341046768": {
+        "id": "function/341046768",
+        "kind": "function",
+        "name": "call",
+        "size": 94,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/411607690",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.$this._completeError$2(this.error, this.stackTrace);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "343621437": {
+        "id": "function/343621437",
+        "kind": "function",
+        "name": "_enter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [
+          {
+            "name": "zone",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "Zone Function(Zone)",
+        "measurements": null
+      },
+      "347974666": {
+        "id": "function/347974666",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 440,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  var t1, hash, i;\n  for (t1 = receiver.length, hash = 0, i = 0; i < t1; ++i) {\n    hash = 536870911 & hash + receiver.charCodeAt(i);\n    hash = 536870911 & hash + ((524287 & hash) << 10);\n    hash ^= hash >> 6;\n  }\n  hash = 536870911 & hash + ((67108863 & hash) << 3);\n  hash ^= hash >> 11;\n  return 536870911 & hash + ((16383 & hash) << 15);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "349997389": {
+        "id": "function/349997389",
+        "kind": "function",
+        "name": "RangeError.value",
+        "size": 150,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RangeError]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[subclass=JSInt]",
+            "declaredType": "num"
+          },
+          {
+            "name": "name",
+            "type": "Value([null|exact=JSString], value: \"index\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "RangeError$value: function(value, $name, message) {\n  return new P.RangeError(null, null, true, value, $name, \"Value not in range\");\n}\n",
+        "type": "dynamic Function(num,[String,String])",
+        "measurements": null
+      },
+      "350333970": {
+        "id": "function/350333970",
+        "kind": "function",
+        "name": "handleValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "sourceResult",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_FutureListener.S"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(_FutureListener.S)",
+        "measurements": null
+      },
+      "350634082": {
+        "id": "function/350634082",
+        "kind": "function",
+        "name": "Completer.sync",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/471305727",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Completer<Completer.T>",
+        "inferredReturnType": "[exact=_SyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Completer<Completer.T> Function()",
+        "measurements": null
+      },
+      "351622741": {
+        "id": "function/351622741",
+        "kind": "function",
+        "name": "runGuarded",
+        "size": 424,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "runGuarded$1: function(f) {\n  var e, s, exception;\n  try {\n    if (C.C__RootZone === $.Zone__current) {\n      f.call$0();\n      return;\n    }\n    P._rootRun(null, null, this, f);\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    P._rootHandleUncaughtError(null, null, this, e, s);\n  }\n}\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "352514166": {
+        "id": "function/352514166",
+        "kind": "function",
+        "name": "_chainCoreFuture",
+        "size": 655,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          },
+          {
+            "name": "target",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Future__chainCoreFuture: function(source, target) {\n  var listeners;\n  for (; source.get$_state() === 2;)\n    source = source._resultOrListeners;\n  if (source._state >= 4) {\n    listeners = target._removeListeners$0();\n    target._state = source._state;\n    target._resultOrListeners = source._resultOrListeners;\n    P._Future__propagateToListeners(target, listeners);\n  } else {\n    listeners = target._resultOrListeners;\n    target._state = 2;\n    target._resultOrListeners = source;\n    source._prependListeners$1(listeners);\n  }\n}\n",
+        "type": "void Function(_Future<dynamic>,_Future<dynamic>)",
+        "measurements": null
+      },
+      "355012434": {
+        "id": "function/355012434",
+        "kind": "function",
+        "name": "safeToString",
+        "size": 292,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Error_safeToString: function(object) {\n  if (typeof object === \"number\" || typeof object === \"boolean\" || null == object)\n    return J.toString$0$(object);\n  if (typeof object === \"string\")\n    return JSON.stringify(object);\n  return P.Error__objectToString(object);\n}\n",
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "357240896": {
+        "id": "function/357240896",
+        "kind": "function",
+        "name": "inMilliseconds",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "int Function()",
+        "measurements": null
+      },
+      "357627841": {
+        "id": "function/357627841",
+        "kind": "function",
+        "name": "StreamIterator",
+        "size": 122,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/240292734",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "StreamIterator<StreamIterator.T>",
+        "inferredReturnType": "[exact=_StreamIterator]",
+        "parameters": [
+          {
+            "name": "stream",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Stream<StreamIterator.T>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "StreamIterator_StreamIterator: function(stream, $T) {\n  return new P._StreamIterator(null, stream, false, [$T]);\n}\n",
+        "type": "StreamIterator<StreamIterator.T> Function(Stream<StreamIterator.T>)",
+        "measurements": null
+      },
+      "358340511": {
+        "id": "function/358340511",
+        "kind": "function",
+        "name": "write",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "obj",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 10,
+        "code": null,
+        "type": "void Function(Object)",
+        "measurements": null
+      },
+      "364010339": {
+        "id": "function/364010339",
+        "kind": "function",
+        "name": "_rootHandleUncaughtError",
+        "size": 725,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/35711406"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootHandleUncaughtError: function($self, $parent, zone, error, stackTrace) {\n  var t1 = {};\n  t1.error = error;\n  P._schedulePriorityAsyncCallback(new P._rootHandleUncaughtError_closure(t1, stackTrace));\n}\n",
+        "type": "void Function(Zone,ZoneDelegate,Zone,dynamic,StackTrace)",
+        "measurements": null
+      },
+      "367762222": {
+        "id": "function/367762222",
+        "kind": "function",
+        "name": "_createTimer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1012203707",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Timer",
+        "inferredReturnType": "[exact=_TimerImpl]",
+        "parameters": [
+          {
+            "name": "duration",
+            "type": "[exact=Duration]",
+            "declaredType": "Duration"
+          },
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Timer Function(Duration,void Function())",
+        "measurements": null
+      },
+      "369614033": {
+        "id": "function/369614033",
+        "kind": "function",
+        "name": "toString",
+        "size": 112,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return P.IterableBase_iterableToFullString(receiver, \"[\", \"]\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "370120278": {
+        "id": "function/370120278",
+        "kind": "function",
+        "name": "hasErrorCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "370295194": {
+        "id": "function/370295194",
+        "kind": "function",
+        "name": "internalComputeHashCode",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "int Function(dynamic)",
+        "measurements": null
+      },
+      "372037963": {
+        "id": "function/372037963",
+        "kind": "function",
+        "name": "toString",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": "toString$0: function(_) {\n  var t1 = this._contents;\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "372361659": {
+        "id": "function/372361659",
+        "kind": "function",
+        "name": "call",
+        "size": 89,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/629631311",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "errorCode",
+            "type": "[null|subclass=Object]",
+            "declaredType": "int"
+          },
+          {
+            "name": "result",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$2: function(errorCode, result) {\n  this.$protected(errorCode, result);\n}\n",
+        "type": "Null Function(int,dynamic)",
+        "measurements": null
+      },
+      "373761717": {
+        "id": "function/373761717",
+        "kind": "function",
+        "name": "_zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "380325809": {
+        "id": "function/380325809",
+        "kind": "function",
+        "name": "toString",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/851867060",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return String(receiver);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "380929608": {
+        "id": "function/380929608",
+        "kind": "function",
+        "name": "_deleteTableEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "Value([exact=JSString], value: \"<non-identifier-key>\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "381680028": {
+        "id": "function/381680028",
+        "kind": "function",
+        "name": "call",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/561897310",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.$this._completer.complete$1(this.value);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "385444888": {
+        "id": "function/385444888",
+        "kind": "function",
+        "name": "wait",
+        "size": 2927,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [
+          "closure/590764751",
+          "closure/938184478"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<List<wait.T>>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "futures",
+            "type": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+            "declaredType": "Iterable<Future<wait.T>>"
+          },
+          {
+            "name": "cleanUp",
+            "type": "[null]",
+            "declaredType": "void Function(wait.T)"
+          },
+          {
+            "name": "eagerError",
+            "type": "Value([exact=JSBool], value: false)",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Future_wait: function(futures, cleanUp, eagerError) {\n  var _box_0, result, handleError, future, pos, e, st, t1, t2, _i, t3, values, exception, error;\n  _box_0 = {};\n  t1 = [P.List];\n  result = new P._Future(0, $.Zone__current, null, t1);\n  _box_0.values = null;\n  _box_0.remaining = 0;\n  _box_0.error = null;\n  _box_0.stackTrace = null;\n  handleError = new P.Future_wait_handleError(_box_0, cleanUp, false, result);\n  try {\n    for (t2 = futures.length, _i = 0, t3 = 0; _i < futures.length; futures.length === t2 || (0, H.throwConcurrentModificationError)(futures), ++_i) {\n      future = futures[_i];\n      pos = t3;\n      future.then$2$onError(new P.Future_wait_closure(_box_0, pos, result, cleanUp, false), handleError);\n      t3 = ++_box_0.remaining;\n    }\n    if (t3 === 0) {\n      t2 = new P._Future(0, $.Zone__current, null, t1);\n      t2._asyncComplete$1(C.List_empty);\n      return t2;\n    }\n    values = new Array(t3);\n    values.fixed$length = Array;\n    _box_0.values = values;\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    st = H.getTraceFromException(exception);\n    if (_box_0.remaining === 0 || false) {\n      error = e;\n      if (error == null)\n        error = new P.NullThrownError();\n      t2 = $.Zone__current;\n      if (t2 !== C.C__RootZone)\n        t2.toString;\n      t1 = new P._Future(0, t2, null, t1);\n      t1._asyncCompleteError$2(error, st);\n      return t1;\n    } else {\n      _box_0.error = e;\n      _box_0.stackTrace = st;\n    }\n  }\n  return result;\n}\n",
+        "type": "Future<List<wait.T>> Function(Iterable<Future<wait.T>>,{void Function(wait.T) cleanUp,bool eagerError})",
+        "measurements": null
+      },
+      "388977016": {
+        "id": "function/388977016",
+        "kind": "function",
+        "name": "_writeOne",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "obj",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "String Function(String,Object)",
+        "measurements": null
+      },
+      "390828239": {
+        "id": "function/390828239",
+        "kind": "function",
+        "name": "bindCallbackGuarded",
+        "size": 235,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [
+          "closure/558424951"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "bindCallbackGuarded$1: function(f) {\n  return new P._RootZone_bindCallbackGuarded_closure(this, f);\n}\n",
+        "type": "void Function() Function(void Function())",
+        "measurements": null
+      },
+      "393060060": {
+        "id": "function/393060060",
+        "kind": "function",
+        "name": "BoundClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=BoundClosure]",
+        "parameters": [
+          {
+            "name": "_self",
+            "type": "Value([null|exact=JSString], value: \"self\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_target",
+            "type": "Value([null|exact=JSString], value: \"target\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_receiver",
+            "type": "Value([null|exact=JSString], value: \"receiver\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_name",
+            "type": "Value([null|exact=JSString], value: \"name\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic,dynamic,String)",
+        "measurements": null
+      },
+      "394885266": {
+        "id": "function/394885266",
+        "kind": "function",
+        "name": "call",
+        "size": 488,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/590764751",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "wait.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(value) {\n  var t1, t2, t3;\n  t1 = this._box_0;\n  t2 = --t1.remaining;\n  t3 = t1.values;\n  if (t3 != null) {\n    t1 = this.pos;\n    if (t1 < 0 || t1 >= t3.length)\n      return H.ioore(t3, t1);\n    t3[t1] = value;\n    if (t2 === 0)\n      this.result._completeWithValue$1(t3);\n  } else if (t1.remaining === 0 && !this.eagerError)\n    this.result._completeError$2(t1.error, t1.stackTrace);\n}\n",
+        "type": "Null Function(wait.T)",
+        "measurements": null
+      },
+      "399195151": {
+        "id": "function/399195151",
+        "kind": "function",
+        "name": "print",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "Value([exact=JSString], value: \"Hello, World!\")",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(Object)",
+        "measurements": null
+      },
+      "400990606": {
+        "id": "function/400990606",
+        "kind": "function",
+        "name": "internalSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
+        "measurements": null
+      },
+      "405266426": {
+        "id": "function/405266426",
+        "kind": "function",
+        "name": "iterator",
+        "size": 114,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<JSArray.E>",
+        "inferredReturnType": "[exact=ArrayIterator]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$iterator: function(receiver) {\n  return new J.ArrayIterator(receiver, receiver.length, 0, null);\n}\n",
+        "type": "Iterator<JSArray.E> Function()",
+        "measurements": null
+      },
+      "407139250": {
+        "id": "function/407139250",
+        "kind": "function",
+        "name": "setRange",
+        "size": 1400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "start",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "end",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "iterable",
+            "type": "Union([exact=JSUInt31], [subclass=JSArray])",
+            "declaredType": "Iterable<JSArray.E>"
+          },
+          {
+            "name": "skipCount",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "setRange$4: function(receiver, start, end, iterable, skipCount) {\n  var $length, t1, otherStart, otherList, i;\n  if (!!receiver.immutable$list)\n    H.throwExpression(P.UnsupportedError$(\"setRange\"));\n  P.RangeError_checkValidRange(start, end, receiver.length, null, null, null);\n  $length = end - start;\n  if ($length === 0)\n    return;\n  t1 = J.getInterceptor(iterable);\n  if (!!t1.$isList) {\n    otherStart = skipCount;\n    otherList = iterable;\n  } else {\n    otherList = t1.skip$1(iterable, skipCount).toList$1$growable(0, false);\n    otherStart = 0;\n  }\n  if (otherStart + $length > otherList.length)\n    throw H.wrapException(P.StateError$(\"Too few elements\"));\n  if (otherStart < start)\n    for (i = $length - 1; i >= 0; --i) {\n      t1 = otherStart + i;\n      if (t1 >= otherList.length)\n        return H.ioore(otherList, t1);\n      receiver[start + i] = otherList[t1];\n    }\n  else\n    for (i = 0; i < $length; ++i) {\n      t1 = otherStart + i;\n      if (t1 >= otherList.length)\n        return H.ioore(otherList, t1);\n      receiver[start + i] = otherList[t1];\n    }\n}\nsetRange$3: function($receiver, start, end, iterable) {\n  return this.setRange$4($receiver, start, end, iterable, 0);\n}\n",
+        "type": "void Function(int,int,Iterable<JSArray.E>,[int])",
+        "measurements": null
+      },
+      "411231605": {
+        "id": "function/411231605",
+        "kind": "function",
+        "name": "_LinkedHashSetCell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSetCell]",
+        "parameters": [
+          {
+            "name": "_element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "412886703": {
+        "id": "function/412886703",
+        "kind": "function",
+        "name": "_rethrow",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "415620823": {
+        "id": "function/415620823",
+        "kind": "function",
+        "name": "_nonNullError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "Object Function(Object)",
+        "measurements": null
+      },
+      "417406426": {
+        "id": "function/417406426",
+        "kind": "function",
+        "name": "errorZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "418915149": {
+        "id": "function/418915149",
+        "kind": "function",
+        "name": "ioore",
+        "size": 171,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "ioore: function(receiver, index) {\n  if (receiver == null)\n    J.get$length$as(receiver);\n  throw H.wrapException(H.diagnoseIndexError(receiver, index));\n}\n",
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "419713835": {
+        "id": "function/419713835",
+        "kind": "function",
+        "name": "extractFunctionTypeObjectFrom",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "425007214": {
+        "id": "function/425007214",
+        "kind": "function",
+        "name": "==",
+        "size": 75,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$eq: function(receiver, other) {\n  return receiver === other;\n}\n",
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "426855684": {
+        "id": "function/426855684",
+        "kind": "function",
+        "name": "call",
+        "size": 159,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/607767883",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  var t1, f;\n  t1 = this._box_0;\n  f = t1.storedCallback;\n  t1.storedCallback = null;\n  f.call$0();\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "427434111": {
+        "id": "function/427434111",
+        "kind": "function",
+        "name": "RangeError.range",
+        "size": 187,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RangeError]",
+        "parameters": [
+          {
+            "name": "invalidValue",
+            "type": "[subclass=JSInt]",
+            "declaredType": "num"
+          },
+          {
+            "name": "minValue",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "maxValue",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "RangeError$range: function(invalidValue, minValue, maxValue, $name, message) {\n  return new P.RangeError(minValue, maxValue, true, invalidValue, $name, \"Invalid value\");\n}\n",
+        "type": "dynamic Function(num,int,int,[String,String])",
+        "measurements": null
+      },
+      "430193009": {
+        "id": "function/430193009",
+        "kind": "function",
+        "name": "UnknownJsTypeError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=UnknownJsTypeError]",
+        "parameters": [
+          {
+            "name": "_message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "430236296": {
+        "id": "function/430236296",
+        "kind": "function",
+        "name": "length",
+        "size": 177,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/70813553",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  var it, count;\n  it = this.get$iterator(this);\n  for (count = 0; it.moveNext$0();)\n    ++count;\n  return count;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "430480673": {
+        "id": "function/430480673",
+        "kind": "function",
+        "name": "iterableToShortString",
+        "size": 689,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/812154630",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=Iterable]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "leftDelimiter",
+            "type": "Value([exact=JSString], value: \"(\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "rightDelimiter",
+            "type": "Value([exact=JSString], value: \")\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "IterableBase_iterableToShortString: function(iterable, leftDelimiter, rightDelimiter) {\n  var parts, t1;\n  if (P._isToStringVisiting(iterable)) {\n    if (leftDelimiter === \"(\" && rightDelimiter === \")\")\n      return \"(...)\";\n    return leftDelimiter + \"...\" + rightDelimiter;\n  }\n  parts = [];\n  t1 = $.$get$_toStringVisiting();\n  t1.push(iterable);\n  try {\n    P._iterablePartsToStrings(iterable, parts);\n  } finally {\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = P.StringBuffer__writeAll(leftDelimiter, parts, \", \") + rightDelimiter;\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
+        "type": "String Function(Iterable<dynamic>,[String,String])",
+        "measurements": null
+      },
+      "430787578": {
+        "id": "function/430787578",
+        "kind": "function",
+        "name": "_whenCompleteAction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function() Function()",
+        "measurements": null
+      },
+      "431897853": {
+        "id": "function/431897853",
+        "kind": "function",
+        "name": "toString",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Exception: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "435575019": {
+        "id": "function/435575019",
+        "kind": "function",
+        "name": "toStringWrapper",
+        "size": 83,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toStringWrapper: function() {\n  return J.toString$0$(this.dartException);\n}\n",
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "436170439": {
+        "id": "function/436170439",
+        "kind": "function",
+        "name": "List.generate",
+        "size": 357,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/959990109",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "List<List.E>",
+        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          },
+          {
+            "name": "generator",
+            "type": "[subclass=Closure]",
+            "declaredType": "List.E Function(int)"
+          },
+          {
+            "name": "growable",
+            "type": "Value([exact=JSBool], value: true)",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "List_List$generate: function($length, generator, growable) {\n  var result, i, t1;\n  result = [];\n  C.JSArray_methods.set$length(result, $length);\n  for (i = 0; i < $length; ++i) {\n    t1 = generator.call$1(i);\n    if (i >= result.length)\n      return H.ioore(result, i);\n    result[i] = t1;\n  }\n  return result;\n}\n",
+        "type": "List<List.E> Function(int,List.E Function(int),{bool growable})",
+        "measurements": null
+      },
+      "436231120": {
+        "id": "function/436231120",
+        "kind": "function",
+        "name": "toString",
+        "size": 316,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes field)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1, trace;\n  t1 = this._trace;\n  if (t1 != null)\n    return t1;\n  t1 = this._exception;\n  trace = t1 !== null && typeof t1 === \"object\" ? t1.stack : null;\n  t1 = trace == null ? \"\" : trace;\n  this._trace = t1;\n  return t1;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "437395524": {
+        "id": "function/437395524",
+        "kind": "function",
+        "name": "JSArray.fixed",
+        "size": 264,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "JSArray_JSArray$fixed: function($length) {\n  if ($length < 0 || $length > 4294967295)\n    throw H.wrapException(P.RangeError$range($length, 0, 4294967295, \"length\", null));\n  return J.JSArray_JSArray$markFixed(new Array($length));\n}\n",
+        "type": "JSArray<JSArray.E> Function(int)",
+        "measurements": null
+      },
+      "440018750": {
+        "id": "function/440018750",
+        "kind": "function",
+        "name": "toString",
+        "size": 158,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  if (receiver === 0 && 1 / receiver < 0)\n    return \"-0.0\";\n  else\n    return \"\" + receiver;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "445547062": {
+        "id": "function/445547062",
+        "kind": "function",
+        "name": "S",
+        "size": 505,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "S: function(value) {\n  var res;\n  if (typeof value === \"string\")\n    return value;\n  if (typeof value === \"number\") {\n    if (value !== 0)\n      return \"\" + value;\n  } else if (true === value)\n    return \"true\";\n  else if (false === value)\n    return \"false\";\n  else if (value == null)\n    return \"null\";\n  res = J.toString$0$(value);\n  if (typeof res !== \"string\")\n    throw H.wrapException(H.argumentErrorValue(value));\n  return res;\n}\n",
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "448031436": {
+        "id": "function/448031436",
+        "kind": "function",
+        "name": "_newHashTable",
+        "size": 216,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_LinkedHashSet__newHashTable: function() {\n  var table = Object.create(null);\n  table[\"<non-identifier-key>\"] = table;\n  delete table[\"<non-identifier-key>\"];\n  return table;\n}\n",
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "448227795": {
+        "id": "function/448227795",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 104,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorName: function() {\n  return \"Invalid argument\" + (!this._hasValue ? \"(s)\" : \"\");\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "453686242": {
+        "id": "function/453686242",
+        "kind": "function",
+        "name": "elementAt",
+        "size": 174,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSArray.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "elementAt$1: function(receiver, index) {\n  if (index < 0 || index >= receiver.length)\n    return H.ioore(receiver, index);\n  return receiver[index];\n}\n",
+        "type": "JSArray.E Function(int)",
+        "measurements": null
+      },
+      "456567103": {
+        "id": "function/456567103",
+        "kind": "function",
+        "name": "JSArray.markFixed",
+        "size": 113,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "JSArray_JSArray$markFixed: function(allocation) {\n  return J.JSArray_markFixedList(allocation);\n}\n",
+        "type": "JSArray<JSArray.E> Function(dynamic)",
+        "measurements": null
+      },
+      "458931695": {
+        "id": "function/458931695",
+        "kind": "function",
+        "name": "tooFew",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/737466373",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StateError",
+        "inferredReturnType": "[exact=StateError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "StateError Function()",
+        "measurements": null
+      },
+      "460512542": {
+        "id": "function/460512542",
+        "kind": "function",
+        "name": "current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Zone",
+        "inferredReturnType": "[null|exact=_RootZone]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 18,
+        "code": null,
+        "type": "Zone Function()",
+        "measurements": null
+      },
+      "464959827": {
+        "id": "function/464959827",
+        "kind": "function",
+        "name": "toString",
+        "size": 550,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1, nameString, message, prefix, explanation, errorValue;\n  t1 = this.name;\n  nameString = t1 != null ? \" (\" + t1 + \")\" : \"\";\n  t1 = this.message;\n  message = t1 == null ? \"\" : \": \" + t1;\n  prefix = this.get$_errorName() + nameString + message;\n  if (!this._hasValue)\n    return prefix;\n  explanation = this.get$_errorExplanation();\n  errorValue = P.Error_safeToString(this.invalidValue);\n  return prefix + explanation + \": \" + H.S(errorValue);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "467155193": {
+        "id": "function/467155193",
+        "kind": "function",
+        "name": "isJsFunction",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "469962639": {
+        "id": "function/469962639",
+        "kind": "function",
+        "name": "call",
+        "size": 215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/913475889",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(callback) {\n  var t1, t2;\n  this._box_0.storedCallback = callback;\n  t1 = this.div;\n  t2 = this.span;\n  t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);\n}\n",
+        "type": "Null Function(void Function())",
+        "measurements": null
+      },
+      "473156332": {
+        "id": "function/473156332",
+        "kind": "function",
+        "name": "TypeErrorDecoder",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=TypeErrorDecoder]",
+        "parameters": [
+          {
+            "name": "_arguments",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_argumentsExpr",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_expr",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_method",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_receiver",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "_pattern",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(int,int,int,int,int,String)",
+        "measurements": null
+      },
+      "474133145": {
+        "id": "function/474133145",
+        "kind": "function",
+        "name": "toString",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Unsupported operation: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "476860251": {
+        "id": "function/476860251",
+        "kind": "function",
+        "name": "cspForwardCall",
+        "size": 1409,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "arity",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "isSuperCall",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "stubName",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_cspForwardCall: function(arity, isSuperCall, stubName, $function) {\n  var getSelf = H.BoundClosure_selfOf;\n  switch (isSuperCall ? -1 : arity) {\n    case 0:\n      return function(n, S) {\n        return function() {\n          return S(this)[n]();\n        };\n      }(stubName, getSelf);\n    case 1:\n      return function(n, S) {\n        return function(a) {\n          return S(this)[n](a);\n        };\n      }(stubName, getSelf);\n    case 2:\n      return function(n, S) {\n        return function(a, b) {\n          return S(this)[n](a, b);\n        };\n      }(stubName, getSelf);\n    case 3:\n      return function(n, S) {\n        return function(a, b, c) {\n          return S(this)[n](a, b, c);\n        };\n      }(stubName, getSelf);\n    case 4:\n      return function(n, S) {\n        return function(a, b, c, d) {\n          return S(this)[n](a, b, c, d);\n        };\n      }(stubName, getSelf);\n    case 5:\n      return function(n, S) {\n        return function(a, b, c, d, e) {\n          return S(this)[n](a, b, c, d, e);\n        };\n      }(stubName, getSelf);\n    default:\n      return function(f, s) {\n        return function() {\n          return f.apply(s(this), arguments);\n        };\n      }($function, getSelf);\n  }\n}\n",
+        "type": "dynamic Function(int,bool,String,dynamic)",
+        "measurements": null
+      },
+      "477609809": {
+        "id": "function/477609809",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 112,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/952584796",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_completeError$2: function(error, stackTrace) {\n  this.future._completeError$2(error, stackTrace);\n}\n",
+        "type": "void Function(Object,StackTrace)",
+        "measurements": null
+      },
+      "478486472": {
+        "id": "function/478486472",
+        "kind": "function",
+        "name": "markFixedList",
+        "size": 109,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<dynamic>",
+        "inferredReturnType": "[exact=JSFixedArray]",
+        "parameters": [
+          {
+            "name": "list",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "JSArray_markFixedList: function(list) {\n  list.fixed$length = Array;\n  return list;\n}\n",
+        "type": "List<dynamic> Function(List<dynamic>)",
+        "measurements": null
+      },
+      "481547973": {
+        "id": "function/481547973",
+        "kind": "function",
+        "name": "LinkedHashMapCell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LinkedHashMapCell]",
+        "parameters": [
+          {
+            "name": "hashMapCellKey",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "hashMapCellValue",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "482441661": {
+        "id": "function/482441661",
+        "kind": "function",
+        "name": "skip",
+        "size": 93,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterable<JSArray.E>",
+        "inferredReturnType": "[exact=SubListIterable]",
+        "parameters": [
+          {
+            "name": "n",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "skip$1: function(receiver, n) {\n  return H.SubListIterable$(receiver, n, null);\n}\n",
+        "type": "Iterable<JSArray.E> Function(int)",
+        "measurements": null
+      },
+      "483766990": {
+        "id": "function/483766990",
+        "kind": "function",
+        "name": "invoke",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "486797615": {
+        "id": "function/486797615",
+        "kind": "function",
+        "name": "_computeCspNonce",
+        "size": 173,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_computeCspNonce: function() {\n  var currentScript = init.currentScript;\n  if (currentScript == null)\n    return;\n  return String(currentScript.nonce);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "487598887": {
+        "id": "function/487598887",
+        "kind": "function",
+        "name": "runtimeTypeToString",
+        "size": 136,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "runtimeTypeToString: function(rti, onTypeVariable) {\n  var t1 = H.runtimeTypeToStringV1(rti, onTypeVariable);\n  return t1;\n}\n",
+        "type": "String Function(dynamic,{String Function(int) onTypeVariable})",
+        "measurements": null
+      },
+      "491418529": {
+        "id": "function/491418529",
+        "kind": "function",
+        "name": "iae",
+        "size": 92,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "argument",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "iae: function(argument) {\n  throw H.wrapException(H.argumentErrorValue(argument));\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "492708773": {
+        "id": "function/492708773",
+        "kind": "function",
+        "name": "_Future.immediate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "Union([exact=_Future], [null|exact=JSUnmodifiableArray])",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "494094492": {
+        "id": "function/494094492",
+        "kind": "function",
+        "name": "_endIndex",
+        "size": 125,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[null|subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_endIndex: function() {\n  var $length = J.get$length$as(this.__internal$_iterable);\n  return $length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "494583530": {
+        "id": "function/494583530",
+        "kind": "function",
+        "name": "Es6LinkedHashMap",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/692496355",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=Es6LinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "499330809": {
+        "id": "function/499330809",
+        "kind": "function",
+        "name": "_computeThisScriptFromTrace",
+        "size": 749,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_computeThisScriptFromTrace: function() {\n  var stack, matches;\n  stack = new Error().stack;\n  if (stack == null) {\n    stack = function() {\n      try {\n        throw new Error();\n      } catch (e) {\n        return e.stack;\n      }\n    }();\n    if (stack == null)\n      throw H.wrapException(P.UnsupportedError$(\"No stack trace\"));\n  }\n  matches = stack.match(new RegExp(\"^ *at [^(]*\\\\((.*):[0-9]*:[0-9]*\\\\)$\", \"m\"));\n  if (matches != null)\n    return matches[1];\n  matches = stack.match(new RegExp(\"^[^@]*@(.*):[0-9]*$\", \"m\"));\n  if (matches != null)\n    return matches[1];\n  throw H.wrapException(P.UnsupportedError$('Cannot extract URI from \"' + stack + '\"'));\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "499807915": {
+        "id": "function/499807915",
+        "kind": "function",
+        "name": "<",
+        "size": 174,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "num"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$lt: function(receiver, other) {\n  if (typeof other !== \"number\")\n    throw H.wrapException(H.argumentErrorValue(other));\n  return receiver < other;\n}\n",
+        "type": "bool Function(num)",
+        "measurements": null
+      },
+      "501712645": {
+        "id": "function/501712645",
+        "kind": "function",
+        "name": "joinArgumentsV1",
+        "size": 694,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "joinArgumentsV1: function(types, startIndex, onTypeVariable) {\n  var buffer, index, firstArgument, allDynamic, t1, argument;\n  if (types == null)\n    return \"\";\n  buffer = new P.StringBuffer(\"\");\n  for (index = startIndex, firstArgument = true, allDynamic = true, t1 = \"\"; index < types.length; ++index) {\n    if (firstArgument)\n      firstArgument = false;\n    else\n      buffer._contents = t1 + \", \";\n    argument = types[index];\n    if (argument != null)\n      allDynamic = false;\n    t1 = buffer._contents += H.runtimeTypeToStringV1(argument, onTypeVariable);\n  }\n  return allDynamic ? \"\" : \"<\" + buffer.toString$0(0) + \">\";\n}\n",
+        "type": "String Function(dynamic,int,{String Function(int) onTypeVariable})",
+        "measurements": null
+      },
+      "507333070": {
+        "id": "function/507333070",
+        "kind": "function",
+        "name": "stringConcatUnchecked",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string1",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "string2",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 14,
+        "code": null,
+        "type": "String Function(String,String)",
+        "measurements": null
+      },
+      "508874693": {
+        "id": "function/508874693",
+        "kind": "function",
+        "name": "unmangleAllIdentifiersIfPreservedAnyways",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/527944179",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "513053773": {
+        "id": "function/513053773",
+        "kind": "function",
+        "name": "Future.value",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Future<Future.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "Container([null|exact=JSUnmodifiableArray], element: [empty], length: 0)",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "Future<Future.T> Function([dynamic])",
+        "measurements": null
+      },
+      "519629171": {
+        "id": "function/519629171",
+        "kind": "function",
+        "name": "_removeListeners",
+        "size": 177,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FutureListener<dynamic,dynamic>",
+        "inferredReturnType": "[null|exact=_FutureListener]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 2,
+        "code": "_removeListeners$0: function() {\n  var current = this._resultOrListeners;\n  this._resultOrListeners = null;\n  return this._reverseListeners$1(current);\n}\n",
+        "type": "_FutureListener<dynamic,dynamic> Function()",
+        "measurements": null
+      },
+      "519947595": {
+        "id": "function/519947595",
+        "kind": "function",
+        "name": "==",
+        "size": 70,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$eq: function(receiver, other) {\n  return null == other;\n}\n",
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "521874428": {
+        "id": "function/521874428",
+        "kind": "function",
+        "name": "length",
+        "size": 71,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  return this._contents.length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "528985088": {
+        "id": "function/528985088",
+        "kind": "function",
+        "name": "getTraceFromException",
+        "size": 400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "StackTrace",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "exception",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "getTraceFromException: function(exception) {\n  var trace;\n  if (exception instanceof H.ExceptionAndStackTrace)\n    return exception.stackTrace;\n  if (exception == null)\n    return new H._StackTrace(exception, null);\n  trace = exception.$cachedTrace;\n  if (trace != null)\n    return trace;\n  return exception.$cachedTrace = new H._StackTrace(exception, null);\n}\n",
+        "type": "StackTrace Function(dynamic)",
+        "measurements": null
+      },
+      "533906117": {
+        "id": "function/533906117",
+        "kind": "function",
+        "name": "_setPendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "539017937": {
+        "id": "function/539017937",
+        "kind": "function",
+        "name": "_errorName",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"RangeError\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorName: function() {\n  return \"RangeError\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "540949546": {
+        "id": "function/540949546",
+        "kind": "function",
+        "name": "flattenString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "str",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "542135743": {
+        "id": "function/542135743",
+        "kind": "function",
+        "name": "_deleteTableEntry",
+        "size": 78,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "Value([exact=JSString], value: \"<non-identifier-key>\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_deleteTableEntry$2: function(table, key) {\n  delete table[key];\n}\n",
+        "type": "void Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "544746737": {
+        "id": "function/544746737",
+        "kind": "function",
+        "name": "throwConcurrentModificationError",
+        "size": 135,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "collection",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "throwConcurrentModificationError: function(collection) {\n  throw H.wrapException(P.ConcurrentModificationError$(collection));\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "546320785": {
+        "id": "function/546320785",
+        "kind": "function",
+        "name": "_scheduleImmediate",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "549577701": {
+        "id": "function/549577701",
+        "kind": "function",
+        "name": "_objectRawTypeName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "550544609": {
+        "id": "function/550544609",
+        "kind": "function",
+        "name": "toString",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return receiver;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "551570860": {
+        "id": "function/551570860",
+        "kind": "function",
+        "name": "invokeOn",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Object",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "Object Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "552271305": {
+        "id": "function/552271305",
+        "kind": "function",
+        "name": "_FutureListener.then",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_FutureListener]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<_FutureListener.T>"
+          },
+          {
+            "name": "onValue",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic Function(_FutureListener.S)"
+          },
+          {
+            "name": "errorCallback",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(_Future<_FutureListener.T>,dynamic Function(_FutureListener.S),Function)",
+        "measurements": null
+      },
+      "553149607": {
+        "id": "function/553149607",
+        "kind": "function",
+        "name": "_chainForeignFuture",
+        "size": 1035,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/953553118",
+          "closure/953553119",
+          "closure/953553120"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[null|exact=_Future]",
+            "declaredType": "Future<dynamic>"
+          },
+          {
+            "name": "target",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_Future__chainForeignFuture: function(source, target) {\n  var e, s, exception;\n  target._state = 1;\n  try {\n    source.then$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target));\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    P.scheduleMicrotask(new P._Future__chainForeignFuture_closure1(target, e, s));\n  }\n}\n",
+        "type": "void Function(Future<dynamic>,_Future<dynamic>)",
+        "measurements": null
+      },
+      "553278458": {
+        "id": "function/553278458",
+        "kind": "function",
+        "name": "provokeCallErrorOnUndefined",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "553851206": {
+        "id": "function/553851206",
+        "kind": "function",
+        "name": "functionTypeTest",
+        "size": 439,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "functionTypeRti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "functionTypeTest: function(value, functionTypeRti) {\n  var functionTypeObject, t1;\n  if (value == null)\n    return false;\n  if (typeof value == \"function\")\n    return true;\n  functionTypeObject = H.extractFunctionTypeObjectFromInternal(J.getInterceptor(value));\n  if (functionTypeObject == null)\n    return false;\n  t1 = H.isFunctionSubtypeV1(functionTypeObject, functionTypeRti);\n  return t1;\n}\n",
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "555987509": {
+        "id": "function/555987509",
+        "kind": "function",
+        "name": "getRuntimeTypeInfo",
+        "size": 111,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "target",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "getRuntimeTypeInfo: function(target) {\n  if (target == null)\n    return;\n  return target.$ti;\n}\n",
+        "type": "dynamic Function(Object)",
+        "measurements": null
+      },
+      "556268777": {
+        "id": "function/556268777",
+        "kind": "function",
+        "name": "_isComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 5,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "560797298": {
+        "id": "function/560797298",
+        "kind": "function",
+        "name": "checkSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "isField",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          },
+          {
+            "name": "checks",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "asField",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 5,
+        "code": null,
+        "type": "bool Function(Object,String,List<dynamic>,String)",
+        "measurements": null
+      },
+      "564404904": {
+        "id": "function/564404904",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 399,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(_) {\n  var t1, receiverHashCode;\n  t1 = this._receiver;\n  if (t1 == null)\n    receiverHashCode = H.Primitives_objectHashCode(this._self);\n  else\n    receiverHashCode = typeof t1 !== \"object\" ? J.get$hashCode$(t1) : H.Primitives_objectHashCode(t1);\n  return (receiverHashCode ^ H.Primitives_objectHashCode(this._target)) >>> 0;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "565013754": {
+        "id": "function/565013754",
+        "kind": "function",
+        "name": "toString",
+        "size": 56,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/351911148",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"null\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"null\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "569040700": {
+        "id": "function/569040700",
+        "kind": "function",
+        "name": "call",
+        "size": 45,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195572",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  return;\n}\n",
+        "type": "Null Function(Object)",
+        "measurements": null
+      },
+      "569040701": {
+        "id": "function/569040701",
+        "kind": "function",
+        "name": "call",
+        "size": 142,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195573",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(error) {\n  this.failure.call$3(H.unwrapException(error), \"js-failure-wrapper\", H.getTraceFromException(error));\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "569040702": {
+        "id": "function/569040702",
+        "kind": "function",
+        "name": "call",
+        "size": 602,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195574",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "event",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function($event) {\n  var code, error, stackTrace, t1, $status, exception;\n  t1 = this.xhr;\n  $status = t1.status;\n  if ($status !== 200)\n    this.failure.call$3(\"Request status: \" + $status, \"worker xhr\", null);\n  code = t1.responseText;\n  try {\n    new Function(code)();\n    this.success.call$0();\n  } catch (exception) {\n    error = H.unwrapException(exception);\n    stackTrace = H.getTraceFromException(exception);\n    this.failure.call$3(error, \"evaluating the code in worker xhr\", stackTrace);\n  }\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "569040703": {
+        "id": "function/569040703",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195575",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(e) {\n  this.failure.call$3(e, \"xhr error handler\", null);\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "569040704": {
+        "id": "function/569040704",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/566195576",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(e) {\n  this.failure.call$3(e, \"xhr abort handler\", null);\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "573775196": {
+        "id": "function/573775196",
+        "kind": "function",
+        "name": "JsLinkedHashMap.es6",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V>",
+        "inferredReturnType": "[subclass=JsLinkedHashMap]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V> Function()",
+        "measurements": null
+      },
+      "574550003": {
+        "id": "function/574550003",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 260,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_completeError$2: function(error, stackTrace) {\n  var listeners = this._removeListeners$0();\n  this._state = 8;\n  this._resultOrListeners = new P.AsyncError(error, stackTrace);\n  P._Future__propagateToListeners(this, listeners);\n}\n",
+        "type": "void Function(Object,[StackTrace])",
+        "measurements": null
+      },
+      "580865640": {
+        "id": "function/580865640",
+        "kind": "function",
+        "name": "iterableToFullString",
+        "size": 712,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/812154630",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "leftDelimiter",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "rightDelimiter",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "IterableBase_iterableToFullString: function(iterable, leftDelimiter, rightDelimiter) {\n  var buffer, t1, t2;\n  if (P._isToStringVisiting(iterable))\n    return leftDelimiter + \"...\" + rightDelimiter;\n  buffer = new P.StringBuffer(leftDelimiter);\n  t1 = $.$get$_toStringVisiting();\n  t1.push(iterable);\n  try {\n    t2 = buffer;\n    t2._contents = P.StringBuffer__writeAll(t2.get$_contents(), iterable, \", \");\n  } finally {\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = buffer;\n  t1._contents = t1.get$_contents() + rightDelimiter;\n  t1 = buffer.get$_contents();\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
+        "type": "String Function(Iterable<dynamic>,[String,String])",
+        "measurements": null
+      },
+      "581270226": {
+        "id": "function/581270226",
+        "kind": "function",
+        "name": "ListIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ListIterator]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[exact=SubListIterable]",
+            "declaredType": "Iterable<ListIterator.E>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(Iterable<ListIterator.E>)",
+        "measurements": null
+      },
+      "585544091": {
+        "id": "function/585544091",
+        "kind": "function",
+        "name": "_newLinkedCell",
+        "size": 620,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "LinkedHashMapCell",
+        "inferredReturnType": "[exact=LinkedHashMapCell]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "__js_helper$_newLinkedCell$2: function(key, value) {\n  var cell, last;\n  cell = new H.LinkedHashMapCell(key, value, null, null);\n  if (this.__js_helper$_first == null) {\n    this.__js_helper$_last = cell;\n    this.__js_helper$_first = cell;\n  } else {\n    last = this.__js_helper$_last;\n    cell.__js_helper$_previous = last;\n    last.__js_helper$_next = cell;\n    this.__js_helper$_last = cell;\n  }\n  ++this.__js_helper$_length;\n  this.__js_helper$_modifications = this.__js_helper$_modifications + 1 & 67108863;\n  return cell;\n}\n",
+        "type": "LinkedHashMapCell Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
+        "measurements": null
+      },
+      "586712659": {
+        "id": "function/586712659",
+        "kind": "function",
+        "name": "call",
+        "size": 929,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/830531955",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var asyncError, e, s, t1, t2, exception, t3, t4;\n  try {\n    asyncError = this._box_1.source._resultOrListeners;\n    t1 = this.listener;\n    if (t1.matchesErrorTest$1(asyncError) === true && t1.errorCallback != null) {\n      t2 = this._box_0;\n      t2.listenerValueOrError = t1.handleError$1(asyncError);\n      t2.listenerHasError = false;\n    }\n  } catch (exception) {\n    e = H.unwrapException(exception);\n    s = H.getTraceFromException(exception);\n    t1 = this._box_1;\n    t2 = t1.source._resultOrListeners.get$error();\n    t3 = e;\n    t4 = this._box_0;\n    if (t2 == null ? t3 == null : t2 === t3)\n      t4.listenerValueOrError = t1.source._resultOrListeners;\n    else\n      t4.listenerValueOrError = new P.AsyncError(e, s);\n    t4.listenerHasError = true;\n  }\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "599927967": {
+        "id": "function/599927967",
+        "kind": "function",
+        "name": "_clearPendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "601638462": {
+        "id": "function/601638462",
+        "kind": "function",
+        "name": "call",
+        "size": 557,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/21475",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "context",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$3: function(error, context, stackTrace) {\n  var t1, t2;\n  t1 = $.$get$_eventLog();\n  t2 = this.hunkName;\n  t1.push(\" - download failed: \" + t2 + \" (context: \" + context + \")\");\n  $.$get$_loadingLibraries().$indexSet(0, t2, null);\n  if (stackTrace == null)\n    stackTrace = P.StackTrace_current();\n  this.completer.completeError$2(new P.DeferredLoadException(\"Loading \" + H.S(this._box_0.uri) + \" failed: \" + H.S(error) + \"\\nevent log:\\n\" + C.JSArray_methods.join$1(t1, \"\\n\") + \"\\n\"), stackTrace);\n}\n",
+        "type": "void Function(dynamic,String,StackTrace)",
+        "measurements": null
+      },
+      "603355140": {
+        "id": "function/603355140",
+        "kind": "function",
+        "name": "call",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/817717319",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.callback.call$0();\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "606513838": {
+        "id": "function/606513838",
+        "kind": "function",
+        "name": "printToConsole",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "line",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(String)",
+        "measurements": null
+      },
+      "606572177": {
+        "id": "function/606572177",
+        "kind": "function",
+        "name": "ArgumentError.value",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": "ArgumentError$value: function(value, $name, message) {\n  return new P.ArgumentError(true, value, $name, message);\n}\n",
+        "type": "dynamic Function(dynamic,[String,dynamic])",
+        "measurements": null
+      },
+      "607704865": {
+        "id": "function/607704865",
+        "kind": "function",
+        "name": "substitute",
+        "size": 479,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "substitution",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "substitute: function(substitution, $arguments) {\n  if (substitution == null)\n    return $arguments;\n  substitution = substitution.apply(null, $arguments);\n  if (substitution == null)\n    return;\n  if (typeof substitution === \"object\" && substitution !== null && substitution.constructor === Array)\n    return substitution;\n  if (typeof substitution == \"function\")\n    return substitution.apply(null, $arguments);\n  return $arguments;\n}\n",
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "608925525": {
+        "id": "function/608925525",
+        "kind": "function",
+        "name": "_scheduleImmediateWithTimer",
+        "size": 175,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_AsyncRun__scheduleImmediateWithTimer: [function(callback) {\n  P._TimerImpl$(0, callback);\n}, \"call$1\", \"async__AsyncRun__scheduleImmediateWithTimer$closure\", 4, 0, 3]\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "611761598": {
+        "id": "function/611761598",
+        "kind": "function",
+        "name": "extractPattern",
+        "size": 1056,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=TypeErrorDecoder]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "TypeErrorDecoder_extractPattern: function(message) {\n  var match, $arguments, argumentsExpr, expr, method, receiver;\n  message = message.replace(String({}), '$receiver$').replace(/[[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\");\n  match = message.match(/\\\\\\$[a-zA-Z]+\\\\\\$/g);\n  if (match == null)\n    match = [];\n  $arguments = match.indexOf(\"\\\\$arguments\\\\$\");\n  argumentsExpr = match.indexOf(\"\\\\$argumentsExpr\\\\$\");\n  expr = match.indexOf(\"\\\\$expr\\\\$\");\n  method = match.indexOf(\"\\\\$method\\\\$\");\n  receiver = match.indexOf(\"\\\\$receiver\\\\$\");\n  return new H.TypeErrorDecoder(message.replace(new RegExp('\\\\\\\\\\\\$arguments\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$argumentsExpr\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$expr\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$method\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\\\\\\\$receiver\\\\\\\\\\\\$', 'g'), '((?:x|[^x])*)'), $arguments, argumentsExpr, expr, method, receiver);\n}\n",
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "613119304": {
+        "id": "function/613119304",
+        "kind": "function",
+        "name": "toString",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return H.S(this.error);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "613322203": {
+        "id": "function/613322203",
+        "kind": "function",
+        "name": "handleUncaughtError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "void Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "616072379": {
+        "id": "function/616072379",
+        "kind": "function",
+        "name": "_modified",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "618126497": {
+        "id": "function/618126497",
+        "kind": "function",
+        "name": "complete",
+        "size": 595,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [
+          "closure/561897310"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "complete$1: function(value) {\n  var t1;\n  if (this.isSync)\n    this._completer.complete$1(value);\n  else {\n    t1 = H.checkSubtypeV1(value, \"$isFuture\", this.$ti, \"$asFuture\");\n    if (t1) {\n      t1 = this._completer;\n      value.then$2$onError(t1.get$complete(), t1.get$completeError());\n    } else\n      P.scheduleMicrotask(new P._AsyncAwaitCompleter_complete_closure(this, value));\n  }\n}\n",
+        "type": "void Function([dynamic])",
+        "measurements": null
+      },
+      "620005669": {
+        "id": "function/620005669",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 282,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation: function() {\n  if (J.$lt$n(this.invalidValue, 0))\n    return \": index must not be negative\";\n  var t1 = this.length;\n  if (t1 === 0)\n    return \": no indices are valid\";\n  return \": index should be less than \" + t1;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "632290992": {
+        "id": "function/632290992",
+        "kind": "function",
+        "name": "StackOverflowError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/542248491",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": true,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=StackOverflowError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "633677177": {
+        "id": "function/633677177",
+        "kind": "function",
+        "name": "bindCallback",
+        "size": 278,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [
+          "closure/310226650"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bindCallback.R Function()",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "bindCallback.R Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "bindCallback$1: function(f) {\n  return new P._RootZone_bindCallback_closure(this, f);\n}\n",
+        "type": "bindCallback.R Function() Function(bindCallback.R Function())",
+        "measurements": null
+      },
+      "635153575": {
+        "id": "function/635153575",
+        "kind": "function",
+        "name": "_asyncStartSync",
+        "size": 170,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "bodyFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "void Function(int,dynamic)"
+          },
+          {
+            "name": "completer",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_AsyncAwaitCompleter<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncStartSync: function(bodyFunction, completer) {\n  bodyFunction.call$2(0, null);\n  completer.set$isSync(true);\n  return completer._completer.future;\n}\n",
+        "type": "dynamic Function(void Function(int,dynamic),_AsyncAwaitCompleter<dynamic>)",
+        "measurements": null
+      },
+      "636061569": {
+        "id": "function/636061569",
+        "kind": "function",
+        "name": "toString",
+        "size": 430,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1, t2;\n  t1 = this._method;\n  if (t1 == null)\n    return \"NoSuchMethodError: \" + H.S(this._message);\n  t2 = this._receiver;\n  if (t2 == null)\n    return \"NoSuchMethodError: method not found: '\" + t1 + \"' (\" + H.S(this._message) + \")\";\n  return \"NoSuchMethodError: method not found: '\" + t1 + \"' on '\" + t2 + \"' (\" + H.S(this._message) + \")\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "636443477": {
+        "id": "function/636443477",
+        "kind": "function",
+        "name": "_getBucket",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<LinkedHashMapCell>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "List<LinkedHashMapCell> Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "638664464": {
+        "id": "function/638664464",
+        "kind": "function",
+        "name": "stringLastIndexOfUnchecked",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "Value([exact=JSString], value: \"/\")",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "start",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "638807044": {
+        "id": "function/638807044",
+        "kind": "function",
+        "name": "_setChained",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function(_Future<dynamic>)",
+        "measurements": null
+      },
+      "639806883": {
+        "id": "function/639806883",
+        "kind": "function",
+        "name": "getArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "640815092": {
+        "id": "function/640815092",
+        "kind": "function",
+        "name": "provokePropertyErrorOnNull",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "642221110": {
+        "id": "function/642221110",
+        "kind": "function",
+        "name": "buildJavaScriptObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "642229693": {
+        "id": "function/642229693",
+        "kind": "function",
+        "name": "call",
+        "size": 143,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/581471934",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  $.$get$_eventLog().push(\" - download success: \" + this.hunkName);\n  this.completer.complete$1(null);\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "644221207": {
+        "id": "function/644221207",
+        "kind": "function",
+        "name": "scheduleMicrotask",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "649401243": {
+        "id": "function/649401243",
+        "kind": "function",
+        "name": "_newLinkedCell",
+        "size": 495,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_LinkedHashSetCell",
+        "inferredReturnType": "[exact=_LinkedHashSetCell]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_newLinkedCell$1: function(element) {\n  var cell, last;\n  cell = new P._LinkedHashSetCell(element, null, null);\n  if (this._first == null) {\n    this._last = cell;\n    this._first = cell;\n  } else {\n    last = this._last;\n    cell._previous = last;\n    last._next = cell;\n    this._last = cell;\n  }\n  ++this._collection$_length;\n  this._modifications = this._modifications + 1 & 67108863;\n  return cell;\n}\n",
+        "type": "_LinkedHashSetCell Function(_LinkedHashSet.E)",
+        "measurements": null
+      },
+      "650942169": {
+        "id": "function/650942169",
+        "kind": "function",
+        "name": "_rootRunBinary",
+        "size": 345,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_rootRunBinary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "_rootRunBinary.R Function(_rootRunBinary.T1,_rootRunBinary.T2)"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_rootRunBinary.T1"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_rootRunBinary.T2"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootRunBinary: function($self, $parent, zone, f, arg1, arg2) {\n  var old, t1;\n  t1 = $.Zone__current;\n  if (t1 === zone)\n    return f.call$2(arg1, arg2);\n  $.Zone__current = zone;\n  old = t1;\n  try {\n    t1 = f.call$2(arg1, arg2);\n    return t1;\n  } finally {\n    $.Zone__current = old;\n  }\n}\n",
+        "type": "_rootRunBinary.R Function(Zone,ZoneDelegate,Zone,_rootRunBinary.R Function(_rootRunBinary.T1,_rootRunBinary.T2),_rootRunBinary.T1,_rootRunBinary.T2)",
+        "measurements": null
+      },
+      "653699436": {
+        "id": "function/653699436",
+        "kind": "function",
+        "name": "JSArray.markGrowable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSExtendableArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(dynamic)",
+        "measurements": null
+      },
+      "658082982": {
+        "id": "function/658082982",
+        "kind": "function",
+        "name": "isFunctionSubtypeV1",
+        "size": 2387,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "isFunctionSubtypeV1: function(s, t) {\n  var sReturnType, tReturnType, sParameterTypes, tParameterTypes, sOptionalParameterTypes, tOptionalParameterTypes, sParametersLen, tParametersLen, sOptionalParametersLen, tOptionalParametersLen, pos, t1, t2, tPos, sPos;\n  if (!('func' in s))\n    return false;\n  if (\"v\" in s) {\n    if (!(\"v\" in t) && \"ret\" in t)\n      return false;\n  } else if (!(\"v\" in t)) {\n    sReturnType = s.ret;\n    tReturnType = t.ret;\n    if (!(H.isSubtypeV1(sReturnType, tReturnType) || H.isSubtypeV1(tReturnType, sReturnType)))\n      return false;\n  }\n  sParameterTypes = s.args;\n  tParameterTypes = t.args;\n  sOptionalParameterTypes = s.opt;\n  tOptionalParameterTypes = t.opt;\n  sParametersLen = sParameterTypes != null ? sParameterTypes.length : 0;\n  tParametersLen = tParameterTypes != null ? tParameterTypes.length : 0;\n  sOptionalParametersLen = sOptionalParameterTypes != null ? sOptionalParameterTypes.length : 0;\n  tOptionalParametersLen = tOptionalParameterTypes != null ? tOptionalParameterTypes.length : 0;\n  if (sParametersLen > tParametersLen)\n    return false;\n  if (sParametersLen + sOptionalParametersLen < tParametersLen + tOptionalParametersLen)\n    return false;\n  if (sParametersLen === tParametersLen) {\n    if (!H.areAssignableV1(sParameterTypes, tParameterTypes, false))\n      return false;\n    if (!H.areAssignableV1(sOptionalParameterTypes, tOptionalParameterTypes, true))\n      return false;\n  } else {\n    for (pos = 0; pos < sParametersLen; ++pos) {\n      t1 = sParameterTypes[pos];\n      t2 = tParameterTypes[pos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n    for (tPos = pos, sPos = 0; tPos < tParametersLen; ++sPos, ++tPos) {\n      t1 = sOptionalParameterTypes[sPos];\n      t2 = tParameterTypes[tPos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n    for (tPos = 0; tPos < tOptionalParametersLen; ++sPos, ++tPos) {\n      t1 = sOptionalParameterTypes[sPos];\n      t2 = tOptionalParameterTypes[tPos];\n      if (!(H.isSubtypeV1(t1, t2) || H.isSubtypeV1(t2, t1)))\n        return false;\n    }\n  }\n  return H.areAssignableMapsV1(s.named, t.named);\n}\n",
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "658921946": {
+        "id": "function/658921946",
+        "kind": "function",
+        "name": "_rootScheduleMicrotask",
+        "size": 239,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "self",
+            "type": "[null]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "parent",
+            "type": "[null]",
+            "declaredType": "ZoneDelegate"
+          },
+          {
+            "name": "zone",
+            "type": "[exact=_RootZone]",
+            "declaredType": "Zone"
+          },
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_rootScheduleMicrotask: function($self, $parent, zone, f) {\n  var t1 = C.C__RootZone !== zone;\n  if (t1)\n    f = !(!t1 || false) ? zone.bindCallbackGuarded$1(f) : zone.bindCallback$1(f);\n  P._scheduleAsyncCallback(f);\n}\n",
+        "type": "void Function(Zone,ZoneDelegate,Zone,void Function())",
+        "measurements": null
+      },
+      "663282901": {
+        "id": "function/663282901",
+        "kind": "function",
+        "name": "_wrapJsFunctionForAsync",
+        "size": 627,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [
+          "closure/629631311"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void Function(int,dynamic)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_wrapJsFunctionForAsync: function($function) {\n  var $protected = function(fn, ERROR) {\n    return function(errorCode, result) {\n      while (true)\n        try {\n          fn(errorCode, result);\n          break;\n        } catch (error) {\n          result = error;\n          errorCode = ERROR;\n        }\n    };\n  }($function, 1);\n  return $.Zone__current.registerBinaryCallback$1(new P._wrapJsFunctionForAsync_closure($protected));\n}\n",
+        "type": "void Function(int,dynamic) Function(dynamic)",
+        "measurements": null
+      },
+      "664449932": {
+        "id": "function/664449932",
+        "kind": "function",
+        "name": "_asyncComplete",
+        "size": 508,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [
+          "closure/379635163"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_asyncComplete$1: function(value) {\n  var t1 = H.checkSubtypeV1(value, \"$isFuture\", this.$ti, \"$asFuture\");\n  if (t1) {\n    this._chainFuture$1(value);\n    return;\n  }\n  this._state = 1;\n  t1 = this._zone;\n  t1.toString;\n  P._rootScheduleMicrotask(null, null, t1, new P._Future__asyncComplete_closure(this, value));\n}\n",
+        "type": "void Function(dynamic)",
+        "measurements": null
+      },
+      "665416673": {
+        "id": "function/665416673",
+        "kind": "function",
+        "name": "[]",
+        "size": 706,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap.V",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "$index: function(_, key) {\n  var strings, cell, t1, nums;\n  if (typeof key === \"string\") {\n    strings = this.__js_helper$_strings;\n    if (strings == null)\n      return;\n    cell = this._getTableCell$2(strings, key);\n    t1 = cell == null ? null : cell.get$hashMapCellValue();\n    return t1;\n  } else if (typeof key === \"number\" && (key & 0x3ffffff) === key) {\n    nums = this.__js_helper$_nums;\n    if (nums == null)\n      return;\n    cell = this._getTableCell$2(nums, key);\n    t1 = cell == null ? null : cell.get$hashMapCellValue();\n    return t1;\n  } else\n    return this.internalGet$1(key);\n}\n",
+        "type": "JsLinkedHashMap.V Function(Object)",
+        "measurements": null
+      },
+      "665676035": {
+        "id": "function/665676035",
+        "kind": "function",
+        "name": "isGenericFunctionTypeParameter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "667149426": {
+        "id": "function/667149426",
+        "kind": "function",
+        "name": "call",
+        "size": 81,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/379635163",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.$this._completeWithValue$1(this.value);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "668300184": {
+        "id": "function/668300184",
+        "kind": "function",
+        "name": "closureFromTearOff",
+        "size": 368,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "functions",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "reflectionInfo",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "isStatic",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "jsArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "closureFromTearOff: function(receiver, functions, reflectionInfo, isStatic, jsArguments, $name) {\n  var t1, t2;\n  t1 = J.JSArray_markFixedList(functions);\n  t2 = !!J.getInterceptor(reflectionInfo).$isList ? J.JSArray_markFixedList(reflectionInfo) : reflectionInfo;\n  return H.Closure_fromTearOff(receiver, t1, t2, !!isStatic, jsArguments, $name);\n}\n",
+        "type": "dynamic Function(dynamic,dynamic,dynamic,dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "669694580": {
+        "id": "function/669694580",
+        "kind": "function",
+        "name": "internalFindBucketIndex",
+        "size": 296,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "bucket",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "internalFindBucketIndex$2: function(bucket, key) {\n  var $length, i;\n  if (bucket == null)\n    return -1;\n  $length = bucket.length;\n  for (i = 0; i < $length; ++i)\n    if (J.$eq$(bucket[i].hashMapCellKey, key))\n      return i;\n  return -1;\n}\n",
+        "type": "int Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "676035370": {
+        "id": "function/676035370",
+        "kind": "function",
+        "name": "_LinkedHashSetIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSetIterator]",
+        "parameters": [
+          {
+            "name": "_set",
+            "type": "[subclass=_LinkedHashSet]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "_modifications",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,int)",
+        "measurements": null
+      },
+      "679532174": {
+        "id": "function/679532174",
+        "kind": "function",
+        "name": "argumentErrorValue",
+        "size": 104,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "ArgumentError",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "argumentErrorValue: function(object) {\n  return new P.ArgumentError(true, object, null, null);\n}\n",
+        "type": "ArgumentError Function(dynamic)",
+        "measurements": null
+      },
+      "681643547": {
+        "id": "function/681643547",
+        "kind": "function",
+        "name": "CyclicInitializationError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=CyclicInitializationError]",
+        "parameters": [
+          {
+            "name": "variableName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([String])",
+        "measurements": null
+      },
+      "684612786": {
+        "id": "function/684612786",
+        "kind": "function",
+        "name": "ReflectionInfo",
+        "size": 562,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "ReflectionInfo",
+        "inferredReturnType": "[null|exact=ReflectionInfo]",
+        "parameters": [
+          {
+            "name": "jsFunction",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "ReflectionInfo_ReflectionInfo: function(jsFunction) {\n  var data, requiredParametersInfo, optionalParametersInfo;\n  data = jsFunction.$reflectionInfo;\n  if (data == null)\n    return;\n  data = J.JSArray_markFixedList(data);\n  requiredParametersInfo = data[0];\n  optionalParametersInfo = data[1];\n  return new H.ReflectionInfo(jsFunction, data, (requiredParametersInfo & 2) === 2, requiredParametersInfo >> 2, optionalParametersInfo >> 1, (optionalParametersInfo & 1) === 1, data[2], null);\n}\n",
+        "type": "ReflectionInfo Function(dynamic)",
+        "measurements": null
+      },
+      "687991937": {
+        "id": "function/687991937",
+        "kind": "function",
+        "name": "_supportsEs6Maps",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "689069465": {
+        "id": "function/689069465",
+        "kind": "function",
+        "name": "isSubtypeV1",
+        "size": 1215,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "isSubtypeV1: function(s, t) {\n  var t1, typeOfS, t2, typeOfT, typeOfTString, substitution;\n  if (s === t)\n    return true;\n  if (s == null || t == null)\n    return true;\n  if (typeof s === \"number\")\n    return false;\n  if (typeof t === \"number\")\n    return false;\n  if (s.builtin$cls === \"Null\")\n    return true;\n  if ('func' in t)\n    return H.isFunctionSubtypeV1(s, t);\n  if ('func' in s)\n    return t.builtin$cls === \"Function\" || t.builtin$cls === \"Object\";\n  t1 = typeof s === \"object\" && s !== null && s.constructor === Array;\n  typeOfS = t1 ? s[0] : s;\n  t2 = typeof t === \"object\" && t !== null && t.constructor === Array;\n  typeOfT = t2 ? t[0] : t;\n  if (typeOfT !== typeOfS) {\n    typeOfTString = H.runtimeTypeToString(typeOfT, null);\n    if (!('$is' + typeOfTString in typeOfS.prototype))\n      return false;\n    substitution = typeOfS.prototype[\"$as\" + typeOfTString];\n  } else\n    substitution = null;\n  if (!t1 && substitution == null || !t2)\n    return true;\n  t1 = t1 ? s.slice(1) : null;\n  t2 = t.slice(1);\n  return H.areSubtypesV1(H.substitute(substitution, t1), t2);\n}\n",
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "689271731": {
+        "id": "function/689271731",
+        "kind": "function",
+        "name": "forEach",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "action",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "forEach$1: function(_, action) {\n  var cell, modifications;\n  cell = this.__js_helper$_first;\n  modifications = this.__js_helper$_modifications;\n  for (; cell != null;) {\n    action.call$2(cell.hashMapCellKey, cell.hashMapCellValue);\n    if (modifications !== this.__js_helper$_modifications)\n      throw H.wrapException(P.ConcurrentModificationError$(this));\n    cell = cell.__js_helper$_next;\n  }\n}\n",
+        "type": "void Function(void Function(JsLinkedHashMap.K,JsLinkedHashMap.V))",
+        "measurements": null
+      },
+      "692185405": {
+        "id": "function/692185405",
+        "kind": "function",
+        "name": "_onValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic Function(_FutureListener.S)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(_FutureListener.S) Function()",
+        "measurements": null
+      },
+      "693686431": {
+        "id": "function/693686431",
+        "kind": "function",
+        "name": "_AsyncAwaitCompleter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncAwaitCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "698206676": {
+        "id": "function/698206676",
+        "kind": "function",
+        "name": "buildJavaScriptObjectWithNonClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "701409225": {
+        "id": "function/701409225",
+        "kind": "function",
+        "name": "ConcurrentModificationError",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/36312556",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ConcurrentModificationError]",
+        "parameters": [
+          {
+            "name": "modifiedObject",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "ConcurrentModificationError$: function(modifiedObject) {\n  return new P.ConcurrentModificationError(modifiedObject);\n}\n",
+        "type": "dynamic Function([Object])",
+        "measurements": null
+      },
+      "702114504": {
+        "id": "function/702114504",
+        "kind": "function",
+        "name": "_addHashTableEntry",
+        "size": 299,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "__js_helper$_addHashTableEntry$3: function(table, key, value) {\n  var cell = this._getTableCell$2(table, key);\n  if (cell == null)\n    this._setTableEntry$3(table, key, this.__js_helper$_newLinkedCell$2(key, value));\n  else\n    cell.set$hashMapCellValue(value);\n}\n",
+        "type": "void Function(dynamic,JsLinkedHashMap.K,JsLinkedHashMap.V)",
+        "measurements": null
+      },
+      "705889064": {
+        "id": "function/705889064",
+        "kind": "function",
+        "name": "==",
+        "size": 322,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$eq: function(_, other) {\n  if (other == null)\n    return false;\n  if (this === other)\n    return true;\n  if (!(other instanceof H.BoundClosure))\n    return false;\n  return this._self === other._self && this._target === other._target && this._receiver === other._receiver;\n}\n",
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "708419578": {
+        "id": "function/708419578",
+        "kind": "function",
+        "name": "checkArgumentsV1",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "substitution",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "arguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "checks",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic,dynamic)",
+        "measurements": null
+      },
+      "710092165": {
+        "id": "function/710092165",
+        "kind": "function",
+        "name": "isNotIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "710611585": {
+        "id": "function/710611585",
+        "kind": "function",
+        "name": "_makeAsyncAwaitCompleter",
+        "size": 179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Completer<_makeAsyncAwaitCompleter.T>",
+        "inferredReturnType": "[exact=_AsyncAwaitCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_makeAsyncAwaitCompleter: function() {\n  return new P._AsyncAwaitCompleter(new P._SyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]), false, [null]);\n}\n",
+        "type": "Completer<_makeAsyncAwaitCompleter.T> Function()",
+        "measurements": null
+      },
+      "712365042": {
+        "id": "function/712365042",
+        "kind": "function",
+        "name": "objectHashCode",
+        "size": 227,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Primitives_objectHashCode: function(object) {\n  var hash = object.$identityHash;\n  if (hash == null) {\n    hash = Math.random() * 0x3fffffff | 0;\n    object.$identityHash = hash;\n  }\n  return hash;\n}\n",
+        "type": "int Function(dynamic)",
+        "measurements": null
+      },
+      "714600619": {
+        "id": "function/714600619",
+        "kind": "function",
+        "name": "diagnoseIndexError",
+        "size": 417,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Error",
+        "inferredReturnType": "[subclass=ArgumentError]",
+        "parameters": [
+          {
+            "name": "indexable",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "index",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "diagnoseIndexError: function(indexable, index) {\n  var $length;\n  if (typeof index !== \"number\" || Math.floor(index) !== index)\n    return new P.ArgumentError(true, index, \"index\", null);\n  $length = J.get$length$as(indexable);\n  if (index < 0 || index >= $length)\n    return P.IndexError$(index, indexable, \"index\", null, $length);\n  return P.RangeError$value(index, \"index\", null);\n}\n",
+        "type": "Error Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "717417998": {
+        "id": "function/717417998",
+        "kind": "function",
+        "name": "_Future.immediateError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic,[StackTrace])",
+        "measurements": null
+      },
+      "717561594": {
+        "id": "function/717561594",
+        "kind": "function",
+        "name": "requiresPreamble",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "717852932": {
+        "id": "function/717852932",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 62,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation: function() {\n  return \"\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "722405802": {
+        "id": "function/722405802",
+        "kind": "function",
+        "name": "_isChained",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "722993348": {
+        "id": "function/722993348",
+        "kind": "function",
+        "name": "hasField",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "724475372": {
+        "id": "function/724475372",
+        "kind": "function",
+        "name": "selfFieldName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "725505159": {
+        "id": "function/725505159",
+        "kind": "function",
+        "name": "matchTypeError",
+        "size": 714,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "matchTypeError$1: function(message) {\n  var match, result, t1;\n  match = new RegExp(this._pattern).exec(message);\n  if (match == null)\n    return;\n  result = Object.create(null);\n  t1 = this._arguments;\n  if (t1 !== -1)\n    result.arguments = match[t1 + 1];\n  t1 = this._argumentsExpr;\n  if (t1 !== -1)\n    result.argumentsExpr = match[t1 + 1];\n  t1 = this._expr;\n  if (t1 !== -1)\n    result.expr = match[t1 + 1];\n  t1 = this._method;\n  if (t1 !== -1)\n    result.method = match[t1 + 1];\n  t1 = this._receiver;\n  if (t1 !== -1)\n    result.receiver = match[t1 + 1];\n  return result;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "726344781": {
+        "id": "function/726344781",
+        "kind": "function",
+        "name": "call",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/558424951",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  return this.$this.runGuarded$1(this.f);\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "726979110": {
+        "id": "function/726979110",
+        "kind": "function",
+        "name": "+",
+        "size": 188,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$add: function(receiver, other) {\n  if (typeof other !== \"string\")\n    throw H.wrapException(P.ArgumentError$value(other, null, null));\n  return receiver + other;\n}\n",
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "730595126": {
+        "id": "function/730595126",
+        "kind": "function",
+        "name": "toString",
+        "size": 66,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/595024907",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"Throw of null.\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Throw of null.\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "731794670": {
+        "id": "function/731794670",
+        "kind": "function",
+        "name": "keys",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterable<JsLinkedHashMap.K>",
+        "inferredReturnType": "[exact=LinkedHashMapKeyIterable]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Iterable<JsLinkedHashMap.K> Function()",
+        "measurements": null
+      },
+      "734834560": {
+        "id": "function/734834560",
+        "kind": "function",
+        "name": "builtinIsSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,String)",
+        "measurements": null
+      },
+      "736875717": {
+        "id": "function/736875717",
+        "kind": "function",
+        "name": "getLength",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "array",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 8,
+        "code": null,
+        "type": "int Function(dynamic)",
+        "measurements": null
+      },
+      "737782244": {
+        "id": "function/737782244",
+        "kind": "function",
+        "name": "_functionRtiToStringV1",
+        "size": 1501,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "rti",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "onTypeVariable",
+            "type": "[null]",
+            "declaredType": "String Function(int)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_functionRtiToStringV1: function(rti, onTypeVariable) {\n  var returnTypeText, $arguments, t1, argumentsText, sep, _i, argument, optionalArguments, namedArguments, t2, t3;\n  returnTypeText = !!rti.v ? \"void\" : H.runtimeTypeToStringV1(rti.ret, onTypeVariable);\n  if (\"args\" in rti) {\n    $arguments = rti.args;\n    for (t1 = $arguments.length, argumentsText = \"\", sep = \"\", _i = 0; _i < t1; ++_i, sep = \", \") {\n      argument = $arguments[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(argument, onTypeVariable);\n    }\n  } else {\n    argumentsText = \"\";\n    sep = \"\";\n  }\n  if (\"opt\" in rti) {\n    optionalArguments = rti.opt;\n    argumentsText += sep + \"[\";\n    for (t1 = optionalArguments.length, sep = \"\", _i = 0; _i < t1; ++_i, sep = \", \") {\n      argument = optionalArguments[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(argument, onTypeVariable);\n    }\n    argumentsText += \"]\";\n  }\n  if (\"named\" in rti) {\n    namedArguments = rti.named;\n    argumentsText += sep + \"{\";\n    for (t1 = H.extractKeys(namedArguments), t2 = t1.length, sep = \"\", _i = 0; _i < t2; ++_i, sep = \", \") {\n      t3 = t1[_i];\n      argumentsText = argumentsText + sep + H.runtimeTypeToStringV1(namedArguments[t3], onTypeVariable) + (\" \" + H.S(t3));\n    }\n    argumentsText += \"}\";\n  }\n  return \"(\" + argumentsText + \") => \" + returnTypeText;\n}\n",
+        "type": "String Function(dynamic,String Function(int))",
+        "measurements": null
+      },
+      "738104072": {
+        "id": "function/738104072",
+        "kind": "function",
+        "name": "+",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JSNumber",
+        "inferredReturnType": "[subclass=JSNumber]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[subclass=JSInt]",
+            "declaredType": "num"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$add: function(receiver, other) {\n  return receiver + other;\n}\n",
+        "type": "JSNumber Function(num)",
+        "measurements": null
+      },
+      "739160294": {
+        "id": "function/739160294",
+        "kind": "function",
+        "name": "LinkedHashMapKeyIterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=LinkedHashMapKeyIterable]",
+        "parameters": [
+          {
+            "name": "_map",
+            "type": "[subclass=JsLinkedHashMap]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "741666293": {
+        "id": "function/741666293",
+        "kind": "function",
+        "name": "call",
+        "size": 654,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/965562379",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<dynamic>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "i",
+            "type": "[subclass=JSPositiveInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(i) {\n  var t1 = this.hashes;\n  if (i >= t1.length)\n    return H.ioore(t1, i);\n  if (this.isHunkLoaded(t1[i])) {\n    t1 = this.waitingForLoad;\n    if (i >= t1.length)\n      return H.ioore(t1, i);\n    t1[i] = false;\n    t1 = new P._Future(0, $.Zone__current, null, [null]);\n    t1._asyncComplete$1(null);\n    return t1;\n  }\n  t1 = this.uris;\n  if (i >= t1.length)\n    return H.ioore(t1, i);\n  return H._loadHunk(t1[i]).then$1(new H.loadDeferredLibrary_loadAndInitialize_closure(this.waitingForLoad, i, this.initializeSomeLoadedHunks));\n}\n",
+        "type": "Future<dynamic> Function(int)",
+        "measurements": null
+      },
+      "745741399": {
+        "id": "function/745741399",
+        "kind": "function",
+        "name": "toString",
+        "size": 256,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/36312556",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1 = this.modifiedObject;\n  if (t1 == null)\n    return \"Concurrent modification during iteration.\";\n  return \"Concurrent modification during iteration: \" + H.S(P.Error_safeToString(t1)) + \".\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "748173162": {
+        "id": "function/748173162",
+        "kind": "function",
+        "name": "handlesComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "749970393": {
+        "id": "function/749970393",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 85,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(_) {\n  return H.Primitives_objectHashCode(this);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "751200407": {
+        "id": "function/751200407",
+        "kind": "function",
+        "name": "joinArguments",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "types",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "startIndex",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic,int)",
+        "measurements": null
+      },
+      "752981084": {
+        "id": "function/752981084",
+        "kind": "function",
+        "name": "_shrOtherPositive",
+        "size": 276,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "num"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_shrOtherPositive$1: function(receiver, other) {\n  var t1;\n  if (receiver > 0)\n    t1 = this._shrBothPositive$1(receiver, other);\n  else {\n    t1 = other > 31 ? 31 : other;\n    t1 = receiver >> t1 >>> 0;\n  }\n  return t1;\n}\n",
+        "type": "num Function(num)",
+        "measurements": null
+      },
+      "754498726": {
+        "id": "function/754498726",
+        "kind": "function",
+        "name": "Future.error",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Future<Future.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Future<Future.T> Function(Object,[StackTrace])",
+        "measurements": null
+      },
+      "754771250": {
+        "id": "function/754771250",
+        "kind": "function",
+        "name": "DeferredLoadException",
+        "size": 98,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=DeferredLoadException]",
+        "parameters": [
+          {
+            "name": "_s",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": "DeferredLoadException$: function(_s) {\n  return new P.DeferredLoadException(_s);\n}\n",
+        "type": "dynamic Function(String)",
+        "measurements": null
+      },
+      "756575134": {
+        "id": "function/756575134",
+        "kind": "function",
+        "name": "contains",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "userAgent",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"call stack\")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(String,String)",
+        "measurements": null
+      },
+      "756812986": {
+        "id": "function/756812986",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  return this.__js_helper$_length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "762030080": {
+        "id": "function/762030080",
+        "kind": "function",
+        "name": "receiverFieldName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads static; writes static)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "764768055": {
+        "id": "function/764768055",
+        "kind": "function",
+        "name": "areAssignableMapsV1",
+        "size": 574,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "areAssignableMapsV1: function(s, t) {\n  var names, t1, i, $name, tType, sType;\n  if (t == null)\n    return true;\n  if (s == null)\n    return false;\n  names = J.JSArray_markFixedList(Object.getOwnPropertyNames(t));\n  for (t1 = names.length, i = 0; i < t1; ++i) {\n    $name = names[i];\n    if (!Object.hasOwnProperty.call(s, $name))\n      return false;\n    tType = t[$name];\n    sType = s[$name];\n    if (!(H.isSubtypeV1(tType, sType) || H.isSubtypeV1(sType, tType)))\n      return false;\n  }\n  return true;\n}\n",
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "766396929": {
+        "id": "function/766396929",
+        "kind": "function",
+        "name": "completeError",
+        "size": 471,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/770824752",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "completeError$2: [function(error, stackTrace) {\n  if (error == null)\n    error = new P.NullThrownError();\n  if (this.future._state !== 0)\n    throw H.wrapException(P.StateError$(\"Future already completed\"));\n  $.Zone__current.toString;\n  this._completeError$2(error, stackTrace);\n}, function(error) {\n  return this.completeError$2(error, null);\n}, \"completeError$1\", \"call$2\", \"call$1\", \"get$completeError\", 4, 2, 14]\n",
+        "type": "void Function(Object,[StackTrace])",
+        "measurements": null
+      },
+      "772250195": {
+        "id": "function/772250195",
+        "kind": "function",
+        "name": "checkDeferredIsLoaded",
+        "size": 178,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "loadId",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          },
+          {
+            "name": "uri",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "checkDeferredIsLoaded: function(loadId, uri) {\n  if (!$.$get$_loadedLibraries().contains$1(0, loadId))\n    throw H.wrapException(new H.DeferredNotLoadedError(uri));\n}\n",
+        "type": "void Function(String,String)",
+        "measurements": null
+      },
+      "772606842": {
+        "id": "function/772606842",
+        "kind": "function",
+        "name": "_chainSource",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_Future<dynamic>",
+        "inferredReturnType": "[null|exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "_Future<dynamic> Function()",
+        "measurements": null
+      },
+      "773230206": {
+        "id": "function/773230206",
+        "kind": "function",
+        "name": "_TimerImpl",
+        "size": 372,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [
+          "closure/637416128"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_TimerImpl]",
+        "parameters": [
+          {
+            "name": "milliseconds",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_TimerImpl$: function(milliseconds, callback) {\n  var t1 = new P._TimerImpl(true, null, 0);\n  t1._TimerImpl$2(milliseconds, callback);\n  return t1;\n}\n",
+        "type": "dynamic Function(int,void Function())",
+        "measurements": null
+      },
+      "773528822": {
+        "id": "function/773528822",
+        "kind": "function",
+        "name": "isEmpty",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "778541068": {
+        "id": "function/778541068",
+        "kind": "function",
+        "name": "_isToStringVisiting",
+        "size": 196,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "o",
+            "type": "Union([subclass=JsLinkedHashMap], [subtype=Iterable])",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_isToStringVisiting: function(o) {\n  var i, t1;\n  for (i = 0; t1 = $.$get$_toStringVisiting(), i < t1.length; ++i)\n    if (o === t1[i])\n      return true;\n  return false;\n}\n",
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "779765691": {
+        "id": "function/779765691",
+        "kind": "function",
+        "name": "_AsyncCompleter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "784650927": {
+        "id": "function/784650927",
+        "kind": "function",
+        "name": "length",
+        "size": 222,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  var $length, t1;\n  $length = J.get$length$as(this.__internal$_iterable);\n  t1 = this._start;\n  if (t1 >= $length)\n    return 0;\n  return $length - t1;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "788412943": {
+        "id": "function/788412943",
+        "kind": "function",
+        "name": "throwCyclicInit",
+        "size": 119,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[empty]",
+        "parameters": [
+          {
+            "name": "staticName",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "throwCyclicInit: function(staticName) {\n  throw H.wrapException(new P.CyclicInitializationError(staticName));\n}\n",
+        "type": "void Function(String)",
+        "measurements": null
+      },
+      "789545114": {
+        "id": "function/789545114",
+        "kind": "function",
+        "name": "_writeAll",
+        "size": 563,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "objects",
+            "type": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "StringBuffer__writeAll: function(string, objects, separator) {\n  var iterator = J.get$iterator$a(objects);\n  if (!iterator.moveNext$0())\n    return string;\n  if (separator.length === 0) {\n    do\n      string += H.S(iterator.get$current());\n    while (iterator.moveNext$0());\n  } else {\n    string += H.S(iterator.get$current());\n    for (; iterator.moveNext$0();)\n      string = string + separator + H.S(iterator.get$current());\n  }\n  return string;\n}\n",
+        "type": "String Function(String,Iterable<dynamic>,String)",
+        "measurements": null
+      },
+      "791079680": {
+        "id": "function/791079680",
+        "kind": "function",
+        "name": "selfOf",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_selfOf: function(closure) {\n  return closure._self;\n}\n",
+        "type": "dynamic Function(BoundClosure)",
+        "measurements": null
+      },
+      "793410068": {
+        "id": "function/793410068",
+        "kind": "function",
+        "name": "toString",
+        "size": 124,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  var t1 = this._message;\n  return t1.length === 0 ? \"Error\" : \"Error: \" + t1;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "795411795": {
+        "id": "function/795411795",
+        "kind": "function",
+        "name": "matchesErrorTest",
+        "size": 181,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "asyncError",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "matchesErrorTest$1: function(asyncError) {\n  if (this.state !== 6)\n    return true;\n  return this.result._zone.runUnary$2(this.callback, asyncError.error);\n}\n",
+        "type": "bool Function(AsyncError)",
+        "measurements": null
+      },
+      "796179660": {
+        "id": "function/796179660",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return H.Primitives_objectHashCode(receiver);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "797212862": {
+        "id": "function/797212862",
+        "kind": "function",
+        "name": "call",
+        "size": 117,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553118",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(value) {\n  var t1 = this.target;\n  t1._state = 0;\n  t1._complete$1(value);\n}\n",
+        "type": "Null Function(dynamic)",
+        "measurements": null
+      },
+      "797212863": {
+        "id": "function/797212863",
+        "kind": "function",
+        "name": "call",
+        "size": 176,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553119",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$2: function(error, stackTrace) {\n  this.target._completeError$2(error, stackTrace);\n}\ncall$1: function(error) {\n  return this.call$2(error, null);\n}\n",
+        "type": "Null Function(dynamic,[dynamic])",
+        "measurements": null
+      },
+      "797212864": {
+        "id": "function/797212864",
+        "kind": "function",
+        "name": "call",
+        "size": 82,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/953553120",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.target._completeError$2(this.e, this.s);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "798288240": {
+        "id": "function/798288240",
+        "kind": "function",
+        "name": "isNullType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(Object)",
+        "measurements": null
+      },
+      "806420362": {
+        "id": "function/806420362",
+        "kind": "function",
+        "name": "_Exception",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_Exception]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([dynamic])",
+        "measurements": null
+      },
+      "808159833": {
+        "id": "function/808159833",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/481500691",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": null,
+        "type": "int Function()",
+        "measurements": null
+      },
+      "811310425": {
+        "id": "function/811310425",
+        "kind": "function",
+        "name": "call",
+        "size": 447,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/35711406",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  var t1, t2, error;\n  t1 = this._box_0;\n  t2 = t1.error;\n  if (t2 == null) {\n    error = new P.NullThrownError();\n    t1.error = error;\n    t1 = error;\n  } else\n    t1 = t2;\n  t2 = this.stackTrace;\n  if (t2 == null)\n    throw H.wrapException(t1);\n  error = H.wrapException(t1);\n  error.stack = J.toString$0$(t2);\n  throw error;\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "813370328": {
+        "id": "function/813370328",
+        "kind": "function",
+        "name": "isDartObjectTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "type",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "813862273": {
+        "id": "function/813862273",
+        "kind": "function",
+        "name": "internalGet",
+        "size": 384,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "JsLinkedHashMap.V",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "internalGet$1: function(key) {\n  var rest, bucket, index;\n  rest = this.__js_helper$_rest;\n  if (rest == null)\n    return;\n  bucket = this._getTableBucket$2(rest, J.get$hashCode$(key) & 0x3ffffff);\n  index = this.internalFindBucketIndex$2(bucket, key);\n  if (index < 0)\n    return;\n  return bucket[index].hashMapCellValue;\n}\n",
+        "type": "JsLinkedHashMap.V Function(Object)",
+        "measurements": null
+      },
+      "814002251": {
+        "id": "function/814002251",
+        "kind": "function",
+        "name": "provokePropertyErrorOnUndefined",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function()",
+        "measurements": null
+      },
+      "820195095": {
+        "id": "function/820195095",
+        "kind": "function",
+        "name": "[]=",
+        "size": 1400,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.K"
+          },
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "JsLinkedHashMap.V"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "$indexSet: function(_, key, value) {\n  var strings, nums, rest, hash, bucket, index;\n  if (typeof key === \"string\") {\n    strings = this.__js_helper$_strings;\n    if (strings == null) {\n      strings = this._newHashTable$0();\n      this.__js_helper$_strings = strings;\n    }\n    this.__js_helper$_addHashTableEntry$3(strings, key, value);\n  } else if (typeof key === \"number\" && (key & 0x3ffffff) === key) {\n    nums = this.__js_helper$_nums;\n    if (nums == null) {\n      nums = this._newHashTable$0();\n      this.__js_helper$_nums = nums;\n    }\n    this.__js_helper$_addHashTableEntry$3(nums, key, value);\n  } else {\n    rest = this.__js_helper$_rest;\n    if (rest == null) {\n      rest = this._newHashTable$0();\n      this.__js_helper$_rest = rest;\n    }\n    hash = J.get$hashCode$(key) & 0x3ffffff;\n    bucket = this._getTableBucket$2(rest, hash);\n    if (bucket == null)\n      this._setTableEntry$3(rest, hash, [this.__js_helper$_newLinkedCell$2(key, value)]);\n    else {\n      index = this.internalFindBucketIndex$2(bucket, key);\n      if (index >= 0)\n        bucket[index].hashMapCellValue = value;\n      else\n        bucket.push(this.__js_helper$_newLinkedCell$2(key, value));\n    }\n  }\n}\n",
+        "type": "void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)",
+        "measurements": null
+      },
+      "821285776": {
+        "id": "function/821285776",
+        "kind": "function",
+        "name": "getInterceptor",
+        "size": 61,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "getInterceptor: function(object) {\n  return void 0;\n}\n",
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "823929753": {
+        "id": "function/823929753",
+        "kind": "function",
+        "name": "_mayComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "827571674": {
+        "id": "function/827571674",
+        "kind": "function",
+        "name": "checkInt",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "830798781": {
+        "id": "function/830798781",
+        "kind": "function",
+        "name": "_shrBothPositive",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "num",
+        "inferredReturnType": "[subclass=JSUInt32]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[exact=JSUInt31]",
+            "declaredType": "num"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_shrBothPositive$1: function(receiver, other) {\n  return other > 31 ? 0 : receiver >>> other;\n}\n",
+        "type": "num Function(num)",
+        "measurements": null
+      },
+      "831655802": {
+        "id": "function/831655802",
+        "kind": "function",
+        "name": "_microtaskLoop",
+        "size": 290,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_microtaskLoop: function() {\n  var t1, t2;\n  for (; t1 = $._nextCallback, t1 != null;) {\n    $._lastPriorityCallback = null;\n    t2 = t1.next;\n    $._nextCallback = t2;\n    if (t2 == null)\n      $._lastCallback = null;\n    t1.callback.call$0();\n  }\n}\n",
+        "type": "void Function()",
+        "measurements": null
+      },
+      "834909172": {
+        "id": "function/834909172",
+        "kind": "function",
+        "name": "current",
+        "size": 75,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_LinkedHashSetIterator.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$current: function() {\n  return this._collection$_current;\n}\n",
+        "type": "_LinkedHashSetIterator.E Function()",
+        "measurements": null
+      },
+      "835692712": {
+        "id": "function/835692712",
+        "kind": "function",
+        "name": "_scheduleAsyncCallback",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_scheduleAsyncCallback: function(callback) {\n  var newEntry = new P._AsyncCallbackEntry(callback, null);\n  if ($._nextCallback == null) {\n    $._lastCallback = newEntry;\n    $._nextCallback = newEntry;\n    if (!$._isInCallbackLoop)\n      $.$get$_AsyncRun__scheduleImmediateClosure().call$1(P.async___startMicrotaskLoop$closure());\n  } else {\n    $._lastCallback.next = newEntry;\n    $._lastCallback = newEntry;\n  }\n}\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "837956997": {
+        "id": "function/837956997",
+        "kind": "function",
+        "name": "==",
+        "size": 64,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/627219877",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "other",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "$eq: function(_, other) {\n  return this === other;\n}\n",
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "841192189": {
+        "id": "function/841192189",
+        "kind": "function",
+        "name": "RuntimeError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=RuntimeError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "843997665": {
+        "id": "function/843997665",
+        "kind": "function",
+        "name": "writeAll",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "objects",
+            "type": "Union([subclass=JSArray], [subclass=_LinkedHashSet])",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "separator",
+            "type": "Value([exact=JSString], value: \", \")",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "void Function(Iterable<dynamic>,[String])",
+        "measurements": null
+      },
+      "848267879": {
+        "id": "function/848267879",
+        "kind": "function",
+        "name": "toString",
+        "size": 81,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"RuntimeError: \" + this.message;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "852141617": {
+        "id": "function/852141617",
+        "kind": "function",
+        "name": "completeError",
+        "size": 365,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [
+          "closure/741043867"
+        ],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "e",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "st",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "completeError$2: function(e, st) {\n  if (this.isSync)\n    this._completer.completeError$2(e, st);\n  else\n    P.scheduleMicrotask(new P._AsyncAwaitCompleter_completeError_closure(this, e, st));\n}\n",
+        "type": "void Function(Object,[StackTrace])",
+        "measurements": null
+      },
+      "852972506": {
+        "id": "function/852972506",
+        "kind": "function",
+        "name": "iterator",
+        "size": 108,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/540398347",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Iterator<ListIterable.E>",
+        "inferredReturnType": "[exact=ListIterator]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$iterator: function(_) {\n  return new H.ListIterator(this, this.get$length(this), 0, null);\n}\n",
+        "type": "Iterator<ListIterable.E> Function()",
+        "measurements": null
+      },
+      "853169304": {
+        "id": "function/853169304",
+        "kind": "function",
+        "name": "call",
+        "size": 96,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/181809904",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  P._Future__propagateToListeners(this.$this, this.listener);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "853973218": {
+        "id": "function/853973218",
+        "kind": "function",
+        "name": "_reverseListeners",
+        "size": 292,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_FutureListener<dynamic,dynamic>",
+        "inferredReturnType": "[null|exact=_FutureListener]",
+        "parameters": [
+          {
+            "name": "listeners",
+            "type": "[null|exact=_FutureListener]",
+            "declaredType": "_FutureListener<dynamic,dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 0,
+        "code": "_reverseListeners$1: function(listeners) {\n  var current, prev, next;\n  for (current = listeners, prev = null; current != null; prev = current, current = next) {\n    next = current._nextListener;\n    current._nextListener = prev;\n  }\n  return prev;\n}\n",
+        "type": "_FutureListener<dynamic,dynamic> Function(_FutureListener<dynamic,dynamic>)",
+        "measurements": null
+      },
+      "854200700": {
+        "id": "function/854200700",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 80,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return receiver & 0x1FFFFFFF;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "860159722": {
+        "id": "function/860159722",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 100,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/351911148",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(_) {\n  return P.Object.prototype.get$hashCode.call(this, this);\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "864228238": {
+        "id": "function/864228238",
+        "kind": "function",
+        "name": "printString",
+        "size": 460,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/238986171",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "printString: function(string) {\n  if (typeof dartPrint == \"function\") {\n    dartPrint(string);\n    return;\n  }\n  if (typeof console == \"object\" && typeof console.log != \"undefined\") {\n    console.log(string);\n    return;\n  }\n  if (typeof window == \"object\")\n    return;\n  if (typeof print == \"function\") {\n    print(string);\n    return;\n  }\n  throw \"Unable to print message: \" + String(string);\n}\n",
+        "type": "void Function(String)",
+        "measurements": null
+      },
+      "869814859": {
+        "id": "function/869814859",
+        "kind": "function",
+        "name": "call",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/69029087",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_Future<dynamic>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  return this.originalSource;\n}\n",
+        "type": "_Future<dynamic> Function(dynamic)",
+        "measurements": null
+      },
+      "870367819": {
+        "id": "function/870367819",
+        "kind": "function",
+        "name": "_isNumericElement",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "873863767": {
+        "id": "function/873863767",
+        "kind": "function",
+        "name": "objectTypeName",
+        "size": 1680,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Primitives_objectTypeName: function(object) {\n  var interceptor, interceptorConstructor, interceptorConstructorName, $name, dispatchName, objectConstructor, match, decompiledName, t1;\n  interceptor = J.getInterceptor(object);\n  interceptorConstructor = interceptor.constructor;\n  if (typeof interceptorConstructor == \"function\") {\n    interceptorConstructorName = interceptorConstructor.name;\n    $name = typeof interceptorConstructorName === \"string\" ? interceptorConstructorName : null;\n  } else\n    $name = null;\n  if ($name == null || interceptor === C.Interceptor_methods || !!J.getInterceptor(object).$isUnknownJavaScriptObject) {\n    dispatchName = C.JS_CONST_u2C(object);\n    if (dispatchName === \"Object\") {\n      objectConstructor = object.constructor;\n      if (typeof objectConstructor == \"function\") {\n        match = String(objectConstructor).match(/^\\s*function\\s*([\\w$]*)\\s*\\(/);\n        decompiledName = match == null ? null : match[1];\n        if (typeof decompiledName === \"string\" && /^\\w+$/.test(decompiledName))\n          $name = decompiledName;\n      }\n      if ($name == null)\n        $name = dispatchName;\n    } else\n      $name = dispatchName;\n  }\n  $name = $name;\n  if ($name.length > 1 && C.JSString_methods._codeUnitAt$1($name, 0) === 36)\n    $name = C.JSString_methods.substring$1($name, 1);\n  t1 = H.joinArgumentsV1(H.getRuntimeTypeInfo(object), 0, null);\n  return function(str, names) {\n    return str.replace(/[^<,> ]+/g, function(m) {\n      return names[m] || m;\n    });\n  }($name + t1, init.mangledGlobalNames);\n}\n",
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "878987098": {
+        "id": "function/878987098",
+        "kind": "function",
+        "name": "hashCode",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[exact=JSUInt31]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$hashCode: function(receiver) {\n  return 0;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "885768717": {
+        "id": "function/885768717",
+        "kind": "function",
+        "name": "ArgumentError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArgumentError]",
+        "parameters": [
+          {
+            "name": "message",
+            "type": "[null|exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function([dynamic])",
+        "measurements": null
+      },
+      "887884267": {
+        "id": "function/887884267",
+        "kind": "function",
+        "name": "_schedulePriorityAsyncCallback",
+        "size": 656,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_schedulePriorityAsyncCallback: function(callback) {\n  var t1, entry, t2;\n  t1 = $._nextCallback;\n  if (t1 == null) {\n    P._scheduleAsyncCallback(callback);\n    $._lastPriorityCallback = $._lastCallback;\n    return;\n  }\n  entry = new P._AsyncCallbackEntry(callback, null);\n  t2 = $._lastPriorityCallback;\n  if (t2 == null) {\n    entry.next = t1;\n    $._lastPriorityCallback = entry;\n    $._nextCallback = entry;\n  } else {\n    entry.next = t2.next;\n    t2.next = entry;\n    $._lastPriorityCallback = entry;\n    if (entry.next == null)\n      $._lastCallback = entry;\n  }\n}\n",
+        "type": "void Function(void Function())",
+        "measurements": null
+      },
+      "888466063": {
+        "id": "function/888466063",
+        "kind": "function",
+        "name": "registerBinaryCallback",
+        "size": 65,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "registerBinaryCallback$1: function(f) {\n  return f;\n}\n",
+        "type": "registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2) Function(registerBinaryCallback.R Function(registerBinaryCallback.T1,registerBinaryCallback.T2))",
+        "measurements": null
+      },
+      "889342435": {
+        "id": "function/889342435",
+        "kind": "function",
+        "name": "_getTableBucket",
+        "size": 76,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<LinkedHashMapCell>",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[subclass=JSInt]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_getTableBucket$2: function(table, key) {\n  return table[key];\n}\n",
+        "type": "List<LinkedHashMapCell> Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "890739228": {
+        "id": "function/890739228",
+        "kind": "function",
+        "name": "formatType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "className",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "typeArguments",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String,List<dynamic>)",
+        "measurements": null
+      },
+      "891910474": {
+        "id": "function/891910474",
+        "kind": "function",
+        "name": "toString",
+        "size": 77,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/476286669",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "895978326": {
+        "id": "function/895978326",
+        "kind": "function",
+        "name": "_AsyncCallbackEntry",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_AsyncCallbackEntry]",
+        "parameters": [
+          {
+            "name": "callback",
+            "type": "[subclass=Closure]",
+            "declaredType": "void Function()"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "dynamic Function(void Function())",
+        "measurements": null
+      },
+      "897413385": {
+        "id": "function/897413385",
+        "kind": "function",
+        "name": "_getTableCell",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "LinkedHashMapCell",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "key",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 0,
+        "code": "_getTableCell$2: function(table, key) {\n  return table[key];\n}\n",
+        "type": "LinkedHashMapCell Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "899124813": {
+        "id": "function/899124813",
+        "kind": "function",
+        "name": "cspForwardInterceptedCall",
+        "size": 1830,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "arity",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "isSuperCall",
+            "type": "[exact=JSBool]",
+            "declaredType": "bool"
+          },
+          {
+            "name": "name",
+            "type": "[null|exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_cspForwardInterceptedCall: function(arity, isSuperCall, $name, $function) {\n  var getSelf, getReceiver;\n  getSelf = H.BoundClosure_selfOf;\n  getReceiver = H.BoundClosure_receiverOf;\n  switch (isSuperCall ? -1 : arity) {\n    case 0:\n      throw H.wrapException(new H.RuntimeError(\"Intercepted function with no arguments.\"));\n    case 1:\n      return function(n, s, r) {\n        return function() {\n          return s(this)[n](r(this));\n        };\n      }($name, getSelf, getReceiver);\n    case 2:\n      return function(n, s, r) {\n        return function(a) {\n          return s(this)[n](r(this), a);\n        };\n      }($name, getSelf, getReceiver);\n    case 3:\n      return function(n, s, r) {\n        return function(a, b) {\n          return s(this)[n](r(this), a, b);\n        };\n      }($name, getSelf, getReceiver);\n    case 4:\n      return function(n, s, r) {\n        return function(a, b, c) {\n          return s(this)[n](r(this), a, b, c);\n        };\n      }($name, getSelf, getReceiver);\n    case 5:\n      return function(n, s, r) {\n        return function(a, b, c, d) {\n          return s(this)[n](r(this), a, b, c, d);\n        };\n      }($name, getSelf, getReceiver);\n    case 6:\n      return function(n, s, r) {\n        return function(a, b, c, d, e) {\n          return s(this)[n](r(this), a, b, c, d, e);\n        };\n      }($name, getSelf, getReceiver);\n    default:\n      return function(f, s, r, a) {\n        return function() {\n          a = [r(this)];\n          Array.prototype.push.apply(a, arguments);\n          return f.apply(s(this), a);\n        };\n      }($function, getSelf, getReceiver);\n  }\n}\n",
+        "type": "dynamic Function(int,bool,String,dynamic)",
+        "measurements": null
+      },
+      "899674954": {
+        "id": "function/899674954",
+        "kind": "function",
+        "name": "call",
+        "size": 88,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/385965656",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  P._Future__chainCoreFuture(this.value, this.$this);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "901078366": {
+        "id": "function/901078366",
+        "kind": "function",
+        "name": "_setValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_Future.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(_Future.T)",
+        "measurements": null
+      },
+      "904115316": {
+        "id": "function/904115316",
+        "kind": "function",
+        "name": "registerUnaryCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "registerUnaryCallback.R Function(registerUnaryCallback.T)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "registerUnaryCallback.R Function(registerUnaryCallback.T)"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "registerUnaryCallback.R Function(registerUnaryCallback.T) Function(registerUnaryCallback.R Function(registerUnaryCallback.T))",
+        "measurements": null
+      },
+      "906797235": {
+        "id": "function/906797235",
+        "kind": "function",
+        "name": "receiverOf",
+        "size": 90,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "closure",
+            "type": "[exact=BoundClosure]",
+            "declaredType": "BoundClosure"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "BoundClosure_receiverOf: function(closure) {\n  return closure._receiver;\n}\n",
+        "type": "dynamic Function(BoundClosure)",
+        "measurements": null
+      },
+      "906921796": {
+        "id": "function/906921796",
+        "kind": "function",
+        "name": "quoteStringForRegExp",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "907920633": {
+        "id": "function/907920633",
+        "kind": "function",
+        "name": "call",
+        "size": 86,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/745039293",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "result",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(result) {\n  return this.bodyFunction.call$2(0, result);\n}\n",
+        "type": "void Function(dynamic)",
+        "measurements": null
+      },
+      "907920634": {
+        "id": "function/907920634",
+        "kind": "function",
+        "name": "call",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/745039294",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$2: function(error, stackTrace) {\n  this.bodyFunction.call$2(1, new H.ExceptionAndStackTrace(error, stackTrace));\n}\n",
+        "type": "Null Function(dynamic,StackTrace)",
+        "measurements": null
+      },
+      "919469907": {
+        "id": "function/919469907",
+        "kind": "function",
+        "name": "handlesError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "920500080": {
+        "id": "function/920500080",
+        "kind": "function",
+        "name": "_findBucketIndex",
+        "size": 291,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "bucket",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_findBucketIndex$2: function(bucket, element) {\n  var $length, i;\n  if (bucket == null)\n    return -1;\n  $length = bucket.length;\n  for (i = 0; i < $length; ++i)\n    if (J.$eq$(bucket[i]._element, element))\n      return i;\n  return -1;\n}\n",
+        "type": "int Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "921486255": {
+        "id": "function/921486255",
+        "kind": "function",
+        "name": "main",
+        "size": 973,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/934372066",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<void>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "main: function() {\n  var $async$goto = 0, $async$completer = P._makeAsyncAwaitCompleter(null);\n  var $async$main = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {\n    if ($async$errorCode === 1)\n      return P._asyncRethrow($async$result, $async$completer);\n    while (true)\n      switch ($async$goto) {\n        case 0:\n          // Function start\n          $async$goto = 2;\n          return P._asyncAwait(H.loadDeferredLibrary(\"deferred_import\"), $async$main);\n        case 2:\n          // returning from await.\n          H.checkDeferredIsLoaded(\"deferred_import\", \"file:///usr/local/google/home/lorenvs/git/dart2js_info/test/hello_world_deferred/deferred_import.dart\");\n          H.printString(C.C_Deferred);\n          // implicit return\n          return P._asyncReturn(null, $async$completer);\n      }\n  });\n  return P._asyncStartSync($async$main, $async$completer);\n}\n",
+        "type": "Future<void> Function()",
+        "measurements": null
+      },
+      "921677904": {
+        "id": "function/921677904",
+        "kind": "function",
+        "name": "_iterablePartsToStrings",
+        "size": 2548,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=Iterable]",
+            "declaredType": "Iterable<dynamic>"
+          },
+          {
+            "name": "parts",
+            "type": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_iterablePartsToStrings: function(iterable, parts) {\n  var it, $length, count, next, ultimateString, penultimateString, penultimate, ultimate, ultimate0, elision;\n  it = iterable.get$iterator(iterable);\n  $length = 0;\n  count = 0;\n  while (true) {\n    if (!($length < 80 || count < 3))\n      break;\n    if (!it.moveNext$0())\n      return;\n    next = H.S(it.get$current());\n    parts.push(next);\n    $length += next.length + 2;\n    ++count;\n  }\n  if (!it.moveNext$0()) {\n    if (count <= 5)\n      return;\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    ultimateString = parts.pop();\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    penultimateString = parts.pop();\n  } else {\n    penultimate = it.get$current();\n    ++count;\n    if (!it.moveNext$0()) {\n      if (count <= 4) {\n        parts.push(H.S(penultimate));\n        return;\n      }\n      ultimateString = H.S(penultimate);\n      if (0 >= parts.length)\n        return H.ioore(parts, -1);\n      penultimateString = parts.pop();\n      $length += ultimateString.length + 2;\n    } else {\n      ultimate = it.get$current();\n      ++count;\n      for (; it.moveNext$0(); penultimate = ultimate, ultimate = ultimate0) {\n        ultimate0 = it.get$current();\n        ++count;\n        if (count > 100) {\n          while (true) {\n            if (!($length > 75 && count > 3))\n              break;\n            if (0 >= parts.length)\n              return H.ioore(parts, -1);\n            $length -= parts.pop().length + 2;\n            --count;\n          }\n          parts.push(\"...\");\n          return;\n        }\n      }\n      penultimateString = H.S(penultimate);\n      ultimateString = H.S(ultimate);\n      $length += ultimateString.length + penultimateString.length + 4;\n    }\n  }\n  if (count > parts.length + 2) {\n    $length += 5;\n    elision = \"...\";\n  } else\n    elision = null;\n  while (true) {\n    if (!($length > 80 && parts.length > 3))\n      break;\n    if (0 >= parts.length)\n      return H.ioore(parts, -1);\n    $length -= parts.pop().length + 2;\n    if (elision == null) {\n      $length += 5;\n      elision = \"...\";\n    }\n  }\n  if (elision != null)\n    parts.push(elision);\n  parts.push(penultimateString);\n  parts.push(ultimateString);\n}\n",
+        "type": "void Function(Iterable<dynamic>,List<dynamic>)",
+        "measurements": null
+      },
+      "922840913": {
+        "id": "function/922840913",
+        "kind": "function",
+        "name": "forwardInterceptedCallTo",
+        "size": 1512,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "receiver",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "function",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "Closure_forwardInterceptedCallTo: function(receiver, $function) {\n  var t1, t2, stubName, arity, lookedUpFunction, t3, t4, $arguments;\n  t1 = $.BoundClosure_selfFieldNameCache;\n  if (t1 == null) {\n    t1 = H.BoundClosure_computeFieldNamed(\"self\");\n    $.BoundClosure_selfFieldNameCache = t1;\n  }\n  t2 = $.BoundClosure_receiverFieldNameCache;\n  if (t2 == null) {\n    t2 = H.BoundClosure_computeFieldNamed(\"receiver\");\n    $.BoundClosure_receiverFieldNameCache = t2;\n  }\n  stubName = $function.$stubName;\n  arity = $function.length;\n  lookedUpFunction = receiver[stubName];\n  t3 = $function == null ? lookedUpFunction == null : $function === lookedUpFunction;\n  t4 = !t3 || arity >= 28;\n  if (t4)\n    return H.Closure_cspForwardInterceptedCall(arity, !t3, stubName, $function);\n  if (arity === 1) {\n    t1 = \"return function(){return this.\" + H.S(t1) + \".\" + H.S(stubName) + \"(this.\" + H.S(t2) + \");\";\n    t2 = $.Closure_functionCounter;\n    $.Closure_functionCounter = J.$add$ans(t2, 1);\n    return new Function(t1 + H.S(t2) + \"}\")();\n  }\n  $arguments = \"abcdefghijklmnopqrstuvwxyz\".split(\"\").splice(0, arity - 1).join(\",\");\n  t1 = \"return function(\" + $arguments + \"){return this.\" + H.S(t1) + \".\" + H.S(stubName) + \"(this.\" + H.S(t2) + \", \" + $arguments + \");\";\n  t2 = $.Closure_functionCounter;\n  $.Closure_functionCounter = J.$add$ans(t2, 1);\n  return new Function(t1 + H.S(t2) + \"}\")();\n}\n",
+        "type": "dynamic Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "932567378": {
+        "id": "function/932567378",
+        "kind": "function",
+        "name": "provokeCallErrorOn",
+        "size": 317,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "expression",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "TypeErrorDecoder_provokeCallErrorOn: function(expression) {\n  return function($expr$) {\n    var $argumentsExpr$ = '$arguments$';\n    try {\n      $expr$.$method$($argumentsExpr$);\n    } catch (e) {\n      return e.message;\n    }\n  }(expression);\n}\n",
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "941710296": {
+        "id": "function/941710296",
+        "kind": "function",
+        "name": "_mayAddListener",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "942227822": {
+        "id": "function/942227822",
+        "kind": "function",
+        "name": "lastIndexOf",
+        "size": 359,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/793539876",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSInt]",
+        "parameters": [
+          {
+            "name": "pattern",
+            "type": "Value([exact=JSString], value: \"/\")",
+            "declaredType": "Pattern"
+          },
+          {
+            "name": "start",
+            "type": "[null]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "lastIndexOf$2: function(receiver, pattern, start) {\n  var t1;\n  start = receiver.length;\n  t1 = pattern.length;\n  if (start + t1 > start)\n    start -= t1;\n  return receiver.lastIndexOf(pattern, start);\n}\nlastIndexOf$1: function($receiver, pattern) {\n  return this.lastIndexOf$2($receiver, pattern, null);\n}\n",
+        "type": "int Function(Pattern,[int])",
+        "measurements": null
+      },
+      "944731702": {
+        "id": "function/944731702",
+        "kind": "function",
+        "name": "toString",
+        "size": 118,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/86936801",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return \"Instance of '\" + H.Primitives_objectTypeName(receiver) + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "947198569": {
+        "id": "function/947198569",
+        "kind": "function",
+        "name": "call",
+        "size": 104,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/827328529",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  P._Future__propagateToListeners(this.$this, this._box_0.listeners);\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "950708086": {
+        "id": "function/950708086",
+        "kind": "function",
+        "name": "current",
+        "size": 63,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "ArrayIterator.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 0,
+        "code": "get$current: function() {\n  return this._current;\n}\n",
+        "type": "ArrayIterator.E Function()",
+        "measurements": null
+      },
+      "950782810": {
+        "id": "function/950782810",
+        "kind": "function",
+        "name": "length",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "int Function()",
+        "measurements": null
+      },
+      "952130975": {
+        "id": "function/952130975",
+        "kind": "function",
+        "name": "checkGrowable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "reason",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "962973203": {
+        "id": "function/962973203",
+        "kind": "function",
+        "name": "toString",
+        "size": 63,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/418854932",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "Value([exact=JSString], value: \"null\")",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return \"null\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "965257927": {
+        "id": "function/965257927",
+        "kind": "function",
+        "name": "checkNotNegative",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "value",
+            "type": "[null|exact=JSUInt31]",
+            "declaredType": "int"
+          },
+          {
+            "name": "name",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "void Function(int,[String,String])",
+        "measurements": null
+      },
+      "967508646": {
+        "id": "function/967508646",
+        "kind": "function",
+        "name": "checkSubtypeV1",
+        "size": 392,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "isField",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          },
+          {
+            "name": "checks",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          },
+          {
+            "name": "asField",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "checkSubtypeV1: function(object, isField, checks, asField) {\n  var $arguments, interceptor;\n  if (object == null)\n    return false;\n  $arguments = H.getRuntimeTypeInfo(object);\n  interceptor = J.getInterceptor(object);\n  if (interceptor[isField] == null)\n    return false;\n  return H.areSubtypesV1(H.substitute(interceptor[asField], $arguments), checks);\n}\n",
+        "type": "bool Function(Object,String,List<dynamic>,String)",
+        "measurements": null
+      },
+      "968241519": {
+        "id": "function/968241519",
+        "kind": "function",
+        "name": "runUnary",
+        "size": 175,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "runUnary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "runUnary.R Function(runUnary.T)"
+          },
+          {
+            "name": "arg",
+            "type": "[null|subclass=Object]",
+            "declaredType": "runUnary.T"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "runUnary$2: function(f, arg) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$1(arg);\n  return P._rootRunUnary(null, null, this, f, arg);\n}\n",
+        "type": "runUnary.R Function(runUnary.R Function(runUnary.T),runUnary.T)",
+        "measurements": null
+      },
+      "968358412": {
+        "id": "function/968358412",
+        "kind": "function",
+        "name": "NullThrownError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/595024907",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=NullThrownError]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 6,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "969026469": {
+        "id": "function/969026469",
+        "kind": "function",
+        "name": "_LinkedHashSet",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=_LinkedHashSet]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function()",
+        "measurements": null
+      },
+      "971160936": {
+        "id": "function/971160936",
+        "kind": "function",
+        "name": "_setErrorObject",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|exact=AsyncError]",
+            "declaredType": "AsyncError"
+          }
+        ],
+        "sideEffects": "SideEffects(reads static; writes field)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "void Function(AsyncError)",
+        "measurements": null
+      },
+      "975105635": {
+        "id": "function/975105635",
+        "kind": "function",
+        "name": "_leave",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "previous",
+            "type": "[null|exact=_RootZone]",
+            "declaredType": "Zone"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes static)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(Zone)",
+        "measurements": null
+      },
+      "977867690": {
+        "id": "function/977867690",
+        "kind": "function",
+        "name": "ArrayIterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=ArrayIterator]",
+        "parameters": [
+          {
+            "name": "iterable",
+            "type": "[subclass=JSArray]",
+            "declaredType": "JSArray<ArrayIterator.E>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(JSArray<ArrayIterator.E>)",
+        "measurements": null
+      },
+      "979933658": {
+        "id": "function/979933658",
+        "kind": "function",
+        "name": "checkMutable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "reason",
+            "type": "[exact=JSString]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "dynamic Function(dynamic)",
+        "measurements": null
+      },
+      "983564685": {
+        "id": "function/983564685",
+        "kind": "function",
+        "name": "_hasError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 3,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "984452543": {
+        "id": "function/984452543",
+        "kind": "function",
+        "name": "areSubtypesV1",
+        "size": 247,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "areSubtypesV1: function(s, t) {\n  var len, i;\n  if (s == null || t == null)\n    return true;\n  len = s.length;\n  for (i = 0; i < len; ++i)\n    if (!H.isSubtypeV1(s[i], t[i]))\n      return false;\n  return true;\n}\n",
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "985926244": {
+        "id": "function/985926244",
+        "kind": "function",
+        "name": "IndexError",
+        "size": 257,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[exact=IndexError]",
+        "parameters": [
+          {
+            "name": "invalidValue",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          },
+          {
+            "name": "indexable",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "Value([exact=JSString], value: \"index\")",
+            "declaredType": "String"
+          },
+          {
+            "name": "message",
+            "type": "[null]",
+            "declaredType": "String"
+          },
+          {
+            "name": "length",
+            "type": "[null|subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "IndexError$: function(invalidValue, indexable, $name, message, $length) {\n  var t1 = $length != null ? $length : J.get$length$as(indexable);\n  return new P.IndexError(indexable, t1, true, invalidValue, $name, \"Index out of range\");\n}\n",
+        "type": "dynamic Function(int,dynamic,[String,String,int])",
+        "measurements": null
+      },
+      "987295701": {
+        "id": "function/987295701",
+        "kind": "function",
+        "name": "call",
+        "size": 60,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/231160067",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$0: function() {\n  this.callback.call$0();\n}\n",
+        "type": "Null Function()",
+        "measurements": null
+      },
+      "987508329": {
+        "id": "function/987508329",
+        "kind": "function",
+        "name": "mapToString",
+        "size": 1049,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/748502014",
+        "children": [
+          "closure/637664934"
+        ],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "m",
+            "type": "[subclass=JsLinkedHashMap]",
+            "declaredType": "Map<dynamic,dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "MapBase_mapToString: function(m) {\n  var t1, result, t2;\n  t1 = {};\n  if (P._isToStringVisiting(m))\n    return \"{...}\";\n  result = new P.StringBuffer(\"\");\n  try {\n    $.$get$_toStringVisiting().push(m);\n    t2 = result;\n    t2._contents = t2.get$_contents() + \"{\";\n    t1.first = true;\n    m.forEach$1(0, new P.MapBase_mapToString_closure(t1, result));\n    t1 = result;\n    t1._contents = t1.get$_contents() + \"}\";\n  } finally {\n    t1 = $.$get$_toStringVisiting();\n    if (0 >= t1.length)\n      return H.ioore(t1, -1);\n    t1.pop();\n  }\n  t1 = result.get$_contents();\n  return t1.charCodeAt(0) == 0 ? t1 : t1;\n}\n",
+        "type": "String Function(Map<dynamic,dynamic>)",
+        "measurements": null
+      },
+      "990521259": {
+        "id": "function/990521259",
+        "kind": "function",
+        "name": "elementAt",
+        "size": 487,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "SubListIterable.E",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "index",
+            "type": "[subclass=JSInt]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "elementAt$1: function(_, index) {\n  var realIndex, t1;\n  realIndex = this.get$_startIndex() + index;\n  if (index >= 0) {\n    t1 = this.get$_endIndex();\n    if (typeof t1 !== \"number\")\n      return H.iae(t1);\n    t1 = realIndex >= t1;\n  } else\n    t1 = true;\n  if (t1)\n    throw H.wrapException(P.IndexError$(index, this, \"index\", null, null));\n  return J.elementAt$1$a(this.__internal$_iterable, realIndex);\n}\n",
+        "type": "SubListIterable.E Function(int)",
+        "measurements": null
+      },
+      "991909617": {
+        "id": "function/991909617",
+        "kind": "function",
+        "name": "toString",
+        "size": 73,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/245082925",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(receiver) {\n  return String(receiver);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "992393187": {
+        "id": "function/992393187",
+        "kind": "function",
+        "name": "_scheduleMicrotask",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())>",
+        "inferredReturnType": "[exact=_ZoneFunction]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "_ZoneFunction<void Function(Zone,ZoneDelegate,Zone,void Function())> Function()",
+        "measurements": null
+      },
+      "992679489": {
+        "id": "function/992679489",
+        "kind": "function",
+        "name": "constructorNameFallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(dynamic)",
+        "measurements": null
+      },
+      "993180100": {
+        "id": "function/993180100",
+        "kind": "function",
+        "name": "objectToHumanReadableString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "String Function(Object)",
+        "measurements": null
+      },
+      "997099929": {
+        "id": "function/997099929",
+        "kind": "function",
+        "name": "JSArray.growable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[exact=JSExtendableArray]",
+        "parameters": [
+          {
+            "name": "length",
+            "type": "[subclass=JSUInt32]",
+            "declaredType": "int"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(int)",
+        "measurements": null
+      },
+      "998984172": {
+        "id": "function/998984172",
+        "kind": "function",
+        "name": "_isStringElement",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "bool Function(dynamic)",
+        "measurements": null
+      },
+      "1002752870": {
+        "id": "function/1002752870",
+        "kind": "function",
+        "name": "_addHashTableEntry",
+        "size": 194,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "table",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "element",
+            "type": "[null|subclass=Object]",
+            "declaredType": "_LinkedHashSet.E"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_addHashTableEntry$2: function(table, element) {\n  if (table[element] != null)\n    return false;\n  table[element] = this._newLinkedCell$1(element);\n  return true;\n}\n",
+        "type": "bool Function(dynamic,_LinkedHashSet.E)",
+        "measurements": null
+      },
+      "1008544093": {
+        "id": "function/1008544093",
+        "kind": "function",
+        "name": "length",
+        "size": 74,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/476286669",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "int",
+        "inferredReturnType": "[subclass=JSPositiveInt]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$length: function(_) {\n  return this.__js_helper$_length;\n}\n",
+        "type": "int Function()",
+        "measurements": null
+      },
+      "1012615396": {
+        "id": "function/1012615396",
+        "kind": "function",
+        "name": "isIdentical",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [
+          {
+            "name": "s",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "t",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(dynamic,dynamic)",
+        "measurements": null
+      },
+      "1014074245": {
+        "id": "function/1014074245",
+        "kind": "function",
+        "name": "future",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<_AsyncAwaitCompleter.T>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Future<_AsyncAwaitCompleter.T> Function()",
+        "measurements": null
+      },
+      "1014821943": {
+        "id": "function/1014821943",
+        "kind": "function",
+        "name": "Completer",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/471305727",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "Completer<Completer.T>",
+        "inferredReturnType": "[exact=_AsyncCompleter]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "Completer<Completer.T> Function()",
+        "measurements": null
+      },
+      "1015140651": {
+        "id": "function/1015140651",
+        "kind": "function",
+        "name": "_modified",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "void Function()",
+        "measurements": null
+      },
+      "1016194181": {
+        "id": "function/1016194181",
+        "kind": "function",
+        "name": "toList",
+        "size": 723,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "List<SubListIterable.E>",
+        "inferredReturnType": "Container(Union([exact=JSExtendableArray], [exact=JSFixedArray]), element: [null|subclass=Object], length: null)",
+        "parameters": [
+          {
+            "name": "growable",
+            "type": "Value([exact=JSBool], value: false)",
+            "declaredType": "bool"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toList$1$growable: function(_, growable) {\n  var start, t1, t2, end, $length, result, i, t3;\n  start = this._start;\n  t1 = this.__internal$_iterable;\n  t2 = J.getInterceptor$as(t1);\n  end = t2.get$length(t1);\n  $length = end - start;\n  if ($length < 0)\n    $length = 0;\n  result = new Array($length);\n  result.fixed$length = Array;\n  for (i = 0; i < $length; ++i) {\n    t3 = t2.elementAt$1(t1, start + i);\n    if (i >= $length)\n      return H.ioore(result, i);\n    result[i] = t3;\n    if (t2.get$length(t1) < end)\n      throw H.wrapException(P.ConcurrentModificationError$(this));\n  }\n  return result;\n}\n",
+        "type": "List<SubListIterable.E> Function({bool growable})",
+        "measurements": null
+      },
+      "1024143730": {
+        "id": "function/1024143730",
+        "kind": "function",
+        "name": "JSArray.typed",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/523978038",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": true,
+          "external": false
+        },
+        "returnType": "JSArray<JSArray.E>",
+        "inferredReturnType": "[subclass=JSArray]",
+        "parameters": [
+          {
+            "name": "allocation",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          }
+        ],
+        "sideEffects": "SideEffects(reads nothing; writes nothing)",
+        "inlinedCount": 2,
+        "code": null,
+        "type": "JSArray<JSArray.E> Function(dynamic)",
+        "measurements": null
+      },
+      "1024465827": {
+        "id": "function/1024465827",
+        "kind": "function",
+        "name": "_errorExplanation",
+        "size": 649,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes anything)",
+        "inlinedCount": 0,
+        "code": "get$_errorExplanation: function() {\n  var t1, explanation, t2;\n  t1 = this.start;\n  if (t1 == null) {\n    t1 = this.end;\n    explanation = t1 != null ? \": Not less than or equal to \" + H.S(t1) : \"\";\n  } else {\n    t2 = this.end;\n    if (t2 == null)\n      explanation = \": Not greater than or equal to \" + H.S(t1);\n    else if (t2 > t1)\n      explanation = \": Not in range \" + H.S(t1) + \"..\" + H.S(t2) + \", inclusive\";\n    else\n      explanation = t2 < t1 ? \": Valid value range is empty\" : \": Only valid value is \" + H.S(t1);\n  }\n  return explanation;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1027535878": {
+        "id": "function/1027535878",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 434,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "moveNext$0: function() {\n  var t1, $length, t2;\n  t1 = this._iterable;\n  $length = t1.length;\n  if (this._length !== $length)\n    throw H.wrapException(H.throwConcurrentModificationError(t1));\n  t2 = this._index;\n  if (t2 >= $length) {\n    this._current = null;\n    return false;\n  }\n  this._current = t1[t2];\n  this._index = t2 + 1;\n  return true;\n}\n",
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "1030881401": {
+        "id": "function/1030881401",
+        "kind": "function",
+        "name": "hasErrorTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field, static; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "1031131035": {
+        "id": "function/1031131035",
+        "kind": "function",
+        "name": "_cloneResult",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "source",
+            "type": "[exact=_Future]",
+            "declaredType": "_Future<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads field; writes field)",
+        "inlinedCount": 4,
+        "code": null,
+        "type": "void Function(_Future<dynamic>)",
+        "measurements": null
+      },
+      "1031826457": {
+        "id": "function/1031826457",
+        "kind": "function",
+        "name": "call",
+        "size": 135,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "closure/624687097",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Null",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "_",
+            "type": "[null|subclass=Object]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "call$1: function(_) {\n  this.initializeSomeLoadedHunks.call$0();\n  $.$get$_loadedLibraries().add$1(0, this.loadId);\n}\n",
+        "type": "Null Function(List<dynamic>)",
+        "measurements": null
+      },
+      "1033661873": {
+        "id": "function/1033661873",
+        "kind": "function",
+        "name": "toString",
+        "size": 77,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return P.MapBase_mapToString(this);\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1036675160": {
+        "id": "function/1036675160",
+        "kind": "function",
+        "name": "runBinary",
+        "size": 198,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/566341130",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "runBinary.R",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "runBinary.R Function(runBinary.T1,runBinary.T2)"
+          },
+          {
+            "name": "arg1",
+            "type": "[null|subclass=Object]",
+            "declaredType": "runBinary.T1"
+          },
+          {
+            "name": "arg2",
+            "type": "[null|subclass=Object]",
+            "declaredType": "runBinary.T2"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "runBinary$3: function(f, arg1, arg2) {\n  if ($.Zone__current === C.C__RootZone)\n    return f.call$2(arg1, arg2);\n  return P._rootRunBinary(null, null, this, f, arg1, arg2);\n}\n",
+        "type": "runBinary.R Function(runBinary.R Function(runBinary.T1,runBinary.T2),runBinary.T1,runBinary.T2)",
+        "measurements": null
+      },
+      "1042482096": {
+        "id": "function/1042482096",
+        "kind": "function",
+        "name": "_stringToSafeString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/893386369",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "string",
+            "type": "[exact=JSString]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(String)",
+        "measurements": null
+      },
+      "1047605700": {
+        "id": "function/1047605700",
+        "kind": "function",
+        "name": "moveNext",
+        "size": 512,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool",
+        "inferredReturnType": "[exact=JSBool]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "moveNext$0: function() {\n  var t1, $length, t2;\n  t1 = this.__internal$_iterable;\n  $length = t1.get$length(t1);\n  if (this.__internal$_length !== $length)\n    throw H.wrapException(P.ConcurrentModificationError$(t1));\n  t2 = this.__internal$_index;\n  if (t2 >= $length) {\n    this.__internal$_current = null;\n    return false;\n  }\n  this.__internal$_current = t1.elementAt$1(0, t2);\n  ++this.__internal$_index;\n  return true;\n}\n",
+        "type": "bool Function()",
+        "measurements": null
+      },
+      "1049802380": {
+        "id": "function/1049802380",
+        "kind": "function",
+        "name": "getField",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "dynamic",
+        "inferredReturnType": "[null|subclass=Object]",
+        "parameters": [
+          {
+            "name": "object",
+            "type": "[null|subclass=Object]",
+            "declaredType": "dynamic"
+          },
+          {
+            "name": "name",
+            "type": "[null|subclass=Object]",
+            "declaredType": "String"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes nothing)",
+        "inlinedCount": 11,
+        "code": null,
+        "type": "dynamic Function(dynamic,String)",
+        "measurements": null
+      },
+      "1051093947": {
+        "id": "function/1051093947",
+        "kind": "function",
+        "name": "toString",
+        "size": 110,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "toString$0: function(_) {\n  return \"Closure '\" + H.Primitives_objectTypeName(this).trim() + \"'\";\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1055095230": {
+        "id": "function/1055095230",
+        "kind": "function",
+        "name": "_errorTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "bool Function(Object)",
+        "inferredReturnType": "[subclass=Closure]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads field; writes nothing)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "bool Function(Object) Function()",
+        "measurements": null
+      },
+      "1058735230": {
+        "id": "function/1058735230",
+        "kind": "function",
+        "name": "then",
+        "size": 409,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "Future<then.R>",
+        "inferredReturnType": "[exact=_Future]",
+        "parameters": [
+          {
+            "name": "f",
+            "type": "[subclass=Closure]",
+            "declaredType": "dynamic Function(_Future.T)"
+          },
+          {
+            "name": "onError",
+            "type": "[null|subclass=Closure]",
+            "declaredType": "Function"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "then$2$onError: function(f, onError) {\n  var currentZone = $.Zone__current;\n  if (currentZone !== C.C__RootZone) {\n    currentZone.toString;\n    if (onError != null)\n      onError = P._registerErrorHandler(onError, currentZone);\n  }\n  return this._thenNoZoneRegistration$2(f, onError);\n}\nthen$1: function(f) {\n  return this.then$2$onError(f, null);\n}\n",
+        "type": "Future<then.R> Function(dynamic Function(_Future.T),{Function onError})",
+        "measurements": null
+      },
+      "1060110710": {
+        "id": "function/1060110710",
+        "kind": "function",
+        "name": "listToString",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/607623563",
+        "children": [],
+        "modifiers": {
+          "static": true,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[exact=JSString]",
+        "parameters": [
+          {
+            "name": "list",
+            "type": "[subclass=JSArray]",
+            "declaredType": "List<dynamic>"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 1,
+        "code": null,
+        "type": "String Function(List<dynamic>)",
+        "measurements": null
+      },
+      "1060205580": {
+        "id": "function/1060205580",
+        "kind": "function",
+        "name": "_computeThisScript",
+        "size": 278,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "String",
+        "inferredReturnType": "[null|exact=JSString]",
+        "parameters": [],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_computeThisScript: function() {\n  var currentScript = init.currentScript;\n  if (currentScript != null)\n    return String(currentScript.src);\n  if ((!self.window && !!self.postMessage) === true)\n    return H._computeThisScriptFromTrace();\n  return;\n}\n",
+        "type": "String Function()",
+        "measurements": null
+      },
+      "1065856678": {
+        "id": "function/1065856678",
+        "kind": "function",
+        "name": "_completeError",
+        "size": 117,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/714718140",
+        "children": [],
+        "modifiers": {
+          "static": false,
+          "const": false,
+          "factory": false,
+          "external": false
+        },
+        "returnType": "void",
+        "inferredReturnType": "[null]",
+        "parameters": [
+          {
+            "name": "error",
+            "type": "[null|subclass=Object]",
+            "declaredType": "Object"
+          },
+          {
+            "name": "stackTrace",
+            "type": "[null|subclass=Object]",
+            "declaredType": "StackTrace"
+          }
+        ],
+        "sideEffects": "SideEffects(reads anything; writes anything)",
+        "inlinedCount": 0,
+        "code": "_completeError$2: function(error, stackTrace) {\n  this.future._asyncCompleteError$2(error, stackTrace);\n}\n",
+        "type": "void Function(Object,StackTrace)",
+        "measurements": null
+      }
+    },
+    "typedef": {},
+    "field": {
+      "607252": {
+        "id": "field/607252",
+        "kind": "field",
+        "name": "callback",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": "callback\n",
+        "type": "void Function()"
+      },
+      "4524053": {
+        "id": "field/4524053",
+        "kind": "field",
+        "name": "_hasValue",
+        "size": 30,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "_hasValue\n_hasValue\n_hasValue\n",
+        "type": "bool"
+      },
+      "8965675": {
+        "id": "field/8965675",
+        "kind": "field",
+        "name": "thisScript",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "9743357": {
+        "id": "field/9743357",
+        "kind": "field",
+        "name": "_handle",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [],
+        "inferredType": "[null|subclass=JSInt]",
+        "code": "_handle\n",
+        "type": "int"
+      },
+      "16888485": {
+        "id": "field/16888485",
+        "kind": "field",
+        "name": "_index",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/958488954",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "17152193": {
+        "id": "field/17152193",
+        "kind": "field",
+        "name": "getType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "23408725": {
+        "id": "field/23408725",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "24026359": {
+        "id": "field/24026359",
+        "kind": "field",
+        "name": "error",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "error<\n",
+        "type": "Object"
+      },
+      "29748263": {
+        "id": "field/29748263",
+        "kind": "field",
+        "name": "_lastPriorityCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "42778158": {
+        "id": "field/42778158",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1059755229",
+        "children": [],
+        "inferredType": "[null|exact=_RootZone]",
+        "code": null,
+        "type": "Zone"
+      },
+      "43092689": {
+        "id": "field/43092689",
+        "kind": "field",
+        "name": "IS_HUNK_LOADED",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"isHunkLoaded\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "51249772": {
+        "id": "field/51249772",
+        "kind": "field",
+        "name": "_isPaused",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "_isPaused\n",
+        "type": "bool"
+      },
+      "51929026": {
+        "id": "field/51929026",
+        "kind": "field",
+        "name": "_iterator",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/680257415",
+        "children": [],
+        "inferredType": "[subtype=Iterator]",
+        "code": null,
+        "type": "Iterator<SkipIterator.E>"
+      },
+      "52345936": {
+        "id": "field/52345936",
+        "kind": "field",
+        "name": "_endOrLength",
+        "size": 13,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "_endOrLength\n",
+        "type": "int"
+      },
+      "55197673": {
+        "id": "field/55197673",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_method\n",
+        "type": "int"
+      },
+      "55541185": {
+        "id": "field/55541185",
+        "kind": "field",
+        "name": "MANGLED_GLOBAL_NAMES",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"mangledGlobalNames\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "60719081": {
+        "id": "field/60719081",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "LinkedHashMapKeyIterator.E"
+      },
+      "60920969": {
+        "id": "field/60920969",
+        "kind": "field",
+        "name": "_first",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_first\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "65712884": {
+        "id": "field/65712884",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_modifications\n",
+        "type": "int"
+      },
+      "70141207": {
+        "id": "field/70141207",
+        "kind": "field",
+        "name": "_typeName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/269073412",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "79374407": {
+        "id": "field/79374407",
+        "kind": "field",
+        "name": "maskWhencomplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "79943715": {
+        "id": "field/79943715",
+        "kind": "field",
+        "name": "nullPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "83424460": {
+        "id": "field/83424460",
+        "kind": "field",
+        "name": "helloWorld",
+        "size": 0,
+        "outputUnit": "outputUnit/7045321",
+        "parent": "library/239009133",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"Hello, World!\")",
+        "code": null,
+        "type": "dynamic",
+        "const": true
+      },
+      "110087164": {
+        "id": "field/110087164",
+        "kind": "field",
+        "name": "IS_HUNK_INITIALIZED",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"isHunkInitialized\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "111931226": {
+        "id": "field/111931226",
+        "kind": "field",
+        "name": "start",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null|subclass=JSUInt32]",
+        "code": "start\n",
+        "type": "num"
+      },
+      "112618843": {
+        "id": "field/112618843",
+        "kind": "field",
+        "name": "_length",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSUInt32]",
+        "code": "_length\n",
+        "type": "int"
+      },
+      "116849538": {
+        "id": "field/116849538",
+        "kind": "field",
+        "name": "areOptionalParametersNamed",
+        "size": 27,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "areOptionalParametersNamed\n",
+        "type": "bool"
+      },
+      "118657756": {
+        "id": "field/118657756",
+        "kind": "field",
+        "name": "DOLLAR_CHAR_VALUE",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/354160010",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "123513767": {
+        "id": "field/123513767",
+        "kind": "field",
+        "name": "_expr",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_expr\n",
+        "type": "int"
+      },
+      "125761045": {
+        "id": "field/125761045",
+        "kind": "field",
+        "name": "DEFERRED_PART_URIS",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"deferredPartUris\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "125830184": {
+        "id": "field/125830184",
+        "kind": "field",
+        "name": "_self",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_self\n",
+        "type": "dynamic"
+      },
+      "126292751": {
+        "id": "field/126292751",
+        "kind": "field",
+        "name": "_cspNonce",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "127038922": {
+        "id": "field/127038922",
+        "kind": "field",
+        "name": "_trace",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_trace\n",
+        "type": "String"
+      },
+      "130159427": {
+        "id": "field/130159427",
+        "kind": "field",
+        "name": "OPTIONAL_PARAMETERS_INFO",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "130629664": {
+        "id": "field/130629664",
+        "kind": "field",
+        "name": "_map",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[subclass=JsLinkedHashMap]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "140571055": {
+        "id": "field/140571055",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/991730135",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "message\n",
+        "type": "String"
+      },
+      "146902950": {
+        "id": "field/146902950",
+        "kind": "field",
+        "name": "noSuchMethodPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "153611669": {
+        "id": "field/153611669",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "153843292": {
+        "id": "field/153843292",
+        "kind": "field",
+        "name": "_index",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "__internal$_index\n",
+        "type": "int"
+      },
+      "154746101": {
+        "id": "field/154746101",
+        "kind": "field",
+        "name": "_current",
+        "size": 20,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__internal$_current\n",
+        "type": "ListIterator.E"
+      },
+      "159930244": {
+        "id": "field/159930244",
+        "kind": "field",
+        "name": "CALL_CATCH_ALL",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "162036481": {
+        "id": "field/162036481",
+        "kind": "field",
+        "name": "ERROR",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/237882207",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "169031325": {
+        "id": "field/169031325",
+        "kind": "field",
+        "name": "undefinedCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "172148876": {
+        "id": "field/172148876",
+        "kind": "field",
+        "name": "_stateData",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_stateData\n",
+        "type": "Object"
+      },
+      "180845508": {
+        "id": "field/180845508",
+        "kind": "field",
+        "name": "_target",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_target\n",
+        "type": "dynamic"
+      },
+      "185234473": {
+        "id": "field/185234473",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/644348892",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "186466978": {
+        "id": "field/186466978",
+        "kind": "field",
+        "name": "microsecondsPerSecond",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "187449514": {
+        "id": "field/187449514",
+        "kind": "field",
+        "name": "state",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "state\n",
+        "type": "int"
+      },
+      "189240247": {
+        "id": "field/189240247",
+        "kind": "field",
+        "name": "undefinedPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "190358771": {
+        "id": "field/190358771",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/948502579",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "message\n",
+        "type": "String"
+      },
+      "190934046": {
+        "id": "field/190934046",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "192950192": {
+        "id": "field/192950192",
+        "kind": "field",
+        "name": "hashMapCellValue",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "hashMapCellValue@\n",
+        "type": "dynamic"
+      },
+      "202409972": {
+        "id": "field/202409972",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETER_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "202484522": {
+        "id": "field/202484522",
+        "kind": "field",
+        "name": "_rest",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_rest\n",
+        "type": "dynamic"
+      },
+      "206386055": {
+        "id": "field/206386055",
+        "kind": "field",
+        "name": "jsFunction",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "jsFunction\n",
+        "type": "dynamic"
+      },
+      "214758996": {
+        "id": "field/214758996",
+        "kind": "field",
+        "name": "DEFERRED_LIBRARY_PARTS",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"deferredLibraryParts\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "221593932": {
+        "id": "field/221593932",
+        "kind": "field",
+        "name": "isFunctionType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "221913650": {
+        "id": "field/221913650",
+        "kind": "field",
+        "name": "next",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/733467750",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": "next\n",
+        "type": "_AsyncCallbackEntry"
+      },
+      "229586442": {
+        "id": "field/229586442",
+        "kind": "field",
+        "name": "_rest",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_rest\n",
+        "type": "dynamic"
+      },
+      "231027572": {
+        "id": "field/231027572",
+        "kind": "field",
+        "name": "pattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "232791153": {
+        "id": "field/232791153",
+        "kind": "field",
+        "name": "_strings",
+        "size": 21,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_strings\n",
+        "type": "dynamic"
+      },
+      "237146195": {
+        "id": "field/237146195",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSArray]",
+        "code": "_iterable\n",
+        "type": "JSArray<ArrayIterator.E>"
+      },
+      "240049228": {
+        "id": "field/240049228",
+        "kind": "field",
+        "name": "_stateIncomplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "241563122": {
+        "id": "field/241563122",
+        "kind": "field",
+        "name": "SUCCESS",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/237882207",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "244162491": {
+        "id": "field/244162491",
+        "kind": "field",
+        "name": "_loadedLibraries",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null|subclass=_LinkedHashSet]",
+        "code": null,
+        "type": "Set<String>"
+      },
+      "249142929": {
+        "id": "field/249142929",
+        "kind": "field",
+        "name": "code",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/949988971",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n}\")",
+        "code": "code\n",
+        "type": "String"
+      },
+      "259683855": {
+        "id": "field/259683855",
+        "kind": "field",
+        "name": "functionType",
+        "size": 13,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "functionType\n",
+        "type": "dynamic"
+      },
+      "261042870": {
+        "id": "field/261042870",
+        "kind": "field",
+        "name": "_hasErrorStackProperty",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/631335891",
+        "children": [],
+        "inferredType": "[null|exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "269363605": {
+        "id": "field/269363605",
+        "kind": "field",
+        "name": "_first",
+        "size": 19,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_first\n",
+        "type": "LinkedHashMapCell"
+      },
+      "275000790": {
+        "id": "field/275000790",
+        "kind": "field",
+        "name": "_pattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/958488954",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "285504086": {
+        "id": "field/285504086",
+        "kind": "field",
+        "name": "_stateError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "295541341": {
+        "id": "field/295541341",
+        "kind": "field",
+        "name": "_previous",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_previous\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "299693352": {
+        "id": "field/299693352",
+        "kind": "field",
+        "name": "microsecondsPerDay",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "302220255": {
+        "id": "field/302220255",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_receiver\n",
+        "type": "dynamic"
+      },
+      "303835005": {
+        "id": "field/303835005",
+        "kind": "field",
+        "name": "zone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/934351233",
+        "children": [],
+        "inferredType": "[exact=_RootZone]",
+        "code": null,
+        "type": "_Zone"
+      },
+      "304825305": {
+        "id": "field/304825305",
+        "kind": "field",
+        "name": "result",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=_Future]",
+        "code": "result\n",
+        "type": "_Future<_FutureListener.T>"
+      },
+      "305114389": {
+        "id": "field/305114389",
+        "kind": "field",
+        "name": "_subscription",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1040168844",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "_subscription\n",
+        "type": "StreamSubscription<dynamic>"
+      },
+      "319720392": {
+        "id": "field/319720392",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/324980341",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "334228980": {
+        "id": "field/334228980",
+        "kind": "field",
+        "name": "_completer",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "inferredType": "[exact=_SyncCompleter]",
+        "code": "_completer\n",
+        "type": "Completer<_AsyncAwaitCompleter.T>"
+      },
+      "337959975": {
+        "id": "field/337959975",
+        "kind": "field",
+        "name": "undefinedLiteralPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "338588500": {
+        "id": "field/338588500",
+        "kind": "field",
+        "name": "requiredParameterCount",
+        "size": 23,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "requiredParameterCount\n",
+        "type": "int"
+      },
+      "343514633": {
+        "id": "field/343514633",
+        "kind": "field",
+        "name": "callback",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": "callback\n",
+        "type": "Function"
+      },
+      "345425066": {
+        "id": "field/345425066",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_receiver\n",
+        "type": "String"
+      },
+      "346735010": {
+        "id": "field/346735010",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/27679401",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "347443343": {
+        "id": "field/347443343",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_method\n",
+        "type": "String"
+      },
+      "347672432": {
+        "id": "field/347672432",
+        "kind": "field",
+        "name": "_nums",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_nums\n",
+        "type": "dynamic"
+      },
+      "359397062": {
+        "id": "field/359397062",
+        "kind": "field",
+        "name": "_pattern",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_pattern\n",
+        "type": "String"
+      },
+      "366629653": {
+        "id": "field/366629653",
+        "kind": "field",
+        "name": "nullLiteralPropertyPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "368460625": {
+        "id": "field/368460625",
+        "kind": "field",
+        "name": "isSync",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/850763763",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "isSync?\n",
+        "type": "bool"
+      },
+      "368849633": {
+        "id": "field/368849633",
+        "kind": "field",
+        "name": "nullLiteralCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "370348518": {
+        "id": "field/370348518",
+        "kind": "field",
+        "name": "_stateChained",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "370436126": {
+        "id": "field/370436126",
+        "kind": "field",
+        "name": "_rootZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[exact=_RootZone]",
+        "code": null,
+        "type": "_RootZone",
+        "const": true,
+        "initializer": "constant/924662595"
+      },
+      "373519716": {
+        "id": "field/373519716",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 21,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "inferredType": "Union([exact=SubListIterable], [subclass=JSArray])",
+        "code": "__internal$_iterable\n",
+        "type": "Iterable<SubListIterable.E>"
+      },
+      "376257386": {
+        "id": "field/376257386",
+        "kind": "field",
+        "name": "modifiedObject",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/36312556",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "modifiedObject\n",
+        "type": "Object"
+      },
+      "378321689": {
+        "id": "field/378321689",
+        "kind": "field",
+        "name": "maskError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "381082880": {
+        "id": "field/381082880",
+        "kind": "field",
+        "name": "nullCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "386221903": {
+        "id": "field/386221903",
+        "kind": "field",
+        "name": "functionCounter",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/317291728",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int"
+      },
+      "391942199": {
+        "id": "field/391942199",
+        "kind": "field",
+        "name": "OPERATOR_AS_PREFIX",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "398469089": {
+        "id": "field/398469089",
+        "kind": "field",
+        "name": "_equality",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "type": "bool Function(_LinkedCustomHashSet.E,_LinkedCustomHashSet.E)"
+      },
+      "402795939": {
+        "id": "field/402795939",
+        "kind": "field",
+        "name": "start",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "404664193": {
+        "id": "field/404664193",
+        "kind": "field",
+        "name": "input",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/216047131",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "406601007": {
+        "id": "field/406601007",
+        "kind": "field",
+        "name": "_ListConstructorSentinel",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/325218131",
+        "children": [],
+        "inferredType": "[exact=_Growable]",
+        "code": null,
+        "type": "_Growable",
+        "const": true
+      },
+      "410301694": {
+        "id": "field/410301694",
+        "kind": "field",
+        "name": "_length",
+        "size": 20,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "_collection$_length\n",
+        "type": "int"
+      },
+      "412345286": {
+        "id": "field/412345286",
+        "kind": "field",
+        "name": "_unmangledName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/269073412",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "413692838": {
+        "id": "field/413692838",
+        "kind": "field",
+        "name": "rawRuntimeType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "414662379": {
+        "id": "field/414662379",
+        "kind": "field",
+        "name": "_method",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/790616034",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_method\n",
+        "type": "String"
+      },
+      "417944821": {
+        "id": "field/417944821",
+        "kind": "field",
+        "name": "_inTypeAssertion",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "420557924": {
+        "id": "field/420557924",
+        "kind": "field",
+        "name": "isAccessor",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": "isAccessor\n",
+        "type": "bool"
+      },
+      "421412262": {
+        "id": "field/421412262",
+        "kind": "field",
+        "name": "stateThenOnerror",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "422530140": {
+        "id": "field/422530140",
+        "kind": "field",
+        "name": "TYPEDEF_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "431266734": {
+        "id": "field/431266734",
+        "kind": "field",
+        "name": "_previous",
+        "size": 22,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_previous\n",
+        "type": "LinkedHashMapCell"
+      },
+      "434352794": {
+        "id": "field/434352794",
+        "kind": "field",
+        "name": "isFutureOrType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "435101137": {
+        "id": "field/435101137",
+        "kind": "field",
+        "name": "selfFieldNameCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "435679137": {
+        "id": "field/435679137",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_modifications\n",
+        "type": "int"
+      },
+      "443749531": {
+        "id": "field/443749531",
+        "kind": "field",
+        "name": "_s",
+        "size": 3,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/410333734",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_s\n",
+        "type": "String"
+      },
+      "446360348": {
+        "id": "field/446360348",
+        "kind": "field",
+        "name": "REQUIRED_PARAMETERS_INFO",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "447707988": {
+        "id": "field/447707988",
+        "kind": "field",
+        "name": "RTI_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "449691021": {
+        "id": "field/449691021",
+        "kind": "field",
+        "name": "maskValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "459351028": {
+        "id": "field/459351028",
+        "kind": "field",
+        "name": "_last",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_last\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "460958077": {
+        "id": "field/460958077",
+        "kind": "field",
+        "name": "_exception",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/518228506",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_exception\n",
+        "type": "dynamic"
+      },
+      "478876039": {
+        "id": "field/478876039",
+        "kind": "field",
+        "name": "hoursPerDay",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "483247773": {
+        "id": "field/483247773",
+        "kind": "field",
+        "name": "rawRtiToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "485816538": {
+        "id": "field/485816538",
+        "kind": "field",
+        "name": "_zone",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[null|exact=_RootZone]",
+        "code": "_zone\n",
+        "type": "Zone"
+      },
+      "496083304": {
+        "id": "field/496083304",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_GENERIC_BOUNDS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "496557243": {
+        "id": "field/496557243",
+        "kind": "field",
+        "name": "_eventLog",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "Container([exact=JSExtendableArray], element: [exact=JSString], length: null)",
+        "code": null,
+        "type": "List<String>"
+      },
+      "499560688": {
+        "id": "field/499560688",
+        "kind": "field",
+        "name": "_map",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/373504153",
+        "children": [],
+        "inferredType": "[subclass=JsLinkedHashMap]",
+        "code": null,
+        "type": "dynamic"
+      },
+      "504170901": {
+        "id": "field/504170901",
+        "kind": "field",
+        "name": "_current",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_current\n",
+        "type": "ArrayIterator.E"
+      },
+      "505549528": {
+        "id": "field/505549528",
+        "kind": "field",
+        "name": "indexable",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "indexable\n",
+        "type": "dynamic"
+      },
+      "509005655": {
+        "id": "field/509005655",
+        "kind": "field",
+        "name": "name",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "name\nname\nname\n",
+        "type": "String"
+      },
+      "509651846": {
+        "id": "field/509651846",
+        "kind": "field",
+        "name": "hashMapCellKey",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "hashMapCellKey\n",
+        "type": "dynamic"
+      },
+      "516194057": {
+        "id": "field/516194057",
+        "kind": "field",
+        "name": "maskTestError",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "522978319": {
+        "id": "field/522978319",
+        "kind": "field",
+        "name": "_toStringVisiting",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/754126564",
+        "children": [],
+        "inferredType": "Container([exact=JSExtendableArray], element: Union([subclass=JsLinkedHashMap], [subtype=Iterable]), length: null)",
+        "code": null,
+        "type": "List<dynamic>"
+      },
+      "525450391": {
+        "id": "field/525450391",
+        "kind": "field",
+        "name": "_length",
+        "size": 19,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "__internal$_length\n",
+        "type": "int"
+      },
+      "526089142": {
+        "id": "field/526089142",
+        "kind": "field",
+        "name": "_constructorNameFallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JS_CONST]",
+        "code": null,
+        "type": "JS_CONST",
+        "const": true,
+        "initializer": "constant/586866313"
+      },
+      "563519506": {
+        "id": "field/563519506",
+        "kind": "field",
+        "name": "isJsInteropTypeArgument",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "577142640": {
+        "id": "field/577142640",
+        "kind": "field",
+        "name": "_index",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1019758482",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "_index\n",
+        "type": "int"
+      },
+      "586155906": {
+        "id": "field/586155906",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "603434183": {
+        "id": "field/603434183",
+        "kind": "field",
+        "name": "cachedSortedIndices",
+        "size": 20,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[null]",
+        "code": "cachedSortedIndices\n",
+        "type": "List<dynamic>"
+      },
+      "618333384": {
+        "id": "field/618333384",
+        "kind": "field",
+        "name": "dartObjectConstructor",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "626399440": {
+        "id": "field/626399440",
+        "kind": "field",
+        "name": "FUNCTION_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "626762025": {
+        "id": "field/626762025",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 21,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/365655194",
+        "children": [],
+        "inferredType": "[exact=SubListIterable]",
+        "code": "__internal$_iterable\n",
+        "type": "Iterable<ListIterator.E>"
+      },
+      "627383241": {
+        "id": "field/627383241",
+        "kind": "field",
+        "name": "_message",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/17649844",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "_message\n",
+        "type": "String"
+      },
+      "635439616": {
+        "id": "field/635439616",
+        "kind": "field",
+        "name": "_cell",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_cell\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "635780781": {
+        "id": "field/635780781",
+        "kind": "field",
+        "name": "_cell",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": null,
+        "type": "LinkedHashMapCell"
+      },
+      "637404994": {
+        "id": "field/637404994",
+        "kind": "field",
+        "name": "INITIALIZE_LOADED_HUNK",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"initializeLoadedHunk\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "639289778": {
+        "id": "field/639289778",
+        "kind": "field",
+        "name": "_nextCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "645317327": {
+        "id": "field/645317327",
+        "kind": "field",
+        "name": "notClosurePattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "645423404": {
+        "id": "field/645423404",
+        "kind": "field",
+        "name": "CALL_NAME_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "646361925": {
+        "id": "field/646361925",
+        "kind": "field",
+        "name": "_current",
+        "size": 21,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_collection$_current\n",
+        "type": "_LinkedHashSetIterator.E"
+      },
+      "646744185": {
+        "id": "field/646744185",
+        "kind": "field",
+        "name": "undefinedLiteralCallPattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[exact=TypeErrorDecoder]",
+        "code": null,
+        "type": "TypeErrorDecoder"
+      },
+      "648221667": {
+        "id": "field/648221667",
+        "kind": "field",
+        "name": "_iterable",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/171867442",
+        "children": [],
+        "inferredType": "[subtype=Iterable]",
+        "code": null,
+        "type": "Iterable<SkipIterable.E>"
+      },
+      "649547880": {
+        "id": "field/649547880",
+        "kind": "field",
+        "name": "end",
+        "size": 4,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/974704527",
+        "children": [],
+        "inferredType": "[null|subclass=JSInt]",
+        "code": "end\n",
+        "type": "num"
+      },
+      "650081226": {
+        "id": "field/650081226",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/217690375",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"Unsupported number of arguments for wrapped closure\")",
+        "code": "message\n",
+        "type": "dynamic"
+      },
+      "650800220": {
+        "id": "field/650800220",
+        "kind": "field",
+        "name": "_nums",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "__js_helper$_nums\n",
+        "type": "dynamic"
+      },
+      "653339731": {
+        "id": "field/653339731",
+        "kind": "field",
+        "name": "message",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/866150578",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"Intercepted function with no arguments.\")",
+        "code": "message\n",
+        "type": "dynamic"
+      },
+      "656800516": {
+        "id": "field/656800516",
+        "kind": "field",
+        "name": "data",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSFixedArray]",
+        "code": "data\n",
+        "type": "List<dynamic>"
+      },
+      "657138181": {
+        "id": "field/657138181",
+        "kind": "field",
+        "name": "function",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/934351233",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "type": "_ZoneFunction.T"
+      },
+      "661173290": {
+        "id": "field/661173290",
+        "kind": "field",
+        "name": "_current",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/958488954",
+        "children": [],
+        "inferredType": "[null|exact=StringMatch]",
+        "code": null,
+        "type": "Match"
+      },
+      "667376711": {
+        "id": "field/667376711",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_RETURN_TYPE_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "670005717": {
+        "id": "field/670005717",
+        "kind": "field",
+        "name": "_USE_ES6_MAPS",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool",
+        "const": true
+      },
+      "676869951": {
+        "id": "field/676869951",
+        "kind": "field",
+        "name": "_strings",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/123522748",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_strings\n",
+        "type": "dynamic"
+      },
+      "680112395": {
+        "id": "field/680112395",
+        "kind": "field",
+        "name": "isDynamicType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "698350444": {
+        "id": "field/698350444",
+        "kind": "field",
+        "name": "CURRENT_SCRIPT",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"currentScript\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "701363438": {
+        "id": "field/701363438",
+        "kind": "field",
+        "name": "isVoidType",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "701716969": {
+        "id": "field/701716969",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_VOID_RETURN_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "701889804": {
+        "id": "field/701889804",
+        "kind": "field",
+        "name": "stackTrace",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "stackTrace\n",
+        "type": "StackTrace"
+      },
+      "708528118": {
+        "id": "field/708528118",
+        "kind": "field",
+        "name": "stateWhencomplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "709451133": {
+        "id": "field/709451133",
+        "kind": "field",
+        "name": "receiverFieldNameCache",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "String"
+      },
+      "710218156": {
+        "id": "field/710218156",
+        "kind": "field",
+        "name": "_tick",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_tick\n",
+        "type": "int"
+      },
+      "714493219": {
+        "id": "field/714493219",
+        "kind": "field",
+        "name": "errorCallback",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": "errorCallback\n",
+        "type": "Function"
+      },
+      "717638099": {
+        "id": "field/717638099",
+        "kind": "field",
+        "name": "_MAX_INT32",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "727752212": {
+        "id": "field/727752212",
+        "kind": "field",
+        "name": "invalidValue",
+        "size": 39,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "invalidValue\ninvalidValue\ninvalidValue\n",
+        "type": "dynamic"
+      },
+      "728368328": {
+        "id": "field/728368328",
+        "kind": "field",
+        "name": "zero",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=Duration]",
+        "code": null,
+        "type": "Duration",
+        "const": true
+      },
+      "742643375": {
+        "id": "field/742643375",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 27,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "__js_helper$_modifications\n",
+        "type": "int"
+      },
+      "743971885": {
+        "id": "field/743971885",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_NAMED_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "759319863": {
+        "id": "field/759319863",
+        "kind": "field",
+        "name": "message",
+        "size": 24,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/143626168",
+        "children": [],
+        "inferredType": "[null|exact=JSString]",
+        "code": "message\nmessage\nmessage\n",
+        "type": "dynamic"
+      },
+      "771598536": {
+        "id": "field/771598536",
+        "kind": "field",
+        "name": "_pattern",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/954836234",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "786919906": {
+        "id": "field/786919906",
+        "kind": "field",
+        "name": "_resultOrListeners",
+        "size": 20,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_resultOrListeners<\n",
+        "type": "dynamic"
+      },
+      "790173099": {
+        "id": "field/790173099",
+        "kind": "field",
+        "name": "millisecondsPerSecond",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "793498792": {
+        "id": "field/793498792",
+        "kind": "field",
+        "name": "isGivenTypeRti",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "795392143": {
+        "id": "field/795392143",
+        "kind": "field",
+        "name": "microsecondsPerMillisecond",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "795691913": {
+        "id": "field/795691913",
+        "kind": "field",
+        "name": "_last",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_last\n",
+        "type": "LinkedHashMapCell"
+      },
+      "795932009": {
+        "id": "field/795932009",
+        "kind": "field",
+        "name": "_set",
+        "size": 5,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/113750884",
+        "children": [],
+        "inferredType": "[subclass=_LinkedHashSet]",
+        "code": "_set\n",
+        "type": "dynamic"
+      },
+      "805748014": {
+        "id": "field/805748014",
+        "kind": "field",
+        "name": "isSubtype",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      },
+      "817840529": {
+        "id": "field/817840529",
+        "kind": "field",
+        "name": "_arguments",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_arguments\n",
+        "type": "int"
+      },
+      "818740436": {
+        "id": "field/818740436",
+        "kind": "field",
+        "name": "_length",
+        "size": 20,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/722522722",
+        "children": [],
+        "inferredType": "[subclass=JSPositiveInt]",
+        "code": "__js_helper$_length\n",
+        "type": "int"
+      },
+      "824622307": {
+        "id": "field/824622307",
+        "kind": "field",
+        "name": "_skipCount",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/680257415",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "826222890": {
+        "id": "field/826222890",
+        "kind": "field",
+        "name": "libraryName",
+        "size": 12,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/8008562",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "libraryName\n",
+        "type": "String"
+      },
+      "839347349": {
+        "id": "field/839347349",
+        "kind": "field",
+        "name": "_next",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "inferredType": "[null|exact=_LinkedHashSetCell]",
+        "code": "_next\n",
+        "type": "_LinkedHashSetCell"
+      },
+      "840091021": {
+        "id": "field/840091021",
+        "kind": "field",
+        "name": "optionalParameterCount",
+        "size": 23,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "optionalParameterCount\n",
+        "type": "int"
+      },
+      "840661601": {
+        "id": "field/840661601",
+        "kind": "field",
+        "name": "_stateValue",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "840751619": {
+        "id": "field/840751619",
+        "kind": "field",
+        "name": "message",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/56472591",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "Object"
+      },
+      "842452872": {
+        "id": "field/842452872",
+        "kind": "field",
+        "name": "FUTURE_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "844410756": {
+        "id": "field/844410756",
+        "kind": "field",
+        "name": "DEFAULT_VALUES_PROPERTY",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "849640421": {
+        "id": "field/849640421",
+        "kind": "field",
+        "name": "secondsPerMinute",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "850921879": {
+        "id": "field/850921879",
+        "kind": "field",
+        "name": "_start",
+        "size": 7,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/60704969",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_start\n",
+        "type": "int"
+      },
+      "854910375": {
+        "id": "field/854910375",
+        "kind": "field",
+        "name": "FUTURE_OR_TYPE_ARGUMENT_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "864119084": {
+        "id": "field/864119084",
+        "kind": "field",
+        "name": "OBJECT_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "875039735": {
+        "id": "field/875039735",
+        "kind": "field",
+        "name": "NULL_CLASS_TYPE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "879032432": {
+        "id": "field/879032432",
+        "kind": "field",
+        "name": "DEFERRED_PART_HASHES",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"deferredPartHashes\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "882420015": {
+        "id": "field/882420015",
+        "kind": "field",
+        "name": "_hasher",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[subclass=Closure]",
+        "code": null,
+        "type": "int Function(_LinkedCustomHashSet.E)"
+      },
+      "889385105": {
+        "id": "field/889385105",
+        "kind": "field",
+        "name": "_once",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/32494041",
+        "children": [],
+        "inferredType": "Value([exact=JSBool], value: true)",
+        "code": "_once\n",
+        "type": "bool"
+      },
+      "906853360": {
+        "id": "field/906853360",
+        "kind": "field",
+        "name": "_argumentsExpr",
+        "size": 15,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_argumentsExpr\n",
+        "type": "int"
+      },
+      "907727246": {
+        "id": "field/907727246",
+        "kind": "field",
+        "name": "_loadingLibraries",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "Map([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=_Future])",
+        "code": null,
+        "type": "Map<String,Future<Null>>"
+      },
+      "908476008": {
+        "id": "field/908476008",
+        "kind": "field",
+        "name": "printToZone",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/689380639",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "void Function(String)"
+      },
+      "909027003": {
+        "id": "field/909027003",
+        "kind": "field",
+        "name": "dartException",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/388380492",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "dartException\n",
+        "type": "dynamic"
+      },
+      "911662921": {
+        "id": "field/911662921",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_INDEX",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/156108056",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "914172423": {
+        "id": "field/914172423",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "914365883": {
+        "id": "field/914365883",
+        "kind": "field",
+        "name": "_element",
+        "size": 9,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/868658259",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_element\n",
+        "type": "dynamic"
+      },
+      "914591285": {
+        "id": "field/914591285",
+        "kind": "field",
+        "name": "_duration",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": null,
+        "type": "int"
+      },
+      "926265914": {
+        "id": "field/926265914",
+        "kind": "field",
+        "name": "deferredLoadHook",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/966364039",
+        "children": [],
+        "inferredType": "[null]",
+        "code": null,
+        "type": "void Function()"
+      },
+      "927731351": {
+        "id": "field/927731351",
+        "kind": "field",
+        "name": "_statePendingComplete",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "931441116": {
+        "id": "field/931441116",
+        "kind": "field",
+        "name": "_isInCallbackLoop",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[exact=JSBool]",
+        "code": null,
+        "type": "bool"
+      },
+      "932611099": {
+        "id": "field/932611099",
+        "kind": "field",
+        "name": "_scheduleImmediateClosure",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/611525899",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": null,
+        "type": "Function"
+      },
+      "936474054": {
+        "id": "field/936474054",
+        "kind": "field",
+        "name": "_name",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": null,
+        "type": "String"
+      },
+      "944915314": {
+        "id": "field/944915314",
+        "kind": "field",
+        "name": "variableName",
+        "size": 13,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/93352366",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "variableName\n",
+        "type": "String"
+      },
+      "951952385": {
+        "id": "field/951952385",
+        "kind": "field",
+        "name": "minutesPerHour",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "952591811": {
+        "id": "field/952591811",
+        "kind": "field",
+        "name": "_lastCallback",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/1052666095",
+        "children": [],
+        "inferredType": "[null|exact=_AsyncCallbackEntry]",
+        "code": null,
+        "type": "_AsyncCallbackEntry"
+      },
+      "954188953": {
+        "id": "field/954188953",
+        "kind": "field",
+        "name": "length",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/175705485",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "length>\n",
+        "type": "int"
+      },
+      "960584371": {
+        "id": "field/960584371",
+        "kind": "field",
+        "name": "FUNCTION_TYPE_TAG",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "962499289": {
+        "id": "field/962499289",
+        "kind": "field",
+        "name": "microsecondsPerMinute",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "966669333": {
+        "id": "field/966669333",
+        "kind": "field",
+        "name": "stateThen",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "969673523": {
+        "id": "field/969673523",
+        "kind": "field",
+        "name": "stateCatcherrorTest",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "973809471": {
+        "id": "field/973809471",
+        "kind": "field",
+        "name": "_validKey",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1070558590",
+        "children": [],
+        "inferredType": "[null|subclass=Closure]",
+        "code": null,
+        "type": "bool Function(dynamic)"
+      },
+      "978504898": {
+        "id": "field/978504898",
+        "kind": "field",
+        "name": "_state",
+        "size": 8,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/784178238",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": "_state<\n",
+        "type": "int"
+      },
+      "996559228": {
+        "id": "field/996559228",
+        "kind": "field",
+        "name": "_next",
+        "size": 18,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/500662026",
+        "children": [],
+        "inferredType": "[null|exact=LinkedHashMapCell]",
+        "code": "__js_helper$_next\n",
+        "type": "LinkedHashMapCell"
+      },
+      "996584734": {
+        "id": "field/996584734",
+        "kind": "field",
+        "name": "microsecondsPerHour",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/803883908",
+        "children": [],
+        "inferredType": "[subclass=JSUInt32]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "1001207931": {
+        "id": "field/1001207931",
+        "kind": "field",
+        "name": "_MIN_INT32",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/1003011102",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": null,
+        "type": "int",
+        "const": true
+      },
+      "1012307238": {
+        "id": "field/1012307238",
+        "kind": "field",
+        "name": "_receiver",
+        "size": 10,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/294355530",
+        "children": [],
+        "inferredType": "[subclass=JSInt]",
+        "code": "_receiver\n",
+        "type": "int"
+      },
+      "1012317118": {
+        "id": "field/1012317118",
+        "kind": "field",
+        "name": "SIGNATURE_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JsGetName]",
+        "code": null,
+        "type": "JsGetName",
+        "const": true
+      },
+      "1016218670": {
+        "id": "field/1016218670",
+        "kind": "field",
+        "name": "_falseFuture",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/438137149",
+        "children": [],
+        "inferredType": "[null|exact=_Future]",
+        "code": null,
+        "type": "_Future<bool>"
+      },
+      "1019580176": {
+        "id": "field/1019580176",
+        "kind": "field",
+        "name": "index",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/73206861",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "1020283310": {
+        "id": "field/1020283310",
+        "kind": "field",
+        "name": "STATIC_FUNCTION_NAME_PROPERTY_NAME",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "library/965528565",
+        "children": [],
+        "inferredType": "Value([exact=JSString], value: \"$static_name\")",
+        "code": null,
+        "type": "String",
+        "const": true
+      },
+      "1023319897": {
+        "id": "field/1023319897",
+        "kind": "field",
+        "name": "stackTrace",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/577121337",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "stackTrace\n",
+        "type": "StackTrace"
+      },
+      "1025923114": {
+        "id": "field/1025923114",
+        "kind": "field",
+        "name": "future",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/770824752",
+        "children": [],
+        "inferredType": "[exact=_Future]",
+        "code": "future\nfuture\n",
+        "type": "_Future<_Completer.T>"
+      },
+      "1047452024": {
+        "id": "field/1047452024",
+        "kind": "field",
+        "name": "_contents",
+        "size": 11,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/293821936",
+        "children": [],
+        "inferredType": "[exact=JSString]",
+        "code": "_contents<\n",
+        "type": "String"
+      },
+      "1051861725": {
+        "id": "field/1051861725",
+        "kind": "field",
+        "name": "_modifications",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/742137989",
+        "children": [],
+        "inferredType": "[exact=JSUInt31]",
+        "code": null,
+        "type": "int"
+      },
+      "1055298109": {
+        "id": "field/1055298109",
+        "kind": "field",
+        "name": "_nextListener",
+        "size": 14,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/80405414",
+        "children": [],
+        "inferredType": "[null|exact=_FutureListener]",
+        "code": "_nextListener\n",
+        "type": "_FutureListener<dynamic,dynamic>"
+      },
+      "1061931090": {
+        "id": "field/1061931090",
+        "kind": "field",
+        "name": "_name",
+        "size": 6,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/138211367",
+        "children": [],
+        "inferredType": "[null|subclass=Object]",
+        "code": "_name\n",
+        "type": "String"
+      },
+      "1063003009": {
+        "id": "field/1063003009",
+        "kind": "field",
+        "name": "isCheckPropertyToJsConstructorName",
+        "size": 0,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "class/716671121",
+        "children": [],
+        "inferredType": "[exact=JsBuiltin]",
+        "code": null,
+        "type": "JsBuiltin",
+        "const": true
+      }
+    },
+    "constant": {
+      "441220530": {
+        "id": "constant/441220530",
+        "kind": "constant",
+        "name": null,
+        "size": 32,
+        "outputUnit": "outputUnit/7045321",
+        "code": "C.C_Deferred = \"Hello, World!\";\n"
+      },
+      "545451897": {
+        "id": "constant/545451897",
+        "kind": "constant",
+        "name": null,
+        "size": 37,
+        "code": "C.JSInt_methods = J.JSInt.prototype;\n"
+      },
+      "586866313": {
+        "id": "constant/586866313",
+        "kind": "constant",
+        "name": null,
+        "size": 133,
+        "outputUnit": "outputUnit/669725655",
+        "code": "C.JS_CONST_u2C = function getTagFallback(o) {\n  var s = Object.prototype.toString.call(o);\n  return s.substring(8, s.length - 1);\n};\n"
+      },
+      "591262442": {
+        "id": "constant/591262442",
+        "kind": "constant",
+        "name": null,
+        "size": 49,
+        "code": "C.Interceptor_methods = J.Interceptor.prototype;\n"
+      },
+      "896140272": {
+        "id": "constant/896140272",
+        "kind": "constant",
+        "name": null,
+        "size": 41,
+        "code": "C.JSArray_methods = J.JSArray.prototype;\n"
+      },
+      "924662595": {
+        "id": "constant/924662595",
+        "kind": "constant",
+        "name": null,
+        "size": 35,
+        "outputUnit": "outputUnit/669725655",
+        "code": "C.C__RootZone = new P._RootZone();\n"
+      },
+      "940460073": {
+        "id": "constant/940460073",
+        "kind": "constant",
+        "name": null,
+        "size": 45,
+        "outputUnit": "outputUnit/669725655",
+        "code": "C.List_empty = Isolate.makeConstantList([]);\n"
+      },
+      "985964451": {
+        "id": "constant/985964451",
+        "kind": "constant",
+        "name": null,
+        "size": 43,
+        "code": "C.JSString_methods = J.JSString.prototype;\n"
+      }
+    },
+    "closure": {
+      "21475": {
+        "id": "closure/21475",
+        "kind": "closure",
+        "name": "_loadHunk_failure",
+        "size": 621,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/601638462"
+      },
+      "30023746": {
+        "id": "closure/30023746",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleValueCallback",
+        "size": 537,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/231669663"
+      },
+      "35711406": {
+        "id": "closure/35711406",
+        "kind": "closure",
+        "name": "_rootHandleUncaughtError_closure",
+        "size": 503,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/364010339",
+        "function": "function/811310425"
+      },
+      "69029087": {
+        "id": "closure/69029087",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleWhenCompleteCallback_closure",
+        "size": 119,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/869814859"
+      },
+      "181809904": {
+        "id": "closure/181809904",
+        "kind": "closure",
+        "name": "_Future__addListener_closure",
+        "size": 149,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/18599313",
+        "function": "function/853169304"
+      },
+      "231160067": {
+        "id": "closure/231160067",
+        "kind": "closure",
+        "name": "_AsyncRun__scheduleImmediateJsOverride_internalCallback",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/67489885",
+        "function": "function/987295701"
+      },
+      "310226650": {
+        "id": "closure/310226650",
+        "kind": "closure",
+        "name": "_RootZone_bindCallback_closure",
+        "size": 179,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/633677177",
+        "function": "function/81057679"
+      },
+      "379635163": {
+        "id": "closure/379635163",
+        "kind": "closure",
+        "name": "_Future__asyncComplete_closure",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/664449932",
+        "function": "function/667149426"
+      },
+      "385965656": {
+        "id": "closure/385965656",
+        "kind": "closure",
+        "name": "_Future__chainFuture_closure",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/325386239",
+        "function": "function/899674954"
+      },
+      "411607690": {
+        "id": "closure/411607690",
+        "kind": "closure",
+        "name": "_Future__asyncCompleteError_closure",
+        "size": 155,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/263363184",
+        "function": "function/341046768"
+      },
+      "558424951": {
+        "id": "closure/558424951",
+        "kind": "closure",
+        "name": "_RootZone_bindCallbackGuarded_closure",
+        "size": 122,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/390828239",
+        "function": "function/726344781"
+      },
+      "561897310": {
+        "id": "closure/561897310",
+        "kind": "closure",
+        "name": "_AsyncAwaitCompleter_complete_closure",
+        "size": 132,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/618126497",
+        "function": "function/381680028"
+      },
+      "566195572": {
+        "id": "closure/566195572",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 84,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040700"
+      },
+      "566195573": {
+        "id": "closure/566195573",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 188,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040701"
+      },
+      "566195574": {
+        "id": "closure/566195574",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 660,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040702"
+      },
+      "566195575": {
+        "id": "closure/566195575",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040703"
+      },
+      "566195576": {
+        "id": "closure/566195576",
+        "kind": "closure",
+        "name": "_loadHunk_closure",
+        "size": 134,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/569040704"
+      },
+      "581471934": {
+        "id": "closure/581471934",
+        "kind": "closure",
+        "name": "_loadHunk_success",
+        "size": 200,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/326542993",
+        "function": "function/642229693"
+      },
+      "590764751": {
+        "id": "closure/590764751",
+        "kind": "closure",
+        "name": "Future_wait_closure",
+        "size": 651,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/385444888",
+        "function": "function/394885266"
+      },
+      "601101415": {
+        "id": "closure/601101415",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_loadAndInitialize_closure",
+        "size": 321,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/248883787"
+      },
+      "607767883": {
+        "id": "closure/607767883",
+        "kind": "closure",
+        "name": "_AsyncRun__initializeScheduleImmediate_internalCallback",
+        "size": 204,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/165003912",
+        "function": "function/426855684"
+      },
+      "624687097": {
+        "id": "closure/624687097",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_closure",
+        "size": 219,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/1031826457"
+      },
+      "629631311": {
+        "id": "closure/629631311",
+        "kind": "closure",
+        "name": "_wrapJsFunctionForAsync_closure",
+        "size": 139,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/663282901",
+        "function": "function/372361659"
+      },
+      "637416128": {
+        "id": "closure/637416128",
+        "kind": "closure",
+        "name": "_TimerImpl_internalCallback",
+        "size": 191,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/773230206",
+        "function": "function/249771766"
+      },
+      "637664934": {
+        "id": "closure/637664934",
+        "kind": "closure",
+        "name": "MapBase_mapToString_closure",
+        "size": 349,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/987508329",
+        "function": "function/139456351"
+      },
+      "741043867": {
+        "id": "closure/741043867",
+        "kind": "closure",
+        "name": "_AsyncAwaitCompleter_completeError_closure",
+        "size": 141,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/852141617",
+        "function": "function/248499885"
+      },
+      "745039293": {
+        "id": "closure/745039293",
+        "kind": "closure",
+        "name": "_awaitOnObject_closure",
+        "size": 138,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/337937411",
+        "function": "function/907920633"
+      },
+      "745039294": {
+        "id": "closure/745039294",
+        "kind": "closure",
+        "name": "_awaitOnObject_closure",
+        "size": 183,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/337937411",
+        "function": "function/907920634"
+      },
+      "771507318": {
+        "id": "closure/771507318",
+        "kind": "closure",
+        "name": "unwrapException_saveStackTrace",
+        "size": 232,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/265638794",
+        "function": "function/282990063"
+      },
+      "817717319": {
+        "id": "closure/817717319",
+        "kind": "closure",
+        "name": "_AsyncRun__scheduleImmediateWithSetImmediate_internalCallback",
+        "size": 107,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/163884478",
+        "function": "function/603355140"
+      },
+      "827328529": {
+        "id": "closure/827328529",
+        "kind": "closure",
+        "name": "_Future__prependListeners_closure",
+        "size": 155,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/292751514",
+        "function": "function/947198569"
+      },
+      "830531955": {
+        "id": "closure/830531955",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleError",
+        "size": 990,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/586712659"
+      },
+      "844800611": {
+        "id": "closure/844800611",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_initializeSomeLoadedHunks",
+        "size": 1466,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/311229745"
+      },
+      "913475889": {
+        "id": "closure/913475889",
+        "kind": "closure",
+        "name": "_AsyncRun__initializeScheduleImmediate_closure",
+        "size": 270,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/165003912",
+        "function": "function/469962639"
+      },
+      "938184478": {
+        "id": "closure/938184478",
+        "kind": "closure",
+        "name": "Future_wait_handleError",
+        "size": 597,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/385444888",
+        "function": "function/39412415"
+      },
+      "953553118": {
+        "id": "closure/953553118",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 162,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212862"
+      },
+      "953553119": {
+        "id": "closure/953553119",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 230,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212863"
+      },
+      "953553120": {
+        "id": "closure/953553120",
+        "kind": "closure",
+        "name": "_Future__chainForeignFuture_closure",
+        "size": 131,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/553149607",
+        "function": "function/797212864"
+      },
+      "963665986": {
+        "id": "closure/963665986",
+        "kind": "closure",
+        "name": "_Future__propagateToListeners_handleWhenCompleteCallback",
+        "size": 1604,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/271674536",
+        "function": "function/15204906"
+      },
+      "965562379": {
+        "id": "closure/965562379",
+        "kind": "closure",
+        "name": "loadDeferredLibrary_loadAndInitialize",
+        "size": 758,
+        "outputUnit": "outputUnit/669725655",
+        "parent": "function/53631526",
+        "function": "function/741666293"
+      }
+    }
+  },
+  "holding": {
+    "field/8965675": [
+      {
+        "id": "function/1060205580",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/79943715": [
+      {
+        "id": "function/229841336",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/126292751": [
+      {
+        "id": "function/486797615",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/146902950": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/642221110",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/642221110",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/169031325": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/189240247": [
+      {
+        "id": "function/229841336",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/244162491": [
+      {
+        "id": "function/128684509",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/261042870": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/337959975": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/814002251",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/814002251",
+        "mask": "null"
+      }
+    ],
+    "field/366629653": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/640815092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/640815092",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/368849633": [
+      {
+        "id": "function/219348673",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/219348673",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/381082880": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/496557243": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/522978319": [
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/645317327": [
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/698206676",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/698206676",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      },
+      {
+        "id": "function/932567378",
+        "mask": "null"
+      }
+    ],
+    "field/646744185": [
+      {
+        "id": "function/553278458",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/553278458",
+        "mask": "null"
+      },
+      {
+        "id": "function/611761598",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/907727246": [
+      {
+        "id": "function/116599339",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "field/932611099": [
+      {
+        "id": "function/165003912",
+        "mask": "null"
+      },
+      {
+        "id": "function/788412943",
+        "mask": "null"
+      }
+    ],
+    "function/538046": [
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/542135743",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/15204906": [
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/430787578",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/63166902",
+        "mask": "null"
+      },
+      {
+        "id": "function/869814859",
+        "mask": "null"
+      },
+      {
+        "id": "function/95599505",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/95599505",
+        "mask": "null"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "null"
+      }
+    ],
+    "function/15478302": [
+      {
+        "id": "field/1061931090",
+        "mask": "null"
+      },
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      },
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/15925204": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/553149607",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      }
+    ],
+    "function/16600620": [
+      {
+        "id": "field/229586442",
+        "mask": "null"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/336424489",
+        "mask": "[subclass=_LinkedHashSet]"
+      },
+      {
+        "id": "function/448031436",
+        "mask": "null"
+      },
+      {
+        "id": "function/649401243",
+        "mask": "null"
+      },
+      {
+        "id": "function/920500080",
+        "mask": "[subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/16930089": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/18599313",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/552271305",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/552271305",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/18599313": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/18599313",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      },
+      {
+        "id": "function/853169304",
+        "mask": "null"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "null"
+      }
+    ],
+    "function/21667157": [
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/22227107": [
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "inlined"
+      }
+    ],
+    "function/31139860": [
+      {
+        "id": "field/410301694",
+        "mask": "null"
+      }
+    ],
+    "function/39412415": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/53631526": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031826457",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/210974499",
+        "mask": "null"
+      },
+      {
+        "id": "function/311229745",
+        "mask": "null"
+      },
+      {
+        "id": "function/385444888",
+        "mask": "null"
+      },
+      {
+        "id": "function/436170439",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/741666293",
+        "mask": "null"
+      }
+    ],
+    "function/57158184": [
+      {
+        "id": "function/417406426",
+        "mask": "inlined"
+      }
+    ],
+    "function/63166902": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/262026503",
+        "mask": "null"
+      }
+    ],
+    "function/66015995": [
+      {
+        "id": "function/430480673",
+        "mask": "null"
+      }
+    ],
+    "function/67489885": [
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/987295701",
+        "mask": "null"
+      }
+    ],
+    "function/67701762": [
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      }
+    ],
+    "function/68051831": [
+      {
+        "id": "field/1023319897",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/714493219",
+        "mask": "null"
+      },
+      {
+        "id": "function/1036675160",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/553851206",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/72077250": [
+      {
+        "id": "field/443749531",
+        "mask": "null"
+      }
+    ],
+    "function/79175019": [
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      }
+    ],
+    "function/80270395": [
+      {
+        "id": "field/154746101",
+        "mask": "null"
+      }
+    ],
+    "function/80736041": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/81057679": [
+      {
+        "id": "function/63166902",
+        "mask": "null"
+      }
+    ],
+    "function/82702408": [
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/931441116",
+        "mask": "null"
+      },
+      {
+        "id": "field/932611099",
+        "mask": "null"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "null"
+      },
+      {
+        "id": "function/82702408",
+        "mask": "null"
+      },
+      {
+        "id": "function/831655802",
+        "mask": "null"
+      }
+    ],
+    "function/94108092": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/95599505": [
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/430787578",
+        "mask": "inlined"
+      }
+    ],
+    "function/96457955": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      }
+    ],
+    "function/98156511": [
+      {
+        "id": "field/347672432",
+        "mask": "null"
+      },
+      {
+        "id": "field/676869951",
+        "mask": "null"
+      },
+      {
+        "id": "function/130131853",
+        "mask": "null"
+      },
+      {
+        "id": "function/702510",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702510",
+        "mask": "null"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "null"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "null"
+      }
+    ],
+    "function/99251871": [
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/60920969",
+        "mask": "null"
+      },
+      {
+        "id": "field/635439616",
+        "mask": "null"
+      },
+      {
+        "id": "function/676035370",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/676035370",
+        "mask": "null"
+      }
+    ],
+    "function/99501118": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/15925204",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      }
+    ],
+    "function/102471615": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      }
+    ],
+    "function/108053021": [
+      {
+        "id": "function/722993348",
+        "mask": "inlined"
+      }
+    ],
+    "function/116203851": [
+      {
+        "id": "field/826222890",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/116583875": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/852141617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/116599339": [
+      {
+        "id": "function/123959555",
+        "mask": "null"
+      },
+      {
+        "id": "function/494583530",
+        "mask": "null"
+      },
+      {
+        "id": "function/573775196",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/573775196",
+        "mask": "null"
+      },
+      {
+        "id": "function/687991937",
+        "mask": "null"
+      }
+    ],
+    "function/128684509": [
+      {
+        "id": "function/120153851",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/120153851",
+        "mask": "null"
+      },
+      {
+        "id": "function/969026469",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/969026469",
+        "mask": "null"
+      }
+    ],
+    "function/130041650": [
+      {
+        "id": "field/190358771",
+        "mask": "null"
+      }
+    ],
+    "function/130131853": [
+      {
+        "id": "field/229586442",
+        "mask": "null"
+      },
+      {
+        "id": "function/114607430",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/114607430",
+        "mask": "null"
+      },
+      {
+        "id": "function/336424489",
+        "mask": "[subclass=_LinkedHashSet]"
+      },
+      {
+        "id": "function/920500080",
+        "mask": "[subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/139456351": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      }
+    ],
+    "function/143741280": [
+      {
+        "id": "field/23408725",
+        "mask": "null"
+      },
+      {
+        "id": "field/414662379",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/144469777": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/208283907",
+        "mask": "null"
+      },
+      {
+        "id": "function/308590446",
+        "mask": "null"
+      },
+      {
+        "id": "function/427434111",
+        "mask": "null"
+      },
+      {
+        "id": "function/952130975",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/952130975",
+        "mask": "null"
+      }
+    ],
+    "function/150523169": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "field/850921879",
+        "mask": "null"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/150705145": [
+      {
+        "id": "field/944915314",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/160969748": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/162825675": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/162872908": [
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      }
+    ],
+    "function/163884478": [
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/603355140",
+        "mask": "null"
+      }
+    ],
+    "function/163889622": [
+      {
+        "id": "function/435575019",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/165003912": [
+      {
+        "id": "function/163884478",
+        "mask": "null"
+      },
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/426855684",
+        "mask": "null"
+      },
+      {
+        "id": "function/469962639",
+        "mask": "null"
+      },
+      {
+        "id": "function/608925525",
+        "mask": "null"
+      },
+      {
+        "id": "function/67489885",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      }
+    ],
+    "function/167405219": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/176570718": [
+      {
+        "id": "function/580865640",
+        "mask": "null"
+      }
+    ],
+    "function/176842663": [
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/635439616",
+        "mask": "null"
+      },
+      {
+        "id": "field/646361925",
+        "mask": "null"
+      },
+      {
+        "id": "field/65712884",
+        "mask": "null"
+      },
+      {
+        "id": "field/795932009",
+        "mask": "null"
+      },
+      {
+        "id": "field/839347349",
+        "mask": "null"
+      },
+      {
+        "id": "field/914365883",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/193787732": [
+      {
+        "id": "function/264370095",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      }
+    ],
+    "function/203738274": [
+      {
+        "id": "function/456567103",
+        "mask": "null"
+      }
+    ],
+    "function/204916897": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/714600619",
+        "mask": "null"
+      }
+    ],
+    "function/205154197": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/553851206",
+        "mask": "null"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      },
+      {
+        "id": "function/888466063",
+        "mask": "null"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "null"
+      }
+    ],
+    "function/210974499": [
+      {
+        "id": "function/1024143730",
+        "mask": "null"
+      },
+      {
+        "id": "function/437395524",
+        "mask": "null"
+      },
+      {
+        "id": "function/653699436",
+        "mask": "null"
+      },
+      {
+        "id": "function/997099929",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/997099929",
+        "mask": "null"
+      }
+    ],
+    "function/221934998": [
+      {
+        "id": "function/144469777",
+        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
+      },
+      {
+        "id": "function/407139250",
+        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "null"
+      }
+    ],
+    "function/230858033": [
+      {
+        "id": "function/193787732",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/193787732",
+        "mask": "null"
+      },
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      },
+      {
+        "id": "function/264370095",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/264370095",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "null"
+      },
+      {
+        "id": "function/501712645",
+        "mask": "null"
+      },
+      {
+        "id": "function/737782244",
+        "mask": "null"
+      }
+    ],
+    "function/231669663": [
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/350333970",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/350333970",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/692185405",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/243489700": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/427434111",
+        "mask": "null"
+      }
+    ],
+    "function/248499885": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      }
+    ],
+    "function/248883787": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      }
+    ],
+    "function/249771766": [
+      {
+        "id": "field/710218156",
+        "mask": "null"
+      },
+      {
+        "id": "field/9743357",
+        "mask": "null"
+      }
+    ],
+    "function/253794122": [
+      {
+        "id": "field/259683855",
+        "mask": "null"
+      },
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "function/143567266",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/143567266",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/273024378",
+        "mask": "null"
+      },
+      {
+        "id": "function/275681184",
+        "mask": "null"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "null"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "null"
+      },
+      {
+        "id": "function/684612786",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      },
+      {
+        "id": "function/906797235",
+        "mask": "null"
+      }
+    ],
+    "function/262026503": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/263363184": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/341046768",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      }
+    ],
+    "function/263798810": [
+      {
+        "id": "function/309114439",
+        "mask": "null"
+      }
+    ],
+    "function/265638794": [
+      {
+        "id": "field/146902950",
+        "mask": "null"
+      },
+      {
+        "id": "field/169031325",
+        "mask": "null"
+      },
+      {
+        "id": "field/189240247",
+        "mask": "null"
+      },
+      {
+        "id": "field/337959975",
+        "mask": "null"
+      },
+      {
+        "id": "field/366629653",
+        "mask": "null"
+      },
+      {
+        "id": "field/368849633",
+        "mask": "null"
+      },
+      {
+        "id": "field/381082880",
+        "mask": "null"
+      },
+      {
+        "id": "field/645317327",
+        "mask": "null"
+      },
+      {
+        "id": "field/646744185",
+        "mask": "null"
+      },
+      {
+        "id": "field/79943715",
+        "mask": "null"
+      },
+      {
+        "id": "field/909027003",
+        "mask": "null"
+      },
+      {
+        "id": "function/148863126",
+        "mask": "null"
+      },
+      {
+        "id": "function/282990063",
+        "mask": "null"
+      },
+      {
+        "id": "function/336352070",
+        "mask": "null"
+      },
+      {
+        "id": "function/430193009",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/430193009",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/632290992",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/632290992",
+        "mask": "null"
+      },
+      {
+        "id": "function/64968119",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/64968119",
+        "mask": "null"
+      },
+      {
+        "id": "function/725505159",
+        "mask": "null"
+      },
+      {
+        "id": "function/752981084",
+        "mask": "null"
+      },
+      {
+        "id": "function/756575134",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/756575134",
+        "mask": "null"
+      },
+      {
+        "id": "function/885768717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/885768717",
+        "mask": "null"
+      }
+    ],
+    "function/271674536": [
+      {
+        "id": "field/1023319897",
+        "mask": "null"
+      },
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/187449514",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/15204906",
+        "mask": "null"
+      },
+      {
+        "id": "function/231669663",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/39768413",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/39768413",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/586712659",
+        "mask": "null"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "null"
+      },
+      {
+        "id": "function/748173162",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/748173162",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      },
+      {
+        "id": "function/919469907",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/919469907",
+        "mask": "null"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "null"
+      }
+    ],
+    "function/271854590": [
+      {
+        "id": "function/102471615",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/618126497",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/272589495": [
+      {
+        "id": "field/261042870",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/273024378": [
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "field/435101137",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/292195356",
+        "mask": "null"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/320253842",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/476860251",
+        "mask": "null"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/922840913",
+        "mask": "null"
+      }
+    ],
+    "function/275957193": [
+      {
+        "id": "field/347672432",
+        "mask": "null"
+      },
+      {
+        "id": "field/676869951",
+        "mask": "null"
+      },
+      {
+        "id": "function/1002752870",
+        "mask": "null"
+      },
+      {
+        "id": "function/16600620",
+        "mask": "null"
+      },
+      {
+        "id": "function/448031436",
+        "mask": "null"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/870367819",
+        "mask": "null"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/998984172",
+        "mask": "null"
+      }
+    ],
+    "function/292195356": [
+      {
+        "id": "function/393060060",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/393060060",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/292751514": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/292751514",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/941710296",
+        "mask": "null"
+      },
+      {
+        "id": "function/947198569",
+        "mask": "null"
+      }
+    ],
+    "function/292889014": [
+      {
+        "id": "function/275681184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/275681184",
+        "mask": "null"
+      }
+    ],
+    "function/301932486": [
+      {
+        "id": "function/806420362",
+        "mask": "inlined"
+      }
+    ],
+    "function/302617892": [
+      {
+        "id": "function/1051093947",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[subclass=Closure]"
+      },
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/308590446": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      }
+    ],
+    "function/309114439": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/301932486",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/301932486",
+        "mask": "null"
+      },
+      {
+        "id": "function/806420362",
+        "mask": "null"
+      }
+    ],
+    "function/311229745": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "function/162825675",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "null"
+      }
+    ],
+    "function/312768442": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/349997389",
+        "mask": "null"
+      },
+      {
+        "id": "function/827571674",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/827571674",
+        "mask": "null"
+      }
+    ],
+    "function/325386239": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/553149607",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/899674954",
+        "mask": "null"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/983564685",
+        "mask": "null"
+      }
+    ],
+    "function/326542993": [
+      {
+        "id": "field/126292751",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "field/8965675",
+        "mask": "null"
+      },
+      {
+        "id": "field/907727246",
+        "mask": "null"
+      },
+      {
+        "id": "function/1014821943",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1014821943",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/263798810",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "[null|exact=JSString]"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040700",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040701",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040702",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040703",
+        "mask": "null"
+      },
+      {
+        "id": "function/569040704",
+        "mask": "null"
+      },
+      {
+        "id": "function/601638462",
+        "mask": "null"
+      },
+      {
+        "id": "function/642229693",
+        "mask": "null"
+      },
+      {
+        "id": "function/665416673",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      },
+      {
+        "id": "function/779765691",
+        "mask": "null"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "null"
+      },
+      {
+        "id": "function/820195095",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      },
+      {
+        "id": "function/942227822",
+        "mask": "[null|exact=JSString]"
+      }
+    ],
+    "function/330018012": [
+      {
+        "id": "function/337937411",
+        "mask": "null"
+      }
+    ],
+    "function/335045122": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
+    "function/336168458": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/164775669",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/164775669",
+        "mask": "null"
+      },
+      {
+        "id": "function/390828239",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/992393187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/992393187",
+        "mask": "null"
+      }
+    ],
+    "function/336424489": [
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/337937411": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "null"
+      },
+      {
+        "id": "function/16930089",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/901078366",
+        "mask": "null"
+      },
+      {
+        "id": "function/907920633",
+        "mask": "null"
+      },
+      {
+        "id": "function/907920634",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/341046768": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/350333970": [
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/692185405",
+        "mask": "inlined"
+      }
+    ],
+    "function/350634082": [
+      {
+        "id": "function/162872908",
+        "mask": "inlined"
+      }
+    ],
+    "function/351622741": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/262026503",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/364010339",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/613322203",
+        "mask": "null"
+      }
+    ],
+    "function/352514166": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1031131035",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/292751514",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/556268777",
+        "mask": "null"
+      },
+      {
+        "id": "function/638807044",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638807044",
+        "mask": "null"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722405802",
+        "mask": "null"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/772606842",
+        "mask": "null"
+      }
+    ],
+    "function/355012434": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1042482096",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1042482096",
+        "mask": "null"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/109394176",
+        "mask": "null"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/302617892",
+        "mask": "null"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/962973203",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/357627841": [
+      {
+        "id": "function/188708191",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/188708191",
+        "mask": "null"
+      }
+    ],
+    "function/358340511": [
+      {
+        "id": "function/335045122",
+        "mask": "inlined"
+      }
+    ],
+    "function/364010339": [
+      {
+        "id": "function/811310425",
+        "mask": "null"
+      },
+      {
+        "id": "function/887884267",
+        "mask": "null"
+      }
+    ],
+    "function/367762222": [
+      {
+        "id": "function/357240896",
+        "mask": "inlined"
+      }
+    ],
+    "function/369614033": [
+      {
+        "id": "function/1060110710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1060110710",
+        "mask": "null"
+      },
+      {
+        "id": "function/580865640",
+        "mask": "null"
+      }
+    ],
+    "function/370120278": [
+      {
+        "id": "function/171287120",
+        "mask": "inlined"
+      }
+    ],
+    "function/372037963": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "null"
+      }
+    ],
+    "function/381680028": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "null"
+      }
+    ],
+    "function/385444888": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/263363184",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "null"
+      },
+      {
+        "id": "function/39412415",
+        "mask": "null"
+      },
+      {
+        "id": "function/394885266",
+        "mask": "null"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/544746737",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      },
+      {
+        "id": "function/717417998",
+        "mask": "null"
+      },
+      {
+        "id": "function/754498726",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/754498726",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/388977016": [
+      {
+        "id": "function/507333070",
+        "mask": "inlined"
+      }
+    ],
+    "function/390828239": [
+      {
+        "id": "function/726344781",
+        "mask": "null"
+      }
+    ],
+    "function/394885266": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      },
+      {
+        "id": "function/96457955",
+        "mask": "null"
+      }
+    ],
+    "function/399195151": [
+      {
+        "id": "function/606513838",
+        "mask": "inlined"
+      }
+    ],
+    "function/400990606": [
+      {
+        "id": "function/370295194",
+        "mask": "inlined"
+      }
+    ],
+    "function/405266426": [
+      {
+        "id": "function/977867690",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/977867690",
+        "mask": "null"
+      }
+    ],
+    "function/407139250": [
+      {
+        "id": "function/1016194181",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/208283907",
+        "mask": "null"
+      },
+      {
+        "id": "function/243489700",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/308590446",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/458931695",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/458931695",
+        "mask": "null"
+      },
+      {
+        "id": "function/482441661",
+        "mask": "Union([exact=JSUInt31], [subclass=JSArray])"
+      },
+      {
+        "id": "function/965257927",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/965257927",
+        "mask": "null"
+      },
+      {
+        "id": "function/979933658",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/979933658",
+        "mask": "null"
+      }
+    ],
+    "function/415620823": [
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      }
+    ],
+    "function/418915149": [
+      {
+        "id": "field/954188953",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1008544093",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/186999466",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/31139860",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/430236296",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/521874428",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/714600619",
+        "mask": "null"
+      },
+      {
+        "id": "function/756812986",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/430236296": [
+      {
+        "id": "function/1027535878",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/1047605700",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/176842663",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/852972506",
+        "mask": "[subclass=Iterable]"
+      }
+    ],
+    "function/430480673": [
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "null"
+      },
+      {
+        "id": "function/778541068",
+        "mask": "null"
+      },
+      {
+        "id": "function/789545114",
+        "mask": "null"
+      },
+      {
+        "id": "function/843997665",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/843997665",
+        "mask": "null"
+      },
+      {
+        "id": "function/921677904",
+        "mask": "null"
+      }
+    ],
+    "function/431897853": [
+      {
+        "id": "field/650081226",
+        "mask": "null"
+      }
+    ],
+    "function/435575019": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/962973203",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/436170439": [
+      {
+        "id": "function/144469777",
+        "mask": "Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      }
+    ],
+    "function/436231120": [
+      {
+        "id": "field/127038922",
+        "mask": "null"
+      },
+      {
+        "id": "field/460958077",
+        "mask": "null"
+      }
+    ],
+    "function/437395524": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/427434111",
+        "mask": "null"
+      },
+      {
+        "id": "function/456567103",
+        "mask": "null"
+      }
+    ],
+    "function/445547062": [
+      {
+        "id": "function/1033661873",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/176570718",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/613119304",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/962973203",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/448031436": [
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/380929608",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/380929608",
+        "mask": "null"
+      }
+    ],
+    "function/448227795": [
+      {
+        "id": "field/4524053",
+        "mask": "null"
+      }
+    ],
+    "function/453686242": [
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      }
+    ],
+    "function/456567103": [
+      {
+        "id": "function/1024143730",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1024143730",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/464959827": [
+      {
+        "id": "field/4524053",
+        "mask": "null"
+      },
+      {
+        "id": "field/509005655",
+        "mask": "null"
+      },
+      {
+        "id": "field/727752212",
+        "mask": "null"
+      },
+      {
+        "id": "field/759319863",
+        "mask": "null"
+      },
+      {
+        "id": "function/1024465827",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/275271990",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/355012434",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/448227795",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/539017937",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/620005669",
+        "mask": "[subclass=ArgumentError]"
+      },
+      {
+        "id": "function/717852932",
+        "mask": "[subclass=ArgumentError]"
+      }
+    ],
+    "function/474133145": [
+      {
+        "id": "field/140571055",
+        "mask": "null"
+      }
+    ],
+    "function/476860251": [
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      }
+    ],
+    "function/477609809": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/482441661": [
+      {
+        "id": "function/199851072",
+        "mask": "null"
+      }
+    ],
+    "function/483766990": [
+      {
+        "id": "function/551570860",
+        "mask": "inlined"
+      }
+    ],
+    "function/487598887": [
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      }
+    ],
+    "function/491418529": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      }
+    ],
+    "function/492708773": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/494094492": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/499330809": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/208283907",
+        "mask": "null"
+      }
+    ],
+    "function/499807915": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/679532174",
+        "mask": "null"
+      }
+    ],
+    "function/501712645": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "null"
+      },
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/513053773": [
+      {
+        "id": "function/492708773",
+        "mask": "inlined"
+      }
+    ],
+    "function/519629171": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "function/853973218",
+        "mask": "null"
+      }
+    ],
+    "function/521874428": [
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      }
+    ],
+    "function/528985088": [
+      {
+        "id": "field/701889804",
+        "mask": "null"
+      },
+      {
+        "id": "function/272627576",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/272627576",
+        "mask": "null"
+      }
+    ],
+    "function/544746737": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/549577701": [
+      {
+        "id": "function/992679489",
+        "mask": "inlined"
+      }
+    ],
+    "function/553149607": [
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212862",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212863",
+        "mask": "null"
+      },
+      {
+        "id": "function/797212864",
+        "mask": "null"
+      }
+    ],
+    "function/553851206": [
+      {
+        "id": "function/136972596",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/136972596",
+        "mask": "null"
+      },
+      {
+        "id": "function/292889014",
+        "mask": "null"
+      },
+      {
+        "id": "function/419713835",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/419713835",
+        "mask": "null"
+      },
+      {
+        "id": "function/658082982",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      }
+    ],
+    "function/564404904": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      },
+      {
+        "id": "field/180845508",
+        "mask": "null"
+      },
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[subclass=Object]"
+      }
+    ],
+    "function/569040701": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/569040702": [
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      }
+    ],
+    "function/573775196": [
+      {
+        "id": "function/123959555",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/494583530",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/687991937",
+        "mask": "inlined"
+      }
+    ],
+    "function/574550003": [
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/22227107",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/22227107",
+        "mask": "null"
+      },
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      },
+      {
+        "id": "function/519629171",
+        "mask": "null"
+      },
+      {
+        "id": "function/971160936",
+        "mask": "null"
+      }
+    ],
+    "function/580865640": [
+      {
+        "id": "field/1047452024",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "null"
+      },
+      {
+        "id": "function/778541068",
+        "mask": "null"
+      },
+      {
+        "id": "function/789545114",
+        "mask": "null"
+      },
+      {
+        "id": "function/843997665",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/843997665",
+        "mask": "null"
+      }
+    ],
+    "function/585544091": [
+      {
+        "id": "field/269363605",
+        "mask": "null"
+      },
+      {
+        "id": "field/431266734",
+        "mask": "null"
+      },
+      {
+        "id": "field/742643375",
+        "mask": "null"
+      },
+      {
+        "id": "field/795691913",
+        "mask": "null"
+      },
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      },
+      {
+        "id": "field/996559228",
+        "mask": "null"
+      },
+      {
+        "id": "function/1015140651",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1015140651",
+        "mask": "null"
+      },
+      {
+        "id": "function/481547973",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/481547973",
+        "mask": "null"
+      }
+    ],
+    "function/586712659": [
+      {
+        "id": "field/24026359",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/714493219",
+        "mask": "null"
+      },
+      {
+        "id": "field/786919906",
+        "mask": "null"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/11804710",
+        "mask": "null"
+      },
+      {
+        "id": "function/171287120",
+        "mask": "null"
+      },
+      {
+        "id": "function/265638794",
+        "mask": "null"
+      },
+      {
+        "id": "function/370120278",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/370120278",
+        "mask": "null"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/51167109",
+        "mask": "null"
+      },
+      {
+        "id": "function/528985088",
+        "mask": "null"
+      },
+      {
+        "id": "function/68051831",
+        "mask": "null"
+      },
+      {
+        "id": "function/795411795",
+        "mask": "null"
+      }
+    ],
+    "function/601638462": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "field/907727246",
+        "mask": "null"
+      },
+      {
+        "id": "function/162825675",
+        "mask": "null"
+      },
+      {
+        "id": "function/272589495",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/754771250",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      },
+      {
+        "id": "function/820195095",
+        "mask": "null"
+      }
+    ],
+    "function/607704865": [
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "null"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/467155193",
+        "mask": "null"
+      },
+      {
+        "id": "function/483766990",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/483766990",
+        "mask": "null"
+      },
+      {
+        "id": "function/551570860",
+        "mask": "null"
+      }
+    ],
+    "function/608925525": [
+      {
+        "id": "function/357240896",
+        "mask": "null"
+      },
+      {
+        "id": "function/367762222",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/367762222",
+        "mask": "null"
+      },
+      {
+        "id": "function/773230206",
+        "mask": "null"
+      }
+    ],
+    "function/611761598": [
+      {
+        "id": "function/473156332",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/473156332",
+        "mask": "null"
+      },
+      {
+        "id": "function/906921796",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/906921796",
+        "mask": "null"
+      }
+    ],
+    "function/613119304": [
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/618126497": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/381680028",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "[exact=_Completer]"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "[exact=_SyncCompleter]"
+      },
+      {
+        "id": "function/99501118",
+        "mask": "null"
+      }
+    ],
+    "function/620005669": [
+      {
+        "id": "field/727752212",
+        "mask": "null"
+      },
+      {
+        "id": "field/954188953",
+        "mask": "null"
+      },
+      {
+        "id": "function/499807915",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/633677177": [
+      {
+        "id": "function/81057679",
+        "mask": "null"
+      }
+    ],
+    "function/635153575": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1014074245",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1014074245",
+        "mask": "null"
+      }
+    ],
+    "function/636061569": [
+      {
+        "id": "field/345425066",
+        "mask": "null"
+      },
+      {
+        "id": "field/347443343",
+        "mask": "null"
+      },
+      {
+        "id": "field/627383241",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/636443477": [
+      {
+        "id": "function/370295194",
+        "mask": "inlined"
+      }
+    ],
+    "function/639806883": [
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      }
+    ],
+    "function/642229693": [
+      {
+        "id": "field/496557243",
+        "mask": "null"
+      },
+      {
+        "id": "function/102471615",
+        "mask": "null"
+      }
+    ],
+    "function/649401243": [
+      {
+        "id": "field/295541341",
+        "mask": "null"
+      },
+      {
+        "id": "field/410301694",
+        "mask": "null"
+      },
+      {
+        "id": "field/435679137",
+        "mask": "null"
+      },
+      {
+        "id": "field/459351028",
+        "mask": "null"
+      },
+      {
+        "id": "field/60920969",
+        "mask": "null"
+      },
+      {
+        "id": "field/839347349",
+        "mask": "null"
+      },
+      {
+        "id": "function/411231605",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/411231605",
+        "mask": "null"
+      },
+      {
+        "id": "function/616072379",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/616072379",
+        "mask": "null"
+      }
+    ],
+    "function/650942169": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/343621437",
+        "mask": "null"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/975105635",
+        "mask": "null"
+      }
+    ],
+    "function/653699436": [
+      {
+        "id": "function/1024143730",
+        "mask": "inlined"
+      }
+    ],
+    "function/658082982": [
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "null"
+      },
+      {
+        "id": "function/108053021",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/108053021",
+        "mask": "null"
+      },
+      {
+        "id": "function/21667157",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "null"
+      },
+      {
+        "id": "function/316732114",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/316732114",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      },
+      {
+        "id": "function/722993348",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/722993348",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      },
+      {
+        "id": "function/764768055",
+        "mask": "null"
+      }
+    ],
+    "function/658921946": [
+      {
+        "id": "function/390828239",
+        "mask": "null"
+      },
+      {
+        "id": "function/417406426",
+        "mask": "null"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/57158184",
+        "mask": "null"
+      },
+      {
+        "id": "function/633677177",
+        "mask": "null"
+      },
+      {
+        "id": "function/835692712",
+        "mask": "null"
+      }
+    ],
+    "function/663282901": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/372361659",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/888466063",
+        "mask": "null"
+      }
+    ],
+    "function/664449932": [
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/325386239",
+        "mask": "null"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/533906117",
+        "mask": "null"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/560797298",
+        "mask": "null"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/644221207",
+        "mask": "null"
+      },
+      {
+        "id": "function/658921946",
+        "mask": "null"
+      },
+      {
+        "id": "function/667149426",
+        "mask": "null"
+      },
+      {
+        "id": "function/967508646",
+        "mask": "null"
+      }
+    ],
+    "function/665416673": [
+      {
+        "id": "field/192950192",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "field/232791153",
+        "mask": "null"
+      },
+      {
+        "id": "field/650800220",
+        "mask": "null"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "null"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "null"
+      },
+      {
+        "id": "function/813862273",
+        "mask": "null"
+      },
+      {
+        "id": "function/897413385",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/667149426": [
+      {
+        "id": "function/96457955",
+        "mask": "null"
+      }
+    ],
+    "function/668300184": [
+      {
+        "id": "function/253794122",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/669694580": [
+      {
+        "id": "field/509651846",
+        "mask": "null"
+      },
+      {
+        "id": "function/425007214",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/519947595",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/705889064",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/837956997",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/679532174": [
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      }
+    ],
+    "function/684612786": [
+      {
+        "id": "function/222294695",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/222294695",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      }
+    ],
+    "function/689069465": [
+      {
+        "id": "function/1012615396",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1012615396",
+        "mask": "null"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "null"
+      },
+      {
+        "id": "function/257728434",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/257728434",
+        "mask": "null"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/299781104",
+        "mask": "null"
+      },
+      {
+        "id": "function/306374693",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/306374693",
+        "mask": "null"
+      },
+      {
+        "id": "function/316732114",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/316732114",
+        "mask": "null"
+      },
+      {
+        "id": "function/487598887",
+        "mask": "null"
+      },
+      {
+        "id": "function/607704865",
+        "mask": "null"
+      },
+      {
+        "id": "function/639806883",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/639806883",
+        "mask": "null"
+      },
+      {
+        "id": "function/658082982",
+        "mask": "null"
+      },
+      {
+        "id": "function/665676035",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/665676035",
+        "mask": "null"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "null"
+      },
+      {
+        "id": "function/710092165",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/710092165",
+        "mask": "null"
+      },
+      {
+        "id": "function/734834560",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/734834560",
+        "mask": "null"
+      },
+      {
+        "id": "function/798288240",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/798288240",
+        "mask": "null"
+      },
+      {
+        "id": "function/813370328",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/813370328",
+        "mask": "null"
+      },
+      {
+        "id": "function/984452543",
+        "mask": "null"
+      }
+    ],
+    "function/689271731": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/269363605",
+        "mask": "null"
+      },
+      {
+        "id": "field/509651846",
+        "mask": "null"
+      },
+      {
+        "id": "field/742643375",
+        "mask": "null"
+      },
+      {
+        "id": "field/996559228",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      }
+    ],
+    "function/693686431": [
+      {
+        "id": "function/350634082",
+        "mask": "inlined"
+      }
+    ],
+    "function/702114504": [
+      {
+        "id": "field/192950192",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/585544091",
+        "mask": "null"
+      },
+      {
+        "id": "function/897413385",
+        "mask": "[subclass=JsLinkedHashMap]"
+      }
+    ],
+    "function/705889064": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      },
+      {
+        "id": "field/180845508",
+        "mask": "null"
+      },
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      }
+    ],
+    "function/710611585": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/162872908",
+        "mask": "null"
+      },
+      {
+        "id": "function/350634082",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/693686431",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/693686431",
+        "mask": "null"
+      },
+      {
+        "id": "function/94108092",
+        "mask": "null"
+      }
+    ],
+    "function/714600619": [
+      {
+        "id": "field/954188953",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1008544093",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/186999466",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/31139860",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/349997389",
+        "mask": "null"
+      },
+      {
+        "id": "function/430236296",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/521874428",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      },
+      {
+        "id": "function/756812986",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/985926244",
+        "mask": "null"
+      }
+    ],
+    "function/717417998": [
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      }
+    ],
+    "function/725505159": [
+      {
+        "id": "field/1012307238",
+        "mask": "null"
+      },
+      {
+        "id": "field/123513767",
+        "mask": "null"
+      },
+      {
+        "id": "field/359397062",
+        "mask": "null"
+      },
+      {
+        "id": "field/55197673",
+        "mask": "null"
+      },
+      {
+        "id": "field/817840529",
+        "mask": "null"
+      },
+      {
+        "id": "field/906853360",
+        "mask": "null"
+      }
+    ],
+    "function/726344781": [
+      {
+        "id": "function/351622741",
+        "mask": "null"
+      }
+    ],
+    "function/726979110": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/606572177",
+        "mask": "null"
+      }
+    ],
+    "function/731794670": [
+      {
+        "id": "function/739160294",
+        "mask": "inlined"
+      }
+    ],
+    "function/737782244": [
+      {
+        "id": "function/203738274",
+        "mask": "null"
+      },
+      {
+        "id": "function/230858033",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/741666293": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/1058735230",
+        "mask": "[exact=_Future]"
+      },
+      {
+        "id": "function/248883787",
+        "mask": "null"
+      },
+      {
+        "id": "function/326542993",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/492708773",
+        "mask": "null"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/513053773",
+        "mask": "null"
+      },
+      {
+        "id": "function/664449932",
+        "mask": "null"
+      }
+    ],
+    "function/745741399": [
+      {
+        "id": "field/376257386",
+        "mask": "null"
+      },
+      {
+        "id": "function/355012434",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/749970393": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/752981084": [
+      {
+        "id": "function/830798781",
+        "mask": "null"
+      }
+    ],
+    "function/754498726": [
+      {
+        "id": "function/338379080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/717417998",
+        "mask": "inlined"
+      }
+    ],
+    "function/756812986": [
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      }
+    ],
+    "function/764768055": [
+      {
+        "id": "function/310457557",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/310457557",
+        "mask": "null"
+      },
+      {
+        "id": "function/478486472",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      }
+    ],
+    "function/766396929": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/1065856678",
+        "mask": "[subclass=_Completer]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/271556856",
+        "mask": "null"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/338379080",
+        "mask": "null"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/415620823",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/477609809",
+        "mask": "[subclass=_Completer]"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/823929753",
+        "mask": "null"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      }
+    ],
+    "function/772250195": [
+      {
+        "id": "field/244162491",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/179653294",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/179653294",
+        "mask": "null"
+      },
+      {
+        "id": "function/98156511",
+        "mask": "[null|subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/778541068": [
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      }
+    ],
+    "function/779765691": [
+      {
+        "id": "function/94108092",
+        "mask": "inlined"
+      }
+    ],
+    "function/784650927": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "field/850921879",
+        "mask": "null"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/788412943": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/681643547",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/681643547",
+        "mask": "null"
+      }
+    ],
+    "function/789545114": [
+      {
+        "id": "function/1027535878",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/176842663",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/388977016",
+        "mask": "null"
+      },
+      {
+        "id": "function/405266426",
+        "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "null"
+      },
+      {
+        "id": "function/834909172",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/950708086",
+        "mask": "Union([exact=ArrayIterator], [exact=_LinkedHashSetIterator])"
+      },
+      {
+        "id": "function/99251871",
+        "mask": "Union([subclass=JSArray], [subclass=_LinkedHashSet])"
+      }
+    ],
+    "function/791079680": [
+      {
+        "id": "field/125830184",
+        "mask": "null"
+      }
+    ],
+    "function/793410068": [
+      {
+        "id": "field/346735010",
+        "mask": "null"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/773528822",
+        "mask": "null"
+      }
+    ],
+    "function/795411795": [
+      {
+        "id": "field/187449514",
+        "mask": "null"
+      },
+      {
+        "id": "field/24026359",
+        "mask": "null"
+      },
+      {
+        "id": "field/304825305",
+        "mask": "null"
+      },
+      {
+        "id": "field/343514633",
+        "mask": "null"
+      },
+      {
+        "id": "field/485816538",
+        "mask": "null"
+      },
+      {
+        "id": "function/1030881401",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1030881401",
+        "mask": "null"
+      },
+      {
+        "id": "function/1055095230",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1055095230",
+        "mask": "null"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/373761717",
+        "mask": "null"
+      },
+      {
+        "id": "function/968241519",
+        "mask": "null"
+      }
+    ],
+    "function/796179660": [
+      {
+        "id": "function/712365042",
+        "mask": "null"
+      }
+    ],
+    "function/797212862": [
+      {
+        "id": "field/978504898",
+        "mask": "null"
+      },
+      {
+        "id": "function/15925204",
+        "mask": "null"
+      },
+      {
+        "id": "function/599927967",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/599927967",
+        "mask": "null"
+      }
+    ],
+    "function/797212863": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/797212864": [
+      {
+        "id": "function/574550003",
+        "mask": "null"
+      }
+    ],
+    "function/808159833": [
+      {
+        "id": "function/749970393",
+        "mask": "null"
+      }
+    ],
+    "function/811310425": [
+      {
+        "id": "function/1033661873",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/1051093947",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/116203851",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/130041650",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/143741280",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/150705145",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/15478302",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/167405219",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/173469993",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/176570718",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/285148179",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/369614033",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/380325809",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/412886703",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/412886703",
+        "mask": "null"
+      },
+      {
+        "id": "function/431897853",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/436231120",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/440018750",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/464959827",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/474133145",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/550544609",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/565013754",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/613119304",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/636061569",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/66015995",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/72077250",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/730595126",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/745741399",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/793410068",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/848267879",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/891910474",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/93381370",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/944731702",
+        "mask": "[subclass=Object]"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/968358412",
+        "mask": "null"
+      },
+      {
+        "id": "function/991909617",
+        "mask": "[subclass=Object]"
+      }
+    ],
+    "function/813862273": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/202484522",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/370295194",
+        "mask": "null"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/636443477",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/636443477",
+        "mask": "null"
+      },
+      {
+        "id": "function/669694580",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/889342435",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/820195095": [
+      {
+        "id": "field/192950192",
+        "mask": "null"
+      },
+      {
+        "id": "field/202484522",
+        "mask": "null"
+      },
+      {
+        "id": "field/232791153",
+        "mask": "null"
+      },
+      {
+        "id": "field/650800220",
+        "mask": "null"
+      },
+      {
+        "id": "function/175997763",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/245651187",
+        "mask": "null"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/315128565",
+        "mask": "null"
+      },
+      {
+        "id": "function/347974666",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/370295194",
+        "mask": "null"
+      },
+      {
+        "id": "function/38646490",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/400990606",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/400990606",
+        "mask": "null"
+      },
+      {
+        "id": "function/538046",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/564404904",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/585544091",
+        "mask": "null"
+      },
+      {
+        "id": "function/669694580",
+        "mask": "null"
+      },
+      {
+        "id": "function/702114504",
+        "mask": "null"
+      },
+      {
+        "id": "function/749970393",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/796179660",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/80736041",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/808159833",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/854200700",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/860159722",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/878987098",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/889342435",
+        "mask": "[subclass=JsLinkedHashMap]"
+      },
+      {
+        "id": "function/91425461",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/831655802": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/607252",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      }
+    ],
+    "function/834909172": [
+      {
+        "id": "field/646361925",
+        "mask": "null"
+      }
+    ],
+    "function/835692712": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/931441116",
+        "mask": "null"
+      },
+      {
+        "id": "field/932611099",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/546320785",
+        "mask": "null"
+      },
+      {
+        "id": "function/82702408",
+        "mask": "null"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "null"
+      }
+    ],
+    "function/848267879": [
+      {
+        "id": "field/653339731",
+        "mask": "null"
+      }
+    ],
+    "function/852141617": [
+      {
+        "id": "field/334228980",
+        "mask": "null"
+      },
+      {
+        "id": "field/368460625",
+        "mask": "null"
+      },
+      {
+        "id": "function/248499885",
+        "mask": "null"
+      },
+      {
+        "id": "function/336168458",
+        "mask": "null"
+      },
+      {
+        "id": "function/766396929",
+        "mask": "null"
+      }
+    ],
+    "function/852972506": [
+      {
+        "id": "function/581270226",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/581270226",
+        "mask": "null"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "null"
+      }
+    ],
+    "function/853169304": [
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      }
+    ],
+    "function/853973218": [
+      {
+        "id": "field/1055298109",
+        "mask": "null"
+      }
+    ],
+    "function/860159722": [
+      {
+        "id": "function/749970393",
+        "mask": "null"
+      }
+    ],
+    "function/873863767": [
+      {
+        "id": "function/204916897",
+        "mask": "null"
+      },
+      {
+        "id": "function/312768442",
+        "mask": "[exact=JSString]"
+      },
+      {
+        "id": "function/501712645",
+        "mask": "null"
+      },
+      {
+        "id": "function/508874693",
+        "mask": "null"
+      },
+      {
+        "id": "function/549577701",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/549577701",
+        "mask": "null"
+      },
+      {
+        "id": "function/555987509",
+        "mask": "null"
+      },
+      {
+        "id": "function/751200407",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      },
+      {
+        "id": "function/890739228",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/890739228",
+        "mask": "null"
+      },
+      {
+        "id": "function/992679489",
+        "mask": "null"
+      }
+    ],
+    "function/887884267": [
+      {
+        "id": "field/221913650",
+        "mask": "null"
+      },
+      {
+        "id": "field/29748263",
+        "mask": "null"
+      },
+      {
+        "id": "field/639289778",
+        "mask": "null"
+      },
+      {
+        "id": "field/952591811",
+        "mask": "null"
+      },
+      {
+        "id": "function/835692712",
+        "mask": "null"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/895978326",
+        "mask": "null"
+      }
+    ],
+    "function/890739228": [
+      {
+        "id": "function/508874693",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/751200407",
+        "mask": "inlined"
+      }
+    ],
+    "function/891910474": [
+      {
+        "id": "function/987508329",
+        "mask": "null"
+      }
+    ],
+    "function/899124813": [
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/791079680",
+        "mask": "null"
+      },
+      {
+        "id": "function/841192189",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/841192189",
+        "mask": "null"
+      },
+      {
+        "id": "function/906797235",
+        "mask": "null"
+      }
+    ],
+    "function/899674954": [
+      {
+        "id": "function/352514166",
+        "mask": "null"
+      }
+    ],
+    "function/906797235": [
+      {
+        "id": "field/302220255",
+        "mask": "null"
+      }
+    ],
+    "function/907920634": [
+      {
+        "id": "function/259223906",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/259223906",
+        "mask": "null"
+      }
+    ],
+    "function/920500080": [
+      {
+        "id": "field/914365883",
+        "mask": "null"
+      },
+      {
+        "id": "function/425007214",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/519947595",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/705889064",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/837956997",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/921486255": [
+      {
+        "id": "function/116583875",
+        "mask": "null"
+      },
+      {
+        "id": "function/271854590",
+        "mask": "null"
+      },
+      {
+        "id": "function/330018012",
+        "mask": "null"
+      },
+      {
+        "id": "function/357627841",
+        "mask": "null"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/399195151",
+        "mask": "null"
+      },
+      {
+        "id": "function/53631526",
+        "mask": "null"
+      },
+      {
+        "id": "function/606513838",
+        "mask": "null"
+      },
+      {
+        "id": "function/635153575",
+        "mask": "null"
+      },
+      {
+        "id": "function/663282901",
+        "mask": "null"
+      },
+      {
+        "id": "function/710611585",
+        "mask": "null"
+      },
+      {
+        "id": "function/772250195",
+        "mask": "null"
+      },
+      {
+        "id": "function/864228238",
+        "mask": "null"
+      }
+    ],
+    "function/921677904": [
+      {
+        "id": "function/1027535878",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/1047605700",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/176842663",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/80270395",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/834909172",
+        "mask": "[subtype=Iterator]"
+      },
+      {
+        "id": "function/852972506",
+        "mask": "[subclass=Iterable]"
+      },
+      {
+        "id": "function/950708086",
+        "mask": "[subtype=Iterator]"
+      }
+    ],
+    "function/922840913": [
+      {
+        "id": "field/386221903",
+        "mask": "null"
+      },
+      {
+        "id": "field/435101137",
+        "mask": "null"
+      },
+      {
+        "id": "field/709451133",
+        "mask": "null"
+      },
+      {
+        "id": "function/221934998",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/292195356",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/724475372",
+        "mask": "null"
+      },
+      {
+        "id": "function/726979110",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/738104072",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/762030080",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/762030080",
+        "mask": "null"
+      },
+      {
+        "id": "function/899124813",
+        "mask": "null"
+      }
+    ],
+    "function/942227822": [
+      {
+        "id": "function/225159691",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/225159691",
+        "mask": "null"
+      },
+      {
+        "id": "function/638664464",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/638664464",
+        "mask": "null"
+      }
+    ],
+    "function/944731702": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/993180100",
+        "mask": "null"
+      }
+    ],
+    "function/947198569": [
+      {
+        "id": "function/271674536",
+        "mask": "null"
+      }
+    ],
+    "function/950708086": [
+      {
+        "id": "field/504170901",
+        "mask": "null"
+      }
+    ],
+    "function/967508646": [
+      {
+        "id": "function/1049802380",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/1049802380",
+        "mask": "null"
+      },
+      {
+        "id": "function/555987509",
+        "mask": "null"
+      },
+      {
+        "id": "function/607704865",
+        "mask": "null"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/708419578",
+        "mask": "null"
+      },
+      {
+        "id": "function/821285776",
+        "mask": "null"
+      },
+      {
+        "id": "function/984452543",
+        "mask": "null"
+      }
+    ],
+    "function/968241519": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/160969748",
+        "mask": "null"
+      }
+    ],
+    "function/984452543": [
+      {
+        "id": "function/268773900",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/268773900",
+        "mask": "null"
+      },
+      {
+        "id": "function/689069465",
+        "mask": "null"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/736875717",
+        "mask": "null"
+      }
+    ],
+    "function/985926244": [
+      {
+        "id": "field/954188953",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/1008544093",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/186999466",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/31139860",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/430236296",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/521874428",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/756812986",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "[null|subclass=Object]"
+      }
+    ],
+    "function/987508329": [
+      {
+        "id": "field/1047452024",
+        "mask": "[null|subclass=Object]"
+      },
+      {
+        "id": "field/1047452024",
+        "mask": "null"
+      },
+      {
+        "id": "field/522978319",
+        "mask": "null"
+      },
+      {
+        "id": "function/139456351",
+        "mask": "null"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/210296716",
+        "mask": "null"
+      },
+      {
+        "id": "function/335045122",
+        "mask": "null"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/358340511",
+        "mask": "null"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/372037963",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/507333070",
+        "mask": "null"
+      },
+      {
+        "id": "function/540949546",
+        "mask": "null"
+      },
+      {
+        "id": "function/689271731",
+        "mask": "null"
+      },
+      {
+        "id": "function/778541068",
+        "mask": "null"
+      }
+    ],
+    "function/990521259": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "function/150523169",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/453686242",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/491418529",
+        "mask": "null"
+      },
+      {
+        "id": "function/494094492",
+        "mask": "null"
+      },
+      {
+        "id": "function/985926244",
+        "mask": "null"
+      },
+      {
+        "id": "function/990521259",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/997099929": [
+      {
+        "id": "function/653699436",
+        "mask": "inlined"
+      }
+    ],
+    "function/1002752870": [
+      {
+        "id": "function/30570662",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/30570662",
+        "mask": "null"
+      },
+      {
+        "id": "function/649401243",
+        "mask": "null"
+      },
+      {
+        "id": "function/702510",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/702510",
+        "mask": "null"
+      }
+    ],
+    "function/1008544093": [
+      {
+        "id": "field/818740436",
+        "mask": "null"
+      },
+      {
+        "id": "function/731794670",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/731794670",
+        "mask": "null"
+      },
+      {
+        "id": "function/739160294",
+        "mask": "null"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/950782810",
+        "mask": "null"
+      }
+    ],
+    "function/1014821943": [
+      {
+        "id": "function/779765691",
+        "mask": "inlined"
+      }
+    ],
+    "function/1016194181": [
+      {
+        "id": "field/373519716",
+        "mask": "null"
+      },
+      {
+        "id": "field/850921879",
+        "mask": "null"
+      },
+      {
+        "id": "function/144469778",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/418915149",
+        "mask": "null"
+      },
+      {
+        "id": "function/453686242",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      },
+      {
+        "id": "function/990521259",
+        "mask": "Union([exact=SubListIterable], [subclass=JSArray])"
+      }
+    ],
+    "function/1024465827": [
+      {
+        "id": "field/111931226",
+        "mask": "null"
+      },
+      {
+        "id": "field/649547880",
+        "mask": "null"
+      },
+      {
+        "id": "function/445547062",
+        "mask": "null"
+      }
+    ],
+    "function/1027535878": [
+      {
+        "id": "field/112618843",
+        "mask": "null"
+      },
+      {
+        "id": "field/237146195",
+        "mask": "null"
+      },
+      {
+        "id": "field/504170901",
+        "mask": "null"
+      },
+      {
+        "id": "field/577142640",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/544746737",
+        "mask": "null"
+      }
+    ],
+    "function/1031826457": [
+      {
+        "id": "field/244162491",
+        "mask": "null"
+      },
+      {
+        "id": "function/275957193",
+        "mask": "[null|subclass=_LinkedHashSet]"
+      }
+    ],
+    "function/1033661873": [
+      {
+        "id": "function/987508329",
+        "mask": "null"
+      }
+    ],
+    "function/1036675160": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/650942169",
+        "mask": "null"
+      }
+    ],
+    "function/1042482096": [
+      {
+        "id": "function/109394176",
+        "mask": "inlined"
+      }
+    ],
+    "function/1047605700": [
+      {
+        "id": "field/153843292",
+        "mask": "null"
+      },
+      {
+        "id": "field/154746101",
+        "mask": "null"
+      },
+      {
+        "id": "field/525450391",
+        "mask": "null"
+      },
+      {
+        "id": "field/626762025",
+        "mask": "null"
+      },
+      {
+        "id": "function/163889622",
+        "mask": "null"
+      },
+      {
+        "id": "function/701409225",
+        "mask": "null"
+      },
+      {
+        "id": "function/784650927",
+        "mask": "null"
+      },
+      {
+        "id": "function/990521259",
+        "mask": "null"
+      }
+    ],
+    "function/1051093947": [
+      {
+        "id": "function/873863767",
+        "mask": "null"
+      }
+    ],
+    "function/1058735230": [
+      {
+        "id": "field/42778158",
+        "mask": "null"
+      },
+      {
+        "id": "function/16930089",
+        "mask": "null"
+      },
+      {
+        "id": "function/205154197",
+        "mask": "null"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/460512542",
+        "mask": "null"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/904115316",
+        "mask": "null"
+      }
+    ],
+    "function/1060205580": [
+      {
+        "id": "function/499330809",
+        "mask": "null"
+      },
+      {
+        "id": "function/717561594",
+        "mask": "null"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "inlined"
+      },
+      {
+        "id": "function/79175019",
+        "mask": "null"
+      }
+    ],
+    "function/1065856678": [
+      {
+        "id": "field/1025923114",
+        "mask": "null"
+      },
+      {
+        "id": "function/263363184",
+        "mask": "null"
+      }
+    ]
+  },
+  "dependencies": {},
+  "outputUnits": [
+    {
+      "id": "outputUnit/7045321",
+      "kind": "outputUnit",
+      "name": "1",
+      "size": 1353,
+      "imports": [
+        "deferred_import"
+      ]
+    },
+    {
+      "id": "outputUnit/669725655",
+      "kind": "outputUnit",
+      "name": "main",
+      "size": 156027,
+      "imports": []
+    }
+  ],
+  "dump_version": 5,
+  "deferredFiles": {
+    "hello_world_deferred.dart": {
+      "name": "<unnamed>",
+      "imports": {
+        "deferred_import": [
+          "hello_world_deferred.js_1.part.js"
+        ]
+      }
+    }
+  },
+  "dump_minor_version": 1,
+  "program": {
+    "entrypoint": "function/921486255",
+    "size": 157380,
+    "dart2jsVersion": "2.00.0-dev.60.0",
+    "compilationMoment": "2018-06-20 15:19:49.944368",
+    "compilationDuration": 1338565,
+    "toJsonDuration": 11000,
+    "dumpInfoDuration": 0,
+    "noSuchMethodEnabled": false,
+    "isRuntimeTypeUsed": false,
+    "isIsolateInUse": false,
+    "isFunctionApplyUsed": false,
+    "isMirrorsUsed": false,
+    "minified": false
+  }
+}
\ No newline at end of file
diff --git a/pkg/dart2js_info/test/json_to_proto_deferred_test.dart b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
new file mode 100644
index 0000000..0f1eaf2
--- /dev/null
+++ b/pkg/dart2js_info/test/json_to_proto_deferred_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('json to proto conversion with deferred files', () {
+    test('hello_world_deferred', () {
+      final helloWorld = new File(
+          'test/hello_world_deferred/hello_world_deferred.js.info.json');
+      final json = jsonDecode(helloWorld.readAsStringSync());
+      final decoded = new AllInfoJsonCodec().decode(json);
+      final proto = new AllInfoProtoCodec().encode(decoded);
+
+      expect(proto.deferredImports, hasLength(1));
+      final libraryImports = proto.deferredImports.first;
+      expect(libraryImports.libraryUri, 'hello_world_deferred.dart');
+      expect(libraryImports.libraryName, '<unnamed>');
+      expect(libraryImports.imports, hasLength(1));
+      final import = libraryImports.imports.first;
+      expect(import.prefix, 'deferred_import');
+      expect(import.files, hasLength(1));
+      expect(import.files.first, 'hello_world_deferred.js_1.part.js');
+
+      final infoMap = proto.allInfos;
+
+      final entrypoint = infoMap[proto.program.entrypointId];
+      expect(entrypoint, isNotNull);
+      expect(entrypoint.hasFunctionInfo(), isTrue);
+      expect(entrypoint.outputUnitId, isNotNull);
+
+      // The output unit of the entrypoint function should be the default
+      // entrypoint, which should have no imports.
+      final defaultOutputUnit = infoMap[entrypoint.outputUnitId];
+      expect(defaultOutputUnit, isNotNull);
+      expect(defaultOutputUnit.hasOutputUnitInfo(), isTrue);
+      expect(defaultOutputUnit.outputUnitInfo.imports, isEmpty);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
new file mode 100644
index 0000000..609532b
--- /dev/null
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -0,0 +1,74 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/info.dart';
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:dart2js_info/proto_info_codec.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('json to proto conversion', () {
+    test('hello_world', () {
+      final helloWorld = new File('test/hello_world/hello_world.js.info.json');
+      final json = jsonDecode(helloWorld.readAsStringSync());
+      final decoded = new AllInfoJsonCodec().decode(json);
+      final proto = new AllInfoProtoCodec().encode(decoded);
+
+      expect(proto.program.entrypointId, isNotNull);
+      expect(proto.program.size, 10324);
+      expect(proto.program.compilationMoment.toInt(),
+          DateTime.parse("2017-04-17 09:46:41.661617").microsecondsSinceEpoch);
+      expect(proto.program.toProtoDuration.toInt(),
+          new Duration(milliseconds: 4).inMicroseconds);
+      expect(proto.program.dumpInfoDuration.toInt(),
+          new Duration(milliseconds: 0).inMicroseconds);
+      expect(proto.program.noSuchMethodEnabled, isFalse);
+      expect(proto.program.minified, isFalse);
+    });
+
+    test('has proper id format', () {
+      final helloWorld = new File('test/hello_world/hello_world.js.info.json');
+      final json = jsonDecode(helloWorld.readAsStringSync());
+      final decoded = new AllInfoJsonCodec().decode(json);
+      final proto = new AllInfoProtoCodec().encode(decoded);
+
+      final expectedPrefixes = <InfoKind, String>{};
+      for (final kind in InfoKind.values) {
+        expectedPrefixes[kind] = kindToString(kind) + '/';
+      }
+
+      for (final info in proto.allInfos.entries) {
+        final value = info.value;
+        if (value.hasLibraryInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.library]));
+        } else if (value.hasClassInfo()) {
+          expect(
+              value.serializedId, startsWith(expectedPrefixes[InfoKind.clazz]));
+        } else if (value.hasFunctionInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.function]));
+        } else if (value.hasFieldInfo()) {
+          expect(
+              value.serializedId, startsWith(expectedPrefixes[InfoKind.field]));
+        } else if (value.hasConstantInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.constant]));
+        } else if (value.hasOutputUnitInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.outputUnit]));
+        } else if (value.hasTypedefInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.typedef]));
+        } else if (value.hasClosureInfo()) {
+          expect(value.serializedId,
+              startsWith(expectedPrefixes[InfoKind.closure]));
+        }
+      }
+    });
+  });
+}
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
new file mode 100644
index 0000000..1e6b382
--- /dev/null
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dart2js_info/json_info_codec.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('parse', () {
+    test('hello_world', () {
+      var helloWorld = new File('test/hello_world/hello_world.js.info.json');
+      var json = jsonDecode(helloWorld.readAsStringSync());
+      var decoded = new AllInfoJsonCodec().decode(json);
+
+      var program = decoded.program;
+      expect(program, isNotNull);
+
+      expect(program.entrypoint, isNotNull);
+      expect(program.size, 10324);
+      expect(program.compilationMoment,
+          DateTime.parse("2017-04-17 09:46:41.661617"));
+      expect(program.compilationDuration, new Duration(microseconds: 357402));
+      expect(program.toJsonDuration, new Duration(milliseconds: 4));
+      expect(program.dumpInfoDuration, new Duration(seconds: 0));
+      expect(program.noSuchMethodEnabled, false);
+      expect(program.minified, false);
+    });
+  });
+}
diff --git a/pkg/dart2js_info/tool/update_proto.sh b/pkg/dart2js_info/tool/update_proto.sh
new file mode 100755
index 0000000..c784edd
--- /dev/null
+++ b/pkg/dart2js_info/tool/update_proto.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+set -e
+
+if [ -z "$1" ]; then
+    echo "Expected exactly one argument which is the protoc_plugin version to use"
+else
+    echo "Using protoc_plugin version $1"
+    pub global activate protoc_plugin "$1"
+fi
+
+protoc --proto_path="." --dart_out=lib/src/proto info.proto
+dartfmt -w lib/src/proto
diff --git a/pkg/front_end/testcases/general/issue46863.dart b/pkg/front_end/testcases/general/issue46863.dart
new file mode 100644
index 0000000..7fac3cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+final foo = [() => const [], () => bar()];
+
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect
new file mode 100644
index 0000000..43f504e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+final foo = [() => const [], () => bar()];
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..43f504e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+final foo = [() => const [], () => bar()];
+final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+main() {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.expect
new file mode 100644
index 0000000..20ac68c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo = <() → invalid-type>[() → core::List<dynamic> => #C1, () → invalid-type => invalid-expression "pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+final foo = [() => const [], () => bar()];
+                                   ^^^"];
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2 = <(invalid-type) → core::List<dynamic>>[(dynamic x) → core::List<dynamic> => #C1, (invalid-type x) → core::List<dynamic> => #C1];
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3 = <(core::List<dynamic>) → core::List<dynamic>>[(core::List<dynamic> x) → core::List<dynamic> => #C1, (core::List<invalid-type> x) → core::List<dynamic> => #C1];
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4 = <((invalid-type) → dynamic) → core::List<dynamic>>[((dynamic) → dynamic x) → core::List<dynamic> => #C1, ((invalid-type) → dynamic x) → core::List<dynamic> => #C1];
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect
new file mode 100644
index 0000000..29337e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.outline.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo;
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2;
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3;
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect
new file mode 100644
index 0000000..2b1b44d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.transformed.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo = core::_GrowableList::_literal2<() → invalid-type>(() → core::List<dynamic> => #C1, () → invalid-type => invalid-expression "pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+final foo = [() => const [], () => bar()];
+                                   ^^^");
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2 = core::_GrowableList::_literal2<(invalid-type) → core::List<dynamic>>((dynamic x) → core::List<dynamic> => #C1, (invalid-type x) → core::List<dynamic> => #C1);
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3 = core::_GrowableList::_literal2<(core::List<dynamic>) → core::List<dynamic>>((core::List<dynamic> x) → core::List<dynamic> => #C1, (core::List<invalid-type> x) → core::List<dynamic> => #C1);
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4 = core::_GrowableList::_literal2<((invalid-type) → dynamic) → core::List<dynamic>>(((dynamic) → dynamic x) → core::List<dynamic> => #C1, ((invalid-type) → dynamic x) → core::List<dynamic> => #C1);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 81e1974..61590da 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -267,6 +267,10 @@
 
   DartType getNullabilityAwareStandardLowerBoundInternal(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
+
     // DOWN(T1, T2) where TOP(T1) and TOP(T2) =
     //   T1 if MORETOP(T2, T1)
     //   T2 otherwise
@@ -629,6 +633,10 @@
 
   DartType getNullabilityAwareStandardUpperBoundInternal(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
+
     // UP(T1, T2) where TOP(T1) and TOP(T2) =
     //   T1 if MORETOP(T1, T2)
     //   T2 otherwise
diff --git a/tools/VERSION b/tools/VERSION
index 26ef3d9..2200454 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 3
+PRERELEASE 4
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 8faa484..c9ce212 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3465,13 +3465,6 @@
       },
       "steps": [
         {
-          "name": "validate pkg/ pubspec files",
-          "script": "tools/sdks/dart-sdk/bin/dart",
-          "arguments": [
-            "tools/package_deps/bin/package_deps.dart"
-          ]
-        },
-        {
           "name": "validate .dart_tool/package_config.json",
           "script": "tools/sdks/dart-sdk/bin/dart",
           "arguments": [