Version 0.8.10.10

svn merge -r29786:29787 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

R=kasperl@google.com

Review URL: https://codereview.chromium.org//66373002

git-svn-id: http://dart.googlecode.com/svn/trunk@30104 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/lib/compiler/implementation/lib/web.dart b/lib/compiler/implementation/lib/web.dart
new file mode 100644
index 0000000..a75db7b
--- /dev/null
+++ b/lib/compiler/implementation/lib/web.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2012, 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("web");
+
+String htmlEscape(String text) {
+  throw "Unimplemented: web::htmlEscape(String).";
+}
diff --git a/lib/compiler/implementation/lib/web.dartp b/lib/compiler/implementation/lib/web.dartp
new file mode 100644
index 0000000..c3ba2ad
--- /dev/null
+++ b/lib/compiler/implementation/lib/web.dartp
@@ -0,0 +1,13 @@
+// Copyright (c) 2012, 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.
+
+// Patch file for dart:web
+
+/*patch*/ String htmlEscape(String text) {
+  return text.replaceAll("&", "&")
+             .replaceAll("<", "&lt;")
+             .replaceAll(">", "&gt;")
+             .replaceAll('"', "&quot;")
+             .replaceAll("'", "&apos;");  // Different from original.
+}
diff --git a/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate b/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate
new file mode 100644
index 0000000..8fe27e5
--- /dev/null
+++ b/lib/dom/templates/html/dartium/factoryprovider__Elements.darttemplate
@@ -0,0 +1,7 @@
+// Copyright (c) 2012, 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.
+
+class _Elements {
+
+$!FACTORY_METHODS}
diff --git a/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate b/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate
new file mode 100644
index 0000000..1b4a00d
--- /dev/null
+++ b/lib/dom/templates/html/dartium/impl_EventTarget.darttemplate
@@ -0,0 +1,106 @@
+// Copyright (c) 2012, 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.
+
+class _EventsImpl implements Events {
+  // TODO(podivilov): add type.
+  final _ptr;
+
+  final Map<String, EventListenerList> _listenerMap;
+
+  _EventsImpl(this._ptr) : _listenerMap = <EventListenerList>{};
+
+  EventListenerList operator [](String type) {
+    return _listenerMap.putIfAbsent(type,
+      () => new _EventListenerListImpl(_ptr, type));
+  }
+}
+
+class _EventListenerWrapper {
+  final EventListener raw;
+  final Function wrapped;
+  final bool useCapture;
+  _EventListenerWrapper(this.raw, this.wrapped, this.useCapture);
+}
+
+class _EventListenerListImpl implements EventListenerList {
+  // TODO(podivilov): add type.
+  final _ptr;
+  final String _type;
+  List<_EventListenerWrapper> _wrappers;
+
+  _EventListenerListImpl(this._ptr, this._type) :
+    // TODO(jacobr): switch to <_EventListenerWrapper>[] when the VM allow it.
+    _wrappers = new List<_EventListenerWrapper>();
+
+  EventListenerList add(EventListener listener, [bool useCapture = false]) {
+    _add(listener, useCapture);
+    return this;
+  }
+
+  EventListenerList remove(EventListener listener, [bool useCapture = false]) {
+    _remove(listener, useCapture);
+    return this;
+  }
+
+  bool dispatch(Event evt) {
+    // TODO(jacobr): what is the correct behavior here. We could alternately
+    // force the event to have the expected type.
+    assert(evt.type == _type);
+    return _ptr.$dom_dispatchEvent(evt);
+  }
+
+  void _add(EventListener listener, bool useCapture) {
+    _ptr.$dom_addEventListener(_type,
+                          _findOrAddWrapper(listener, useCapture),
+                          useCapture);
+  }
+
+  void _remove(EventListener listener, bool useCapture) {
+    Function wrapper = _removeWrapper(listener, useCapture);
+    if (wrapper !== null) {
+      _ptr.$dom_removeEventListener(_type, wrapper, useCapture);
+    }
+  }
+
+  Function _removeWrapper(EventListener listener, bool useCapture) {
+    if (_wrappers === null) {
+      return null;
+    }
+    for (int i = 0; i < _wrappers.length; i++) {
+      _EventListenerWrapper wrapper = _wrappers[i];
+      if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
+        // Order doesn't matter so we swap with the last element instead of
+        // performing a more expensive remove from the middle of the list.
+        if (i + 1 != _wrappers.length) {
+          _wrappers[i] = _wrappers.removeLast();
+        } else {
+          _wrappers.removeLast();
+        }
+        return wrapper.wrapped;
+      }
+    }
+    return null;
+  }
+
+  Function _findOrAddWrapper(EventListener listener, bool useCapture) {
+    if (_wrappers === null) {
+      _wrappers = <_EventListenerWrapper>[];
+    } else {
+      for (_EventListenerWrapper wrapper in _wrappers) {
+        if (wrapper.raw === listener && wrapper.useCapture == useCapture) {
+          return wrapper.wrapped;
+        }
+      }
+    }
+    final wrapped = (e) { listener(e); };
+    _wrappers.add(new _EventListenerWrapper(listener, wrapped, useCapture));
+    return wrapped;
+  }
+}
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+/*
+$!MEMBERS
+*/
+}
diff --git a/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate b/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate
new file mode 100644
index 0000000..8fe27e5
--- /dev/null
+++ b/lib/dom/templates/html/frog/factoryprovider__Elements.darttemplate
@@ -0,0 +1,7 @@
+// Copyright (c) 2012, 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.
+
+class _Elements {
+
+$!FACTORY_METHODS}
diff --git a/lib/dom/templates/html/frog/impl_EventTarget.darttemplate b/lib/dom/templates/html/frog/impl_EventTarget.darttemplate
new file mode 100644
index 0000000..893f3d2
--- /dev/null
+++ b/lib/dom/templates/html/frog/impl_EventTarget.darttemplate
@@ -0,0 +1,61 @@
+// Copyright (c) 2012, 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.
+
+class _EventsImpl implements Events {
+  /* Raw event target. */
+  // TODO(jacobr): it would be nice if we could specify this as
+  // _EventTargetImpl or EventTarget
+  final Dynamic _ptr;
+
+  _EventsImpl(this._ptr);
+
+  _EventListenerListImpl operator [](String type) {
+    return new _EventListenerListImpl(_ptr, type);
+  }
+}
+
+class _EventListenerListImpl implements EventListenerList {
+  
+  // TODO(jacobr): make this _EventTargetImpl
+  final Dynamic _ptr;
+  final String _type;
+
+  _EventListenerListImpl(this._ptr, this._type);
+
+  // TODO(jacobr): implement equals.
+
+  _EventListenerListImpl add(EventListener listener,
+      [bool useCapture = false]) {
+    _add(listener, useCapture);
+    return this;
+  }
+
+  _EventListenerListImpl remove(EventListener listener,
+      [bool useCapture = false]) {
+    _remove(listener, useCapture);
+    return this;
+  }
+
+  bool dispatch(Event evt) {
+    // TODO(jacobr): what is the correct behavior here. We could alternately
+    // force the event to have the expected type.
+    assert(evt.type == _type);
+    return _ptr.$dom_dispatchEvent(evt);
+  }
+
+  void _add(EventListener listener, bool useCapture) {
+    _ptr.$dom_addEventListener(_type, listener, useCapture);
+  }
+
+  void _remove(EventListener listener, bool useCapture) {
+    _ptr.$dom_removeEventListener(_type, listener, useCapture);
+  }
+}
+
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  Events get on() => new _EventsImpl(this);
+$!MEMBERS
+}
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart
index 7f79c5d..c7beef7 100644
--- a/pkg/analyzer/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart
@@ -12,7 +12,6 @@
 import 'generated/source_io.dart';
 import 'generated/sdk.dart';
 import 'generated/sdk_io.dart';
-import 'generated/ast.dart';
 import 'generated/element.dart';
 import '../options.dart';
 
@@ -51,22 +50,8 @@
     var sourceFile = new JavaFile(sourcePath);
     var uriKind = getUriKind(sourceFile);
     var librarySource = new FileBasedSource.con2(contentCache, sourceFile, uriKind);
-    // prepare context
-    prepareAnalysisContext(sourceFile);
-    // don't try to analyzer parts
-    var unit = context.parseCompilationUnit(librarySource);
-    var hasLibraryDirective = false;
-    var hasPartOfDirective = false;
-    for (var directive in unit.directives) {
-      if (directive is LibraryDirective) hasLibraryDirective = true;
-      if (directive is PartOfDirective) hasPartOfDirective = true;
-    }
-    if (hasPartOfDirective && !hasLibraryDirective) {
-      print("Only libraries can be analyzed.");
-      print("$sourceFile is a part and can not be analyzed.");
-      return;
-    }
     // resolve library
+    prepareAnalysisContext(sourceFile);
     var libraryElement = context.computeLibraryElement(librarySource);
     // prepare source and errors
     prepareSources(libraryElement);
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index ae88fb2..4e444ce 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,11 +1,13 @@
 name: analyzer
-version: 0.10.0
+version: 0.10.1
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: http://www.dartlang.org
 dependencies:
-  args: ">=0.8.9 <1.0.0"
-  logging: ">=0.8.9 <1.0.0"
-  path: ">=0.8.9 <1.0.0"
+  args: ">=0.9.0 <0.10.0"
+  logging: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: ">=0.8.9 <1.0.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/analyzer_experimental/lib/src/services/runtime/coverage_impl.dart b/pkg/analyzer_experimental/lib/src/services/runtime/coverage_impl.dart
new file mode 100644
index 0000000..df37f7b
--- /dev/null
+++ b/pkg/analyzer_experimental/lib/src/services/runtime/coverage_impl.dart
@@ -0,0 +1,157 @@
+// Copyright (c) 2013, 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 for code coverage support for Dart.
+library runtime.coverage_impl;
+
+import "dart:io";
+
+import "package:logging/logging.dart" as log;
+import "package:pathos/path.dart" as po;
+
+import 'package:analyzer_experimental/src/generated/source.dart' show Source;
+import 'package:analyzer_experimental/src/generated/scanner.dart' show StringScanner;
+import 'package:analyzer_experimental/src/generated/parser.dart' show Parser;
+import 'package:analyzer_experimental/src/generated/ast.dart';
+import 'package:analyzer_experimental/src/generated/engine.dart' show RecordingErrorListener;
+
+
+log.Logger logger = log.Logger.root;
+
+/// Abstract server that listens requests and serves files, may be rewriting them.
+abstract class RewriteServer {
+  String _basePath;
+  RewriteServer(this._basePath);
+  void start() {
+    HttpServer.bind("127.0.0.1", 3445).then((HttpServer server) {
+      logger.info('RewriteServer is listening at: ${server.port}.');
+      server.listen((HttpRequest request) {
+        var response = request.response;
+        // Prepare path.
+        var path = _basePath + '/' + request.uri.path;
+        path = po.normalize(path);
+        logger.info('[$path] Requested.');
+        // May be serve using just path.
+        {
+          String content = rewritePathContent(path);
+          if (content != null) {
+            logger.info('[$path] Request served by path.');
+            response.write(content);
+            response.close();
+            return;
+          }
+        }
+        // Serve from file.
+        logger.info('[$path] Serving file.');
+        var file = new File(path);
+        file.exists().then((bool found) {
+          if (found) {
+            logger.finest('[$path] Found file.');
+            file.readAsString().then((String content) {
+              logger.finest('[$path] Got file content.');
+              var sw = new Stopwatch();
+              sw.start();
+              try {
+                content = rewriteFileContent(path, content);
+              } finally {
+                sw.stop();
+                logger.fine('[$path] Rewritten in ${sw.elapsedMilliseconds} ms.');
+              }
+              response.write(content);
+              response.close();
+            });
+          } else {
+            logger.severe('[$path] File not found.');
+            response.statusCode = HttpStatus.NOT_FOUND;
+            response.close();
+          }
+        });
+      });
+    });
+  }
+
+  /// Subclasses implement this method to rewrite the provided [code] of the file with [path].
+  /// Returns some content or `null` if file content should be requested.
+  String rewritePathContent(String path);
+
+  /// Subclasses implement this method to rewrite the provided [code] of the file with [path].
+  String rewriteFileContent(String path, String code);
+}
+
+/// Server that rewrites Dart code so that it reports execution of statements and other nodes.
+class CoverageServer extends RewriteServer {
+  CoverageServer(String basePath) : super(basePath);
+
+  String rewritePathContent(String path) {
+    if (path.endsWith('__coverage_impl.dart')) {
+      String implPath = po.joinAll([
+          po.dirname(new Options().script),
+          '..', 'lib', 'src', 'services', 'runtime', 'coverage_lib.dart']);
+      return new File(implPath).readAsStringSync();
+    }
+    return null;
+  }
+
+  String rewriteFileContent(String path, String code) {
+    if (po.extension(path).toLowerCase() != '.dart') return code;
+    if (path.contains('packages')) return code;
+    var unit = _parseCode(code);
+    var injector = new StringInjector(code);
+    // Inject coverage library import.
+    var directives = unit.directives;
+    if (directives.isNotEmpty && directives[0] is LibraryDirective) {
+      injector.inject(directives[0].end, 'import "__coverage_impl.dart" as __cc;');
+    } else {
+      throw new Exception('Only single library coverage is implemented.');
+    }
+    // Insert touch() invocations.
+    unit.accept(new InsertTouchInvocationsVisitor(injector));
+    // Done.
+    code = injector.code;
+    logger.finest('[$path] Rewritten content\n$code');
+    return code;
+  }
+
+  CompilationUnit _parseCode(String code) {
+    var source = null;
+    var errorListener = new RecordingErrorListener();
+    var parser = new Parser(source, errorListener);
+    var scanner = new StringScanner(source, code, errorListener);
+    var token = scanner.tokenize();
+    return parser.parseCompilationUnit(token);
+  }
+}
+
+/// The visitor that inserts `touch` method invocations.
+class InsertTouchInvocationsVisitor extends GeneralizingASTVisitor {
+  StringInjector injector;
+  InsertTouchInvocationsVisitor(this.injector);
+  visitStatement(Statement node) {
+    super.visitStatement(node);
+    var offset = node.end;
+    if (node is Block) {
+      offset--;
+    }
+    if (node is Block && node.parent is BlockFunctionBody) return null;
+    injector.inject(offset, '__cc.touch(${node.offset});');
+    return null;
+  }
+}
+
+/// Helper for injecting fragments into some existing [String].
+class StringInjector {
+  String code;
+  int _lastOffset = -1;
+  int _delta = 0;
+  StringInjector(this.code);
+  void inject(int offset, String fragment) {
+    if (offset < _lastOffset) {
+      throw new ArgumentError('Only forward inserts are supported, was $_lastOffset given $offset');
+    }
+    _lastOffset = offset;
+    offset += _delta;
+    code = code.substring(0, offset) + fragment + code.substring(offset);
+    _delta += fragment.length;
+  }
+}
\ No newline at end of file
diff --git a/pkg/analyzer_experimental/lib/src/services/runtime/coverage_lib.dart b/pkg/analyzer_experimental/lib/src/services/runtime/coverage_lib.dart
new file mode 100644
index 0000000..945b38f
--- /dev/null
+++ b/pkg/analyzer_experimental/lib/src/services/runtime/coverage_lib.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2013, 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 library is injected into the applications under coverage.
+library coverage_lib;
+
+/// Notifies that the object with the given [id] - statement, token, etc was executed.
+touch(int id) {
+  print('touch: $id');
+}
diff --git a/pkg/analyzer_experimental/lib/src/utils.dart b/pkg/analyzer_experimental/lib/src/utils.dart
new file mode 100644
index 0000000..2b5053e
--- /dev/null
+++ b/pkg/analyzer_experimental/lib/src/utils.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2013, 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 utils;
+
+import 'dart:io';
+
+import 'package:pathos/path.dart' as pathos;
+
+/// Converts a local path string to a `file:` [Uri].
+Uri pathToFileUri(String pathString) {
+  pathString = pathos.absolute(pathString);
+  if (Platform.operatingSystem != 'windows') {
+    return Uri.parse('file://$pathString');
+  } else if (pathos.rootPrefix(pathString).startsWith('\\\\')) {
+    // Network paths become "file://hostname/path/to/file".
+    return Uri.parse('file:${pathString.replaceAll("\\", "/")}');
+  } else {
+    // Drive-letter paths become "file:///C:/path/to/file".
+    return Uri.parse('file:///${pathString.replaceAll("\\", "/")}');
+  }
+}
diff --git a/pkg/args/pubspec.yaml b/pkg/args/pubspec.yaml
index 5e460f3..2d7a086 100644
--- a/pkg/args/pubspec.yaml
+++ b/pkg/args/pubspec.yaml
@@ -1,4 +1,5 @@
 name: args
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/args
@@ -7,6 +8,8 @@
  a set of options and values using GNU and POSIX style options.
 
 dependencies:
-  unmodifiable_collection: any
+  unmodifiable_collection: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/async_helper/pubspec.yaml b/pkg/async_helper/pubspec.yaml
index e4f33de..2dc33fd 100644
--- a/pkg/async_helper/pubspec.yaml
+++ b/pkg/async_helper/pubspec.yaml
@@ -1,4 +1,5 @@
 name: async_helper
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -7,3 +8,5 @@
  language tests.
  Third parties are discouraged from using this, and should use
  the facilities provided in the unittest library.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/barback/pubspec.yaml b/pkg/barback/pubspec.yaml
index 9cebb0b..3c51019 100644
--- a/pkg/barback/pubspec.yaml
+++ b/pkg/barback/pubspec.yaml
@@ -1,4 +1,5 @@
 name: barback
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -12,9 +13,11 @@
   Runs transforms asynchronously and in parallel when possible to maximize
   responsiveness.
 dependencies:
-  path: any
-  source_maps: any
-  stack_trace: any
+  path: ">=0.9.0 <0.10.0"
+  source_maps: ">=0.9.0 <0.10.0"
+  stack_trace: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  scheduled_test: any
-  unittest: any
+  scheduled_test: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/browser/pubspec.yaml b/pkg/browser/pubspec.yaml
index be2a78d..635ca17 100644
--- a/pkg/browser/pubspec.yaml
+++ b/pkg/browser/pubspec.yaml
@@ -1,5 +1,8 @@
 name: browser
+version: 0.9.0
 authors: ["Dart Team <misc@dartlang.org>"]
 homepage: http://www.dartlang.org
 description: >
  The bootstrap dart.js script for Dart apps running in the browser.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/collection_helpers/pubspec.yaml b/pkg/collection_helpers/pubspec.yaml
index a0513ef..a9a23cf 100644
--- a/pkg/collection_helpers/pubspec.yaml
+++ b/pkg/collection_helpers/pubspec.yaml
@@ -1,6 +1,9 @@
 name: collection_helpers
+version: 0.9.0
 author: '"Dart Team <misc@dartlang.org>"'
 description: Utility functions and classes for working with collections.
 homepage: http://www.dartlang.org
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/crypto/pubspec.yaml b/pkg/crypto/pubspec.yaml
index 3fd7917..f9d7d93 100644
--- a/pkg/crypto/pubspec.yaml
+++ b/pkg/crypto/pubspec.yaml
@@ -1,6 +1,9 @@
 name: crypto
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/crypto
 description: >
  Library of cryptographic functions.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/csslib/pubspec.yaml b/pkg/csslib/pubspec.yaml
index b821941..a995672 100644
--- a/pkg/csslib/pubspec.yaml
+++ b/pkg/csslib/pubspec.yaml
@@ -1,12 +1,15 @@
 name: csslib
+version: 0.9.0
 author: "Web UI Team <web-ui-dev@dartlang.org>"
 description: A library for parsing CSS.
 homepage: https://www.dartlang.org
 dependencies:
-  args: any
-  logging: any
-  path: any
-  source_maps: any
+  args: ">=0.9.0 <0.10.0"
+  logging: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  source_maps: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  browser: any
-  unittest: any
+  browser: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/custom_element/lib/custom_element.dart b/pkg/custom_element/lib/custom_element.dart
index 7bdb00c..ab285ae 100644
--- a/pkg/custom_element/lib/custom_element.dart
+++ b/pkg/custom_element/lib/custom_element.dart
@@ -35,7 +35,6 @@
   /** The web component element wrapped by this class. */
   Element _host;
   List _shadowRoots;
-  _AttributeMap _attributes;
 
   /**
    * Shadow roots generated by dwc for each custom element, indexed by the
@@ -107,7 +106,8 @@
   void leftView() {}
 
   /** Invoked when any attribute of the component is modified. */
-  void attributeChanged(String name, String oldValue) {}
+  void attributeChanged(String name, String oldValue, String newValue) =>
+      host.attributeChanged(name, oldValue, newValue);
 
   // TODO(efortuna): Update these when we decide what to do with these
   // properties.
@@ -155,7 +155,7 @@
 
   String get nodeName => host.nodeName;
 
-  Document get document => host.document;
+  Document get ownerDocument => host.ownerDocument;
 
   Node get previousNode => host.previousNode;
 
@@ -173,12 +173,9 @@
   Node insertAllBefore(Iterable<Node> newChild, Node refChild) =>
     host.insertAllBefore(newChild, refChild);
 
-  Map<String, String> get attributes {
-    if (_attributes == null) _attributes = new _AttributeMap(this);
-    return _attributes;
-  }
+  Map<String, String> get attributes => host.attributes;
   set attributes(Map<String, String> value) {
-    (attributes as _AttributeMap)._replaceAll(value);
+    host.attributes = value;
   }
 
   List<Element> get elements => host.children;
@@ -237,12 +234,6 @@
   String get id => host.id;
   set id(String v) { host.id = v; }
 
-  String get innerHTML => host.innerHtml;
-
-  void set innerHTML(String v) {
-    host.innerHtml = v;
-  }
-
   String get innerHtml => host.innerHtml;
   void set innerHtml(String v) {
     host.innerHtml = v;
@@ -253,10 +244,6 @@
     host.setInnerHtml(html, validator: validator, treeSanitizer: treeSanitizer);
   }
 
-  void set unsafeInnerHtml(String html) {
-    host.unsafeInnerHtml = html;
-  }
-
   DocumentFragment createFragment(String html,
       {NodeValidator validator, NodeTreeSanitizer treeSanitizer}) =>
     host.createFragment(html,
@@ -359,9 +346,16 @@
 
   void requestPointerLock() { host.requestPointerLock(); }
 
-  Element query(String selectors) => host.query(selectors);
+  Element querySelector(String selectors) => host.querySelector(selectors);
 
-  ElementList queryAll(String selectors) => host.queryAll(selectors);
+  ElementList querySelectorAll(String selectors) =>
+      host.querySelectorAll(selectors);
+
+  @deprecated
+  Element query(String selectors) => host.querySelector(selectors);
+
+  @deprecated
+  ElementList queryAll(String selectors) => host.querySelectorAll(selectors);
 
   String get className => host.className;
   set className(String value) { host.className = value; }
@@ -423,16 +417,16 @@
 
   int get nodeType => host.nodeType;
 
-  void $dom_addEventListener(String type, EventListener listener,
-                             [bool useCapture]) {
-    host.$dom_addEventListener(type, listener, useCapture);
+  void addEventListener(String type, EventListener listener,
+      [bool useCapture]) {
+    host.addEventListener(type, listener, useCapture);
   }
 
   bool dispatchEvent(Event event) => host.dispatchEvent(event);
 
-  void $dom_removeEventListener(String type, EventListener listener,
-                                [bool useCapture]) {
-    host.$dom_removeEventListener(type, listener, useCapture);
+  void removeEventListener(String type, EventListener listener,
+      [bool useCapture]) {
+    host.removeEventListener(type, listener, useCapture);
   }
 
   get xtag => host.xtag;
diff --git a/pkg/custom_element/pubspec.yaml b/pkg/custom_element/pubspec.yaml
index b4b268b..772a543 100644
--- a/pkg/custom_element/pubspec.yaml
+++ b/pkg/custom_element/pubspec.yaml
@@ -1,4 +1,5 @@
 name: custom_element
+version: 0.9.0
 author: "Web UI Team <web-ui-dev@dartlang.org>"
 homepage: http://www.dartlang.org/
 description: >
@@ -6,7 +7,8 @@
   with custom tag names, and then use those custom tag names as they would any
   standard tag.
 dependencies:
-  meta: any
-  mutation_observer: any
+  mutation_observer: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/docgen/README.md b/pkg/docgen/README.md
index ff0fac7..343d9c0 100644
--- a/pkg/docgen/README.md
+++ b/pkg/docgen/README.md
@@ -8,19 +8,6 @@
 about all classes, variables, functions, and methods defined in the library and 
 its imported libraries.
 
-### Quick Start: Common Commands 
-
-While standing in the `bin` directory:
-
-`dartdoc.py` generates all documentation and runs a local server with your html
-pages.
-
-`dartdoc.py -d` ONLY generates documentation for the SDK and all packages (no
-html pages generated and no server).
-
-`dartdoc.py -d -o package/to/document` ONLY generates documenation for the
-specified package.
-
 ### Generating files & uploading to Cloud Storage
 
 The viewer uses YAML files generated by the docgen package as the data 
diff --git a/pkg/docgen/bin/dartdoc.py b/pkg/docgen/bin/dartdoc.py
index da20cd8..7fa875b 100644
--- a/pkg/docgen/bin/dartdoc.py
+++ b/pkg/docgen/bin/dartdoc.py
@@ -2,12 +2,13 @@
 #
 # Copyright (c) 2013, 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.
+# BSD-style license that can be found in the LICENSE file. 
 
-# Run this script to generate documentation for a directory and serve
-# the results to localhost for viewing in the browser.
+""" Run this script to generate documentation for a directory and serve
+  the results to localhost for viewing in the browser.
+"""
 
-import optparse
+import argparse
 import os
 from os.path import join, dirname, abspath, exists
 import platform
@@ -18,142 +19,55 @@
 from upload_sdk import ExecuteCommand
 
 DIRECTORY = abspath(dirname(__file__))
-DART_DIR = dirname(dirname(dirname(DIRECTORY)))
-DART_EXECUTABLE = join(DART_DIR,
-    '%s/%s/dart-sdk/bin/dart' % (utils.BUILD_ROOT[utils.GuessOS()],
-    utils.GetBuildConf('release', utils.GuessArchitecture())))
-PUB = join(DART_DIR, 'sdk/bin/pub')
-DART2JS = join(DART_DIR, 'sdk/bin/dart2js')
-PACKAGE_ROOT = join(dirname(dirname(dirname(DART_EXECUTABLE[:-(len('dart'))]))),
-    'packages/')
-EXCLUDED_PACKAGES = ['browser', 'html_import', 'mutation_observer',
-    'pkg.xcodeproj', 'shadow_dom']
-
+DART = join(DIRECTORY, '../../../%s/%s/dart-sdk/bin/dart'
+    % (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release',
+    utils.GuessArchitecture())))
+PUB = join(DIRECTORY, '../../../sdk/bin/pub')
+DART2JS = join(DIRECTORY, '../../../sdk/bin/dart2js')
+PACKAGE_ROOT = join(DART[:-(len('dart'))], '../../packages/')
 
 def SetPackageRoot(path):
   global PACKAGE_ROOT
   if exists(path):
     PACKAGE_ROOT = abspath(path)
 
-
-def ParseArgs():
-  parser = optparse.OptionParser(description='Generate documentation and '
-    'display the resulting documentation in the browser.')
-  parser.add_option('--full-docs-only', '-d', dest='just_docs',
-      action='store_true', default=False,
-      help='Only generate documentation, no html output. (If no other '
-      'options are specified, will document the SDK and all packages in the '
-      'repository.)')
-  parser.add_option('--package-root', '-p', dest='pkg_root',
-      help='The package root for dart (default is in the build directory).',
-      action='store', default=PACKAGE_ROOT)
-  parser.add_option('--docgen-options', '-o',
-      dest='docgen_options', help='Options to pass to docgen. If no file to '
-      'document is specified, by default we generate all documenation for the '
-      'SDK and all packages in the dart repository in JSON.',
-      default='--json')
-  parser.add_option('--gae-sdk',
-      help='The path to the Google App Engine SDK. Defaults to the top level '
-      'dart directory.', default=PACKAGE_ROOT)
-  options, _ = parser.parse_args()
+def GetOptions():
+  parser = argparse.ArgumentParser(description='Runs docgen on the specified '
+    'library and displays the resulting documentation in the browser')
+  parser.add_argument('--package-root', dest='pkg_root',
+    help='The package root for dart (default is in the build directory).',
+    action='store', default=PACKAGE_ROOT)
+  docgen = [DART, '--checked', '--package-root=' + PACKAGE_ROOT,
+    join(DIRECTORY, 'docgen.dart'), '-h']
+  process = subprocess.Popen(docgen, stdout=subprocess.PIPE)
+  out, error = process.communicate()
+  parser.add_argument('--options', help=out)
+  parser.add_argument('--gae-sdk',
+    help='The path to the Google App Engine SDK.')
+  options = parser.parse_args()
   SetPackageRoot(options.pkg_root)
   return options
 
-
-def AddUserDocgenOptions(sdk_cmd, docgen_options, all_docs=False):
-  '''Expand the command with user specified docgen options.'''
-  specified_pkg = False
-  remove_append = False
-  append = '--append'
-  for option in docgen_options:
-    if '--package-root' in option:
-      specified_pkg = True
-    if option == append and all_docs:
-      remove_append = True
-  if remove_append:
-    docgen_options.remove(append)
-  if not specified_pkg:
-    sdk_cmd.extend(['--package-root=%s' % PACKAGE_ROOT])
-  sdk_cmd.extend(docgen_options)
-  return sdk_cmd
-
-
-def GenerateAllDocs(docgen_options):
-  '''Generate all documentation for the SDK and all packages in the repository.
-  We first attempt to run the quickest path to generate all docs, but if that
-  fails, we fall back on a slower option.'''
-  sdk_cmd = [DART_EXECUTABLE, 'docgen.dart', '--parse-sdk']
-  ExecuteCommand(AddUserDocgenOptions(sdk_cmd, docgen_options))
-
-  doc_dir = join(DART_DIR, 'pkg')
-  cmd_lst = [DART_EXECUTABLE, '--old_gen_heap_size=1024',
-      '--package-root=%s' % PACKAGE_ROOT, 'docgen.dart', '--append']
-  cmd_str = ' '.join(AddUserDocgenOptions(cmd_lst, docgen_options, True))
-  # Try to run all pkg docs together at once as it's fastest.
-  (return_code, _) = ExecuteCommandString('%s %s' % (cmd_str, doc_dir))
-  if return_code != 0:
-    # We failed to run all the pkg docs, so try to generate docs for each pkg
-    # individually.
-    failed_pkgs = []
-    for directory in os.listdir(join(DART_DIR, 'pkg')):
-      doc_dir = join(DART_DIR, 'pkg', directory)
-      if (directory not in EXCLUDED_PACKAGES and
-          os.path.isdir(doc_dir)):
-        (return_code, output) = ExecuteCommandString('%s %s' % (cmd_str,
-            doc_dir))
-        if return_code != 0:
-          failed_pkgs += [directory]
-    print ('Generated documentation, but failed to generate documentation for '
-        'the following packages, please investigate: %r' % failed_pkgs)
-
-
-def ExecuteCommandString(cmd):
-  '''A variant of the ExecuteCommand function that specifically executes a
-  particular command string in the shell context. When you execute a string, you
-  must execute in the shell.'''
-  print 'Executing: %s ' % cmd
-  pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-      shell=True)
-  output = pipe.communicate()
-  return (pipe.returncode, output)
-
-
 def main():
-  options = ParseArgs()
-  generate_all_docs = True
-  docgen_options = []
-  if options.docgen_options:
-    # If the user specified particular files to generate docs for, then don't
-    # generate docs for everything.
-    docgen_options = options.docgen_options.split()
-    last_option = docgen_options[-1]
-    if '=' not in last_option and exists(last_option):
-      generate_all_docs = False
-      docgen = [DART_EXECUTABLE, '--checked',
-          '--package-root=' + PACKAGE_ROOT, join(DIRECTORY, 'docgen.dart')]
-      docgen.extend(options.options.split())
-      ExecuteCommand(docgen)
-  if generate_all_docs:
-    GenerateAllDocs(docgen_options)
-  if not options.just_docs:
-    cwd = os.getcwd()
-    try:
-      ExecuteCommand(['git', 'clone', '-b', 'master',
-       'git://github.com/dart-lang/dartdoc-viewer.git'])
-      ExecuteCommand(['mv', 'docs', 'dartdoc-viewer/client/local'])
-      os.chdir('dartdoc-viewer/client/')
-      subprocess.call([PUB, 'install'])
-      subprocess.call([DART_EXECUTABLE, 'deploy.dart'])
-      server = subprocess.Popen(['python',
-        join(abspath(join(dirname(__file__), options.gae_sdk)),
-        'dev_appserver.py'), '..'])
-      print (
-        "\nPoint your browser to the address of the 'default' server below.")
-      raw_input("Press <RETURN> to terminate the server.\n\n")
-      server.terminate()
-    finally:
-      os.chdir(cwd)
-      subprocess.call(['rm', '-rf', 'dartdoc-viewer'])
+  options = GetOptions()
+  docgen = [DART, '--checked', '--package-root=' + PACKAGE_ROOT,
+    join(DIRECTORY, 'docgen.dart'), '--json',  '--package-root=' + PACKAGE_ROOT]
+  docgen.extend(options.options.split())
+  ExecuteCommand(docgen)
+  ExecuteCommand(['git', 'clone', '-b', 'master',
+   'git://github.com/dart-lang/dartdoc-viewer.git'])
+  ExecuteCommand(['mv', 'docs', 'dartdoc-viewer/client/local'])
+  os.chdir('dartdoc-viewer/client/')
+  subprocess.call([PUB, 'install'])
+  subprocess.call([DART, 'deploy.dart'])
+  server = subprocess.Popen(['python', 
+    join(abspath(join(dirname(__file__), options.gae_sdk)), 'dev_appserver.py'),
+    '..'])
+  print("\nPoint your browser to the address of the 'default' server below.")
+  raw_input("Press <RETURN> to terminate the server.\n\n")
+  server.terminate()
+  os.chdir('../..')
+  subprocess.call(['rm', '-rf', 'dartdoc-viewer'])
 
 if __name__ == '__main__':
   main()
diff --git a/pkg/docgen/bin/generate_all_docs.sh b/pkg/docgen/bin/generate_all_docs.sh
new file mode 100755
index 0000000..8d5d82c
--- /dev/null
+++ b/pkg/docgen/bin/generate_all_docs.sh
@@ -0,0 +1,6 @@
+# A simple shell script to generate all docs for the sdk and pkg directories
+# into the docs folder in this directory.
+# TODO(alanknight): This should get subsumed into the python scripts
+dart --package-root=$DART_SDK/../packages/ docgen.dart --parse-sdk --json
+dart --old_gen_heap_size=1024 --package-root=$DART_SDK/../packages/ docgen.dart \
+  --package-root=$DART_SDK/../packages/ --append --json $DART_SDK/../../../pkg
diff --git a/pkg/docgen/bin/upload_docgen.py b/pkg/docgen/bin/upload_docgen.py
index b598394..6a3ea08 100644
--- a/pkg/docgen/bin/upload_docgen.py
+++ b/pkg/docgen/bin/upload_docgen.py
@@ -4,13 +4,13 @@
 # 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 file will run docgen.dart on the SDK libraries, and upload them to
-  Google Cloud Storage for the documentation viewer.
+""" This file will run docgen.dart on the SDK libraries, and upload them to 
+  Google Cloud Storage for the documentation viewer. 
 """
 
 import optparse
 import os
-from os.path import join, dirname, abspath, exists
+from os.path import join, dirname, abspath, exists 
 import platform
 import subprocess
 import sys
@@ -19,18 +19,18 @@
 from upload_sdk import ExecuteCommand
 
 
-DART = abspath(join(dirname(__file__), '../../../%s/%s/dart-sdk/bin/dart'
-    % (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release',
+DART = abspath(join(dirname(__file__), '../../../%s/%s/dart-sdk/bin/dart' 
+    % (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release', 
     utils.GuessArchitecture()))))
-PACKAGE_ROOT = abspath(join(dirname(__file__), '../../../%s/%s/packages/'
-    % (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release',
+PACKAGE_ROOT = abspath(join(dirname(__file__), '../../../%s/%s/packages/' 
+    % (utils.BUILD_ROOT[utils.GuessOS()], utils.GetBuildConf('release', 
     utils.GuessArchitecture()))))
 GSUTIL = utils.GetBuildbotGSUtilPath()
 GS_SITE = 'gs://dartlang-docgen'
 DESCRIPTION='Runs docgen.dart on the SDK libraries, and uploads them to Google \
     Cloud Storage for the dartdoc-viewer. '
 # Allow us to override checking SVN's revision number. Useful for development
-# so we can upload docs from a branch using an SDK that was built on a
+# so we can upload docs from a branch using an SDK that was built on a 
 # revision newer than when the branch was forked.
 trustSVN = None
 
@@ -49,14 +49,14 @@
 def SetPackageRoot(path):
   global PACKAGE_ROOT
   if exists(path):
-    PACKAGE_ROOT = abspath(path)
+    PACKAGE_ROOT = abspath(path) 
 
 
 def SetGsutil():
   """ If not on buildbots, find gsutil relative to docgen. """
   global GSUTIL
   if not exists(GSUTIL):
-    GSUTIL = abspath(join(dirname(__file__),
+    GSUTIL = abspath(join(dirname(__file__), 
         '../../../third_party/gsutil/gsutil'))
 
 
@@ -73,42 +73,42 @@
   SetGsutil()
 
   # Execute Docgen.dart on the SDK.
-  ExecuteCommand(['python', 'dartdoc.py', '-d'])
-
+  ExecuteCommand(['sh', './generate_all_docs.sh'])
+  
   # Use SVN Revision to get the revision number.
   revision = None
   if trustSVN:
     revision = utils.GetSVNRevision()
 
   if revision is None:
-    # Try to find the version from the dart-sdk folder.
-    revision_file_location = abspath(join(dirname(__file__),
+    # Try to find the version from the dart-sdk folder. 
+    revision_file_location = abspath(join(dirname(__file__), 
         '../../../%s/%s/dart-sdk/revision' % (utils.BUILD_ROOT[utils.GuessOS()],
         utils.GetBuildConf('release', utils.GuessArchitecture()))))
     with open(revision_file_location, 'r') as revision_file:
       revision = revision_file.readline(5)
       revision_file.close()
-
+    
     if revision is None:
       raise Exception("Unable to find revision. ")
 
-  # Upload the all files in Docs into a folder based off Revision number on
+  # Upload the all files in Docs into a folder based off Revision number on 
   # Cloud Storage.
-  # TODO(alanknight): If we give it ./docs/* it fails to upload files in the
+  # TODO(alanknight): If we give it ./docs/* it fails to upload files in the 
   # subdirectory, probably due to escaping. Work around it by changing dir.
-  # Better, generalize this to be less dependent on the working directory.
+  # Better, generalize this to be less dependent on the working directory. 
   os.chdir('docs')
   Upload('.', GS_SITE + '/' + revision + '/')
   os.chdir('..')
 
-  # Update VERSION file in Cloud Storage.
+  # Update VERSION file in Cloud Storage. 
   with open('VERSION', 'w') as version_file:
     version_file.write(revision)
     version_file.close()
   Upload('./VERSION', GS_SITE + '/VERSION')
   Upload('./VERSION', GS_SITE + '/' + revision + '/' + 'VERSION')
 
-  # Clean up the files it creates.
+  # Clean up the files it creates. 
   ExecuteCommand(['rm', '-rf', './docs'])
   ExecuteCommand(['rm', '-f', './VERSION'])
 
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart
index b4aead3..4c1f85d 100644
--- a/pkg/docgen/lib/docgen.dart
+++ b/pkg/docgen/lib/docgen.dart
@@ -2,15 +2,17 @@
 // 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.
 
-/// **docgen** is a tool for creating machine readable representations of Dart
-/// code metadata, including: classes, members, comments and annotations.
-///
-/// docgen is run on a `.dart` file or a directory containing `.dart` files.
-///
-///      $ dart docgen.dart [OPTIONS] [FILE/DIR]
-///
-/// This creates files called `docs/<library_name>.yaml` in your current
-/// working directory.
+/**
+ * **docgen** is a tool for creating machine readable representations of Dart
+ * code metadata, including: classes, members, comments and annotations.
+ *
+ * docgen is run on a `.dart` file or a directory containing `.dart` files.
+ *
+ *      $ dart docgen.dart [OPTIONS] [FILE/DIR]
+ *
+ * This creates files called `docs/<library_name>.yaml` in your current
+ * working directory.
+ */
 library docgen;
 
 import 'dart:convert';
@@ -34,11 +36,12 @@
 
 var logger = new Logger('Docgen');
 
-const String USAGE = 'Usage: dart docgen.dart [OPTIONS] fooDir/barFile';
+const String USAGE = 'Usage: dart docgen.dart [OPTIONS] [fooDir/barFile]';
 
 
-List<String> skippedAnnotations = const [
-    'metadata.DocsEditable', 'metadata.DomName'];
+List<String> validAnnotations = const ['metadata.Experimental',
+    'metadata.DomName', 'metadata.Deprecated', 'metadata.Unstable',
+    'meta.deprecated', 'metadata.SupportedBrowser'];
 
 /// Current library being documented to be used for comment links.
 LibraryMirror _currentLibrary;
@@ -68,16 +71,18 @@
 /// Map of all the comments for dom elements from MDN.
 Map _mdn;
 
-/// Docgen constructor initializes the link resolver for markdown parsing.
-/// Also initializes the command line arguments.
-///
-/// [packageRoot] is the packages directory of the directory being analyzed.
-/// If [includeSdk] is `true`, then any SDK libraries explicitly imported will
-/// also be documented.
-/// If [parseSdk] is `true`, then all Dart SDK libraries will be documented.
-/// This option is useful when only the SDK libraries are needed.
-///
-/// Returned Future completes with true if document generation is successful.
+/**
+ * Docgen constructor initializes the link resolver for markdown parsing.
+ * Also initializes the command line arguments.
+ *
+ * [packageRoot] is the packages directory of the directory being analyzed.
+ * If [includeSdk] is `true`, then any SDK libraries explicitly imported will
+ * also be documented.
+ * If [parseSdk] is `true`, then all Dart SDK libraries will be documented.
+ * This option is useful when only the SDK libraries are needed.
+ *
+ * Returns `true` if docgen sucessfuly completes.
+ */
 Future<bool> docgen(List<String> files, {String packageRoot,
     bool outputToYaml: true, bool includePrivate: false, bool includeSdk: false,
     bool parseSdk: false, bool append: false, String introduction: ''}) {
@@ -106,16 +111,16 @@
         throw new StateError('No library mirrors were created.');
       }
       var librariesWeAskedFor = _listLibraries(files);
-      var librariesWeGot = mirrorSystem.libraries.values.where(
-          (each) => each.uri.scheme == 'file');
+      var librariesWeGot = mirrorSystem.libraries.values.where((each)
+          => each.uri.scheme == 'file');
       var sdkLibraries = mirrorSystem.libraries.values.where(
           (each) => each.uri.scheme == 'dart');
       var librariesWeGotByPath = new Map.fromIterables(
           librariesWeGot.map((each) => each.uri.toFilePath()),
           librariesWeGot);
-      var librariesToDocument = librariesWeAskedFor.map(
-          (each) => librariesWeGotByPath.putIfAbsent(each,
-              () => throw "Missing library $each")).toList();
+      var librariesToDocument = librariesWeAskedFor.map((each) =>
+        librariesWeGotByPath
+            .putIfAbsent(each, () => throw "Missing library $each")).toList();
       librariesToDocument.addAll((includeSdk || parseSdk) ? sdkLibraries : []);
       _documentLibraries(librariesToDocument, includeSdk: includeSdk,
           outputToYaml: outputToYaml, append: append, parseSdk: parseSdk,
@@ -213,7 +218,9 @@
   return packageRoot;
 }
 
-/// Read a pubspec and return the library name.
+/**
+ * Read a pubspec and return the library name.
+ */
 String _packageName(String pubspecName) {
   File pubspec = new File(pubspecName);
   if (!pubspec.existsSync()) return '';
@@ -233,8 +240,10 @@
   return sdk;
 }
 
-/// Analyzes set of libraries by getting a mirror system and triggers the
-/// documentation of the libraries.
+/**
+ * Analyzes set of libraries by getting a mirror system and triggers the
+ * documentation of the libraries.
+ */
 Future<MirrorSystem> getMirrorSystem(List<String> args, {String packageRoot,
     bool parseSdk: false}) {
   var libraries = !parseSdk ? _listLibraries(args) : _listSdk();
@@ -256,8 +265,10 @@
   return root;
 }
 
-/// Analyzes set of libraries and provides a mirror system which can be used
-/// for static inspection of the source code.
+/**
+ * Analyzes set of libraries and provides a mirror system which can be used
+ * for static inspection of the source code.
+ */
 Future<MirrorSystem> _analyzeLibraries(List<String> libraries,
       String libraryRoot, {String packageRoot}) {
   SourceFileProvider provider = new CompilerSourceFileProvider();
@@ -288,7 +299,9 @@
       });
 }
 
-/// Creates documentation for filtered libraries.
+/**
+ * Creates documentation for filtered libraries.
+ */
 void _documentLibraries(List<LibraryMirror> libs, {bool includeSdk: false,
     bool outputToYaml: true, bool append: false, bool parseSdk: false,
     String introduction: ''}) {
@@ -386,11 +399,13 @@
   _writeToFile(output, outputFile);
 }
 
-/// Returns true if a library name starts with an underscore, and false
-/// otherwise.
-///
-/// An example that starts with _ is _js_helper.
-/// An example that contains ._ is dart._collection.dev
+/**
+ * Returns true if a library name starts with an underscore, and false
+ * otherwise.
+ *
+ * An example that starts with _ is _js_helper.
+ * An example that contains ._ is dart._collection.dev
+ */
 // This is because LibraryMirror.isPrivate returns `false` all the time.
 bool _isLibraryPrivate(LibraryMirror mirror) {
   var sdkLibrary = LIBRARIES[mirror.simpleName];
@@ -403,7 +418,9 @@
   return false;
 }
 
-/// A declaration is private if itself is private, or the owner is private.
+/**
+ * A declaration is private if itself is private, or the owner is private.
+ */
 // Issue(12202) - A declaration is public even if it's owner is private.
 bool _isHidden(DeclarationMirror mirror) {
   if (mirror is LibraryMirror) {
@@ -419,7 +436,9 @@
   return _includePrivate || !item.isPrivate;
 }
 
-/// Returns a list of meta annotations assocated with a mirror.
+/**
+ * Returns a list of meta annotations assocated with a mirror.
+ */
 List<Annotation> _annotations(DeclarationMirror mirror) {
   var annotationMirrors = mirror.metadata.where((e) =>
       e is dart2js.Dart2JsConstructedConstantMirror);
@@ -430,7 +449,7 @@
       .map((e) => annotation.getField(e.simpleName).reflectee)
       .where((e) => e != null)
       .toList();
-    if (!skippedAnnotations.contains(docName(annotation.type))) {
+    if (validAnnotations.contains(docName(annotation.type))) {
       annotations.add(new Annotation(docName(annotation.type),
           parameterList));
     }
@@ -438,8 +457,10 @@
   return annotations;
 }
 
-/// Returns any documentation comments associated with a mirror with
-/// simple markdown converted to html.
+/**
+ * Returns any documentation comments associated with a mirror with
+ * simple markdown converted to html.
+ */
 String _commentToHtml(DeclarationMirror mirror) {
   String commentText;
   mirror.metadata.forEach((metadata) {
@@ -461,7 +482,9 @@
   return commentText;
 }
 
-/// Generates MDN comments from database.json.
+/**
+ * Generates MDN comments from database.json.
+ */
 void _mdnComment(Indexable item) {
   //Check if MDN is loaded.
   if (_mdn == null) {
@@ -480,7 +503,9 @@
   if (parts.length == 1) item.comment = _mdnTypeComment(parts[0]);
 }
 
-/// Generates the MDN Comment for variables and method DOM elements.
+/**
+ * Generates the MDN Comment for variables and method DOM elements.
+ */
 String _mdnMemberComment(String type, String member) {
   var mdnType = _mdn[type];
   if (mdnType == null) return '';
@@ -492,7 +517,9 @@
   return _htmlMdn(mdnMember['help'], mdnMember['url']);
 }
 
-/// Generates the MDN Comment for class DOM elements.
+/**
+ * Generates the MDN Comment for class DOM elements.
+ */
 String _mdnTypeComment(String type) {
   var mdnType = _mdn[type];
   if (mdnType == null) return '';
@@ -506,7 +533,9 @@
       '<a href="' + url.trim() + '">from Mdn</a></p></div>';
 }
 
-/// Converts all [foo] references in comments to <a>libraryName.foo</a>.
+/**
+ * Converts all [foo] references in comments to <a>libraryName.foo</a>.
+ */
 markdown.Node fixReference(String name, LibraryMirror currentLibrary,
     ClassMirror currentClass, MemberMirror currentMember) {
   var reference;
@@ -528,7 +557,9 @@
   return new markdown.Element.text('a', reference);
 }
 
-/// Returns a map of [Variable] objects constructed from [mirrorMap].
+/**
+ * Returns a map of [Variable] objects constructed from [mirrorMap].
+ */
 Map<String, Variable> _variables(Map<String, VariableMirror> mirrorMap) {
   var data = {};
   // TODO(janicejl): When map to map feature is created, replace the below with
@@ -546,7 +577,9 @@
   return data;
 }
 
-/// Returns a map of [Method] objects constructed from [mirrorMap].
+/**
+ * Returns a map of [Method] objects constructed from [mirrorMap].
+ */
 MethodGroup _methods(Map<String, MethodMirror> mirrorMap) {
   var group = new MethodGroup();
   mirrorMap.forEach((String mirrorName, MethodMirror mirror) {
@@ -557,8 +590,10 @@
   return group;
 }
 
-/// Returns the [Class] for the given [mirror] has already been created, and if
-/// it does not exist, creates it.
+/**
+ * Returns the [Class] for the given [mirror] has already been created, and if
+ * it does not exist, creates it.
+ */
 Class _class(ClassMirror mirror) {
   var clazz = entityMap[docName(mirror)];
   if (clazz == null) {
@@ -578,7 +613,9 @@
   return clazz;
 }
 
-/// Returns a map of [Class] objects constructed from [mirrorMap].
+/**
+ * Returns a map of [Class] objects constructed from [mirrorMap].
+ */
 ClassGroup _classes(Map<String, ClassMirror> mirrorMap) {
   var group = new ClassGroup();
   mirrorMap.forEach((String mirrorName, ClassMirror mirror) {
@@ -587,7 +624,9 @@
   return group;
 }
 
-/// Returns a map of [Parameter] objects constructed from [mirrorList].
+/**
+ * Returns a map of [Parameter] objects constructed from [mirrorList].
+ */
 Map<String, Parameter> _parameters(List<ParameterMirror> mirrorList) {
   var data = {};
   mirrorList.forEach((ParameterMirror mirror) {
@@ -600,20 +639,26 @@
   return data;
 }
 
-/// Returns a map of [Generic] objects constructed from the class mirror.
+/**
+ * Returns a map of [Generic] objects constructed from the class mirror.
+ */
 Map<String, Generic> _generics(ClassMirror mirror) {
   return new Map.fromIterable(mirror.typeVariables,
       key: (e) => e.toString(),
       value: (e) => new Generic(e.toString(), e.upperBound.qualifiedName));
 }
 
-/// Returns a single [Type] object constructed from the Method.returnType
-/// Type mirror.
+/**
+ * Returns a single [Type] object constructed from the Method.returnType
+ * Type mirror.
+ */
 Type _type(TypeMirror mirror) {
   return new Type(docName(mirror), _typeGenerics(mirror));
 }
 
-/// Returns a list of [Type] objects constructed from TypeMirrors.
+/**
+ * Returns a list of [Type] objects constructed from TypeMirrors.
+ */
 List<Type> _typeGenerics(TypeMirror mirror) {
   if (mirror is ClassMirror && !mirror.isTypedef) {
     var innerList = [];
@@ -625,7 +670,9 @@
   return [];
 }
 
-/// Writes text to a file in the 'docs' directory.
+/**
+ * Writes text to a file in the 'docs' directory.
+ */
 void _writeToFile(String text, String filename, {bool append: false}) {
   Directory dir = new Directory('docs');
   if (!dir.existsSync()) {
@@ -646,7 +693,9 @@
   file.writeAsStringSync(text, mode: append ? FileMode.APPEND : FileMode.WRITE);
 }
 
-/// Transforms the map by calling toMap on each value in it.
+/**
+ * Transforms the map by calling toMap on each value in it.
+ */
 Map recurseMap(Map inputMap) {
   var outputMap = {};
   inputMap.forEach((key, value) {
@@ -659,7 +708,9 @@
   return outputMap;
 }
 
-/// A class representing all programming constructs, like library or class.
+/**
+ * A class representing all programming constructs, like library or class.
+ */
 class Indexable {
   String name;
   String get qualifiedName => fileName;
@@ -691,7 +742,9 @@
   /// The type of this member to be used in index.txt.
   String get typeName => '';
 
-  /// Creates a [Map] with this [Indexable]'s name and a preview comment.
+  /**
+   * Creates a [Map] with this [Indexable]'s name and a preview comment.
+   */
   Map get previewMap {
     var finalMap = { 'name' : name, 'qualifiedName' : qualifiedName };
     if (comment != '') {
@@ -708,7 +761,9 @@
   Map toMap() {}
 }
 
-/// A class containing contents of a Dart library.
+/**
+ * A class containing contents of a Dart library.
+ */
 class Library extends Indexable {
 
   /// Top-level variables in the library.
@@ -756,7 +811,9 @@
   String get typeName => 'library';
 }
 
-/// A class containing contents of a Dart class.
+/**
+ * A class containing contents of a Dart class.
+ */
 class Class extends Indexable {
 
   /// List of the names of interfaces that this class implements.
@@ -795,26 +852,32 @@
 
   String get typeName => 'class';
 
-  /// Returns a list of all the parent classes.
+  /**
+   * Returns a list of all the parent classes.
+   */
   List<Class> parent() {
     var parent = superclass == null ? [] : [superclass];
     parent.addAll(interfaces);
     return parent;
   }
 
-  /// Add all inherited variables and methods from the provided superclass.
-  /// If [_includePrivate] is true, it also adds the variables and methods from
-  /// the superclass.
+  /**
+   * Add all inherited variables and methods from the provided superclass.
+   * If [_includePrivate] is true, it also adds the variables and methods from
+   * the superclass.
+   */
   void addInherited(Class superclass) {
     inheritedVariables.addAll(superclass.inheritedVariables);
     inheritedVariables.addAll(superclass.variables);
     inheritedMethods.addInherited(superclass);
   }
 
-  /// Add the subclass to the class.
-  ///
-  /// If [this] is private, it will add the subclass to the list of subclasses in
-  /// the superclasses.
+  /**
+   * Add the subclass to the class.
+   *
+   * If [this] is private, it will add the subclass to the list of subclasses in
+   * the superclasses.
+   */
   void addSubclass(Class subclass) {
     if (!_includePrivate && isPrivate) {
       if (superclass != null) superclass.addSubclass(subclass);
@@ -826,7 +889,9 @@
     }
   }
 
-  /// Check if this [Class] is an error or exception.
+  /**
+   * Check if this [Class] is an error or exception.
+   */
   bool isError() {
     if (qualifiedName == 'dart-core.Error' ||
         qualifiedName == 'dart-core.Exception')
@@ -838,10 +903,12 @@
     return superclass.isError();
   }
 
-  /// Check that the class exists in the owner library.
-  ///
-  /// If it does not exist in the owner library, it is a mixin applciation and
-  /// should be removed.
+  /**
+   * Check that the class exists in the owner library.
+   *
+   * If it does not exist in the owner library, it is a mixin applciation and
+   * should be removed.
+   */
   void makeValid() {
     var library = entityMap[owner];
     if (library != null && !library.classes.containsKey(name)) {
@@ -855,7 +922,9 @@
     }
   }
 
-  /// Makes sure that all methods with inherited equivalents have comments.
+  /**
+   * Makes sure that all methods with inherited equivalents have comments.
+   */
   void ensureComments() {
     inheritedMethods.forEach((qualifiedName, inheritedMethod) {
       var method = methods[qualifiedName];
@@ -863,8 +932,10 @@
     });
   }
 
-  /// If a class extends a private superclass, find the closest public superclass
-  /// of the private superclass.
+  /**
+   * If a class extends a private superclass, find the closest public superclass
+   * of the private superclass.
+   */
   String validSuperclass() {
     if (superclass == null) return 'dart.core.Object';
     if (_isVisible(superclass)) return superclass.qualifiedName;
@@ -890,8 +961,10 @@
   };
 }
 
-/// A container to categorize classes into the following groups: abstract
-/// classes, regular classes, typedefs, and errors.
+/**
+ * A container to categorize classes into the following groups: abstract
+ * classes, regular classes, typedefs, and errors.
+ */
 class ClassGroup {
   Map<String, Class> classes = {};
   Map<String, Typedef> typedefs = {};
@@ -933,7 +1006,9 @@
     }
   }
 
-  /// Checks if the given name is a key for any of the Class Maps.
+  /**
+   * Checks if the given name is a key for any of the Class Maps.
+   */
   bool containsKey(String name) {
     return classes.containsKey(name) || errors.containsKey(name);
   }
@@ -976,7 +1051,9 @@
   String get typeName => 'typedef';
 }
 
-/// A class containing properties of a Dart variable.
+/**
+ * A class containing properties of a Dart variable.
+ */
 class Variable extends Indexable {
 
   bool isFinal;
@@ -1008,7 +1085,9 @@
   String get typeName => 'property';
 }
 
-/// A class containing properties of a Dart method.
+/**
+ * A class containing properties of a Dart method.
+ */
 class Method extends Indexable {
 
   /// Parameters for this method.
@@ -1037,7 +1116,9 @@
     _mdnComment(this);
   }
 
-  /// Makes sure that the method with an inherited equivalent have comments.
+  /**
+   * Makes sure that the method with an inherited equivalent have comments.
+   */
   void ensureCommentFor(Method inheritedMethod) {
     if (comment.isNotEmpty) return;
     (entityMap[inheritedMethod.owner] as Class).ensureComments();
@@ -1065,8 +1146,10 @@
     isOperator ? 'operator' : 'method';
 }
 
-/// A container to categorize methods into the following groups: setters,
-/// getters, constructors, operators, regular methods.
+/**
+ * A container to categorize methods into the following groups: setters,
+ * getters, constructors, operators, regular methods.
+ */
 class MethodGroup {
   Map<String, Method> setters = {};
   Map<String, Method> getters = {};
@@ -1135,7 +1218,9 @@
   }
 }
 
-/// A class containing properties of a Dart method/function parameter.
+/**
+ * A class containing properties of a Dart method/function parameter.
+ */
 class Parameter {
 
   String name;
@@ -1163,7 +1248,9 @@
   };
 }
 
-/// A class containing properties of a Generic.
+/**
+ * A class containing properties of a Generic.
+ */
 class Generic {
   String name;
   String type;
@@ -1176,34 +1263,36 @@
   };
 }
 
-/// Holds the name of a return type, and its generic type parameters.
-///
-/// Return types are of a form [outer]<[inner]>.
-/// If there is no [inner] part, [inner] will be an empty list.
-///
-/// For example:
-///        int size()
-///          "return" :
-///            - "outer" : "dart-core.int"
-///              "inner" :
-///
-///        List<String> toList()
-///          "return" :
-///            - "outer" : "dart-core.List"
-///              "inner" :
-///                - "outer" : "dart-core.String"
-///                  "inner" :
-///
-///        Map<String, List<int>>
-///          "return" :
-///            - "outer" : "dart-core.Map"
-///              "inner" :
-///                - "outer" : "dart-core.String"
-///                  "inner" :
-///                - "outer" : "dart-core.List"
-///                  "inner" :
-///                    - "outer" : "dart-core.int"
-///                      "inner" :
+/**
+ * Holds the name of a return type, and its generic type parameters.
+ *
+ * Return types are of a form [outer]<[inner]>.
+ * If there is no [inner] part, [inner] will be an empty list.
+ *
+ * For example:
+ *        int size()
+ *          "return" :
+ *            - "outer" : "dart-core.int"
+ *              "inner" :
+ *
+ *        List<String> toList()
+ *          "return" :
+ *            - "outer" : "dart-core.List"
+ *              "inner" :
+ *                - "outer" : "dart-core.String"
+ *                  "inner" :
+ *
+ *        Map<String, List<int>>
+ *          "return" :
+ *            - "outer" : "dart-core.Map"
+ *              "inner" :
+ *                - "outer" : "dart-core.String"
+ *                  "inner" :
+ *                - "outer" : "dart-core.List"
+ *                  "inner" :
+ *                    - "outer" : "dart-core.int"
+ *                      "inner" :
+ */
 class Type {
   String outer;
   List<Type> inner;
@@ -1216,7 +1305,9 @@
   };
 }
 
-/// Holds the name of the annotation, and its parameters.
+/**
+ * Holds the name of the annotation, and its parameters.
+ */
 class Annotation {
   String qualifiedName;
   List<String> parameters;
diff --git a/pkg/docgen/pubspec.yaml b/pkg/docgen/pubspec.yaml
index 254e477..a385dd5 100644
--- a/pkg/docgen/pubspec.yaml
+++ b/pkg/docgen/pubspec.yaml
@@ -1,10 +1,15 @@
 name: docgen
+version: 0.9.0
+author: "Dart Team <misc@dartlang.org>"
+homepage: https://github.com/dart-lang/dartdoc-viewer
 description: A documentation generator for the Dart repository.
 dependencies:
-  args: any
-  logging: any
-  markdown: any
-  path: any
-  yaml: any
+  args: ">=0.9.0 <0.10.0"
+  logging: ">=0.9.0 <0.10.0"
+  markdown: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  yaml: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/expect/pubspec.yaml b/pkg/expect/pubspec.yaml
index 0b2ed15..026b85e 100644
--- a/pkg/expect/pubspec.yaml
+++ b/pkg/expect/pubspec.yaml
@@ -1,4 +1,5 @@
 name: expect
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -7,3 +8,5 @@
  Third parties are discouraged from using this, and should use
  the expect() function in the unit test library instead for
  test assertions.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/fixnum/pubspec.yaml b/pkg/fixnum/pubspec.yaml
index c582394..a149549 100644
--- a/pkg/fixnum/pubspec.yaml
+++ b/pkg/fixnum/pubspec.yaml
@@ -1,6 +1,9 @@
 name: fixnum
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: Library for 32- and 64-bit fixed size integers.
 homepage: http://www.dartlang.org
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/html_import/pubspec.yaml b/pkg/html_import/pubspec.yaml
index 9aa328d..9d2ca0e 100644
--- a/pkg/html_import/pubspec.yaml
+++ b/pkg/html_import/pubspec.yaml
@@ -1,4 +1,5 @@
 name: html_import
+version: 0.9.0
 author: "Web UI Team <web-ui-dev@dartlang.org>"
 homepage: https://github.com/Polymer/HTMLImports/tree/master
 description: >
@@ -6,3 +7,5 @@
   documents. As <script> tags let authors include external code in their
   pages, imports let authors load full HTML resources. In particular, imports
   let authors include Custom Element definitions from external URLs.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/http/pubspec.yaml b/pkg/http/pubspec.yaml
index 515206d..2e2aafa 100644
--- a/pkg/http/pubspec.yaml
+++ b/pkg/http/pubspec.yaml
@@ -1,8 +1,11 @@
 name: http
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: A composable, Future-based API for making HTTP requests.
 dependencies:
-  path: any
+  path: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/http_server/pubspec.yaml b/pkg/http_server/pubspec.yaml
index 10896aa..555569b 100644
--- a/pkg/http_server/pubspec.yaml
+++ b/pkg/http_server/pubspec.yaml
@@ -1,10 +1,13 @@
 name: http_server
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: Library of HTTP server classes.
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/http_server
 dependencies:
-  mime: any
-  path: any
+  mime: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/intl/pubspec.yaml b/pkg/intl/pubspec.yaml
index 9cccb36..97bce62 100644
--- a/pkg/intl/pubspec.yaml
+++ b/pkg/intl/pubspec.yaml
@@ -1,12 +1,14 @@
 name: intl
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/intl
 dependencies:
-  analyzer: any
-  meta: any
-  path: any
+  analyzer: ">=0.10.1 <0.11.0"
+  path: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  serialization: any
-  unittest: any
+  serialization: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/json/pubspec.yaml b/pkg/json/pubspec.yaml
index 1ff8b89..de9f8cc 100644
--- a/pkg/json/pubspec.yaml
+++ b/pkg/json/pubspec.yaml
@@ -1,4 +1,5 @@
 name: json
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: >
  A JSON library. Intended for advanced use where the built-in facilities are
@@ -6,4 +7,6 @@
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/json
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/logging/pubspec.yaml b/pkg/logging/pubspec.yaml
index c23bd3e..7893523 100644
--- a/pkg/logging/pubspec.yaml
+++ b/pkg/logging/pubspec.yaml
@@ -1,10 +1,12 @@
 name: logging
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: Provides APIs for debugging and error logging. This library introduces abstractions similar to those used in other languages, such as the Closure JS Logger and java.util.logging.Logger.
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/logging
 dependencies:
-  meta: any
-  unmodifiable_collection: any
+  unmodifiable_collection: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/mime/pubspec.yaml b/pkg/mime/pubspec.yaml
index 174820c..0ce9b2a 100644
--- a/pkg/mime/pubspec.yaml
+++ b/pkg/mime/pubspec.yaml
@@ -1,6 +1,9 @@
 name: mime
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: Helper-package for working with MIME.
 homepage: http://www.dartlang.org
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/mutation_observer/pubspec.yaml b/pkg/mutation_observer/pubspec.yaml
index cafca55..4d320c3 100644
--- a/pkg/mutation_observer/pubspec.yaml
+++ b/pkg/mutation_observer/pubspec.yaml
@@ -1,8 +1,11 @@
 name: mutation_observer
+version: 0.9.0
 author: "Web UI Team <web-ui-dev@dartlang.org>"
 homepage: https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/pkg/mutation_observer/
 documentation: https://api.dartlang.org/docs/releases/latest/dart_html/MutationObserver.html
 description: >
   Mutation Observers provide a way to react to changes in the DOM.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/oauth2/pubspec.yaml b/pkg/oauth2/pubspec.yaml
index f531f46..4d6fda6 100644
--- a/pkg/oauth2/pubspec.yaml
+++ b/pkg/oauth2/pubspec.yaml
@@ -1,4 +1,5 @@
 name: oauth2
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -6,6 +7,8 @@
   behalf of a user, and making authorized HTTP requests with the user's
   OAuth2 credentials.
 dependencies:
-  http: any
+  http: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/observe/pubspec.yaml b/pkg/observe/pubspec.yaml
index d55ca35..5c6f23f 100644
--- a/pkg/observe/pubspec.yaml
+++ b/pkg/observe/pubspec.yaml
@@ -1,4 +1,5 @@
 name: observe
+version: 0.9.0
 author: Web UI Team <web-ui-dev@dartlang.org>
 description: >
   Observable properties and objects for use in Model-Driven-Views (MDV).
@@ -8,10 +9,12 @@
   immediately assigned to the model.
 homepage: https://www.dartlang.org/polymer-dart/
 dependencies:
-  analyzer: any
-  barback: any
-  logging: any
-  path: any
-  source_maps: any
+  analyzer: ">=0.10.1 <0.11.0"
+  barback: ">=0.9.0 <0.10.0"
+  logging: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  source_maps: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/path/pubspec.yaml b/pkg/path/pubspec.yaml
index a366122..aa905cf 100644
--- a/pkg/path/pubspec.yaml
+++ b/pkg/path/pubspec.yaml
@@ -1,4 +1,5 @@
 name: path
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: >
  A string-based path manipulation library. All of the path operations you know
@@ -7,4 +8,6 @@
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/path
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 30f623f..a86c987 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -33,9 +33,6 @@
 [ $compiler == dart2js && $checked && $runtime == ie9 ]
 crypto/test/base64_test: Timeout # Issue 12486
 
-[ $compiler == dart2js && $checked && $runtime == d8 ]
-serialization/test/serialization_test: Pass, RuntimeError # Issue 14735
-
 [ $runtime == d8 || $runtime == jsshell ]
 unittest/test/unittest_nested_groups_setup_teardown_test: Pass, RuntimeError # http://dartbug.com/10109
 stack_trace/test/vm_test: RuntimeError, OK # VM-specific traces
@@ -307,14 +304,6 @@
 source_maps/test/parser_test: Pass, Timeout # Issue 13719: Please triage this failure.
 polymer_expressions/test/bindings_test: Fail, Pass # Issue 14445.
 
-[ $compiler == dartanalyzer ]
-# pkg issue 13944; Missing inherited member 'Observable._mirror'
-custom_element/test/analyzer_test: fail
-
-[ $compiler == dart2analyzer ]
-# pkg issue 13944; Missing inherited members: 'ListChangeRecord.addedCount' and 'ListChangeRecord.removedCount'
-custom_element/test/analyzer_test: fail
-
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 docgen/test/single_library_test: StaticWarning
 http_server/test/http_body_test: StaticWarning
@@ -334,3 +323,7 @@
 intl/test/date_time_format_local_odd_test: StaticWarning
 unittest/test/matchers_test: StaticWarning, OK # testing error creating abstract class
 unittest/test/mock_test: StaticWarning, OK # testing unimplemented members
+
+[ $runtime == vm ]
+# Issue surfaced after removing deprecated async features.
+scheduled_test/test/scheduled_test/nested_task_test: RuntimeError # Issue 14639
diff --git a/pkg/polymer/example/component/news/web/index.html b/pkg/polymer/example/component/news/web/index.html
index 8dda8f59..b9e56c9 100644
--- a/pkg/polymer/example/component/news/web/index.html
+++ b/pkg/polymer/example/component/news/web/index.html
@@ -18,7 +18,7 @@
     <li><a href="//example.com/stories/4">Awesome story</a></li>
     <li class="breaking"><a href="//example.com/stories/5">Horrible story</a></li>
 </ul>
-  <script type="application/dart">import 'package:polymer/init.dart';</script>
+  <script type="application/dart">export 'package:polymer/init.dart';</script>
   <script src='packages/browser/dart.js'></script>
 </body>
 </html>
diff --git a/pkg/polymer/lib/boot.js b/pkg/polymer/lib/boot.js
index 0cb6714..d4a0f8f 100644
--- a/pkg/polymer/lib/boot.js
+++ b/pkg/polymer/lib/boot.js
@@ -5,7 +5,7 @@
 (function() {
   console.error('"boot.js" is now deprecated. Instead, you can initialize '
     + 'your polymer application by adding the following tags: \'' +
-    + '<script type="application/dart">import "package:polymer/init.dart";'
+    + '<script type="application/dart">export "package:polymer/init.dart";'
     + '</script><script src="packages/browser/dart.js"></script>\'. '
     + 'Make sure these script tags come after all HTML imports.');
 })();
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 317765f..f186d31 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -544,7 +544,7 @@
 const String USE_INIT_DART =
     'To run a polymer applications, you need to call "initPolymer". You can '
     'either include a generic script tag that does this for you:'
-    '\'<script type="application/dart">import "package:polymer/init.dart";'
+    '\'<script type="application/dart">export "package:polymer/init.dart";'
     '</script>\' or add your own script tag and call that function. '
     'Make sure the script tag is placed after all HTML imports.';
 
@@ -556,7 +556,7 @@
     '"boot.js" is now deprecated. Instead, you can initialize your polymer '
     'application by calling "initPolymer()" in your main. If you don\'t have a '
     'main, then you can include our generic main by adding the following '
-    'script tag to your page: \'<script type="application/dart">import '
+    'script tag to your page: \'<script type="application/dart">export '
     '"package:polymer/init.dart";</script>\'. Additionally you need to '
     'include: \'<script src="packages/browser/dart.js"></script>\' in the page '
     'too. Make sure these script tags come after all HTML imports.';
diff --git a/pkg/polymer/lib/src/build/script_compactor.dart b/pkg/polymer/lib/src/build/script_compactor.dart
index bfb2c56..e869a2c 100644
--- a/pkg/polymer/lib/src/build/script_compactor.dart
+++ b/pkg/polymer/lib/src/build/script_compactor.dart
@@ -81,10 +81,7 @@
         mainScriptTag.attributes['src'] =
             path.url.basename(bootstrapId.path);
 
-        // TODO(sigmund): stop renaming the file (see dartbug.com/14554)
-        var modifiedMainId = mainLibraryId.addExtension('_modified.dart');
-
-        libraries.add(modifiedMainId);
+        libraries.add(mainLibraryId);
         var urls = libraries.map((id) => assetUrlFor(id, bootstrapId, logger))
             .where((url) => url != null).toList();
         var buffer = new StringBuffer()..writeln(MAIN_HEADER);
@@ -98,17 +95,12 @@
             ..writeln('  configureForDeployment([')
             ..writeAll(urls.map((url) => "      '$url',\n"))
             ..writeln('    ]);')
-            ..writeln('  i${i - 1}.polymerMainWrapper();')
+            ..writeln('  i${i - 1}.main();')
             ..writeln('}');
 
         transform.addOutput(new Asset.fromString(
               bootstrapId, buffer.toString()));
         transform.addOutput(new Asset.fromString(id, document.outerHtml));
-
-        return transform.readInputAsString(mainLibraryId).then((contents) {
-          transform.addOutput(new Asset.fromString(modifiedMainId,
-              '$contents\n\npolymerMainWrapper() => main();\n'));
-        });
       });
     });
   }
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index 6aa271e..853824c 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,4 +1,5 @@
 name: polymer
+version: 0.9.0
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Polymer.dart is a new type of library for the web, built on top of Web
@@ -6,22 +7,23 @@
   browsers.
 homepage: https://www.dartlang.org/polymer-dart/
 dependencies:
-  analyzer: any
-  args: any
-  barback: any
-  browser: any
-  csslib: any
-  custom_element: any
-  html5lib: any
-  html_import: any
-  logging: any
-  meta: any
-  observe: any
-  path: any
-  polymer_expressions: any
-  shadow_dom: any
-  source_maps: any
-  template_binding: any
-  yaml: any
+  analyzer: ">=0.10.1 <0.11.0"
+  args: ">=0.9.0 <0.10.0"
+  barback: ">=0.9.0 <0.10.0"
+  browser: ">=0.9.0 <0.10.0"
+  csslib: ">=0.9.0 <0.10.0"
+  custom_element: ">=0.9.0 <0.10.0"
+  html5lib: ">=0.9.0 <0.10.0"
+  html_import: ">=0.9.0 <0.10.0"
+  logging: ">=0.9.0 <0.10.0"
+  observe: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  polymer_expressions: ">=0.9.0 <0.10.0"
+  shadow_dom: ">=0.9.0 <0.10.0"
+  source_maps: ">=0.9.0 <0.10.0"
+  template_binding: ">=0.9.0 <0.10.0"
+  yaml: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/polymer/test/build/all_phases_test.dart b/pkg/polymer/test/build/all_phases_test.dart
index 4b6b759..bb39a85 100644
--- a/pkg/polymer/test/build/all_phases_test.dart
+++ b/pkg/polymer/test/build/all_phases_test.dart
@@ -45,18 +45,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
-      'a|web/a.dart_modified.dart':
-          _sampleObservableOutput('A', 'foo', includeMain: true),
     });
 
   testPhases('single inline script', phases, {
@@ -75,19 +73,17 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'test.html.0.dart_modified.dart' as i0;
+          import 'test.html.0.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'test.html.0.dart_modified.dart',
+                'test.html.0.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/test.html.0.dart':
           _sampleObservableOutput("B", "bar"),
-      'a|web/test.html.0.dart_modified.dart':
-          _sampleObservableOutput("B", "bar", includeMain: true),
     });
 
   testPhases('several scripts', phases, {
@@ -119,18 +115,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
-      'a|web/a.dart_modified.dart':
-          _sampleObservableOutput('A', 'foo', includeMain: true),
       'a|web/test.html.0.dart': _sampleObservableOutput("B", "bar"),
       'a|web/test.html.1.dart': _sampleObservableOutput("C", "car"),
     });
@@ -160,19 +154,17 @@
       'a|web/index.html_bootstrap.dart':
           '''$MAIN_HEADER
           import 'test2.html.0.dart' as i0;
-          import 'b.dart_modified.dart' as i1;
+          import 'b.dart' as i1;
 
           void main() {
             configureForDeployment([
                 'test2.html.0.dart',
-                'b.dart_modified.dart',
+                'b.dart',
               ]);
-            i1.polymerMainWrapper();
+            i1.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/test2.html.0.dart': _sampleObservableOutput("A", "foo"),
-      'a|web/test2.html.0.dart_modified.dart':
-          _sampleObservableOutput("A", "foo", includeMain: true),
       'a|web/b.dart': _sampleObservableOutput('B', 'bar'),
     });
 }
@@ -198,5 +190,4 @@
       "__\$$field = notifyPropertyChange(#$field, __\$$field, value); "
       "}\n"
     "  $className($field) : __\$$field = $field;\n"
-    "}\n"
-    "${includeMain ? '\n\npolymerMainWrapper() => main();\n' : ''}";
+    "}\n";
diff --git a/pkg/polymer/test/build/script_compactor_test.dart b/pkg/polymer/test/build/script_compactor_test.dart
index 946c90d..e3ec79c 100644
--- a/pkg/polymer/test/build/script_compactor_test.dart
+++ b/pkg/polymer/test/build/script_compactor_test.dart
@@ -46,19 +46,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': 'library a;\nmain(){}',
-      'a|web/a.dart_modified.dart':
-          'library a;\nmain(){}'
-          '\n\npolymerMainWrapper() => main();\n',
     });
 
   testPhases('several scripts', phases, {
@@ -83,16 +80,16 @@
           import 'a.dart' as i0;
           import 'b.dart' as i1;
           import 'c.dart' as i2;
-          import 'd.dart_modified.dart' as i3;
+          import 'd.dart' as i3;
 
           void main() {
             configureForDeployment([
                 'a.dart',
                 'b.dart',
                 'c.dart',
-                'd.dart_modified.dart',
+                'd.dart',
               ]);
-            i3.polymerMainWrapper();
+            i3.main();
           }
           '''.replaceAll('\n          ', '\n'),
     });
diff --git a/pkg/polymer_expressions/pubspec.yaml b/pkg/polymer_expressions/pubspec.yaml
index 5686381..4a62f0f 100644
--- a/pkg/polymer_expressions/pubspec.yaml
+++ b/pkg/polymer_expressions/pubspec.yaml
@@ -1,10 +1,13 @@
 name: polymer_expressions
+version: 0.9.0
 author: Web UI Authors <html-dev@dartlang.org>
 description: An expressive custom binding syntax for MDV templates
 homepage: http://www.dartlang.org/polymer-dart/
 dependencies:
-  browser: any
-  observe: any
-  template_binding: any
+  browser: ">=0.9.0 <0.10.0"
+  observe: ">=0.9.0 <0.10.0"
+  template_binding: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/scheduled_test/lib/src/schedule.dart b/pkg/scheduled_test/lib/src/schedule.dart
index 7cc30fb..5c88464 100644
--- a/pkg/scheduled_test/lib/src/schedule.dart
+++ b/pkg/scheduled_test/lib/src/schedule.dart
@@ -134,26 +134,26 @@
 
       _state = ScheduleState.RUNNING;
       return tasks._run();
-    }).catchError((error, stackTrace) {
-      _addError(error, stackTrace);
-      return onException._run().catchError((innerError, innerTrace) {
+    }).catchError((e) {
+      _addError(e);
+      return onException._run().catchError((innerError) {
         // If an error occurs in a task in the onException queue, make sure it's
         // registered in the error list and re-throw it. We could also re-throw
-        // `error`; ultimately, all the errors will be shown to the user if any
+        // `e`; ultimately, all the errors will be shown to the user if any
         // ScheduleError is thrown.
-        _addError(innerError, innerTrace);
+        _addError(innerError);
         throw innerError;
       }).then((_) {
         // If there are no errors in the onException queue, re-throw the
         // original error that caused it to run.
-        throw error;
+        throw e;
       });
     }).whenComplete(() {
-      return onComplete._run().catchError((error, stackTrace) {
+      return onComplete._run().catchError((e) {
         // If an error occurs in a task in the onComplete queue, make sure it's
         // registered in the error list and re-throw it.
-        _addError(error, stackTrace);
-        throw error;
+        _addError(e);
+        throw e;
       });
     }).whenComplete(() {
       if (_timeoutTimer != null) _timeoutTimer.cancel();
@@ -255,14 +255,13 @@
   Future wrapFuture(Future future, [String description]) {
     var done = wrapAsync((fn) => fn(), description);
 
-    future = future.then((result) => done(() => result))
-        .catchError((error, stackTrace) {
+    future = future.then((result) => done(() => result)).catchError((e) {
       done(() {
-        throw new ScheduleError.from(this, error, stackTrace: stackTrace);
+        throw e;
       });
       // wrapAsync will catch the first throw, so we throw [e] again so it
       // propagates through the Future chain.
-      throw error;
+      throw e;
     });
 
     // Don't top-level the error, since it's already been signaled to the
@@ -308,10 +307,9 @@
   /// Register an error in the schedule's error list. This ensures that there
   /// are no duplicate errors, and that all errors are wrapped in
   /// [ScheduleError].
-  void _addError(error, [StackTrace stackTrace]) {
-    error = new ScheduleError.from(this, error, stackTrace: stackTrace);
-    if (errors.contains(error)) return;
-    _errors.add(error);
+  void _addError(error) {
+    if (error is ScheduleError && errors.contains(error)) return;
+    _errors.add(new ScheduleError.from(this, error));
   }
 }
 
@@ -426,8 +424,8 @@
     }
 
     var task = new Task(() {
-      return new Future.sync(fn).catchError((e, stackTrace) {
-        throw new ScheduleError.from(_schedule, e, stackTrace: stackTrace);
+      return new Future.sync(fn).catchError((e) {
+        throw new ScheduleError.from(_schedule, e);
       });
     }, description, this);
     _contents.add(task);
@@ -548,9 +546,8 @@
     } else if (_taskFuture != null) {
       // Catch errors coming off the old task future, in case it completes after
       // timing out.
-      _taskFuture.substitute(new Future.error(error))
-          .catchError((e, stackTrace) {
-        _schedule._signalPostTimeoutError(e, stackTrace);
+      _taskFuture.substitute(new Future.error(error)).catchError((e) {
+        _schedule._signalPostTimeoutError(e);
       });
     } else {
       // This branch probably won't be reached, but it's conceivable that the
diff --git a/pkg/scheduled_test/pubspec.yaml b/pkg/scheduled_test/pubspec.yaml
index 4f4f60b..285a74c 100644
--- a/pkg/scheduled_test/pubspec.yaml
+++ b/pkg/scheduled_test/pubspec.yaml
@@ -1,4 +1,5 @@
 name: scheduled_test
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -9,7 +10,9 @@
   read like synchronous, linear code, despite executing asynchronously.
 
 dependencies:
-  http: ">=0.4.1 <1.0.0"
-  path: ">=0.3.2 <1.0.0"
-  stack_trace: ">=0.4.3 <1.0.0"
-  unittest: ">=0.4.3 <1.0.0"
+  http: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  stack_trace: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/scheduled_test/test/metatest.dart b/pkg/scheduled_test/test/metatest.dart
index 18309bd..d2ed92f 100644
--- a/pkg/scheduled_test/test/metatest.dart
+++ b/pkg/scheduled_test/test/metatest.dart
@@ -119,9 +119,7 @@
 /// describing the results of that test run.
 Future<Map> _runInIsolate(String description) {
   var replyPort = new ReceivePort();
-  // TODO(nweiz): Don't use path here once issue 8440 is fixed.
-  var uri = path.toUri(path.absolute(path.fromUri(Platform.script)));
-  return Isolate.spawnUri(uri, [], {
+  return Isolate.spawnUri(Platform.script, [], {
     'testToRun': description,
     'replyTo': replyPort.sendPort
   }).then((_) {
diff --git a/pkg/scheduled_test/test/scheduled_test/nested_task_test.dart b/pkg/scheduled_test/test/scheduled_test/nested_task_test.dart
index 1356b80..ecb88d0 100644
--- a/pkg/scheduled_test/test/scheduled_test/nested_task_test.dart
+++ b/pkg/scheduled_test/test/scheduled_test/nested_task_test.dart
@@ -90,7 +90,7 @@
 
   expectTestsPass("nested scheduled blocks whose return values are passed to "
       "wrapFuture should report exceptions once", () {
-    var error = 'oh no!';
+    var error = new Object();
     var errors;
     test('test 1', () {
       currentSchedule.onException.schedule(() {
diff --git a/pkg/sequence_zip/pubspec.yaml b/pkg/sequence_zip/pubspec.yaml
index ba4d377..fa4d22c 100644
--- a/pkg/sequence_zip/pubspec.yaml
+++ b/pkg/sequence_zip/pubspec.yaml
@@ -1,4 +1,5 @@
 name: sequence_zip
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -6,4 +7,6 @@
   Combines multiple iterables into a single iterable of tuples of values,
   and similar for Streams.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/serialization/pubspec.yaml b/pkg/serialization/pubspec.yaml
index e66e029..3a5ea8a 100644
--- a/pkg/serialization/pubspec.yaml
+++ b/pkg/serialization/pubspec.yaml
@@ -1,8 +1,11 @@
 name: serialization
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/serialization
 description: >
   Provide a serialization facility for Dart objects.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/shadow_dom/lib/shadow_dom.debug.js b/pkg/shadow_dom/lib/shadow_dom.debug.js
index 2622ea3..5ed6ecf 100644
--- a/pkg/shadow_dom/lib/shadow_dom.debug.js
+++ b/pkg/shadow_dom/lib/shadow_dom.debug.js
@@ -1884,7 +1884,7 @@
 
     // 1.
     if (isShadowRoot(node))
-      return getInsertionParent(node) || scope.getHostForShadowRoot(node);
+      return getInsertionParent(node) || node.host;
 
     // 2.
     var eventParents = scope.eventParentsTable.get(node);
@@ -1980,7 +1980,7 @@
         ancestor = calculateParents(ancestor, context, ancestors);  // 3.4.7.
       }
       if (isShadowRoot(target))  // 3.5.
-        target = scope.getHostForShadowRoot(target);
+        target = target.host;
       else
         target = target.parentNode;  // 3.6.
     }
@@ -2009,10 +2009,8 @@
   function enclosedBy(a, b) {
     if (a === b)
       return true;
-    if (a instanceof wrappers.ShadowRoot) {
-      var host = scope.getHostForShadowRoot(a);
-      return enclosedBy(rootOfNode(host), b);
-    }
+    if (a instanceof wrappers.ShadowRoot)
+      return enclosedBy(rootOfNode(a.host), b);
     return false;
   }
 
@@ -2434,7 +2432,7 @@
 
   function getTargetToListenAt(wrapper) {
     if (wrapper instanceof wrappers.ShadowRoot)
-      wrapper = scope.getHostForShadowRoot(wrapper);
+      wrapper = wrapper.host;
     return unwrap(wrapper);
   }
 
@@ -2671,11 +2669,13 @@
     }
 
     var nodes = [];
-    var firstChild;
-    while (firstChild = node.firstChild) {
-      node.removeChild(firstChild);
-      nodes.push(firstChild);
-      firstChild.parentNode_ = parentNode;
+    for (var child = node.firstChild; child; child = child.nextSibling) {
+      nodes.push(child);
+    }
+
+    for (var i = nodes.length - 1; i >= 0; i--) {
+      node.removeChild(nodes[i]);
+      nodes[i].parentNode_ = parentNode;
     }
 
     for (var i = 0; i < nodes.length; i++) {
@@ -2825,12 +2825,28 @@
     this.previousSibling_ = undefined;
   };
 
+  var OriginalDocumentFragment = window.DocumentFragment;
   var originalAppendChild = OriginalNode.prototype.appendChild;
-  var originalInsertBefore = OriginalNode.prototype.insertBefore;
-  var originalReplaceChild = OriginalNode.prototype.replaceChild;
-  var originalRemoveChild = OriginalNode.prototype.removeChild;
   var originalCompareDocumentPosition =
       OriginalNode.prototype.compareDocumentPosition;
+  var originalInsertBefore = OriginalNode.prototype.insertBefore;
+  var originalRemoveChild = OriginalNode.prototype.removeChild;
+  var originalReplaceChild = OriginalNode.prototype.replaceChild;
+
+  var isIe = /Trident/.test(navigator.userAgent);
+
+  var removeChildOriginalHelper = isIe ?
+      function(parent, child) {
+        try {
+          originalRemoveChild.call(parent, child);
+        } catch (ex) {
+          if (!(parent instanceof OriginalDocumentFragment))
+            throw ex;
+        }
+      } :
+      function(parent, child) {
+        originalRemoveChild.call(parent, child);
+      };
 
   Node.prototype = Object.create(EventTarget.prototype);
   mixin(Node.prototype, {
@@ -2906,8 +2922,20 @@
     removeChild: function(childWrapper) {
       assertIsNodeWrapper(childWrapper);
       if (childWrapper.parentNode !== this) {
-        // TODO(arv): DOMException
-        throw new Error('NotFoundError');
+        // IE has invalid DOM trees at times.
+        var found = false;
+        var childNodes = this.childNodes;
+        for (var ieChild = this.firstChild; ieChild;
+             ieChild = ieChild.nextSibling) {
+          if (ieChild === childWrapper) {
+            found = true;
+            break;
+          }
+        }
+        if (!found) {
+          // TODO(arv): DOMException
+          throw new Error('NotFoundError');
+        }
       }
 
       var childNode = unwrap(childWrapper);
@@ -2923,7 +2951,7 @@
 
         var parentNode = childNode.parentNode;
         if (parentNode)
-          originalRemoveChild.call(parentNode, childNode);
+          removeChildOriginalHelper(parentNode, childNode);
 
         if (thisFirstChild === childWrapper)
           this.firstChild_ = childWrapperNextSibling;
@@ -2939,7 +2967,7 @@
         childWrapper.previousSibling_ = childWrapper.nextSibling_ =
             childWrapper.parentNode_ = undefined;
       } else {
-        originalRemoveChild.call(this.impl, childNode);
+        removeChildOriginalHelper(this.impl, childNode);
       }
 
       return childWrapper;
@@ -3726,12 +3754,13 @@
     }
 
     var node = unwrap(document.createElement('img'));
+    HTMLElement.call(this, node);
+    rewrap(node, this);
+
     if (width !== undefined)
       node.width = width;
     if (height !== undefined)
       node.height = height;
-    HTMLElement.call(this, node);
-    rewrap(node, this);
   }
 
   Image.prototype = HTMLImageElement.prototype;
@@ -3858,6 +3887,136 @@
 (function(scope) {
   'use strict';
 
+  var HTMLElement = scope.wrappers.HTMLElement;
+  var registerWrapper = scope.registerWrapper;
+
+  var OriginalHTMLMediaElement = window.HTMLMediaElement;
+
+  function HTMLMediaElement(node) {
+    HTMLElement.call(this, node);
+  }
+  HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
+
+  registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement,
+                  document.createElement('audio'));
+
+  scope.wrappers.HTMLMediaElement = HTMLMediaElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
+  var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
+  var registerWrapper = scope.registerWrapper;
+  var unwrap = scope.unwrap;
+  var rewrap = scope.rewrap;
+
+  var OriginalHTMLAudioElement = window.HTMLAudioElement;
+
+  function HTMLAudioElement(node) {
+    HTMLMediaElement.call(this, node);
+  }
+  HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
+
+  registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement,
+                  document.createElement('audio'));
+
+  function Audio(src) {
+    if (!(this instanceof Audio)) {
+      throw new TypeError(
+          'DOM object constructor cannot be called as a function.');
+    }
+
+    var node = unwrap(document.createElement('audio'));
+    HTMLMediaElement.call(this, node);
+    rewrap(node, this);
+
+    node.setAttribute('preload', 'auto');
+    if (src !== undefined)
+      node.setAttribute('src', src);
+  }
+
+  Audio.prototype = HTMLAudioElement.prototype;
+
+  scope.wrappers.HTMLAudioElement = HTMLAudioElement;
+  scope.wrappers.Audio = Audio;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
+  var HTMLElement = scope.wrappers.HTMLElement;
+  var mixin = scope.mixin;
+  var registerWrapper = scope.registerWrapper;
+  var rewrap = scope.rewrap;
+  var unwrap = scope.unwrap;
+  var wrap = scope.wrap;
+
+  var OriginalHTMLOptionElement = window.HTMLOptionElement;
+
+  function trimText(s) {
+    return s.replace(/\s+/g, ' ').trim();
+  }
+
+  function HTMLOptionElement(node) {
+    HTMLElement.call(this, node);
+  }
+  HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
+  mixin(HTMLOptionElement.prototype, {
+    get text() {
+      return trimText(this.textContent);
+    },
+    set text(value) {
+      this.textContent = trimText(String(value));
+    },
+    get form() {
+      return wrap(unwrap(this).form);
+    }
+  });
+
+  registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement,
+                  document.createElement('option'));
+
+  function Option(text, value, defaultSelected, selected) {
+    if (!(this instanceof Option)) {
+      throw new TypeError(
+          'DOM object constructor cannot be called as a function.');
+    }
+
+    var node = unwrap(document.createElement('option'));
+    HTMLElement.call(this, node);
+    rewrap(node, this);
+
+    if (text !== undefined)
+      node.text = text;
+    if (value !== undefined)
+      node.setAttribute('value', value);
+    if (defaultSelected === true)
+      node.setAttribute('selected', '');
+    node.selected = selected === true;
+  }
+
+  Option.prototype = HTMLOptionElement.prototype;
+
+  scope.wrappers.HTMLOptionElement = HTMLOptionElement;
+  scope.wrappers.Option = Option;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
   var HTMLContentElement = scope.wrappers.HTMLContentElement;
   var HTMLElement = scope.wrappers.HTMLElement;
   var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
@@ -4037,6 +4196,10 @@
       return nextOlderShadowTreeTable.get(this) || null;
     },
 
+    get host() {
+      return shadowHostTable.get(this) || null;
+    },
+
     invalidateShadowRenderer: function() {
       return shadowHostTable.get(this).invalidateShadowRenderer();
     },
@@ -4051,9 +4214,6 @@
   });
 
   scope.wrappers.ShadowRoot = ShadowRoot;
-  scope.getHostForShadowRoot = function(node) {
-    return shadowHostTable.get(node);
-  };
 })(this.ShadowDOMPolyfill);
 // Copyright 2013 The Polymer Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -4068,7 +4228,6 @@
   var Node = scope.wrappers.Node;
   var ShadowRoot = scope.wrappers.ShadowRoot;
   var assert = scope.assert;
-  var getHostForShadowRoot = scope.getHostForShadowRoot;
   var mixin = scope.mixin;
   var muteMutationEvents = scope.muteMutationEvents;
   var oneOf = scope.oneOf;
@@ -4310,7 +4469,7 @@
   }
 
   function getRendererForShadowRoot(shadowRoot) {
-    return getRendererForHost(getHostForShadowRoot(shadowRoot));
+    return getRendererForHost(shadowRoot.host);
   }
 
   var spliceDiff = new ArraySplice();
@@ -4739,7 +4898,7 @@
     'HTMLLabelElement',
     'HTMLLegendElement',
     'HTMLObjectElement',
-    'HTMLOptionElement',
+    // HTMLOptionElement is handled in HTMLOptionElement.js
     'HTMLOutputElement',
     'HTMLSelectElement',
     'HTMLTextAreaElement',
@@ -4924,13 +5083,19 @@
         };
       });
 
-      var nativeConstructor = originalRegister.call(unwrap(this), tagName,
-          object.extends ? {prototype: newPrototype, extends: object.extends} :
-          {prototype: newPrototype});
+      var p = {prototype: newPrototype};
+      if (object.extends)
+        p.extends = object.extends;
+      var nativeConstructor = originalRegister.call(unwrap(this), tagName, p);
 
       function GeneratedWrapper(node) {
-        if (!node)
-          return document.createElement(tagName);
+        if (!node) {
+          if (object.extends) {
+            return document.createElement(object.extends, tagName);
+          } else {
+            return document.createElement(tagName);
+          }
+        }
         this.impl = node;
       }
       GeneratedWrapper.prototype = prototype;
@@ -5304,7 +5469,6 @@
     'a': 'HTMLAnchorElement',
     'applet': 'HTMLAppletElement',
     'area': 'HTMLAreaElement',
-    'audio': 'HTMLAudioElement',
     'br': 'HTMLBRElement',
     'base': 'HTMLBaseElement',
     'body': 'HTMLBodyElement',
@@ -5333,7 +5497,6 @@
     'link': 'HTMLLinkElement',
     'map': 'HTMLMapElement',
     'marquee': 'HTMLMarqueeElement',
-    // 'media', Covered by audio and video
     'menu': 'HTMLMenuElement',
     'menuitem': 'HTMLMenuItemElement',
     'meta': 'HTMLMetaElement',
@@ -5477,10 +5640,10 @@
 /*
   This is a limited shim for ShadowDOM css styling.
   https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
-  The intention here is to support only the styling features which can be
-  relatively simply implemented. The goal is to allow users to avoid the
-  most obvious pitfalls and do so without compromising performance significantly.
+  
+  The intention here is to support only the styling features which can be 
+  relatively simply implemented. The goal is to allow users to avoid the 
+  most obvious pitfalls and do so without compromising performance significantly. 
   For ShadowDOM styling that's not covered here, a set of best practices
   can be provided that should allow users to accomplish more complex styling.
 
@@ -5489,57 +5652,57 @@
 
   Shimmed features:
 
-  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
-  @host rule. To shim this feature, the @host styles are reformatted and
+  * @host: ShadowDOM allows styling of the shadowRoot's host element using the 
+  @host rule. To shim this feature, the @host styles are reformatted and 
   prefixed with a given scope name and promoted to a document level stylesheet.
   For example, given a scope name of .foo, a rule like this:
-
+  
     @host {
       * {
         background: red;
       }
     }
-
+  
   becomes:
-
+  
     .foo {
       background: red;
     }
-
-  * encapsultion: Styles defined within ShadowDOM, apply only to
+  
+  * encapsultion: Styles defined within ShadowDOM, apply only to 
   dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
   this feature.
-
-  By default, rules are prefixed with the host element tag name
+  
+  By default, rules are prefixed with the host element tag name 
   as a descendant selector. This ensures styling does not leak out of the 'top'
   of the element's ShadowDOM. For example,
 
   div {
       font-weight: bold;
     }
-
+  
   becomes:
 
   x-foo div {
       font-weight: bold;
     }
-
+  
   becomes:
 
 
-  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then 
   selectors are scoped by adding an attribute selector suffix to each
-  simple selector that contains the host element tag name. Each element
-  in the element's ShadowDOM template is also given the scope attribute.
+  simple selector that contains the host element tag name. Each element 
+  in the element's ShadowDOM template is also given the scope attribute. 
   Thus, these rules match only elements that have the scope attribute.
   For example, given a scope name of x-foo, a rule like this:
-
+  
     div {
       font-weight: bold;
     }
-
+  
   becomes:
-
+  
     div[x-foo] {
       font-weight: bold;
     }
@@ -5571,39 +5734,39 @@
 
   becomes:
 
-    x-foo [part=special] { ... }
-
+    x-foo [part=special] { ... }    
+  
   Unaddressed ShadowDOM styling features:
-
+  
   * upper/lower bound encapsulation: Styles which are defined outside a
   shadowRoot should not cross the ShadowDOM boundary and should not apply
   inside a shadowRoot.
 
-  This styling behavior is not emulated. Some possible ways to do this that
+  This styling behavior is not emulated. Some possible ways to do this that 
   were rejected due to complexity and/or performance concerns include: (1) reset
   every possible property for every possible selector for a given scope name;
   (2) re-implement css in javascript.
-
+  
   As an alternative, users should make sure to use selectors
   specific to the scope in which they are working.
-
+  
   * ::distributed: This behavior is not emulated. It's often not necessary
   to style the contents of a specific insertion point and instead, descendants
-  of the host element can be styled selectively. Users can also create an
+  of the host element can be styled selectively. Users can also create an 
   extra node around an insertion point and style that node's contents
   via descendent selectors. For example, with a shadowRoot like this:
-
+  
     <style>
       content::-webkit-distributed(div) {
         background: red;
       }
     </style>
     <content></content>
-
+  
   could become:
-
+  
     <style>
-      / *@polyfill .content-container div * /
+      / *@polyfill .content-container div * / 
       content::-webkit-distributed(div) {
         background: red;
       }
@@ -5611,9 +5774,9 @@
     <div class="content-container">
       <content></content>
     </div>
-
+  
   Note the use of @polyfill in the comment above a ShadowDOM specific style
-  declaration. This is a directive to the styling shim to use the selector
+  declaration. This is a directive to the styling shim to use the selector 
   in comments in lieu of the next selector when running under polyfill.
 */
 (function(scope) {
@@ -5649,7 +5812,7 @@
       root.shimmedStyle = def.shimmedStyle;
     }
     // remove existing style elements
-    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
+    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]); 
         i++) {
       s.parentNode.removeChild(s);
     }
@@ -5693,14 +5856,14 @@
   /*
    * Process styles to convert native ShadowDOM rules that will trip
    * up the css parser; we rely on decorating the stylesheet with comments.
-   *
+   * 
    * For example, we convert this rule:
-   *
+   * 
    * (comment start) @polyfill :host menu-item (comment end)
    * shadow::-webkit-distributed(menu-item) {
-   *
+   * 
    * to this:
-   *
+   * 
    * scopeName menu-item {
    *
   **/
@@ -5719,14 +5882,14 @@
   },
   /*
    * Process styles to add rules which will only apply under the polyfill
-   *
+   * 
    * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-rule :host menu-item {
+   * 
+   * (comment start) @polyfill-rule :host menu-item { 
    * ... } (comment end)
-   *
+   * 
    * to this:
-   *
+   * 
    * scopeName menu-item {...}
    *
   **/
@@ -5745,15 +5908,15 @@
   },
   /*
    * Process styles to add rules which will only apply under the polyfill
-   * and do not process via CSSOM. (CSSOM is destructive to rules on rare
+   * and do not process via CSSOM. (CSSOM is destructive to rules on rare 
    * occasions, e.g. -webkit-calc on Safari.)
    * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-unscoped-rule menu-item {
+   * 
+   * (comment start) @polyfill-unscoped-rule menu-item { 
    * ... } (comment end)
-   *
+   * 
    * to this:
-   *
+   * 
    * menu-item {...}
    *
   **/
@@ -5792,7 +5955,7 @@
       return self.scopeHostCss(p1, name, typeExtension);
     });
     cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
-      new RegExp('^' + name + selectorReSuffix, 'm')));
+        this.makeScopeMatcher(name, typeExtension)));
     return cssText;
   },
   scopeHostCss: function(cssText, name, typeExtension) {
@@ -5819,10 +5982,10 @@
     return r.join(', ');
   },
   // consider styles that do not include component name in the selector to be
-  // unscoped and in need of promotion;
+  // unscoped and in need of promotion; 
   // for convenience, also consider keyframe rules this way.
   findAtHostRules: function(cssRules, matcher) {
-    return Array.prototype.filter.call(cssRules,
+    return Array.prototype.filter.call(cssRules, 
       this.isHostRule.bind(this, matcher));
   },
   isHostRule: function(matcher, cssRule) {
@@ -5831,11 +5994,11 @@
       (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
   },
   /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
-   *
-   *  .foo {... }
-   *
+   * 
+   *  .foo {... } 
+   *  
    *  and converts this to
-   *
+   *  
    *  scopeName .foo { ... }
   */
   shimScoping: function(styles, name, typeExtension) {
@@ -5866,15 +6029,28 @@
    * to
    *
    * scopeName.foo > .bar, .foo scopeName > .bar { }
-   * TODO(sorvell): file bug since native impl does not do the former yet.
-   * http://jsbin.com/OganOCI/2/edit
+   * 
+   * and
+   *
+   * :host(.foo:host) .bar { ... }
+   * 
+   * to
+   * 
+   * scopeName.foo .bar { ... }
   */
   convertColonHost: function(cssText) {
     // p1 = :host, p2 = contents of (), p3 rest of rule
     return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
-      return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
-          + p2 + ' ' + p1 + p3 :
-          p1 + p3;
+      p1 = polyfillHostNoCombinator;
+      if (p2) {
+        if (p2.match(polyfillHost)) {
+          return p1 + p2.replace(polyfillHost, '') + p3;
+        } else {
+          return p1 + p2 + p3 + ', ' + p2 + ' ' + p1 + p3;
+        }
+      } else {
+        return p1 + p3;
+      }
     });
   },
   /*
@@ -5888,7 +6064,7 @@
     var cssText = '';
     Array.prototype.forEach.call(cssRules, function(rule) {
       if (rule.selectorText && (rule.style && rule.style.cssText)) {
-        cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
+        cssText += this.scopeSelector(rule.selectorText, name, typeExtension, 
           this.strictStyling) + ' {\n\t';
         cssText += this.propertiesFromRule(rule) + '\n}\n\n';
       } else if (rule.media) {
@@ -5914,10 +6090,13 @@
     return r.join(', ');
   },
   selectorNeedsScoping: function(selector, name, typeExtension) {
-    var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
-    var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+    var re = this.makeScopeMatcher(name, typeExtension);
     return !selector.match(re);
   },
+  makeScopeMatcher: function(name, typeExtension) {
+    var matchScope = typeExtension ? '\\[is=[\'"]?' + name + '[\'"]?\\]' : name;
+    return new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+  },
   // scope via name and [is=name]
   applySimpleSelectorScope: function(selector, name, typeExtension) {
     var scoper = typeExtension ? '[is=' + name + ']' : name;
@@ -5956,7 +6135,7 @@
     // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
     // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
     if (rule.style.content && !rule.style.content.match(/['"]+/)) {
-      properties = 'content: \'' + rule.style.content + '\';\n' +
+      properties = 'content: \'' + rule.style.content + '\';\n' + 
         rule.style.cssText.replace(/content:[^;]*;/g, '');
     }
     return properties;
@@ -6042,5 +6221,4 @@
 scope.ShadowCSS = ShadowCSS;
 
 })(window.Platform);
-
 }
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/shadow_dom.min.js b/pkg/shadow_dom/lib/shadow_dom.min.js
index 3f339be..c9b57af 100644
--- a/pkg/shadow_dom/lib/shadow_dom.min.js
+++ b/pkg/shadow_dom/lib/shadow_dom.min.js
@@ -1,3 +1,3 @@
-if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n     "+c+" != null";return b+=")\n",c+=a[e],b+="  return "+c+";\nelse\n  return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof O.ShadowRoot){var d=a.getHostForShadowRoot(b);return n(l(d),c)}return!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(b){return b instanceof O.ShadowRoot&&(b=a.getHostForShadowRoot(b)),M(b)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,f=[];e=a.firstChild;)a.removeChild(e),f.push(e),e.parentNode_=b;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||c,f[g].nextSibling_=f[g+1]||d;return c&&(c.nextSibling_=f[0]),d&&(d.previousSibling_=f[f.length-1]),f}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&y.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,y.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=u.prototype.appendChild,w=u.prototype.insertBefore,x=u.prototype.replaceChild,y=u.prototype.removeChild,z=u.prototype.compareDocumentPosition;k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),v.call(this.impl,h(this,g))}else g=d(a),f(this,a),v.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?w.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),w.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");var c=r(a);if(this.invalidateShadowRenderer()){var d=this.firstChild,e=this.lastChild,f=a.nextSibling,g=a.previousSibling,h=c.parentNode;h&&y.call(h,c),d===a&&(this.firstChild_=f),e===a&&(this.lastChild_=g),g&&(g.nextSibling_=f),f&&(f.previousSibling_=g),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else y.call(this.impl,c);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&x.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),x.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));
-return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return z.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));void 0!==a&&(e.width=a),void 0!==b&&(e.height=b),d.call(this,e),g(e,this)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=G(a),g=G(c),h=e?G(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=H(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=G(a),d=c.parentNode;if(d){var e=H(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function f(a){I.set(a,[])}function g(a){return I.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!M.test(c))return!1;if(":"===c[0]&&!N.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<P.length;a++)P[a].render();P=[]}function l(){F=null,k()}function m(a){var b=L.get(a);return b||(b=new q(a),L.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(D(a))}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){K.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert;var D=a.getHostForShadowRoot;a.mixin,a.muteMutationEvents;var E=a.oneOf;a.unmuteMutationEvents;var F,G=a.unwrap,H=a.wrap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=new WeakMap,M=/^[*.:#[a-zA-Z_|]/,N=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),O=E(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),P=[],Q=new ArraySplice;Q.equals=function(a,b){return G(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(G(b)),g=a||new WeakMap,i=Q.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=H(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&H(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,P.push(this),F)return;F=window[O](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=J,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=K,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOptionElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);return["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})}),z.call(u(this),b,c.extends?{prototype:i,"extends":c.extends}:{prototype:i}),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),new RegExp("^"+c+u,"m")))},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n	"})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return c?y+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n	",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")
-},selectorNeedsScoping:function(a,b,c){var d=c?b:"\\[is="+b+"\\]",e=new RegExp("^("+d+")"+u,"m");return!a.match(e)},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
+if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n     "+c+" != null";return b+=")\n",c+=a[e],b+="  return "+c+";\nelse\n  return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||f.host;var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(a,d){for(var e=[];a;){for(var g=[],i=d,j=void 0;i;){var l=null;if(g.length){if(c(i)&&(l=h(g),k(j))){var n=g[g.length-1];g.push(n)}}else g.push(i);if(m(i,a))return g[g.length-1];b(i)&&g.pop(),j=i,i=f(i,l,e)}a=b(a)?a.host:a.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(a,b){return a===b?!0:a instanceof O.ShadowRoot?n(l(a.host),b):!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(a){return a instanceof O.ShadowRoot&&(a=a.host),M(a)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e=[],f=a.firstChild;f;f=f.nextSibling)e.push(f);for(var g=e.length-1;g>=0;g--)a.removeChild(e[g]),e[g].parentNode_=b;for(var g=0;g<e.length;g++)e[g].previousSibling_=e[g-1]||c,e[g].nextSibling_=e[g+1]||d;return c&&(c.nextSibling_=e[0]),d&&(d.previousSibling_=e[e.length-1]),e}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&z.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,z.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=window.DocumentFragment,w=u.prototype.appendChild,x=u.prototype.compareDocumentPosition,y=u.prototype.insertBefore,z=u.prototype.removeChild,A=u.prototype.replaceChild,B=/Trident/.test(navigator.userAgent),C=B?function(a,b){try{z.call(a,b)}catch(c){if(!(a instanceof v))throw c}}:function(a,b){z.call(a,b)};k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),w.call(this.impl,h(this,g))}else g=d(a),f(this,a),w.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?y.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),y.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this){var c=!1;this.childNodes;for(var d=this.firstChild;d;d=d.nextSibling)if(d===a){c=!0;break}if(!c)throw new Error("NotFoundError")}var e=r(a);if(this.invalidateShadowRenderer()){var f=this.firstChild,g=this.lastChild,h=a.nextSibling,i=a.previousSibling,j=e.parentNode;j&&C(j,e),f===a&&(this.firstChild_=h),g===a&&(this.lastChild_=i),i&&(i.nextSibling_=h),h&&(h.previousSibling_=i),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else C(this.impl,e);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&A.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),A.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;
+return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return x.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));d.call(this,e),g(e,this),void 0!==a&&(e.width=a),void 0!==b&&(e.height=b)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.registerWrapper,e=window.HTMLMediaElement;b.prototype=Object.create(c.prototype),d(e,b,document.createElement("audio")),a.wrappers.HTMLMediaElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var b=f(document.createElement("audio"));d.call(this,b),g(b,this),b.setAttribute("preload","auto"),void 0!==a&&b.setAttribute("src",a)}var d=a.wrappers.HTMLMediaElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLAudioElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("audio")),c.prototype=b.prototype,a.wrappers.HTMLAudioElement=b,a.wrappers.Audio=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a.replace(/\s+/g," ").trim()}function c(a){e.call(this,a)}function d(a,b,c,f){if(!(this instanceof d))throw new TypeError("DOM object constructor cannot be called as a function.");var g=i(document.createElement("option"));e.call(this,g),h(g,this),void 0!==a&&(g.text=a),void 0!==b&&g.setAttribute("value",b),c===!0&&g.setAttribute("selected",""),g.selected=f===!0}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.rewrap,i=a.unwrap,j=a.wrap,k=window.HTMLOptionElement;c.prototype=Object.create(e.prototype),f(c.prototype,{get text(){return b(this.textContent)},set text(a){this.textContent=b(String(a))},get form(){return j(i(this).form)}}),g(k,c,document.createElement("option")),d.prototype=c.prototype,a.wrappers.HTMLOptionElement=c,a.wrappers.Option=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},get host(){return j.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=F(a),g=F(c),h=e?F(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=G(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=F(a),d=c.parentNode;if(d){var e=G(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=I.get(a);c||I.set(a,c=[]),c.push(b)}function f(a){H.set(a,[])}function g(a){return H.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!L.test(c))return!1;if(":"===c[0]&&!M.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<O.length;a++)O[a].render();O=[]}function l(){E=null,k()}function m(a){var b=K.get(a);return b||(b=new q(a),K.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(a.host)}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){J.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert,a.mixin,a.muteMutationEvents;var D=a.oneOf;a.unmuteMutationEvents;var E,F=a.unwrap,G=a.wrap,H=new WeakMap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=/^[*.:#[a-zA-Z_|]/,M=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),N=D(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),O=[],P=new ArraySplice;P.equals=function(a,b){return F(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(F(b)),g=a||new WeakMap,i=P.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=G(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&G(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,O.push(this),E)return;E=window[N](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=I,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=J,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):c.extends?document.createElement(c.extends,b):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})});var k={prototype:i};return c.extends&&(k.extends=c.extends),z.call(u(this),b,k),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),this.makeScopeMatcher(c,f)))
+},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n	"})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return b=y,c?c.match(x)?b+c.replace(x,"")+d:b+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n	",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")},selectorNeedsScoping:function(a,b,c){var d=this.makeScopeMatcher(b,c);return!a.match(d)},makeScopeMatcher:function(a,b){var c=b?"\\[is=['\"]?"+a+"['\"]?\\]":a;return new RegExp("^("+c+")"+u,"m")},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js b/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
deleted file mode 100644
index 49fde56..0000000
--- a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright 2012 The Polymer Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style
- * license that can be found in the LICENSE file.
- */
-
-/*
-  This is a limited shim for ShadowDOM css styling.
-  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
-  The intention here is to support only the styling features which can be
-  relatively simply implemented. The goal is to allow users to avoid the
-  most obvious pitfalls and do so without compromising performance significantly.
-  For ShadowDOM styling that's not covered here, a set of best practices
-  can be provided that should allow users to accomplish more complex styling.
-
-  The following is a list of specific ShadowDOM styling features and a brief
-  discussion of the approach used to shim.
-
-  Shimmed features:
-
-  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
-  @host rule. To shim this feature, the @host styles are reformatted and
-  prefixed with a given scope name and promoted to a document level stylesheet.
-  For example, given a scope name of .foo, a rule like this:
-
-    @host {
-      * {
-        background: red;
-      }
-    }
-
-  becomes:
-
-    .foo {
-      background: red;
-    }
-
-  * encapsultion: Styles defined within ShadowDOM, apply only to
-  dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
-  this feature.
-
-  By default, rules are prefixed with the host element tag name
-  as a descendant selector. This ensures styling does not leak out of the 'top'
-  of the element's ShadowDOM. For example,
-
-  div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-  x-foo div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-
-  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
-  selectors are scoped by adding an attribute selector suffix to each
-  simple selector that contains the host element tag name. Each element
-  in the element's ShadowDOM template is also given the scope attribute.
-  Thus, these rules match only elements that have the scope attribute.
-  For example, given a scope name of x-foo, a rule like this:
-
-    div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-    div[x-foo] {
-      font-weight: bold;
-    }
-
-  Note that elements that are dynamically added to a scope must have the scope
-  selector added to them manually.
-
-  * ::pseudo: These rules are converted to rules that take advantage of the
-  pseudo attribute. For example, a shadowRoot like this inside an x-foo
-
-    <div pseudo="x-special">Special</div>
-
-  with a rule like this:
-
-    x-foo::x-special { ... }
-
-  becomes:
-
-    x-foo [pseudo=x-special] { ... }
-
-  * ::part(): These rules are converted to rules that take advantage of the
-  part attribute. For example, a shadowRoot like this inside an x-foo
-
-    <div part="special">Special</div>
-
-  with a rule like this:
-
-    x-foo::part(special) { ... }
-
-  becomes:
-
-    x-foo [part=special] { ... }
-
-  Unaddressed ShadowDOM styling features:
-
-  * upper/lower bound encapsulation: Styles which are defined outside a
-  shadowRoot should not cross the ShadowDOM boundary and should not apply
-  inside a shadowRoot.
-
-  This styling behavior is not emulated. Some possible ways to do this that
-  were rejected due to complexity and/or performance concerns include: (1) reset
-  every possible property for every possible selector for a given scope name;
-  (2) re-implement css in javascript.
-
-  As an alternative, users should make sure to use selectors
-  specific to the scope in which they are working.
-
-  * ::distributed: This behavior is not emulated. It's often not necessary
-  to style the contents of a specific insertion point and instead, descendants
-  of the host element can be styled selectively. Users can also create an
-  extra node around an insertion point and style that node's contents
-  via descendent selectors. For example, with a shadowRoot like this:
-
-    <style>
-      content::-webkit-distributed(div) {
-        background: red;
-      }
-    </style>
-    <content></content>
-
-  could become:
-
-    <style>
-      / *@polyfill .content-container div * /
-      content::-webkit-distributed(div) {
-        background: red;
-      }
-    </style>
-    <div class="content-container">
-      <content></content>
-    </div>
-
-  Note the use of @polyfill in the comment above a ShadowDOM specific style
-  declaration. This is a directive to the styling shim to use the selector
-  in comments in lieu of the next selector when running under polyfill.
-*/
-(function(scope) {
-
-var ShadowCSS = {
-  strictStyling: false,
-  registry: {},
-  // Shim styles for a given root associated with a name and extendsName
-  // 1. cache root styles by name
-  // 2. optionally tag root nodes with scope name
-  // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */
-  // 4. shim @host and scoping
-  shimStyling: function(root, name, extendsName) {
-    var typeExtension = this.isTypeExtension(extendsName);
-    // use caching to make working with styles nodes easier and to facilitate
-    // lookup of extendee
-    var def = this.registerDefinition(root, name, extendsName);
-    // find styles and apply shimming...
-    if (this.strictStyling) {
-      this.applyScopeToContent(root, name);
-    }
-    // insert @polyfill and @polyfill-rule rules into style elements
-    // scoping process takes care of shimming these
-    this.insertPolyfillDirectives(def.rootStyles);
-    this.insertPolyfillRules(def.rootStyles);
-    var cssText = this.stylesToShimmedCssText(def.scopeStyles, name,
-        typeExtension);
-    // note: we only need to do rootStyles since these are unscoped.
-    cssText += this.extractPolyfillUnscopedRules(def.rootStyles);
-    // provide shimmedStyle for user extensibility
-    def.shimmedStyle = cssTextToStyle(cssText);
-    if (root) {
-      root.shimmedStyle = def.shimmedStyle;
-    }
-    // remove existing style elements
-    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
-        i++) {
-      s.parentNode.removeChild(s);
-    }
-    // add style to document
-    addCssToDocument(cssText);
-  },
-  registerDefinition: function(root, name, extendsName) {
-    var def = this.registry[name] = {
-      root: root,
-      name: name,
-      extendsName: extendsName
-    }
-    var styles = root ? root.querySelectorAll('style') : [];
-    styles = styles ? Array.prototype.slice.call(styles, 0) : [];
-    def.rootStyles = styles;
-    def.scopeStyles = def.rootStyles;
-    var extendee = this.registry[def.extendsName];
-    if (extendee && (!root || root.querySelector('shadow'))) {
-      def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
-    }
-    return def;
-  },
-  isTypeExtension: function(extendsName) {
-    return extendsName && extendsName.indexOf('-') < 0;
-  },
-  applyScopeToContent: function(root, name) {
-    if (root) {
-      // add the name attribute to each node in root.
-      Array.prototype.forEach.call(root.querySelectorAll('*'),
-          function(node) {
-            node.setAttribute(name, '');
-          });
-      // and template contents too
-      Array.prototype.forEach.call(root.querySelectorAll('template'),
-          function(template) {
-            this.applyScopeToContent(template.content, name);
-          },
-          this);
-    }
-  },
-  /*
-   * Process styles to convert native ShadowDOM rules that will trip
-   * up the css parser; we rely on decorating the stylesheet with comments.
-   *
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill :host menu-item (comment end)
-   * shadow::-webkit-distributed(menu-item) {
-   *
-   * to this:
-   *
-   * scopeName menu-item {
-   *
-  **/
-  insertPolyfillDirectives: function(styles) {
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        s.textContent = this.insertPolyfillDirectivesInCssText(s.textContent);
-      }, this);
-    }
-  },
-  insertPolyfillDirectivesInCssText: function(cssText) {
-    return cssText.replace(cssPolyfillCommentRe, function(match, p1) {
-      // remove end comment delimiter and add block start
-      return p1.slice(0, -2) + '{';
-    });
-  },
-  /*
-   * Process styles to add rules which will only apply under the polyfill
-   *
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-rule :host menu-item {
-   * ... } (comment end)
-   *
-   * to this:
-   *
-   * scopeName menu-item {...}
-   *
-  **/
-  insertPolyfillRules: function(styles) {
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        s.textContent = this.insertPolyfillRulesInCssText(s.textContent);
-      }, this);
-    }
-  },
-  insertPolyfillRulesInCssText: function(cssText) {
-    return cssText.replace(cssPolyfillRuleCommentRe, function(match, p1) {
-      // remove end comment delimiter
-      return p1.slice(0, -1);
-    });
-  },
-  /*
-   * Process styles to add rules which will only apply under the polyfill
-   * and do not process via CSSOM. (CSSOM is destructive to rules on rare
-   * occasions, e.g. -webkit-calc on Safari.)
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-unscoped-rule menu-item {
-   * ... } (comment end)
-   *
-   * to this:
-   *
-   * menu-item {...}
-   *
-  **/
-  extractPolyfillUnscopedRules: function(styles) {
-    var cssText = '';
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        cssText += this.extractPolyfillUnscopedRulesFromCssText(
-            s.textContent) + '\n\n';
-      }, this);
-    }
-    return cssText;
-  },
-  extractPolyfillUnscopedRulesFromCssText: function(cssText) {
-    var r = '', matches;
-    while (matches = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {
-      r += matches[1].slice(0, -1) + '\n\n';
-    }
-    return r;
-  },
-  // apply @host and scope shimming
-  stylesToShimmedCssText: function(styles, name, typeExtension) {
-    return this.shimAtHost(styles, name, typeExtension) +
-        this.shimScoping(styles, name, typeExtension);
-  },
-  // form: @host { .foo { declarations } }
-  // becomes: scopeName.foo { declarations }
-  shimAtHost: function(styles, name, typeExtension) {
-    if (styles) {
-      return this.convertAtHostStyles(styles, name, typeExtension);
-    }
-  },
-  convertAtHostStyles: function(styles, name, typeExtension) {
-    var cssText = stylesToCssText(styles), self = this;
-    cssText = cssText.replace(hostRuleRe, function(m, p1) {
-      return self.scopeHostCss(p1, name, typeExtension);
-    });
-    cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
-      new RegExp('^' + name + selectorReSuffix, 'm')));
-    return cssText;
-  },
-  scopeHostCss: function(cssText, name, typeExtension) {
-    var self = this;
-    return cssText.replace(selectorRe, function(m, p1, p2) {
-      return self.scopeHostSelector(p1, name, typeExtension) + ' ' + p2 + '\n\t';
-    });
-  },
-  // supports scopig by name and  [is=name] syntax
-  scopeHostSelector: function(selector, name, typeExtension) {
-    var r = [], parts = selector.split(','), is = '[is=' + name + ']';
-    parts.forEach(function(p) {
-      p = p.trim();
-      // selector: *|:scope -> name
-      if (p.match(hostElementRe)) {
-        p = p.replace(hostElementRe, typeExtension ? is + '$1$3' :
-            name + '$1$3');
-      // selector: .foo -> name.foo (OR) [bar] -> name[bar]
-      } else if (p.match(hostFixableRe)) {
-        p = typeExtension ? is + p : name + p;
-      }
-      r.push(p);
-    }, this);
-    return r.join(', ');
-  },
-  // consider styles that do not include component name in the selector to be
-  // unscoped and in need of promotion;
-  // for convenience, also consider keyframe rules this way.
-  findAtHostRules: function(cssRules, matcher) {
-    return Array.prototype.filter.call(cssRules,
-      this.isHostRule.bind(this, matcher));
-  },
-  isHostRule: function(matcher, cssRule) {
-    return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
-      (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
-      (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
-  },
-  /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
-   *
-   *  .foo {... }
-   *
-   *  and converts this to
-   *
-   *  scopeName .foo { ... }
-  */
-  shimScoping: function(styles, name, typeExtension) {
-    if (styles) {
-      return this.convertScopedStyles(styles, name, typeExtension);
-    }
-  },
-  convertScopedStyles: function(styles, name, typeExtension) {
-    var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
-    cssText = this.insertPolyfillHostInCssText(cssText);
-    cssText = this.convertColonHost(cssText);
-    cssText = this.convertPseudos(cssText);
-    cssText = this.convertParts(cssText);
-    cssText = this.convertCombinators(cssText);
-    var rules = cssToRules(cssText);
-    cssText = this.scopeRules(rules, name, typeExtension);
-    return cssText;
-  },
-  convertPseudos: function(cssText) {
-    return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
-  },
-  convertParts: function(cssText) {
-    return cssText.replace(cssPartRe, ' [part=$1]');
-  },
-  /*
-   * convert a rule like :host(.foo) > .bar { }
-   *
-   * to
-   *
-   * scopeName.foo > .bar, .foo scopeName > .bar { }
-   * TODO(sorvell): file bug since native impl does not do the former yet.
-   * http://jsbin.com/OganOCI/2/edit
-  */
-  convertColonHost: function(cssText) {
-    // p1 = :host, p2 = contents of (), p3 rest of rule
-    return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
-      return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
-          + p2 + ' ' + p1 + p3 :
-          p1 + p3;
-    });
-  },
-  /*
-   * Convert ^ and ^^ combinators by replacing with space.
-  */
-  convertCombinators: function(cssText) {
-    return cssText.replace('^^', ' ').replace('^', ' ');
-  },
-  // change a selector like 'div' to 'name div'
-  scopeRules: function(cssRules, name, typeExtension) {
-    var cssText = '';
-    Array.prototype.forEach.call(cssRules, function(rule) {
-      if (rule.selectorText && (rule.style && rule.style.cssText)) {
-        cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
-          this.strictStyling) + ' {\n\t';
-        cssText += this.propertiesFromRule(rule) + '\n}\n\n';
-      } else if (rule.media) {
-        cssText += '@media ' + rule.media.mediaText + ' {\n';
-        cssText += this.scopeRules(rule.cssRules, name);
-        cssText += '\n}\n\n';
-      } else if (rule.cssText) {
-        cssText += rule.cssText + '\n\n';
-      }
-    }, this);
-    return cssText;
-  },
-  scopeSelector: function(selector, name, typeExtension, strict) {
-    var r = [], parts = selector.split(',');
-    parts.forEach(function(p) {
-      p = p.trim();
-      if (this.selectorNeedsScoping(p, name, typeExtension)) {
-        p = strict ? this.applyStrictSelectorScope(p, name) :
-          this.applySimpleSelectorScope(p, name, typeExtension);
-      }
-      r.push(p);
-    }, this);
-    return r.join(', ');
-  },
-  selectorNeedsScoping: function(selector, name, typeExtension) {
-    var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
-    var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
-    return !selector.match(re);
-  },
-  // scope via name and [is=name]
-  applySimpleSelectorScope: function(selector, name, typeExtension) {
-    var scoper = typeExtension ? '[is=' + name + ']' : name;
-    if (selector.match(polyfillHostRe)) {
-      selector = selector.replace(polyfillHostNoCombinator, scoper);
-      return selector.replace(polyfillHostRe, scoper + ' ');
-    } else {
-      return scoper + ' ' + selector;
-    }
-  },
-  // return a selector with [name] suffix on each simple selector
-  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
-  applyStrictSelectorScope: function(selector, name) {
-    var splits = [' ', '>', '+', '~'],
-      scoped = selector,
-      attrName = '[' + name + ']';
-    splits.forEach(function(sep) {
-      var parts = scoped.split(sep);
-      scoped = parts.map(function(p) {
-        // remove :host since it should be unnecessary
-        var t = p.trim().replace(polyfillHostRe, '');
-        if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
-          p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
-        }
-        return p;
-      }).join(sep);
-    });
-    return scoped;
-  },
-  insertPolyfillHostInCssText: function(selector) {
-    return selector.replace(hostRe, polyfillHost).replace(colonHostRe,
-        polyfillHost);
-  },
-  propertiesFromRule: function(rule) {
-    var properties = rule.style.cssText;
-    // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
-    // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
-    if (rule.style.content && !rule.style.content.match(/['"]+/)) {
-      properties = 'content: \'' + rule.style.content + '\';\n' +
-        rule.style.cssText.replace(/content:[^;]*;/g, '');
-    }
-    return properties;
-  }
-};
-
-var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
-    selectorRe = /([^{]*)({[\s\S]*?})/gim,
-    hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
-    hostFixableRe = /^[.\[:]/,
-    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
-    cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
-    cssPolyfillRuleCommentRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
-    cssPolyfillUnscopedRuleCommentRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
-    cssPseudoRe = /::(x-[^\s{,(]*)/gim,
-    cssPartRe = /::part\(([^)]*)\)/gim,
-    // note: :host pre-processed to -host.
-    cssColonHostRe = /(-host)(?:\(([^)]*)\))?([^,{]*)/gim,
-    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
-    hostRe = /@host/gim,
-    colonHostRe = /\:host/gim,
-    polyfillHost = '-host',
-    /* host name without combinator */
-    polyfillHostNoCombinator = '-host-no-combinator',
-    polyfillHostRe = /-host/gim;
-
-function stylesToCssText(styles, preserveComments) {
-  var cssText = '';
-  Array.prototype.forEach.call(styles, function(s) {
-    cssText += s.textContent + '\n\n';
-  });
-  // strip comments for easier processing
-  if (!preserveComments) {
-    cssText = cssText.replace(cssCommentRe, '');
-  }
-  return cssText;
-}
-
-function cssTextToStyle(cssText) {
-  var style = document.createElement('style');
-  style.textContent = cssText;
-  return style;
-}
-
-function cssToRules(cssText) {
-  var style = cssTextToStyle(cssText);
-  document.head.appendChild(style);
-  var rules = style.sheet.cssRules;
-  style.parentNode.removeChild(style);
-  return rules;
-}
-
-function rulesToCss(cssRules) {
-  for (var i=0, css=[]; i < cssRules.length; i++) {
-    css.push(cssRules[i].cssText);
-  }
-  return css.join('\n\n');
-}
-
-function addCssToDocument(cssText) {
-  if (cssText) {
-    getSheet().appendChild(document.createTextNode(cssText));
-  }
-}
-
-var sheet;
-function getSheet() {
-  if (!sheet) {
-    sheet = document.createElement("style");
-    sheet.setAttribute('ShadowCSSShim', '');
-  }
-  return sheet;
-}
-
-// add polyfill stylesheet to document
-if (window.ShadowDOMPolyfill) {
-  addCssToDocument('style { display: none !important; }\n');
-  var head = document.querySelector('head');
-  head.insertBefore(getSheet(), head.childNodes[0]);
-}
-
-// exports
-scope.ShadowCSS = ShadowCSS;
-
-})(window.Platform);
diff --git a/pkg/shadow_dom/pubspec.yaml b/pkg/shadow_dom/pubspec.yaml
index 61b7107..38516cb 100644
--- a/pkg/shadow_dom/pubspec.yaml
+++ b/pkg/shadow_dom/pubspec.yaml
@@ -1,4 +1,5 @@
 name: shadow_dom
+version: 0.9.0
 author: "Web UI Team <web-ui-dev@dartlang.org>"
 homepage: https://github.com/dart-lang/ShadowDOM/tree/conditional_shadowdom
 description: >
@@ -7,3 +8,5 @@
   boundaries between DOM trees and how these trees interact with each other
   within a document, thus enabling better functional encapsulation within the
   DOM.
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/shadow_dom/tool/build.json b/pkg/shadow_dom/tool/build.json
index 7834f81..8c2b7be 100644
--- a/pkg/shadow_dom/tool/build.json
+++ b/pkg/shadow_dom/tool/build.json
@@ -4,6 +4,6 @@
   "../../../third_party/polymer/ShadowDOM/build.json",
   "../lib/src/platform/patches-shadowdom-polyfill.js",
   "../lib/src/platform/platform-init.js",
-  "../lib/src/platform/ShadowCSS.js",
+  "../../../third_party/polymer/platform/src/ShadowCSS.js",
   "build/end-if.js"
 ]
diff --git a/pkg/shadow_dom/tool/build.sh b/pkg/shadow_dom/tool/build.sh
index b10ebe7..10cd859 100755
--- a/pkg/shadow_dom/tool/build.sh
+++ b/pkg/shadow_dom/tool/build.sh
@@ -16,7 +16,9 @@
 POLYMER_REMOTE=https://github.com/Polymer
 POLYMER_DIR=../../../third_party/polymer
 
-for NAME in ShadowDOM observe-js WeakMap; do
+NEWLINE=$'\n'
+REVISIONS=""
+for NAME in ShadowDOM observe-js WeakMap platform; do
   GIT_REMOTE="$POLYMER_REMOTE/$NAME.git"
   GIT_DIR="$POLYMER_DIR/$NAME"
   echo "*** Syncing $GIT_DIR from $GIT_REMOTE"
@@ -28,6 +30,9 @@
   else
     git clone $GIT_REMOTE $GIT_DIR
   fi
+  pushd $GIT_DIR > /dev/null
+  REVISIONS="$REVISIONS $NEWLINE  $NAME is at revision `git rev-parse HEAD`"
+  popd
 done
 
 echo '*** Installing NPM prerequisites'
@@ -35,3 +40,5 @@
 
 echo '*** Running grunt'
 grunt
+
+echo "*** Revision hash to use in commit message: $REVISIONS"
diff --git a/pkg/source_maps/pubspec.yaml b/pkg/source_maps/pubspec.yaml
index 4ae1802..83c59a3 100644
--- a/pkg/source_maps/pubspec.yaml
+++ b/pkg/source_maps/pubspec.yaml
@@ -1,6 +1,9 @@
 name: source_maps
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: Library to programmatically manipulate source map files.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/stack_trace/pubspec.yaml b/pkg/stack_trace/pubspec.yaml
index b672df7..63a1bf9 100644
--- a/pkg/stack_trace/pubspec.yaml
+++ b/pkg/stack_trace/pubspec.yaml
@@ -1,11 +1,14 @@
 name: stack_trace
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
   A package for manipulating stack traces and printing them readably.
 
 dependencies:
-  path: any
+  path: ">=0.9.0 <0.10.0"
 
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/template_binding/pubspec.yaml b/pkg/template_binding/pubspec.yaml
index 62a8a94..180fe90 100644
--- a/pkg/template_binding/pubspec.yaml
+++ b/pkg/template_binding/pubspec.yaml
@@ -1,12 +1,16 @@
 name: template_binding
+version: 0.9.0
 author: Polymer.dart Team <web-ui-dev@dartlang.org>
 description: >
   Extends the capabilities of the HTML Template Element by enabling it to
   create, manage, and remove instances of content bound to data defined in Dart.
 homepage: https://www.dartlang.org/polymer-dart/
 dependencies:
-  logging: any
-  observe: any
+  logging: ">=0.9.0 <0.10.0"
+  mutation_observer: ">=0.9.0 <0.10.0"
+  observe: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  custom_element: any
-  unittest: any
+  custom_element: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/template_binding/test/template_binding_test.dart b/pkg/template_binding/test/template_binding_test.dart
index 2e5c327..7c0b71b 100644
--- a/pkg/template_binding/test/template_binding_test.dart
+++ b/pkg/template_binding/test/template_binding_test.dart
@@ -27,15 +27,25 @@
 main() {
   useHtmlConfiguration();
 
-  setUp(() {
+  // Load MutationObserver polyfill in case IE needs it.
+  var script = new ScriptElement()
+      ..src = '/root_dart/pkg/mutation_observer/lib/mutation_observer.min.js';
+  var polyfillLoaded = script.onLoad.first;
+  document.head.append(script);
+
+  setUp(() => polyfillLoaded.then((_) {
     document.body.append(testDiv = new DivElement());
-  });
+  }));
 
   tearDown(() {
     testDiv.remove();
     testDiv = null;
   });
 
+  test('MutationObserver is supported', () {
+    expect(MutationObserver.supported, true, reason: 'polyfill was loaded.');
+  });
+
   group('Template Instantiation', templateInstantiationTests);
 
   group('Binding Delegate API', () {
diff --git a/pkg/third_party/html5lib/pubspec.yaml b/pkg/third_party/html5lib/pubspec.yaml
index 6a2a57f..728b008 100644
--- a/pkg/third_party/html5lib/pubspec.yaml
+++ b/pkg/third_party/html5lib/pubspec.yaml
@@ -1,11 +1,14 @@
 name: html5lib
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: A library for working with HTML documents.
 homepage: http://pub.dartlang.org/packages/html5lib
 dependencies:
-  source_maps: any
-  utf: any
+  source_maps: ">=0.9.0 <0.10.0"
+  utf: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  browser: any
-  path: any
-  unittest: any
+  browser: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/unittest/pubspec.yaml b/pkg/unittest/pubspec.yaml
index aab71ab..ebc4d7b 100644
--- a/pkg/unittest/pubspec.yaml
+++ b/pkg/unittest/pubspec.yaml
@@ -1,8 +1,10 @@
 name: unittest
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: A library for writing dart unit tests.
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/unittest
 dependencies:
-  meta: any
-  stack_trace: any
+  stack_trace: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/unmodifiable_collection/pubspec.yaml b/pkg/unmodifiable_collection/pubspec.yaml
index 43cbc11..17a035f 100644
--- a/pkg/unmodifiable_collection/pubspec.yaml
+++ b/pkg/unmodifiable_collection/pubspec.yaml
@@ -1,7 +1,10 @@
 name: unmodifiable_collection
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
   Unmodifiable wrappers for base collection types.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/utf/pubspec.yaml b/pkg/utf/pubspec.yaml
index 707be03..e997dac 100644
--- a/pkg/utf/pubspec.yaml
+++ b/pkg/utf/pubspec.yaml
@@ -1,4 +1,5 @@
 name: utf
+version: 0.9.0
 author: Dart Team <misc@dartlang.org>
 description: >
  A Unicode library. Intended for advanced use where the built-in facilities
@@ -6,4 +7,6 @@
 homepage: http://www.dartlang.org
 documentation: http://api.dartlang.org/docs/pkg/utf
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/watcher/pubspec.yaml b/pkg/watcher/pubspec.yaml
index 263832e..b95c7ef 100644
--- a/pkg/watcher/pubspec.yaml
+++ b/pkg/watcher/pubspec.yaml
@@ -1,4 +1,5 @@
 name: watcher
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: >
@@ -6,8 +7,10 @@
   of directories and notifies you when files have been added, removed, or
   modified.
 dependencies:
-  crypto: any
-  path: any
+  crypto: ">=0.9.0 <0.10.0"
+  path: ">=0.9.0 <0.10.0"
 dev_dependencies:
-  scheduled_test: any
-  unittest: any
+  scheduled_test: ">=0.9.0 <0.10.0"
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/yaml/pubspec.yaml b/pkg/yaml/pubspec.yaml
index 4b17267..1fb4c8d 100644
--- a/pkg/yaml/pubspec.yaml
+++ b/pkg/yaml/pubspec.yaml
@@ -1,6 +1,9 @@
 name: yaml
+version: 0.9.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: A parser for YAML.
 dev_dependencies:
-  unittest: any
+  unittest: ">=0.9.0 <0.10.0"
+environment:
+  sdk: ">=0.8.10+6 <2.0.0"
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 7546f40..8d8145e 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -4,6 +4,13 @@
 
 library builtin;
 import 'dart:io';
+// import 'root_library'; happens here from C Code
+
+// The root library (aka the script) is imported into this library. The
+// standalone embedder uses this to lookup the main entrypoint in the
+// root library's namespace.
+Function _getMainClosure() => main;
+
 
 // Corelib 'print' implementation.
 void _print(arg) {
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 657a457..1c1277b 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -10,12 +10,13 @@
 #include "platform/assert.h"
 #include "platform/globals.h"
 
-#include "bin/extensions.h"
+#include "bin/crypto.h"
 #include "bin/directory.h"
+#include "bin/extensions.h"
 #include "bin/file.h"
 #include "bin/io_buffer.h"
-#include "bin/utils.h"
 #include "bin/socket.h"
+#include "bin/utils.h"
 
 namespace dart {
 namespace bin {
@@ -243,6 +244,11 @@
 }
 
 
+bool DartUtils::EntropySource(uint8_t* buffer, intptr_t length) {
+  return Crypto::GetRandomBytes(length, buffer);
+}
+
+
 static Dart_Handle SingleArgDart_Invoke(Dart_Handle lib, const char* method,
                                         Dart_Handle arg) {
   const int kNumArgs = 1;
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 375a9bc..476d813 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -115,6 +115,8 @@
   static void ReadFile(const uint8_t** data, intptr_t* file_len, void* stream);
   static void WriteFile(const void* buffer, intptr_t num_bytes, void* stream);
   static void CloseFile(void* stream);
+  static bool EntropySource(uint8_t* buffer, intptr_t length);
+
   static Dart_Handle ReadStringFromFile(const char* filename);
   static Dart_Handle ReadStringFromHttp(const char* filename);
   static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 2da2778..e502a0b 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -499,7 +499,8 @@
                        DartUtils::OpenFile,
                        DartUtils::ReadFile,
                        DartUtils::WriteFile,
-                       DartUtils::CloseFile)) {
+                       DartUtils::CloseFile,
+                       DartUtils::EntropySource)) {
     Log::PrintErr("VM initialization failed\n");
     return 255;
   }
diff --git a/runtime/bin/io_impl_sources.gypi b/runtime/bin/io_impl_sources.gypi
index 8887d10..d026609 100644
--- a/runtime/bin/io_impl_sources.gypi
+++ b/runtime/bin/io_impl_sources.gypi
@@ -7,6 +7,7 @@
 {
   'sources': [
     'crypto.cc',
+    'crypto.h',
     'crypto_android.cc',
     'crypto_linux.cc',
     'crypto_macos.cc',
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index fae077d..c696a9d 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -823,7 +823,8 @@
                        DartUtils::OpenFile,
                        DartUtils::ReadFile,
                        DartUtils::WriteFile,
-                       DartUtils::CloseFile)) {
+                       DartUtils::CloseFile,
+                       DartUtils::EntropySource)) {
     fprintf(stderr, "%s", "VM initialization failed\n");
     fflush(stderr);
     return kErrorExitCode;
@@ -897,6 +898,14 @@
     ASSERT(bytes_written);
     delete snapshot_file;
   } else {
+    // Lookup the library of the root script.
+    Dart_Handle root_lib = Dart_RootLibrary();
+    // Import the root library into the builtin library so that we can easily
+    // lookup the main entry point exported from the root library.
+    Dart_Handle builtin_lib =
+        Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+    result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null());
+
     if (has_compile_all) {
       result = Dart_CompileAll();
       if (Dart_IsError(result)) {
@@ -911,60 +920,65 @@
       }
     }
 
-    // Lookup the library of the root script.
-    Dart_Handle library = Dart_RootLibrary();
-    if (Dart_IsNull(library)) {
+    if (Dart_IsNull(root_lib)) {
       return ErrorExit(kErrorExitCode,
                        "Unable to find root library for '%s'\n",
                        script_name);
     }
-    // Set debug breakpoint if specified on the command line.
-    if (breakpoint_at != NULL) {
-      result = SetBreakpoint(breakpoint_at, library);
-      if (Dart_IsError(result)) {
-        return ErrorExit(kErrorExitCode,
-                         "Error setting breakpoint at '%s': %s\n",
-                         breakpoint_at,
-                         Dart_GetError(result));
-      }
-    }
     if (has_print_script) {
       result = GenerateScriptSource();
       if (Dart_IsError(result)) {
         return DartErrorExit(result);
       }
     } else {
-      // Lookup and invoke the top level main function.
-      // The top-level function may accept up to two arguments:
-      //   main(List<String> args, var message).
-      // However most commonly it either accepts one (the args list) or
-      // none.
-      // If the message is optional, main(args, [message]), it is invoked with
-      // one argument only.
-      Dart_Handle main_args[2];
-      main_args[0] = CreateRuntimeOptions(&dart_options);
-      main_args[1] = Dart_Null();
-      // First try with 1 argument.
-      result = Dart_Invoke(library, DartUtils::NewString("main"), 1, main_args);
-      // TODO(iposva): Return a special error type for mismatched argument
-      // counts from Dart_Invoke to avoid the string comparison.
-      const char* expected_error = "Dart_Invoke: wrong argument count for "
-          "function 'main': ";
-      intptr_t length = strlen(expected_error);
-      if (Dart_IsError(result) &&
-          strncmp(expected_error, Dart_GetError(result), length) == 0) {
-        // Try with two arguments.
-        result =
-            Dart_Invoke(library, DartUtils::NewString("main"), 2, main_args);
-        if (Dart_IsError(result) &&
-            strncmp(expected_error, Dart_GetError(result), length) == 0) {
-          // Finally try with 0 arguments.
-          result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL);
+      // The helper function _getMainClosure creates a closure for the main
+      // entry point which is either explicitly or implictly exported from the
+      // root library.
+      Dart_Handle main_closure = Dart_Invoke(
+          builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
+      if (Dart_IsError(main_closure)) {
+        return DartErrorExit(result);
+      }
+
+      // Set debug breakpoint if specified on the command line before calling
+      // the main function.
+      if (breakpoint_at != NULL) {
+        result = SetBreakpoint(breakpoint_at, root_lib);
+        if (Dart_IsError(result)) {
+          return ErrorExit(kErrorExitCode,
+                           "Error setting breakpoint at '%s': %s\n",
+                           breakpoint_at,
+                           Dart_GetError(result));
         }
       }
+
+      // Call _startIsolate in the isolate library to enable dispatching the
+      // initial startup message.
+      Dart_Handle isolate_args[2];
+      isolate_args[0] = main_closure;
+      isolate_args[1] = Dart_True();
+
+      Dart_Handle isolate_lib = Dart_LookupLibrary(
+          Dart_NewStringFromCString("dart:isolate"));
+      result = Dart_Invoke(isolate_lib,
+                           Dart_NewStringFromCString("_startIsolate"),
+                           2, isolate_args);
+
+      // Setup the arguments in the initial startup message and leave the
+      // replyTo and message fields empty.
+      Dart_Handle initial_startup_msg = Dart_NewList(3);
+      result = Dart_ListSetAt(initial_startup_msg, 1,
+                              CreateRuntimeOptions(&dart_options));
       if (Dart_IsError(result)) {
         return DartErrorExit(result);
       }
+      Dart_Port main_port = Dart_GetMainPortId();
+      bool posted = Dart_Post(main_port, initial_startup_msg);
+      if (!posted) {
+        return ErrorExit(kErrorExitCode,
+                         "Failed posting startup message to main "
+                         "isolate control port.");
+      }
 
       // Keep handling messages until the last active receive port is closed.
       result = Dart_RunLoop();
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 7ff4198..438a2cc 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -109,7 +109,8 @@
                                        dart::bin::DartUtils::OpenFile,
                                        dart::bin::DartUtils::ReadFile,
                                        dart::bin::DartUtils::WriteFile,
-                                       dart::bin::DartUtils::CloseFile);
+                                       dart::bin::DartUtils::CloseFile,
+                                       NULL);
   ASSERT(err_msg == NULL);
   // Apply the filter to all registered tests.
   TestCaseBase::RunAll();
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index 4dfbe50..48acaf3 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -235,13 +235,24 @@
   if (Dart_IsError(err)) Dart_PropagateError(err);
   OSError os_error;
   intptr_t port = 0;
-  ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
-  char host[INET6_ADDRSTRLEN];
-  if (Socket::GetRemotePeer(socket, host, &port)) {
+  SocketAddress* addr = Socket::GetRemotePeer(socket, &port);
+  if (addr != NULL) {
     Dart_Handle list = Dart_NewList(2);
-    Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host));
+
+    Dart_Handle entry = Dart_NewList(3);
+    Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType()));
+    Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string()));
+
+    RawAddr raw = addr->addr();
+    intptr_t data_length = SocketAddress::GetAddrLength(&raw);
+    Dart_Handle data = Dart_NewTypedData(Dart_TypedData_kUint8, data_length);
+    Dart_ListSetAsBytes(data, 0, reinterpret_cast<uint8_t*>(&raw), data_length);
+    Dart_ListSetAt(entry, 2, data);
+
+    Dart_ListSetAt(list, 0, entry);
     Dart_ListSetAt(list, 1, Dart_NewInteger(port));
     Dart_SetReturnValue(args, list);
+    delete addr;
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index 63fc5ef..ce94c5e 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -163,7 +163,7 @@
   static intptr_t CreateConnect(RawAddr addr,
                                 const intptr_t port);
   static intptr_t GetPort(intptr_t fd);
-  static bool GetRemotePeer(intptr_t fd, char* host, intptr_t* port);
+  static SocketAddress* GetRemotePeer(intptr_t fd, intptr_t* port);
   static void GetError(intptr_t fd, OSError* os_error);
   static int GetType(intptr_t fd);
   static intptr_t GetStdioHandle(intptr_t num);
diff --git a/runtime/bin/socket_android.cc b/runtime/bin/socket_android.cc
index 38c1c7f..02aed0b 100644
--- a/runtime/bin/socket_android.cc
+++ b/runtime/bin/socket_android.cc
@@ -136,7 +136,7 @@
 }
 
 
-bool Socket::GetRemotePeer(intptr_t fd, char *host, intptr_t *port) {
+SocketAddress* Socket::GetRemotePeer(intptr_t fd, intptr_t* port) {
   ASSERT(fd >= 0);
   RawAddr raw;
   socklen_t size = sizeof(raw);
@@ -148,23 +148,10 @@
     char error_message[kBufferSize];
     strerror_r(errno, error_message, kBufferSize);
     Log::PrintErr("Error getpeername: %s\n", error_message);
-    return false;
-  }
-  if (TEMP_FAILURE_RETRY(getnameinfo(&raw.addr,
-                                     size,
-                                     host,
-                                     INET6_ADDRSTRLEN,
-                                     NULL,
-                                     0,
-                                     NI_NUMERICHOST)) != 0) {
-    const int kBufferSize = 1024;
-    char error_message[kBufferSize];
-    strerror_r(errno, error_message, kBufferSize);
-    Log::PrintErr("Error getnameinfo: %s\n", error_message);
-    return false;
+    return NULL;
   }
   *port = SocketAddress::GetAddrPort(&raw);
-  return true;
+  return new SocketAddress(&raw.addr);
 }
 
 
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index b9431e1..c3c01cc 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -137,7 +137,7 @@
 }
 
 
-bool Socket::GetRemotePeer(intptr_t fd, char *host, intptr_t *port) {
+SocketAddress* Socket::GetRemotePeer(intptr_t fd, intptr_t* port) {
   ASSERT(fd >= 0);
   RawAddr raw;
   socklen_t size = sizeof(raw);
@@ -149,23 +149,10 @@
     char error_buf[kBufferSize];
     Log::PrintErr("Error getpeername: %s\n",
                   strerror_r(errno, error_buf, kBufferSize));
-    return false;
-  }
-  if (TEMP_FAILURE_RETRY(getnameinfo(&raw.addr,
-                                     size,
-                                     host,
-                                     INET6_ADDRSTRLEN,
-                                     NULL,
-                                     0,
-                                     NI_NUMERICHOST)) != 0) {
-    const int kBufferSize = 1024;
-    char error_buf[kBufferSize];
-    Log::PrintErr("Error getnameinfo: %s\n",
-                  strerror_r(errno, error_buf, kBufferSize));
-    return false;
+    return NULL;
   }
   *port = SocketAddress::GetAddrPort(&raw);
-  return true;
+  return new SocketAddress(&raw.addr);
 }
 
 
diff --git a/runtime/bin/socket_macos.cc b/runtime/bin/socket_macos.cc
index be7beca..4b6ead6 100644
--- a/runtime/bin/socket_macos.cc
+++ b/runtime/bin/socket_macos.cc
@@ -137,7 +137,7 @@
 }
 
 
-bool Socket::GetRemotePeer(intptr_t fd, char *host, intptr_t *port) {
+SocketAddress* Socket::GetRemotePeer(intptr_t fd, intptr_t* port) {
   ASSERT(fd >= 0);
   RawAddr raw;
   socklen_t size = sizeof(raw);
@@ -149,23 +149,10 @@
     char error_message[kBufferSize];
     strerror_r(errno, error_message, kBufferSize);
     Log::PrintErr("Error getpeername: %s\n", error_message);
-    return false;
-  }
-  if (TEMP_FAILURE_RETRY(getnameinfo(&raw.addr,
-                                     size,
-                                     host,
-                                     INET6_ADDRSTRLEN,
-                                     NULL,
-                                     0,
-                                     NI_NUMERICHOST)) != 0) {
-    const int kBufferSize = 1024;
-    char error_message[kBufferSize];
-    strerror_r(errno, error_message, kBufferSize);
-    Log::PrintErr("Error getnameinfo: %s\n", error_message);
-    return false;
+    return NULL;
   }
   *port = SocketAddress::GetAddrPort(&raw);
-  return true;
+  return new SocketAddress(&raw.addr);
 }
 
 
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 2c1990d..fb93b8b 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -440,8 +440,10 @@
     return nativeGetRemotePeer()[1];
   }
 
-  String get remoteHost {
-    return nativeGetRemotePeer()[0];
+  InternetAddress get remoteAddress {
+    var result = nativeGetRemotePeer()[0];
+    var type = new InternetAddressType._from(result[0]);
+    return new _InternetAddress(type, result[1], "", result[2]);
   }
 
   // Multiplexes socket events to the socket handlers.
@@ -814,7 +816,7 @@
 
   List<int> read([int len]) {
     if (_isMacOSTerminalInput) {
-      var available = available();
+      var available = this.available();
       if (available == 0) return null;
       var data = _socket.read(len);
       if (data == null || data.length < available) {
@@ -841,7 +843,7 @@
 
   InternetAddress get address => _socket.address;
 
-  String get remoteHost => _socket.remoteHost;
+  InternetAddress get remoteAddress => _socket.remoteAddress;
 
   bool get readEventsEnabled => _readEventsEnabled;
   void set readEventsEnabled(bool value) {
@@ -1112,7 +1114,7 @@
   }
 
   int get port => _raw.port;
-  String get remoteHost => _raw.remoteHost;
+  InternetAddress get remoteAddress => _raw.remoteAddress;
   int get remotePort => _raw.remotePort;
 
   Future _detachRaw() {
diff --git a/runtime/bin/socket_win.cc b/runtime/bin/socket_win.cc
index a5d55a9..32b690d 100644
--- a/runtime/bin/socket_win.cc
+++ b/runtime/bin/socket_win.cc
@@ -85,7 +85,7 @@
 }
 
 
-bool Socket::GetRemotePeer(intptr_t fd, char *host, intptr_t *port) {
+SocketAddress* Socket::GetRemotePeer(intptr_t fd, intptr_t* port) {
   ASSERT(reinterpret_cast<Handle*>(fd)->is_socket());
   SocketHandle* socket_handle = reinterpret_cast<SocketHandle*>(fd);
   RawAddr raw;
@@ -94,23 +94,13 @@
                   &raw.addr,
                   &size)) {
     Log::PrintErr("Error getpeername: %d\n", WSAGetLastError());
-    return false;
+    return NULL;
   }
   *port = SocketAddress::GetAddrPort(&raw);
   // Clear the port before calling WSAAddressToString as WSAAddressToString
   // includes the port in the formatted string.
   SocketAddress::SetAddrPort(&raw, 0);
-  DWORD len = INET6_ADDRSTRLEN;
-  int err = WSAAddressToStringA(&raw.addr,
-                                sizeof(raw),
-                                NULL,
-                                host,
-                                &len);
-  if (err != 0) {
-    Log::PrintErr("Error WSAAddressToString: %d\n", WSAGetLastError());
-    return false;
-  }
-  return true;
+  return new SocketAddress(&raw.addr);
 }
 
 
diff --git a/runtime/bin/vmservice/client/web/index.html b/runtime/bin/vmservice/client/web/index.html
index c2dbabd..48a9cbd 100644
--- a/runtime/bin/vmservice/client/web/index.html
+++ b/runtime/bin/vmservice/client/web/index.html
@@ -5,11 +5,7 @@
   <link type="text/css" rel="stylesheet" 
                         href="bootstrap_css/css/bootstrap.min.css" />
   <link rel="import" href="packages/observatory/observatory_elements.html">
-  <script type='application/dart'>
-    import 'package:polymer/init.dart';
-    // this export won't be needed after we fix issue 14542
-    export 'package:polymer/init.dart';
-	</script>
+  <script type='application/dart'>export 'package:polymer/init.dart';</script>
   <script src="packages/browser/dart.js"></script>
 </head>
 <body>
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 6fe83fe..805737c 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -724,6 +724,7 @@
 
 typedef void (*Dart_FileCloseCallback)(void* stream);
 
+typedef bool (*Dart_EntropySource)(uint8_t* buffer, intptr_t length);
 
 /**
  * Initializes the VM.
@@ -747,7 +748,8 @@
     Dart_FileOpenCallback file_open,
     Dart_FileReadCallback file_read,
     Dart_FileWriteCallback file_write,
-    Dart_FileCloseCallback file_close);
+    Dart_FileCloseCallback file_close,
+    Dart_EntropySource entropy_source);
 
 /**
  * Cleanup state in the VM before process termination.
@@ -2154,8 +2156,7 @@
 /* TODO(turnidge): Finish documenting this section. */
 
 typedef enum {
-  Dart_kLibraryTag = 0,
-  Dart_kImportTag,
+  Dart_kImportTag = 0,
   Dart_kSourceTag,
   Dart_kCanonicalizeUrl
 } Dart_LibraryTag;
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index cdee5c4..81aa289 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -562,7 +562,7 @@
 
   bool contains(Object object) {
     int index = _hashCode(object) & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       if (_equals(entry.key, object)) return true;
       entry = entry.next;
@@ -572,7 +572,7 @@
 
   E lookup(Object object) {
     int index = _hashCode(object) & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       var key = entry.key;
       if (_equals(key, object)) return key;
@@ -586,7 +586,7 @@
   bool add(E element) {
     int hashCode = _hashCode(element);
     int index = hashCode & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       if (_equals(entry.key, element)) return false;
       entry = entry.next;
@@ -641,8 +641,8 @@
   void _filterWhere(bool test(E element), bool removeMatching) {
     int length = _buckets.length;
     for (int index =  0; index < length; index++) {
-      HashSetEntry entry = _buckets[index];
-      HashSetEntry previous = null;
+      _HashSetEntry entry = _buckets[index];
+      _HashSetEntry previous = null;
       while (entry != null) {
         int modificationCount = _modificationCount;
         bool testResult = test(entry.key);
@@ -650,7 +650,7 @@
           throw new ConcurrentModificationError(this);
         }
         if (testResult == removeMatching) {
-          HashSetEntry next = entry.remove();
+          _HashSetEntry next = entry.remove();
           if (previous == null) {
             _buckets[index] = next;
           } else {
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index df716fc..f900083 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -266,6 +266,12 @@
   if (port.IsError()) {
     Exceptions::PropagateError(Error::Cast(port));
   }
+
+  // The control port is being accessed as a regular port from Dart code. This
+  // is most likely due to the _startIsolate code in dart:isolate. Account for
+  // this by increasing the number of open control ports.
+  isolate->message_handler()->increment_control_ports();
+
   return port.raw();
 }
 
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 6022b07..99d0d69 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -110,13 +110,8 @@
 
 class _SendPortImpl implements SendPort {
   /*--- public interface ---*/
-  void send(var message, [SendPort replyTo = null]) {
-    this._sendNow(message, replyTo);
-  }
-
-  void _sendNow(var message, SendPort replyTo) {
-    int replyId = (replyTo == null) ? 0 : replyTo._id;
-    _sendInternal(_id, replyId, message);
+  void send(var message) {
+    _sendInternal(_id, 0, message);
   }
 
   bool operator==(var other) {
@@ -145,6 +140,7 @@
 
   // Forward the implementation of sending messages to the VM. Only port ids
   // are being handed to the VM.
+  // TODO(14731): Remove replyId argument.
   static _sendInternal(int sendId, int replyId, var message)
       native "SendPortImpl_sendInternal_";
 
@@ -178,8 +174,10 @@
     keepAlivePort.close();
 
     SendPort replyTo = message[0];
-    // TODO(floitsch): don't send ok-message if we can't find the entry point.
-    replyTo.send("started");
+    if (replyTo != null) {
+      // TODO(floitsch): don't send ok-message if we can't find the entry point.
+      replyTo.send("started");
+    }
     if (isSpawnUri) {
       assert(message.length == 3);
       List<String> args = message[1];
@@ -216,7 +214,7 @@
         completer.complete(new Isolate._fromControlPort(controlPort));
       };
     } catch(e, st) {
-      // TODO(14718): we want errors to go into the returned future.
+      // TODO(floitsch): we want errors to go into the returned future.
       rethrow;
     };
     return completer.future;
@@ -236,7 +234,7 @@
         completer.complete(new Isolate._fromControlPort(controlPort));
       };
     } catch(e, st) {
-      // TODO(14718): we want errors to go into the returned future.
+      // TODO(floitsch): we want errors to go into the returned future.
       rethrow;
     };
     return completer.future;
diff --git a/runtime/lib/math_patch.dart b/runtime/lib/math_patch.dart
index 00cacdf..b1301e9 100644
--- a/runtime/lib/math_patch.dart
+++ b/runtime/lib/math_patch.dart
@@ -113,7 +113,7 @@
   void _nextState() native "Random_nextState";
 
   int nextInt(int max) {
-    // TODO(srdjan): Remove the 'limit' check once optimizing  comparison of
+    // TODO(srdjan): Remove the 'limit' check once optimizing comparison of
     // Smi-s with Mint constants.
     final limit = 0x3FFFFFFF;
     if (max <= 0 || ((max > limit) && (max > _POW2_32))) {
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 6f76866..a2ab082 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -49,9 +49,10 @@
   void clear() => _throw();
 }
 
-// These values are allowed to be passed directly over the wire.
-bool _isSimpleValue(var value) {
-  return (value == null || value is num || value is String || value is bool);
+class _InternalMirrorError {
+  const _InternalMirrorError(String this._msg);
+  String toString() => _msg;
+  final String _msg;
 }
 
 Map _filterMap(Map<Symbol, dynamic> old_map, bool filter(Symbol key, value)) {
@@ -216,19 +217,6 @@
                        value);
     return reflect(value);
   }
-
-  static _validateArgument(int i, Object arg)
-  {
-    if (arg is Mirror) {
-        if (arg is! InstanceMirror) {
-          throw new MirrorException(
-              'positional argument $i ($arg) was not an InstanceMirror');
-        }
-      } else if (!_isSimpleValue(arg)) {
-        throw new MirrorException(
-            'positional argument $i ($arg) was not a simple value');
-      }
-  }
 }
 
 class _LocalInstanceMirrorImpl extends _LocalObjectMirrorImpl
@@ -1252,7 +1240,7 @@
       } else {
         var parts = MirrorSystem.getName(simpleName).split('.');
         if (parts.length > 2) {
-          throw new MirrorException(
+          throw new _InternalMirrorError(
               'Internal error in MethodMirror.constructorName: '
               'malformed name <$simpleName>');
         } else if (parts.length == 2) {
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index d2aaf68..2bda632 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -54,8 +54,8 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Float32x4_fromUint32x4Bits, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, v, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1));
   return Float32x4::New(v.value());
 }
 
@@ -122,7 +122,7 @@
   uint32_t _y = a.y() < b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() < b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() < b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -133,7 +133,7 @@
   uint32_t _y = a.y() <= b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() <= b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() <= b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -144,7 +144,7 @@
   uint32_t _y = a.y() > b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() > b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() > b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -155,7 +155,7 @@
   uint32_t _y = a.y() >= b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() >= b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() >= b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -166,7 +166,7 @@
   uint32_t _y = a.y() == b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() == b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() == b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -177,7 +177,7 @@
   uint32_t _y = a.y() != b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() != b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() != b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -260,8 +260,8 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getSignMask, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_getSignMask, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   uint32_t mx = (self.x() & 0x80000000) >> 31;
   uint32_t my = (self.y() & 0x80000000) >> 31;
   uint32_t mz = (self.z() & 0x80000000) >> 31;
@@ -399,311 +399,311 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromInts, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) {
   ASSERT(AbstractTypeArguments::CheckedHandle(
       arguments->NativeArgAt(0)).IsNull());
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4));
-  uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromBools, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) {
   ASSERT(AbstractTypeArguments::CheckedHandle(
       arguments->NativeArgAt(0)).IsNull());
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4));
-  uint32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromFloat32x4Bits, 2) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromFloat32x4Bits, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1));
-  return Uint32x4::New(v.value());
+  return Int32x4::New(v.value());
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_or, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() | other.x();
-  uint32_t _y = self.y() | other.y();
-  uint32_t _z = self.z() | other.z();
-  uint32_t _w = self.w() | other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_or, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() | other.x();
+  int32_t _y = self.y() | other.y();
+  int32_t _z = self.z() | other.z();
+  int32_t _w = self.w() | other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_and, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() & other.x();
-  uint32_t _y = self.y() & other.y();
-  uint32_t _z = self.z() & other.z();
-  uint32_t _w = self.w() & other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_and, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() & other.x();
+  int32_t _y = self.y() & other.y();
+  int32_t _z = self.z() & other.z();
+  int32_t _w = self.w() & other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_xor, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() ^ other.x();
-  uint32_t _y = self.y() ^ other.y();
-  uint32_t _z = self.z() ^ other.z();
-  uint32_t _w = self.w() ^ other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_xor, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() ^ other.x();
+  int32_t _y = self.y() ^ other.y();
+  int32_t _z = self.z() ^ other.z();
+  int32_t _w = self.w() ^ other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_add, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() + other.x();
-  uint32_t _y = self.y() + other.y();
-  uint32_t _z = self.z() + other.z();
-  uint32_t _w = self.w() + other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_add, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() + other.x();
+  int32_t _y = self.y() + other.y();
+  int32_t _z = self.z() + other.z();
+  int32_t _w = self.w() + other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_sub, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() - other.x();
-  uint32_t _y = self.y() - other.y();
-  uint32_t _z = self.z() - other.z();
-  uint32_t _w = self.w() - other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_sub, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() - other.x();
+  int32_t _y = self.y() - other.y();
+  int32_t _z = self.z() - other.z();
+  int32_t _w = self.w() - other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getX, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getX, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.x();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getY, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getY, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.y();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getZ, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getZ, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.z();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getW, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getW, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.w();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffle, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffle, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
   int64_t m = mask.AsInt64Value();
   ThrowMaskRangeException(m);
-  uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
-  uint32_t _x = data[m & 0x3];
-  uint32_t _y = data[(m >> 2) & 0x3];
-  uint32_t _z = data[(m >> 4) & 0x3];
-  uint32_t _w = data[(m >> 6) & 0x3];
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+  int32_t _x = data[m & 0x3];
+  int32_t _y = data[(m >> 2) & 0x3];
+  int32_t _z = data[(m >> 4) & 0x3];
+  int32_t _w = data[(m >> 6) & 0x3];
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffleMix, 3) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, zw, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffleMix, 3) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, zw, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
   int64_t m = mask.AsInt64Value();
   ThrowMaskRangeException(m);
-  uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
-  uint32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
-  uint32_t _x = data[m & 0x3];
-  uint32_t _y = data[(m >> 2) & 0x3];
-  uint32_t _z = zw_data[(m >> 4) & 0x3];
-  uint32_t _w = zw_data[(m >> 6) & 0x3];
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+  int32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
+  int32_t _x = data[m & 0x3];
+  int32_t _y = data[(m >> 2) & 0x3];
+  int32_t _z = zw_data[(m >> 4) & 0x3];
+  int32_t _w = zw_data[(m >> 6) & 0x3];
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setX, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setX, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
-  uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setY, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _z = self.z();
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setZ, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setZ, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setW, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setW, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagX, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagX, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.x();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagY, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagY, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.y();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagZ, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagZ, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.z();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagW, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagW, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.w();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagX, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagX, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagX, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _x = flagX.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagY, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagY, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _y = flagY.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagZ, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagZ, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagZ, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _z = flagZ.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagW, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagW, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagW, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _w = flagW.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-// Used to convert between uint32_t and float32 without breaking strict
+// Used to convert between int32_t and float32 without breaking strict
 // aliasing rules.
-union float32_uint32 {
+union float32_int32 {
   float f;
-  uint32_t u;
-  float32_uint32(float v) {
+  int32_t u;
+  float32_int32(float v) {
     f = v;
   }
-  float32_uint32(uint32_t v) {
+  float32_int32(int32_t v) {
     u = v;
   }
 };
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_select, 3) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_select, 3) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, tv, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, fv, arguments->NativeArgAt(2));
-  uint32_t _maskX = self.x();
-  uint32_t _maskY = self.y();
-  uint32_t _maskZ = self.z();
-  uint32_t _maskW = self.w();
+  int32_t _maskX = self.x();
+  int32_t _maskY = self.y();
+  int32_t _maskZ = self.z();
+  int32_t _maskW = self.w();
   // Extract floats and interpret them as masks.
-  float32_uint32 tvx(tv.x());
-  float32_uint32 tvy(tv.y());
-  float32_uint32 tvz(tv.z());
-  float32_uint32 tvw(tv.w());
-  float32_uint32 fvx(fv.x());
-  float32_uint32 fvy(fv.y());
-  float32_uint32 fvz(fv.z());
-  float32_uint32 fvw(fv.w());
+  float32_int32 tvx(tv.x());
+  float32_int32 tvy(tv.y());
+  float32_int32 tvz(tv.z());
+  float32_int32 tvw(tv.w());
+  float32_int32 fvx(fv.x());
+  float32_int32 fvy(fv.y());
+  float32_int32 fvz(fv.z());
+  float32_int32 fvw(fv.w());
   // Perform select.
-  float32_uint32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
-  float32_uint32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
-  float32_uint32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
-  float32_uint32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
+  float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
+  float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
+  float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
+  float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
   return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f);
 }
 
diff --git a/runtime/lib/typed_data.cc b/runtime/lib/typed_data.cc
index b671aef..703a7f9 100644
--- a/runtime/lib/typed_data.cc
+++ b/runtime/lib/typed_data.cc
@@ -296,7 +296,7 @@
 TYPED_DATA_NATIVES(GetFloat32, SetFloat32, Double, value, 4)
 TYPED_DATA_NATIVES(GetFloat64, SetFloat64, Double, value, 8)
 TYPED_DATA_NATIVES(GetFloat32x4, SetFloat32x4, Float32x4, value, 16)
-TYPED_DATA_NATIVES(GetUint32x4, SetUint32x4, Uint32x4, value, 16)
+TYPED_DATA_NATIVES(GetInt32x4, SetInt32x4, Int32x4, value, 16)
 
 
 DEFINE_NATIVE_ENTRY(ByteData_ToEndianInt16, 2) {
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index 64e43d4..d97e4fe 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -244,22 +244,22 @@
 }
 
 
-patch class Uint32x4List {
-  /* patch */ factory Uint32x4List(int length) {
-    return new _Uint32x4Array(length);
+patch class Int32x4List {
+  /* patch */ factory Int32x4List(int length) {
+    return new _Int32x4Array(length);
   }
 
-  /* patch */ factory Uint32x4List.fromList(List<Uint32x4> elements) {
-    var result = new _Uint32x4Array(elements.length);
+  /* patch */ factory Int32x4List.fromList(List<Int32x4> elements) {
+    var result = new _Int32x4Array(elements.length);
     for (int i = 0; i < elements.length; i++) {
       result[i] = elements[i];
     }
     return result;
   }
 
-  /* patch */ factory Uint32x4List.view(ByteBuffer buffer,
+  /* patch */ factory Int32x4List.view(ByteBuffer buffer,
                                         [int offsetInBytes = 0, int length]) {
-    return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+    return new _Int32x4ArrayView(buffer, offsetInBytes, length);
   }
 }
 
@@ -274,21 +274,21 @@
   /* patch */ factory Float32x4.zero() {
     return new _Float32x4.zero();
   }
-  /* patch */ factory Float32x4.fromUint32x4Bits(Uint32x4 x) {
-    return new _Float32x4.fromUint32x4Bits(x);
+  /* patch */ factory Float32x4.fromInt32x4Bits(Int32x4 x) {
+    return new _Float32x4.fromInt32x4Bits(x);
   }
 }
 
 
-patch class Uint32x4 {
-  /* patch */ factory Uint32x4(int x, int y, int z, int w) {
-    return new _Uint32x4(x, y, z, w);
+patch class Int32x4 {
+  /* patch */ factory Int32x4(int x, int y, int z, int w) {
+    return new _Int32x4(x, y, z, w);
   }
-  /* patch */ factory Uint32x4.bool(bool x, bool y, bool z, bool w) {
-    return new _Uint32x4.bool(x, y, z, w);
+  /* patch */ factory Int32x4.bool(bool x, bool y, bool z, bool w) {
+    return new _Int32x4.bool(x, y, z, w);
   }
-  /* patch */ factory Uint32x4.fromFloat32x4Bits(Float32x4 x) {
-    return new _Uint32x4.fromFloat32x4Bits(x);
+  /* patch */ factory Int32x4.fromFloat32x4Bits(Float32x4 x) {
+    return new _Int32x4.fromFloat32x4Bits(x);
   }
 }
 
@@ -611,9 +611,9 @@
   void _setFloat32x4(int offsetInBytes, Float32x4 value)
       native "TypedData_SetFloat32x4";
 
-  Uint32x4 _getUint32x4(int offsetInBytes) native "TypedData_GetUint32x4";
-  void _setUint32x4(int offsetInBytes, Uint32x4 value)
-      native "TypedData_SetUint32x4";
+  Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4";
+  void _setInt32x4(int offsetInBytes, Int32x4 value)
+      native "TypedData_SetInt32x4";
 }
 
 
@@ -1342,64 +1342,64 @@
 }
 
 
-class _Uint32x4Array extends _TypedList implements Uint32x4List {
+class _Int32x4Array extends _TypedList implements Int32x4List {
   // Factory constructors.
 
-  factory _Uint32x4Array(int length) {
+  factory _Int32x4Array(int length) {
     return _new(length);
   }
 
-  factory _Uint32x4Array.view(ByteBuffer buffer,
+  factory _Int32x4Array.view(ByteBuffer buffer,
                               [int offsetInBytes = 0, int length]) {
     if (length == null) {
       length = (buffer.lengthInBytes - offsetInBytes) ~/
-               Uint32x4List.BYTES_PER_ELEMENT;
+               Int32x4List.BYTES_PER_ELEMENT;
     }
-    return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+    return new _Int32x4ArrayView(buffer, offsetInBytes, length);
   }
 
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _getIndexedUint32x4(index);
+    return _getIndexedInt32x4(index);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _setIndexedUint32x4(index, value);
+    _setIndexedInt32x4(index, value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing the TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  _Uint32x4Array _createList(int length) {
+  _Int32x4Array _createList(int length) {
     return _new(length);
   }
 
-  Uint32x4 _getIndexedUint32x4(int index) {
-    return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+  Int32x4 _getIndexedInt32x4(int index) {
+    return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
   }
 
-  void _setIndexedUint32x4(int index, Uint32x4 value) {
-    _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+  void _setIndexedInt32x4(int index, Int32x4 value) {
+    _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
   }
 
-  static _Uint32x4Array _new(int length) native "TypedData_Uint32x4Array_new";
+  static _Int32x4Array _new(int length) native "TypedData_Int32x4Array_new";
 }
 
 
@@ -2038,58 +2038,58 @@
 }
 
 
-class _ExternalUint32x4Array extends _TypedList implements Uint32x4List {
+class _ExternalInt32x4Array extends _TypedList implements Int32x4List {
   // Factory constructors.
 
-  factory _ExternalUint32x4Array(int length) {
+  factory _ExternalInt32x4Array(int length) {
     return _new(length);
   }
 
 
   // Method(s) implementing the List interface.
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _getIndexedUint32x4(index);
+    return _getIndexedInt32x4(index);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _setIndexedUint32x4(index, value);
+    _setIndexedInt32x4(index, value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing the TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  Uint32x4List _createList(int length) {
-    return new Uint32x4List(length);
+  Int32x4List _createList(int length) {
+    return new Int32x4List(length);
   }
 
-  Uint32x4 _getIndexedUint32x4(int index) {
-    return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+  Int32x4 _getIndexedInt32x4(int index) {
+    return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
   }
 
-  void _setIndexedUint32x4(int index, Uint32x4 value) {
-    _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+  void _setIndexedInt32x4(int index, Int32x4 value) {
+    _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
   }
 
-  static _ExternalUint32x4Array _new(int length) native
-      "ExternalTypedData_Uint32x4Array_new";
+  static _ExternalInt32x4Array _new(int length) native
+      "ExternalTypedData_Int32x4Array_new";
 }
 
 
@@ -2098,8 +2098,8 @@
       native "Float32x4_fromDoubles";
   factory _Float32x4.splat(double v) native "Float32x4_splat";
   factory _Float32x4.zero() native "Float32x4_zero";
-  factory _Float32x4.fromUint32x4Bits(Uint32x4 x)
-      native "Float32x4_fromUint32x4Bits";
+  factory _Float32x4.fromInt32x4Bits(Int32x4 x)
+      native "Float32x4_fromInt32x4Bits";
   Float32x4 operator +(Float32x4 other) {
     return _add(other);
   }
@@ -2120,31 +2120,31 @@
     return _div(other);
   }
   Float32x4 _div(Float32x4 other) native "Float32x4_div";
-  Uint32x4 lessThan(Float32x4 other) {
+  Int32x4 lessThan(Float32x4 other) {
     return _cmplt(other);
   }
-  Uint32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
-  Uint32x4 lessThanOrEqual(Float32x4 other) {
+  Int32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
+  Int32x4 lessThanOrEqual(Float32x4 other) {
     return _cmplte(other);
   }
-  Uint32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
-  Uint32x4 greaterThan(Float32x4 other) {
+  Int32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
+  Int32x4 greaterThan(Float32x4 other) {
     return _cmpgt(other);
   }
-  Uint32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
-  Uint32x4 greaterThanOrEqual(Float32x4 other) {
+  Int32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
+  Int32x4 greaterThanOrEqual(Float32x4 other) {
     return _cmpgte(other);
   }
-  Uint32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
-  Uint32x4 equal(Float32x4 other) {
+  Int32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
+  Int32x4 equal(Float32x4 other) {
     return _cmpequal(other);
   }
-  Uint32x4 _cmpequal(Float32x4 other)
+  Int32x4 _cmpequal(Float32x4 other)
       native "Float32x4_cmpequal";
-  Uint32x4 notEqual(Float32x4 other) {
+  Int32x4 notEqual(Float32x4 other) {
     return _cmpnequal(other);
   }
-  Uint32x4 _cmpnequal(Float32x4 other)
+  Int32x4 _cmpnequal(Float32x4 other)
       native "Float32x4_cmpnequal";
   Float32x4 scale(double s) {
     return _scale(s);
@@ -2197,59 +2197,59 @@
 }
 
 
-class _Uint32x4 implements Uint32x4 {
-  factory _Uint32x4(int x, int y, int z, int w)
-      native "Uint32x4_fromInts";
-  factory _Uint32x4.bool(bool x, bool y, bool z, bool w)
-      native "Uint32x4_fromBools";
-  factory _Uint32x4.fromFloat32x4Bits(Float32x4 x)
-      native "Uint32x4_fromFloat32x4Bits";
-  Uint32x4 operator |(Uint32x4 other) {
+class _Int32x4 implements Int32x4 {
+  factory _Int32x4(int x, int y, int z, int w)
+      native "Int32x4_fromInts";
+  factory _Int32x4.bool(bool x, bool y, bool z, bool w)
+      native "Int32x4_fromBools";
+  factory _Int32x4.fromFloat32x4Bits(Float32x4 x)
+      native "Int32x4_fromFloat32x4Bits";
+  Int32x4 operator |(Int32x4 other) {
     return _or(other);
   }
-  Uint32x4 _or(Uint32x4 other) native "Uint32x4_or";
-  Uint32x4 operator &(Uint32x4 other) {
+  Int32x4 _or(Int32x4 other) native "Int32x4_or";
+  Int32x4 operator &(Int32x4 other) {
     return _and(other);
   }
-  Uint32x4 _and(Uint32x4 other) native "Uint32x4_and";
-  Uint32x4 operator ^(Uint32x4 other) {
+  Int32x4 _and(Int32x4 other) native "Int32x4_and";
+  Int32x4 operator ^(Int32x4 other) {
     return _xor(other);
   }
-  Uint32x4 _xor(Uint32x4 other) native "Uint32x4_xor";
-  Uint32x4 operator +(Uint32x4 other) {
+  Int32x4 _xor(Int32x4 other) native "Int32x4_xor";
+  Int32x4 operator +(Int32x4 other) {
     return _add(other);
   }
-  Uint32x4 _add(Uint32x4 other) native "Uint32x4_add";
-  Uint32x4 operator -(Uint32x4 other) {
+  Int32x4 _add(Int32x4 other) native "Int32x4_add";
+  Int32x4 operator -(Int32x4 other) {
     return _sub(other);
   }
-  Uint32x4 _sub(Uint32x4 other) native "Uint32x4_sub";
-  int get x native "Uint32x4_getX";
-  int get y native "Uint32x4_getY";
-  int get z native "Uint32x4_getZ";
-  int get w native "Uint32x4_getW";
-  int get signMask native "Uint32x4_getSignMask";
-  Uint32x4 shuffle(int mask) native "Uint32x4_shuffle";
-  Uint32x4 shuffleMix(Uint32x4 zw, int mask) native "Uint32x4_shuffleMix";
-  Uint32x4 withX(int x) native "Uint32x4_setX";
-  Uint32x4 withY(int y) native "Uint32x4_setY";
-  Uint32x4 withZ(int z) native "Uint32x4_setZ";
-  Uint32x4 withW(int w) native "Uint32x4_setW";
-  bool get flagX native "Uint32x4_getFlagX";
-  bool get flagY native "Uint32x4_getFlagY";
-  bool get flagZ native "Uint32x4_getFlagZ";
-  bool get flagW native "Uint32x4_getFlagW";
-  Uint32x4 withFlagX(bool x) native "Uint32x4_setFlagX";
-  Uint32x4 withFlagY(bool y) native "Uint32x4_setFlagY";
-  Uint32x4 withFlagZ(bool z) native "Uint32x4_setFlagZ";
-  Uint32x4 withFlagW(bool w) native "Uint32x4_setFlagW";
+  Int32x4 _sub(Int32x4 other) native "Int32x4_sub";
+  int get x native "Int32x4_getX";
+  int get y native "Int32x4_getY";
+  int get z native "Int32x4_getZ";
+  int get w native "Int32x4_getW";
+  int get signMask native "Int32x4_getSignMask";
+  Int32x4 shuffle(int mask) native "Int32x4_shuffle";
+  Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix";
+  Int32x4 withX(int x) native "Int32x4_setX";
+  Int32x4 withY(int y) native "Int32x4_setY";
+  Int32x4 withZ(int z) native "Int32x4_setZ";
+  Int32x4 withW(int w) native "Int32x4_setW";
+  bool get flagX native "Int32x4_getFlagX";
+  bool get flagY native "Int32x4_getFlagY";
+  bool get flagZ native "Int32x4_getFlagZ";
+  bool get flagW native "Int32x4_getFlagW";
+  Int32x4 withFlagX(bool x) native "Int32x4_setFlagX";
+  Int32x4 withFlagY(bool y) native "Int32x4_setFlagY";
+  Int32x4 withFlagZ(bool z) native "Int32x4_setFlagZ";
+  Int32x4 withFlagW(bool w) native "Int32x4_setFlagW";
   Float32x4 select(Float32x4 trueValue,
                           Float32x4 falseValue) {
     return _select(trueValue, falseValue);
   }
   Float32x4 _select(Float32x4 trueValue,
                            Float32x4 falseValue)
-      native "Uint32x4_select";
+      native "Int32x4_select";
 }
 
 class _TypedListIterator<E> implements Iterator<E> {
@@ -2925,54 +2925,54 @@
 }
 
 
-class _Uint32x4ArrayView extends _TypedListView implements Uint32x4List {
+class _Int32x4ArrayView extends _TypedListView implements Int32x4List {
   // Constructor.
-  _Uint32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
+  _Int32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
     : super(buffer, _offsetInBytes,
             _defaultIfNull(_length,
                            ((buffer.lengthInBytes - _offsetInBytes) ~/
-                            Uint32x4List.BYTES_PER_ELEMENT))) {
+                            Int32x4List.BYTES_PER_ELEMENT))) {
     _rangeCheck(buffer.lengthInBytes,
                 offsetInBytes,
-                length * Uint32x4List.BYTES_PER_ELEMENT);
-    _offsetAlignmentCheck(_offsetInBytes, Uint32x4List.BYTES_PER_ELEMENT);
+                length * Int32x4List.BYTES_PER_ELEMENT);
+    _offsetAlignmentCheck(_offsetInBytes, Int32x4List.BYTES_PER_ELEMENT);
   }
 
 
   // Method(s) implementing List interface.
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _typedData._getUint32x4(offsetInBytes +
-                                   (index * Uint32x4List.BYTES_PER_ELEMENT));
+    return _typedData._getInt32x4(offsetInBytes +
+                                   (index * Int32x4List.BYTES_PER_ELEMENT));
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _typedData._setUint32x4(offsetInBytes +
-                            (index * Uint32x4List.BYTES_PER_ELEMENT), value);
+    _typedData._setInt32x4(offsetInBytes +
+                            (index * Int32x4List.BYTES_PER_ELEMENT), value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  Uint32x4List _createList(int length) {
-    return new Uint32x4List(length);
+  Int32x4List _createList(int length) {
+    return new Int32x4List(length);
   }
 }
 
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index f3dbb88..7ee14fb 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -81,7 +81,7 @@
     storage[3] = v[3];
     return *this;
   }
-  simd128_value_t& readFrom(const uint32_t* v) {
+  simd128_value_t& readFrom(const int32_t* v) {
     const float* vv = reinterpret_cast<const float*>(v);
     storage[0] = vv[0];
     storage[1] = vv[1];
@@ -99,7 +99,7 @@
     v[2] = storage[2];
     v[3] = storage[3];
   }
-  void writeTo(uint32_t* v) {
+  void writeTo(int32_t* v) {
     float* vv = reinterpret_cast<float*>(v);
     vv[0] = storage[0];
     vv[1] = storage[1];
diff --git a/runtime/vm/assembler_ia32.cc b/runtime/vm/assembler_ia32.cc
index 8f6164f..6b6e659 100644
--- a/runtime/vm/assembler_ia32.cc
+++ b/runtime/vm/assembler_ia32.cc
@@ -83,6 +83,15 @@
 };
 
 
+int32_t Assembler::jit_cookie() {
+  if (jit_cookie_ == 0) {
+    jit_cookie_ = static_cast<int32_t>(
+        Isolate::Current()->random()->NextUInt32());
+  }
+  return jit_cookie_;
+}
+
+
 void Assembler::InitializeMemoryWithBreakpoints(uword data, intptr_t length) {
   memset(reinterpret_cast<void*>(data), Instr::kBreakPointInstruction, length);
 }
@@ -1949,9 +1958,9 @@
   if (Assembler::IsSafe(object)) {
     LoadObject(dst, object);
   } else {
-    movl(dst,
-         Immediate(reinterpret_cast<int32_t>(object.raw()) ^ jit_cookie_));
-    xorl(dst, Immediate(jit_cookie_));
+    int32_t cookie = jit_cookie();
+    movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()) ^ cookie));
+    xorl(dst, Immediate(cookie));
   }
 }
 
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index ae5a0cd..0afbb0f 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -311,8 +311,8 @@
       : buffer_(),
         object_pool_(GrowableObjectArray::Handle()),
         prologue_offset_(-1),
-        comments_(),
-        jit_cookie_(1017109444) {
+        jit_cookie_(0),
+        comments_() {
     // This mode is only needed and implemented for MIPS and ARM.
     ASSERT(!use_far_branches);
   }
@@ -798,10 +798,6 @@
   }
 
  private:
-  AssemblerBuffer buffer_;
-  GrowableObjectArray& object_pool_;  // Object pool is not used on ia32.
-  intptr_t prologue_offset_;
-
   class CodeComment : public ZoneAllocated {
    public:
     CodeComment(intptr_t pc_offset, const String& comment)
@@ -817,9 +813,6 @@
     DISALLOW_COPY_AND_ASSIGN(CodeComment);
   };
 
-  GrowableArray<CodeComment*> comments_;
-
-  int32_t jit_cookie_;
 
   inline void EmitUint8(uint8_t value);
   inline void EmitInt32(int32_t value);
@@ -845,6 +838,14 @@
                                   Register value,
                                   Label* no_update);
 
+  int32_t jit_cookie();
+
+  AssemblerBuffer buffer_;
+  GrowableObjectArray& object_pool_;  // Object pool is not used on ia32.
+  intptr_t prologue_offset_;
+  int32_t jit_cookie_;
+  GrowableArray<CodeComment*> comments_;
+
   DISALLOW_ALLOCATION();
   DISALLOW_COPY_AND_ASSIGN(Assembler);
 };
diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
index 257fb95..aab3c6b 100644
--- a/runtime/vm/ast.cc
+++ b/runtime/vm/ast.cc
@@ -255,6 +255,17 @@
 
 bool BinaryOpNode::IsPotentiallyConst() const {
   switch (kind_) {
+    case Token::kOR:
+    case Token::kAND:
+      if (this->left()->IsLiteralNode() &&
+          this->left()->AsLiteralNode()->literal().IsNull()) {
+        return false;
+      }
+      if (this->right()->IsLiteralNode() &&
+          this->right()->AsLiteralNode()->literal().IsNull()) {
+        return false;
+      }
+      // Fall-through intentional.
     case Token::kADD:
     case Token::kSUB:
     case Token::kMUL:
@@ -266,8 +277,6 @@
     case Token::kBIT_AND:
     case Token::kSHL:
     case Token::kSHR:
-    case Token::kOR:
-    case Token::kAND:
       return this->left()->IsPotentiallyConst() &&
           this->right()->IsPotentiallyConst();
     default:
@@ -355,6 +364,10 @@
 
 
 bool UnaryOpNode::IsPotentiallyConst() const {
+  if (this->operand()->IsLiteralNode() &&
+      this->operand()->AsLiteralNode()->literal().IsNull()) {
+    return false;
+  }
   return this->operand()->IsPotentiallyConst();
 }
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 550efdd..95f39c4 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -144,7 +144,7 @@
   V(TypedData_Float32Array_new, 1)                                             \
   V(TypedData_Float64Array_new, 1)                                             \
   V(TypedData_Float32x4Array_new, 1)                                           \
-  V(TypedData_Uint32x4Array_new, 1)                                            \
+  V(TypedData_Int32x4Array_new, 1)                                            \
   V(ExternalTypedData_Int8Array_new, 1)                                        \
   V(ExternalTypedData_Uint8Array_new, 1)                                       \
   V(ExternalTypedData_Uint8ClampedArray_new, 1)                                \
@@ -157,7 +157,7 @@
   V(ExternalTypedData_Float32Array_new, 1)                                     \
   V(ExternalTypedData_Float64Array_new, 1)                                     \
   V(ExternalTypedData_Float32x4Array_new, 1)                                   \
-  V(ExternalTypedData_Uint32x4Array_new, 1)                                    \
+  V(ExternalTypedData_Int32x4Array_new, 1)                                    \
   V(TypedData_length, 1)                                                       \
   V(TypedData_setRange, 5)                                                     \
   V(TypedData_GetInt8, 2)                                                      \
@@ -182,8 +182,8 @@
   V(TypedData_SetFloat64, 3)                                                   \
   V(TypedData_GetFloat32x4, 2)                                                 \
   V(TypedData_SetFloat32x4, 3)                                                 \
-  V(TypedData_GetUint32x4, 2)                                                  \
-  V(TypedData_SetUint32x4, 3)                                                  \
+  V(TypedData_GetInt32x4, 2)                                                  \
+  V(TypedData_SetInt32x4, 3)                                                  \
   V(ByteData_ToEndianInt16, 2)                                                 \
   V(ByteData_ToEndianUint16, 2)                                                \
   V(ByteData_ToEndianInt32, 2)                                                 \
@@ -194,7 +194,7 @@
   V(ByteData_ToEndianFloat64, 2)                                               \
   V(Float32x4_fromDoubles, 5)                                                  \
   V(Float32x4_splat, 2)                                                        \
-  V(Float32x4_fromUint32x4Bits, 2)                                             \
+  V(Float32x4_fromInt32x4Bits, 2)                                             \
   V(Float32x4_zero, 1)                                                         \
   V(Float32x4_add, 2)                                                          \
   V(Float32x4_negate, 1)                                                       \
@@ -226,34 +226,34 @@
   V(Float32x4_sqrt, 1)                                                         \
   V(Float32x4_reciprocal, 1)                                                   \
   V(Float32x4_reciprocalSqrt, 1)                                               \
-  V(Uint32x4_fromInts, 5)                                                      \
-  V(Uint32x4_fromBools, 5)                                                     \
-  V(Uint32x4_fromFloat32x4Bits, 2)                                             \
-  V(Uint32x4_or, 2)                                                            \
-  V(Uint32x4_and, 2)                                                           \
-  V(Uint32x4_xor, 2)                                                           \
-  V(Uint32x4_add, 2)                                                           \
-  V(Uint32x4_sub, 2)                                                           \
-  V(Uint32x4_getX, 1)                                                          \
-  V(Uint32x4_getY, 1)                                                          \
-  V(Uint32x4_getZ, 1)                                                          \
-  V(Uint32x4_getW, 1)                                                          \
-  V(Uint32x4_setX, 2)                                                          \
-  V(Uint32x4_setY, 2)                                                          \
-  V(Uint32x4_setZ, 2)                                                          \
-  V(Uint32x4_setW, 2)                                                          \
-  V(Uint32x4_getSignMask, 1)                                                   \
-  V(Uint32x4_shuffle, 2)                                                       \
-  V(Uint32x4_shuffleMix, 3)                                                    \
-  V(Uint32x4_getFlagX, 1)                                                      \
-  V(Uint32x4_getFlagY, 1)                                                      \
-  V(Uint32x4_getFlagZ, 1)                                                      \
-  V(Uint32x4_getFlagW, 1)                                                      \
-  V(Uint32x4_setFlagX, 2)                                                      \
-  V(Uint32x4_setFlagY, 2)                                                      \
-  V(Uint32x4_setFlagZ, 2)                                                      \
-  V(Uint32x4_setFlagW, 2)                                                      \
-  V(Uint32x4_select, 3)                                                        \
+  V(Int32x4_fromInts, 5)                                                      \
+  V(Int32x4_fromBools, 5)                                                     \
+  V(Int32x4_fromFloat32x4Bits, 2)                                             \
+  V(Int32x4_or, 2)                                                            \
+  V(Int32x4_and, 2)                                                           \
+  V(Int32x4_xor, 2)                                                           \
+  V(Int32x4_add, 2)                                                           \
+  V(Int32x4_sub, 2)                                                           \
+  V(Int32x4_getX, 1)                                                          \
+  V(Int32x4_getY, 1)                                                          \
+  V(Int32x4_getZ, 1)                                                          \
+  V(Int32x4_getW, 1)                                                          \
+  V(Int32x4_setX, 2)                                                          \
+  V(Int32x4_setY, 2)                                                          \
+  V(Int32x4_setZ, 2)                                                          \
+  V(Int32x4_setW, 2)                                                          \
+  V(Int32x4_getSignMask, 1)                                                   \
+  V(Int32x4_shuffle, 2)                                                       \
+  V(Int32x4_shuffleMix, 3)                                                    \
+  V(Int32x4_getFlagX, 1)                                                      \
+  V(Int32x4_getFlagY, 1)                                                      \
+  V(Int32x4_getFlagZ, 1)                                                      \
+  V(Int32x4_getFlagW, 1)                                                      \
+  V(Int32x4_setFlagX, 2)                                                      \
+  V(Int32x4_setFlagY, 2)                                                      \
+  V(Int32x4_setFlagZ, 2)                                                      \
+  V(Int32x4_setFlagW, 2)                                                      \
+  V(Int32x4_select, 3)                                                        \
   V(Isolate_mainPort, 0)                                                       \
   V(Isolate_spawnFunction, 1)                                                  \
   V(Isolate_spawnUri, 1)                                                       \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 4d384a4..1113f5e 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1220,17 +1220,11 @@
           field.set_value(Instance::Handle(Object::sentinel().raw()));
 
           // Create initializer function.
-          // We don't have the start position of the initializer expression
-          // here, but can compute it from the field identifier position:
-          // The initializer expression starts after the assignment token at +2.
-          const intptr_t initializer_pos = field.token_pos() + 2;
-          const Function& init_function = Function::ZoneHandle(
-              Function::NewStaticInitializer(
-                  String::Handle(field.name()),
-                  type,
-                  cls,
-                  initializer_pos));
-          cls.AddFunction(init_function);
+          if (!field.is_const()) {
+            const Function& init_function = Function::ZoneHandle(
+                Function::NewStaticInitializer(field));
+            cls.AddFunction(init_function);
+          }
         }
       }
     }
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index ae577df..5de912a 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -545,6 +545,9 @@
   const SubtypeTestCache& cache =
       SubtypeTestCache::CheckedHandle(arguments.ArgAt(4));
   ASSERT(type.IsFinalized());
+  ASSERT(!type.IsDynamicType());  // No need to check assignment.
+  ASSERT(!type.IsMalformed());  // Already checked in code generator.
+  ASSERT(!type.IsMalbounded());  // Already checked in code generator.
   Error& bound_error = Error::Handle();
   const Bool& result =
       Bool::Get(instance.IsInstanceOf(type,
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index e81438f..92bba64 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -81,12 +81,14 @@
                            Dart_FileOpenCallback file_open,
                            Dart_FileReadCallback file_read,
                            Dart_FileWriteCallback file_write,
-                           Dart_FileCloseCallback file_close) {
+                           Dart_FileCloseCallback file_close,
+                           Dart_EntropySource entropy_source) {
   // TODO(iposva): Fix race condition here.
   if (vm_isolate_ != NULL || !Flags::Initialized()) {
     return "VM already initialized.";
   }
   Isolate::SetFileCallbacks(file_open, file_read, file_write, file_close);
+  Isolate::SetEntropySourceCallback(entropy_source);
   OS::InitOnce();
   VirtualMemory::InitOnce();
   Isolate::InitOnce();
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index edb18ad..135c6b0 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -27,7 +27,8 @@
       Dart_FileOpenCallback file_open,
       Dart_FileReadCallback file_read,
       Dart_FileWriteCallback file_write,
-      Dart_FileCloseCallback file_close);
+      Dart_FileCloseCallback file_close,
+      Dart_EntropySource entropy_source);
   static const char* Cleanup();
 
   static Isolate* CreateIsolate(const char* name_prefix);
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 5faea45..f22df2c 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -733,10 +733,11 @@
     Dart_FileOpenCallback file_open,
     Dart_FileReadCallback file_read,
     Dart_FileWriteCallback file_write,
-    Dart_FileCloseCallback file_close) {
+    Dart_FileCloseCallback file_close,
+    Dart_EntropySource entropy_source) {
   const char* err_msg = Dart::InitOnce(create, interrupt, unhandled, shutdown,
                                        file_open, file_read, file_write,
-                                       file_close);
+                                       file_close, entropy_source);
   if (err_msg != NULL) {
     OS::PrintErr("Dart_Initialize: %s\n", err_msg);
     return false;
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 0208c40..f8d7794 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -291,11 +291,12 @@
       if (type != Dart_TypedData_kInvalid) {
         object->type =
             static_cast<Dart_CObject_Type>(Dart_CObject_Internal::kView);
-        ReadObjectImpl();  // Skip type arguments.
+        Dart_CObject_Internal* cls =
+            reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+        ASSERT(cls == object->cls);
         object->internal.as_view.buffer = ReadObjectImpl();
         object->internal.as_view.offset_in_bytes = ReadSmiValue();
         object->internal.as_view.length = ReadSmiValue();
-        ReadObjectImpl();  // Skip last field.
 
         // The buffer is fully read now as typed data objects are
         // serialized in-line.
@@ -317,7 +318,9 @@
       }
     } else if (strcmp("dart:isolate", library_uri) == 0 &&
                strncmp("_SendPortImpl@", class_name, 14) == 0) {
-      ReadObjectImpl();  // Skip type arguments.
+      Dart_CObject_Internal* cls =
+          reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+      ASSERT(cls == object->cls);
       // Read the port id.
       Dart_CObject* port = ReadObjectImpl();
       if (port->type == Dart_CObject_kInt32) {
@@ -327,7 +330,6 @@
         object->type = Dart_CObject_kSendPort;
         object->value.as_send_port = port->value.as_int64;
       }
-      ReadObjectImpl();  // Skip last field.
     } else {
       // TODO(sgjesse): Handle other instances. Currently this will
       // skew the reading as the fields of the instance is not read.
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 5e023b4..884706e 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1484,6 +1484,11 @@
 
 void Debugger::OneTimeBreakAtEntry(const Function& target_function) {
   InstrumentForStepping(target_function);
+  if (target_function.HasImplicitClosureFunction()) {
+    const Function& closure_func =
+        Function::Handle(target_function.ImplicitClosureFunction());
+    InstrumentForStepping(closure_func);
+  }
 }
 
 
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 76f5be7..5a6412d 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -54,17 +54,17 @@
 }
 
 
-void DeferredUint32x4::Materialize() {
-  RawUint32x4** uint32x4_slot = reinterpret_cast<RawUint32x4**>(slot());
-  RawUint32x4* raw_uint32x4 = Uint32x4::New(value());
-  *uint32x4_slot = raw_uint32x4;
+void DeferredInt32x4::Materialize() {
+  RawInt32x4** int32x4_slot = reinterpret_cast<RawInt32x4**>(slot());
+  RawInt32x4* raw_int32x4 = Int32x4::New(value());
+  *int32x4_slot = raw_int32x4;
 
   if (FLAG_trace_deoptimization_verbose) {
-    uint32_t x = raw_uint32x4->x();
-    uint32_t y = raw_uint32x4->y();
-    uint32_t z = raw_uint32x4->z();
-    uint32_t w = raw_uint32x4->w();
-    OS::PrintErr("materializing Uint32x4 at %" Px ": %x,%x,%x,%x\n",
+    uint32_t x = raw_int32x4->x();
+    uint32_t y = raw_int32x4->y();
+    uint32_t z = raw_int32x4->z();
+    uint32_t w = raw_int32x4->w();
+    OS::PrintErr("materializing Int32x4 at %" Px ": %x,%x,%x,%x\n",
                  reinterpret_cast<uword>(slot()), x, y, z, w);
   }
 }
diff --git a/runtime/vm/deferred_objects.h b/runtime/vm/deferred_objects.h
index 7e2c3c9..ae2e29f 100644
--- a/runtime/vm/deferred_objects.h
+++ b/runtime/vm/deferred_objects.h
@@ -86,9 +86,9 @@
 };
 
 
-class DeferredUint32x4 : public DeferredSlot {
+class DeferredInt32x4 : public DeferredSlot {
  public:
-  DeferredUint32x4(simd128_value_t value, RawInstance** slot,
+  DeferredInt32x4(simd128_value_t value, RawInstance** slot,
                    DeferredSlot* next)
       : DeferredSlot(slot, next), value_(value) { }
 
@@ -99,7 +99,7 @@
  private:
   const simd128_value_t value_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeferredUint32x4);
+  DISALLOW_COPY_AND_ASSIGN(DeferredInt32x4);
 };
 
 
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index c5266d1..ea2e147 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -190,7 +190,7 @@
     case DeoptInstr::kDoubleStackSlot:
     case DeoptInstr::kInt64StackSlot:
     case DeoptInstr::kFloat32x4StackSlot:
-    case DeoptInstr::kUint32x4StackSlot:
+    case DeoptInstr::kInt32x4StackSlot:
     case DeoptInstr::kPp:
     case DeoptInstr::kCallerPp:
     case DeoptInstr::kMaterializedObjectRef:
@@ -200,7 +200,7 @@
     case DeoptInstr::kFpuRegister:
     case DeoptInstr::kInt64FpuRegister:
     case DeoptInstr::kFloat32x4FpuRegister:
-    case DeoptInstr::kUint32x4FpuRegister:
+    case DeoptInstr::kInt32x4FpuRegister:
       // TODO(turnidge): Sometimes we encounter a deopt instruction
       // with a register source while deoptimizing frames during
       // debugging but we haven't saved our register set.  This
@@ -506,15 +506,15 @@
 };
 
 
-class DeoptUint32x4StackSlotInstr : public DeoptInstr {
+class DeoptInt32x4StackSlotInstr : public DeoptInstr {
  public:
-  explicit DeoptUint32x4StackSlotInstr(intptr_t source_index)
+  explicit DeoptInt32x4StackSlotInstr(intptr_t source_index)
       : stack_slot_index_(source_index) {
     ASSERT(stack_slot_index_ >= 0);
   }
 
   virtual intptr_t source_index() const { return stack_slot_index_; }
-  virtual DeoptInstr::Kind kind() const { return kUint32x4StackSlot; }
+  virtual DeoptInstr::Kind kind() const { return kInt32x4StackSlot; }
 
   virtual const char* ToCString() const {
     return Isolate::Current()->current_zone()->PrintToString(
@@ -527,14 +527,14 @@
     simd128_value_t* source_addr = reinterpret_cast<simd128_value_t*>(
         deopt_context->GetSourceFrameAddressAt(source_index));
     *reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
-    deopt_context->DeferUint32x4Materialization(
-        *source_addr, reinterpret_cast<RawUint32x4**>(dest_addr));
+    deopt_context->DeferInt32x4Materialization(
+        *source_addr, reinterpret_cast<RawInt32x4**>(dest_addr));
   }
 
  private:
   const intptr_t stack_slot_index_;  // First argument is 0, always >= 0.
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4StackSlotInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4StackSlotInstr);
 };
 
 
@@ -744,13 +744,13 @@
 
 
 // Deoptimization instruction moving an XMM register.
-class DeoptUint32x4FpuRegisterInstr: public DeoptInstr {
+class DeoptInt32x4FpuRegisterInstr: public DeoptInstr {
  public:
-  explicit DeoptUint32x4FpuRegisterInstr(intptr_t reg_as_int)
+  explicit DeoptInt32x4FpuRegisterInstr(intptr_t reg_as_int)
       : reg_(static_cast<FpuRegister>(reg_as_int)) {}
 
   virtual intptr_t source_index() const { return static_cast<intptr_t>(reg_); }
-  virtual DeoptInstr::Kind kind() const { return kUint32x4FpuRegister; }
+  virtual DeoptInstr::Kind kind() const { return kInt32x4FpuRegister; }
 
   virtual const char* ToCString() const {
     return Isolate::Current()->current_zone()->PrintToString(
@@ -760,14 +760,14 @@
   void Execute(DeoptContext* deopt_context, intptr_t* dest_addr) {
     simd128_value_t value = deopt_context->FpuRegisterValueAsSimd128(reg_);
     *reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
-    deopt_context->DeferUint32x4Materialization(
-        value, reinterpret_cast<RawUint32x4**>(dest_addr));
+    deopt_context->DeferInt32x4Materialization(
+        value, reinterpret_cast<RawInt32x4**>(dest_addr));
   }
 
  private:
   const FpuRegister reg_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4FpuRegisterInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4FpuRegisterInstr);
 };
 
 
@@ -1069,8 +1069,8 @@
     case kInt64StackSlot: return new DeoptInt64StackSlotInstr(source_index);
     case kFloat32x4StackSlot:
         return new DeoptFloat32x4StackSlotInstr(source_index);
-    case kUint32x4StackSlot:
-        return new DeoptUint32x4StackSlotInstr(source_index);
+    case kInt32x4StackSlot:
+        return new DeoptInt32x4StackSlotInstr(source_index);
     case kRetAddress: return new DeoptRetAddressInstr(source_index);
     case kConstant: return new DeoptConstantInstr(source_index);
     case kRegister: return new DeoptRegisterInstr(source_index);
@@ -1078,8 +1078,8 @@
     case kInt64FpuRegister: return new DeoptInt64FpuRegisterInstr(source_index);
     case kFloat32x4FpuRegister:
         return new DeoptFloat32x4FpuRegisterInstr(source_index);
-    case kUint32x4FpuRegister:
-        return new DeoptUint32x4FpuRegisterInstr(source_index);
+    case kInt32x4FpuRegister:
+        return new DeoptInt32x4FpuRegisterInstr(source_index);
     case kPcMarker: return new DeoptPcMarkerInstr(source_index);
     case kPp: return new DeoptPpInstr(source_index);
     case kCallerFp: return new DeoptCallerFpInstr();
@@ -1214,8 +1214,8 @@
     } else if (value->definition()->representation() == kUnboxedFloat32x4) {
       deopt_instr = new DeoptFloat32x4FpuRegisterInstr(source_loc.fpu_reg());
     } else {
-      ASSERT(value->definition()->representation() == kUnboxedUint32x4);
-      deopt_instr = new DeoptUint32x4FpuRegisterInstr(source_loc.fpu_reg());
+      ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+      deopt_instr = new DeoptInt32x4FpuRegisterInstr(source_loc.fpu_reg());
     }
   } else if (source_loc.IsStackSlot()) {
     ASSERT(value->definition()->representation() == kTagged);
@@ -1234,8 +1234,8 @@
     if (value->definition()->representation() == kUnboxedFloat32x4) {
       deopt_instr = new DeoptFloat32x4StackSlotInstr(source_index);
     } else {
-      ASSERT(value->definition()->representation() == kUnboxedUint32x4);
-      deopt_instr = new DeoptUint32x4StackSlotInstr(source_index);
+      ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+      deopt_instr = new DeoptInt32x4StackSlotInstr(source_index);
     }
   } else if (source_loc.IsInvalid() &&
              value->definition()->IsMaterializeObject()) {
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 36b1b7f..f55c120 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.h
@@ -134,9 +134,9 @@
         deferred_boxes_);
   }
 
-  void DeferUint32x4Materialization(simd128_value_t value,
-                                    RawUint32x4** slot) {
-    deferred_boxes_ = new DeferredUint32x4(
+  void DeferInt32x4Materialization(simd128_value_t value,
+                                    RawInt32x4** slot) {
+    deferred_boxes_ = new DeferredInt32x4(
         value,
         reinterpret_cast<RawInstance**>(slot),
         deferred_boxes_);
@@ -210,12 +210,12 @@
     kFpuRegister,
     kInt64FpuRegister,
     kFloat32x4FpuRegister,
-    kUint32x4FpuRegister,
+    kInt32x4FpuRegister,
     kStackSlot,
     kDoubleStackSlot,
     kInt64StackSlot,
     kFloat32x4StackSlot,
-    kUint32x4StackSlot,
+    kInt32x4StackSlot,
     kPcMarker,
     kPp,
     kCallerFp,
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index ab2d296..f40c175 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -605,7 +605,7 @@
   if ((instr->representation() == kUnboxedDouble) ||
       (instr->representation() == kUnboxedMint) ||
       (instr->representation() == kUnboxedFloat32x4) ||
-      (instr->representation() == kUnboxedUint32x4)) {
+      (instr->representation() == kUnboxedInt32x4)) {
     return Location::kFpuRegister;
   } else {
     return Location::kRegister;
@@ -1601,7 +1601,7 @@
   // parallel move resolution.
   const bool need_quad = (register_kind_ == Location::kFpuRegister) &&
       ((range->representation() == kUnboxedFloat32x4) ||
-       (range->representation() == kUnboxedUint32x4));
+       (range->representation() == kUnboxedInt32x4));
 
   // Search for a free spill slot among allocated: the value in it should be
   // dead and its type should match (e.g. it should not be a part of the quad if
@@ -1650,7 +1650,7 @@
 
     Location location;
     if ((range->representation() == kUnboxedFloat32x4) ||
-        (range->representation() == kUnboxedUint32x4)) {
+        (range->representation() == kUnboxedInt32x4)) {
       ASSERT(need_quad);
       location = Location::QuadStackSlot(slot_idx);
     } else {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index fb82608..b231788 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -2241,7 +2241,7 @@
       case kTypedDataFloat32ArrayCid:
       case kTypedDataFloat64ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
         return function_class.id();
       default:
         return kDynamicCid;  // Unknown.
@@ -3574,12 +3574,11 @@
   owner()->AddCatchEntry(catch_entry);
   ASSERT(!for_catch.is_open());
   AppendFragment(catch_entry, for_catch);
-  if (node->end_catch_label() != NULL) {
-    JoinEntryInstr* join = node->end_catch_label()->join_for_continue();
-    if (join != NULL) {
-      if (is_open()) Goto(join);
-      exit_ = join;
-    }
+
+  JoinEntryInstr* join = node->end_catch_label()->join_for_continue();
+  if (join != NULL) {
+    if (is_open()) Goto(join);
+    exit_ = join;
   }
 
   if (finally_block != NULL) {
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 199b4f3..a7affc9 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -84,8 +84,8 @@
           Isolate::Current()->object_store()->double_class())),
       float32x4_class_(Class::ZoneHandle(
           Isolate::Current()->object_store()->float32x4_class())),
-      uint32x4_class_(Class::ZoneHandle(
-          Isolate::Current()->object_store()->uint32x4_class())),
+      int32x4_class_(Class::ZoneHandle(
+          Isolate::Current()->object_store()->int32x4_class())),
       list_class_(Class::ZoneHandle(
           Library::Handle(Library::CoreLibrary()).
               LookupClass(Symbols::List()))),
@@ -505,7 +505,7 @@
           it.SetCurrentLocation(Location::DoubleStackSlot(index));
           break;
         case kUnboxedFloat32x4:
-        case kUnboxedUint32x4:
+        case kUnboxedInt32x4:
           it.SetCurrentLocation(Location::QuadStackSlot(index));
           break;
         default:
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 18c9028..debf138 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -429,7 +429,7 @@
 
   const Class& double_class() const { return double_class_; }
   const Class& float32x4_class() const { return float32x4_class_; }
-  const Class& uint32x4_class() const { return uint32x4_class_; }
+  const Class& int32x4_class() const { return int32x4_class_; }
 
   void SaveLiveRegisters(LocationSummary* locs);
   void RestoreLiveRegisters(LocationSummary* locs);
@@ -598,7 +598,7 @@
 
   const Class& double_class_;
   const Class& float32x4_class_;
-  const Class& uint32x4_class_;
+  const Class& int32x4_class_;
   const Class& list_class_;
 
   ParallelMoveResolver parallel_move_resolver_;
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index cda4032..378d474 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -393,13 +393,13 @@
     converted = new UnboxFloat32x4Instr(use->CopyWithType(), deopt_id);
   } else if ((from == kUnboxedFloat32x4) && (to == kTagged)) {
     converted = new BoxFloat32x4Instr(use->CopyWithType());
-  } else if ((from == kTagged) && (to == kUnboxedUint32x4)) {
-    ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kUint32x4Cid));
+  } else if ((from == kTagged) && (to == kUnboxedInt32x4)) {
+    ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kInt32x4Cid));
     const intptr_t deopt_id = (deopt_target != NULL) ?
         deopt_target->DeoptimizationTarget() : Isolate::kNoDeoptId;
-    converted = new UnboxUint32x4Instr(use->CopyWithType(), deopt_id);
-  } else if ((from == kUnboxedUint32x4) && (to == kTagged)) {
-    converted = new BoxUint32x4Instr(use->CopyWithType());
+    converted = new UnboxInt32x4Instr(use->CopyWithType(), deopt_id);
+  } else if ((from == kUnboxedInt32x4) && (to == kTagged)) {
+    converted = new BoxInt32x4Instr(use->CopyWithType());
   } else {
     // We have failed to find a suitable conversion instruction.
     // Insert two "dummy" conversion instructions with the correct
@@ -412,8 +412,8 @@
     Definition* boxed = NULL;
     if (from == kUnboxedDouble) {
       boxed = new BoxDoubleInstr(use->CopyWithType());
-    } else if (from == kUnboxedUint32x4) {
-      boxed = new BoxUint32x4Instr(use->CopyWithType());
+    } else if (from == kUnboxedInt32x4) {
+      boxed = new BoxInt32x4Instr(use->CopyWithType());
     } else if (from == kUnboxedFloat32x4) {
       boxed = new BoxFloat32x4Instr(use->CopyWithType());
     } else if (from == kUnboxedMint) {
@@ -426,8 +426,8 @@
     Value* to_value = new Value(boxed);
     if (to == kUnboxedDouble) {
       converted = new UnboxDoubleInstr(to_value, deopt_id);
-    } else if (to == kUnboxedUint32x4) {
-      converted = new UnboxUint32x4Instr(to_value, deopt_id);
+    } else if (to == kUnboxedInt32x4) {
+      converted = new UnboxInt32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedFloat32x4) {
       converted = new UnboxFloat32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedMint) {
@@ -492,9 +492,9 @@
         unboxed = kUnboxedFloat32x4;
       }
       break;
-    case kUint32x4Cid:
+    case kInt32x4Cid:
       if (ShouldInlineSimd()) {
-        unboxed = kUnboxedUint32x4;
+        unboxed = kUnboxedInt32x4;
       }
       break;
   }
@@ -510,7 +510,7 @@
 
 void FlowGraphOptimizer::SelectRepresentations() {
   // Convervatively unbox all phis that were proven to be of Double,
-  // Float32x4, or Uint32x4 type.
+  // Float32x4, or Int32x4 type.
   for (intptr_t i = 0; i < block_order_.length(); ++i) {
     JoinEntryInstr* join_entry = block_order_[i]->AsJoinEntry();
     if (join_entry != NULL) {
@@ -812,9 +812,9 @@
     case MethodRecognizer::kFloat32x4ArraySetIndexed:
       return kTypedDataFloat32x4ArrayCid;
 
-    case MethodRecognizer::kUint32x4ArrayGetIndexed:
-    case MethodRecognizer::kUint32x4ArraySetIndexed:
-      return kTypedDataUint32x4ArrayCid;
+    case MethodRecognizer::kInt32x4ArrayGetIndexed:
+    case MethodRecognizer::kInt32x4ArraySetIndexed:
+      return kTypedDataInt32x4ArrayCid;
 
     default:
       break;
@@ -976,7 +976,7 @@
                                                          : kEmitStoreBarrier;
   if (!value_check.IsNull()) {
     // No store barrier needed because checked value is a smi, an unboxed mint,
-    // an unboxed double, an unboxed Float32x4, or unboxed Uint32x4.
+    // an unboxed double, an unboxed Float32x4, or unboxed Int32x4.
     needs_store_barrier = kNoStoreBarrier;
     Instruction* check =
         GetCheckClass(stored_value, value_check, call->deopt_id());
@@ -1122,10 +1122,10 @@
       return InlineByteArrayViewLoad(call, receiver, receiver_cid,
                                      kTypedDataFloat32x4ArrayCid,
                                      ic_data, entry, last);
-    case MethodRecognizer::kByteArrayBaseGetUint32x4:
+    case MethodRecognizer::kByteArrayBaseGetInt32x4:
       if (!ShouldInlineSimd()) return false;
       return InlineByteArrayViewLoad(call, receiver, receiver_cid,
-                                     kTypedDataUint32x4ArrayCid,
+                                     kTypedDataInt32x4ArrayCid,
                                      ic_data, entry, last);
     default:
       return false;
@@ -1370,8 +1370,8 @@
         operands_type = kDoubleCid;
       } else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) {
         operands_type = kFloat32x4Cid;
-      } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
-        operands_type = kUint32x4Cid;
+      } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+        operands_type = kInt32x4Cid;
       } else {
         return false;
       }
@@ -1415,8 +1415,8 @@
         operands_type = kSmiCid;
       } else if (HasTwoMintOrSmi(ic_data)) {
         operands_type = kMintCid;
-      } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
-        operands_type = kUint32x4Cid;
+      } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+        operands_type = kInt32x4Cid;
       } else {
         return false;
       }
@@ -1490,8 +1490,8 @@
     }
   } else if (operands_type == kFloat32x4Cid) {
     return InlineFloat32x4BinaryOp(call, op_kind);
-  } else if (operands_type == kUint32x4Cid) {
-    return InlineUint32x4BinaryOp(call, op_kind);
+  } else if (operands_type == kInt32x4Cid) {
+    return InlineInt32x4BinaryOp(call, op_kind);
   } else if (op_kind == Token::kMOD) {
     // TODO(vegorov): implement fast path code for modulo.
     ASSERT(operands_type == kSmiCid);
@@ -1755,7 +1755,7 @@
 }
 
 
-bool FlowGraphOptimizer::InlineUint32x4Getter(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4Getter(InstanceCallInstr* call,
                                               MethodRecognizer::Kind getter) {
   if (!ShouldInlineSimd()) {
     return false;
@@ -1767,15 +1767,15 @@
                 call->env(),
                 call);
   intptr_t mask = 0;
-  if ((getter == MethodRecognizer::kUint32x4Shuffle) ||
-      (getter == MethodRecognizer::kUint32x4ShuffleMix)) {
+  if ((getter == MethodRecognizer::kInt32x4Shuffle) ||
+      (getter == MethodRecognizer::kInt32x4ShuffleMix)) {
     // Extract shuffle mask.
     Definition* mask_definition = NULL;
-    if (getter == MethodRecognizer::kUint32x4Shuffle) {
+    if (getter == MethodRecognizer::kInt32x4Shuffle) {
       ASSERT(call->ArgumentCount() == 2);
       mask_definition = call->ArgumentAt(1);
     } else {
-      ASSERT(getter == MethodRecognizer::kUint32x4ShuffleMix);
+      ASSERT(getter == MethodRecognizer::kInt32x4ShuffleMix);
       ASSERT(call->ArgumentCount() == 3);
       mask_definition = call->ArgumentAt(2);
     }
@@ -1795,14 +1795,14 @@
       return false;
     }
   }
-  if (getter == MethodRecognizer::kUint32x4GetSignMask) {
+  if (getter == MethodRecognizer::kInt32x4GetSignMask) {
     Simd32x4GetSignMaskInstr* instr = new Simd32x4GetSignMaskInstr(
         getter,
         new Value(call->ArgumentAt(0)),
         call->deopt_id());
     ReplaceCall(call, instr);
     return true;
-  } else if (getter == MethodRecognizer::kUint32x4ShuffleMix) {
+  } else if (getter == MethodRecognizer::kInt32x4ShuffleMix) {
     Simd32x4ShuffleMixInstr* instr = new Simd32x4ShuffleMixInstr(
         getter,
         new Value(call->ArgumentAt(0)),
@@ -1811,7 +1811,7 @@
         call->deopt_id());
     ReplaceCall(call, instr);
     return true;
-  } else if (getter == MethodRecognizer::kUint32x4Shuffle) {
+  } else if (getter == MethodRecognizer::kInt32x4Shuffle) {
     Simd32x4ShuffleInstr* instr = new Simd32x4ShuffleInstr(
         getter,
         new Value(call->ArgumentAt(0)),
@@ -1820,7 +1820,7 @@
     ReplaceCall(call, instr);
     return true;
   } else {
-    Uint32x4GetFlagInstr* instr = new Uint32x4GetFlagInstr(
+    Int32x4GetFlagInstr* instr = new Int32x4GetFlagInstr(
         getter,
         new Value(call->ArgumentAt(0)),
         call->deopt_id());
@@ -1862,7 +1862,7 @@
 }
 
 
-bool FlowGraphOptimizer::InlineUint32x4BinaryOp(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4BinaryOp(InstanceCallInstr* call,
                                                 Token::Kind op_kind) {
   if (!ShouldInlineSimd()) {
     return false;
@@ -1885,10 +1885,10 @@
                 call->env(),
                 call);
   // Replace call.
-  BinaryUint32x4OpInstr* uint32x4_bin_op =
-      new BinaryUint32x4OpInstr(op_kind, new Value(left), new Value(right),
+  BinaryInt32x4OpInstr* int32x4_bin_op =
+      new BinaryInt32x4OpInstr(op_kind, new Value(left), new Value(right),
                                 call->deopt_id());
-  ReplaceCall(call, uint32x4_bin_op);
+  ReplaceCall(call, int32x4_bin_op);
   return true;
 }
 
@@ -1987,7 +1987,7 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
       return true;
     default:
       return false;
@@ -2161,8 +2161,8 @@
         return BuildByteArrayViewLoad(call, kTypedDataFloat64ArrayCid);
       case MethodRecognizer::kByteArrayBaseGetFloat32x4:
         return BuildByteArrayViewLoad(call, kTypedDataFloat32x4ArrayCid);
-      case MethodRecognizer::kByteArrayBaseGetUint32x4:
-        return BuildByteArrayViewLoad(call, kTypedDataUint32x4ArrayCid);
+      case MethodRecognizer::kByteArrayBaseGetInt32x4:
+        return BuildByteArrayViewLoad(call, kTypedDataInt32x4ArrayCid);
 
       // ByteArray setters.
       case MethodRecognizer::kByteArrayBaseSetInt8:
@@ -2183,8 +2183,8 @@
         return BuildByteArrayViewStore(call, kTypedDataFloat64ArrayCid);
       case MethodRecognizer::kByteArrayBaseSetFloat32x4:
         return BuildByteArrayViewStore(call, kTypedDataFloat32x4ArrayCid);
-      case MethodRecognizer::kByteArrayBaseSetUint32x4:
-        return BuildByteArrayViewStore(call, kTypedDataUint32x4ArrayCid);
+      case MethodRecognizer::kByteArrayBaseSetInt32x4:
+        return BuildByteArrayViewStore(call, kTypedDataInt32x4ArrayCid);
       default:
         // Unsupported method.
         return false;
@@ -2195,8 +2195,8 @@
     return TryInlineFloat32x4Method(call, recognized_kind);
   }
 
-  if ((class_ids[0] == kUint32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
-    return TryInlineUint32x4Method(call, recognized_kind);
+  if ((class_ids[0] == kInt32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
+    return TryInlineInt32x4Method(call, recognized_kind);
   }
 
   if (recognized_kind == MethodRecognizer::kIntegerLeftShiftWithMask32) {
@@ -2288,9 +2288,9 @@
                                       call->deopt_id());
     ReplaceCall(call, con);
     return true;
-  } else if (recognized_kind == MethodRecognizer::kFloat32x4FromUint32x4Bits) {
-    Uint32x4ToFloat32x4Instr* cast =
-        new Uint32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
+  } else if (recognized_kind == MethodRecognizer::kFloat32x4FromInt32x4Bits) {
+    Int32x4ToFloat32x4Instr* cast =
+        new Int32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
                                     call->deopt_id());
     ReplaceCall(call, cast);
     return true;
@@ -2299,14 +2299,14 @@
 }
 
 
-bool FlowGraphOptimizer::TryInlineUint32x4Constructor(
+bool FlowGraphOptimizer::TryInlineInt32x4Constructor(
     StaticCallInstr* call,
     MethodRecognizer::Kind recognized_kind) {
   if (!ShouldInlineSimd()) {
     return false;
   }
-  if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
-    Uint32x4BoolConstructorInstr* con = new Uint32x4BoolConstructorInstr(
+  if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+    Int32x4BoolConstructorInstr* con = new Int32x4BoolConstructorInstr(
         new Value(call->ArgumentAt(1)),
         new Value(call->ArgumentAt(2)),
         new Value(call->ArgumentAt(3)),
@@ -2314,9 +2314,9 @@
         call->deopt_id());
     ReplaceCall(call, con);
     return true;
-  } else if (recognized_kind == MethodRecognizer::kUint32x4FromFloat32x4Bits) {
-    Float32x4ToUint32x4Instr* cast =
-        new Float32x4ToUint32x4Instr(new Value(call->ArgumentAt(1)),
+  } else if (recognized_kind == MethodRecognizer::kInt32x4FromFloat32x4Bits) {
+    Float32x4ToInt32x4Instr* cast =
+        new Float32x4ToInt32x4Instr(new Value(call->ArgumentAt(1)),
                                      call->deopt_id());
     ReplaceCall(call, cast);
     return true;
@@ -2480,7 +2480,7 @@
 }
 
 
-bool FlowGraphOptimizer::TryInlineUint32x4Method(
+bool FlowGraphOptimizer::TryInlineInt32x4Method(
     InstanceCallInstr* call,
     MethodRecognizer::Kind recognized_kind) {
   if (!ShouldInlineSimd()) {
@@ -2488,18 +2488,18 @@
   }
   ASSERT(call->HasICData());
   switch (recognized_kind) {
-    case MethodRecognizer::kUint32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4Shuffle:
-    case MethodRecognizer::kUint32x4GetFlagX:
-    case MethodRecognizer::kUint32x4GetFlagY:
-    case MethodRecognizer::kUint32x4GetFlagZ:
-    case MethodRecognizer::kUint32x4GetFlagW:
-    case MethodRecognizer::kUint32x4GetSignMask:
-      ASSERT(call->ic_data()->HasReceiverClassId(kUint32x4Cid));
+    case MethodRecognizer::kInt32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4Shuffle:
+    case MethodRecognizer::kInt32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetSignMask:
+      ASSERT(call->ic_data()->HasReceiverClassId(kInt32x4Cid));
       ASSERT(call->ic_data()->HasOneTarget());
-      return InlineUint32x4Getter(call, recognized_kind);
+      return InlineInt32x4Getter(call, recognized_kind);
 
-    case MethodRecognizer::kUint32x4Select: {
+    case MethodRecognizer::kInt32x4Select: {
       Definition* mask = call->ArgumentAt(0);
       Definition* trueValue = call->ArgumentAt(1);
       Definition* falseValue = call->ArgumentAt(2);
@@ -2510,7 +2510,7 @@
                     call->deopt_id(),
                     call->env(),
                     call);
-      Uint32x4SelectInstr* select = new Uint32x4SelectInstr(
+      Int32x4SelectInstr* select = new Int32x4SelectInstr(
           new Value(mask),
           new Value(trueValue),
           new Value(falseValue),
@@ -2518,10 +2518,10 @@
       ReplaceCall(call, select);
       return true;
     }
-    case MethodRecognizer::kUint32x4WithFlagX:
-    case MethodRecognizer::kUint32x4WithFlagY:
-    case MethodRecognizer::kUint32x4WithFlagZ:
-    case MethodRecognizer::kUint32x4WithFlagW: {
+    case MethodRecognizer::kInt32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagW: {
       Definition* left = call->ArgumentAt(0);
       Definition* flag = call->ArgumentAt(1);
       // Type check left.
@@ -2531,7 +2531,7 @@
                     call->deopt_id(),
                     call->env(),
                     call);
-      Uint32x4SetFlagInstr* setFlag = new Uint32x4SetFlagInstr(
+      Int32x4SetFlagInstr* setFlag = new Int32x4SetFlagInstr(
           recognized_kind,
           new Value(left),
           new Value(flag),
@@ -2675,7 +2675,7 @@
 bool FlowGraphOptimizer::BuildByteArrayViewLoad(InstanceCallInstr* call,
                                                 intptr_t view_cid) {
   bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
-                   (view_cid == kTypedDataUint32x4ArrayCid);
+                   (view_cid == kTypedDataInt32x4ArrayCid);
   if (simd_view && !ShouldInlineSimd()) {
     return false;
   }
@@ -2725,7 +2725,7 @@
 bool FlowGraphOptimizer::BuildByteArrayViewStore(InstanceCallInstr* call,
                                                  intptr_t view_cid) {
   bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
-                   (view_cid == kTypedDataUint32x4ArrayCid);
+                   (view_cid == kTypedDataInt32x4ArrayCid);
   if (simd_view && !ShouldInlineSimd()) {
     return false;
   }
@@ -2780,14 +2780,14 @@
       value_check.AddReceiverCheck(kDoubleCid, target);
       break;
     }
-    case kTypedDataUint32x4ArrayCid: {
-      // Check that value is always Uint32x4.
+    case kTypedDataInt32x4ArrayCid: {
+      // Check that value is always Int32x4.
       value_check = ICData::New(flow_graph_->parsed_function().function(),
                                 call->function_name(),
                                 Object::empty_array(),  // Dummy args. descr.
                                 Isolate::kNoDeoptId,
                                 1);
-      value_check.AddReceiverCheck(kUint32x4Cid, target);
+      value_check.AddReceiverCheck(kInt32x4Cid, target);
       break;
     }
     case kTypedDataFloat32x4ArrayCid: {
@@ -3136,8 +3136,8 @@
              (recognized_kind == MethodRecognizer::kFloat32x4Splat) ||
              (recognized_kind == MethodRecognizer::kFloat32x4Constructor)) {
     TryInlineFloat32x4Constructor(call, recognized_kind);
-  } else if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
-    TryInlineUint32x4Constructor(call, recognized_kind);
+  } else if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+    TryInlineInt32x4Constructor(call, recognized_kind);
   } else if (recognized_kind == MethodRecognizer::kObjectConstructor) {
     // Remove the original push arguments.
     for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
@@ -6992,40 +6992,40 @@
 }
 
 
-void ConstantPropagator::VisitFloat32x4ToUint32x4(
-    Float32x4ToUint32x4Instr* instr) {
+void ConstantPropagator::VisitFloat32x4ToInt32x4(
+    Float32x4ToInt32x4Instr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4BoolConstructor(
-    Uint32x4BoolConstructorInstr* instr) {
+void ConstantPropagator::VisitInt32x4BoolConstructor(
+    Int32x4BoolConstructorInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4GetFlag(Uint32x4GetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4GetFlag(Int32x4GetFlagInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4SetFlag(Uint32x4SetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4SetFlag(Int32x4SetFlagInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4Select(Uint32x4SelectInstr* instr) {
+void ConstantPropagator::VisitInt32x4Select(Int32x4SelectInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4ToFloat32x4(
-    Uint32x4ToFloat32x4Instr* instr) {
+void ConstantPropagator::VisitInt32x4ToFloat32x4(
+    Int32x4ToFloat32x4Instr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitBinaryUint32x4Op(BinaryUint32x4OpInstr* instr) {
+void ConstantPropagator::VisitBinaryInt32x4Op(BinaryInt32x4OpInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
@@ -7097,7 +7097,7 @@
 }
 
 
-void ConstantPropagator::VisitUnboxUint32x4(UnboxUint32x4Instr* instr) {
+void ConstantPropagator::VisitUnboxInt32x4(UnboxInt32x4Instr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsNonConstant(value)) {
     SetValue(instr, non_constant_);
@@ -7108,7 +7108,7 @@
 }
 
 
-void ConstantPropagator::VisitBoxUint32x4(BoxUint32x4Instr* instr) {
+void ConstantPropagator::VisitBoxInt32x4(BoxInt32x4Instr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsNonConstant(value)) {
     SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 2940c6b..bd26fdd 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -110,11 +110,11 @@
   bool TryInlineInstanceMethod(InstanceCallInstr* call);
   bool TryInlineFloat32x4Constructor(StaticCallInstr* call,
                                      MethodRecognizer::Kind recognized_kind);
-  bool TryInlineUint32x4Constructor(StaticCallInstr* call,
+  bool TryInlineInt32x4Constructor(StaticCallInstr* call,
                                     MethodRecognizer::Kind recognized_kind);
   bool TryInlineFloat32x4Method(InstanceCallInstr* call,
                                 MethodRecognizer::Kind recognized_kind);
-  bool TryInlineUint32x4Method(InstanceCallInstr* call,
+  bool TryInlineInt32x4Method(InstanceCallInstr* call,
                                MethodRecognizer::Kind recognized_kind);
   void ReplaceWithInstanceOf(InstanceCallInstr* instr);
   void ReplaceWithTypeCast(InstanceCallInstr* instr);
@@ -187,11 +187,11 @@
 
   bool InlineFloat32x4Getter(InstanceCallInstr* call,
                              MethodRecognizer::Kind getter);
-  bool InlineUint32x4Getter(InstanceCallInstr* call,
+  bool InlineInt32x4Getter(InstanceCallInstr* call,
                             MethodRecognizer::Kind getter);
   bool InlineFloat32x4BinaryOp(InstanceCallInstr* call,
                                Token::Kind op_kind);
-  bool InlineUint32x4BinaryOp(InstanceCallInstr* call,
+  bool InlineInt32x4BinaryOp(InstanceCallInstr* call,
                               Token::Kind op_kind);
   void InlineImplicitInstanceGetter(InstanceCallInstr* call);
 
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 6dc3a61..d259022 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -415,18 +415,16 @@
     cid_ = kDynamicCid;
   }
 
-  Error& malformed_error = Error::Handle();
-  if (ToAbstractType()->IsMoreSpecificThan(*other->ToAbstractType(),
-                                           &malformed_error)) {
-    type_ = other->ToAbstractType();
-  } else if (other->ToAbstractType()->IsMoreSpecificThan(*ToAbstractType(),
-                                                         &malformed_error)) {
-    // Nothing to do.
+  const AbstractType* compile_type = ToAbstractType();
+  const AbstractType* other_compile_type = other->ToAbstractType();
+  if (compile_type->IsMoreSpecificThan(*other_compile_type, NULL)) {
+    type_ = other_compile_type;
+  } else if (other_compile_type->IsMoreSpecificThan(*compile_type, NULL)) {
+  // Nothing to do.
   } else {
-    // Can't unify.
-    type_ = &Type::ZoneHandle(Type::DynamicType());
+  // Can't unify.
+  type_ = &Type::ZoneHandle(Type::DynamicType());
   }
-  ASSERT(malformed_error.IsNull());
 }
 
 
@@ -615,14 +613,13 @@
     return false;
   }
 
-  Error& malformed_error = Error::Handle();
-  *is_instance = compile_type.IsMoreSpecificThan(type, &malformed_error);
-  return malformed_error.IsNull() && *is_instance;
+  *is_instance = compile_type.IsMoreSpecificThan(type, NULL);
+  return *is_instance;
 }
 
 
 bool CompileType::IsMoreSpecificThan(const AbstractType& other) {
-  if (IsNone() || other.IsMalformed()) {
+  if (IsNone()) {
     return false;
   }
 
@@ -631,10 +628,7 @@
     return IsNull();
   }
 
-  Error& malformed_error = Error::Handle();
-  const bool is_more_specific =
-      ToAbstractType()->IsMoreSpecificThan(other, &malformed_error);
-  return malformed_error.IsNull() && is_more_specific;
+  return ToAbstractType()->IsMoreSpecificThan(other, NULL);
 }
 
 
@@ -1056,8 +1050,8 @@
       (op_kind() == MethodRecognizer::kFloat32x4ShuffleW)) {
     return CompileType::FromCid(kDoubleCid);
   }
-  if ((op_kind() == MethodRecognizer::kUint32x4Shuffle)) {
-    return CompileType::FromCid(kUint32x4Cid);
+  if ((op_kind() == MethodRecognizer::kInt32x4Shuffle)) {
+    return CompileType::FromCid(kInt32x4Cid);
   }
   ASSERT((op_kind() == MethodRecognizer::kFloat32x4Shuffle));
   return CompileType::FromCid(kFloat32x4Cid);
@@ -1065,8 +1059,8 @@
 
 
 CompileType Simd32x4ShuffleMixInstr::ComputeType() const {
-  if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-    return CompileType::FromCid(kUint32x4Cid);
+  if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+    return CompileType::FromCid(kInt32x4Cid);
   }
   ASSERT((op_kind() == MethodRecognizer::kFloat32x4ShuffleMix));
   return CompileType::FromCid(kFloat32x4Cid);
@@ -1094,7 +1088,7 @@
 
 
 CompileType Float32x4ComparisonInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
@@ -1128,38 +1122,38 @@
 }
 
 
-CompileType Float32x4ToUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Float32x4ToInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4BoolConstructorInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4BoolConstructorInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4GetFlagInstr::ComputeType() const {
+CompileType Int32x4GetFlagInstr::ComputeType() const {
   return CompileType::FromCid(kBoolCid);
 }
 
 
-CompileType Uint32x4SelectInstr::ComputeType() const {
+CompileType Int32x4SelectInstr::ComputeType() const {
   return CompileType::FromCid(kFloat32x4Cid);
 }
 
 
-CompileType Uint32x4SetFlagInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4SetFlagInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4ToFloat32x4Instr::ComputeType() const {
+CompileType Int32x4ToFloat32x4Instr::ComputeType() const {
   return CompileType::FromCid(kFloat32x4Cid);
 }
 
 
-CompileType BinaryUint32x4OpInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType BinaryInt32x4OpInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
@@ -1193,13 +1187,13 @@
 }
 
 
-CompileType UnboxUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType UnboxInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType BoxUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType BoxInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
diff --git a/runtime/vm/freelist.h b/runtime/vm/freelist.h
index 072348a..8ec1ac4 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/freelist.h
@@ -43,6 +43,7 @@
     FakeInstance() { }
     static cpp_vtable vtable() { return 0; }
     static intptr_t InstanceSize() { return 0; }
+    static intptr_t NextFieldOffset() { return -kWordSize; }
     static const ClassId kClassId = kFreeListElement;
     static bool IsInstance() { return true; }
 
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index cfeca9b..202bb3c 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -625,8 +625,8 @@
   if (op_kind() == MethodRecognizer::kFloat32x4GetSignMask) {
     f->Print("Float32x4.getSignMask ");
   } else {
-    ASSERT(op_kind() == MethodRecognizer::kUint32x4GetSignMask);
-    f->Print("Uint32x4.getSignMask ");
+    ASSERT(op_kind() == MethodRecognizer::kInt32x4GetSignMask);
+    f->Print("Int32x4.getSignMask ");
   }
   value()->PrintTo(f);
 }
@@ -707,8 +707,8 @@
 }
 
 
-void Float32x4ToUint32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Float32x4.toUint32x4 ");
+void Float32x4ToInt32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Float32x4.toInt32x4 ");
   left()->PrintTo(f);
 }
 
@@ -716,8 +716,8 @@
 
 
 
-void Uint32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.bool(");
+void Int32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.bool(");
   value0()->PrintTo(f);
   f->Print(", ");
   value1()->PrintTo(f);
@@ -729,22 +729,22 @@
 }
 
 
-void Uint32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
   value()->PrintTo(f);
 }
 
 
-void Uint32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
   value()->PrintTo(f);
   f->Print(", ");
   flagValue()->PrintTo(f);
 }
 
 
-void Uint32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.select ");
+void Int32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.select ");
   mask()->PrintTo(f);
   f->Print(", ");
   trueValue()->PrintTo(f);
@@ -753,13 +753,13 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.toFloat32x4 ");
+void Int32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.toFloat32x4 ");
   left()->PrintTo(f);
 }
 
 
-void BinaryUint32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
+void BinaryInt32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
   f->Print("%s, ", Token::Str(op_kind()));
   left()->PrintTo(f);
   f->Print(", ");
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 50e3caf..1877a5c 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -1517,15 +1517,15 @@
 }
 
 
-Definition* BoxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+Definition* BoxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
   if (input_use_list() == NULL) {
     // Environments can accomodate any representation. No need to box.
     return value()->definition();
   }
 
-  // Fold away BoxUint32x4(UnboxUint32x4(v)).
-  UnboxUint32x4Instr* defn = value()->definition()->AsUnboxUint32x4();
-  if ((defn != NULL) && (defn->value()->Type()->ToCid() == kUint32x4Cid)) {
+  // Fold away BoxInt32x4(UnboxInt32x4(v)).
+  UnboxInt32x4Instr* defn = value()->definition()->AsUnboxInt32x4();
+  if ((defn != NULL) && (defn->value()->Type()->ToCid() == kInt32x4Cid)) {
     return defn->value()->definition();
   }
 
@@ -1533,9 +1533,9 @@
 }
 
 
-Definition* UnboxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
-  // Fold away UnboxUint32x4(BoxUint32x4(v)).
-  BoxUint32x4Instr* defn = value()->definition()->AsBoxUint32x4();
+Definition* UnboxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+  // Fold away UnboxInt32x4(BoxInt32x4(v)).
+  BoxInt32x4Instr* defn = value()->definition()->AsBoxInt32x4();
   return (defn != NULL) ? defn->value()->definition() : this;
 }
 
@@ -1666,6 +1666,9 @@
       }
       RemoveEnvironment();
       flow_graph->CopyDeoptTarget(this, comp);
+      // Unlink environment from the comparison since it is copied to the
+      // branch instruction.
+      comp->RemoveEnvironment();
 
       comp->RemoveFromGraph();
       SetComparison(comp);
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index b4e6878..ea91a10 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -53,7 +53,7 @@
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470)               \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356)          \
-  V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330)            \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162)               \
   V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 1443265945)                    \
   V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 1864204733)                  \
   V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 1807419109)                  \
@@ -63,7 +63,7 @@
   V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 1457395244)              \
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 49127618)                \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 1261559935)          \
-  V(_TypedList, _setUint32x4, ByteArrayBaseSetUint32x4, 691480480)             \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 1871750680)              \
   V(_GrowableList, get:length, GrowableArrayLength, 1654225242)                \
   V(_GrowableList, get:_capacity, GrowableArrayCapacity, 817090003)            \
   V(_GrowableList, _setData, GrowableArraySetData, 1375509957)                 \
@@ -92,8 +92,8 @@
   V(Float32x4, Float32x4., Float32x4Constructor, 786169160)                    \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 1589383280)                      \
   V(Float32x4, Float32x4.splat, Float32x4Splat, 62513275)                      \
-  V(Float32x4, Float32x4.fromUint32x4Bits, Float32x4FromUint32x4Bits,          \
-      770033146)                                                               \
+  V(Float32x4, Float32x4.fromInt32x4Bits, Float32x4FromInt32x4Bits,            \
+      1933861675)                                                              \
   V(_Float32x4, shuffle, Float32x4Shuffle, 1178727105)                         \
   V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 927956119)                    \
   V(_Float32x4, get:x, Float32x4ShuffleX, 1351717838)                          \
@@ -101,12 +101,12 @@
   V(_Float32x4, get:z, Float32x4ShuffleZ, 2144923721)                          \
   V(_Float32x4, get:w, Float32x4ShuffleW, 1447699119)                          \
   V(_Float32x4, get:signMask, Float32x4GetSignMask, 1198849347)                \
-  V(_Float32x4, _cmpequal, Float32x4Equal, 2141256163)                         \
-  V(_Float32x4, _cmpgt, Float32x4GreaterThan, 696292270)                       \
-  V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1199333164)              \
-  V(_Float32x4, _cmplt, Float32x4LessThan, 943396590)                          \
-  V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 57211241)                   \
-  V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1234888884)                     \
+  V(_Float32x4, _cmpequal, Float32x4Equal, 1944929844)                         \
+  V(_Float32x4, _cmpgt, Float32x4GreaterThan, 499965951)                       \
+  V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1003006845)              \
+  V(_Float32x4, _cmplt, Float32x4LessThan, 747070271)                          \
+  V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 2008368570)                 \
+  V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1038562565)                     \
   V(_Float32x4, _min, Float32x4Min, 1166664658)                                \
   V(_Float32x4, _max, Float32x4Max, 343968921)                                 \
   V(_Float32x4, _scale, Float32x4Scale, 803505531)                             \
@@ -120,21 +120,21 @@
   V(_Float32x4, withY, Float32x4WithY, 1806065938)                             \
   V(_Float32x4, withZ, Float32x4WithZ, 320659034)                              \
   V(_Float32x4, withW, Float32x4WithW, 1108437255)                             \
-  V(Uint32x4, Uint32x4.bool, Uint32x4BoolConstructor, 517444095)               \
-  V(Uint32x4, Uint32x4.fromFloat32x4Bits, Uint32x4FromFloat32x4Bits,           \
-      1080034855)                                                              \
-  V(_Uint32x4, get:flagX, Uint32x4GetFlagX, 1674696792)                        \
-  V(_Uint32x4, get:flagY, Uint32x4GetFlagY, 2013200152)                        \
-  V(_Uint32x4, get:flagZ, Uint32x4GetFlagZ, 944733935)                         \
-  V(_Uint32x4, get:flagW, Uint32x4GetFlagW, 22746169)                          \
-  V(_Uint32x4, get:signMask, Uint32x4GetSignMask, 1858144083)                  \
-  V(_Uint32x4, shuffle, Uint32x4Shuffle, 146209630)                            \
-  V(_Uint32x4, shuffleMix, Uint32x4ShuffleMix, 1251494596)                     \
-  V(_Uint32x4, select, Uint32x4Select, 72244182)                               \
-  V(_Uint32x4, withFlagX, Uint32x4WithFlagX, 1475542073)                       \
-  V(_Uint32x4, withFlagY, Uint32x4WithFlagY, 830610988)                        \
-  V(_Uint32x4, withFlagZ, Uint32x4WithFlagZ, 1714792414)                       \
-  V(_Uint32x4, withFlagW, Uint32x4WithFlagW, 1516924162)                       \
+  V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 1477593884)                 \
+  V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits,              \
+      1955567428)                                                              \
+  V(_Int32x4, get:flagX, Int32x4GetFlagX, 729235803)                           \
+  V(_Int32x4, get:flagY, Int32x4GetFlagY, 430840849)                           \
+  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 1981076496)                          \
+  V(_Int32x4, get:flagW, Int32x4GetFlagW, 629356099)                           \
+  V(_Int32x4, get:signMask, Int32x4GetSignMask, 1598787746)                    \
+  V(_Int32x4, shuffle, Int32x4Shuffle, 599391160)                              \
+  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 1491641197)                       \
+  V(_Int32x4, select, Int32x4Select, 598942806)                                \
+  V(_Int32x4, withFlagX, Int32x4WithFlagX, 63248661)                           \
+  V(_Int32x4, withFlagY, Int32x4WithFlagY, 1498755850)                         \
+  V(_Int32x4, withFlagZ, Int32x4WithFlagZ, 457856832)                          \
+  V(_Int32x4, withFlagW, Int32x4WithFlagW, 690638779)                          \
   V(_List, [], ObjectArrayGetIndexed, 1079829188)                              \
   V(_List, []=, ObjectArraySetIndexed, 748954698)                              \
   V(_ImmutableList, [], ImmutableArrayGetIndexed, 25983597)                    \
@@ -166,8 +166,8 @@
   V(_Uint32Array, []=, Uint32ArraySetIndexed, 1980947178)                      \
   V(_Float32x4Array, [], Float32x4ArrayGetIndexed, 1901126825)                 \
   V(_Float32x4Array, []=, Float32x4ArraySetIndexed, 1419416331)                \
-  V(_Uint32x4Array, [], Uint32x4ArrayGetIndexed, 1340743913)                   \
-  V(_Uint32x4Array, []=, Uint32x4ArraySetIndexed, 1326924628)                  \
+  V(_Int32x4Array, [], Int32x4ArrayGetIndexed, 1675579883)                     \
+  V(_Int32x4Array, []=, Int32x4ArraySetIndexed, 809970636)                     \
 
 
 // A list of core function that should always be inlined.
@@ -192,7 +192,7 @@
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470)               \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356)          \
-  V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330)            \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162)               \
 
 // Class that recognizes the name and owner of a function and returns the
 // corresponding enum. See RECOGNIZED_LIST above for list of recognizable
@@ -660,8 +660,8 @@
   M(BoxDouble)                                                                 \
   M(BoxFloat32x4)                                                              \
   M(UnboxFloat32x4)                                                            \
-  M(BoxUint32x4)                                                               \
-  M(UnboxUint32x4)                                                             \
+  M(BoxInt32x4)                                                               \
+  M(UnboxInt32x4)                                                             \
   M(UnboxInteger)                                                              \
   M(BoxInteger)                                                                \
   M(BinaryMintOp)                                                              \
@@ -688,14 +688,14 @@
   M(Float32x4ZeroArg)                                                          \
   M(Float32x4Clamp)                                                            \
   M(Float32x4With)                                                             \
-  M(Float32x4ToUint32x4)                                                       \
+  M(Float32x4ToInt32x4)                                                       \
   M(MaterializeObject)                                                         \
-  M(Uint32x4BoolConstructor)                                                   \
-  M(Uint32x4GetFlag)                                                           \
-  M(Uint32x4Select)                                                            \
-  M(Uint32x4SetFlag)                                                           \
-  M(Uint32x4ToFloat32x4)                                                       \
-  M(BinaryUint32x4Op)                                                          \
+  M(Int32x4BoolConstructor)                                                   \
+  M(Int32x4GetFlag)                                                           \
+  M(Int32x4Select)                                                            \
+  M(Int32x4SetFlag)                                                           \
+  M(Int32x4ToFloat32x4)                                                       \
+  M(BinaryInt32x4Op)                                                          \
 
 
 #define FORWARD_DECLARATION(type) class type##Instr;
@@ -960,7 +960,7 @@
   friend class UnboxIntegerInstr;
   friend class UnboxDoubleInstr;
   friend class UnboxFloat32x4Instr;
-  friend class UnboxUint32x4Instr;
+  friend class UnboxInt32x4Instr;
   friend class BinaryDoubleOpInstr;
   friend class BinaryFloat32x4OpInstr;
   friend class Float32x4ZeroInstr;
@@ -976,13 +976,13 @@
   friend class Float32x4ZeroArgInstr;
   friend class Float32x4ClampInstr;
   friend class Float32x4WithInstr;
-  friend class Float32x4ToUint32x4Instr;
-  friend class Uint32x4BoolConstructorInstr;
-  friend class Uint32x4GetFlagInstr;
-  friend class Uint32x4SetFlagInstr;
-  friend class Uint32x4SelectInstr;
-  friend class Uint32x4ToFloat32x4Instr;
-  friend class BinaryUint32x4OpInstr;
+  friend class Float32x4ToInt32x4Instr;
+  friend class Int32x4BoolConstructorInstr;
+  friend class Int32x4GetFlagInstr;
+  friend class Int32x4SetFlagInstr;
+  friend class Int32x4SelectInstr;
+  friend class Int32x4ToFloat32x4Instr;
+  friend class BinaryInt32x4OpInstr;
   friend class BinaryMintOpInstr;
   friend class BinarySmiOpInstr;
   friend class UnarySmiOpInstr;
@@ -4571,9 +4571,9 @@
 };
 
 
-class BoxUint32x4Instr : public TemplateDefinition<1> {
+class BoxInt32x4Instr : public TemplateDefinition<1> {
  public:
-  explicit BoxUint32x4Instr(Value* value) {
+  explicit BoxInt32x4Instr(Value* value) {
     SetInputAt(0, value);
   }
 
@@ -4583,10 +4583,10 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
-  DECLARE_INSTRUCTION(BoxUint32x4)
+  DECLARE_INSTRUCTION(BoxInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -4599,7 +4599,7 @@
   Definition* Canonicalize(FlowGraph* flow_graph);
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(BoxUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(BoxInt32x4Instr);
 };
 
 
@@ -4702,9 +4702,9 @@
 };
 
 
-class UnboxUint32x4Instr : public TemplateDefinition<1> {
+class UnboxInt32x4Instr : public TemplateDefinition<1> {
  public:
-  UnboxUint32x4Instr(Value* value, intptr_t deopt_id) {
+  UnboxInt32x4Instr(Value* value, intptr_t deopt_id) {
     SetInputAt(0, value);
     deopt_id_ = deopt_id;
   }
@@ -4712,11 +4712,11 @@
   Value* value() const { return inputs_[0]; }
 
   virtual bool CanDeoptimize() const {
-    return (value()->Type()->ToCid() != kUint32x4Cid);
+    return (value()->Type()->ToCid() != kInt32x4Cid);
   }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual bool AllowsCSE() const { return true; }
@@ -4724,7 +4724,7 @@
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const { return true; }
 
-  DECLARE_INSTRUCTION(UnboxUint32x4)
+  DECLARE_INSTRUCTION(UnboxInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool MayThrow() const { return false; }
@@ -4732,7 +4732,7 @@
   Definition* Canonicalize(FlowGraph* flow_graph);
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(UnboxUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(UnboxInt32x4Instr);
 };
 
 
@@ -5021,8 +5021,8 @@
         (op_kind_ == MethodRecognizer::kFloat32x4ShuffleW)) {
       return kUnboxedDouble;
     }
-    if ((op_kind_ == MethodRecognizer::kUint32x4Shuffle)) {
-      return kUnboxedUint32x4;
+    if ((op_kind_ == MethodRecognizer::kInt32x4Shuffle)) {
+      return kUnboxedInt32x4;
     }
     ASSERT((op_kind_ == MethodRecognizer::kFloat32x4Shuffle));
     return kUnboxedFloat32x4;
@@ -5037,8 +5037,8 @@
         (op_kind_ == MethodRecognizer::kFloat32x4Shuffle)) {
       return kUnboxedFloat32x4;
     }
-    ASSERT((op_kind_ == MethodRecognizer::kUint32x4Shuffle));
-    return kUnboxedUint32x4;
+    ASSERT((op_kind_ == MethodRecognizer::kInt32x4Shuffle));
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5090,8 +5090,8 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-      return kUnboxedUint32x4;
+    if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+      return kUnboxedInt32x4;
     }
     ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
     return kUnboxedFloat32x4;
@@ -5099,8 +5099,8 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1));
-    if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-      return kUnboxedUint32x4;
+    if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+      return kUnboxedInt32x4;
     }
     ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
     return kUnboxedFloat32x4;
@@ -5288,7 +5288,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5634,9 +5634,9 @@
 };
 
 
-class Float32x4ToUint32x4Instr : public TemplateDefinition<1> {
+class Float32x4ToInt32x4Instr : public TemplateDefinition<1> {
  public:
-  Float32x4ToUint32x4Instr(Value* left, intptr_t deopt_id) {
+  Float32x4ToInt32x4Instr(Value* left, intptr_t deopt_id) {
     SetInputAt(0, left);
     deopt_id_ = deopt_id;
   }
@@ -5648,7 +5648,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5662,7 +5662,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Float32x4ToUint32x4)
+  DECLARE_INSTRUCTION(Float32x4ToInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5673,13 +5673,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Float32x4ToUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(Float32x4ToInt32x4Instr);
 };
 
 
-class Uint32x4BoolConstructorInstr : public TemplateDefinition<4> {
+class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
  public:
-  Uint32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
+  Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
                                Value* value3, intptr_t deopt_id) {
     SetInputAt(0, value0);
     SetInputAt(1, value1);
@@ -5698,7 +5698,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5712,7 +5712,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4BoolConstructor)
+  DECLARE_INSTRUCTION(Int32x4BoolConstructor)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5723,13 +5723,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4BoolConstructorInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4BoolConstructorInstr);
 };
 
 
-class Uint32x4GetFlagInstr : public TemplateDefinition<1> {
+class Int32x4GetFlagInstr : public TemplateDefinition<1> {
  public:
-  Uint32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+  Int32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
                        intptr_t deopt_id)
       : op_kind_(op_kind) {
     SetInputAt(0, value);
@@ -5750,7 +5750,7 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5759,14 +5759,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4GetFlag)
+  DECLARE_INSTRUCTION(Int32x4GetFlag)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsUint32x4GetFlag()->op_kind();
+    return op_kind() == other->AsInt32x4GetFlag()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -5774,7 +5774,7 @@
  private:
   const MethodRecognizer::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4GetFlagInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4GetFlagInstr);
 };
 
 
@@ -5803,8 +5803,8 @@
     if (op_kind_ == MethodRecognizer::kFloat32x4GetSignMask) {
       return kUnboxedFloat32x4;
     }
-    ASSERT(op_kind_ == MethodRecognizer::kUint32x4GetSignMask);
-    return kUnboxedUint32x4;
+    ASSERT(op_kind_ == MethodRecognizer::kInt32x4GetSignMask);
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5832,9 +5832,9 @@
 };
 
 
-class Uint32x4SelectInstr : public TemplateDefinition<3> {
+class Int32x4SelectInstr : public TemplateDefinition<3> {
  public:
-  Uint32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
+  Int32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
                       intptr_t deopt_id) {
     SetInputAt(0, mask);
     SetInputAt(1, trueValue);
@@ -5857,7 +5857,7 @@
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1) || (idx == 2));
     if (idx == 0) {
-      return kUnboxedUint32x4;
+      return kUnboxedInt32x4;
     }
     return kUnboxedFloat32x4;
   }
@@ -5868,7 +5868,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4Select)
+  DECLARE_INSTRUCTION(Int32x4Select)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5879,13 +5879,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4SelectInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4SelectInstr);
 };
 
 
-class Uint32x4SetFlagInstr : public TemplateDefinition<2> {
+class Int32x4SetFlagInstr : public TemplateDefinition<2> {
  public:
-  Uint32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+  Int32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
                        Value* flagValue, intptr_t deopt_id)
       : op_kind_(op_kind) {
     SetInputAt(0, value);
@@ -5903,7 +5903,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-      return kUnboxedUint32x4;
+      return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5911,7 +5911,7 @@
     if (idx == 1) {
       return kTagged;
     }
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5920,14 +5920,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4SetFlag)
+  DECLARE_INSTRUCTION(Int32x4SetFlag)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsUint32x4SetFlag()->op_kind();
+    return op_kind() == other->AsInt32x4SetFlag()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -5935,13 +5935,13 @@
  private:
   const MethodRecognizer::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4SetFlagInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4SetFlagInstr);
 };
 
 
-class Uint32x4ToFloat32x4Instr : public TemplateDefinition<1> {
+class Int32x4ToFloat32x4Instr : public TemplateDefinition<1> {
  public:
-  Uint32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
+  Int32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
     SetInputAt(0, left);
     deopt_id_ = deopt_id;
   }
@@ -5958,7 +5958,7 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5967,7 +5967,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4ToFloat32x4)
+  DECLARE_INSTRUCTION(Int32x4ToFloat32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5978,13 +5978,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4ToFloat32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4ToFloat32x4Instr);
 };
 
 
-class BinaryUint32x4OpInstr : public TemplateDefinition<2> {
+class BinaryInt32x4OpInstr : public TemplateDefinition<2> {
  public:
-  BinaryUint32x4OpInstr(Token::Kind op_kind,
+  BinaryInt32x4OpInstr(Token::Kind op_kind,
                         Value* left,
                         Value* right,
                         intptr_t deopt_id)
@@ -6004,12 +6004,12 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1));
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -6018,14 +6018,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(BinaryUint32x4Op)
+  DECLARE_INSTRUCTION(BinaryInt32x4Op)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsBinaryUint32x4Op()->op_kind();
+    return op_kind() == other->AsBinaryInt32x4Op()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -6033,7 +6033,7 @@
  private:
   const Token::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(BinaryUint32x4OpInstr);
+  DISALLOW_COPY_AND_ASSIGN(BinaryInt32x4OpInstr);
 };
 
 class BinaryMintOpInstr : public TemplateDefinition<2> {
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 3c613e8..43ab8a1 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -979,8 +979,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1030,8 +1030,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1053,7 +1053,7 @@
   locs->set_in(1, Location::WritableRegister());
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1106,7 +1106,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     QRegister result = locs()->out().fpu_reg();
     DRegister dresult0 = EvenDRegisterOf(result);
     DRegister dresult1 = OddDRegisterOf(result);
@@ -1131,7 +1131,7 @@
         element_address = Address(index.reg(), 0);
         __ vldrd(dresult0, element_address);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         __ add(index.reg(), index.reg(), ShifterOperand(array));
         __ LoadDFromOffset(dresult0, index.reg(), 0);
@@ -1217,8 +1217,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNREACHABLE();
       return kTagged;
@@ -1256,7 +1256,7 @@
       break;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:  // TODO(srdjan): Support Float64 constants.
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1397,7 +1397,7 @@
       __ StoreDToOffset(in2, index.reg(), 0);
       break;
     }
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid: {
       QRegister in = locs()->in(2).fpu_reg();
       DRegister din0 = EvenDRegisterOf(in);
@@ -1523,7 +1523,7 @@
           __ CompareImmediate(value_cid_reg, kNullCid);
           __ b(&no_fixed_length, EQ);
           // Check for typed data array.
-          __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+          __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
           __ b(&no_fixed_length, GT);
           __ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
           // Could still be a regular array.
@@ -1603,7 +1603,7 @@
         __ CompareImmediate(value_cid_reg, kNullCid);
         __ b(&no_fixed_length, EQ);
         // Check for typed data array.
-        __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+        __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
         __ b(&no_fixed_length, GT);
         __ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
         // Could still be a regular array.
@@ -2886,7 +2886,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -2899,18 +2899,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -2927,12 +2927,12 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
@@ -2940,21 +2940,21 @@
   DRegister value_even = EvenDRegisterOf(value);
   DRegister value_odd = OddDRegisterOf(value);
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  out_reg);
   __ Bind(slow_path->exit_label());
   __ StoreDToOffset(value_even, out_reg,
-      Uint32x4::value_offset() - kHeapObjectTag);
+      Int32x4::value_offset() - kHeapObjectTag);
   __ StoreDToOffset(value_odd, out_reg,
-      Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+      Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t value_cid = value()->Type()->ToCid();
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+  const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
@@ -2967,26 +2967,26 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const QRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     const Register temp = locs()->temp(0).reg();
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ tst(value, ShifterOperand(kSmiTagMask));
     __ b(deopt, EQ);
-    __ CompareClassId(value, kUint32x4Cid, temp);
+    __ CompareClassId(value, kInt32x4Cid, temp);
     __ b(deopt, NE);
   }
 
   const DRegister result_even = EvenDRegisterOf(result);
   const DRegister result_odd = OddDRegisterOf(result);
   __ LoadDFromOffset(result_even, value,
-      Uint32x4::value_offset() - kHeapObjectTag);
+      Int32x4::value_offset() - kHeapObjectTag);
   __ LoadDFromOffset(result_odd, value,
-      Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+      Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
 }
 
 
@@ -3091,7 +3091,7 @@
       __ vdup(kWord, result, dvalue1, 1);
       __ vcvtds(dresult0, sresult0);
       break;
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
     case MethodRecognizer::kFloat32x4Shuffle:
       if (mask_ == 0x00) {
         __ vdup(kWord, result, dvalue0, 0);
@@ -3155,7 +3155,7 @@
 
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       // TODO(zra): Investigate better instruction sequences for shuffle masks.
       SRegister left_svalues[4];
       SRegister right_svalues[4];
@@ -3524,7 +3524,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3535,7 +3535,7 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
 
@@ -3545,7 +3545,7 @@
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3561,7 +3561,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3592,7 +3592,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3604,7 +3604,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
 
@@ -3616,16 +3616,16 @@
   SRegister svalue3 = OddSRegisterOf(dvalue1);
 
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ vmovrs(result, svalue0);
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ vmovrs(result, svalue1);
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ vmovrs(result, svalue2);
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ vmovrs(result, svalue3);
       break;
     default: UNREACHABLE();
@@ -3637,7 +3637,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3651,7 +3651,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister mask = locs()->in(0).fpu_reg();
   QRegister trueValue = locs()->in(1).fpu_reg();
   QRegister falseValue = locs()->in(2).fpu_reg();
@@ -3672,7 +3672,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3685,7 +3685,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   QRegister result = locs()->out().fpu_reg();
@@ -3705,16 +3705,16 @@
   __ LoadImmediate(TMP, 0xffffffff, EQ);
   __ LoadImmediate(TMP, 0, NE);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ vmovsr(sresult0, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ vmovsr(sresult1, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ vmovsr(sresult2, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ vmovsr(sresult3, TMP);
       break;
     default: UNREACHABLE();
@@ -3722,7 +3722,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3733,7 +3733,7 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
 
@@ -3743,7 +3743,7 @@
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3755,7 +3755,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister left = locs()->in(0).fpu_reg();
   QRegister right = locs()->in(1).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index ba97036..160fe52 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1050,8 +1050,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1103,8 +1103,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1130,7 +1130,7 @@
   }
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1163,7 +1163,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     XmmRegister result = locs()->out().fpu_reg();
     if ((index_scale() == 1) && index.IsRegister()) {
       __ SmiUntag(index.reg());
@@ -1185,7 +1185,7 @@
       case kTypedDataFloat64ArrayCid:
         __ movsd(result, element_address);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         __ movups(result, element_address);
         break;
@@ -1272,8 +1272,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1334,7 +1334,7 @@
       // TODO(srdjan): Support Float64 constants.
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1455,7 +1455,7 @@
     case kTypedDataFloat64ArrayCid:
       __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       __ movups(element_address, locs()->in(2).fpu_reg());
       break;
@@ -1585,7 +1585,7 @@
           __ cmpl(value_cid_reg, Immediate(kNullCid));
           __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
           // Check for typed data array.
-          __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+          __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
           // Not a typed array or a regular array.
           __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
           __ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -1672,7 +1672,7 @@
         __ cmpl(value_cid_reg, Immediate(kNullCid));
         __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
         // Check for typed data array.
-        __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+        __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
         // Not a typed array or a regular array.
         __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
         __ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -2984,7 +2984,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -2997,18 +2997,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -3025,30 +3025,30 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
   XmmRegister value = locs()->in(0).fpu_reg();
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  Assembler::kFarJump,
                  out_reg);
   __ Bind(slow_path->exit_label());
-  __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+  __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t value_cid = value()->Type()->ToCid();
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+  const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
@@ -3061,20 +3061,20 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const XmmRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     const Register temp = locs()->temp(0).reg();
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ testl(value, Immediate(kSmiTagMask));
     __ j(ZERO, deopt);
-    __ CompareClassId(value, kUint32x4Cid, temp);
+    __ CompareClassId(value, kInt32x4Cid, temp);
     __ j(NOT_EQUAL, deopt);
   }
-  __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+  __ movups(result, FieldAddress(value, Int32x4::value_offset()));
 }
 
 
@@ -3169,7 +3169,7 @@
       __ cvtss2sd(value, value);
       break;
     case MethodRecognizer::kFloat32x4Shuffle:
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
       __ shufps(value, value, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3196,7 +3196,7 @@
   ASSERT(locs()->out().fpu_reg() == left);
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       __ shufps(left, right, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3549,7 +3549,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3560,12 +3560,12 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3579,7 +3579,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3627,7 +3627,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3638,7 +3638,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
   Label done;
@@ -3647,16 +3647,16 @@
   // Move value to stack.
   __ movups(Address(ESP, 0), value);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ movl(result, Address(ESP, 0));
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ movl(result, Address(ESP, 4));
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ movl(result, Address(ESP, 8));
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ movl(result, Address(ESP, 12));
       break;
     default: UNREACHABLE();
@@ -3672,7 +3672,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3686,7 +3686,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   XmmRegister trueValue = locs()->in(1).fpu_reg();
   XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3706,7 +3706,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3718,7 +3718,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   ASSERT(mask == locs()->out().fpu_reg());
@@ -3729,25 +3729,25 @@
   __ CompareObject(flag, Bool::True());
   __ j(NOT_EQUAL, &falsePath);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ movl(Address(ESP, 0), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 0), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ movl(Address(ESP, 4), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 4), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ movl(Address(ESP, 8), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 8), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ movl(Address(ESP, 12), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
@@ -3762,7 +3762,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3773,12 +3773,12 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3790,7 +3790,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister left = locs()->in(0).fpu_reg();
   XmmRegister right = locs()->in(1).fpu_reg();
   ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index ae873ee..77e0ffc 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -1039,8 +1039,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1090,8 +1090,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1113,7 +1113,7 @@
   locs->set_in(1, Location::WritableRegister());
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1173,7 +1173,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     DRegister result = locs()->out().fpu_reg();
     switch (class_id()) {
       case kTypedDataInt32ArrayCid:
@@ -1191,7 +1191,7 @@
         __ LoadDFromOffset(result, index.reg(),
             FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         UNIMPLEMENTED();
         break;
@@ -1275,8 +1275,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1318,7 +1318,7 @@
       locs->AddTemp(Location::RequiresFpuRegister());
       // Fall through.
     case kTypedDataFloat64ArrayCid:  // TODO(srdjan): Support Float64 constants.
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1458,7 +1458,7 @@
       __ StoreDToOffset(locs()->in(2).fpu_reg(), index.reg(),
           FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       UNIMPLEMENTED();
       break;
@@ -1586,7 +1586,7 @@
           __ BranchSignedLess(CMPRES1, 0, &skip_length_check);
           __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
           // Check for typed data array.
-          __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+          __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
                                  &no_fixed_length);
           __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
                               &check_array);
@@ -1662,7 +1662,7 @@
         Label check_array, length_set, no_fixed_length;
         __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
         // Check for typed data array.
-        __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+        __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
                                &no_fixed_length);
         __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
                             &check_array);
@@ -2910,24 +2910,24 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
@@ -3102,35 +3102,35 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
@@ -3146,46 +3146,46 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index fcf2db7..e2dfa5d 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1035,8 +1035,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1077,8 +1077,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1109,7 +1109,7 @@
   }
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1144,7 +1144,7 @@
 
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     if ((index_scale() == 1) && index.IsRegister()) {
       __ SmiUntag(index.reg());
     }
@@ -1158,7 +1158,7 @@
     } else if (class_id() == kTypedDataFloat64ArrayCid) {
       __ movsd(result, element_address);
     } else {
-      ASSERT((class_id() == kTypedDataUint32x4ArrayCid) ||
+      ASSERT((class_id() == kTypedDataInt32x4ArrayCid) ||
              (class_id() == kTypedDataFloat32x4ArrayCid));
       __ movups(result, element_address);
     }
@@ -1230,8 +1230,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1289,7 +1289,7 @@
       // TODO(srdjan): Support Float64 constants.
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1407,7 +1407,7 @@
     case kTypedDataFloat64ArrayCid:
       __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       __ movups(element_address, locs()->in(2).fpu_reg());
       break;
@@ -1542,7 +1542,7 @@
           __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
           // Check for typed data array.
           __ CompareImmediate(
-              value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid), PP);
+              value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid), PP);
           // Not a typed array or a regular array.
           __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
           __ CompareImmediate(
@@ -1622,7 +1622,7 @@
         __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
         // Check for typed data array.
         __ CompareImmediate(value_cid_reg,
-                            Immediate(kTypedDataUint32x4ArrayCid), PP);
+                            Immediate(kTypedDataInt32x4ArrayCid), PP);
         // Not a typed array or a regular array.
         __ j(GREATER, &no_fixed_length);
         __ CompareImmediate(
@@ -3006,7 +3006,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3019,18 +3019,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -3047,28 +3047,28 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
   XmmRegister value = locs()->in(0).fpu_reg();
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  Assembler::kFarJump,
                  out_reg,
                  PP);
   __ Bind(slow_path->exit_label());
-  __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+  __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3079,19 +3079,19 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const XmmRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ testq(value, Immediate(kSmiTagMask));
     __ j(ZERO, deopt);
-    __ CompareClassId(value, kUint32x4Cid);
+    __ CompareClassId(value, kInt32x4Cid);
     __ j(NOT_EQUAL, deopt);
   }
-  __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+  __ movups(result, FieldAddress(value, Int32x4::value_offset()));
 }
 
 
@@ -3185,7 +3185,7 @@
       __ cvtss2sd(value, value);
       break;
     case MethodRecognizer::kFloat32x4Shuffle:
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
       __ shufps(value, value, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3212,7 +3212,7 @@
   ASSERT(locs()->out().fpu_reg() == left);
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       __ shufps(left, right, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3565,7 +3565,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3576,12 +3576,12 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3596,7 +3596,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3650,7 +3650,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3661,7 +3661,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
   Label done;
@@ -3670,16 +3670,16 @@
   // Move value to stack.
   __ movups(Address(RSP, 0), value);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ movl(result, Address(RSP, 0));
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ movl(result, Address(RSP, 4));
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ movl(result, Address(RSP, 8));
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ movl(result, Address(RSP, 12));
       break;
     default: UNREACHABLE();
@@ -3695,7 +3695,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3709,7 +3709,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   XmmRegister trueValue = locs()->in(1).fpu_reg();
   XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3729,7 +3729,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3742,7 +3742,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   Register temp = locs()->temp(0).reg();
@@ -3754,7 +3754,7 @@
   __ CompareObject(flag, Bool::True(), PP);
   __ j(NOT_EQUAL, &falsePath);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 0), temp);
       __ jmp(&exitPath);
@@ -3762,7 +3762,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 0), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 4), temp);
       __ jmp(&exitPath);
@@ -3770,7 +3770,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 4), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 8), temp);
       __ jmp(&exitPath);
@@ -3778,7 +3778,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 8), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 12), temp);
       __ jmp(&exitPath);
@@ -3795,7 +3795,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3806,12 +3806,12 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3823,7 +3823,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister left = locs()->in(0).fpu_reg();
   XmmRegister right = locs()->in(1).fpu_reg();
   ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index cc80d32..bfba629 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -119,7 +119,7 @@
   V(_Float32Array, _new, TypedData_Float32Array_new, 1931183334)               \
   V(_Float64Array, _new, TypedData_Float64Array_new, 2119419798)               \
   V(_Float32x4Array, _new, TypedData_Float32x4Array_new, 435301615)            \
-  V(_Uint32x4Array, _new, TypedData_Uint32x4Array_new, 71945244)               \
+  V(_Int32x4Array, _new, TypedData_Int32x4Array_new, 1734048395)               \
   V(_Int8Array, ., TypedData_Int8Array_factory, 810750844)                     \
   V(_Uint8Array, ., TypedData_Uint8Array_factory, 1246070930)                  \
   V(_Uint8ClampedArray, ., TypedData_Uint8ClampedArray_factory, 1882603960)    \
@@ -132,7 +132,7 @@
   V(_Float32Array, ., TypedData_Float32Array_factory, 1986018007)              \
   V(_Float64Array, ., TypedData_Float64Array_factory, 1863852388)              \
   V(_Float32x4Array, ., TypedData_Float32x4Array_factory, 1144749257)          \
-  V(_Uint32x4Array, ., TypedData_Uint32x4Array_factory, 966782236)             \
+  V(_Int32x4Array, ., TypedData_Int32x4Array_factory, 1189356537)              \
 
 
 // TODO(srdjan): Implement _FixedSizeArrayIterator, get:current and
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 49eb208..b89db64 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -290,6 +290,7 @@
       stub_code_(NULL),
       debugger_(NULL),
       single_step_(false),
+      random_(),
       simulator_(NULL),
       long_jump_base_(NULL),
       timer_list_(),
@@ -535,10 +536,6 @@
     args.SetAt(0, Instance::Handle(func.ImplicitStaticClosure()));
     args.SetAt(1, is_spawn_uri ? Bool::True() : Bool::False());
 
-    // Dispatching through _startIsolate will open a control port as a live
-    // port. Account for this by increasing the number of open control ports.
-    isolate->message_handler()->increment_control_ports();
-
     const Library& lib = Library::Handle(Library::IsolateLibrary());
     const String& entry_name = String::Handle(String::New("_startIsolate"));
     const Function& entry_point =
@@ -730,6 +727,7 @@
 Dart_FileReadCallback Isolate::file_read_callback_ = NULL;
 Dart_FileWriteCallback Isolate::file_write_callback_ = NULL;
 Dart_FileCloseCallback Isolate::file_close_callback_ = NULL;
+Dart_EntropySource Isolate::entropy_source_callback_ = NULL;
 Dart_IsolateInterruptCallback Isolate::vmstats_callback_ = NULL;
 
 
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index bd3d0be..a01638d 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -13,6 +13,7 @@
 #include "vm/gc_callbacks.h"
 #include "vm/handles.h"
 #include "vm/megamorphic_cache_table.h"
+#include "vm/random.h"
 #include "vm/store_buffer.h"
 #include "vm/timer.h"
 
@@ -48,7 +49,7 @@
 class RawInteger;
 class RawError;
 class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
 class Simulator;
 class StackResource;
 class StackZone;
@@ -273,6 +274,8 @@
     return OFFSET_OF(Isolate, single_step_);
   }
 
+  Random* random() { return &random_; }
+
   Simulator* simulator() const { return simulator_; }
   void set_simulator(Simulator* value) { simulator_ = value; }
 
@@ -343,6 +346,13 @@
     return file_close_callback_;
   }
 
+  static void SetEntropySourceCallback(Dart_EntropySource entropy_source) {
+    entropy_source_callback_ = entropy_source;
+  }
+  static Dart_EntropySource entropy_source_callback() {
+    return entropy_source_callback_;
+  }
+
   void set_object_id_ring(ObjectIdRing* ring) {
     object_id_ring_ = ring;
   }
@@ -388,6 +398,7 @@
   template<class T> T* AllocateReusableHandle();
 
   static ThreadLocalKey isolate_key;
+
   StoreBuffer store_buffer_;
   ClassTable class_table_;
   MegamorphicCacheTable megamorphic_cache_table_;
@@ -406,6 +417,7 @@
   StubCode* stub_code_;
   Debugger* debugger_;
   bool single_step_;
+  Random random_;
   Simulator* simulator_;
   LongJump* long_jump_base_;
   TimerList timer_list_;
@@ -445,6 +457,7 @@
   static Dart_FileReadCallback file_read_callback_;
   static Dart_FileWriteCallback file_write_callback_;
   static Dart_FileCloseCallback file_close_callback_;
+  static Dart_EntropySource entropy_source_callback_;
   static Dart_IsolateInterruptCallback vmstats_callback_;
 
   friend class ReusableHandleScope;
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 8e34046..6d93f71 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -22,7 +22,7 @@
   kUnboxedDouble,
   kUnboxedMint,
   kUnboxedFloat32x4,
-  kUnboxedUint32x4,
+  kUnboxedInt32x4,
   kNumRepresentations
 };
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 0d4c8530..8ba182a 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -480,7 +480,7 @@
     cls.raw_ = class_class_;
     cls.set_handle_vtable(fake.vtable());
     cls.set_instance_size(Class::InstanceSize());
-    cls.set_next_field_offset(Class::InstanceSize());
+    cls.set_next_field_offset(Class::NextFieldOffset());
     cls.set_id(Class::kClassId);
     cls.set_state_bits(0);
     cls.set_is_finalized();
@@ -1148,13 +1148,13 @@
 
   CLASS_LIST_TYPED_DATA(REGISTER_EXT_TYPED_DATA_CLASS);
 #undef REGISTER_EXT_TYPED_DATA_CLASS
-  // Register Float32x4 and Uint32x4 in the object store.
+  // Register Float32x4 and Int32x4 in the object store.
   cls = Class::New<Float32x4>();
   object_store->set_float32x4_class(cls);
   RegisterPrivateClass(cls, Symbols::_Float32x4(), lib);
-  cls = Class::New<Uint32x4>();
-  object_store->set_uint32x4_class(cls);
-  RegisterPrivateClass(cls, Symbols::_Uint32x4(), lib);
+  cls = Class::New<Int32x4>();
+  object_store->set_int32x4_class(cls);
+  RegisterPrivateClass(cls, Symbols::_Int32x4(), lib);
 
   cls = Class::New<Instance>(kIllegalCid);
   RegisterClass(cls, Symbols::Float32x4(), lib);
@@ -1166,13 +1166,13 @@
   object_store->set_float32x4_type(type);
 
   cls = Class::New<Instance>(kIllegalCid);
-  RegisterClass(cls, Symbols::Uint32x4(), lib);
+  RegisterClass(cls, Symbols::Int32x4(), lib);
   cls.set_num_type_arguments(0);
   cls.set_num_own_type_arguments(0);
   cls.set_is_prefinalized();
   pending_classes.Add(cls);
   type = Type::NewNonParameterizedType(cls);
-  object_store->set_uint32x4_type(type);
+  object_store->set_int32x4_type(type);
 
   object_store->set_typed_data_classes(typed_data_classes);
 
@@ -1308,8 +1308,8 @@
   cls = Class::New<Float32x4>();
   object_store->set_float32x4_class(cls);
 
-  cls = Class::New<Uint32x4>();
-  object_store->set_uint32x4_class(cls);
+  cls = Class::New<Int32x4>();
+  object_store->set_int32x4_class(cls);
 
 #define REGISTER_TYPED_DATA_CLASS(clazz)                                       \
   cls = Class::NewTypedDataClass(kTypedData##clazz##Cid);
@@ -1534,8 +1534,8 @@
       return Symbols::List().raw();
     case kFloat32x4Cid:
       return Symbols::Float32x4().raw();
-    case kUint32x4Cid:
-      return Symbols::Uint32x4().raw();
+    case kInt32x4Cid:
+      return Symbols::Int32x4().raw();
     case kTypedDataInt8ArrayCid:
     case kExternalTypedDataInt8ArrayCid:
       return Symbols::Int8List().raw();
@@ -1662,7 +1662,7 @@
   FakeObject fake;
   result.set_handle_vtable(fake.vtable());
   result.set_instance_size(FakeObject::InstanceSize());
-  result.set_next_field_offset(FakeObject::InstanceSize());
+  result.set_next_field_offset(FakeObject::NextFieldOffset());
   ASSERT((FakeObject::kClassId != kInstanceCid));
   result.set_id(FakeObject::kClassId);
   result.set_state_bits(0);
@@ -2032,7 +2032,8 @@
   intptr_t offset = 0;
   intptr_t type_args_field_offset = kNoTypeArguments;
   if (super.IsNull()) {
-    offset = sizeof(RawObject);
+    offset = Instance::NextFieldOffset();
+    ASSERT(offset > 0);
   } else {
     ASSERT(super.is_finalized() || super.is_prefinalized());
     type_args_field_offset = super.type_arguments_field_offset();
@@ -2056,7 +2057,7 @@
     }
   }
   set_type_arguments_field_offset(type_args_field_offset);
-  ASSERT(offset != 0);
+  ASSERT(offset > 0);
   Field& field = Field::Handle();
   intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
@@ -2394,7 +2395,7 @@
   ASSERT(fake.IsInstance());
   result.set_handle_vtable(fake.vtable());
   result.set_instance_size(FakeInstance::InstanceSize());
-  result.set_next_field_offset(FakeInstance::InstanceSize());
+  result.set_next_field_offset(FakeInstance::NextFieldOffset());
   result.set_id(index);
   result.set_state_bits(0);
   result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
@@ -2426,7 +2427,7 @@
   const Class& result = Class::Handle(New(name, script, token_pos));
   // Instances of a signature class can only be closures.
   result.set_instance_size(Closure::InstanceSize());
-  result.set_next_field_offset(Closure::InstanceSize());
+  result.set_next_field_offset(Closure::NextFieldOffset());
   // Signature classes extend the _FunctionImpl class.
   result.set_super_type(Type::Handle(
       Isolate::Current()->object_store()->function_impl_type()));
@@ -2498,7 +2499,7 @@
     cls.set_super_type(Type::Handle(Type::ObjectType()));
     // Compute instance size. First word contains a pointer to a properly
     // sized typed array once the first native field has been set.
-    intptr_t instance_size = sizeof(RawObject) + kWordSize;
+    intptr_t instance_size = sizeof(RawInstance) + kWordSize;
     cls.set_instance_size(RoundedAllocationSize(instance_size));
     cls.set_next_field_offset(instance_size);
     cls.set_num_native_fields(field_count);
@@ -2526,7 +2527,7 @@
   }
   Class& result = Class::Handle(New<String>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(String::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2537,7 +2538,7 @@
   intptr_t instance_size = TypedData::InstanceSize();
   Class& result = Class::Handle(New<TypedData>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(TypedData::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2547,7 +2548,7 @@
   ASSERT(RawObject::IsTypedDataViewClassId(class_id));
   Class& result = Class::Handle(New<Instance>(class_id));
   result.set_instance_size(0);
-  result.set_next_field_offset(0);
+  result.set_next_field_offset(-kWordSize);
   return result.raw();
 }
 
@@ -2557,7 +2558,7 @@
   intptr_t instance_size = ExternalTypedData::InstanceSize();
   Class& result = Class::Handle(New<ExternalTypedData>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(ExternalTypedData::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2736,157 +2737,179 @@
 // type T by class 'other' parameterized with 'other_type_arguments'.
 // This class and class 'other' do not need to be finalized, however, they must
 // be resolved as well as their interfaces.
-bool Class::TypeTest(
-    TypeTestKind test_kind,
+bool Class::TypeTestNonRecursive(
+    const Class& cls,
+    Class::TypeTestKind test_kind,
     const AbstractTypeArguments& type_arguments,
     const Class& other,
     const AbstractTypeArguments& other_type_arguments,
-    Error* bound_error) const {
-  ASSERT(!IsVoidClass());
-  // Check for DynamicType.
-  // Each occurrence of DynamicType in type T is interpreted as the dynamic
-  // type, a supertype of all types.
-  if (other.IsDynamicClass()) {
-    return true;
-  }
-  // In the case of a subtype test, each occurrence of DynamicType in type S is
-  // interpreted as the bottom type, a subtype of all types.
-  // However, DynamicType is not more specific than any type.
-  if (IsDynamicClass()) {
-    return test_kind == kIsSubtypeOf;
-  }
-  // Check for NullType, which is only a subtype of ObjectType, of DynamicType,
-  // or of itself, and which is more specific than any type.
-  if (IsNullClass()) {
-    // We already checked for other.IsDynamicClass() above.
-    return (test_kind == kIsMoreSpecificThan) ||
-        other.IsObjectClass() || other.IsNullClass();
-  }
-  // Check for ObjectType. Any type that is not NullType or DynamicType (already
-  // checked above), is more specific than ObjectType.
-  if (other.IsObjectClass()) {
-    return true;
-  }
-  // Check for reflexivity.
-  if (raw() == other.raw()) {
-    const intptr_t len = NumTypeArguments();
-    if (len == 0) {
+    Error* bound_error) {
+  // Use the thsi object as if it was the receiver of this method, but instead
+  // of recursing reset it to the super class and loop.
+  Class& thsi = Class::Handle(cls.raw());
+  while (true) {
+    ASSERT(!thsi.IsVoidClass());
+    // Check for DynamicType.
+    // Each occurrence of DynamicType in type T is interpreted as the dynamic
+    // type, a supertype of all types.
+    if (other.IsDynamicClass()) {
       return true;
     }
-    // Since we do not truncate the type argument vector of a subclass (see
-    // below), we only check a prefix of the proper length.
-    // Check for covariance.
-    if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+    // In the case of a subtype test, each occurrence of DynamicType in type S
+    // is interpreted as the bottom type, a subtype of all types.
+    // However, DynamicType is not more specific than any type.
+    if (thsi.IsDynamicClass()) {
+      return test_kind == Class::kIsSubtypeOf;
+    }
+    // Check for NullType, which is only a subtype of ObjectType, of
+    // DynamicType, or of itself, and which is more specific than any type.
+    if (thsi.IsNullClass()) {
+      // We already checked for other.IsDynamicClass() above.
+      return (test_kind == Class::kIsMoreSpecificThan) ||
+      other.IsObjectClass() || other.IsNullClass();
+    }
+    // Check for ObjectType. Any type that is not NullType or DynamicType
+    // (already checked above), is more specific than ObjectType.
+    if (other.IsObjectClass()) {
       return true;
     }
-    if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
-      // Other type can't be more specific than this one because for that
-      // it would have to have all dynamic type arguments which is checked
-      // above.
-      return test_kind == kIsSubtypeOf;
-    }
-    return type_arguments.TypeTest(test_kind,
-                                   other_type_arguments,
-                                   len,
-                                   bound_error);
-  }
-  const bool other_is_function_class = other.IsFunctionClass();
-  if (other.IsSignatureClass() || other_is_function_class) {
-    const Function& other_fun = Function::Handle(other.signature_function());
-    if (IsSignatureClass()) {
-      if (other_is_function_class) {
+    // Check for reflexivity.
+    if (thsi.raw() == other.raw()) {
+      const intptr_t len = thsi.NumTypeArguments();
+      if (len == 0) {
         return true;
       }
-      // Check for two function types.
-      const Function& fun = Function::Handle(signature_function());
-      return fun.TypeTest(test_kind,
-                          type_arguments,
-                          other_fun,
-                          other_type_arguments,
-                          bound_error);
-    }
-    // Check if type S has a call() method of function type T.
-    Function& function =
-        Function::Handle(LookupDynamicFunction(Symbols::Call()));
-    if (function.IsNull()) {
-      // Walk up the super_class chain.
-      Class& cls = Class::Handle(SuperClass());
-      while (!cls.IsNull() && function.IsNull()) {
-        function = cls.LookupDynamicFunction(Symbols::Call());
-        cls = cls.SuperClass();
+      // Since we do not truncate the type argument vector of a subclass (see
+      // below), we only check a prefix of the proper length.
+      // Check for covariance.
+      if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+        return true;
       }
+      if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
+        // Other type can't be more specific than this one because for that
+        // it would have to have all dynamic type arguments which is checked
+        // above.
+        return test_kind == Class::kIsSubtypeOf;
+      }
+      return type_arguments.TypeTest(test_kind,
+                                     other_type_arguments,
+                                     len,
+                                     bound_error);
     }
-    if (!function.IsNull()) {
-      if (other_is_function_class ||
-          function.TypeTest(test_kind,
+    const bool other_is_function_class = other.IsFunctionClass();
+    if (other.IsSignatureClass() || other_is_function_class) {
+      const Function& other_fun = Function::Handle(other.signature_function());
+      if (thsi.IsSignatureClass()) {
+        if (other_is_function_class) {
+          return true;
+        }
+        // Check for two function types.
+        const Function& fun = Function::Handle(thsi.signature_function());
+        return fun.TypeTest(test_kind,
                             type_arguments,
                             other_fun,
                             other_type_arguments,
-                            bound_error)) {
-        return true;
+                            bound_error);
+      }
+      // Check if type S has a call() method of function type T.
+      Function& function =
+      Function::Handle(thsi.LookupDynamicFunction(Symbols::Call()));
+      if (function.IsNull()) {
+        // Walk up the super_class chain.
+        Class& cls = Class::Handle(thsi.SuperClass());
+        while (!cls.IsNull() && function.IsNull()) {
+          function = cls.LookupDynamicFunction(Symbols::Call());
+          cls = cls.SuperClass();
+        }
+      }
+      if (!function.IsNull()) {
+        if (other_is_function_class ||
+            function.TypeTest(test_kind,
+                              type_arguments,
+                              other_fun,
+                              other_type_arguments,
+                              bound_error)) {
+              return true;
+            }
       }
     }
-  }
-  // Check for 'direct super type' specified in the implements clause
-  // and check for transitivity at the same time.
-  Array& interfaces = Array::Handle(this->interfaces());
-  AbstractType& interface = AbstractType::Handle();
-  Class& interface_class = Class::Handle();
-  AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
-  Error& error = Error::Handle();
-  for (intptr_t i = 0; i < interfaces.Length(); i++) {
-    interface ^= interfaces.At(i);
-    if (!interface.IsFinalized()) {
-      // We may be checking bounds at finalization time. Skipping this
-      // unfinalized interface will postpone bound checking to run time.
-      continue;
-    }
-    error = Error::null();
-    if (interface.IsMalboundedWithError(&error)) {
-      // Return the first bound error to the caller if it requests it.
-      if ((bound_error != NULL) && bound_error->IsNull()) {
-        ASSERT(!error.IsNull());
-        *bound_error = error.raw();
+    // Check for 'direct super type' specified in the implements clause
+    // and check for transitivity at the same time.
+    Array& interfaces = Array::Handle(thsi.interfaces());
+    AbstractType& interface = AbstractType::Handle();
+    Class& interface_class = Class::Handle();
+    AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
+    Error& error = Error::Handle();
+    for (intptr_t i = 0; i < interfaces.Length(); i++) {
+      interface ^= interfaces.At(i);
+      if (!interface.IsFinalized()) {
+        // We may be checking bounds at finalization time. Skipping this
+        // unfinalized interface will postpone bound checking to run time.
+        continue;
       }
-      continue;  // Another interface may work better.
-    }
-    interface_class = interface.type_class();
-    interface_args = interface.arguments();
-    if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
-      // This type class implements an interface that is parameterized with
-      // generic type(s), e.g. it implements List<T>.
-      // The uninstantiated type T must be instantiated using the type
-      // parameters of this type before performing the type test.
-      // The type arguments of this type that are referred to by the type
-      // parameters of the interface are at the end of the type vector,
-      // after the type arguments of the super type of this type.
-      // The index of the type parameters is adjusted upon finalization.
       error = Error::null();
-      interface_args = interface_args.InstantiateFrom(type_arguments, &error);
-      if (!error.IsNull()) {
+      if (interface.IsMalboundedWithError(&error)) {
         // Return the first bound error to the caller if it requests it.
         if ((bound_error != NULL) && bound_error->IsNull()) {
+          ASSERT(!error.IsNull());
           *bound_error = error.raw();
         }
         continue;  // Another interface may work better.
       }
+      interface_class = interface.type_class();
+      interface_args = interface.arguments();
+      if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
+        // This type class implements an interface that is parameterized with
+        // generic type(s), e.g. it implements List<T>.
+        // The uninstantiated type T must be instantiated using the type
+        // parameters of this type before performing the type test.
+        // The type arguments of this type that are referred to by the type
+        // parameters of the interface are at the end of the type vector,
+        // after the type arguments of the super type of this type.
+        // The index of the type parameters is adjusted upon finalization.
+        error = Error::null();
+        interface_args = interface_args.InstantiateFrom(type_arguments, &error);
+        if (!error.IsNull()) {
+          // Return the first bound error to the caller if it requests it.
+          if ((bound_error != NULL) && bound_error->IsNull()) {
+            *bound_error = error.raw();
+          }
+          continue;  // Another interface may work better.
+        }
+      }
+      if (interface_class.TypeTest(test_kind,
+                                   interface_args,
+                                   other,
+                                   other_type_arguments,
+                                   bound_error)) {
+        return true;
+      }
     }
-    if (interface_class.TypeTest(test_kind,
-                                 interface_args,
-                                 other,
-                                 other_type_arguments,
-                                 bound_error)) {
-      return true;
+    // "Recurse" up the class hierarchy until we have reached the top.
+    thsi = thsi.SuperClass();
+    if (thsi.IsNull()) {
+      return false;
     }
   }
-  const Class& super_class = Class::Handle(SuperClass());
-  if (super_class.IsNull()) {
-    return false;
-  }
-  // Instead of truncating the type argument vector to the length of the super
-  // type argument vector, we make sure that the code works with a vector that
-  // is longer than necessary.
-  return super_class.TypeTest(test_kind,
+  UNREACHABLE();
+  return false;
+}
+
+
+// If test_kind == kIsSubtypeOf, checks if type S is a subtype of type T.
+// If test_kind == kIsMoreSpecificThan, checks if S is more specific than T.
+// Type S is specified by this class parameterized with 'type_arguments', and
+// type T by class 'other' parameterized with 'other_type_arguments'.
+// This class and class 'other' do not need to be finalized, however, they must
+// be resolved as well as their interfaces.
+bool Class::TypeTest(
+                     TypeTestKind test_kind,
+                     const AbstractTypeArguments& type_arguments,
+                     const Class& other,
+                     const AbstractTypeArguments& other_type_arguments,
+                     Error* bound_error) const {
+  return TypeTestNonRecursive(*this,
+                              test_kind,
                               type_arguments,
                               other,
                               other_type_arguments,
@@ -4227,6 +4250,21 @@
 }
 
 
+RawField* Function::saved_static_field() const {
+  ASSERT(kind() == RawFunction::kStaticInitializer);
+  const Object& obj = Object::Handle(raw_ptr()->data_);
+  ASSERT(obj.IsField());
+  return Field::Cast(obj).raw();
+}
+
+
+void Function::set_saved_static_field(const Field& value) const {
+  ASSERT(kind() == RawFunction::kStaticInitializer);
+  ASSERT(raw_ptr()->data_ == Object::null());
+  set_data(value);
+}
+
+
 RawFunction* Function::parent_function() const {
   if (IsClosureFunction()) {
     const Object& obj = Object::Handle(raw_ptr()->data_);
@@ -5454,10 +5492,9 @@
 }
 
 
-RawFunction* Function::NewStaticInitializer(const String& field_name,
-                                            const AbstractType& result_type,
-                                            const Class& cls,
-                                            intptr_t initializer_pos) {
+RawFunction* Function::NewStaticInitializer(const Field& field) {
+  ASSERT(field.is_static());
+  const String& field_name = String::Handle(field.name());
   const String& init_name =
       String::Handle(Symbols::New(String::Handle(
           String::Concat(Symbols::InitPrefix(), field_name))));
@@ -5468,9 +5505,9 @@
                     false,  // !const
                     false,  // !abstract
                     false,  // !external
-                    cls,
-                    initializer_pos));
-  init_function.set_result_type(result_type);
+                    Class::Handle(field.owner()),
+                    field.token_pos()));
+  init_function.set_result_type(AbstractType::Handle(field.type()));
   // Static initializer functions are generated by the VM and are therfore
   // hidden from the user. Since they are only executed once, we avoid
   // optimizing and inlining them. After the field is initialized, the
@@ -5479,6 +5516,7 @@
   init_function.set_is_visible(false);
   init_function.set_is_optimizable(false);
   init_function.set_is_inlinable(false);
+  init_function.set_saved_static_field(field);
   return init_function.raw();
 }
 
@@ -10814,7 +10852,7 @@
     ASSERT(instance_size != 0);
     uword this_addr = reinterpret_cast<uword>(this->raw_ptr());
     uword other_addr = reinterpret_cast<uword>(other.raw_ptr());
-    for (intptr_t offset = sizeof(RawObject);
+    for (intptr_t offset = Instance::NextFieldOffset();
          offset < instance_size;
          offset += kWordSize) {
       if ((*reinterpret_cast<RawObject**>(this_addr + offset)) !=
@@ -11394,9 +11432,9 @@
 }
 
 
-bool AbstractType::IsUint32x4Type() const {
+bool AbstractType::IsInt32x4Type() const {
   return HasResolvedTypeClass() &&
-      (type_class() == Type::Handle(Type::Uint32x4()).type_class());
+      (type_class() == Type::Handle(Type::Int32x4()).type_class());
 }
 
 
@@ -11423,8 +11461,13 @@
                             Error* bound_error) const {
   ASSERT(IsResolved());
   ASSERT(other.IsResolved());
-  ASSERT(!IsMalformed());
-  ASSERT(!other.IsMalformed());
+  if (IsMalformed() || other.IsMalformed()) {
+    // Malformed types involved in subtype tests should be handled specially
+    // by the caller. Malformed types should only be encountered here in a
+    // more specific than test.
+    ASSERT(test_kind == kIsMoreSpecificThan);
+    return false;
+  }
   // In case the type checked in a type test is malbounded, the code generator
   // may compile a throw instead of a run time call performing the type check.
   // However, in checked mode, a function type may include malbounded result
@@ -11559,8 +11602,8 @@
 }
 
 
-RawType* Type::Uint32x4() {
-  return Isolate::Current()->object_store()->uint32x4_type();
+RawType* Type::Int32x4() {
+  return Isolate::Current()->object_store()->int32x4_type();
 }
 
 
@@ -15037,14 +15080,14 @@
 }
 
 
-RawUint32x4* Uint32x4::New(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3,
-                           Heap::Space space) {
-  ASSERT(Isolate::Current()->object_store()->uint32x4_class() !=
+RawInt32x4* Int32x4::New(int32_t v0, int32_t v1, int32_t v2, int32_t v3,
+                         Heap::Space space) {
+  ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
          Class::null());
-  Uint32x4& result = Uint32x4::Handle();
+  Int32x4& result = Int32x4::Handle();
   {
-    RawObject* raw = Object::Allocate(Uint32x4::kClassId,
-                                      Uint32x4::InstanceSize(),
+    RawObject* raw = Object::Allocate(Int32x4::kClassId,
+                                      Int32x4::InstanceSize(),
                                       space);
     NoGCScope no_gc;
     result ^= raw;
@@ -15057,13 +15100,13 @@
 }
 
 
-RawUint32x4* Uint32x4::New(simd128_value_t value, Heap::Space space) {
-  ASSERT(Isolate::Current()->object_store()->float32x4_class() !=
+RawInt32x4* Int32x4::New(simd128_value_t value, Heap::Space space) {
+  ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
          Class::null());
-  Uint32x4& result = Uint32x4::Handle();
+  Int32x4& result = Int32x4::Handle();
   {
-    RawObject* raw = Object::Allocate(Uint32x4::kClassId,
-                                      Uint32x4::InstanceSize(),
+    RawObject* raw = Object::Allocate(Int32x4::kClassId,
+                                      Int32x4::InstanceSize(),
                                       space);
     NoGCScope no_gc;
     result ^= raw;
@@ -15073,62 +15116,62 @@
 }
 
 
-void Uint32x4::set_x(uint32_t value) const {
+void Int32x4::set_x(int32_t value) const {
   raw_ptr()->value_[0] = value;
 }
 
 
-void Uint32x4::set_y(uint32_t value) const {
+void Int32x4::set_y(int32_t value) const {
   raw_ptr()->value_[1] = value;
 }
 
 
-void Uint32x4::set_z(uint32_t value) const {
+void Int32x4::set_z(int32_t value) const {
   raw_ptr()->value_[2] = value;
 }
 
 
-void Uint32x4::set_w(uint32_t value) const {
+void Int32x4::set_w(int32_t value) const {
   raw_ptr()->value_[3] = value;
 }
 
 
-uint32_t Uint32x4::x() const {
+int32_t Int32x4::x() const {
   return raw_ptr()->value_[0];
 }
 
 
-uint32_t Uint32x4::y() const {
+int32_t Int32x4::y() const {
   return raw_ptr()->value_[1];
 }
 
 
-uint32_t Uint32x4::z() const {
+int32_t Int32x4::z() const {
   return raw_ptr()->value_[2];
 }
 
 
-uint32_t Uint32x4::w() const {
+int32_t Int32x4::w() const {
   return raw_ptr()->value_[3];
 }
 
 
-simd128_value_t Uint32x4::value() const {
+simd128_value_t Int32x4::value() const {
   return simd128_value_t().readFrom(&raw_ptr()->value_[0]);
 }
 
 
-void Uint32x4::set_value(simd128_value_t value) const {
+void Int32x4::set_value(simd128_value_t value) const {
   value.writeTo(&raw_ptr()->value_[0]);
 }
 
 
-const char* Uint32x4::ToCString() const {
+const char* Int32x4::ToCString() const {
   const char* kFormat = "[%08x, %08x, %08x, %08x]";
-  uint32_t _x = x();
-  uint32_t _y = y();
-  uint32_t _z = z();
-  uint32_t _w = w();
+  int32_t _x = x();
+  int32_t _y = y();
+  int32_t _z = z();
+  int32_t _w = w();
   // Calculate the size of the string.
   intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1;
   char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
@@ -15137,7 +15180,7 @@
 }
 
 
-void Uint32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
+void Int32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
 }
 
@@ -15155,7 +15198,7 @@
   4,   // kTypedDataFloat32ArrayCid.
   8,   // kTypedDataFloat64ArrayCid.
   16,  // kTypedDataFloat32x4ArrayCid.
-  16,  // kTypedDataUint32x4ArrayCid.
+  16,  // kTypedDataInt32x4ArrayCid.
 };
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 75ba0b8..2b48af2 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -201,6 +201,9 @@
     ASSERT(raw() != null());                                                   \
     return raw()->ptr();                                                       \
   }                                                                            \
+  static intptr_t NextFieldOffset() {                                          \
+    return -kWordSize;                                                         \
+  }                                                                            \
   SNAPSHOT_READER_SUPPORT(object)                                              \
   friend class Isolate;                                                        \
   friend class StackFrame;                                                     \
@@ -528,6 +531,11 @@
   RawObject* raw_;  // The raw object reference.
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static void InitializeObject(uword address, intptr_t id, intptr_t size);
 
   static void RegisterClass(const Class& cls,
@@ -655,7 +663,8 @@
     set_next_field_offset_in_words(value_in_bytes / kWordSize);
   }
   void set_next_field_offset_in_words(intptr_t value) const {
-    ASSERT((Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
+    ASSERT((value == -1) ||
+           (Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
             (value == raw_ptr()->instance_size_in_words_)) ||
            (!Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
             ((value + 1) == raw_ptr()->instance_size_in_words_)));
@@ -1083,6 +1092,7 @@
   RawFunction* CreateInvocationDispatcher(const String& target_name,
                                           const Array& args_desc,
                                           RawFunction::Kind kind) const;
+
   void CalculateFieldOffsets() const;
 
   // Initial value for the cached number of type arguments.
@@ -1121,6 +1131,14 @@
                 const AbstractTypeArguments& other_type_arguments,
                 Error* bound_error) const;
 
+  static bool TypeTestNonRecursive(
+      const Class& cls,
+      TypeTestKind test_kind,
+      const AbstractTypeArguments& type_arguments,
+      const Class& other,
+      const AbstractTypeArguments& other_type_arguments,
+      Error* bound_error);
+
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Class, Object);
   friend class AbstractType;
   friend class Instance;
@@ -1144,6 +1162,7 @@
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(RawUnresolvedClass));
   }
+
   static RawUnresolvedClass* New(const LibraryPrefix& library_prefix,
                                  const String& ident,
                                  intptr_t token_pos);
@@ -1384,6 +1403,7 @@
       const AbstractTypeArguments& value) const;
   void set_instantiator_type_arguments(
       const AbstractTypeArguments& value) const;
+
   static RawInstantiatedTypeArguments* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(InstantiatedTypeArguments,
@@ -1408,6 +1428,7 @@
  private:
   void set_patched_class(const Class& value) const;
   void set_source_class(const Class& value) const;
+
   static RawPatchClass* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(PatchClass, Object);
@@ -1527,6 +1548,9 @@
   void set_saved_args_desc(const Array& array) const;
   RawArray* saved_args_desc() const;
 
+  void set_saved_static_field(const Field& array) const;
+  RawField* saved_static_field() const;
+
   bool IsMethodExtractor() const {
     return kind() == RawFunction::kMethodExtractor;
   }
@@ -1856,7 +1880,6 @@
     return kind() == RawFunction::kSignatureFunction;
   }
 
-
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(RawFunction));
   }
@@ -1880,10 +1903,7 @@
 
   // Creates a new static initializer function which is invoked in the implicit
   // static getter function.
-  static RawFunction* NewStaticInitializer(const String& field_name,
-                                           const AbstractType& result_type,
-                                           const Class& cls,
-                                           intptr_t token_pos);
+  static RawFunction* NewStaticInitializer(const Field& field);
 
   // Allocate new function object, clone values from this function. The
   // owner of the clone is new_owner.
@@ -1946,6 +1966,7 @@
   void set_num_optional_parameters(intptr_t value) const;  // Encoded value.
   void set_kind_tag(intptr_t value) const;
   void set_data(const Object& value) const;
+
   static RawFunction* New();
 
   void BuildSignatureParameters(bool instantiate,
@@ -2212,6 +2233,7 @@
   void set_kind_bits(intptr_t value) const {
     raw_ptr()->kind_bits_ = static_cast<uint8_t>(value);
   }
+
   static RawField* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object);
@@ -2378,6 +2400,7 @@
   void set_source(const String& value) const;
   void set_kind(RawScript::Kind value) const;
   void set_tokens(const TokenStream& value) const;
+
   static RawScript* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Script, Object);
@@ -2592,6 +2615,7 @@
  private:
   static const int kInitialImportsCapacity = 4;
   static const int kImportsCapacityIncrement = 8;
+
   static RawLibrary* New();
 
   void set_num_imports(intptr_t value) const {
@@ -2654,6 +2678,7 @@
   void set_name(const String& value) const;
   void set_imports(const Array& value) const;
   void set_num_imports(intptr_t value) const;
+
   static RawLibraryPrefix* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LibraryPrefix, Object);
@@ -2679,6 +2704,7 @@
   static RawNamespace* New(const Library& library,
                            const Array& show_names,
                            const Array& hide_names);
+
  private:
   static RawNamespace* New();
 
@@ -2988,6 +3014,7 @@
   static const intptr_t kMaxHandlers = 1024 * 1024;
 
   void set_handled_types_data(const Array& value) const;
+
   FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object);
   friend class Class;
 };
@@ -3745,6 +3772,7 @@
 
  private:
   void set_message(const String& message) const;
+
   static RawApiError* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(ApiError, Error);
@@ -3770,6 +3798,7 @@
 
  private:
   void set_message(const String& message) const;
+
   static RawLanguageError* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LanguageError, Error);
@@ -3913,10 +3942,16 @@
   }
   bool IsValidFieldOffset(int offset) const;
 
+  static intptr_t NextFieldOffset() {
+    return sizeof(RawInstance);
+  }
+
   // TODO(iposva): Determine if this gets in the way of Smi.
   HEAP_OBJECT_IMPLEMENTATION(Instance, Object);
   friend class Class;
   friend class Closure;
+  friend class SnapshotWriter;
+  friend class StubCode;
   friend class TypedDataView;
 };
 
@@ -4007,8 +4042,8 @@
   // Check if this type represents the 'Float32x4' type.
   bool IsFloat32x4Type() const;
 
-  // Check if this type represents the 'Uint32x4' type.
-  bool IsUint32x4Type() const;
+  // Check if this type represents the 'Int32x4' type.
+  bool IsInt32x4Type() const;
 
   // Check if this type represents the 'num' type.
   bool IsNumberType() const;
@@ -4129,8 +4164,8 @@
   // The 'Float32x4' type.
   static RawType* Float32x4();
 
-  // The 'Uint32x4' type.
-  static RawType* Uint32x4();
+  // The 'Int32x4' type.
+  static RawType* Int32x4();
 
   // The 'num' type.
   static RawType* Number();
@@ -4225,6 +4260,7 @@
   void set_name(const String& value) const;
   void set_token_pos(intptr_t token_pos) const;
   void set_type_state(int8_t state) const;
+
   static RawTypeParameter* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeParameter, AbstractType);
@@ -4478,11 +4514,17 @@
   }
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static intptr_t ValueFromRaw(uword raw_value) {
     intptr_t value = raw_value;
     ASSERT((value & kSmiTagMask) == kSmiTag);
     return (value >> kSmiTagShift);
   }
+
   static cpp_vtable handle_vtable_;
 
   Smi() : Integer() {}
@@ -5201,6 +5243,11 @@
                                             intptr_t tags,
                                             Snapshot::Kind kind);
 
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   friend class Class;
   friend class String;
   friend class SnapshotReader;
@@ -5267,6 +5314,11 @@
                                             intptr_t tags,
                                             Snapshot::Kind kind);
 
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   friend class Class;
   friend class String;
   friend class SnapshotReader;
@@ -5436,6 +5488,11 @@
   }
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static RawImmutableArray* raw(const Array& array) {
     return reinterpret_cast<RawImmutableArray*>(array.raw());
   }
@@ -5594,36 +5651,36 @@
 };
 
 
-class Uint32x4 : public Instance {
+class Int32x4 : public Instance {
  public:
-  static RawUint32x4* New(uint32_t value0, uint32_t value1, uint32_t value2,
-                          uint32_t value3, Heap::Space space = Heap::kNew);
-  static RawUint32x4* New(simd128_value_t value,
+  static RawInt32x4* New(int32_t value0, int32_t value1, int32_t value2,
+                          int32_t value3, Heap::Space space = Heap::kNew);
+  static RawInt32x4* New(simd128_value_t value,
                           Heap::Space space = Heap::kNew);
 
-  uint32_t x() const;
-  uint32_t y() const;
-  uint32_t z() const;
-  uint32_t w() const;
+  int32_t x() const;
+  int32_t y() const;
+  int32_t z() const;
+  int32_t w() const;
 
-  void set_x(uint32_t x) const;
-  void set_y(uint32_t y) const;
-  void set_z(uint32_t z) const;
-  void set_w(uint32_t w) const;
+  void set_x(int32_t x) const;
+  void set_y(int32_t y) const;
+  void set_z(int32_t z) const;
+  void set_w(int32_t w) const;
 
   simd128_value_t value() const;
   void set_value(simd128_value_t value) const;
 
   static intptr_t InstanceSize() {
-    return RoundedAllocationSize(sizeof(RawUint32x4));
+    return RoundedAllocationSize(sizeof(RawInt32x4));
   }
 
   static intptr_t value_offset() {
-    return OFFSET_OF(RawUint32x4, value_);
+    return OFFSET_OF(RawInt32x4, value_);
   }
 
  private:
-  FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint32x4, Instance);
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(Int32x4, Instance);
   friend class Class;
 };
 
@@ -5675,7 +5732,7 @@
   TYPED_GETTER_SETTER(Float32, float)
   TYPED_GETTER_SETTER(Float64, double)
   TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
-  TYPED_GETTER_SETTER(Uint32x4, simd128_value_t)
+  TYPED_GETTER_SETTER(Int32x4, simd128_value_t)
 
 #undef TYPED_GETTER_SETTER
 
@@ -5809,7 +5866,7 @@
   TYPED_GETTER_SETTER(Float32, float)
   TYPED_GETTER_SETTER(Float64, double)
   TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
-  TYPED_GETTER_SETTER(Uint32x4, simd128_value_t);
+  TYPED_GETTER_SETTER(Int32x4, simd128_value_t);
 
 #undef TYPED_GETTER_SETTER
 
@@ -5907,7 +5964,7 @@
   }
 
   static intptr_t NumberOfFields() {
-    return (kLengthOffset - kTypeArguments);
+    return kLengthOffset;
   }
 
   static intptr_t data_offset() {
@@ -5931,10 +5988,9 @@
 
  private:
   enum {
-    kTypeArguments = 1,
-    kDataOffset = 2,
-    kOffsetInBytesOffset = 3,
-    kLengthOffset = 4,
+    kDataOffset = 1,
+    kOffsetInBytesOffset = 2,
+    kLengthOffset = 3,
   };
 };
 
@@ -6007,6 +6063,10 @@
                           const Context& value) {
     closure.StorePointer(ContextAddr(closure), value.raw());
   }
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
 
   friend class Class;
 };
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index a5dddc1..4ec3410 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -41,7 +41,7 @@
     immutable_array_class_(Class::null()),
     growable_object_array_class_(Class::null()),
     float32x4_class_(Class::null()),
-    uint32x4_class_(Class::null()),
+    int32x4_class_(Class::null()),
     typed_data_classes_(Array::null()),
     error_class_(Class::null()),
     stacktrace_class_(Class::null()),
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 2bc8cc5..1f51483 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -195,15 +195,15 @@
   RawType* float32x4_type() const { return float32x4_type_; }
   void set_float32x4_type(const Type& value) { float32x4_type_ = value.raw(); }
 
-  RawClass* uint32x4_class() const {
-    return uint32x4_class_;
+  RawClass* int32x4_class() const {
+    return int32x4_class_;
   }
-  void set_uint32x4_class(const Class& value) {
-    uint32x4_class_ = value.raw();
+  void set_int32x4_class(const Class& value) {
+    int32x4_class_ = value.raw();
   }
 
-  RawType* uint32x4_type() const { return uint32x4_type_; }
-  void set_uint32x4_type(const Type& value) { uint32x4_type_ = value.raw(); }
+  RawType* int32x4_type() const { return int32x4_type_; }
+  void set_int32x4_type(const Type& value) { int32x4_type_ = value.raw(); }
 
   RawArray* typed_data_classes() const {
     return typed_data_classes_;
@@ -441,7 +441,7 @@
   RawClass* double_class_;
   RawType* double_type_;
   RawType* float32x4_type_;
-  RawType* uint32x4_type_;
+  RawType* int32x4_type_;
   RawType* string_type_;
   RawClass* one_byte_string_class_;
   RawClass* two_byte_string_class_;
@@ -454,7 +454,7 @@
   RawClass* immutable_array_class_;
   RawClass* growable_object_array_class_;
   RawClass* float32x4_class_;
-  RawClass* uint32x4_class_;
+  RawClass* int32x4_class_;
   RawArray* typed_data_classes_;
   RawClass* error_class_;
   RawClass* stacktrace_class_;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index b34b06c..0fff78e 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1015,23 +1015,17 @@
             ident_pos,
             field,
             new LiteralNode(ident_pos, Object::transition_sentinel())));
-    // TODO(hausner): If evaluation of the field value throws an exception,
-    // we leave the field value as 'transition_sentinel', which is wrong.
-    // A second reference to the field later throws a circular dependency
-    // exception. The field should instead be set to null after an exception.
-    const String& init_name =
-        String::Handle(Symbols::New(String::Handle(
-        String::Concat(Symbols::InitPrefix(), String::Handle(field.name())))));
+    const String& init_name = String::Handle(
+        Symbols::New(String::Handle(String::Concat(
+            Symbols::InitPrefix(), String::Handle(field.name())))));
     const Function& init_function = Function::ZoneHandle(
         field_class.LookupStaticFunction(init_name));
     ASSERT(!init_function.IsNull());
     ArgumentListNode* arguments = new ArgumentListNode(expr_pos);
     StaticCallNode* init_call =
         new StaticCallNode(expr_pos, init_function, arguments);
+    initialize_field->Add(init_call);
 
-    initialize_field->Add(new StoreStaticFieldNode(ident_pos,
-                                                   field,
-                                                   init_call));
     AstNode* uninitialized_check =
         new IfNode(ident_pos, compare_uninitialized, initialize_field, NULL);
     current_block_->statements->Add(uninitialized_check);
@@ -1057,10 +1051,96 @@
   OpenFunctionBlock(func);
   AddFormalParamsToScope(&params, current_block_->scope);
 
-  intptr_t expr_pos = func.token_pos();
+  // Move forward to the start of the initializer expression.
+  ExpectIdentifier("identifier expected");
+  ExpectToken(Token::kASSIGN);
+  intptr_t token_pos = TokenPos();
+
+  // Synthesize a try-catch block to wrap the initializer expression.
+  LocalVariable* context_var =
+      current_block_->scope->LocalLookupVariable(Symbols::SavedTryContextVar());
+  if (context_var == NULL) {
+    context_var = new LocalVariable(token_pos,
+                                    Symbols::SavedTryContextVar(),
+                                    Type::ZoneHandle(Type::DynamicType()));
+    current_block_->scope->AddVariable(context_var);
+  }
+  LocalVariable* catch_excp_var =
+      current_block_->scope->LocalLookupVariable(Symbols::ExceptionVar());
+  if (catch_excp_var == NULL) {
+    catch_excp_var = new LocalVariable(token_pos,
+                                       Symbols::ExceptionVar(),
+                                       Type::ZoneHandle(Type::DynamicType()));
+    current_block_->scope->AddVariable(catch_excp_var);
+  }
+  LocalVariable* catch_trace_var =
+      current_block_->scope->LocalLookupVariable(Symbols::StacktraceVar());
+  if (catch_trace_var == NULL) {
+    catch_trace_var = new LocalVariable(token_pos,
+                                        Symbols::StacktraceVar(),
+                                        Type::ZoneHandle(Type::DynamicType()));
+    current_block_->scope->AddVariable(catch_trace_var);
+  }
+
+  OpenBlock();  // Start try block.
   AstNode* expr = ParseExpr(kAllowConst, kConsumeCascades);
-  ReturnNode* return_node = new ReturnNode(expr_pos, expr);
-  current_block_->statements->Add(return_node);
+  const Field& field = Field::ZoneHandle(func.saved_static_field());
+  ASSERT(!field.is_const());
+  StoreStaticFieldNode* store = new StoreStaticFieldNode(field.token_pos(),
+                                                         field,
+                                                         expr);
+  current_block_->statements->Add(store);
+  SequenceNode* try_block = CloseBlock();  // End try block.
+
+  OpenBlock();  // Start catch handler list.
+  SourceLabel* end_catch_label =
+      SourceLabel::New(token_pos, NULL, SourceLabel::kCatch);
+  current_block_->scope->AddLabel(end_catch_label);
+
+  OpenBlock();  // Start catch clause.
+  AstNode* compare_transition_sentinel = new ComparisonNode(
+      token_pos,
+      Token::kEQ_STRICT,
+      new LoadStaticFieldNode(token_pos, field),
+      new LiteralNode(field.token_pos(), Object::transition_sentinel()));
+
+  SequenceNode* store_null = new SequenceNode(token_pos, NULL);
+  store_null->Add(new StoreStaticFieldNode(
+      field.token_pos(),
+      field,
+      new LiteralNode(token_pos, Instance::ZoneHandle())));
+  AstNode* transition_sentinel_check =
+      new IfNode(token_pos, compare_transition_sentinel, store_null, NULL);
+  current_block_->statements->Add(transition_sentinel_check);
+
+  current_block_->statements->Add(
+      new ThrowNode(token_pos,
+                    new LoadLocalNode(token_pos, catch_excp_var),
+                    new LoadLocalNode(token_pos, catch_trace_var)));
+  current_block_->statements->Add(
+      new JumpNode(token_pos, Token::kCONTINUE, end_catch_label));
+  SequenceNode* catch_clause = CloseBlock();  // End catch clause.
+
+  current_block_->statements->Add(catch_clause);
+  SequenceNode* catch_handler_list = CloseBlock();  // End catch handler list.
+  CatchClauseNode* catch_block =
+      new CatchClauseNode(token_pos,
+                          catch_handler_list,
+                          Array::ZoneHandle(Object::empty_array().raw()),
+                          context_var,
+                          catch_excp_var,
+                          catch_trace_var,
+                          CatchClauseNode::kInvalidTryIndex,
+                          false);  // No stack trace needed.
+
+  AstNode* try_catch_node = new TryCatchNode(token_pos,
+                                             try_block,
+                                             end_catch_label,
+                                             context_var,
+                                             catch_block,
+                                             NULL,  // No finally block.
+                                             AllocateTryIndex());
+  current_block_->statements->Add(try_catch_node);
   return CloseBlock();
 }
 
@@ -3307,7 +3387,6 @@
   Function& setter = Function::Handle();
   Field& class_field = Field::ZoneHandle();
   Instance& init_value = Instance::Handle();
-  intptr_t expr_pos = -1;
   while (true) {
     bool has_initializer = CurrentToken() == Token::kASSIGN;
     bool has_simple_literal = false;
@@ -3332,7 +3411,6 @@
           (LookaheadToken(1) == Token::kSEMICOLON)) {
         has_simple_literal = IsSimpleLiteral(*field->type, &init_value);
       }
-      expr_pos = TokenPos();
       SkipExpr();
     } else {
       // Static const and static final fields must have an initializer.
@@ -3377,13 +3455,12 @@
         getter.set_result_type(*field->type);
         members->AddFunction(getter);
 
-        // Create initializer function.
-        const Function& init_function = Function::ZoneHandle(
-            Function::NewStaticInitializer(*field->name,
-                                           *field->type,
-                                           current_class(),
-                                           expr_pos));
-        members->AddFunction(init_function);
+        // Create initializer function for non-const fields.
+        if (!class_field.is_const()) {
+          const Function& init_function = Function::ZoneHandle(
+              Function::NewStaticInitializer(class_field));
+          members->AddFunction(init_function);
+        }
       }
     }
 
@@ -4493,7 +4570,6 @@
       if ((is_const || is_final) && (LookaheadToken(1) == Token::kSEMICOLON)) {
         has_simple_literal = IsSimpleLiteral(type, &field_value);
       }
-      const intptr_t expr_pos = TokenPos();
       SkipExpr();
       field.set_value(field_value);
       if (!has_simple_literal) {
@@ -4511,12 +4587,11 @@
         top_level->functions.Add(getter);
 
         // Create initializer function.
-        const Function& init_function = Function::ZoneHandle(
-            Function::NewStaticInitializer(var_name,
-                                           type,
-                                           current_class(),
-                                           expr_pos));
-        top_level->functions.Add(init_function);
+        if (!field.is_const()) {
+          const Function& init_function = Function::ZoneHandle(
+              Function::NewStaticInitializer(field));
+          top_level->functions.Add(init_function);
+        }
       }
     } else if (is_final) {
       ErrorMsg(name_pos, "missing initializer for final or const variable");
@@ -4764,8 +4839,8 @@
 
 
 RawObject* Parser::CallLibraryTagHandler(Dart_LibraryTag tag,
-                                          intptr_t token_pos,
-                                          const String& url) {
+                                         intptr_t token_pos,
+                                         const String& url) {
   Dart_LibraryTagHandler handler = isolate()->library_tag_handler();
   if (handler == NULL) {
     if (url.StartsWith(Symbols::DartScheme())) {
@@ -5335,19 +5410,6 @@
   const intptr_t ident_pos = TokenPos();
   const String& ident = *CurrentLiteral();
   LocalVariable* variable = new LocalVariable(ident_pos, ident, type);
-  ASSERT(current_block_ != NULL);
-  ASSERT(current_block_->scope != NULL);
-  const intptr_t previous_pos =
-      current_block_->scope->PreviousReferencePos(ident);
-  if (previous_pos >= 0) {
-    ASSERT(!script_.IsNull());
-    intptr_t line_number;
-    script_.GetTokenLocation(previous_pos, &line_number, NULL);
-    ErrorMsg(ident_pos,
-             "identifier '%s' previously used in line %" Pd "",
-             ident.ToCString(),
-             line_number);
-  }
   ConsumeToken();  // Variable identifier.
   AstNode* initialization = NULL;
   if (CurrentToken() == Token::kASSIGN) {
@@ -5368,6 +5430,27 @@
     AstNode* null_expr = new LiteralNode(ident_pos, Instance::ZoneHandle());
     initialization = new StoreLocalNode(ident_pos, variable, null_expr);
   }
+
+  ASSERT(current_block_ != NULL);
+  const intptr_t previous_pos =
+  current_block_->scope->PreviousReferencePos(ident);
+  if (previous_pos >= 0) {
+    ASSERT(!script_.IsNull());
+    if (previous_pos > ident_pos) {
+      ErrorMsg(ident_pos,
+               "initializer of '%s' may not refer to itself",
+               ident.ToCString());
+
+    } else {
+      intptr_t line_number;
+      script_.GetTokenLocation(previous_pos, &line_number, NULL);
+      ErrorMsg(ident_pos,
+               "identifier '%s' previously used in line %" Pd "",
+               ident.ToCString(),
+               line_number);
+    }
+  }
+
   // Add variable to scope after parsing the initalizer expression.
   // The expression must not be able to refer to the variable.
   if (!current_block_->scope->AddVariable(variable)) {
@@ -5482,8 +5565,24 @@
                (LookaheadToken(1) != Token::kLPAREN)) {
       result_type = ParseType(ClassFinalizer::kCanonicalize);
     }
+    const intptr_t name_pos = TokenPos();
     variable_name = ExpectIdentifier("function name expected");
     function_name = variable_name;
+
+    // Check that the function name has not been referenced
+    // before this declaration.
+    ASSERT(current_block_ != NULL);
+    const intptr_t previous_pos =
+        current_block_->scope->PreviousReferencePos(*function_name);
+    if (previous_pos >= 0) {
+      ASSERT(!script_.IsNull());
+      intptr_t line_number;
+      script_.GetTokenLocation(previous_pos, &line_number, NULL);
+      ErrorMsg(name_pos,
+               "identifier '%s' previously used in line %" Pd "",
+               function_name->ToCString(),
+               line_number);
+    }
   }
 
   if (CurrentToken() != Token::kLPAREN) {
@@ -6753,7 +6852,6 @@
   // operator.
   bool catch_seen = false;
   bool generic_catch_seen = false;
-  SequenceNode* catch_handler_list = NULL;
   const intptr_t handler_pos = TokenPos();
   OpenBlock();  // Start the catch block sequence.
   current_block_->scope->AddLabel(end_catch_label);
@@ -6834,9 +6932,12 @@
     SequenceNode* catch_handler = CloseBlock();
     ExpectToken(Token::kRBRACE);
 
-    if (!exception_param.type->IsDynamicType()) {  // Has a type specification.
-      // Now form an 'if type check' as an exception type exists in
-      // the catch specifier.
+    const bool is_bad_type = exception_param.type->IsMalformed() ||
+                             exception_param.type->IsMalbounded();
+    if (!is_bad_type && !exception_param.type->IsDynamicType()) {
+      // Has a type specification that is not malformed or malbounded.
+      // Now form an 'if type check' as an exception type exists in the
+      // catch specifier.
       if (!exception_param.type->IsInstantiated() &&
           (current_block_->scope->function_level() > 0)) {
         // Make sure that the instantiator is captured.
@@ -6863,6 +6964,11 @@
         handler_types.Add(*exception_param.type);
       }
     } else {
+      if (is_bad_type) {
+        current_block_->statements->Add(ThrowTypeError(catch_pos,
+                                                       *exception_param.type));
+        // We still add the dead code below to satisfy the code generator.
+      }
       // No exception type exists in the catch specifier so execute the
       // catch handler code unconditionally.
       current_block_->statements->Add(catch_handler);
@@ -6877,7 +6983,7 @@
     // Add this individual catch handler to the catch handlers list.
     current_block_->statements->Add(catch_clause);
   }
-  catch_handler_list = CloseBlock();
+  SequenceNode* catch_handler_list = CloseBlock();
   TryBlocks* inner_try_block = PopTryBlock();
   const intptr_t try_index = inner_try_block->try_index();
   TryBlocks* outer_try_block = try_blocks_list_;
@@ -8545,36 +8651,24 @@
           // referenced by a static member.
           if (ParsingStaticMember()) {
             ASSERT(scope_class.raw() == current_class().raw());
-            if ((finalization == ClassFinalizer::kCanonicalizeWellFormed) ||
-                FLAG_error_on_bad_type) {
-              *type = ClassFinalizer::NewFinalizedMalformedType(
-                  Error::Handle(),  // No previous error.
-                  script_,
-                  type->token_pos(),
-                  "type parameter '%s' cannot be referenced "
-                  "from static member",
-                  String::Handle(type_parameter.name()).ToCString());
-            } else {
-              // Map the malformed type to dynamic and ignore type arguments.
-              *type = Type::DynamicType();
-            }
+            *type = ClassFinalizer::NewFinalizedMalformedType(
+                Error::Handle(),  // No previous error.
+                script_,
+                type->token_pos(),
+                "type parameter '%s' cannot be referenced "
+                "from static member",
+                String::Handle(type_parameter.name()).ToCString());
             return;
           }
           // A type parameter cannot be parameterized, so make the type
           // malformed if type arguments have previously been parsed.
           if (!AbstractTypeArguments::Handle(type->arguments()).IsNull()) {
-            if ((finalization == ClassFinalizer::kCanonicalizeWellFormed) ||
-                FLAG_error_on_bad_type) {
-              *type = ClassFinalizer::NewFinalizedMalformedType(
-                  Error::Handle(),  // No previous error.
-                  script_,
-                  type_parameter.token_pos(),
-                  "type parameter '%s' cannot be parameterized",
-                  String::Handle(type_parameter.name()).ToCString());
-            } else {
-              // Map the malformed type to dynamic and ignore type arguments.
-              *type = Type::DynamicType();
-            }
+            *type = ClassFinalizer::NewFinalizedMalformedType(
+                Error::Handle(),  // No previous error.
+                script_,
+                type_parameter.token_pos(),
+                "type parameter '%s' cannot be parameterized",
+                String::Handle(type_parameter.name()).ToCString());
             return;
           }
           *type = type_parameter.raw();
@@ -8601,18 +8695,12 @@
       // Replace unresolved class with resolved type class.
       parameterized_type.set_type_class(resolved_type_class);
     } else if (finalization >= ClassFinalizer::kCanonicalize) {
-      if ((finalization == ClassFinalizer::kCanonicalizeWellFormed) ||
-          FLAG_error_on_bad_type) {
-        ClassFinalizer::FinalizeMalformedType(
-            Error::Handle(),  // No previous error.
-            script_,
-            parameterized_type,
-            "type '%s' is not loaded",
-            String::Handle(parameterized_type.UserVisibleName()).ToCString());
-      } else {
-        // Map the malformed type to dynamic and ignore type arguments.
-        *type = Type::DynamicType();
-      }
+      ClassFinalizer::FinalizeMalformedType(
+          Error::Handle(),  // No previous error.
+          script_,
+          parameterized_type,
+          "type '%s' is not loaded",
+          String::Handle(parameterized_type.UserVisibleName()).ToCString());
       return;
     }
   }
@@ -9216,15 +9304,12 @@
         ResolveIdentInLocalScope(type_name.ident_pos, *type_name.ident, NULL)) {
       // The type is malformed. Skip over its type arguments.
       ParseTypeArguments(ClassFinalizer::kIgnore);
-      if (finalization == ClassFinalizer::kCanonicalizeWellFormed) {
-        return ClassFinalizer::NewFinalizedMalformedType(
-            Error::Handle(),  // No previous error.
-            script_,
-            type_name.ident_pos,
-            "using '%s' in this context is invalid",
-            type_name.ident->ToCString());
-      }
-      return Type::DynamicType();
+      return ClassFinalizer::NewFinalizedMalformedType(
+          Error::Handle(),  // No previous error.
+          script_,
+          type_name.ident_pos,
+          "using '%s' in this context is invalid",
+          type_name.ident->ToCString());
     }
   }
   Object& type_class = Object::Handle(isolate());
diff --git a/runtime/vm/random.cc b/runtime/vm/random.cc
new file mode 100644
index 0000000..18703d0
--- /dev/null
+++ b/runtime/vm/random.cc
@@ -0,0 +1,59 @@
+// Copyright (c) 2013, 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.
+
+#include "vm/random.h"
+#include "vm/flags.h"
+#include "vm/isolate.h"
+
+namespace dart {
+
+DEFINE_FLAG(int, random_seed, 0, "Override the random seed for debugging.");
+
+Random::Random() {
+  uint64_t seed = FLAG_random_seed;
+  if (seed == 0) {
+    Dart_EntropySource callback = Isolate::entropy_source_callback();
+    if (callback != NULL) {
+      if (!callback(reinterpret_cast<uint8_t*>(&seed), sizeof(seed))) {
+        // Callback failed. Reset the seed to 0.
+        seed = 0;
+      }
+    }
+  }
+  if (seed == 0) {
+    // We did not get a seed so far. As a fallback we do use the current time.
+    seed = OS::GetCurrentTimeMicros();
+  }
+  // Crank the next state a couple of times.
+  _state = seed;
+  NextState();
+  NextState();
+  NextState();
+  NextState();
+}
+
+Random::~Random() {
+  // Nothing to be done here.
+}
+
+// The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
+// http://en.wikipedia.org/wiki/Multiply-with-carry
+// The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
+void Random::NextState() {
+  const uint64_t MASK_32 = 0xffffffff;
+  const uint64_t A = 0xffffda61;
+
+  uint64_t state_lo = _state & MASK_32;
+  uint64_t state_hi = (_state >> 32) & MASK_32;
+  _state = (A * state_lo) + state_hi;
+}
+
+
+uint32_t Random::NextUInt32() {
+  const uint64_t MASK_32 = 0xffffffff;
+  NextState();
+  return static_cast<uint32_t>(_state & MASK_32);
+}
+
+}  // namespace dart
diff --git a/runtime/vm/random.h b/runtime/vm/random.h
new file mode 100644
index 0000000..c1c69d6
--- /dev/null
+++ b/runtime/vm/random.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2013, 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.
+
+#ifndef VM_RANDOM_H_
+#define VM_RANDOM_H_
+
+#include "vm/globals.h"
+#include "vm/allocation.h"
+
+namespace dart {
+
+class Random : public ValueObject {
+ public:
+  Random();
+  ~Random();
+
+  uint32_t NextUInt32();
+
+ private:
+  void NextState();
+
+  uint64_t _state;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(Random);
+};
+
+}  // namespace dart
+
+#endif  // VM_RANDOM_H_
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 95ce178..361006f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -742,11 +742,11 @@
 }
 
 
-intptr_t RawUint32x4::VisitUint32x4Pointers(
-    RawUint32x4* raw_obj,
+intptr_t RawInt32x4::VisitInt32x4Pointers(
+    RawInt32x4* raw_obj,
     ObjectPointerVisitor* visitor) {
     ASSERT(raw_obj->IsHeapObject());
-    return Uint32x4::InstanceSize();
+    return Int32x4::InstanceSize();
 }
 
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 0eb68b8..0d17902 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -68,7 +68,7 @@
     V(WeakProperty)                                                            \
     V(MirrorReference)                                                         \
     V(Float32x4)                                                               \
-    V(Uint32x4)                                                                \
+    V(Int32x4)                                                                \
 
 #define CLASS_LIST_ARRAYS(V)                                                   \
   V(Array)                                                                     \
@@ -94,7 +94,7 @@
   V(Float32Array)                                                              \
   V(Float64Array)                                                              \
   V(Float32x4Array)                                                            \
-  V(Uint32x4Array)                                                             \
+  V(Int32x4Array)                                                             \
 
 #define CLASS_LIST_FOR_HANDLES(V)                                              \
   CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V)                                 \
@@ -1412,17 +1412,17 @@
 };
 
 
-class RawUint32x4 : public RawInstance {
-  RAW_HEAP_OBJECT_IMPLEMENTATION(Uint32x4);
+class RawInt32x4 : public RawInstance {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(Int32x4);
 
-  uint32_t value_[4];
+  int32_t value_[4];
 
   friend class SnapshotReader;
  public:
-  uint32_t x() const { return value_[0]; }
-  uint32_t y() const { return value_[1]; }
-  uint32_t z() const { return value_[2]; }
-  uint32_t w() const { return value_[3]; }
+  int32_t x() const { return value_[0]; }
+  int32_t y() const { return value_[1]; }
+  int32_t z() const { return value_[2]; }
+  int32_t w() const { return value_[3]; }
 };
 
 
@@ -1650,10 +1650,10 @@
          kTypedDataFloat32ArrayCid == kTypedDataInt8ArrayCid + 9 &&
          kTypedDataFloat64ArrayCid == kTypedDataInt8ArrayCid + 10 &&
          kTypedDataFloat32x4ArrayCid == kTypedDataInt8ArrayCid + 11 &&
-         kTypedDataUint32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
+         kTypedDataInt32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
          kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 13);
   return (index >= kTypedDataInt8ArrayCid &&
-          index <= kTypedDataUint32x4ArrayCid);
+          index <= kTypedDataInt32x4ArrayCid);
 }
 
 
@@ -1670,7 +1670,7 @@
          kTypedDataFloat32ArrayViewCid == kTypedDataInt8ArrayViewCid + 9 &&
          kTypedDataFloat64ArrayViewCid == kTypedDataInt8ArrayViewCid + 10 &&
          kTypedDataFloat32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 11 &&
-         kTypedDataUint32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
+         kTypedDataInt32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
          kByteDataViewCid == kTypedDataInt8ArrayViewCid + 13 &&
          kExternalTypedDataInt8ArrayCid == kTypedDataInt8ArrayViewCid + 14);
   return (index >= kTypedDataInt8ArrayViewCid &&
@@ -1702,11 +1702,11 @@
           kExternalTypedDataInt8ArrayCid + 10) &&
          (kExternalTypedDataFloat32x4ArrayCid ==
           kExternalTypedDataInt8ArrayCid + 11) &&
-         (kExternalTypedDataUint32x4ArrayCid ==
+         (kExternalTypedDataInt32x4ArrayCid ==
           kExternalTypedDataInt8ArrayCid + 12) &&
          (kNullCid == kExternalTypedDataInt8ArrayCid + 13));
   return (index >= kExternalTypedDataInt8ArrayCid &&
-          index <= kExternalTypedDataUint32x4ArrayCid);
+          index <= kExternalTypedDataInt32x4ArrayCid);
 }
 
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 27ad524..db525ec 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2227,7 +2227,7 @@
 }
 
 
-RawUint32x4* Uint32x4::ReadFrom(SnapshotReader* reader,
+RawInt32x4* Int32x4::ReadFrom(SnapshotReader* reader,
                                       intptr_t object_id,
                                       intptr_t tags,
                                       Snapshot::Kind kind) {
@@ -2239,12 +2239,12 @@
   uint32_t value3 = reader->Read<uint32_t>();
 
   // Create a Float32x4 object.
-  Uint32x4& simd = Uint32x4::ZoneHandle(reader->isolate(), Uint32x4::null());
+  Int32x4& simd = Int32x4::ZoneHandle(reader->isolate(), Int32x4::null());
 
   if (kind == Snapshot::kFull) {
-    simd = reader->NewUint32x4(value0, value1, value2, value3);
+    simd = reader->NewInt32x4(value0, value1, value2, value3);
   } else {
-    simd = Uint32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
+    simd = Int32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
   }
   reader->AddBackRef(object_id, &simd, kIsDeserialized);
   // Set the object tags.
@@ -2253,7 +2253,7 @@
 }
 
 
-void RawUint32x4::WriteTo(SnapshotWriter* writer,
+void RawInt32x4::WriteTo(SnapshotWriter* writer,
                              intptr_t object_id,
                              Snapshot::Kind kind) {
   ASSERT(writer != NULL);
@@ -2262,7 +2262,7 @@
   writer->WriteInlinedObjectHeader(object_id);
 
   // Write out the class and tags information.
-  writer->WriteIndexedObject(kUint32x4Cid);
+  writer->WriteIndexedObject(kInt32x4Cid);
   writer->WriteIntptrValue(writer->GetObjectTags(this));
 
   // Write out the mask values.
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5584104..c05a8fa 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -32,7 +32,7 @@
 static bool IsObjectStoreClassId(intptr_t class_id) {
   // Check if this is a class which is stored in the object store.
   return (class_id == kObjectCid ||
-          (class_id >= kInstanceCid && class_id <= kUint32x4Cid) ||
+          (class_id >= kInstanceCid && class_id <= kInt32x4Cid) ||
           class_id == kArrayCid ||
           class_id == kImmutableArrayCid ||
           RawObject::IsStringClassId(class_id) ||
@@ -622,13 +622,13 @@
 }
 
 
-RawUint32x4* SnapshotReader::NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2,
+RawInt32x4* SnapshotReader::NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2,
                                          uint32_t v3) {
   ASSERT(kind_ == Snapshot::kFull);
   ASSERT(isolate()->no_gc_scope_depth() != 0);
-  cls_ = object_store()->uint32x4_class();
-  RawUint32x4* obj = reinterpret_cast<RawUint32x4*>(
-      AllocateUninitialized(cls_, Uint32x4::InstanceSize()));
+  cls_ = object_store()->int32x4_class();
+  RawInt32x4* obj = reinterpret_cast<RawInt32x4*>(
+      AllocateUninitialized(cls_, Int32x4::InstanceSize()));
   obj->ptr()->value_[0] = v0;
   obj->ptr()->value_[1] = v1;
   obj->ptr()->value_[2] = v2;
@@ -790,30 +790,39 @@
       ASSERT(!cls_.IsNull());
       instance_size = cls_.instance_size();
     }
-    intptr_t offset = Object::InstanceSize();
+    intptr_t next_field_offset = cls_.next_field_offset();
+    intptr_t type_argument_field_offset = cls_.type_arguments_field_offset();
+    ASSERT(next_field_offset > 0);
+    // Instance::NextFieldOffset() returns the offset of the first field in
+    // a Dart object.
+    intptr_t offset = Instance::NextFieldOffset();
     intptr_t result_cid = result->GetClassId();
-    while (offset < instance_size) {
+    while (offset < next_field_offset) {
       obj_ = ReadObjectRef();
       result->SetFieldAtOffset(offset, obj_);
-      if (kind_ == Snapshot::kMessage) {
+      if ((offset != type_argument_field_offset) &&
+          (kind_ == Snapshot::kMessage)) {
         // TODO(fschneider): Consider hoisting these lookups out of the loop.
         // This would involve creating a handle, since cls_ can't be reused
         // across the call to ReadObjectRef.
         cls_ = isolate()->class_table()->At(result_cid);
         array_ = cls_.OffsetToFieldMap();
         field_ ^= array_.At(offset >> kWordSizeLog2);
-        // Entries can be null because offset can be outside of instance fields
-        // due to rounded allocation size.
-        if (!field_.IsNull()) {
-          ASSERT(field_.Offset() == offset);
-          field_.UpdateGuardedCidAndLength(obj_);
-        }
+        ASSERT(!field_.IsNull());
+        ASSERT(field_.Offset() == offset);
+        field_.UpdateGuardedCidAndLength(obj_);
       }
       // TODO(fschneider): Verify the guarded cid and length for other kinds of
       // snapshot (kFull, kScript) with asserts.
       offset += kWordSize;
     }
     if (kind_ == Snapshot::kFull) {
+      // We create an uninitialized object in the case of full snapshots, so
+      // we need to initialize any remaining padding area with the Null object.
+      while (offset < instance_size) {
+        result->SetFieldAtOffset(offset, Object::null_object());
+        offset += kWordSize;
+      }
       result->SetCreatedFromSnapshot();
     } else if (result->IsCanonical()) {
       *result = result->CheckAndCanonicalize(NULL);
@@ -1387,9 +1396,9 @@
   CheckIfSerializable(cls);
 
   // Object is regular dart instance.
-  intptr_t instance_size =
-      cls->ptr()->instance_size_in_words_ << kWordSizeLog2;
-  ASSERT(instance_size != 0);
+  intptr_t next_field_offset =
+      cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2;
+  ASSERT(next_field_offset > 0);
 
   // Write out the serialization header value for this object.
   WriteInlinedObjectHeader(object_id);
@@ -1404,8 +1413,10 @@
   WriteObjectImpl(cls);
 
   // Write out all the fields for the object.
-  intptr_t offset = Object::InstanceSize();
-  while (offset < instance_size) {
+  // Instance::NextFieldOffset() returns the offset of the first field in
+  // a Dart object.
+  intptr_t offset = Instance::NextFieldOffset();
+  while (offset < next_field_offset) {
     WriteObjectRef(*reinterpret_cast<RawObject**>(
         reinterpret_cast<uword>(raw->ptr()) + offset));
     offset += kWordSize;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index ff65e52..4288f1d 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -45,7 +45,7 @@
 class RawFunction;
 class RawGrowableObjectArray;
 class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
 class RawImmutableArray;
 class RawLanguageError;
 class RawLibrary;
@@ -271,7 +271,7 @@
   RawLiteralToken* NewLiteralToken();
   RawGrowableObjectArray* NewGrowableObjectArray();
   RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3);
-  RawUint32x4* NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
+  RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
   RawApiError* NewApiError();
   RawLanguageError* NewLanguageError();
   RawObject* NewInteger(int64_t value);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 768ca07..46dfb04 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1165,13 +1165,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ StoreToOffset(kWord, R0, R2, current_offset);
       }
     } else {
-      __ add(R4, R2, ShifterOperand(sizeof(RawObject)));
+      __ add(R4, R2, ShifterOperand(Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // R0: raw null.
       // R2: new object.
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 5e83dd6..a0cd794 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1195,13 +1195,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ movl(Address(EAX, current_offset), raw_null);
       }
     } else {
-      __ leal(ECX, Address(EAX, sizeof(RawObject)));
+      __ leal(ECX, Address(EAX, Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // EAX: new object.
       // EBX: next object start.
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 4ddc9b0..f4eb818 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -1344,13 +1344,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ sw(T7, Address(T2, current_offset));
       }
     } else {
-      __ addiu(T4, T2, Immediate(sizeof(RawObject)));
+      __ addiu(T4, T2, Immediate(Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // T2: new object.
       // T3: next object start.
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 31abeec..84c562e 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -453,6 +453,7 @@
   // require allocation.
   __ EnterStubFrame();
   if (preserve_result) {
+    __ pushq(Immediate(0));  // Workaround for dropped stack slot during GC.
     __ pushq(RBX);  // Preserve result, it will be GC-d here.
   }
   __ pushq(Immediate(Smi::RawValue(0)));  // Space for the result.
@@ -463,6 +464,7 @@
   __ SmiUntag(RBX);
   if (preserve_result) {
     __ popq(RAX);  // Restore result.
+    __ Drop(1);  // Workaround for dropped stack slot during GC.
   }
   __ LeaveFrame();
 
@@ -1187,13 +1189,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ movq(Address(RAX, current_offset), R12);
       }
     } else {
-      __ leaq(RCX, Address(RAX, sizeof(RawObject)));
+      __ leaq(RCX, Address(RAX, Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // RAX: new object.
       // RBX: next object start.
@@ -1820,7 +1822,7 @@
 //  RBX, R10: May contain arguments to runtime stub.
 //  TOS(0): return address (Dart code).
 void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) {
-  __ EnterStubFrame();
+  __ EnterStubFrameWithPP();
   // Preserve runtime args.
   __ pushq(RBX);
   __ pushq(R10);
@@ -1832,7 +1834,7 @@
   __ popq(RAX);  // Address of original.
   __ popq(R10);  // Restore arguments.
   __ popq(RBX);
-  __ LeaveFrame();
+  __ LeaveFrameWithPP();
   __ jmp(RAX);   // Jump to original stub.
 }
 
@@ -1861,11 +1863,11 @@
 
 //  TOS(0): return address (Dart code).
 void StubCode::GenerateBreakpointReturnStub(Assembler* assembler) {
-  __ EnterStubFrame();
+  __ EnterStubFrameWithPP();
   __ pushq(RAX);
   __ CallRuntime(kBreakpointReturnHandlerRuntimeEntry, 0);
   __ popq(RAX);
-  __ LeaveFrame();
+  __ LeaveFrameWithPP();
 
   __ popq(R11);  // discard return address of call to this stub.
   __ LeaveFrameWithPP();
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index a9a3095..fbafada 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -133,9 +133,9 @@
   V(Int, "int")                                                                \
   V(Double, "double")                                                          \
   V(_Float32x4, "_Float32x4")                                                  \
-  V(_Uint32x4, "_Uint32x4")                                                    \
+  V(_Int32x4, "_Int32x4")                                                    \
   V(Float32x4, "Float32x4")                                                    \
-  V(Uint32x4, "Uint32x4")                                                      \
+  V(Int32x4, "Int32x4")                                                      \
   V(Int8List, "Int8List")                                                      \
   V(Int8ListFactory, "Int8List.")                                              \
   V(Uint8List, "Uint8List")                                                    \
@@ -156,8 +156,8 @@
   V(Uint64ListFactory, "Uint64List.")                                          \
   V(Float32x4List, "Float32x4List")                                            \
   V(Float32x4ListFactory, "Float32x4List.")                                    \
-  V(Uint32x4List, "Uint32x4List")                                              \
-  V(Uint32x4ListFactory, "Uint32x4List.")                                      \
+  V(Int32x4List, "Int32x4List")                                              \
+  V(Int32x4ListFactory, "Int32x4List.")                                      \
   V(Float32List, "Float32List")                                                \
   V(Float32ListFactory, "Float32List.")                                        \
   V(Float64List, "Float64List")                                                \
@@ -182,8 +182,8 @@
   V(_Uint64ArrayFactory, "_Uint64Array.")                                      \
   V(_Float32x4Array, "_Float32x4Array")                                        \
   V(_Float32x4ArrayFactory, "_Float32x4Array.")                                \
-  V(_Uint32x4Array, "_Uint32x4Array")                                          \
-  V(_Uint32x4ArrayFactory, "_Uint32x4Array.")                                  \
+  V(_Int32x4Array, "_Int32x4Array")                                          \
+  V(_Int32x4ArrayFactory, "_Int32x4Array.")                                  \
   V(_Float32Array, "_Float32Array")                                            \
   V(_Float32ArrayFactory, "_Float32Array.")                                    \
   V(_Float64Array, "_Float64Array")                                            \
@@ -200,7 +200,7 @@
   V(_Float32ArrayView, "_Float32ArrayView")                                    \
   V(_Float64ArrayView, "_Float64ArrayView")                                    \
   V(_Float32x4ArrayView, "_Float32x4ArrayView")                                \
-  V(_Uint32x4ArrayView, "_Uint32x4ArrayView")                                  \
+  V(_Int32x4ArrayView, "_Int32x4ArrayView")                                  \
   V(_ExternalInt8Array, "_ExternalInt8Array")                                  \
   V(_ExternalUint8Array, "_ExternalUint8Array")                                \
   V(_ExternalUint8ClampedArray, "_ExternalUint8ClampedArray")                  \
@@ -211,7 +211,7 @@
   V(_ExternalInt64Array, "_ExternalInt64Array")                                \
   V(_ExternalUint64Array, "_ExternalUint64Array")                              \
   V(_ExternalFloat32x4Array, "_ExternalFloat32x4Array")                        \
-  V(_ExternalUint32x4Array, "_ExternalUint32x4Array")                          \
+  V(_ExternalInt32x4Array, "_ExternalInt32x4Array")                          \
   V(_ExternalFloat32Array, "_ExternalFloat32Array")                            \
   V(_ExternalFloat64Array, "_ExternalFloat64Array")                            \
   V(ByteData, "ByteData")                                                      \
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index e1fa84f..1c3a8bb 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -269,6 +269,8 @@
     'port.cc',
     'port.h',
     'port_test.cc',
+    'random.cc',
+    'random.h',
     'raw_object.cc',
     'raw_object.h',
     'raw_object_snapshot.cc',
diff --git a/sdk/bin/dart2js.bat b/sdk/bin/dart2js.bat
index e324121..8951a02 100644
--- a/sdk/bin/dart2js.bat
+++ b/sdk/bin/dart2js.bat
@@ -54,8 +54,8 @@
 setlocal
 for %%i in (%1) do set result=%%~fi
 set current=
-for /f "tokens=2 delims=[]" %%i in ('dir /a:l ^"%~dp1^" 2^>nul ^
-                                     ^| find ">     %~n1 ["') do (
+for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
+                                             ^| find ">     %~n1 ["`) do (
   set current=%%i
 )
 if not "%current%"=="" call :follow_links "%current%", result
diff --git a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index e7d3b79..121193a 100644
--- a/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -114,21 +114,33 @@
         Node right = assignment.arguments.head;
         value =
             compileNodeWithDefinitions(right, definitions, isConst: isConst);
-        if (compiler.enableTypeAssertions
-            && value != null
-            && element.isField()) {
+        if (compiler.enableTypeAssertions &&
+            value != null &&
+            element.isField()) {
           DartType elementType = element.computeType(compiler);
-          DartType constantType = value.computeType(compiler);
-          if (!constantSystem.isSubtype(compiler, constantType, elementType)) {
+          if (elementType.kind == TypeKind.MALFORMED_TYPE && !value.isNull()) {
             if (isConst) {
+              ErroneousElement element = elementType.element;
               compiler.reportFatalError(
-                  node, MessageKind.NOT_ASSIGNABLE.error,
-                  {'fromType': constantType, 'toType': elementType});
+                  node, element.messageKind, element.messageArguments);
             } else {
-              // If the field cannot be lazily initialized, we will throw
-              // the exception at runtime.
+              // We need to throw an exception at runtime.
               value = null;
             }
+          } else {
+            DartType constantType = value.computeType(compiler);
+            if (!constantSystem.isSubtype(compiler,
+                                          constantType, elementType)) {
+              if (isConst) {
+                compiler.reportFatalError(
+                    node, MessageKind.NOT_ASSIGNABLE.error,
+                    {'fromType': constantType, 'toType': elementType});
+              } else {
+                // If the field cannot be lazily initialized, we will throw
+                // the exception at runtime.
+                value = null;
+              }
+            }
           }
         }
       }
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 067ee88..e0de9ff 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -416,7 +416,9 @@
   LibraryElement jsHelperLibrary;
   LibraryElement interceptorsLibrary;
   LibraryElement foreignLibrary;
+
   LibraryElement mainApp;
+  FunctionElement mainFunction;
 
   /// Initialized when dart:mirrors is loaded.
   LibraryElement mirrorsLibrary;
@@ -1025,7 +1027,7 @@
   void compileLoadedLibraries() {
     Element main = null;
     if (mainApp != null) {
-      main = mainApp.find(MAIN);
+      main = mainApp.findExported(MAIN);
       if (main == null) {
         if (!analyzeOnly) {
           // Allow analyze only of libraries with no main.
@@ -1042,14 +1044,19 @@
               "Use '--analyze-all' to analyze all code in the library."});
         }
       } else {
-        if (!main.isFunction()) {
+        if (main.isErroneous()) {
+          reportFatalError(
+              main,
+              MessageKind.GENERIC,
+              {'text': "Error: Cannot determine which '$MAIN' to use."});
+        } else if (!main.isFunction()) {
           reportFatalError(
               main,
               MessageKind.GENERIC,
               {'text': "Error: '$MAIN' is not a function."});
         }
-        FunctionElement mainMethod = main;
-        FunctionSignature parameters = mainMethod.computeSignature(this);
+        mainFunction = main;
+        FunctionSignature parameters = mainFunction.computeSignature(this);
         if (parameters.parameterCount > 2) {
           int index = 0;
           parameters.forEachParameter((Element parameter) {
@@ -1110,7 +1117,7 @@
     if (hasIsolateSupport()) {
       enqueuer.codegen.addToWorkList(
           isolateHelperLibrary.find(Compiler.START_ROOT_ISOLATE));
-      enqueuer.codegen.registerGetOfStaticFunction(mainApp.find(MAIN));
+      enqueuer.codegen.registerGetOfStaticFunction(main);
     }
     if (enabledNoSuchMethod) {
       backend.enableNoSuchMethod(enqueuer.codegen);
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
index 1deab48..be1ffda 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -163,7 +163,7 @@
   TreeElements treeElements;
 
   LibraryElement get coreLibrary => compiler.coreLibrary;
-  FunctionElement get entryFunction => compiler.mainApp.find(Compiler.MAIN);
+  FunctionElement get entryFunction => compiler.mainFunction;
   DartBackend get backend => compiler.backend;
 
   get currentFunctionScope => functionScopes.putIfAbsent(
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 8af9dfc..d530651 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -599,6 +599,7 @@
 abstract class ErroneousElement extends Element implements FunctionElement {
   MessageKind get messageKind;
   Map get messageArguments;
+  String get message;
 }
 
 /// An [Element] whose usage should cause a warning.
@@ -694,6 +695,7 @@
 
   Element find(String elementName);
   Element findLocal(String elementName);
+  Element findExported(String elementName);
   void forEachExport(f(Element element));
 
   bool hasLibraryName();
@@ -930,7 +932,8 @@
 
 abstract class MixinApplicationElement extends ClassElement {
   ClassElement get mixin;
-  void set mixin(ClassElement value);
+  InterfaceType get mixinType;
+  void set mixinType(InterfaceType value);
   void addConstructor(FunctionElement constructor);
 }
 
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 56a35e9..0b6c4c2 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -345,9 +345,9 @@
 
   computeTargetType(Compiler compiler, InterfaceType newType) => unsupported();
 
-  String toString() {
-    return '<$name: ${messageKind.message(messageArguments)}>';
-  }
+  String get message => '${messageKind.message(messageArguments)}';
+
+  String toString() => '<$name: $message>';
 }
 
 /// A message attached to a [WarnOnUseElementX].
@@ -902,6 +902,14 @@
     return result;
   }
 
+  Element findExported(String elementName) {
+    for (Link link = exports; !link.isEmpty; link = link.tail) {
+      Element element = link.head;
+      if (element.name == elementName) return element;
+    }
+    return null;
+  }
+
   void forEachExport(f(Element element)) {
     exports.forEach((Element e) => f(e));
   }
@@ -2164,12 +2172,14 @@
 
   Link<FunctionElement> constructors = new Link<FunctionElement>();
 
-  ClassElement mixin;
+  InterfaceType mixinType;
 
   MixinApplicationElementX(String name, Element enclosing, int id,
                            this.node, this.modifiers)
       : super(name, enclosing, id, STATE_NOT_STARTED);
 
+  ClassElement get mixin => mixinType != null ? mixinType.element : null;
+
   bool get isMixinApplication => true;
   bool get isUnnamedMixinApplication => node is! NamedMixinApplication;
   bool get hasConstructor => !constructors.isEmpty;
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
index a134ac6..5663714 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
@@ -200,7 +200,13 @@
   visitPhiElementTypeInformation(PhiElementTypeInformation info) {}
   visitElementInContainerTypeInformation(
       ElementInContainerTypeInformation info) {}
-  visitContainerTypeInformation(ContainerTypeInformation info) {}
+
+  visitContainerTypeInformation(ContainerTypeInformation info) {
+    if (container != info) {
+      bailout('Stored in a container');
+    }
+  }
+
   visitConcreteTypeInformation(ConcreteTypeInformation info) {}
 
   visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index cdceeec..59274b7 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -35,6 +35,17 @@
   }
 }
 
+class MalformedCheckedModeHelper extends CheckedModeHelper {
+  const MalformedCheckedModeHelper(String name) : super(name);
+
+  void generateAdditionalArguments(SsaCodeGenerator codegen,
+                                   HTypeConversion node,
+                                   List<jsAst.Expression> arguments) {
+    ErroneousElement element = node.typeExpression.element;
+    arguments.add(js.string(element.message));
+  }
+}
+
 class PropertyCheckedModeHelper extends CheckedModeHelper {
   const PropertyCheckedModeHelper(String name) : super(name);
 
@@ -338,6 +349,7 @@
 
   /// All the checked mode helpers.
   static const checkedModeHelpers = const [
+      const MalformedCheckedModeHelper('checkMalformedType'),
       const CheckedModeHelper('voidTypeCheck'),
       const CheckedModeHelper('stringTypeCast'),
       const CheckedModeHelper('stringTypeCheck'),
@@ -988,6 +1000,9 @@
       }
     }
     bool isTypeVariable = type.kind == TypeKind.TYPE_VARIABLE;
+    if (type.kind == TypeKind.MALFORMED_TYPE) {
+      enqueueInResolution(getThrowTypeError(), elements);
+    }
     if (!type.treatAsRaw || type.containsTypeVariables) {
       enqueueInResolution(getSetRuntimeTypeInfo(), elements);
       enqueueInResolution(getGetRuntimeTypeInfo(), elements);
@@ -1109,7 +1124,6 @@
         analyzeTypeArgument(type, argument);
       });
     }
-    // TODO(ngeoffray): Also handle T a (in checked mode).
   }
 
   void registerClassUsingVariableExpression(ClassElement cls) {
@@ -1324,6 +1338,11 @@
                                           {bool typeCast,
                                            bool nativeCheckOnly}) {
     assert(type.kind != TypeKind.TYPEDEF);
+    if (type.kind == TypeKind.MALFORMED_TYPE) {
+      // The same error is thrown for type test and type cast of a malformed
+      // type so we only need one check method.
+      return 'checkMalformedType';
+    }
     Element element = type.element;
     bool nativeCheck = nativeCheckOnly ||
         emitter.nativeEmitter.requiresNativeIsCheck(element);
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index 6205fed..dd2d293 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -959,7 +959,7 @@
 
   emitMain(CodeBuffer buffer) {
     if (compiler.isMockCompilation) return;
-    Element main = compiler.mainApp.find(Compiler.MAIN);
+    Element main = compiler.mainFunction;
     String mainCall = null;
     if (compiler.hasIsolateSupport()) {
       Element isolateMain =
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
index 987b996..86ef658 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
@@ -293,6 +293,8 @@
 
   String get simpleName => _element.name;
 
+  bool get isNameSynthetic => false;
+
   /**
    * Computes the first token for this declaration using the begin token of the
    * element node or element position as indicator.
@@ -537,13 +539,7 @@
    */
   String get simpleName {
     if (_library.libraryTag != null) {
-      // TODO(ahe): Remove StringNode check when old syntax is removed.
-      StringNode name = _library.libraryTag.name.asStringNode();
-      if (name != null) {
-        return name.dartString.slowToString();
-      } else {
-        return _library.libraryTag.name.toString();
-      }
+      return _library.libraryTag.name.toString();
     } else {
       // Use the file name as script name.
       String path = _library.canonicalUri.path;
@@ -847,6 +843,23 @@
     return null;
   }
 
+  ClassMirror get mixin {
+    if (_class.isMixinApplication) {
+      MixinApplicationElement mixinApplication = _class;
+      return new Dart2JsInterfaceTypeMirror(mirrors,
+                                            mixinApplication.mixinType);
+    }
+    return this;
+  }
+
+  bool get isNameSynthetic {
+    if (_class.isMixinApplication) {
+      MixinApplicationElement mixinApplication = _class;
+      return mixinApplication.isUnnamedMixinApplication;
+    }
+    return false;
+  }
+
   List<ClassMirror> get superinterfaces {
     var list = <ClassMirror>[];
     Link<DartType> link = _class.interfaces;
@@ -958,6 +971,10 @@
 
   List<ClassMirror> get superinterfaces => const <ClassMirror>[];
 
+  // TODO(johnniwinther): Refactor [TypedefMirror] to not extend [ClassMirror]
+  // and remove this.
+  ClassMirror get mixin => this;
+
   bool get isClass => false;
 
   bool get isOriginalDeclaration => true;
@@ -1077,6 +1094,8 @@
 
   InterfaceType get _interfaceType => _type;
 
+  bool get isNameSynthetic => originalDeclaration.isNameSynthetic;
+
   String get qualifiedName => originalDeclaration.qualifiedName;
 
   // TODO(johnniwinther): Substitute type arguments for type variables.
@@ -1096,6 +1115,14 @@
   // TODO(johnniwinther): Substitute type arguments for type variables.
   List<ClassMirror> get superinterfaces => originalDeclaration.superinterfaces;
 
+  // TODO(johnniwinther): Substitute type arguments for type variables.
+  ClassMirror get mixin {
+    if (originalDeclaration.mixin == originalDeclaration) {
+      return this;
+    }
+    return originalDeclaration.mixin;
+  }
+
   bool get isClass => originalDeclaration.isClass;
 
   bool get isAbstract => originalDeclaration.isAbstract;
@@ -1170,7 +1197,7 @@
   List<ParameterMirror> _parameters;
 
   Dart2JsFunctionTypeMirror(Dart2JsMirrorSystem system,
-                             FunctionType functionType, this._functionSignature)
+                            FunctionType functionType, this._functionSignature)
       : super(system, functionType) {
     assert (_functionSignature != null);
   }
@@ -1209,6 +1236,8 @@
   // TODO(johnniwinther): Substitute type arguments for type variables.
   List<ClassMirror> get superinterfaces => originalDeclaration.superinterfaces;
 
+  ClassMirror get mixin => this;
+
   bool get isClass => originalDeclaration.isClass;
 
   bool get isPrivate => originalDeclaration.isPrivate;
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
index 7347573..8e83643 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
@@ -64,6 +64,10 @@
    */
   String get simpleName;
 
+  /// Returns `true` if the name of this declaration is generated by the
+  /// provider of the mirror system.
+  bool get isNameSynthetic;
+
   /**
    * Returns the name of this entity qualified by is enclosing context. For
    * instance, the qualified name of a method 'method' in class 'Class' in
@@ -107,7 +111,7 @@
   /**
    * Looks up [name] in the scope of this declaration.
    *
-   * [name] may be either a single identifier, like 'foo', or of the 
+   * [name] may be either a single identifier, like 'foo', or of the
    * a prefixed identifier, like 'foo.bar', where 'foo' must be a prefix.
    * For methods and constructors, the scope includes the parameters. For
    * classes and typedefs, the scope includes the type variables.
@@ -368,6 +372,13 @@
   List<ClassMirror> get superinterfaces;
 
   /**
+   * The mixin of this class. If this class is the result of a mixin application
+   * of the form S with M, returns a class mirror on M. Otherwise return the
+   * class mirror itself.
+   */
+  ClassMirror get mixin;
+
+  /**
    * Is [:true:] iff this type is a class.
    */
   bool get isClass;
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
index 81fcc90..4336d05 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
@@ -172,6 +172,83 @@
   }
 }
 
+bool isMixinApplication(Mirror mirror) {
+  return mirror is ClassMirror && mirror.mixin != mirror;
+}
+
+/**
+ * Returns the superclass of [cls] skipping unnamed mixin applications.
+ *
+ * For instance, for all of the following definitions this method returns [:B:].
+ *
+ *     class A extends B {}
+ *     class A extends B with C1, C2 {}
+ *     class A extends B implements D1, D2 {}
+ *     class A extends B with C1, C2 implements D1, D2 {}
+ *     class A = B with C1, C2;
+ *     abstract class A = B with C1, C2 implements D1, D2;
+ */
+ClassMirror getSuperclass(ClassMirror cls) {
+  ClassMirror superclass = cls.superclass;
+  while (isMixinApplication(superclass) && superclass.isNameSynthetic) {
+    superclass = superclass.superclass;
+  }
+  return superclass;
+}
+
+/**
+ * Returns the mixins directly applied to [cls].
+ *
+ * For instance, for all of the following definitions this method returns
+ * [:C1, C2:].
+ *
+ *     class A extends B with C1, C2 {}
+ *     class A extends B with C1, C2 implements D1, D2 {}
+ *     class A = B with C1, C2;
+ *     abstract class A = B with C1, C2 implements D1, D2;
+ */
+Iterable<ClassMirror> getAppliedMixins(ClassMirror cls) {
+  List<ClassMirror> mixins = <ClassMirror>[];
+  ClassMirror superclass = cls.superclass;
+  while (isMixinApplication(superclass) && superclass.isNameSynthetic) {
+    mixins.add(superclass.mixin);
+    superclass = superclass.superclass;
+  }
+  if (mixins.length > 1) {
+    mixins = new List<ClassMirror>.from(mixins.reversed);
+  }
+  if (isMixinApplication(cls)) {
+    mixins.add(cls.mixin);
+  }
+  return mixins;
+}
+
+/**
+ * Returns the superinterfaces directly and explicitly implemented by [cls].
+ *
+ * For instance, for all of the following definitions this method returns
+ * [:D1, D2:].
+ *
+ *     class A extends B implements D1, D2 {}
+ *     class A extends B with C1, C2 implements D1, D2 {}
+ *     abstract class A = B with C1, C2 implements D1, D2;
+ */
+Iterable<ClassMirror> getExplicitInterfaces(ClassMirror cls) {
+  if (isMixinApplication(cls)) {
+    bool first = true;
+    ClassMirror mixin = cls.mixin;
+    bool filter(ClassMirror superinterface) {
+      if (first && superinterface == mixin) {
+        first = false;
+        return false;
+      }
+      return true;
+    }
+    return cls.superinterfaces.where(filter);
+  }
+  return cls.superinterfaces;
+}
+
 final RegExp _singleLineCommentStart = new RegExp(r'^///? ?(.*)');
 final RegExp _multiLineCommentStartEnd =
     new RegExp(r'^/\*\*? ?([\s\S]*)\*/$', multiLine: true);
@@ -220,12 +297,12 @@
  * Looks up [name] in the scope [declaration].
  *
  * If [name] is of the form 'a.b.c', 'a' is looked up in the scope of
- * [declaration] and if unresolved 'a.b' is looked in the scope of 
+ * [declaration] and if unresolved 'a.b' is looked in the scope of
  * [declaration]. Each identifier of the remaining suffix, 'c' or 'b.c', is
  * then looked up in the local scope of the previous result.
- * 
+ *
  * For instance, assumming that [:Iterable:] is imported into the scope of
- * [declaration] via the prefix 'col', 'col.Iterable.E' finds the type 
+ * [declaration] via the prefix 'col', 'col.Iterable.E' finds the type
  * variable of [:Iterable:] and 'col.Iterable.contains.element' finds the
  * [:element:] parameter of the [:contains:] method on [:Iterable:].
  */
@@ -233,7 +310,7 @@
                                          String name) {
   // TODO(11653): Support lookup of constructors using the [:new Foo:]
   // syntax.
-  int offset = 1; 
+  int offset = 1;
   List<String> parts = name.split('.');
   DeclarationMirror result = declaration.lookupInScope(parts[0]);
   if (result == null && parts.length > 1) {
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 40703cf..699f026 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -3949,10 +3949,8 @@
       return;
     }
 
-    assert(mixinApplication.mixin == null);
-    Element mixin = resolveMixinFor(mixinApplication, mixinType);
-
-    mixinApplication.mixin = mixin;
+    assert(mixinApplication.mixinType == null);
+    mixinApplication.mixinType = resolveMixinFor(mixinApplication, mixinType);
 
     // Create forwarding constructors for constructor defined in the superclass
     // because they are now hidden by the mixin application.
@@ -3966,8 +3964,8 @@
     calculateAllSupertypes(mixinApplication);
   }
 
-  ClassElement resolveMixinFor(MixinApplicationElement mixinApplication,
-                               DartType mixinType) {
+  InterfaceType resolveMixinFor(MixinApplicationElement mixinApplication,
+                                DartType mixinType) {
     ClassElement mixin = mixinType.element;
     mixin.ensureResolved(compiler);
 
@@ -3989,7 +3987,7 @@
       current = currentMixinApplication.mixin;
     }
     compiler.world.registerMixinUse(mixinApplication, mixin);
-    return mixin;
+    return mixinType;
   }
 
   DartType resolveType(TypeAnnotation node) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 2519c4f..6bd3a04 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -2024,6 +2024,8 @@
     push(attachPosition(instruction, node));
   }
 
+  HInstruction peek() => stack.last;
+
   HInstruction pop() {
     return stack.removeLast();
   }
@@ -2910,13 +2912,16 @@
     } else if ("as" == op.source) {
       visit(node.receiver);
       HInstruction expression = pop();
-      Node argument = node.arguments.head;
-      TypeAnnotation typeAnnotation = argument.asTypeAnnotation();
-      DartType type = elements.getType(typeAnnotation);
-      HInstruction converted = buildTypeConversion(
-          expression, type, HTypeConversion.CAST_TYPE_CHECK);
-      if (converted != expression) add(converted);
-      stack.add(converted);
+      DartType type = elements.getType(node.typeAnnotationFromIsCheckOrCast);
+      if (type.kind == TypeKind.MALFORMED_TYPE) {
+        ErroneousElement element = type.element;
+        generateTypeError(node, element.message);
+      } else {
+        HInstruction converted = buildTypeConversion(
+            expression, type, HTypeConversion.CAST_TYPE_CHECK);
+        if (converted != expression) add(converted);
+        stack.add(converted);
+      }
     } else {
       visit(node.receiver);
       visit(node.argumentsNode);
@@ -3021,6 +3026,11 @@
       pushInvokeStatic(node, helper, inputs, backend.boolType);
       HInstruction call = pop();
       return new HIs.compound(type, expression, call, backend.boolType);
+    } else if (type.kind == TypeKind.MALFORMED_TYPE) {
+      ErroneousElement element = type.element;
+      generateTypeError(node, element.message);
+      HInstruction call = pop();
+      return new HIs.compound(type, expression, call, backend.boolType);
     } else {
       if (backend.hasDirectCheckFor(type)) {
         return new HIs.direct(type, expression, backend.boolType);
@@ -4169,7 +4179,10 @@
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HStatic].
     List<HInstruction> inputs = <HInstruction>[];
-    if (backend.isInterceptedSelector(selector)) {
+    if (backend.isInterceptedSelector(selector) &&
+        // Fields don't need an interceptor; consider generating HFieldGet/Set
+        // instead.
+        element.kind != ElementKind.FIELD) {
       inputs.add(invokeInterceptor(receiver));
     }
     inputs.add(receiver);
@@ -4519,6 +4532,17 @@
     }
   }
 
+  void setRtiIfNeeded(HInstruction object, Node node) {
+    InterfaceType type = elements.getType(node);
+    if (!backend.classNeedsRti(type.element) || type.treatAsRaw) return;
+    List<HInstruction> arguments = <HInstruction>[];
+    for (DartType argument in type.typeArguments) {
+      arguments.add(analyzeTypeArgument(argument));
+    }
+    callSetRuntimeTypeInfo(type.element, arguments, object);
+    compiler.enqueuer.codegen.registerInstantiatedType(type, elements);
+  }
+
   visitLiteralList(LiteralList node) {
     HInstruction instruction;
 
@@ -4534,6 +4558,7 @@
       }
       instruction = buildLiteralList(inputs);
       add(instruction);
+      setRtiIfNeeded(instruction, node);
     }
 
     TypeMask type =
@@ -4736,6 +4761,7 @@
     add(keyValuePairs);
     TypeMask mapType = new TypeMask.nonNullSubtype(backend.mapLiteralClass);
     pushInvokeStatic(node, backend.getMapMaker(), [keyValuePairs], mapType);
+    setRtiIfNeeded(peek(), node);
   }
 
   visitLiteralMapEntry(LiteralMapEntry node) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index ffd4236..d77bd2b 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -1617,9 +1617,11 @@
     world.registerStaticUse(superMethod);
     ClassElement superClass = superMethod.getEnclosingClass();
     if (superMethod.kind == ElementKind.FIELD) {
-      String fieldName = node.caller.isShadowedByField(superMethod)
-          ? backend.namer.shadowedFieldName(superMethod)
-          : backend.namer.instanceFieldName(superMethod);
+      String fieldName = superMethod.hasFixedBackendName()
+          ? superMethod.fixedBackendName()
+          : node.caller.isShadowedByField(superMethod)
+              ? backend.namer.shadowedFieldName(superMethod)
+              : backend.namer.instanceFieldName(superMethod);
       use(node.inputs[0]);
       js.PropertyAccess access =
           new js.PropertyAccess.field(pop(), fieldName);
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index cdc75a2..426d329 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -1204,7 +1204,7 @@
     // available.
     assert(type.kind != TypeKind.TYPE_VARIABLE);
     assert(type.treatAsRaw || type.kind == TypeKind.FUNCTION);
-    if (type.treatAsDynamic) return this;
+    if (type.isDynamic) return this;
     // The type element is either a class or the void element.
     Element element = type.element;
     if (identical(element, compiler.objectClass)) return this;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 6b83cda..1a16f4c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -594,6 +594,11 @@
     HInstruction value = node.inputs[0];
     DartType type = node.typeExpression;
     if (type != null) {
+      if (type.kind == TypeKind.MALFORMED_TYPE) {
+        // Malformed types are treated as dynamic statically, but should
+        // throw a type error at runtime.
+        return node;
+      }
       if (!type.treatAsRaw || type.kind == TypeKind.TYPE_VARIABLE) {
         return node;
       }
@@ -1508,14 +1513,14 @@
     HInstruction input = instruction.expression;
     for (HIf ifUser in ifUsers) {
       changeUsesDominatedBy(ifUser.thenBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the else block on a HType
-      // that knows it is not of a specific Type.
+      // TODO(ngeoffray): Also change uses for the else block on a type
+      // that knows it is not of a specific type.
     }
 
     for (HIf ifUser in notIfUsers) {
       changeUsesDominatedBy(ifUser.elseBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the then block on a HType
-      // that knows it is not of a specific Type.
+      // TODO(ngeoffray): Also change uses for the then block on a type
+      // that knows it is not of a specific type.
     }
   }
 }
diff --git a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
index 3b4fe10..b0536bd 100644
--- a/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
@@ -426,7 +426,10 @@
       String packageRoot) {
     _packageRoot = packageRoot;
     _exports = new ExportMap.parse(libraryList, packageRoot);
-    var librariesToAnalyze = _exports.allExportedFiles.toList();
+    var librariesToAnalyze =
+        _exports.allExportedFiles
+                .map((file) => new Uri.file(file).toString())
+                .toList();
     librariesToAnalyze.addAll(libraryList.map((uri) => uri.toString()));
 
     // dart2js takes a String, but it expects that to be a Uri, not a file
@@ -1183,12 +1186,13 @@
     subtypes.sort((x, y) => x.simpleName.compareTo(y.simpleName));
 
     // Show the chain of superclasses.
-    if (!type.superclass.isObject) {
+    var superclass = getSuperclass(type);
+    if (!superclass.isObject) {
       final supertypes = [];
-      var thisType = type.superclass;
+      var thisType = superclass;
       do {
         supertypes.add(thisType);
-        thisType = thisType.superclass;
+        thisType = getSuperclass(thisType);
       } while (!thisType.isObject);
 
       writeln('<h3>Extends</h3>');
@@ -1204,7 +1208,8 @@
     }
 
     listTypes(subtypes, 'Subclasses');
-    listTypes(type.superinterfaces, 'Implements');
+    listTypes(getAppliedMixins(type), 'Mixins');
+    listTypes(getExplicitInterfaces(type), 'Implements');
   }
 
   /**
@@ -1569,9 +1574,7 @@
     writeln('</h4>');
 
     if (inherited) {
-      write('<div class="inherited-from">inherited from ');
-      annotateType(host, member.owner);
-      write('</div>');
+      docInherited(host, member.owner);
     }
 
     writeln('<div class="doc">');
@@ -1586,6 +1589,21 @@
     _currentMember = null;
   }
 
+  /**
+   * Annotate a member as inherited or mixed in from [owner].
+   */
+  void docInherited(ContainerMirror host, ClassMirror owner) {
+    if (isMixinApplication(owner)) {
+      write('<div class="inherited-from">mixed in from ');
+      annotateType(host, owner.mixin);
+      write('</div>');
+    } else {
+      write('<div class="inherited-from">inherited from ');
+      annotateType(host, owner);
+      write('</div>');
+    }
+  }
+
   void docField(ContainerMirror host, VariableMirror field,
                 {bool asGetter: false, bool asSetter: false}) {
     if (asGetter) {
@@ -1651,9 +1669,7 @@
         ''');
 
     if (inherited) {
-      write('<div class="inherited-from">inherited from ');
-      annotateType(host, getter.owner);
-      write('</div>');
+      docInherited(host, getter.owner);
     }
 
     DocComment comment = getMemberComment(getter);
@@ -1776,6 +1792,9 @@
       }
     }
     if (comment == null) return null;
+    if (isMixinApplication(inheritedFrom)) {
+      inheritedFrom = inheritedFrom.mixin;
+    }
     return new DocComment(comment, inheritedFrom, dartdocSyntaxes,
         dartdocResolver);
   }
diff --git a/sdk/lib/_internal/lib/async_patch.dart b/sdk/lib/_internal/lib/async_patch.dart
index 07b1cd2..8d6bb26 100644
--- a/sdk/lib/_internal/lib/async_patch.dart
+++ b/sdk/lib/_internal/lib/async_patch.dart
@@ -35,7 +35,7 @@
 }
 
 // TODO(ahe): This should not only apply to this isolate.
-final _loadedLibraries = <String, Completer<bool>>{};
+final Map<String, Future<bool>> _loadedLibraries = <String, Future<bool>>{};
 
 Future<bool> _load(String libraryName, String uri) {
   // TODO(ahe): Validate libraryName.  Kasper points out that you want
diff --git a/sdk/lib/_internal/lib/isolate_helper.dart b/sdk/lib/_internal/lib/isolate_helper.dart
index bf3caa2..d13871b 100644
--- a/sdk/lib/_internal/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/lib/isolate_helper.dart
@@ -729,7 +729,7 @@
 
   const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     _waitForPendingPorts(message, () {
       // Check that the isolate still runs and the port is still open
       final isolate = _globalState.isolates[_isolateId];
@@ -775,7 +775,7 @@
   const _WorkerSendPort(this._workerId, int isolateId, this._receivePortId)
       : super(isolateId);
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     _waitForPendingPorts(message, () {
       final workerMessage = _serializeMessage({
           'command': 'message',
@@ -846,9 +846,9 @@
     _idCount++;
   }
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     if (_port != null) {
-      _port.send(message, replyTo);
+      _port.send(message);
     } else {
       pending.add(message);
     }
diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart
index 98f9798..b4d4b4a 100644
--- a/sdk/lib/_internal/lib/js_helper.dart
+++ b/sdk/lib/_internal/lib/js_helper.dart
@@ -530,25 +530,7 @@
     // Example: "Wed May 16 2012 21:13:00 GMT+0200 (CEST)".
     // We extract this name using a regexp.
     var d = lazyAsJsDate(receiver);
-    String result = JS('String', r'/\((.*)\)/.exec(#.toString())[1]', d);
-    if (result == null) {
-      // Internet Explorer doesn't put the zone name into parenthesis:
-      // For example: Thu Oct 31 14:07:44 PDT 2013
-      result = JS('String',
-                  // Thu followed by a space.
-                  r'/^[A-Z,a-z]{3}\s'
-                  // Oct 31 followed by space.
-                  r'[A-Z,a-z]{3}\s\d+\s'
-                  // Time followed by a space.
-                  r'\d{2}:\d{2}:\d{2}\s'
-                  // The time zone name followed by a space.
-                  r'([A-Z]{3,5})\s'
-                  // The year.
-                  r'\d{4}$/'
-                  '.exec(#.toString())[1]',
-                  d);
-    }
-    return result;
+    return JS('String', r'/\((.*)\)/.exec(#.toString())[1]', d);
   }
 
   static int getTimeZoneOffsetInMinutes(receiver) {
@@ -1939,6 +1921,11 @@
   throw new TypeErrorImplementation(value, 'void');
 }
 
+checkMalformedType(value, message) {
+  if (value == null) return value;
+  throw new TypeErrorImplementation.fromMessage(message);
+}
+
 /**
  * Special interface recognized by the compiler and implemented by DOM
  * objects that support integer indexing. This interface is not
diff --git a/sdk/lib/_internal/lib/js_mirrors.dart b/sdk/lib/_internal/lib/js_mirrors.dart
index 802563e..79bbdb6 100644
--- a/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/lib/js_mirrors.dart
@@ -204,6 +204,8 @@
 
   String get _prettyName => 'TypeVariableMirror';
 
+  bool get isTopLevel => false;
+
   TypeMirror get upperBound {
     if (_cachedUpperBound != null) return _cachedUpperBound;
     return _cachedUpperBound = typeMirrorFromRuntimeTypeRepresentation(
@@ -555,6 +557,16 @@
   return result;
 }
 
+Map<Symbol, MethodMirror> filterConstructors(methods) {
+  var result = new Map();
+  for (JsMethodMirror method in methods) {
+    if (method.isConstructor) {
+      result[method.simpleName] = method;
+    }
+  }
+  return result;
+}
+
 Map<Symbol, MethodMirror> filterGetters(List<MethodMirror> methods,
                                         Map<Symbol, VariableMirror> fields) {
   var result = new Map();
@@ -571,7 +583,7 @@
 }
 
 Map<Symbol, MethodMirror> filterSetters(List<MethodMirror> methods,
-                                          Map<Symbol, VariableMirror> fields) {
+                                        Map<Symbol, VariableMirror> fields) {
   var result = new Map();
   for (JsMethodMirror method in methods) {
     if (method.isSetter) {
@@ -587,6 +599,24 @@
   return result;
 }
 
+Map<Symbol, Mirror> filterMembers(List<MethodMirror> methods,
+                                  Map<Symbol, VariableMirror> variables) {
+  Map<Symbol, Mirror> result = new Map.from(variables);
+  for (JsMethodMirror method in methods) {
+    if (method.isSetter) {
+      String name = n(method.simpleName);
+      name = name.substring(0, name.length - 1);
+      // Filter-out setters corresponding to variables.
+      if (result[s(name)] is VariableMirror) continue;
+    }
+    // Constructors aren't 'members'.
+    if (method.isConstructor) continue;
+    // Use putIfAbsent to filter-out getters corresponding to variables.
+    result.putIfAbsent(method.simpleName, () => method);
+  }
+  return result;
+}
+
 int counter = 0;
 
 ClassMirror reflectMixinApplication(mixinNames, String mangledName) {
@@ -861,6 +891,9 @@
   String _typeArguments;
 
   UnmodifiableListView<TypeMirror> _cachedTypeArguments;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedDeclarations;
+  UnmodifiableMapView<Symbol, DeclarationMirror> _cachedMembers;
+  UnmodifiableMapView<Symbol, MethodMirror> _cachedConstructors;
   Map<Symbol, VariableMirror> _cachedVariables;
   Map<Symbol, MethodMirror> _cachedGetters;
   Map<Symbol, MethodMirror> _cachedSetters;
@@ -927,8 +960,6 @@
     return _cachedTypeArguments = new UnmodifiableListView(result);
   }
 
-  Map<Symbol, MethodMirror> get constructors => _class.constructors;
-
   List<JsMethodMirror> get _methods {
     if (_cachedMethods != null) return _cachedMethods;
     return _cachedMethods =_class._getMethodsWithOwner(this);
@@ -940,6 +971,13 @@
         filterMethods(_methods));
   }
 
+  Map<Symbol, MethodMirror> get constructors {
+    if (_cachedConstructors != null) return _cachedConstructors;
+    return _cachedConstructors =
+        new UnmodifiableMapView<Symbol, MethodMirror>(
+            filterConstructors(_methods));
+  }
+
   Map<Symbol, MethodMirror> get getters {
     if (_cachedGetters != null) return _cachedGetters;
     return _cachedGetters = new UnmodifiableMapView<Symbol, MethodMirror>(
@@ -962,7 +1000,22 @@
         new UnmodifiableMapView<Symbol, VariableMirror>(result);
   }
 
-  Map<Symbol, Mirror> get members => _class.members;
+  Map<Symbol, DeclarationMirror> get members {
+    if (_cachedMembers != null) return _cachedMembers;
+    return _cachedMembers = new UnmodifiableMapView<Symbol, DeclarationMirror>(
+        filterMembers(_methods, variables));
+  }
+
+  Map<Symbol, DeclarationMirror> get declarations {
+    if (_cachedDeclarations != null) return _cachedDeclarations;
+    Map<Symbol, DeclarationMirror> result =
+        new Map<Symbol, DeclarationMirror>();
+    result.addAll(members);
+    result.addAll(constructors);
+    typeVariables.forEach((tv) => result[tv.simpleName] = tv);
+    return _cachedDeclarations =
+        new UnmodifiableMapView<Symbol, DeclarationMirror>(result);
+  }
 
   InstanceMirror setField(Symbol fieldName, Object arg) {
     return _class.setField(fieldName, arg);
@@ -1068,14 +1121,9 @@
 
   Map<Symbol, MethodMirror> get constructors {
     if (_cachedConstructors != null) return _cachedConstructors;
-    var result = new Map();
-    for (JsMethodMirror method in _methods) {
-      if (method.isConstructor) {
-        result[method.simpleName] = method;
-      }
-    }
     return _cachedConstructors =
-        new UnmodifiableMapView<Symbol, MethodMirror>(result);
+        new UnmodifiableMapView<Symbol, MethodMirror>(
+            filterConstructors(_methods));
   }
 
   List<JsMethodMirror> _getMethodsWithOwner(DeclarationMirror methodOwner) {
@@ -1189,20 +1237,8 @@
 
   Map<Symbol, Mirror> get members {
     if (_cachedMembers != null) return _cachedMembers;
-    Map<Symbol, Mirror> result = new Map.from(variables);
-    for (JsMethodMirror method in _methods) {
-      if (method.isSetter) {
-        String name = n(method.simpleName);
-        name = name.substring(0, name.length - 1);
-        // Filter-out setters corresponding to variables.
-        if (result[s(name)] is VariableMirror) continue;
-      }
-      // Constructors aren't 'members'.
-      if (method.isConstructor) continue;
-      // Use putIfAbsent to filter-out getters corresponding to variables.
-      result.putIfAbsent(method.simpleName, () => method);
-    }
-    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(result);
+    return _cachedMembers = new UnmodifiableMapView<Symbol, Mirror>(
+        filterMembers(_methods, variables));
   }
 
   Map<Symbol, DeclarationMirror> get declarations {
diff --git a/sdk/lib/convert/utf.dart b/sdk/lib/convert/utf.dart
index a6c6720..8e480f8 100644
--- a/sdk/lib/convert/utf.dart
+++ b/sdk/lib/convert/utf.dart
@@ -5,10 +5,10 @@
 part of dart.convert;
 
 /** The Unicode Replacement character `U+FFFD` (�). */
-const UNICODE_REPLACEMENT_CHARACTER_RUNE = 0xFFFD;
+const int UNICODE_REPLACEMENT_CHARACTER_RUNE = 0xFFFD;
 
 /** The Unicode Byte Order Marker (BOM) character `U+FEFF`. */
-const UNICODE_BOM_CHARACTER_RUNE = 0xFEFF;
+const int UNICODE_BOM_CHARACTER_RUNE = 0xFEFF;
 
 /**
  * An instance of the default implementation of the [Utf8Codec].
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index c2a2227..5735697 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -1332,6 +1332,15 @@
   // To suppress missing implicit constructor warnings.
   factory CanvasRenderingContext2D._() { throw new UnsupportedError("Not supported"); }
 
+  /**
+   * The current default path of this canvas context, if there is one.
+   *
+   * ## Other resources
+   *
+   * * [Current default path]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#current-default-path)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.currentPath')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
@@ -1356,6 +1365,16 @@
   @DocsEditable()
   String globalCompositeOperation;
 
+  /**
+   * Whether images and patterns on this canvas will be smoothed when this
+   * canvas is scaled.
+   *
+   * ## Other resources
+   *
+   * * [Image smoothing]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-smoothing)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
@@ -1408,6 +1427,15 @@
   String textBaseline;
 
   @JSName('webkitBackingStorePixelRatio')
+  /**
+   * The ratio between this canvas' backing store dimensions and the canvas'
+   * logical dimensions.
+   *
+   * ## Other resources
+   *
+   * * [High DPI Canvas tutorial]
+   * (http://www.html5rocks.com/en/tutorials/canvas/hidpi/) from HTML5Rocks.
+   */
   @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRatio')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -7313,6 +7341,7 @@
    * save typing a few characters.
    *
    * [selectors] should be a string using CSS selector syntax.
+   *
    *     var element1 = document.querySelector('.className');
    *     var element2 = document.querySelector('#id');
    *
@@ -7671,6 +7700,7 @@
    * save typing a few characters.
    *
    * [selectors] should be a string using CSS selector syntax.
+   *
    *     var items = document.querySelectorAll('.itemClassName');
    *
    * For details about CSS selector syntax, see the
@@ -7752,6 +7782,17 @@
     children.addAll(copy);
   }
 
+  /**
+   * Finds all descendant elements of this document fragment that match the
+   * specified group of selectors.
+   *
+   * [selectors] should be a string using CSS selector syntax.
+   *
+   *     var items = document.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+   */
   ElementList querySelectorAll(String selectors) =>
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
 
@@ -7816,6 +7857,18 @@
   // To suppress missing implicit constructor warnings.
   factory DocumentFragment._() { throw new UnsupportedError("Not supported"); }
 
+  /**
+   * Finds the first descendant element of this document fragment that matches
+   * the specified group of selectors.
+   *
+   * [selectors] should be a string using CSS selector syntax.
+   *
+   *     var element1 = fragment.querySelector('.className');
+   *     var element2 = fragment.querySelector('#id');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+   */
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
   Element querySelector(String selectors) native;
@@ -9456,6 +9509,9 @@
    * [selectors] should be a string using CSS selector syntax.
    *
    *     var items = element.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   @DomName('Element.querySelectorAll')
   ElementList querySelectorAll(String selectors) =>
@@ -9664,6 +9720,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**
@@ -10988,8 +11049,8 @@
   String getAttributeNS(String namespaceURI, String localName) native;
 
   /**
-   * The smallest bounding rectangle that encompasses this element's padding,
-   * scrollbar, and border.
+   * Returns the smallest bounding rectangle that encompasses this element's
+   * padding, scrollbar, and border.
    *
    * ## Other resources
    *
@@ -10997,14 +11058,16 @@
    * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)
    * from MDN.
    * * [The getBoundingClientRect() method]
-   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.
+   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)
+   * from W3C.
    */
   @DomName('Element.getBoundingClientRect')
   @DocsEditable()
   Rectangle getBoundingClientRect() native;
 
   /**
-   * A list of bounding rectangles for each box associated with this element.
+   * Returns a list of bounding rectangles for each box associated with this
+   * element.
    *
    * ## Other resources
    *
@@ -11012,7 +11075,8 @@
    * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getClientRects)
    * from MDN.
    * * [The getClientRects() method]
-   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.
+   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)
+   * from W3C.
    */
   @DomName('Element.getClientRects')
   @DocsEditable()
@@ -11020,6 +11084,16 @@
   @Creates('_ClientRectList')
   List<Rectangle> getClientRects() native;
 
+  /**
+   * Returns a list of shadow DOM insertion points to which this element is
+   * distributed.
+   *
+   * ## Other resources
+   *
+   * * [Shadow DOM specification]
+   * (https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)
+   * from W3C.
+   */
   @DomName('Element.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
@@ -11027,6 +11101,17 @@
   @Creates('NodeList')
   List<Node> getDestinationInsertionPoints() native;
 
+  /**
+   * Returns a list of nodes with the given class name inside this element.
+   *
+   * ## Other resources
+   *
+   * * [getElementsByClassName]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName)
+   * from MDN.
+   * * [DOM specification]
+   * (http://www.w3.org/TR/domcore/) from W3C.
+   */
   @DomName('Element.getElementsByClassName')
   @DocsEditable()
   @Returns('NodeList')
@@ -11063,9 +11148,8 @@
    *     // Gets the first descendant [ImageElement]
    *     var img = element.querySelector('img');
    *
-   * See also:
-   *
-   * * [CSS Selectors](http://docs.webplatform.org/wiki/css/selectors)
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   @DomName('Element.querySelector')
   @DocsEditable()
@@ -11088,10 +11172,26 @@
   @DocsEditable()
   void _removeAttributeNS(String namespaceURI, String localName) native;
 
+  /**
+   * Scrolls the element by a number of lines.
+   *
+   * ## Other resources
+   *
+   * * [scrollByLines]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+   */
   @DomName('Element.scrollByLines')
   @DocsEditable()
   void scrollByLines(int lines) native;
 
+  /**
+   * Scrolls the element by a number of pages.
+   *
+   * ## Other resources
+   *
+   * * [scrollByPages]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+   */
   @DomName('Element.scrollByPages')
   @DocsEditable()
   void scrollByPages(int pages) native;
@@ -11117,6 +11217,17 @@
   void setAttributeNS(String namespaceURI, String qualifiedName, String value) native;
 
   @JSName('webkitGetRegionFlowRanges')
+  /**
+   * Returns an array of ranges of fragments in the flow.
+   *
+   * ## Other resources
+   *
+   * * [CSS regions and exclusions tutorial]
+   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+   * * [CSS regions specification]
+   * (http://www.w3.org/TR/css3-regions/) from W3C.
+   */
   @DomName('Element.webkitGetRegionFlowRanges')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11128,6 +11239,17 @@
   List<Range> getRegionFlowRanges() native;
 
   @JSName('webkitRequestFullscreen')
+  /**
+   * Displays this element fullscreen.
+   *
+   * ## Other resources
+   *
+   * * [Using the full-screen API]
+   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+   * tutorial from WebPlatform.org.
+   * * [Fullscreen specification]
+   * (http://www.w3.org/TR/fullscreen/) from W3C.
+   */
   @DomName('Element.webkitRequestFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11137,6 +11259,18 @@
   void requestFullscreen() native;
 
   @JSName('webkitRequestPointerLock')
+  /**
+   * Locks the mouse pointer to this element.
+   *
+   * ## Other resources
+   *
+   * * [Pointer lock and first person shooter controls]
+   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+   * HTML5Rocks.
+   *
+   * * [Pointer lock specification]
+   * (http://www.w3.org/TR/pointerlock/) from W3C.
+   */
   @DomName('Element.webkitRequestPointerLock')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -14369,6 +14503,22 @@
   @DocsEditable()
   final String statusText;
 
+  /**
+   * Length of time before a request is automatically terminated.
+   *
+   * When the time has passed, a [TimeoutEvent] is dispatched.
+   *
+   * If [timeout] is set to 0, then the request will not time out.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.timeout]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#timeout)
+   * from MDN.
+   * * [The timeout attribute]
+   * (http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
+   * from W3C.
+   */
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
@@ -14471,15 +14621,34 @@
    * `send` method is intended only for more complext HTTP requests where
    * finer-grained control is needed.
    *
-   * See also:
+   * ## Other resources
    *
-   *   * [send](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
+   * * [XMLHttpRequest.send]
+   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
    * from MDN.
    */
   @DomName('XMLHttpRequest.send')
   @DocsEditable()
   void send([data]) native;
 
+  /**
+   * Sets the value of an HTTP requst header.
+   *
+   * This method should be called after the request is opened, but before
+   * the request is sent.
+   *
+   * Multiple calls with the same header will combine all their values into a
+   * single header.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.setRequestHeader]
+   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
+   * from MDN.
+   * * [The setRequestHeader() method]
+   * (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method) from
+   * W3C.
+   */
   @DomName('XMLHttpRequest.setRequestHeader')
   @DocsEditable()
   void setRequestHeader(String header, String value) native;
@@ -19213,6 +19382,9 @@
   // Custom element created callback.
   Node._created() : super._created();
 
+  /**
+   * A modifiable list of this node's children.
+   */
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
   }
@@ -19339,16 +19511,43 @@
   @DocsEditable()
   final String _baseUri;
 
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
   @DomName('Node.childNodes')
   @DocsEditable()
   @Returns('NodeList')
   @Creates('NodeList')
   final List<Node> childNodes;
 
+  /**
+   * The first child of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.firstChild]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild)
+   * from MDN.
+   */
   @DomName('Node.firstChild')
   @DocsEditable()
   final Node firstChild;
 
+  /**
+   * The last child of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.lastChild]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild)
+   * from MDN.
+   */
   @DomName('Node.lastChild')
   @DocsEditable()
   final Node lastChild;
@@ -19364,41 +19563,147 @@
   final String _namespaceUri;
 
   @JSName('nextSibling')
+  /**
+   * The next sibling node.
+   *
+   * ## Other resources
+   *
+   * * [Node.nextSibling]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling)
+   * from MDN.
+   */
   @DomName('Node.nextSibling')
   @DocsEditable()
   final Node nextNode;
 
+  /**
+   * The name of this node.
+   *
+   * This varies by this node's [nodeType].
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeName]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeName)
+   * from MDN. This page contains a table of [nodeName] values for each
+   * [nodeType].
+   */
   @DomName('Node.nodeName')
   @DocsEditable()
   final String nodeName;
 
+  /**
+   * The type of node.
+   *
+   * This value is one of:
+   *
+   * * [ATTRIBUTE_NODE] if this node is an attribute.
+   * * [CDATA_SECTION_NODE] if this node is a [CDataSection].
+   * * [COMMENT_NODE] if this node is a [Comment].
+   * * [DOCUMENT_FRAGMENT_NODE] if this node is a [DocumentFragment].
+   * * [DOCUMENT_NODE] if this node is a [Document].
+   * * [DOCUMENT_TYPE_NODE] if this node is a [DocumentType] node.
+   * * [ELEMENT_NODE] if this node is an [Element].
+   * * [ENTITY_NODE] if this node is an entity.
+   * * [ENTITY_REFERENCE_NODE] if this node is an entity reference.
+   * * [NOTATION_NODE] if this node is a notation.
+   * * [PROCESSING_INSTRUCTION_NODE] if this node is a [ProcessingInstruction].
+   * * [TEXT_NODE] if this node is a [Text] node.
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeType]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType) from MDN.
+   */
   @DomName('Node.nodeType')
   @DocsEditable()
   final int nodeType;
 
+  /**
+   * The value of this node.
+   *
+   * This varies by this type's [nodeType].
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeValue]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue)
+   * from MDN. This page contains a table of [nodeValue] values for each
+   * [nodeType].
+   */
   @DomName('Node.nodeValue')
   @DocsEditable()
   final String nodeValue;
 
+  /**
+   * The document this node belongs to.
+   *
+   * Returns `null` if this node does not belong to any document.
+   *
+   * ## Other resources
+   *
+   * * [Node.ownerDocument]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument) from
+   * MDN.
+   */
   @DomName('Node.ownerDocument')
   @DocsEditable()
   final Document ownerDocument;
 
   @JSName('parentElement')
+  /**
+   * The parent element of this node.
+   *
+   * Returns `null` if this node either does not have a parent or its parent is
+   * not an element.
+   *
+   * ## Other resources
+   *
+   * * [Node.parentElement]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement) from
+   * W3C.
+   */
   @DomName('Node.parentElement')
   @DocsEditable()
   final Element parent;
 
+  /**
+   * The parent node of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.parentNode]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode) from
+   * MDN.
+   */
   @DomName('Node.parentNode')
   @DocsEditable()
   final Node parentNode;
 
   @JSName('previousSibling')
+  /**
+   * The previous sibling node.
+   *
+   * ## Other resources
+   *
+   * * [Node.previousSibling]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling)
+   * from MDN.
+   */
   @DomName('Node.previousSibling')
   @DocsEditable()
   final Node previousNode;
 
   @JSName('textContent')
+  /**
+   * All text within this node and its decendents.
+   *
+   * ## Other resources
+   *
+   * * [Node.textContent]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent) from
+   * MDN.
+   */
   @DomName('Node.textContent')
   @DocsEditable()
   String text;
@@ -19418,18 +19723,56 @@
   Node append(Node newChild) native;
 
   @JSName('cloneNode')
+  /**
+   * Returns a copy of this node.
+   *
+   * If [deep] is `true`, then all of this node's children and decendents are
+   * copied as well. If [deep] is `false`, then only this node is copied.
+   *
+   * ## Other resources
+   *
+   * * [Node.cloneNode]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode) from
+   * MDN.
+   */
   @DomName('Node.cloneNode')
   @DocsEditable()
   Node clone(bool deep) native;
 
+  /**
+   * Returns true if this node contains the specified node.
+   *
+   * ## Other resources
+   *
+   * * [Node.contains]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.contains) from MDN.
+   */
   @DomName('Node.contains')
   @DocsEditable()
   bool contains(Node other) native;
 
+  /**
+   * Returns true if this node has any children.
+   *
+   * ## Other resources
+   *
+   * * [Node.hasChildNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.hasChildNodes) from
+   * MDN.
+   */
   @DomName('Node.hasChildNodes')
   @DocsEditable()
   bool hasChildNodes() native;
 
+  /**
+   * Inserts all of the nodes into this node directly before refChild.
+   *
+   * ## Other resources
+   *
+   * * [Node.insertBefore]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore) from
+   * MDN.
+   */
   @DomName('Node.insertBefore')
   @DocsEditable()
   Node insertBefore(Node newChild, Node refChild) native;
@@ -26236,12 +26579,14 @@
  * Top-level container for the current browser tab or window.
  *
  * In a web browser, each window has a [Window] object, but within the context
- * of a script, a [Window] object represents only the current window. In
- * addition to the open window, each window, tab, and iframe has its own
- * [Window] object. A [Window] contains a [Document] object, which contains this
- * web page's content.
+ * of a script, this object represents only the current window.
+ * Each other window, tab, and iframe has its own [Window] object.
  *
- * Use `window` to access properties of the current window. For example:
+ * Each window contains a [Document] object, which contains all of the window's
+ * content.
+ *
+ * Use the top-level `window` object to access the current window.
+ * For example:
  *
  *     // Draw a scene when the window repaints.
  *     drawScene(num delta) {...}
@@ -26251,8 +26596,12 @@
  *     window.console.log('Jinkies!');
  *     window.console.error('Jeepers!');
  *
- * **Note:** This class represents the current window, whereas [WindowBase] is
- * a representation of any window, including other tabs, windows, and frames.
+ * **Note:** This class represents only the current window, while [WindowBase]
+ * is a representation of any window, including other tabs, windows, and frames.
+ *
+ * ## See also
+ *
+ * * [WindowBase]
  *
  * ## Other resources
  *
@@ -29678,32 +30027,40 @@
 
 
 /**
- * An object that can be drawn to a [CanvasRenderingContext2D] object with
- * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageToRect],
- * [CanvasRenderingContext2D.drawImageScaled], or
- * [CanvasRenderingContext2D.drawImageScaledFromSource].
+ * An object that can be drawn to a 2D canvas rendering context.
  *
- * If the CanvasImageSource is an [ImageElement] then the element's image is
- * used. If the [ImageElement] is an animated image, then the poster frame is
- * used. If there is no poster frame, then the first frame of animation is used.
+ * The image drawn to the canvas depends on the type of this object:
  *
- * If the CanvasImageSource is a [VideoElement] then the frame at the current
- * playback position is used as the image.
+ * * If this object is an [ImageElement], then this element's image is
+ * drawn to the canvas. If this element is an animated image, then this
+ * element's poster frame is drawn. If this element has no poster frame, then
+ * the first frame of animation is drawn.
  *
- * If the CanvasImageSource is a [CanvasElement] then the element's bitmap is
- * used.
+ * * If this object is a [VideoElement], then the frame at this element's current
+ * playback position is drawn to the canvas.
  *
- * ** Note: ** Currently, all versions of Internet Explorer do not support
- * drawing a VideoElement to a canvas. Also, you may experience problems drawing
+ * * If this object is a [CanvasElement], then this element's bitmap is drawn to
+ * the canvas.
+ *
+ * **Note:** Currently all versions of Internet Explorer do not support
+ * drawing a video element to a canvas. You may also encounter problems drawing
  * a video to a canvas in Firefox if the source of the video is a data URL.
  *
- * See also:
+ * ## See also
  *
- *  * [CanvasImageSource](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
- * from the WHATWG.
- *  * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
- * from the WHATWG.
+ * * [CanvasRenderingContext2D.drawImage]
+ * * [CanvasRenderingContext2D.drawImageToRect]
+ * * [CanvasRenderingContext2D.drawImageScaled]
+ * * [CanvasRenderingContext2D.drawImageScaledFromSource]
+ *
+ * ## Other resources
+ *
+ * * [Image sources for 2D rendering contexts]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
+ * from WHATWG.
+ * * [Drawing images]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
+ * from WHATWG.
  */
 abstract class CanvasImageSource {}
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29714,13 +30071,17 @@
 /**
  * Top-level container for a browser tab or window.
  *
- * In a web browser, a [WindowBase] object represents any browser window.  This
- * abstract class contains the state of the window and its relation to other
- * windows, such as which window opened it.
+ * In a web browser, a [WindowBase] object represents any browser window. This
+ * object contains the window's state and its relation to other
+ * windows, such as which window opened this window.
  *
- * **Note:** This class represents any window, whereas [Window] is
+ * **Note:** This class represents any window, while [Window] is
  * used to access the properties and content of the current window or tab.
  *
+ * ## See also
+ *
+ * * [Window]
+ *
  * ## Other resources
  *
  * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
@@ -33837,8 +34198,42 @@
 @Experimental()
 ElementList queryAll(String relativeSelectors) => document.queryAll(relativeSelectors);
 
-Element querySelector(String selector) => document.querySelector(selector);
-ElementList querySelectorAll(String selector) => document.querySelectorAll(selector);
+/**
+ * Finds the first descendant element of this document that matches the
+ * specified group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelector]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var element1 = document.querySelector('.className');
+ *     var element2 = document.querySelector('#id');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+Element querySelector(String selectors) => document.querySelector(selectors);
+
+/**
+ * Finds all descendant elements of this document that match the specified
+ * group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelectorAll]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var items = document.querySelectorAll('.itemClassName');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+ElementList querySelectorAll(String selectors) => document.querySelectorAll(selectors);
 // Copyright (c) 2013, 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/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 85ca975..c71a035 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -1519,12 +1519,30 @@
   // To suppress missing implicit constructor warnings.
   factory CanvasRenderingContext2D._() { throw new UnsupportedError("Not supported"); }
 
+  /**
+   * The current default path of this canvas context, if there is one.
+   *
+   * ## Other resources
+   *
+   * * [Current default path]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#current-default-path)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.currentPath')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
   @Experimental()
   Path get currentPath native "CanvasRenderingContext2D_currentPath_Getter";
 
+  /**
+   * The current default path of this canvas context, if there is one.
+   *
+   * ## Other resources
+   *
+   * * [Current default path]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#current-default-path)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.currentPath')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
@@ -1563,11 +1581,31 @@
   @DocsEditable()
   void set globalCompositeOperation(String value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
 
+  /**
+   * Whether images and patterns on this canvas will be smoothed when this
+   * canvas is scaled.
+   *
+   * ## Other resources
+   *
+   * * [Image smoothing]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-smoothing)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
   bool get imageSmoothingEnabled native "CanvasRenderingContext2D_imageSmoothingEnabled_Getter";
 
+  /**
+   * Whether images and patterns on this canvas will be smoothed when this
+   * canvas is scaled.
+   *
+   * ## Other resources
+   *
+   * * [Image smoothing]
+   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-smoothing)
+   * from WHATWG.
+   */
   @DomName('CanvasRenderingContext2D.imageSmoothingEnabled')
   @DocsEditable()
   @Experimental() // untriaged
@@ -1669,6 +1707,15 @@
   @DocsEditable()
   void set textBaseline(String value) native "CanvasRenderingContext2D_textBaseline_Setter";
 
+  /**
+   * The ratio between this canvas' backing store dimensions and the canvas'
+   * logical dimensions.
+   *
+   * ## Other resources
+   *
+   * * [High DPI Canvas tutorial]
+   * (http://www.html5rocks.com/en/tutorials/canvas/hidpi/) from HTML5Rocks.
+   */
   @DomName('CanvasRenderingContext2D.webkitBackingStorePixelRatio')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -7688,6 +7735,7 @@
    * save typing a few characters.
    *
    * [selectors] should be a string using CSS selector syntax.
+   *
    *     var element1 = document.querySelector('.className');
    *     var element2 = document.querySelector('#id');
    *
@@ -8034,6 +8082,7 @@
    * save typing a few characters.
    *
    * [selectors] should be a string using CSS selector syntax.
+   *
    *     var items = document.querySelectorAll('.itemClassName');
    *
    * For details about CSS selector syntax, see the
@@ -8117,6 +8166,17 @@
     children.addAll(copy);
   }
 
+  /**
+   * Finds all descendant elements of this document fragment that match the
+   * specified group of selectors.
+   *
+   * [selectors] should be a string using CSS selector syntax.
+   *
+   *     var items = document.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+   */
   ElementList querySelectorAll(String selectors) =>
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
 
@@ -8181,6 +8241,18 @@
   // To suppress missing implicit constructor warnings.
   factory DocumentFragment._() { throw new UnsupportedError("Not supported"); }
 
+  /**
+   * Finds the first descendant element of this document fragment that matches
+   * the specified group of selectors.
+   *
+   * [selectors] should be a string using CSS selector syntax.
+   *
+   *     var element1 = fragment.querySelector('.className');
+   *     var element2 = fragment.querySelector('#id');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+   */
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
   Element querySelector(String selectors) native "DocumentFragment_querySelector_Callback";
@@ -9847,6 +9919,9 @@
    * [selectors] should be a string using CSS selector syntax.
    *
    *     var items = element.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   @DomName('Element.querySelectorAll')
   ElementList querySelectorAll(String selectors) =>
@@ -10054,6 +10129,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**
@@ -11150,8 +11230,8 @@
   String getAttributeNS(String namespaceURI, String localName) native "Element_getAttributeNS_Callback";
 
   /**
-   * The smallest bounding rectangle that encompasses this element's padding,
-   * scrollbar, and border.
+   * Returns the smallest bounding rectangle that encompasses this element's
+   * padding, scrollbar, and border.
    *
    * ## Other resources
    *
@@ -11159,14 +11239,16 @@
    * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)
    * from MDN.
    * * [The getBoundingClientRect() method]
-   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.
+   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)
+   * from W3C.
    */
   @DomName('Element.getBoundingClientRect')
   @DocsEditable()
   Rectangle getBoundingClientRect() native "Element_getBoundingClientRect_Callback";
 
   /**
-   * A list of bounding rectangles for each box associated with this element.
+   * Returns a list of bounding rectangles for each box associated with this
+   * element.
    *
    * ## Other resources
    *
@@ -11174,17 +11256,39 @@
    * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getClientRects)
    * from MDN.
    * * [The getClientRects() method]
-   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.
+   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)
+   * from W3C.
    */
   @DomName('Element.getClientRects')
   @DocsEditable()
   List<Rectangle> getClientRects() native "Element_getClientRects_Callback";
 
+  /**
+   * Returns a list of shadow DOM insertion points to which this element is
+   * distributed.
+   *
+   * ## Other resources
+   *
+   * * [Shadow DOM specification]
+   * (https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)
+   * from W3C.
+   */
   @DomName('Element.getDestinationInsertionPoints')
   @DocsEditable()
   @Experimental() // untriaged
   List<Node> getDestinationInsertionPoints() native "Element_getDestinationInsertionPoints_Callback";
 
+  /**
+   * Returns a list of nodes with the given class name inside this element.
+   *
+   * ## Other resources
+   *
+   * * [getElementsByClassName]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName)
+   * from MDN.
+   * * [DOM specification]
+   * (http://www.w3.org/TR/domcore/) from W3C.
+   */
   @DomName('Element.getElementsByClassName')
   @DocsEditable()
   List<Node> getElementsByClassName(String name) native "Element_getElementsByClassName_Callback";
@@ -11214,9 +11318,8 @@
    *     // Gets the first descendant [ImageElement]
    *     var img = element.querySelector('img');
    *
-   * See also:
-   *
-   * * [CSS Selectors](http://docs.webplatform.org/wiki/css/selectors)
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   @DomName('Element.querySelector')
   @DocsEditable()
@@ -11234,10 +11337,26 @@
   @DocsEditable()
   void _removeAttributeNS(String namespaceURI, String localName) native "Element_removeAttributeNS_Callback";
 
+  /**
+   * Scrolls the element by a number of lines.
+   *
+   * ## Other resources
+   *
+   * * [scrollByLines]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+   */
   @DomName('Element.scrollByLines')
   @DocsEditable()
   void scrollByLines(int lines) native "Element_scrollByLines_Callback";
 
+  /**
+   * Scrolls the element by a number of pages.
+   *
+   * ## Other resources
+   *
+   * * [scrollByPages]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+   */
   @DomName('Element.scrollByPages')
   @DocsEditable()
   void scrollByPages(int pages) native "Element_scrollByPages_Callback";
@@ -11276,6 +11395,17 @@
   @DocsEditable()
   void setAttributeNS(String namespaceURI, String qualifiedName, String value) native "Element_setAttributeNS_Callback";
 
+  /**
+   * Returns an array of ranges of fragments in the flow.
+   *
+   * ## Other resources
+   *
+   * * [CSS regions and exclusions tutorial]
+   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+   * * [CSS regions specification]
+   * (http://www.w3.org/TR/css3-regions/) from W3C.
+   */
   @DomName('Element.webkitGetRegionFlowRanges')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11290,6 +11420,17 @@
   // http://dev.w3.org/2006/webapi/selectors-api2/#matches
   bool matches(String selectors) native "Element_webkitMatchesSelector_Callback";
 
+  /**
+   * Displays this element fullscreen.
+   *
+   * ## Other resources
+   *
+   * * [Using the full-screen API]
+   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+   * tutorial from WebPlatform.org.
+   * * [Fullscreen specification]
+   * (http://www.w3.org/TR/fullscreen/) from W3C.
+   */
   @DomName('Element.webkitRequestFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11298,6 +11439,18 @@
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-element-requestfullscreen
   void requestFullscreen() native "Element_webkitRequestFullscreen_Callback";
 
+  /**
+   * Locks the mouse pointer to this element.
+   *
+   * ## Other resources
+   *
+   * * [Pointer lock and first person shooter controls]
+   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+   * HTML5Rocks.
+   *
+   * * [Pointer lock specification]
+   * (http://www.w3.org/TR/pointerlock/) from W3C.
+   */
   @DomName('Element.webkitRequestPointerLock')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -14798,11 +14951,43 @@
   @DocsEditable()
   String get statusText native "XMLHttpRequest_statusText_Getter";
 
+  /**
+   * Length of time before a request is automatically terminated.
+   *
+   * When the time has passed, a [TimeoutEvent] is dispatched.
+   *
+   * If [timeout] is set to 0, then the request will not time out.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.timeout]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#timeout)
+   * from MDN.
+   * * [The timeout attribute]
+   * (http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
+   * from W3C.
+   */
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
   int get timeout native "XMLHttpRequest_timeout_Getter";
 
+  /**
+   * Length of time before a request is automatically terminated.
+   *
+   * When the time has passed, a [TimeoutEvent] is dispatched.
+   *
+   * If [timeout] is set to 0, then the request will not time out.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.timeout]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#timeout)
+   * from MDN.
+   * * [The timeout attribute]
+   * (http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)
+   * from W3C.
+   */
   @DomName('XMLHttpRequest.timeout')
   @DocsEditable()
   @Experimental() // untriaged
@@ -14915,15 +15100,34 @@
    * `send` method is intended only for more complext HTTP requests where
    * finer-grained control is needed.
    *
-   * See also:
+   * ## Other resources
    *
-   *   * [send](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
+   * * [XMLHttpRequest.send]
+   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
    * from MDN.
    */
   @DomName('XMLHttpRequest.send')
   @DocsEditable()
   void send([data]) native "XMLHttpRequest_send_Callback";
 
+  /**
+   * Sets the value of an HTTP requst header.
+   *
+   * This method should be called after the request is opened, but before
+   * the request is sent.
+   *
+   * Multiple calls with the same header will combine all their values into a
+   * single header.
+   *
+   * ## Other resources
+   *
+   * * [XMLHttpRequest.setRequestHeader]
+   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)
+   * from MDN.
+   * * [The setRequestHeader() method]
+   * (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method) from
+   * W3C.
+   */
   @DomName('XMLHttpRequest.setRequestHeader')
   @DocsEditable()
   void setRequestHeader(String header, String value) native "XMLHttpRequest_setRequestHeader_Callback";
@@ -20342,6 +20546,9 @@
   // Custom element created callback.
   Node._created() : super._created();
 
+  /**
+   * A modifiable list of this node's children.
+   */
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
   }
@@ -20467,14 +20674,41 @@
   @DocsEditable()
   String get _baseUri native "Node_baseURI_Getter";
 
+  /**
+   * A list of this node's children.
+   *
+   * ## Other resources
+   *
+   * * [Node.childNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)
+   * from MDN.
+   */
   @DomName('Node.childNodes')
   @DocsEditable()
   List<Node> get childNodes native "Node_childNodes_Getter";
 
+  /**
+   * The first child of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.firstChild]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild)
+   * from MDN.
+   */
   @DomName('Node.firstChild')
   @DocsEditable()
   Node get firstChild native "Node_firstChild_Getter";
 
+  /**
+   * The last child of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.lastChild]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild)
+   * from MDN.
+   */
   @DomName('Node.lastChild')
   @DocsEditable()
   Node get lastChild native "Node_lastChild_Getter";
@@ -20487,42 +20721,157 @@
   @DocsEditable()
   String get _namespaceUri native "Node_namespaceURI_Getter";
 
+  /**
+   * The next sibling node.
+   *
+   * ## Other resources
+   *
+   * * [Node.nextSibling]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling)
+   * from MDN.
+   */
   @DomName('Node.nextSibling')
   @DocsEditable()
   Node get nextNode native "Node_nextSibling_Getter";
 
+  /**
+   * The name of this node.
+   *
+   * This varies by this node's [nodeType].
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeName]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeName)
+   * from MDN. This page contains a table of [nodeName] values for each
+   * [nodeType].
+   */
   @DomName('Node.nodeName')
   @DocsEditable()
   String get nodeName native "Node_nodeName_Getter";
 
+  /**
+   * The type of node.
+   *
+   * This value is one of:
+   *
+   * * [ATTRIBUTE_NODE] if this node is an attribute.
+   * * [CDATA_SECTION_NODE] if this node is a [CDataSection].
+   * * [COMMENT_NODE] if this node is a [Comment].
+   * * [DOCUMENT_FRAGMENT_NODE] if this node is a [DocumentFragment].
+   * * [DOCUMENT_NODE] if this node is a [Document].
+   * * [DOCUMENT_TYPE_NODE] if this node is a [DocumentType] node.
+   * * [ELEMENT_NODE] if this node is an [Element].
+   * * [ENTITY_NODE] if this node is an entity.
+   * * [ENTITY_REFERENCE_NODE] if this node is an entity reference.
+   * * [NOTATION_NODE] if this node is a notation.
+   * * [PROCESSING_INSTRUCTION_NODE] if this node is a [ProcessingInstruction].
+   * * [TEXT_NODE] if this node is a [Text] node.
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeType]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType) from MDN.
+   */
   @DomName('Node.nodeType')
   @DocsEditable()
   int get nodeType native "Node_nodeType_Getter";
 
+  /**
+   * The value of this node.
+   *
+   * This varies by this type's [nodeType].
+   *
+   * ## Other resources
+   *
+   * * [Node.nodeValue]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue)
+   * from MDN. This page contains a table of [nodeValue] values for each
+   * [nodeType].
+   */
   @DomName('Node.nodeValue')
   @DocsEditable()
   String get nodeValue native "Node_nodeValue_Getter";
 
+  /**
+   * The document this node belongs to.
+   *
+   * Returns `null` if this node does not belong to any document.
+   *
+   * ## Other resources
+   *
+   * * [Node.ownerDocument]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument) from
+   * MDN.
+   */
   @DomName('Node.ownerDocument')
   @DocsEditable()
   Document get ownerDocument native "Node_ownerDocument_Getter";
 
+  /**
+   * The parent element of this node.
+   *
+   * Returns `null` if this node either does not have a parent or its parent is
+   * not an element.
+   *
+   * ## Other resources
+   *
+   * * [Node.parentElement]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement) from
+   * W3C.
+   */
   @DomName('Node.parentElement')
   @DocsEditable()
   Element get parent native "Node_parentElement_Getter";
 
+  /**
+   * The parent node of this node.
+   *
+   * ## Other resources
+   *
+   * * [Node.parentNode]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode) from
+   * MDN.
+   */
   @DomName('Node.parentNode')
   @DocsEditable()
   Node get parentNode native "Node_parentNode_Getter";
 
+  /**
+   * The previous sibling node.
+   *
+   * ## Other resources
+   *
+   * * [Node.previousSibling]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling)
+   * from MDN.
+   */
   @DomName('Node.previousSibling')
   @DocsEditable()
   Node get previousNode native "Node_previousSibling_Getter";
 
+  /**
+   * All text within this node and its decendents.
+   *
+   * ## Other resources
+   *
+   * * [Node.textContent]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent) from
+   * MDN.
+   */
   @DomName('Node.textContent')
   @DocsEditable()
   String get text native "Node_textContent_Getter";
 
+  /**
+   * All text within this node and its decendents.
+   *
+   * ## Other resources
+   *
+   * * [Node.textContent]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent) from
+   * MDN.
+   */
   @DomName('Node.textContent')
   @DocsEditable()
   void set text(String value) native "Node_textContent_Setter";
@@ -20540,18 +20889,56 @@
   @DocsEditable()
   Node append(Node newChild) native "Node_appendChild_Callback";
 
+  /**
+   * Returns a copy of this node.
+   *
+   * If [deep] is `true`, then all of this node's children and decendents are
+   * copied as well. If [deep] is `false`, then only this node is copied.
+   *
+   * ## Other resources
+   *
+   * * [Node.cloneNode]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode) from
+   * MDN.
+   */
   @DomName('Node.cloneNode')
   @DocsEditable()
   Node clone(bool deep) native "Node_cloneNode_Callback";
 
+  /**
+   * Returns true if this node contains the specified node.
+   *
+   * ## Other resources
+   *
+   * * [Node.contains]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.contains) from MDN.
+   */
   @DomName('Node.contains')
   @DocsEditable()
   bool contains(Node other) native "Node_contains_Callback";
 
+  /**
+   * Returns true if this node has any children.
+   *
+   * ## Other resources
+   *
+   * * [Node.hasChildNodes]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.hasChildNodes) from
+   * MDN.
+   */
   @DomName('Node.hasChildNodes')
   @DocsEditable()
   bool hasChildNodes() native "Node_hasChildNodes_Callback";
 
+  /**
+   * Inserts all of the nodes into this node directly before refChild.
+   *
+   * ## Other resources
+   *
+   * * [Node.insertBefore]
+   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore) from
+   * MDN.
+   */
   @DomName('Node.insertBefore')
   @DocsEditable()
   Node insertBefore(Node newChild, Node refChild) native "Node_insertBefore_Callback";
@@ -28017,12 +28404,14 @@
  * Top-level container for the current browser tab or window.
  *
  * In a web browser, each window has a [Window] object, but within the context
- * of a script, a [Window] object represents only the current window. In
- * addition to the open window, each window, tab, and iframe has its own
- * [Window] object. A [Window] contains a [Document] object, which contains this
- * web page's content.
+ * of a script, this object represents only the current window.
+ * Each other window, tab, and iframe has its own [Window] object.
  *
- * Use `window` to access properties of the current window. For example:
+ * Each window contains a [Document] object, which contains all of the window's
+ * content.
+ *
+ * Use the top-level `window` object to access the current window.
+ * For example:
  *
  *     // Draw a scene when the window repaints.
  *     drawScene(num delta) {...}
@@ -28032,8 +28421,12 @@
  *     window.console.log('Jinkies!');
  *     window.console.error('Jeepers!');
  *
- * **Note:** This class represents the current window, whereas [WindowBase] is
- * a representation of any window, including other tabs, windows, and frames.
+ * **Note:** This class represents only the current window, while [WindowBase]
+ * is a representation of any window, including other tabs, windows, and frames.
+ *
+ * ## See also
+ *
+ * * [WindowBase]
  *
  * ## Other resources
  *
@@ -31575,32 +31968,40 @@
 
 
 /**
- * An object that can be drawn to a [CanvasRenderingContext2D] object with
- * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageToRect],
- * [CanvasRenderingContext2D.drawImageScaled], or
- * [CanvasRenderingContext2D.drawImageScaledFromSource].
+ * An object that can be drawn to a 2D canvas rendering context.
  *
- * If the CanvasImageSource is an [ImageElement] then the element's image is
- * used. If the [ImageElement] is an animated image, then the poster frame is
- * used. If there is no poster frame, then the first frame of animation is used.
+ * The image drawn to the canvas depends on the type of this object:
  *
- * If the CanvasImageSource is a [VideoElement] then the frame at the current
- * playback position is used as the image.
+ * * If this object is an [ImageElement], then this element's image is
+ * drawn to the canvas. If this element is an animated image, then this
+ * element's poster frame is drawn. If this element has no poster frame, then
+ * the first frame of animation is drawn.
  *
- * If the CanvasImageSource is a [CanvasElement] then the element's bitmap is
- * used.
+ * * If this object is a [VideoElement], then the frame at this element's current
+ * playback position is drawn to the canvas.
  *
- * ** Note: ** Currently, all versions of Internet Explorer do not support
- * drawing a VideoElement to a canvas. Also, you may experience problems drawing
+ * * If this object is a [CanvasElement], then this element's bitmap is drawn to
+ * the canvas.
+ *
+ * **Note:** Currently all versions of Internet Explorer do not support
+ * drawing a video element to a canvas. You may also encounter problems drawing
  * a video to a canvas in Firefox if the source of the video is a data URL.
  *
- * See also:
+ * ## See also
  *
- *  * [CanvasImageSource](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
- * from the WHATWG.
- *  * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
- * from the WHATWG.
+ * * [CanvasRenderingContext2D.drawImage]
+ * * [CanvasRenderingContext2D.drawImageToRect]
+ * * [CanvasRenderingContext2D.drawImageScaled]
+ * * [CanvasRenderingContext2D.drawImageScaledFromSource]
+ *
+ * ## Other resources
+ *
+ * * [Image sources for 2D rendering contexts]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
+ * from WHATWG.
+ * * [Drawing images]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
+ * from WHATWG.
  */
 abstract class CanvasImageSource {}
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31611,13 +32012,17 @@
 /**
  * Top-level container for a browser tab or window.
  *
- * In a web browser, a [WindowBase] object represents any browser window.  This
- * abstract class contains the state of the window and its relation to other
- * windows, such as which window opened it.
+ * In a web browser, a [WindowBase] object represents any browser window. This
+ * object contains the window's state and its relation to other
+ * windows, such as which window opened this window.
  *
- * **Note:** This class represents any window, whereas [Window] is
+ * **Note:** This class represents any window, while [Window] is
  * used to access the properties and content of the current window or tab.
  *
+ * ## See also
+ *
+ * * [Window]
+ *
  * ## Other resources
  *
  * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
@@ -35449,8 +35854,42 @@
 @Experimental()
 ElementList queryAll(String relativeSelectors) => document.queryAll(relativeSelectors);
 
-Element querySelector(String selector) => document.querySelector(selector);
-ElementList querySelectorAll(String selector) => document.querySelectorAll(selector);
+/**
+ * Finds the first descendant element of this document that matches the
+ * specified group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelector]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var element1 = document.querySelector('.className');
+ *     var element2 = document.querySelector('#id');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+Element querySelector(String selectors) => document.querySelector(selectors);
+
+/**
+ * Finds all descendant elements of this document that match the specified
+ * group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelectorAll]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var items = document.querySelectorAll('.itemClassName');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+ElementList querySelectorAll(String selectors) => document.querySelectorAll(selectors);
 // Copyright (c) 2012, 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/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart
index fb3fbe4..79df03c 100644
--- a/sdk/lib/io/data_transformer.dart
+++ b/sdk/lib/io/data_transformer.dart
@@ -8,7 +8,7 @@
 /**
  * An instance of the default implementation of the [ZLibCodec].
  */
-const ZLIB = const ZLibCodec();
+const ZLibCodec ZLIB = const ZLibCodec();
 
 
 /**
@@ -45,7 +45,7 @@
 /**
  * An instance of the default implementation of the [GZipCodec].
  */
-const GZIP = const GZipCodec();
+const GZipCodec GZIP = const GZipCodec();
 
 
 /**
diff --git a/sdk/lib/io/http.dart b/sdk/lib/io/http.dart
index 2d31161..aa000ff 100644
--- a/sdk/lib/io/http.dart
+++ b/sdk/lib/io/http.dart
@@ -1537,7 +1537,7 @@
  * [HttpClientResponse] connection.
  */
 abstract class HttpConnectionInfo {
-  String get remoteHost;
+  InternetAddress get remoteAddress;
   int get remotePort;
   int get localPort;
 }
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 2fd3659..07ef4fe 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -2201,7 +2201,7 @@
     if (socket == null) return null;
     try {
       _HttpConnectionInfo info = new _HttpConnectionInfo();
-      info.remoteHost = socket.remoteHost;
+      info.remoteAddress = socket.remoteAddress;
       info.remotePort = socket.remotePort;
       info.localPort = socket.port;
       return info;
@@ -2209,7 +2209,7 @@
     return null;
   }
 
-  String remoteHost;
+  InternetAddress remoteAddress;
   int remotePort;
   int localPort;
 }
@@ -2268,7 +2268,7 @@
 
   InternetAddress get address => _socket.address;
 
-  String get remoteHost => _socket.remoteHost;
+  InternetAddress get remoteAddress => _socket.remoteAddress;
 
   int get remotePort => _socket.remotePort;
 
diff --git a/sdk/lib/io/platform.dart b/sdk/lib/io/platform.dart
index 16d0a1e..48bf58b 100644
--- a/sdk/lib/io/platform.dart
+++ b/sdk/lib/io/platform.dart
@@ -80,12 +80,20 @@
   static String get executable => _Platform.executable;
 
   /**
-   * Returns the URI of the script being run in this
-   * isolate. If the URI is relative it is relative to the file URI of
-   * the working directory of the VM when it was started.
+   * Returns the absolute URI of the script being run in this
+   * isolate.
+   *
+   * If the script argument on the command line is relative,
+   * it is resolved to an absolute URI before fetching the script, and
+   * this absolute URI is returned.
+   *
+   * URI resolution only does string manipulation on the script path, and this
+   * may be different from the file system's path resolution behavior. For
+   * example, a symbolic link immediately followed by '..' will not be
+   * looked up.
    *
    * If the executable environment does not support [script] an empty
-   * URI is returned.
+   * [Uri] is returned.
    */
   static Uri get script => _Platform.script;
 
diff --git a/sdk/lib/io/platform_impl.dart b/sdk/lib/io/platform_impl.dart
index 3e018a0..40fe2f0 100644
--- a/sdk/lib/io/platform_impl.dart
+++ b/sdk/lib/io/platform_impl.dart
@@ -27,7 +27,7 @@
         s.startsWith('file:')) {
       return Uri.parse(s);
     } else {
-      return new Uri.file(s);
+      return Uri.base.resolveUri(new Uri.file(s));
     }
   }
 
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
index 8ad69d3..7d8c685 100644
--- a/sdk/lib/io/secure_socket.dart
+++ b/sdk/lib/io/secure_socket.dart
@@ -603,7 +603,7 @@
 
   int get port => _socket.port;
 
-  String get remoteHost => _socket.remoteHost;
+  InternetAddress get remoteAddress => _socket.remoteAddress;
 
   int get remotePort => _socket.remotePort;
 
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index ce8ace5..f821d8b 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -381,9 +381,9 @@
   InternetAddress get address;
 
   /**
-   * Returns the remote host connected to by this socket.
+   * Returns the remote [InternetAddress] connected to by this socket.
    */
-  String get remoteHost;
+  InternetAddress get remoteAddress;
 
   /**
    * Closes the socket. Returns a Future that completes with [this] when the
@@ -427,9 +427,9 @@
 }
 
 /**
- * A high-level class for communicating over a TCP socket. 
+ * A high-level class for communicating over a TCP socket.
  *
- * The [Socket] exposes both a [Stream] and a [IOSink] interface, making it 
+ * The [Socket] exposes both a [Stream] and a [IOSink] interface, making it
  * ideal for using together with other [Stream]s.
  */
 abstract class Socket implements Stream<List<int>>, IOSink {
@@ -478,9 +478,9 @@
   InternetAddress get address;
 
   /**
-   * Returns the remote host connected to by this socket.
+   * Returns the remote [InternetAddress] connected to by this socket.
    */
-  String get remoteHost;
+  InternetAddress get remoteAddress;
 }
 
 
diff --git a/sdk/lib/io/string_transformer.dart b/sdk/lib/io/string_transformer.dart
index dafd2bd..091f0d6 100644
--- a/sdk/lib/io/string_transformer.dart
+++ b/sdk/lib/io/string_transformer.dart
@@ -4,7 +4,7 @@
 
 part of dart.io;
 
-const SYSTEM_ENCODING = const SystemEncoding();
+const SystemEncoding SYSTEM_ENCODING = const SystemEncoding();
 
 /**
  * The system encoding is the current code page on Windows and UTF-8 on
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index f7d1aed..6440bc4 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -98,10 +98,8 @@
    * is also possible to send object instances (which would be copied in the
    * process). This is currently only supported by the dartvm.  For now, the
    * dart2js compiler only supports the restricted messages described above.
-   *
-   * The second argument [replyTo] is deprecated and its value is ignored.
    */
-  void send(var message, [SendPort replyTo]);
+  void send(var message);
 
   /**
    * Tests whether [other] is a [SendPort] pointing to the same
diff --git a/sdk/lib/math/point.dart b/sdk/lib/math/point.dart
index 37411b7..6c731c1 100644
--- a/sdk/lib/math/point.dart
+++ b/sdk/lib/math/point.dart
@@ -10,7 +10,7 @@
   final T x;
   final T y;
 
-  const Point([T x = 0, T y = 0]): this.x = x, this.y = y;
+  const Point(T x, T y): this.x = x, this.y = y;
 
   String toString() => 'Point($x, $y)';
 
diff --git a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
index e354001..b52d22b 100644
--- a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
+++ b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
@@ -30,6 +30,11 @@
 }
 
 
+/**
+ * A sequence of bytes underlying a typed data object.
+ * Used to process large quantities of binary or numerical data
+ * more efficiently using a typed view.
+ */
 class ByteBuffer native "ArrayBuffer" {
   @JSName('byteLength')
   final int lengthInBytes;
@@ -47,17 +52,33 @@
         : function(x) { return x.length; };
 ''');
 
+/**
+ * A typed view of a sequence of bytes.
+ */
 class TypedData native "ArrayBufferView" {
+  /**
+   * Returns the byte buffer associated with this object.
+   */
   @Creates('ByteBuffer')
   @Returns('ByteBuffer|Null')
   final ByteBuffer buffer;
 
+  /**
+   * Returns the length of this view, in bytes.
+   */
   @JSName('byteLength')
   final int lengthInBytes;
 
+  /**
+   * Returns the offset in bytes into the underlying byte buffer of this view.
+   */
   @JSName('byteOffset')
   final int offsetInBytes;
 
+  /**
+   * Returns the number of bytes in the representation of each element in this
+   * list.
+   */
   @JSName('BYTES_PER_ELEMENT')
   final int elementSizeInBytes;
 
@@ -102,15 +123,58 @@
 }
 
 
+/**
+ * A fixed-length, random-access sequence of bytes that also provides random
+ * and unaligned access to the fixed-width integers and floating point
+ * numbers represented by those bytes.
+ * ByteData may be used to pack and unpack data from external sources
+ * (such as networks or files systems), and to process large quantities
+ * of numerical data more efficiently than would be possible
+ * with ordinary [List] implementations. ByteData can save space, by
+ * eliminating the need for object headers, and time, by eliminating the
+ * need for data copies. Finally, ByteData may be used to intentionally
+ * reinterpret the bytes representing one arithmetic type as another.
+ * For example this code fragment determine what 32-bit signed integer
+ * is represented by the bytes of a 32-bit floating point number:
+ *
+ *     var buffer = new Uint8List(8).buffer;
+ *     var bdata = new ByteData.view(buffer);
+ *     bdata.setFloat32(0, 3.04);
+ *     int huh = bdata.getInt32(0);
+ */
 class ByteData extends TypedData native "DataView" {
+  /**
+   * Creates a [ByteData] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory ByteData(int length) => _create1(length);
 
+  /**
+   * Creates an [ByteData] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [ByteData] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   */
   factory ByteData.view(ByteBuffer buffer,
                         [int byteOffset = 0, int byteLength]) =>
       byteLength == null
           ? _create2(buffer, byteOffset)
           : _create3(buffer, byteOffset, byteLength);
 
+  /**
+   * Returns the floating point number represented by the four bytes at
+   * the specified [byteOffset] in this object, in IEEE 754
+   * single-precision binary floating-point format (binary32).
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 4` is greater than the length of this object.
+   */
   num getFloat32(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getFloat32(byteOffset, endian._littleEndian);
 
@@ -118,6 +182,14 @@
   @Returns('num')
   num _getFloat32(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the floating point number represented by the eight bytes at
+   * the specified [byteOffset] in this object, in IEEE 754
+   * double-precision binary floating-point format (binary64).
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   num getFloat64(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getFloat64(byteOffset, endian._littleEndian);
 
@@ -125,6 +197,16 @@
   @Returns('num')
   num _getFloat64(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the (possibly negative) integer represented by the two bytes at
+   * the specified [byteOffset] in this object, in two's complement binary
+   * form.
+   * The return value will be between 2<sup>15</sup> and 2<sup>15</sup> - 1,
+   * inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 2` is greater than the length of this object.
+   */
   int getInt16(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getInt16(byteOffset, endian._littleEndian);
 
@@ -132,6 +214,16 @@
   @Returns('int')
   int _getInt16(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the (possibly negative) integer represented by the four bytes at
+   * the specified [byteOffset] in this object, in two's complement binary
+   * form.
+   * The return value will be between 2<sup>31</sup> and 2<sup>31</sup> - 1,
+   * inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 4` is greater than the length of this object.
+   */
   int getInt32(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getInt32(byteOffset, endian._littleEndian);
 
@@ -139,12 +231,39 @@
   @Returns('int')
   int _getInt32(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the (possibly negative) integer represented by the eight bytes at
+   * the specified [byteOffset] in this object, in two's complement binary
+   * form.
+   * The return value will be between 2<sup>63</sup> and 2<sup>63</sup> - 1,
+   * inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   int getInt64(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) {
     throw new UnsupportedError("Int64 accessor not supported by dart2js.");
   }
 
+  /**
+   * Returns the (possibly negative) integer represented by the byte at the
+   * specified [byteOffset] in this object, in two's complement binary
+   * representation. The return value will be between -128 and 127, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * greater than or equal to the length of this object.
+   */
   int getInt8(int byteOffset) native;
 
+  /**
+   * Returns the positive integer represented by the two bytes starting
+   * at the specified [byteOffset] in this object, in unsigned binary
+   * form.
+   * The return value will be between 0 and  2<sup>16</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 2` is greater than the length of this object.
+   */
   int getUint16(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getUint16(byteOffset, endian._littleEndian);
 
@@ -152,6 +271,13 @@
   @Returns('int')
   int _getUint16(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the positive integer represented by the four bytes starting
+   * at the specified [byteOffset] in this object, in unsigned binary
+   * form.
+   * The return value will be between 0 and  2<sup>32</sup> - 1, inclusive.
+   *
+   */
   int getUint32(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _getUint32(byteOffset, endian._littleEndian);
 
@@ -159,58 +285,172 @@
   @Returns('int')
   int _getUint32(int byteOffset, [bool littleEndian]) native;
 
+  /**
+   * Returns the positive integer represented by the eight bytes starting
+   * at the specified [byteOffset] in this object, in unsigned binary
+   * form.
+   * The return value will be between 0 and  2<sup>64</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   int getUint64(int byteOffset, [Endianness endian=Endianness.BIG_ENDIAN]) {
     throw new UnsupportedError("Uint64 accessor not supported by dart2js.");
   }
 
+  /**
+   * Returns the positive integer represented by the byte at the specified
+   * [byteOffset] in this object, in unsigned binary form. The
+   * return value will be between 0 and 255, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * greater than or equal to the length of this object.
+   */
   int getUint8(int byteOffset) native;
 
+  /**
+   * Sets the four bytes starting at the specified [byteOffset] in this
+   * object to the IEEE 754 single-precision binary floating-point
+   * (binary32) representation of the specified [value].
+   *
+   * **Note that this method can lose precision.** The input [value] is
+   * a 64-bit floating point value, which will be converted to 32-bit
+   * floating point value by IEEE 754 rounding rules before it is stored.
+   * If [value] cannot be represented exactly as a binary32, it will be
+   * converted to the nearest binary32 value.  If two binary32 values are
+   * equally close, the one whose least significant bit is zero will be used.
+   * Note that finite (but large) values can be converted to infinity, and
+   * small non-zero values can be converted to zero.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 4` is greater than the length of this object.
+   */
   void setFloat32(int byteOffset, num value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setFloat32(byteOffset, value, endian._littleEndian);
 
   @JSName('setFloat32')
   void _setFloat32(int byteOffset, num value, [bool littleEndian]) native;
 
+  /**
+   * Sets the eight bytes starting at the specified [byteOffset] in this
+   * object to the IEEE 754 double-precision binary floating-point
+   * (binary64) representation of the specified [value].
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   void setFloat64(int byteOffset, num value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setFloat64(byteOffset, value, endian._littleEndian);
 
   @JSName('setFloat64')
   void _setFloat64(int byteOffset, num value, [bool littleEndian]) native;
 
+  /**
+   * Sets the two bytes starting at the specified [byteOffset] in this
+   * object to the two's complement binary representation of the specified
+   * [value], which must fit in two bytes. In other words, [value] must lie
+   * between 2<sup>15</sup> and 2<sup>15</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 2` is greater than the length of this object.
+   */
   void setInt16(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setInt16(byteOffset, value, endian._littleEndian);
 
   @JSName('setInt16')
   void _setInt16(int byteOffset, int value, [bool littleEndian]) native;
 
+  /**
+   * Sets the four bytes starting at the specified [byteOffset] in this
+   * object to the two's complement binary representation of the specified
+   * [value], which must fit in four bytes. In other words, [value] must lie
+   * between 2<sup>31</sup> and 2<sup>31</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 4` is greater than the length of this object.
+   */
   void setInt32(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setInt32(byteOffset, value, endian._littleEndian);
 
   @JSName('setInt32')
   void _setInt32(int byteOffset, int value, [bool littleEndian]) native;
 
+  /**
+   * Sets the eight bytes starting at the specified [byteOffset] in this
+   * object to the two's complement binary representation of the specified
+   * [value], which must fit in eight bytes. In other words, [value] must lie
+   * between 2<sup>63</sup> and 2<sup>63</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   void setInt64(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) {
     throw new UnsupportedError("Int64 accessor not supported by dart2js.");
   }
 
+  /**
+   * Sets the byte at the specified [byteOffset] in this object to the
+   * two's complement binary representation of the specified [value], which
+   * must fit in a single byte. In other words, [value] must be between
+   * -128 and 127, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * greater than or equal to the length of this object.
+   */
   void setInt8(int byteOffset, int value) native;
 
+  /**
+   * Sets the two bytes starting at the specified [byteOffset] in this object
+   * to the unsigned binary representation of the specified [value],
+   * which must fit in two bytes. in other words, [value] must be between
+   * 0 and 2<sup>16</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 2` is greater than the length of this object.
+   */
   void setUint16(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setUint16(byteOffset, value, endian._littleEndian);
 
   @JSName('setUint16')
   void _setUint16(int byteOffset, int value, [bool littleEndian]) native;
 
+  /**
+   * Sets the four bytes starting at the specified [byteOffset] in this object
+   * to the unsigned binary representation of the specified [value],
+   * which must fit in four bytes. in other words, [value] must be between
+   * 0 and 2<sup>32</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 4` is greater than the length of this object.
+   */
   void setUint32(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) =>
       _setUint32(byteOffset, value, endian._littleEndian);
 
   @JSName('setUint32')
   void _setUint32(int byteOffset, int value, [bool littleEndian]) native;
 
+  /**
+   * Sets the eight bytes starting at the specified [byteOffset] in this object
+   * to the unsigned binary representation of the specified [value],
+   * which must fit in eight bytes. in other words, [value] must be between
+   * 0 and 2<sup>64</sup> - 1, inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative, or
+   * `byteOffset + 8` is greater than the length of this object.
+   */
   void setUint64(int byteOffset, int value, [Endianness endian=Endianness.BIG_ENDIAN]) {
     throw new UnsupportedError("Uint64 accessor not supported by dart2js.");
   }
 
+  /**
+   * Sets the byte at the specified [byteOffset] in this object to the
+   * unsigned binary representation of the specified [value], which must fit
+   * in a single byte. in other words, [value] must be between 0 and 255,
+   * inclusive.
+   *
+   * Throws [RangeError] if [byteOffset] is negative,
+   * or greater than or equal to the length of this object.
+   */
   void setUint8(int byteOffset, int value) native;
 
   static ByteData _create1(arg) =>
@@ -224,16 +464,44 @@
           .._setCachedLength();
 }
 
-
+/**
+ * A fixed-length list of IEEE 754 single-precision binary floating-point
+ * numbers  that is viewable as a [TypedData]. For long lists, this
+ * implementation can be considerably more space- and time-efficient than
+ * the default [List] implementation.
+ */
 class Float32List
     extends TypedData with ListMixin<double>, FixedLengthListMixin<double>
     implements JavaScriptIndexingBehavior, List<double>
     native "Float32Array" {
+  /**
+   * Creates a [Float32List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Float32List(int length) => _create1(length);
 
+  /**
+   * Creates a [Float32List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Float32List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Float32List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Float32List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Float32List.view(ByteBuffer buffer,
                            [int byteOffset = 0, int length]) =>
       length == null
@@ -274,15 +542,44 @@
 }
 
 
+/**
+ * A fixed-length list of IEEE 754 double-precision binary floating-point
+ * numbers  that is viewable as a [TypedData]. For long lists, this
+ * implementation can be considerably more space- and time-efficient than
+ * the default [List] implementation.
+ */
 class Float64List
     extends TypedData with ListMixin<double>, FixedLengthListMixin<double>
     implements JavaScriptIndexingBehavior, List<double>
     native "Float64Array" {
+  /**
+   * Creates a [Float64List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Float64List(int length) => _create1(length);
 
+  /**
+   * Creates a [Float64List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Float64List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Float64List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Float64List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Float64List.view(ByteBuffer buffer,
                            [int byteOffset = 0, int length]) =>
       length == null
@@ -326,15 +623,43 @@
 }
 
 
+/**
+ * A fixed-length list of 16-bit signed integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Int16List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
     native "Int16Array" {
+  /**
+   * Creates an [Int16List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Int16List(int length) => _create1(length);
 
+  /**
+   * Creates a [Int16List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Int16List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates an [Int16List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int16List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Int16List.view(ByteBuffer buffer, [int byteOffset = 0, int length]) =>
       length == null
           ? _create2(buffer, byteOffset)
@@ -373,15 +698,43 @@
 }
 
 
+/**
+ * A fixed-length list of 32-bit signed integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Int32List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
     native "Int32Array" {
+  /**
+   * Creates an [Int32List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Int32List(int length) => _create1(length);
 
+  /**
+   * Creates a [Int32List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Int32List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates an [Int32List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int32List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Int32List.view(ByteBuffer buffer, [int byteOffset = 0, int length]) =>
       length == null
           ? _create2(buffer, byteOffset)
@@ -420,15 +773,40 @@
 }
 
 
+/**
+ * A fixed-length list of 8-bit signed integers.
+ * For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Int8List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
     native "Int8Array" {
+  /**
+   * Creates an [Int8List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Int8List(int length) => _create1(length);
 
+  /**
+   * Creates a [Int8List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Int8List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates an [Int8List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int8List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   */
   factory Int8List.view(ByteBuffer buffer, [int byteOffset = 0, int length]) =>
       length == null
           ? _create2(buffer, byteOffset)
@@ -467,15 +845,43 @@
 }
 
 
+/**
+ * A fixed-length list of 16-bit unsigned integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Uint16List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
     native "Uint16Array" {
+  /**
+   * Creates a [Uint16List] of the specified length (in elements), all
+   * of whose elements are initially zero.
+   */
   factory Uint16List(int length) => _create1(length);
 
+  /**
+   * Creates a [Uint16List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Uint16List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Uint16List] _view_ of the specified region in
+   * the specified byte buffer. Changes in the [Uint16List] will be
+   * visible in the byte buffer and vice versa. If the [offsetInBytes] index
+   * of the region is not specified, it defaults to zero (the first byte in
+   * the byte buffer). If the length is not specified, it defaults to null,
+   * which indicates that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Uint16List.view(ByteBuffer buffer,
                           [int byteOffset = 0, int length]) =>
       length == null
@@ -515,15 +921,43 @@
 }
 
 
+/**
+ * A fixed-length list of 32-bit unsigned integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Uint32List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
     native "Uint32Array" {
+  /**
+   * Creates a [Uint32List] of the specified length (in elements), all
+   * of whose elements are initially zero.
+   */
   factory Uint32List(int length) => _create1(length);
 
+  /**
+   * Creates a [Uint32List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Uint32List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Uint32List] _view_ of the specified region in
+   * the specified byte buffer. Changes in the [Uint32] will be
+   * visible in the byte buffer and vice versa. If the [offsetInBytes] index
+   * of the region is not specified, it defaults to zero (the first byte in
+   * the byte buffer). If the length is not specified, it defaults to null,
+   * which indicates that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Uint32List.view(ByteBuffer buffer,
                           [int byteOffset = 0, int length]) =>
       length == null
@@ -563,14 +997,40 @@
 }
 
 
+/**
+ * A fixed-length list of 8-bit unsigned integers.
+ * For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ * Indexed store clamps the value to range 0..0xFF.
+ */
 class Uint8ClampedList extends TypedData with ListMixin<int>,
     FixedLengthListMixin<int> implements JavaScriptIndexingBehavior, List<int>
     native "Uint8ClampedArray,CanvasPixelArray" {
+  /**
+   * Creates a [Uint8ClampedList] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Uint8ClampedList(int length) => _create1(length);
 
+  /**
+   * Creates a [Uint8ClampedList] of the same size as the [elements]
+   * list and copies over the values clamping when needed.
+   */
   factory Uint8ClampedList.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Uint8ClampedList] _view_ of the specified region in the
+   * specified byte [buffer]. Changes in the [Uint8List] will be visible in the
+   * byte buffer and vice versa. If the [offsetInBytes] index of the region is
+   * not specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates that
+   * the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   */
   factory Uint8ClampedList.view(ByteBuffer buffer,
                                 [int byteOffset = 0, int length]) =>
       length == null
@@ -612,6 +1072,11 @@
 }
 
 
+/**
+ * A fixed-length list of 8-bit unsigned integers.
+ * For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Uint8List
     extends TypedData with ListMixin<int>, FixedLengthListMixin<int>
     implements JavaScriptIndexingBehavior, List<int>
@@ -620,11 +1085,31 @@
     // the potential for Uint8ClampedArray to 'accidentally' pick up the
     // dispatch record for Uint8List.
     native "Uint8Array,!nonleaf" {
+  /**
+   * Creates a [Uint8List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Uint8List(int length) => _create1(length);
 
+  /**
+   * Creates a [Uint8List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Uint8List.fromList(List<num> list) =>
       _create1(_ensureNativeList(list));
 
+  /**
+   * Creates a [Uint8List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Uint8List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   */
   factory Uint8List.view(ByteBuffer buffer,
                          [int byteOffset = 0, int length]) =>
       length == null
@@ -664,15 +1149,43 @@
 }
 
 
+/**
+ * A fixed-length list of 64-bit signed integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Int64List extends TypedData implements JavaScriptIndexingBehavior, List<int> {
+  /**
+   * Creates an [Int64List] of the specified length (in elements), all of
+   * whose elements are initially zero.
+   */
   factory Int64List(int length) {
     throw new UnsupportedError("Int64List not supported by dart2js.");
   }
 
+  /**
+   * Creates a [Int64List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Int64List.fromList(List<int> list) {
     throw new UnsupportedError("Int64List not supported by dart2js.");
   }
 
+  /**
+   * Creates an [Int64List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int64List] will be visible in the byte buffer
+   * and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates that
+   * the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Int64List.view(ByteBuffer buffer, [int byteOffset, int length]) {
     throw new UnsupportedError("Int64List not supported by dart2js.");
   }
@@ -681,15 +1194,44 @@
 }
 
 
+/**
+ * A fixed-length list of 64-bit unsigned integers that is viewable as a
+ * [TypedData]. For long lists, this implementation can be considerably
+ * more space- and time-efficient than the default [List] implementation.
+ */
 class Uint64List extends TypedData implements JavaScriptIndexingBehavior, List<int> {
+  /**
+   * Creates a [Uint64List] of the specified length (in elements), all
+   * of whose elements are initially zero.
+   */
   factory Uint64List(int length) {
     throw new UnsupportedError("Uint64List not supported by dart2js.");
   }
 
+  /**
+   * Creates a [Uint64List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Uint64List.fromList(List<int> list) {
     throw new UnsupportedError("Uint64List not supported by dart2js.");
   }
 
+  /**
+   * Creates an [Uint64List] _view_ of the specified region in
+   * the specified byte buffer. Changes in the [Uint64List] will be
+   * visible in the byte buffer and vice versa. If the [offsetInBytes]
+   * index of the region is not specified, it defaults to zero (the first
+   * byte in the byte buffer). If the length is not specified, it defaults
+   * to null, which indicates that the view extends to the end of the byte
+   * buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   factory Uint64List.view(ByteBuffer buffer, [int byteOffset, int length]) {
     throw new UnsupportedError("Uint64List not supported by dart2js.");
   }
@@ -698,6 +1240,11 @@
 }
 
 
+/**
+ * A fixed-length list of Float32x4 numbers that is viewable as a
+ * [TypedData]. For long lists, this implementation will be considerably more
+ * space- and time-efficient than the default [List] implementation.
+ */
 class Float32x4List
     extends Object with ListMixin<Float32x4>, FixedLengthListMixin<Float32x4>
     implements List<Float32x4>, TypedData {
@@ -738,6 +1285,10 @@
     return end;
   }
 
+  /**
+   * Creates a [Float32x4List] of the specified length (in elements),
+   * all of whose elements are initially zero.
+   */
   Float32x4List(int length) : _storage = new Float32List(length*4);
 
   Float32x4List._externalStorage(Float32List storage) : _storage = storage;
@@ -753,6 +1304,10 @@
     }
   }
 
+  /**
+   * Creates a [Float32x4List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
   factory Float32x4List.fromList(List<Float32x4> list) {
     if (list is Float32x4List) {
       Float32x4List nativeList = list as Float32x4List;
@@ -763,6 +1318,21 @@
     }
   }
 
+  /**
+   * Creates a [Float32x4List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Float32x4List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
   Float32x4List.view(ByteBuffer buffer,
                      [int byteOffset = 0, int length])
       : _storage = new Float32List.view(buffer, byteOffset, length);
@@ -795,9 +1365,14 @@
 }
 
 
-class Uint32x4List
-    extends Object with ListMixin<Uint32x4>, FixedLengthListMixin<Uint32x4>
-    implements List<Uint32x4>, TypedData {
+/**
+ * A fixed-length list of Int32x4 numbers that is viewable as a
+ * [TypedData]. For long lists, this implementation will be considerably more
+ * space- and time-efficient than the default [List] implementation.
+ */
+class Int32x4List
+    extends Object with ListMixin<Int32x4>, FixedLengthListMixin<Int32x4>
+    implements List<Int32x4>, TypedData {
 
   final Uint32List _storage;
 
@@ -835,11 +1410,15 @@
     return end;
   }
 
-  Uint32x4List(int length) : _storage = new Uint32List(length*4);
+  /**
+   * Creates a [Int32x4List] of the specified length (in elements),
+   * all of whose elements are initially zero.
+   */
+  Int32x4List(int length) : _storage = new Uint32List(length*4);
 
-  Uint32x4List._externalStorage(Uint32List storage) : _storage = storage;
+  Int32x4List._externalStorage(Uint32List storage) : _storage = storage;
 
-  Uint32x4List._slowFromList(List<Uint32x4> list)
+  Int32x4List._slowFromList(List<Int32x4> list)
       : _storage = new Uint32List(list.length * 4) {
     for (int i = 0; i < list.length; i++) {
       var e = list[i];
@@ -850,17 +1429,36 @@
     }
   }
 
-  factory Uint32x4List.fromList(List<Uint32x4> list) {
-    if (list is Uint32x4List) {
-      Uint32x4List nativeList = list as Uint32x4List;
-      return new Uint32x4List._externalStorage(
+  /**
+   * Creates a [Int32x4List] with the same size as the [elements] list
+   * and copies over the elements.
+   */
+  factory Int32x4List.fromList(List<Int32x4> list) {
+    if (list is Int32x4List) {
+      Int32x4List nativeList = list as Int32x4List;
+      return new Int32x4List._externalStorage(
           new Uint32List.fromList(nativeList._storage));
     } else {
-      return new Uint32x4List._slowFromList(list);
+      return new Int32x4List._slowFromList(list);
     }
   }
 
-  Uint32x4List.view(ByteBuffer buffer,
+  /**
+   * Creates a [Int32x4List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int32x4List] will be visible in the byte
+   * buffer and vice versa. If the [offsetInBytes] index of the region is not
+   * specified, it defaults to zero (the first byte in the byte buffer).
+   * If the length is not specified, it defaults to null, which indicates
+   * that the view extends to the end of the byte buffer.
+   *
+   * Throws [RangeError] if [offsetInBytes] or [length] are negative, or
+   * if [offsetInBytes] + ([length] * elementSizeInBytes) is greater than
+   * the length of [buffer].
+   *
+   * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
+   * BYTES_PER_ELEMENT.
+   */
+  Int32x4List.view(ByteBuffer buffer,
                      [int byteOffset = 0, int length])
       : _storage = new Uint32List.view(buffer, byteOffset, length);
 
@@ -868,16 +1466,16 @@
 
   int get length => _storage.length ~/ 4;
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     _checkIndex(index, length);
     int _x = _storage[(index*4)+0];
     int _y = _storage[(index*4)+1];
     int _z = _storage[(index*4)+2];
     int _w = _storage[(index*4)+3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     _checkIndex(index, length);
     _storage[(index*4)+0] = value._storage[0];
     _storage[(index*4)+1] = value._storage[1];
@@ -885,13 +1483,18 @@
     _storage[(index*4)+3] = value._storage[3];
   }
 
-  List<Uint32x4> sublist(int start, [int end]) {
+  List<Int32x4> sublist(int start, [int end]) {
     end = _checkSublistArguments(start, end, length);
-    return new Uint32x4List._externalStorage(_storage.sublist(start*4, end*4));
+    return new Int32x4List._externalStorage(_storage.sublist(start*4, end*4));
   }
 }
 
 
+/**
+ * Interface of Dart Float32x4 immutable value type and operations.
+ * Float32x4 stores 4 32-bit floating point values in "lanes".
+ * The lanes are "x", "y", "z", and "w" respectively.
+ */
 class Float32x4 {
   final _storage = new Float32List(4);
 
@@ -909,7 +1512,7 @@
   }
   Float32x4.zero();
   /// Returns a bit-wise copy of [x] as a Float32x4.
-  Float32x4.fromUint32x4Bits(Uint32x4 x) {
+  Float32x4.fromInt32x4Bits(Int32x4 x) {
     var view = new Float32List.view(x._storage.buffer);
     _storage[0] = view[0];
     _storage[1] = view[1];
@@ -963,72 +1566,72 @@
   }
 
   /// Relational less than.
-  Uint32x4 lessThan(Float32x4 other) {
+  Int32x4 lessThan(Float32x4 other) {
     bool _cx = _storage[0] < other._storage[0];
     bool _cy = _storage[1] < other._storage[1];
     bool _cz = _storage[2] < other._storage[2];
     bool _cw = _storage[3] < other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational less than or equal.
-  Uint32x4 lessThanOrEqual(Float32x4 other) {
+  Int32x4 lessThanOrEqual(Float32x4 other) {
     bool _cx = _storage[0] <= other._storage[0];
     bool _cy = _storage[1] <= other._storage[1];
     bool _cz = _storage[2] <= other._storage[2];
     bool _cw = _storage[3] <= other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational greater than.
-  Uint32x4 greaterThan(Float32x4 other) {
+  Int32x4 greaterThan(Float32x4 other) {
     bool _cx = _storage[0] > other._storage[0];
     bool _cy = _storage[1] > other._storage[1];
     bool _cz = _storage[2] > other._storage[2];
     bool _cw = _storage[3] > other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational greater than or equal.
-  Uint32x4 greaterThanOrEqual(Float32x4 other) {
+  Int32x4 greaterThanOrEqual(Float32x4 other) {
     bool _cx = _storage[0] >= other._storage[0];
     bool _cy = _storage[1] >= other._storage[1];
     bool _cz = _storage[2] >= other._storage[2];
     bool _cw = _storage[3] >= other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational equal.
-  Uint32x4 equal(Float32x4 other) {
+  Int32x4 equal(Float32x4 other) {
     bool _cx = _storage[0] == other._storage[0];
     bool _cy = _storage[1] == other._storage[1];
     bool _cz = _storage[2] == other._storage[2];
     bool _cw = _storage[3] == other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational not-equal.
-  Uint32x4 notEqual(Float32x4 other) {
+  Int32x4 notEqual(Float32x4 other) {
     bool _cx = _storage[0] != other._storage[0];
     bool _cy = _storage[1] != other._storage[1];
     bool _cz = _storage[2] != other._storage[2];
     bool _cw = _storage[3] != other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
@@ -1472,25 +2075,30 @@
 }
 
 
-class Uint32x4 {
-  final _storage = new Uint32List(4);
+/**
+ * Interface of Dart Int32x4 and operations.
+ * Int32x4 stores 4 32-bit bit-masks in "lanes".
+ * The lanes are "x", "y", "z", and "w" respectively.
+ */
+class Int32x4 {
+  final _storage = new Int32List(4);
 
-  Uint32x4(int x, int y, int z, int w) {
+  Int32x4(int x, int y, int z, int w) {
     _storage[0] = x;
     _storage[1] = y;
     _storage[2] = z;
     _storage[3] = w;
   }
 
-  Uint32x4.bool(bool x, bool y, bool z, bool w) {
+  Int32x4.bool(bool x, bool y, bool z, bool w) {
     _storage[0] = x == true ? 0xFFFFFFFF : 0x0;
     _storage[1] = y == true ? 0xFFFFFFFF : 0x0;
     _storage[2] = z == true ? 0xFFFFFFFF : 0x0;
     _storage[3] = w == true ? 0xFFFFFFFF : 0x0;
   }
 
-  /// Returns a bit-wise copy of [x] as a Uint32x4.
-  Uint32x4.fromFloat32x4Bits(Float32x4 x) {
+  /// Returns a bit-wise copy of [x] as a Int32x4.
+  Int32x4.fromFloat32x4Bits(Float32x4 x) {
     var view = new Uint32List.view(x._storage.buffer);
     _storage[0] = view[0];
     _storage[1] = view[1];
@@ -1499,34 +2107,34 @@
   }
 
   /// The bit-wise or operator.
-  Uint32x4 operator|(Uint32x4 other) {
+  Int32x4 operator|(Int32x4 other) {
     int _x = _storage[0] | other._storage[0];
     int _y = _storage[1] | other._storage[1];
     int _z = _storage[2] | other._storage[2];
     int _w = _storage[3] | other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// The bit-wise and operator.
-  Uint32x4 operator&(Uint32x4 other) {
+  Int32x4 operator&(Int32x4 other) {
     int _x = _storage[0] & other._storage[0];
     int _y = _storage[1] & other._storage[1];
     int _z = _storage[2] & other._storage[2];
     int _w = _storage[3] & other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// The bit-wise xor operator.
-  Uint32x4 operator^(Uint32x4 other) {
+  Int32x4 operator^(Int32x4 other) {
     int _x = _storage[0] ^ other._storage[0];
     int _y = _storage[1] ^ other._storage[1];
     int _z = _storage[2] ^ other._storage[2];
     int _w = _storage[3] ^ other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  Uint32x4 operator+(Uint32x4 other) {
-    var r = new Uint32x4(0, 0, 0, 0);
+  Int32x4 operator+(Int32x4 other) {
+    var r = new Int32x4(0, 0, 0, 0);
     r._storage[0] = (_storage[0] + other._storage[0]);
     r._storage[1] = (_storage[1] + other._storage[1]);
     r._storage[2] = (_storage[2] + other._storage[2]);
@@ -1534,8 +2142,8 @@
     return r;
   }
 
-  Uint32x4 operator-(Uint32x4 other) {
-    var r = new Uint32x4(0, 0, 0, 0);
+  Int32x4 operator-(Int32x4 other) {
+    var r = new Int32x4(0, 0, 0, 0);
     r._storage[0] = (_storage[0] - other._storage[0]);
     r._storage[1] = (_storage[1] - other._storage[1]);
     r._storage[2] = (_storage[2] - other._storage[2]);
@@ -1820,7 +2428,7 @@
   static const int WWWW = 0xFF;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
-  Uint32x4 shuffle(int mask) {
+  Int32x4 shuffle(int mask) {
     if ((mask < 0) || (mask > 255)) {
       throw new RangeError('mask $mask must be in the range [0..256)');
     }
@@ -1828,13 +2436,13 @@
     int _y = _storage[(mask >> 2) & 0x3];
     int _z = _storage[(mask >> 4) & 0x3];
     int _w = _storage[(mask >> 6) & 0x3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Shuffle the lane values in [this] and [other]. The returned
-  /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+  /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
   /// Uses the same [mask] as [shuffle].
-  Uint32x4 shuffleMix(Uint32x4 other, int mask) {
+  Int32x4 shuffleMix(Int32x4 other, int mask) {
     if ((mask < 0) || (mask > 255)) {
       throw new RangeError('mask $mask must be in the range [0..256)');
     }
@@ -1842,43 +2450,43 @@
     int _y = _storage[(mask >> 2) & 0x3];
     int _z = other._storage[(mask >> 4) & 0x3];
     int _w = other._storage[(mask >> 6) & 0x3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withX(int x) {
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withX(int x) {
     int _x = x;
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withY(int y) {
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withY(int y) {
     int _x = _storage[0];
     int _y = y;
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withZ(int z) {
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withZ(int z) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = z;
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withW(int w) {
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withW(int w) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = w;
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Extracted x value. Returns false for 0, true for any other value.
@@ -1890,48 +2498,48 @@
   /// Extracted w value. Returns false for 0, true for any other value.
   bool get flagW => _storage[3] != 0x0;
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withFlagX(bool x) {
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withFlagX(bool x) {
     int _x = x == true ? 0xFFFFFFFF : 0x0;
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withFlagY(bool y) {
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withFlagY(bool y) {
     int _x = _storage[0];
     int _y = y == true ? 0xFFFFFFFF : 0x0;
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withFlagZ(bool z) {
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withFlagZ(bool z) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = z == true ? 0xFFFFFFFF : 0x0;
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withFlagW(bool w) {
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withFlagW(bool w) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = w == true ? 0xFFFFFFFF : 0x0;
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
   /// Select bit from [trueValue] when bit in [this] is on.
   /// Select bit from [falseValue] when bit in [this] is off.
   Float32x4 select(Float32x4 trueValue, Float32x4 falseValue) {
-    var trueView = new Uint32List.view(trueValue._storage.buffer);
-    var falseView = new Uint32List.view(falseValue._storage.buffer);
+    var trueView = new Int32List.view(trueValue._storage.buffer);
+    var falseView = new Int32List.view(falseValue._storage.buffer);
     int cmx = _storage[0];
     int cmy = _storage[1];
     int cmz = _storage[2];
@@ -1949,7 +2557,7 @@
     int _z = (cmz & stz) | (~cmz & sfz);
     int _w = (cmw & stw) | (~cmw & sfw);
     var r = new Float32x4(0.0, 0.0, 0.0, 0.0);
-    var rView = new Uint32List.view(r._storage.buffer);
+    var rView = new Int32List.view(r._storage.buffer);
     rView[0] = _x;
     rView[1] = _y;
     rView[2] = _z;
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index d23d384..4464fea 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -827,26 +827,26 @@
 
 
 /**
- * A fixed-length list of Uint32x4 numbers that is viewable as a
+ * A fixed-length list of Int32x4 numbers that is viewable as a
  * [TypedData]. For long lists, this implementation will be considerably more
  * space- and time-efficient than the default [List] implementation.
  */
-abstract class Uint32x4List implements List<Uint32x4>, TypedData {
+abstract class Int32x4List implements List<Int32x4>, TypedData {
   /**
-   * Creates a [Uint32x4List] of the specified length (in elements),
+   * Creates a [Int32x4List] of the specified length (in elements),
    * all of whose elements are initially zero.
    */
-  external factory Uint32x4List(int length);
+  external factory Int32x4List(int length);
 
   /**
-   * Creates a [Uint32x4List] with the same size as the [elements] list
+   * Creates a [Int32x4List] with the same size as the [elements] list
    * and copies over the elements.
    */
-  external factory Uint32x4List.fromList(List<Uint32x4> elements);
+  external factory Int32x4List.fromList(List<Int32x4> elements);
 
   /**
-   * Creates a [Uint32x4List] _view_ of the specified region in the specified
-   * byte buffer. Changes in the [Uint32x4List] will be visible in the byte
+   * Creates a [Int32x4List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int32x4List] will be visible in the byte
    * buffer and vice versa. If the [offsetInBytes] index of the region is not
    * specified, it defaults to zero (the first byte in the byte buffer).
    * If the length is not specified, it defaults to null, which indicates
@@ -859,7 +859,7 @@
    * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
    * BYTES_PER_ELEMENT.
    */
-  external factory Uint32x4List.view(ByteBuffer buffer,
+  external factory Int32x4List.view(ByteBuffer buffer,
                                       [int offsetInBytes = 0, int length]);
 
   static const int BYTES_PER_ELEMENT = 16;
@@ -875,7 +875,7 @@
   external factory Float32x4(double x, double y, double z, double w);
   external factory Float32x4.splat(double v);
   external factory Float32x4.zero();
-  external factory Float32x4.fromUint32x4Bits(Uint32x4 x);
+  external factory Float32x4.fromInt32x4Bits(Int32x4 x);
 
   /// Addition operator.
   Float32x4 operator+(Float32x4 other);
@@ -889,17 +889,17 @@
   Float32x4 operator/(Float32x4 other);
 
   /// Relational less than.
-  Uint32x4 lessThan(Float32x4 other);
+  Int32x4 lessThan(Float32x4 other);
   /// Relational less than or equal.
-  Uint32x4 lessThanOrEqual(Float32x4 other);
+  Int32x4 lessThanOrEqual(Float32x4 other);
   /// Relational greater than.
-  Uint32x4 greaterThan(Float32x4 other);
+  Int32x4 greaterThan(Float32x4 other);
   /// Relational greater than or equal.
-  Uint32x4 greaterThanOrEqual(Float32x4 other);
+  Int32x4 greaterThanOrEqual(Float32x4 other);
   /// Relational equal.
-  Uint32x4 equal(Float32x4 other);
+  Int32x4 equal(Float32x4 other);
   /// Relational not-equal.
-  Uint32x4 notEqual(Float32x4 other);
+  Int32x4 notEqual(Float32x4 other);
 
   /// Returns a copy of [this] each lane being scaled by [s].
   Float32x4 scale(double s);
@@ -1214,25 +1214,25 @@
 
 
 /**
- * Interface of Dart Uint32x4 and operations.
- * Uint32x4 stores 4 32-bit bit-masks in "lanes".
+ * Interface of Dart Int32x4 and operations.
+ * Int32x4 stores 4 32-bit bit-masks in "lanes".
  * The lanes are "x", "y", "z", and "w" respectively.
  */
-abstract class Uint32x4 {
-  external factory Uint32x4(int x, int y, int z, int w);
-  external factory Uint32x4.bool(bool x, bool y, bool z, bool w);
-  external factory Uint32x4.fromFloat32x4Bits(Float32x4 x);
+abstract class Int32x4 {
+  external factory Int32x4(int x, int y, int z, int w);
+  external factory Int32x4.bool(bool x, bool y, bool z, bool w);
+  external factory Int32x4.fromFloat32x4Bits(Float32x4 x);
 
   /// The bit-wise or operator.
-  Uint32x4 operator|(Uint32x4 other);
+  Int32x4 operator|(Int32x4 other);
   /// The bit-wise and operator.
-  Uint32x4 operator&(Uint32x4 other);
+  Int32x4 operator&(Int32x4 other);
   /// The bit-wise xor operator.
-  Uint32x4 operator^(Uint32x4 other);
+  Int32x4 operator^(Int32x4 other);
   /// Addition operator.
-  Uint32x4 operator+(Uint32x4 other);
+  Int32x4 operator+(Int32x4 other);
   /// Subtraction operator.
-  Uint32x4 operator-(Uint32x4 other);
+  Int32x4 operator-(Int32x4 other);
 
   /// Extract 32-bit mask from x lane.
   int get x;
@@ -1505,21 +1505,21 @@
   static const int WWWW = 0xFF;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
-  Uint32x4 shuffle(int mask);
+  Int32x4 shuffle(int mask);
 
   /// Shuffle the lane values in [this] and [other]. The returned
-  /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+  /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
   /// Uses the same [mask] as [shuffle].
-  Uint32x4 shuffleMix(Uint32x4 other, int mask);
+  Int32x4 shuffleMix(Int32x4 other, int mask);
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withX(int x);
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withY(int y);
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withZ(int z);
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withW(int w);
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withX(int x);
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withY(int y);
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withZ(int z);
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withW(int w);
 
   /// Extracted x value. Returns false for 0, true for any other value.
   bool get flagX;
@@ -1530,14 +1530,14 @@
   /// Extracted w value. Returns false for 0, true for any other value.
   bool get flagW;
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withFlagX(bool x);
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withFlagY(bool y);
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withFlagZ(bool z);
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withFlagW(bool w);
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withFlagX(bool x);
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withFlagY(bool y);
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withFlagZ(bool z);
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withFlagW(bool w);
 
   /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
   /// Select bit from [trueValue] when bit in [this] is on.
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index 7bfc06b..08468cf 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -24,11 +24,7 @@
 Language/07_Classes/4_Abstract_Instance_Members_A07_t04: MissingStaticWarning
 
 # TBF: Static members should not be accessible via subclasses.
-Language/07_Classes/7_Static_Methods_A01_t03: MissingStaticWarning
 Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t05: MissingStaticWarning
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t02: MissingStaticWarning
-
-
 
 # co19 issue #442, undefined name "Expect"
 Language/15_Types/4_Interface_Types_A08_t03: fail, OK
@@ -265,8 +261,6 @@
 
 
 Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t02: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: MissingStaticWarning
 Language/12_Expressions/19_Conditional_A01_t14: MissingStaticWarning
 Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t10: MissingStaticWarning
 Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t11: MissingStaticWarning
@@ -298,9 +292,18 @@
 Language/05_Variables/05_Variables_A06_t01: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/05_Variables/05_Variables_A06_t02: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/05_Variables/05_Variables_A06_t03: MissingCompileTimeError # co19-roll r651: Please triage this failure
-Language/07_Classes/8_Static_Variables_A01_t01: MissingStaticWarning # co19-roll r651: Please triage this failure
-Language/12_Expressions/01_Constants_A20_t04: CompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t03: MissingStaticWarning # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t13: CompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t17: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t18: MissingCompileTimeError # co19-roll r651: Please triage this failure
+
+# co19 issue 656
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 812e0fb..f6dd40e 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -54,6 +54,8 @@
 
 
 [ $runtime == vm || $runtime == dartium || $compiler == dart2dart || $compiler == dart2js ]
+Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: fail # co19 issue 648
+
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t04: fail, pass, ok # co19 issue 634
 Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail, pass, ok # co19 issue 634
 Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail, pass, ok # co19 issue 634
@@ -73,7 +75,6 @@
 LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail, timeout # co19-roll r546: Please triage this failure
 
 Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # co19-roll r607: Please triage this failure
-Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
 LibTest/collection/LinkedList/forEach_A02_t01: RuntimeError # co19-roll r607: Please triage this failure
 LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError # co19-roll r607: Please triage this failure
 LibTest/core/Symbol/Symbol_A01_t04: RuntimeError # co19-roll r607: Please triage this failure
@@ -94,6 +95,8 @@
 
 
 [ $runtime == vm || $runtime == dartium || $compiler == dart2js ]
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: FAIL, OK # co19 issue 654
+
 LibTest/math/acos_A01_t01: PASS, FAIL, OK # co19 issue 44
 LibTest/math/asin_A01_t01: PASS, FAIL, OK # co19 issue 44
 LibTest/math/atan_A01_t01: PASS, FAIL, OK # co19 issue 44
@@ -268,6 +271,24 @@
 
 Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: MissingRuntimeError, OK # co19 issue 638
 
+[ $compiler == dart2js ]
+Language/10_Generics/10_Generics_A05_t01: Fail # Co19 issue 655
+Language/12_Expressions/32_Type_Test_A04_t01: Fail # Co19 issue 655
+Language/12_Expressions/32_Type_Test_A04_t02: Fail # Co19 issue 655
+Language/12_Expressions/33_Type_Cast_A03_t01: Fail # Co19 issue 655
+Language/12_Expressions/33_Type_Cast_A03_t03: Fail # Co19 issue 655
+Language/14_Libraries_and_Scripts/1_Imports_A03_t05: Fail # Co19 issue 655
+
+[ $compiler == dart2js && $unchecked ]
+Language/15_Types/1_Static_Types_A03_t01: Fail # Co19 issue 655
+
+[ $compiler == dart2js && $checked ]
+Language/10_Generics/10_Generics_A05_t02: Fail # Co19 issue 655
+Language/14_Libraries_and_Scripts/1_Imports_A03_t31: Fail # Co19 issue 655
+Language/15_Types/1_Static_Types_A03_t02: Fail # Co19 issue 655
+Language/15_Types/1_Static_Types_A03_t03: Fail # Co19 issue 655
+Language/15_Types/1_Static_Types_A03_t04: Fail # Co19 issue 655
+
 ### CHECKED MODE FAILURES ###
 
 [ ($runtime == vm || $runtime == dartium || $compiler == dart2js) && $checked]
@@ -275,7 +296,7 @@
 LibTest/collection/DoubleLinkedQueue/removeFirst_A01_t01: RuntimeError # co19-roll r607: Please triage this failure
 LibTest/collection/LinkedList/LinkedList_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
 LibTest/typed_data/Float32x4List/reduce_A01_t01: Fail # co19-roll r623: Please triage this failure
-LibTest/async/Future/catchError_A03_t05: RuntimeError # co19 issue 651.
+LibTest/async/Future/catchError_A03_t05: RuntimeError # co19-roll r641: Please triage this failure
 
 [ ($runtime == vm || $compiler == dart2js) && $checked]
 Language/14_Libraries_and_Scripts/1_Imports_A03_t46: PASS, FAIL, OK # co19 issue 560
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 5a7f031..0045ac0 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -10,6 +10,16 @@
 Language/07_Classes/07_Classes_A13_t08: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t09: Fail # Missing CT error on member with same name a type parameter
 
+Language/10_Generics/10_Generics_A05_t01: Fail # Issue 463
+Language/14_Libraries_and_Scripts/1_Imports_A03_t05: Fail # Issue 463
+Language/15_Types/1_Static_Types_A03_t01: Fail # Issue 463
+Language/12_Expressions/32_Type_Test_A04_t01: Fail # Issue 463
+Language/12_Expressions/32_Type_Test_A04_t02: Fail # Issue 463
+Language/12_Expressions/33_Type_Cast_A03_t01: Fail # Issue 463
+Language/12_Expressions/33_Type_Cast_A03_t03: Fail # Issue 463
+
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
+
 LibTest/async/Stream/Stream.periodic_A01_t01: Pass, Fail # Issue 12562.
 LibTest/core/Symbol/Symbol_A01_t02: CompileTimeError # co19-roll r607: Please triage this failure
 
@@ -72,6 +82,17 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
+
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # co19 issue 654
 
 
 [ $compiler == dart2dart && $system == windows ]
@@ -86,7 +107,6 @@
 LibTest/math/atan_A01_t01: Fail, OK # co19 issue 44
 
 [ $compiler == dart2dart ]
-Language/03_Overview/2_Privacy_A01_t06: Fail # co19 issue 463
 LibTest/core/double/ceil_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/ceil_A01_t04: Fail # truncate/ceil/floor/round returns ints, issue 389
 LibTest/core/double/floor_A01_t03: Fail # truncate/ceil/floor/round returns ints, issue 389
@@ -128,7 +148,6 @@
 Language/12_Expressions/22_Equality_A05_t01: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/27_Unary_Expressions_A01_t01: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/30_Identifier_Reference_A02_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/30_Identifier_Reference_A08_t02: fail # co19-roll r546: Please triage this failure
 Language/13_Statements/02_Expression_Statements_A01_t08: fail # co19-roll r546: Please triage this failure
 Language/13_Statements/06_For_A01_t11: fail # co19-roll r546: Please triage this failure
 Language/13_Statements/09_Switch_A01_t02: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 452137e..f9355da 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -14,6 +14,7 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
 Language/07_Classes/07_Classes_A13_t02: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t03: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t05: Fail # Missing CT error on member with same name a type parameter
@@ -59,6 +60,15 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
 
 [ $compiler == dart2js && $runtime != ie9 ]
 LibTest/typed_data/ByteData/ByteData_A02_t01: fail # co19-roll r576: Please triage this failure
@@ -264,9 +274,6 @@
 LibTest/core/Uri/Uri_A06_t03: Pass, Timeout # Issue 13511
 LibTest/math/cos_A01_t01: Fail # co19 issue 44
 
-[ $compiler == dart2js && $runtime == ie9 && $checked ]
-LibTest/async/Future/catchError_A03_t05: Pass, RuntimeError # Issue 14712
-
 #
 # The following tests are failing. Please add the error message
 # (either a compiler error or exception message). The error messages
@@ -275,8 +282,6 @@
 [ $compiler == dart2js ]
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: RuntimeError # compiler cancelled: cannot resolve type T
 
-Language/03_Overview/2_Privacy_A01_t06: RuntimeError # cannot resolve type _inaccessibleFuncType
-
 [ $compiler == dart2js && $jscl ]
 LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: RuntimeError # IllegalJSRegExpException: '\c(' 'SyntaxError: Invalid regular expression: /\c(/: Unterminated group'
 LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: RuntimeError # Expect.fail('Some exception expected')
@@ -517,9 +522,6 @@
 
 [ $compiler == dart2js && $checked ]
 Language/12_Expressions/03_Numbers_A05_t02: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t04: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/07_Maps_A10_t05: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/12_Instance_Creation/1_New_A12_t02: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/19_Conditional_A04_t03: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/20_Logical_Boolean_Expressions_A03_t01: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 5f96286..72af666 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -9,7 +9,6 @@
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Pass, Fail # Issue 13719: Please triage this failure.
 Language/12_Expressions/12_Spawning_an_Isolate_A01_t01: Fail # Issue 13921
 Language/14_Libraries_and_Scripts/3_Parts_A02_t02: Pass, Timeout # Issue 13719: Please triage this failure.
-Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # Issue 13719: Please triage this failure.
 Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: Pass # Issue 14478: This should break.
 LibTest/async/Completer/completeError_A02_t01: Pass, Fail # Issue 13719: Please triage this failure.
 LibTest/async/Future/Future_A01_t03: Fail # co19-roll r641: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 6915f46..bb615bd 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -4,7 +4,7 @@
 
 
 [ $compiler == none && ($runtime == vm || $runtime == dartium) && $unchecked]
-Language/12_Expressions/01_Constants_A16_t04: fail # Issue 392, passes in checked mode b/c of type check
+
 
 [ $compiler == none && ($runtime == vm || $runtime == dartium) ]
 Language/13_Statements/03_Variable_Declaration_A04_t01: Fail, MissingCompileTimeError # Issue 7052
@@ -27,13 +27,18 @@
 LibTest/core/RegExp/firstMatch_A01_t01: Fail # Issue 12508
 LibTest/core/int/toRadixString_A01_t01: Fail # co19 issue 492
 
-Language/03_Overview/2_Privacy_A01_t06: Fail # Issue 463
+Language/10_Generics/10_Generics_A05_t01: Fail # Issue 463
+Language/14_Libraries_and_Scripts/1_Imports_A03_t05: Fail # Issue 463
+Language/15_Types/1_Static_Types_A03_t01: Fail # Issue 463
+Language/12_Expressions/33_Type_Cast_A03_t01: Fail # Issue 463
+Language/12_Expressions/33_Type_Cast_A03_t03: Fail # Issue 463
+Language/12_Expressions/32_Type_Test_A04_t01: Fail # Issue 463
+Language/12_Expressions/32_Type_Test_A04_t02: Fail # Issue 463
 
 LibTest/async/Timer/Timer.periodic_A02_t01: Pass, Fail # co19 issue 537
 
 Language/05_Variables/05_Variables_A05_t01: fail # Dart issue 12539
 Language/05_Variables/05_Variables_A05_t02: fail # Dart issue 12539
-Language/12_Expressions/30_Identifier_Reference_A08_t02: fail # Dart issue 12593
 Language/13_Statements/06_For_A01_t11: fail # Dart issue 5675
 Language/13_Statements/09_Switch_A01_t02: fail # Dart issue 12908
 Language/13_Statements/12_Labels_A01_t03: fail # Dart issue 2238
@@ -62,6 +67,15 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
 
 [ $compiler == none && $runtime == vm ]
 LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # Issue 13398
@@ -97,6 +111,10 @@
 LibTest/core/Uri/Uri_A06_t03: Pass, Timeout # co19-roll r576: Please triage this failure
 
 [ $compiler == none && $checked && ($runtime == vm || $runtime == dartium) ]
+Language/10_Generics/10_Generics_A05_t02: Fail # Issue 463
+Language/15_Types/1_Static_Types_A03_t02: Fail # Issue 463
+Language/15_Types/1_Static_Types_A03_t03: Fail # Issue 463
+Language/15_Types/1_Static_Types_A03_t04: Fail # Issue 463
 Language/14_Libraries_and_Scripts/1_Imports_A03_t31: Fail # Issue 14006, discussion on-going
 LibTest/typed_data/Float32x4List/elementAt_A01_t01: Fail # Dart issue 12861
 LibTest/typed_data/Float32x4List/fillRange_A01_t01: Fail # Dart issue 12861
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 64ef727..30d7484 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -157,11 +157,7 @@
     case 'subtype': return new types.TypeMask.subtype(element);
     case 'nonNullSubtype': return new types.TypeMask.nonNullSubtype(element);
   }
-  Expect.fail('Unknown HType constructor $how');
-}
-
-ssa.HType findHType(compiler, String name, [String how = 'nonNullExact']) {
-  return new ssa.HType.fromMask(findTypeMask(compiler, name, how), compiler);
+  Expect.fail('Unknown TypeMask constructor $how');
 }
 
 String anyIdentifier = "[a-zA-Z][a-zA-Z0-9]*";
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 32a90c5..2160670 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -1351,9 +1351,9 @@
     final expectedGType = [result.num];
     result.checkNodeHasType('g', expectedGType);
     result.checkNodeHasType('gNull', maybe(expectedGType));
-    final expectedHType = [result.bool];
-    result.checkNodeHasType('h', expectedHType);
-    result.checkNodeHasType('hNull', maybe(expectedHType));
+    final expectedType = [result.bool];
+    result.checkNodeHasType('h', expectedType);
+    result.checkNodeHasType('hNull', maybe(expectedType));
     final expectedIType = [result.base('A'), result.base('B'),
                            result.base('BB'), result.base('C'),
                            result.base('D')];
diff --git a/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart b/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
index fd0c83f..e72f98a 100644
--- a/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
+++ b/tests/compiler/dart2js/mirror_helper_unique_minification_test.dart
@@ -15,7 +15,11 @@
 import
     '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart'
 show
-    Node;
+    Node, Identifier;
+import
+    '../../../sdk/lib/_internal/compiler/implementation/mirror_renamer/mirror_renamer.dart'
+show
+    MirrorRenamer;
 
 main() {
   testUniqueMinification();
diff --git a/tests/compiler/dart2js/mirror_system_helper.dart b/tests/compiler/dart2js/mirror_system_helper.dart
new file mode 100644
index 0000000..2776de6
--- /dev/null
+++ b/tests/compiler/dart2js/mirror_system_helper.dart
@@ -0,0 +1,139 @@
+// Copyright (c) 2013, 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 mirror_system_helper;

+

+import 'dart:async';

+import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';

+import '../../../sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart';

+import 'mock_compiler.dart';

+

+export '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';

+export '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart';

+

+const String SOURCE = 'source';

+final Uri SOURCE_URI = new Uri(scheme: SOURCE, path: SOURCE);

+

+// TODO(johnniwinther): Move this to a mirrors helper library.

+Future<MirrorSystem> createMirrorSystem(String source) {

+  MockCompiler compiler = new MockCompiler(

+      analyzeOnly: true,

+      analyzeAll: true,

+      preserveComments: true);

+    compiler.registerSource(SOURCE_URI, source);

+    compiler.librariesToAnalyzeWhenRun = <Uri>[SOURCE_URI];

+  return compiler.runCompiler(null).then((_) {

+    return new Dart2JsMirrorSystem(compiler);

+  });

+}

+

+/**

+ * Returns [:true:] if [type] is an instance of [:decl:] with type arguments

+ * equal to [typeArgument].

+ */

+bool isInstance(ClassMirror decl, List<TypeMirror> typeArguments,

+            ClassMirror type) {

+  if (type.isOriginalDeclaration) return false;

+  if (!isSameDeclaration(decl, type)) return false;

+  return areEqualsTypes(typeArguments, type.typeArguments);

+}

+

+/**

+ * Returns [:true:] if [type] is the same type as [expected]. This method

+ * equates a non-generic declaration with its instantiation.

+ */

+bool isEqualType(TypeMirror expected, TypeMirror type) {

+  if (expected == type) return true;

+  if (expected is ClassMirror && type is ClassMirror) {

+    if (!isSameDeclaration(expected, type)) return false;

+    if (expected.isOriginalDeclaration || expected.typeArguments.isEmpty) {

+      return type.isOriginalDeclaration || type.typeArguments.isEmpty;

+    }

+    return areEqualsTypes(expected.typeArguments, type.typeArguments);

+  }

+  return true;

+}

+

+/**

+ * Returns [:true:] if [types] are equals to [expected] using the equalitry

+ * defined by [isEqualType].

+ */

+bool areEqualsTypes(List<TypeMirror> expected, List<TypeMirror> types) {

+  return checkSameList(expected, types, isEqualType);

+}

+

+/**

+ * Returns [:true:] if an instance of [type] with type arguments equal to

+ * [typeArguments] is found in [types].

+ */

+bool containsType(ClassMirror decl, List<TypeMirror> typeArguments,

+                  Iterable<TypeMirror> types) {

+  return types.any((type) => isInstance(decl, typeArguments, type));

+}

+

+/**

+ * Returns the declaration of [type].

+ */

+TypeMirror toDeclaration(TypeMirror type) {

+  return type is ClassMirror ? type.originalDeclaration : type;

+}

+

+/**

+ * Returns [:true:] if [type] is of the same declaration as [expected].

+ */

+bool isSameDeclaration(TypeMirror expected, TypeMirror type) {

+  return toDeclaration(expected) == toDeclaration(type);

+}

+

+/**

+ * Returns [:true:] if a type of the declaration of [expected] is in [types].

+ */

+bool containsDeclaration(TypeMirror expected, Iterable<TypeMirror> types) {

+  for (var type in types) {

+    if (isSameDeclaration(expected, type)) {

+      return true;

+    }

+  }

+  return false;

+}

+

+/**

+ * Returns [:true:] if declarations of [expected] are the same as those of

+ * [types], taking order into account.

+ */

+bool isSameDeclarationList(Iterable<TypeMirror> expected,

+                           Iterable<TypeMirror> types) {

+  return checkSameList(expected, types, isSameDeclaration);

+}

+

+/**

+ * Returns [:true:] if declarations of [expected] are the same as those of

+ * [iterable], not taking order into account.

+ */

+bool isSameDeclarationSet(Iterable<TypeMirror> expected,

+                          Iterable<TypeMirror> types) {

+   Set<TypeMirror> expectedSet = expected.map(toDeclaration).toSet();

+   Set<TypeMirror> typesSet = types.map(toDeclaration).toSet();

+   return expectedSet.length == typesSet.length &&

+          expectedSet.containsAll(typesSet);

+}

+

+/**

+ * Utility method for checking whether [expected] and [iterable] contains the

+ * same elements with respect to the checking function [check], takin order

+ * into account.

+ */

+bool checkSameList(Iterable<TypeMirror> expected,

+                   Iterable<TypeMirror> types,

+                   bool check(TypeMirror a, TypeMirror b)) {

+  if (expected.length != types.length) return false;

+  Iterator<TypeMirror> expectedIterator = expected.iterator;

+  Iterator<TypeMirror> typesIterator = types.iterator;

+  while (expectedIterator.moveNext() && typesIterator.moveNext()) {

+    if (!check(expectedIterator.current, typesIterator.current)) {

+      return false;

+    }

+  }

+  return true;

+}

diff --git a/tests/compiler/dart2js/mirrors_metadata_test.dart b/tests/compiler/dart2js/mirrors_metadata_test.dart
index 1e3307c..66c2e41 100644
--- a/tests/compiler/dart2js/mirrors_metadata_test.dart
+++ b/tests/compiler/dart2js/mirrors_metadata_test.dart
@@ -3,29 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:expect/expect.dart';
-import 'dart:async';
 import "package:async_helper/async_helper.dart";
-import 'dart:io';
-import '../../../sdk/lib/_internal/compiler/implementation/filenames.dart';
-import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';
-import '../../../sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart';
-import '../../../sdk/lib/_internal/compiler/implementation/source_file_provider.dart';
-import 'mock_compiler.dart';
-
-const String SOURCE = 'source';
-Uri SOURCE_URI = new Uri(scheme: SOURCE, path: SOURCE);
-
-Future<MirrorSystem> createMirrorSystem(String source) {
-  MockCompiler compiler = new MockCompiler(
-      analyzeOnly: true,
-      analyzeAll: true,
-      preserveComments: true);
-    compiler.registerSource(SOURCE_URI, source);
-    compiler.librariesToAnalyzeWhenRun = <Uri>[SOURCE_URI];
-  return compiler.runCompiler(null).then((_) {
-    return new Dart2JsMirrorSystem(compiler);
-  });
-}
+import 'dart:async';
+import 'mirror_system_helper.dart';
 
 void validateDeclarationComment(String code,
                                 String text,
diff --git a/tests/compiler/dart2js/mirrors_mixin_test.dart b/tests/compiler/dart2js/mirrors_mixin_test.dart
new file mode 100644
index 0000000..1486851
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors_mixin_test.dart
@@ -0,0 +1,240 @@
+// Copyright (c) 2013, 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 mirrors_mixin_test;

+

+import 'package:expect/expect.dart';

+import 'package:async_helper/async_helper.dart';

+import 'mirror_system_helper.dart';

+

+const String CLASS_SOURCE = '''

+class A {}

+

+class S {}

+class M1<T> {}

+class M2 {}

+

+class C extends S with M1<A> {}

+class D extends S with M1, M2 {}

+class E extends S with M2, M1 implements A, M1 {}

+class E2 extends E {}

+

+class F = S with M1<A>;

+abstract class G = S with M1, M2;

+class H = S with M2, M1 implements A, M1;

+class H2 extends H {}

+''';

+

+void main() {

+  asyncTest(() => createMirrorSystem(CLASS_SOURCE).then((MirrorSystem mirrors) {

+    LibraryMirror library = mirrors.libraries[SOURCE_URI];

+

+    checkSimpleClass(var cls) {

+      Expect.isNotNull(cls);

+      Expect.isTrue(cls is ClassMirror);

+      Expect.isFalse(isMixinApplication(cls));

+      Expect.isFalse(cls.isNameSynthetic);

+      Expect.isFalse(cls.isObject);

+      Expect.isTrue(cls.superclass.isObject);

+      Expect.equals(0, cls.superinterfaces.length);

+

+      Expect.isTrue(getSuperclass(cls).isObject);

+      Expect.isTrue(getAppliedMixins(cls).isEmpty);

+      Expect.isTrue(getExplicitInterfaces(cls).isEmpty);

+    }

+

+    // class A {}

+    var A = library.classes['A'];

+    checkSimpleClass(A);

+

+    // class S {}

+    var S = library.classes['S'];

+    checkSimpleClass(S);

+

+    // class M1 {}

+    var M1 = library.classes['M1'];

+    checkSimpleClass(M1);

+

+    // class M2 {}

+    var M2 = library.classes['M2'];

+    checkSimpleClass(M2);

+

+    // class C extends S with M1<A> {}

+    var C = library.classes['C'];

+    Expect.isNotNull(C);

+    Expect.isTrue(C is ClassMirror);

+    Expect.isFalse(isMixinApplication(C));

+    Expect.isFalse(C.isObject);

+    Expect.equals(0, C.superinterfaces.length);

+    var C_super = C.superclass;

+    Expect.isNotNull(C_super);

+    Expect.isTrue(C_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(C_super));

+    Expect.isTrue(C_super.isNameSynthetic);

+    Expect.equals(1, C_super.superinterfaces.length);

+    Expect.isTrue(containsType(M1, [A], C_super.superinterfaces));

+    Expect.isTrue(isInstance(M1, [A], C_super.mixin));

+    Expect.isFalse(C_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, C_super.superclass));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(C)));

+    Expect.isTrue(isSameDeclarationList([M1], getAppliedMixins(C)));

+    Expect.isTrue(getExplicitInterfaces(C).isEmpty);

+

+    // D extends S with M1, M2 {}

+    var D = library.classes['D'];

+    Expect.isNotNull(D);

+    Expect.isTrue(D is ClassMirror);

+    Expect.isFalse(isMixinApplication(D));

+    Expect.isFalse(D.isObject);

+    Expect.equals(0, D.superinterfaces.length);

+    var D_super = D.superclass;

+    Expect.isNotNull(D_super);

+    Expect.isTrue(D_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(D_super));

+    Expect.isTrue(D_super.isNameSynthetic);

+    Expect.equals(1, D_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M2, D_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M2, D_super.mixin));

+    Expect.isFalse(D_super.isObject);

+    Expect.isFalse(isSameDeclaration(S, D_super.superclass));

+    var D_super_super = D_super.superclass;

+    Expect.isNotNull(D_super_super);

+    Expect.isTrue(D_super_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(D_super_super));

+    Expect.isTrue(D_super_super.isNameSynthetic);

+    Expect.equals(1, D_super_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M1, D_super_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M1, D_super_super.mixin));

+    Expect.isFalse(D_super_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, D_super_super.superclass));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(D)));

+    Expect.isTrue(isSameDeclarationList([M1, M2], getAppliedMixins(D)));

+    Expect.isTrue(getExplicitInterfaces(D).isEmpty);

+

+    // class E extends S with M2, M1 implements A, M1 {}

+    var E = library.classes['E'];

+    Expect.isNotNull(E);

+    Expect.isTrue(E is ClassMirror);

+    Expect.isFalse(isMixinApplication(E));

+    Expect.isFalse(E.isObject);

+    Expect.equals(2, E.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(A, E.superinterfaces));

+    Expect.isTrue(containsDeclaration(M1, E.superinterfaces));

+    var E_super = E.superclass;

+    Expect.isNotNull(E_super);

+    Expect.isTrue(E_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(E_super));

+    Expect.isTrue(E_super.isNameSynthetic);

+    Expect.equals(1, E_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M1, E_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M1, E_super.mixin));

+    Expect.isFalse(E_super.isObject);

+    Expect.isFalse(isSameDeclaration(S, E_super.superclass));

+    var E_super_super = E_super.superclass;

+    Expect.isNotNull(E_super_super);

+    Expect.isTrue(E_super_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(E_super_super));

+    Expect.isTrue(E_super_super.isNameSynthetic);

+    Expect.equals(1, E_super_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M2, E_super_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M2, E_super_super.mixin));

+    Expect.isFalse(E_super_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, E_super_super.superclass));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(E)));

+    Expect.isTrue(isSameDeclarationList([M2, M1], getAppliedMixins(E)));

+    Expect.isTrue(isSameDeclarationSet([A, M1], getExplicitInterfaces(E)));

+

+    // class E2 extends E {}

+    var E2 = library.classes['E2'];

+    Expect.isTrue(isSameDeclaration(E, getSuperclass(E2)));

+    Expect.isTrue(getAppliedMixins(E2).isEmpty);

+    Expect.isTrue(getExplicitInterfaces(E2).isEmpty);

+

+    // class F = S with M1<A>;

+    var F = library.classes['F'];

+    Expect.isNotNull(F);

+    Expect.isTrue(F is ClassMirror);

+    Expect.isFalse(F.isAbstract);

+    Expect.isTrue(isMixinApplication(F));

+    Expect.isFalse(F.isNameSynthetic);

+    Expect.equals('F', F.simpleName);

+    Expect.isFalse(F.isObject);

+    Expect.equals(1, F.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M1, F.superinterfaces));

+    Expect.isTrue(isInstance(M1, [A], F.mixin));

+    var F_super = F.superclass;

+    Expect.isNotNull(F_super);

+    Expect.isTrue(F_super is ClassMirror);

+    Expect.isFalse(isMixinApplication(F_super));

+    Expect.isFalse(F_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, F_super));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(F)));

+    Expect.isTrue(isSameDeclarationList([M1], getAppliedMixins(F)));

+    Expect.isTrue(getExplicitInterfaces(F).isEmpty);

+

+    // typedef G = abstract S with M1, M2;

+    var G = library.classes['G'];

+    Expect.isNotNull(G);

+    Expect.isTrue(G is ClassMirror);

+    Expect.isTrue(G.isAbstract);

+    Expect.isTrue(isMixinApplication(G));

+    Expect.isFalse(G.isNameSynthetic);

+    Expect.equals('G', G.simpleName);

+    Expect.isFalse(G.isObject);

+    Expect.equals(1, G.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M2, G.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M2, G.mixin));

+    var G_super = G.superclass;

+    Expect.isNotNull(G_super);

+    Expect.isTrue(G_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(G_super));

+    Expect.equals(1, G_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M1, G_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M1, G_super.mixin));

+    Expect.isFalse(G_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, G_super.superclass));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(G)));

+    Expect.isTrue(isSameDeclarationList([M1, M2], getAppliedMixins(G)));

+    Expect.isTrue(getExplicitInterfaces(G).isEmpty);

+

+    // typedef H = S with M2, M1 implements A, M1;

+    var H = library.classes['H'];

+    Expect.isNotNull(H);

+    Expect.isTrue(H is ClassMirror);

+    Expect.isFalse(H.isAbstract);

+    Expect.isTrue(isMixinApplication(H));

+    Expect.isFalse(H.isNameSynthetic);

+    Expect.equals('H', H.simpleName);

+    Expect.isFalse(H.isObject);

+    Expect.equals(3, H.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(A, H.superinterfaces));

+    Expect.isTrue(containsDeclaration(M1, H.superinterfaces));

+    Expect.isFalse(containsDeclaration(M2, H.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M1, H.mixin));

+    var H_super = H.superclass;

+    Expect.isNotNull(H_super);

+    Expect.isTrue(H_super is ClassMirror);

+    Expect.isTrue(isMixinApplication(H_super));

+    Expect.equals(1, H_super.superinterfaces.length);

+    Expect.isTrue(containsDeclaration(M2, H_super.superinterfaces));

+    Expect.isTrue(isSameDeclaration(M2, H_super.mixin));

+    Expect.isFalse(H_super.isObject);

+    Expect.isTrue(isSameDeclaration(S, H_super.superclass));

+

+    Expect.isTrue(isSameDeclaration(S, getSuperclass(H)));

+    Expect.isTrue(isSameDeclarationList([M2, M1], getAppliedMixins(H)));

+    Expect.isTrue(isSameDeclarationSet([A, M1], getExplicitInterfaces(H)));

+

+    // class H2 extends H {}

+    var H2 = library.classes['H2'];

+    Expect.isTrue(isSameDeclaration(H, getSuperclass(H2)));

+    Expect.isTrue(getAppliedMixins(H2).isEmpty);

+    Expect.isTrue(getExplicitInterfaces(H2).isEmpty);

+  }));

+}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 4acd9a2..f028c33 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -467,6 +467,7 @@
   Uri uri = new Uri(scheme: "source");
   var library = new LibraryElementX(new Script(uri, new MockFile(source)));
   importLibrary(library, compiler.coreLibrary, compiler);
+  library.setExports(<Element>[]);
   return library;
 }
 
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index cd09732..ada744d4 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -374,10 +374,10 @@
 
   rule(jsFixedArray, jsFixedArray, jsFixedArray);
 
-  check(nonPrimitive1, nullType, (type) => type is HBoundedType);
-  check(nonPrimitive2, nullType, (type) => type is HBoundedType);
-  check(nullType, nonPrimitive1, (type) => type.isNullable);
-  check(nullType, nonPrimitive2, (type) => type.isNullable);
+  check(nonPrimitive1, nullType, (type) => type == nonPrimitive1.nullable());
+  check(nonPrimitive2, nullType, (type) => type == nonPrimitive2.nullable());
+  check(nullType, nonPrimitive1, (type) => type == nonPrimitive1.nullable());
+  check(nullType, nonPrimitive2, (type) => type == nonPrimitive2.nullable());
 
   ruleSet.validateCoverage();
 }
diff --git a/tests/compiler/dart2js/union_type_test.dart b/tests/compiler/dart2js/union_type_test.dart
index 7cc13ba..984880f 100644
--- a/tests/compiler/dart2js/union_type_test.dart
+++ b/tests/compiler/dart2js/union_type_test.dart
@@ -10,7 +10,7 @@
 import "../../../sdk/lib/_internal/compiler/implementation/dart_types.dart";
 
 main() {
-  Compiler compiler = new MockCompiler();
+  MockCompiler compiler = new MockCompiler();
   compiler.intClass.ensureResolved(compiler);
   compiler.stringClass.ensureResolved(compiler);
 
diff --git a/tests/compiler/dart2js_extra/runtime_type_isolate.dart b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
index 75815b8..b1b9504 100644
--- a/tests/compiler/dart2js_extra/runtime_type_isolate.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
@@ -12,5 +12,5 @@
   port.receive((msg, reply) {
     Expect.equals(new Bar().runtimeType.toString(), 'Bar');
   });
-  port.toSendPort().send(null, null);
+  port.sendPort.send(null);
 }
diff --git a/tests/compiler/dart2js_native/subclassing_super_call_test.dart b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
new file mode 100644
index 0000000..f13a42e
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
@@ -0,0 +1,134 @@
+// Copyright (c) 2013, 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:expect/expect.dart";
+import 'dart:_foreign_helper' show JS;
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show
+    findInterceptorForType, findConstructorForNativeSubclassType;
+
+// Test for super access from classes that extend native classes.
+
+class N1 native "N1" {
+}
+
+class N2 extends N1 native "N2" {
+  N2.init();
+  String text;
+  foo() native;
+}
+
+class AA extends N2 {
+  AA.init() : super.init();
+  String afield;
+  afun() => 'afun:$afield';
+}
+
+class BB extends AA  {
+  BB.init() : super.init();
+
+  get text => super.text;
+  set text(value) => super.text = value;
+  foo() => super.foo();
+
+  get afield => super.afield;
+  set afield(value) => super.afield = value;
+  afun() => super.afun();
+}
+
+BB makeBB() native;
+
+@Creates('=Object')
+getBBPrototype() native;
+
+void setup() native r"""
+function N2() {}
+N2.prototype.foo = function() { return "foo:" + this.text; }
+function BB() {}
+BB.prototype.__proto__ = N2.prototype;
+makeBB = function(){return new BB;};
+
+getBBPrototype = function(){return BB.prototype;};
+""";
+
+var inscrutable;
+
+testSuperOnNative() {
+  BB b1 = makeBB();
+  BB b2 = makeBB();
+
+  var constructor = findConstructorForNativeSubclassType(BB, 'init');
+  Expect.isNotNull(constructor);
+  JS('', '#(#)', constructor, b1);
+  JS('', '#(#)', constructor, b2);
+
+  b1.text = inscrutable('one');
+  b2.text = inscrutable('two');
+
+  print('b1.text ${inscrutable(b1).text}');
+  print('b2.text ${inscrutable(b2).text}');
+
+  print('b1.foo() ${inscrutable(b1).foo()}');
+  print('b2.foo() ${inscrutable(b2).foo()}');
+
+  Expect.equals('one', b1.text);
+  Expect.equals('two', b2.text);
+
+  Expect.equals('foo:one', b1.foo());
+  Expect.equals('foo:two', b2.foo());
+
+  inscrutable(b1).text = inscrutable('three');
+  inscrutable(b2).text = inscrutable('four');
+
+  Expect.equals('three', inscrutable(b1).text);
+  Expect.equals('four', inscrutable(b2).text);
+
+  Expect.equals('foo:three', inscrutable(b1).foo());
+  Expect.equals('foo:four', inscrutable(b2).foo());
+}
+
+testSuperOnSubclassOfNative() {
+  BB b1 = makeBB();
+  BB b2 = makeBB();
+
+  var constructor = findConstructorForNativeSubclassType(BB, 'init');
+  Expect.isNotNull(constructor);
+  JS('', '#(#)', constructor, b1);
+  JS('', '#(#)', constructor, b2);
+
+  b1.afield = inscrutable('one');
+  b2.afield = inscrutable('two');
+
+  print('b1.afield ${inscrutable(b1).afield}');
+  print('b2.afield ${inscrutable(b2).afield}');
+
+  print('b1.afun() ${inscrutable(b1).afun()}');
+  print('b2.afun() ${inscrutable(b2).afun()}');
+
+  Expect.equals('one', b1.afield);
+  Expect.equals('two', b2.afield);
+
+  Expect.equals('afun:one', b1.afun());
+  Expect.equals('afun:two', b2.afun());
+
+
+  inscrutable(b1).afield = inscrutable('three');
+  inscrutable(b2).afield = inscrutable('four');
+
+  Expect.equals('three', inscrutable(b1).afield);
+  Expect.equals('four', inscrutable(b2).afield);
+
+  Expect.equals('afun:three', inscrutable(b1).afun());
+  Expect.equals('afun:four', inscrutable(b2).afun());
+}
+
+main() {
+  setup();
+  inscrutable = (x) => x;
+
+  setNativeSubclassDispatchRecord(getBBPrototype(), findInterceptorForType(BB));
+
+  testSuperOnNative();
+  testSuperOnSubclassOfNative();
+}
diff --git a/tests/corelib/collection_to_string_test.dart b/tests/corelib/collection_to_string_test.dart
index 97f25bc..2f3d4bd 100644
--- a/tests/corelib/collection_to_string_test.dart
+++ b/tests/corelib/collection_to_string_test.dart
@@ -241,8 +241,8 @@
         if (startIndex - start > MAX_LENGTH - 6) {  // Limit - ", ...)".length.
           String prefix = stringRep.toString().substring(0, startIndex);
           stringRep.clear();
-          stringRep.write(prefix);
-          stringRep.write(", ...");
+          stringRep.add(prefix);
+          stringRep.add(", ...");
         }
       }
     } else if (stringRep.length - start > MAX_LENGTH - 1) {  // 80 - ")".length.
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index f775363..cf4eb74 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -70,13 +70,12 @@
 double_round4_test: Fail, OK # IE bug: Math.round(4503599627370497) != 4503599627370497.
 double_round_to_double3_test: Fail, OK # IE bug: Math.round(4503599627370497) != 4503599627370497.
 collection_length_test: Pass, Timeout # Issue 12844
-date_time7_test: Fail # Issue 14717. Timezone name extraction fails.
 
 [ $runtime == opera ]
 core_runtime_types_test: Fail
 null_nosuchmethod_test: Fail # Issue: 7413
-date_time7_test: Fail # Issue 14691
-unicode_test: Fail # Issue 14694
+date_time7_test: Fail
+unicode_test: Fail
 
 [ $compiler == dart2js ]
 error_stack_trace1_test: RuntimeError # Issue 12399
@@ -94,6 +93,7 @@
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
 [ $compiler == dart2js && $runtime == ie9 ]
+date_time7_test: Fail # BUG(3304): Maybe this doesn't time out?
 string_base_vm_test: Fail # BUG(3304): Maybe this doesn't time out?
 list_test: Fail # IE doesn't support typed data.
 shuffle_test: Fail # IE doesn't support typed data.
@@ -107,10 +107,16 @@
 compare_to2_test: Fail # inherited from VM
 unicode_test: Fail # inherited from VM
 
+# Library changes
+[ $compiler == none || $compiler == dart2js || $compiler == dart2dart ]
+map_keys2_test: RuntimeError # Generic types aren't right.
+
 [ $compiler == dart2js ]
 map_values2_test: RuntimeError # Issue 8210
-iterable_to_list_test: RuntimeError # Issue 8210
-iterable_to_set_test: RuntimeError # Issue 8210
+
+## Tests failing after merge of experimental library branch.
+[ $compiler == dart2js ]
+# Tests fail due to bug in generics on constants, issue 6827
 
 [ $compiler == dart2dart && $minified ]
 error_stack_trace1_test: Fail # Fails in minified mode, test depends on method names.
@@ -147,8 +153,12 @@
 collection_to_string_test: Pass, Crash # Issue: 11207
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
-error_stack_trace_test: StaticWarning, OK # Test generates errors on purpose.
-iterable_element_at_test: StaticWarning, OK # Test generates errors on purpose.
-num_clamp_test: StaticWarning, OK # Test generates errors on purpose.
-queue_test: StaticWarning # Issue 12274.
-string_test: StaticWarning, OK # Test generates error on purpose.
+collection_to_string_test: StaticWarning
+error_stack_trace_test: StaticWarning
+iterable_element_at_test: StaticWarning
+iterable_test: StaticWarning
+list_map_test: StaticWarning
+num_clamp_test: StaticWarning
+queue_test: StaticWarning
+string_codeunits_test: StaticWarning
+string_test: StaticWarning
diff --git a/tests/corelib/iterable_test.dart b/tests/corelib/iterable_test.dart
index e7f6299..f99bba6 100644
--- a/tests/corelib/iterable_test.dart
+++ b/tests/corelib/iterable_test.dart
@@ -9,7 +9,7 @@
 
 import 'dart:collection';
 
-class MyIterable extends IterableBase {
+class MyIterable implements IterableBase {
   get iterator => [].iterator;
 }
 
diff --git a/tests/corelib/list_map_test.dart b/tests/corelib/list_map_test.dart
index 947f40a..8bd05eb 100644
--- a/tests/corelib/list_map_test.dart
+++ b/tests/corelib/list_map_test.dart
@@ -20,7 +20,7 @@
   // Function that reverses l and r lists when used to map.
   int rev(x) => 11 - x;
   // A base list that starts out like l, but isn't const.
-  List base = l.map((x) => x).toList();
+  Iterable base = l.map((x) => x).toList();
 
   Iterable reversed = l.map(rev);
 
diff --git a/tests/corelib/map_keys2_test.dart b/tests/corelib/map_keys2_test.dart
index d297c2d..8d623eb 100644
--- a/tests/corelib/map_keys2_test.dart
+++ b/tests/corelib/map_keys2_test.dart
@@ -15,16 +15,16 @@
   var map6 = new Map<String, bool>();
 
   Expect.isTrue(map1.keys is Iterable<String>);
-  Expect.isTrue(map1.keys is Iterable<bool>);
+  Expect.isFalse(map1.keys is Iterable<bool>);
 
   Expect.isTrue(map2.keys is Iterable<String>);
-  Expect.isTrue(map2.keys is Iterable<bool>);
+  Expect.isFalse(map2.keys is Iterable<bool>);
 
   Expect.isTrue(map3.keys is Iterable<String>);
-  Expect.isTrue(map3.keys is Iterable<bool>);
+  Expect.isFalse(map3.keys is Iterable<bool>);
 
   Expect.isTrue(map4.keys is Iterable<String>);
-  Expect.isTrue(map4.keys is Iterable<bool>);
+  Expect.isFalse(map4.keys is Iterable<bool>);
 
   Expect.isTrue(map5.keys is Iterable<String>);
   Expect.isFalse(map5.keys is Iterable<bool>);
diff --git a/tests/corelib/string_codeunits_test.dart b/tests/corelib/string_codeunits_test.dart
index 30b7f40..46db21f 100644
--- a/tests/corelib/string_codeunits_test.dart
+++ b/tests/corelib/string_codeunits_test.dart
@@ -6,7 +6,7 @@
 
 main() {
   test(String s) {
-    List<int> units = s.codeUnits;
+    Iterable<int> units = s.codeUnits;
     List<int> expectedUnits = <int>[];
     for (int i = 0; i < s.length; i++) {
       expectedUnits.add(s.codeUnitAt(i));
diff --git a/tests/html/custom/created_callback_test.dart b/tests/html/custom/created_callback_test.dart
index 3faa981..49845c1 100644
--- a/tests/html/custom/created_callback_test.dart
+++ b/tests/html/custom/created_callback_test.dart
@@ -215,7 +215,7 @@
     var child = upgradingContext.firstChild;
 
     expect(child.foo, 666);
-    expect(upgradingContextChild is HTMLElement, isTrue);
+    expect(upgradingContextChild is HtmlElement, isFalse);
     expect(upgradingContextChild is AccessWhileUpgradingElement, isFalse,
         reason: 'Elements accessed while upgrading should not be upgraded.');
   }
diff --git a/tests/html/html.status b/tests/html/html.status
index 946e119..0792441 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -409,7 +409,6 @@
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 audiocontext_test: StaticWarning
-custom/created_callback_test: StaticWarning
 custom/document_register_basic_test: StaticWarning
 datalistelement_test: StaticWarning
 documentfragment_test: StaticWarning
@@ -417,7 +416,6 @@
 element_test: StaticWarning
 events_test: StaticWarning
 htmlelement_test: StaticWarning
-isolates_test: StaticWarning
 localstorage_test: StaticWarning
 mutationobserver_test: StaticWarning
 track_element_constructor_test: StaticWarning
diff --git a/tests/html/isolates_test.dart b/tests/html/isolates_test.dart
index fe35c20..f0da5f0 100644
--- a/tests/html/isolates_test.dart
+++ b/tests/html/isolates_test.dart
@@ -1,6 +1,7 @@
 library IsolatesTest;
 import '../../pkg/unittest/lib/unittest.dart';
 import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:async';
 import 'dart:html';
 import 'dart:convert';
 import 'dart:isolate' as isolate;
diff --git a/tests/html/path_observer_test.dart b/tests/html/path_observer_test.dart
new file mode 100644
index 0000000..d6db89b
--- /dev/null
+++ b/tests/html/path_observer_test.dart
@@ -0,0 +1,255 @@
+// Copyright (c) 2013, 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:html' show PathObserver;
+import 'package:unittest/html_config.dart';
+import 'package:mdv_observe/mdv_observe.dart';
+import 'package:unittest/unittest.dart';
+
+// This file contains code ported from:
+// https://github.com/rafaelw/ChangeSummary/blob/master/tests/test.js
+
+main() {
+  useHtmlConfiguration();
+  group('PathObserver', observePathTests);
+}
+
+observePath(obj, path) => new PathObserver(obj, path);
+
+sym(x) => new Symbol(x);
+
+toSymbolMap(Map map) {
+  var result = new ObservableMap.linked();
+  map.forEach((key, value) {
+    if (value is Map) value = toSymbolMap(value);
+    result[new Symbol(key)] = value;
+  });
+  return result;
+}
+
+observePathTests() {
+
+  test('Degenerate Values', () {
+    expect(observePath(null, '').value, null);
+    expect(observePath(123, '').value, 123);
+    expect(observePath(123, 'foo.bar.baz').value, null);
+
+    // shouldn't throw:
+    observePath(123, '').values.listen((_) {}).cancel();
+    observePath(null, '').value = null;
+    observePath(123, '').value = 42;
+    observePath(123, 'foo.bar.baz').value = 42;
+
+    var foo = {};
+    expect(observePath(foo, '').value, foo);
+
+    foo = new Object();
+    expect(observePath(foo, '').value, foo);
+
+    expect(observePath(foo, 'a/3!').value, null);
+  });
+
+  test('get value at path ObservableBox', () {
+    var obj = new ObservableBox(new ObservableBox(new ObservableBox(1)));
+
+    expect(observePath(obj, '').value, obj);
+    expect(observePath(obj, 'value').value, obj.value);
+    expect(observePath(obj, 'value.value').value, obj.value.value);
+    expect(observePath(obj, 'value.value.value').value, 1);
+
+    obj.value.value.value = 2;
+    expect(observePath(obj, 'value.value.value').value, 2);
+
+    obj.value.value = new ObservableBox(3);
+    expect(observePath(obj, 'value.value.value').value, 3);
+
+    obj.value = new ObservableBox(4);
+    expect(observePath(obj, 'value.value.value').value, null);
+    expect(observePath(obj, 'value.value').value, 4);
+  });
+
+
+  test('get value at path ObservableMap', () {
+    var obj = toSymbolMap({'a': {'b': {'c': 1}}});
+
+    expect(observePath(obj, '').value, obj);
+    expect(observePath(obj, 'a').value, obj[sym('a')]);
+    expect(observePath(obj, 'a.b').value, obj[sym('a')][sym('b')]);
+    expect(observePath(obj, 'a.b.c').value, 1);
+
+    obj[sym('a')][sym('b')][sym('c')] = 2;
+    expect(observePath(obj, 'a.b.c').value, 2);
+
+    obj[sym('a')][sym('b')] = toSymbolMap({'c': 3});
+    expect(observePath(obj, 'a.b.c').value, 3);
+
+    obj[sym('a')] = toSymbolMap({'b': 4});
+    expect(observePath(obj, 'a.b.c').value, null);
+    expect(observePath(obj, 'a.b').value, 4);
+  });
+
+  test('set value at path', () {
+    var obj = toSymbolMap({});
+    observePath(obj, 'foo').value = 3;
+    expect(obj[sym('foo')], 3);
+
+    var bar = toSymbolMap({ 'baz': 3 });
+    observePath(obj, 'bar').value = bar;
+    expect(obj[sym('bar')], bar);
+
+    observePath(obj, 'bar.baz.bat').value = 'not here';
+    expect(observePath(obj, 'bar.baz.bat').value, null);
+  });
+
+  test('set value back to same', () {
+    var obj = toSymbolMap({});
+    var path = observePath(obj, 'foo');
+    var values = [];
+    path.values.listen((v) { values.add(v); });
+
+    path.value = 3;
+    expect(obj[sym('foo')], 3);
+    expect(path.value, 3);
+
+    observePath(obj, 'foo').value = 2;
+    deliverChangeRecords();
+    expect(path.value, 2);
+    expect(observePath(obj, 'foo').value, 2);
+
+    observePath(obj, 'foo').value = 3;
+    deliverChangeRecords();
+    expect(path.value, 3);
+
+    deliverChangeRecords();
+    expect(values, [2, 3]);
+  });
+
+  test('Observe and Unobserve - Paths', () {
+    var arr = toSymbolMap({});
+
+    arr[sym('foo')] = 'bar';
+    var fooValues = [];
+    var fooPath = observePath(arr, 'foo');
+    var fooSub = fooPath.values.listen((v) {
+      fooValues.add(v);
+    });
+    arr[sym('foo')] = 'baz';
+    arr[sym('bat')] = 'bag';
+    var batValues = [];
+    var batPath = observePath(arr, 'bat');
+    var batSub = batPath.values.listen((v) {
+      batValues.add(v);
+    });
+
+    deliverChangeRecords();
+    expect(fooValues, ['baz']);
+    expect(batValues, []);
+
+    arr[sym('foo')] = 'bar';
+    fooSub.cancel();
+    arr[sym('bat')] = 'boo';
+    batSub.cancel();
+    arr[sym('bat')] = 'boot';
+
+    deliverChangeRecords();
+    expect(fooValues, ['baz']);
+    expect(batValues, []);
+  });
+
+  test('Path Value With Indices', () {
+    var model = toObservable([]);
+    observePath(model, '0').values.listen(expectAsync1((v) {
+      expect(v, 123);
+    }));
+    model.add(123);
+  });
+
+  test('Path Observation', () {
+    var model = new TestModel(const Symbol('a'),
+        new TestModel(const Symbol('b'),
+            new TestModel(const Symbol('c'), 'hello, world')));
+
+    var path = observePath(model, 'a.b.c');
+    var lastValue = null;
+    var sub = path.values.listen((v) { lastValue = v; });
+
+    model.value.value.value = 'hello, mom';
+
+    expect(lastValue, null);
+    deliverChangeRecords();
+    expect(lastValue, 'hello, mom');
+
+    model.value.value = new TestModel(const Symbol('c'), 'hello, dad');
+    deliverChangeRecords();
+    expect(lastValue, 'hello, dad');
+
+    model.value = new TestModel(const Symbol('b'),
+        new TestModel(const Symbol('c'), 'hello, you'));
+    deliverChangeRecords();
+    expect(lastValue, 'hello, you');
+
+    model.value.value = 1;
+    deliverChangeRecords();
+    expect(lastValue, null);
+
+    // Stop observing
+    sub.cancel();
+
+    model.value.value = new TestModel(const Symbol('c'),
+        'hello, back again -- but not observing');
+    deliverChangeRecords();
+    expect(lastValue, null);
+
+    // Resume observing
+    sub = path.values.listen((v) { lastValue = v; });
+
+    model.value.value.value = 'hello. Back for reals';
+    deliverChangeRecords();
+    expect(lastValue, 'hello. Back for reals');
+  });
+
+  test('observe map', () {
+    var model = toSymbolMap({'a': 1});
+    var path = observePath(model, 'a');
+
+    var values = [path.value];
+    var sub = path.values.listen((v) { values.add(v); });
+    expect(values, [1]);
+
+    model[sym('a')] = 2;
+    deliverChangeRecords();
+    expect(values, [1, 2]);
+
+    sub.cancel();
+    model[sym('a')] = 3;
+    deliverChangeRecords();
+    expect(values, [1, 2]);
+  });
+}
+
+class TestModel extends ObservableBase {
+  final Symbol fieldName;
+  var _value;
+
+  TestModel(this.fieldName, [initialValue]) : _value = initialValue;
+
+  get value => _value;
+
+  void set value(newValue) {
+    _value = notifyPropertyChange(fieldName, _value, newValue);
+  }
+
+  getValueWorkaround(key) {
+    if (key == fieldName) return value;
+    return null;
+  }
+  void setValueWorkaround(key, newValue) {
+    if (key == fieldName) value = newValue;
+  }
+
+  toString() => '#<$runtimeType $fieldName: $_value>';
+}
+
+_record(key, oldValue, newValue, [kind = ChangeRecord.FIELD]) =>
+    new ChangeRecord(key, oldValue, newValue, kind: kind);
diff --git a/tests/html/typed_arrays_simd_test.dart b/tests/html/typed_arrays_simd_test.dart
index f75ad2a..b0e3176 100644
--- a/tests/html/typed_arrays_simd_test.dart
+++ b/tests/html/typed_arrays_simd_test.dart
@@ -37,8 +37,8 @@
 	expect(val2.x, floatEquals(2.0));
 	expect(val2.y, floatEquals(4.0));
 	expect(val2.z, floatEquals(6.0));
-	expect(val2.w, floatEquals(8.0));	
-      }	
+	expect(val2.w, floatEquals(8.0));
+      }
   });
 
   test('test Float32x4List', () {
@@ -68,9 +68,9 @@
       expect(counter.w, floatEquals(21.0));
   });
 
-  test('test Uint32x4', () {
+  test('test Int32x4', () {
       if (Platform.supportsSimd) {
-	final val = new Uint32x4(1, 2, 3, 4);
+	final val = new Int32x4(1, 2, 3, 4);
 	expect(val.x, equals(1));
 	expect(val.y, equals(2));
 	expect(val.z, equals(3));
@@ -79,7 +79,7 @@
 	expect(val2.x, equals(0));
 	expect(val2.y, equals(0));
 	expect(val2.z, equals(0));
-	expect(val2.w, equals(0));	
-      }	
+	expect(val2.w, equals(0));
+      }
   });
 }
diff --git a/tests/isolate/browser/typed_data_message_test.dart b/tests/isolate/browser/typed_data_message_test.dart
index e448390..9432290 100644
--- a/tests/isolate/browser/typed_data_message_test.dart
+++ b/tests/isolate/browser/typed_data_message_test.dart
@@ -66,7 +66,7 @@
     SendPort replyTo = message[1];
     if (data == -1) {
       port.close();
-      replyTo.send(count, null);
+      replyTo.send(count);
     } else {
       // Check if the received object is correct.
       if (count < elements.length) {
@@ -74,7 +74,7 @@
       }
       // Bounce the received object back so that the sender
       // can make sure that the object matches.
-      replyTo.send(data, null);
+      replyTo.send(data);
       count++;
     }
   });
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index fa6c738..a31db8c 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -15,7 +15,7 @@
 isolate2_negative_test: Fail
 isolate_import_negative_test: Fail
 unresolved_ports_test: Pass
-mandel_isolate_test: Fail # issue 14452
+mandel_isolate_test: StaticWarning  # test issue 14782; unittestConfiguration.timeout has only getter in Configuration
 
 [ $compiler == dart2js && $jscl ]
 browser/*: SkipByDesign  # Browser specific tests
@@ -123,11 +123,8 @@
 browser/typed_data_message_test: StaticWarning
 isolate3_negative_test: CompileTimeError
 isolate_import_negative_test: CompileTimeError
-isolate/mint_maker_test: StaticWarning
-isolate/unresolved_ports_test: StaticWarning
-mandel_isolate_stream_test: StaticWarning
-mandel_isolate_test: StaticWarning
 mint_maker_test: StaticWarning
 serialization_test: StaticWarning
-unresolved_ports_test: StaticWarning
+isolate/unresolved_ports_test: StaticWarning
+mandel_isolate_stream_test: StaticWarning
 
diff --git a/tests/isolate/isolate_complex_messages_test.dart b/tests/isolate/isolate_complex_messages_test.dart
index effeffe..3a18ec5 100644
--- a/tests/isolate/isolate_complex_messages_test.dart
+++ b/tests/isolate/isolate_complex_messages_test.dart
@@ -18,12 +18,12 @@
       switch (msg[0]) {
         case "init":
           var remote = msg[1];
-          remote.send(1, null);
-          remote.send("Hello", null);
-          remote.send("World", null);
-          remote.send(const [null, 1, 2, 3, 4], null);
-          remote.send(const [1, 2.0, true, false, 0xffffffffff], null);
-          remote.send(const ["Hello", "World", 0xffffffffff], null);
+          remote.send(1);
+          remote.send("Hello");
+          remote.send("World");
+          remote.send(const [null, 1, 2, 3, 4]);
+          remote.send(const [1, 2.0, true, false, 0xffffffffff]);
+          remote.send(const ["Hello", "World", 0xffffffffff]);
           // Shutdown the LogRunner.
           remote.send(-1);
           break;
diff --git a/tests/language/block_scope_test.dart b/tests/language/block_scope_test.dart
deleted file mode 100644
index cc19981..0000000
--- a/tests/language/block_scope_test.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2011, 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:expect/expect.dart";
-
-foo() => 123;
-
-void testShadowingScope1() {
-  var foo = foo();
-  Expect.equals(123, foo);
-}
-
-void testShadowingScope2() {
-  {
-    var foo = foo() + 444;
-    Expect.equals(567, foo);
-  }
-  Expect.equals(123, foo());
-}
-
-void testShadowingCapture1() {
-  var f;
-  {
-    var foo = 888;
-    f = () => foo;
-  }
-  var foo = -888;
-  Expect.equals(888, f());
-}
-
-void testShadowingCapture2() {
-  var f = null;
-  // this one uses a reentrant block
-  for (int i = 0; i < 2; i++) {
-    var foo = i + 888;
-    if (f == null) f = () => foo;
-  }
-  var foo = -888;
-
-  // this could break if it doesn't bind the right "foo"
-  Expect.equals(888, f());
-}
-
-class BlockScopeTest1 {
-  void testShadowingInstanceVar() {
-    if (true) {
-      var foo = foo() + 444;
-      Expect.equals(1221, foo);
-    }
-    Expect.equals(777, foo());
-  }
-  static void testShadowingStatic() {
-    if (true) {
-      var bar = bar() + 444;
-      Expect.equals(1221, bar);
-    }
-    Expect.equals(777, bar());
-  }
-
-  foo() => 777;
-  static bar() => 777;
-}
-
-main() {
-  testShadowingScope1();
-  testShadowingScope2();
-  testShadowingCapture1();
-  testShadowingCapture2();
-  new BlockScopeTest1().testShadowingInstanceVar();
-  BlockScopeTest1.testShadowingStatic();
-}
diff --git a/tests/language/class_override_test.dart b/tests/language/class_override_test.dart
index 214a08d..190604b 100644
--- a/tests/language/class_override_test.dart
+++ b/tests/language/class_override_test.dart
@@ -17,7 +17,7 @@
   B instance = new B();
   try {
     instance.foo();
-  } on NoSuchMethodEror catch (error) {  /// 00: continued
+  } on NoSuchMethodError catch (error) {  /// 00: continued
   } finally {
   }
   print("Success");
diff --git a/tests/language/div_with_power_of_two2_test.dart b/tests/language/div_with_power_of_two2_test.dart
index 936aadf..03a83ca 100644
--- a/tests/language/div_with_power_of_two2_test.dart
+++ b/tests/language/div_with_power_of_two2_test.dart
@@ -100,6 +100,6 @@
     }
      Expect.throws(() => divBy0(4),
                   (e) => e is IntegerDivisionByZeroException
-                         || e is RuntimeError);
+                         || e is UnsupportedError);
   }
 }
diff --git a/tests/language/dynamic_prefix_core_test.dart b/tests/language/dynamic_prefix_core_test.dart
index 1aba87f..4a5362a 100644
--- a/tests/language/dynamic_prefix_core_test.dart
+++ b/tests/language/dynamic_prefix_core_test.dart
@@ -9,9 +9,9 @@
 
 void main() {
   // Should still be available because it is not a member of dart:core.
-  Expect.isTrue(dynamic is Type);
-  
-  Expect.throws(() => mycore.dynamic is Type,
-                (e) => e is NoSuchMethodError,
+  Expect.isTrue(dynamic is mycore.Type);
+
+  Expect.throws(() => mycore.dynamic is mycore.Type,
+                (e) => e is mycore.NoSuchMethodError,
                 'dynamic is not a member of dart:core');
 }
diff --git a/tests/language/export_ambiguous_main_a.dart b/tests/language/export_ambiguous_main_a.dart
new file mode 100644
index 0000000..4a7b820
--- /dev/null
+++ b/tests/language/export_ambiguous_main_a.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, 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 export_ambiguous_main_a;
+
+main() {
+  print('export_ambiguous_main_a');
+}
diff --git a/tests/language/export_ambiguous_main_b.dart b/tests/language/export_ambiguous_main_b.dart
new file mode 100644
index 0000000..734a620
--- /dev/null
+++ b/tests/language/export_ambiguous_main_b.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, 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 export_ambiguous_main_b;
+
+main() {
+  print('export_ambiguous_main_b');
+}
diff --git a/tests/language/export_ambiguous_main_negative_test.dart b/tests/language/export_ambiguous_main_negative_test.dart
new file mode 100644
index 0000000..6087c67
--- /dev/null
+++ b/tests/language/export_ambiguous_main_negative_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, 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.
+
+export 'export_ambiguous_main_a.dart';
+export 'export_ambiguous_main_b.dart';
diff --git a/tests/language/export_double_same_main_test.dart b/tests/language/export_double_same_main_test.dart
new file mode 100644
index 0000000..68ad600
--- /dev/null
+++ b/tests/language/export_double_same_main_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, 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.
+
+export 'top_level_entry_test.dart';
+export 'export_main_test.dart' show main;
diff --git a/tests/language/export_main_override_test.dart b/tests/language/export_main_override_test.dart
new file mode 100644
index 0000000..6578288
--- /dev/null
+++ b/tests/language/export_main_override_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, 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.
+
+export 'top_level_entry_test.dart';
+
+main() {
+  print('export_main_override');
+}
diff --git a/tests/language/export_main_test.dart b/tests/language/export_main_test.dart
new file mode 100644
index 0000000..1e920a7
--- /dev/null
+++ b/tests/language/export_main_test.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2013, 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.
+
+export 'top_level_entry_test.dart';
diff --git a/tests/language/hello_dart_test.dart b/tests/language/hello_dart_test.dart
index a60a5fa..dac39a4 100644
--- a/tests/language/hello_dart_test.dart
+++ b/tests/language/hello_dart_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Simple test program invoked with an option to eagerly
 // compile all code that is loaded in the isolate.
-// VMOptions=--compile_all
+// VMOptions=--compile_all --error-on-bad-type --error-on-bad-override
 
 class HelloDartTest {
   static testMain() {
diff --git a/tests/language/instanceof3_test.dart b/tests/language/instanceof3_test.dart
index 746c8bf..ccc00e4 100644
--- a/tests/language/instanceof3_test.dart
+++ b/tests/language/instanceof3_test.dart
@@ -6,7 +6,8 @@
 import "package:expect/expect.dart";
 
 // In the type test 'e is T', if T does not denote a type available in the
-// current lexical scope, then T is mapped to dynamic and the test succeeds.
+// current lexical scope, then T is mapped to dynamic. Direct tests against
+// T cause a dynamic type error though.
 
 isCheckedMode() {
   try {
@@ -27,8 +28,8 @@
     } on TypeError catch (error) {
       got_type_error = true;
     }
-    // No type error.
-    Expect.isFalse(got_type_error);
+    // Type error.
+    Expect.isTrue(got_type_error);
   }
   {
     bool got_type_error = false;
@@ -38,8 +39,8 @@
     } on TypeError catch (error) {
       got_type_error = true;
     }
-    // No type error.
-    Expect.isFalse(got_type_error);
+    // Type error.
+    Expect.isTrue(got_type_error);
   }
   {
     bool got_type_error = false;
diff --git a/tests/language/is_not_class2_test.dart b/tests/language/is_not_class2_test.dart
index 710c72d..4766fb2 100644
--- a/tests/language/is_not_class2_test.dart
+++ b/tests/language/is_not_class2_test.dart
@@ -2,9 +2,10 @@
 // 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.
 
-// Dart test program for catch that we expect a class after an 'is'. This is
-// not a negative test since 'aa' is a malformed type and therefore should be
-// treated as dynamic.
+// Dart test program for catch that we expect a class after an 'is'. 'aa' is a
+// malformed type and a type error should be thrown upon test.
+
+import 'package:expect/expect.dart';
 
 class A {
   const A();
@@ -23,5 +24,5 @@
 }
 
 main() {
-  IsNotClass2NegativeTest.testMain();
+  Expect.throws(IsNotClass2NegativeTest.testMain, (e) => e is TypeError);
 }
diff --git a/tests/language/isnot_malformed_type_test.dart b/tests/language/isnot_malformed_type_test.dart
index 11abe66..867e9f7 100644
--- a/tests/language/isnot_malformed_type_test.dart
+++ b/tests/language/isnot_malformed_type_test.dart
@@ -5,10 +5,10 @@
 import 'package:expect/expect.dart';
 
 f(obj) {
-  // 'Baz' is not loaded, mapped to dynamic.
+  // 'Baz' is not loaded, throws a type error on test.
   return (obj is !Baz);
 }
 
 main () {
-  Expect.isFalse(f(null));
+  Expect.throws(() => f(null), (e) => e is TypeError);
 }
diff --git a/tests/language/language.status b/tests/language/language.status
index 9c6fe8b..9597d5f 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -9,7 +9,6 @@
 mixin_super_constructor_named_test: Fail # Issue 12631
 mixin_super_constructor_positionals_test: Fail # Issue 12631
 built_in_identifier_prefix_test: Fail # Issue 6970
-throwing_lazy_variable_test: Fail # Issue 5802
 f_bounded_equality_test: RuntimeError # Issue 14000
 
 # These bugs refer currently ongoing language discussions.
@@ -19,7 +18,6 @@
 closure_in_initializer_test: Fail # Issue 6422
 
 # Regular bugs which should be fixed.
-lazy_static3_test: Fail # Issue 12593
 duplicate_export_negative_test: Fail # Issue 6134
 mixin_forwarding_constructor2_test: Fail # Issue 13641
 
@@ -45,11 +43,15 @@
 compile_time_constant_checked3_test/04: Fail, OK
 compile_time_constant_checked3_test/05: Fail, OK
 compile_time_constant_checked3_test/06: Fail, OK
+malformed2_test/01: Fail, OK
 
 [ $runtime == vm || (($runtime == drt || $runtime == dartium) && $compiler == none) ]
 call_test: Fail # Issue 12602
 dynamic_prefix_core_test: Fail # Issue 12478
 
+[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium) ]
+export_ambiguous_main_negative_test: Fail # Issue 14763
+
 [ $compiler == none && $runtime == drt ]
 mixin_illegal_object_test/01: pass # Issue 10952.
 mixin_illegal_object_test/02: pass # Issue 10952.
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index 65055be..e5498ee 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -16,17 +16,16 @@
 function_type_alias9_test/00: crash # Issue 11987
 
 # TBF: we should check conflicts not only for methods, but for accessors too
-override_field_test/02: fail
 override_field_test/03: fail
 method_override7_test/03: Fail # Issue 11496
 
-built_in_identifier_test/none: Fail # Issue 13023
-
 # Please add new failing tests before this line.
 # Section below is for invalid tests.
 #
 #
 
+ref_before_declaration_test/none: fail # test issue 14879, "P" is not defined
+bad_initializer2_negative_test: fail # tester issue 14880, Analyzer reports compile-time error, but test runner is not satisfied
 
 # test issue 11124, It is warning, not error to don't initialize final field
 field3a_negative_test: Fail # Issue 11124
@@ -68,15 +67,9 @@
 constructor_call_wrong_argument_count_negative_test: fail
 instance_call_wrong_argument_count_negative_test: fail
 
-# test issue 11589, export D from 2 export directives
-export_cyclic_test: fail
-
 # test issue 11590, runtime only negative test
 field_method4_negative_test: fail
 
-# test issue 11592, Function type alias (typedef) is not a constant
-first_class_types_constants_test: fail
-
 # test issue 11594, Reference to a not resolve identifier is static warning
 import_combinators_negative_test: fail
 interface_static_non_final_fields_negative_test: fail
@@ -127,14 +120,11 @@
 static_field_test/03: fail # Issue 12541
 static_field_test/04: fail # Issue 12541
 
-# test issue 13787; duplicate exports of the same declaration is not handled
-duplicate_export_test: fail # Issue 13787
-
 # test issue 13916, Looks as no warning should be in this redirecting factory
 redirecting_factory_infinite_steps_test/01: fail
 
-# test issue  , disallow default values in redirecting factories
-redirecting_factory_default_values_test/none: fail # Issue 14471
+# test issue 14471, has (legitimate) static warning; but not annotated
+redirecting_factory_default_values_test/none: StaticWarning # Test issue 14471; has (legitimate) static warning; but not annotated
 
 # test issue 13956, It is a static type warning if any of the type arguments to k' are not subtypes of the bounds of the corresponding formal type parameters of type.
 default_factory2_test/none: fail
@@ -208,7 +198,6 @@
 crash_6725_test: StaticWarning
 default_factory_library_test: StaticWarning
 default_factory_test: StaticWarning
-div_with_power_of_two2_test: StaticWarning
 double_to_string_as_exponential2_test: StaticWarning
 double_to_string_as_fixed2_test: StaticWarning
 double_to_string_as_precision2_test: StaticWarning
@@ -218,6 +207,7 @@
 dynamic_prefix_core_test: StaticWarning
 empty_block_case_test: StaticWarning
 error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
 extend_type_parameter2_negative_test: CompileTimeError
 extend_type_parameter_negative_test: CompileTimeError
 external_test/20: StaticWarning
@@ -302,6 +292,7 @@
 malbounded_type_cast_test: StaticWarning
 malbounded_type_literal_test: StaticWarning
 malformed_type_test: StaticWarning
+malformed2_test/01: MissingCompileTimeError
 map_literal11_test: StaticWarning
 map_literal2_negative_test: CompileTimeError
 map_literal3_test: StaticWarning
@@ -313,6 +304,7 @@
 method_override5_test: StaticWarning
 method_override6_test: StaticWarning
 method_override_test: StaticWarning
+mixin_illegal_static_access_test: StaticWarning
 mixin_illegal_syntax_test/13: CompileTimeError
 mixin_typedef_constructor_test: StaticWarning
 mixin_type_parameter2_test: StaticWarning
@@ -392,7 +384,6 @@
 prefix23_test: StaticWarning
 prefix7_negative_test: CompileTimeError
 property_field_override_test: StaticWarning
-redirecting_factory_default_values_test/none: StaticWarning
 redirecting_factory_incompatible_signature_test: StaticWarning
 regress_13494_test: StaticWarning
 return_type_test: StaticWarning
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 16b9f2f..9f967f0 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -23,6 +23,8 @@
 
 built_in_identifier_test/none: Fail # Issue 13023
 
+export_double_same_main_test: Fail # Issue 14772
+
 # Please add new failing tests before this line.
 # Section below is for invalid tests.
 #
@@ -204,7 +206,6 @@
 crash_6725_test: StaticWarning
 default_factory_library_test: StaticWarning
 default_factory_test: StaticWarning
-div_with_power_of_two2_test: StaticWarning
 double_to_string_as_exponential2_test: StaticWarning
 double_to_string_as_fixed2_test: StaticWarning
 double_to_string_as_precision2_test: StaticWarning
@@ -214,6 +215,7 @@
 dynamic_prefix_core_test: StaticWarning
 empty_block_case_test: StaticWarning
 error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
 extend_type_parameter2_negative_test: CompileTimeError
 extend_type_parameter_negative_test: CompileTimeError
 external_test/20: StaticWarning
@@ -298,6 +300,7 @@
 malbounded_type_cast_test: StaticWarning
 malbounded_type_literal_test: StaticWarning
 malformed_type_test: StaticWarning
+malformed2_test/01: MissingCompileTimeError
 map_literal11_test: StaticWarning
 map_literal2_negative_test: CompileTimeError
 map_literal3_test: StaticWarning
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index e907c6d..7e671f6 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -4,7 +4,6 @@
 
 [ $compiler == dart2js || $compiler == dart2dart ]
 bad_constructor_test/05: CompileTimeError # Issue 13669
-block_scope_test: CompileTimeError # Issue 13204.
 malformed_test/05: MissingCompileTimeError # Issue 12695
 malformed_test/06: MissingCompileTimeError # Issue 12695
 full_stacktrace1_test: Pass, RuntimeError # Issue 12698
@@ -30,6 +29,7 @@
 ref_before_declaration_test/03: MissingCompileTimeError
 ref_before_declaration_test/04: MissingCompileTimeError
 ref_before_declaration_test/05: MissingCompileTimeError
+ref_before_declaration_test/06: MissingCompileTimeError
 
 # VM specific tests that should not be run by dart2js.
 vm/*: Skip # Issue 12699
@@ -70,6 +70,7 @@
 compile_time_constant_checked3_test/04: MissingCompileTimeError, OK
 compile_time_constant_checked3_test/05: MissingCompileTimeError, OK
 compile_time_constant_checked3_test/06: MissingCompileTimeError, OK
+malformed2_test/01: MissingCompileTimeError, OK
 generic_test: RuntimeError, OK
 named_parameters_type_test/01: MissingRuntimeError, OK
 named_parameters_type_test/02: MissingRuntimeError, OK
@@ -137,7 +138,6 @@
 map_literal3_test: CompileTimeError # Issue 12793
 method_override5_test: RuntimeError # Issue 12809
 external_test/13: CompileTimeError # Issue 12887
-instanceof4_test/01: RuntimeError # Issue 12889
 list_literal4_test: RuntimeError # Issue 12890
 map_literal4_test: RuntimeError # Issue 12891
 built_in_identifier_test/01: CompileTimeError # Issue 13022
@@ -238,7 +238,6 @@
 map_literal3_test: Fail # Issue 12794
 external_test/13: Fail # Issue 12888
 built_in_identifier_test/01: Fail # Issue 13022
-lazy_static3_test: Fail # Issue 12593
 list_literal1_test/01: Fail # Issue 12993
 map_literal1_test/01: Fail # Issue 12993
 method_override4_test: Fail # Issue 12810
@@ -255,7 +254,6 @@
 constructor5_test: Fail
 constructor6_test: Fail
 closure_in_initializer_test: Fail
-throwing_lazy_variable_test: Fail # Issue 5802
 f_bounded_equality_test: RuntimeError # Issue 14000
 
 # Minified mode failures.
@@ -278,6 +276,7 @@
 compile_time_constant_checked3_test/04: Fail, OK
 compile_time_constant_checked3_test/05: Fail, OK
 compile_time_constant_checked3_test/06: Fail, OK
+malformed2_test/01: Fail, OK
 
 [ $compiler == dart2dart && $checked ]
 # Dart VM problems
diff --git a/tests/language/library_ambiguous_test.dart b/tests/language/library_ambiguous_test.dart
index 1584b24..011f041 100644
--- a/tests/language/library_ambiguous_test.dart
+++ b/tests/language/library_ambiguous_test.dart
@@ -17,7 +17,7 @@
   print(bar());  /// 01: runtime error
   print(baz());  /// 02: runtime error
   print(bay());  /// 03: runtime error
-  print(main is bax);  /// 04: static type warning
+  print(main is bax);  /// 04: static type warning, runtime error
   var x = new X();  /// 05: continued
   print("No error expected if ambiguous definitions are not used.");
 }
diff --git a/tests/language/list_tracer_in_list_test.dart b/tests/language/list_tracer_in_list_test.dart
new file mode 100644
index 0000000..643f8ad
--- /dev/null
+++ b/tests/language/list_tracer_in_list_test.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2013, 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.
+
+main() {
+  var a = [[]];
+  a[0].add(42);
+  if (a[0].length != 1) {
+    throw 'Test failed';
+  }
+}
diff --git a/tests/language/malformed2_lib.dart b/tests/language/malformed2_lib.dart
new file mode 100644
index 0000000..50155a3
--- /dev/null
+++ b/tests/language/malformed2_lib.dart
@@ -0,0 +1,57 @@
+// Copyright (c) 2013, 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.
+
+part of malformed_test;
+
+/// [o] is either `null` or `new List<String>()`.
+void testValue(var o) {
+  assert(o == null || o is List<String>);
+
+  test(true, () => o is Unresolved, "$o is Unresolved");
+  test(false, () => o is List<Unresolved>, "$o is List<Unresolved>");
+  test(true, () => o is! Unresolved, "$o is! Unresolved");
+  test(false, () => o is! List<Unresolved>, "$o is List<Unresolved>");
+
+  test(true, () => o as Unresolved, "$o as Unresolved");
+  test(false, () => o as List<Unresolved>, "$o as List<Unresolved>");
+
+  test(false, () {
+    try {
+    } on Unresolved catch (e) {
+    } catch (e) {
+    }
+  }, "on Unresolved catch: Nothing thrown.");
+  test(true, () {
+    try {
+      throw o;
+    } on Unresolved catch (e) {
+    } catch (e) {
+    }
+  }, "on Unresolved catch ($o)");
+  test(false, () {
+    try {
+      throw o;
+    } on List<String> catch (e) {
+    } on NullThrownError catch (e) {
+    } on Unresolved catch (e) {
+    } catch (e) {
+    }
+  }, "on List<String>/NullThrowError catch ($o)");
+  test(false, () {
+    try {
+      throw o;
+    } on List<Unresolved> catch (e) {
+    } on NullThrownError catch (e) {
+    } on Unresolved catch (e) {
+    } catch (e) {
+    }
+  }, "on List<Unresolved>/NullThrowError catch ($o)");
+
+  test(o != null && inCheckedMode(),
+       () { Unresolved u = o; },
+       "Unresolved u = $o;");
+  test(false,
+       () { List<Unresolved> u = o; },
+       "List<Unresolved> u = $o;");
+}
\ No newline at end of file
diff --git a/tests/language/malformed2_test.dart b/tests/language/malformed2_test.dart
new file mode 100644
index 0000000..cab3aba
--- /dev/null
+++ b/tests/language/malformed2_test.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2013, 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 malformed_test;
+
+// This part includes the actual tests.
+part 'malformed2_lib.dart'; /// 00: static type warning
+
+bool inCheckedMode() {
+  try {
+    var i = 42;
+    String s = i;
+  } on TypeError catch (e) {
+    return true;
+  }
+  return false;
+}
+
+bool hasFailed = false;
+
+void fail(String message) {
+  try {
+    throw message;
+  } catch (e, s) {
+    print(e);
+    print(s);
+  }
+  hasFailed = true;
+}
+
+void checkFailures() {
+  if (hasFailed) throw 'Test failed.';
+}
+
+test(bool expectTypeError, f(), [String message]) {
+  message = message != null ? ' for $message' : '';
+  try {
+    f();
+    if (expectTypeError) {
+      fail('Missing type error$message.');
+    }
+  } on TypeError catch (e) {
+    if (expectTypeError) {
+      print('Type error$message: $e');
+    } else {
+      fail('Unexpected type error$message: $e');
+    }
+  }
+}
+
+const Unresolved c1 = 0; /// 01: static type warning, compile-time error
+
+void main() {
+  print(c1); /// 01: continued
+  testValue(new List<String>()); /// 00: continued
+  testValue(null); /// 00: continued
+  checkFailures();
+}
diff --git a/tests/language/malformed_test.dart b/tests/language/malformed_test.dart
index 8f15dff..2364696 100644
--- a/tests/language/malformed_test.dart
+++ b/tests/language/malformed_test.dart
@@ -9,10 +9,10 @@
 import 'package:expect/expect.dart' as prefix;  // Define 'prefix'.
 
 checkIsUnresolved(var v) {
-  Expect.isTrue(v is Unresolved);
-  Expect.isTrue(v is Unresolved<int>);
-  Expect.isTrue(v is prefix.Unresolved);
-  Expect.isTrue(v is prefix.Unresolved<int>);
+  Expect.throws(() => v is Unresolved, (e) => e is TypeError);
+  Expect.throws(() => v is Unresolved<int>, (e) => e is TypeError);
+  Expect.throws(() => v is prefix.Unresolved, (e) => e is TypeError);
+  Expect.throws(() => v is prefix.Unresolved<int>, (e) => e is TypeError);
 }
 
 checkIsListUnresolved(bool expect, var v) {
@@ -29,10 +29,10 @@
 }
 
 checkAsUnresolved(var v) {
-  Expect.equals(v, v as Unresolved);
-  Expect.equals(v, v as Unresolved<int>);
-  Expect.equals(v, v as prefix.Unresolved);
-  Expect.equals(v, v as prefix.Unresolved<int>);
+  Expect.throws(() => v as Unresolved, (e) => e is TypeError);
+  Expect.throws(() => v as Unresolved<int>, (e) => e is TypeError);
+  Expect.throws(() => v as prefix.Unresolved, (e) => e is TypeError);
+  Expect.throws(() => v as prefix.Unresolved<int>, (e) => e is TypeError);
 }
 
 checkAsListUnresolved(bool expect, var v) {
@@ -125,24 +125,40 @@
   Expect.throws(() => new undeclared_prefix.Unresolved<int>(), (e) => true);  /// 05: compile-time error
 
   try {
-    throw 'foo';
-  } on Unresolved catch (e) {
-    // Equivalent to 'on dynamic', catches 'foo'.
+    try {
+      throw 'foo';
+    } on Unresolved catch (e) {
+      Expect.fail("This code shouldn't be executed");
+    }
+    Expect.fail("This code shouldn't be executed");
+  } on TypeError catch (e) {
   }
   try {
-    throw 'foo';
-  } on Unresolved<int> catch (e) {
-    // Equivalent to 'on dynamic', catches 'foo'.
+    try {
+      throw 'foo';
+    } on Unresolved<int> catch (e) {
+      Expect.fail("This code shouldn't be executed");
+    }
+    Expect.fail("This code shouldn't be executed");
+  } on TypeError catch (e) {
   }
   try {
-    throw 'foo';
-  } on prefix.Unresolved catch (e) {
-    // Equivalent to 'on dynamic', catches 'foo'.
+    try {
+      throw 'foo';
+    } on prefix.Unresolved catch (e) {
+      Expect.fail("This code shouldn't be executed");
+    }
+    Expect.fail("This code shouldn't be executed");
+  } on TypeError catch (e) {
   }
   try {
-    throw 'foo';
-  } on prefix.Unresolved<int> catch (e) {
-    // Equivalent to 'on dynamic', catches 'foo'.
+    try {
+      throw 'foo';
+    } on prefix.Unresolved<int> catch (e) {
+      Expect.fail("This code shouldn't be executed");
+    }
+    Expect.fail("This code shouldn't be executed");
+  } on TypeError catch (e) {
   }
   try {
     throw 'foo';
diff --git a/tests/language/on_catch_malformed_type_test.dart b/tests/language/on_catch_malformed_type_test.dart
index a7e18ef..e4c1f86 100644
--- a/tests/language/on_catch_malformed_type_test.dart
+++ b/tests/language/on_catch_malformed_type_test.dart
@@ -3,8 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Check that malformed types in on-catch are handled correctly, that is,
-// are treated as dynamic and thus catches all in bith production and checked
-// mode.
+// throws a type error in both production and checked mode.
+
+import 'package:expect/expect.dart';
 
 catchUnresolvedBefore() {
   try {
@@ -18,15 +19,17 @@
 }
 
 catchUnresolvedAfter() {
-  try {
-    throw "foo";
-    Expect.fail("This code shouldn't be executed");
-  } on Unavailable catch(ex) {
-    // This is tested before the catch block below.
-    // In both production and checked mode the test is always true.
-  } on String catch(oks) {
-    Expect.fail("This code shouldn't be executed");
-  }
+  Expect.throws(() {
+    try {
+      throw "foo";
+      Expect.fail("This code shouldn't be executed");
+    } on Unavailable catch(ex) {
+      // This is tested before the catch block below.
+      // In both production and checked mode the test causes a type error.
+    } on String catch(oks) {
+      Expect.fail("This code shouldn't be executed");
+    }
+  }, (e) => e is TypeError);
 }
 
 main() {
diff --git a/tests/language/ref_before_declaration_test.dart b/tests/language/ref_before_declaration_test.dart
index 00a61e0..9ecbac7 100644
--- a/tests/language/ref_before_declaration_test.dart
+++ b/tests/language/ref_before_declaration_test.dart
@@ -41,10 +41,22 @@
     const y = "Honk if you like peace and quiet!";  /// 03: compile-time error
   }
 
+  void test4() {
+    void Q() {
+      P();  // Refers to non-existing top-level function P
+    }
+    void P() {  /// 06: compile-time error
+      Q();      /// 06: continued
+    }           /// 06: continued
+
+    Function f = () {x = f;};  /// 07: compile-time error
+  }
+
   test() {
     test1();
     test2();
     test3();
+    test4();
   }
 }
 
diff --git a/tests/language/reflect_core_vm_test.dart b/tests/language/reflect_core_vm_test.dart
new file mode 100644
index 0000000..d6e52f1
--- /dev/null
+++ b/tests/language/reflect_core_vm_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2013, 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.
+
+// Test reflection of private functions in core classes.
+
+import "package:expect/expect.dart";
+import "dart:mirrors";
+
+main() {
+  var s = "string";
+  var im = reflect(s);
+  try {
+    im.invoke(const Symbol("_setAt"), [0, 65]);
+    Expect.isTrue(false);  // Unreachable.
+  } catch (e) {
+    Expect.equals(true, e is NoSuchMethodError);
+  }
+}
+
diff --git a/tests/language/type_parameter_test.dart b/tests/language/type_parameter_test.dart
index 7a39eeb..9493e22 100644
--- a/tests/language/type_parameter_test.dart
+++ b/tests/language/type_parameter_test.dart
@@ -17,28 +17,28 @@
   }
 
   static
-  T /// 01: static type warning
+  T /// 01: static type warning, dynamic type error
   staticMethod(
-  T /// 02: static type warning
+  T /// 02: static type warning, dynamic type error
   a) {
     final
-    T /// 03: static type warning
+    T /// 03: static type warning, dynamic type error
     a = "not_null";
     print(a);
     return a;
   }
 
   static final
-  T /// 04: static type warning
+  T /// 04: static type warning, dynamic type error
   staticFinalField = "not_null";
 
   static const
-  T /// 05: static type warning
+  T /// 05: static type warning, dynamic type error
   staticConstField = "not_null";
 
   static not_null() => "not_null";
   static final
-  T /// 06: static type warning
+  T /// 06: static type warning, dynamic type error
   staticFinalField2 = not_null();
 
   // Assigning null to a malformed type is not a dynamic error.
diff --git a/tests/lib/analyzer/analyze_library.status b/tests/lib/analyzer/analyze_library.status
index 57789d3..84c66b4 100644
--- a/tests/lib/analyzer/analyze_library.status
+++ b/tests/lib/analyzer/analyze_library.status
@@ -3,9 +3,12 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2analyzer ]
-lib/_internal: Skip # Slow like a hell - timeouts.
+lib: Skip # Slow like a hell - timeouts.
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
+lib/core/bool: CompileTimeError, OK # Issue 14684. Only redirecting factory constructors can be declared to be 'const'
+lib/core/int: CompileTimeError, OK # Issue 14684. Only redirecting factory constructors can be declared to be 'const'
+lib/core/string: CompileTimeError, OK # Issue 14684. Only redirecting factory constructors can be declared to be 'const'
 lib/_chrome/dart2js/chrome_dart2js: CompileTimeError
 lib/html/dart2js/html_dart2js: CompileTimeError
 lib/html/dartium/html_dartium: CompileTimeError
@@ -79,3 +82,86 @@
 lib/web_sql/dart2js/web_sql_dart2js: CompileTimeError
 lib/web_sql/dartium/web_sql_dartium: CompileTimeError
 
+
+[ $compiler == dart2analyzer ]
+lib/async/async_error: CompileTimeError
+lib/async/deferred_load: CompileTimeError
+lib/async/future: CompileTimeError
+lib/async/future_impl: CompileTimeError
+lib/async/schedule_microtask: CompileTimeError
+lib/async/stream: CompileTimeError
+lib/async/stream_controller: CompileTimeError
+lib/async/stream_impl: CompileTimeError
+lib/async/timer: CompileTimeError
+lib/async/zone: CompileTimeError
+lib/collection/collections: CompileTimeError
+lib/_collection_dev/iterable: CompileTimeError
+lib/_collection_dev/list: CompileTimeError
+lib/_collection_dev/symbol: CompileTimeError
+lib/collection/hash_map: CompileTimeError
+lib/collection/iterable: CompileTimeError
+lib/collection/linked_hash_map: CompileTimeError
+lib/collection/list: CompileTimeError
+lib/collection/queue: CompileTimeError
+lib/collection/splay_tree: CompileTimeError
+lib/convert/ascii: CompileTimeError
+lib/convert/byte_conversion: CompileTimeError
+lib/convert/converter: CompileTimeError
+lib/convert/encoding: CompileTimeError
+lib/convert/html_escape: CompileTimeError
+lib/convert/json: CompileTimeError
+lib/convert/latin1: CompileTimeError
+lib/convert/line_splitter: CompileTimeError
+lib/convert/string_conversion: CompileTimeError
+lib/convert/utf: CompileTimeError
+lib/core/iterable: CompileTimeError
+lib/core/list: CompileTimeError
+lib/core/map: CompileTimeError
+lib/core/print: CompileTimeError
+lib/core/set: CompileTimeError
+lib/core/string: CompileTimeError
+lib/core/symbol: CompileTimeError
+lib/core/uri: CompileTimeError
+lib/html/html_common/conversions: CompileTimeError
+lib/html/html_common/css_class_set: CompileTimeError
+lib/html/html_common/device: CompileTimeError
+lib/html/html_common/filtered_element_list: CompileTimeError
+lib/html/html_common/lists: CompileTimeError
+lib/io/bytes_builder: CompileTimeError
+lib/io/common: CompileTimeError
+lib/io/crypto: CompileTimeError
+lib/io/data_transformer: CompileTimeError
+lib/io/directory: CompileTimeError
+lib/io/directory_impl: CompileTimeError
+lib/io/eventhandler: CompileTimeError
+lib/io/file: CompileTimeError
+lib/io/file_impl: CompileTimeError
+lib/io/file_system_entity: CompileTimeError
+lib/io/http: CompileTimeError
+lib/io/http_date: CompileTimeError
+lib/io/http_headers: CompileTimeError
+lib/io/http_impl: CompileTimeError
+lib/io/http_parser: CompileTimeError
+lib/io/http_session: CompileTimeError
+lib/io/io_service: CompileTimeError
+lib/io/io_sink: CompileTimeError
+lib/io/link: CompileTimeError
+lib/io/options: CompileTimeError
+lib/io/platform: CompileTimeError
+lib/io/platform_impl: CompileTimeError
+lib/io/process: CompileTimeError
+lib/io/secure_server_socket: CompileTimeError
+lib/io/secure_socket: CompileTimeError
+lib/io/socket: CompileTimeError
+lib/io/stdio: CompileTimeError
+lib/io/string_transformer: CompileTimeError
+lib/io/timer_impl: CompileTimeError
+lib/io/websocket: CompileTimeError
+lib/io/websocket_impl: CompileTimeError
+lib/math/point: CompileTimeError
+lib/math/rectangle: CompileTimeError
+lib/utf/utf16: CompileTimeError
+lib/utf/utf32: CompileTimeError
+lib/utf/utf8: CompileTimeError
+lib/utf/utf_stream: CompileTimeError
+
diff --git a/tests/lib/async/event_helper.dart b/tests/lib/async/event_helper.dart
index a13bac0..08a6b8f 100644
--- a/tests/lib/async/event_helper.dart
+++ b/tests/lib/async/event_helper.dart
@@ -158,8 +158,8 @@
                                  cancelOnError: cancelOnError);
   }
 
-  void addError(error, [stackTrace]) {
-    super.addError(error, stackTrace);
+  void addError(error) {
+    super.addError(error);
     if (cancelOnError) {
       onDoneSignal.complete();
     }
diff --git a/tests/lib/async/future_test.dart b/tests/lib/async/future_test.dart
index ed342bc..b497f1d 100644
--- a/tests/lib/async/future_test.dart
+++ b/tests/lib/async/future_test.dart
@@ -55,8 +55,8 @@
 void testNeverComplete() {
   final completer = new Completer<int>();
   final future = completer.future;
-  future.then((v) => Expect.fail("Value not expected"));
-  future.catchError((e) => Expect.fail("Value not expected"));
+  future.then((v) => Expect.fails("Value not expected"));
+  future.catchError((e) => Expect.fails("Value not expected"));
 }
 
 void testComplete() {
diff --git a/tests/lib/async/future_value_chain4_test.dart b/tests/lib/async/future_value_chain4_test.dart
index 8e640b5..2f09cfe 100644
--- a/tests/lib/async/future_value_chain4_test.dart
+++ b/tests/lib/async/future_value_chain4_test.dart
@@ -10,9 +10,8 @@
   then(valueHandler, {onError}) {
     scheduleMicrotask(() { valueHandler(499); });
   }
-  catchError(_, {test}) => null;
+  catchError(_) => null;
   whenComplete(_) => null;
-  asStream() => null;
 }
 
 main() {
diff --git a/tests/lib/async/schedule_microtask3_test.dart b/tests/lib/async/schedule_microtask3_test.dart
index a93e52b..950d8e0 100644
--- a/tests/lib/async/schedule_microtask3_test.dart
+++ b/tests/lib/async/schedule_microtask3_test.dart
@@ -5,8 +5,7 @@
 library run_async_test;
 
 import 'dart:async';
-import 'package:expect/expect.dart';
-import 'package:unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("run async timer after async test", () {
diff --git a/tests/lib/async/stream_controller_test.dart b/tests/lib/async/stream_controller_test.dart
index f729edc..be9e975 100644
--- a/tests/lib/async/stream_controller_test.dart
+++ b/tests/lib/async/stream_controller_test.dart
@@ -18,7 +18,7 @@
       ..error("error!")
       ..error("error too!")
       ..close();
-  CaptureEvents actualEvents = new Events.capture(c.stream.asBroadcastStream());
+  Events actualEvents = new Events.capture(c.stream.asBroadcastStream());
   expectedEvents.replay(c);
   Expect.listEquals(expectedEvents.events, actualEvents.events);
 
@@ -167,7 +167,7 @@
       ..error("error!")
       ..error("error too!")
       ..close();
-  CaptureEvents actualEvents = new Events.capture(c.stream);
+  Events actualEvents = new Events.capture(c.stream);
   expectedEvents.replay(c);
   Expect.listEquals(expectedEvents.events, actualEvents.events);
 
diff --git a/tests/lib/async/stream_event_transformed_test.dart b/tests/lib/async/stream_event_transformed_test.dart
index 62d1967..0cda9c8 100644
--- a/tests/lib/async/stream_event_transformed_test.dart
+++ b/tests/lib/async/stream_event_transformed_test.dart
@@ -13,7 +13,7 @@
   DecrementingTransformerSink(this.outSink);
 
   void add(int i) => outSink.add(i - 1);
-  void addError(int e, [st]) => outSink.addError(e - 1, st);
+  void addError(int e, st) => outSink.addError(e - 1, st);
   void close() => outSink.close();
 }
 
@@ -23,7 +23,7 @@
   FutureWaitingTransformerSink(this.outSink, this.closeFuture);
 
   void add(Future future) { future.then(outSink.add); }
-  void addError(Future e, [st]) { e.then((val) { outSink.addError(val, st); }); }
+  void addError(Future e, st) { e.then((val) { outSink.addError(val, st); }); }
   void close() { closeFuture.whenComplete(outSink.close); }
 }
 
@@ -32,7 +32,7 @@
   ZoneTransformerSink(this.outSink);
 
   void add(_) { outSink.add(Zone.current); }
-  void addError(_, [st]) { outSink.add(Zone.current); }
+  void addError(_, st) { outSink.add(Zone.current); }
   void close() {
     outSink.add(Zone.current);
     outSink.close();
@@ -44,7 +44,7 @@
   TypeChangingSink(this.outSink);
 
   void add(int data) { outSink.add(data.toString()); }
-  void addError(error, [st]) { outSink.addError(error, st); }
+  void addError(error, st) { outSink.addError(error, st); }
   void close() { outSink.close(); }
 }
 
diff --git a/tests/lib/async/stream_transformer_test.dart b/tests/lib/async/stream_transformer_test.dart
index 3088076..8029a65 100644
--- a/tests/lib/async/stream_transformer_test.dart
+++ b/tests/lib/async/stream_transformer_test.dart
@@ -21,7 +21,7 @@
 
   MyStreamSubscription(this.stream, this.cancelOnError);
 
-  Future cancel() => null;
+  void cancel() {}
   void onData(void handleData(T data)) {
     this.handleData = handleData == null ? _defaultData: handleData;
   }
@@ -33,8 +33,6 @@
   }
 
   void pause([Future resumeSignal]) {}
-  void resume() {}
-
   final isPaused = false;
   Future asFuture([var futureValue]) => null;
 }
diff --git a/tests/lib/async/zone_debug_test.dart b/tests/lib/async/zone_debug_test.dart
index 6b6e490..fca0a5e 100644
--- a/tests/lib/async/zone_debug_test.dart
+++ b/tests/lib/async/zone_debug_test.dart
@@ -28,7 +28,7 @@
 debugZoneRegisterUnaryCallback(Zone self, ZoneDelegate parent, Zone origin,
                                f(arg)) {
   List savedTrace = [stackTrace]..addAll(restoredStackTrace);
-  return parent.registerUnaryCallback(origin, (arg) {
+  return parent.registerCallback(origin, (arg) {
     restoredStackTrace = savedTrace;
     return f(arg);
   });
@@ -43,7 +43,7 @@
 debugZoneRunUnary(Zone self, ZoneDelegate parent, Zone origin, f(arg), arg) {
   stackTrace++;
   restoredStackTrace = [];
-  return parent.runUnary(origin, f, arg);
+  return parent.run1(origin, f, arg);
 }
 
 List expectedDebugTrace;
diff --git a/tests/lib/convert/chunked_conversion1_test.dart b/tests/lib/convert/chunked_conversion1_test.dart
index 0bbe44b..70d82f2 100644
--- a/tests/lib/convert/chunked_conversion1_test.dart
+++ b/tests/lib/convert/chunked_conversion1_test.dart
@@ -32,7 +32,7 @@
   specialI(o) => add(o);
 }
 
-abstract class MyChunkedBoolSink extends ChunkedConversionSink<bool> {
+class MyChunkedBoolSink extends ChunkedConversionSink<bool> {
   MyChunkedBoolSink();
   factory MyChunkedBoolSink.from(sink) = BoolAdapterSink;
   factory MyChunkedBoolSink.withCallback(callback) {
diff --git a/tests/lib/convert/chunked_conversion_json_decode1_test.dart b/tests/lib/convert/chunked_conversion_json_decode1_test.dart
index 0ef8ff3..932eae4 100644
--- a/tests/lib/convert/chunked_conversion_json_decode1_test.dart
+++ b/tests/lib/convert/chunked_conversion_json_decode1_test.dart
@@ -118,7 +118,7 @@
       new ChunkedConversionSink.withCallback((x) => result = x.single);
   var stringConversionSink = decoder.startChunkedConversion(objectSink);
   ByteConversionSink inputByteSink = stringConversionSink.asUtf8Sink(false);
-  var tmpBytes = UTF8.encode(str);
+  Object tmpBytes = UTF8.encode(str);
   tmpBytes.forEach((b) => inputByteSink.addSlice([0, b, 1], 1, 2, false));
   inputByteSink.close();
   return result;
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index da9fc83..520fa72 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -6,6 +6,7 @@
 mirrors/delegate_test: RuntimeError # Issue 13864
 
 [ $compiler == dart2js ]
+async/schedule_microtask3_test: RuntimeError # _enqueueImmediate runs after Timer. http://dartbug.com/9002
 async/schedule_microtask6_test: RuntimeError # global error handling is not supported. http://dartbug.com/5958
 
 math/double_pow_test: RuntimeError
@@ -133,6 +134,7 @@
 [ $compiler == dart2dart ]
 mirrors/*: Skip # http://dartbug.com/11511
 async/schedule_microtask6_test: Fail             # Issue 10957 - may be related to issue 10910
+async/schedule_microtask3_test: RuntimeError # Issue 13719: Please triage this failure.
 
 [ $compiler == dart2dart && $minified ]
 json/json_test: Fail                            # Issue 10961
@@ -142,9 +144,9 @@
 
 [ $runtime == ff ]
 # FF setTimeout can fire early: https://bugzilla.mozilla.org/show_bug.cgi?id=291386
-async/multiple_timer_test: Pass, Fail # Issue 14734
-async/timer_isolate_test: Pass, Fail # Issue 14734
-async/timer_test: Pass, Fail # Issue 14734
+async/multiple_timer_test: Pass, Fail
+async/timer_isolate_test: Pass, Fail
+async/timer_test: Pass, Fail
 convert/chunked_conversion_utf88_test: Pass, Timeout  # Issue 12029
 convert/streamed_conversion_utf8_encode_test: Pass, Timeout  # Issue 12029
 convert/streamed_conversion_utf8_decode_test: Pass, Slow  # Issue 12029
@@ -157,13 +159,12 @@
 async/deferred/deferred_api_test: Pass, Timeout # http://dartbug.com/12635
 convert/streamed_conversion_utf8_decode_test: Pass, Timeout # http://dartbug.com/12768
 convert/utf85_test: Skip # Issue 12029.
-async/timer_isolate_test: Pass, Fail # Issue 14734
 
 [ $compiler == dart2js ]
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 
 [ $runtime == opera ]
-async/multiple_timer_test: Pass, Fail # Probably issue 14734
+async/multiple_timer_test: Pass, Fail
 
 [ $runtime == opera && $system == windows]
 # TODO(efortuna): Investigate.
@@ -174,6 +175,7 @@
 mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
 
 [ $compiler == none  ]
+async/schedule_microtask3_test: Fail # _enqueueImmediate runs after Timer. http://dartbug.com/9001.
 mirrors/hierarchy_test: Fail # TODO(ahe): This test is slightly broken. http://dartbug.com/12464
 mirrors/mixin_application_test/01: Fail, OK # TODO(ahe): Slight broken test to ensure test coverage on dart2js.
 mirrors/intercepted_object_test: Fail, OK # TODO(ahe): Slight broken test to ensure test coverage on dart2js.
@@ -229,10 +231,28 @@
 async/schedule_microtask_test: Fail # Issue 9001, Issue 9002
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
+async/future_test: StaticWarning
+async/future_value_chain4_test: StaticWarning
+async/schedule_microtask3_test: StaticWarning
+async/stream_controller_async_test: StaticWarning
+async/stream_controller_test: StaticWarning
+async/stream_event_transformed_test: StaticWarning
+async/stream_first_where_test: StaticWarning
+async/stream_from_iterable_test: StaticWarning
+async/stream_join_test: StaticWarning
+async/stream_last_where_test: StaticWarning
+async/stream_single_test: StaticWarning
+async/stream_single_to_multi_subscriber_test: StaticWarning
+async/stream_transform_test: StaticWarning
+async/stream_transformer_from_handlers_test: StaticWarning
+async/stream_transformer_test: StaticWarning
+async/zone_debug_test: StaticWarning
+convert/chunked_conversion1_test: StaticWarning
+convert/chunked_conversion_json_decode1_test: StaticWarning
+math/min_max_test: StaticWarning
 mirrors/equality_test/02: StaticWarning # Issue 14524
 mirrors/generic_f_bounded_mixin_application_test: CompileTimeError # Issue 14116
 mirrors/invoke_named_test: StaticWarning # Issue 14522
-mirrors/metadata_allowed_values_test/none: CompileTimeError # Issue 14688
 mirrors/private_symbol_test: StaticWarning # Issue 14524
 mirrors/reflect_class_test: StaticWarning # Issue 14524
 mirrors/type_variable_owner_test: StaticWarning # Issue 14524
diff --git a/tests/lib/math/min_max_test.dart b/tests/lib/math/min_max_test.dart
index 1f89185..2b16176 100644
--- a/tests/lib/math/min_max_test.dart
+++ b/tests/lib/math/min_max_test.dart
@@ -15,12 +15,12 @@
 class Wrap implements Comparable {
   final value;
   Wrap(this.value);
-  int compareTo(Wrap other) => value.compareTo(other.value);
-  bool operator<(Wrap other) => compareTo(other) < 0;
-  bool operator<=(Wrap other) => compareTo(other) <= 0;
-  bool operator>(Wrap other) => compareTo(other) > 0;
-  bool operator>=(Wrap other) => compareTo(other) >= 0;
-  bool operator==(other) => other is Wrap && compareTo(other) == 0;
+  int compare(Wrap other) => value.compare(other.value);
+  bool operator<(Wrap other) => compare(other) < 0;
+  bool operator<=(Wrap other) => compare(other) <= 0;
+  bool operator>(Wrap other) => compare(other) > 0;
+  bool operator>=(Wrap other) => compare(other) >= 0;
+  bool operator==(other) => other is Wrap && compare(other) == 0;
   String toString() => 'Wrap($value)';
   int get hashCode => value.hashCode;
 }
diff --git a/tests/lib/math/point_test.dart b/tests/lib/math/point_test.dart
index f15c635..8d9ab72 100644
--- a/tests/lib/math/point_test.dart
+++ b/tests/lib/math/point_test.dart
@@ -9,14 +9,14 @@
 
 main() {
   test('constructor', () {
-    var point = new Point();
+    var point = new Point(0, 0);
     expect(point.x, 0);
     expect(point.y, 0);
     expect('$point', 'Point(0, 0)');
   });
 
   test('constructor X', () {
-    var point = new Point<int>(10);
+    var point = new Point<int>(10, 0);
     expect(point.x, 10);
     expect(point.y, 0);
     expect('$point', 'Point(10, 0)');
diff --git a/tests/lib/mirrors/generic_class_declaration_test.dart b/tests/lib/mirrors/generic_class_declaration_test.dart
new file mode 100644
index 0000000..0b8260f
--- /dev/null
+++ b/tests/lib/mirrors/generic_class_declaration_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2013, 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:mirrors';
+import 'package:expect/expect.dart';
+
+import 'stringify.dart';
+
+class A<T> {
+  var instanceVariable;
+  get instanceGetter => null;
+  set instanceSetter(x) => x;
+  instanceMethod() => null;
+
+  var _instanceVariable;
+  get _instanceGetter => null;
+  set _instanceSetter(x) => x;
+  _instanceMethod() => null;
+
+  static var staticVariable;
+  static get staticGetter => null;
+  static set staticSetter(x) => x;
+  static staticMethod() => null;
+
+  static var _staticVariable;
+  static get _staticGetter => null;
+  static set _staticSetter(x) => x;
+  static _staticMethod() => null;
+}
+
+main() {
+  ClassMirror cm = reflect(new A<String>()).type;
+  Expect.setEquals(
+      ['Variable(s(_instanceVariable) in s(A), private)',
+       'Variable(s(_staticVariable) in s(A), private, static)',
+       'Variable(s(instanceVariable) in s(A))',
+       'Variable(s(staticVariable) in s(A), static)'],
+       cm.declarations.values
+         .where((dm) => dm is VariableMirror).map(stringify),
+  'variables');
+
+  Expect.setEquals(
+      ['Method(s(_instanceGetter) in s(A), private, getter)',
+       'Method(s(_staticGetter) in s(A), private, static, getter)',
+       'Method(s(instanceGetter) in s(A), getter)',
+       'Method(s(staticGetter) in s(A), static, getter)'],
+       cm.declarations.values
+         .where((dm) => dm is MethodMirror && dm.isGetter).map(stringify),
+  'getters');
+
+  Expect.setEquals(
+      ['Method(s(_instanceSetter=) in s(A), private, setter)',
+       'Method(s(_staticSetter=) in s(A), private, static, setter)',
+       'Method(s(instanceSetter=) in s(A), setter)',
+       'Method(s(staticSetter=) in s(A), static, setter)'],
+       cm.declarations.values
+         .where((dm) => dm is MethodMirror && dm.isSetter).map(stringify),
+  'setters');
+
+  Expect.setEquals(
+      ['Method(s(_instanceMethod) in s(A), private)',
+       'Method(s(_staticMethod) in s(A), private, static)',
+       'Method(s(instanceMethod) in s(A))',
+       'Method(s(staticMethod) in s(A), static)'],
+       cm.declarations.values
+         .where((dm) => dm is MethodMirror && dm.isRegularMethod)
+           .map(stringify), 'methods');
+
+  Expect.setEquals(
+      ['Method(s(A) in s(A), constructor)'],
+       cm.declarations.values
+         .where((dm) => dm is MethodMirror && dm.isConstructor).map(stringify),
+  'constructors');
+
+  Expect.setEquals(
+      ['TypeVariable(s(T) in s(A), upperBound = Class(s(Object) in '
+       's(dart.core), top-level))'],
+       cm.declarations.values
+         .where((dm) => dm is TypeVariableMirror).map(stringify),
+  'type variables');
+
+}
\ No newline at end of file
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index bc1b164..c7df4a3 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -63,39 +63,39 @@
   var n = new Float32x4(2.0, 2.0, 0.001, 0.1);
   var cmp;
   cmp = m.lessThan(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
+  Expect.equals(-1, cmp.x);
   Expect.equals(0x0, cmp.y);
   Expect.equals(0x0, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.lessThanOrEqual(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
+  Expect.equals(-1, cmp.x);
+  Expect.equals(-1, cmp.y);
   Expect.equals(0x0, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.equal(n);
   Expect.equals(0x0, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
+  Expect.equals(-1, cmp.y);
   Expect.equals(0x0, cmp.z);
   Expect.equals(0x0, cmp.w);
 
   cmp = m.notEqual(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
+  Expect.equals(-1, cmp.x);
   Expect.equals(0x0, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.z);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.greaterThanOrEqual(n);
   Expect.equals(0x0, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
+  Expect.equals(-1, cmp.y);
+  Expect.equals(-1, cmp.z);
   Expect.equals(0x0, cmp.w);
 
   cmp = m.greaterThan(n);
   Expect.equals(0x0, cmp.x);
   Expect.equals(0x0, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
+  Expect.equals(-1, cmp.z);
   Expect.equals(0x0, cmp.w);
 }
 
@@ -220,7 +220,7 @@
 }
 
 testSelect() {
-  var m = new Uint32x4.bool(true, true, false, false);
+  var m = new Int32x4.bool(true, true, false, false);
   var t = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var f = new Float32x4(5.0, 6.0, 7.0, 8.0);
   var s = m.select(t, f);
@@ -231,31 +231,31 @@
 }
 
 testConversions() {
-  var m = new Uint32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
-  var n = new Float32x4.fromUint32x4Bits(m);
+  var m = new Int32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
+  var n = new Float32x4.fromInt32x4Bits(m);
   Expect.equals(1.0, n.x);
   Expect.equals(2.0, n.y);
   Expect.equals(3.0, n.z);
   Expect.equals(4.0, n.w);
   n = new Float32x4(5.0, 6.0, 7.0, 8.0);
-  m = new Uint32x4.fromFloat32x4Bits(n);
+  m = new Int32x4.fromFloat32x4Bits(n);
   Expect.equals(0x40A00000, m.x);
   Expect.equals(0x40C00000, m.y);
   Expect.equals(0x40E00000, m.z);
   Expect.equals(0x41000000, m.w);
   // Flip sign using bit-wise operators.
   n = new Float32x4(9.0, 10.0, 11.0, 12.0);
-  m = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
-  var nMask = new Uint32x4.fromFloat32x4Bits(n);
+  m = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+  var nMask = new Int32x4.fromFloat32x4Bits(n);
   nMask = nMask ^ m; // flip sign.
-  n = new Float32x4.fromUint32x4Bits(nMask);
+  n = new Float32x4.fromInt32x4Bits(nMask);
   Expect.equals(-9.0, n.x);
   Expect.equals(-10.0, n.y);
   Expect.equals(-11.0, n.z);
   Expect.equals(-12.0, n.w);
-  nMask = new Uint32x4.fromFloat32x4Bits(n);
+  nMask = new Int32x4.fromFloat32x4Bits(n);
   nMask = nMask ^ m; // flip sign.
-  n = new Float32x4.fromUint32x4Bits(nMask);
+  n = new Float32x4.fromInt32x4Bits(nMask);
   Expect.equals(9.0, n.x);
   Expect.equals(10.0, n.y);
   Expect.equals(11.0, n.z);
@@ -264,25 +264,25 @@
 
 
 testBitOperators() {
-  var m = new Uint32x4(0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA);
-  var n = new Uint32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555);
-  Expect.equals(0xAAAAAAAA, m.x);
-  Expect.equals(0xAAAAAAAA, m.y);
-  Expect.equals(0xAAAAAAAA, m.z);
-  Expect.equals(0xAAAAAAAA, m.w);
-  Expect.equals(0x55555555, n.x);
-  Expect.equals(0x55555555, n.y);
-  Expect.equals(0x55555555, n.z);
-  Expect.equals(0x55555555, n.w);
+  var m = new Int32x4(0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA);
+  var n = new Int32x4(0x5555555, 0x5555555, 0x5555555, 0x5555555);
+  Expect.equals(0xAAAAAAA, m.x);
+  Expect.equals(0xAAAAAAA, m.y);
+  Expect.equals(0xAAAAAAA, m.z);
+  Expect.equals(0xAAAAAAA, m.w);
+  Expect.equals(0x5555555, n.x);
+  Expect.equals(0x5555555, n.y);
+  Expect.equals(0x5555555, n.z);
+  Expect.equals(0x5555555, n.w);
   Expect.equals(true, n.flagX);
   Expect.equals(true, n.flagY);
   Expect.equals(true, n.flagZ);
   Expect.equals(true, n.flagW);
   var o = m|n;  // or
-  Expect.equals(0xFFFFFFFF, o.x);
-  Expect.equals(0xFFFFFFFF, o.y);
-  Expect.equals(0xFFFFFFFF, o.z);
-  Expect.equals(0xFFFFFFFF, o.w);
+  Expect.equals(0xFFFFFFF, o.x);
+  Expect.equals(0xFFFFFFF, o.y);
+  Expect.equals(0xFFFFFFF, o.z);
+  Expect.equals(0xFFFFFFF, o.w);
   Expect.equals(true, o.flagX);
   Expect.equals(true, o.flagY);
   Expect.equals(true, o.flagZ);
@@ -292,14 +292,14 @@
   Expect.equals(0x0, o.y);
   Expect.equals(0x0, o.z);
   Expect.equals(0x0, o.w);
-  n = n.withX(0xAAAAAAAA);
-  n = n.withY(0xAAAAAAAA);
-  n = n.withZ(0xAAAAAAAA);
-  n = n.withW(0xAAAAAAAA);
-  Expect.equals(0xAAAAAAAA, n.x);
-  Expect.equals(0xAAAAAAAA, n.y);
-  Expect.equals(0xAAAAAAAA, n.z);
-  Expect.equals(0xAAAAAAAA, n.w);
+  n = n.withX(0xAAAAAAA);
+  n = n.withY(0xAAAAAAA);
+  n = n.withZ(0xAAAAAAA);
+  n = n.withW(0xAAAAAAA);
+  Expect.equals(0xAAAAAAA, n.x);
+  Expect.equals(0xAAAAAAA, n.y);
+  Expect.equals(0xAAAAAAA, n.z);
+  Expect.equals(0xAAAAAAA, n.w);
   o = m^n;  // xor
   Expect.equals(0x0, o.x);
   Expect.equals(0x0, o.y);
@@ -331,7 +331,7 @@
   Expect.equals(3.0, f.y);
   Expect.equals(2.0, f.z);
   Expect.equals(1.0, f.w);
-  var m = new Uint32x4.bool(false, false, false, false);
+  var m = new Int32x4.bool(false, false, false, false);
   Expect.equals(false, m.flagX);
   Expect.equals(false, m.flagY);
   Expect.equals(false, m.flagZ);
@@ -364,7 +364,7 @@
   Expect.equals(2.0, f.y);
   Expect.equals(3.0, f.z);
   Expect.equals(4.0, f.w);
-  var m = new Uint32x4.bool(false, true, true, false);
+  var m = new Int32x4.bool(false, true, true, false);
   Expect.equals(false, m.flagX);
   Expect.equals(true, m.flagY);
   Expect.equals(true, m.flagZ);
diff --git a/tests/lib/typed_data/float32x4_unbox_regress_test.dart b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
index e179f95..b288fb3 100644
--- a/tests/lib/typed_data/float32x4_unbox_regress_test.dart
+++ b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
@@ -74,7 +74,7 @@
 }
 
 void testComparison(a, b) {
-  Uint32x4 r = a.equal(b);
+  Int32x4 r = a.equal(b);
   Expect.equals(true, r.flagX);
   Expect.equals(false, r.flagY);
   Expect.equals(false, r.flagZ);
diff --git a/tests/lib/typed_data/int32x4_arithmetic_test.dart b/tests/lib/typed_data/int32x4_arithmetic_test.dart
new file mode 100644
index 0000000..37094f8
--- /dev/null
+++ b/tests/lib/typed_data/int32x4_arithmetic_test.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2013, 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.
+// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
+
+// Library tag to be able to run in html test framework.
+library uint32x4_arithmetic_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+testAdd() {
+  var m = new Int32x4(0, 0, 0, 0);
+  var n = new Int32x4(-1, -1, -1, -1);
+  var o = m + n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  m = new Int32x4(0, 0, 0, 0);
+  n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  n = new Int32x4(1, 1, 1, 1);
+  m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(0, o.x);
+  Expect.equals(0, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(-2, o.x);
+  Expect.equals(-2, o.y);
+  Expect.equals(-2, o.z);
+  Expect.equals(-2, o.w);
+
+  n = new Int32x4(1, 0, 0, 0);
+  m = new Int32x4(2, 0, 0, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(0, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 0, 0);
+  m = new Int32x4(2, 4, 0, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(7, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 5, 0);
+  m = new Int32x4(2, 4, 6, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(7, o.y);
+  Expect.equals(11, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 5, 7);
+  m = new Int32x4(-2, -4, -6, -8);
+  o = n + m;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+}
+
+testSub() {
+  var m = new Int32x4(0, 0, 0, 0);
+  var n = new Int32x4(1, 1, 1, 1);
+  var o = m - n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  o = n - m;
+  Expect.equals(1, o.x);
+  Expect.equals(1, o.y);
+  Expect.equals(1, o.z);
+  Expect.equals(1, o.w);
+}
+
+main() {
+  for (int i = 0; i < 20; i++) {
+    testAdd();
+    testSub();
+  }
+}
diff --git a/tests/lib/typed_data/uint32x4_list_test.dart b/tests/lib/typed_data/int32x4_list_test.dart
similarity index 87%
rename from tests/lib/typed_data/uint32x4_list_test.dart
rename to tests/lib/typed_data/int32x4_list_test.dart
index b9bae4e..1ee42b6 100644
--- a/tests/lib/typed_data/uint32x4_list_test.dart
+++ b/tests/lib/typed_data/int32x4_list_test.dart
@@ -4,15 +4,15 @@
 // VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
 
 // Library tag to be able to run in html test framework.
-library uint32x4_list_test;
+library int32x4_list_test;
 
 import 'package:expect/expect.dart';
 import 'dart:typed_data';
 
 testLoadStore(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is List<Uint32x4>);
-  array[0] = new Uint32x4(1, 2, 3, 4);
+  Expect.isTrue(array is List<Int32x4>);
+  array[0] = new Int32x4(1, 2, 3, 4);
   Expect.equals(1, array[0].x);
   Expect.equals(2, array[0].y);
   Expect.equals(3, array[0].z);
@@ -38,8 +38,8 @@
 }
 
 testLoadStoreDeoptDriver() {
-  Uint32x4List list = new Uint32x4List(4);
-  Uint32x4 value = new Uint32x4(1, 2, 3, 4);
+  Int32x4List list = new Int32x4List(4);
+  Int32x4 value = new Int32x4(1, 2, 3, 4);
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
   }
@@ -72,15 +72,15 @@
     testLoadStoreDeopt(list, 0, value);
   }
   try {
-    // non-Uint32x4 value.
+    // non-Int32x4 value.
     testLoadStoreDeopt(list, 0, 4.toDouble());
   } catch (_) {}
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
   }
   try {
-    // non-Uint32x4List list.
-    testLoadStoreDeopt([new Uint32x4(2, 3, 4, 5)], 0, value);
+    // non-Int32x4List list.
+    testLoadStoreDeopt([new Int32x4(2, 3, 4, 5)], 0, value);
   } catch (_) {}
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
@@ -88,7 +88,7 @@
 }
 
 testListZero() {
-  Uint32x4List list = new Uint32x4List(1);
+  Int32x4List list = new Int32x4List(1);
   Expect.equals(0, list[0].x);
   Expect.equals(0, list[0].y);
   Expect.equals(0, list[0].z);
@@ -97,7 +97,7 @@
 
 testView(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is List<Uint32x4>);
+  Expect.isTrue(array is List<Int32x4>);
   Expect.equals(0, array[0].x);
   Expect.equals(1, array[0].y);
   Expect.equals(2, array[0].z);
@@ -110,7 +110,7 @@
 
 testSublist(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is Uint32x4List);
+  Expect.isTrue(array is Int32x4List);
   var a = array.sublist(0, 1);
   Expect.equals(1, a.length);
   Expect.equals(0, a[0].x);
@@ -135,7 +135,7 @@
 main() {
   var list;
 
-  list = new Uint32x4List(8);
+  list = new Int32x4List(8);
   for (int i = 0; i < 20; i++) {
     testLoadStore(list);
   }
@@ -144,7 +144,7 @@
   for (int i = 0; i < uint32List.length; i++) {
     uint32List[i] = i;
   }
-  list = new Uint32x4List.view(uint32List.buffer);
+  list = new Int32x4List.view(uint32List.buffer);
   for (int i = 0; i < 20; i++) {
     testView(list);
   }
diff --git a/tests/lib/typed_data/uint32x4_shuffle_test.dart b/tests/lib/typed_data/int32x4_shuffle_test.dart
similarity index 78%
rename from tests/lib/typed_data/uint32x4_shuffle_test.dart
rename to tests/lib/typed_data/int32x4_shuffle_test.dart
index f3335a8..28e4eeb 100644
--- a/tests/lib/typed_data/uint32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/int32x4_shuffle_test.dart
@@ -10,9 +10,9 @@
 import 'dart:typed_data';
 
 void testShuffle() {
-  var m = new Uint32x4(1, 2, 3, 4);
+  var m = new Int32x4(1, 2, 3, 4);
   var c;
-  c = m.shuffle(Uint32x4.WZYX);
+  c = m.shuffle(Int32x4.WZYX);
   Expect.equals(4, c.x);
   Expect.equals(3, c.y);
   Expect.equals(2, c.z);
@@ -20,7 +20,7 @@
 }
 
 void testShuffleNonConstant(mask) {
-  var m = new Uint32x4(1, 2, 3, 4);
+  var m = new Int32x4(1, 2, 3, 4);
   var c;
   c = m.shuffle(mask);
   if (mask == 1) {
@@ -29,7 +29,7 @@
     Expect.equals(1, c.z);
     Expect.equals(1, c.w);
   } else {
-    Expect.equals(Uint32x4.YYYY + 1, mask);
+    Expect.equals(Int32x4.YYYY + 1, mask);
     Expect.equals(3, c.x);
     Expect.equals(2, c.y);
     Expect.equals(2, c.z);
@@ -38,9 +38,9 @@
 }
 
 void testShuffleMix() {
-  var m = new Uint32x4(1, 2, 3, 4);
-  var n = new Uint32x4(5, 6, 7, 8);
-  var c = m.shuffleMix(n, Uint32x4.XYXY);
+  var m = new Int32x4(1, 2, 3, 4);
+  var n = new Int32x4(5, 6, 7, 8);
+  var c = m.shuffleMix(n, Int32x4.XYXY);
   Expect.equals(1, c.x);
   Expect.equals(2, c.y);
   Expect.equals(5, c.z);
@@ -48,8 +48,8 @@
 }
 
 main() {
-  var xxxx = Uint32x4.XXXX + 1;
-  var yyyy = Uint32x4.YYYY + 1;
+  var xxxx = Int32x4.XXXX + 1;
+  var yyyy = Int32x4.YYYY + 1;
   for (int i = 0; i < 20; i++) {
     testShuffle();
     testShuffleNonConstant(xxxx);
diff --git a/tests/lib/typed_data/uint32x4_sign_mask_test.dart b/tests/lib/typed_data/int32x4_sign_mask_test.dart
similarity index 65%
rename from tests/lib/typed_data/uint32x4_sign_mask_test.dart
rename to tests/lib/typed_data/int32x4_sign_mask_test.dart
index 052d0bf..b4e620e 100644
--- a/tests/lib/typed_data/uint32x4_sign_mask_test.dart
+++ b/tests/lib/typed_data/int32x4_sign_mask_test.dart
@@ -4,45 +4,45 @@
 // VMOptions=--optimization-counter-threshold=10
 
 // Library tag to be able to run in html test framework.
-library uint32x4_sign_mask;
+library int32x4_sign_mask;
 
 import 'dart:typed_data';
 import 'package:expect/expect.dart';
 
 void testImmediates() {
-  var f = new Uint32x4(1, 2, 3, 4);
+  var f = new Int32x4(1, 2, 3, 4);
   var m = f.signMask;
   Expect.equals(0x0, m);
-  f = new Uint32x4(-1, -2, -3, -4);
+  f = new Int32x4(-1, -2, -3, -4);
   m = f.signMask;
   Expect.equals(0xf, m);
-  f = new Uint32x4.bool(true, false, false, false);
+  f = new Int32x4.bool(true, false, false, false);
   m = f.signMask;
   Expect.equals(0x1, m);
-  f = new Uint32x4.bool(false, true, false, false);
+  f = new Int32x4.bool(false, true, false, false);
   m = f.signMask;
   Expect.equals(0x2, m);
-  f = new Uint32x4.bool(false, false, true, false);
+  f = new Int32x4.bool(false, false, true, false);
   m = f.signMask;
   Expect.equals(0x4, m);
-  f = new Uint32x4.bool(false, false, false, true);
+  f = new Int32x4.bool(false, false, false, true);
   m = f.signMask;
   Expect.equals(0x8, m);
 }
 
 void testZero() {
-  var f = new Uint32x4(0, 0, 0, 0);
+  var f = new Int32x4(0, 0, 0, 0);
   var m = f.signMask;
   Expect.equals(0x0, m);
-  f = new Uint32x4(-0, -0, -0, -0);
+  f = new Int32x4(-0, -0, -0, -0);
   m = f.signMask;
   Expect.equals(0x0, m);
 }
 
 void testLogic() {
-  var a = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
-  var b = new Uint32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
-  var c = new Uint32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
+  var a = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+  var b = new Int32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
+  var c = new Int32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
   var m1 = (a & c).signMask;
   Expect.equals(0xf, m1);
   var m2 = (a & b).signMask;
diff --git a/tests/lib/typed_data/uint32x4_arithmetic_test.dart b/tests/lib/typed_data/uint32x4_arithmetic_test.dart
deleted file mode 100644
index a702082..0000000
--- a/tests/lib/typed_data/uint32x4_arithmetic_test.dart
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2013, 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.
-// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
-
-// Library tag to be able to run in html test framework.
-library uint32x4_arithmetic_test;
-
-import "package:expect/expect.dart";
-import 'dart:typed_data';
-
-testAdd() {
-  var m = new Uint32x4(0, 0, 0, 0);
-  var n = new Uint32x4(-1, -1, -1, -1);
-  var o = m + n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  m = new Uint32x4(0, 0, 0, 0);
-  n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  n = new Uint32x4(1, 1, 1, 1);
-  m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(0, o.x);
-  Expect.equals(0, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(4294967294, o.x);
-  Expect.equals(4294967294, o.y);
-  Expect.equals(4294967294, o.z);
-  Expect.equals(4294967294, o.w);
-
-  n = new Uint32x4(1, 0, 0, 0);
-  m = new Uint32x4(2, 0, 0, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(0, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 0, 0);
-  m = new Uint32x4(2, 4, 0, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 5, 0);
-  m = new Uint32x4(2, 4, 6, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(11, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 5, 7);
-  m = new Uint32x4(2, 4, 6, 8);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(11, o.z);
-  Expect.equals(15, o.w);
-}
-
-testSub() {
-  var m = new Uint32x4(0, 0, 0, 0);
-  var n = new Uint32x4(1, 1, 1, 1);
-  var o = m - n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  o = n - m;
-  Expect.equals(1, o.x);
-  Expect.equals(1, o.y);
-  Expect.equals(1, o.z);
-  Expect.equals(1, o.w);
-}
-
-main() {
-  for (int i = 0; i < 20; i++) {
-    testAdd();
-    testSub();
-  }
-}
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart
index 63a3be8..1c42e5e 100644
--- a/tests/standalone/io/http_advanced_test.dart
+++ b/tests/standalone/io/http_advanced_test.dart
@@ -219,16 +219,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(new IsolatedHttpServerStatus.started(_server.port),
-                       null);
+          replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new IsolatedHttpServerStatus.error(), null);
+        replyTo.send(new IsolatedHttpServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+      replyTo.send(new IsolatedHttpServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/http_basic_test.dart b/tests/standalone/io/http_basic_test.dart
index 2d7eebd..f30a32b 100644
--- a/tests/standalone/io/http_basic_test.dart
+++ b/tests/standalone/io/http_basic_test.dart
@@ -170,15 +170,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(new TestServerStatus.started(_server.port), null);
+          replyTo.send(new TestServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new TestServerStatus.error(), null);
+        replyTo.send(new TestServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new TestServerStatus.stopped(), null);
+      replyTo.send(new TestServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/http_connection_info_test.dart b/tests/standalone/io/http_connection_info_test.dart
index 0d4caa4..e503803 100644
--- a/tests/standalone/io/http_connection_info_test.dart
+++ b/tests/standalone/io/http_connection_info_test.dart
@@ -11,8 +11,8 @@
 
     server.listen((request) {
       var response = request.response;
-      Expect.isTrue(request.connectionInfo.remoteHost is String);
-      Expect.isTrue(response.connectionInfo.remoteHost is String);
+      Expect.isTrue(request.connectionInfo.remoteAddress is InternetAddress);
+      Expect.isTrue(response.connectionInfo.remoteAddress is InternetAddress);
       Expect.equals(request.connectionInfo.localPort, server.port);
       Expect.equals(response.connectionInfo.localPort, server.port);
       Expect.isNotNull(clientPort);
@@ -26,7 +26,8 @@
     HttpClient client = new HttpClient();
     client.get("127.0.0.1", server.port, "/")
         .then((request) {
-          Expect.isTrue(request.connectionInfo.remoteHost is String);
+          Expect.isTrue(
+              request.connectionInfo.remoteAddress is InternetAddress);
           Expect.equals(request.connectionInfo.remotePort, server.port);
           clientPort = request.connectionInfo.localPort;
           return request.close();
diff --git a/tests/standalone/io/http_read_test.dart b/tests/standalone/io/http_read_test.dart
index 2a0ad52..23e40ab 100644
--- a/tests/standalone/io/http_read_test.dart
+++ b/tests/standalone/io/http_read_test.dart
@@ -138,16 +138,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(
-              new IsolatedHttpServerStatus.started(_server.port), null);
+          replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new IsolatedHttpServerStatus.error(), null);
+        replyTo.send(new IsolatedHttpServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+      replyTo.send(new IsolatedHttpServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/print_env.dart b/tests/standalone/io/print_env.dart
index 28f926c..4337451 100644
--- a/tests/standalone/io/print_env.dart
+++ b/tests/standalone/io/print_env.dart
@@ -5,5 +5,8 @@
 import "dart:io";
 
 main(List<String> arguments) {
+  if (!Platform.script.isAbsolute) {
+    throw "Platform.script is not absolute: ${Platform.script}";
+  }
   print(Platform.environment[arguments[0]]);
 }
diff --git a/tests/standalone/io/process_environment_test.dart b/tests/standalone/io/process_environment_test.dart
index c36ef8c..4376aab 100644
--- a/tests/standalone/io/process_environment_test.dart
+++ b/tests/standalone/io/process_environment_test.dart
@@ -20,6 +20,14 @@
               environment: environment,
               includeParentEnvironment: includeParent)
       .then((result) {
+        if (result.exitCode != 0) {
+          print('print_env.dart subprocess failed '
+                'with exit code ${result.exitCode}');
+          print('stdout:');
+          print(result.stdout);
+          print('stderr:');
+          print(result.stderr);
+        }
         Expect.equals(0, result.exitCode);
         callback(result.stdout);
       });
diff --git a/tests/standalone/io/skipping_dart2js_compilations_test.dart b/tests/standalone/io/skipping_dart2js_compilations_test.dart
index 06efd12..95ae623 100644
--- a/tests/standalone/io/skipping_dart2js_compilations_test.dart
+++ b/tests/standalone/io/skipping_dart2js_compilations_test.dart
@@ -132,7 +132,7 @@
 
   CommandCompletedHandler(FileUtils this.fileUtils, bool this._shouldHaveRun);
 
-  void processCompletedTest(CommandOutput output) {
+  void processCompletedTest(runner.CommandOutput output) {
     Expect.isTrue(output.exitCode == 0);
     Expect.isTrue(output.stderr.length == 0);
     if (_shouldHaveRun) {
@@ -212,7 +212,7 @@
       var completedHandler = new CommandCompletedHandler(fileUtils, shouldRun);
       var command = makeCompilationCommand(name, fileUtils);
       var process = new runner.RunningProcess(command, 60);
-      return process.run().then((CommandOutput output) {
+      return process.run().then((runner.CommandOutput output) {
         completedHandler.processCompletedTest(output);
       });
     }
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart
index 475d97a..c00b89f 100644
--- a/tests/standalone/io/socket_close_test.dart
+++ b/tests/standalone/io/socket_close_test.dart
@@ -360,7 +360,7 @@
           },
           onError: errorHandlerServer
         );
-        replyTo.send(_server.port, null);
+        replyTo.send(_server.port);
       });
     } else {
       Timer.run(waitForResult);
diff --git a/tests/standalone/io/socket_info_test.dart b/tests/standalone/io/socket_info_test.dart
index 395b6e4..7a5a20f 100644
--- a/tests/standalone/io/socket_info_test.dart
+++ b/tests/standalone/io/socket_info_test.dart
@@ -13,8 +13,8 @@
         Expect.equals(socket.port, server.port);
         Expect.equals(clientSocket.port, socket.remotePort);
         Expect.equals(clientSocket.remotePort, socket.port);
-        Expect.equals(socket.remoteHost, "127.0.0.1");
-        Expect.equals(clientSocket.remoteHost, "127.0.0.1");
+        Expect.equals(socket.remoteAddress.address, "127.0.0.1");
+        Expect.equals(clientSocket.remoteAddress.address, "127.0.0.1");
 
         server.close();
       });
diff --git a/tests/standalone/package/package1_test.dart b/tests/standalone/package/package1_test.dart
index 0640511..20afaa0 100644
--- a/tests/standalone/package/package1_test.dart
+++ b/tests/standalone/package/package1_test.dart
@@ -5,4 +5,8 @@
 // PackageRoot=none
 
 library package1_test;
-import 'package:package1.dart';
+import 'package:package1.dart' as p1;
+
+main() {
+  p1.main();
+}
diff --git a/tools/VERSION b/tools/VERSION
index 453bc99..fc8997f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
-MINOR 1
-BUILD 2
-PATCH 0
+MINOR 8
+BUILD 10
+PATCH 10
diff --git a/tools/bots/bot_utils.py b/tools/bots/bot_utils.py
index f94acd4..bee7334 100644
--- a/tools/bots/bot_utils.py
+++ b/tools/bots/bot_utils.py
@@ -77,7 +77,6 @@
     - /sdk/dartsdk-{linux,macos,windows}-{ia32,x64}-release.zip
     - /editor/darteditor-{linux,macos,windows}-{ia32,x64}.zip
     - /editor/darteditor-installer-macos-{ia32,x64}.dmg
-    - /editor/darteditor-installer-windows-{ia32,x64}.msi
     - /editor-eclipse-update
          /{index.html,features/,plugins/,artifacts.jar,content.jar}
   """
diff --git a/tools/dartium/download_file.dart b/tools/dartium/download_file.dart
new file mode 100644
index 0000000..6339ae8
--- /dev/null
+++ b/tools/dartium/download_file.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2013, 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:async';
+import 'dart:io';
+
+Future downloadFile(Uri url, String destination) {
+  var client = new HttpClient();
+  return client.getUrl(url)
+    .then((HttpClientRequest request) => request.close())
+    .then((HttpClientResponse response) {
+      if (response.statusCode != HttpStatus.OK) {
+        throw new Exception("Http status code (${response.statusCode}) "
+                            "was not 200. Aborting.");
+      }
+      var sink = new File(destination).openWrite();
+      return response.pipe(sink).then((_) {
+        client.close();
+    });
+  });
+}
+
+void main(List<String> arguments) {
+  die(String message) {
+    print(message);
+    exit(1);
+  }
+
+  if (arguments.length != 2) {
+    var scriptName = Platform.script.pathSegments.last;
+    die("Usage dart $scriptName <url> <destination-file>");
+  }
+
+  var url = Uri.parse(arguments[0]);
+  var destination = arguments[1];
+
+  if (!['http', 'https'].contains(url.scheme)) {
+    die("Unsupported scheme in uri $url");
+  }
+
+  print("Downloading $url to $destination.");
+  downloadFile(url, destination).then((_) {
+    print("Download finished.");
+  }).catchError((error) {
+    die("An unexpected error occured: $error.");
+  });
+}
diff --git a/tools/dartium/download_shellscript_template.bat b/tools/dartium/download_shellscript_template.bat
new file mode 100644
index 0000000..d41951d
--- /dev/null
+++ b/tools/dartium/download_shellscript_template.bat
@@ -0,0 +1,16 @@
+@REM Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file

+@REM for details. All rights reserved. Use of this source code is governed by a

+@REM BSD-style license that can be found in the LICENSE file.

+

+@REM This script will download VAR_DOWNLOAD_URL to VAR_DESTINATION in the

+@REM current working directory.

+

+@echo off

+

+set "CHROMIUM_DIR=%~dp0"

+set "SDK_BIN=%CHROMIUM_DIR%\..\dart-sdk\bin"

+

+set "DART=%SDK_BIN%\dart.exe"

+set "DOWNLOAD_SCRIPT=%CHROMIUM_DIR%\download_file.dart"

+

+"%DART%" "%DOWNLOAD_SCRIPT%" "VAR_DOWNLOAD_URL" "VAR_DESTINATION"

diff --git a/tools/dartium/download_shellscript_template.sh b/tools/dartium/download_shellscript_template.sh
new file mode 100644
index 0000000..3399945
--- /dev/null
+++ b/tools/dartium/download_shellscript_template.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# Copyright (c) 2013, 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 script will download VAR_DOWNLOAD_URL to VAR_DESTINATION in the current
+# working directory.
+
+CHROMIUM_DIR="$(dirname $BASH_SOURCE)"
+SDK_BIN="$CHROMIUM_DIR/../dart-sdk/bin"
+
+DART="$SDK_BIN/dart"
+DOWNLOAD_SCRIPT="$CHROMIUM_DIR/download_file.dart"
+
+"$DART" "$DOWNLOAD_SCRIPT" "VAR_DOWNLOAD_URL" "VAR_DESTINATION"
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index 00cf4d1..b218268 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -199,6 +199,44 @@
         ]
       }
     },
+    "CanvasRenderingContext2D": {
+      "members": {
+        "currentPath": [
+          "/**",
+          "   * The current default path of this canvas context, if there is one.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Current default path]",
+          "   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#current-default-path)",
+          "   * from WHATWG.",
+          "   */"
+        ],
+        "imageSmoothingEnabled": [
+          "/**",
+          "   * Whether images and patterns on this canvas will be smoothed when this",
+          "   * canvas is scaled.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Image smoothing]",
+          "   * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-smoothing)",
+          "   * from WHATWG.",
+          "   */"
+        ],
+        "webkitBackingStorePixelRatio": [
+          "/**",
+          "   * The ratio between this canvas' backing store dimensions and the canvas'",
+          "   * logical dimensions.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [High DPI Canvas tutorial]",
+          "   * (http://www.html5rocks.com/en/tutorials/canvas/hidpi/) from HTML5Rocks.",
+          "   */"
+        ]
+      }
+    },
     "Clipboard": {
       "members": {
         "getData": [
@@ -416,6 +454,7 @@
           "   * save typing a few characters.",
           "   *",
           "   * [selectors] should be a string using CSS selector syntax.",
+          "   *",
           "   *     var element1 = document.querySelector('.className');",
           "   *     var element2 = document.querySelector('#id');",
           "   *",
@@ -465,6 +504,24 @@
         ]
       }
     },
+    "DocumentFragment": {
+      "members": {
+        "querySelector": [
+          "/**",
+          "   * Finds the first descendant element of this document fragment that matches",
+          "   * the specified group of selectors.",
+          "   *",
+          "   * [selectors] should be a string using CSS selector syntax.",
+          "   *",
+          "   *     var element1 = fragment.querySelector('.className');",
+          "   *     var element2 = fragment.querySelector('#id');",
+          "   *",
+          "   * For details about CSS selector syntax, see the",
+          "   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).",
+          "   */"
+        ]
+      }
+    },
     "Element": {
       "comment": [
         "/**",
@@ -707,8 +764,8 @@
         ],
         "getBoundingClientRect": [
           "/**",
-          "   * The smallest bounding rectangle that encompasses this element's padding,",
-          "   * scrollbar, and border.",
+          "   * Returns the smallest bounding rectangle that encompasses this element's",
+          "   * padding, scrollbar, and border.",
           "   *",
           "   * ## Other resources",
           "   *",
@@ -716,12 +773,14 @@
           "   * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect)",
           "   * from MDN.",
           "   * * [The getBoundingClientRect() method]",
-          "   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.",
+          "   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)",
+          "   * from W3C.",
           "   */"
         ],
         "getClientRects": [
           "/**",
-          "   * A list of bounding rectangles for each box associated with this element.",
+          "   * Returns a list of bounding rectangles for each box associated with this",
+          "   * element.",
           "   *",
           "   * ## Other resources",
           "   *",
@@ -729,7 +788,33 @@
           "   * (https://developer.mozilla.org/en-US/docs/Web/API/Element.getClientRects)",
           "   * from MDN.",
           "   * * [The getClientRects() method]",
-          "   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods) from W3C.",
+          "   * (http://www.w3.org/TR/cssom-view/#the-getclientrects-and-getboundingclientrect-methods)",
+          "   * from W3C.",
+          "   */"
+        ],
+        "getDestinationInsertionPoints": [
+          "/**",
+          "   * Returns a list of shadow DOM insertion points to which this element is",
+          "   * distributed.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Shadow DOM specification]",
+          "   * (https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)",
+          "   * from W3C.",
+          "   */"
+        ],
+        "getElementsByClassName": [
+          "/**",
+          "   * Returns a list of nodes with the given class name inside this element.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [getElementsByClassName]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName)",
+          "   * from MDN.",
+          "   * * [DOM specification]",
+          "   * (http://www.w3.org/TR/domcore/) from W3C.",
           "   */"
         ],
         "hidden": [
@@ -1138,9 +1223,8 @@
           "   *     // Gets the first descendant [ImageElement]",
           "   *     var img = element.querySelector('img');",
           "   *",
-          "   * See also:",
-          "   *",
-          "   * * [CSS Selectors](http://docs.webplatform.org/wiki/css/selectors)",
+          "   * For details about CSS selector syntax, see the",
+          "   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).",
           "   */"
         ],
         "resetEvent": [
@@ -1151,6 +1235,26 @@
           "   * See [EventStreamProvider] for usage information.",
           "   */"
         ],
+        "scrollByLines": [
+          "/**",
+          "   * Scrolls the element by a number of lines.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [scrollByLines]",
+          "   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.",
+          "   */"
+        ],
+        "scrollByPages": [
+          "/**",
+          "   * Scrolls the element by a number of pages.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [scrollByPages]",
+          "   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.",
+          "   */"
+        ],
         "scrollEvent": [
           "/**",
           "   * Static factory designed to expose `scroll` events to event",
@@ -1283,6 +1387,19 @@
           "   * See [EventStreamProvider] for usage information.",
           "   */"
         ],
+        "webkitGetRegionFlowRanges": [
+          "/**",
+          "   * Returns an array of ranges of fragments in the flow.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [CSS regions and exclusions tutorial]",
+          "   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.",
+          "   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.",
+          "   * * [CSS regions specification]",
+          "   * (http://www.w3.org/TR/css3-regions/) from W3C.",
+          "   */"
+        ],
         "webkitRegionOverset": [
           "/**",
           "   * The current state of this region.",
@@ -1300,6 +1417,33 @@
           "   * * [CSS regions specification]",
           "   * (http://www.w3.org/TR/css3-regions/) from W3C.",
           "   */"
+        ],
+        "webkitRequestFullscreen": [
+          "/**",
+          "   * Displays this element fullscreen.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Using the full-screen API]",
+          "   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)",
+          "   * tutorial from WebPlatform.org.",
+          "   * * [Fullscreen specification]",
+          "   * (http://www.w3.org/TR/fullscreen/) from W3C.",
+          "   */"
+        ],
+        "webkitRequestPointerLock": [
+          "/**",
+          "   * Locks the mouse pointer to this element.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Pointer lock and first person shooter controls]",
+          "   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from",
+          "   * HTML5Rocks.",
+          "   *",
+          "   * * [Pointer lock specification]",
+          "   * (http://www.w3.org/TR/pointerlock/) from W3C.",
+          "   */"
         ]
       }
     },
@@ -2223,6 +2367,209 @@
           "   * This method is more efficient than `nodes.add`, and is the preferred",
           "   * way of appending a child node.",
           "   */"
+        ],
+        "childNodes": [
+          "/**",
+          "   * A list of this node's children.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.childNodes]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes)",
+          "   * from MDN.",
+          "   */"
+        ],
+        "cloneNode": [
+          "/**",
+          "   * Returns a copy of this node.",
+          "   *",
+          "   * If [deep] is `true`, then all of this node's children and decendents are",
+          "   * copied as well. If [deep] is `false`, then only this node is copied.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.cloneNode]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode) from",
+          "   * MDN.",
+          "   */"
+        ],
+        "contains": [
+          "/**",
+          "   * Returns true if this node contains the specified node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.contains]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.contains) from MDN.",
+          "   */"
+        ],
+        "firstChild": [
+          "/**",
+          "   * The first child of this node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.firstChild]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild)",
+          "   * from MDN.",
+          "   */"
+        ],
+        "hasChildNodes": [
+          "/**",
+          "   * Returns true if this node has any children.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.hasChildNodes]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.hasChildNodes) from",
+          "   * MDN.",
+          "   */"
+        ],
+        "insertBefore": [
+          "/**",
+          "   * Inserts all of the nodes into this node directly before refChild.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.insertBefore]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore) from",
+          "   * MDN.",
+          "   */"
+        ],
+        "lastChild": [
+          "/**",
+          "   * The last child of this node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.lastChild]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild)",
+          "   * from MDN.",
+          "   */"
+        ],
+        "nextSibling": [
+          "/**",
+          "   * The next sibling node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.nextSibling]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling)",
+          "   * from MDN.",
+          "   */"
+        ],
+        "nodeName": [
+          "/**",
+          "   * The name of this node.",
+          "   *",
+          "   * This varies by this node's [nodeType].",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.nodeName]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeName)",
+          "   * from MDN. This page contains a table of [nodeName] values for each",
+          "   * [nodeType].",
+          "   */"
+        ],
+        "nodeType": [
+          "/**",
+          "   * The type of node.",
+          "   *",
+          "   * This value is one of:",
+          "   *",
+          "   * * [ATTRIBUTE_NODE] if this node is an attribute.",
+          "   * * [CDATA_SECTION_NODE] if this node is a [CDataSection].",
+          "   * * [COMMENT_NODE] if this node is a [Comment].",
+          "   * * [DOCUMENT_FRAGMENT_NODE] if this node is a [DocumentFragment].",
+          "   * * [DOCUMENT_NODE] if this node is a [Document].",
+          "   * * [DOCUMENT_TYPE_NODE] if this node is a [DocumentType] node.",
+          "   * * [ELEMENT_NODE] if this node is an [Element].",
+          "   * * [ENTITY_NODE] if this node is an entity.",
+          "   * * [ENTITY_REFERENCE_NODE] if this node is an entity reference.",
+          "   * * [NOTATION_NODE] if this node is a notation.",
+          "   * * [PROCESSING_INSTRUCTION_NODE] if this node is a [ProcessingInstruction].",
+          "   * * [TEXT_NODE] if this node is a [Text] node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.nodeType]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType) from MDN.",
+          "   */"
+        ],
+        "nodeValue": [
+          "/**",
+          "   * The value of this node.",
+          "   *",
+          "   * This varies by this type's [nodeType].",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.nodeValue]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue)",
+          "   * from MDN. This page contains a table of [nodeValue] values for each",
+          "   * [nodeType].",
+          "   */"
+        ],
+        "ownerDocument": [
+          "/**",
+          "   * The document this node belongs to.",
+          "   *",
+          "   * Returns `null` if this node does not belong to any document.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.ownerDocument]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument) from",
+          "   * MDN.",
+          "   */"
+        ],
+        "parentElement": [
+          "/**",
+          "   * The parent element of this node.",
+          "   *",
+          "   * Returns `null` if this node either does not have a parent or its parent is",
+          "   * not an element.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.parentElement]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement) from",
+          "   * W3C.",
+          "   */"
+        ],
+        "parentNode": [
+          "/**",
+          "   * The parent node of this node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.parentNode]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode) from",
+          "   * MDN.",
+          "   */"
+        ],
+        "previousSibling": [
+          "/**",
+          "   * The previous sibling node.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.previousSibling]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling)",
+          "   * from MDN.",
+          "   */"
+        ],
+        "textContent": [
+          "/**",
+          "   * All text within this node and its decendents.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Node.textContent]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent) from",
+          "   * MDN.",
+          "   */"
         ]
       }
     },
@@ -2820,12 +3167,14 @@
         " * Top-level container for the current browser tab or window.",
         " *",
         " * In a web browser, each window has a [Window] object, but within the context",
-        " * of a script, a [Window] object represents only the current window. In",
-        " * addition to the open window, each window, tab, and iframe has its own",
-        " * [Window] object. A [Window] contains a [Document] object, which contains this",
-        " * web page's content.",
+        " * of a script, this object represents only the current window.",
+        " * Each other window, tab, and iframe has its own [Window] object.",
         " *",
-        " * Use `window` to access properties of the current window. For example:",
+        " * Each window contains a [Document] object, which contains all of the window's",
+        " * content.",
+        " *",
+        " * Use the top-level `window` object to access the current window.",
+        " * For example:",
         " *",
         " *     // Draw a scene when the window repaints.",
         " *     drawScene(num delta) {...}",
@@ -2835,8 +3184,12 @@
         " *     window.console.log('Jinkies!');",
         " *     window.console.error('Jeepers!');",
         " *",
-        " * **Note:** This class represents the current window, whereas [WindowBase] is",
-        " * a representation of any window, including other tabs, windows, and frames.",
+        " * **Note:** This class represents only the current window, while [WindowBase]",
+        " * is a representation of any window, including other tabs, windows, and frames.",
+        " *",
+        " * ## See also",
+        " *",
+        " * * [WindowBase]",
         " *",
         " * ## Other resources",
         " *",
@@ -3331,12 +3684,33 @@
           "   * `send` method is intended only for more complext HTTP requests where",
           "   * finer-grained control is needed.",
           "   *",
-          "   * See also:",
+          "   * ## Other resources",
           "   *",
-          "   *   * [send](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)",
+          "   * * [XMLHttpRequest.send]",
+          "   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)",
           "   * from MDN.",
           "   */"
         ],
+        "setRequestHeader": [
+          "/**",
+          "   * Sets the value of an HTTP requst header.",
+          "   *",
+          "   * This method should be called after the request is opened, but before",
+          "   * the request is sent.",
+          "   *",
+          "   * Multiple calls with the same header will combine all their values into a",
+          "   * single header.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [XMLHttpRequest.setRequestHeader]",
+          "   * (https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#send%28%29)",
+          "   * from MDN.",
+          "   * * [The setRequestHeader() method]",
+          "   * (http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method) from",
+          "   * W3C.",
+          "   */"
+        ],
         "status": [
           "/**",
           "   * The http result code from the request (200, 404, etc).",
@@ -3349,6 +3723,24 @@
           "   * See also: [Http Status Codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)",
           "   */"
         ],
+        "timeout": [
+          "/**",
+          "   * Length of time before a request is automatically terminated.",
+          "   *",
+          "   * When the time has passed, a [TimeoutEvent] is dispatched.",
+          "   *",
+          "   * If [timeout] is set to 0, then the request will not time out.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [XMLHttpRequest.timeout]",
+          "   * (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#timeout)",
+          "   * from MDN.",
+          "   * * [The timeout attribute]",
+          "   * (http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute)",
+          "   * from W3C.",
+          "   */"
+        ],
         "upload": [
           "/**",
           "   * [EventTarget] that can hold listeners to track the progress of the request.",
diff --git a/tools/dom/src/CanvasImageSource.dart b/tools/dom/src/CanvasImageSource.dart
index 69165cf..e030533 100644
--- a/tools/dom/src/CanvasImageSource.dart
+++ b/tools/dom/src/CanvasImageSource.dart
@@ -5,31 +5,39 @@
 part of html;
 
 /**
- * An object that can be drawn to a [CanvasRenderingContext2D] object with
- * [CanvasRenderingContext2D.drawImage],
- * [CanvasRenderingContext2D.drawImageToRect],
- * [CanvasRenderingContext2D.drawImageScaled], or
- * [CanvasRenderingContext2D.drawImageScaledFromSource].
+ * An object that can be drawn to a 2D canvas rendering context.
  *
- * If the CanvasImageSource is an [ImageElement] then the element's image is
- * used. If the [ImageElement] is an animated image, then the poster frame is
- * used. If there is no poster frame, then the first frame of animation is used.
+ * The image drawn to the canvas depends on the type of this object:
  *
- * If the CanvasImageSource is a [VideoElement] then the frame at the current
- * playback position is used as the image.
+ * * If this object is an [ImageElement], then this element's image is
+ * drawn to the canvas. If this element is an animated image, then this
+ * element's poster frame is drawn. If this element has no poster frame, then
+ * the first frame of animation is drawn.
  *
- * If the CanvasImageSource is a [CanvasElement] then the element's bitmap is
- * used.
+ * * If this object is a [VideoElement], then the frame at this element's current
+ * playback position is drawn to the canvas.
  *
- * ** Note: ** Currently, all versions of Internet Explorer do not support
- * drawing a VideoElement to a canvas. Also, you may experience problems drawing
+ * * If this object is a [CanvasElement], then this element's bitmap is drawn to
+ * the canvas.
+ *
+ * **Note:** Currently all versions of Internet Explorer do not support
+ * drawing a video element to a canvas. You may also encounter problems drawing
  * a video to a canvas in Firefox if the source of the video is a data URL.
  *
- * See also:
+ * ## See also
  *
- *  * [CanvasImageSource](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
- * from the WHATWG.
- *  * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
- * from the WHATWG.
+ * * [CanvasRenderingContext2D.drawImage]
+ * * [CanvasRenderingContext2D.drawImageToRect]
+ * * [CanvasRenderingContext2D.drawImageScaled]
+ * * [CanvasRenderingContext2D.drawImageScaledFromSource]
+ *
+ * ## Other resources
+ *
+ * * [Image sources for 2D rendering contexts]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#image-sources-for-2d-rendering-contexts)
+ * from WHATWG.
+ * * [Drawing images]
+ * (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
+ * from WHATWG.
  */
 abstract class CanvasImageSource {}
diff --git a/tools/dom/src/CrossFrameTypes.dart b/tools/dom/src/CrossFrameTypes.dart
index f8ed874..679092d 100644
--- a/tools/dom/src/CrossFrameTypes.dart
+++ b/tools/dom/src/CrossFrameTypes.dart
@@ -7,13 +7,17 @@
 /**
  * Top-level container for a browser tab or window.
  *
- * In a web browser, a [WindowBase] object represents any browser window.  This
- * abstract class contains the state of the window and its relation to other
- * windows, such as which window opened it.
+ * In a web browser, a [WindowBase] object represents any browser window. This
+ * object contains the window's state and its relation to other
+ * windows, such as which window opened this window.
  *
- * **Note:** This class represents any window, whereas [Window] is
+ * **Note:** This class represents any window, while [Window] is
  * used to access the properties and content of the current window or tab.
  *
+ * ## See also
+ *
+ * * [Window]
+ *
  * ## Other resources
  *
  * * [DOM Window](https://developer.mozilla.org/en-US/docs/DOM/window) from MDN.
diff --git a/tools/dom/src/PathObserver.dart b/tools/dom/src/PathObserver.dart
new file mode 100644
index 0000000..bc07ac1
--- /dev/null
+++ b/tools/dom/src/PathObserver.dart
@@ -0,0 +1,288 @@
+// Copyright (c) 2013, 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.
+
+part of html;
+
+// This code is inspired by ChangeSummary:
+// https://github.com/rafaelw/ChangeSummary/blob/master/change_summary.js
+// ...which underlies MDV. Since we don't need the functionality of
+// ChangeSummary, we just implement what we need for data bindings.
+// This allows our implementation to be much simpler.
+
+// TODO(jmesserly): should we make these types stronger, and require
+// Observable objects? Currently, it is fine to say something like:
+//     var path = new PathObserver(123, '');
+//     print(path.value); // "123"
+//
+// Furthermore this degenerate case is allowed:
+//     var path = new PathObserver(123, 'foo.bar.baz.qux');
+//     print(path.value); // "null"
+//
+// Here we see that any invalid (i.e. not Observable) value will break the
+// path chain without producing an error or exception.
+//
+// Now the real question: should we do this? For the former case, the behavior
+// is correct but we could chose to handle it in the dart:html bindings layer.
+// For the latter case, it might be better to throw an error so users can find
+// the problem.
+
+
+/**
+ * A data-bound path starting from a view-model or model object, for example
+ * `foo.bar.baz`.
+ *
+ * When the [values] stream is being listened to, this will observe changes to
+ * the object and any intermediate object along the path, and send [values]
+ * accordingly. When all listeners are unregistered it will stop observing
+ * the objects.
+ *
+ * This class is used to implement [Node.bind] and similar functionality.
+ */
+// TODO(jmesserly): find a better home for this type.
+@Experimental
+class PathObserver {
+  /** The object being observed. */
+  final object;
+
+  /** The path string. */
+  final String path;
+
+  /** True if the path is valid, otherwise false. */
+  final bool _isValid;
+
+  // TODO(jmesserly): same issue here as ObservableMixin: is there an easier
+  // way to get a broadcast stream?
+  StreamController _values;
+  Stream _valueStream;
+
+  _PropertyObserver _observer, _lastObserver;
+
+  Object _lastValue;
+  bool _scheduled = false;
+
+  /**
+   * Observes [path] on [object] for changes. This returns an object that can be
+   * used to get the changes and get/set the value at this path.
+   * See [PathObserver.values] and [PathObserver.value].
+   */
+  PathObserver(this.object, String path)
+    : path = path, _isValid = _isPathValid(path) {
+
+    // TODO(jmesserly): if the path is empty, or the object is! Observable, we
+    // can optimize the PathObserver to be more lightweight.
+
+    _values = new StreamController.broadcast(sync: true,
+                                             onListen: _observe,
+                                             onCancel: _unobserve);
+
+    if (_isValid) {
+      var segments = [];
+      for (var segment in path.trim().split('.')) {
+        if (segment == '') continue;
+        var index = int.parse(segment, onError: (_) {});
+        segments.add(index != null ? index : new Symbol(segment));
+      }
+
+      // Create the property observer linked list.
+      // Note that the structure of a path can't change after it is initially
+      // constructed, even though the objects along the path can change.
+      for (int i = segments.length - 1; i >= 0; i--) {
+        _observer = new _PropertyObserver(this, segments[i], _observer);
+        if (_lastObserver == null) _lastObserver = _observer;
+      }
+    }
+  }
+
+  // TODO(jmesserly): we could try adding the first value to the stream, but
+  // that delivers the first record async.
+  /**
+   * Listens to the stream, and invokes the [callback] immediately with the
+   * current [value]. This is useful for bindings, which want to be up-to-date
+   * immediately.
+   */
+  StreamSubscription bindSync(void callback(value)) {
+    var result = values.listen(callback);
+    callback(value);
+    return result;
+  }
+
+  // TODO(jmesserly): should this be a change record with the old value?
+  // TODO(jmesserly): should this be a broadcast stream? We only need
+  // single-subscription in the bindings system, so single sub saves overhead.
+  /**
+   * Gets the stream of values that were observed at this path.
+   * This returns a single-subscription stream.
+   */
+  Stream get values => _values.stream;
+
+  /** Force synchronous delivery of [values]. */
+  void _deliverValues() {
+    _scheduled = false;
+
+    var newValue = value;
+    if (!identical(_lastValue, newValue)) {
+      _values.add(newValue);
+      _lastValue = newValue;
+    }
+  }
+
+  void _observe() {
+    if (_observer != null) {
+      _lastValue = value;
+      _observer.observe();
+    }
+  }
+
+  void _unobserve() {
+    if (_observer != null) _observer.unobserve();
+  }
+
+  void _notifyChange() {
+    if (_scheduled) return;
+    _scheduled = true;
+
+    // TODO(jmesserly): should we have a guarenteed order with respect to other
+    // paths? If so, we could implement this fairly easily by sorting instances
+    // of this class by birth order before delivery.
+    queueChangeRecords(_deliverValues);
+  }
+
+  /** Gets the last reported value at this path. */
+  get value {
+    if (!_isValid) return null;
+    if (_observer == null) return object;
+    _observer.ensureValue(object);
+    return _lastObserver.value;
+  }
+
+  /** Sets the value at this path. */
+  void set value(Object value) {
+    // TODO(jmesserly): throw if property cannot be set?
+    // MDV seems tolerant of these error.
+    if (_observer == null || !_isValid) return;
+    _observer.ensureValue(object);
+    var last = _lastObserver;
+    if (_setObjectProperty(last._object, last._property, value)) {
+      // Technically, this would get updated asynchronously via a change record.
+      // However, it is nice if calling the getter will yield the same value
+      // that was just set. So we use this opportunity to update our cache.
+      last.value = value;
+    }
+  }
+}
+
+// TODO(jmesserly): these should go away in favor of mirrors!
+_getObjectProperty(object, property) {
+  if (object is List && property is int) {
+    if (property >= 0 && property < object.length) {
+      return object[property];
+    } else {
+      return null;
+    }
+  }
+
+  // TODO(jmesserly): what about length?
+  if (object is Map) return object[property];
+
+  if (object is Observable) return object.getValueWorkaround(property);
+
+  return null;
+}
+
+bool _setObjectProperty(object, property, value) {
+  if (object is List && property is int) {
+    object[property] = value;
+  } else if (object is Map) {
+    object[property] = value;
+  } else if (object is Observable) {
+    (object as Observable).setValueWorkaround(property, value);
+  } else {
+    return false;
+  }
+  return true;
+}
+
+
+class _PropertyObserver {
+  final PathObserver _path;
+  final _property;
+  final _PropertyObserver _next;
+
+  // TODO(jmesserly): would be nice not to store both of these.
+  Object _object;
+  Object _value;
+  StreamSubscription _sub;
+
+  _PropertyObserver(this._path, this._property, this._next);
+
+  get value => _value;
+
+  void set value(Object newValue) {
+    _value = newValue;
+    if (_next != null) {
+      if (_sub != null) _next.unobserve();
+      _next.ensureValue(_value);
+      if (_sub != null) _next.observe();
+    }
+  }
+
+  void ensureValue(object) {
+    // If we're observing, values should be up to date already.
+    if (_sub != null) return;
+
+    _object = object;
+    value = _getObjectProperty(object, _property);
+  }
+
+  void observe() {
+    if (_object is Observable) {
+      assert(_sub == null);
+      _sub = (_object as Observable).changes.listen(_onChange);
+    }
+    if (_next != null) _next.observe();
+  }
+
+  void unobserve() {
+    if (_sub == null) return;
+
+    _sub.cancel();
+    _sub = null;
+    if (_next != null) _next.unobserve();
+  }
+
+  void _onChange(List<ChangeRecord> changes) {
+    for (var change in changes) {
+      // TODO(jmesserly): what to do about "new Symbol" here?
+      // Ideally this would only preserve names if the user has opted in to
+      // them being preserved.
+      // TODO(jmesserly): should we drop observable maps with String keys?
+      // If so then we only need one check here.
+      if (change.changes(_property)) {
+        value = _getObjectProperty(_object, _property);
+        _path._notifyChange();
+        return;
+      }
+    }
+  }
+}
+
+// From: https://github.com/rafaelw/ChangeSummary/blob/master/change_summary.js
+
+const _pathIndentPart = r'[$a-z0-9_]+[$a-z0-9_\d]*';
+final _pathRegExp = new RegExp('^'
+    '(?:#?' + _pathIndentPart + ')?'
+    '(?:'
+      '(?:\\.' + _pathIndentPart + ')'
+    ')*'
+    r'$', caseSensitive: false);
+
+final _spacesRegExp = new RegExp(r'\s');
+
+bool _isPathValid(String s) {
+  s = s.replaceAll(_spacesRegExp, '');
+
+  if (s == '') return true;
+  if (s[0] == '.') return false;
+  return _pathRegExp.hasMatch(s);
+}
diff --git a/tools/dom/src/shared_html.dart b/tools/dom/src/shared_html.dart
index b0b3c47..c44effc 100644
--- a/tools/dom/src/shared_html.dart
+++ b/tools/dom/src/shared_html.dart
@@ -30,5 +30,39 @@
 @Experimental()
 ElementList queryAll(String relativeSelectors) => document.queryAll(relativeSelectors);
 
-Element querySelector(String selector) => document.querySelector(selector);
-ElementList querySelectorAll(String selector) => document.querySelectorAll(selector);
+/**
+ * Finds the first descendant element of this document that matches the
+ * specified group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelector]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var element1 = document.querySelector('.className');
+ *     var element2 = document.querySelector('#id');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+Element querySelector(String selectors) => document.querySelector(selectors);
+
+/**
+ * Finds all descendant elements of this document that match the specified
+ * group of selectors.
+ *
+ * Unless your webpage contains multiple documents, the top-level
+ * [querySelectorAll]
+ * method behaves the same as this method, so you should use it instead to
+ * save typing a few characters.
+ *
+ * [selectors] should be a string using CSS selector syntax.
+ *
+ *     var items = document.querySelectorAll('.itemClassName');
+ *
+ * For details about CSS selector syntax, see the
+ * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+ */
+ElementList querySelectorAll(String selectors) => document.querySelectorAll(selectors);
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index 32ec467..4b6c0d1 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -19,6 +19,7 @@
    * save typing a few characters.
    *
    * [selectors] should be a string using CSS selector syntax.
+   *
    *     var items = document.querySelectorAll('.itemClassName');
    *
    * For details about CSS selector syntax, see the
diff --git a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
index c57cf1e..e57d98f 100644
--- a/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -43,6 +43,17 @@
     children.addAll(copy);
   }
 
+  /**
+   * Finds all descendant elements of this document fragment that match the
+   * specified group of selectors.
+   *
+   * [selectors] should be a string using CSS selector syntax.
+   *
+   *     var items = document.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
+   */
   ElementList querySelectorAll(String selectors) =>
     new _FrozenElementList._wrap(_querySelectorAll(selectors));
 
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 5c52b06..b742efd 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -586,6 +586,9 @@
    * [selectors] should be a string using CSS selector syntax.
    *
    *     var items = element.querySelectorAll('.itemClassName');
+   *
+   * For details about CSS selector syntax, see the
+   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
    */
   @DomName('Element.querySelectorAll')
   ElementList querySelectorAll(String selectors) =>
@@ -796,6 +799,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index 2f7b2d7..bb01401 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -190,6 +190,9 @@
   // Custom element created callback.
   Node._created() : super._created();
 
+  /**
+   * A modifiable list of this node's children.
+   */
   List<Node> get nodes {
     return new _ChildNodeListLazy(this);
   }
diff --git a/tools/publish_all_pkgs.py b/tools/publish_all_pkgs.py
index a43f57b..425d214 100644
--- a/tools/publish_all_pkgs.py
+++ b/tools/publish_all_pkgs.py
@@ -20,6 +20,8 @@
 BLACK_LISTED_DIRECTORIES = ['.svn', 'async_helper', 'expect', 'third_party'];
 
 def Main(argv):
+  pkgs_to_publish = []
+
   for pkgdir in ['pkg', 'pkg/third_party']:
     for name in os.listdir(pkgdir):
       if os.path.isdir(os.path.join(pkgdir, name)):
diff --git a/tools/publish_pkg.py b/tools/publish_pkg.py
index 18f4cef..06cc3b4 100755
--- a/tools/publish_pkg.py
+++ b/tools/publish_pkg.py
@@ -19,122 +19,52 @@
 import subprocess
 import tempfile
 
-def ReplaceInFiles(paths, subs):
-  '''Reads a series of files, applies a series of substitutions to each, and
-     saves them back out. subs should be a list of (pattern, replace) tuples.'''
-  for path in paths:
-    contents = open(path).read()
-    for pattern, replace in subs:
-      contents = re.sub(pattern, replace, contents)
-
-    dest = open(path, 'w')
-    dest.write(contents)
-    dest.close()
-
-def ReadVersion(file, field):
-  for line in open(file).read().split('\n'):
-    [k, v] = re.split('\s+', line)
-    if field == k:
-      return int(v)
-
 def Main(argv):
   HOME = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
 
-  versionFile = os.path.join(HOME, 'tools', 'VERSION')
-  major = ReadVersion(versionFile, 'MAJOR')
-  minor = ReadVersion(versionFile, 'MINOR')
-  build = ReadVersion(versionFile, 'BUILD')
-  patch = ReadVersion(versionFile, 'PATCH')
-
-  # bleeding_edge has a fixed version number of 0.1.x.y . Don't allow users
-  # to publish packages from bleeding_edge.
-  if major == 0 and minor <= 1:
-    print 'Error: Do not run this script from a bleeding_edge checkout.'
-    return -1
-
-  if patch != 0:
-    version = '%d.%d.%d+%d' % (major, minor, build, patch)
-  else:
-    version = '%d.%d.%d' % (major, minor, build)
-
-  tmpDir = tempfile.mkdtemp()
   pkgName = os.path.basename(os.path.normpath(argv[1]))
 
-  pubspec = os.path.join(tmpDir, pkgName, 'pubspec.yaml')
+  pubspec = os.path.join(HOME, argv[1], 'pubspec.yaml')
+  if not os.path.exists(pubspec):
+    print 'Error: did not find pubspec.yaml at ' + pubspec
+    return -1
 
-  replaceInDart = []
-  replaceInPubspec = []
+  with open(pubspec) as pubspecFile:
+    lines = pubspecFile.readlines()
 
-  if os.path.exists(os.path.join(HOME, argv[1], 'pubspec.yaml')):
-    #
-    # If pubspec.yaml exists, add the SDK's version number if
-    # no version number is present.
-    #
-    shutil.copytree(os.path.join(HOME, argv[1]),
-                    os.path.join(tmpDir, pkgName))
-    with open(pubspec) as pubspecFile:
-      lines = pubspecFile.readlines()
-    with open(pubspec, 'w') as pubspecFile:
-      foundVersion = False
+  version = None
+  foundSdkContraint = False
+  inDependencies = False
+  for line in lines:
+    if line.startswith('dependencies:'):
+      inDependencies = True
+    elif line.startswith('environment:'):
+      foundSdkContraint = True
+    elif line[0].isalpha():
       inDependencies = False
-      for line in lines:
-        if line.startswith('dependencies:'):
-          inDependencies = True
-        elif line[0].isalpha():
-          inDependencies = False
-        if line.startswith('version:'):
-          foundVersion = True
-        if inDependencies:
-          #
-          # Within dependencies, don't print line that start with "    sdk:"
-          # and strip out "{ sdk: package_name }".
-          #
-          if not line.startswith('    sdk:'):
-            line = re.sub(r'{(\s*)sdk:(\s+)([a-z0-9_]+)(\s*)}', '', line)
-            pubspecFile.write(line)
-        else:
-          pubspecFile.write(line)
-      if not foundVersion:
-        pubspecFile.write('\nversion: ' + version + '\n')
-      pubspecFile.write('environment:\n')
-      pubspecFile.write('  sdk: ">=' + version + '"\n')
+    if line.startswith('version:'):
+      version = line[len('version:'):].strip()
+    if inDependencies:
+      if line.endswith(': any'):
+        print 'Error in %s: should not use "any" version constraint: %s' % (
+            pubspec, line)
+        return -1
 
-  else:
-    #
-    # If there's a lib/ directory in the package, copy the package.
-    # Otherwise, move the package's contents to lib/.
-    #
-    if os.path.exists(os.path.join(HOME, argv[1], 'lib')):
-      shutil.copytree(os.path.join(HOME, argv[1]),
-                      os.path.join(tmpDir, pkgName))
-    else:
-      os.makedirs(os.path.join(tmpDir, pkgName))
-      shutil.copytree(os.path.join(HOME, argv[1]),
-                      os.path.join(tmpDir, pkgName, 'lib'))
+  if not version:
+    print 'Error in %s: did not find package version.' % pubspec
+    return -1
 
-    # Create pubspec.yaml .
-    with open(pubspec, 'w') as pubspecFile:
-      pubspecFile.write('name: ' + pkgName + '_unsupported\n')
-      pubspecFile.write('author: None\n')
-      pubspecFile.write('homepage: http://None\n')
-      pubspecFile.write('version: ' + version + '\n')
-      pubspecFile.write("description: >\n")
-      pubspecFile.write('  A completely unsupported clone of Dart SDK library\n')
-      pubspecFile.write('  ' + argv[1] + ' . This package will change in\n')
-      pubspecFile.write('  unpredictable/incompatible ways without warning.\n')
-      pubspecFile.write('dependencies:\n')
-      pubspecFile.write('environment:\n')
-      pubspecFile.write('  sdk: ">=' + version + '"\n')
+  if not foundSdkContraint:
+    print 'Error in %s: did not find SDK version constraint.' % pubspec
+    return -1
 
-    libpath = os.path.join(HOME, argv[1], '../libraries.dart')
-    if os.path.exists(libpath):
-      # Copy libraries.dart into the package source code
-      shutil.copy(libpath, os.path.join(tmpDir, pkgName, 'lib/libraries.dart'))
+  tmpDir = tempfile.mkdtemp()
 
-      # Replace '../../libraries.dart' with '../libraries.dart'
-      replaceInDart.append(
-        (r'(import|part)(\s+)(\'|")\.\./(\.\./)*libraries.dart',
-         r'\1\2\3\4libraries.dart'))
+  #
+  # If pubspec.yaml exists, check that the SDK's version constraint is valid
+  #
+  shutil.copytree(os.path.join(HOME, argv[1]),
+                  os.path.join(tmpDir, pkgName))
 
   if not os.path.exists(os.path.join(tmpDir, pkgName, 'LICENSE')):
     with open(os.path.join(tmpDir, pkgName, 'LICENSE'), 'w') as licenseFile:
@@ -167,21 +97,16 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ''');
 
-  replaceInDart.append(
-    (r'(import|part)(\s+)(\'|")(\.\./)+pkg/([^/]+/)lib/', r'\1\2\3package:\5'))
-
-  # Replace '../*/pkg' imports and parts.
-  for root, dirs, files in os.walk(os.path.join(tmpDir, pkgName)):
-    # TODO(dgrove): Remove this when dartbug.com/7487 is fixed.
-    if '.svn' in dirs:
-      shutil.rmtree(os.path.join(root, '.svn'))
-    for name in files:
-      if name.endswith('.dart'):
-        ReplaceInFiles([os.path.join(root, name)], replaceInDart)
-      elif name == 'pubspec.yaml':
-        ReplaceInFiles([os.path.join(root, name)], replaceInPubspec)
-
   print 'publishing version ' + version + ' of ' + argv[1] + ' to pub.\n'
+
+  # TODO(jmesserly): this code puts things in the pub cache. Useful for testing
+  # without actually uploading.
+  #cacheDir = os.path.join(
+  #    os.path.expanduser('~/.pub-cache/hosted/pub.dartlang.org'),
+  #    pkgName + '-' + version)
+  #print 'Moving to ' + cacheDir
+  #shutil.move(os.path.join(tmpDir, pkgName), cacheDir)
+
   subprocess.call(['pub', 'publish'], cwd=os.path.join(tmpDir, pkgName))
   shutil.rmtree(tmpDir)
 
diff --git a/tools/signing_script.py b/tools/signing_script.py
index 0ce0a4c..4d45d7a 100755
--- a/tools/signing_script.py
+++ b/tools/signing_script.py
@@ -1,9 +1,10 @@
 #!/usr/bin/env python
-#
+# 
 # Copyright (c) 2013, 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 hashlib
 import imp
 import optparse
 import os
@@ -136,12 +137,6 @@
                                     config['bits'])
   run([GSUTIL, 'cp', bucket, destination])
 
-def download_msi_installer_from_new_location(channel, config, destination):
-  namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.RAW)
-  bucket = namer.editor_installer_filepath(
-      config['revision'], config['system'], config['bits'], 'msi')
-  run([GSUTIL, 'cp', bucket, destination])
-
 def upload_to_new_location(channel, config, source_zip):
   namer = bot_utils.GCSNamer(channel,
                              bot_utils.ReleaseType.SIGNED)
@@ -158,12 +153,6 @@
   run([GSUTIL, 'setacl', 'public-read', bucket])
   run([GSUTIL, 'setacl', 'public-read', bucket + '.md5sum'])
 
-def upload_msi_installer_to_new_location(channel, config, signed_msi):
-  namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.SIGNED)
-  bucket = namer.editor_installer_filepath(
-      config['revision'], config['system'], config['bits'], 'msi')
-  run([GSUTIL, 'cp', '-a', 'public-read', signed_msi, bucket])
-
 def main():
   if sys.platform != 'linux2':
     print "This script was only tested on linux. Please run it on linux!"
@@ -224,7 +213,6 @@
       'content_shell' : os.path.join('dart', 'chromium',
                                      'content_shell.exe'),
 
-      'msi_scratch' : 'darteditor-installer-windows-%(bits)s.exe',
       'editor_scratch' : 'DartEditor%(bits)s.exe',
       'chrome_scratch' : 'chromium%(bits)s.exe',
       'content_shell_scratch' : 'content_shell%(bits)s.exe',
@@ -268,16 +256,9 @@
           else:
             # We copy an .exe file
             copy_file(from_path, to_path)
-
-        # Download .*msi installer from GCS to presign directory
-        if system == 'win32':
-          presign_msi = os.path.join(
-              presign_dir, locations[system]['msi_scratch'] % config)
-          download_msi_installer_from_new_location(
-              options.channel, config, presign_msi)
       elif options.deploy:
         copy_tree(destination_dir, deploy_dir)
-
+  
         for name in ['editor', 'chrome', 'content_shell']:
           from_path = os.path.join(
               postsign_dir, locations[system]['%s_scratch' % name] % config)
@@ -300,13 +281,6 @@
         else:
           upload_to_old_location(config, deploy_zip_file)
 
-        # Upload *.msi installer and set 'public-read ACL
-        if system == 'win32':
-          postsign_msi = os.path.join(
-              postsign_dir, locations[system]['msi_scratch'] % config)
-          upload_msi_installer_to_new_location(
-              options.channel, config, postsign_msi)
-
 if __name__ == '__main__':
   main()
 
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 1d29041..326cce2 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -116,7 +116,7 @@
   // TODO(amouravski): move HtmlDiff inside of the future chain below to re-use
   // the MirrorSystem already analyzed.
   _diff = new HtmlDiff(printWarnings:false);
-  Future htmlDiff = _diff.run(currentDirectory.resolve(libPath));
+  Future htmlDiff = _diff.run(currentDirectory.resolveUri(path.toUri(libPath)));
 
   // TODO(johnniwinther): Libraries for the compilation seem to be more like
   // URIs. Perhaps Path should have a toURI() method.
diff --git a/utils/pub/pub.Makefile b/utils/pub/pub.Makefile
new file mode 100644
index 0000000..c1d628d
--- /dev/null
+++ b/utils/pub/pub.Makefile
@@ -0,0 +1,6 @@
+# This file is generated by gyp; do not edit.
+
+export builddir_name ?= dart/utils/pub/out
+.PHONY: all
+all:
+	$(MAKE) -C ../.. pub
diff --git a/utils/pub/pub.target.mk b/utils/pub/pub.target.mk
new file mode 100644
index 0000000..6362e21
--- /dev/null
+++ b/utils/pub/pub.target.mk
@@ -0,0 +1,38 @@
+# This file is generated by gyp; do not edit.
+
+TOOLSET := target
+TARGET := pub
+### Rules for action "generate_pub_snapshot":
+quiet_cmd_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot = ACTION dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot $@
+cmd_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd utils/pub; mkdir -p $(obj)/gen; "$(builddir)/dart" "--package-root=$(builddir)/packages/" "--generate-script-snapshot=$(obj)/gen/pub.dart.snapshot" ../../sdk/lib/_internal/pub/bin/pub.dart
+
+$(obj)/gen/pub.dart.snapshot: obj := $(abs_obj)
+$(obj)/gen/pub.dart.snapshot: builddir := $(abs_builddir)
+$(obj)/gen/pub.dart.snapshot: TOOLSET := $(TOOLSET)
+$(obj)/gen/pub.dart.snapshot: $(builddir)/dart sdk/lib/_internal/pub/bin/pub.dart sdk/lib/_internal/pub/lib/src/http.dart sdk/lib/_internal/pub/lib/src/utils.dart sdk/lib/_internal/pub/lib/src/command_deploy.dart sdk/lib/_internal/pub/lib/src/git_source.dart sdk/lib/_internal/pub/lib/src/command_install.dart sdk/lib/_internal/pub/lib/src/exit_codes.dart sdk/lib/_internal/pub/lib/src/command.dart sdk/lib/_internal/pub/lib/src/source_registry.dart sdk/lib/_internal/pub/lib/src/pubspec.dart sdk/lib/_internal/pub/lib/src/command_help.dart sdk/lib/_internal/pub/lib/src/oauth2.dart sdk/lib/_internal/pub/lib/src/command_uploader.dart sdk/lib/_internal/pub/lib/src/error_group.dart sdk/lib/_internal/pub/lib/src/directory_tree.dart sdk/lib/_internal/pub/lib/src/sdk.dart sdk/lib/_internal/pub/lib/src/dart.dart sdk/lib/_internal/pub/lib/src/hosted_source.dart sdk/lib/_internal/pub/lib/src/version.dart sdk/lib/_internal/pub/lib/src/git.dart sdk/lib/_internal/pub/lib/src/io.dart sdk/lib/_internal/pub/lib/src/system_cache.dart sdk/lib/_internal/pub/lib/src/safe_http_server.dart sdk/lib/_internal/pub/lib/src/command_update.dart sdk/lib/_internal/pub/lib/src/command_version.dart sdk/lib/_internal/pub/lib/src/validator.dart sdk/lib/_internal/pub/lib/src/command_cache.dart sdk/lib/_internal/pub/lib/src/source.dart sdk/lib/_internal/pub/lib/src/command_lish.dart sdk/lib/_internal/pub/lib/src/package.dart sdk/lib/_internal/pub/lib/src/log.dart sdk/lib/_internal/pub/lib/src/entrypoint.dart sdk/lib/_internal/pub/lib/src/lock_file.dart sdk/lib/_internal/pub/lib/src/path_source.dart sdk/lib/_internal/pub/lib/src/validator/name.dart sdk/lib/_internal/pub/lib/src/validator/size.dart sdk/lib/_internal/pub/lib/src/validator/pubspec_field.dart sdk/lib/_internal/pub/lib/src/validator/compiled_dartdoc.dart sdk/lib/_internal/pub/lib/src/validator/directory.dart sdk/lib/_internal/pub/lib/src/validator/utf8_readme.dart sdk/lib/_internal/pub/lib/src/validator/dependency.dart sdk/lib/_internal/pub/lib/src/validator/license.dart sdk/lib/_internal/pub/lib/src/validator/lib.dart sdk/lib/_internal/pub/lib/src/solver/version_solver.dart sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart sdk/lib/_internal/pub/test/command_line_config.dart sdk/lib/_internal/pub/test/version_test.dart sdk/lib/_internal/pub/test/io_test.dart sdk/lib/_internal/pub/test/pub_cache_test.dart sdk/lib/_internal/pub/test/test_pub.dart sdk/lib/_internal/pub/test/lock_file_test.dart sdk/lib/_internal/pub/test/real_version_test.dart sdk/lib/_internal/pub/test/utils_test.dart sdk/lib/_internal/pub/test/directory_tree_test.dart sdk/lib/_internal/pub/test/unknown_source_test.dart sdk/lib/_internal/pub/test/dev_dependency_test.dart sdk/lib/_internal/pub/test/package_files_test.dart sdk/lib/_internal/pub/test/pubspec_test.dart sdk/lib/_internal/pub/test/pub_test.dart sdk/lib/_internal/pub/test/pub_install_and_update_test.dart sdk/lib/_internal/pub/test/version_solver_test.dart sdk/lib/_internal/pub/test/descriptor.dart sdk/lib/_internal/pub/test/error_group_test.dart sdk/lib/_internal/pub/test/pub_uploader_test.dart sdk/lib/_internal/pub/test/lish/cloud_storage_upload_doesnt_redirect_test.dart sdk/lib/_internal/pub/test/lish/cloud_storage_upload_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/upload_form_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/utils.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_a_malformed_error_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_a_warning_and_is_canceled_test.dart sdk/lib/_internal/pub/test/lish/force_cannot_be_combined_with_dry_run_test.dart sdk/lib/_internal/pub/test/lish/upload_form_fields_is_not_a_map_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_invalid_json_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_a_malformed_success_test.dart sdk/lib/_internal/pub/test/lish/package_creation_provides_an_error_test.dart sdk/lib/_internal/pub/test/lish/upload_form_is_missing_url_test.dart sdk/lib/_internal/pub/test/lish/force_does_not_publish_if_there_are_errors_test.dart sdk/lib/_internal/pub/test/lish/upload_form_is_missing_fields_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_an_error_test.dart sdk/lib/_internal/pub/test/lish/preview_package_validation_has_a_warning_test.dart sdk/lib/_internal/pub/test/lish/package_validation_has_a_warning_and_continues_test.dart sdk/lib/_internal/pub/test/lish/force_publishes_if_tests_are_no_warnings_or_errors_test.dart sdk/lib/_internal/pub/test/lish/preview_package_validation_has_no_warnings_test.dart sdk/lib/_internal/pub/test/lish/archives_and_uploads_a_package_test.dart sdk/lib/_internal/pub/test/lish/upload_form_url_is_not_a_string_test.dart sdk/lib/_internal/pub/test/lish/force_publishes_if_there_are_warnings_test.dart sdk/lib/_internal/pub/test/lish/upload_form_fields_has_a_non_string_value_test.dart sdk/lib/_internal/pub/test/lish/upload_form_provides_invalid_json_test.dart sdk/lib/_internal/pub/test/update/git/do_not_update_if_unneeded_test.dart sdk/lib/_internal/pub/test/update/git/update_to_incompatible_pubspec_test.dart sdk/lib/_internal/pub/test/update/git/update_to_nonexistent_pubspec_test.dart sdk/lib/_internal/pub/test/update/git/update_locked_test.dart sdk/lib/_internal/pub/test/update/git/update_one_locked_test.dart sdk/lib/_internal/pub/test/update/hosted/unlock_dependers_test.dart sdk/lib/_internal/pub/test/update/hosted/unlock_if_necessary_test.dart sdk/lib/_internal/pub/test/update/hosted/update_removed_constraints_test.dart sdk/lib/_internal/pub/test/validator/license_test.dart sdk/lib/_internal/pub/test/validator/utils.dart sdk/lib/_internal/pub/test/validator/pubspec_field_test.dart sdk/lib/_internal/pub/test/validator/dependency_test.dart sdk/lib/_internal/pub/test/validator/directory_test.dart sdk/lib/_internal/pub/test/validator/name_test.dart sdk/lib/_internal/pub/test/validator/lib_test.dart sdk/lib/_internal/pub/test/validator/size_test.dart sdk/lib/_internal/pub/test/validator/utf8_readme_test.dart sdk/lib/_internal/pub/test/validator/compiled_dartdoc_test.dart sdk/lib/_internal/pub/test/oauth2/utils.dart sdk/lib/_internal/pub/test/oauth2/with_server_rejected_credentials_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_server_rejected_refresh_token_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_no_credentials_authenticates_and_saves_credentials_test.dart sdk/lib/_internal/pub/test/oauth2/with_an_expired_credentials_refreshes_and_saves_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_pre_existing_credentials_does_not_authenticate_test.dart sdk/lib/_internal/pub/test/oauth2/with_an_expired_credentials_without_a_refresh_token_authenticates_again_test.dart sdk/lib/_internal/pub/test/oauth2/with_a_malformed_credentials_authenticates_again_test.dart sdk/lib/_internal/pub/test/descriptor/tar.dart sdk/lib/_internal/pub/test/descriptor/git.dart sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_missing_package_test.dart sdk/lib/_internal/pub/test/hosted/offline_test.dart sdk/lib/_internal/pub/test/hosted/fail_gracefully_on_url_resolve_test.dart sdk/lib/_internal/pub/test/hosted/remove_removed_transitive_dependency_test.dart sdk/lib/_internal/pub/test/hosted/remove_removed_dependency_test.dart sdk/lib/_internal/pub/test/install/relative_symlink_test.dart sdk/lib/_internal/pub/test/install/broken_symlink_test.dart sdk/lib/_internal/pub/test/install/switch_source_test.dart sdk/lib/_internal/pub/test/install/git/check_out_transitive_test.dart sdk/lib/_internal/pub/test/install/git/unlock_if_incompatible_test.dart sdk/lib/_internal/pub/test/install/git/require_pubspec_test.dart sdk/lib/_internal/pub/test/install/git/check_out_with_trailing_slash_test.dart sdk/lib/_internal/pub/test/install/git/dependency_name_match_pubspec_test.dart sdk/lib/_internal/pub/test/install/git/check_out_branch_test.dart sdk/lib/_internal/pub/test/install/git/stay_locked_if_compatible_test.dart sdk/lib/_internal/pub/test/install/git/check_out_and_update_test.dart sdk/lib/_internal/pub/test/install/git/check_out_twice_test.dart sdk/lib/_internal/pub/test/install/git/check_out_test.dart sdk/lib/_internal/pub/test/install/git/lock_version_test.dart sdk/lib/_internal/pub/test/install/git/require_pubspec_name_test.dart sdk/lib/_internal/pub/test/install/git/check_out_revision_test.dart sdk/lib/_internal/pub/test/install/git/different_repo_name_test.dart sdk/lib/_internal/pub/test/install/hosted/unlock_if_incompatible_test.dart sdk/lib/_internal/pub/test/install/hosted/do_not_update_on_removed_constraints_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_test.dart sdk/lib/_internal/pub/test/install/hosted/install_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_compatible_test.dart sdk/lib/_internal/pub/test/install/hosted/install_transitive_test.dart sdk/lib/_internal/pub/test/install/hosted/unlock_if_new_is_unsatisfied_test.dart sdk/lib/_internal/pub/test/install/hosted/stay_locked_if_new_is_satisfied_test.dart sdk/lib/_internal/pub/test/install/hosted/cached_pubspec_test.dart sdk/lib/_internal/pub/test/install/hosted/resolve_constraints_test.dart sdk/lib/_internal/pub/test/install/hosted/repair_cache_test.dart sdk/lib/_internal/pub/test/install/path/nonexistent_dir_test.dart sdk/lib/_internal/pub/test/install/path/absolute_path_test.dart sdk/lib/_internal/pub/test/install/path/relative_symlink_test.dart sdk/lib/_internal/pub/test/install/path/shared_dependency_test.dart sdk/lib/_internal/pub/test/install/path/shared_dependency_symlink_test.dart sdk/lib/_internal/pub/test/install/path/absolute_symlink_test.dart sdk/lib/_internal/pub/test/install/path/no_pubspec_test.dart sdk/lib/_internal/pub/test/install/path/relative_path_test.dart sdk/lib/_internal/pub/test/install/path/path_is_file_test.dart sdk/lib/_internal/pub/test/deploy/copies_non_dart_files_to_deploy_test.dart sdk/lib/_internal/pub/test/deploy/ignores_non_entrypoint_dart_files_test.dart sdk/lib/_internal/pub/test/deploy/compiles_dart_entrypoints_to_dart_and_js_test.dart sdk/lib/_internal/pub/test/deploy/reports_dart_parse_errors_test.dart sdk/lib/_internal/pub/test/deploy/copies_dart_js_next_to_entrypoints_test.dart sdk/lib/_internal/pub/test/deploy/with_no_web_directory_test.dart sdk/lib/_internal/libraries.dart sdk/lib/_internal/compiler/compiler.dart sdk/lib/_internal/compiler/implementation/dart_types.dart sdk/lib/_internal/compiler/implementation/string_validator.dart sdk/lib/_internal/compiler/implementation/world.dart sdk/lib/_internal/compiler/implementation/typechecker.dart sdk/lib/_internal/compiler/implementation/filenames.dart sdk/lib/_internal/compiler/implementation/dart2js.dart sdk/lib/_internal/compiler/implementation/patch_parser.dart sdk/lib/_internal/compiler/implementation/constants.dart sdk/lib/_internal/compiler/implementation/script.dart sdk/lib/_internal/compiler/implementation/library_loader.dart sdk/lib/_internal/compiler/implementation/enqueue.dart sdk/lib/_internal/compiler/implementation/compiler.dart sdk/lib/_internal/compiler/implementation/diagnostic_listener.dart sdk/lib/_internal/compiler/implementation/warnings.dart sdk/lib/_internal/compiler/implementation/source_file_provider.dart sdk/lib/_internal/compiler/implementation/tree_validator.dart sdk/lib/_internal/compiler/implementation/apiimpl.dart sdk/lib/_internal/compiler/implementation/native_handler.dart sdk/lib/_internal/compiler/implementation/constant_system_dart.dart sdk/lib/_internal/compiler/implementation/dart2jslib.dart sdk/lib/_internal/compiler/implementation/compile_time_constants.dart sdk/lib/_internal/compiler/implementation/closure.dart sdk/lib/_internal/compiler/implementation/code_buffer.dart sdk/lib/_internal/compiler/implementation/source_file.dart sdk/lib/_internal/compiler/implementation/deferred_load.dart sdk/lib/_internal/compiler/implementation/resolved_visitor.dart sdk/lib/_internal/compiler/implementation/colors.dart sdk/lib/_internal/compiler/implementation/source_map_builder.dart sdk/lib/_internal/compiler/implementation/constant_system.dart sdk/lib/_internal/compiler/implementation/util/characters.dart sdk/lib/_internal/compiler/implementation/util/util.dart sdk/lib/_internal/compiler/implementation/util/uri_extras.dart sdk/lib/_internal/compiler/implementation/util/link_implementation.dart sdk/lib/_internal/compiler/implementation/util/link.dart sdk/lib/_internal/compiler/implementation/util/util_implementation.dart sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart sdk/lib/_internal/compiler/implementation/dart_backend/emitter.dart sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart sdk/lib/_internal/compiler/implementation/js_backend/minify_namer.dart sdk/lib/_internal/compiler/implementation/js_backend/namer.dart sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart sdk/lib/_internal/compiler/implementation/js_backend/runtime_types.dart sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart sdk/lib/_internal/compiler/implementation/js_backend/backend.dart sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart sdk/lib/_internal/compiler/implementation/lib/string_helper.dart sdk/lib/_internal/compiler/implementation/lib/collection_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_rti.dart sdk/lib/_internal/compiler/implementation/lib/core_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_array.dart sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart sdk/lib/_internal/compiler/implementation/lib/isolate_patch.dart sdk/lib/_internal/compiler/implementation/lib/async_patch.dart sdk/lib/_internal/compiler/implementation/lib/collection_dev_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_helper.dart sdk/lib/_internal/compiler/implementation/lib/scalarlist_patch.dart sdk/lib/_internal/compiler/implementation/lib/native_helper.dart sdk/lib/_internal/compiler/implementation/lib/io_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_number.dart sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart sdk/lib/_internal/compiler/implementation/lib/isolate_helper.dart sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart sdk/lib/_internal/compiler/implementation/lib/constant_map.dart sdk/lib/_internal/compiler/implementation/lib/typed_data_patch.dart sdk/lib/_internal/compiler/implementation/lib/math_patch.dart sdk/lib/_internal/compiler/implementation/lib/js_string.dart sdk/lib/_internal/compiler/implementation/lib/json_patch.dart sdk/lib/_internal/compiler/implementation/lib/foreign_helper.dart sdk/lib/_internal/compiler/implementation/lib/interceptors.dart sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart sdk/lib/_internal/compiler/implementation/mirrors/util.dart sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart sdk/lib/_internal/compiler/implementation/resolution/scope.dart sdk/lib/_internal/compiler/implementation/resolution/resolution.dart sdk/lib/_internal/compiler/implementation/resolution/secret_tree_element.dart sdk/lib/_internal/compiler/implementation/resolution/members.dart sdk/lib/_internal/compiler/implementation/ssa/ssa.dart sdk/lib/_internal/compiler/implementation/ssa/bailout.dart sdk/lib/_internal/compiler/implementation/ssa/codegen.dart sdk/lib/_internal/compiler/implementation/ssa/types.dart sdk/lib/_internal/compiler/implementation/ssa/validate.dart sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart sdk/lib/_internal/compiler/implementation/ssa/optimize.dart sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart sdk/lib/_internal/compiler/implementation/ssa/nodes.dart sdk/lib/_internal/compiler/implementation/ssa/value_set.dart sdk/lib/_internal/compiler/implementation/ssa/builder.dart sdk/lib/_internal/compiler/implementation/ssa/interceptor_simplifier.dart sdk/lib/_internal/compiler/implementation/ssa/tracer.dart sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart sdk/lib/_internal/compiler/implementation/js/precedence.dart sdk/lib/_internal/compiler/implementation/js/nodes.dart sdk/lib/_internal/compiler/implementation/js/builder.dart sdk/lib/_internal/compiler/implementation/js/printer.dart sdk/lib/_internal/compiler/implementation/js/js.dart sdk/lib/_internal/compiler/implementation/types/types.dart sdk/lib/_internal/compiler/implementation/types/union_type_mask.dart sdk/lib/_internal/compiler/implementation/types/type_mask.dart sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart sdk/lib/_internal/compiler/implementation/types/simple_types_inferrer.dart sdk/lib/_internal/compiler/implementation/types/flat_type_mask.dart sdk/lib/_internal/compiler/implementation/elements/elements.dart sdk/lib/_internal/compiler/implementation/elements/modelx.dart sdk/lib/_internal/compiler/implementation/universe/side_effects.dart sdk/lib/_internal/compiler/implementation/universe/selector_map.dart sdk/lib/_internal/compiler/implementation/universe/universe.dart sdk/lib/_internal/compiler/implementation/universe/function_set.dart sdk/lib/_internal/compiler/implementation/scanner/byte_array_scanner.dart sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart sdk/lib/_internal/compiler/implementation/scanner/listener.dart sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart sdk/lib/_internal/compiler/implementation/scanner/parser_task.dart sdk/lib/_internal/compiler/implementation/scanner/scanner.dart sdk/lib/_internal/compiler/implementation/scanner/keyword.dart sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart sdk/lib/_internal/compiler/implementation/scanner/partial_parser.dart sdk/lib/_internal/compiler/implementation/scanner/token.dart sdk/lib/_internal/compiler/implementation/scanner/parser.dart sdk/lib/_internal/compiler/implementation/scanner/array_based_scanner.dart sdk/lib/_internal/compiler/implementation/scanner/string_scanner.dart sdk/lib/_internal/compiler/implementation/tree/visitors.dart sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart sdk/lib/_internal/compiler/implementation/tree/unparser.dart sdk/lib/_internal/compiler/implementation/tree/tree.dart sdk/lib/_internal/compiler/implementation/tree/nodes.dart sdk/lib/_internal/compiler/implementation/tree/dartstring.dart sdk/lib/_internal/compiler/samples/jsonify/jsonify.dart sdk/lib/_internal/compiler/samples/compile_loop/compile_loop.dart sdk/lib/_internal/compiler/samples/leap/leap_leg.dart sdk/lib/_internal/compiler/samples/leap/request_cache.dart sdk/lib/_internal/compiler/samples/leap/leap_script.dart sdk/lib/_internal/compiler/samples/leap/leap_server.dart sdk/lib/_internal/compiler/samples/leap/leap.dart sdk/lib/_internal/compiler/samples/darttags/darttags.dart pkg/intl/lib/number_symbols.dart pkg/intl/lib/intl.dart pkg/intl/lib/number_format.dart pkg/intl/lib/date_format.dart pkg/intl/lib/number_symbols_data.dart pkg/intl/lib/date_symbol_data_http_request.dart pkg/intl/lib/intl_browser.dart pkg/intl/lib/bidi_utils.dart pkg/intl/lib/date_symbol_data_local.dart pkg/intl/lib/date_time_patterns.dart pkg/intl/lib/message_lookup_by_library.dart pkg/intl/lib/date_symbol_data_file.dart pkg/intl/lib/extract_messages.dart pkg/intl/lib/generate_localized.dart pkg/intl/lib/bidi_formatter.dart pkg/intl/lib/date_symbols.dart pkg/intl/lib/intl_standalone.dart pkg/intl/lib/src/date_format_helpers.dart pkg/intl/lib/src/http_request_data_reader.dart pkg/intl/lib/src/file_data_reader.dart pkg/intl/lib/src/date_format_internal.dart pkg/intl/lib/src/intl_message.dart pkg/intl/lib/src/intl_helpers.dart pkg/intl/lib/src/date_format_field.dart pkg/intl/lib/src/lazy_locale_data.dart pkg/intl/lib/src/data/dates/localeList.dart pkg/intl/test/date_time_format_local_odd_test.dart pkg/intl/test/data_directory.dart pkg/intl/test/date_time_format_local_even_test.dart pkg/intl/test/intl_message_basic_example_test.dart pkg/intl/test/number_test_data.dart pkg/intl/test/bidi_utils_test.dart pkg/intl/test/date_time_format_test_data.dart pkg/intl/test/number_closure_test.dart pkg/intl/test/date_time_format_file_even_test.dart pkg/intl/test/number_format_test.dart pkg/intl/test/intl_test.dart pkg/intl/test/find_default_locale_standalone_test.dart pkg/intl/test/date_time_format_test_core.dart pkg/intl/test/date_time_format_http_request_test.dart pkg/intl/test/date_time_format_uninitialized_test.dart pkg/intl/test/date_time_format_test_stub.dart pkg/intl/test/find_default_locale_browser_test.dart pkg/intl/test/bidi_format_test.dart pkg/intl/test/date_time_format_file_odd_test.dart pkg/intl/test/message_extraction/generate_from_json.dart pkg/intl/test/message_extraction/sample_with_messages.dart pkg/intl/test/message_extraction/make_hardcoded_translation.dart pkg/intl/test/message_extraction/part_of_sample_with_messages.dart pkg/intl/test/message_extraction/extract_to_json.dart pkg/intl/test/message_extraction/message_extraction_test.dart pkg/intl/tool/generate_locale_data_files.dart pkg/intl/example/basic/basic_example_runner.dart pkg/intl/example/basic/basic_example.dart pkg/intl/example/basic/messages_de.dart pkg/intl/example/basic/messages_all.dart pkg/intl/example/basic/messages_th_th.dart pkg/serialization/lib/serialization.dart pkg/serialization/lib/src/format.dart pkg/serialization/lib/src/serialization_rule.dart pkg/serialization/lib/src/serialization_helpers.dart pkg/serialization/lib/src/mirrors_helpers.dart pkg/serialization/lib/src/basic_rule.dart pkg/serialization/lib/src/reader_writer.dart pkg/serialization/test/serialization_test.dart pkg/serialization/test/test_models.dart pkg/serialization/test/polyfill_identity_map_test.dart pkg/serialization/test/no_library_test.dart pkg/analyzer_experimental/bin/analyzer.dart pkg/analyzer_experimental/lib/options.dart pkg/analyzer_experimental/lib/analyzer.dart pkg/analyzer_experimental/lib/src/utils.dart pkg/analyzer_experimental/lib/src/error_formatter.dart pkg/analyzer_experimental/lib/src/analyzer_impl.dart pkg/analyzer_experimental/lib/src/error.dart pkg/analyzer_experimental/lib/src/generated/constant.dart pkg/analyzer_experimental/lib/src/generated/utilities_dart.dart pkg/analyzer_experimental/lib/src/generated/instrumentation.dart pkg/analyzer_experimental/lib/src/generated/source_io.dart pkg/analyzer_experimental/lib/src/generated/ast.dart pkg/analyzer_experimental/lib/src/generated/sdk.dart pkg/analyzer_experimental/lib/src/generated/element.dart pkg/analyzer_experimental/lib/src/generated/engine.dart pkg/analyzer_experimental/lib/src/generated/scanner.dart pkg/analyzer_experimental/lib/src/generated/java_core.dart pkg/analyzer_experimental/lib/src/generated/java_engine.dart pkg/analyzer_experimental/lib/src/generated/java_io.dart pkg/analyzer_experimental/lib/src/generated/parser.dart pkg/analyzer_experimental/lib/src/generated/java_junit.dart pkg/analyzer_experimental/lib/src/generated/sdk_io.dart pkg/analyzer_experimental/lib/src/generated/html.dart pkg/analyzer_experimental/lib/src/generated/java_engine_io.dart pkg/analyzer_experimental/lib/src/generated/error.dart pkg/analyzer_experimental/lib/src/generated/source.dart pkg/analyzer_experimental/lib/src/generated/resolver.dart pkg/analyzer_experimental/test/utils.dart pkg/analyzer_experimental/test/error_test.dart pkg/analyzer_experimental/test/options_test.dart pkg/analyzer_experimental/test/generated/resolver_test.dart pkg/analyzer_experimental/test/generated/scanner_test.dart pkg/analyzer_experimental/test/generated/element_test.dart pkg/analyzer_experimental/test/generated/ast_test.dart pkg/analyzer_experimental/test/generated/test_support.dart pkg/analyzer_experimental/test/generated/parser_test.dart pkg/analyzer_experimental/example/scanner_driver.dart pkg/analyzer_experimental/example/resolver_driver.dart pkg/analyzer_experimental/example/parser_driver.dart pkg/webdriver/lib/webdriver.dart pkg/webdriver/lib/src/base64decoder.dart pkg/webdriver/test/webdriver_test.dart pkg/fixnum/lib/fixnum.dart pkg/fixnum/lib/src/int64.dart pkg/fixnum/lib/src/intx.dart pkg/fixnum/lib/src/int32.dart pkg/fixnum/test/int_32_test.dart pkg/fixnum/test/int_64_vm_test.dart pkg/fixnum/test/int_64_test.dart pkg/pathos/lib/path.dart pkg/pathos/test/pathos_test.dart pkg/pathos/test/pathos_windows_test.dart pkg/pathos/test/pathos_posix_test.dart pkg/crypto/lib/crypto.dart pkg/crypto/lib/src/crypto_utils.dart pkg/crypto/lib/src/hmac.dart pkg/crypto/lib/src/sha1.dart pkg/crypto/lib/src/hash_utils.dart pkg/crypto/lib/src/md5.dart pkg/crypto/lib/src/sha256.dart pkg/meta/lib/meta.dart pkg/oauth2/lib/oauth2.dart pkg/oauth2/lib/src/utils.dart pkg/oauth2/lib/src/expiration_exception.dart pkg/oauth2/lib/src/credentials.dart pkg/oauth2/lib/src/authorization_exception.dart pkg/oauth2/lib/src/authorization_code_grant.dart pkg/oauth2/lib/src/handle_access_token_response.dart pkg/oauth2/lib/src/client.dart pkg/oauth2/test/utils.dart pkg/oauth2/test/handle_access_token_response_test.dart pkg/oauth2/test/authorization_code_grant_test.dart pkg/oauth2/test/client_test.dart pkg/oauth2/test/utils_test.dart pkg/oauth2/test/credentials_test.dart pkg/http/lib/http.dart pkg/http/lib/testing.dart pkg/http/lib/src/io_client.dart pkg/http/lib/src/utils.dart pkg/http/lib/src/base_request.dart pkg/http/lib/src/streamed_response.dart pkg/http/lib/src/byte_stream.dart pkg/http/lib/src/base_client.dart pkg/http/lib/src/streamed_request.dart pkg/http/lib/src/base_response.dart pkg/http/lib/src/mock_client.dart pkg/http/lib/src/response.dart pkg/http/lib/src/request.dart pkg/http/lib/src/client.dart pkg/http/lib/src/multipart_file.dart pkg/http/lib/src/multipart_request.dart pkg/http/test/mock_client_test.dart pkg/http/test/utils.dart pkg/http/test/streamed_request_test.dart pkg/http/test/multipart_test.dart pkg/http/test/client_test.dart pkg/http/test/http_test.dart pkg/http/test/request_test.dart pkg/http/test/response_test.dart pkg/http/test/safe_http_server.dart pkg/expect/lib/expect.dart pkg/mdv_observe/lib/mdv_observe.dart pkg/mdv_observe/lib/src/observable_list.dart pkg/mdv_observe/lib/src/observable_map.dart pkg/mdv_observe/lib/src/observable_box.dart pkg/mdv_observe/test/utils.dart pkg/mdv_observe/test/list_change_test.dart pkg/mdv_observe/test/observable_list_test.dart pkg/mdv_observe/test/observe_test.dart pkg/mdv_observe/test/observable_map_test.dart pkg/logging/lib/logging.dart pkg/logging/test/logging_test.dart pkg/stack_trace/lib/stack_trace.dart pkg/stack_trace/lib/src/utils.dart pkg/stack_trace/lib/src/lazy_trace.dart pkg/stack_trace/lib/src/trace.dart pkg/stack_trace/lib/src/frame.dart pkg/stack_trace/test/frame_test.dart pkg/stack_trace/test/trace_test.dart pkg/yaml/lib/yaml.dart pkg/yaml/lib/src/composer.dart pkg/yaml/lib/src/utils.dart pkg/yaml/lib/src/yaml_exception.dart pkg/yaml/lib/src/deep_equals.dart pkg/yaml/lib/src/visitor.dart pkg/yaml/lib/src/yaml_map.dart pkg/yaml/lib/src/parser.dart pkg/yaml/lib/src/model.dart pkg/yaml/lib/src/constructor.dart pkg/yaml/test/yaml_test.dart pkg/scheduled_test/lib/scheduled_test.dart pkg/scheduled_test/lib/scheduled_process.dart pkg/scheduled_test/lib/scheduled_server.dart pkg/scheduled_test/lib/descriptor.dart pkg/scheduled_test/lib/src/utils.dart pkg/scheduled_test/lib/src/schedule_error.dart pkg/scheduled_test/lib/src/task.dart pkg/scheduled_test/lib/src/substitute_future.dart pkg/scheduled_test/lib/src/scheduled_future_matchers.dart pkg/scheduled_test/lib/src/value_future.dart pkg/scheduled_test/lib/src/mock_clock.dart pkg/scheduled_test/lib/src/future_group.dart pkg/scheduled_test/lib/src/schedule.dart pkg/scheduled_test/lib/src/scheduled_server/handler.dart pkg/scheduled_test/lib/src/scheduled_server/safe_http_server.dart pkg/scheduled_test/lib/src/descriptor/directory_descriptor.dart pkg/scheduled_test/lib/src/descriptor/async_descriptor.dart pkg/scheduled_test/lib/src/descriptor/nothing_descriptor.dart pkg/scheduled_test/lib/src/descriptor/descriptor.dart pkg/scheduled_test/lib/src/descriptor/file_descriptor.dart pkg/scheduled_test/lib/src/descriptor/pattern_descriptor.dart pkg/scheduled_test/test/utils.dart pkg/scheduled_test/test/substitute_future_test.dart pkg/scheduled_test/test/scheduled_server_test.dart pkg/scheduled_test/test/scheduled_future_matchers_test.dart pkg/scheduled_test/test/metatest.dart pkg/scheduled_test/test/value_future_test.dart pkg/scheduled_test/test/scheduled_process_test.dart pkg/scheduled_test/test/descriptor/utils.dart pkg/scheduled_test/test/descriptor/file_test.dart pkg/scheduled_test/test/descriptor/nothing_test.dart pkg/scheduled_test/test/descriptor/pattern_test.dart pkg/scheduled_test/test/descriptor/directory_test.dart pkg/scheduled_test/test/descriptor/async_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_state_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_current_task_test.dart pkg/scheduled_test/test/scheduled_test/nested_task_test.dart pkg/scheduled_test/test/scheduled_test/on_exception_test.dart pkg/scheduled_test/test/scheduled_test/task_return_value_test.dart pkg/scheduled_test/test/scheduled_test/abort_test.dart pkg/scheduled_test/test/scheduled_test/timeout_test.dart pkg/scheduled_test/test/scheduled_test/out_of_band_task_test.dart pkg/scheduled_test/test/scheduled_test/wrap_async_test.dart pkg/scheduled_test/test/scheduled_test/wrap_future_test.dart pkg/scheduled_test/test/scheduled_test/signal_error_test.dart pkg/scheduled_test/test/scheduled_test/set_up_test.dart pkg/scheduled_test/test/scheduled_test/on_complete_test.dart pkg/scheduled_test/test/scheduled_test/simple_test.dart pkg/scheduled_test/test/scheduled_test/current_schedule_errors_test.dart pkg/unittest/lib/unittest.dart pkg/unittest/lib/html_individual_config.dart pkg/unittest/lib/vm_config.dart pkg/unittest/lib/html_enhanced_config.dart pkg/unittest/lib/matcher.dart pkg/unittest/lib/interactive_html_config.dart pkg/unittest/lib/mock.dart pkg/unittest/lib/html_config.dart pkg/unittest/lib/compact_vm_config.dart pkg/unittest/lib/src/expect.dart pkg/unittest/lib/src/basematcher.dart pkg/unittest/lib/src/utils.dart pkg/unittest/lib/src/string_matchers.dart pkg/unittest/lib/src/pretty_print.dart pkg/unittest/lib/src/core_matchers.dart pkg/unittest/lib/src/interfaces.dart pkg/unittest/lib/src/description.dart pkg/unittest/lib/src/future_matchers.dart pkg/unittest/lib/src/numeric_matchers.dart pkg/unittest/lib/src/iterable_matchers.dart pkg/unittest/lib/src/map_matchers.dart pkg/unittest/lib/src/config.dart pkg/unittest/lib/src/test_case.dart pkg/unittest/lib/src/operator_matchers.dart pkg/unittest/test/mock_regexp_negative_test.dart pkg/unittest/test/matchers_minified_test.dart pkg/unittest/test/matchers_test.dart pkg/unittest/test/unittest_test.dart pkg/unittest/test/matchers_unminified_test.dart pkg/unittest/test/test_common.dart pkg/unittest/test/test_utils.dart pkg/unittest/test/pretty_print_test.dart pkg/unittest/test/pretty_print_minified_test.dart pkg/unittest/test/instance_test.dart pkg/unittest/test/pretty_print_unminified_test.dart pkg/unittest/test/mock_test.dart pkg/unittest/test/mock_stepwise_negative_test.dart pkg/args/lib/args.dart pkg/args/lib/src/parser.dart pkg/args/lib/src/usage.dart pkg/args/test/args_test.dart pkg/args/test/usage_test.dart pkg/args/test/command_test.dart pkg/args/test/parse_test.dart pkg/args/example/test_runner.dart pkg/source_maps/lib/span.dart pkg/source_maps/lib/source_maps.dart pkg/source_maps/lib/parser.dart pkg/source_maps/lib/builder.dart pkg/source_maps/lib/printer.dart pkg/source_maps/lib/src/utils.dart pkg/source_maps/lib/src/vlq.dart pkg/source_maps/test/vlq_test.dart pkg/source_maps/test/run.dart pkg/source_maps/test/builder_test.dart pkg/source_maps/test/utils_test.dart pkg/source_maps/test/common.dart pkg/source_maps/test/parser_test.dart pkg/source_maps/test/printer_test.dart pkg/source_maps/test/span_test.dart pkg/source_maps/test/end2end_test.dart FORCE_DO_CMD
+	$(call do_cmd,dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot)
+
+all_deps += $(obj)/gen/pub.dart.snapshot
+action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs := $(obj)/gen/pub.dart.snapshot
+
+
+### Rules for final target.
+# Build our special outputs first.
+$(obj).target/utils/pub/pub.stamp: | $(action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs)
+
+# Preserve order dependency of special output on deps.
+$(action_dart_utils_pub_pub_gyp_pub_target_generate_pub_snapshot_outputs): | $(builddir)/dart $(obj).target/pkg/pkg_packages.stamp
+
+$(obj).target/utils/pub/pub.stamp: TOOLSET := $(TOOLSET)
+$(obj).target/utils/pub/pub.stamp: $(builddir)/dart $(obj).target/pkg/pkg_packages.stamp FORCE_DO_CMD
+	$(call do_cmd,touch)
+
+all_deps += $(obj).target/utils/pub/pub.stamp
+# Add target alias
+.PHONY: pub
+pub: $(obj).target/utils/pub/pub.stamp
+
+# Add target alias to "all" target.
+.PHONY: all
+all: pub
+
diff --git a/utils/pub/solver/greedy_solver.dart b/utils/pub/solver/greedy_solver.dart
new file mode 100644
index 0000000..e664ea2
--- /dev/null
+++ b/utils/pub/solver/greedy_solver.dart
@@ -0,0 +1,556 @@
+// Copyright (c) 2012, 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.
+
+/// Attempts to resolve a set of version constraints for a package dependency
+/// graph and select an appropriate set of best specific versions for all
+/// dependent packages. It works iteratively and tries to reach a stable
+/// solution where the constraints of all dependencies are met. If it fails to
+/// reach a solution after a certain number of iterations, it assumes the
+/// dependency graph is unstable and reports and error.
+///
+/// There are two fundamental operations in the process of iterating over the
+/// graph:
+///
+/// 1.  Changing the selected concrete version of some package. (This includes
+///     adding and removing a package too, which is considering changing the
+///     version to or from "none".) In other words, a node has changed.
+/// 2.  Changing the version constraint that one package places on another. In
+///     other words, and edge has changed.
+///
+/// Both of these events have a corresponding (potentional) async operation and
+/// roughly cycle back and forth between each other. When we change the version
+/// of package changes, we asynchronously load the pubspec for the new version.
+/// When that's done, we compare the dependencies of the new version versus the
+/// old one. For everything that differs, we change those constraints between
+/// this package and that dependency.
+///
+/// When a constraint on a package changes, we re-calculate the overall
+/// constraint on that package. I.e. with a shared dependency, we intersect all
+/// of the constraints that its depending packages place on it. If that overall
+/// constraint changes (say from "<3.0.0" to "<2.5.0"), then the currently
+/// picked version for that package may fall outside of the new constraint. If
+/// that happens, we find the new best version that meets the updated constraint
+/// and then the change the package to use that version. That cycles back up to
+/// the beginning again.
+library version_solver1;
+
+import 'dart:async';
+import 'dart:collection' show Queue;
+import 'dart:math' as math;
+
+import '../lock_file.dart';
+import '../log.dart' as log;
+import '../package.dart';
+import '../source.dart';
+import '../source_registry.dart';
+import '../version.dart';
+import 'version_solver.dart';
+
+class GreedyVersionSolver extends VersionSolver {
+  final _packages = <String, DependencyNode>{};
+  final _work = new Queue<WorkItem>();
+  int _numIterations = 0;
+
+  GreedyVersionSolver(SourceRegistry sources, Package root, LockFile lockFile,
+                      List<String> useLatest)
+      : super(sources, root, lockFile, useLatest);
+
+  /// The non-backtracking solver always only tries one solution.
+  int get attemptedSolutions => 1;
+
+  void forceLatestVersion(String package) {
+    // TODO(nweiz): How do we want to detect and handle unknown dependencies
+    // here?
+    getDependency(package).useLatestVersion = true;
+  }
+
+  Future<List<PackageId>> runSolver() {
+    // Kick off the work by adding the root package at its concrete version to
+    // the dependency graph.
+    enqueue(new AddConstraint('(entrypoint)', new PackageRef.root(root)));
+
+    Future processNextWorkItem(_) {
+      while (true) {
+        // Stop if we are done.
+        if (_work.isEmpty) return new Future.value(buildResults());
+
+        // If we appear to be stuck in a loop, then we probably have an unstable
+        // graph, bail. We guess this based on a rough heuristic that it should
+        // only take a certain number of steps to solve a graph with a given
+        // number of connections.
+        // TODO(rnystrom): These numbers here are magic and arbitrary. Tune
+        // when we have a better picture of real-world package topologies.
+        _numIterations++;
+        if (_numIterations > math.max(50, _packages.length * 5)) {
+          throw new CouldNotSolveException();
+        }
+
+        // Run the first work item.
+        var future = _work.removeFirst().process(this);
+
+        // If we have an async operation to perform, chain the loop to resume
+        // when it's done. Otherwise, just loop synchronously.
+        if (future != null) {
+          return future.then(processNextWorkItem);
+        }
+      }
+    }
+
+    return processNextWorkItem(null);
+  }
+
+  void enqueue(WorkItem work) {
+    _work.add(work);
+  }
+
+  DependencyNode getDependency(String package) {
+    // There can be unused dependencies in the graph, so just create an empty
+    // one if needed.
+    _packages.putIfAbsent(package, () => new DependencyNode(package));
+    return _packages[package];
+  }
+
+  /// Sets the best selected version of [package] to [version].
+  void setVersion(String package, Version version) {
+    _packages[package].version = version;
+  }
+
+  /// Returns the most recent version of [dependency] that satisfies all of its
+  /// version constraints.
+  Future<Version> getBestVersion(DependencyNode dependency) {
+    return cache.getVersions(dependency.name,
+        dependency.source, dependency.description).then((versions) {
+      var best = null;
+      for (var ref in versions) {
+        if (dependency.useLatestVersion ||
+            dependency.constraint.allows(ref.version)) {
+          if (best == null || ref.version > best) best = ref.version;
+        }
+      }
+
+      // TODO(rnystrom): Better exception.
+      if (best == null) {
+        if (tryUnlockDepender(dependency)) return null;
+        throw new NoVersionException(dependency.name, dependency.constraint,
+            dependency.toList());
+      } else if (!dependency.constraint.allows(best)) {
+        if (tryUnlockDepender(dependency)) return null;
+        throw new CouldNotUpdateException(
+            dependency.name, dependency.constraint, best);
+      }
+
+      return best;
+    });
+  }
+
+  /// Looks for a package that depends (transitively) on [dependency] and has
+  /// its version locked in the lockfile. If one is found, enqueues an
+  /// [UnlockPackage] work item for it and returns true. Otherwise, returns
+  /// false.
+  ///
+  /// This does a breadth-first search; immediate dependers will be unlocked
+  /// first, followed by transitive dependers.
+  bool tryUnlockDepender(DependencyNode dependency, [Set<String> seen]) {
+    if (seen == null) seen = new Set();
+    // Avoid an infinite loop if there are circular dependencies.
+    if (seen.contains(dependency.name)) return false;
+    seen.add(dependency.name);
+
+    for (var dependerName in dependency.dependers) {
+      var depender = getDependency(dependerName);
+      var locked = lockFile.packages[dependerName];
+      if (locked != null && depender.version == locked.version &&
+          depender.source.name == locked.source.name) {
+        enqueue(new UnlockPackage(depender));
+        return true;
+      }
+    }
+
+    return dependency.dependers.map(getDependency).any((subdependency) =>
+        tryUnlockDepender(subdependency, seen));
+  }
+
+  List<PackageId> buildResults() {
+    return _packages.values
+        .where((dep) => dep.isDependedOn)
+        .map(_dependencyToPackageId)
+        .toList();
+  }
+
+  PackageId _dependencyToPackageId(DependencyNode dep) {
+    var description = dep.description;
+
+    // If the lockfile contains a fully-resolved description for the package,
+    // use that. This allows e.g. Git to ensure that the same commit is used.
+    var lockedPackage = lockFile.packages[dep.name];
+    if (lockedPackage != null && lockedPackage.version == dep.version &&
+        lockedPackage.source.name == dep.source.name &&
+        dep.source.descriptionsEqual(
+            description, lockedPackage.description)) {
+      description = lockedPackage.description;
+    }
+
+    return new PackageId(dep.name, dep.source, dep.version, description);
+  }
+}
+
+/// The constraint solver works by iteratively processing a queue of work items.
+/// Each item is a single atomic change to the dependency graph. Handling them
+/// in a queue lets us handle asynchrony (resolving versions requires
+/// information from servers) as well as avoid deeply nested recursion.
+abstract class WorkItem {
+  /// Processes this work item. Returns a future that completes when the work is
+  /// done. If `null` is returned, that means the work has completed
+  /// synchronously and the next item can be started immediately.
+  Future process(GreedyVersionSolver solver);
+}
+
+/// The best selected version for a package has changed to [version]. If the
+/// previous version of the package is `null`, that means the package is being
+/// added to the graph. If [version] is `null`, it is being removed.
+class ChangeVersion implements WorkItem {
+  /// The name of the package whose version is being changed.
+  final String package;
+
+  /// The source of the package whose version is changing.
+  final Source source;
+
+  /// The description identifying the package whose version is changing.
+  final description;
+
+  /// The new selected version.
+  final Version version;
+
+  ChangeVersion(this.package, this.source, this.description, this.version);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Changing $package to version $version.");
+
+    var dependency = solver.getDependency(package);
+    var oldVersion = dependency.version;
+    solver.setVersion(package, version);
+
+    // The dependencies between the old and new version may be different. Walk
+    // them both and update any constraints that differ between the two.
+    return Future.wait([
+        getDependencyRefs(solver, oldVersion),
+        getDependencyRefs(solver, version)]).then((list) {
+      var oldDependencyRefs = list[0];
+      var newDependencyRefs = list[1];
+
+      for (var oldRef in oldDependencyRefs.values) {
+        if (newDependencyRefs.containsKey(oldRef.name)) {
+          // The dependency is in both versions of this package, but its
+          // constraint may have changed.
+          var newRef = newDependencyRefs.remove(oldRef.name);
+          solver.enqueue(new AddConstraint(package, newRef));
+        } else {
+          // The dependency is not in the new version of the package, so just
+          // remove its constraint.
+          solver.enqueue(new RemoveConstraint(package, oldRef.name));
+        }
+      }
+
+      // Everything that's left is a depdendency that's only in the new
+      // version of the package.
+      for (var newRef in newDependencyRefs.values) {
+        solver.enqueue(new AddConstraint(package, newRef));
+      }
+    });
+  }
+
+  /// Get the dependencies at [version] of the package being changed.
+  Future<Map<String, PackageRef>> getDependencyRefs(VersionSolver solver,
+      Version version) {
+    // If there is no version, it means no package, so no dependencies.
+    if (version == null) {
+      return new Future<Map<String, PackageRef>>.value(<String, PackageRef>{});
+    }
+
+    var id = new PackageId(package, source, version, description);
+    return solver.cache.getPubspec(id).then((pubspec) {
+      var dependencies = <String, PackageRef>{};
+      for (var dependency in pubspec.dependencies) {
+        dependencies[dependency.name] = dependency;
+      }
+
+      // Include dev dependencies only from the root package.
+      if (id.isRoot) {
+        for (var dependency in pubspec.devDependencies) {
+          dependencies[dependency.name] = dependency;
+        }
+      }
+
+      return dependencies;
+    });
+  }
+}
+
+/// A constraint that a depending package places on a dependent package has
+/// changed.
+///
+/// This is an abstract class that contains logic for updating the dependency
+/// graph once a dependency has changed. Changing the dependency is the
+/// responsibility of subclasses.
+abstract class ChangeConstraint implements WorkItem {
+  Future process(GreedyVersionSolver solver);
+
+  void undo(GreedyVersionSolver solver);
+
+  Future _processChange(GreedyVersionSolver solver,
+                        DependencyNode oldDependency,
+                        DependencyNode newDependency) {
+    var name = newDependency.name;
+    var source = oldDependency.source != null ?
+      oldDependency.source : newDependency.source;
+    var description = oldDependency.description != null ?
+      oldDependency.description : newDependency.description;
+    var oldConstraint = oldDependency.constraint;
+    var newConstraint = newDependency.constraint;
+
+    // If the package is over-constrained, i.e. the packages depending have
+    // disjoint constraints, then try unlocking a depender that's locked by the
+    // lockfile. If there are no remaining locked dependencies, throw an error.
+    if (newConstraint != null && newConstraint.isEmpty) {
+      if (solver.tryUnlockDepender(newDependency)) {
+        undo(solver);
+        return null;
+      }
+
+      throw new DisjointConstraintException(name, newDependency.toList());
+    }
+
+    // If this constraint change didn't cause the overall constraint on the
+    // package to change, then we don't need to do any further work.
+    if (oldConstraint == newConstraint) return null;
+
+    // If the dependency has been cut free from the graph, just remove it.
+    if (!newDependency.isDependedOn) {
+      solver.enqueue(new ChangeVersion(name, source, description, null));
+      return null;
+    }
+
+    // If the dependency is on the root package, then we don't need to do
+    // anything since it's already at the best version.
+    if (name == solver.root.name) {
+      solver.enqueue(new ChangeVersion(
+          name, source, description, solver.root.version));
+      return null;
+    }
+
+    // If the dependency is on a package in the lockfile, use the lockfile's
+    // version for that package if it's valid given the other constraints.
+    var lockedPackage = solver.lockFile.packages[name];
+    if (lockedPackage != null && newDependency.source == lockedPackage.source) {
+      var lockedVersion = lockedPackage.version;
+      if (newConstraint.allows(lockedVersion)) {
+        solver.enqueue(
+            new ChangeVersion(name, source, description, lockedVersion));
+        return null;
+      }
+    }
+
+    // The constraint has changed, so see what the best version of the package
+    // that meets the new constraint is.
+    return solver.getBestVersion(newDependency).then((best) {
+      if (best == null) {
+        undo(solver);
+      } else if (newDependency.version != best) {
+        solver.enqueue(new ChangeVersion(name, source, description, best));
+      }
+    });
+  }
+}
+
+/// The constraint given by [ref] is being placed by [depender].
+class AddConstraint extends ChangeConstraint {
+  /// The package that has the dependency.
+  final String depender;
+
+  /// The package being depended on and the constraints being placed on it. The
+  /// source, version, and description in this ref are all considered
+  /// constraints on the dependent package.
+  final PackageRef ref;
+
+  AddConstraint(this.depender, this.ref);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Adding $depender's constraint $ref.");
+
+    var dependency = solver.getDependency(ref.name);
+    var oldDependency = dependency.clone();
+    dependency.placeConstraint(depender, ref);
+    return _processChange(solver, oldDependency, dependency);
+  }
+
+  void undo(GreedyVersionSolver solver) {
+    solver.getDependency(ref.name).removeConstraint(depender);
+  }
+}
+
+/// [depender] is no longer placing a constraint on [dependent].
+class RemoveConstraint extends ChangeConstraint {
+  /// The package that was placing a constraint on [dependent].
+  String depender;
+
+  /// The package that was being depended on.
+  String dependent;
+
+  /// The constraint that was removed.
+  PackageRef _removed;
+
+  RemoveConstraint(this.depender, this.dependent);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Removing $depender's constraint ($_removed) on $dependent.");
+
+    var dependency = solver.getDependency(dependent);
+    var oldDependency = dependency.clone();
+    _removed = dependency.removeConstraint(depender);
+    return _processChange(solver, oldDependency, dependency);
+  }
+
+  void undo(GreedyVersionSolver solver) {
+    solver.getDependency(dependent).placeConstraint(depender, _removed);
+  }
+}
+
+/// [package]'s version is no longer constrained by the lockfile.
+class UnlockPackage implements WorkItem {
+  /// The package being unlocked.
+  DependencyNode package;
+
+  UnlockPackage(this.package);
+
+  Future process(GreedyVersionSolver solver) {
+    log.fine("Unlocking ${package.name}.");
+
+    solver.lockFile.packages.remove(package.name);
+    return solver.getBestVersion(package).then((best) {
+      if (best == null) return null;
+      solver.enqueue(new ChangeVersion(
+          package.name, package.source, package.description, best));
+    });
+  }
+}
+
+/// Describes one [Package] in the [DependencyGraph] and keeps track of which
+/// packages depend on it and what constraints they place on it.
+class DependencyNode {
+  /// The name of the this dependency's package.
+  final String name;
+
+  /// The [PackageRefs] that represent constraints that depending packages have
+  /// placed on this one.
+  final Map<String, PackageRef> _refs;
+
+  /// The currently-selected best version for this dependency.
+  Version version;
+
+  /// Whether this dependency should always select the latest version.
+  bool useLatestVersion = false;
+
+  /// Gets whether or not any other packages are currently depending on this
+  /// one. If `false`, then it means this package is not part of the dependency
+  /// graph and should be omitted.
+  bool get isDependedOn => !_refs.isEmpty;
+
+  /// The names of all the packages that depend on this dependency.
+  Iterable<String> get dependers => _refs.keys;
+
+  /// Gets the overall constraint that all packages are placing on this one.
+  /// If no packages have a constraint on this one (which can happen when this
+  /// package is in the process of being added to the graph), returns `null`.
+  VersionConstraint get constraint {
+    if (_refs.isEmpty) return null;
+    return new VersionConstraint.intersection(
+        _refs.values.map((ref) => ref.constraint));
+  }
+
+  /// The source of this dependency's package.
+  Source get source {
+     var canonical = _canonicalRef();
+     if (canonical == null) return null;
+     return canonical.source;
+  }
+
+  /// The description of this dependency's package.
+  get description {
+     var canonical = _canonicalRef();
+     if (canonical == null) return null;
+     return canonical.description;
+  }
+
+  /// Return the PackageRef that has the canonical source and description for
+  /// this package. If any dependency is on the root package, that will be used;
+  /// otherwise, it will be the source and description that all dependencies
+  /// agree upon.
+  PackageRef _canonicalRef() {
+    if (_refs.isEmpty) return null;
+    var refs = _refs.values;
+    for (var ref in refs) {
+      if (ref.isRoot) return ref;
+    }
+    return refs.first;
+  }
+
+  DependencyNode(this.name)
+      : _refs = <String, PackageRef>{};
+
+  DependencyNode._clone(DependencyNode other)
+      : name = other.name,
+        version = other.version,
+        _refs = new Map<String, PackageRef>.from(other._refs);
+
+  /// Creates a copy of this dependency.
+  DependencyNode clone() => new DependencyNode._clone(this);
+
+  /// Places [ref] as a constraint from [package] onto this.
+  void placeConstraint(String package, PackageRef ref) {
+    var requiredDepender = _requiredDepender();
+    if (requiredDepender != null) {
+      var required = _refs[requiredDepender];
+      if (required.source.name != ref.source.name) {
+        throw new SourceMismatchException(name, [
+            new Dependency(requiredDepender, required),
+            new Dependency(package, ref)]);
+      } else if (!required.descriptionEquals(ref)) {
+        throw new DescriptionMismatchException(name, [
+            new Dependency(requiredDepender, required),
+            new Dependency(package, ref)]);
+      }
+    }
+
+    _refs[package] = ref;
+  }
+
+  /// Returns the name of a package whose constraint source and description
+  /// all other constraints must match. Returns null if there are no
+  /// requirements on new constraints.
+  String _requiredDepender() {
+    if (_refs.isEmpty) return null;
+
+    var dependers = _refs.keys.toList();
+    if (dependers.length == 1) {
+      var depender = dependers[0];
+      if (_refs[depender].isRoot) return null;
+      return depender;
+    }
+
+    return dependers[1];
+  }
+
+  /// Removes the constraint from [package] onto this.
+  PackageRef removeConstraint(String package) => _refs.remove(package);
+
+  /// Converts this to a list of [Dependency] objects like the error types
+  /// expect.
+  List<Dependency> toList() {
+    var result = <Dependency>[];
+    _refs.forEach((name, ref) {
+      result.add(new Dependency(name, ref));
+    });
+    return result;
+  }
+}