Version 0.2.3.0

svn merge -r 14417:14662 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@14669 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/compiler/java/com/google/dart/compiler/DefaultErrorFormatter.java b/compiler/java/com/google/dart/compiler/DefaultErrorFormatter.java
index f38dde8..bbf3851 100644
--- a/compiler/java/com/google/dart/compiler/DefaultErrorFormatter.java
+++ b/compiler/java/com/google/dart/compiler/DefaultErrorFormatter.java
@@ -4,6 +4,7 @@
 
 package com.google.dart.compiler;
 
+import com.google.common.base.Objects;
 import com.google.dart.compiler.CompilerConfiguration.ErrorFormat;
 
 import java.io.PrintStream;
@@ -42,7 +43,7 @@
     String includeFrom = "";
     if (sourceFile instanceof DartSource) {
       LibrarySource lib = ((DartSource) sourceFile).getLibrary();
-      if (!sourceFile.getUri().equals(lib.getUri())) {
+      if (lib != null && !Objects.equal(sourceFile.getUri(), lib.getUri())) {
         includeFrom = " (sourced from " + lib.getUri() + ")";
       }
     }
diff --git a/compiler/java/com/google/dart/compiler/ast/ASTNodes.java b/compiler/java/com/google/dart/compiler/ast/ASTNodes.java
index 104b56c..82bc855 100644
--- a/compiler/java/com/google/dart/compiler/ast/ASTNodes.java
+++ b/compiler/java/com/google/dart/compiler/ast/ASTNodes.java
@@ -37,10 +37,10 @@
 public class ASTNodes {
 
   /**
-   * @return <code>true</code> if given {@link DartNode} is part of static method or top-level
-   *         function.
+   * @return <code>true</code> if given {@link DartNode} is part of static method, static field or
+   *         top-level function.
    */
-  public static boolean isStaticContext(DartNode node ) {
+  public static boolean isStaticContext(DartNode node) {
     while (node != null) {
       DartNode parent = node.getParent();
       if (node instanceof DartMethodDefinition) {
@@ -52,7 +52,7 @@
       }
       if (node instanceof DartField) {
         DartField field = (DartField) node;
-        if (field.getModifiers().isStatic() || field.getModifiers().isConstant()) {
+        if (field.getModifiers().isStatic()) {
           return true;
         }
         return parent != null && parent.getParent() instanceof DartUnit;
diff --git a/compiler/java/com/google/dart/compiler/ast/ASTVisitor.java b/compiler/java/com/google/dart/compiler/ast/ASTVisitor.java
index 4254db7..e125b1e 100644
--- a/compiler/java/com/google/dart/compiler/ast/ASTVisitor.java
+++ b/compiler/java/com/google/dart/compiler/ast/ASTVisitor.java
@@ -84,6 +84,14 @@
   public R visitComment(DartComment node) {
     return visitNode(node);
   }
+  
+  public R visitCommentNewName(DartCommentNewName node) {
+    return visitNode(node);
+  }
+  
+  public R visitCommentRefName(DartCommentRefName node) {
+    return visitNode(node);
+  }
 
   public R visitAnnotation(DartAnnotation node) {
     return visitNode(node);
diff --git a/compiler/java/com/google/dart/compiler/ast/DartComment.java b/compiler/java/com/google/dart/compiler/ast/DartComment.java
index c55a075..6f6e7d0 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartComment.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartComment.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -7,7 +7,11 @@
 import com.google.dart.compiler.Source;
 import com.google.dart.compiler.common.SourceInfo;
 
+import java.util.List;
+
 public class DartComment extends DartNode {
+  private final NodeList<DartCommentRefName> refNames = NodeList.create(this);
+  private final NodeList<DartCommentNewName> newNames = NodeList.create(this);
 
   @SuppressWarnings("unused")
   private static final long serialVersionUID = 6066713446767517627L;
@@ -25,7 +29,7 @@
 
   /**
    * Return <code>true<code> if this comment is a block comment.
-   *
+   * 
    * @return <code>true<code> if this comment is a block comment
    */
   public boolean isBlock() {
@@ -34,7 +38,7 @@
 
   /**
    * Return <code>true<code> if this comment is a DartDoc comment.
-   *
+   * 
    * @return <code>true<code> if this comment is a DartDoc comment
    */
   public boolean isDartDoc() {
@@ -43,20 +47,47 @@
 
   /**
    * Return <code>true<code> if this comment is an end-of-line comment.
-   *
+   * 
    * @return <code>true<code> if this comment is an end-of-line comment
    */
   public boolean isEndOfLine() {
     return style == Style.END_OF_LINE;
   }
 
+  /**
+   * Adds <code>[id]</code> reference.
+   */
+  public void addRefName(DartCommentRefName name) {
+    refNames.add(name);
+  }
+
+  public NodeList<DartCommentRefName> getRefNames() {
+    return refNames;
+  }
+
+  /**
+   * Adds <code>[new Class]</code> or <b>[new Class.name]</b> reference.
+   */
+  public void addNewName(DartCommentNewName name) {
+    newNames.add(name);
+  }
+
+  /**
+   * @return the <code>[new Class]</code> or <b>[new Class.name]</b> references.
+   */
+  public List<DartCommentNewName> getNewNames() {
+    return newNames;
+  }
+
   @Override
   public void visitChildren(ASTVisitor<?> visitor) {
+    refNames.accept(visitor);
+    newNames.accept(visitor);
   }
 
   @Override
   public <R> R accept(ASTVisitor<R> visitor) {
-    return null;
+    return visitor.visitComment(this);
   }
 
 }
diff --git a/compiler/java/com/google/dart/compiler/ast/DartCommentNewName.java b/compiler/java/com/google/dart/compiler/ast/DartCommentNewName.java
new file mode 100644
index 0000000..1ab676f
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/ast/DartCommentNewName.java
@@ -0,0 +1,76 @@
+// 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.
+
+package com.google.dart.compiler.ast;
+
+import com.google.dart.compiler.resolver.ClassElement;
+import com.google.dart.compiler.resolver.ConstructorElement;
+
+/**
+ * <code>[new Class.name]</code> in {@link DartComment}.
+ */
+public final class DartCommentNewName extends DartNode {
+  private final String className;
+  private final int classOffset;
+  private final String constructorName;
+  private ClassElement classElement;
+  private final int constructorOffset;
+  private ConstructorElement constructorElement;
+
+  public DartCommentNewName(String className, int classOffset, String constructorName,
+      int constructorOffset) {
+    assert className != null;
+    assert constructorName != null;
+    this.className = className;
+    this.classOffset = classOffset;
+    this.constructorName = constructorName;
+    this.constructorOffset = constructorOffset;
+  }
+
+  @Override
+  public String toString() {
+    if (constructorName.isEmpty()) {
+      return className;
+    }
+    return className + "." + constructorName;
+  }
+
+  public void setElements(ClassElement classElement, ConstructorElement constructorElement) {
+    this.classElement = classElement;
+    this.constructorElement = constructorElement;
+  }
+
+  public String getClassName() {
+    return className;
+  }
+
+  public int getClassOffset() {
+    return classOffset;
+  }
+
+  public ClassElement getClassElement() {
+    return classElement;
+  }
+
+  public String getConstructorName() {
+    return constructorName;
+  }
+
+  public int getConstructorOffset() {
+    return constructorOffset;
+  }
+
+  public ConstructorElement getConstructorElement() {
+    return constructorElement;
+  }
+
+  @Override
+  public void visitChildren(ASTVisitor<?> visitor) {
+  }
+
+  @Override
+  public <R> R accept(ASTVisitor<R> visitor) {
+    return visitor.visitCommentNewName(this);
+  }
+}
diff --git a/compiler/java/com/google/dart/compiler/ast/DartCommentRefName.java b/compiler/java/com/google/dart/compiler/ast/DartCommentRefName.java
new file mode 100644
index 0000000..e39c50a
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/ast/DartCommentRefName.java
@@ -0,0 +1,49 @@
+// 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.
+
+package com.google.dart.compiler.ast;
+
+import com.google.dart.compiler.resolver.Element;
+import com.google.dart.compiler.resolver.NodeElement;
+
+/**
+ * <code>[new name]</code> in {@link DartComment}.
+ */
+public final class DartCommentRefName extends DartNode {
+  private final String name;
+  private NodeElement element;
+
+  public DartCommentRefName(String name) {
+    assert name != null;
+    this.name = name;
+  }
+
+  @Override
+  public String toString() {
+    return name;
+  }
+
+  @Override
+  public NodeElement getElement() {
+    return element;
+  }
+
+  @Override
+  public void setElement(Element element) {
+    this.element = (NodeElement) element;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  @Override
+  public void visitChildren(ASTVisitor<?> visitor) {
+  }
+
+  @Override
+  public <R> R accept(ASTVisitor<R> visitor) {
+    return visitor.visitCommentRefName(this);
+  }
+}
diff --git a/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java b/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
index 0c13470..5080bb1 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartDeclaration.java
@@ -47,6 +47,7 @@
 
   @Override
   public void visitChildren(ASTVisitor<?> visitor) {
+    safelyVisitChild(dartDoc, visitor);
     super.visitChildren(visitor);
     safelyVisitChild(name, visitor);
   }
diff --git a/compiler/java/com/google/dart/compiler/ast/DartNode.java b/compiler/java/com/google/dart/compiler/ast/DartNode.java
index 1c20781..5079d1b 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartNode.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartNode.java
@@ -117,10 +117,7 @@
    * @param visitor the visitor that will be used to visit the child
    */
   protected void safelyVisitChild(DartNode child, ASTVisitor<?> visitor) {
-    // Inline the DartIdentifier path - it's by far the most common.
-    if (child instanceof DartIdentifier) {
-      visitor.visitIdentifier((DartIdentifier)child);
-    } else if (child != null) {
+    if (child != null) {
       child.accept(visitor);
     }
   }
diff --git a/compiler/java/com/google/dart/compiler/ast/DartToSourceVisitor.java b/compiler/java/com/google/dart/compiler/ast/DartToSourceVisitor.java
index e913de9..d7c2597 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartToSourceVisitor.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartToSourceVisitor.java
@@ -28,6 +28,11 @@
   }
 
   @Override
+  public Void visitComment(DartComment node) {
+    return null;
+  }
+
+  @Override
   public Void visitNativeBlock(DartNativeBlock x) {
     p("native;");
     return null;
diff --git a/compiler/java/com/google/dart/compiler/ast/DartUnit.java b/compiler/java/com/google/dart/compiler/ast/DartUnit.java
index 063455e..8959f52 100644
--- a/compiler/java/com/google/dart/compiler/ast/DartUnit.java
+++ b/compiler/java/com/google/dart/compiler/ast/DartUnit.java
@@ -56,7 +56,6 @@
   public void visitChildren(ASTVisitor<?> visitor) {
     directives.accept(visitor);
     topLevelNodes.accept(visitor);
-    comments.accept(visitor);
   }
 
   @Override
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
index 41d3d9b..055b5b0 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
@@ -619,6 +619,7 @@
 
   private DartLibraryDirective parseObsoleteLibraryDirective() {
     expect(Token.LIBRARY);
+    reportDeprecatedError(position(), ParserErrorCode.DEPRECATED_LIBRARY_DIRECTIVE);
     expect(Token.LPAREN);
     beginLiteral();
     expect(Token.STRING);
@@ -715,6 +716,7 @@
 
   protected DartImportDirective parseObsoleteImportDirective() {
     expect(Token.IMPORT);
+    reportDeprecatedError(position(), ParserErrorCode.DEPRECATED_IMPORT_DIRECTIVE);
     expect(Token.LPAREN);
     
     beginLiteral();
@@ -761,6 +763,7 @@
 
   private DartSourceDirective parseSourceDirective() {
     expect(Token.SOURCE);
+    reportDeprecatedError(position(), ParserErrorCode.DEPRECATED_SOURCE_DIRECTIVE);
     expect(Token.LPAREN);
     beginLiteral();
     expect(Token.STRING);
@@ -5391,6 +5394,23 @@
     return errorCount < MAX_DEFAULT_ERRORS;
   }
   
+  private void reportDeprecatedError(int position, ErrorCode errorCode) {
+    // TODO(scheglov) remove after http://code.google.com/p/dart/issues/detail?id=6508
+    if (!Elements.isCoreLibrarySource(source) &&
+        !Elements.isLibrarySource(source, "/isolate/isolate.dart")
+      &&  !Elements.isLibrarySource(source, "/json/json.dart")
+      &&  !Elements.isLibrarySource(source, "/math/math.dart")
+      &&  !Elements.isLibrarySource(source, "/html/dartium/nativewrappers.dart")
+      &&  !Elements.isLibrarySource(source, "/io/io.dart")
+      &&  !Elements.isLibrarySource(source, "/crypto/crypto.dart")
+      &&  !Elements.isLibrarySource(source, "/uri/uri.dart")
+      &&  !Elements.isLibrarySource(source, "/utf/utf.dart")
+      &&  !Elements.isLibrarySource(source, "/scalarlist/scalarlist.dart")
+        ) {
+      super.reportError(position, errorCode);
+    }
+  }
+  
   @Override
   protected void reportError(int position, ErrorCode errorCode, Object... arguments) {
     // TODO(devoncarew): we're not correctly identifying dart:html as a core library
diff --git a/compiler/java/com/google/dart/compiler/parser/DartParserCommentsHelper.java b/compiler/java/com/google/dart/compiler/parser/DartParserCommentsHelper.java
index 7c2be7f..e21d2b8 100644
--- a/compiler/java/com/google/dart/compiler/parser/DartParserCommentsHelper.java
+++ b/compiler/java/com/google/dart/compiler/parser/DartParserCommentsHelper.java
@@ -9,6 +9,8 @@
 import com.google.dart.compiler.Source;
 import com.google.dart.compiler.ast.ASTVisitor;
 import com.google.dart.compiler.ast.DartComment;
+import com.google.dart.compiler.ast.DartCommentNewName;
+import com.google.dart.compiler.ast.DartCommentRefName;
 import com.google.dart.compiler.ast.DartDeclaration;
 import com.google.dart.compiler.ast.DartField;
 import com.google.dart.compiler.ast.DartMethodDefinition;
@@ -16,6 +18,7 @@
 import com.google.dart.compiler.ast.DartUnit;
 import com.google.dart.compiler.common.SourceInfo;
 import com.google.dart.compiler.metrics.CompilerMetrics;
+import com.google.dart.compiler.util.apache.StringUtils;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -41,14 +44,16 @@
     }
 
     @Override
-    protected DartScanner createScanner(String sourceCode, Source source, DartCompilerListener listener) {
+    protected DartScanner createScanner(String sourceCode, Source source,
+        DartCompilerListener listener) {
       commentLocs = Lists.newArrayList();
       return new CommentScanner(sourceCode, 0, source, listener);
     }
 
     private class CommentScanner extends DartScanner {
 
-      CommentScanner(String sourceCode, int start, Source sourceReference, DartCompilerListener listener) {
+      CommentScanner(String sourceCode, int start, Source sourceReference,
+          DartCompilerListener listener) {
         super(sourceCode, start, sourceReference, listener);
       }
 
@@ -147,6 +152,7 @@
         if (decl != null) {
           String commentStr = sourceCode.substring(comment.getSourceInfo().getOffset(),
               comment.getSourceInfo().getEnd());
+          tokenizeComment(comment, commentStr);
           // may be @Metadata
           if (commentStr.contains("@deprecated")) {
             decl.setObsoleteMetadata(decl.getObsoleteMetadata().makeDeprecated());
@@ -163,6 +169,63 @@
     }
   }
 
+  private static void tokenizeComment(DartComment comment, String src) {
+    int lastIndex = 0;
+    while (true) {
+      int openIndex = src.indexOf('[', lastIndex);
+      if (openIndex == -1) {
+        break;
+      }
+      int closeIndex = src.indexOf(']', openIndex);
+      if (closeIndex == -1) {
+        break;
+      }
+      lastIndex = closeIndex;
+      String tokenSrc = src.substring(openIndex + 1, closeIndex);
+      if (tokenSrc.startsWith(":") && tokenSrc.endsWith(":")) {
+        // TODO(scheglov) [:code:] and 'code'
+      } else if (tokenSrc.startsWith("new ")) {
+        SourceInfo sourceInfo = comment.getSourceInfo();
+        int offset = sourceInfo.getOffset() + openIndex;
+        int classOffset = offset + "[".length();
+        // remove leading "new "
+        String name = StringUtils.remove(tokenSrc, "new ");
+        classOffset += "new ".length();
+        // remove spaces
+        {
+          String stripName = StringUtils.stripStart(name, null);
+          classOffset += name.length() - stripName.length();
+          name = stripName;
+        }
+        name = name.trim();
+        //
+        String className = StringUtils.substringBefore(name, ".");
+        String constructorName = StringUtils.substringAfter(name, ".");
+        int constructorOffset = classOffset + className.length() + ".".length();
+        DartCommentNewName newNode = new DartCommentNewName(className, classOffset,
+            constructorName, constructorOffset);
+        {
+          Source source = sourceInfo.getSource();
+          int length = tokenSrc.length() + "[]".length();
+          newNode.setSourceInfo(new SourceInfo(source, offset, length));
+        }
+        // add node
+        comment.addNewName(newNode);
+      } else {
+        String name = tokenSrc.trim();
+        DartCommentRefName refNode = new DartCommentRefName(name);
+        {
+          SourceInfo sourceInfo = comment.getSourceInfo();
+          Source source = sourceInfo.getSource();
+          int offset = sourceInfo.getOffset() + openIndex;
+          int length = name.length() + "[]".length();
+          refNode.setSourceInfo(new SourceInfo(source, offset, length));
+        }
+        comment.addRefName(refNode);
+      }
+    }
+  }
+
   private static DartDeclaration<?> adjustDartdocTarget(DartNode currentNode, DartNode nextNode) {
     if (currentNode instanceof DartField && nextNode instanceof DartMethodDefinition) {
       if (currentNode.getSourceInfo().equals(nextNode.getSourceInfo())) {
diff --git a/compiler/java/com/google/dart/compiler/parser/ParserErrorCode.java b/compiler/java/com/google/dart/compiler/parser/ParserErrorCode.java
index 0e3a536..aa904a6 100644
--- a/compiler/java/com/google/dart/compiler/parser/ParserErrorCode.java
+++ b/compiler/java/com/google/dart/compiler/parser/ParserErrorCode.java
@@ -40,6 +40,9 @@
   DEPRECATED_USE_OF_FACTORY_KEYWORD("Deprecated use of the 'factory' keyword: use 'default' instead"),
   DEPRECATED_RAW_STRING("The use of '@' to prefix a raw string has been deprecated; use 'r' instead"),
   DEPRECATED_RESOURCE_DIRECTIVE("The #resource directive has been deprecated and will soon be disallowed"),
+  DEPRECATED_LIBRARY_DIRECTIVE("The '#library(url)' directive has been deprecated, use 'library name' instead"),
+  DEPRECATED_IMPORT_DIRECTIVE("The '#import(url)' directive has been deprecated, use 'import url' instead"),
+  DEPRECATED_SOURCE_DIRECTIVE("The '#source(url)' directive has been deprecated, use 'part url' instead"),
   DIRECTIVE_OUT_OF_ORDER("Directive out of order"),
   DISALLOWED_ABSTRACT_KEYWORD("Abstract keyword not allowed here"),
   // TODO(zundel): error message needs JUnit test (unreachable code?)
diff --git a/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java b/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
index e8b4b45..64d0528 100644
--- a/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
+++ b/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
@@ -119,7 +119,13 @@
 
   @Override
   public void setSupertype(InterfaceType supertype) {
+    if (this.supertype != null) {
+      this.supertype.unregisterSubClass(this);
+    }
     this.supertype = supertype;
+    if (this.supertype != null) {
+      this.supertype.registerSubClass(this);
+    }
   }
 
   void setDefaultClass(InterfaceType element) {
@@ -210,6 +216,7 @@
 
   void addInterface(InterfaceType type) {
     interfaces.add(type);
+    type.registerSubClass(this);
   }
 
   Element findElement(String name) {
diff --git a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
index 4c15ab1..9974915 100644
--- a/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/resolver/CompileTimeConstantAnalyzer.java
@@ -68,9 +68,6 @@
 public class CompileTimeConstantAnalyzer {
 
   private class ExpressionVisitor extends ASTVisitor<Void> {
-    private ExpressionVisitor() {
-    }
-
     private boolean checkBoolean(DartNode x, Type type) {
       // Spec 0.11 allows using "null" literal in place of bool.
       if (x instanceof DartNullLiteral) {
@@ -367,6 +364,8 @@
       }
 
       Element element = x.getElement();
+      boolean elementIsStatic = element != null
+          && (element.getModifiers().isStatic() || Elements.isTopLevel(element));
       switch (ElementKind.of(element)) {
         case CLASS:
         case PARAMETER:
@@ -417,7 +416,7 @@
           return null;
 
         case METHOD:
-          if (!element.getModifiers().isStatic() && !Elements.isTopLevel(element)) {
+          if (!elementIsStatic) {
             expectedConstant(x);
           }
           return null;
diff --git a/compiler/java/com/google/dart/compiler/resolver/Elements.java b/compiler/java/com/google/dart/compiler/resolver/Elements.java
index 55f1401..cea87a6 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Elements.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Elements.java
@@ -717,13 +717,17 @@
    * @return <code>true</code> if given {@link Source} represents library with given name.
    */
   public static boolean isLibrarySource(Source source, String name) {
+    LibrarySource library = null;
+    if (source instanceof LibrarySource) {
+      library = (LibrarySource) source;
+    }
     if (source instanceof DartSource) {
       DartSource dartSource = (DartSource) source;
-      LibrarySource library = dartSource.getLibrary();
-      if (library != null) {
-        String libraryName = library.getName();
-        return libraryName.endsWith(name);
-      }
+      library = dartSource.getLibrary();
+    }
+    if (library != null) {
+      String libraryName = library.getName();
+      return libraryName.endsWith(name);
     }
     return false;
   }
@@ -748,13 +752,18 @@
    *         implementation.
    */
   public static boolean isCoreLibrarySource(Source source) {
+    if (source != null && source.getUri() != null
+        && source.getUri().toString().equals("libraries.dart")) {
+      return true;
+    }
     // TODO (danrubel) remove these when dartc libraries are removed
     // Old core library file names
     return Elements.isLibrarySource(source, "/core/corelib.dart")
         || Elements.isLibrarySource(source, "/core/corelib_impl.dart")
         // New core library file names
         || Elements.isLibrarySource(source, "/core/core.dart")
-        || Elements.isLibrarySource(source, "/core/coreimpl.dart");
+        || Elements.isLibrarySource(source, "/core/coreimpl.dart")
+        || Elements.isLibrarySource(source, "/coreimpl/coreimpl.dart");
   }
   
   public static boolean isHtmlLibrarySource(Source source) {
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index 9edadea..91a5f7c 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -20,6 +20,9 @@
 import com.google.dart.compiler.ast.DartCase;
 import com.google.dart.compiler.ast.DartCatchBlock;
 import com.google.dart.compiler.ast.DartClass;
+import com.google.dart.compiler.ast.DartComment;
+import com.google.dart.compiler.ast.DartCommentNewName;
+import com.google.dart.compiler.ast.DartCommentRefName;
 import com.google.dart.compiler.ast.DartContinueStatement;
 import com.google.dart.compiler.ast.DartDirective;
 import com.google.dart.compiler.ast.DartDoWhileStatement;
@@ -81,7 +84,9 @@
 import com.google.dart.compiler.type.InterfaceType;
 import com.google.dart.compiler.type.InterfaceType.Member;
 import com.google.dart.compiler.type.Type;
+import com.google.dart.compiler.type.TypeAnalyzer;
 import com.google.dart.compiler.type.TypeKind;
+import com.google.dart.compiler.type.TypeQuality;
 import com.google.dart.compiler.type.TypeVariable;
 import com.google.dart.compiler.type.Types;
 
@@ -302,6 +307,32 @@
     }
 
     @Override
+    public Element visitCommentRefName(DartCommentRefName node) {
+      Scope scope = getContext().getScope();
+      String name = node.getName();
+      Element element = scope.findElement(scope.getLibrary(), name);
+      return recordElement(node, element);
+    }
+
+    @Override
+    public Element visitCommentNewName(DartCommentNewName node) {
+      String className = node.getClassName();
+      String constructorName = node.getConstructorName();
+      Scope scope = getContext().getScope();
+      Element element = scope.findElement(scope.getLibrary(), className);
+      if (ElementKind.of(element) == ElementKind.CLASS) {
+        ClassElement classElement = (ClassElement) element;
+        for (ConstructorElement constructor : classElement.getConstructors()) {
+          if (constructor.getName().equals(constructorName)) {
+            node.setElements(classElement, constructor);
+            return constructor;
+          }
+        }
+      }
+      return null;
+    }
+
+    @Override
     public Element visitClass(DartClass cls) {
       assert currentMethod == null : "nested class?";
       ClassNodeElement classElement = cls.getElement();
@@ -325,11 +356,16 @@
       enclosingElement = classElement;
       context = topLevelContext.extend(classElement);
 
+      // members
       this.finalsNeedingInitializing.clear();
-      for (NodeElement member : classElement.getMembers()) {
-        member.getNode().accept(this);
+      for (DartNode member : cls.getMembers()) {
+        if (ElementKind.of(member.getElement()) == ElementKind.CONSTRUCTOR) {
+          continue;
+        }
+        member.accept(this);
       }
 
+      // constructors
       boolean testForAllConstantFields = false;
       for (DartNode member : cls.getMembers()) {
         if (member instanceof DartMethodDefinition) {
@@ -401,6 +437,13 @@
         });
       }
 
+      {
+        DartComment comment = cls.getDartDoc();
+        if (comment != null) {
+          comment.accept(this);
+        }
+      }
+
       context = previousContext;
       currentHolder = previousHolder;
       enclosingElement = previousEnclosingElement;
@@ -640,6 +683,13 @@
           onError(parameter, ResolverErrorCode.DUPLICATE_INITIALIZATION, parameter.getName());
         }
       }
+      
+      {
+        DartComment comment = node.getDartDoc();
+        if (comment != null) {
+          comment.accept(this);
+        }
+      }
 
       DartBlock body = functionNode.getBody();
       boolean isInterface = false;
@@ -726,7 +776,8 @@
         Element element = node.getElement();
         Type expressionType = expression.getType();
         if (isFinal && expressionType != null && TypeKind.of(element.getType()) == TypeKind.DYNAMIC) {
-          Type fieldType = Types.makeInferred(expressionType);
+          TypeQuality typeQuality = TypeAnalyzer.getTypeQuality(expression);
+          Type fieldType = Types.makeInferred(expressionType, typeQuality);
           Elements.setType(element, fieldType);
         }
       } else if (isFinal) {
@@ -1176,6 +1227,7 @@
           onError(x, ResolverErrorCode.CANNOT_BE_RESOLVED, name);
           x.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
         }
+      } else if (x.getParent() instanceof DartComment) {
       } else {
         element = checkResolvedIdentifier(x, isQualifier, scope, name, element);
       }
@@ -1199,7 +1251,7 @@
         onError(x, ResolverErrorCode.USING_LOCAL_VARIABLE_BEFORE_DECLARATION, x);
       }
 
-      if (!isQualifier) {
+      if (!isQualifier && !(x.getParent() instanceof DartComment)) {
         switch (ElementKind.of(element)) {
           case FUNCTION_TYPE_ALIAS:
             onError(x, ResolverErrorCode.CANNOT_USE_TYPE, name);
@@ -1232,10 +1284,11 @@
           if (!Elements.isStaticContext(element) && !element.getModifiers().isConstant()) {
             if (inInstanceVariableInitializer) {
               onError(x, ResolverErrorCode.CANNOT_USE_INSTANCE_FIELD_IN_INSTANCE_FIELD_INITIALIZER);
-            } else if (ASTNodes.isStaticContext(x)) {
-              onError(x, ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, name);
             }
           }
+          if (ASTNodes.isStaticContext(x) && !Elements.isStaticContext(element)) {
+            onError(x, ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, name);
+          }
           if (isIllegalPrivateAccess(x, enclosingElement, element, x.getName())) {
             return null;
           }
diff --git a/compiler/java/com/google/dart/compiler/type/AbstractType.java b/compiler/java/com/google/dart/compiler/type/AbstractType.java
index 221a3d6..3a5892a 100644
--- a/compiler/java/com/google/dart/compiler/type/AbstractType.java
+++ b/compiler/java/com/google/dart/compiler/type/AbstractType.java
@@ -9,7 +9,7 @@
  */
 abstract class AbstractType implements Type {
   @Override
-  public boolean isInferred() {
-    return false;
+  public TypeQuality getQuality() {
+    return TypeQuality.EXACT;
   }
 }
diff --git a/compiler/java/com/google/dart/compiler/type/DynamicTypeImplementation.java b/compiler/java/com/google/dart/compiler/type/DynamicTypeImplementation.java
index 57b024e..7467104 100644
--- a/compiler/java/com/google/dart/compiler/type/DynamicTypeImplementation.java
+++ b/compiler/java/com/google/dart/compiler/type/DynamicTypeImplementation.java
@@ -4,6 +4,7 @@
 
 package com.google.dart.compiler.type;
 
+import com.google.dart.compiler.resolver.ClassElement;
 import com.google.dart.compiler.resolver.DynamicElement;
 import com.google.dart.compiler.resolver.Element;
 import com.google.dart.compiler.resolver.Elements;
@@ -133,4 +134,17 @@
   public Map<String, Type> getNamedParameterTypes() {
     return null;
   }
+  
+  @Override
+  public void registerSubClass(ClassElement subClass) {
+  }
+  
+  @Override
+  public void unregisterSubClass(ClassElement subClass) {
+  }
+
+  @Override
+  public Member lookupSubTypeMember(String name) {
+    return null;
+  }
 }
diff --git a/compiler/java/com/google/dart/compiler/type/ExternalTypeAnalyzers.java b/compiler/java/com/google/dart/compiler/type/ExternalTypeAnalyzers.java
index 56cd267..d8a6be2 100644
--- a/compiler/java/com/google/dart/compiler/type/ExternalTypeAnalyzers.java
+++ b/compiler/java/com/google/dart/compiler/type/ExternalTypeAnalyzers.java
@@ -12,7 +12,6 @@
 import com.google.dart.compiler.resolver.Element;
 import com.google.dart.compiler.resolver.ElementKind;
 import com.google.dart.compiler.resolver.Elements;
-import com.google.dart.compiler.resolver.EnclosingElement;
 import com.google.dart.compiler.resolver.LibraryElement;
 import com.google.dart.compiler.util.apache.StringUtils;
 
@@ -118,11 +117,8 @@
     String name = element.getName();
     List<DartExpression> arguments = invocation.getArguments();
     LibraryElement libraryElement = Elements.getDeclaringLibrary(element);
-    // NodeSelector.query(String)
-    EnclosingElement enclosingElement = element.getEnclosingElement();
-    if ("query".equals(name) && isDeclaredInHtmlLibrary(element)
-        && ElementKind.of(enclosingElement) == ElementKind.CLASS
-        && "NodeSelector".equals(enclosingElement.getName())) {
+    // Document.query(String)
+    if ("query".equals(name) && isDeclaredInHtmlLibrary(element)) {
       return analyzeQuery(arguments, libraryElement, defaultType);
     }
     // no guess
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceType.java b/compiler/java/com/google/dart/compiler/type/InterfaceType.java
index aaf43ca..7a746c1 100644
--- a/compiler/java/com/google/dart/compiler/type/InterfaceType.java
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceType.java
@@ -32,6 +32,10 @@
   InterfaceType asRawType();
 
   Member lookupMember(String name);
+  
+  void registerSubClass(ClassElement subClass);
+  void unregisterSubClass(ClassElement subClass);
+  Member lookupSubTypeMember(String name);
 
   interface Member {
     InterfaceType getHolder();
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
index a7ab8d6..fac151a 100644
--- a/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeImplementation.java
@@ -4,6 +4,7 @@
 
 package com.google.dart.compiler.type;
 
+import com.google.common.collect.MapMaker;
 import com.google.dart.compiler.resolver.ClassElement;
 import com.google.dart.compiler.resolver.Element;
 import com.google.dart.compiler.resolver.ElementKind;
@@ -15,6 +16,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * An interface type.
@@ -22,6 +24,7 @@
 class InterfaceTypeImplementation extends AbstractType implements InterfaceType {
   private final ClassElement element;
   private final List<Type> arguments;
+  private final Map<ClassElement, Object> subClasses = new MapMaker().weakKeys().makeMap();
 
   InterfaceTypeImplementation(ClassElement element, List<Type> arguments) {
     this.element = element;
@@ -217,4 +220,34 @@
       return getterType.subst(typeArguments, typeParameters);
     }
   }
+  
+  @Override
+  public void registerSubClass(ClassElement subClass) {
+    subClasses.put(subClass, this);
+  }
+  
+  @Override
+  public void unregisterSubClass(ClassElement subClass) {
+    subClasses.remove(subClass);
+  }
+  
+  @Override
+  public Member lookupSubTypeMember(String name) {
+    for (ClassElement subClass : subClasses.keySet()) {
+      {
+        Element element = subClass.lookupLocalElement(name);
+        if (element != null) {
+          return new MemberImplementation(this, element);
+        }
+      }
+      InterfaceType type = subClass.getType();
+      if (type != null) {
+        Member member = type.lookupSubTypeMember(name);
+        if (member != null) {
+          return member;
+        }
+      }
+    }
+    return null;
+  }
 }
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnion.java b/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnion.java
index 4fcf9a2..87a6c9c 100644
--- a/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnion.java
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnion.java
@@ -1,98 +1,17 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
 package com.google.dart.compiler.type;
 
-import com.google.common.collect.ImmutableList;
-import com.google.dart.compiler.resolver.ClassElement;
-import com.google.dart.compiler.resolver.ClassElementUnion;
-
 import java.util.List;
 
 /**
  * Artificial {@link InterfaceType} which is union of several {@link InterfaceType}s.
  */
-class InterfaceTypeUnion implements InterfaceType {
-  
-  private final List<InterfaceType> types;
-  private final ClassElement element;
-
-  public InterfaceTypeUnion(List<InterfaceType> types) {
-    this.types = types;
-    this.element = new ClassElementUnion(this, types);
-  }
-  
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof InterfaceTypeUnion) {
-      InterfaceTypeUnion other = (InterfaceTypeUnion) obj;
-      return getElement().equals(other.getElement());
-    }
-    return false;
-  }
-
-  @Override
-  public int hashCode() {
-    int hashCode = 31;
-    hashCode += getElement().hashCode();
-    hashCode += 31 * hashCode + getArguments().hashCode();
-    return hashCode;
-  }
-
-  @Override
-  public String toString() {
-    return types.toString();
-  }
-  
-  @Override
-  public TypeKind getKind() {
-    return TypeKind.INTERFACE;
-  }
-
-  @Override
-  public boolean isInferred() {
-    return false;
-  }
-
-  @Override
-  public InterfaceType subst(List<Type> arguments, List<Type> parameters) {
-    return null;
-  }
-
-  @Override
-  public ClassElement getElement() {
-    return element;
-  }
-
-  @Override
-  public List<Type> getArguments() {
-    return ImmutableList.of();
-  }
-
-  @Override
-  public boolean isRaw() {
-    return true;
-  }
-
-  @Override
-  public boolean hasDynamicTypeArgs() {
-    return false;
-  }
-
-  @Override
-  public InterfaceType asRawType() {
-    return this;
-  }
-
-  @Override
-  public Member lookupMember(String name) {
-    for (InterfaceType type : types) {
-      Member member = type.lookupMember(name);
-      if (member != null) {
-        return member;
-      }
-    }
-    return null;
-  }
+public interface InterfaceTypeUnion extends InterfaceType {
+  /**
+   * @return the {@link InterfaceType} making this union.
+   */
+  List<InterfaceType> getTypes();
 }
diff --git a/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnionImplementation.java b/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnionImplementation.java
new file mode 100644
index 0000000..b17a4d3
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/type/InterfaceTypeUnionImplementation.java
@@ -0,0 +1,115 @@
+// 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.
+
+package com.google.dart.compiler.type;
+
+import com.google.common.collect.ImmutableList;
+import com.google.dart.compiler.resolver.ClassElement;
+import com.google.dart.compiler.resolver.ClassElementUnion;
+
+import java.util.List;
+
+/**
+ * Implementation of {@link InterfaceTypeUnion}.
+ */
+class InterfaceTypeUnionImplementation implements InterfaceTypeUnion {
+
+  private final List<InterfaceType> types;
+  private final ClassElement element;
+
+  public InterfaceTypeUnionImplementation(List<InterfaceType> types) {
+    this.types = types;
+    this.element = new ClassElementUnion(this, types);
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof InterfaceTypeUnionImplementation) {
+      InterfaceTypeUnionImplementation other = (InterfaceTypeUnionImplementation) obj;
+      return getElement().equals(other.getElement());
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    int hashCode = 31;
+    hashCode += getElement().hashCode();
+    hashCode += 31 * hashCode + getArguments().hashCode();
+    return hashCode;
+  }
+
+  @Override
+  public String toString() {
+    return types.toString();
+  }
+
+  @Override
+  public TypeKind getKind() {
+    return TypeKind.INTERFACE;
+  }
+
+  @Override
+  public TypeQuality getQuality() {
+    return TypeQuality.EXACT;
+  }
+
+  @Override
+  public InterfaceType subst(List<Type> arguments, List<Type> parameters) {
+    return null;
+  }
+
+  @Override
+  public ClassElement getElement() {
+    return element;
+  }
+
+  @Override
+  public List<Type> getArguments() {
+    return ImmutableList.of();
+  }
+
+  @Override
+  public boolean isRaw() {
+    return true;
+  }
+
+  @Override
+  public boolean hasDynamicTypeArgs() {
+    return false;
+  }
+
+  @Override
+  public InterfaceType asRawType() {
+    return this;
+  }
+
+  @Override
+  public Member lookupMember(String name) {
+    for (InterfaceType type : types) {
+      Member member = type.lookupMember(name);
+      if (member != null) {
+        return member;
+      }
+    }
+    return null;
+  }
+
+  @Override
+  public void registerSubClass(ClassElement subClass) {
+  }
+
+  @Override
+  public void unregisterSubClass(ClassElement subClass) {
+  }
+
+  @Override
+  public Member lookupSubTypeMember(String name) {
+    return null;
+  }
+
+  public List<InterfaceType> getTypes() {
+    return types;
+  }
+}
diff --git a/compiler/java/com/google/dart/compiler/type/Type.java b/compiler/java/com/google/dart/compiler/type/Type.java
index d3b8933..3fa6a0b 100644
--- a/compiler/java/com/google/dart/compiler/type/Type.java
+++ b/compiler/java/com/google/dart/compiler/type/Type.java
@@ -25,8 +25,7 @@
   TypeKind getKind();
   
   /**
-   * @return <code>true</code> if this {@link Type} was not declared in {@link Element}, but
-   * instead was inferred from context.
+   * @return the {@link TypeQuality}, not <code>null</code>.
    */
-  boolean isInferred();
+  TypeQuality getQuality();
 }
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 454b0b0..aea700e 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -36,6 +36,7 @@
 import com.google.dart.compiler.ast.DartCase;
 import com.google.dart.compiler.ast.DartCatchBlock;
 import com.google.dart.compiler.ast.DartClass;
+import com.google.dart.compiler.ast.DartComment;
 import com.google.dart.compiler.ast.DartConditional;
 import com.google.dart.compiler.ast.DartContinueStatement;
 import com.google.dart.compiler.ast.DartDeclaration;
@@ -218,7 +219,7 @@
           return true;
         }
         // was assignment, inferred
-        if (type != null && type.isInferred()) {
+        if (type != null && TypeQuality.isInferred(type)) {
           return true;
         }
         // was declared with type, keep it
@@ -442,7 +443,7 @@
             }
           }
           // may be replace type of variable
-          setVariableElementType(lhsNode.getElement(), rhs);
+          setVariableElementType(lhsNode.getElement(), rhs, getTypeQuality(rhsNode));
           checkAssignableElement(lhsNode);
           // if cascade, then use type of "lhs" qualifier
           if (lhsNode instanceof DartPropertyAccess) {
@@ -653,10 +654,17 @@
       if (member == null) {
         member = itype.lookupMember("setter " + methodName);
       }
+      // is "receiver" is inferred, attempt to find member in one of the subtypes
+      if (member == null) {
+        if (TypeQuality.of(receiver) == TypeQuality.INFERRED && receiver instanceof InterfaceType) {
+          member = ((InterfaceType) receiver).lookupSubTypeMember(methodName);
+        }
+      }
+      // report problem
       if (member == null && problemTarget != null) {
         if (reportNoMemberWhenHasInterceptor || !Elements.handlesNoSuchMethod(itype)) {
-          if (typeChecksForInferredTypes || !receiver.isInferred()) {
-            ErrorCode code = receiver.isInferred()
+          if (typeChecksForInferredTypes || !TypeQuality.isInferred(receiver)) {
+            ErrorCode code = TypeQuality.isInferred(receiver)
                 ? TypeErrorCode.INTERFACE_HAS_NO_METHOD_NAMED_INFERRED
                 : TypeErrorCode.INTERFACE_HAS_NO_METHOD_NAMED;
             typeError(problemTarget, code, receiver, methodName);
@@ -671,10 +679,10 @@
      * If left-hand-side is {@link VariableElement} with propagated type, then remember type before
      * current "basic block" and set new type.
      */
-    private void setVariableElementType(Element element, Type rhs) {
+    private void setVariableElementType(Element element, Type type, TypeQuality quality) {
       if (ElementKind.of(element) == ElementKind.VARIABLE) {
         VariableElement variableElement = (VariableElement) element;
-        Type newType = Types.makeInferred(rhs);
+        Type newType = Types.makeInferred(type, quality);
         blockOldTypes.getFirst().setType(variableElement, newType);
       }
     }
@@ -690,7 +698,8 @@
      * @return <code>true</code> if given {@link Element} is has inferred {@link Type}.
      */
     private static boolean hasInferredType(Element element) {
-      return element != null && element.getType() != null && element.getType().isInferred();
+      return element != null && element.getType() != null
+          && element.getType().getQuality() != TypeQuality.EXACT;
     }
 
     /**
@@ -771,7 +780,7 @@
         }
         // apply inferred type
         if (inferredType != null) {
-          if (TypeKind.of(currentType) == TypeKind.DYNAMIC && currentType.isInferred()) {
+          if (TypeKind.of(currentType) == TypeKind.DYNAMIC && TypeQuality.isInferred(currentType)) {
             // if we fell back to Dynamic, keep it
           } else {
             Type unionType = getUnionType(currentType, inferredType);
@@ -784,31 +793,6 @@
         }
       }
 
-      /**
-       * @return the {@link Type} which is both "a" and "b" types. May be "dynamic" if "a" and "b"
-       *         don't form hierarchy.
-       */
-      Type getUnionType(Type curType, Type newType) {
-        if (TypeKind.of(curType) == TypeKind.DYNAMIC) {
-          return newType;
-        }
-        if (TypeKind.of(newType) == TypeKind.DYNAMIC) {
-          return curType;
-        }
-        if (types.isSubtype(curType, newType)) {
-          return curType;
-        }
-        if (types.isSubtype(newType, curType)) {
-          return newType;
-        }
-        // if InterfaceType, use union
-        if (curType instanceof InterfaceType && newType instanceof InterfaceType) {
-          return types.unionTypes(ImmutableList.of((InterfaceType) curType, (InterfaceType) newType));
-        }
-        // keep type as is
-        return curType;
-      }
-
       void restore() {
         for (Entry<VariableElement, Type> entry : typesMap.entrySet()) {
           Elements.setType(entry.getKey(), entry.getValue());
@@ -817,6 +801,31 @@
     }
 
     /**
+     * @return the {@link Type} which is both "a" and "b" types. May be "dynamic" if "a" and "b"
+     *         don't form hierarchy.
+     */
+    private Type getUnionType(Type curType, Type newType) {
+      if (TypeKind.of(curType) == TypeKind.DYNAMIC) {
+        return newType;
+      }
+      if (TypeKind.of(newType) == TypeKind.DYNAMIC) {
+        return curType;
+      }
+      if (types.isSubtype(curType, newType)) {
+        return curType;
+      }
+      if (types.isSubtype(newType, curType)) {
+        return newType;
+      }
+      // if InterfaceType, use union
+      if (curType instanceof InterfaceType && newType instanceof InterfaceType) {
+        return types.unionTypes(ImmutableList.of((InterfaceType) curType, (InterfaceType) newType));
+      }
+      // keep type as is
+      return curType;
+    }
+
+    /**
      * @return <code>true</code> if we can prove that given {@link DartStatement} always leads to
      *         the exit from the enclosing function.
      */
@@ -938,11 +947,22 @@
      * If type of variable-like {@link DartDeclaration} (i.e. variables, parameter, field) is not
      * specified and we know somehow this type, then use it.
      */
-    private static void inferVariableDeclarationType(DartDeclaration<?> node, Type type) {
+    private static void inferVariableDeclarationType(DartDeclaration<?> node, DartExpression value) {
+      Type type = value.getType();
+      TypeQuality quality = getTypeQuality(value);
+      inferVariableDeclarationType(node, type, quality);
+    }
+
+    /**
+     * If type of variable-like {@link DartDeclaration} (i.e. variables, parameter, field) is not
+     * specified and we know somehow this type, then use it.
+     */
+    private static void inferVariableDeclarationType(DartDeclaration<?> node, Type type,
+        TypeQuality typeQuality) {
       if (type != null && TypeKind.of(type) != TypeKind.DYNAMIC) {
         Element element = node.getElement();
         if (element != null && TypeKind.of(element.getType()) == TypeKind.DYNAMIC) {
-          Type inferredType = Types.makeInferred(type);
+          Type inferredType = Types.makeInferred(type, typeQuality);
           Elements.setType(element, inferredType);
           node.getName().setType(inferredType);
         }
@@ -976,7 +996,8 @@
           for (int i = 0; i < n; i++) {
             Type requiredNormalParameterType = requiredNormalParameterTypes.get(i);
             DartParameter parameterNode = parameterNodes.get(i);
-            inferVariableDeclarationType(parameterNode, requiredNormalParameterType);
+            inferVariableDeclarationType(parameterNode, requiredNormalParameterType,
+                TypeQuality.INFERRED);
           }
         }
       }
@@ -990,7 +1011,8 @@
         Type newType = blockTypeContext.newTypes.get(variable);
         Type oldType = blockTypeContext.oldTypes.get(variable);
         Type mergedType = types.intersection(newType, oldType);
-        setVariableElementType(variable, mergedType);
+        TypeQuality mergedTypeQuality = Types.getIntersectionQuality(newType, oldType);
+        setVariableElementType(variable, mergedType, mergedTypeQuality);
       }
     }
 
@@ -999,13 +1021,13 @@
       s.getClass(); // Null check.
       // ignore inferred types, treat them as Dynamic
       if (!typeChecksForInferredTypes) {
-        if (t.isInferred() || s.isInferred()) {
+        if (TypeQuality.isInferred(t) || TypeQuality.isInferred(s)) {
           return true;
         }
       }
       // do check and report error
       if (!types.isAssignable(t, s)) {
-        TypeErrorCode errorCode = t.isInferred() || s.isInferred()
+        TypeErrorCode errorCode = TypeQuality.isInferred(t) || TypeQuality.isInferred(s)
             ? TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE_INFERRED
             : TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE;
         typeError(node, errorCode, s, t);
@@ -1034,7 +1056,7 @@
     private FunctionType getMethodType(Type receiver, Member member, String name,
                                          DartNode diagnosticNode) {
       FunctionType functionType = getMethodType0(receiver, member, name, diagnosticNode);
-      if (receiver.isInferred()) {
+      if (TypeQuality.isInferred(receiver)) {
         functionType = (FunctionType) Types.makeInferred(functionType);
       }
       return functionType;
@@ -1078,8 +1100,8 @@
           }
         }
         default:
-          if (typeChecksForInferredTypes || !receiver.isInferred()) {
-            TypeErrorCode errorCode = receiver.isInferred()
+          if (typeChecksForInferredTypes || !TypeQuality.isInferred(receiver)) {
+            TypeErrorCode errorCode = TypeQuality.isInferred(receiver)
                 ? TypeErrorCode.NOT_A_METHOD_IN_INFERRED : TypeErrorCode.NOT_A_METHOD_IN;
             typeError(diagnosticNode, errorCode, name, receiver);
           }
@@ -1174,33 +1196,7 @@
       {
         Set<String> usedNamedParametersPositional = Sets.newHashSet();
         Set<String> usedNamedParametersNamed = Sets.newHashSet();
-        // Prepare named parameters.
         Map<String, Type> namedParameterTypes = ftype.getNamedParameterTypes();
-        Iterator<Entry<String, Type>> namedParameterTypesIterator =
-            namedParameterTypes.entrySet().iterator();
-//        // Check positional arguments for named parameters.
-//        while (namedParameterTypesIterator.hasNext()
-//            && argumentTypes.hasNext()
-//            && !(argumentNodes.get(argumentIndex) instanceof DartNamedExpression)) {
-//          Entry<String, Type> namedEntry = namedParameterTypesIterator.next();
-//          String parameterName = namedEntry.getKey();
-//          usedNamedParametersPositional.add(parameterName);
-//          Type namedType = namedEntry.getValue();
-//          namedType.getClass(); // quick null check
-//          Type argumentType = argumentTypes.next();
-//          argumentType.getClass(); // quick null check
-//          DartExpression argumentNode = argumentNodes.get(argumentIndex);
-//          if (parameters != null) {
-//            argumentNode.setInvocationParameterId(parameters.get(argumentIndex));
-//          } else {
-//            argumentNode.setInvocationParameterId(argumentIndex);
-//          }
-//          if (checkAssignable(argumentNode, namedType, argumentType)) {
-//            inferFunctionLiteralParametersTypes(argumentNode, namedType);
-//          }
-//          argumentIndex++;
-//        }
-        // Check named arguments for named parameters.
         while (argumentTypes.hasNext()
             && argumentNodes.get(argumentIndex) instanceof DartNamedExpression) {
           DartNamedExpression namedExpression =
@@ -1348,11 +1344,18 @@
       if (node == null) {
         return dynamicType;
       }
+      // prepare new type
       Type result = node.accept(this);
       if (result == null) {
          return dynamicType;
       }
-      node.setType(result);
+      // set new type, or keep existing
+      if (node.getType() == null) {
+        node.setType(result);
+      } else {
+        result = node.getType();
+      }
+      // done
       return result;
     }
 
@@ -1446,10 +1449,57 @@
     public Type visitCascadeExpression(DartCascadeExpression node) {
       DartExpression target = node.getTarget();
       Type type = nonVoidTypeOf(target);
+      node.setType(type);
+      inferCascadeType(node);
       node.visitChildren(this);
       return type;
     }
 
+    /**
+     * Infers {@link Type} of {@link DartCascadeExpression} from context.
+     */
+    private void inferCascadeType(DartCascadeExpression node) {
+      // field declaration
+      if (node.getParent() instanceof DartField) {
+        DartField field = (DartField) node.getParent();
+        Type varType = field.getElement().getType();
+        setCascadeUnionType(node, varType);
+      }
+      // variable declaration
+      if (node.getParent() instanceof DartVariable) {
+        DartVariable var = (DartVariable) node.getParent();
+        Type varType = var.getElement().getType();
+        setCascadeUnionType(node, varType);
+      }
+      // assignment
+      if (node.getParent() instanceof DartBinaryExpression) {
+        DartBinaryExpression binary = (DartBinaryExpression) node.getParent();
+        if (binary.getOperator() == Token.ASSIGN && binary.getArg2() == node
+            && binary.getArg1() != null) {
+          Element leftElement = binary.getArg1().getElement();
+          if (leftElement != null) {
+            Type varType = leftElement.getType();
+            setCascadeUnionType(node, varType);
+          }
+        }
+      }
+    }
+
+    /**
+     * Sets for given {@link DartCascadeExpression} and its target {@link Type} which is union of
+     * existing type and "newType".
+     */
+    private void setCascadeUnionType(DartCascadeExpression node, Type newType) {
+      DartExpression target = node.getTarget();
+      Type type = node.getType();
+      if (isExplicitlySpecifiedType(newType) && types.isAssignable(type, newType)) {
+        Type unionType = getUnionType(type, newType);
+        unionType = Types.makeInferred(unionType);
+        node.setType(unionType);
+        target.setType(unionType);
+      }
+    }
+
     @Override
     public Type visitFunctionObjectInvocation(DartFunctionObjectInvocation node) {
       ClassElement element = functionType.getElement();
@@ -1845,6 +1895,9 @@
           && ((DartDeclaration<?>) node.getParent()).getName() == node) {
         return node.getType();
       }
+      if (node.getParent() instanceof DartComment) {
+        return dynamicType;
+      }
       Element element = node.getElement();
       Type type;
       switch (ElementKind.of(element)) {
@@ -1966,7 +2019,8 @@
           }
           // do merge
           Type mergedType = types.intersection(possibleTypes);
-          setVariableElementType(variable, mergedType);
+          TypeQuality mergedTypeQuality = Types.getIntersectionQuality(possibleTypes);
+          setVariableElementType(variable, mergedType, mergedTypeQuality);
         }
       }
       // done
@@ -2309,16 +2363,24 @@
           member = member2;
         }
       }
+      // is "receiver" is inferred, attempt to find member in one of the subtypes
+      if (member == null) {
+        if (TypeQuality.of(receiver) == TypeQuality.INFERRED && receiver instanceof InterfaceType) {
+          member = ((InterfaceType) receiver).lookupSubTypeMember(name);
+        }
+      }
+      // report "not a member"
       if (member == null) {
         if (reportNoMemberWhenHasInterceptor || !Elements.handlesNoSuchMethod(cls)) {
-          if (typeChecksForInferredTypes || !receiver.isInferred()) {
-            TypeErrorCode errorCode = receiver.isInferred()
+          if (typeChecksForInferredTypes || !TypeQuality.isInferred(receiver)) {
+            TypeErrorCode errorCode = TypeQuality.isInferred(receiver)
                 ? TypeErrorCode.NOT_A_MEMBER_OF_INFERRED : TypeErrorCode.NOT_A_MEMBER_OF;
             typeError(node.getName(), errorCode, name, cls);
           }
         }
         return dynamicType;
       }
+      // set resolved element
       element = member.getElement();
       node.setElement(element);
       Modifiers modifiers = element.getModifiers();
@@ -2799,7 +2861,7 @@
       // if type is declared and right side is closure, infer its parameter types
       if (value != null) {
         Type varType = node.getElement().getType();
-        if (isExclicitlySpecifiedType(varType)) {
+        if (isExplicitlySpecifiedType(varType)) {
           inferFunctionLiteralParametersTypes(value, varType);
         }
       }
@@ -2807,8 +2869,7 @@
       Type result = checkInitializedDeclaration(node, value);
       // if no type declared for variables, try to use type of value
       if (value != null) {
-        Type valueType = value.getType();
-        inferVariableDeclarationType(node, valueType);
+        inferVariableDeclarationType(node, value);
       }
       // done
       return result;
@@ -2907,7 +2968,7 @@
         // if type is declared and right side is closure, infer its parameter types
         if (value != null) {
           Type fieldType = node.getElement().getType();
-          if (isExclicitlySpecifiedType(fieldType)) {
+          if (isExplicitlySpecifiedType(fieldType)) {
             inferFunctionLiteralParametersTypes(value, fieldType);
           }
         }
@@ -2917,8 +2978,7 @@
         // only final fields, because only in this case we can be sure that field is not assigned
         // somewhere, may be even not in this unit
         if (node.getModifiers().isFinal() && value != null) {
-          Type valueType = value.getType();
-          inferVariableDeclarationType(node, valueType);
+          inferVariableDeclarationType(node, value);
         }
         // done
         return result;
@@ -3488,7 +3548,7 @@
         }
         return namedParameters;
       }
-      
+
       private Map<String, DartExpression> getParametersDefaultsNamed(List<VariableElement> parameters) {
         Map<String, DartExpression> defaults = Maps.newHashMap();
         for (VariableElement parameter : parameters) {
@@ -3498,31 +3558,54 @@
         }
         return defaults;
       }
-
-      private int getNumRequiredParameters(List<VariableElement> parameters) {
-        int numRequired = 0;
-        for (VariableElement parameter : parameters) {
-          if (!parameter.isNamed()) {
-            numRequired++;
-          }
-        }
-        return numRequired;
-      }
-
-      private List<VariableElement> getNamedParameters(List<VariableElement> parameters) {
-        List<VariableElement> named = Lists.newArrayList();
-        for (VariableElement v : parameters) {
-          if (v.isNamed()) {
-            named.add(v);
-          }
-        }
-        return named;
-      }
     }
   }
 
-  private static boolean isExclicitlySpecifiedType(Type fieldType) {
-    return fieldType != null && TypeKind.of(fieldType) != TypeKind.DYNAMIC
-        && !fieldType.isInferred();
+  private static boolean isExplicitlySpecifiedType(Type type) {
+    return type != null && TypeKind.of(type) != TypeKind.DYNAMIC
+        && !TypeQuality.isInferred(type);
+  }
+  
+  /**
+   * @return the {@link TypeQuality} of given {@link DartExpression}.
+   */
+  public static TypeQuality getTypeQuality(DartExpression expr) {
+    if (expr != null) {
+      if (expr instanceof DartMethodInvocation) {
+        return TypeQuality.INFERRED;
+      }
+      if (expr instanceof DartUnqualifiedInvocation) {
+        return TypeQuality.INFERRED;
+      }
+      if (expr instanceof DartUnaryExpression) {
+        DartUnaryExpression unary = (DartUnaryExpression) expr;
+        if (hasTypeBoolIntDouble(unary.getArg())) {
+          return TypeQuality.INFERRED_EXACT;
+        }
+        return TypeQuality.INFERRED;
+      }
+      if (expr instanceof DartBinaryExpression) {
+        DartBinaryExpression binary = (DartBinaryExpression) expr;
+        if (hasTypeBoolIntDouble(binary.getArg1()) && hasTypeBoolIntDouble(binary.getArg2())) {
+          return TypeQuality.INFERRED_EXACT;
+        }
+        return TypeQuality.INFERRED;
+      }
+      if (expr instanceof DartNewExpression) {
+        return TypeQuality.INFERRED;
+      }
+    }
+    return TypeQuality.INFERRED_EXACT;
+  }
+
+  private static boolean hasTypeBoolIntDouble(DartExpression expr) {
+    Type type = expr.getType();
+    return isCoreType(type, "bool") || isCoreType(type, "int") || isCoreType(type, "double");
+  }
+  
+  private static boolean isCoreType(Type type, String name) {
+    return type != null
+        && Elements.isCoreLibrarySource(type.getElement().getSourceInfo().getSource())
+        && type.getElement().getName().equals(name);
   }
 }
diff --git a/compiler/java/com/google/dart/compiler/type/TypeQuality.java b/compiler/java/com/google/dart/compiler/type/TypeQuality.java
new file mode 100644
index 0000000..04ff2a6
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/type/TypeQuality.java
@@ -0,0 +1,36 @@
+// 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.
+
+package com.google.dart.compiler.type;
+
+import com.google.dart.compiler.resolver.Element;
+
+/**
+ * Quality of the {@link Type}.
+ */
+public enum TypeQuality {
+  /**
+   * {@link Element} was declared with this {@link Type}.
+   */
+  EXACT,
+  /**
+   * {@link Element} was not declared with this {@link Type}, but we can prove that we can treat it
+   * as if it was declared with this {@link Type}.
+   */
+  INFERRED_EXACT,
+  /**
+   * {@link Element} was not declared this {@link Type}, but we have some reasons to think that it
+   * has such {@link Type}, or one of its subtypes.
+   */
+  INFERRED;
+
+  public static TypeQuality of(Type type) {
+    return type.getQuality();
+  }
+
+  public static boolean isInferred(Type type) {
+    return type.getQuality() != EXACT;
+  }
+
+}
diff --git a/compiler/java/com/google/dart/compiler/type/Types.java b/compiler/java/com/google/dart/compiler/type/Types.java
index 3c1d122..d825e85 100644
--- a/compiler/java/com/google/dart/compiler/type/Types.java
+++ b/compiler/java/com/google/dart/compiler/type/Types.java
@@ -43,7 +43,7 @@
  * Utility class for types.
  */
 public class Types {
-  private static Map<Type, Type> inferredTypes = new MapMaker().weakKeys().weakValues().makeMap();
+  private static Map<Type, Map<TypeQuality, Type>> inferredTypes = new MapMaker().weakKeys().makeMap();
   private final CoreTypeProvider typeProvider;
 
   private Types(CoreTypeProvider typeProvider) { // Prevent subclassing.
@@ -71,6 +71,22 @@
     return intersection(ImmutableList.of(t, s));
   }
     
+  public static TypeQuality getIntersectionQuality(Type t, Type s) {
+    return getIntersectionQuality(ImmutableList.of(t, s));
+  }
+  
+  public static TypeQuality getIntersectionQuality(List<Type> types) {
+    Type singleType = null;
+    for (Type type : types) {
+      if (singleType == null) {
+        singleType = type;
+      } else if (singleType != type) {
+        return TypeQuality.INFERRED;
+      }
+    }
+    return TypeQuality.INFERRED_EXACT;
+  }
+    
   public Type intersection(List<Type> types) {
     // exclude 'dynamic' type
     {
@@ -169,7 +185,7 @@
    * @return the {@link InterfaceType} which is union of given ones.
    */
   public InterfaceType unionTypes(List<InterfaceType> types) {
-    return new InterfaceTypeUnion(types);
+    return new InterfaceTypeUnionImplementation(types);
   }
 
   /**
@@ -322,8 +338,19 @@
   }
 
   private boolean isSubtypeOfInterface(Type t, InterfaceType s) {
-    final Type sup = asInstanceOf(t, s.getElement());
+    // Special handling for union.
+    if (t instanceof InterfaceTypeUnion) {
+      InterfaceTypeUnion tUnion = (InterfaceTypeUnion) t;
+      for (InterfaceType unionPart : tUnion.getTypes()) {
+        if (isSubtype(unionPart, s)) {
+          return true;
+        }
+      }
+      return false;
+    }
 
+    // Try to cast "t" to "s".
+    final Type sup = asInstanceOf(t, s.getElement());
     if (TypeKind.of(sup).equals(TypeKind.INTERFACE)) {
       InterfaceType ti = (InterfaceType) sup;
       assert ti.getElement().equals(s.getElement());
@@ -338,7 +365,7 @@
 
   /**
    * Implement the Dart function subtype rule. Unlike the classic arrow rule (return type is
-   * covariant, and paramter types are contravariant), in Dart they must just be assignable.
+   * covariant, and parameter types are contravariant), in Dart they must just be assignable.
    */
   private boolean isSubtypeOfFunction(FunctionType t, FunctionType s) {
     if (s.getKind() == TypeKind.DYNAMIC || t.getKind() == TypeKind.DYNAMIC) {
@@ -664,41 +691,59 @@
   }
 
   /**
-   * @return the wrapper of the given {@link Type} which returns <code>true</code> from
-   *         {@link Type#isInferred()}.
+   * @return the wrapper of the given {@link Type} with {@link TypeQuality#INFERRED}.
    */
   public static Type makeInferred(Type type) {
+    return makeInferred(type, TypeQuality.INFERRED);
+  }
+  
+  /**
+   * @return the wrapper of the given {@link Type} with {@link TypeQuality#INFERRED_EXACT}.
+   */
+  public static Type makeInferredExact(Type type) {
+    return makeInferred(type, TypeQuality.INFERRED_EXACT);
+  }
+
+  /**
+   * @return the wrapper of the given {@link Type} with given {@link TypeQuality}.
+   */
+  public static Type makeInferred(Type type, TypeQuality quality) {
     if (type == null) {
       return null;
     }
-    if (type.isInferred()) {
+    if (type.getQuality().ordinal() > quality.ordinal()) {
       return type;
     }
     Set<Class<?>> interfaceSet = getAllImplementedInterfaces(type.getClass());
     if (!interfaceSet.isEmpty()) {
       Class<?>[] interfaces = (Class[]) interfaceSet.toArray(new Class[interfaceSet.size()]);
-      return makeInferred(type, interfaces);
+      return makeInferred(type, interfaces, quality);
     }
     return type;
   }
 
-  private static Type makeInferred(final Type type, Class<?>[] interfaces) {
-    Type inferred = inferredTypes.get(type);
+  private static Type makeInferred(final Type type, Class<?>[] interfaces, final TypeQuality quality) {
+    Map<TypeQuality, Type> inferredMap = inferredTypes.get(type);
+    if (inferredMap == null) {
+      inferredMap = new MapMaker().weakValues().makeMap();
+      inferredTypes.put(type, inferredMap);
+    }
+    Type inferred = inferredMap.get(quality);
     if (inferred == null) {
       inferred = (Type) Proxy.newProxyInstance(type.getClass().getClassLoader(),
           interfaces, new InvocationHandler() {
             @Override
             @SuppressWarnings("unchecked")
             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-              if (args == null && method.getName().equals("isInferred")) {
-                return true;
+              if (args == null && method.getName().equals("getQuality")) {
+                return quality;
               }
               if (type instanceof FunctionType) {
                 if (args == null && method.getName().equals("getParameterTypes")) {
                   List<Type> originalTypes = (List<Type>) method.invoke(type, args);
                   return Lists.transform(originalTypes, new Function<Type, Type>() {
                     public Type apply(Type input) {
-                      return makeInferred(input);
+                      return makeInferred(input, quality);
                     }
                   });
                 }
@@ -706,7 +751,7 @@
               return method.invoke(type, args);
             }
           });
-      inferredTypes.put(type, inferred);
+      inferredMap.put(quality, inferred);
     }
     return inferred;
   }
diff --git a/compiler/java/com/google/dart/compiler/util/apache/FilenameUtils.java b/compiler/java/com/google/dart/compiler/util/apache/FilenameUtils.java
new file mode 100644
index 0000000..31288d3
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/util/apache/FilenameUtils.java
@@ -0,0 +1,1405 @@
+// 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.
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.dart.compiler.util.apache;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Stack;
+
+/**
+ * General filename and filepath manipulation utilities.
+ * <p>
+ * When dealing with filenames you can hit problems when moving from a Windows
+ * based development machine to a Unix based production machine.
+ * This class aims to help avoid those problems.
+ * <p>
+ * <b>NOTE</b>: You may be able to avoid using this class entirely simply by
+ * using JDK {@link java.io.File File} objects and the two argument constructor
+ * {@link java.io.File#File(java.io.File, java.lang.String) File(File,String)}.
+ * <p>
+ * Most methods on this class are designed to work the same on both Unix and Windows.
+ * Those that don't include 'System', 'Unix' or 'Windows' in their name.
+ * <p>
+ * Most methods recognise both separators (forward and back), and both
+ * sets of prefixes. See the javadoc of each method for details.
+ * <p>
+ * This class defines six components within a filename
+ * (example C:\dev\project\file.txt):
+ * <ul>
+ * <li>the prefix - C:\</li>
+ * <li>the path - dev\project\</li>
+ * <li>the full path - C:\dev\project\</li>
+ * <li>the name - file.txt</li>
+ * <li>the base name - file</li>
+ * <li>the extension - txt</li>
+ * </ul>
+ * Note that this class works best if directory filenames end with a separator.
+ * If you omit the last separator, it is impossible to determine if the filename
+ * corresponds to a file or a directory. As a result, we have chosen to say
+ * it corresponds to a file.
+ * <p>
+ * This class only supports Unix and Windows style names.
+ * Prefixes are matched as follows:
+ * <pre>
+ * Windows:
+ * a\b\c.txt           --> ""          --> relative
+ * \a\b\c.txt          --> "\"         --> current drive absolute
+ * C:a\b\c.txt         --> "C:"        --> drive relative
+ * C:\a\b\c.txt        --> "C:\"       --> absolute
+ * \\server\a\b\c.txt  --> "\\server\" --> UNC
+ *
+ * Unix:
+ * a/b/c.txt           --> ""          --> relative
+ * /a/b/c.txt          --> "/"         --> absolute
+ * ~/a/b/c.txt         --> "~/"        --> current user
+ * ~                   --> "~/"        --> current user (slash added)
+ * ~user/a/b/c.txt     --> "~user/"    --> named user
+ * ~user               --> "~user/"    --> named user (slash added)
+ * </pre>
+ * Both prefix styles are matched always, irrespective of the machine that you are
+ * currently running on.
+ * <p>
+ * Origin of code: Excalibur, Alexandria, Tomcat, Commons-Utils.
+ *
+ * @version $Id: FilenameUtils.java 1307462 2012-03-30 15:13:11Z ggregory $
+ * @since 1.1
+ */
+public class FilenameUtils {
+
+    /**
+     * The extension separator character.
+     * @since 1.4
+     */
+    public static final char EXTENSION_SEPARATOR = '.';
+
+    /**
+     * The extension separator String.
+     * @since 1.4
+     */
+    public static final String EXTENSION_SEPARATOR_STR = Character.toString(EXTENSION_SEPARATOR);
+
+    /**
+     * The Unix separator character.
+     */
+    private static final char UNIX_SEPARATOR = '/';
+
+    /**
+     * The Windows separator character.
+     */
+    private static final char WINDOWS_SEPARATOR = '\\';
+
+    /**
+     * The system separator character.
+     */
+    private static final char SYSTEM_SEPARATOR = File.separatorChar;
+
+    /**
+     * The separator character that is the opposite of the system separator.
+     */
+    private static final char OTHER_SEPARATOR;
+    static {
+        if (isSystemWindows()) {
+            OTHER_SEPARATOR = UNIX_SEPARATOR;
+        } else {
+            OTHER_SEPARATOR = WINDOWS_SEPARATOR;
+        }
+    }
+
+    /**
+     * Instances should NOT be constructed in standard programming.
+     */
+    public FilenameUtils() {
+        super();
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Determines if Windows file system is in use.
+     * 
+     * @return true if the system is Windows
+     */
+    static boolean isSystemWindows() {
+        return SYSTEM_SEPARATOR == WINDOWS_SEPARATOR;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Checks if the character is a separator.
+     * 
+     * @param ch  the character to check
+     * @return true if it is a separator character
+     */
+    private static boolean isSeparator(char ch) {
+        return ch == UNIX_SEPARATOR || ch == WINDOWS_SEPARATOR;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Normalizes a path, removing double and single dot path steps.
+     * <p>
+     * This method normalizes a path to a standard format.
+     * The input may contain separators in either Unix or Windows format.
+     * The output will contain separators in the format of the system.
+     * <p>
+     * A trailing slash will be retained.
+     * A double slash will be merged to a single slash (but UNC names are handled).
+     * A single dot path segment will be removed.
+     * A double dot will cause that path segment and the one before to be removed.
+     * If the double dot has no parent path segment to work with, {@code null}
+     * is returned.
+     * <p>
+     * The output will be the same on both Unix and Windows except
+     * for the separator character.
+     * <pre>
+     * /foo//               -->   /foo/
+     * /foo/./              -->   /foo/
+     * /foo/../bar          -->   /bar
+     * /foo/../bar/         -->   /bar/
+     * /foo/../bar/../baz   -->   /baz
+     * //foo//./bar         -->   /foo/bar
+     * /../                 -->   null
+     * ../foo               -->   null
+     * foo/bar/..           -->   foo/
+     * foo/../../bar        -->   null
+     * foo/../bar           -->   bar
+     * //server/foo/../bar  -->   //server/bar
+     * //server/../bar      -->   null
+     * C:\foo\..\bar        -->   C:\bar
+     * C:\..\bar            -->   null
+     * ~/foo/../bar/        -->   ~/bar/
+     * ~/../bar             -->   null
+     * </pre>
+     * (Note the file separator returned will be correct for Windows/Unix)
+     *
+     * @param filename  the filename to normalize, null returns null
+     * @return the normalized filename, or null if invalid
+     */
+    public static String normalize(String filename) {
+        return doNormalize(filename, SYSTEM_SEPARATOR, true);
+    }
+    /**
+     * Normalizes a path, removing double and single dot path steps.
+     * <p>
+     * This method normalizes a path to a standard format.
+     * The input may contain separators in either Unix or Windows format.
+     * The output will contain separators in the format specified.
+     * <p>
+     * A trailing slash will be retained.
+     * A double slash will be merged to a single slash (but UNC names are handled).
+     * A single dot path segment will be removed.
+     * A double dot will cause that path segment and the one before to be removed.
+     * If the double dot has no parent path segment to work with, {@code null}
+     * is returned.
+     * <p>
+     * The output will be the same on both Unix and Windows except
+     * for the separator character.
+     * <pre>
+     * /foo//               -->   /foo/
+     * /foo/./              -->   /foo/
+     * /foo/../bar          -->   /bar
+     * /foo/../bar/         -->   /bar/
+     * /foo/../bar/../baz   -->   /baz
+     * //foo//./bar         -->   /foo/bar
+     * /../                 -->   null
+     * ../foo               -->   null
+     * foo/bar/..           -->   foo/
+     * foo/../../bar        -->   null
+     * foo/../bar           -->   bar
+     * //server/foo/../bar  -->   //server/bar
+     * //server/../bar      -->   null
+     * C:\foo\..\bar        -->   C:\bar
+     * C:\..\bar            -->   null
+     * ~/foo/../bar/        -->   ~/bar/
+     * ~/../bar             -->   null
+     * </pre>
+     * The output will be the same on both Unix and Windows including
+     * the separator character.
+     *
+     * @param filename  the filename to normalize, null returns null
+     * @param unixSeparator {@code true} if a unix separator should
+     * be used or {@code false} if a windows separator should be used.
+     * @return the normalized filename, or null if invalid
+     * @since 2.0
+     */
+    public static String normalize(String filename, boolean unixSeparator) {
+        char separator = unixSeparator ? UNIX_SEPARATOR : WINDOWS_SEPARATOR;
+        return doNormalize(filename, separator, true);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Normalizes a path, removing double and single dot path steps,
+     * and removing any final directory separator.
+     * <p>
+     * This method normalizes a path to a standard format.
+     * The input may contain separators in either Unix or Windows format.
+     * The output will contain separators in the format of the system.
+     * <p>
+     * A trailing slash will be removed.
+     * A double slash will be merged to a single slash (but UNC names are handled).
+     * A single dot path segment will be removed.
+     * A double dot will cause that path segment and the one before to be removed.
+     * If the double dot has no parent path segment to work with, {@code null}
+     * is returned.
+     * <p>
+     * The output will be the same on both Unix and Windows except
+     * for the separator character.
+     * <pre>
+     * /foo//               -->   /foo
+     * /foo/./              -->   /foo
+     * /foo/../bar          -->   /bar
+     * /foo/../bar/         -->   /bar
+     * /foo/../bar/../baz   -->   /baz
+     * //foo//./bar         -->   /foo/bar
+     * /../                 -->   null
+     * ../foo               -->   null
+     * foo/bar/..           -->   foo
+     * foo/../../bar        -->   null
+     * foo/../bar           -->   bar
+     * //server/foo/../bar  -->   //server/bar
+     * //server/../bar      -->   null
+     * C:\foo\..\bar        -->   C:\bar
+     * C:\..\bar            -->   null
+     * ~/foo/../bar/        -->   ~/bar
+     * ~/../bar             -->   null
+     * </pre>
+     * (Note the file separator returned will be correct for Windows/Unix)
+     *
+     * @param filename  the filename to normalize, null returns null
+     * @return the normalized filename, or null if invalid
+     */
+    public static String normalizeNoEndSeparator(String filename) {
+        return doNormalize(filename, SYSTEM_SEPARATOR, false);
+    }
+
+    /**
+     * Normalizes a path, removing double and single dot path steps,
+     * and removing any final directory separator.
+     * <p>
+     * This method normalizes a path to a standard format.
+     * The input may contain separators in either Unix or Windows format.
+     * The output will contain separators in the format specified.
+     * <p>
+     * A trailing slash will be removed.
+     * A double slash will be merged to a single slash (but UNC names are handled).
+     * A single dot path segment will be removed.
+     * A double dot will cause that path segment and the one before to be removed.
+     * If the double dot has no parent path segment to work with, {@code null}
+     * is returned.
+     * <p>
+     * The output will be the same on both Unix and Windows including
+     * the separator character.
+     * <pre>
+     * /foo//               -->   /foo
+     * /foo/./              -->   /foo
+     * /foo/../bar          -->   /bar
+     * /foo/../bar/         -->   /bar
+     * /foo/../bar/../baz   -->   /baz
+     * //foo//./bar         -->   /foo/bar
+     * /../                 -->   null
+     * ../foo               -->   null
+     * foo/bar/..           -->   foo
+     * foo/../../bar        -->   null
+     * foo/../bar           -->   bar
+     * //server/foo/../bar  -->   //server/bar
+     * //server/../bar      -->   null
+     * C:\foo\..\bar        -->   C:\bar
+     * C:\..\bar            -->   null
+     * ~/foo/../bar/        -->   ~/bar
+     * ~/../bar             -->   null
+     * </pre>
+     *
+     * @param filename  the filename to normalize, null returns null
+     * @param unixSeparator {@code true} if a unix separator should
+     * be used or {@code false} if a windows separtor should be used.
+     * @return the normalized filename, or null if invalid
+     * @since 2.0
+     */
+    public static String normalizeNoEndSeparator(String filename, boolean unixSeparator) {
+         char separator = unixSeparator ? UNIX_SEPARATOR : WINDOWS_SEPARATOR;
+        return doNormalize(filename, separator, false);
+    }
+
+    /**
+     * Internal method to perform the normalization.
+     *
+     * @param filename  the filename
+     * @param separator The separator character to use
+     * @param keepSeparator  true to keep the final separator
+     * @return the normalized filename
+     */
+    private static String doNormalize(String filename, char separator, boolean keepSeparator) {
+        if (filename == null) {
+            return null;
+        }
+        int size = filename.length();
+        if (size == 0) {
+            return filename;
+        }
+        int prefix = getPrefixLength(filename);
+        if (prefix < 0) {
+            return null;
+        }
+        
+        char[] array = new char[size + 2];  // +1 for possible extra slash, +2 for arraycopy
+        filename.getChars(0, filename.length(), array, 0);
+        
+        // fix separators throughout
+        char otherSeparator = separator == SYSTEM_SEPARATOR ? OTHER_SEPARATOR : SYSTEM_SEPARATOR;
+        for (int i = 0; i < array.length; i++) {
+            if (array[i] == otherSeparator) {
+                array[i] = separator;
+            }
+        }
+        
+        // add extra separator on the end to simplify code below
+        boolean lastIsDirectory = true;
+        if (array[size - 1] != separator) {
+            array[size++] = separator;
+            lastIsDirectory = false;
+        }
+        
+        // adjoining slashes
+        for (int i = prefix + 1; i < size; i++) {
+            if (array[i] == separator && array[i - 1] == separator) {
+                System.arraycopy(array, i, array, i - 1, size - i);
+                size--;
+                i--;
+            }
+        }
+        
+        // dot slash
+        for (int i = prefix + 1; i < size; i++) {
+            if (array[i] == separator && array[i - 1] == '.' &&
+                    (i == prefix + 1 || array[i - 2] == separator)) {
+                if (i == size - 1) {
+                    lastIsDirectory = true;
+                }
+                System.arraycopy(array, i + 1, array, i - 1, size - i);
+                size -=2;
+                i--;
+            }
+        }
+        
+        // double dot slash
+        outer:
+        for (int i = prefix + 2; i < size; i++) {
+            if (array[i] == separator && array[i - 1] == '.' && array[i - 2] == '.' &&
+                    (i == prefix + 2 || array[i - 3] == separator)) {
+                if (i == prefix + 2) {
+                    return null;
+                }
+                if (i == size - 1) {
+                    lastIsDirectory = true;
+                }
+                int j;
+                for (j = i - 4 ; j >= prefix; j--) {
+                    if (array[j] == separator) {
+                        // remove b/../ from a/b/../c
+                        System.arraycopy(array, i + 1, array, j + 1, size - i);
+                        size -= i - j;
+                        i = j + 1;
+                        continue outer;
+                    }
+                }
+                // remove a/../ from a/../c
+                System.arraycopy(array, i + 1, array, prefix, size - i);
+                size -= i + 1 - prefix;
+                i = prefix + 1;
+            }
+        }
+        
+        if (size <= 0) {  // should never be less than 0
+            return "";
+        }
+        if (size <= prefix) {  // should never be less than prefix
+            return new String(array, 0, size);
+        }
+        if (lastIsDirectory && keepSeparator) {
+            return new String(array, 0, size);  // keep trailing separator
+        }
+        return new String(array, 0, size - 1);  // lose trailing separator
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Concatenates a filename to a base path using normal command line style rules.
+     * <p>
+     * The effect is equivalent to resultant directory after changing
+     * directory to the first argument, followed by changing directory to
+     * the second argument.
+     * <p>
+     * The first argument is the base path, the second is the path to concatenate.
+     * The returned path is always normalized via {@link #normalize(String)},
+     * thus <code>..</code> is handled.
+     * <p>
+     * If <code>pathToAdd</code> is absolute (has an absolute prefix), then
+     * it will be normalized and returned.
+     * Otherwise, the paths will be joined, normalized and returned.
+     * <p>
+     * The output will be the same on both Unix and Windows except
+     * for the separator character.
+     * <pre>
+     * /foo/ + bar          -->   /foo/bar
+     * /foo + bar           -->   /foo/bar
+     * /foo + /bar          -->   /bar
+     * /foo + C:/bar        -->   C:/bar
+     * /foo + C:bar         -->   C:bar (*)
+     * /foo/a/ + ../bar     -->   foo/bar
+     * /foo/ + ../../bar    -->   null
+     * /foo/ + /bar         -->   /bar
+     * /foo/.. + /bar       -->   /bar
+     * /foo + bar/c.txt     -->   /foo/bar/c.txt
+     * /foo/c.txt + bar     -->   /foo/c.txt/bar (!)
+     * </pre>
+     * (*) Note that the Windows relative drive prefix is unreliable when
+     * used with this method.
+     * (!) Note that the first parameter must be a path. If it ends with a name, then
+     * the name will be built into the concatenated path. If this might be a problem,
+     * use {@link #getFullPath(String)} on the base path argument.
+     *
+     * @param basePath  the base path to attach to, always treated as a path
+     * @param fullFilenameToAdd  the filename (or path) to attach to the base
+     * @return the concatenated path, or null if invalid
+     */
+    public static String concat(String basePath, String fullFilenameToAdd) {
+        int prefix = getPrefixLength(fullFilenameToAdd);
+        if (prefix < 0) {
+            return null;
+        }
+        if (prefix > 0) {
+            return normalize(fullFilenameToAdd);
+        }
+        if (basePath == null) {
+            return null;
+        }
+        int len = basePath.length();
+        if (len == 0) {
+            return normalize(fullFilenameToAdd);
+        }
+        char ch = basePath.charAt(len - 1);
+        if (isSeparator(ch)) {
+            return normalize(basePath + fullFilenameToAdd);
+        } else {
+            return normalize(basePath + '/' + fullFilenameToAdd);
+        }
+    }
+
+    /**
+     * Determines whether the {@code parent} directory contains the {@code child} element (a file or directory).
+     * <p>
+     * The files names are expected to be normalized.
+     * </p>
+     * 
+     * Edge cases:
+     * <ul>
+     * <li>A {@code directory} must not be null: if null, throw IllegalArgumentException</li>
+     * <li>A directory does not contain itself: return false</li>
+     * <li>A null child file is not contained in any parent: return false</li>
+     * </ul>
+     * 
+     * @param canonicalParent
+     *            the file to consider as the parent.
+     * @param canonicalChild
+     *            the file to consider as the child.
+     * @return true is the candidate leaf is under by the specified composite. False otherwise.
+     * @throws IOException
+     *             if an IO error occurs while checking the files.
+     * @since 2.2
+     * @see FileUtils#directoryContains(File, File)
+     */
+    public static boolean directoryContains(final String canonicalParent, final String canonicalChild)
+            throws IOException {
+
+        // Fail fast against NullPointerException
+        if (canonicalParent == null) {
+            throw new IllegalArgumentException("Directory must not be null");
+        }
+
+        if (canonicalChild == null) {
+            return false;
+        }
+
+        if (IOCase.SYSTEM.checkEquals(canonicalParent, canonicalChild)) {
+            return false;
+        }
+
+        return IOCase.SYSTEM.checkStartsWith(canonicalChild, canonicalParent);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Converts all separators to the Unix separator of forward slash.
+     * 
+     * @param path  the path to be changed, null ignored
+     * @return the updated path
+     */
+    public static String separatorsToUnix(String path) {
+        if (path == null || path.indexOf(WINDOWS_SEPARATOR) == -1) {
+            return path;
+        }
+        return path.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
+    }
+
+    /**
+     * Converts all separators to the Windows separator of backslash.
+     * 
+     * @param path  the path to be changed, null ignored
+     * @return the updated path
+     */
+    public static String separatorsToWindows(String path) {
+        if (path == null || path.indexOf(UNIX_SEPARATOR) == -1) {
+            return path;
+        }
+        return path.replace(UNIX_SEPARATOR, WINDOWS_SEPARATOR);
+    }
+
+    /**
+     * Converts all separators to the system separator.
+     * 
+     * @param path  the path to be changed, null ignored
+     * @return the updated path
+     */
+    public static String separatorsToSystem(String path) {
+        if (path == null) {
+            return null;
+        }
+        if (isSystemWindows()) {
+            return separatorsToWindows(path);
+        } else {
+            return separatorsToUnix(path);
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns the length of the filename prefix, such as <code>C:/</code> or <code>~/</code>.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * <p>
+     * The prefix length includes the first slash in the full filename
+     * if applicable. Thus, it is possible that the length returned is greater
+     * than the length of the input string.
+     * <pre>
+     * Windows:
+     * a\b\c.txt           --> ""          --> relative
+     * \a\b\c.txt          --> "\"         --> current drive absolute
+     * C:a\b\c.txt         --> "C:"        --> drive relative
+     * C:\a\b\c.txt        --> "C:\"       --> absolute
+     * \\server\a\b\c.txt  --> "\\server\" --> UNC
+     *
+     * Unix:
+     * a/b/c.txt           --> ""          --> relative
+     * /a/b/c.txt          --> "/"         --> absolute
+     * ~/a/b/c.txt         --> "~/"        --> current user
+     * ~                   --> "~/"        --> current user (slash added)
+     * ~user/a/b/c.txt     --> "~user/"    --> named user
+     * ~user               --> "~user/"    --> named user (slash added)
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * ie. both Unix and Windows prefixes are matched regardless.
+     *
+     * @param filename  the filename to find the prefix in, null returns -1
+     * @return the length of the prefix, -1 if invalid or null
+     */
+    public static int getPrefixLength(String filename) {
+        if (filename == null) {
+            return -1;
+        }
+        int len = filename.length();
+        if (len == 0) {
+            return 0;
+        }
+        char ch0 = filename.charAt(0);
+        if (ch0 == ':') {
+            return -1;
+        }
+        if (len == 1) {
+            if (ch0 == '~') {
+                return 2;  // return a length greater than the input
+            }
+            return isSeparator(ch0) ? 1 : 0;
+        } else {
+            if (ch0 == '~') {
+                int posUnix = filename.indexOf(UNIX_SEPARATOR, 1);
+                int posWin = filename.indexOf(WINDOWS_SEPARATOR, 1);
+                if (posUnix == -1 && posWin == -1) {
+                    return len + 1;  // return a length greater than the input
+                }
+                posUnix = posUnix == -1 ? posWin : posUnix;
+                posWin = posWin == -1 ? posUnix : posWin;
+                return Math.min(posUnix, posWin) + 1;
+            }
+            char ch1 = filename.charAt(1);
+            if (ch1 == ':') {
+                ch0 = Character.toUpperCase(ch0);
+                if (ch0 >= 'A' && ch0 <= 'Z') {
+                    if (len == 2 || isSeparator(filename.charAt(2)) == false) {
+                        return 2;
+                    }
+                    return 3;
+                }
+                return -1;
+                
+            } else if (isSeparator(ch0) && isSeparator(ch1)) {
+                int posUnix = filename.indexOf(UNIX_SEPARATOR, 2);
+                int posWin = filename.indexOf(WINDOWS_SEPARATOR, 2);
+                if (posUnix == -1 && posWin == -1 || posUnix == 2 || posWin == 2) {
+                    return -1;
+                }
+                posUnix = posUnix == -1 ? posWin : posUnix;
+                posWin = posWin == -1 ? posUnix : posWin;
+                return Math.min(posUnix, posWin) + 1;
+            } else {
+                return isSeparator(ch0) ? 1 : 0;
+            }
+        }
+    }
+
+    /**
+     * Returns the index of the last directory separator character.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The position of the last forward or backslash is returned.
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * 
+     * @param filename  the filename to find the last path separator in, null returns -1
+     * @return the index of the last separator character, or -1 if there
+     * is no such character
+     */
+    public static int indexOfLastSeparator(String filename) {
+        if (filename == null) {
+            return -1;
+        }
+        int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR);
+        int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR);
+        return Math.max(lastUnixPos, lastWindowsPos);
+    }
+
+    /**
+     * Returns the index of the last extension separator character, which is a dot.
+     * <p>
+     * This method also checks that there is no directory separator after the last dot.
+     * To do this it uses {@link #indexOfLastSeparator(String)} which will
+     * handle a file in either Unix or Windows format.
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * 
+     * @param filename  the filename to find the last path separator in, null returns -1
+     * @return the index of the last separator character, or -1 if there
+     * is no such character
+     */
+    public static int indexOfExtension(String filename) {
+        if (filename == null) {
+            return -1;
+        }
+        int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
+        int lastSeparator = indexOfLastSeparator(filename);
+        return lastSeparator > extensionPos ? -1 : extensionPos;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Gets the prefix from a full filename, such as <code>C:/</code>
+     * or <code>~/</code>.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The prefix includes the first slash in the full filename where applicable.
+     * <pre>
+     * Windows:
+     * a\b\c.txt           --> ""          --> relative
+     * \a\b\c.txt          --> "\"         --> current drive absolute
+     * C:a\b\c.txt         --> "C:"        --> drive relative
+     * C:\a\b\c.txt        --> "C:\"       --> absolute
+     * \\server\a\b\c.txt  --> "\\server\" --> UNC
+     *
+     * Unix:
+     * a/b/c.txt           --> ""          --> relative
+     * /a/b/c.txt          --> "/"         --> absolute
+     * ~/a/b/c.txt         --> "~/"        --> current user
+     * ~                   --> "~/"        --> current user (slash added)
+     * ~user/a/b/c.txt     --> "~user/"    --> named user
+     * ~user               --> "~user/"    --> named user (slash added)
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * ie. both Unix and Windows prefixes are matched regardless.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the prefix of the file, null if invalid
+     */
+    public static String getPrefix(String filename) {
+        if (filename == null) {
+            return null;
+        }
+        int len = getPrefixLength(filename);
+        if (len < 0) {
+            return null;
+        }
+        if (len > filename.length()) {
+            return filename + UNIX_SEPARATOR;  // we know this only happens for unix
+        }
+        return filename.substring(0, len);
+    }
+
+    /**
+     * Gets the path from a full filename, which excludes the prefix.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The method is entirely text based, and returns the text before and
+     * including the last forward or backslash.
+     * <pre>
+     * C:\a\b\c.txt --> a\b\
+     * ~/a/b/c.txt  --> a/b/
+     * a.txt        --> ""
+     * a/b/c        --> a/b/
+     * a/b/c/       --> a/b/c/
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * <p>
+     * This method drops the prefix from the result.
+     * See {@link #getFullPath(String)} for the method that retains the prefix.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the path of the file, an empty string if none exists, null if invalid
+     */
+    public static String getPath(String filename) {
+        return doGetPath(filename, 1);
+    }
+
+    /**
+     * Gets the path from a full filename, which excludes the prefix, and
+     * also excluding the final directory separator.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The method is entirely text based, and returns the text before the
+     * last forward or backslash.
+     * <pre>
+     * C:\a\b\c.txt --> a\b
+     * ~/a/b/c.txt  --> a/b
+     * a.txt        --> ""
+     * a/b/c        --> a/b
+     * a/b/c/       --> a/b/c
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     * <p>
+     * This method drops the prefix from the result.
+     * See {@link #getFullPathNoEndSeparator(String)} for the method that retains the prefix.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the path of the file, an empty string if none exists, null if invalid
+     */
+    public static String getPathNoEndSeparator(String filename) {
+        return doGetPath(filename, 0);
+    }
+
+    /**
+     * Does the work of getting the path.
+     * 
+     * @param filename  the filename
+     * @param separatorAdd  0 to omit the end separator, 1 to return it
+     * @return the path
+     */
+    private static String doGetPath(String filename, int separatorAdd) {
+        if (filename == null) {
+            return null;
+        }
+        int prefix = getPrefixLength(filename);
+        if (prefix < 0) {
+            return null;
+        }
+        int index = indexOfLastSeparator(filename);
+        int endIndex = index+separatorAdd;
+        if (prefix >= filename.length() || index < 0 || prefix >= endIndex) {
+            return "";
+        }
+        return filename.substring(prefix, endIndex);
+    }
+
+    /**
+     * Gets the full path from a full filename, which is the prefix + path.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The method is entirely text based, and returns the text before and
+     * including the last forward or backslash.
+     * <pre>
+     * C:\a\b\c.txt --> C:\a\b\
+     * ~/a/b/c.txt  --> ~/a/b/
+     * a.txt        --> ""
+     * a/b/c        --> a/b/
+     * a/b/c/       --> a/b/c/
+     * C:           --> C:
+     * C:\          --> C:\
+     * ~            --> ~/
+     * ~/           --> ~/
+     * ~user        --> ~user/
+     * ~user/       --> ~user/
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the path of the file, an empty string if none exists, null if invalid
+     */
+    public static String getFullPath(String filename) {
+        return doGetFullPath(filename, true);
+    }
+
+    /**
+     * Gets the full path from a full filename, which is the prefix + path,
+     * and also excluding the final directory separator.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The method is entirely text based, and returns the text before the
+     * last forward or backslash.
+     * <pre>
+     * C:\a\b\c.txt --> C:\a\b
+     * ~/a/b/c.txt  --> ~/a/b
+     * a.txt        --> ""
+     * a/b/c        --> a/b
+     * a/b/c/       --> a/b/c
+     * C:           --> C:
+     * C:\          --> C:\
+     * ~            --> ~
+     * ~/           --> ~
+     * ~user        --> ~user
+     * ~user/       --> ~user
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the path of the file, an empty string if none exists, null if invalid
+     */
+    public static String getFullPathNoEndSeparator(String filename) {
+        return doGetFullPath(filename, false);
+    }
+
+    /**
+     * Does the work of getting the path.
+     * 
+     * @param filename  the filename
+     * @param includeSeparator  true to include the end separator
+     * @return the path
+     */
+    private static String doGetFullPath(String filename, boolean includeSeparator) {
+        if (filename == null) {
+            return null;
+        }
+        int prefix = getPrefixLength(filename);
+        if (prefix < 0) {
+            return null;
+        }
+        if (prefix >= filename.length()) {
+            if (includeSeparator) {
+                return getPrefix(filename);  // add end slash if necessary
+            } else {
+                return filename;
+            }
+        }
+        int index = indexOfLastSeparator(filename);
+        if (index < 0) {
+            return filename.substring(0, prefix);
+        }
+        int end = index + (includeSeparator ?  1 : 0);
+        if (end == 0) {
+            end++;
+        }
+        return filename.substring(0, end);
+    }
+
+    /**
+     * Gets the name minus the path from a full filename.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The text after the last forward or backslash is returned.
+     * <pre>
+     * a/b/c.txt --> c.txt
+     * a.txt     --> a.txt
+     * a/b/c     --> c
+     * a/b/c/    --> ""
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the name of the file without the path, or an empty string if none exists
+     */
+    public static String getName(String filename) {
+        if (filename == null) {
+            return null;
+        }
+        int index = indexOfLastSeparator(filename);
+        return filename.substring(index + 1);
+    }
+
+    /**
+     * Gets the base name, minus the full path and extension, from a full filename.
+     * <p>
+     * This method will handle a file in either Unix or Windows format.
+     * The text after the last forward or backslash and before the last dot is returned.
+     * <pre>
+     * a/b/c.txt --> c
+     * a.txt     --> a
+     * a/b/c     --> c
+     * a/b/c/    --> ""
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the name of the file without the path, or an empty string if none exists
+     */
+    public static String getBaseName(String filename) {
+        return removeExtension(getName(filename));
+    }
+
+    /**
+     * Gets the extension of a filename.
+     * <p>
+     * This method returns the textual part of the filename after the last dot.
+     * There must be no directory separator after the dot.
+     * <pre>
+     * foo.txt      --> "txt"
+     * a/b/c.jpg    --> "jpg"
+     * a/b.txt/c    --> ""
+     * a/b/c        --> ""
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename the filename to retrieve the extension of.
+     * @return the extension of the file or an empty string if none exists or {@code null}
+     * if the filename is {@code null}.
+     */
+    public static String getExtension(String filename) {
+        if (filename == null) {
+            return null;
+        }
+        int index = indexOfExtension(filename);
+        if (index == -1) {
+            return "";
+        } else {
+            return filename.substring(index + 1);
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Removes the extension from a filename.
+     * <p>
+     * This method returns the textual part of the filename before the last dot.
+     * There must be no directory separator after the dot.
+     * <pre>
+     * foo.txt    --> foo
+     * a\b\c.jpg  --> a\b\c
+     * a\b\c      --> a\b\c
+     * a.b\c      --> a.b\c
+     * </pre>
+     * <p>
+     * The output will be the same irrespective of the machine that the code is running on.
+     *
+     * @param filename  the filename to query, null returns null
+     * @return the filename minus the extension
+     */
+    public static String removeExtension(String filename) {
+        if (filename == null) {
+            return null;
+        }
+        int index = indexOfExtension(filename);
+        if (index == -1) {
+            return filename;
+        } else {
+            return filename.substring(0, index);
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Checks whether two filenames are equal exactly.
+     * <p>
+     * No processing is performed on the filenames other than comparison,
+     * thus this is merely a null-safe case-sensitive equals.
+     *
+     * @param filename1  the first filename to query, may be null
+     * @param filename2  the second filename to query, may be null
+     * @return true if the filenames are equal, null equals null
+     * @see IOCase#SENSITIVE
+     */
+    public static boolean equals(String filename1, String filename2) {
+        return equals(filename1, filename2, false, IOCase.SENSITIVE);
+    }
+
+    /**
+     * Checks whether two filenames are equal using the case rules of the system.
+     * <p>
+     * No processing is performed on the filenames other than comparison.
+     * The check is case-sensitive on Unix and case-insensitive on Windows.
+     *
+     * @param filename1  the first filename to query, may be null
+     * @param filename2  the second filename to query, may be null
+     * @return true if the filenames are equal, null equals null
+     * @see IOCase#SYSTEM
+     */
+    public static boolean equalsOnSystem(String filename1, String filename2) {
+        return equals(filename1, filename2, false, IOCase.SYSTEM);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Checks whether two filenames are equal after both have been normalized.
+     * <p>
+     * Both filenames are first passed to {@link #normalize(String)}.
+     * The check is then performed in a case-sensitive manner.
+     *
+     * @param filename1  the first filename to query, may be null
+     * @param filename2  the second filename to query, may be null
+     * @return true if the filenames are equal, null equals null
+     * @see IOCase#SENSITIVE
+     */
+    public static boolean equalsNormalized(String filename1, String filename2) {
+        return equals(filename1, filename2, true, IOCase.SENSITIVE);
+    }
+
+    /**
+     * Checks whether two filenames are equal after both have been normalized
+     * and using the case rules of the system.
+     * <p>
+     * Both filenames are first passed to {@link #normalize(String)}.
+     * The check is then performed case-sensitive on Unix and
+     * case-insensitive on Windows.
+     *
+     * @param filename1  the first filename to query, may be null
+     * @param filename2  the second filename to query, may be null
+     * @return true if the filenames are equal, null equals null
+     * @see IOCase#SYSTEM
+     */
+    public static boolean equalsNormalizedOnSystem(String filename1, String filename2) {
+        return equals(filename1, filename2, true, IOCase.SYSTEM);
+    }
+
+    /**
+     * Checks whether two filenames are equal, optionally normalizing and providing
+     * control over the case-sensitivity.
+     *
+     * @param filename1  the first filename to query, may be null
+     * @param filename2  the second filename to query, may be null
+     * @param normalized  whether to normalize the filenames
+     * @param caseSensitivity  what case sensitivity rule to use, null means case-sensitive
+     * @return true if the filenames are equal, null equals null
+     * @since 1.3
+     */
+    public static boolean equals(
+            String filename1, String filename2,
+            boolean normalized, IOCase caseSensitivity) {
+        
+        if (filename1 == null || filename2 == null) {
+            return filename1 == null && filename2 == null;
+        }
+        if (normalized) {
+            filename1 = normalize(filename1);
+            filename2 = normalize(filename2);
+            if (filename1 == null || filename2 == null) {
+                throw new NullPointerException(
+                    "Error normalizing one or both of the file names");
+            }
+        }
+        if (caseSensitivity == null) {
+            caseSensitivity = IOCase.SENSITIVE;
+        }
+        return caseSensitivity.checkEquals(filename1, filename2);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Checks whether the extension of the filename is that specified.
+     * <p>
+     * This method obtains the extension as the textual part of the filename
+     * after the last dot. There must be no directory separator after the dot.
+     * The extension check is case-sensitive on all platforms.
+     *
+     * @param filename  the filename to query, null returns false
+     * @param extension  the extension to check for, null or empty checks for no extension
+     * @return true if the filename has the specified extension
+     */
+    public static boolean isExtension(String filename, String extension) {
+        if (filename == null) {
+            return false;
+        }
+        if (extension == null || extension.length() == 0) {
+            return indexOfExtension(filename) == -1;
+        }
+        String fileExt = getExtension(filename);
+        return fileExt.equals(extension);
+    }
+
+    /**
+     * Checks whether the extension of the filename is one of those specified.
+     * <p>
+     * This method obtains the extension as the textual part of the filename
+     * after the last dot. There must be no directory separator after the dot.
+     * The extension check is case-sensitive on all platforms.
+     *
+     * @param filename  the filename to query, null returns false
+     * @param extensions  the extensions to check for, null checks for no extension
+     * @return true if the filename is one of the extensions
+     */
+    public static boolean isExtension(String filename, String[] extensions) {
+        if (filename == null) {
+            return false;
+        }
+        if (extensions == null || extensions.length == 0) {
+            return indexOfExtension(filename) == -1;
+        }
+        String fileExt = getExtension(filename);
+        for (String extension : extensions) {
+            if (fileExt.equals(extension)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Checks whether the extension of the filename is one of those specified.
+     * <p>
+     * This method obtains the extension as the textual part of the filename
+     * after the last dot. There must be no directory separator after the dot.
+     * The extension check is case-sensitive on all platforms.
+     *
+     * @param filename  the filename to query, null returns false
+     * @param extensions  the extensions to check for, null checks for no extension
+     * @return true if the filename is one of the extensions
+     */
+    public static boolean isExtension(String filename, Collection<String> extensions) {
+        if (filename == null) {
+            return false;
+        }
+        if (extensions == null || extensions.isEmpty()) {
+            return indexOfExtension(filename) == -1;
+        }
+        String fileExt = getExtension(filename);
+        for (String extension : extensions) {
+            if (fileExt.equals(extension)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Checks a filename to see if it matches the specified wildcard matcher,
+     * always testing case-sensitive.
+     * <p>
+     * The wildcard matcher uses the characters '?' and '*' to represent a
+     * single or multiple (zero or more) wildcard characters.
+     * This is the same as often found on Dos/Unix command lines.
+     * The check is case-sensitive always.
+     * <pre>
+     * wildcardMatch("c.txt", "*.txt")      --> true
+     * wildcardMatch("c.txt", "*.jpg")      --> false
+     * wildcardMatch("a/b/c.txt", "a/b/*")  --> true
+     * wildcardMatch("c.txt", "*.???")      --> true
+     * wildcardMatch("c.txt", "*.????")     --> false
+     * </pre>
+     * N.B. the sequence "*?" does not work properly at present in match strings.
+     * 
+     * @param filename  the filename to match on
+     * @param wildcardMatcher  the wildcard string to match against
+     * @return true if the filename matches the wilcard string
+     * @see IOCase#SENSITIVE
+     */
+    public static boolean wildcardMatch(String filename, String wildcardMatcher) {
+        return wildcardMatch(filename, wildcardMatcher, IOCase.SENSITIVE);
+    }
+
+    /**
+     * Checks a filename to see if it matches the specified wildcard matcher
+     * using the case rules of the system.
+     * <p>
+     * The wildcard matcher uses the characters '?' and '*' to represent a
+     * single or multiple (zero or more) wildcard characters.
+     * This is the same as often found on Dos/Unix command lines.
+     * The check is case-sensitive on Unix and case-insensitive on Windows.
+     * <pre>
+     * wildcardMatch("c.txt", "*.txt")      --> true
+     * wildcardMatch("c.txt", "*.jpg")      --> false
+     * wildcardMatch("a/b/c.txt", "a/b/*")  --> true
+     * wildcardMatch("c.txt", "*.???")      --> true
+     * wildcardMatch("c.txt", "*.????")     --> false
+     * </pre>
+     * N.B. the sequence "*?" does not work properly at present in match strings.
+     * 
+     * @param filename  the filename to match on
+     * @param wildcardMatcher  the wildcard string to match against
+     * @return true if the filename matches the wilcard string
+     * @see IOCase#SYSTEM
+     */
+    public static boolean wildcardMatchOnSystem(String filename, String wildcardMatcher) {
+        return wildcardMatch(filename, wildcardMatcher, IOCase.SYSTEM);
+    }
+
+    /**
+     * Checks a filename to see if it matches the specified wildcard matcher
+     * allowing control over case-sensitivity.
+     * <p>
+     * The wildcard matcher uses the characters '?' and '*' to represent a
+     * single or multiple (zero or more) wildcard characters.
+     * N.B. the sequence "*?" does not work properly at present in match strings.
+     * 
+     * @param filename  the filename to match on
+     * @param wildcardMatcher  the wildcard string to match against
+     * @param caseSensitivity  what case sensitivity rule to use, null means case-sensitive
+     * @return true if the filename matches the wilcard string
+     * @since 1.3
+     */
+    public static boolean wildcardMatch(String filename, String wildcardMatcher, IOCase caseSensitivity) {
+        if (filename == null && wildcardMatcher == null) {
+            return true;
+        }
+        if (filename == null || wildcardMatcher == null) {
+            return false;
+        }
+        if (caseSensitivity == null) {
+            caseSensitivity = IOCase.SENSITIVE;
+        }
+        String[] wcs = splitOnTokens(wildcardMatcher);
+        boolean anyChars = false;
+        int textIdx = 0;
+        int wcsIdx = 0;
+        Stack<int[]> backtrack = new Stack<int[]>();
+        
+        // loop around a backtrack stack, to handle complex * matching
+        do {
+            if (backtrack.size() > 0) {
+                int[] array = backtrack.pop();
+                wcsIdx = array[0];
+                textIdx = array[1];
+                anyChars = true;
+            }
+            
+            // loop whilst tokens and text left to process
+            while (wcsIdx < wcs.length) {
+      
+                if (wcs[wcsIdx].equals("?")) {
+                    // ? so move to next text char
+                    textIdx++;
+                    if (textIdx > filename.length()) {
+                        break;
+                    }
+                    anyChars = false;
+                    
+                } else if (wcs[wcsIdx].equals("*")) {
+                    // set any chars status
+                    anyChars = true;
+                    if (wcsIdx == wcs.length - 1) {
+                        textIdx = filename.length();
+                    }
+                    
+                } else {
+                    // matching text token
+                    if (anyChars) {
+                        // any chars then try to locate text token
+                        textIdx = caseSensitivity.checkIndexOf(filename, textIdx, wcs[wcsIdx]);
+                        if (textIdx == -1) {
+                            // token not found
+                            break;
+                        }
+                        int repeat = caseSensitivity.checkIndexOf(filename, textIdx + 1, wcs[wcsIdx]);
+                        if (repeat >= 0) {
+                            backtrack.push(new int[] {wcsIdx, repeat});
+                        }
+                    } else {
+                        // matching from current position
+                        if (!caseSensitivity.checkRegionMatches(filename, textIdx, wcs[wcsIdx])) {
+                            // couldnt match token
+                            break;
+                        }
+                    }
+      
+                    // matched text token, move text index to end of matched token
+                    textIdx += wcs[wcsIdx].length();
+                    anyChars = false;
+                }
+      
+                wcsIdx++;
+            }
+            
+            // full match
+            if (wcsIdx == wcs.length && textIdx == filename.length()) {
+                return true;
+            }
+            
+        } while (backtrack.size() > 0);
+  
+        return false;
+    }
+
+    /**
+     * Splits a string into a number of tokens.
+     * The text is split by '?' and '*'.
+     * Where multiple '*' occur consecutively they are collapsed into a single '*'.
+     * 
+     * @param text  the text to split
+     * @return the array of tokens, never null
+     */
+    static String[] splitOnTokens(String text) {
+        // used by wildcardMatch
+        // package level so a unit test may run on this
+        
+        if (text.indexOf('?') == -1 && text.indexOf('*') == -1) {
+            return new String[] { text };
+        }
+
+        char[] array = text.toCharArray();
+        ArrayList<String> list = new ArrayList<String>();
+        StringBuilder buffer = new StringBuilder();
+        for (int i = 0; i < array.length; i++) {
+            if (array[i] == '?' || array[i] == '*') {
+                if (buffer.length() != 0) {
+                    list.add(buffer.toString());
+                    buffer.setLength(0);
+                }
+                if (array[i] == '?') {
+                    list.add("?");
+                } else if (list.isEmpty() ||
+                        i > 0 && list.get(list.size() - 1).equals("*") == false) {
+                    list.add("*");
+                }
+            } else {
+                buffer.append(array[i]);
+            }
+        }
+        if (buffer.length() != 0) {
+            list.add(buffer.toString());
+        }
+
+        return list.toArray( new String[ list.size() ] );
+    }
+
+}
diff --git a/compiler/java/com/google/dart/compiler/util/apache/IOCase.java b/compiler/java/com/google/dart/compiler/util/apache/IOCase.java
new file mode 100644
index 0000000..f635bed
--- /dev/null
+++ b/compiler/java/com/google/dart/compiler/util/apache/IOCase.java
@@ -0,0 +1,260 @@
+// 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.
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.dart.compiler.util.apache;
+
+import java.io.Serializable;
+
+/**
+ * Enumeration of IO case sensitivity.
+ * <p>
+ * Different filing systems have different rules for case-sensitivity.
+ * Windows is case-insensitive, Unix is case-sensitive.
+ * <p>
+ * This class captures that difference, providing an enumeration to
+ * control how filename comparisons should be performed. It also provides
+ * methods that use the enumeration to perform comparisons.
+ * <p>
+ * Wherever possible, you should use the <code>check</code> methods in this
+ * class to compare filenames.
+ *
+ * @version $Id: IOCase.java 1307459 2012-03-30 15:11:44Z ggregory $
+ * @since 1.3
+ */
+public final class IOCase implements Serializable {
+
+    /**
+     * The constant for case sensitive regardless of operating system.
+     */
+    public static final IOCase SENSITIVE = new IOCase("Sensitive", true);
+    
+    /**
+     * The constant for case insensitive regardless of operating system.
+     */
+    public static final IOCase INSENSITIVE = new IOCase("Insensitive", false);
+    
+    /**
+     * The constant for case sensitivity determined by the current operating system.
+     * Windows is case-insensitive when comparing filenames, Unix is case-sensitive.
+     * <p>
+     * <strong>Note:</strong> This only caters for Windows and Unix. Other operating
+     * systems (e.g. OSX and OpenVMS) are treated as case sensitive if they use the
+     * Unix file separator and case-insensitive if they use the Windows file separator
+     * (see {@link java.io.File#separatorChar}).
+     * <p>
+     * If you derialize this constant of Windows, and deserialize on Unix, or vice
+     * versa, then the value of the case-sensitivity flag will change.
+     */
+    public static final IOCase SYSTEM = new IOCase("System", !FilenameUtils.isSystemWindows());
+
+    /** Serialization version. */
+    private static final long serialVersionUID = -6343169151696340687L;
+
+    /** The enumeration name. */
+    private final String name;
+    
+    /** The sensitivity flag. */
+    private final transient boolean sensitive;
+
+    //-----------------------------------------------------------------------
+    /**
+     * Factory method to create an IOCase from a name.
+     * 
+     * @param name  the name to find
+     * @return the IOCase object
+     * @throws IllegalArgumentException if the name is invalid
+     */
+    public static IOCase forName(String name) {
+        if (IOCase.SENSITIVE.name.equals(name)){
+            return IOCase.SENSITIVE;
+        }
+        if (IOCase.INSENSITIVE.name.equals(name)){
+            return IOCase.INSENSITIVE;
+        }
+        if (IOCase.SYSTEM.name.equals(name)){
+            return IOCase.SYSTEM;
+        }
+        throw new IllegalArgumentException("Invalid IOCase name: " + name);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Private constructor.
+     * 
+     * @param name  the name
+     * @param sensitive  the sensitivity
+     */
+    private IOCase(String name, boolean sensitive) {
+        this.name = name;
+        this.sensitive = sensitive;
+    }
+
+    /**
+     * Replaces the enumeration from the stream with a real one.
+     * This ensures that the correct flag is set for SYSTEM.
+     * 
+     * @return the resolved object
+     */
+    private Object readResolve() {
+        return forName(name);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Gets the name of the constant.
+     * 
+     * @return the name of the constant
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Does the object represent case sensitive comparison.
+     * 
+     * @return true if case sensitive
+     */
+    public boolean isCaseSensitive() {
+        return sensitive;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Compares two strings using the case-sensitivity rule.
+     * <p>
+     * This method mimics {@link String#compareTo} but takes case-sensitivity
+     * into account.
+     * 
+     * @param str1  the first string to compare, not null
+     * @param str2  the second string to compare, not null
+     * @return true if equal using the case rules
+     * @throws NullPointerException if either string is null
+     */
+    public int checkCompareTo(String str1, String str2) {
+        if (str1 == null || str2 == null) {
+            throw new NullPointerException("The strings must not be null");
+        }
+        return sensitive ? str1.compareTo(str2) : str1.compareToIgnoreCase(str2);
+    }
+
+    /**
+     * Compares two strings using the case-sensitivity rule.
+     * <p>
+     * This method mimics {@link String#equals} but takes case-sensitivity
+     * into account.
+     * 
+     * @param str1  the first string to compare, not null
+     * @param str2  the second string to compare, not null
+     * @return true if equal using the case rules
+     * @throws NullPointerException if either string is null
+     */
+    public boolean checkEquals(String str1, String str2) {
+        if (str1 == null || str2 == null) {
+            throw new NullPointerException("The strings must not be null");
+        }
+        return sensitive ? str1.equals(str2) : str1.equalsIgnoreCase(str2);
+    }
+
+    /**
+     * Checks if one string starts with another using the case-sensitivity rule.
+     * <p>
+     * This method mimics {@link String#startsWith(String)} but takes case-sensitivity
+     * into account.
+     * 
+     * @param str  the string to check, not null
+     * @param start  the start to compare against, not null
+     * @return true if equal using the case rules
+     * @throws NullPointerException if either string is null
+     */
+    public boolean checkStartsWith(String str, String start) {
+        return str.regionMatches(!sensitive, 0, start, 0, start.length());
+    }
+
+    /**
+     * Checks if one string ends with another using the case-sensitivity rule.
+     * <p>
+     * This method mimics {@link String#endsWith} but takes case-sensitivity
+     * into account.
+     * 
+     * @param str  the string to check, not null
+     * @param end  the end to compare against, not null
+     * @return true if equal using the case rules
+     * @throws NullPointerException if either string is null
+     */
+    public boolean checkEndsWith(String str, String end) {
+        int endLen = end.length();
+        return str.regionMatches(!sensitive, str.length() - endLen, end, 0, endLen);
+    }
+
+    /**
+     * Checks if one string contains another starting at a specific index using the
+     * case-sensitivity rule.
+     * <p>
+     * This method mimics parts of {@link String#indexOf(String, int)} 
+     * but takes case-sensitivity into account.
+     * 
+     * @param str  the string to check, not null
+     * @param strStartIndex  the index to start at in str
+     * @param search  the start to search for, not null
+     * @return the first index of the search String,
+     *  -1 if no match or {@code null} string input
+     * @throws NullPointerException if either string is null
+     * @since 2.0
+     */
+    public int checkIndexOf(String str, int strStartIndex, String search) {
+        int endIndex = str.length() - search.length();
+        if (endIndex >= strStartIndex) {
+            for (int i = strStartIndex; i <= endIndex; i++) {
+                if (checkRegionMatches(str, i, search)) {
+                    return i;
+                }
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Checks if one string contains another at a specific index using the case-sensitivity rule.
+     * <p>
+     * This method mimics parts of {@link String#regionMatches(boolean, int, String, int, int)} 
+     * but takes case-sensitivity into account.
+     * 
+     * @param str  the string to check, not null
+     * @param strStartIndex  the index to start at in str
+     * @param search  the start to search for, not null
+     * @return true if equal using the case rules
+     * @throws NullPointerException if either string is null
+     */
+    public boolean checkRegionMatches(String str, int strStartIndex, String search) {
+        return str.regionMatches(!sensitive, strStartIndex, search, 0, search.length());
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Gets a string describing the sensitivity.
+     * 
+     * @return a string describing the sensitivity
+     */
+    @Override
+    public String toString() {
+        return name;
+    }
+
+}
diff --git a/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java b/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java
index 9a1cae7..a3cbffa 100644
--- a/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java
+++ b/compiler/javatests/com/google/dart/compiler/CompilerTestCase.java
@@ -4,8 +4,6 @@
 
 package com.google.dart.compiler;
 
-import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
-
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -24,7 +22,9 @@
 import com.google.dart.compiler.parser.DartParserRunner;
 import com.google.dart.compiler.resolver.Element;
 import com.google.dart.compiler.type.Type;
-import com.google.dart.compiler.type.TypeKind;
+import com.google.dart.compiler.type.TypeQuality;
+
+import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
 
 import junit.framework.TestCase;
 
@@ -456,23 +456,19 @@
     assertEquals(nodeSource, actualSource);
   }
 
-
   /**
    * Asserts that {@link Element} with given name has expected type.
    */
-  protected static void assertInferredElementTypeString(
-      DartUnit unit,
-      String variableName,
-      String expectedType) {
+  protected static void assertInferredElementTypeString(DartUnit unit, String variableName,
+      String expectedType, TypeQuality exact) {
     // find element
     Element element = getNamedElement(unit, variableName);
     assertNotNull(element);
     // check type
     Type actualType = element.getType();
     assertEquals(element.getName(), expectedType, getTypeSource(actualType));
-    // should be inferred
-    if (TypeKind.of(actualType) != TypeKind.DYNAMIC) {
-      assertTrue("Should be marked as inferred", actualType.isInferred());
+    if (exact != null) {
+      assertSame(exact, actualType.getQuality());
     }
   }
 
diff --git a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
index eb13e61..fcd7d63 100644
--- a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
+++ b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java
@@ -23,6 +23,7 @@
 import com.google.dart.compiler.common.ErrorExpectation;
 import com.google.dart.compiler.resolver.ResolverErrorCode;
 import com.google.dart.compiler.resolver.TypeErrorCode;
+import com.google.dart.compiler.type.TypeQuality;
 
 import static com.google.dart.compiler.DartCompiler.EXTENSION_DEPS;
 import static com.google.dart.compiler.DartCompiler.EXTENSION_TIMESTAMP;
@@ -1352,19 +1353,19 @@
     // validate types
     DartUnit unit = units.get(APP);
     assertNotNull(unit);
-    assertInferredElementTypeString(unit, "v1", "AnchorElement");
-    assertInferredElementTypeString(unit, "v2", "AnchorElement");
-    assertInferredElementTypeString(unit, "v3", "BodyElement");
-    assertInferredElementTypeString(unit, "v4", "ButtonElement");
-    assertInferredElementTypeString(unit, "v5", "DivElement");
-    assertInferredElementTypeString(unit, "v6", "InputElement");
-    assertInferredElementTypeString(unit, "v7", "SelectElement");
+    assertInferredElementTypeString(unit, "v1", "AnchorElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v2", "AnchorElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v3", "BodyElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v4", "ButtonElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v5", "DivElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v6", "InputElement", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "v7", "SelectElement", TypeQuality.INFERRED);
     // invocation of method
-    assertInferredElementTypeString(unit, "m1", "DivElement");
+    assertInferredElementTypeString(unit, "m1", "DivElement", TypeQuality.INFERRED);
     // bad cases, or unsupported now
-    assertInferredElementTypeString(unit, "b1", "Element");
-    assertInferredElementTypeString(unit, "b2", "Element");
-    assertInferredElementTypeString(unit, "b3", "Element");
+    assertInferredElementTypeString(unit, "b1", "Element", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "b2", "Element", TypeQuality.INFERRED);
+    assertInferredElementTypeString(unit, "b3", "Element", TypeQuality.INFERRED);
   }
 
   /**
@@ -1582,26 +1583,6 @@
     compile();
     assertErrors(errors);
   }
-
-  /**
-   * Internals of Dart use "dart-ext:" import scheme, and these libraries are allowed to use
-   * "native". Obsolete import syntax.
-   */
-  public void test_useNative_withDartExt_obsolete() throws Exception {
-    appSource.setContent(
-        APP,
-        makeCode(
-            "// filler filler filler filler filler filler filler filler filler filler filler",
-            "#library('A');",
-            "#import('dart-ext:test_extension');",
-            "class A {",
-            "  static int ifNull(a, b) native 'TestExtension_IfNull';",
-            "}",
-            ""));
-    // do compile, no errors expected
-    compile();
-    assertErrors(errors);
-  }
   
   /**
    * <p>
diff --git a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
index 28d4dc5..9eeab09 100644
--- a/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
+++ b/compiler/javatests/com/google/dart/compiler/resolver/NegativeResolverTest.java
@@ -1147,4 +1147,38 @@
             errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 7, 7, 1),
             errEx(ResolverErrorCode.CANNOT_ASSIGN_TO_FINAL, 8, 7, 1));
   }
+
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=5987
+   */
+  public void test_accessConstInstanceField_fromConstStaticField() throws Exception {
+    checkSourceErrors(
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler",
+            "class A {",
+            "  const x = 499;",
+            "  static const bar = x;",
+            "}",
+            ""),
+        errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, 4, 22, 1));
+  }
+  
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6489
+   */
+  public void test_accessConstInstanceField_fromConstStaticMethod() throws Exception {
+    checkSourceErrors(
+        makeCode(
+            "// filler filler filler filler filler filler filler filler filler filler",
+            "class A {",
+            "  const CONST = 26;",
+            "  static int foo() {",
+            "    return CONST;",
+            "  }",
+            "}",
+            ""),
+        errEx(ResolverErrorCode.ILLEGAL_FIELD_ACCESS_FROM_STATIC, 5, 12, 5));
+  }
 }
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
index 445482f..8e46da1 100644
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerCompilerTest.java
@@ -4,7 +4,6 @@
 package com.google.dart.compiler.type;
 
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
 import com.google.dart.compiler.CompilerTestCase;
@@ -15,6 +14,8 @@
 import com.google.dart.compiler.ast.DartArrayAccess;
 import com.google.dart.compiler.ast.DartBinaryExpression;
 import com.google.dart.compiler.ast.DartClass;
+import com.google.dart.compiler.ast.DartCommentNewName;
+import com.google.dart.compiler.ast.DartCommentRefName;
 import com.google.dart.compiler.ast.DartDeclaration;
 import com.google.dart.compiler.ast.DartExprStmt;
 import com.google.dart.compiler.ast.DartExpression;
@@ -45,9 +46,13 @@
 import com.google.dart.compiler.resolver.NodeElement;
 import com.google.dart.compiler.resolver.ResolverErrorCode;
 import com.google.dart.compiler.resolver.TypeErrorCode;
+import com.google.dart.compiler.resolver.VariableElement;
 
 import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
 import static com.google.dart.compiler.common.ErrorExpectation.errEx;
+import static com.google.dart.compiler.type.TypeQuality.EXACT;
+import static com.google.dart.compiler.type.TypeQuality.INFERRED;
+import static com.google.dart.compiler.type.TypeQuality.INFERRED_EXACT;
 
 import java.net.URI;
 import java.util.List;
@@ -1937,23 +1942,23 @@
    * http://code.google.com/p/dart/issues/detail?id=4460
    */
   public void test_inferredTypes_noMemberWarnings_forInLoop() throws Exception {
-      compilerConfiguration = new DefaultCompilerConfiguration(new CompilerOptions() {
-        @Override
-        public boolean typeChecksForInferredTypes() {
-          return false;
-        }
-      });
-      AnalyzeLibraryResult result = analyzeLibrary(
-          "// filler filler filler filler filler filler filler filler filler filler",
-          "class A {}",
-          "foo() {",
-          "  List<A> values;",
-          "  for (var v in values) {",
-          "    v.bar();",
-          "  }",
-          "}",
-          "");
-      assertErrors(result.getErrors());
+    compilerConfiguration = new DefaultCompilerConfiguration(new CompilerOptions() {
+      @Override
+      public boolean typeChecksForInferredTypes() {
+        return false;
+      }
+    });
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {}",
+        "foo() {",
+        "  List<A> values;",
+        "  for (var v in values) {",
+        "    v.bar();",
+        "  }",
+        "}",
+        "");
+    assertErrors(result.getErrors());
   }
 
   public void test_inferredTypes_whenInvocationArgument_checkAssignable() throws Exception {
@@ -2029,21 +2034,14 @@
         "  var v7 = new Map().length;",
         "}",
         "");
-    // prepare expected results
-    List<String> expectedList = Lists.newArrayList();
-    expectedList.add("bool");
-    expectedList.add("bool");
-    expectedList.add("int");
-    expectedList.add("int");
-    expectedList.add("double");
-    expectedList.add("double");
-    expectedList.add("Map<String, int>");
-    expectedList.add("int");
-    // check each "v" type
-    for (int i = 0; i < expectedList.size(); i++) {
-      String expectedTypeString = expectedList.get(i);
-      assertInferredElementTypeString(testUnit, "v" + i, expectedTypeString);
-    }
+    assertInferredElementTypeString(testUnit, "v0", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v5", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v6", "Map<String, int>", INFERRED);
+    assertInferredElementTypeString(testUnit, "v7", "int", INFERRED_EXACT);
   }
 
   /**
@@ -2062,8 +2060,8 @@
         "}",
         "");
     assertErrors(libraryResult.getErrors());
-    assertInferredElementTypeString(testUnit, "v1", "B");
-    assertInferredElementTypeString(testUnit, "v2", "B");
+    assertInferredElementTypeString(testUnit, "v1", "B", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "B", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_multiAssign() throws Exception {
@@ -2076,8 +2074,8 @@
         "  var v2 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "int");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "int", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_multiAssign_noInitialValue() throws Exception {
@@ -2089,7 +2087,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_multiAssign_IfThen() throws Exception {
@@ -2105,9 +2103,9 @@
         "  var v3 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "int");
-    assertInferredElementTypeString(testUnit, "v3", "Object");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "Object", INFERRED);
   }
 
   public void test_typesPropagation_multiAssign_IfThenElse() throws Exception {
@@ -2131,10 +2129,10 @@
         "  var d1 = d;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "a1", "int");
-    assertInferredElementTypeString(testUnit, "b1", "Object");
-    assertInferredElementTypeString(testUnit, "c1", "Object");
-    assertInferredElementTypeString(testUnit, "d1", "bool");
+    assertInferredElementTypeString(testUnit, "a1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "b1", "Object", INFERRED);
+    assertInferredElementTypeString(testUnit, "c1", "Object", INFERRED);
+    assertInferredElementTypeString(testUnit, "d1", "bool", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_multiAssign_IfThenElse_whenAsTypeCondition() throws Exception {
@@ -2150,9 +2148,9 @@
         "  var v3 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
-    assertInferredElementTypeString(testUnit, "v3", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_multiAssign_While() throws Exception {
@@ -2169,10 +2167,10 @@
         "  var v4 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
-    assertInferredElementTypeString(testUnit, "v3", "int");
-    assertInferredElementTypeString(testUnit, "v4", "Object");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "Object", INFERRED);
   }
   
   public void test_typesPropagation_multiAssign_DoWhile() throws Exception {
@@ -2189,10 +2187,10 @@
         "  var v4 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
-    assertInferredElementTypeString(testUnit, "v3", "int");
-    assertInferredElementTypeString(testUnit, "v4", "int");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "int", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_multiAssign_For() throws Exception {
@@ -2209,10 +2207,10 @@
         "  var v4 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
-    assertInferredElementTypeString(testUnit, "v3", "int");
-    assertInferredElementTypeString(testUnit, "v4", "Object");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "Object", INFERRED);
   }
 
   public void test_typesPropagation_multiAssign_ForIn() throws Exception {
@@ -2230,10 +2228,10 @@
         "  var v4 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
-    assertInferredElementTypeString(testUnit, "v3", "int");
-    assertInferredElementTypeString(testUnit, "v4", "Object");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "Object", INFERRED);
   }
 
   /**
@@ -2255,8 +2253,8 @@
         "  var b1 = b;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "a1", "List<Object>");
-    assertInferredElementTypeString(testUnit, "b1", "List<Object>");
+    assertInferredElementTypeString(testUnit, "a1", "List<Object>", INFERRED);
+    assertInferredElementTypeString(testUnit, "b1", "List<Object>", INFERRED);
   }
   
   /**
@@ -2278,8 +2276,8 @@
         "  var b1 = b;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "a1", "List<String>");
-    assertInferredElementTypeString(testUnit, "b1", "List<String>");
+    assertInferredElementTypeString(testUnit, "a1", "List<String>", INFERRED);
+    assertInferredElementTypeString(testUnit, "b1", "List<String>", INFERRED);
   }
   
   /**
@@ -2299,9 +2297,9 @@
         "  var v3 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
-    assertInferredElementTypeString(testUnit, "v2", "String");
-    assertInferredElementTypeString(testUnit, "v3", "String");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "String", INFERRED);
   }
 
   /**
@@ -2331,8 +2329,8 @@
         "  var v2 = new Unknown.name();",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifAsType() throws Exception {
@@ -2345,8 +2343,8 @@
         "  var v2 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
   }
 
   /**
@@ -2363,8 +2361,8 @@
         "  var v2 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsType() throws Exception {
@@ -2379,9 +2377,9 @@
         "  var v3 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "List<String>");
-    assertInferredElementTypeString(testUnit, "v2", "Map<int, String>");
-    assertInferredElementTypeString(testUnit, "v3", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "List<String>", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "Map<int, String>", INFERRED);
+    assertInferredElementTypeString(testUnit, "v3", "dynamic", EXACT);
   }
 
   /**
@@ -2403,24 +2401,39 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "a1", "int");
-    assertInferredElementTypeString(testUnit, "a2", "int");
-    assertInferredElementTypeString(testUnit, "b1", "int");
+    assertInferredElementTypeString(testUnit, "a1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "a2", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "b1", "int", INFERRED);
   }
 
   /**
    * When single variable has conflicting type constraints, we use union of types.
    */
   public void test_typesPropagation_ifIsType_conflictingTypes() throws Exception {
-    analyzeLibrary(
+    compilerConfiguration = new DefaultCompilerConfiguration(new CompilerOptions() {
+      @Override
+      public boolean typeChecksForInferredTypes() {
+        return true;
+      }
+    });
+    AnalyzeLibraryResult result = analyzeLibrary(
         "// filler filler filler filler filler filler filler filler filler filler",
         "f(int v) {",
         "  if (v is String) {",
         "    var v1 = v;",
+        "    // should be OK because 'v' is String",
+        "    v.abs; // from num",
+        "    v.length; // from String",
+        "    processInt(v);",
+        "    processString(v);",
         "  }",
         "}",
+        "processInt(int p) {}",
+        "processString(String p) {}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "[int, String]");
+    // should be no errors, we because "v" is String
+    assertErrors(result.getErrors());
+    assertInferredElementTypeString(testUnit, "v1", "[int, String]", INFERRED);
   }
 
   public void test_typesPropagation_ifIsType_negation() throws Exception {
@@ -2437,9 +2450,9 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
-    assertInferredElementTypeString(testUnit, "v3", "String");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsType_and() throws Exception {
@@ -2452,8 +2465,8 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "a1", "String");
-    assertInferredElementTypeString(testUnit, "b1", "List<String>");
+    assertInferredElementTypeString(testUnit, "a1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "b1", "List<String>", INFERRED);
   }
 
   public void test_typesPropagation_ifIsType_or() throws Exception {
@@ -2468,8 +2481,8 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_whileIsType() throws Exception {
@@ -2483,8 +2496,8 @@
         "  var v2 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
-    assertInferredElementTypeString(testUnit, "v2", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_forIsType() throws Exception {
@@ -2498,9 +2511,9 @@
         "  var v3 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
-    assertInferredElementTypeString(testUnit, "v2", "String");
-    assertInferredElementTypeString(testUnit, "v3", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v3", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_forEach() throws Exception {
@@ -2513,7 +2526,7 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_withElse() throws Exception {
@@ -2529,11 +2542,11 @@
         "}",
         "");
     // we don't know type, but not String
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
     // we know that String
-    assertInferredElementTypeString(testUnit, "v2", "String");
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
     // again, we don't know after "if"
-    assertInferredElementTypeString(testUnit, "v3", "dynamic");
+    assertInferredElementTypeString(testUnit, "v3", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_hasThenReturn() throws Exception {
@@ -2547,8 +2560,8 @@
         "  var v2 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
-    assertInferredElementTypeString(testUnit, "v2", "String");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_hasThenThrow() throws Exception {
@@ -2561,7 +2574,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_emptyThen() throws Exception {
@@ -2573,7 +2586,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_otherThen() throws Exception {
@@ -2586,7 +2599,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_hasThenThrow_withCatch() throws Exception {
@@ -2602,7 +2615,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_hasThenContinue() throws Exception {
@@ -2619,8 +2632,8 @@
         "}",
         "");
     assertErrors(libraryResult.getErrors());
-    assertInferredElementTypeString(testUnit, "v1", "Object");
-    assertInferredElementTypeString(testUnit, "v2", "String");
+    assertInferredElementTypeString(testUnit, "v1", "Object", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_hasThenBreak() throws Exception {
@@ -2637,8 +2650,8 @@
         "}",
         "");
     assertErrors(libraryResult.getErrors());
-    assertInferredElementTypeString(testUnit, "v1", "Object");
-    assertInferredElementTypeString(testUnit, "v2", "String");
+    assertInferredElementTypeString(testUnit, "v1", "Object", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_or() throws Exception {
@@ -2652,8 +2665,8 @@
         "  var v2 = p2;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "String");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifIsNotType_and() throws Exception {
@@ -2666,7 +2679,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_not() throws Exception {
@@ -2679,7 +2692,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_ifIsNotType_not2() throws Exception {
@@ -2692,7 +2705,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
   }
 
   public void test_typesPropagation_ifNotIsType() throws Exception {
@@ -2705,7 +2718,7 @@
         "  var v1 = v;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "String");
+    assertInferredElementTypeString(testUnit, "v1", "String", INFERRED);
   }
 
   /**
@@ -2728,14 +2741,14 @@
         "}",
         "");
     // we don't know type initially
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
     // after "assert" all next statements know type
-    assertInferredElementTypeString(testUnit, "v2", "String");
-    assertInferredElementTypeString(testUnit, "v3", "String");
+    assertInferredElementTypeString(testUnit, "v2", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "v3", "String", INFERRED);
     // type is set to unknown only when we exit control Block, not just any Block
-    assertInferredElementTypeString(testUnit, "v4", "String");
+    assertInferredElementTypeString(testUnit, "v4", "String", INFERRED);
     // we exited "if" Block, so "assert" may be was not executed, so we don't know type
-    assertInferredElementTypeString(testUnit, "v5", "dynamic");
+    assertInferredElementTypeString(testUnit, "v5", "dynamic", EXACT);
   }
   
   /**
@@ -2758,14 +2771,14 @@
         "}",
         "");
     // we don't know type initially
-    assertInferredElementTypeString(testUnit, "a1", "dynamic");
-    assertInferredElementTypeString(testUnit, "b1", "dynamic");
+    assertInferredElementTypeString(testUnit, "a1", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "b1", "dynamic", EXACT);
     // after "assert" all next statements know type
-    assertInferredElementTypeString(testUnit, "a2", "String");
-    assertInferredElementTypeString(testUnit, "b2", "String");
+    assertInferredElementTypeString(testUnit, "a2", "String", INFERRED);
+    assertInferredElementTypeString(testUnit, "b2", "String", INFERRED);
     // we exited "if" Block, so "assert" may be was not executed, so we don't know type
-    assertInferredElementTypeString(testUnit, "a3", "dynamic");
-    assertInferredElementTypeString(testUnit, "b3", "dynamic");
+    assertInferredElementTypeString(testUnit, "a3", "dynamic", EXACT);
+    assertInferredElementTypeString(testUnit, "b3", "dynamic", EXACT);
   }
 
   /**
@@ -2794,10 +2807,10 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "B");
-    assertInferredElementTypeString(testUnit, "v2", "B");
-    assertInferredElementTypeString(testUnit, "v3", "C");
-    assertInferredElementTypeString(testUnit, "v4", "[B, String]");
+    assertInferredElementTypeString(testUnit, "v1", "B", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "B", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "C", INFERRED);
+    assertInferredElementTypeString(testUnit, "v4", "[B, String]", INFERRED);
   }
 
   public void test_typesPropagation_field_inClass_final() throws Exception {
@@ -2808,8 +2821,8 @@
         "  final v2 = 1 + 2.0;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "double");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "double", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_field_inClass_const() throws Exception {
@@ -2820,8 +2833,8 @@
         "  final v2 = 1 + 2.0;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "double");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "double", INFERRED_EXACT);
   }
   
   /**
@@ -2835,7 +2848,7 @@
         "  var v1 = 123;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_field_topLevel_final() throws Exception {
@@ -2844,8 +2857,8 @@
         "final v1 = 123;",
         "final v2 = 1 + 2.0;",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "double");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "double", INFERRED_EXACT);
   }
 
   public void test_typesPropagation_field_topLevel_const() throws Exception {
@@ -2854,8 +2867,8 @@
         "const v1 = 123;",
         "const v2 = 1 + 2.0;",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "double");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "double", INFERRED_EXACT);
   }
   
   /**
@@ -2867,7 +2880,7 @@
         "// filler filler filler filler filler filler filler filler filler filler",
         "var v1 = 123;",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "dynamic");
+    assertInferredElementTypeString(testUnit, "v1", "dynamic", EXACT);
   }
 
   public void test_typesPropagation_FunctionAliasType() throws Exception {
@@ -2880,7 +2893,7 @@
         "}",
         "",
         "");
-    assertInferredElementTypeString(testUnit, "v", "F");
+    assertInferredElementTypeString(testUnit, "v", "F", INFERRED_EXACT);
   }
 
   /**
@@ -2904,7 +2917,7 @@
         "  });",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "Event");
+    assertInferredElementTypeString(testUnit, "v", "Event", INFERRED);
   }
 
   /**
@@ -2924,7 +2937,7 @@
         "  });",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "Event");
+    assertInferredElementTypeString(testUnit, "v", "Event", INFERRED);
   }
 
   /**
@@ -2944,7 +2957,7 @@
         "  });",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "Event");
+    assertInferredElementTypeString(testUnit, "v", "Event", INFERRED);
   }
 
   /**
@@ -2966,7 +2979,7 @@
         "  });",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "Event");
+    assertInferredElementTypeString(testUnit, "v", "Event", INFERRED);
   }
 
   /**
@@ -2988,7 +3001,7 @@
         "  });",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "Event");
+    assertInferredElementTypeString(testUnit, "v", "Event", INFERRED);
   }
 
   public void test_typesPropagation_parameterOfClosure_assignVariable() throws Exception {
@@ -3012,8 +3025,8 @@
         "  }",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "Event");
-    assertInferredElementTypeString(testUnit, "v2", "Event");
+    assertInferredElementTypeString(testUnit, "v1", "Event", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "Event", INFERRED);
   }
 
   public void test_typesPropagation_parameterOfClosure_assignField() throws Exception {
@@ -3044,9 +3057,9 @@
         "  var v3 = e;",
         "};",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "Event");
-    assertInferredElementTypeString(testUnit, "v2", "Event");
-    assertInferredElementTypeString(testUnit, "v3", "Event");
+    assertInferredElementTypeString(testUnit, "v1", "Event", INFERRED);
+    assertInferredElementTypeString(testUnit, "v2", "Event", INFERRED);
+    assertInferredElementTypeString(testUnit, "v3", "Event", INFERRED);
   }
 
   /**
@@ -3114,23 +3127,23 @@
         "  var v17 = arg as int",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "int");
-    assertInferredElementTypeString(testUnit, "v3", "int");
-    assertInferredElementTypeString(testUnit, "v4", "int");
-    assertInferredElementTypeString(testUnit, "v5", "int");
-    assertInferredElementTypeString(testUnit, "v6", "double");
-    assertInferredElementTypeString(testUnit, "v7", "double");
-    assertInferredElementTypeString(testUnit, "v8", "double");
-    assertInferredElementTypeString(testUnit, "v9", "double");
-    assertInferredElementTypeString(testUnit, "v10", "double");
-    assertInferredElementTypeString(testUnit, "v11", "double");
-    assertInferredElementTypeString(testUnit, "v12", "double");
-    assertInferredElementTypeString(testUnit, "v13", "double");
-    assertInferredElementTypeString(testUnit, "v14", "double");
-    assertInferredElementTypeString(testUnit, "v15", "double");
-    assertInferredElementTypeString(testUnit, "v16", "double");
-    assertInferredElementTypeString(testUnit, "v17", "int");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v3", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v4", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v5", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v6", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v7", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v8", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v9", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v10", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v11", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v12", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v13", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v14", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v15", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v16", "double", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v17", "int", INFERRED);
   }
 
   /**
@@ -3187,8 +3200,8 @@
         "}",
         "");
     assertErrors(libraryResult.getErrors());
-    assertInferredElementTypeString(testUnit, "v1", "int");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
+    assertInferredElementTypeString(testUnit, "v1", "int", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
   }
 
   public void test_getType_getterInNegation_generic() throws Exception {
@@ -3212,8 +3225,8 @@
         "}",
         "");
     assertErrors(libraryResult.getErrors());
-    assertInferredElementTypeString(testUnit, "v1", "bool");
-    assertInferredElementTypeString(testUnit, "v2", "bool");
+    assertInferredElementTypeString(testUnit, "v1", "bool", INFERRED_EXACT);
+    assertInferredElementTypeString(testUnit, "v2", "bool", INFERRED_EXACT);
   }
 
   public void test_getType_getterInSwitch_default() throws Exception {
@@ -4336,7 +4349,94 @@
         "  var v = s..length;",
         "}",
         "");
-    assertInferredElementTypeString(testUnit, "v", "String");
+    assertInferredElementTypeString(testUnit, "v", "String", INFERRED_EXACT);
+  }
+
+  /**
+   * There should be no problem reported, because assignment of "a" cascade to "b" with type "B"
+   * implicitly set type of "a" to "B".
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6107
+   */
+  public void test_cascade_inferType_varDeclaration() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {}",
+        "class B extends A {",
+        "  bMethod() {}",
+        "}",
+        "main() {",
+        "  A a = new B();",
+        "  B b = a..bMethod();",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+  }
+  
+  /**
+   * There should be no problem reported, because assignment of "a" cascade to "b" with type "B"
+   * implicitly set type of "a" to "B".
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6107
+   */
+  public void test_cascade_inferType_varAssignment() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {}",
+        "class B extends A {",
+        "  bMethod() {}",
+        "}",
+        "main() {",
+        "  A a = new B();",
+        "  B b = null;",
+        "  b = a..bMethod();",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+  }
+
+  /**
+   * We assign "a" to field "Holder.b" of type "B", so implicitly set type of "a" to "B".
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6107
+   */
+  public void test_cascade_inferType_fieldDeclaration() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class Holder {",
+        "  B b = getA()..bMethod();",
+        "}",
+        "class A {}",
+        "class B extends A {",
+        "  bMethod() {}",
+        "}",
+        "A getA() => new B();",
+        "");
+    assertErrors(result.getErrors());
+  }
+  
+  /**
+   * We assign "a" to field "Holder.b" of type "B", so implicitly set type of "a" to "B".
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6107
+   */
+  public void test_cascade_inferType_fieldAssignment() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class Holder {",
+        "  B b;",
+        "}",
+        "class A {}",
+        "class B extends A {",
+        "  bMethod() {}",
+        "}",
+        "main() {",
+        "  A a = new B();",
+        "  Holder holder = new Holder();",
+        "  holder.b = a..bMethod();",
+        "}",
+        "");
+    assertErrors(result.getErrors());
   }
 
   /**
@@ -5319,4 +5419,155 @@
         "");
     assertErrors(result.getErrors());
   }
+
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=5157
+   */
+  public void test_trySubTypeMember_forInferredType() throws Exception {
+    compilerConfiguration = new DefaultCompilerConfiguration(new CompilerOptions() {
+      @Override
+      public boolean typeChecksForInferredTypes() {
+        return true;
+      }
+    });
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class Event {}",
+        "class MouseEvent extends Event {",
+        "  int clientX;",
+        "  void stop() {}",
+        "}",
+        "typedef Listener(Event event);",
+        "class Button {",
+        "  addListener(Listener listener) {}",
+        "}",
+        "main() {",
+        "  Button button = new Button();",
+        "  button.addListener((event) {",
+        "    event.clientX;",
+        "    event.stop();",
+        "  });",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+  }
+  
+  /**
+   * <p>
+   * http://code.google.com/p/dart/issues/detail?id=6491
+   */
+  public void test_annotationOnGetter() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "const myAnnotation = 0;",
+        "class A {",
+        "  @myAnnotation bool get isEmpty => true;",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+  }
+
+  public void test_resolveRefInComment_ofClass() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "/** This class [A] has method [foo]. */",
+        "class A {",
+        "  foo() {}",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+    // [A]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "A]");
+      ClassElement element = (ClassElement) node.getElement();
+      assertEquals("A", element.getName());
+    }
+    // [foo]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "foo]");
+      MethodElement element = (MethodElement) node.getElement();
+      assertEquals("foo", element.getName());
+    }
+  }
+
+  public void test_resolveRefInComment_ofFunction() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {}",
+        "/** This function has parameter [aaa] of type [A] ans also [bbb]. */",
+        "foo(A aaa, bbb) {}",
+        "");
+    assertErrors(result.getErrors());
+    // [aaa]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "aaa]");
+      VariableElement element = (VariableElement) node.getElement();
+      assertSame(ElementKind.PARAMETER, ElementKind.of(element));
+      assertEquals("aaa", element.getName());
+    }
+    // [A]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "A]");
+      ClassElement element = (ClassElement) node.getElement();
+      assertEquals("A", element.getName());
+    }
+    // [bbb]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "bbb]");
+      VariableElement element = (VariableElement) node.getElement();
+      assertSame(ElementKind.PARAMETER, ElementKind.of(element));
+      assertEquals("bbb", element.getName());
+    }
+  }
+  
+  public void test_resolveRefInComment_ofMethod() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {",
+        "  var fff;",
+        "  /** Initializes [fff] and then calls [bar]. */",
+        "  foo() {}",
+        "  bar() {}",
+        "}",
+        "");
+    assertErrors(result.getErrors());
+    // [fff]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "fff]");
+      FieldElement element = (FieldElement) node.getElement();
+      assertEquals("fff", element.getName());
+    }
+    // [bar]
+    {
+      DartCommentRefName node = findNode(DartCommentRefName.class, "bar]");
+      MethodElement element = (MethodElement) node.getElement();
+      assertEquals("bar", element.getName());
+    }
+  }
+  
+  public void test_resolveNewInComment() throws Exception {
+    AnalyzeLibraryResult result = analyzeLibrary(
+        "// filler filler filler filler filler filler filler filler filler filler",
+        "class A {",
+        "  A() {}",
+        "  A.named() {}",
+        "}",
+        "/** Creates [A] using [new A] or [new A.named] constructors. */",
+        "foo() {}",
+        "");
+    assertErrors(result.getErrors());
+    // [new A]
+    {
+      DartCommentNewName node = findNode(DartCommentNewName.class, "new A]");
+      assertEquals("", node.getConstructorElement().getName());
+      assertEquals("A", node.getClassElement().getName());
+    }
+    // [new A.named]
+    {
+      DartCommentNewName node = findNode(DartCommentNewName.class, "new A.named]");
+      assertEquals("named", node.getConstructorElement().getName());
+      assertEquals("A", node.getClassElement().getName());
+    }
+  }
 }
diff --git a/lib/compiler/implementation/lib/mirrors.dart b/lib/compiler/implementation/lib/mirrors.dart
deleted file mode 100644
index 243de22..0000000
--- a/lib/compiler/implementation/lib/mirrors.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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("dart:mirrors");
-
-#import("dart:isolate");
-
-#source("../../../mirrors/mirrors.dart");
-
-/**
- * Stub class for the mirror system.
- */
-class _Mirrors {
-  static MirrorSystem currentMirrorSystem() {
-    throw new UnsupportedError("MirrorSystem not implemented");
-  }
-
-  static Future<MirrorSystem> mirrorSystemOf(SendPort port) {
-    throw new UnsupportedError("MirrorSystem not implemented");
-  }
-
-  static InstanceMirror reflect(Object reflectee) {
-    throw new UnsupportedError("MirrorSystem not implemented");
-  }
-}
diff --git a/lib/core/map.dart b/lib/core/map.dart
deleted file mode 100644
index 530d4ee..0000000
--- a/lib/core/map.dart
+++ /dev/null
@@ -1,123 +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.
-
-/**
- * A [Map] is an associative container, mapping a key to a value.
- * Null values are supported, but null keys are not.
- */
-interface Map<K, V> default HashMapImplementation<K, V> {
-  /**
-   * Creates a map with the default implementation.
-   */
-  Map();
-
-  /**
-   * Creates a [Map] that contains all key value pairs of [other].
-   */
-  Map.from(Map<K, V> other);
-
-
-  /**
-   * Returns whether this map contains the given [value].
-   */
-  bool containsValue(V value);
-
-  /**
-   * Returns whether this map contains the given [key].
-   */
-  bool containsKey(K key);
-
-  /**
-   * Returns the value for the given [key] or null if [key] is not
-   * in the map. Because null values are supported, one should either
-   * use containsKey to distinguish between an absent key and a null
-   * value, or use the [putIfAbsent] method.
-   */
-  V operator [](K key);
-
-  /**
-   * Associates the [key] with the given [value].
-   */
-  void operator []=(K key, V value);
-
-  /**
-   * If [key] is not associated to a value, calls [ifAbsent] and
-   * updates the map by mapping [key] to the value returned by
-   * [ifAbsent]. Returns the value in the map.
-   */
-  V putIfAbsent(K key, V ifAbsent());
-
-  /**
-   * Removes the association for the given [key]. Returns the value for
-   * [key] in the map or null if [key] is not in the map. Note that values
-   * can be null and a returned null value does not always imply that the
-   * key is absent.
-   */
-  V remove(K key);
-
-  /**
-   * Removes all pairs from the map.
-   */
-  void clear();
-
-  /**
-   * Applies [f] to each {key, value} pair of the map.
-   */
-  void forEach(void f(K key, V value));
-
-  /**
-   * Returns a collection containing all the keys in the map.
-   */
-  Collection<K> get keys;
-
-  /**
-   * Returns a collection containing all the values in the map.
-   */
-  Collection<V> get values;
-
-  /**
-   * The number of {key, value} pairs in the map.
-   */
-  int get length;
-
-  /**
-   * Returns true if there is no {key, value} pair in the map.
-   */
-  bool get isEmpty;
-}
-
-/**
- * Hash map version of the [Map] interface. A [HashMap] does not
- * provide any guarantees on the order of keys and values in [keys]
- * and [values].
- */
-interface HashMap<K, V> extends Map<K, V>
-    default HashMapImplementation<K, V> {
-  /**
-   * Creates a map with the default implementation.
-   */
-  HashMap();
-
-  /**
-   * Creates a [HashMap] that contains all key value pairs of [other].
-   */
-  HashMap.from(Map<K, V> other);
-}
-
-/**
- * Hash map version of the [Map] interface that preserves insertion
- * order.
- */
-interface LinkedHashMap<K, V> extends HashMap<K, V>
-    default LinkedHashMapImplementation<K, V> {
-  /**
-   * Creates a map with the default implementation.
-   */
-  LinkedHashMap();
-
-  /**
-   * Creates a [LinkedHashMap] that contains all key value pairs of [other].
-   */
-  LinkedHashMap.from(Map<K, V> other);
-}
diff --git a/lib/core/set.dart b/lib/core/set.dart
deleted file mode 100644
index 1c2b690..0000000
--- a/lib/core/set.dart
+++ /dev/null
@@ -1,80 +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.
-
-/**
- * This class is the public interface of a set. A set is a collection
- * without duplicates.
- */
-abstract class Set<E> extends Collection<E> {
-  factory Set() => new HashSetImplementation<E>();
-
-  /**
-   * Creates a [Set] that contains all elements of [other].
-   */
-  factory Set.from(Iterable<E> other) {
-    return new HashSetImplementation<E>.from(other);
-  }
-
-  /**
-   * Returns true if [value] is in the set.
-   */
-  bool contains(E value);
-
-  /**
-   * Adds [value] into the set. The method has no effect if
-   * [value] was already in the set.
-   */
-  void add(E value);
-
-  /**
-   * Removes [value] from the set. Returns true if [value] was
-   * in the set. Returns false otherwise. The method has no effect
-   * if [value] value was not in the set.
-   */
-  bool remove(E value);
-
-  /**
-   * Adds all the elements of the given collection to the set.
-   */
-  void addAll(Collection<E> collection);
-
-  /**
-   * Removes all the elements of the given collection from the set.
-   */
-  void removeAll(Collection<E> collection);
-
-  /**
-   * Returns true if [collection] contains all the elements of this
-   * collection.
-   */
-  bool isSubsetOf(Collection<E> collection);
-
-  /**
-   * Returns true if this collection contains all the elements of
-   * [collection].
-   */
-  bool containsAll(Collection<E> collection);
-
-  /**
-   * Returns a new set which is the intersection between this set and
-   * the given collection.
-   */
-  Set<E> intersection(Collection<E> other);
-
-  /**
-   * Removes all elements in the set.
-   */
-  void clear();
-
-}
-
-abstract class HashSet<E> extends Set<E> {
-  factory HashSet() => new HashSetImplementation<E>();
-
-  /**
-   * Creates a [Set] that contains all elements of [other].
-   */
-  factory HashSet.from(Iterable<E> other) =>
-      new HashSetImplementation<E>.from(other);
-}
diff --git a/lib/coreimpl/linked_hash_map.dart b/lib/coreimpl/linked_hash_map.dart
deleted file mode 100644
index 3534028..0000000
--- a/lib/coreimpl/linked_hash_map.dart
+++ /dev/null
@@ -1,121 +0,0 @@
-// 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.
-
-/**
- * This class represents a pair of two objects, used by LinkedHashMap
- * to store a {key, value} in a list.
- */
-class KeyValuePair<K, V> {
-  KeyValuePair(this.key, this.value) {}
-
-  final K key;
-  V value;
-}
-
-/**
- * A LinkedHashMap is a hash map that preserves the insertion order
- * when iterating over the keys or the values. Updating the value of a
- * key does not change the order.
- */
-class LinkedHashMapImplementation<K, V>
-    implements LinkedHashMap<K, V> {
-  DoubleLinkedQueue<KeyValuePair<K, V>> _list;
-  HashMap<K, DoubleLinkedQueueEntry<KeyValuePair<K, V>>> _map;
-
-  LinkedHashMapImplementation() {
-    _map = new HashMap<K, DoubleLinkedQueueEntry<KeyValuePair<K, V>>>();
-    _list = new DoubleLinkedQueue<KeyValuePair<K, V>>();
-  }
-
-  factory LinkedHashMapImplementation.from(Map<K, V> other) {
-    Map<K, V> result = new LinkedHashMapImplementation<K, V>();
-    other.forEach((K key, V value) { result[key] = value; });
-    return result;
-  }
-
-  void operator []=(K key, V value) {
-    if (_map.containsKey(key)) {
-      _map[key].element.value = value;
-    } else {
-      _list.addLast(new KeyValuePair<K, V>(key, value));
-      _map[key] = _list.lastEntry();
-    }
-  }
-
-  V operator [](K key) {
-    DoubleLinkedQueueEntry<KeyValuePair<K, V>> entry = _map[key];
-    if (entry === null) return null;
-    return entry.element.value;
-  }
-
-  V remove(K key) {
-    DoubleLinkedQueueEntry<KeyValuePair<K, V>> entry = _map.remove(key);
-    if (entry === null) return null;
-    entry.remove();
-    return entry.element.value;
-  }
-
-  V putIfAbsent(K key, V ifAbsent()) {
-    V value = this[key];
-    if ((this[key] === null) && !(containsKey(key))) {
-      value = ifAbsent();
-      this[key] = value;
-    }
-    return value;
-  }
-
-  Collection<K> get keys {
-    List<K> list = new List<K>(length);
-    int index = 0;
-    _list.forEach(void _(KeyValuePair<K, V> entry) {
-      list[index++] = entry.key;
-    });
-    assert(index == length);
-    return list;
-  }
-
-
-  Collection<V> get values {
-    List<V> list = new List<V>(length);
-    int index = 0;
-    _list.forEach(void _(KeyValuePair<K, V> entry) {
-      list[index++] = entry.value;
-    });
-    assert(index == length);
-    return list;
-  }
-
-  void forEach(void f(K key, V value)) {
-    _list.forEach(void _(KeyValuePair<K, V> entry) {
-      f(entry.key, entry.value);
-    });
-  }
-
-  bool containsKey(K key) {
-    return _map.containsKey(key);
-  }
-
-  bool containsValue(V value) {
-    return _list.some(bool _(KeyValuePair<K, V> entry) {
-      return (entry.value == value);
-    });
-  }
-
-  int get length {
-    return _map.length;
-  }
-
-  bool get isEmpty {
-    return length == 0;
-  }
-
-  void clear() {
-    _map.clear();
-    _list.clear();
-  }
-
-  String toString() {
-    return Maps.mapToString(this);
-  }
-}
diff --git a/lib/html/dart2js/html_dart2js.dart b/lib/html/dart2js/html_dart2js.dart
deleted file mode 100644
index 663b0c0..0000000
--- a/lib/html/dart2js/html_dart2js.dart
+++ /dev/null
@@ -1,40909 +0,0 @@
-library html;
-
-import 'dart:isolate';
-import 'dart:json';
-// 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.
-
-// DO NOT EDIT
-// Auto-generated dart:html library.
-
-
-
-
-
-
-
-LocalWindow get window => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
-
-Document get document => JS('Document', 'document');
-
-_DocumentImpl get _document => JS('_DocumentImpl', 'document');
-
-Element query(String selector) => _document.query(selector);
-List<Element> queryAll(String selector) => _document.queryAll(selector);
-
-// Workaround for tags like <cite> that lack their own Element subclass --
-// Dart issue 1990.
-class _HTMLElementImpl extends _ElementImpl native "*HTMLElement" {
-}
-
-// Support for Send/ReceivePortSync.
-int _getNewIsolateId() {
-  if (JS('bool', r'!window.$dart$isolate$counter')) {
-    JS('void', r'window.$dart$isolate$counter = 1');
-  }
-  return JS('int', r'window.$dart$isolate$counter++');
-}
-
-// Fast path to invoke JS send port.
-_callPortSync(int id, message) {
-  return JS('var', r'ReceivePortSync.dispatchCall(#, #)', id, message);
-}
-
-// TODO(vsm): Plumb this properly.
-spawnDomFunction(f) => spawnFunction(f);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AbstractWorker
-abstract class AbstractWorker implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  AbstractWorkerEvents get on;
-
-  /** @domName AbstractWorker.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName AbstractWorker.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName AbstractWorker.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class AbstractWorkerEvents implements Events {
-
-  EventListenerList get error;
-}
-
-class _AbstractWorkerImpl extends _EventTargetImpl implements AbstractWorker native "*AbstractWorker" {
-
-  _AbstractWorkerEventsImpl get on =>
-    new _AbstractWorkerEventsImpl(this);
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _AbstractWorkerEventsImpl extends _EventsImpl implements AbstractWorkerEvents {
-  _AbstractWorkerEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get error => this['error'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AnalyserNode
-abstract class AnalyserNode implements AudioNode {
-
-  /** @domName AnalyserNode.fftSize */
-  int fftSize;
-
-  /** @domName AnalyserNode.frequencyBinCount */
-  int get frequencyBinCount;
-
-  /** @domName AnalyserNode.maxDecibels */
-  num maxDecibels;
-
-  /** @domName AnalyserNode.minDecibels */
-  num minDecibels;
-
-  /** @domName AnalyserNode.smoothingTimeConstant */
-  num smoothingTimeConstant;
-
-  /** @domName AnalyserNode.getByteFrequencyData */
-  void getByteFrequencyData(Uint8Array array);
-
-  /** @domName AnalyserNode.getByteTimeDomainData */
-  void getByteTimeDomainData(Uint8Array array);
-
-  /** @domName AnalyserNode.getFloatFrequencyData */
-  void getFloatFrequencyData(Float32Array array);
-}
-
-class _AnalyserNodeImpl extends _AudioNodeImpl implements AnalyserNode native "*AnalyserNode" {
-
-  int fftSize;
-
-  final int frequencyBinCount;
-
-  num maxDecibels;
-
-  num minDecibels;
-
-  num smoothingTimeConstant;
-
-  void getByteFrequencyData(_Uint8ArrayImpl array) native;
-
-  void getByteTimeDomainData(_Uint8ArrayImpl array) native;
-
-  void getFloatFrequencyData(_Float32ArrayImpl array) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLAnchorElement
-abstract class AnchorElement implements Element {
-
-  factory AnchorElement({String href}) {
-    if (!?href) {
-      return _Elements.createAnchorElement();
-    }
-    return _Elements.createAnchorElement(href);
-  }
-
-  /** @domName HTMLAnchorElement.charset */
-  String charset;
-
-  /** @domName HTMLAnchorElement.coords */
-  String coords;
-
-  /** @domName HTMLAnchorElement.download */
-  String download;
-
-  /** @domName HTMLAnchorElement.hash */
-  String hash;
-
-  /** @domName HTMLAnchorElement.host */
-  String host;
-
-  /** @domName HTMLAnchorElement.hostname */
-  String hostname;
-
-  /** @domName HTMLAnchorElement.href */
-  String href;
-
-  /** @domName HTMLAnchorElement.hreflang */
-  String hreflang;
-
-  /** @domName HTMLAnchorElement.name */
-  String name;
-
-  /** @domName HTMLAnchorElement.origin */
-  String get origin;
-
-  /** @domName HTMLAnchorElement.pathname */
-  String pathname;
-
-  /** @domName HTMLAnchorElement.ping */
-  String ping;
-
-  /** @domName HTMLAnchorElement.port */
-  String port;
-
-  /** @domName HTMLAnchorElement.protocol */
-  String protocol;
-
-  /** @domName HTMLAnchorElement.rel */
-  String rel;
-
-  /** @domName HTMLAnchorElement.rev */
-  String rev;
-
-  /** @domName HTMLAnchorElement.search */
-  String search;
-
-  /** @domName HTMLAnchorElement.shape */
-  String shape;
-
-  /** @domName HTMLAnchorElement.target */
-  String target;
-
-  /** @domName HTMLAnchorElement.type */
-  String type;
-
-  /** @domName HTMLAnchorElement.toString */
-  String toString();
-}
-
-class _AnchorElementImpl extends _ElementImpl implements AnchorElement native "*HTMLAnchorElement" {
-
-  String charset;
-
-  String coords;
-
-  String download;
-
-  String hash;
-
-  String host;
-
-  String hostname;
-
-  String href;
-
-  String hreflang;
-
-  String name;
-
-  final String origin;
-
-  String pathname;
-
-  String ping;
-
-  String port;
-
-  String protocol;
-
-  String rel;
-
-  String rev;
-
-  String search;
-
-  String shape;
-
-  String target;
-
-  String type;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitAnimation
-abstract class Animation {
-
-  static const int DIRECTION_ALTERNATE = 1;
-
-  static const int DIRECTION_NORMAL = 0;
-
-  static const int FILL_BACKWARDS = 1;
-
-  static const int FILL_BOTH = 3;
-
-  static const int FILL_FORWARDS = 2;
-
-  static const int FILL_NONE = 0;
-
-  /** @domName WebKitAnimation.delay */
-  num get delay;
-
-  /** @domName WebKitAnimation.direction */
-  int get direction;
-
-  /** @domName WebKitAnimation.duration */
-  num get duration;
-
-  /** @domName WebKitAnimation.elapsedTime */
-  num elapsedTime;
-
-  /** @domName WebKitAnimation.ended */
-  bool get ended;
-
-  /** @domName WebKitAnimation.fillMode */
-  int get fillMode;
-
-  /** @domName WebKitAnimation.iterationCount */
-  int get iterationCount;
-
-  /** @domName WebKitAnimation.name */
-  String get name;
-
-  /** @domName WebKitAnimation.paused */
-  bool get paused;
-
-  /** @domName WebKitAnimation.pause */
-  void pause();
-
-  /** @domName WebKitAnimation.play */
-  void play();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitAnimationEvent
-abstract class AnimationEvent implements Event {
-
-  /** @domName WebKitAnimationEvent.animationName */
-  String get animationName;
-
-  /** @domName WebKitAnimationEvent.elapsedTime */
-  num get elapsedTime;
-}
-
-class _AnimationEventImpl extends _EventImpl implements AnimationEvent native "*WebKitAnimationEvent" {
-
-  final String animationName;
-
-  final num elapsedTime;
-}
-
-class _AnimationImpl implements Animation native "*WebKitAnimation" {
-
-  final num delay;
-
-  final int direction;
-
-  final num duration;
-
-  num elapsedTime;
-
-  final bool ended;
-
-  final int fillMode;
-
-  final int iterationCount;
-
-  final String name;
-
-  final bool paused;
-
-  void pause() native;
-
-  void play() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLAppletElement
-abstract class AppletElement implements Element {
-
-  /** @domName HTMLAppletElement.align */
-  String align;
-
-  /** @domName HTMLAppletElement.alt */
-  String alt;
-
-  /** @domName HTMLAppletElement.archive */
-  String archive;
-
-  /** @domName HTMLAppletElement.code */
-  String code;
-
-  /** @domName HTMLAppletElement.codeBase */
-  String codeBase;
-
-  /** @domName HTMLAppletElement.height */
-  String height;
-
-  /** @domName HTMLAppletElement.hspace */
-  String hspace;
-
-  /** @domName HTMLAppletElement.name */
-  String name;
-
-  /** @domName HTMLAppletElement.object */
-  String object;
-
-  /** @domName HTMLAppletElement.vspace */
-  String vspace;
-
-  /** @domName HTMLAppletElement.width */
-  String width;
-}
-
-class _AppletElementImpl extends _ElementImpl implements AppletElement native "*HTMLAppletElement" {
-
-  String align;
-
-  String alt;
-
-  String archive;
-
-  String code;
-
-  String codeBase;
-
-  String height;
-
-  String hspace;
-
-  String name;
-
-  String object;
-
-  String vspace;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLAreaElement
-abstract class AreaElement implements Element {
-
-  factory AreaElement() => _Elements.createAreaElement();
-
-  /** @domName HTMLAreaElement.alt */
-  String alt;
-
-  /** @domName HTMLAreaElement.coords */
-  String coords;
-
-  /** @domName HTMLAreaElement.hash */
-  String get hash;
-
-  /** @domName HTMLAreaElement.host */
-  String get host;
-
-  /** @domName HTMLAreaElement.hostname */
-  String get hostname;
-
-  /** @domName HTMLAreaElement.href */
-  String href;
-
-  /** @domName HTMLAreaElement.noHref */
-  bool noHref;
-
-  /** @domName HTMLAreaElement.pathname */
-  String get pathname;
-
-  /** @domName HTMLAreaElement.ping */
-  String ping;
-
-  /** @domName HTMLAreaElement.port */
-  String get port;
-
-  /** @domName HTMLAreaElement.protocol */
-  String get protocol;
-
-  /** @domName HTMLAreaElement.search */
-  String get search;
-
-  /** @domName HTMLAreaElement.shape */
-  String shape;
-
-  /** @domName HTMLAreaElement.target */
-  String target;
-}
-
-class _AreaElementImpl extends _ElementImpl implements AreaElement native "*HTMLAreaElement" {
-
-  String alt;
-
-  String coords;
-
-  final String hash;
-
-  final String host;
-
-  final String hostname;
-
-  String href;
-
-  bool noHref;
-
-  final String pathname;
-
-  String ping;
-
-  final String port;
-
-  final String protocol;
-
-  final String search;
-
-  String shape;
-
-  String target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ArrayBuffer
-abstract class ArrayBuffer {
-
-  factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
-
-  /** @domName ArrayBuffer.byteLength */
-  int get byteLength;
-
-  /** @domName ArrayBuffer.slice */
-  ArrayBuffer slice(int begin, [int end]);
-}
-
-class _ArrayBufferImpl implements ArrayBuffer native "*ArrayBuffer" {
-
-  final int byteLength;
-
-  _ArrayBufferImpl slice(int begin, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ArrayBufferView
-abstract class ArrayBufferView {
-
-  /** @domName ArrayBufferView.buffer */
-  ArrayBuffer get buffer;
-
-  /** @domName ArrayBufferView.byteLength */
-  int get byteLength;
-
-  /** @domName ArrayBufferView.byteOffset */
-  int get byteOffset;
-}
-
-class _ArrayBufferViewImpl implements ArrayBufferView native "*ArrayBufferView" {
-
-  final _ArrayBufferImpl buffer;
-
-  final int byteLength;
-
-  final int byteOffset;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Attr
-abstract class Attr implements Node {
-
-  /** @domName Attr.isId */
-  bool get isId;
-
-  /** @domName Attr.name */
-  String get name;
-
-  /** @domName Attr.ownerElement */
-  Element get ownerElement;
-
-  /** @domName Attr.specified */
-  bool get specified;
-
-  /** @domName Attr.value */
-  String value;
-}
-
-class _AttrImpl extends _NodeImpl implements Attr native "*Attr" {
-
-  final bool isId;
-
-  final String name;
-
-  final _ElementImpl ownerElement;
-
-  final bool specified;
-
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioBuffer
-abstract class AudioBuffer {
-
-  /** @domName AudioBuffer.duration */
-  num get duration;
-
-  /** @domName AudioBuffer.gain */
-  num gain;
-
-  /** @domName AudioBuffer.length */
-  int get length;
-
-  /** @domName AudioBuffer.numberOfChannels */
-  int get numberOfChannels;
-
-  /** @domName AudioBuffer.sampleRate */
-  num get sampleRate;
-
-  /** @domName AudioBuffer.getChannelData */
-  Float32Array getChannelData(int channelIndex);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void AudioBufferCallback(AudioBuffer audioBuffer);
-
-class _AudioBufferImpl implements AudioBuffer native "*AudioBuffer" {
-
-  final num duration;
-
-  num gain;
-
-  final int length;
-
-  final int numberOfChannels;
-
-  final num sampleRate;
-
-  _Float32ArrayImpl getChannelData(int channelIndex) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioBufferSourceNode
-abstract class AudioBufferSourceNode implements AudioSourceNode {
-
-  static const int FINISHED_STATE = 3;
-
-  static const int PLAYING_STATE = 2;
-
-  static const int SCHEDULED_STATE = 1;
-
-  static const int UNSCHEDULED_STATE = 0;
-
-  /** @domName AudioBufferSourceNode.buffer */
-  AudioBuffer buffer;
-
-  /** @domName AudioBufferSourceNode.gain */
-  AudioGain get gain;
-
-  /** @domName AudioBufferSourceNode.loop */
-  bool loop;
-
-  /** @domName AudioBufferSourceNode.loopEnd */
-  num loopEnd;
-
-  /** @domName AudioBufferSourceNode.loopStart */
-  num loopStart;
-
-  /** @domName AudioBufferSourceNode.playbackRate */
-  AudioParam get playbackRate;
-
-  /** @domName AudioBufferSourceNode.playbackState */
-  int get playbackState;
-
-  /** @domName AudioBufferSourceNode.start */
-  void start(num when, [num grainOffset, num grainDuration]);
-
-  /** @domName AudioBufferSourceNode.stop */
-  void stop(num when);
-}
-// 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 _AudioBufferSourceNodeImpl extends _AudioSourceNodeImpl implements AudioBufferSourceNode native "*AudioBufferSourceNode" {
-
-  // TODO(efortuna): Remove these methods when Chrome stable also uses start
-  // instead of noteOn.
-  void start(num when, [num grainOffset, num grainDuration]) {
-    if (JS('bool', '!!#.start', this)) {
-      if (?grainDuration) {
-        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (?grainOffset) {
-        JS('void', '#.start(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.start(#)', this, when);
-      }
-    } else {
-      if (?grainDuration) {
-        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (?grainOffset) {
-        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.noteOn(#)', this, when);
-      }
-    }
-  }
-
-  void stop(num when) {
-    if (JS('bool', '!!#.stop', this)) {
-      JS('void', '#.stop(#)', this, when);
-    } else {
-      JS('void', '#.noteOff(#)', this, when);
-    }
-  }
-
-  _AudioBufferImpl buffer;
-
-  final _AudioGainImpl gain;
-
-  bool loop;
-
-  num loopEnd;
-
-  num loopStart;
-
-  final _AudioParamImpl playbackRate;
-
-  final int playbackState;
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName AudioContext
-abstract class AudioContext implements EventTarget {
-  factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  AudioContextEvents get on;
-
-  /** @domName AudioContext.activeSourceCount */
-  int get activeSourceCount;
-
-  /** @domName AudioContext.currentTime */
-  num get currentTime;
-
-  /** @domName AudioContext.destination */
-  AudioDestinationNode get destination;
-
-  /** @domName AudioContext.listener */
-  AudioListener get listener;
-
-  /** @domName AudioContext.sampleRate */
-  num get sampleRate;
-
-  /** @domName AudioContext.createAnalyser */
-  AnalyserNode createAnalyser();
-
-  /** @domName AudioContext.createBiquadFilter */
-  BiquadFilterNode createBiquadFilter();
-
-  /** @domName AudioContext.createBuffer */
-  AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]);
-
-  /** @domName AudioContext.createBufferSource */
-  AudioBufferSourceNode createBufferSource();
-
-  /** @domName AudioContext.createChannelMerger */
-  ChannelMergerNode createChannelMerger([int numberOfInputs]);
-
-  /** @domName AudioContext.createChannelSplitter */
-  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]);
-
-  /** @domName AudioContext.createConvolver */
-  ConvolverNode createConvolver();
-
-  /** @domName AudioContext.createDelay */
-  DelayNode createDelay([num maxDelayTime]);
-
-  /** @domName AudioContext.createDynamicsCompressor */
-  DynamicsCompressorNode createDynamicsCompressor();
-
-  /** @domName AudioContext.createGain */
-  GainNode createGain();
-
-  /** @domName AudioContext.createMediaElementSource */
-  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement);
-
-  /** @domName AudioContext.createMediaStreamSource */
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
-
-  /** @domName AudioContext.createOscillator */
-  OscillatorNode createOscillator();
-
-  /** @domName AudioContext.createPanner */
-  PannerNode createPanner();
-
-  /** @domName AudioContext.createScriptProcessor */
-  ScriptProcessorNode createScriptProcessor(int bufferSize, [int numberOfInputChannels, int numberOfOutputChannels]);
-
-  /** @domName AudioContext.createWaveShaper */
-  WaveShaperNode createWaveShaper();
-
-  /** @domName AudioContext.createWaveTable */
-  WaveTable createWaveTable(Float32Array real, Float32Array imag);
-
-  /** @domName AudioContext.decodeAudioData */
-  void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]);
-
-  /** @domName AudioContext.startRendering */
-  void startRendering();
-}
-
-abstract class AudioContextEvents implements Events {
-
-  EventListenerList get complete;
-}
-
-class _AudioContextImpl extends _EventTargetImpl implements AudioContext native "*AudioContext" {
-
-  _AudioContextEventsImpl get on =>
-    new _AudioContextEventsImpl(this);
-
-  final int activeSourceCount;
-
-  final num currentTime;
-
-  final _AudioDestinationNodeImpl destination;
-
-  final _AudioListenerImpl listener;
-
-  final num sampleRate;
-
-  _AnalyserNodeImpl createAnalyser() native;
-
-  _BiquadFilterNodeImpl createBiquadFilter() native;
-
-  _AudioBufferImpl createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]) native;
-
-  _AudioBufferSourceNodeImpl createBufferSource() native;
-
-  _ChannelMergerNodeImpl createChannelMerger([int numberOfInputs]) native;
-
-  _ChannelSplitterNodeImpl createChannelSplitter([int numberOfOutputs]) native;
-
-  _ConvolverNodeImpl createConvolver() native;
-
-  _DelayNodeImpl createDelay([num maxDelayTime]) native;
-
-  _DynamicsCompressorNodeImpl createDynamicsCompressor() native;
-
-  _GainNodeImpl createGain() native;
-
-  _MediaElementAudioSourceNodeImpl createMediaElementSource(_MediaElementImpl mediaElement) native;
-
-  _MediaStreamAudioSourceNodeImpl createMediaStreamSource(_MediaStreamImpl mediaStream) native;
-
-  _OscillatorNodeImpl createOscillator() native;
-
-  _PannerNodeImpl createPanner() native;
-
-  _ScriptProcessorNodeImpl createScriptProcessor(int bufferSize, [int numberOfInputChannels, int numberOfOutputChannels]) native;
-
-  _WaveShaperNodeImpl createWaveShaper() native;
-
-  _WaveTableImpl createWaveTable(_Float32ArrayImpl real, _Float32ArrayImpl imag) native;
-
-  void decodeAudioData(_ArrayBufferImpl audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native;
-
-  void startRendering() native;
-}
-
-class _AudioContextEventsImpl extends _EventsImpl implements AudioContextEvents {
-  _AudioContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get complete => this['complete'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioDestinationNode
-abstract class AudioDestinationNode implements AudioNode {
-
-  /** @domName AudioDestinationNode.numberOfChannels */
-  int get numberOfChannels;
-}
-
-class _AudioDestinationNodeImpl extends _AudioNodeImpl implements AudioDestinationNode native "*AudioDestinationNode" {
-
-  final int numberOfChannels;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLAudioElement
-abstract class AudioElement implements MediaElement {
-
-  factory AudioElement([String src]) {
-    if (!?src) {
-      return _AudioElementFactoryProvider.createAudioElement();
-    }
-    return _AudioElementFactoryProvider.createAudioElement(src);
-  }
-}
-
-class _AudioElementImpl extends _MediaElementImpl implements AudioElement native "*HTMLAudioElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioGain
-abstract class AudioGain implements AudioParam {
-}
-
-class _AudioGainImpl extends _AudioParamImpl implements AudioGain native "*AudioGain" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioListener
-abstract class AudioListener {
-
-  /** @domName AudioListener.dopplerFactor */
-  num dopplerFactor;
-
-  /** @domName AudioListener.speedOfSound */
-  num speedOfSound;
-
-  /** @domName AudioListener.setOrientation */
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp);
-
-  /** @domName AudioListener.setPosition */
-  void setPosition(num x, num y, num z);
-
-  /** @domName AudioListener.setVelocity */
-  void setVelocity(num x, num y, num z);
-}
-
-class _AudioListenerImpl implements AudioListener native "*AudioListener" {
-
-  num dopplerFactor;
-
-  num speedOfSound;
-
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
-
-  void setPosition(num x, num y, num z) native;
-
-  void setVelocity(num x, num y, num z) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioNode
-abstract class AudioNode {
-
-  /** @domName AudioNode.context */
-  AudioContext get context;
-
-  /** @domName AudioNode.numberOfInputs */
-  int get numberOfInputs;
-
-  /** @domName AudioNode.numberOfOutputs */
-  int get numberOfOutputs;
-
-  /** @domName AudioNode.connect */
-  void connect(destination, int output, [int input]);
-
-  /** @domName AudioNode.disconnect */
-  void disconnect(int output);
-}
-
-class _AudioNodeImpl implements AudioNode native "*AudioNode" {
-
-  final _AudioContextImpl context;
-
-  final int numberOfInputs;
-
-  final int numberOfOutputs;
-
-  void connect(destination, int output, [int input]) native;
-
-  void disconnect(int output) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioParam
-abstract class AudioParam {
-
-  /** @domName AudioParam.defaultValue */
-  num get defaultValue;
-
-  /** @domName AudioParam.maxValue */
-  num get maxValue;
-
-  /** @domName AudioParam.minValue */
-  num get minValue;
-
-  /** @domName AudioParam.name */
-  String get name;
-
-  /** @domName AudioParam.units */
-  int get units;
-
-  /** @domName AudioParam.value */
-  num value;
-
-  /** @domName AudioParam.cancelScheduledValues */
-  void cancelScheduledValues(num startTime);
-
-  /** @domName AudioParam.exponentialRampToValueAtTime */
-  void exponentialRampToValueAtTime(num value, num time);
-
-  /** @domName AudioParam.linearRampToValueAtTime */
-  void linearRampToValueAtTime(num value, num time);
-
-  /** @domName AudioParam.setTargetAtTime */
-  void setTargetAtTime(num target, num time, num timeConstant);
-
-  /** @domName AudioParam.setValueAtTime */
-  void setValueAtTime(num value, num time);
-
-  /** @domName AudioParam.setValueCurveAtTime */
-  void setValueCurveAtTime(Float32Array values, num time, num duration);
-}
-
-class _AudioParamImpl implements AudioParam native "*AudioParam" {
-
-  final num defaultValue;
-
-  final num maxValue;
-
-  final num minValue;
-
-  final String name;
-
-  final int units;
-
-  num value;
-
-  void cancelScheduledValues(num startTime) native;
-
-  void exponentialRampToValueAtTime(num value, num time) native;
-
-  void linearRampToValueAtTime(num value, num time) native;
-
-  void setTargetAtTime(num target, num time, num timeConstant) native;
-
-  void setValueAtTime(num value, num time) native;
-
-  void setValueCurveAtTime(_Float32ArrayImpl values, num time, num duration) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioProcessingEvent
-abstract class AudioProcessingEvent implements Event {
-
-  /** @domName AudioProcessingEvent.inputBuffer */
-  AudioBuffer get inputBuffer;
-
-  /** @domName AudioProcessingEvent.outputBuffer */
-  AudioBuffer get outputBuffer;
-}
-
-class _AudioProcessingEventImpl extends _EventImpl implements AudioProcessingEvent native "*AudioProcessingEvent" {
-
-  final _AudioBufferImpl inputBuffer;
-
-  final _AudioBufferImpl outputBuffer;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName AudioSourceNode
-abstract class AudioSourceNode implements AudioNode {
-}
-
-class _AudioSourceNodeImpl extends _AudioNodeImpl implements AudioSourceNode native "*AudioSourceNode" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLBRElement
-abstract class BRElement implements Element {
-
-  factory BRElement() => _Elements.createBRElement();
-
-  /** @domName HTMLBRElement.clear */
-  String clear;
-}
-
-class _BRElementImpl extends _ElementImpl implements BRElement native "*HTMLBRElement" {
-
-  String clear;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName BarInfo
-abstract class BarInfo {
-
-  /** @domName BarInfo.visible */
-  bool get visible;
-}
-
-class _BarInfoImpl implements BarInfo native "*BarInfo" {
-
-  final bool visible;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLBaseElement
-abstract class BaseElement implements Element {
-
-  factory BaseElement() => _Elements.createBaseElement();
-
-  /** @domName HTMLBaseElement.href */
-  String href;
-
-  /** @domName HTMLBaseElement.target */
-  String target;
-}
-
-class _BaseElementImpl extends _ElementImpl implements BaseElement native "*HTMLBaseElement" {
-
-  String href;
-
-  String target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLBaseFontElement
-abstract class BaseFontElement implements Element {
-
-  /** @domName HTMLBaseFontElement.color */
-  String color;
-
-  /** @domName HTMLBaseFontElement.face */
-  String face;
-
-  /** @domName HTMLBaseFontElement.size */
-  int size;
-}
-
-class _BaseFontElementImpl extends _ElementImpl implements BaseFontElement native "*HTMLBaseFontElement" {
-
-  String color;
-
-  String face;
-
-  int size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName BatteryManager
-abstract class BatteryManager implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  BatteryManagerEvents get on;
-
-  /** @domName BatteryManager.charging */
-  bool get charging;
-
-  /** @domName BatteryManager.chargingTime */
-  num get chargingTime;
-
-  /** @domName BatteryManager.dischargingTime */
-  num get dischargingTime;
-
-  /** @domName BatteryManager.level */
-  num get level;
-
-  /** @domName BatteryManager.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName BatteryManager.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName BatteryManager.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class BatteryManagerEvents implements Events {
-
-  EventListenerList get chargingChange;
-
-  EventListenerList get chargingTimeChange;
-
-  EventListenerList get dischargingTimeChange;
-
-  EventListenerList get levelChange;
-}
-
-class _BatteryManagerImpl extends _EventTargetImpl implements BatteryManager native "*BatteryManager" {
-
-  _BatteryManagerEventsImpl get on =>
-    new _BatteryManagerEventsImpl(this);
-
-  final bool charging;
-
-  final num chargingTime;
-
-  final num dischargingTime;
-
-  final num level;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _BatteryManagerEventsImpl extends _EventsImpl implements BatteryManagerEvents {
-  _BatteryManagerEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get chargingChange => this['chargingchange'];
-
-  EventListenerList get chargingTimeChange => this['chargingtimechange'];
-
-  EventListenerList get dischargingTimeChange => this['dischargingtimechange'];
-
-  EventListenerList get levelChange => this['levelchange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName BeforeLoadEvent
-abstract class BeforeLoadEvent implements Event {
-
-  /** @domName BeforeLoadEvent.url */
-  String get url;
-}
-
-class _BeforeLoadEventImpl extends _EventImpl implements BeforeLoadEvent native "*BeforeLoadEvent" {
-
-  final String url;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName BiquadFilterNode
-abstract class BiquadFilterNode implements AudioNode {
-
-  static const int ALLPASS = 7;
-
-  static const int BANDPASS = 2;
-
-  static const int HIGHPASS = 1;
-
-  static const int HIGHSHELF = 4;
-
-  static const int LOWPASS = 0;
-
-  static const int LOWSHELF = 3;
-
-  static const int NOTCH = 6;
-
-  static const int PEAKING = 5;
-
-  /** @domName BiquadFilterNode.Q */
-  AudioParam get Q;
-
-  /** @domName BiquadFilterNode.frequency */
-  AudioParam get frequency;
-
-  /** @domName BiquadFilterNode.gain */
-  AudioParam get gain;
-
-  /** @domName BiquadFilterNode.type */
-  int type;
-
-  /** @domName BiquadFilterNode.getFrequencyResponse */
-  void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
-}
-
-class _BiquadFilterNodeImpl extends _AudioNodeImpl implements BiquadFilterNode native "*BiquadFilterNode" {
-
-  final _AudioParamImpl Q;
-
-  final _AudioParamImpl frequency;
-
-  final _AudioParamImpl gain;
-
-  int type;
-
-  void getFrequencyResponse(_Float32ArrayImpl frequencyHz, _Float32ArrayImpl magResponse, _Float32ArrayImpl phaseResponse) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Blob
-abstract class Blob {
-
-  factory Blob(List blobParts, [String type, String endings]) {
-    if (!?type) {
-      return _BlobFactoryProvider.createBlob(blobParts);
-    }
-    if (!?endings) {
-      return _BlobFactoryProvider.createBlob(blobParts, type);
-    }
-    return _BlobFactoryProvider.createBlob(blobParts, type, endings);
-  }
-
-  /** @domName Blob.size */
-  int get size;
-
-  /** @domName Blob.type */
-  String get type;
-
-  /** @domName Blob.slice */
-  Blob slice([int start, int end, String contentType]);
-}
-
-class _BlobImpl implements Blob native "*Blob" {
-
-  final int size;
-
-  final String type;
-
-  _BlobImpl slice([int start, int end, String contentType]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLBodyElement
-abstract class BodyElement implements Element {
-
-  factory BodyElement() => _Elements.createBodyElement();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  BodyElementEvents get on;
-
-  /** @domName HTMLBodyElement.aLink */
-  String aLink;
-
-  /** @domName HTMLBodyElement.background */
-  String background;
-
-  /** @domName HTMLBodyElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLBodyElement.link */
-  String link;
-
-  /** @domName HTMLBodyElement.vLink */
-  String vLink;
-}
-
-abstract class BodyElementEvents implements ElementEvents {
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get load;
-
-  EventListenerList get message;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get popState;
-
-  EventListenerList get resize;
-
-  EventListenerList get storage;
-
-  EventListenerList get unload;
-}
-
-class _BodyElementImpl extends _ElementImpl implements BodyElement native "*HTMLBodyElement" {
-
-  _BodyElementEventsImpl get on =>
-    new _BodyElementEventsImpl(this);
-
-  String aLink;
-
-  String background;
-
-  String bgColor;
-
-  String link;
-
-  String vLink;
-}
-
-class _BodyElementEventsImpl extends _ElementEventsImpl implements BodyElementEvents {
-  _BodyElementEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get beforeUnload => this['beforeunload'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get hashChange => this['hashchange'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get offline => this['offline'];
-
-  EventListenerList get online => this['online'];
-
-  EventListenerList get popState => this['popstate'];
-
-  EventListenerList get resize => this['resize'];
-
-  EventListenerList get storage => this['storage'];
-
-  EventListenerList get unload => this['unload'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLButtonElement
-abstract class ButtonElement implements Element {
-
-  factory ButtonElement() => _Elements.createButtonElement();
-
-  /** @domName HTMLButtonElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLButtonElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLButtonElement.form */
-  FormElement get form;
-
-  /** @domName HTMLButtonElement.formAction */
-  String formAction;
-
-  /** @domName HTMLButtonElement.formEnctype */
-  String formEnctype;
-
-  /** @domName HTMLButtonElement.formMethod */
-  String formMethod;
-
-  /** @domName HTMLButtonElement.formNoValidate */
-  bool formNoValidate;
-
-  /** @domName HTMLButtonElement.formTarget */
-  String formTarget;
-
-  /** @domName HTMLButtonElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLButtonElement.name */
-  String name;
-
-  /** @domName HTMLButtonElement.type */
-  String type;
-
-  /** @domName HTMLButtonElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLButtonElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLButtonElement.value */
-  String value;
-
-  /** @domName HTMLButtonElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLButtonElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLButtonElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-
-class _ButtonElementImpl extends _ElementImpl implements ButtonElement native "*HTMLButtonElement" {
-
-  bool autofocus;
-
-  bool disabled;
-
-  final _FormElementImpl form;
-
-  String formAction;
-
-  String formEnctype;
-
-  String formMethod;
-
-  bool formNoValidate;
-
-  String formTarget;
-
-  final List<Node> labels;
-
-  String name;
-
-  String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  String value;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CDATASection
-abstract class CDATASection implements Text {
-}
-
-class _CDATASectionImpl extends _TextImpl implements CDATASection native "*CDATASection" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSCharsetRule
-abstract class CSSCharsetRule implements CSSRule {
-
-  /** @domName CSSCharsetRule.encoding */
-  String encoding;
-}
-
-class _CSSCharsetRuleImpl extends _CSSRuleImpl implements CSSCharsetRule native "*CSSCharsetRule" {
-
-  String encoding;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSFontFaceRule
-abstract class CSSFontFaceRule implements CSSRule {
-
-  /** @domName CSSFontFaceRule.style */
-  CSSStyleDeclaration get style;
-}
-
-class _CSSFontFaceRuleImpl extends _CSSRuleImpl implements CSSFontFaceRule native "*CSSFontFaceRule" {
-
-  final _CSSStyleDeclarationImpl style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSImportRule
-abstract class CSSImportRule implements CSSRule {
-
-  /** @domName CSSImportRule.href */
-  String get href;
-
-  /** @domName CSSImportRule.media */
-  MediaList get media;
-
-  /** @domName CSSImportRule.styleSheet */
-  CSSStyleSheet get styleSheet;
-}
-
-class _CSSImportRuleImpl extends _CSSRuleImpl implements CSSImportRule native "*CSSImportRule" {
-
-  final String href;
-
-  final _MediaListImpl media;
-
-  final _CSSStyleSheetImpl styleSheet;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSKeyframeRule
-abstract class CSSKeyframeRule implements CSSRule {
-
-  /** @domName WebKitCSSKeyframeRule.keyText */
-  String keyText;
-
-  /** @domName WebKitCSSKeyframeRule.style */
-  CSSStyleDeclaration get style;
-}
-
-class _CSSKeyframeRuleImpl extends _CSSRuleImpl implements CSSKeyframeRule native "*WebKitCSSKeyframeRule" {
-
-  String keyText;
-
-  final _CSSStyleDeclarationImpl style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSKeyframesRule
-abstract class CSSKeyframesRule implements CSSRule {
-
-  /** @domName WebKitCSSKeyframesRule.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName WebKitCSSKeyframesRule.name */
-  String name;
-
-  /** @domName WebKitCSSKeyframesRule.deleteRule */
-  void deleteRule(String key);
-
-  /** @domName WebKitCSSKeyframesRule.findRule */
-  CSSKeyframeRule findRule(String key);
-
-  /** @domName WebKitCSSKeyframesRule.insertRule */
-  void insertRule(String rule);
-}
-
-class _CSSKeyframesRuleImpl extends _CSSRuleImpl implements CSSKeyframesRule native "*WebKitCSSKeyframesRule" {
-
-  final _CSSRuleListImpl cssRules;
-
-  String name;
-
-  void deleteRule(String key) native;
-
-  _CSSKeyframeRuleImpl findRule(String key) native;
-
-  void insertRule(String rule) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSMatrix
-abstract class CSSMatrix {
-
-  factory CSSMatrix([String cssValue]) {
-    if (!?cssValue) {
-      return _CSSMatrixFactoryProvider.createCSSMatrix();
-    }
-    return _CSSMatrixFactoryProvider.createCSSMatrix(cssValue);
-  }
-
-  /** @domName WebKitCSSMatrix.a */
-  num a;
-
-  /** @domName WebKitCSSMatrix.b */
-  num b;
-
-  /** @domName WebKitCSSMatrix.c */
-  num c;
-
-  /** @domName WebKitCSSMatrix.d */
-  num d;
-
-  /** @domName WebKitCSSMatrix.e */
-  num e;
-
-  /** @domName WebKitCSSMatrix.f */
-  num f;
-
-  /** @domName WebKitCSSMatrix.m11 */
-  num m11;
-
-  /** @domName WebKitCSSMatrix.m12 */
-  num m12;
-
-  /** @domName WebKitCSSMatrix.m13 */
-  num m13;
-
-  /** @domName WebKitCSSMatrix.m14 */
-  num m14;
-
-  /** @domName WebKitCSSMatrix.m21 */
-  num m21;
-
-  /** @domName WebKitCSSMatrix.m22 */
-  num m22;
-
-  /** @domName WebKitCSSMatrix.m23 */
-  num m23;
-
-  /** @domName WebKitCSSMatrix.m24 */
-  num m24;
-
-  /** @domName WebKitCSSMatrix.m31 */
-  num m31;
-
-  /** @domName WebKitCSSMatrix.m32 */
-  num m32;
-
-  /** @domName WebKitCSSMatrix.m33 */
-  num m33;
-
-  /** @domName WebKitCSSMatrix.m34 */
-  num m34;
-
-  /** @domName WebKitCSSMatrix.m41 */
-  num m41;
-
-  /** @domName WebKitCSSMatrix.m42 */
-  num m42;
-
-  /** @domName WebKitCSSMatrix.m43 */
-  num m43;
-
-  /** @domName WebKitCSSMatrix.m44 */
-  num m44;
-
-  /** @domName WebKitCSSMatrix.inverse */
-  CSSMatrix inverse();
-
-  /** @domName WebKitCSSMatrix.multiply */
-  CSSMatrix multiply(CSSMatrix secondMatrix);
-
-  /** @domName WebKitCSSMatrix.rotate */
-  CSSMatrix rotate(num rotX, num rotY, num rotZ);
-
-  /** @domName WebKitCSSMatrix.rotateAxisAngle */
-  CSSMatrix rotateAxisAngle(num x, num y, num z, num angle);
-
-  /** @domName WebKitCSSMatrix.scale */
-  CSSMatrix scale(num scaleX, num scaleY, num scaleZ);
-
-  /** @domName WebKitCSSMatrix.setMatrixValue */
-  void setMatrixValue(String string);
-
-  /** @domName WebKitCSSMatrix.skewX */
-  CSSMatrix skewX(num angle);
-
-  /** @domName WebKitCSSMatrix.skewY */
-  CSSMatrix skewY(num angle);
-
-  /** @domName WebKitCSSMatrix.toString */
-  String toString();
-
-  /** @domName WebKitCSSMatrix.translate */
-  CSSMatrix translate(num x, num y, num z);
-}
-
-class _CSSMatrixImpl implements CSSMatrix native "*WebKitCSSMatrix" {
-
-  num a;
-
-  num b;
-
-  num c;
-
-  num d;
-
-  num e;
-
-  num f;
-
-  num m11;
-
-  num m12;
-
-  num m13;
-
-  num m14;
-
-  num m21;
-
-  num m22;
-
-  num m23;
-
-  num m24;
-
-  num m31;
-
-  num m32;
-
-  num m33;
-
-  num m34;
-
-  num m41;
-
-  num m42;
-
-  num m43;
-
-  num m44;
-
-  _CSSMatrixImpl inverse() native;
-
-  _CSSMatrixImpl multiply(_CSSMatrixImpl secondMatrix) native;
-
-  _CSSMatrixImpl rotate(num rotX, num rotY, num rotZ) native;
-
-  _CSSMatrixImpl rotateAxisAngle(num x, num y, num z, num angle) native;
-
-  _CSSMatrixImpl scale(num scaleX, num scaleY, num scaleZ) native;
-
-  void setMatrixValue(String string) native;
-
-  _CSSMatrixImpl skewX(num angle) native;
-
-  _CSSMatrixImpl skewY(num angle) native;
-
-  String toString() native;
-
-  _CSSMatrixImpl translate(num x, num y, num z) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSMediaRule
-abstract class CSSMediaRule implements CSSRule {
-
-  /** @domName CSSMediaRule.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName CSSMediaRule.media */
-  MediaList get media;
-
-  /** @domName CSSMediaRule.deleteRule */
-  void deleteRule(int index);
-
-  /** @domName CSSMediaRule.insertRule */
-  int insertRule(String rule, int index);
-}
-
-class _CSSMediaRuleImpl extends _CSSRuleImpl implements CSSMediaRule native "*CSSMediaRule" {
-
-  final _CSSRuleListImpl cssRules;
-
-  final _MediaListImpl media;
-
-  void deleteRule(int index) native;
-
-  int insertRule(String rule, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSPageRule
-abstract class CSSPageRule implements CSSRule {
-
-  /** @domName CSSPageRule.selectorText */
-  String selectorText;
-
-  /** @domName CSSPageRule.style */
-  CSSStyleDeclaration get style;
-}
-
-class _CSSPageRuleImpl extends _CSSRuleImpl implements CSSPageRule native "*CSSPageRule" {
-
-  String selectorText;
-
-  final _CSSStyleDeclarationImpl style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSPrimitiveValue
-abstract class CSSPrimitiveValue implements CSSValue {
-
-  static const int CSS_ATTR = 22;
-
-  static const int CSS_CM = 6;
-
-  static const int CSS_COUNTER = 23;
-
-  static const int CSS_DEG = 11;
-
-  static const int CSS_DIMENSION = 18;
-
-  static const int CSS_EMS = 3;
-
-  static const int CSS_EXS = 4;
-
-  static const int CSS_GRAD = 13;
-
-  static const int CSS_HZ = 16;
-
-  static const int CSS_IDENT = 21;
-
-  static const int CSS_IN = 8;
-
-  static const int CSS_KHZ = 17;
-
-  static const int CSS_MM = 7;
-
-  static const int CSS_MS = 14;
-
-  static const int CSS_NUMBER = 1;
-
-  static const int CSS_PC = 10;
-
-  static const int CSS_PERCENTAGE = 2;
-
-  static const int CSS_PT = 9;
-
-  static const int CSS_PX = 5;
-
-  static const int CSS_RAD = 12;
-
-  static const int CSS_RECT = 24;
-
-  static const int CSS_RGBCOLOR = 25;
-
-  static const int CSS_S = 15;
-
-  static const int CSS_STRING = 19;
-
-  static const int CSS_UNKNOWN = 0;
-
-  static const int CSS_URI = 20;
-
-  static const int CSS_VH = 27;
-
-  static const int CSS_VMIN = 28;
-
-  static const int CSS_VW = 26;
-
-  /** @domName CSSPrimitiveValue.primitiveType */
-  int get primitiveType;
-
-  /** @domName CSSPrimitiveValue.getCounterValue */
-  Counter getCounterValue();
-
-  /** @domName CSSPrimitiveValue.getFloatValue */
-  num getFloatValue(int unitType);
-
-  /** @domName CSSPrimitiveValue.getRGBColorValue */
-  RGBColor getRGBColorValue();
-
-  /** @domName CSSPrimitiveValue.getRectValue */
-  Rect getRectValue();
-
-  /** @domName CSSPrimitiveValue.getStringValue */
-  String getStringValue();
-
-  /** @domName CSSPrimitiveValue.setFloatValue */
-  void setFloatValue(int unitType, num floatValue);
-
-  /** @domName CSSPrimitiveValue.setStringValue */
-  void setStringValue(int stringType, String stringValue);
-}
-
-class _CSSPrimitiveValueImpl extends _CSSValueImpl implements CSSPrimitiveValue native "*CSSPrimitiveValue" {
-
-  final int primitiveType;
-
-  _CounterImpl getCounterValue() native;
-
-  num getFloatValue(int unitType) native;
-
-  _RGBColorImpl getRGBColorValue() native;
-
-  _RectImpl getRectValue() native;
-
-  String getStringValue() native;
-
-  void setFloatValue(int unitType, num floatValue) native;
-
-  void setStringValue(int stringType, String stringValue) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSRule
-abstract class CSSRule {
-
-  static const int CHARSET_RULE = 2;
-
-  static const int FONT_FACE_RULE = 5;
-
-  static const int IMPORT_RULE = 3;
-
-  static const int MEDIA_RULE = 4;
-
-  static const int PAGE_RULE = 6;
-
-  static const int STYLE_RULE = 1;
-
-  static const int UNKNOWN_RULE = 0;
-
-  static const int WEBKIT_KEYFRAMES_RULE = 7;
-
-  static const int WEBKIT_KEYFRAME_RULE = 8;
-
-  /** @domName CSSRule.cssText */
-  String cssText;
-
-  /** @domName CSSRule.parentRule */
-  CSSRule get parentRule;
-
-  /** @domName CSSRule.parentStyleSheet */
-  CSSStyleSheet get parentStyleSheet;
-
-  /** @domName CSSRule.type */
-  int get type;
-}
-
-class _CSSRuleImpl implements CSSRule native "*CSSRule" {
-
-  String cssText;
-
-  final _CSSRuleImpl parentRule;
-
-  final _CSSStyleSheetImpl parentStyleSheet;
-
-  final int type;
-}
-
-class _CSSRuleListImpl implements List<CSSRule>, JavaScriptIndexingBehavior native "*CSSRuleList" {
-
-  final int length;
-
-  _CSSRuleImpl operator[](int index) => JS("_CSSRuleImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _CSSRuleImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<CSSRule> mixins.
-  // CSSRule is the element type.
-
-  // From Iterable<CSSRule>:
-
-  Iterator<CSSRule> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<CSSRule>(this);
-  }
-
-  // From Collection<CSSRule>:
-
-  void add(CSSRule value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(CSSRule value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<CSSRule> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(CSSRule element) => _Collections.contains(this, element);
-
-  void forEach(void f(CSSRule element)) => _Collections.forEach(this, f);
-
-  Collection map(f(CSSRule element)) => _Collections.map(this, [], f);
-
-  Collection<CSSRule> filter(bool f(CSSRule element)) =>
-     _Collections.filter(this, <CSSRule>[], f);
-
-  bool every(bool f(CSSRule element)) => _Collections.every(this, f);
-
-  bool some(bool f(CSSRule element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<CSSRule>:
-
-  void sort([Comparator<CSSRule> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(CSSRule element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(CSSRule element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  CSSRule get last => this[length - 1];
-
-  CSSRule removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<CSSRule> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <CSSRule>[]);
-
-  // -- end List<CSSRule> mixins.
-
-  _CSSRuleImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName CSSStyleDeclaration
-abstract class CSSStyleDeclaration  {
-  factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
-  factory CSSStyleDeclaration.css(String css) => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration_css(css);
-
-
-  /** @domName CSSStyleDeclaration.cssText */
-  String cssText;
-
-  /** @domName CSSStyleDeclaration.length */
-  int get length;
-
-  /** @domName CSSStyleDeclaration.parentRule */
-  CSSRule get parentRule;
-
-  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
-  CSSValue getPropertyCSSValue(String propertyName);
-
-  /** @domName CSSStyleDeclaration.getPropertyPriority */
-  String getPropertyPriority(String propertyName);
-
-  /** @domName CSSStyleDeclaration.getPropertyShorthand */
-  String getPropertyShorthand(String propertyName);
-
-  /** @domName CSSStyleDeclaration.isPropertyImplicit */
-  bool isPropertyImplicit(String propertyName);
-
-  /** @domName CSSStyleDeclaration.item */
-  String item(int index);
-
-  /** @domName CSSStyleDeclaration.removeProperty */
-  String removeProperty(String propertyName);
-
-  /** @domName CSSStyleDeclaration.setProperty */
-  void setProperty(String propertyName, String value, [String priority]);
-
-
-  /** Gets the value of "animation" */
-  String get animation;
-
-  /** Sets the value of "animation" */
-  void set animation(var value);
-
-  /** Gets the value of "animation-delay" */
-  String get animationDelay;
-
-  /** Sets the value of "animation-delay" */
-  void set animationDelay(var value);
-
-  /** Gets the value of "animation-direction" */
-  String get animationDirection;
-
-  /** Sets the value of "animation-direction" */
-  void set animationDirection(var value);
-
-  /** Gets the value of "animation-duration" */
-  String get animationDuration;
-
-  /** Sets the value of "animation-duration" */
-  void set animationDuration(var value);
-
-  /** Gets the value of "animation-fill-mode" */
-  String get animationFillMode;
-
-  /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value);
-
-  /** Gets the value of "animation-iteration-count" */
-  String get animationIterationCount;
-
-  /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value);
-
-  /** Gets the value of "animation-name" */
-  String get animationName;
-
-  /** Sets the value of "animation-name" */
-  void set animationName(var value);
-
-  /** Gets the value of "animation-play-state" */
-  String get animationPlayState;
-
-  /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value);
-
-  /** Gets the value of "animation-timing-function" */
-  String get animationTimingFunction;
-
-  /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value);
-
-  /** Gets the value of "appearance" */
-  String get appearance;
-
-  /** Sets the value of "appearance" */
-  void set appearance(var value);
-
-  /** Gets the value of "backface-visibility" */
-  String get backfaceVisibility;
-
-  /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value);
-
-  /** Gets the value of "background" */
-  String get background;
-
-  /** Sets the value of "background" */
-  void set background(var value);
-
-  /** Gets the value of "background-attachment" */
-  String get backgroundAttachment;
-
-  /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value);
-
-  /** Gets the value of "background-clip" */
-  String get backgroundClip;
-
-  /** Sets the value of "background-clip" */
-  void set backgroundClip(var value);
-
-  /** Gets the value of "background-color" */
-  String get backgroundColor;
-
-  /** Sets the value of "background-color" */
-  void set backgroundColor(var value);
-
-  /** Gets the value of "background-composite" */
-  String get backgroundComposite;
-
-  /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value);
-
-  /** Gets the value of "background-image" */
-  String get backgroundImage;
-
-  /** Sets the value of "background-image" */
-  void set backgroundImage(var value);
-
-  /** Gets the value of "background-origin" */
-  String get backgroundOrigin;
-
-  /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value);
-
-  /** Gets the value of "background-position" */
-  String get backgroundPosition;
-
-  /** Sets the value of "background-position" */
-  void set backgroundPosition(var value);
-
-  /** Gets the value of "background-position-x" */
-  String get backgroundPositionX;
-
-  /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value);
-
-  /** Gets the value of "background-position-y" */
-  String get backgroundPositionY;
-
-  /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value);
-
-  /** Gets the value of "background-repeat" */
-  String get backgroundRepeat;
-
-  /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value);
-
-  /** Gets the value of "background-repeat-x" */
-  String get backgroundRepeatX;
-
-  /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value);
-
-  /** Gets the value of "background-repeat-y" */
-  String get backgroundRepeatY;
-
-  /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value);
-
-  /** Gets the value of "background-size" */
-  String get backgroundSize;
-
-  /** Sets the value of "background-size" */
-  void set backgroundSize(var value);
-
-  /** Gets the value of "border" */
-  String get border;
-
-  /** Sets the value of "border" */
-  void set border(var value);
-
-  /** Gets the value of "border-after" */
-  String get borderAfter;
-
-  /** Sets the value of "border-after" */
-  void set borderAfter(var value);
-
-  /** Gets the value of "border-after-color" */
-  String get borderAfterColor;
-
-  /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value);
-
-  /** Gets the value of "border-after-style" */
-  String get borderAfterStyle;
-
-  /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value);
-
-  /** Gets the value of "border-after-width" */
-  String get borderAfterWidth;
-
-  /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value);
-
-  /** Gets the value of "border-before" */
-  String get borderBefore;
-
-  /** Sets the value of "border-before" */
-  void set borderBefore(var value);
-
-  /** Gets the value of "border-before-color" */
-  String get borderBeforeColor;
-
-  /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value);
-
-  /** Gets the value of "border-before-style" */
-  String get borderBeforeStyle;
-
-  /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value);
-
-  /** Gets the value of "border-before-width" */
-  String get borderBeforeWidth;
-
-  /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value);
-
-  /** Gets the value of "border-bottom" */
-  String get borderBottom;
-
-  /** Sets the value of "border-bottom" */
-  void set borderBottom(var value);
-
-  /** Gets the value of "border-bottom-color" */
-  String get borderBottomColor;
-
-  /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value);
-
-  /** Gets the value of "border-bottom-left-radius" */
-  String get borderBottomLeftRadius;
-
-  /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value);
-
-  /** Gets the value of "border-bottom-right-radius" */
-  String get borderBottomRightRadius;
-
-  /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value);
-
-  /** Gets the value of "border-bottom-style" */
-  String get borderBottomStyle;
-
-  /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value);
-
-  /** Gets the value of "border-bottom-width" */
-  String get borderBottomWidth;
-
-  /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value);
-
-  /** Gets the value of "border-collapse" */
-  String get borderCollapse;
-
-  /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value);
-
-  /** Gets the value of "border-color" */
-  String get borderColor;
-
-  /** Sets the value of "border-color" */
-  void set borderColor(var value);
-
-  /** Gets the value of "border-end" */
-  String get borderEnd;
-
-  /** Sets the value of "border-end" */
-  void set borderEnd(var value);
-
-  /** Gets the value of "border-end-color" */
-  String get borderEndColor;
-
-  /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value);
-
-  /** Gets the value of "border-end-style" */
-  String get borderEndStyle;
-
-  /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value);
-
-  /** Gets the value of "border-end-width" */
-  String get borderEndWidth;
-
-  /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value);
-
-  /** Gets the value of "border-fit" */
-  String get borderFit;
-
-  /** Sets the value of "border-fit" */
-  void set borderFit(var value);
-
-  /** Gets the value of "border-horizontal-spacing" */
-  String get borderHorizontalSpacing;
-
-  /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value);
-
-  /** Gets the value of "border-image" */
-  String get borderImage;
-
-  /** Sets the value of "border-image" */
-  void set borderImage(var value);
-
-  /** Gets the value of "border-image-outset" */
-  String get borderImageOutset;
-
-  /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value);
-
-  /** Gets the value of "border-image-repeat" */
-  String get borderImageRepeat;
-
-  /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value);
-
-  /** Gets the value of "border-image-slice" */
-  String get borderImageSlice;
-
-  /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value);
-
-  /** Gets the value of "border-image-source" */
-  String get borderImageSource;
-
-  /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value);
-
-  /** Gets the value of "border-image-width" */
-  String get borderImageWidth;
-
-  /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value);
-
-  /** Gets the value of "border-left" */
-  String get borderLeft;
-
-  /** Sets the value of "border-left" */
-  void set borderLeft(var value);
-
-  /** Gets the value of "border-left-color" */
-  String get borderLeftColor;
-
-  /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value);
-
-  /** Gets the value of "border-left-style" */
-  String get borderLeftStyle;
-
-  /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value);
-
-  /** Gets the value of "border-left-width" */
-  String get borderLeftWidth;
-
-  /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value);
-
-  /** Gets the value of "border-radius" */
-  String get borderRadius;
-
-  /** Sets the value of "border-radius" */
-  void set borderRadius(var value);
-
-  /** Gets the value of "border-right" */
-  String get borderRight;
-
-  /** Sets the value of "border-right" */
-  void set borderRight(var value);
-
-  /** Gets the value of "border-right-color" */
-  String get borderRightColor;
-
-  /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value);
-
-  /** Gets the value of "border-right-style" */
-  String get borderRightStyle;
-
-  /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value);
-
-  /** Gets the value of "border-right-width" */
-  String get borderRightWidth;
-
-  /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value);
-
-  /** Gets the value of "border-spacing" */
-  String get borderSpacing;
-
-  /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value);
-
-  /** Gets the value of "border-start" */
-  String get borderStart;
-
-  /** Sets the value of "border-start" */
-  void set borderStart(var value);
-
-  /** Gets the value of "border-start-color" */
-  String get borderStartColor;
-
-  /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value);
-
-  /** Gets the value of "border-start-style" */
-  String get borderStartStyle;
-
-  /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value);
-
-  /** Gets the value of "border-start-width" */
-  String get borderStartWidth;
-
-  /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value);
-
-  /** Gets the value of "border-style" */
-  String get borderStyle;
-
-  /** Sets the value of "border-style" */
-  void set borderStyle(var value);
-
-  /** Gets the value of "border-top" */
-  String get borderTop;
-
-  /** Sets the value of "border-top" */
-  void set borderTop(var value);
-
-  /** Gets the value of "border-top-color" */
-  String get borderTopColor;
-
-  /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value);
-
-  /** Gets the value of "border-top-left-radius" */
-  String get borderTopLeftRadius;
-
-  /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value);
-
-  /** Gets the value of "border-top-right-radius" */
-  String get borderTopRightRadius;
-
-  /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value);
-
-  /** Gets the value of "border-top-style" */
-  String get borderTopStyle;
-
-  /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value);
-
-  /** Gets the value of "border-top-width" */
-  String get borderTopWidth;
-
-  /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value);
-
-  /** Gets the value of "border-vertical-spacing" */
-  String get borderVerticalSpacing;
-
-  /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value);
-
-  /** Gets the value of "border-width" */
-  String get borderWidth;
-
-  /** Sets the value of "border-width" */
-  void set borderWidth(var value);
-
-  /** Gets the value of "bottom" */
-  String get bottom;
-
-  /** Sets the value of "bottom" */
-  void set bottom(var value);
-
-  /** Gets the value of "box-align" */
-  String get boxAlign;
-
-  /** Sets the value of "box-align" */
-  void set boxAlign(var value);
-
-  /** Gets the value of "box-direction" */
-  String get boxDirection;
-
-  /** Sets the value of "box-direction" */
-  void set boxDirection(var value);
-
-  /** Gets the value of "box-flex" */
-  String get boxFlex;
-
-  /** Sets the value of "box-flex" */
-  void set boxFlex(var value);
-
-  /** Gets the value of "box-flex-group" */
-  String get boxFlexGroup;
-
-  /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value);
-
-  /** Gets the value of "box-lines" */
-  String get boxLines;
-
-  /** Sets the value of "box-lines" */
-  void set boxLines(var value);
-
-  /** Gets the value of "box-ordinal-group" */
-  String get boxOrdinalGroup;
-
-  /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value);
-
-  /** Gets the value of "box-orient" */
-  String get boxOrient;
-
-  /** Sets the value of "box-orient" */
-  void set boxOrient(var value);
-
-  /** Gets the value of "box-pack" */
-  String get boxPack;
-
-  /** Sets the value of "box-pack" */
-  void set boxPack(var value);
-
-  /** Gets the value of "box-reflect" */
-  String get boxReflect;
-
-  /** Sets the value of "box-reflect" */
-  void set boxReflect(var value);
-
-  /** Gets the value of "box-shadow" */
-  String get boxShadow;
-
-  /** Sets the value of "box-shadow" */
-  void set boxShadow(var value);
-
-  /** Gets the value of "box-sizing" */
-  String get boxSizing;
-
-  /** Sets the value of "box-sizing" */
-  void set boxSizing(var value);
-
-  /** Gets the value of "caption-side" */
-  String get captionSide;
-
-  /** Sets the value of "caption-side" */
-  void set captionSide(var value);
-
-  /** Gets the value of "clear" */
-  String get clear;
-
-  /** Sets the value of "clear" */
-  void set clear(var value);
-
-  /** Gets the value of "clip" */
-  String get clip;
-
-  /** Sets the value of "clip" */
-  void set clip(var value);
-
-  /** Gets the value of "color" */
-  String get color;
-
-  /** Sets the value of "color" */
-  void set color(var value);
-
-  /** Gets the value of "color-correction" */
-  String get colorCorrection;
-
-  /** Sets the value of "color-correction" */
-  void set colorCorrection(var value);
-
-  /** Gets the value of "column-break-after" */
-  String get columnBreakAfter;
-
-  /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value);
-
-  /** Gets the value of "column-break-before" */
-  String get columnBreakBefore;
-
-  /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value);
-
-  /** Gets the value of "column-break-inside" */
-  String get columnBreakInside;
-
-  /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value);
-
-  /** Gets the value of "column-count" */
-  String get columnCount;
-
-  /** Sets the value of "column-count" */
-  void set columnCount(var value);
-
-  /** Gets the value of "column-gap" */
-  String get columnGap;
-
-  /** Sets the value of "column-gap" */
-  void set columnGap(var value);
-
-  /** Gets the value of "column-rule" */
-  String get columnRule;
-
-  /** Sets the value of "column-rule" */
-  void set columnRule(var value);
-
-  /** Gets the value of "column-rule-color" */
-  String get columnRuleColor;
-
-  /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value);
-
-  /** Gets the value of "column-rule-style" */
-  String get columnRuleStyle;
-
-  /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value);
-
-  /** Gets the value of "column-rule-width" */
-  String get columnRuleWidth;
-
-  /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value);
-
-  /** Gets the value of "column-span" */
-  String get columnSpan;
-
-  /** Sets the value of "column-span" */
-  void set columnSpan(var value);
-
-  /** Gets the value of "column-width" */
-  String get columnWidth;
-
-  /** Sets the value of "column-width" */
-  void set columnWidth(var value);
-
-  /** Gets the value of "columns" */
-  String get columns;
-
-  /** Sets the value of "columns" */
-  void set columns(var value);
-
-  /** Gets the value of "content" */
-  String get content;
-
-  /** Sets the value of "content" */
-  void set content(var value);
-
-  /** Gets the value of "counter-increment" */
-  String get counterIncrement;
-
-  /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value);
-
-  /** Gets the value of "counter-reset" */
-  String get counterReset;
-
-  /** Sets the value of "counter-reset" */
-  void set counterReset(var value);
-
-  /** Gets the value of "cursor" */
-  String get cursor;
-
-  /** Sets the value of "cursor" */
-  void set cursor(var value);
-
-  /** Gets the value of "direction" */
-  String get direction;
-
-  /** Sets the value of "direction" */
-  void set direction(var value);
-
-  /** Gets the value of "display" */
-  String get display;
-
-  /** Sets the value of "display" */
-  void set display(var value);
-
-  /** Gets the value of "empty-cells" */
-  String get emptyCells;
-
-  /** Sets the value of "empty-cells" */
-  void set emptyCells(var value);
-
-  /** Gets the value of "filter" */
-  String get filter;
-
-  /** Sets the value of "filter" */
-  void set filter(var value);
-
-  /** Gets the value of "flex-align" */
-  String get flexAlign;
-
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value);
-
-  /** Gets the value of "flex-flow" */
-  String get flexFlow;
-
-  /** Sets the value of "flex-flow" */
-  void set flexFlow(var value);
-
-  /** Gets the value of "flex-order" */
-  String get flexOrder;
-
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value);
-
-  /** Gets the value of "flex-pack" */
-  String get flexPack;
-
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value);
-
-  /** Gets the value of "float" */
-  String get float;
-
-  /** Sets the value of "float" */
-  void set float(var value);
-
-  /** Gets the value of "flow-from" */
-  String get flowFrom;
-
-  /** Sets the value of "flow-from" */
-  void set flowFrom(var value);
-
-  /** Gets the value of "flow-into" */
-  String get flowInto;
-
-  /** Sets the value of "flow-into" */
-  void set flowInto(var value);
-
-  /** Gets the value of "font" */
-  String get font;
-
-  /** Sets the value of "font" */
-  void set font(var value);
-
-  /** Gets the value of "font-family" */
-  String get fontFamily;
-
-  /** Sets the value of "font-family" */
-  void set fontFamily(var value);
-
-  /** Gets the value of "font-feature-settings" */
-  String get fontFeatureSettings;
-
-  /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value);
-
-  /** Gets the value of "font-size" */
-  String get fontSize;
-
-  /** Sets the value of "font-size" */
-  void set fontSize(var value);
-
-  /** Gets the value of "font-size-delta" */
-  String get fontSizeDelta;
-
-  /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value);
-
-  /** Gets the value of "font-smoothing" */
-  String get fontSmoothing;
-
-  /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value);
-
-  /** Gets the value of "font-stretch" */
-  String get fontStretch;
-
-  /** Sets the value of "font-stretch" */
-  void set fontStretch(var value);
-
-  /** Gets the value of "font-style" */
-  String get fontStyle;
-
-  /** Sets the value of "font-style" */
-  void set fontStyle(var value);
-
-  /** Gets the value of "font-variant" */
-  String get fontVariant;
-
-  /** Sets the value of "font-variant" */
-  void set fontVariant(var value);
-
-  /** Gets the value of "font-weight" */
-  String get fontWeight;
-
-  /** Sets the value of "font-weight" */
-  void set fontWeight(var value);
-
-  /** @domName CSSStyleDeclaration.getPropertyValue. */
-  String getPropertyValue(String propertyName);
-
-  /** Gets the value of "height" */
-  String get height;
-
-  /** Sets the value of "height" */
-  void set height(var value);
-
-  /** Gets the value of "highlight" */
-  String get highlight;
-
-  /** Sets the value of "highlight" */
-  void set highlight(var value);
-
-  /** Gets the value of "hyphenate-character" */
-  String get hyphenateCharacter;
-
-  /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value);
-
-  /** Gets the value of "hyphenate-limit-after" */
-  String get hyphenateLimitAfter;
-
-  /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value);
-
-  /** Gets the value of "hyphenate-limit-before" */
-  String get hyphenateLimitBefore;
-
-  /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value);
-
-  /** Gets the value of "hyphenate-limit-lines" */
-  String get hyphenateLimitLines;
-
-  /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value);
-
-  /** Gets the value of "hyphens" */
-  String get hyphens;
-
-  /** Sets the value of "hyphens" */
-  void set hyphens(var value);
-
-  /** Gets the value of "image-rendering" */
-  String get imageRendering;
-
-  /** Sets the value of "image-rendering" */
-  void set imageRendering(var value);
-
-  /** Gets the value of "left" */
-  String get left;
-
-  /** Sets the value of "left" */
-  void set left(var value);
-
-  /** Gets the value of "letter-spacing" */
-  String get letterSpacing;
-
-  /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value);
-
-  /** Gets the value of "line-box-contain" */
-  String get lineBoxContain;
-
-  /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value);
-
-  /** Gets the value of "line-break" */
-  String get lineBreak;
-
-  /** Sets the value of "line-break" */
-  void set lineBreak(var value);
-
-  /** Gets the value of "line-clamp" */
-  String get lineClamp;
-
-  /** Sets the value of "line-clamp" */
-  void set lineClamp(var value);
-
-  /** Gets the value of "line-height" */
-  String get lineHeight;
-
-  /** Sets the value of "line-height" */
-  void set lineHeight(var value);
-
-  /** Gets the value of "list-style" */
-  String get listStyle;
-
-  /** Sets the value of "list-style" */
-  void set listStyle(var value);
-
-  /** Gets the value of "list-style-image" */
-  String get listStyleImage;
-
-  /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value);
-
-  /** Gets the value of "list-style-position" */
-  String get listStylePosition;
-
-  /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value);
-
-  /** Gets the value of "list-style-type" */
-  String get listStyleType;
-
-  /** Sets the value of "list-style-type" */
-  void set listStyleType(var value);
-
-  /** Gets the value of "locale" */
-  String get locale;
-
-  /** Sets the value of "locale" */
-  void set locale(var value);
-
-  /** Gets the value of "logical-height" */
-  String get logicalHeight;
-
-  /** Sets the value of "logical-height" */
-  void set logicalHeight(var value);
-
-  /** Gets the value of "logical-width" */
-  String get logicalWidth;
-
-  /** Sets the value of "logical-width" */
-  void set logicalWidth(var value);
-
-  /** Gets the value of "margin" */
-  String get margin;
-
-  /** Sets the value of "margin" */
-  void set margin(var value);
-
-  /** Gets the value of "margin-after" */
-  String get marginAfter;
-
-  /** Sets the value of "margin-after" */
-  void set marginAfter(var value);
-
-  /** Gets the value of "margin-after-collapse" */
-  String get marginAfterCollapse;
-
-  /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value);
-
-  /** Gets the value of "margin-before" */
-  String get marginBefore;
-
-  /** Sets the value of "margin-before" */
-  void set marginBefore(var value);
-
-  /** Gets the value of "margin-before-collapse" */
-  String get marginBeforeCollapse;
-
-  /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value);
-
-  /** Gets the value of "margin-bottom" */
-  String get marginBottom;
-
-  /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value);
-
-  /** Gets the value of "margin-bottom-collapse" */
-  String get marginBottomCollapse;
-
-  /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value);
-
-  /** Gets the value of "margin-collapse" */
-  String get marginCollapse;
-
-  /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value);
-
-  /** Gets the value of "margin-end" */
-  String get marginEnd;
-
-  /** Sets the value of "margin-end" */
-  void set marginEnd(var value);
-
-  /** Gets the value of "margin-left" */
-  String get marginLeft;
-
-  /** Sets the value of "margin-left" */
-  void set marginLeft(var value);
-
-  /** Gets the value of "margin-right" */
-  String get marginRight;
-
-  /** Sets the value of "margin-right" */
-  void set marginRight(var value);
-
-  /** Gets the value of "margin-start" */
-  String get marginStart;
-
-  /** Sets the value of "margin-start" */
-  void set marginStart(var value);
-
-  /** Gets the value of "margin-top" */
-  String get marginTop;
-
-  /** Sets the value of "margin-top" */
-  void set marginTop(var value);
-
-  /** Gets the value of "margin-top-collapse" */
-  String get marginTopCollapse;
-
-  /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value);
-
-  /** Gets the value of "marquee" */
-  String get marquee;
-
-  /** Sets the value of "marquee" */
-  void set marquee(var value);
-
-  /** Gets the value of "marquee-direction" */
-  String get marqueeDirection;
-
-  /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value);
-
-  /** Gets the value of "marquee-increment" */
-  String get marqueeIncrement;
-
-  /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value);
-
-  /** Gets the value of "marquee-repetition" */
-  String get marqueeRepetition;
-
-  /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value);
-
-  /** Gets the value of "marquee-speed" */
-  String get marqueeSpeed;
-
-  /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value);
-
-  /** Gets the value of "marquee-style" */
-  String get marqueeStyle;
-
-  /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value);
-
-  /** Gets the value of "mask" */
-  String get mask;
-
-  /** Sets the value of "mask" */
-  void set mask(var value);
-
-  /** Gets the value of "mask-attachment" */
-  String get maskAttachment;
-
-  /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value);
-
-  /** Gets the value of "mask-box-image" */
-  String get maskBoxImage;
-
-  /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value);
-
-  /** Gets the value of "mask-box-image-outset" */
-  String get maskBoxImageOutset;
-
-  /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value);
-
-  /** Gets the value of "mask-box-image-repeat" */
-  String get maskBoxImageRepeat;
-
-  /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value);
-
-  /** Gets the value of "mask-box-image-slice" */
-  String get maskBoxImageSlice;
-
-  /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value);
-
-  /** Gets the value of "mask-box-image-source" */
-  String get maskBoxImageSource;
-
-  /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value);
-
-  /** Gets the value of "mask-box-image-width" */
-  String get maskBoxImageWidth;
-
-  /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value);
-
-  /** Gets the value of "mask-clip" */
-  String get maskClip;
-
-  /** Sets the value of "mask-clip" */
-  void set maskClip(var value);
-
-  /** Gets the value of "mask-composite" */
-  String get maskComposite;
-
-  /** Sets the value of "mask-composite" */
-  void set maskComposite(var value);
-
-  /** Gets the value of "mask-image" */
-  String get maskImage;
-
-  /** Sets the value of "mask-image" */
-  void set maskImage(var value);
-
-  /** Gets the value of "mask-origin" */
-  String get maskOrigin;
-
-  /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value);
-
-  /** Gets the value of "mask-position" */
-  String get maskPosition;
-
-  /** Sets the value of "mask-position" */
-  void set maskPosition(var value);
-
-  /** Gets the value of "mask-position-x" */
-  String get maskPositionX;
-
-  /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value);
-
-  /** Gets the value of "mask-position-y" */
-  String get maskPositionY;
-
-  /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value);
-
-  /** Gets the value of "mask-repeat" */
-  String get maskRepeat;
-
-  /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value);
-
-  /** Gets the value of "mask-repeat-x" */
-  String get maskRepeatX;
-
-  /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value);
-
-  /** Gets the value of "mask-repeat-y" */
-  String get maskRepeatY;
-
-  /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value);
-
-  /** Gets the value of "mask-size" */
-  String get maskSize;
-
-  /** Sets the value of "mask-size" */
-  void set maskSize(var value);
-
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor;
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value);
-
-  /** Gets the value of "max-height" */
-  String get maxHeight;
-
-  /** Sets the value of "max-height" */
-  void set maxHeight(var value);
-
-  /** Gets the value of "max-logical-height" */
-  String get maxLogicalHeight;
-
-  /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value);
-
-  /** Gets the value of "max-logical-width" */
-  String get maxLogicalWidth;
-
-  /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value);
-
-  /** Gets the value of "max-width" */
-  String get maxWidth;
-
-  /** Sets the value of "max-width" */
-  void set maxWidth(var value);
-
-  /** Gets the value of "min-height" */
-  String get minHeight;
-
-  /** Sets the value of "min-height" */
-  void set minHeight(var value);
-
-  /** Gets the value of "min-logical-height" */
-  String get minLogicalHeight;
-
-  /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value);
-
-  /** Gets the value of "min-logical-width" */
-  String get minLogicalWidth;
-
-  /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value);
-
-  /** Gets the value of "min-width" */
-  String get minWidth;
-
-  /** Sets the value of "min-width" */
-  void set minWidth(var value);
-
-  /** Gets the value of "nbsp-mode" */
-  String get nbspMode;
-
-  /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value);
-
-  /** Gets the value of "opacity" */
-  String get opacity;
-
-  /** Sets the value of "opacity" */
-  void set opacity(var value);
-
-  /** Gets the value of "orphans" */
-  String get orphans;
-
-  /** Sets the value of "orphans" */
-  void set orphans(var value);
-
-  /** Gets the value of "outline" */
-  String get outline;
-
-  /** Sets the value of "outline" */
-  void set outline(var value);
-
-  /** Gets the value of "outline-color" */
-  String get outlineColor;
-
-  /** Sets the value of "outline-color" */
-  void set outlineColor(var value);
-
-  /** Gets the value of "outline-offset" */
-  String get outlineOffset;
-
-  /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value);
-
-  /** Gets the value of "outline-style" */
-  String get outlineStyle;
-
-  /** Sets the value of "outline-style" */
-  void set outlineStyle(var value);
-
-  /** Gets the value of "outline-width" */
-  String get outlineWidth;
-
-  /** Sets the value of "outline-width" */
-  void set outlineWidth(var value);
-
-  /** Gets the value of "overflow" */
-  String get overflow;
-
-  /** Sets the value of "overflow" */
-  void set overflow(var value);
-
-  /** Gets the value of "overflow-x" */
-  String get overflowX;
-
-  /** Sets the value of "overflow-x" */
-  void set overflowX(var value);
-
-  /** Gets the value of "overflow-y" */
-  String get overflowY;
-
-  /** Sets the value of "overflow-y" */
-  void set overflowY(var value);
-
-  /** Gets the value of "padding" */
-  String get padding;
-
-  /** Sets the value of "padding" */
-  void set padding(var value);
-
-  /** Gets the value of "padding-after" */
-  String get paddingAfter;
-
-  /** Sets the value of "padding-after" */
-  void set paddingAfter(var value);
-
-  /** Gets the value of "padding-before" */
-  String get paddingBefore;
-
-  /** Sets the value of "padding-before" */
-  void set paddingBefore(var value);
-
-  /** Gets the value of "padding-bottom" */
-  String get paddingBottom;
-
-  /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value);
-
-  /** Gets the value of "padding-end" */
-  String get paddingEnd;
-
-  /** Sets the value of "padding-end" */
-  void set paddingEnd(var value);
-
-  /** Gets the value of "padding-left" */
-  String get paddingLeft;
-
-  /** Sets the value of "padding-left" */
-  void set paddingLeft(var value);
-
-  /** Gets the value of "padding-right" */
-  String get paddingRight;
-
-  /** Sets the value of "padding-right" */
-  void set paddingRight(var value);
-
-  /** Gets the value of "padding-start" */
-  String get paddingStart;
-
-  /** Sets the value of "padding-start" */
-  void set paddingStart(var value);
-
-  /** Gets the value of "padding-top" */
-  String get paddingTop;
-
-  /** Sets the value of "padding-top" */
-  void set paddingTop(var value);
-
-  /** Gets the value of "page" */
-  String get page;
-
-  /** Sets the value of "page" */
-  void set page(var value);
-
-  /** Gets the value of "page-break-after" */
-  String get pageBreakAfter;
-
-  /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value);
-
-  /** Gets the value of "page-break-before" */
-  String get pageBreakBefore;
-
-  /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value);
-
-  /** Gets the value of "page-break-inside" */
-  String get pageBreakInside;
-
-  /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value);
-
-  /** Gets the value of "perspective" */
-  String get perspective;
-
-  /** Sets the value of "perspective" */
-  void set perspective(var value);
-
-  /** Gets the value of "perspective-origin" */
-  String get perspectiveOrigin;
-
-  /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value);
-
-  /** Gets the value of "perspective-origin-x" */
-  String get perspectiveOriginX;
-
-  /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value);
-
-  /** Gets the value of "perspective-origin-y" */
-  String get perspectiveOriginY;
-
-  /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value);
-
-  /** Gets the value of "pointer-events" */
-  String get pointerEvents;
-
-  /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value);
-
-  /** Gets the value of "position" */
-  String get position;
-
-  /** Sets the value of "position" */
-  void set position(var value);
-
-  /** Gets the value of "quotes" */
-  String get quotes;
-
-  /** Sets the value of "quotes" */
-  void set quotes(var value);
-
-  /** Gets the value of "region-break-after" */
-  String get regionBreakAfter;
-
-  /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value);
-
-  /** Gets the value of "region-break-before" */
-  String get regionBreakBefore;
-
-  /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value);
-
-  /** Gets the value of "region-break-inside" */
-  String get regionBreakInside;
-
-  /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value);
-
-  /** Gets the value of "region-overflow" */
-  String get regionOverflow;
-
-  /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value);
-
-  /** Gets the value of "resize" */
-  String get resize;
-
-  /** Sets the value of "resize" */
-  void set resize(var value);
-
-  /** Gets the value of "right" */
-  String get right;
-
-  /** Sets the value of "right" */
-  void set right(var value);
-
-  /** Gets the value of "rtl-ordering" */
-  String get rtlOrdering;
-
-  /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value);
-
-  /** Gets the value of "size" */
-  String get size;
-
-  /** Sets the value of "size" */
-  void set size(var value);
-
-  /** Gets the value of "speak" */
-  String get speak;
-
-  /** Sets the value of "speak" */
-  void set speak(var value);
-
-  /** Gets the value of "src" */
-  String get src;
-
-  /** Sets the value of "src" */
-  void set src(var value);
-
-  /** Gets the value of "table-layout" */
-  String get tableLayout;
-
-  /** Sets the value of "table-layout" */
-  void set tableLayout(var value);
-
-  /** Gets the value of "tap-highlight-color" */
-  String get tapHighlightColor;
-
-  /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value);
-
-  /** Gets the value of "text-align" */
-  String get textAlign;
-
-  /** Sets the value of "text-align" */
-  void set textAlign(var value);
-
-  /** Gets the value of "text-combine" */
-  String get textCombine;
-
-  /** Sets the value of "text-combine" */
-  void set textCombine(var value);
-
-  /** Gets the value of "text-decoration" */
-  String get textDecoration;
-
-  /** Sets the value of "text-decoration" */
-  void set textDecoration(var value);
-
-  /** Gets the value of "text-decorations-in-effect" */
-  String get textDecorationsInEffect;
-
-  /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value);
-
-  /** Gets the value of "text-emphasis" */
-  String get textEmphasis;
-
-  /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value);
-
-  /** Gets the value of "text-emphasis-color" */
-  String get textEmphasisColor;
-
-  /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value);
-
-  /** Gets the value of "text-emphasis-position" */
-  String get textEmphasisPosition;
-
-  /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value);
-
-  /** Gets the value of "text-emphasis-style" */
-  String get textEmphasisStyle;
-
-  /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value);
-
-  /** Gets the value of "text-fill-color" */
-  String get textFillColor;
-
-  /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value);
-
-  /** Gets the value of "text-indent" */
-  String get textIndent;
-
-  /** Sets the value of "text-indent" */
-  void set textIndent(var value);
-
-  /** Gets the value of "text-line-through" */
-  String get textLineThrough;
-
-  /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value);
-
-  /** Gets the value of "text-line-through-color" */
-  String get textLineThroughColor;
-
-  /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value);
-
-  /** Gets the value of "text-line-through-mode" */
-  String get textLineThroughMode;
-
-  /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value);
-
-  /** Gets the value of "text-line-through-style" */
-  String get textLineThroughStyle;
-
-  /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value);
-
-  /** Gets the value of "text-line-through-width" */
-  String get textLineThroughWidth;
-
-  /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value);
-
-  /** Gets the value of "text-orientation" */
-  String get textOrientation;
-
-  /** Sets the value of "text-orientation" */
-  void set textOrientation(var value);
-
-  /** Gets the value of "text-overflow" */
-  String get textOverflow;
-
-  /** Sets the value of "text-overflow" */
-  void set textOverflow(var value);
-
-  /** Gets the value of "text-overline" */
-  String get textOverline;
-
-  /** Sets the value of "text-overline" */
-  void set textOverline(var value);
-
-  /** Gets the value of "text-overline-color" */
-  String get textOverlineColor;
-
-  /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value);
-
-  /** Gets the value of "text-overline-mode" */
-  String get textOverlineMode;
-
-  /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value);
-
-  /** Gets the value of "text-overline-style" */
-  String get textOverlineStyle;
-
-  /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value);
-
-  /** Gets the value of "text-overline-width" */
-  String get textOverlineWidth;
-
-  /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value);
-
-  /** Gets the value of "text-rendering" */
-  String get textRendering;
-
-  /** Sets the value of "text-rendering" */
-  void set textRendering(var value);
-
-  /** Gets the value of "text-security" */
-  String get textSecurity;
-
-  /** Sets the value of "text-security" */
-  void set textSecurity(var value);
-
-  /** Gets the value of "text-shadow" */
-  String get textShadow;
-
-  /** Sets the value of "text-shadow" */
-  void set textShadow(var value);
-
-  /** Gets the value of "text-size-adjust" */
-  String get textSizeAdjust;
-
-  /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value);
-
-  /** Gets the value of "text-stroke" */
-  String get textStroke;
-
-  /** Sets the value of "text-stroke" */
-  void set textStroke(var value);
-
-  /** Gets the value of "text-stroke-color" */
-  String get textStrokeColor;
-
-  /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value);
-
-  /** Gets the value of "text-stroke-width" */
-  String get textStrokeWidth;
-
-  /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value);
-
-  /** Gets the value of "text-transform" */
-  String get textTransform;
-
-  /** Sets the value of "text-transform" */
-  void set textTransform(var value);
-
-  /** Gets the value of "text-underline" */
-  String get textUnderline;
-
-  /** Sets the value of "text-underline" */
-  void set textUnderline(var value);
-
-  /** Gets the value of "text-underline-color" */
-  String get textUnderlineColor;
-
-  /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value);
-
-  /** Gets the value of "text-underline-mode" */
-  String get textUnderlineMode;
-
-  /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value);
-
-  /** Gets the value of "text-underline-style" */
-  String get textUnderlineStyle;
-
-  /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value);
-
-  /** Gets the value of "text-underline-width" */
-  String get textUnderlineWidth;
-
-  /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value);
-
-  /** Gets the value of "top" */
-  String get top;
-
-  /** Sets the value of "top" */
-  void set top(var value);
-
-  /** Gets the value of "transform" */
-  String get transform;
-
-  /** Sets the value of "transform" */
-  void set transform(var value);
-
-  /** Gets the value of "transform-origin" */
-  String get transformOrigin;
-
-  /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value);
-
-  /** Gets the value of "transform-origin-x" */
-  String get transformOriginX;
-
-  /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value);
-
-  /** Gets the value of "transform-origin-y" */
-  String get transformOriginY;
-
-  /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value);
-
-  /** Gets the value of "transform-origin-z" */
-  String get transformOriginZ;
-
-  /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value);
-
-  /** Gets the value of "transform-style" */
-  String get transformStyle;
-
-  /** Sets the value of "transform-style" */
-  void set transformStyle(var value);
-
-  /** Gets the value of "transition" */
-  String get transition;
-
-  /** Sets the value of "transition" */
-  void set transition(var value);
-
-  /** Gets the value of "transition-delay" */
-  String get transitionDelay;
-
-  /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value);
-
-  /** Gets the value of "transition-duration" */
-  String get transitionDuration;
-
-  /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value);
-
-  /** Gets the value of "transition-property" */
-  String get transitionProperty;
-
-  /** Sets the value of "transition-property" */
-  void set transitionProperty(var value);
-
-  /** Gets the value of "transition-timing-function" */
-  String get transitionTimingFunction;
-
-  /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value);
-
-  /** Gets the value of "unicode-bidi" */
-  String get unicodeBidi;
-
-  /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value);
-
-  /** Gets the value of "unicode-range" */
-  String get unicodeRange;
-
-  /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value);
-
-  /** Gets the value of "user-drag" */
-  String get userDrag;
-
-  /** Sets the value of "user-drag" */
-  void set userDrag(var value);
-
-  /** Gets the value of "user-modify" */
-  String get userModify;
-
-  /** Sets the value of "user-modify" */
-  void set userModify(var value);
-
-  /** Gets the value of "user-select" */
-  String get userSelect;
-
-  /** Sets the value of "user-select" */
-  void set userSelect(var value);
-
-  /** Gets the value of "vertical-align" */
-  String get verticalAlign;
-
-  /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value);
-
-  /** Gets the value of "visibility" */
-  String get visibility;
-
-  /** Sets the value of "visibility" */
-  void set visibility(var value);
-
-  /** Gets the value of "white-space" */
-  String get whiteSpace;
-
-  /** Sets the value of "white-space" */
-  void set whiteSpace(var value);
-
-  /** Gets the value of "widows" */
-  String get widows;
-
-  /** Sets the value of "widows" */
-  void set widows(var value);
-
-  /** Gets the value of "width" */
-  String get width;
-
-  /** Sets the value of "width" */
-  void set width(var value);
-
-  /** Gets the value of "word-break" */
-  String get wordBreak;
-
-  /** Sets the value of "word-break" */
-  void set wordBreak(var value);
-
-  /** Gets the value of "word-spacing" */
-  String get wordSpacing;
-
-  /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value);
-
-  /** Gets the value of "word-wrap" */
-  String get wordWrap;
-
-  /** Sets the value of "word-wrap" */
-  void set wordWrap(var value);
-
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape;
-
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value);
-
-  /** Gets the value of "writing-mode" */
-  String get writingMode;
-
-  /** Sets the value of "writing-mode" */
-  void set writingMode(var value);
-
-  /** Gets the value of "z-index" */
-  String get zIndex;
-
-  /** Sets the value of "z-index" */
-  void set zIndex(var value);
-
-  /** Gets the value of "zoom" */
-  String get zoom;
-
-  /** Sets the value of "zoom" */
-  void set zoom(var value);
-}
-// 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.
-
-String _cachedBrowserPrefix;
-
-String get _browserPrefix {
-  if (_cachedBrowserPrefix == null) {
-    if (_Device.isFirefox) {
-      _cachedBrowserPrefix = '-moz-';
-    } else if (_Device.isIE) {
-      _cachedBrowserPrefix = '-ms-';
-    } else if (_Device.isOpera) {
-      _cachedBrowserPrefix = '-o-';
-    } else {
-      _cachedBrowserPrefix = '-webkit-';
-    }
-  }
-  return _cachedBrowserPrefix;
-}
-
-class _CSSStyleDeclarationImpl implements CSSStyleDeclaration native "*CSSStyleDeclaration" {
-
-
-  String cssText;
-
-  final int length;
-
-  final _CSSRuleImpl parentRule;
-
-  _CSSValueImpl getPropertyCSSValue(String propertyName) native;
-
-  String getPropertyPriority(String propertyName) native;
-
-  String getPropertyShorthand(String propertyName) native;
-
-  String _getPropertyValue(String propertyName) native "getPropertyValue";
-
-  bool isPropertyImplicit(String propertyName) native;
-
-  String item(int index) native;
-
-  String removeProperty(String propertyName) native;
-
-
-  String getPropertyValue(String propertyName) {
-    var propValue = _getPropertyValue(propertyName);
-    return propValue != null ? propValue : '';
-  }
-
-  void setProperty(String propertyName, String value, [String priority]) {
-    JS('void', '#.setProperty(#, #, #)', this, propertyName, value, priority);
-    // Bug #2772, IE9 requires a poke to actually apply the value.
-    if (JS('bool', '!!#.setAttribute', this)) {
-      JS('void', '#.setAttribute(#, #)', this, propertyName, value);
-    }
-  }
-
-  // TODO(jacobr): generate this list of properties using the existing script.
-    /** Gets the value of "animation" */
-  String get animation =>
-    getPropertyValue('${_browserPrefix}animation');
-
-  /** Sets the value of "animation" */
-  void set animation(var value) {
-    setProperty('${_browserPrefix}animation', value, '');
-  }
-
-  /** Gets the value of "animation-delay" */
-  String get animationDelay =>
-    getPropertyValue('${_browserPrefix}animation-delay');
-
-  /** Sets the value of "animation-delay" */
-  void set animationDelay(var value) {
-    setProperty('${_browserPrefix}animation-delay', value, '');
-  }
-
-  /** Gets the value of "animation-direction" */
-  String get animationDirection =>
-    getPropertyValue('${_browserPrefix}animation-direction');
-
-  /** Sets the value of "animation-direction" */
-  void set animationDirection(var value) {
-    setProperty('${_browserPrefix}animation-direction', value, '');
-  }
-
-  /** Gets the value of "animation-duration" */
-  String get animationDuration =>
-    getPropertyValue('${_browserPrefix}animation-duration');
-
-  /** Sets the value of "animation-duration" */
-  void set animationDuration(var value) {
-    setProperty('${_browserPrefix}animation-duration', value, '');
-  }
-
-  /** Gets the value of "animation-fill-mode" */
-  String get animationFillMode =>
-    getPropertyValue('${_browserPrefix}animation-fill-mode');
-
-  /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value) {
-    setProperty('${_browserPrefix}animation-fill-mode', value, '');
-  }
-
-  /** Gets the value of "animation-iteration-count" */
-  String get animationIterationCount =>
-    getPropertyValue('${_browserPrefix}animation-iteration-count');
-
-  /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value) {
-    setProperty('${_browserPrefix}animation-iteration-count', value, '');
-  }
-
-  /** Gets the value of "animation-name" */
-  String get animationName =>
-    getPropertyValue('${_browserPrefix}animation-name');
-
-  /** Sets the value of "animation-name" */
-  void set animationName(var value) {
-    setProperty('${_browserPrefix}animation-name', value, '');
-  }
-
-  /** Gets the value of "animation-play-state" */
-  String get animationPlayState =>
-    getPropertyValue('${_browserPrefix}animation-play-state');
-
-  /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value) {
-    setProperty('${_browserPrefix}animation-play-state', value, '');
-  }
-
-  /** Gets the value of "animation-timing-function" */
-  String get animationTimingFunction =>
-    getPropertyValue('${_browserPrefix}animation-timing-function');
-
-  /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value) {
-    setProperty('${_browserPrefix}animation-timing-function', value, '');
-  }
-
-  /** Gets the value of "appearance" */
-  String get appearance =>
-    getPropertyValue('${_browserPrefix}appearance');
-
-  /** Sets the value of "appearance" */
-  void set appearance(var value) {
-    setProperty('${_browserPrefix}appearance', value, '');
-  }
-
-  /** Gets the value of "backface-visibility" */
-  String get backfaceVisibility =>
-    getPropertyValue('${_browserPrefix}backface-visibility');
-
-  /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value) {
-    setProperty('${_browserPrefix}backface-visibility', value, '');
-  }
-
-  /** Gets the value of "background" */
-  String get background =>
-    getPropertyValue('background');
-
-  /** Sets the value of "background" */
-  void set background(var value) {
-    setProperty('background', value, '');
-  }
-
-  /** Gets the value of "background-attachment" */
-  String get backgroundAttachment =>
-    getPropertyValue('background-attachment');
-
-  /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value) {
-    setProperty('background-attachment', value, '');
-  }
-
-  /** Gets the value of "background-clip" */
-  String get backgroundClip =>
-    getPropertyValue('background-clip');
-
-  /** Sets the value of "background-clip" */
-  void set backgroundClip(var value) {
-    setProperty('background-clip', value, '');
-  }
-
-  /** Gets the value of "background-color" */
-  String get backgroundColor =>
-    getPropertyValue('background-color');
-
-  /** Sets the value of "background-color" */
-  void set backgroundColor(var value) {
-    setProperty('background-color', value, '');
-  }
-
-  /** Gets the value of "background-composite" */
-  String get backgroundComposite =>
-    getPropertyValue('${_browserPrefix}background-composite');
-
-  /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value) {
-    setProperty('${_browserPrefix}background-composite', value, '');
-  }
-
-  /** Gets the value of "background-image" */
-  String get backgroundImage =>
-    getPropertyValue('background-image');
-
-  /** Sets the value of "background-image" */
-  void set backgroundImage(var value) {
-    setProperty('background-image', value, '');
-  }
-
-  /** Gets the value of "background-origin" */
-  String get backgroundOrigin =>
-    getPropertyValue('background-origin');
-
-  /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value) {
-    setProperty('background-origin', value, '');
-  }
-
-  /** Gets the value of "background-position" */
-  String get backgroundPosition =>
-    getPropertyValue('background-position');
-
-  /** Sets the value of "background-position" */
-  void set backgroundPosition(var value) {
-    setProperty('background-position', value, '');
-  }
-
-  /** Gets the value of "background-position-x" */
-  String get backgroundPositionX =>
-    getPropertyValue('background-position-x');
-
-  /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value) {
-    setProperty('background-position-x', value, '');
-  }
-
-  /** Gets the value of "background-position-y" */
-  String get backgroundPositionY =>
-    getPropertyValue('background-position-y');
-
-  /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value) {
-    setProperty('background-position-y', value, '');
-  }
-
-  /** Gets the value of "background-repeat" */
-  String get backgroundRepeat =>
-    getPropertyValue('background-repeat');
-
-  /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value) {
-    setProperty('background-repeat', value, '');
-  }
-
-  /** Gets the value of "background-repeat-x" */
-  String get backgroundRepeatX =>
-    getPropertyValue('background-repeat-x');
-
-  /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value) {
-    setProperty('background-repeat-x', value, '');
-  }
-
-  /** Gets the value of "background-repeat-y" */
-  String get backgroundRepeatY =>
-    getPropertyValue('background-repeat-y');
-
-  /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value) {
-    setProperty('background-repeat-y', value, '');
-  }
-
-  /** Gets the value of "background-size" */
-  String get backgroundSize =>
-    getPropertyValue('background-size');
-
-  /** Sets the value of "background-size" */
-  void set backgroundSize(var value) {
-    setProperty('background-size', value, '');
-  }
-
-  /** Gets the value of "border" */
-  String get border =>
-    getPropertyValue('border');
-
-  /** Sets the value of "border" */
-  void set border(var value) {
-    setProperty('border', value, '');
-  }
-
-  /** Gets the value of "border-after" */
-  String get borderAfter =>
-    getPropertyValue('${_browserPrefix}border-after');
-
-  /** Sets the value of "border-after" */
-  void set borderAfter(var value) {
-    setProperty('${_browserPrefix}border-after', value, '');
-  }
-
-  /** Gets the value of "border-after-color" */
-  String get borderAfterColor =>
-    getPropertyValue('${_browserPrefix}border-after-color');
-
-  /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value) {
-    setProperty('${_browserPrefix}border-after-color', value, '');
-  }
-
-  /** Gets the value of "border-after-style" */
-  String get borderAfterStyle =>
-    getPropertyValue('${_browserPrefix}border-after-style');
-
-  /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value) {
-    setProperty('${_browserPrefix}border-after-style', value, '');
-  }
-
-  /** Gets the value of "border-after-width" */
-  String get borderAfterWidth =>
-    getPropertyValue('${_browserPrefix}border-after-width');
-
-  /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value) {
-    setProperty('${_browserPrefix}border-after-width', value, '');
-  }
-
-  /** Gets the value of "border-before" */
-  String get borderBefore =>
-    getPropertyValue('${_browserPrefix}border-before');
-
-  /** Sets the value of "border-before" */
-  void set borderBefore(var value) {
-    setProperty('${_browserPrefix}border-before', value, '');
-  }
-
-  /** Gets the value of "border-before-color" */
-  String get borderBeforeColor =>
-    getPropertyValue('${_browserPrefix}border-before-color');
-
-  /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value) {
-    setProperty('${_browserPrefix}border-before-color', value, '');
-  }
-
-  /** Gets the value of "border-before-style" */
-  String get borderBeforeStyle =>
-    getPropertyValue('${_browserPrefix}border-before-style');
-
-  /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value) {
-    setProperty('${_browserPrefix}border-before-style', value, '');
-  }
-
-  /** Gets the value of "border-before-width" */
-  String get borderBeforeWidth =>
-    getPropertyValue('${_browserPrefix}border-before-width');
-
-  /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value) {
-    setProperty('${_browserPrefix}border-before-width', value, '');
-  }
-
-  /** Gets the value of "border-bottom" */
-  String get borderBottom =>
-    getPropertyValue('border-bottom');
-
-  /** Sets the value of "border-bottom" */
-  void set borderBottom(var value) {
-    setProperty('border-bottom', value, '');
-  }
-
-  /** Gets the value of "border-bottom-color" */
-  String get borderBottomColor =>
-    getPropertyValue('border-bottom-color');
-
-  /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value) {
-    setProperty('border-bottom-color', value, '');
-  }
-
-  /** Gets the value of "border-bottom-left-radius" */
-  String get borderBottomLeftRadius =>
-    getPropertyValue('border-bottom-left-radius');
-
-  /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value) {
-    setProperty('border-bottom-left-radius', value, '');
-  }
-
-  /** Gets the value of "border-bottom-right-radius" */
-  String get borderBottomRightRadius =>
-    getPropertyValue('border-bottom-right-radius');
-
-  /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value) {
-    setProperty('border-bottom-right-radius', value, '');
-  }
-
-  /** Gets the value of "border-bottom-style" */
-  String get borderBottomStyle =>
-    getPropertyValue('border-bottom-style');
-
-  /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value) {
-    setProperty('border-bottom-style', value, '');
-  }
-
-  /** Gets the value of "border-bottom-width" */
-  String get borderBottomWidth =>
-    getPropertyValue('border-bottom-width');
-
-  /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value) {
-    setProperty('border-bottom-width', value, '');
-  }
-
-  /** Gets the value of "border-collapse" */
-  String get borderCollapse =>
-    getPropertyValue('border-collapse');
-
-  /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value) {
-    setProperty('border-collapse', value, '');
-  }
-
-  /** Gets the value of "border-color" */
-  String get borderColor =>
-    getPropertyValue('border-color');
-
-  /** Sets the value of "border-color" */
-  void set borderColor(var value) {
-    setProperty('border-color', value, '');
-  }
-
-  /** Gets the value of "border-end" */
-  String get borderEnd =>
-    getPropertyValue('${_browserPrefix}border-end');
-
-  /** Sets the value of "border-end" */
-  void set borderEnd(var value) {
-    setProperty('${_browserPrefix}border-end', value, '');
-  }
-
-  /** Gets the value of "border-end-color" */
-  String get borderEndColor =>
-    getPropertyValue('${_browserPrefix}border-end-color');
-
-  /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value) {
-    setProperty('${_browserPrefix}border-end-color', value, '');
-  }
-
-  /** Gets the value of "border-end-style" */
-  String get borderEndStyle =>
-    getPropertyValue('${_browserPrefix}border-end-style');
-
-  /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value) {
-    setProperty('${_browserPrefix}border-end-style', value, '');
-  }
-
-  /** Gets the value of "border-end-width" */
-  String get borderEndWidth =>
-    getPropertyValue('${_browserPrefix}border-end-width');
-
-  /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value) {
-    setProperty('${_browserPrefix}border-end-width', value, '');
-  }
-
-  /** Gets the value of "border-fit" */
-  String get borderFit =>
-    getPropertyValue('${_browserPrefix}border-fit');
-
-  /** Sets the value of "border-fit" */
-  void set borderFit(var value) {
-    setProperty('${_browserPrefix}border-fit', value, '');
-  }
-
-  /** Gets the value of "border-horizontal-spacing" */
-  String get borderHorizontalSpacing =>
-    getPropertyValue('${_browserPrefix}border-horizontal-spacing');
-
-  /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value) {
-    setProperty('${_browserPrefix}border-horizontal-spacing', value, '');
-  }
-
-  /** Gets the value of "border-image" */
-  String get borderImage =>
-    getPropertyValue('border-image');
-
-  /** Sets the value of "border-image" */
-  void set borderImage(var value) {
-    setProperty('border-image', value, '');
-  }
-
-  /** Gets the value of "border-image-outset" */
-  String get borderImageOutset =>
-    getPropertyValue('border-image-outset');
-
-  /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value) {
-    setProperty('border-image-outset', value, '');
-  }
-
-  /** Gets the value of "border-image-repeat" */
-  String get borderImageRepeat =>
-    getPropertyValue('border-image-repeat');
-
-  /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value) {
-    setProperty('border-image-repeat', value, '');
-  }
-
-  /** Gets the value of "border-image-slice" */
-  String get borderImageSlice =>
-    getPropertyValue('border-image-slice');
-
-  /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value) {
-    setProperty('border-image-slice', value, '');
-  }
-
-  /** Gets the value of "border-image-source" */
-  String get borderImageSource =>
-    getPropertyValue('border-image-source');
-
-  /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value) {
-    setProperty('border-image-source', value, '');
-  }
-
-  /** Gets the value of "border-image-width" */
-  String get borderImageWidth =>
-    getPropertyValue('border-image-width');
-
-  /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value) {
-    setProperty('border-image-width', value, '');
-  }
-
-  /** Gets the value of "border-left" */
-  String get borderLeft =>
-    getPropertyValue('border-left');
-
-  /** Sets the value of "border-left" */
-  void set borderLeft(var value) {
-    setProperty('border-left', value, '');
-  }
-
-  /** Gets the value of "border-left-color" */
-  String get borderLeftColor =>
-    getPropertyValue('border-left-color');
-
-  /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value) {
-    setProperty('border-left-color', value, '');
-  }
-
-  /** Gets the value of "border-left-style" */
-  String get borderLeftStyle =>
-    getPropertyValue('border-left-style');
-
-  /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value) {
-    setProperty('border-left-style', value, '');
-  }
-
-  /** Gets the value of "border-left-width" */
-  String get borderLeftWidth =>
-    getPropertyValue('border-left-width');
-
-  /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value) {
-    setProperty('border-left-width', value, '');
-  }
-
-  /** Gets the value of "border-radius" */
-  String get borderRadius =>
-    getPropertyValue('border-radius');
-
-  /** Sets the value of "border-radius" */
-  void set borderRadius(var value) {
-    setProperty('border-radius', value, '');
-  }
-
-  /** Gets the value of "border-right" */
-  String get borderRight =>
-    getPropertyValue('border-right');
-
-  /** Sets the value of "border-right" */
-  void set borderRight(var value) {
-    setProperty('border-right', value, '');
-  }
-
-  /** Gets the value of "border-right-color" */
-  String get borderRightColor =>
-    getPropertyValue('border-right-color');
-
-  /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value) {
-    setProperty('border-right-color', value, '');
-  }
-
-  /** Gets the value of "border-right-style" */
-  String get borderRightStyle =>
-    getPropertyValue('border-right-style');
-
-  /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value) {
-    setProperty('border-right-style', value, '');
-  }
-
-  /** Gets the value of "border-right-width" */
-  String get borderRightWidth =>
-    getPropertyValue('border-right-width');
-
-  /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value) {
-    setProperty('border-right-width', value, '');
-  }
-
-  /** Gets the value of "border-spacing" */
-  String get borderSpacing =>
-    getPropertyValue('border-spacing');
-
-  /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value) {
-    setProperty('border-spacing', value, '');
-  }
-
-  /** Gets the value of "border-start" */
-  String get borderStart =>
-    getPropertyValue('${_browserPrefix}border-start');
-
-  /** Sets the value of "border-start" */
-  void set borderStart(var value) {
-    setProperty('${_browserPrefix}border-start', value, '');
-  }
-
-  /** Gets the value of "border-start-color" */
-  String get borderStartColor =>
-    getPropertyValue('${_browserPrefix}border-start-color');
-
-  /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value) {
-    setProperty('${_browserPrefix}border-start-color', value, '');
-  }
-
-  /** Gets the value of "border-start-style" */
-  String get borderStartStyle =>
-    getPropertyValue('${_browserPrefix}border-start-style');
-
-  /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value) {
-    setProperty('${_browserPrefix}border-start-style', value, '');
-  }
-
-  /** Gets the value of "border-start-width" */
-  String get borderStartWidth =>
-    getPropertyValue('${_browserPrefix}border-start-width');
-
-  /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value) {
-    setProperty('${_browserPrefix}border-start-width', value, '');
-  }
-
-  /** Gets the value of "border-style" */
-  String get borderStyle =>
-    getPropertyValue('border-style');
-
-  /** Sets the value of "border-style" */
-  void set borderStyle(var value) {
-    setProperty('border-style', value, '');
-  }
-
-  /** Gets the value of "border-top" */
-  String get borderTop =>
-    getPropertyValue('border-top');
-
-  /** Sets the value of "border-top" */
-  void set borderTop(var value) {
-    setProperty('border-top', value, '');
-  }
-
-  /** Gets the value of "border-top-color" */
-  String get borderTopColor =>
-    getPropertyValue('border-top-color');
-
-  /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value) {
-    setProperty('border-top-color', value, '');
-  }
-
-  /** Gets the value of "border-top-left-radius" */
-  String get borderTopLeftRadius =>
-    getPropertyValue('border-top-left-radius');
-
-  /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value) {
-    setProperty('border-top-left-radius', value, '');
-  }
-
-  /** Gets the value of "border-top-right-radius" */
-  String get borderTopRightRadius =>
-    getPropertyValue('border-top-right-radius');
-
-  /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value) {
-    setProperty('border-top-right-radius', value, '');
-  }
-
-  /** Gets the value of "border-top-style" */
-  String get borderTopStyle =>
-    getPropertyValue('border-top-style');
-
-  /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value) {
-    setProperty('border-top-style', value, '');
-  }
-
-  /** Gets the value of "border-top-width" */
-  String get borderTopWidth =>
-    getPropertyValue('border-top-width');
-
-  /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value) {
-    setProperty('border-top-width', value, '');
-  }
-
-  /** Gets the value of "border-vertical-spacing" */
-  String get borderVerticalSpacing =>
-    getPropertyValue('${_browserPrefix}border-vertical-spacing');
-
-  /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value) {
-    setProperty('${_browserPrefix}border-vertical-spacing', value, '');
-  }
-
-  /** Gets the value of "border-width" */
-  String get borderWidth =>
-    getPropertyValue('border-width');
-
-  /** Sets the value of "border-width" */
-  void set borderWidth(var value) {
-    setProperty('border-width', value, '');
-  }
-
-  /** Gets the value of "bottom" */
-  String get bottom =>
-    getPropertyValue('bottom');
-
-  /** Sets the value of "bottom" */
-  void set bottom(var value) {
-    setProperty('bottom', value, '');
-  }
-
-  /** Gets the value of "box-align" */
-  String get boxAlign =>
-    getPropertyValue('${_browserPrefix}box-align');
-
-  /** Sets the value of "box-align" */
-  void set boxAlign(var value) {
-    setProperty('${_browserPrefix}box-align', value, '');
-  }
-
-  /** Gets the value of "box-direction" */
-  String get boxDirection =>
-    getPropertyValue('${_browserPrefix}box-direction');
-
-  /** Sets the value of "box-direction" */
-  void set boxDirection(var value) {
-    setProperty('${_browserPrefix}box-direction', value, '');
-  }
-
-  /** Gets the value of "box-flex" */
-  String get boxFlex =>
-    getPropertyValue('${_browserPrefix}box-flex');
-
-  /** Sets the value of "box-flex" */
-  void set boxFlex(var value) {
-    setProperty('${_browserPrefix}box-flex', value, '');
-  }
-
-  /** Gets the value of "box-flex-group" */
-  String get boxFlexGroup =>
-    getPropertyValue('${_browserPrefix}box-flex-group');
-
-  /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value) {
-    setProperty('${_browserPrefix}box-flex-group', value, '');
-  }
-
-  /** Gets the value of "box-lines" */
-  String get boxLines =>
-    getPropertyValue('${_browserPrefix}box-lines');
-
-  /** Sets the value of "box-lines" */
-  void set boxLines(var value) {
-    setProperty('${_browserPrefix}box-lines', value, '');
-  }
-
-  /** Gets the value of "box-ordinal-group" */
-  String get boxOrdinalGroup =>
-    getPropertyValue('${_browserPrefix}box-ordinal-group');
-
-  /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value) {
-    setProperty('${_browserPrefix}box-ordinal-group', value, '');
-  }
-
-  /** Gets the value of "box-orient" */
-  String get boxOrient =>
-    getPropertyValue('${_browserPrefix}box-orient');
-
-  /** Sets the value of "box-orient" */
-  void set boxOrient(var value) {
-    setProperty('${_browserPrefix}box-orient', value, '');
-  }
-
-  /** Gets the value of "box-pack" */
-  String get boxPack =>
-    getPropertyValue('${_browserPrefix}box-pack');
-
-  /** Sets the value of "box-pack" */
-  void set boxPack(var value) {
-    setProperty('${_browserPrefix}box-pack', value, '');
-  }
-
-  /** Gets the value of "box-reflect" */
-  String get boxReflect =>
-    getPropertyValue('${_browserPrefix}box-reflect');
-
-  /** Sets the value of "box-reflect" */
-  void set boxReflect(var value) {
-    setProperty('${_browserPrefix}box-reflect', value, '');
-  }
-
-  /** Gets the value of "box-shadow" */
-  String get boxShadow =>
-    getPropertyValue('box-shadow');
-
-  /** Sets the value of "box-shadow" */
-  void set boxShadow(var value) {
-    setProperty('box-shadow', value, '');
-  }
-
-  /** Gets the value of "box-sizing" */
-  String get boxSizing =>
-    getPropertyValue('box-sizing');
-
-  /** Sets the value of "box-sizing" */
-  void set boxSizing(var value) {
-    setProperty('box-sizing', value, '');
-  }
-
-  /** Gets the value of "caption-side" */
-  String get captionSide =>
-    getPropertyValue('caption-side');
-
-  /** Sets the value of "caption-side" */
-  void set captionSide(var value) {
-    setProperty('caption-side', value, '');
-  }
-
-  /** Gets the value of "clear" */
-  String get clear =>
-    getPropertyValue('clear');
-
-  /** Sets the value of "clear" */
-  void set clear(var value) {
-    setProperty('clear', value, '');
-  }
-
-  /** Gets the value of "clip" */
-  String get clip =>
-    getPropertyValue('clip');
-
-  /** Sets the value of "clip" */
-  void set clip(var value) {
-    setProperty('clip', value, '');
-  }
-
-  /** Gets the value of "color" */
-  String get color =>
-    getPropertyValue('color');
-
-  /** Sets the value of "color" */
-  void set color(var value) {
-    setProperty('color', value, '');
-  }
-
-  /** Gets the value of "color-correction" */
-  String get colorCorrection =>
-    getPropertyValue('${_browserPrefix}color-correction');
-
-  /** Sets the value of "color-correction" */
-  void set colorCorrection(var value) {
-    setProperty('${_browserPrefix}color-correction', value, '');
-  }
-
-  /** Gets the value of "column-break-after" */
-  String get columnBreakAfter =>
-    getPropertyValue('${_browserPrefix}column-break-after');
-
-  /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value) {
-    setProperty('${_browserPrefix}column-break-after', value, '');
-  }
-
-  /** Gets the value of "column-break-before" */
-  String get columnBreakBefore =>
-    getPropertyValue('${_browserPrefix}column-break-before');
-
-  /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value) {
-    setProperty('${_browserPrefix}column-break-before', value, '');
-  }
-
-  /** Gets the value of "column-break-inside" */
-  String get columnBreakInside =>
-    getPropertyValue('${_browserPrefix}column-break-inside');
-
-  /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value) {
-    setProperty('${_browserPrefix}column-break-inside', value, '');
-  }
-
-  /** Gets the value of "column-count" */
-  String get columnCount =>
-    getPropertyValue('${_browserPrefix}column-count');
-
-  /** Sets the value of "column-count" */
-  void set columnCount(var value) {
-    setProperty('${_browserPrefix}column-count', value, '');
-  }
-
-  /** Gets the value of "column-gap" */
-  String get columnGap =>
-    getPropertyValue('${_browserPrefix}column-gap');
-
-  /** Sets the value of "column-gap" */
-  void set columnGap(var value) {
-    setProperty('${_browserPrefix}column-gap', value, '');
-  }
-
-  /** Gets the value of "column-rule" */
-  String get columnRule =>
-    getPropertyValue('${_browserPrefix}column-rule');
-
-  /** Sets the value of "column-rule" */
-  void set columnRule(var value) {
-    setProperty('${_browserPrefix}column-rule', value, '');
-  }
-
-  /** Gets the value of "column-rule-color" */
-  String get columnRuleColor =>
-    getPropertyValue('${_browserPrefix}column-rule-color');
-
-  /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value) {
-    setProperty('${_browserPrefix}column-rule-color', value, '');
-  }
-
-  /** Gets the value of "column-rule-style" */
-  String get columnRuleStyle =>
-    getPropertyValue('${_browserPrefix}column-rule-style');
-
-  /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value) {
-    setProperty('${_browserPrefix}column-rule-style', value, '');
-  }
-
-  /** Gets the value of "column-rule-width" */
-  String get columnRuleWidth =>
-    getPropertyValue('${_browserPrefix}column-rule-width');
-
-  /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value) {
-    setProperty('${_browserPrefix}column-rule-width', value, '');
-  }
-
-  /** Gets the value of "column-span" */
-  String get columnSpan =>
-    getPropertyValue('${_browserPrefix}column-span');
-
-  /** Sets the value of "column-span" */
-  void set columnSpan(var value) {
-    setProperty('${_browserPrefix}column-span', value, '');
-  }
-
-  /** Gets the value of "column-width" */
-  String get columnWidth =>
-    getPropertyValue('${_browserPrefix}column-width');
-
-  /** Sets the value of "column-width" */
-  void set columnWidth(var value) {
-    setProperty('${_browserPrefix}column-width', value, '');
-  }
-
-  /** Gets the value of "columns" */
-  String get columns =>
-    getPropertyValue('${_browserPrefix}columns');
-
-  /** Sets the value of "columns" */
-  void set columns(var value) {
-    setProperty('${_browserPrefix}columns', value, '');
-  }
-
-  /** Gets the value of "content" */
-  String get content =>
-    getPropertyValue('content');
-
-  /** Sets the value of "content" */
-  void set content(var value) {
-    setProperty('content', value, '');
-  }
-
-  /** Gets the value of "counter-increment" */
-  String get counterIncrement =>
-    getPropertyValue('counter-increment');
-
-  /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value) {
-    setProperty('counter-increment', value, '');
-  }
-
-  /** Gets the value of "counter-reset" */
-  String get counterReset =>
-    getPropertyValue('counter-reset');
-
-  /** Sets the value of "counter-reset" */
-  void set counterReset(var value) {
-    setProperty('counter-reset', value, '');
-  }
-
-  /** Gets the value of "cursor" */
-  String get cursor =>
-    getPropertyValue('cursor');
-
-  /** Sets the value of "cursor" */
-  void set cursor(var value) {
-    setProperty('cursor', value, '');
-  }
-
-  /** Gets the value of "direction" */
-  String get direction =>
-    getPropertyValue('direction');
-
-  /** Sets the value of "direction" */
-  void set direction(var value) {
-    setProperty('direction', value, '');
-  }
-
-  /** Gets the value of "display" */
-  String get display =>
-    getPropertyValue('display');
-
-  /** Sets the value of "display" */
-  void set display(var value) {
-    setProperty('display', value, '');
-  }
-
-  /** Gets the value of "empty-cells" */
-  String get emptyCells =>
-    getPropertyValue('empty-cells');
-
-  /** Sets the value of "empty-cells" */
-  void set emptyCells(var value) {
-    setProperty('empty-cells', value, '');
-  }
-
-  /** Gets the value of "filter" */
-  String get filter =>
-    getPropertyValue('${_browserPrefix}filter');
-
-  /** Sets the value of "filter" */
-  void set filter(var value) {
-    setProperty('${_browserPrefix}filter', value, '');
-  }
-
-  /** Gets the value of "flex-align" */
-  String get flexAlign =>
-    getPropertyValue('${_browserPrefix}flex-align');
-
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value) {
-    setProperty('${_browserPrefix}flex-align', value, '');
-  }
-
-  /** Gets the value of "flex-flow" */
-  String get flexFlow =>
-    getPropertyValue('${_browserPrefix}flex-flow');
-
-  /** Sets the value of "flex-flow" */
-  void set flexFlow(var value) {
-    setProperty('${_browserPrefix}flex-flow', value, '');
-  }
-
-  /** Gets the value of "flex-order" */
-  String get flexOrder =>
-    getPropertyValue('${_browserPrefix}flex-order');
-
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value) {
-    setProperty('${_browserPrefix}flex-order', value, '');
-  }
-
-  /** Gets the value of "flex-pack" */
-  String get flexPack =>
-    getPropertyValue('${_browserPrefix}flex-pack');
-
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value) {
-    setProperty('${_browserPrefix}flex-pack', value, '');
-  }
-
-  /** Gets the value of "float" */
-  String get float =>
-    getPropertyValue('float');
-
-  /** Sets the value of "float" */
-  void set float(var value) {
-    setProperty('float', value, '');
-  }
-
-  /** Gets the value of "flow-from" */
-  String get flowFrom =>
-    getPropertyValue('${_browserPrefix}flow-from');
-
-  /** Sets the value of "flow-from" */
-  void set flowFrom(var value) {
-    setProperty('${_browserPrefix}flow-from', value, '');
-  }
-
-  /** Gets the value of "flow-into" */
-  String get flowInto =>
-    getPropertyValue('${_browserPrefix}flow-into');
-
-  /** Sets the value of "flow-into" */
-  void set flowInto(var value) {
-    setProperty('${_browserPrefix}flow-into', value, '');
-  }
-
-  /** Gets the value of "font" */
-  String get font =>
-    getPropertyValue('font');
-
-  /** Sets the value of "font" */
-  void set font(var value) {
-    setProperty('font', value, '');
-  }
-
-  /** Gets the value of "font-family" */
-  String get fontFamily =>
-    getPropertyValue('font-family');
-
-  /** Sets the value of "font-family" */
-  void set fontFamily(var value) {
-    setProperty('font-family', value, '');
-  }
-
-  /** Gets the value of "font-feature-settings" */
-  String get fontFeatureSettings =>
-    getPropertyValue('${_browserPrefix}font-feature-settings');
-
-  /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value) {
-    setProperty('${_browserPrefix}font-feature-settings', value, '');
-  }
-
-  /** Gets the value of "font-size" */
-  String get fontSize =>
-    getPropertyValue('font-size');
-
-  /** Sets the value of "font-size" */
-  void set fontSize(var value) {
-    setProperty('font-size', value, '');
-  }
-
-  /** Gets the value of "font-size-delta" */
-  String get fontSizeDelta =>
-    getPropertyValue('${_browserPrefix}font-size-delta');
-
-  /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value) {
-    setProperty('${_browserPrefix}font-size-delta', value, '');
-  }
-
-  /** Gets the value of "font-smoothing" */
-  String get fontSmoothing =>
-    getPropertyValue('${_browserPrefix}font-smoothing');
-
-  /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value) {
-    setProperty('${_browserPrefix}font-smoothing', value, '');
-  }
-
-  /** Gets the value of "font-stretch" */
-  String get fontStretch =>
-    getPropertyValue('font-stretch');
-
-  /** Sets the value of "font-stretch" */
-  void set fontStretch(var value) {
-    setProperty('font-stretch', value, '');
-  }
-
-  /** Gets the value of "font-style" */
-  String get fontStyle =>
-    getPropertyValue('font-style');
-
-  /** Sets the value of "font-style" */
-  void set fontStyle(var value) {
-    setProperty('font-style', value, '');
-  }
-
-  /** Gets the value of "font-variant" */
-  String get fontVariant =>
-    getPropertyValue('font-variant');
-
-  /** Sets the value of "font-variant" */
-  void set fontVariant(var value) {
-    setProperty('font-variant', value, '');
-  }
-
-  /** Gets the value of "font-weight" */
-  String get fontWeight =>
-    getPropertyValue('font-weight');
-
-  /** Sets the value of "font-weight" */
-  void set fontWeight(var value) {
-    setProperty('font-weight', value, '');
-  }
-
-  /** Gets the value of "height" */
-  String get height =>
-    getPropertyValue('height');
-
-  /** Sets the value of "height" */
-  void set height(var value) {
-    setProperty('height', value, '');
-  }
-
-  /** Gets the value of "highlight" */
-  String get highlight =>
-    getPropertyValue('${_browserPrefix}highlight');
-
-  /** Sets the value of "highlight" */
-  void set highlight(var value) {
-    setProperty('${_browserPrefix}highlight', value, '');
-  }
-
-  /** Gets the value of "hyphenate-character" */
-  String get hyphenateCharacter =>
-    getPropertyValue('${_browserPrefix}hyphenate-character');
-
-  /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value) {
-    setProperty('${_browserPrefix}hyphenate-character', value, '');
-  }
-
-  /** Gets the value of "hyphenate-limit-after" */
-  String get hyphenateLimitAfter =>
-    getPropertyValue('${_browserPrefix}hyphenate-limit-after');
-
-  /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value) {
-    setProperty('${_browserPrefix}hyphenate-limit-after', value, '');
-  }
-
-  /** Gets the value of "hyphenate-limit-before" */
-  String get hyphenateLimitBefore =>
-    getPropertyValue('${_browserPrefix}hyphenate-limit-before');
-
-  /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value) {
-    setProperty('${_browserPrefix}hyphenate-limit-before', value, '');
-  }
-
-  /** Gets the value of "hyphenate-limit-lines" */
-  String get hyphenateLimitLines =>
-    getPropertyValue('${_browserPrefix}hyphenate-limit-lines');
-
-  /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value) {
-    setProperty('${_browserPrefix}hyphenate-limit-lines', value, '');
-  }
-
-  /** Gets the value of "hyphens" */
-  String get hyphens =>
-    getPropertyValue('${_browserPrefix}hyphens');
-
-  /** Sets the value of "hyphens" */
-  void set hyphens(var value) {
-    setProperty('${_browserPrefix}hyphens', value, '');
-  }
-
-  /** Gets the value of "image-rendering" */
-  String get imageRendering =>
-    getPropertyValue('image-rendering');
-
-  /** Sets the value of "image-rendering" */
-  void set imageRendering(var value) {
-    setProperty('image-rendering', value, '');
-  }
-
-  /** Gets the value of "left" */
-  String get left =>
-    getPropertyValue('left');
-
-  /** Sets the value of "left" */
-  void set left(var value) {
-    setProperty('left', value, '');
-  }
-
-  /** Gets the value of "letter-spacing" */
-  String get letterSpacing =>
-    getPropertyValue('letter-spacing');
-
-  /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value) {
-    setProperty('letter-spacing', value, '');
-  }
-
-  /** Gets the value of "line-box-contain" */
-  String get lineBoxContain =>
-    getPropertyValue('${_browserPrefix}line-box-contain');
-
-  /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value) {
-    setProperty('${_browserPrefix}line-box-contain', value, '');
-  }
-
-  /** Gets the value of "line-break" */
-  String get lineBreak =>
-    getPropertyValue('${_browserPrefix}line-break');
-
-  /** Sets the value of "line-break" */
-  void set lineBreak(var value) {
-    setProperty('${_browserPrefix}line-break', value, '');
-  }
-
-  /** Gets the value of "line-clamp" */
-  String get lineClamp =>
-    getPropertyValue('${_browserPrefix}line-clamp');
-
-  /** Sets the value of "line-clamp" */
-  void set lineClamp(var value) {
-    setProperty('${_browserPrefix}line-clamp', value, '');
-  }
-
-  /** Gets the value of "line-height" */
-  String get lineHeight =>
-    getPropertyValue('line-height');
-
-  /** Sets the value of "line-height" */
-  void set lineHeight(var value) {
-    setProperty('line-height', value, '');
-  }
-
-  /** Gets the value of "list-style" */
-  String get listStyle =>
-    getPropertyValue('list-style');
-
-  /** Sets the value of "list-style" */
-  void set listStyle(var value) {
-    setProperty('list-style', value, '');
-  }
-
-  /** Gets the value of "list-style-image" */
-  String get listStyleImage =>
-    getPropertyValue('list-style-image');
-
-  /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value) {
-    setProperty('list-style-image', value, '');
-  }
-
-  /** Gets the value of "list-style-position" */
-  String get listStylePosition =>
-    getPropertyValue('list-style-position');
-
-  /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value) {
-    setProperty('list-style-position', value, '');
-  }
-
-  /** Gets the value of "list-style-type" */
-  String get listStyleType =>
-    getPropertyValue('list-style-type');
-
-  /** Sets the value of "list-style-type" */
-  void set listStyleType(var value) {
-    setProperty('list-style-type', value, '');
-  }
-
-  /** Gets the value of "locale" */
-  String get locale =>
-    getPropertyValue('${_browserPrefix}locale');
-
-  /** Sets the value of "locale" */
-  void set locale(var value) {
-    setProperty('${_browserPrefix}locale', value, '');
-  }
-
-  /** Gets the value of "logical-height" */
-  String get logicalHeight =>
-    getPropertyValue('${_browserPrefix}logical-height');
-
-  /** Sets the value of "logical-height" */
-  void set logicalHeight(var value) {
-    setProperty('${_browserPrefix}logical-height', value, '');
-  }
-
-  /** Gets the value of "logical-width" */
-  String get logicalWidth =>
-    getPropertyValue('${_browserPrefix}logical-width');
-
-  /** Sets the value of "logical-width" */
-  void set logicalWidth(var value) {
-    setProperty('${_browserPrefix}logical-width', value, '');
-  }
-
-  /** Gets the value of "margin" */
-  String get margin =>
-    getPropertyValue('margin');
-
-  /** Sets the value of "margin" */
-  void set margin(var value) {
-    setProperty('margin', value, '');
-  }
-
-  /** Gets the value of "margin-after" */
-  String get marginAfter =>
-    getPropertyValue('${_browserPrefix}margin-after');
-
-  /** Sets the value of "margin-after" */
-  void set marginAfter(var value) {
-    setProperty('${_browserPrefix}margin-after', value, '');
-  }
-
-  /** Gets the value of "margin-after-collapse" */
-  String get marginAfterCollapse =>
-    getPropertyValue('${_browserPrefix}margin-after-collapse');
-
-  /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value) {
-    setProperty('${_browserPrefix}margin-after-collapse', value, '');
-  }
-
-  /** Gets the value of "margin-before" */
-  String get marginBefore =>
-    getPropertyValue('${_browserPrefix}margin-before');
-
-  /** Sets the value of "margin-before" */
-  void set marginBefore(var value) {
-    setProperty('${_browserPrefix}margin-before', value, '');
-  }
-
-  /** Gets the value of "margin-before-collapse" */
-  String get marginBeforeCollapse =>
-    getPropertyValue('${_browserPrefix}margin-before-collapse');
-
-  /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value) {
-    setProperty('${_browserPrefix}margin-before-collapse', value, '');
-  }
-
-  /** Gets the value of "margin-bottom" */
-  String get marginBottom =>
-    getPropertyValue('margin-bottom');
-
-  /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value) {
-    setProperty('margin-bottom', value, '');
-  }
-
-  /** Gets the value of "margin-bottom-collapse" */
-  String get marginBottomCollapse =>
-    getPropertyValue('${_browserPrefix}margin-bottom-collapse');
-
-  /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value) {
-    setProperty('${_browserPrefix}margin-bottom-collapse', value, '');
-  }
-
-  /** Gets the value of "margin-collapse" */
-  String get marginCollapse =>
-    getPropertyValue('${_browserPrefix}margin-collapse');
-
-  /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value) {
-    setProperty('${_browserPrefix}margin-collapse', value, '');
-  }
-
-  /** Gets the value of "margin-end" */
-  String get marginEnd =>
-    getPropertyValue('${_browserPrefix}margin-end');
-
-  /** Sets the value of "margin-end" */
-  void set marginEnd(var value) {
-    setProperty('${_browserPrefix}margin-end', value, '');
-  }
-
-  /** Gets the value of "margin-left" */
-  String get marginLeft =>
-    getPropertyValue('margin-left');
-
-  /** Sets the value of "margin-left" */
-  void set marginLeft(var value) {
-    setProperty('margin-left', value, '');
-  }
-
-  /** Gets the value of "margin-right" */
-  String get marginRight =>
-    getPropertyValue('margin-right');
-
-  /** Sets the value of "margin-right" */
-  void set marginRight(var value) {
-    setProperty('margin-right', value, '');
-  }
-
-  /** Gets the value of "margin-start" */
-  String get marginStart =>
-    getPropertyValue('${_browserPrefix}margin-start');
-
-  /** Sets the value of "margin-start" */
-  void set marginStart(var value) {
-    setProperty('${_browserPrefix}margin-start', value, '');
-  }
-
-  /** Gets the value of "margin-top" */
-  String get marginTop =>
-    getPropertyValue('margin-top');
-
-  /** Sets the value of "margin-top" */
-  void set marginTop(var value) {
-    setProperty('margin-top', value, '');
-  }
-
-  /** Gets the value of "margin-top-collapse" */
-  String get marginTopCollapse =>
-    getPropertyValue('${_browserPrefix}margin-top-collapse');
-
-  /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value) {
-    setProperty('${_browserPrefix}margin-top-collapse', value, '');
-  }
-
-  /** Gets the value of "marquee" */
-  String get marquee =>
-    getPropertyValue('${_browserPrefix}marquee');
-
-  /** Sets the value of "marquee" */
-  void set marquee(var value) {
-    setProperty('${_browserPrefix}marquee', value, '');
-  }
-
-  /** Gets the value of "marquee-direction" */
-  String get marqueeDirection =>
-    getPropertyValue('${_browserPrefix}marquee-direction');
-
-  /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value) {
-    setProperty('${_browserPrefix}marquee-direction', value, '');
-  }
-
-  /** Gets the value of "marquee-increment" */
-  String get marqueeIncrement =>
-    getPropertyValue('${_browserPrefix}marquee-increment');
-
-  /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value) {
-    setProperty('${_browserPrefix}marquee-increment', value, '');
-  }
-
-  /** Gets the value of "marquee-repetition" */
-  String get marqueeRepetition =>
-    getPropertyValue('${_browserPrefix}marquee-repetition');
-
-  /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value) {
-    setProperty('${_browserPrefix}marquee-repetition', value, '');
-  }
-
-  /** Gets the value of "marquee-speed" */
-  String get marqueeSpeed =>
-    getPropertyValue('${_browserPrefix}marquee-speed');
-
-  /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value) {
-    setProperty('${_browserPrefix}marquee-speed', value, '');
-  }
-
-  /** Gets the value of "marquee-style" */
-  String get marqueeStyle =>
-    getPropertyValue('${_browserPrefix}marquee-style');
-
-  /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value) {
-    setProperty('${_browserPrefix}marquee-style', value, '');
-  }
-
-  /** Gets the value of "mask" */
-  String get mask =>
-    getPropertyValue('${_browserPrefix}mask');
-
-  /** Sets the value of "mask" */
-  void set mask(var value) {
-    setProperty('${_browserPrefix}mask', value, '');
-  }
-
-  /** Gets the value of "mask-attachment" */
-  String get maskAttachment =>
-    getPropertyValue('${_browserPrefix}mask-attachment');
-
-  /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value) {
-    setProperty('${_browserPrefix}mask-attachment', value, '');
-  }
-
-  /** Gets the value of "mask-box-image" */
-  String get maskBoxImage =>
-    getPropertyValue('${_browserPrefix}mask-box-image');
-
-  /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value) {
-    setProperty('${_browserPrefix}mask-box-image', value, '');
-  }
-
-  /** Gets the value of "mask-box-image-outset" */
-  String get maskBoxImageOutset =>
-    getPropertyValue('${_browserPrefix}mask-box-image-outset');
-
-  /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value) {
-    setProperty('${_browserPrefix}mask-box-image-outset', value, '');
-  }
-
-  /** Gets the value of "mask-box-image-repeat" */
-  String get maskBoxImageRepeat =>
-    getPropertyValue('${_browserPrefix}mask-box-image-repeat');
-
-  /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value) {
-    setProperty('${_browserPrefix}mask-box-image-repeat', value, '');
-  }
-
-  /** Gets the value of "mask-box-image-slice" */
-  String get maskBoxImageSlice =>
-    getPropertyValue('${_browserPrefix}mask-box-image-slice');
-
-  /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value) {
-    setProperty('${_browserPrefix}mask-box-image-slice', value, '');
-  }
-
-  /** Gets the value of "mask-box-image-source" */
-  String get maskBoxImageSource =>
-    getPropertyValue('${_browserPrefix}mask-box-image-source');
-
-  /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value) {
-    setProperty('${_browserPrefix}mask-box-image-source', value, '');
-  }
-
-  /** Gets the value of "mask-box-image-width" */
-  String get maskBoxImageWidth =>
-    getPropertyValue('${_browserPrefix}mask-box-image-width');
-
-  /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value) {
-    setProperty('${_browserPrefix}mask-box-image-width', value, '');
-  }
-
-  /** Gets the value of "mask-clip" */
-  String get maskClip =>
-    getPropertyValue('${_browserPrefix}mask-clip');
-
-  /** Sets the value of "mask-clip" */
-  void set maskClip(var value) {
-    setProperty('${_browserPrefix}mask-clip', value, '');
-  }
-
-  /** Gets the value of "mask-composite" */
-  String get maskComposite =>
-    getPropertyValue('${_browserPrefix}mask-composite');
-
-  /** Sets the value of "mask-composite" */
-  void set maskComposite(var value) {
-    setProperty('${_browserPrefix}mask-composite', value, '');
-  }
-
-  /** Gets the value of "mask-image" */
-  String get maskImage =>
-    getPropertyValue('${_browserPrefix}mask-image');
-
-  /** Sets the value of "mask-image" */
-  void set maskImage(var value) {
-    setProperty('${_browserPrefix}mask-image', value, '');
-  }
-
-  /** Gets the value of "mask-origin" */
-  String get maskOrigin =>
-    getPropertyValue('${_browserPrefix}mask-origin');
-
-  /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value) {
-    setProperty('${_browserPrefix}mask-origin', value, '');
-  }
-
-  /** Gets the value of "mask-position" */
-  String get maskPosition =>
-    getPropertyValue('${_browserPrefix}mask-position');
-
-  /** Sets the value of "mask-position" */
-  void set maskPosition(var value) {
-    setProperty('${_browserPrefix}mask-position', value, '');
-  }
-
-  /** Gets the value of "mask-position-x" */
-  String get maskPositionX =>
-    getPropertyValue('${_browserPrefix}mask-position-x');
-
-  /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value) {
-    setProperty('${_browserPrefix}mask-position-x', value, '');
-  }
-
-  /** Gets the value of "mask-position-y" */
-  String get maskPositionY =>
-    getPropertyValue('${_browserPrefix}mask-position-y');
-
-  /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value) {
-    setProperty('${_browserPrefix}mask-position-y', value, '');
-  }
-
-  /** Gets the value of "mask-repeat" */
-  String get maskRepeat =>
-    getPropertyValue('${_browserPrefix}mask-repeat');
-
-  /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value) {
-    setProperty('${_browserPrefix}mask-repeat', value, '');
-  }
-
-  /** Gets the value of "mask-repeat-x" */
-  String get maskRepeatX =>
-    getPropertyValue('${_browserPrefix}mask-repeat-x');
-
-  /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value) {
-    setProperty('${_browserPrefix}mask-repeat-x', value, '');
-  }
-
-  /** Gets the value of "mask-repeat-y" */
-  String get maskRepeatY =>
-    getPropertyValue('${_browserPrefix}mask-repeat-y');
-
-  /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value) {
-    setProperty('${_browserPrefix}mask-repeat-y', value, '');
-  }
-
-  /** Gets the value of "mask-size" */
-  String get maskSize =>
-    getPropertyValue('${_browserPrefix}mask-size');
-
-  /** Sets the value of "mask-size" */
-  void set maskSize(var value) {
-    setProperty('${_browserPrefix}mask-size', value, '');
-  }
-
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor =>
-    getPropertyValue('${_browserPrefix}match-nearest-mail-blockquote-color');
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value) {
-    setProperty('${_browserPrefix}match-nearest-mail-blockquote-color', value, '');
-  }
-
-  /** Gets the value of "max-height" */
-  String get maxHeight =>
-    getPropertyValue('max-height');
-
-  /** Sets the value of "max-height" */
-  void set maxHeight(var value) {
-    setProperty('max-height', value, '');
-  }
-
-  /** Gets the value of "max-logical-height" */
-  String get maxLogicalHeight =>
-    getPropertyValue('${_browserPrefix}max-logical-height');
-
-  /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value) {
-    setProperty('${_browserPrefix}max-logical-height', value, '');
-  }
-
-  /** Gets the value of "max-logical-width" */
-  String get maxLogicalWidth =>
-    getPropertyValue('${_browserPrefix}max-logical-width');
-
-  /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value) {
-    setProperty('${_browserPrefix}max-logical-width', value, '');
-  }
-
-  /** Gets the value of "max-width" */
-  String get maxWidth =>
-    getPropertyValue('max-width');
-
-  /** Sets the value of "max-width" */
-  void set maxWidth(var value) {
-    setProperty('max-width', value, '');
-  }
-
-  /** Gets the value of "min-height" */
-  String get minHeight =>
-    getPropertyValue('min-height');
-
-  /** Sets the value of "min-height" */
-  void set minHeight(var value) {
-    setProperty('min-height', value, '');
-  }
-
-  /** Gets the value of "min-logical-height" */
-  String get minLogicalHeight =>
-    getPropertyValue('${_browserPrefix}min-logical-height');
-
-  /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value) {
-    setProperty('${_browserPrefix}min-logical-height', value, '');
-  }
-
-  /** Gets the value of "min-logical-width" */
-  String get minLogicalWidth =>
-    getPropertyValue('${_browserPrefix}min-logical-width');
-
-  /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value) {
-    setProperty('${_browserPrefix}min-logical-width', value, '');
-  }
-
-  /** Gets the value of "min-width" */
-  String get minWidth =>
-    getPropertyValue('min-width');
-
-  /** Sets the value of "min-width" */
-  void set minWidth(var value) {
-    setProperty('min-width', value, '');
-  }
-
-  /** Gets the value of "nbsp-mode" */
-  String get nbspMode =>
-    getPropertyValue('${_browserPrefix}nbsp-mode');
-
-  /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value) {
-    setProperty('${_browserPrefix}nbsp-mode', value, '');
-  }
-
-  /** Gets the value of "opacity" */
-  String get opacity =>
-    getPropertyValue('opacity');
-
-  /** Sets the value of "opacity" */
-  void set opacity(var value) {
-    setProperty('opacity', value, '');
-  }
-
-  /** Gets the value of "orphans" */
-  String get orphans =>
-    getPropertyValue('orphans');
-
-  /** Sets the value of "orphans" */
-  void set orphans(var value) {
-    setProperty('orphans', value, '');
-  }
-
-  /** Gets the value of "outline" */
-  String get outline =>
-    getPropertyValue('outline');
-
-  /** Sets the value of "outline" */
-  void set outline(var value) {
-    setProperty('outline', value, '');
-  }
-
-  /** Gets the value of "outline-color" */
-  String get outlineColor =>
-    getPropertyValue('outline-color');
-
-  /** Sets the value of "outline-color" */
-  void set outlineColor(var value) {
-    setProperty('outline-color', value, '');
-  }
-
-  /** Gets the value of "outline-offset" */
-  String get outlineOffset =>
-    getPropertyValue('outline-offset');
-
-  /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value) {
-    setProperty('outline-offset', value, '');
-  }
-
-  /** Gets the value of "outline-style" */
-  String get outlineStyle =>
-    getPropertyValue('outline-style');
-
-  /** Sets the value of "outline-style" */
-  void set outlineStyle(var value) {
-    setProperty('outline-style', value, '');
-  }
-
-  /** Gets the value of "outline-width" */
-  String get outlineWidth =>
-    getPropertyValue('outline-width');
-
-  /** Sets the value of "outline-width" */
-  void set outlineWidth(var value) {
-    setProperty('outline-width', value, '');
-  }
-
-  /** Gets the value of "overflow" */
-  String get overflow =>
-    getPropertyValue('overflow');
-
-  /** Sets the value of "overflow" */
-  void set overflow(var value) {
-    setProperty('overflow', value, '');
-  }
-
-  /** Gets the value of "overflow-x" */
-  String get overflowX =>
-    getPropertyValue('overflow-x');
-
-  /** Sets the value of "overflow-x" */
-  void set overflowX(var value) {
-    setProperty('overflow-x', value, '');
-  }
-
-  /** Gets the value of "overflow-y" */
-  String get overflowY =>
-    getPropertyValue('overflow-y');
-
-  /** Sets the value of "overflow-y" */
-  void set overflowY(var value) {
-    setProperty('overflow-y', value, '');
-  }
-
-  /** Gets the value of "padding" */
-  String get padding =>
-    getPropertyValue('padding');
-
-  /** Sets the value of "padding" */
-  void set padding(var value) {
-    setProperty('padding', value, '');
-  }
-
-  /** Gets the value of "padding-after" */
-  String get paddingAfter =>
-    getPropertyValue('${_browserPrefix}padding-after');
-
-  /** Sets the value of "padding-after" */
-  void set paddingAfter(var value) {
-    setProperty('${_browserPrefix}padding-after', value, '');
-  }
-
-  /** Gets the value of "padding-before" */
-  String get paddingBefore =>
-    getPropertyValue('${_browserPrefix}padding-before');
-
-  /** Sets the value of "padding-before" */
-  void set paddingBefore(var value) {
-    setProperty('${_browserPrefix}padding-before', value, '');
-  }
-
-  /** Gets the value of "padding-bottom" */
-  String get paddingBottom =>
-    getPropertyValue('padding-bottom');
-
-  /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value) {
-    setProperty('padding-bottom', value, '');
-  }
-
-  /** Gets the value of "padding-end" */
-  String get paddingEnd =>
-    getPropertyValue('${_browserPrefix}padding-end');
-
-  /** Sets the value of "padding-end" */
-  void set paddingEnd(var value) {
-    setProperty('${_browserPrefix}padding-end', value, '');
-  }
-
-  /** Gets the value of "padding-left" */
-  String get paddingLeft =>
-    getPropertyValue('padding-left');
-
-  /** Sets the value of "padding-left" */
-  void set paddingLeft(var value) {
-    setProperty('padding-left', value, '');
-  }
-
-  /** Gets the value of "padding-right" */
-  String get paddingRight =>
-    getPropertyValue('padding-right');
-
-  /** Sets the value of "padding-right" */
-  void set paddingRight(var value) {
-    setProperty('padding-right', value, '');
-  }
-
-  /** Gets the value of "padding-start" */
-  String get paddingStart =>
-    getPropertyValue('${_browserPrefix}padding-start');
-
-  /** Sets the value of "padding-start" */
-  void set paddingStart(var value) {
-    setProperty('${_browserPrefix}padding-start', value, '');
-  }
-
-  /** Gets the value of "padding-top" */
-  String get paddingTop =>
-    getPropertyValue('padding-top');
-
-  /** Sets the value of "padding-top" */
-  void set paddingTop(var value) {
-    setProperty('padding-top', value, '');
-  }
-
-  /** Gets the value of "page" */
-  String get page =>
-    getPropertyValue('page');
-
-  /** Sets the value of "page" */
-  void set page(var value) {
-    setProperty('page', value, '');
-  }
-
-  /** Gets the value of "page-break-after" */
-  String get pageBreakAfter =>
-    getPropertyValue('page-break-after');
-
-  /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value) {
-    setProperty('page-break-after', value, '');
-  }
-
-  /** Gets the value of "page-break-before" */
-  String get pageBreakBefore =>
-    getPropertyValue('page-break-before');
-
-  /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value) {
-    setProperty('page-break-before', value, '');
-  }
-
-  /** Gets the value of "page-break-inside" */
-  String get pageBreakInside =>
-    getPropertyValue('page-break-inside');
-
-  /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value) {
-    setProperty('page-break-inside', value, '');
-  }
-
-  /** Gets the value of "perspective" */
-  String get perspective =>
-    getPropertyValue('${_browserPrefix}perspective');
-
-  /** Sets the value of "perspective" */
-  void set perspective(var value) {
-    setProperty('${_browserPrefix}perspective', value, '');
-  }
-
-  /** Gets the value of "perspective-origin" */
-  String get perspectiveOrigin =>
-    getPropertyValue('${_browserPrefix}perspective-origin');
-
-  /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value) {
-    setProperty('${_browserPrefix}perspective-origin', value, '');
-  }
-
-  /** Gets the value of "perspective-origin-x" */
-  String get perspectiveOriginX =>
-    getPropertyValue('${_browserPrefix}perspective-origin-x');
-
-  /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value) {
-    setProperty('${_browserPrefix}perspective-origin-x', value, '');
-  }
-
-  /** Gets the value of "perspective-origin-y" */
-  String get perspectiveOriginY =>
-    getPropertyValue('${_browserPrefix}perspective-origin-y');
-
-  /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value) {
-    setProperty('${_browserPrefix}perspective-origin-y', value, '');
-  }
-
-  /** Gets the value of "pointer-events" */
-  String get pointerEvents =>
-    getPropertyValue('pointer-events');
-
-  /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value) {
-    setProperty('pointer-events', value, '');
-  }
-
-  /** Gets the value of "position" */
-  String get position =>
-    getPropertyValue('position');
-
-  /** Sets the value of "position" */
-  void set position(var value) {
-    setProperty('position', value, '');
-  }
-
-  /** Gets the value of "quotes" */
-  String get quotes =>
-    getPropertyValue('quotes');
-
-  /** Sets the value of "quotes" */
-  void set quotes(var value) {
-    setProperty('quotes', value, '');
-  }
-
-  /** Gets the value of "region-break-after" */
-  String get regionBreakAfter =>
-    getPropertyValue('${_browserPrefix}region-break-after');
-
-  /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value) {
-    setProperty('${_browserPrefix}region-break-after', value, '');
-  }
-
-  /** Gets the value of "region-break-before" */
-  String get regionBreakBefore =>
-    getPropertyValue('${_browserPrefix}region-break-before');
-
-  /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value) {
-    setProperty('${_browserPrefix}region-break-before', value, '');
-  }
-
-  /** Gets the value of "region-break-inside" */
-  String get regionBreakInside =>
-    getPropertyValue('${_browserPrefix}region-break-inside');
-
-  /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value) {
-    setProperty('${_browserPrefix}region-break-inside', value, '');
-  }
-
-  /** Gets the value of "region-overflow" */
-  String get regionOverflow =>
-    getPropertyValue('${_browserPrefix}region-overflow');
-
-  /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value) {
-    setProperty('${_browserPrefix}region-overflow', value, '');
-  }
-
-  /** Gets the value of "resize" */
-  String get resize =>
-    getPropertyValue('resize');
-
-  /** Sets the value of "resize" */
-  void set resize(var value) {
-    setProperty('resize', value, '');
-  }
-
-  /** Gets the value of "right" */
-  String get right =>
-    getPropertyValue('right');
-
-  /** Sets the value of "right" */
-  void set right(var value) {
-    setProperty('right', value, '');
-  }
-
-  /** Gets the value of "rtl-ordering" */
-  String get rtlOrdering =>
-    getPropertyValue('${_browserPrefix}rtl-ordering');
-
-  /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value) {
-    setProperty('${_browserPrefix}rtl-ordering', value, '');
-  }
-
-  /** Gets the value of "size" */
-  String get size =>
-    getPropertyValue('size');
-
-  /** Sets the value of "size" */
-  void set size(var value) {
-    setProperty('size', value, '');
-  }
-
-  /** Gets the value of "speak" */
-  String get speak =>
-    getPropertyValue('speak');
-
-  /** Sets the value of "speak" */
-  void set speak(var value) {
-    setProperty('speak', value, '');
-  }
-
-  /** Gets the value of "src" */
-  String get src =>
-    getPropertyValue('src');
-
-  /** Sets the value of "src" */
-  void set src(var value) {
-    setProperty('src', value, '');
-  }
-
-  /** Gets the value of "table-layout" */
-  String get tableLayout =>
-    getPropertyValue('table-layout');
-
-  /** Sets the value of "table-layout" */
-  void set tableLayout(var value) {
-    setProperty('table-layout', value, '');
-  }
-
-  /** Gets the value of "tap-highlight-color" */
-  String get tapHighlightColor =>
-    getPropertyValue('${_browserPrefix}tap-highlight-color');
-
-  /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value) {
-    setProperty('${_browserPrefix}tap-highlight-color', value, '');
-  }
-
-  /** Gets the value of "text-align" */
-  String get textAlign =>
-    getPropertyValue('text-align');
-
-  /** Sets the value of "text-align" */
-  void set textAlign(var value) {
-    setProperty('text-align', value, '');
-  }
-
-  /** Gets the value of "text-combine" */
-  String get textCombine =>
-    getPropertyValue('${_browserPrefix}text-combine');
-
-  /** Sets the value of "text-combine" */
-  void set textCombine(var value) {
-    setProperty('${_browserPrefix}text-combine', value, '');
-  }
-
-  /** Gets the value of "text-decoration" */
-  String get textDecoration =>
-    getPropertyValue('text-decoration');
-
-  /** Sets the value of "text-decoration" */
-  void set textDecoration(var value) {
-    setProperty('text-decoration', value, '');
-  }
-
-  /** Gets the value of "text-decorations-in-effect" */
-  String get textDecorationsInEffect =>
-    getPropertyValue('${_browserPrefix}text-decorations-in-effect');
-
-  /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value) {
-    setProperty('${_browserPrefix}text-decorations-in-effect', value, '');
-  }
-
-  /** Gets the value of "text-emphasis" */
-  String get textEmphasis =>
-    getPropertyValue('${_browserPrefix}text-emphasis');
-
-  /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value) {
-    setProperty('${_browserPrefix}text-emphasis', value, '');
-  }
-
-  /** Gets the value of "text-emphasis-color" */
-  String get textEmphasisColor =>
-    getPropertyValue('${_browserPrefix}text-emphasis-color');
-
-  /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value) {
-    setProperty('${_browserPrefix}text-emphasis-color', value, '');
-  }
-
-  /** Gets the value of "text-emphasis-position" */
-  String get textEmphasisPosition =>
-    getPropertyValue('${_browserPrefix}text-emphasis-position');
-
-  /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value) {
-    setProperty('${_browserPrefix}text-emphasis-position', value, '');
-  }
-
-  /** Gets the value of "text-emphasis-style" */
-  String get textEmphasisStyle =>
-    getPropertyValue('${_browserPrefix}text-emphasis-style');
-
-  /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value) {
-    setProperty('${_browserPrefix}text-emphasis-style', value, '');
-  }
-
-  /** Gets the value of "text-fill-color" */
-  String get textFillColor =>
-    getPropertyValue('${_browserPrefix}text-fill-color');
-
-  /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value) {
-    setProperty('${_browserPrefix}text-fill-color', value, '');
-  }
-
-  /** Gets the value of "text-indent" */
-  String get textIndent =>
-    getPropertyValue('text-indent');
-
-  /** Sets the value of "text-indent" */
-  void set textIndent(var value) {
-    setProperty('text-indent', value, '');
-  }
-
-  /** Gets the value of "text-line-through" */
-  String get textLineThrough =>
-    getPropertyValue('text-line-through');
-
-  /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value) {
-    setProperty('text-line-through', value, '');
-  }
-
-  /** Gets the value of "text-line-through-color" */
-  String get textLineThroughColor =>
-    getPropertyValue('text-line-through-color');
-
-  /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value) {
-    setProperty('text-line-through-color', value, '');
-  }
-
-  /** Gets the value of "text-line-through-mode" */
-  String get textLineThroughMode =>
-    getPropertyValue('text-line-through-mode');
-
-  /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value) {
-    setProperty('text-line-through-mode', value, '');
-  }
-
-  /** Gets the value of "text-line-through-style" */
-  String get textLineThroughStyle =>
-    getPropertyValue('text-line-through-style');
-
-  /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value) {
-    setProperty('text-line-through-style', value, '');
-  }
-
-  /** Gets the value of "text-line-through-width" */
-  String get textLineThroughWidth =>
-    getPropertyValue('text-line-through-width');
-
-  /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value) {
-    setProperty('text-line-through-width', value, '');
-  }
-
-  /** Gets the value of "text-orientation" */
-  String get textOrientation =>
-    getPropertyValue('${_browserPrefix}text-orientation');
-
-  /** Sets the value of "text-orientation" */
-  void set textOrientation(var value) {
-    setProperty('${_browserPrefix}text-orientation', value, '');
-  }
-
-  /** Gets the value of "text-overflow" */
-  String get textOverflow =>
-    getPropertyValue('text-overflow');
-
-  /** Sets the value of "text-overflow" */
-  void set textOverflow(var value) {
-    setProperty('text-overflow', value, '');
-  }
-
-  /** Gets the value of "text-overline" */
-  String get textOverline =>
-    getPropertyValue('text-overline');
-
-  /** Sets the value of "text-overline" */
-  void set textOverline(var value) {
-    setProperty('text-overline', value, '');
-  }
-
-  /** Gets the value of "text-overline-color" */
-  String get textOverlineColor =>
-    getPropertyValue('text-overline-color');
-
-  /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value) {
-    setProperty('text-overline-color', value, '');
-  }
-
-  /** Gets the value of "text-overline-mode" */
-  String get textOverlineMode =>
-    getPropertyValue('text-overline-mode');
-
-  /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value) {
-    setProperty('text-overline-mode', value, '');
-  }
-
-  /** Gets the value of "text-overline-style" */
-  String get textOverlineStyle =>
-    getPropertyValue('text-overline-style');
-
-  /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value) {
-    setProperty('text-overline-style', value, '');
-  }
-
-  /** Gets the value of "text-overline-width" */
-  String get textOverlineWidth =>
-    getPropertyValue('text-overline-width');
-
-  /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value) {
-    setProperty('text-overline-width', value, '');
-  }
-
-  /** Gets the value of "text-rendering" */
-  String get textRendering =>
-    getPropertyValue('text-rendering');
-
-  /** Sets the value of "text-rendering" */
-  void set textRendering(var value) {
-    setProperty('text-rendering', value, '');
-  }
-
-  /** Gets the value of "text-security" */
-  String get textSecurity =>
-    getPropertyValue('${_browserPrefix}text-security');
-
-  /** Sets the value of "text-security" */
-  void set textSecurity(var value) {
-    setProperty('${_browserPrefix}text-security', value, '');
-  }
-
-  /** Gets the value of "text-shadow" */
-  String get textShadow =>
-    getPropertyValue('text-shadow');
-
-  /** Sets the value of "text-shadow" */
-  void set textShadow(var value) {
-    setProperty('text-shadow', value, '');
-  }
-
-  /** Gets the value of "text-size-adjust" */
-  String get textSizeAdjust =>
-    getPropertyValue('${_browserPrefix}text-size-adjust');
-
-  /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value) {
-    setProperty('${_browserPrefix}text-size-adjust', value, '');
-  }
-
-  /** Gets the value of "text-stroke" */
-  String get textStroke =>
-    getPropertyValue('${_browserPrefix}text-stroke');
-
-  /** Sets the value of "text-stroke" */
-  void set textStroke(var value) {
-    setProperty('${_browserPrefix}text-stroke', value, '');
-  }
-
-  /** Gets the value of "text-stroke-color" */
-  String get textStrokeColor =>
-    getPropertyValue('${_browserPrefix}text-stroke-color');
-
-  /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value) {
-    setProperty('${_browserPrefix}text-stroke-color', value, '');
-  }
-
-  /** Gets the value of "text-stroke-width" */
-  String get textStrokeWidth =>
-    getPropertyValue('${_browserPrefix}text-stroke-width');
-
-  /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value) {
-    setProperty('${_browserPrefix}text-stroke-width', value, '');
-  }
-
-  /** Gets the value of "text-transform" */
-  String get textTransform =>
-    getPropertyValue('text-transform');
-
-  /** Sets the value of "text-transform" */
-  void set textTransform(var value) {
-    setProperty('text-transform', value, '');
-  }
-
-  /** Gets the value of "text-underline" */
-  String get textUnderline =>
-    getPropertyValue('text-underline');
-
-  /** Sets the value of "text-underline" */
-  void set textUnderline(var value) {
-    setProperty('text-underline', value, '');
-  }
-
-  /** Gets the value of "text-underline-color" */
-  String get textUnderlineColor =>
-    getPropertyValue('text-underline-color');
-
-  /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value) {
-    setProperty('text-underline-color', value, '');
-  }
-
-  /** Gets the value of "text-underline-mode" */
-  String get textUnderlineMode =>
-    getPropertyValue('text-underline-mode');
-
-  /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value) {
-    setProperty('text-underline-mode', value, '');
-  }
-
-  /** Gets the value of "text-underline-style" */
-  String get textUnderlineStyle =>
-    getPropertyValue('text-underline-style');
-
-  /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value) {
-    setProperty('text-underline-style', value, '');
-  }
-
-  /** Gets the value of "text-underline-width" */
-  String get textUnderlineWidth =>
-    getPropertyValue('text-underline-width');
-
-  /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value) {
-    setProperty('text-underline-width', value, '');
-  }
-
-  /** Gets the value of "top" */
-  String get top =>
-    getPropertyValue('top');
-
-  /** Sets the value of "top" */
-  void set top(var value) {
-    setProperty('top', value, '');
-  }
-
-  /** Gets the value of "transform" */
-  String get transform =>
-    getPropertyValue('${_browserPrefix}transform');
-
-  /** Sets the value of "transform" */
-  void set transform(var value) {
-    setProperty('${_browserPrefix}transform', value, '');
-  }
-
-  /** Gets the value of "transform-origin" */
-  String get transformOrigin =>
-    getPropertyValue('${_browserPrefix}transform-origin');
-
-  /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value) {
-    setProperty('${_browserPrefix}transform-origin', value, '');
-  }
-
-  /** Gets the value of "transform-origin-x" */
-  String get transformOriginX =>
-    getPropertyValue('${_browserPrefix}transform-origin-x');
-
-  /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value) {
-    setProperty('${_browserPrefix}transform-origin-x', value, '');
-  }
-
-  /** Gets the value of "transform-origin-y" */
-  String get transformOriginY =>
-    getPropertyValue('${_browserPrefix}transform-origin-y');
-
-  /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value) {
-    setProperty('${_browserPrefix}transform-origin-y', value, '');
-  }
-
-  /** Gets the value of "transform-origin-z" */
-  String get transformOriginZ =>
-    getPropertyValue('${_browserPrefix}transform-origin-z');
-
-  /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value) {
-    setProperty('${_browserPrefix}transform-origin-z', value, '');
-  }
-
-  /** Gets the value of "transform-style" */
-  String get transformStyle =>
-    getPropertyValue('${_browserPrefix}transform-style');
-
-  /** Sets the value of "transform-style" */
-  void set transformStyle(var value) {
-    setProperty('${_browserPrefix}transform-style', value, '');
-  }
-
-  /** Gets the value of "transition" */
-  String get transition =>
-    getPropertyValue('${_browserPrefix}transition');
-
-  /** Sets the value of "transition" */
-  void set transition(var value) {
-    setProperty('${_browserPrefix}transition', value, '');
-  }
-
-  /** Gets the value of "transition-delay" */
-  String get transitionDelay =>
-    getPropertyValue('${_browserPrefix}transition-delay');
-
-  /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value) {
-    setProperty('${_browserPrefix}transition-delay', value, '');
-  }
-
-  /** Gets the value of "transition-duration" */
-  String get transitionDuration =>
-    getPropertyValue('${_browserPrefix}transition-duration');
-
-  /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value) {
-    setProperty('${_browserPrefix}transition-duration', value, '');
-  }
-
-  /** Gets the value of "transition-property" */
-  String get transitionProperty =>
-    getPropertyValue('${_browserPrefix}transition-property');
-
-  /** Sets the value of "transition-property" */
-  void set transitionProperty(var value) {
-    setProperty('${_browserPrefix}transition-property', value, '');
-  }
-
-  /** Gets the value of "transition-timing-function" */
-  String get transitionTimingFunction =>
-    getPropertyValue('${_browserPrefix}transition-timing-function');
-
-  /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value) {
-    setProperty('${_browserPrefix}transition-timing-function', value, '');
-  }
-
-  /** Gets the value of "unicode-bidi" */
-  String get unicodeBidi =>
-    getPropertyValue('unicode-bidi');
-
-  /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value) {
-    setProperty('unicode-bidi', value, '');
-  }
-
-  /** Gets the value of "unicode-range" */
-  String get unicodeRange =>
-    getPropertyValue('unicode-range');
-
-  /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value) {
-    setProperty('unicode-range', value, '');
-  }
-
-  /** Gets the value of "user-drag" */
-  String get userDrag =>
-    getPropertyValue('${_browserPrefix}user-drag');
-
-  /** Sets the value of "user-drag" */
-  void set userDrag(var value) {
-    setProperty('${_browserPrefix}user-drag', value, '');
-  }
-
-  /** Gets the value of "user-modify" */
-  String get userModify =>
-    getPropertyValue('${_browserPrefix}user-modify');
-
-  /** Sets the value of "user-modify" */
-  void set userModify(var value) {
-    setProperty('${_browserPrefix}user-modify', value, '');
-  }
-
-  /** Gets the value of "user-select" */
-  String get userSelect =>
-    getPropertyValue('${_browserPrefix}user-select');
-
-  /** Sets the value of "user-select" */
-  void set userSelect(var value) {
-    setProperty('${_browserPrefix}user-select', value, '');
-  }
-
-  /** Gets the value of "vertical-align" */
-  String get verticalAlign =>
-    getPropertyValue('vertical-align');
-
-  /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value) {
-    setProperty('vertical-align', value, '');
-  }
-
-  /** Gets the value of "visibility" */
-  String get visibility =>
-    getPropertyValue('visibility');
-
-  /** Sets the value of "visibility" */
-  void set visibility(var value) {
-    setProperty('visibility', value, '');
-  }
-
-  /** Gets the value of "white-space" */
-  String get whiteSpace =>
-    getPropertyValue('white-space');
-
-  /** Sets the value of "white-space" */
-  void set whiteSpace(var value) {
-    setProperty('white-space', value, '');
-  }
-
-  /** Gets the value of "widows" */
-  String get widows =>
-    getPropertyValue('widows');
-
-  /** Sets the value of "widows" */
-  void set widows(var value) {
-    setProperty('widows', value, '');
-  }
-
-  /** Gets the value of "width" */
-  String get width =>
-    getPropertyValue('width');
-
-  /** Sets the value of "width" */
-  void set width(var value) {
-    setProperty('width', value, '');
-  }
-
-  /** Gets the value of "word-break" */
-  String get wordBreak =>
-    getPropertyValue('word-break');
-
-  /** Sets the value of "word-break" */
-  void set wordBreak(var value) {
-    setProperty('word-break', value, '');
-  }
-
-  /** Gets the value of "word-spacing" */
-  String get wordSpacing =>
-    getPropertyValue('word-spacing');
-
-  /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value) {
-    setProperty('word-spacing', value, '');
-  }
-
-  /** Gets the value of "word-wrap" */
-  String get wordWrap =>
-    getPropertyValue('word-wrap');
-
-  /** Sets the value of "word-wrap" */
-  void set wordWrap(var value) {
-    setProperty('word-wrap', value, '');
-  }
-
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape =>
-    getPropertyValue('${_browserPrefix}wrap-shape');
-
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value) {
-    setProperty('${_browserPrefix}wrap-shape', value, '');
-  }
-
-  /** Gets the value of "writing-mode" */
-  String get writingMode =>
-    getPropertyValue('${_browserPrefix}writing-mode');
-
-  /** Sets the value of "writing-mode" */
-  void set writingMode(var value) {
-    setProperty('${_browserPrefix}writing-mode', value, '');
-  }
-
-  /** Gets the value of "z-index" */
-  String get zIndex =>
-    getPropertyValue('z-index');
-
-  /** Sets the value of "z-index" */
-  void set zIndex(var value) {
-    setProperty('z-index', value, '');
-  }
-
-  /** Gets the value of "zoom" */
-  String get zoom =>
-    getPropertyValue('zoom');
-
-  /** Sets the value of "zoom" */
-  void set zoom(var value) {
-    setProperty('zoom', value, '');
-  }
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSStyleRule
-abstract class CSSStyleRule implements CSSRule {
-
-  /** @domName CSSStyleRule.selectorText */
-  String selectorText;
-
-  /** @domName CSSStyleRule.style */
-  CSSStyleDeclaration get style;
-}
-
-class _CSSStyleRuleImpl extends _CSSRuleImpl implements CSSStyleRule native "*CSSStyleRule" {
-
-  String selectorText;
-
-  final _CSSStyleDeclarationImpl style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSStyleSheet
-abstract class CSSStyleSheet implements StyleSheet {
-
-  /** @domName CSSStyleSheet.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName CSSStyleSheet.ownerRule */
-  CSSRule get ownerRule;
-
-  /** @domName CSSStyleSheet.rules */
-  List<CSSRule> get rules;
-
-  /** @domName CSSStyleSheet.addRule */
-  int addRule(String selector, String style, [int index]);
-
-  /** @domName CSSStyleSheet.deleteRule */
-  void deleteRule(int index);
-
-  /** @domName CSSStyleSheet.insertRule */
-  int insertRule(String rule, int index);
-
-  /** @domName CSSStyleSheet.removeRule */
-  void removeRule(int index);
-}
-
-class _CSSStyleSheetImpl extends _StyleSheetImpl implements CSSStyleSheet native "*CSSStyleSheet" {
-
-  final _CSSRuleListImpl cssRules;
-
-  final _CSSRuleImpl ownerRule;
-
-  final _CSSRuleListImpl rules;
-
-  int addRule(String selector, String style, [int index]) native;
-
-  void deleteRule(int index) native;
-
-  int insertRule(String rule, int index) native;
-
-  void removeRule(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSTransformValue
-abstract class CSSTransformValue implements List<CSSValue> {
-
-  static const int CSS_MATRIX = 11;
-
-  static const int CSS_MATRIX3D = 21;
-
-  static const int CSS_PERSPECTIVE = 20;
-
-  static const int CSS_ROTATE = 4;
-
-  static const int CSS_ROTATE3D = 17;
-
-  static const int CSS_ROTATEX = 14;
-
-  static const int CSS_ROTATEY = 15;
-
-  static const int CSS_ROTATEZ = 16;
-
-  static const int CSS_SCALE = 5;
-
-  static const int CSS_SCALE3D = 19;
-
-  static const int CSS_SCALEX = 6;
-
-  static const int CSS_SCALEY = 7;
-
-  static const int CSS_SCALEZ = 18;
-
-  static const int CSS_SKEW = 8;
-
-  static const int CSS_SKEWX = 9;
-
-  static const int CSS_SKEWY = 10;
-
-  static const int CSS_TRANSLATE = 1;
-
-  static const int CSS_TRANSLATE3D = 13;
-
-  static const int CSS_TRANSLATEX = 2;
-
-  static const int CSS_TRANSLATEY = 3;
-
-  static const int CSS_TRANSLATEZ = 12;
-
-  /** @domName WebKitCSSTransformValue.operationType */
-  int get operationType;
-}
-
-class _CSSTransformValueImpl extends _CSSValueListImpl implements CSSTransformValue native "*WebKitCSSTransformValue" {
-
-  final int operationType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSUnknownRule
-abstract class CSSUnknownRule implements CSSRule {
-}
-
-class _CSSUnknownRuleImpl extends _CSSRuleImpl implements CSSUnknownRule native "*CSSUnknownRule" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CSSValue
-abstract class CSSValue {
-
-  static const int CSS_CUSTOM = 3;
-
-  static const int CSS_INHERIT = 0;
-
-  static const int CSS_PRIMITIVE_VALUE = 1;
-
-  static const int CSS_VALUE_LIST = 2;
-
-  /** @domName CSSValue.cssText */
-  String cssText;
-
-  /** @domName CSSValue.cssValueType */
-  int get cssValueType;
-}
-
-class _CSSValueImpl implements CSSValue native "*CSSValue" {
-
-  String cssText;
-
-  final int cssValueType;
-}
-
-class _CSSValueListImpl extends _CSSValueImpl implements List<CSSValue>, JavaScriptIndexingBehavior native "*CSSValueList" {
-
-  final int length;
-
-  _CSSValueImpl operator[](int index) => JS("_CSSValueImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _CSSValueImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<CSSValue> mixins.
-  // CSSValue is the element type.
-
-  // From Iterable<CSSValue>:
-
-  Iterator<CSSValue> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<CSSValue>(this);
-  }
-
-  // From Collection<CSSValue>:
-
-  void add(CSSValue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(CSSValue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<CSSValue> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(CSSValue element) => _Collections.contains(this, element);
-
-  void forEach(void f(CSSValue element)) => _Collections.forEach(this, f);
-
-  Collection map(f(CSSValue element)) => _Collections.map(this, [], f);
-
-  Collection<CSSValue> filter(bool f(CSSValue element)) =>
-     _Collections.filter(this, <CSSValue>[], f);
-
-  bool every(bool f(CSSValue element)) => _Collections.every(this, f);
-
-  bool some(bool f(CSSValue element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<CSSValue>:
-
-  void sort([Comparator<CSSValue> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(CSSValue element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(CSSValue element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  CSSValue get last => this[length - 1];
-
-  CSSValue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<CSSValue> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <CSSValue>[]);
-
-  // -- end List<CSSValue> mixins.
-
-  _CSSValueImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName HTMLCanvasElement
-abstract class CanvasElement implements Element {
-
-  factory CanvasElement({int width, int height}) {
-    if (!?width) {
-      return _Elements.createCanvasElement();
-    }
-    if (!?height) {
-      return _Elements.createCanvasElement(width);
-    }
-    return _Elements.createCanvasElement(width, height);
-  }
-
-  /** @domName HTMLCanvasElement.height */
-  int height;
-
-  /** @domName HTMLCanvasElement.width */
-  int width;
-
-  /** @domName HTMLCanvasElement.getContext */
-  Object getContext(String contextId);
-
-  /** @domName HTMLCanvasElement.toDataURL */
-  String toDataURL(String type, [num quality]);
-
-  final CanvasRenderingContext2D context2d;
-}
-// 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 _CanvasElementImpl extends _ElementImpl implements CanvasElement native "*HTMLCanvasElement" {
-
-  int height;
-
-  int width;
-
-  Object getContext(String contextId) native;
-
-  String toDataURL(String type, [num quality]) native;
-
-
-  _CanvasRenderingContext2DImpl get context2d => getContext('2d');
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CanvasGradient
-abstract class CanvasGradient {
-
-  /** @domName CanvasGradient.addColorStop */
-  void addColorStop(num offset, String color);
-}
-
-class _CanvasGradientImpl implements CanvasGradient native "*CanvasGradient" {
-
-  void addColorStop(num offset, String color) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CanvasPattern
-abstract class CanvasPattern {
-}
-
-class _CanvasPatternImpl implements CanvasPattern native "*CanvasPattern" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CanvasRenderingContext
-abstract class CanvasRenderingContext {
-
-  /** @domName CanvasRenderingContext.canvas */
-  CanvasElement get canvas;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName CanvasRenderingContext2D
-abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
-
-  /** @domName CanvasRenderingContext2D.fillStyle */
-  dynamic fillStyle;
-
-  /** @domName CanvasRenderingContext2D.font */
-  String font;
-
-  /** @domName CanvasRenderingContext2D.globalAlpha */
-  num globalAlpha;
-
-  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
-  String globalCompositeOperation;
-
-  /** @domName CanvasRenderingContext2D.lineCap */
-  String lineCap;
-
-  /** @domName CanvasRenderingContext2D.lineDashOffset */
-  num lineDashOffset;
-
-  /** @domName CanvasRenderingContext2D.lineJoin */
-  String lineJoin;
-
-  /** @domName CanvasRenderingContext2D.lineWidth */
-  num lineWidth;
-
-  /** @domName CanvasRenderingContext2D.miterLimit */
-  num miterLimit;
-
-  /** @domName CanvasRenderingContext2D.shadowBlur */
-  num shadowBlur;
-
-  /** @domName CanvasRenderingContext2D.shadowColor */
-  String shadowColor;
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetX */
-  num shadowOffsetX;
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetY */
-  num shadowOffsetY;
-
-  /** @domName CanvasRenderingContext2D.strokeStyle */
-  dynamic strokeStyle;
-
-  /** @domName CanvasRenderingContext2D.textAlign */
-  String textAlign;
-
-  /** @domName CanvasRenderingContext2D.textBaseline */
-  String textBaseline;
-
-  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
-  num get webkitBackingStorePixelRatio;
-
-  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
-  bool webkitImageSmoothingEnabled;
-
-  /** @domName CanvasRenderingContext2D.webkitLineDash */
-  List webkitLineDash;
-
-  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
-  num webkitLineDashOffset;
-
-  /** @domName CanvasRenderingContext2D.arc */
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise);
-
-  /** @domName CanvasRenderingContext2D.arcTo */
-  void arcTo(num x1, num y1, num x2, num y2, num radius);
-
-  /** @domName CanvasRenderingContext2D.beginPath */
-  void beginPath();
-
-  /** @domName CanvasRenderingContext2D.bezierCurveTo */
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y);
-
-  /** @domName CanvasRenderingContext2D.clearRect */
-  void clearRect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.clearShadow */
-  void clearShadow();
-
-  /** @domName CanvasRenderingContext2D.clip */
-  void clip();
-
-  /** @domName CanvasRenderingContext2D.closePath */
-  void closePath();
-
-  /** @domName CanvasRenderingContext2D.createImageData */
-  ImageData createImageData(imagedata_OR_sw, [num sh]);
-
-  /** @domName CanvasRenderingContext2D.createLinearGradient */
-  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1);
-
-  /** @domName CanvasRenderingContext2D.createPattern */
-  CanvasPattern createPattern(canvas_OR_image, String repetitionType);
-
-  /** @domName CanvasRenderingContext2D.createRadialGradient */
-  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1);
-
-  /** @domName CanvasRenderingContext2D.drawImage */
-  void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]);
-
-  /** @domName CanvasRenderingContext2D.drawImageFromRect */
-  void drawImageFromRect(ImageElement image, [num sx, num sy, num sw, num sh, num dx, num dy, num dw, num dh, String compositeOperation]);
-
-  /** @domName CanvasRenderingContext2D.fill */
-  void fill();
-
-  /** @domName CanvasRenderingContext2D.fillRect */
-  void fillRect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.fillText */
-  void fillText(String text, num x, num y, [num maxWidth]);
-
-  /** @domName CanvasRenderingContext2D.getImageData */
-  ImageData getImageData(num sx, num sy, num sw, num sh);
-
-  /** @domName CanvasRenderingContext2D.getLineDash */
-  List<num> getLineDash();
-
-  /** @domName CanvasRenderingContext2D.isPointInPath */
-  bool isPointInPath(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.lineTo */
-  void lineTo(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.measureText */
-  TextMetrics measureText(String text);
-
-  /** @domName CanvasRenderingContext2D.moveTo */
-  void moveTo(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.putImageData */
-  void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]);
-
-  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
-  void quadraticCurveTo(num cpx, num cpy, num x, num y);
-
-  /** @domName CanvasRenderingContext2D.rect */
-  void rect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.restore */
-  void restore();
-
-  /** @domName CanvasRenderingContext2D.rotate */
-  void rotate(num angle);
-
-  /** @domName CanvasRenderingContext2D.save */
-  void save();
-
-  /** @domName CanvasRenderingContext2D.scale */
-  void scale(num sx, num sy);
-
-  /** @domName CanvasRenderingContext2D.setAlpha */
-  void setAlpha(num alpha);
-
-  /** @domName CanvasRenderingContext2D.setCompositeOperation */
-  void setCompositeOperation(String compositeOperation);
-
-  /** @domName CanvasRenderingContext2D.setLineCap */
-  void setLineCap(String cap);
-
-  /** @domName CanvasRenderingContext2D.setLineDash */
-  void setLineDash(List<num> dash);
-
-  /** @domName CanvasRenderingContext2D.setLineJoin */
-  void setLineJoin(String join);
-
-  /** @domName CanvasRenderingContext2D.setLineWidth */
-  void setLineWidth(num width);
-
-  /** @domName CanvasRenderingContext2D.setMiterLimit */
-  void setMiterLimit(num limit);
-
-  /** @domName CanvasRenderingContext2D.setShadow */
-  void setShadow(num width, num height, num blur, [c_OR_color_OR_grayLevel_OR_r, num alpha_OR_g_OR_m, num b_OR_y, num a_OR_k, num a]);
-
-  /** @domName CanvasRenderingContext2D.setTransform */
-  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy);
-
-  /** @domName CanvasRenderingContext2D.stroke */
-  void stroke();
-
-  /** @domName CanvasRenderingContext2D.strokeRect */
-  void strokeRect(num x, num y, num width, num height, [num lineWidth]);
-
-  /** @domName CanvasRenderingContext2D.strokeText */
-  void strokeText(String text, num x, num y, [num maxWidth]);
-
-  /** @domName CanvasRenderingContext2D.transform */
-  void transform(num m11, num m12, num m21, num m22, num dx, num dy);
-
-  /** @domName CanvasRenderingContext2D.translate */
-  void translate(num tx, num ty);
-
-  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
-  ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh);
-
-  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD */
-  void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]);
-
-
-  /**
-   * Sets the color used inside shapes.
-   * [r], [g], [b] are 0-255, [a] is 0-1.
-   */
-  void setFillColorRgb(int r, int g, int b, [num a]);
-
-  /**
-   * Sets the color used inside shapes.
-   * [h] is in degrees, 0-360.
-   * [s], [l] are in percent, 0-100.
-   * [a] is 0-1.
-   */
-  void setFillColorHsl(int h, num s, num l, [num a]);
-
-  /**
-   * Sets the color used for stroking shapes.
-   * [r], [g], [b] are 0-255, [a] is 0-1.
-   */
-  void setStrokeColorRgb(int r, int g, int b, [num a]);
-
-  /**
-   * Sets the color used for stroking shapes.
-   * [h] is in degrees, 0-360.
-   * [s], [l] are in percent, 0-100.
-   * [a] is 0-1.
-   */
-  void setStrokeColorHsl(int h, num s, num l, [num a]);
-}
-// 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 _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D native "*CanvasRenderingContext2D" {
-
-  dynamic fillStyle;
-
-  String font;
-
-  num globalAlpha;
-
-  String globalCompositeOperation;
-
-  String lineCap;
-
-  num lineDashOffset;
-
-  String lineJoin;
-
-  num lineWidth;
-
-  num miterLimit;
-
-  num shadowBlur;
-
-  String shadowColor;
-
-  num shadowOffsetX;
-
-  num shadowOffsetY;
-
-  dynamic strokeStyle;
-
-  String textAlign;
-
-  String textBaseline;
-
-  final num webkitBackingStorePixelRatio;
-
-  bool webkitImageSmoothingEnabled;
-
-  List webkitLineDash;
-
-  num webkitLineDashOffset;
-
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native;
-
-  void arcTo(num x1, num y1, num x2, num y2, num radius) native;
-
-  void beginPath() native;
-
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native;
-
-  void clearRect(num x, num y, num width, num height) native;
-
-  void clearShadow() native;
-
-  void clip() native;
-
-  void closePath() native;
-
-  ImageData createImageData(imagedata_OR_sw, [sh]) {
-    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) &&
-        !?sh) {
-      var imagedata_1 = _convertDartToNative_ImageData(imagedata_OR_sw);
-      return _convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
-    }
-    if ((imagedata_OR_sw is num || imagedata_OR_sw == null) &&
-        (sh is num || sh == null)) {
-      return _convertNativeToDart_ImageData(_createImageData_2(imagedata_OR_sw, sh));
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _createImageData_1(imagedata) native "createImageData";
-  _createImageData_2(num sw, num sh) native "createImageData";
-
-  _CanvasGradientImpl createLinearGradient(num x0, num y0, num x1, num y1) native;
-
-  _CanvasPatternImpl createPattern(canvas_OR_image, String repetitionType) native;
-
-  _CanvasGradientImpl createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native;
-
-  void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) native;
-
-  void drawImageFromRect(_ImageElementImpl image, [num sx, num sy, num sw, num sh, num dx, num dy, num dw, num dh, String compositeOperation]) native;
-
-  void fill() native;
-
-  void fillRect(num x, num y, num width, num height) native;
-
-  void fillText(String text, num x, num y, [num maxWidth]) native;
-
-  ImageData getImageData(num sx, num sy, num sw, num sh) {
-    return _convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
-  }
-  _getImageData_1(sx, sy, sw, sh) native "getImageData";
-
-  List<num> getLineDash() native;
-
-  bool isPointInPath(num x, num y) native;
-
-  void lineTo(num x, num y) native;
-
-  _TextMetricsImpl measureText(String text) native;
-
-  void moveTo(num x, num y) native;
-
-  void putImageData(ImageData imagedata, num dx, num dy, [dirtyX, dirtyY, dirtyWidth, dirtyHeight]) {
-    if (!?dirtyX &&
-        !?dirtyY &&
-        !?dirtyWidth &&
-        !?dirtyHeight) {
-      var imagedata_1 = _convertDartToNative_ImageData(imagedata);
-      _putImageData_1(imagedata_1, dx, dy);
-      return;
-    }
-    if ((dirtyX is num || dirtyX == null) &&
-        (dirtyY is num || dirtyY == null) &&
-        (dirtyWidth is num || dirtyWidth == null) &&
-        (dirtyHeight is num || dirtyHeight == null)) {
-      var imagedata_2 = _convertDartToNative_ImageData(imagedata);
-      _putImageData_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
-      return;
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  void _putImageData_1(imagedata, dx, dy) native "putImageData";
-  void _putImageData_2(imagedata, dx, dy, num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight) native "putImageData";
-
-  void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
-
-  void rect(num x, num y, num width, num height) native;
-
-  void restore() native;
-
-  void rotate(num angle) native;
-
-  void save() native;
-
-  void scale(num sx, num sy) native;
-
-  void setAlpha(num alpha) native;
-
-  void setCompositeOperation(String compositeOperation) native;
-
-  void setLineCap(String cap) native;
-
-  void setLineDash(List<num> dash) native;
-
-  void setLineJoin(String join) native;
-
-  void setLineWidth(num width) native;
-
-  void setMiterLimit(num limit) native;
-
-  void setShadow(num width, num height, num blur, [c_OR_color_OR_grayLevel_OR_r, num alpha_OR_g_OR_m, num b_OR_y, num a_OR_k, num a]) native;
-
-  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native;
-
-  void stroke() native;
-
-  void strokeRect(num x, num y, num width, num height, [num lineWidth]) native;
-
-  void strokeText(String text, num x, num y, [num maxWidth]) native;
-
-  void transform(num m11, num m12, num m21, num m22, num dx, num dy) native;
-
-  void translate(num tx, num ty) native;
-
-  ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) {
-    return _convertNativeToDart_ImageData(_webkitGetImageDataHD_1(sx, sy, sw, sh));
-  }
-  _webkitGetImageDataHD_1(sx, sy, sw, sh) native "webkitGetImageDataHD";
-
-  void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [dirtyX, dirtyY, dirtyWidth, dirtyHeight]) {
-    if (!?dirtyX &&
-        !?dirtyY &&
-        !?dirtyWidth &&
-        !?dirtyHeight) {
-      var imagedata_1 = _convertDartToNative_ImageData(imagedata);
-      _webkitPutImageDataHD_1(imagedata_1, dx, dy);
-      return;
-    }
-    if ((dirtyX is num || dirtyX == null) &&
-        (dirtyY is num || dirtyY == null) &&
-        (dirtyWidth is num || dirtyWidth == null) &&
-        (dirtyHeight is num || dirtyHeight == null)) {
-      var imagedata_2 = _convertDartToNative_ImageData(imagedata);
-      _webkitPutImageDataHD_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
-      return;
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  void _webkitPutImageDataHD_1(imagedata, dx, dy) native "webkitPutImageDataHD";
-  void _webkitPutImageDataHD_2(imagedata, dx, dy, num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight) native "webkitPutImageDataHD";
-
-
-  void setFillColorRgb(int r, int g, int b, [num a = 1]) {
-    this.fillStyle = 'rgba($r, $g, $b, $a)';
-  }
-
-  void setFillColorHsl(int h, num s, num l, [num a = 1]) {
-    this.fillStyle = 'hsla($h, $s%, $l%, $a)';
-  }
-
-  void setStrokeColorRgb(int r, int g, int b, [num a = 1]) {
-    this.strokeStyle = 'rgba($r, $g, $b, $a)';
-  }
-
-  void setStrokeColorHsl(int h, num s, num l, [num a = 1]) {
-    this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
-  }
-}
-
-class _CanvasRenderingContextImpl implements CanvasRenderingContext native "*CanvasRenderingContext" {
-
-  final _CanvasElementImpl canvas;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ChannelMergerNode
-abstract class ChannelMergerNode implements AudioNode {
-}
-
-class _ChannelMergerNodeImpl extends _AudioNodeImpl implements ChannelMergerNode native "*ChannelMergerNode" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ChannelSplitterNode
-abstract class ChannelSplitterNode implements AudioNode {
-}
-
-class _ChannelSplitterNodeImpl extends _AudioNodeImpl implements ChannelSplitterNode native "*ChannelSplitterNode" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CharacterData
-abstract class CharacterData implements Node {
-
-  /** @domName CharacterData.data */
-  String data;
-
-  /** @domName CharacterData.length */
-  int get length;
-
-  /** @domName CharacterData.appendData */
-  void appendData(String data);
-
-  /** @domName CharacterData.deleteData */
-  void deleteData(int offset, int length);
-
-  /** @domName CharacterData.insertData */
-  void insertData(int offset, String data);
-
-  /** @domName CharacterData.remove */
-  void remove();
-
-  /** @domName CharacterData.replaceData */
-  void replaceData(int offset, int length, String data);
-
-  /** @domName CharacterData.substringData */
-  String substringData(int offset, int length);
-}
-
-class _CharacterDataImpl extends _NodeImpl implements CharacterData native "*CharacterData" {
-
-  String data;
-
-  final int length;
-
-  void appendData(String data) native;
-
-  void deleteData(int offset, int length) native;
-
-  void insertData(int offset, String data) native;
-
-  void remove() native;
-
-  void replaceData(int offset, int length, String data) native;
-
-  String substringData(int offset, int length) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ClientRect
-abstract class ClientRect {
-
-  /** @domName ClientRect.bottom */
-  num get bottom;
-
-  /** @domName ClientRect.height */
-  num get height;
-
-  /** @domName ClientRect.left */
-  num get left;
-
-  /** @domName ClientRect.right */
-  num get right;
-
-  /** @domName ClientRect.top */
-  num get top;
-
-  /** @domName ClientRect.width */
-  num get width;
-}
-
-class _ClientRectImpl implements ClientRect native "*ClientRect" {
-
-  final num bottom;
-
-  final num height;
-
-  final num left;
-
-  final num right;
-
-  final num top;
-
-  final num width;
-}
-
-class _ClientRectListImpl implements List<ClientRect>, JavaScriptIndexingBehavior native "*ClientRectList" {
-
-  final int length;
-
-  _ClientRectImpl operator[](int index) => JS("_ClientRectImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _ClientRectImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<ClientRect> mixins.
-  // ClientRect is the element type.
-
-  // From Iterable<ClientRect>:
-
-  Iterator<ClientRect> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<ClientRect>(this);
-  }
-
-  // From Collection<ClientRect>:
-
-  void add(ClientRect value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(ClientRect value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<ClientRect> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(ClientRect element) => _Collections.contains(this, element);
-
-  void forEach(void f(ClientRect element)) => _Collections.forEach(this, f);
-
-  Collection map(f(ClientRect element)) => _Collections.map(this, [], f);
-
-  Collection<ClientRect> filter(bool f(ClientRect element)) =>
-     _Collections.filter(this, <ClientRect>[], f);
-
-  bool every(bool f(ClientRect element)) => _Collections.every(this, f);
-
-  bool some(bool f(ClientRect element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<ClientRect>:
-
-  void sort([Comparator<ClientRect> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(ClientRect element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(ClientRect element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  ClientRect get last => this[length - 1];
-
-  ClientRect removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<ClientRect> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <ClientRect>[]);
-
-  // -- end List<ClientRect> mixins.
-
-  _ClientRectImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Clipboard
-abstract class Clipboard {
-
-  /** @domName Clipboard.dropEffect */
-  String dropEffect;
-
-  /** @domName Clipboard.effectAllowed */
-  String effectAllowed;
-
-  /** @domName Clipboard.files */
-  List<File> get files;
-
-  /** @domName Clipboard.items */
-  DataTransferItemList get items;
-
-  /** @domName Clipboard.types */
-  List get types;
-
-  /** @domName Clipboard.clearData */
-  void clearData([String type]);
-
-  /** @domName Clipboard.getData */
-  String getData(String type);
-
-  /** @domName Clipboard.setData */
-  bool setData(String type, String data);
-
-  /** @domName Clipboard.setDragImage */
-  void setDragImage(ImageElement image, int x, int y);
-}
-
-class _ClipboardImpl implements Clipboard native "*Clipboard" {
-
-  String dropEffect;
-
-  String effectAllowed;
-
-  final _FileListImpl files;
-
-  final _DataTransferItemListImpl items;
-
-  final List types;
-
-  void clearData([String type]) native;
-
-  String getData(String type) native;
-
-  bool setData(String type, String data) native;
-
-  void setDragImage(_ImageElementImpl image, int x, int y) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CloseEvent
-abstract class CloseEvent implements Event {
-
-  /** @domName CloseEvent.code */
-  int get code;
-
-  /** @domName CloseEvent.reason */
-  String get reason;
-
-  /** @domName CloseEvent.wasClean */
-  bool get wasClean;
-}
-
-class _CloseEventImpl extends _EventImpl implements CloseEvent native "*CloseEvent" {
-
-  final int code;
-
-  final String reason;
-
-  final bool wasClean;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Comment
-abstract class Comment implements CharacterData {
-}
-
-class _CommentImpl extends _CharacterDataImpl implements Comment native "*Comment" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName CompositionEvent
-abstract class CompositionEvent implements UIEvent {
-
-  /** @domName CompositionEvent.data */
-  String get data;
-
-  /** @domName CompositionEvent.initCompositionEvent */
-  void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
-}
-
-class _CompositionEventImpl extends _UIEventImpl implements CompositionEvent native "*CompositionEvent" {
-
-  final String data;
-
-  void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, _LocalWindowImpl viewArg, String dataArg) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Console
-abstract class Console {
-
-  /** @domName Console.memory */
-  MemoryInfo get memory;
-
-  /** @domName Console.profiles */
-  List<ScriptProfile> get profiles;
-
-  /** @domName Console.assertCondition */
-  void assertCondition(bool condition, Object arg);
-
-  /** @domName Console.count */
-  void count(Object arg);
-
-  /** @domName Console.debug */
-  void debug(Object arg);
-
-  /** @domName Console.dir */
-  void dir(Object arg);
-
-  /** @domName Console.dirxml */
-  void dirxml(Object arg);
-
-  /** @domName Console.error */
-  void error(Object arg);
-
-  /** @domName Console.group */
-  void group(Object arg);
-
-  /** @domName Console.groupCollapsed */
-  void groupCollapsed(Object arg);
-
-  /** @domName Console.groupEnd */
-  void groupEnd();
-
-  /** @domName Console.info */
-  void info(Object arg);
-
-  /** @domName Console.log */
-  void log(Object arg);
-
-  /** @domName Console.markTimeline */
-  void markTimeline(Object arg);
-
-  /** @domName Console.profile */
-  void profile(String title);
-
-  /** @domName Console.profileEnd */
-  void profileEnd(String title);
-
-  /** @domName Console.time */
-  void time(String title);
-
-  /** @domName Console.timeEnd */
-  void timeEnd(String title, Object arg);
-
-  /** @domName Console.timeStamp */
-  void timeStamp(Object arg);
-
-  /** @domName Console.trace */
-  void trace(Object arg);
-
-  /** @domName Console.warn */
-  void warn(Object arg);
-}
-// 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 _ConsoleImpl
-    // Console is sometimes a singleton bag-of-properties without a prototype.
-    implements Console
-    native "=(typeof console == 'undefined' ? {} : console)" {
-
-  final _MemoryInfoImpl memory;
-
-  final List<ScriptProfile> profiles;
-
-  void assertCondition(bool condition, Object arg) native;
-
-  void count(Object arg) native;
-
-  void debug(Object arg) native;
-
-  void dir(Object arg) native;
-
-  void dirxml(Object arg) native;
-
-  void error(Object arg) native;
-
-  void group(Object arg) native;
-
-  void groupCollapsed(Object arg) native;
-
-  void groupEnd() native;
-
-  void info(Object arg) native;
-
-  void log(Object arg) native;
-
-  void markTimeline(Object arg) native;
-
-  void profile(String title) native;
-
-  void profileEnd(String title) native;
-
-  void time(String title) native;
-
-  void timeEnd(String title, Object arg) native;
-
-  void timeStamp(Object arg) native;
-
-  void trace(Object arg) native;
-
-  void warn(Object arg) native;
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLContentElement
-abstract class ContentElement implements Element {
-
-  factory ContentElement() => _Elements.createContentElement();
-
-  /** @domName HTMLContentElement.resetStyleInheritance */
-  bool resetStyleInheritance;
-
-  /** @domName HTMLContentElement.select */
-  String select;
-
-  /** @domName HTMLContentElement.getDistributedNodes */
-  List<Node> getDistributedNodes();
-}
-
-class _ContentElementImpl extends _ElementImpl implements ContentElement native "*HTMLContentElement" {
-
-  bool resetStyleInheritance;
-
-  String select;
-
-  List<Node> getDistributedNodes() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ConvolverNode
-abstract class ConvolverNode implements AudioNode {
-
-  /** @domName ConvolverNode.buffer */
-  AudioBuffer buffer;
-
-  /** @domName ConvolverNode.normalize */
-  bool normalize;
-}
-
-class _ConvolverNodeImpl extends _AudioNodeImpl implements ConvolverNode native "*ConvolverNode" {
-
-  _AudioBufferImpl buffer;
-
-  bool normalize;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Coordinates
-abstract class Coordinates {
-
-  /** @domName Coordinates.accuracy */
-  num get accuracy;
-
-  /** @domName Coordinates.altitude */
-  num get altitude;
-
-  /** @domName Coordinates.altitudeAccuracy */
-  num get altitudeAccuracy;
-
-  /** @domName Coordinates.heading */
-  num get heading;
-
-  /** @domName Coordinates.latitude */
-  num get latitude;
-
-  /** @domName Coordinates.longitude */
-  num get longitude;
-
-  /** @domName Coordinates.speed */
-  num get speed;
-}
-
-class _CoordinatesImpl implements Coordinates native "*Coordinates" {
-
-  final num accuracy;
-
-  final num altitude;
-
-  final num altitudeAccuracy;
-
-  final num heading;
-
-  final num latitude;
-
-  final num longitude;
-
-  final num speed;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Counter
-abstract class Counter {
-
-  /** @domName Counter.identifier */
-  String get identifier;
-
-  /** @domName Counter.listStyle */
-  String get listStyle;
-
-  /** @domName Counter.separator */
-  String get separator;
-}
-
-class _CounterImpl implements Counter native "*Counter" {
-
-  final String identifier;
-
-  final String listStyle;
-
-  final String separator;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Crypto
-abstract class Crypto {
-
-  /** @domName Crypto.getRandomValues */
-  void getRandomValues(ArrayBufferView array);
-}
-
-class _CryptoImpl implements Crypto native "*Crypto" {
-
-  void getRandomValues(_ArrayBufferViewImpl array) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName CustomEvent
-abstract class CustomEvent implements Event {
-
-  factory CustomEvent(String type, [bool canBubble = true, bool cancelable = true,
-      Object detail = null]) => _CustomEventFactoryProvider.createCustomEvent(type, canBubble,
-      cancelable, detail);
-
-
-  /** @domName CustomEvent.detail */
-  Object get detail;
-
-  /** @domName CustomEvent.initCustomEvent */
-  void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
-}
-
-class _CustomEventImpl extends _EventImpl implements CustomEvent native "*CustomEvent" {
-
-  final Object detail;
-
-  void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native "initCustomEvent";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLDListElement
-abstract class DListElement implements Element {
-
-  factory DListElement() => _Elements.createDListElement();
-
-  /** @domName HTMLDListElement.compact */
-  bool compact;
-}
-
-class _DListElementImpl extends _ElementImpl implements DListElement native "*HTMLDListElement" {
-
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMApplicationCache
-abstract class DOMApplicationCache implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  DOMApplicationCacheEvents get on;
-
-  static const int CHECKING = 2;
-
-  static const int DOWNLOADING = 3;
-
-  static const int IDLE = 1;
-
-  static const int OBSOLETE = 5;
-
-  static const int UNCACHED = 0;
-
-  static const int UPDATEREADY = 4;
-
-  /** @domName DOMApplicationCache.status */
-  int get status;
-
-  /** @domName DOMApplicationCache.abort */
-  void abort();
-
-  /** @domName DOMApplicationCache.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName DOMApplicationCache.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName DOMApplicationCache.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName DOMApplicationCache.swapCache */
-  void swapCache();
-
-  /** @domName DOMApplicationCache.update */
-  void update();
-}
-
-abstract class DOMApplicationCacheEvents implements Events {
-
-  EventListenerList get cached;
-
-  EventListenerList get checking;
-
-  EventListenerList get downloading;
-
-  EventListenerList get error;
-
-  EventListenerList get noUpdate;
-
-  EventListenerList get obsolete;
-
-  EventListenerList get progress;
-
-  EventListenerList get updateReady;
-}
-
-class _DOMApplicationCacheImpl extends _EventTargetImpl implements DOMApplicationCache native "*DOMApplicationCache" {
-
-  _DOMApplicationCacheEventsImpl get on =>
-    new _DOMApplicationCacheEventsImpl(this);
-
-  final int status;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void swapCache() native;
-
-  void update() native;
-}
-
-class _DOMApplicationCacheEventsImpl extends _EventsImpl implements DOMApplicationCacheEvents {
-  _DOMApplicationCacheEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get cached => this['cached'];
-
-  EventListenerList get checking => this['checking'];
-
-  EventListenerList get downloading => this['downloading'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get noUpdate => this['noupdate'];
-
-  EventListenerList get obsolete => this['obsolete'];
-
-  EventListenerList get progress => this['progress'];
-
-  EventListenerList get updateReady => this['updateready'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMError
-abstract class DOMError {
-
-  /** @domName DOMError.name */
-  String get name;
-}
-
-class _DOMErrorImpl implements DOMError native "*DOMError" {
-
-  final String name;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMException
-abstract class DOMException {
-
-  static const int ABORT_ERR = 20;
-
-  static const int DATA_CLONE_ERR = 25;
-
-  static const int DOMSTRING_SIZE_ERR = 2;
-
-  static const int HIERARCHY_REQUEST_ERR = 3;
-
-  static const int INDEX_SIZE_ERR = 1;
-
-  static const int INUSE_ATTRIBUTE_ERR = 10;
-
-  static const int INVALID_ACCESS_ERR = 15;
-
-  static const int INVALID_CHARACTER_ERR = 5;
-
-  static const int INVALID_MODIFICATION_ERR = 13;
-
-  static const int INVALID_NODE_TYPE_ERR = 24;
-
-  static const int INVALID_STATE_ERR = 11;
-
-  static const int NAMESPACE_ERR = 14;
-
-  static const int NETWORK_ERR = 19;
-
-  static const int NOT_FOUND_ERR = 8;
-
-  static const int NOT_SUPPORTED_ERR = 9;
-
-  static const int NO_DATA_ALLOWED_ERR = 6;
-
-  static const int NO_MODIFICATION_ALLOWED_ERR = 7;
-
-  static const int QUOTA_EXCEEDED_ERR = 22;
-
-  static const int SECURITY_ERR = 18;
-
-  static const int SYNTAX_ERR = 12;
-
-  static const int TIMEOUT_ERR = 23;
-
-  static const int TYPE_MISMATCH_ERR = 17;
-
-  static const int URL_MISMATCH_ERR = 21;
-
-  static const int VALIDATION_ERR = 16;
-
-  static const int WRONG_DOCUMENT_ERR = 4;
-
-  /** @domName DOMException.code */
-  int get code;
-
-  /** @domName DOMException.message */
-  String get message;
-
-  /** @domName DOMException.name */
-  String get name;
-
-  /** @domName DOMException.toString */
-  String toString();
-}
-
-class _DOMExceptionImpl implements DOMException native "*DOMException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMFileSystem
-abstract class DOMFileSystem {
-
-  /** @domName DOMFileSystem.name */
-  String get name;
-
-  /** @domName DOMFileSystem.root */
-  DirectoryEntry get root;
-}
-
-class _DOMFileSystemImpl implements DOMFileSystem native "*DOMFileSystem" {
-
-  final String name;
-
-  final _DirectoryEntryImpl root;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMFileSystemSync
-abstract class DOMFileSystemSync {
-
-  /** @domName DOMFileSystemSync.name */
-  String get name;
-
-  /** @domName DOMFileSystemSync.root */
-  DirectoryEntrySync get root;
-}
-
-class _DOMFileSystemSyncImpl implements DOMFileSystemSync native "*DOMFileSystemSync" {
-
-  final String name;
-
-  final _DirectoryEntrySyncImpl root;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMImplementation
-abstract class DOMImplementation {
-
-  /** @domName DOMImplementation.createCSSStyleSheet */
-  CSSStyleSheet createCSSStyleSheet(String title, String media);
-
-  /** @domName DOMImplementation.createDocument */
-  Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype);
-
-  /** @domName DOMImplementation.createDocumentType */
-  DocumentType createDocumentType(String qualifiedName, String publicId, String systemId);
-
-  /** @domName DOMImplementation.createHTMLDocument */
-  Document createHTMLDocument(String title);
-
-  /** @domName DOMImplementation.hasFeature */
-  bool hasFeature(String feature, String version);
-}
-
-class _DOMImplementationImpl implements DOMImplementation native "*DOMImplementation" {
-
-  _CSSStyleSheetImpl createCSSStyleSheet(String title, String media) native;
-
-  _DocumentImpl createDocument(String namespaceURI, String qualifiedName, _DocumentTypeImpl doctype) native;
-
-  _DocumentTypeImpl createDocumentType(String qualifiedName, String publicId, String systemId) native;
-
-  _DocumentImpl createHTMLDocument(String title) native;
-
-  bool hasFeature(String feature, String version) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MimeType
-abstract class DOMMimeType {
-
-  /** @domName MimeType.description */
-  String get description;
-
-  /** @domName MimeType.enabledPlugin */
-  DOMPlugin get enabledPlugin;
-
-  /** @domName MimeType.suffixes */
-  String get suffixes;
-
-  /** @domName MimeType.type */
-  String get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MimeTypeArray
-abstract class DOMMimeTypeArray implements List<DOMMimeType> {
-
-  /** @domName MimeTypeArray.length */
-  int get length;
-
-  /** @domName MimeTypeArray.item */
-  DOMMimeType item(int index);
-
-  /** @domName MimeTypeArray.namedItem */
-  DOMMimeType namedItem(String name);
-}
-
-class _DOMMimeTypeArrayImpl implements DOMMimeTypeArray, JavaScriptIndexingBehavior native "*MimeTypeArray" {
-
-  final int length;
-
-  _DOMMimeTypeImpl operator[](int index) => JS("_DOMMimeTypeImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _DOMMimeTypeImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<DOMMimeType> mixins.
-  // DOMMimeType is the element type.
-
-  // From Iterable<DOMMimeType>:
-
-  Iterator<DOMMimeType> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<DOMMimeType>(this);
-  }
-
-  // From Collection<DOMMimeType>:
-
-  void add(DOMMimeType value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(DOMMimeType value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<DOMMimeType> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(DOMMimeType element) => _Collections.contains(this, element);
-
-  void forEach(void f(DOMMimeType element)) => _Collections.forEach(this, f);
-
-  Collection map(f(DOMMimeType element)) => _Collections.map(this, [], f);
-
-  Collection<DOMMimeType> filter(bool f(DOMMimeType element)) =>
-     _Collections.filter(this, <DOMMimeType>[], f);
-
-  bool every(bool f(DOMMimeType element)) => _Collections.every(this, f);
-
-  bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<DOMMimeType>:
-
-  void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(DOMMimeType element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(DOMMimeType element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  DOMMimeType get last => this[length - 1];
-
-  DOMMimeType removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<DOMMimeType> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <DOMMimeType>[]);
-
-  // -- end List<DOMMimeType> mixins.
-
-  _DOMMimeTypeImpl item(int index) native;
-
-  _DOMMimeTypeImpl namedItem(String name) native;
-}
-
-class _DOMMimeTypeImpl implements DOMMimeType native "*MimeType" {
-
-  final String description;
-
-  final _DOMPluginImpl enabledPlugin;
-
-  final String suffixes;
-
-  final String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMParser
-abstract class DOMParser {
-
-  factory DOMParser() => _DOMParserFactoryProvider.createDOMParser();
-
-  /** @domName DOMParser.parseFromString */
-  Document parseFromString(String str, String contentType);
-}
-
-class _DOMParserImpl implements DOMParser native "*DOMParser" {
-
-  _DocumentImpl parseFromString(String str, String contentType) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Plugin
-abstract class DOMPlugin {
-
-  /** @domName Plugin.description */
-  String get description;
-
-  /** @domName Plugin.filename */
-  String get filename;
-
-  /** @domName Plugin.length */
-  int get length;
-
-  /** @domName Plugin.name */
-  String get name;
-
-  /** @domName Plugin.item */
-  DOMMimeType item(int index);
-
-  /** @domName Plugin.namedItem */
-  DOMMimeType namedItem(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PluginArray
-abstract class DOMPluginArray implements List<DOMPlugin> {
-
-  /** @domName PluginArray.length */
-  int get length;
-
-  /** @domName PluginArray.item */
-  DOMPlugin item(int index);
-
-  /** @domName PluginArray.namedItem */
-  DOMPlugin namedItem(String name);
-
-  /** @domName PluginArray.refresh */
-  void refresh(bool reload);
-}
-
-class _DOMPluginArrayImpl implements DOMPluginArray, JavaScriptIndexingBehavior native "*PluginArray" {
-
-  final int length;
-
-  _DOMPluginImpl operator[](int index) => JS("_DOMPluginImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _DOMPluginImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<DOMPlugin> mixins.
-  // DOMPlugin is the element type.
-
-  // From Iterable<DOMPlugin>:
-
-  Iterator<DOMPlugin> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<DOMPlugin>(this);
-  }
-
-  // From Collection<DOMPlugin>:
-
-  void add(DOMPlugin value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(DOMPlugin value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<DOMPlugin> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(DOMPlugin element) => _Collections.contains(this, element);
-
-  void forEach(void f(DOMPlugin element)) => _Collections.forEach(this, f);
-
-  Collection map(f(DOMPlugin element)) => _Collections.map(this, [], f);
-
-  Collection<DOMPlugin> filter(bool f(DOMPlugin element)) =>
-     _Collections.filter(this, <DOMPlugin>[], f);
-
-  bool every(bool f(DOMPlugin element)) => _Collections.every(this, f);
-
-  bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<DOMPlugin>:
-
-  void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(DOMPlugin element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(DOMPlugin element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  DOMPlugin get last => this[length - 1];
-
-  DOMPlugin removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<DOMPlugin> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <DOMPlugin>[]);
-
-  // -- end List<DOMPlugin> mixins.
-
-  _DOMPluginImpl item(int index) native;
-
-  _DOMPluginImpl namedItem(String name) native;
-
-  void refresh(bool reload) native;
-}
-
-class _DOMPluginImpl implements DOMPlugin native "*Plugin" {
-
-  final String description;
-
-  final String filename;
-
-  final int length;
-
-  final String name;
-
-  _DOMMimeTypeImpl item(int index) native;
-
-  _DOMMimeTypeImpl namedItem(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Selection
-abstract class DOMSelection {
-
-  /** @domName Selection.anchorNode */
-  Node get anchorNode;
-
-  /** @domName Selection.anchorOffset */
-  int get anchorOffset;
-
-  /** @domName Selection.baseNode */
-  Node get baseNode;
-
-  /** @domName Selection.baseOffset */
-  int get baseOffset;
-
-  /** @domName Selection.extentNode */
-  Node get extentNode;
-
-  /** @domName Selection.extentOffset */
-  int get extentOffset;
-
-  /** @domName Selection.focusNode */
-  Node get focusNode;
-
-  /** @domName Selection.focusOffset */
-  int get focusOffset;
-
-  /** @domName Selection.isCollapsed */
-  bool get isCollapsed;
-
-  /** @domName Selection.rangeCount */
-  int get rangeCount;
-
-  /** @domName Selection.type */
-  String get type;
-
-  /** @domName Selection.addRange */
-  void addRange(Range range);
-
-  /** @domName Selection.collapse */
-  void collapse(Node node, int index);
-
-  /** @domName Selection.collapseToEnd */
-  void collapseToEnd();
-
-  /** @domName Selection.collapseToStart */
-  void collapseToStart();
-
-  /** @domName Selection.containsNode */
-  bool containsNode(Node node, bool allowPartial);
-
-  /** @domName Selection.deleteFromDocument */
-  void deleteFromDocument();
-
-  /** @domName Selection.empty */
-  void empty();
-
-  /** @domName Selection.extend */
-  void extend(Node node, int offset);
-
-  /** @domName Selection.getRangeAt */
-  Range getRangeAt(int index);
-
-  /** @domName Selection.modify */
-  void modify(String alter, String direction, String granularity);
-
-  /** @domName Selection.removeAllRanges */
-  void removeAllRanges();
-
-  /** @domName Selection.selectAllChildren */
-  void selectAllChildren(Node node);
-
-  /** @domName Selection.setBaseAndExtent */
-  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset);
-
-  /** @domName Selection.setPosition */
-  void setPosition(Node node, int offset);
-
-  /** @domName Selection.toString */
-  String toString();
-}
-
-class _DOMSelectionImpl implements DOMSelection native "*Selection" {
-
-  final _NodeImpl anchorNode;
-
-  final int anchorOffset;
-
-  final _NodeImpl baseNode;
-
-  final int baseOffset;
-
-  final _NodeImpl extentNode;
-
-  final int extentOffset;
-
-  final _NodeImpl focusNode;
-
-  final int focusOffset;
-
-  final bool isCollapsed;
-
-  final int rangeCount;
-
-  final String type;
-
-  void addRange(_RangeImpl range) native;
-
-  void collapse(_NodeImpl node, int index) native;
-
-  void collapseToEnd() native;
-
-  void collapseToStart() native;
-
-  bool containsNode(_NodeImpl node, bool allowPartial) native;
-
-  void deleteFromDocument() native;
-
-  void empty() native;
-
-  void extend(_NodeImpl node, int offset) native;
-
-  _RangeImpl getRangeAt(int index) native;
-
-  void modify(String alter, String direction, String granularity) native;
-
-  void removeAllRanges() native;
-
-  void selectAllChildren(_NodeImpl node) native;
-
-  void setBaseAndExtent(_NodeImpl baseNode, int baseOffset, _NodeImpl extentNode, int extentOffset) native;
-
-  void setPosition(_NodeImpl node, int offset) native;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMSettableTokenList
-abstract class DOMSettableTokenList implements DOMTokenList {
-
-  /** @domName DOMSettableTokenList.value */
-  String value;
-}
-
-class _DOMSettableTokenListImpl extends _DOMTokenListImpl implements DOMSettableTokenList native "*DOMSettableTokenList" {
-
-  String value;
-}
-
-class _DOMStringListImpl implements List<String>, JavaScriptIndexingBehavior native "*DOMStringList" {
-
-  final int length;
-
-  String operator[](int index) => JS("String", "#[#]", this, index);
-
-  void operator[]=(int index, String value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<String> mixins.
-  // String is the element type.
-
-  // From Iterable<String>:
-
-  Iterator<String> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<String>(this);
-  }
-
-  // From Collection<String>:
-
-  void add(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<String> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  // contains() defined by IDL.
-
-  void forEach(void f(String element)) => _Collections.forEach(this, f);
-
-  Collection map(f(String element)) => _Collections.map(this, [], f);
-
-  Collection<String> filter(bool f(String element)) =>
-     _Collections.filter(this, <String>[], f);
-
-  bool every(bool f(String element)) => _Collections.every(this, f);
-
-  bool some(bool f(String element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<String>:
-
-  void sort([Comparator<String> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(String element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(String element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  String get last => this[length - 1];
-
-  String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<String> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <String>[]);
-
-  // -- end List<String> mixins.
-
-  bool contains(String string) native;
-
-  String item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMStringMap
-abstract class DOMStringMap {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DOMTokenList
-abstract class DOMTokenList {
-
-  /** @domName DOMTokenList.length */
-  int get length;
-
-  /** @domName DOMTokenList.contains */
-  bool contains(String token);
-
-  /** @domName DOMTokenList.item */
-  String item(int index);
-
-  /** @domName DOMTokenList.toString */
-  String toString();
-
-  /** @domName DOMTokenList.toggle */
-  bool toggle(String token, [bool force]);
-}
-
-class _DOMTokenListImpl implements DOMTokenList native "*DOMTokenList" {
-
-  final int length;
-
-  bool contains(String token) native;
-
-  String item(int index) native;
-
-  String toString() native;
-
-  bool toggle(String token, [bool force]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName URL
-abstract class DOMURL {
-
-  factory DOMURL() => _DOMURLFactoryProvider.createDOMURL();
-
-  /** @domName URL.createObjectURL */
-  static final createObjectURL = _DOMURLImpl.createObjectURL;
-
-  /** @domName URL.revokeObjectURL */
-  static final revokeObjectURL = _DOMURLImpl.revokeObjectURL;
-}
-
-class _DOMURLImpl implements DOMURL native "*URL" {
-
-  static String createObjectURL(blob_OR_source_OR_stream) native;
-
-  static void revokeObjectURL(String url) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLDataListElement
-abstract class DataListElement implements Element {
-
-  factory DataListElement() => _Elements.createDataListElement();
-
-  /** @domName HTMLDataListElement.options */
-  HTMLCollection get options;
-}
-
-class _DataListElementImpl extends _ElementImpl implements DataListElement native "*HTMLDataListElement" {
-
-  final _HTMLCollectionImpl options;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DataTransferItem
-abstract class DataTransferItem {
-
-  /** @domName DataTransferItem.kind */
-  String get kind;
-
-  /** @domName DataTransferItem.type */
-  String get type;
-
-  /** @domName DataTransferItem.getAsFile */
-  Blob getAsFile();
-
-  /** @domName DataTransferItem.getAsString */
-  void getAsString([StringCallback callback]);
-
-  /** @domName DataTransferItem.webkitGetAsEntry */
-  Entry webkitGetAsEntry();
-}
-
-class _DataTransferItemImpl implements DataTransferItem native "*DataTransferItem" {
-
-  final String kind;
-
-  final String type;
-
-  _BlobImpl getAsFile() native;
-
-  void getAsString([StringCallback callback]) native;
-
-  _EntryImpl webkitGetAsEntry() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DataTransferItemList
-abstract class DataTransferItemList {
-
-  /** @domName DataTransferItemList.length */
-  int get length;
-
-  /** @domName DataTransferItemList.add */
-  void add(data_OR_file, [String type]);
-
-  /** @domName DataTransferItemList.clear */
-  void clear();
-
-  /** @domName DataTransferItemList.item */
-  DataTransferItem item(int index);
-}
-
-class _DataTransferItemListImpl implements DataTransferItemList native "*DataTransferItemList" {
-
-  final int length;
-
-  void add(data_OR_file, [String type]) native;
-
-  void clear() native;
-
-  _DataTransferItemImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DataView
-abstract class DataView implements ArrayBufferView {
-
-  factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
-    if (!?byteOffset) {
-      return _DataViewFactoryProvider.createDataView(buffer);
-    }
-    if (!?byteLength) {
-      return _DataViewFactoryProvider.createDataView(buffer, byteOffset);
-    }
-    return _DataViewFactoryProvider.createDataView(buffer, byteOffset, byteLength);
-  }
-
-  /** @domName DataView.getFloat32 */
-  num getFloat32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getFloat64 */
-  num getFloat64(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt16 */
-  int getInt16(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt32 */
-  int getInt32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt8 */
-  int getInt8(int byteOffset);
-
-  /** @domName DataView.getUint16 */
-  int getUint16(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getUint32 */
-  int getUint32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getUint8 */
-  int getUint8(int byteOffset);
-
-  /** @domName DataView.setFloat32 */
-  void setFloat32(int byteOffset, num value, {bool littleEndian});
-
-  /** @domName DataView.setFloat64 */
-  void setFloat64(int byteOffset, num value, {bool littleEndian});
-
-  /** @domName DataView.setInt16 */
-  void setInt16(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setInt32 */
-  void setInt32(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setInt8 */
-  void setInt8(int byteOffset, int value);
-
-  /** @domName DataView.setUint16 */
-  void setUint16(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setUint32 */
-  void setUint32(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setUint8 */
-  void setUint8(int byteOffset, int value);
-}
-
-class _DataViewImpl extends _ArrayBufferViewImpl implements DataView native "*DataView" {
-
-  num getFloat32(int byteOffset, {bool littleEndian}) native;
-
-  num getFloat64(int byteOffset, {bool littleEndian}) native;
-
-  int getInt16(int byteOffset, {bool littleEndian}) native;
-
-  int getInt32(int byteOffset, {bool littleEndian}) native;
-
-  int getInt8(int byteOffset) native;
-
-  int getUint16(int byteOffset, {bool littleEndian}) native;
-
-  int getUint32(int byteOffset, {bool littleEndian}) native;
-
-  int getUint8(int byteOffset) native;
-
-  void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
-
-  void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
-
-  void setInt16(int byteOffset, int value, {bool littleEndian}) native;
-
-  void setInt32(int byteOffset, int value, {bool littleEndian}) native;
-
-  void setInt8(int byteOffset, int value) native;
-
-  void setUint16(int byteOffset, int value, {bool littleEndian}) native;
-
-  void setUint32(int byteOffset, int value, {bool littleEndian}) native;
-
-  void setUint8(int byteOffset, int value) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Database
-abstract class Database {
-
-  /** @domName Database.version */
-  String get version;
-
-  /** @domName Database.changeVersion */
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
-
-  /** @domName Database.readTransaction */
-  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
-
-  /** @domName Database.transaction */
-  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void DatabaseCallback(database);
-
-class _DatabaseImpl implements Database native "*Database" {
-
-  final String version;
-
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
-
-  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
-
-  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DatabaseSync
-abstract class DatabaseSync {
-
-  /** @domName DatabaseSync.lastErrorMessage */
-  String get lastErrorMessage;
-
-  /** @domName DatabaseSync.version */
-  String get version;
-
-  /** @domName DatabaseSync.changeVersion */
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
-
-  /** @domName DatabaseSync.readTransaction */
-  void readTransaction(SQLTransactionSyncCallback callback);
-
-  /** @domName DatabaseSync.transaction */
-  void transaction(SQLTransactionSyncCallback callback);
-}
-
-class _DatabaseSyncImpl implements DatabaseSync native "*DatabaseSync" {
-
-  final String lastErrorMessage;
-
-  final String version;
-
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]) native;
-
-  void readTransaction(SQLTransactionSyncCallback callback) native;
-
-  void transaction(SQLTransactionSyncCallback callback) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DedicatedWorkerContext
-abstract class DedicatedWorkerContext implements WorkerContext {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  DedicatedWorkerContextEvents get on;
-
-  /** @domName DedicatedWorkerContext.postMessage */
-  void postMessage(Object message, [List messagePorts]);
-}
-
-abstract class DedicatedWorkerContextEvents implements WorkerContextEvents {
-
-  EventListenerList get message;
-}
-
-class _DedicatedWorkerContextImpl extends _WorkerContextImpl implements DedicatedWorkerContext native "*DedicatedWorkerContext" {
-
-  _DedicatedWorkerContextEventsImpl get on =>
-    new _DedicatedWorkerContextEventsImpl(this);
-
-  void postMessage(/*any*/ message, [messagePorts]) {
-    if (?messagePorts) {
-      var message_1 = _convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, messagePorts);
-      return;
-    }
-    var message_2 = _convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_2);
-    return;
-  }
-  void _postMessage_1(message, List messagePorts) native "postMessage";
-  void _postMessage_2(message) native "postMessage";
-}
-
-class _DedicatedWorkerContextEventsImpl extends _WorkerContextEventsImpl implements DedicatedWorkerContextEvents {
-  _DedicatedWorkerContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get message => this['message'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DelayNode
-abstract class DelayNode implements AudioNode {
-
-  /** @domName DelayNode.delayTime */
-  AudioParam get delayTime;
-}
-
-class _DelayNodeImpl extends _AudioNodeImpl implements DelayNode native "*DelayNode" {
-
-  final _AudioParamImpl delayTime;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLDetailsElement
-abstract class DetailsElement implements Element {
-
-  factory DetailsElement() => _Elements.createDetailsElement();
-
-  /** @domName HTMLDetailsElement.open */
-  bool open;
-}
-
-class _DetailsElementImpl extends _ElementImpl implements DetailsElement native "*HTMLDetailsElement" {
-
-  bool open;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DeviceMotionEvent
-abstract class DeviceMotionEvent implements Event {
-
-  /** @domName DeviceMotionEvent.interval */
-  num get interval;
-}
-
-class _DeviceMotionEventImpl extends _EventImpl implements DeviceMotionEvent native "*DeviceMotionEvent" {
-
-  final num interval;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DeviceOrientationEvent
-abstract class DeviceOrientationEvent implements Event {
-
-  /** @domName DeviceOrientationEvent.absolute */
-  bool get absolute;
-
-  /** @domName DeviceOrientationEvent.alpha */
-  num get alpha;
-
-  /** @domName DeviceOrientationEvent.beta */
-  num get beta;
-
-  /** @domName DeviceOrientationEvent.gamma */
-  num get gamma;
-
-  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
-  void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
-}
-
-class _DeviceOrientationEventImpl extends _EventImpl implements DeviceOrientationEvent native "*DeviceOrientationEvent" {
-
-  final bool absolute;
-
-  final num alpha;
-
-  final num beta;
-
-  final num gamma;
-
-  void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLDirectoryElement
-abstract class DirectoryElement implements Element {
-
-  /** @domName HTMLDirectoryElement.compact */
-  bool compact;
-}
-
-class _DirectoryElementImpl extends _ElementImpl implements DirectoryElement native "*HTMLDirectoryElement" {
-
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DirectoryEntry
-abstract class DirectoryEntry implements Entry {
-
-  /** @domName DirectoryEntry.createReader */
-  DirectoryReader createReader();
-
-  /** @domName DirectoryEntry.getDirectory */
-  void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
-
-  /** @domName DirectoryEntry.getFile */
-  void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
-
-  /** @domName DirectoryEntry.removeRecursively */
-  void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
-}
-
-class _DirectoryEntryImpl extends _EntryImpl implements DirectoryEntry native "*DirectoryEntry" {
-
-  _DirectoryReaderImpl createReader() native;
-
-  void getDirectory(String path, {options, successCallback, errorCallback}) {
-    if (?errorCallback) {
-      var options_1 = _convertDartToNative_Dictionary(options);
-      _getDirectory_1(path, options_1, successCallback, errorCallback);
-      return;
-    }
-    if (?successCallback) {
-      var options_2 = _convertDartToNative_Dictionary(options);
-      _getDirectory_2(path, options_2, successCallback);
-      return;
-    }
-    if (?options) {
-      var options_3 = _convertDartToNative_Dictionary(options);
-      _getDirectory_3(path, options_3);
-      return;
-    }
-    _getDirectory_4(path);
-    return;
-  }
-  void _getDirectory_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native "getDirectory";
-  void _getDirectory_2(path, options, EntryCallback successCallback) native "getDirectory";
-  void _getDirectory_3(path, options) native "getDirectory";
-  void _getDirectory_4(path) native "getDirectory";
-
-  void getFile(String path, {options, successCallback, errorCallback}) {
-    if (?errorCallback) {
-      var options_1 = _convertDartToNative_Dictionary(options);
-      _getFile_1(path, options_1, successCallback, errorCallback);
-      return;
-    }
-    if (?successCallback) {
-      var options_2 = _convertDartToNative_Dictionary(options);
-      _getFile_2(path, options_2, successCallback);
-      return;
-    }
-    if (?options) {
-      var options_3 = _convertDartToNative_Dictionary(options);
-      _getFile_3(path, options_3);
-      return;
-    }
-    _getFile_4(path);
-    return;
-  }
-  void _getFile_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native "getFile";
-  void _getFile_2(path, options, EntryCallback successCallback) native "getFile";
-  void _getFile_3(path, options) native "getFile";
-  void _getFile_4(path) native "getFile";
-
-  void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DirectoryEntrySync
-abstract class DirectoryEntrySync implements EntrySync {
-
-  /** @domName DirectoryEntrySync.createReader */
-  DirectoryReaderSync createReader();
-
-  /** @domName DirectoryEntrySync.getDirectory */
-  DirectoryEntrySync getDirectory(String path, Map flags);
-
-  /** @domName DirectoryEntrySync.getFile */
-  FileEntrySync getFile(String path, Map flags);
-
-  /** @domName DirectoryEntrySync.removeRecursively */
-  void removeRecursively();
-}
-
-class _DirectoryEntrySyncImpl extends _EntrySyncImpl implements DirectoryEntrySync native "*DirectoryEntrySync" {
-
-  _DirectoryReaderSyncImpl createReader() native;
-
-  _DirectoryEntrySyncImpl getDirectory(String path, Map flags) {
-    var flags_1 = _convertDartToNative_Dictionary(flags);
-    return _getDirectory_1(path, flags_1);
-  }
-  _DirectoryEntrySyncImpl _getDirectory_1(path, flags) native "getDirectory";
-
-  _FileEntrySyncImpl getFile(String path, Map flags) {
-    var flags_1 = _convertDartToNative_Dictionary(flags);
-    return _getFile_1(path, flags_1);
-  }
-  _FileEntrySyncImpl _getFile_1(path, flags) native "getFile";
-
-  void removeRecursively() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DirectoryReader
-abstract class DirectoryReader {
-
-  /** @domName DirectoryReader.readEntries */
-  void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]);
-}
-
-class _DirectoryReaderImpl implements DirectoryReader native "*DirectoryReader" {
-
-  void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DirectoryReaderSync
-abstract class DirectoryReaderSync {
-
-  /** @domName DirectoryReaderSync.readEntries */
-  List<EntrySync> readEntries();
-}
-
-class _DirectoryReaderSyncImpl implements DirectoryReaderSync native "*DirectoryReaderSync" {
-
-  _EntryArraySyncImpl readEntries() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLDivElement
-abstract class DivElement implements Element {
-
-  factory DivElement() => _Elements.createDivElement();
-
-  /** @domName HTMLDivElement.align */
-  String align;
-}
-
-class _DivElementImpl extends _ElementImpl implements DivElement native "*HTMLDivElement" {
-
-  String align;
-}
-// 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.
-
-
-/// @domName Document
-abstract class Document extends HtmlElement {
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  DocumentEvents get on;
-
-  /** @domName HTMLDocument.activeElement */
-  Element get activeElement;
-
-  /** @domName Document.body */
-  Element body;
-
-  /** @domName Document.charset */
-  String charset;
-
-  /** @domName Document.cookie */
-  String cookie;
-
-  /** @domName Document.defaultView */
-  Window get window;
-
-  /** @domName Document.documentElement */
-  Element get documentElement;
-
-  /** @domName Document.domain */
-  String get domain;
-
-  /** @domName Document.head */
-  HeadElement get head;
-
-  /** @domName Document.implementation */
-  DOMImplementation get implementation;
-
-  /** @domName Document.lastModified */
-  String get lastModified;
-
-  /** @domName Document.preferredStylesheetSet */
-  String get preferredStylesheetSet;
-
-  /** @domName Document.readyState */
-  String get readyState;
-
-  /** @domName Document.referrer */
-  String get referrer;
-
-  /** @domName Document.selectedStylesheetSet */
-  String selectedStylesheetSet;
-
-  /** @domName Document.styleSheets */
-  List<StyleSheet> get styleSheets;
-
-  /** @domName Document.title */
-  String title;
-
-  /** @domName Document.webkitCurrentFullScreenElement */
-  Element get webkitCurrentFullScreenElement;
-
-  /** @domName Document.webkitFullScreenKeyboardInputAllowed */
-  bool get webkitFullScreenKeyboardInputAllowed;
-
-  /** @domName Document.webkitFullscreenElement */
-  Element get webkitFullscreenElement;
-
-  /** @domName Document.webkitFullscreenEnabled */
-  bool get webkitFullscreenEnabled;
-
-  /** @domName Document.webkitHidden */
-  bool get webkitHidden;
-
-  /** @domName Document.webkitIsFullScreen */
-  bool get webkitIsFullScreen;
-
-  /** @domName Document.webkitPointerLockElement */
-  Element get webkitPointerLockElement;
-
-  /** @domName Document.webkitVisibilityState */
-  String get webkitVisibilityState;
-
-  /** @domName Document.caretRangeFromPoint */
-  Range caretRangeFromPoint(int x, int y);
-
-  /** @domName Document.createCDATASection */
-  CDATASection createCDATASection(String data);
-
-  /** @domName Document.createDocumentFragment */
-  DocumentFragment createDocumentFragment();
-
-  /** @domName Document.createElement */
-  Element $dom_createElement(String tagName);
-
-  /** @domName Document.createElementNS */
-  Element $dom_createElementNS(String namespaceURI, String qualifiedName);
-
-  /** @domName Document.createEvent */
-  Event $dom_createEvent(String eventType);
-
-  /** @domName Document.createRange */
-  Range createRange();
-
-  /** @domName Document.createTextNode */
-  Text $dom_createTextNode(String data);
-
-  /** @domName Document.createTouch */
-  Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce);
-
-  /** @domName Document.createTouchList */
-  TouchList $dom_createTouchList();
-
-  /** @domName Document.elementFromPoint */
-  Element elementFromPoint(int x, int y);
-
-  /** @domName Document.execCommand */
-  bool execCommand(String command, bool userInterface, String value);
-
-  /** @domName Document.getCSSCanvasContext */
-  CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height);
-
-  /** @domName Document.getElementById */
-  Element $dom_getElementById(String elementId);
-
-  /** @domName Document.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String tagname);
-
-  /** @domName Document.getElementsByName */
-  List<Node> $dom_getElementsByName(String elementName);
-
-  /** @domName Document.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String tagname);
-
-  /** @domName Document.queryCommandEnabled */
-  bool queryCommandEnabled(String command);
-
-  /** @domName Document.queryCommandIndeterm */
-  bool queryCommandIndeterm(String command);
-
-  /** @domName Document.queryCommandState */
-  bool queryCommandState(String command);
-
-  /** @domName Document.queryCommandSupported */
-  bool queryCommandSupported(String command);
-
-  /** @domName Document.queryCommandValue */
-  String queryCommandValue(String command);
-
-  /** @domName Document.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName Document.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-  /** @domName Document.webkitCancelFullScreen */
-  void webkitCancelFullScreen();
-
-  /** @domName Document.webkitExitFullscreen */
-  void webkitExitFullscreen();
-
-  /** @domName Document.webkitExitPointerLock */
-  void webkitExitPointerLock();
-
-}
-
-abstract class DocumentEvents implements ElementEvents {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get readyStateChange;
-
-  EventListenerList get reset;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectionChange;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get fullscreenChange;
-
-  EventListenerList get fullscreenError;
-
-  EventListenerList get pointerLockChange;
-
-  EventListenerList get pointerLockError;
-}
-// 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.
-
-
-/// @domName DocumentFragment
-abstract class DocumentFragment extends Element {
-
-  factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
-
-  factory DocumentFragment.html(String html) =>
-      _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
-
-  // TODO(nweiz): enable this when XML is ported
-  // /** WARNING: Currently this doesn't work on Dartium (issue 649). */
-  // DocumentFragment.xml(String xml);
-
-  factory DocumentFragment.svg(String svg) =>
-      new _DocumentFragmentFactoryProvider.DocumentFragment.svg(svg);
-
-  DocumentFragment clone(bool deep);
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ElementEvents get on;
-
-  /** @domName DocumentFragment.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName DocumentFragment.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-}
-// 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.
-
-class _FilteredElementList implements List {
-  final Node _node;
-  final List<Node> _childNodes;
-
-  _FilteredElementList(Node node): _childNodes = node.nodes, _node = node;
-
-  // We can't memoize this, since it's possible that children will be messed
-  // with externally to this class.
-  //
-  // TODO(nweiz): Do we really need to copy the list to make the types work out?
-  List<Element> get _filtered =>
-    new List.from(_childNodes.filter((n) => n is Element));
-
-  void forEach(void f(Element element)) {
-    _filtered.forEach(f);
-  }
-
-  void operator []=(int index, Element value) {
-    this[index].replaceWith(value);
-  }
-
-  void set length(int newLength) {
-    final len = this.length;
-    if (newLength >= len) {
-      return;
-    } else if (newLength < 0) {
-      throw new ArgumentError("Invalid list length");
-    }
-
-    removeRange(newLength - 1, len - newLength);
-  }
-
-  void add(Element value) {
-    _childNodes.add(value);
-  }
-
-  void addAll(Collection<Element> collection) {
-    collection.forEach(add);
-  }
-
-  void addLast(Element value) {
-    add(value);
-  }
-
-  bool contains(Element element) {
-    return element is Element && _childNodes.contains(element);
-  }
-
-  void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw new UnsupportedError('TODO(jacobr): should we impl?');
-  }
-
-  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
-  }
-
-  void removeRange(int start, int rangeLength) {
-    _filtered.getRange(start, rangeLength).forEach((el) => el.remove());
-  }
-
-  void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
-  }
-
-  void clear() {
-    // Currently, ElementList#clear clears even non-element nodes, so we follow
-    // that behavior.
-    _childNodes.clear();
-  }
-
-  Element removeLast() {
-    final result = this.last;
-    if (result != null) {
-      result.remove();
-    }
-    return result;
-  }
-
-  Collection map(f(Element element)) => _filtered.map(f);
-  Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
-  bool every(bool f(Element element)) => _filtered.every(f);
-  bool some(bool f(Element element)) => _filtered.some(f);
-  bool get isEmpty => _filtered.isEmpty;
-  int get length => _filtered.length;
-  Element operator [](int index) => _filtered[index];
-  Iterator<Element> iterator() => _filtered.iterator();
-  List<Element> getRange(int start, int rangeLength) =>
-    _filtered.getRange(start, rangeLength);
-  int indexOf(Element element, [int start = 0]) =>
-    _filtered.indexOf(element, start);
-
-  int lastIndexOf(Element element, [int start = null]) {
-    if (start == null) start = length - 1;
-    return _filtered.lastIndexOf(element, start);
-  }
-
-  Element get last => _filtered.last;
-}
-
-Future<CSSStyleDeclaration> _emptyStyleFuture() {
-  return _createMeasurementFuture(() => new Element.tag('div').style,
-                                  new Completer<CSSStyleDeclaration>());
-}
-
-class EmptyElementRect implements ElementRect {
-  final ClientRect client = const _SimpleClientRect(0, 0, 0, 0);
-  final ClientRect offset = const _SimpleClientRect(0, 0, 0, 0);
-  final ClientRect scroll = const _SimpleClientRect(0, 0, 0, 0);
-  final ClientRect bounding = const _SimpleClientRect(0, 0, 0, 0);
-  final List<ClientRect> clientRects = const <ClientRect>[];
-
-  const EmptyElementRect();
-}
-
-class _FrozenCSSClassSet extends _CssClassSet {
-  _FrozenCSSClassSet() : super(null);
-
-  void _write(Set s) {
-    throw new UnsupportedError(
-        'frozen class set cannot be modified');
-  }
-  Set<String> _read() => new Set<String>();
-
-  bool get frozen => true;
-}
-
-class _DocumentFragmentImpl extends _NodeImpl implements DocumentFragment native "*DocumentFragment" {
-  List<Element> _elements;
-
-  List<Element> get elements {
-    if (_elements == null) {
-      _elements = new _FilteredElementList(this);
-    }
-    return _elements;
-  }
-
-  // TODO: The type of value should be Collection<Element>. See http://b/5392897
-  void set elements(value) {
-    // Copy list first since we don't want liveness during iteration.
-    List copy = new List.from(value);
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(copy);
-  }
-
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
-
-  List<Element> queryAll(String selectors) =>
-    new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
-
-  String get innerHTML {
-    final e = new Element.tag("div");
-    e.nodes.add(this.clone(true));
-    return e.innerHTML;
-  }
-
-  String get outerHTML => innerHTML;
-
-  // TODO(nweiz): Do we want to support some variant of innerHTML for XML and/or
-  // SVG strings?
-  void set innerHTML(String value) {
-    this.nodes.clear();
-
-    final e = new Element.tag("div");
-    e.innerHTML = value;
-
-    // Copy list first since we don't want liveness during iteration.
-    List nodes = new List.from(e.nodes);
-    this.nodes.addAll(nodes);
-  }
-
-  Node _insertAdjacentNode(String where, Node node) {
-    switch (where.toLowerCase()) {
-      case "beforebegin": return null;
-      case "afterend": return null;
-      case "afterbegin":
-        var first = this.nodes.length > 0 ? this.nodes[0] : null;
-        this.insertBefore(node, first);
-        return node;
-      case "beforeend":
-        this.nodes.add(node);
-        return node;
-      default:
-        throw new ArgumentError("Invalid position ${where}");
-    }
-  }
-
-  Element insertAdjacentElement(String where, Element element)
-    => this._insertAdjacentNode(where, element);
-
-  void insertAdjacentText(String where, String text) {
-    this._insertAdjacentNode(where, new Text(text));
-  }
-
-  void insertAdjacentHTML(String where, String text) {
-    this._insertAdjacentNode(where, new DocumentFragment.html(text));
-  }
-
-  void addText(String text) {
-    this.insertAdjacentText('beforeend', text);
-  }
-
-  void addHTML(String text) {
-    this.insertAdjacentHTML('beforeend', text);
-  }
-
-  Future<ElementRect> get rect {
-    return _createMeasurementFuture(() => const EmptyElementRect(),
-                                    new Completer<ElementRect>());
-  }
-
-  // If we can come up with a semi-reasonable default value for an Element
-  // getter, we'll use it. In general, these return the same values as an
-  // element that has no parent.
-  String get contentEditable => "false";
-  bool get isContentEditable => false;
-  bool get draggable => false;
-  bool get hidden => false;
-  bool get spellcheck => false;
-  bool get translate => false;
-  int get tabIndex => -1;
-  String get id => "";
-  String get title => "";
-  String get tagName => "";
-  String get webkitdropzone => "";
-  String get webkitRegionOverflow => "";
-  Element get $m_firstElementChild {
-    if (elements.length > 0) {
-      return elements[0];
-    }
-    return null;
-  }
-  Element get $m_lastElementChild() => elements.last;
-  Element get nextElementSibling => null;
-  Element get previousElementSibling => null;
-  Element get offsetParent => null;
-  Element get parent => null;
-  Map<String, String> get attributes => const {};
-  CSSClassSet get classes => new _FrozenCSSClassSet();
-  Map<String, String> get dataAttributes => const {};
-  CSSStyleDeclaration get style => new Element.tag('div').style;
-  Future<CSSStyleDeclaration> get computedStyle =>
-      _emptyStyleFuture();
-  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) =>
-      _emptyStyleFuture();
-  bool matchesSelector(String selectors) => false;
-
-  // Imperative Element methods are made into no-ops, as they are on parentless
-  // elements.
-  void blur() {}
-  void focus() {}
-  void click() {}
-  void scrollByLines(int lines) {}
-  void scrollByPages(int pages) {}
-  void scrollIntoView([bool centerIfNeeded]) {}
-  void webkitRequestFullScreen(int flags) {}
-  void webkitRequestFullscreen() {}
-
-  // Setters throw errors rather than being no-ops because we aren't going to
-  // retain the values that were set, and erroring out seems clearer.
-  void set attributes(Map<String, String> value) {
-    throw new UnsupportedError(
-      "Attributes can't be set for document fragments.");
-  }
-
-  void set classes(Collection<String> value) {
-    throw new UnsupportedError(
-      "Classes can't be set for document fragments.");
-  }
-
-  void set dataAttributes(Map<String, String> value) {
-    throw new UnsupportedError(
-      "Data attributes can't be set for document fragments.");
-  }
-
-  void set contentEditable(String value) {
-    throw new UnsupportedError(
-      "Content editable can't be set for document fragments.");
-  }
-
-  String get dir {
-    throw new UnsupportedError(
-      "Document fragments don't support text direction.");
-  }
-
-  void set dir(String value) {
-    throw new UnsupportedError(
-      "Document fragments don't support text direction.");
-  }
-
-  void set draggable(bool value) {
-    throw new UnsupportedError(
-      "Draggable can't be set for document fragments.");
-  }
-
-  void set hidden(bool value) {
-    throw new UnsupportedError(
-      "Hidden can't be set for document fragments.");
-  }
-
-  void set id(String value) {
-    throw new UnsupportedError(
-      "ID can't be set for document fragments.");
-  }
-
-  String get lang {
-    throw new UnsupportedError(
-      "Document fragments don't support language.");
-  }
-
-  void set lang(String value) {
-    throw new UnsupportedError(
-      "Document fragments don't support language.");
-  }
-
-  void set scrollLeft(int value) {
-    throw new UnsupportedError(
-      "Document fragments don't support scrolling.");
-  }
-
-  void set scrollTop(int value) {
-    throw new UnsupportedError(
-      "Document fragments don't support scrolling.");
-  }
-
-  void set spellcheck(bool value) {
-     throw new UnsupportedError(
-      "Spellcheck can't be set for document fragments.");
-  }
-
-  void set translate(bool value) {
-     throw new UnsupportedError(
-      "Spellcheck can't be set for document fragments.");
-  }
-
-  void set tabIndex(int value) {
-    throw new UnsupportedError(
-      "Tab index can't be set for document fragments.");
-  }
-
-  void set title(String value) {
-    throw new UnsupportedError(
-      "Title can't be set for document fragments.");
-  }
-
-  void set webkitdropzone(String value) {
-    throw new UnsupportedError(
-      "WebKit drop zone can't be set for document fragments.");
-  }
-
-  void set webkitRegionOverflow(String value) {
-    throw new UnsupportedError(
-      "WebKit region overflow can't be set for document fragments.");
-  }
-
-
-  _ElementEventsImpl get on =>
-    new _ElementEventsImpl(this);
-
-  _ElementImpl $dom_querySelector(String selectors) native "querySelector";
-
-  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
-
-}
-// 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 _DocumentImpl extends _NodeImpl implements Document
-    native "*HTMLDocument"
-{
-
-
-  _DocumentEventsImpl get on =>
-    new _DocumentEventsImpl(this);
-
-  final _ElementImpl activeElement;
-
-  _ElementImpl body;
-
-  String charset;
-
-  String cookie;
-
-  Window get window => _convertNativeToDart_Window(this._window);
-  Window get _window => JS("Window", "#.defaultView", this);
-
-  final _ElementImpl documentElement;
-
-  final String domain;
-
-  final _HeadElementImpl head;
-
-  final _DOMImplementationImpl implementation;
-
-  final String lastModified;
-
-  final String preferredStylesheetSet;
-
-  final String readyState;
-
-  final String referrer;
-
-  String selectedStylesheetSet;
-
-  final _StyleSheetListImpl styleSheets;
-
-  String title;
-
-  final _ElementImpl webkitCurrentFullScreenElement;
-
-  final bool webkitFullScreenKeyboardInputAllowed;
-
-  final _ElementImpl webkitFullscreenElement;
-
-  final bool webkitFullscreenEnabled;
-
-  final bool webkitHidden;
-
-  final bool webkitIsFullScreen;
-
-  final _ElementImpl webkitPointerLockElement;
-
-  final String webkitVisibilityState;
-
-  _RangeImpl caretRangeFromPoint(int x, int y) native;
-
-  _CDATASectionImpl createCDATASection(String data) native;
-
-  _DocumentFragmentImpl createDocumentFragment() native;
-
-  _ElementImpl $dom_createElement(String tagName) native "createElement";
-
-  _ElementImpl $dom_createElementNS(String namespaceURI, String qualifiedName) native "createElementNS";
-
-  _EventImpl $dom_createEvent(String eventType) native "createEvent";
-
-  _RangeImpl createRange() native;
-
-  _TextImpl $dom_createTextNode(String data) native "createTextNode";
-
-  _TouchImpl createTouch(_LocalWindowImpl window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) {
-    EventTarget target_1 = _convertDartToNative_EventTarget(target);
-    return _createTouch_1(window, target_1, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
-  }
-  _TouchImpl _createTouch_1(_LocalWindowImpl window, EventTarget target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "createTouch";
-
-  _TouchListImpl $dom_createTouchList() native "createTouchList";
-
-  _ElementImpl elementFromPoint(int x, int y) native;
-
-  bool execCommand(String command, bool userInterface, String value) native;
-
-  _CanvasRenderingContextImpl getCSSCanvasContext(String contextId, String name, int width, int height) native;
-
-  _ElementImpl $dom_getElementById(String elementId) native "getElementById";
-
-  List<Node> $dom_getElementsByClassName(String tagname) native "getElementsByClassName";
-
-  List<Node> $dom_getElementsByName(String elementName) native "getElementsByName";
-
-  List<Node> $dom_getElementsByTagName(String tagname) native "getElementsByTagName";
-
-  bool queryCommandEnabled(String command) native;
-
-  bool queryCommandIndeterm(String command) native;
-
-  bool queryCommandState(String command) native;
-
-  bool queryCommandSupported(String command) native;
-
-  String queryCommandValue(String command) native;
-
-  _ElementImpl $dom_querySelector(String selectors) native "querySelector";
-
-  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
-
-  void webkitCancelFullScreen() native;
-
-  void webkitExitFullscreen() native;
-
-  void webkitExitPointerLock() native;
-
-  // TODO(jacobr): implement all Element methods not on Document.
-
-  _ElementImpl query(String selectors) {
-    // It is fine for our RegExp to detect element id query selectors to have
-    // false negatives but not false positives.
-    if (const RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) {
-      return $dom_getElementById(selectors.substring(1));
-    }
-    return $dom_querySelector(selectors);
-  }
-
-  List<Element> queryAll(String selectors) {
-    if (const RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) {
-      final mutableMatches = $dom_getElementsByName(
-          selectors.substring(7,selectors.length - 2));
-      int len = mutableMatches.length;
-      final copyOfMatches = new List<Element>(len);
-      for (int i = 0; i < len; ++i) {
-        copyOfMatches[i] = mutableMatches[i];
-      }
-      return new _FrozenElementList._wrap(copyOfMatches);
-    } else if (const RegExp("^[*a-zA-Z0-9]+\$").hasMatch(selectors)) {
-      final mutableMatches = $dom_getElementsByTagName(selectors);
-      int len = mutableMatches.length;
-      final copyOfMatches = new List<Element>(len);
-      for (int i = 0; i < len; ++i) {
-        copyOfMatches[i] = mutableMatches[i];
-      }
-      return new _FrozenElementList._wrap(copyOfMatches);
-    } else {
-      return new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
-    }
-  }
-}
-
-class _DocumentEventsImpl extends _ElementEventsImpl implements DocumentEvents {
-  _DocumentEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get beforeCopy => this['beforecopy'];
-
-  EventListenerList get beforeCut => this['beforecut'];
-
-  EventListenerList get beforePaste => this['beforepaste'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get change => this['change'];
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get contextMenu => this['contextmenu'];
-
-  EventListenerList get copy => this['copy'];
-
-  EventListenerList get cut => this['cut'];
-
-  EventListenerList get doubleClick => this['dblclick'];
-
-  EventListenerList get drag => this['drag'];
-
-  EventListenerList get dragEnd => this['dragend'];
-
-  EventListenerList get dragEnter => this['dragenter'];
-
-  EventListenerList get dragLeave => this['dragleave'];
-
-  EventListenerList get dragOver => this['dragover'];
-
-  EventListenerList get dragStart => this['dragstart'];
-
-  EventListenerList get drop => this['drop'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get input => this['input'];
-
-  EventListenerList get invalid => this['invalid'];
-
-  EventListenerList get keyDown => this['keydown'];
-
-  EventListenerList get keyPress => this['keypress'];
-
-  EventListenerList get keyUp => this['keyup'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get mouseDown => this['mousedown'];
-
-  EventListenerList get mouseMove => this['mousemove'];
-
-  EventListenerList get mouseOut => this['mouseout'];
-
-  EventListenerList get mouseOver => this['mouseover'];
-
-  EventListenerList get mouseUp => this['mouseup'];
-
-  EventListenerList get mouseWheel => this['mousewheel'];
-
-  EventListenerList get paste => this['paste'];
-
-  EventListenerList get readyStateChange => this['readystatechange'];
-
-  EventListenerList get reset => this['reset'];
-
-  EventListenerList get scroll => this['scroll'];
-
-  EventListenerList get search => this['search'];
-
-  EventListenerList get select => this['select'];
-
-  EventListenerList get selectionChange => this['selectionchange'];
-
-  EventListenerList get selectStart => this['selectstart'];
-
-  EventListenerList get submit => this['submit'];
-
-  EventListenerList get touchCancel => this['touchcancel'];
-
-  EventListenerList get touchEnd => this['touchend'];
-
-  EventListenerList get touchMove => this['touchmove'];
-
-  EventListenerList get touchStart => this['touchstart'];
-
-  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
-
-  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
-
-  EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
-
-  EventListenerList get pointerLockError => this['webkitpointerlockerror'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DocumentType
-abstract class DocumentType implements Node {
-
-  /** @domName DocumentType.entities */
-  NamedNodeMap get entities;
-
-  /** @domName DocumentType.internalSubset */
-  String get internalSubset;
-
-  /** @domName DocumentType.name */
-  String get name;
-
-  /** @domName DocumentType.notations */
-  NamedNodeMap get notations;
-
-  /** @domName DocumentType.publicId */
-  String get publicId;
-
-  /** @domName DocumentType.systemId */
-  String get systemId;
-
-  /** @domName DocumentType.remove */
-  void remove();
-}
-
-class _DocumentTypeImpl extends _NodeImpl implements DocumentType native "*DocumentType" {
-
-  final _NamedNodeMapImpl entities;
-
-  final String internalSubset;
-
-  final String name;
-
-  final _NamedNodeMapImpl notations;
-
-  final String publicId;
-
-  final String systemId;
-
-  void remove() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName DynamicsCompressorNode
-abstract class DynamicsCompressorNode implements AudioNode {
-
-  /** @domName DynamicsCompressorNode.attack */
-  AudioParam get attack;
-
-  /** @domName DynamicsCompressorNode.knee */
-  AudioParam get knee;
-
-  /** @domName DynamicsCompressorNode.ratio */
-  AudioParam get ratio;
-
-  /** @domName DynamicsCompressorNode.reduction */
-  AudioParam get reduction;
-
-  /** @domName DynamicsCompressorNode.release */
-  AudioParam get release;
-
-  /** @domName DynamicsCompressorNode.threshold */
-  AudioParam get threshold;
-}
-
-class _DynamicsCompressorNodeImpl extends _AudioNodeImpl implements DynamicsCompressorNode native "*DynamicsCompressorNode" {
-
-  final _AudioParamImpl attack;
-
-  final _AudioParamImpl knee;
-
-  final _AudioParamImpl ratio;
-
-  final _AudioParamImpl reduction;
-
-  final _AudioParamImpl release;
-
-  final _AudioParamImpl threshold;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EXTTextureFilterAnisotropic
-abstract class EXTTextureFilterAnisotropic {
-
-  static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
-
-  static const int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
-}
-
-class _EXTTextureFilterAnisotropicImpl implements EXTTextureFilterAnisotropic native "*EXTTextureFilterAnisotropic" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-/**
- * All your element measurement needs in one place
- */
-abstract class ElementRect {
-  // Relative to offsetParent
-  ClientRect get client;
-  ClientRect get offset;
-  ClientRect get scroll;
-  // In global coords
-  ClientRect get bounding;
-  // In global coords
-  List<ClientRect> get clientRects;
-}
-
-abstract class NodeSelector {
-  Element query(String selectors);
-  List<Element> queryAll(String selectors);
-}
-
-abstract class CSSClassSet implements Set<String> {
-  /**
-   * Adds the class [token] to the element if it is not on it, removes it if it
-   * is.
-   */
-  bool toggle(String token);
-
-  /**
-   * Returns [:true:] classes cannot be added or removed from this
-   * [:CSSClassSet:].
-   */
-  bool get frozen;
-}
-
-/// @domName Element
-abstract class Element implements Node, NodeSelector {
-  factory Element.html(String html) =>
-      _ElementFactoryProvider.createElement_html(html);
-  factory Element.tag(String tag) =>
-      _ElementFactoryProvider.createElement_tag(tag);
-
-  AttributeMap get attributes;
-  void set attributes(Map<String, String> value);
-
-  /**
-   * @domName childElementCount, firstElementChild, lastElementChild,
-   *   children, Node.nodes.add
-   */
-  List<Element> get elements;
-
-  void set elements(Collection<Element> value);
-
-  /** @domName className, classList */
-  CSSClassSet get classes;
-
-  void set classes(Collection<String> value);
-
-  AttributeMap get dataAttributes;
-  void set dataAttributes(Map<String, String> value);
-
-  /**
-   * Adds the specified text as a text node after the last child of this.
-   */
-  void addText(String text);
-
-  /**
-   * Parses the specified text as HTML and adds the resulting node after the
-   * last child of this.
-   */
-  void addHTML(String html);
-
-  /**
-   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
-   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
-   * scrollHeight, scrollWidth, scrollTop, scrollLeft
-   */
-  Future<ElementRect> get rect;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> get computedStyle;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement);
-
-  Element clone(bool deep);
-
-  Element get parent;
-
-  /**
-   * Experimental support for [web components][wc]. This field stores a
-   * reference to the component implementation. It was inspired by Mozilla's
-   * [x-tags][] project. Please note: in the future it may be possible to
-   * `extend Element` from your class, in which case this field will be
-   * deprecated and will simply return this [Element] object.
-   *
-   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
-   * [x-tags]: http://x-tags.org/
-   */
-  var xtag;
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ElementEvents get on;
-
-  /** @domName HTMLElement.children */
-  HTMLCollection get $dom_children;
-
-  /** @domName HTMLElement.contentEditable */
-  String contentEditable;
-
-  /** @domName HTMLElement.dir */
-  String dir;
-
-  /** @domName HTMLElement.draggable */
-  bool draggable;
-
-  /** @domName HTMLElement.hidden */
-  bool hidden;
-
-  /** @domName HTMLElement.id */
-  String id;
-
-  /** @domName HTMLElement.innerHTML */
-  String innerHTML;
-
-  /** @domName HTMLElement.isContentEditable */
-  bool get isContentEditable;
-
-  /** @domName HTMLElement.lang */
-  String lang;
-
-  /** @domName HTMLElement.outerHTML */
-  String get outerHTML;
-
-  /** @domName HTMLElement.spellcheck */
-  bool spellcheck;
-
-  /** @domName HTMLElement.tabIndex */
-  int tabIndex;
-
-  /** @domName HTMLElement.title */
-  String title;
-
-  /** @domName HTMLElement.translate */
-  bool translate;
-
-  /** @domName HTMLElement.webkitdropzone */
-  String webkitdropzone;
-
-  /** @domName HTMLElement.click */
-  void click();
-
-  /** @domName HTMLElement.insertAdjacentElement */
-  Element insertAdjacentElement(String where, Element element);
-
-  /** @domName HTMLElement.insertAdjacentHTML */
-  void insertAdjacentHTML(String where, String html);
-
-  /** @domName HTMLElement.insertAdjacentText */
-  void insertAdjacentText(String where, String text);
-
-  static const int ALLOW_KEYBOARD_INPUT = 1;
-
-  /** @domName Element.childElementCount */
-  int get $dom_childElementCount;
-
-  /** @domName Element.className */
-  String $dom_className;
-
-  /** @domName Element.clientHeight */
-  int get clientHeight;
-
-  /** @domName Element.clientLeft */
-  int get clientLeft;
-
-  /** @domName Element.clientTop */
-  int get clientTop;
-
-  /** @domName Element.clientWidth */
-  int get clientWidth;
-
-  /** @domName Element.dataset */
-  Map<String, String> get dataset;
-
-  /** @domName Element.firstElementChild */
-  Element get $dom_firstElementChild;
-
-  /** @domName Element.lastElementChild */
-  Element get $dom_lastElementChild;
-
-  /** @domName Element.nextElementSibling */
-  Element get nextElementSibling;
-
-  /** @domName Element.offsetHeight */
-  int get offsetHeight;
-
-  /** @domName Element.offsetLeft */
-  int get offsetLeft;
-
-  /** @domName Element.offsetParent */
-  Element get offsetParent;
-
-  /** @domName Element.offsetTop */
-  int get offsetTop;
-
-  /** @domName Element.offsetWidth */
-  int get offsetWidth;
-
-  /** @domName Element.previousElementSibling */
-  Element get previousElementSibling;
-
-  /** @domName Element.scrollHeight */
-  int get scrollHeight;
-
-  /** @domName Element.scrollLeft */
-  int scrollLeft;
-
-  /** @domName Element.scrollTop */
-  int scrollTop;
-
-  /** @domName Element.scrollWidth */
-  int get scrollWidth;
-
-  /** @domName Element.style */
-  CSSStyleDeclaration get style;
-
-  /** @domName Element.tagName */
-  String get tagName;
-
-  /** @domName Element.blur */
-  void blur();
-
-  /** @domName Element.focus */
-  void focus();
-
-  /** @domName Element.getAttribute */
-  String $dom_getAttribute(String name);
-
-  /** @domName Element.getBoundingClientRect */
-  ClientRect getBoundingClientRect();
-
-  /** @domName Element.getClientRects */
-  List<ClientRect> getClientRects();
-
-  /** @domName Element.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String name);
-
-  /** @domName Element.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String name);
-
-  /** @domName Element.hasAttribute */
-  bool $dom_hasAttribute(String name);
-
-  /** @domName Element.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName Element.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-  /** @domName Element.remove */
-  void remove();
-
-  /** @domName Element.removeAttribute */
-  void $dom_removeAttribute(String name);
-
-  /** @domName Element.scrollByLines */
-  void scrollByLines(int lines);
-
-  /** @domName Element.scrollByPages */
-  void scrollByPages(int pages);
-
-  /** @domName Element.scrollIntoViewIfNeeded */
-  void scrollIntoView([bool centerIfNeeded]);
-
-  /** @domName Element.setAttribute */
-  void $dom_setAttribute(String name, String value);
-
-  /** @domName Element.webkitMatchesSelector */
-  bool matchesSelector(String selectors);
-
-  /** @domName Element.webkitRequestFullScreen */
-  void webkitRequestFullScreen(int flags);
-
-  /** @domName Element.webkitRequestFullscreen */
-  void webkitRequestFullscreen();
-
-  /** @domName Element.webkitRequestPointerLock */
-  void webkitRequestPointerLock();
-
-}
-
-abstract class ElementEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get reset;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchEnter;
-
-  EventListenerList get touchLeave;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get transitionEnd;
-
-  EventListenerList get fullscreenChange;
-
-  EventListenerList get fullscreenError;
-}
-// 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.
-
-// TODO(jacobr): use _Lists.dart to remove some of the duplicated
-// functionality.
-class _ChildrenElementList implements List {
-  // Raw Element.
-  final _ElementImpl _element;
-  final _HTMLCollectionImpl _childElements;
-
-  _ChildrenElementList._wrap(_ElementImpl element)
-    : _childElements = element.$dom_children,
-      _element = element;
-
-  List<Element> _toList() {
-    final output = new List(_childElements.length);
-    for (int i = 0, len = _childElements.length; i < len; i++) {
-      output[i] = _childElements[i];
-    }
-    return output;
-  }
-
-  bool contains(Element element) => _childElements.contains(element);
-
-  void forEach(void f(Element element)) {
-    for (_ElementImpl element in _childElements) {
-      f(element);
-    }
-  }
-
-  List<Element> filter(bool f(Element element)) {
-    final output = [];
-    forEach((Element element) {
-      if (f(element)) {
-        output.add(element);
-      }
-    });
-    return new _FrozenElementList._wrap(output);
-  }
-
-  bool every(bool f(Element element)) {
-    for (Element element in this) {
-      if (!f(element)) {
-        return false;
-      }
-    };
-    return true;
-  }
-
-  bool some(bool f(Element element)) {
-    for (Element element in this) {
-      if (f(element)) {
-        return true;
-      }
-    };
-    return false;
-  }
-
-  Collection map(f(Element element)) {
-    final out = [];
-    for (Element el in this) {
-      out.add(f(el));
-    }
-    return out;
-  }
-
-  bool get isEmpty {
-    return _element.$dom_firstElementChild == null;
-  }
-
-  int get length {
-    return _childElements.length;
-  }
-
-  _ElementImpl operator [](int index) {
-    return _childElements[index];
-  }
-
-  void operator []=(int index, _ElementImpl value) {
-    _element.$dom_replaceChild(value, _childElements[index]);
-  }
-
-   void set length(int newLength) {
-     // TODO(jacobr): remove children when length is reduced.
-     throw new UnsupportedError('');
-   }
-
-  Element add(_ElementImpl value) {
-    _element.$dom_appendChild(value);
-    return value;
-  }
-
-  Element addLast(_ElementImpl value) => add(value);
-
-  Iterator<Element> iterator() => _toList().iterator();
-
-  void addAll(Collection<Element> collection) {
-    for (_ElementImpl element in collection) {
-      _element.$dom_appendChild(element);
-    }
-  }
-
-  void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw new UnsupportedError('TODO(jacobr): should we impl?');
-  }
-
-  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw const NotImplementedException();
-  }
-
-  void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
-  }
-
-  List getRange(int start, int rangeLength) =>
-    new _FrozenElementList._wrap(_Lists.getRange(this, start, rangeLength,
-        []));
-
-  int indexOf(Element element, [int start = 0]) {
-    return _Lists.indexOf(this, element, start, this.length);
-  }
-
-  int lastIndexOf(Element element, [int start = null]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  void clear() {
-    // It is unclear if we want to keep non element nodes?
-    _element.text = '';
-  }
-
-  Element removeLast() {
-    final result = this.last;
-    if (result != null) {
-      _element.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  Element get last {
-    return _element.$dom_lastElementChild;
-  }
-}
-
-// TODO(jacobr): this is an inefficient implementation but it is hard to see
-// a better option given that we cannot quite force NodeList to be an
-// ElementList as there are valid cases where a NodeList JavaScript object
-// contains Node objects that are not Elements.
-class _FrozenElementList implements List {
-  final List<Node> _nodeList;
-
-  _FrozenElementList._wrap(this._nodeList);
-
-  Element get first {
-    return _nodeList[0];
-  }
-
-  bool contains(Element element) {
-    for (Element el in this) {
-      if (el == element) return true;
-    }
-    return false;
-  }
-
-  void forEach(void f(Element element)) {
-    for (Element el in this) {
-      f(el);
-    }
-  }
-
-  Collection map(f(Element element)) {
-    final out = [];
-    for (Element el in this) {
-      out.add(f(el));
-    }
-    return out;
-  }
-
-  List<Element> filter(bool f(Element element)) {
-    final out = [];
-    for (Element el in this) {
-      if (f(el)) out.add(el);
-    }
-    return out;
-  }
-
-  bool every(bool f(Element element)) {
-    for(Element element in this) {
-      if (!f(element)) {
-        return false;
-      }
-    };
-    return true;
-  }
-
-  bool some(bool f(Element element)) {
-    for(Element element in this) {
-      if (f(element)) {
-        return true;
-      }
-    };
-    return false;
-  }
-
-  bool get isEmpty => _nodeList.isEmpty;
-
-  int get length => _nodeList.length;
-
-  Element operator [](int index) => _nodeList[index];
-
-  void operator []=(int index, Element value) {
-    throw new UnsupportedError('');
-  }
-
-  void set length(int newLength) {
-    _nodeList.length = newLength;
-  }
-
-  void add(Element value) {
-    throw new UnsupportedError('');
-  }
-
-  void addLast(Element value) {
-    throw new UnsupportedError('');
-  }
-
-  Iterator<Element> iterator() => new _FrozenElementListIterator(this);
-
-  void addAll(Collection<Element> collection) {
-    throw new UnsupportedError('');
-  }
-
-  void sort([Comparator<Element> compare = Comparable.compare]) {
-    throw new UnsupportedError('');
-  }
-
-  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw new UnsupportedError('');
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError('');
-  }
-
-  void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw new UnsupportedError('');
-  }
-
-  List<Element> getRange(int start, int rangeLength) =>
-    new _FrozenElementList._wrap(_nodeList.getRange(start, rangeLength));
-
-  int indexOf(Element element, [int start = 0]) =>
-    _nodeList.indexOf(element, start);
-
-  int lastIndexOf(Element element, [int start = null]) =>
-    _nodeList.lastIndexOf(element, start);
-
-  void clear() {
-    throw new UnsupportedError('');
-  }
-
-  Element removeLast() {
-    throw new UnsupportedError('');
-  }
-
-  Element get last => _nodeList.last;
-}
-
-class _FrozenElementListIterator implements Iterator<Element> {
-  final _FrozenElementList _list;
-  int _index = 0;
-
-  _FrozenElementListIterator(this._list);
-
-  /**
-   * Gets the next element in the iteration. Throws a
-   * [StateError("No more elements")] if no element is left.
-   */
-  Element next() {
-    if (!hasNext) {
-      throw new StateError("No more elements");
-    }
-
-    return _list[_index++];
-  }
-
-  /**
-   * Returns whether the [Iterator] has elements left.
-   */
-  bool get hasNext => _index < _list.length;
-}
-
-class _ElementAttributeMap implements AttributeMap {
-
-  final _ElementImpl _element;
-
-  _ElementAttributeMap(this._element);
-
-  bool containsValue(String value) {
-    final attributes = _element.$dom_attributes;
-    for (int i = 0, len = attributes.length; i < len; i++) {
-      if(value == attributes[i].value) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  bool containsKey(String key) {
-    return _element.$dom_hasAttribute(key);
-  }
-
-  String operator [](String key) {
-    return _element.$dom_getAttribute(key);
-  }
-
-  void operator []=(String key, value) {
-    _element.$dom_setAttribute(key, '$value');
-  }
-
-  String putIfAbsent(String key, String ifAbsent()) {
-    if (!containsKey(key)) {
-      this[key] = ifAbsent();
-    }
-    return this[key];
-  }
-
-  String remove(String key) {
-    String value = _element.$dom_getAttribute(key);
-    _element.$dom_removeAttribute(key);
-    return value;
-  }
-
-  void clear() {
-    final attributes = _element.$dom_attributes;
-    for (int i = attributes.length - 1; i >= 0; i--) {
-      remove(attributes[i].name);
-    }
-  }
-
-  void forEach(void f(String key, String value)) {
-    final attributes = _element.$dom_attributes;
-    for (int i = 0, len = attributes.length; i < len; i++) {
-      final item = attributes[i];
-      f(item.name, item.value);
-    }
-  }
-
-  Collection<String> get keys {
-    // TODO(jacobr): generate a lazy collection instead.
-    final attributes = _element.$dom_attributes;
-    final keys = new List<String>(attributes.length);
-    for (int i = 0, len = attributes.length; i < len; i++) {
-      keys[i] = attributes[i].name;
-    }
-    return keys;
-  }
-
-  Collection<String> get values {
-    // TODO(jacobr): generate a lazy collection instead.
-    final attributes = _element.$dom_attributes;
-    final values = new List<String>(attributes.length);
-    for (int i = 0, len = attributes.length; i < len; i++) {
-      values[i] = attributes[i].value;
-    }
-    return values;
-  }
-
-  /**
-   * The number of {key, value} pairs in the map.
-   */
-  int get length {
-    return _element.$dom_attributes.length;
-  }
-
-  /**
-   * Returns true if there is no {key, value} pair in the map.
-   */
-  bool get isEmpty {
-    return length == 0;
-  }
-}
-
-/**
- * Provides a Map abstraction on top of data-* attributes, similar to the
- * dataSet in the old DOM.
- */
-class _DataAttributeMap implements AttributeMap {
-
-  final Map<String, String> $dom_attributes;
-
-  _DataAttributeMap(this.$dom_attributes);
-
-  // interface Map
-
-  // TODO: Use lazy iterator when it is available on Map.
-  bool containsValue(String value) => values.some((v) => v == value);
-
-  bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
-
-  String operator [](String key) => $dom_attributes[_attr(key)];
-
-  void operator []=(String key, value) {
-    $dom_attributes[_attr(key)] = '$value';
-  }
-
-  String putIfAbsent(String key, String ifAbsent()) =>
-    $dom_attributes.putIfAbsent(_attr(key), ifAbsent);
-
-  String remove(String key) => $dom_attributes.remove(_attr(key));
-
-  void clear() {
-    // Needs to operate on a snapshot since we are mutating the collection.
-    for (String key in keys) {
-      remove(key);
-    }
-  }
-
-  void forEach(void f(String key, String value)) {
-    $dom_attributes.forEach((String key, String value) {
-      if (_matches(key)) {
-        f(_strip(key), value);
-      }
-    });
-  }
-
-  Collection<String> get keys {
-    final keys = new List<String>();
-    $dom_attributes.forEach((String key, String value) {
-      if (_matches(key)) {
-        keys.add(_strip(key));
-      }
-    });
-    return keys;
-  }
-
-  Collection<String> get values {
-    final values = new List<String>();
-    $dom_attributes.forEach((String key, String value) {
-      if (_matches(key)) {
-        values.add(value);
-      }
-    });
-    return values;
-  }
-
-  int get length => keys.length;
-
-  // TODO: Use lazy iterator when it is available on Map.
-  bool get isEmpty => length == 0;
-
-  // Helpers.
-  String _attr(String key) => 'data-$key';
-  bool _matches(String key) => key.startsWith('data-');
-  String _strip(String key) => key.substring(5);
-}
-
-class _CssClassSet implements CSSClassSet {
-
-  final _ElementImpl _element;
-
-  _CssClassSet(this._element);
-
-  String toString() => _formatSet(_read());
-
-  // interface Iterable - BEGIN
-  Iterator<String> iterator() => _read().iterator();
-  // interface Iterable - END
-
-  // interface Collection - BEGIN
-  void forEach(void f(String element)) {
-    _read().forEach(f);
-  }
-
-  Collection map(f(String element)) => _read().map(f);
-
-  Collection<String> filter(bool f(String element)) => _read().filter(f);
-
-  bool every(bool f(String element)) => _read().every(f);
-
-  bool some(bool f(String element)) => _read().some(f);
-
-  bool get isEmpty => _read().isEmpty;
-
-  bool get frozen => false;
-
-  int get length =>_read().length;
-
-  // interface Collection - END
-
-  // interface Set - BEGIN
-  bool contains(String value) => _read().contains(value);
-
-  void add(String value) {
-    // TODO - figure out if we need to do any validation here
-    // or if the browser natively does enough
-    _modify((s) => s.add(value));
-  }
-
-  bool remove(String value) {
-    Set<String> s = _read();
-    bool result = s.remove(value);
-    _write(s);
-    return result;
-  }
-
-  bool toggle(String value) {
-    Set<String> s = _read();
-    bool result = false;
-    if (s.contains(value)) {
-      s.remove(value);
-    } else {
-      s.add(value);
-      result = true;
-    }
-    _write(s);
-    return result;
-  }
-
-  void addAll(Collection<String> collection) {
-    // TODO - see comment above about validation
-    _modify((s) => s.addAll(collection));
-  }
-
-  void removeAll(Collection<String> collection) {
-    _modify((s) => s.removeAll(collection));
-  }
-
-  bool isSubsetOf(Collection<String> collection) =>
-    _read().isSubsetOf(collection);
-
-  bool containsAll(Collection<String> collection) =>
-    _read().containsAll(collection);
-
-  Set<String> intersection(Collection<String> other) =>
-    _read().intersection(other);
-
-  void clear() {
-    _modify((s) => s.clear());
-  }
-  // interface Set - END
-
-  /**
-   * Helper method used to modify the set of css classes on this element.
-   *
-   *   f - callback with:
-   *      s - a Set of all the css class name currently on this element.
-   *
-   *   After f returns, the modified set is written to the
-   *       className property of this element.
-   */
-  void _modify( f(Set<String> s)) {
-    Set<String> s = _read();
-    f(s);
-    _write(s);
-  }
-
-  /**
-   * Read the class names from the Element class property,
-   * and put them into a set (duplicates are discarded).
-   */
-  Set<String> _read() {
-    // TODO(mattsh) simplify this once split can take regex.
-    Set<String> s = new Set<String>();
-    for (String name in _classname().split(' ')) {
-      String trimmed = name.trim();
-      if (!trimmed.isEmpty) {
-        s.add(trimmed);
-      }
-    }
-    return s;
-  }
-
-  /**
-   * Read the class names as a space-separated string. This is meant to be
-   * overridden by subclasses.
-   */
-  String _classname() => _element.$dom_className;
-
-  /**
-   * Join all the elements of a set into one string and write
-   * back to the element.
-   */
-  void _write(Set s) {
-    _element.$dom_className = _formatSet(s);
-  }
-
-  String _formatSet(Set<String> s) {
-    // TODO(mattsh) should be able to pass Set to String.joins http:/b/5398605
-    List list = new List.from(s);
-    return Strings.join(list, ' ');
-  }
-}
-
-class _SimpleClientRect implements ClientRect {
-  final num left;
-  final num top;
-  final num width;
-  final num height;
-  num get right => left + width;
-  num get bottom => top + height;
-
-  const _SimpleClientRect(this.left, this.top, this.width, this.height);
-
-  bool operator ==(ClientRect other) {
-    return other != null && left == other.left && top == other.top
-        && width == other.width && height == other.height;
-  }
-
-  String toString() => "($left, $top, $width, $height)";
-}
-
-// TODO(jacobr): we cannot currently be lazy about calculating the client
-// rects as we must perform all measurement queries at a safe point to avoid
-// triggering unneeded layouts.
-/**
- * All your element measurement needs in one place
- * @domName none
- */
-class _ElementRectImpl implements ElementRect {
-  final ClientRect client;
-  final ClientRect offset;
-  final ClientRect scroll;
-
-  // TODO(jacobr): should we move these outside of ElementRect to avoid the
-  // overhead of computing them every time even though they are rarely used.
-  final _ClientRectImpl _boundingClientRect;
-  final _ClientRectListImpl _clientRects;
-
-  _ElementRectImpl(_ElementImpl element) :
-    client = new _SimpleClientRect(element.clientLeft,
-                                  element.clientTop,
-                                  element.clientWidth,
-                                  element.clientHeight),
-    offset = new _SimpleClientRect(element.offsetLeft,
-                                  element.offsetTop,
-                                  element.offsetWidth,
-                                  element.offsetHeight),
-    scroll = new _SimpleClientRect(element.scrollLeft,
-                                  element.scrollTop,
-                                  element.scrollWidth,
-                                  element.scrollHeight),
-    _boundingClientRect = element.getBoundingClientRect(),
-    _clientRects = element.getClientRects();
-
-  _ClientRectImpl get bounding => _boundingClientRect;
-
-  // TODO(jacobr): cleanup.
-  List<ClientRect> get clientRects {
-    final out = new List(_clientRects.length);
-    for (num i = 0; i < _clientRects.length; i++) {
-      out[i] = _clientRects.item(i);
-    }
-    return out;
-  }
-}
-
-class _ElementImpl extends _NodeImpl implements Element native "*Element" {
-
-  /**
-   * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
-   *   Element.removeAttribute
-   */
-  _ElementAttributeMap get attributes => new _ElementAttributeMap(this);
-
-  void set attributes(Map<String, String> value) {
-    Map<String, String> attributes = this.attributes;
-    attributes.clear();
-    for (String key in value.keys) {
-      attributes[key] = value[key];
-    }
-  }
-
-  void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
-  }
-
-  List<Element> get elements => new _ChildrenElementList._wrap(this);
-
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
-
-  List<Element> queryAll(String selectors) =>
-    new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
-
-  _CssClassSet get classes => new _CssClassSet(this);
-
-  void set classes(Collection<String> value) {
-    _CssClassSet classSet = classes;
-    classSet.clear();
-    classSet.addAll(value);
-  }
-
-  Map<String, String> get dataAttributes =>
-    new _DataAttributeMap(attributes);
-
-  void set dataAttributes(Map<String, String> value) {
-    final dataAttributes = this.dataAttributes;
-    dataAttributes.clear();
-    for (String key in value.keys) {
-      dataAttributes[key] = value[key];
-    }
-  }
-
-  Future<ElementRect> get rect {
-    return _createMeasurementFuture(
-        () => new _ElementRectImpl(this),
-        new Completer<ElementRect>());
-  }
-
-  Future<CSSStyleDeclaration> get computedStyle {
-     // TODO(jacobr): last param should be null, see b/5045788
-     return getComputedStyle('');
-  }
-
-  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) {
-    return _createMeasurementFuture(
-        () => _window.$dom_getComputedStyle(this, pseudoElement),
-        new Completer<CSSStyleDeclaration>());
-  }
-
-  void addText(String text) {
-    this.insertAdjacentText('beforeend', text);
-  }
-
-  void addHTML(String text) {
-    this.insertAdjacentHTML('beforeend', text);
-  }
-
-  // Hooks to support custom WebComponents.
-  var xtag;
-
-  // TODO(vsm): Implement noSuchMethod or similar for dart2js.
-
-  /** @domName Element.insertAdjacentText */
-  void insertAdjacentText(String where, String text) {
-    if (JS('bool', '!!#.insertAdjacentText', this)) {
-      _insertAdjacentText(where, text);
-    } else {
-      _insertAdjacentNode(where, new Text(text));
-    }
-  }
-
-  void _insertAdjacentText(String where, String text)
-      native 'insertAdjacentText';
-
-  /** @domName Element.insertAdjacentHTML */
-  void insertAdjacentHTML(String where, String text) {
-    if (JS('bool', '!!#.insertAdjacentHTML', this)) {
-      _insertAdjacentHTML(where, text);
-    } else {
-      _insertAdjacentNode(where, new DocumentFragment.html(text));
-    }
-  }
-
-  void _insertAdjacentHTML(String where, String text)
-      native 'insertAdjacentHTML';
-
-  /** @domName Element.insertAdjacentHTML */
-  Element insertAdjacentElement(String where, Element element) {
-    if (JS('bool', '!!#.insertAdjacentElement', this)) {
-      _insertAdjacentElement(where, element);
-    } else {
-      _insertAdjacentNode(where, element);
-    }
-    return element;
-  }
-
-  void _insertAdjacentElement(String where, Element element)
-      native 'insertAdjacentElement';
-
-  void _insertAdjacentNode(String where, Node node) {
-    switch (where.toLowerCase()) {
-      case 'beforebegin':
-        this.parent.insertBefore(node, this);
-        break;
-      case 'afterbegin':
-        var first = this.nodes.length > 0 ? this.nodes[0] : null;
-        this.insertBefore(node, first);
-        break;
-      case 'beforeend':
-        this.nodes.add(node);
-        break;
-      case 'afterend':
-        this.parent.insertBefore(node, this.nextNode);
-        break;
-      default:
-        throw new ArgumentError("Invalid position ${where}");
-    }
-  }
-
-
-  _ElementEventsImpl get on =>
-    new _ElementEventsImpl(this);
-
-  _HTMLCollectionImpl get $dom_children => JS("_HTMLCollectionImpl", "#.children", this);
-
-  String contentEditable;
-
-  String dir;
-
-  bool draggable;
-
-  bool hidden;
-
-  String id;
-
-  String innerHTML;
-
-  final bool isContentEditable;
-
-  String lang;
-
-  final String outerHTML;
-
-  bool spellcheck;
-
-  int tabIndex;
-
-  String title;
-
-  bool translate;
-
-  String webkitdropzone;
-
-  void click() native;
-
-  int get $dom_childElementCount => JS("int", "#.childElementCount", this);
-
-  String get $dom_className => JS("String", "#.className", this);
-
-  void set $dom_className(String value) {
-    JS("void", "#.className = #", this, value);
-  }
-
-  final int clientHeight;
-
-  final int clientLeft;
-
-  final int clientTop;
-
-  final int clientWidth;
-
-  final Map<String, String> dataset;
-
-  _ElementImpl get $dom_firstElementChild => JS("_ElementImpl", "#.firstElementChild", this);
-
-  _ElementImpl get $dom_lastElementChild => JS("_ElementImpl", "#.lastElementChild", this);
-
-  final _ElementImpl nextElementSibling;
-
-  final int offsetHeight;
-
-  final int offsetLeft;
-
-  final _ElementImpl offsetParent;
-
-  final int offsetTop;
-
-  final int offsetWidth;
-
-  final _ElementImpl previousElementSibling;
-
-  final int scrollHeight;
-
-  int scrollLeft;
-
-  int scrollTop;
-
-  final int scrollWidth;
-
-  final _CSSStyleDeclarationImpl style;
-
-  final String tagName;
-
-  void blur() native;
-
-  void focus() native;
-
-  String $dom_getAttribute(String name) native "getAttribute";
-
-  _ClientRectImpl getBoundingClientRect() native;
-
-  _ClientRectListImpl getClientRects() native;
-
-  List<Node> $dom_getElementsByClassName(String name) native "getElementsByClassName";
-
-  List<Node> $dom_getElementsByTagName(String name) native "getElementsByTagName";
-
-  bool $dom_hasAttribute(String name) native "hasAttribute";
-
-  _ElementImpl $dom_querySelector(String selectors) native "querySelector";
-
-  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
-
-  void $dom_removeAttribute(String name) native "removeAttribute";
-
-  void scrollByLines(int lines) native;
-
-  void scrollByPages(int pages) native;
-
-  void scrollIntoView([bool centerIfNeeded]) native "scrollIntoViewIfNeeded";
-
-  void $dom_setAttribute(String name, String value) native "setAttribute";
-
-  bool matchesSelector(String selectors) native "webkitMatchesSelector";
-
-  void webkitRequestFullScreen(int flags) native;
-
-  void webkitRequestFullscreen() native;
-
-  void webkitRequestPointerLock() native;
-
-}
-
-// Temporary dispatch hook to support WebComponents.
-Function dynamicUnknownElementDispatcher;
-
-final _START_TAG_REGEXP = const RegExp('<(\\w+)');
-class _ElementFactoryProvider {
-  static final _CUSTOM_PARENT_TAG_MAP = const {
-    'body' : 'html',
-    'head' : 'html',
-    'caption' : 'table',
-    'td': 'tr',
-    'colgroup': 'table',
-    'col' : 'colgroup',
-    'tr' : 'tbody',
-    'tbody' : 'table',
-    'tfoot' : 'table',
-    'thead' : 'table',
-    'track' : 'audio',
-  };
-
-  /** @domName Document.createElement */
-  static Element createElement_html(String html) {
-    // TODO(jacobr): this method can be made more robust and performant.
-    // 1) Cache the dummy parent elements required to use innerHTML rather than
-    //    creating them every call.
-    // 2) Verify that the html does not contain leading or trailing text nodes.
-    // 3) Verify that the html does not contain both <head> and <body> tags.
-    // 4) Detatch the created element from its dummy parent.
-    String parentTag = 'div';
-    String tag;
-    final match = _START_TAG_REGEXP.firstMatch(html);
-    if (match != null) {
-      tag = match.group(1).toLowerCase();
-      if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
-        parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
-      }
-    }
-    final _ElementImpl temp = new Element.tag(parentTag);
-    temp.innerHTML = html;
-
-    Element element;
-    if (temp.elements.length == 1) {
-      element = temp.elements[0];
-    } else if (parentTag == 'html' && temp.elements.length == 2) {
-      // Work around for edge case in WebKit and possibly other browsers where
-      // both body and head elements are created even though the inner html
-      // only contains a head or body element.
-      element = temp.elements[tag == 'head' ? 0 : 1];
-    } else {
-      throw new ArgumentError('HTML had ${temp.elements.length} '
-          'top level elements but 1 expected');
-    }
-    element.remove();
-    return element;
-  }
-
-  /** @domName Document.createElement */
-  // Optimization to improve performance until the dart2js compiler inlines this
-  // method.
-  static Element createElement_tag(String tag) =>
-      JS('Element', 'document.createElement(#)', tag);
-}
-// 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 _ElementEventsImpl extends _EventsImpl implements ElementEvents {
-  _ElementEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get beforeCopy => this['beforecopy'];
-
-  EventListenerList get beforeCut => this['beforecut'];
-
-  EventListenerList get beforePaste => this['beforepaste'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get change => this['change'];
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get contextMenu => this['contextmenu'];
-
-  EventListenerList get copy => this['copy'];
-
-  EventListenerList get cut => this['cut'];
-
-  EventListenerList get doubleClick => this['dblclick'];
-
-  EventListenerList get drag => this['drag'];
-
-  EventListenerList get dragEnd => this['dragend'];
-
-  EventListenerList get dragEnter => this['dragenter'];
-
-  EventListenerList get dragLeave => this['dragleave'];
-
-  EventListenerList get dragOver => this['dragover'];
-
-  EventListenerList get dragStart => this['dragstart'];
-
-  EventListenerList get drop => this['drop'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get input => this['input'];
-
-  EventListenerList get invalid => this['invalid'];
-
-  EventListenerList get keyDown => this['keydown'];
-
-  EventListenerList get keyPress => this['keypress'];
-
-  EventListenerList get keyUp => this['keyup'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get mouseDown => this['mousedown'];
-
-  EventListenerList get mouseMove => this['mousemove'];
-
-  EventListenerList get mouseOut => this['mouseout'];
-
-  EventListenerList get mouseOver => this['mouseover'];
-
-  EventListenerList get mouseUp => this['mouseup'];
-
-  EventListenerList get paste => this['paste'];
-
-  EventListenerList get reset => this['reset'];
-
-  EventListenerList get scroll => this['scroll'];
-
-  EventListenerList get search => this['search'];
-
-  EventListenerList get select => this['select'];
-
-  EventListenerList get selectStart => this['selectstart'];
-
-  EventListenerList get submit => this['submit'];
-
-  EventListenerList get touchCancel => this['touchcancel'];
-
-  EventListenerList get touchEnd => this['touchend'];
-
-  EventListenerList get touchEnter => this['touchenter'];
-
-  EventListenerList get touchLeave => this['touchleave'];
-
-  EventListenerList get touchMove => this['touchmove'];
-
-  EventListenerList get touchStart => this['touchstart'];
-
-  EventListenerList get transitionEnd => this['webkitTransitionEnd'];
-
-  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
-
-  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
-
-  EventListenerList get mouseWheel {
-    if (JS('bool', '#.onwheel !== undefined', _ptr)) {
-      // W3C spec, and should be IE9+, but IE has a bug exposing onwheel.
-      return this['wheel'];
-    } else if (JS('bool', '#.onmousewheel !== undefined', _ptr)) {
-      // Chrome & IE
-      return this['mousewheel'];
-    } else {
-      // Firefox
-      return this['DOMMouseScroll'];
-    }
-  }
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ElementTimeControl
-abstract class ElementTimeControl {
-
-  /** @domName ElementTimeControl.beginElement */
-  void beginElement();
-
-  /** @domName ElementTimeControl.beginElementAt */
-  void beginElementAt(num offset);
-
-  /** @domName ElementTimeControl.endElement */
-  void endElement();
-
-  /** @domName ElementTimeControl.endElementAt */
-  void endElementAt(num offset);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ElementTraversal
-abstract class ElementTraversal {
-
-  /** @domName ElementTraversal.childElementCount */
-  int get childElementCount;
-
-  /** @domName ElementTraversal.firstElementChild */
-  Element get firstElementChild;
-
-  /** @domName ElementTraversal.lastElementChild */
-  Element get lastElementChild;
-
-  /** @domName ElementTraversal.nextElementSibling */
-  Element get nextElementSibling;
-
-  /** @domName ElementTraversal.previousElementSibling */
-  Element get previousElementSibling;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLEmbedElement
-abstract class EmbedElement implements Element {
-
-  factory EmbedElement() => _Elements.createEmbedElement();
-
-  /** @domName HTMLEmbedElement.align */
-  String align;
-
-  /** @domName HTMLEmbedElement.height */
-  String height;
-
-  /** @domName HTMLEmbedElement.name */
-  String name;
-
-  /** @domName HTMLEmbedElement.src */
-  String src;
-
-  /** @domName HTMLEmbedElement.type */
-  String type;
-
-  /** @domName HTMLEmbedElement.width */
-  String width;
-}
-
-class _EmbedElementImpl extends _ElementImpl implements EmbedElement native "*HTMLEmbedElement" {
-
-  String align;
-
-  String height;
-
-  String name;
-
-  String src;
-
-  String type;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EntityReference
-abstract class EntityReference implements Node {
-}
-
-class _EntityReferenceImpl extends _NodeImpl implements EntityReference native "*EntityReference" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void EntriesCallback(List<Entry> entries);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Entry
-abstract class Entry {
-
-  /** @domName Entry.filesystem */
-  DOMFileSystem get filesystem;
-
-  /** @domName Entry.fullPath */
-  String get fullPath;
-
-  /** @domName Entry.isDirectory */
-  bool get isDirectory;
-
-  /** @domName Entry.isFile */
-  bool get isFile;
-
-  /** @domName Entry.name */
-  String get name;
-
-  /** @domName Entry.copyTo */
-  void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
-
-  /** @domName Entry.getMetadata */
-  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName Entry.getParent */
-  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]);
-
-  /** @domName Entry.moveTo */
-  void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
-
-  /** @domName Entry.remove */
-  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName Entry.toURL */
-  String toURL();
-}
-
-class _EntryArrayImpl implements List<Entry>, JavaScriptIndexingBehavior native "*EntryArray" {
-
-  final int length;
-
-  _EntryImpl operator[](int index) => JS("_EntryImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _EntryImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Entry> mixins.
-  // Entry is the element type.
-
-  // From Iterable<Entry>:
-
-  Iterator<Entry> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Entry>(this);
-  }
-
-  // From Collection<Entry>:
-
-  void add(Entry value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Entry value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Entry> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Entry element) => _Collections.contains(this, element);
-
-  void forEach(void f(Entry element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Entry element)) => _Collections.map(this, [], f);
-
-  Collection<Entry> filter(bool f(Entry element)) =>
-     _Collections.filter(this, <Entry>[], f);
-
-  bool every(bool f(Entry element)) => _Collections.every(this, f);
-
-  bool some(bool f(Entry element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Entry>:
-
-  void sort([Comparator<Entry> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Entry element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Entry element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Entry get last => this[length - 1];
-
-  Entry removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Entry initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Entry> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Entry>[]);
-
-  // -- end List<Entry> mixins.
-
-  _EntryImpl item(int index) native;
-}
-
-class _EntryArraySyncImpl implements List<EntrySync>, JavaScriptIndexingBehavior native "*EntryArraySync" {
-
-  final int length;
-
-  _EntrySyncImpl operator[](int index) => JS("_EntrySyncImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _EntrySyncImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<EntrySync> mixins.
-  // EntrySync is the element type.
-
-  // From Iterable<EntrySync>:
-
-  Iterator<EntrySync> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<EntrySync>(this);
-  }
-
-  // From Collection<EntrySync>:
-
-  void add(EntrySync value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(EntrySync value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<EntrySync> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(EntrySync element) => _Collections.contains(this, element);
-
-  void forEach(void f(EntrySync element)) => _Collections.forEach(this, f);
-
-  Collection map(f(EntrySync element)) => _Collections.map(this, [], f);
-
-  Collection<EntrySync> filter(bool f(EntrySync element)) =>
-     _Collections.filter(this, <EntrySync>[], f);
-
-  bool every(bool f(EntrySync element)) => _Collections.every(this, f);
-
-  bool some(bool f(EntrySync element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<EntrySync>:
-
-  void sort([Comparator<EntrySync> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(EntrySync element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(EntrySync element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  EntrySync get last => this[length - 1];
-
-  EntrySync removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<EntrySync> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <EntrySync>[]);
-
-  // -- end List<EntrySync> mixins.
-
-  _EntrySyncImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void EntryCallback(Entry entry);
-
-class _EntryImpl implements Entry native "*Entry" {
-
-  final _DOMFileSystemImpl filesystem;
-
-  final String fullPath;
-
-  final bool isDirectory;
-
-  final bool isFile;
-
-  final String name;
-
-  void copyTo(_DirectoryEntryImpl parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
-
-  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native;
-
-  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native;
-
-  void moveTo(_DirectoryEntryImpl parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
-
-  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
-
-  String toURL() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EntrySync
-abstract class EntrySync {
-
-  /** @domName EntrySync.filesystem */
-  DOMFileSystemSync get filesystem;
-
-  /** @domName EntrySync.fullPath */
-  String get fullPath;
-
-  /** @domName EntrySync.isDirectory */
-  bool get isDirectory;
-
-  /** @domName EntrySync.isFile */
-  bool get isFile;
-
-  /** @domName EntrySync.name */
-  String get name;
-
-  /** @domName EntrySync.copyTo */
-  EntrySync copyTo(DirectoryEntrySync parent, String name);
-
-  /** @domName EntrySync.getMetadata */
-  Metadata getMetadata();
-
-  /** @domName EntrySync.getParent */
-  EntrySync getParent();
-
-  /** @domName EntrySync.moveTo */
-  EntrySync moveTo(DirectoryEntrySync parent, String name);
-
-  /** @domName EntrySync.remove */
-  void remove();
-
-  /** @domName EntrySync.toURL */
-  String toURL();
-}
-
-class _EntrySyncImpl implements EntrySync native "*EntrySync" {
-
-  final _DOMFileSystemSyncImpl filesystem;
-
-  final String fullPath;
-
-  final bool isDirectory;
-
-  final bool isFile;
-
-  final String name;
-
-  _EntrySyncImpl copyTo(_DirectoryEntrySyncImpl parent, String name) native;
-
-  _MetadataImpl getMetadata() native;
-
-  _EntrySyncImpl getParent() native;
-
-  _EntrySyncImpl moveTo(_DirectoryEntrySyncImpl parent, String name) native;
-
-  void remove() native;
-
-  String toURL() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void ErrorCallback(FileError error);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ErrorEvent
-abstract class ErrorEvent implements Event {
-
-  /** @domName ErrorEvent.filename */
-  String get filename;
-
-  /** @domName ErrorEvent.lineno */
-  int get lineno;
-
-  /** @domName ErrorEvent.message */
-  String get message;
-}
-
-class _ErrorEventImpl extends _EventImpl implements ErrorEvent native "*ErrorEvent" {
-
-  final String filename;
-
-  final int lineno;
-
-  final String message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Event
-abstract class Event {
-
-  // In JS, canBubble and cancelable are technically required parameters to
-  // init*Event. In practice, though, if they aren't provided they simply
-  // default to false (since that's Boolean(undefined)).
-  //
-  // Contrary to JS, we default canBubble and cancelable to true, since that's
-  // what people want most of the time anyway.
-  factory Event(String type, [bool canBubble = true, bool cancelable = true]) =>
-      _EventFactoryProvider.createEvent(type, canBubble, cancelable);
-
-  static const int AT_TARGET = 2;
-
-  static const int BLUR = 8192;
-
-  static const int BUBBLING_PHASE = 3;
-
-  static const int CAPTURING_PHASE = 1;
-
-  static const int CHANGE = 32768;
-
-  static const int CLICK = 64;
-
-  static const int DBLCLICK = 128;
-
-  static const int DRAGDROP = 2048;
-
-  static const int FOCUS = 4096;
-
-  static const int KEYDOWN = 256;
-
-  static const int KEYPRESS = 1024;
-
-  static const int KEYUP = 512;
-
-  static const int MOUSEDOWN = 1;
-
-  static const int MOUSEDRAG = 32;
-
-  static const int MOUSEMOVE = 16;
-
-  static const int MOUSEOUT = 8;
-
-  static const int MOUSEOVER = 4;
-
-  static const int MOUSEUP = 2;
-
-  static const int NONE = 0;
-
-  static const int SELECT = 16384;
-
-  /** @domName Event.bubbles */
-  bool get bubbles;
-
-  /** @domName Event.cancelBubble */
-  bool cancelBubble;
-
-  /** @domName Event.cancelable */
-  bool get cancelable;
-
-  /** @domName Event.clipboardData */
-  Clipboard get clipboardData;
-
-  /** @domName Event.currentTarget */
-  EventTarget get currentTarget;
-
-  /** @domName Event.defaultPrevented */
-  bool get defaultPrevented;
-
-  /** @domName Event.eventPhase */
-  int get eventPhase;
-
-  /** @domName Event.returnValue */
-  bool returnValue;
-
-  /** @domName Event.srcElement */
-  EventTarget get srcElement;
-
-  /** @domName Event.target */
-  EventTarget get target;
-
-  /** @domName Event.timeStamp */
-  int get timeStamp;
-
-  /** @domName Event.type */
-  String get type;
-
-  /** @domName Event.initEvent */
-  void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
-
-  /** @domName Event.preventDefault */
-  void preventDefault();
-
-  /** @domName Event.stopImmediatePropagation */
-  void stopImmediatePropagation();
-
-  /** @domName Event.stopPropagation */
-  void stopPropagation();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EventException
-abstract class EventException {
-
-  static const int DISPATCH_REQUEST_ERR = 1;
-
-  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
-
-  /** @domName EventException.code */
-  int get code;
-
-  /** @domName EventException.message */
-  String get message;
-
-  /** @domName EventException.name */
-  String get name;
-
-  /** @domName EventException.toString */
-  String toString();
-}
-
-class _EventExceptionImpl implements EventException native "*EventException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-
-class _EventImpl implements Event native "*Event" {
-
-  final bool bubbles;
-
-  bool cancelBubble;
-
-  final bool cancelable;
-
-  final _ClipboardImpl clipboardData;
-
-  EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
-  EventTarget get _currentTarget => JS("EventTarget", "#.currentTarget", this);
-
-  final bool defaultPrevented;
-
-  final int eventPhase;
-
-  bool returnValue;
-
-  EventTarget get srcElement => _convertNativeToDart_EventTarget(this._srcElement);
-  EventTarget get _srcElement => JS("EventTarget", "#.srcElement", this);
-
-  EventTarget get target => _convertNativeToDart_EventTarget(this._target);
-  EventTarget get _target => JS("EventTarget", "#.target", this);
-
-  final int timeStamp;
-
-  final String type;
-
-  void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "initEvent";
-
-  void preventDefault() native;
-
-  void stopImmediatePropagation() native;
-
-  void stopPropagation() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EventSource
-abstract class EventSource implements EventTarget {
-
-  factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  EventSourceEvents get on;
-
-  static const int CLOSED = 2;
-
-  static const int CONNECTING = 0;
-
-  static const int OPEN = 1;
-
-  /** @domName EventSource.URL */
-  String get URL;
-
-  /** @domName EventSource.readyState */
-  int get readyState;
-
-  /** @domName EventSource.url */
-  String get url;
-
-  /** @domName EventSource.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName EventSource.close */
-  void close();
-
-  /** @domName EventSource.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName EventSource.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class EventSourceEvents implements Events {
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
-
-class _EventSourceImpl extends _EventTargetImpl implements EventSource native "*EventSource" {
-
-  _EventSourceEventsImpl get on =>
-    new _EventSourceEventsImpl(this);
-
-  final String URL;
-
-  final int readyState;
-
-  final String url;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void close() native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _EventSourceEventsImpl extends _EventsImpl implements EventSourceEvents {
-  _EventSourceEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get open => this['open'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-abstract class EventListenerList {
-  EventListenerList add(EventListener handler, [bool useCapture]);
-
-  EventListenerList remove(EventListener handler, [bool useCapture]);
-
-  bool dispatch(Event evt);
-}
-
-abstract class Events {
-  EventListenerList operator [](String type);
-}
-
-/// @domName EventTarget
-abstract class EventTarget {
-
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
-  abstract Events get on;
-
-  /** @domName EventTarget.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName EventTarget.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName EventTarget.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-}
-// 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 _ptr;
-
-  _EventsImpl(this._ptr);
-
-  _EventListenerListImpl operator [](String type) {
-    return new _EventListenerListImpl(_ptr, type);
-  }
-}
-
-class _EventListenerListImpl implements EventListenerList {
-
-  // TODO(jacobr): make this _EventTargetImpl
-  final _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) {
-    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 _EventTargetImpl implements EventTarget native "*EventTarget" {
-
-  Events get on => new _EventsImpl(this);
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLFieldSetElement
-abstract class FieldSetElement implements Element {
-
-  factory FieldSetElement() => _Elements.createFieldSetElement();
-
-  /** @domName HTMLFieldSetElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLFieldSetElement.elements */
-  HTMLCollection get elements;
-
-  /** @domName HTMLFieldSetElement.form */
-  FormElement get form;
-
-  /** @domName HTMLFieldSetElement.name */
-  String name;
-
-  /** @domName HTMLFieldSetElement.type */
-  String get type;
-
-  /** @domName HTMLFieldSetElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLFieldSetElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLFieldSetElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLFieldSetElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLFieldSetElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-
-class _FieldSetElementImpl extends _ElementImpl implements FieldSetElement native "*HTMLFieldSetElement" {
-
-  bool disabled;
-
-  final _HTMLCollectionImpl elements;
-
-  final _FormElementImpl form;
-
-  String name;
-
-  final String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName File
-abstract class File implements Blob {
-
-  /** @domName File.lastModifiedDate */
-  Date get lastModifiedDate;
-
-  /** @domName File.name */
-  String get name;
-
-  /** @domName File.webkitRelativePath */
-  String get webkitRelativePath;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void FileCallback(File file);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileEntry
-abstract class FileEntry implements Entry {
-
-  /** @domName FileEntry.createWriter */
-  void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName FileEntry.file */
-  void file(FileCallback successCallback, [ErrorCallback errorCallback]);
-}
-
-class _FileEntryImpl extends _EntryImpl implements FileEntry native "*FileEntry" {
-
-  void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native;
-
-  void file(FileCallback successCallback, [ErrorCallback errorCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileEntrySync
-abstract class FileEntrySync implements EntrySync {
-
-  /** @domName FileEntrySync.createWriter */
-  FileWriterSync createWriter();
-
-  /** @domName FileEntrySync.file */
-  File file();
-}
-
-class _FileEntrySyncImpl extends _EntrySyncImpl implements FileEntrySync native "*FileEntrySync" {
-
-  _FileWriterSyncImpl createWriter() native;
-
-  _FileImpl file() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileError
-abstract class FileError {
-
-  static const int ABORT_ERR = 3;
-
-  static const int ENCODING_ERR = 5;
-
-  static const int INVALID_MODIFICATION_ERR = 9;
-
-  static const int INVALID_STATE_ERR = 7;
-
-  static const int NOT_FOUND_ERR = 1;
-
-  static const int NOT_READABLE_ERR = 4;
-
-  static const int NO_MODIFICATION_ALLOWED_ERR = 6;
-
-  static const int PATH_EXISTS_ERR = 12;
-
-  static const int QUOTA_EXCEEDED_ERR = 10;
-
-  static const int SECURITY_ERR = 2;
-
-  static const int SYNTAX_ERR = 8;
-
-  static const int TYPE_MISMATCH_ERR = 11;
-
-  /** @domName FileError.code */
-  int get code;
-}
-
-class _FileErrorImpl implements FileError native "*FileError" {
-
-  final int code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileException
-abstract class FileException {
-
-  static const int ABORT_ERR = 3;
-
-  static const int ENCODING_ERR = 5;
-
-  static const int INVALID_MODIFICATION_ERR = 9;
-
-  static const int INVALID_STATE_ERR = 7;
-
-  static const int NOT_FOUND_ERR = 1;
-
-  static const int NOT_READABLE_ERR = 4;
-
-  static const int NO_MODIFICATION_ALLOWED_ERR = 6;
-
-  static const int PATH_EXISTS_ERR = 12;
-
-  static const int QUOTA_EXCEEDED_ERR = 10;
-
-  static const int SECURITY_ERR = 2;
-
-  static const int SYNTAX_ERR = 8;
-
-  static const int TYPE_MISMATCH_ERR = 11;
-
-  /** @domName FileException.code */
-  int get code;
-
-  /** @domName FileException.message */
-  String get message;
-
-  /** @domName FileException.name */
-  String get name;
-
-  /** @domName FileException.toString */
-  String toString();
-}
-
-class _FileExceptionImpl implements FileException native "*FileException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-
-class _FileImpl extends _BlobImpl implements File native "*File" {
-
-  final Date lastModifiedDate;
-
-  final String name;
-
-  final String webkitRelativePath;
-}
-
-class _FileListImpl implements List<File>, JavaScriptIndexingBehavior native "*FileList" {
-
-  final int length;
-
-  _FileImpl operator[](int index) => JS("_FileImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _FileImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<File> mixins.
-  // File is the element type.
-
-  // From Iterable<File>:
-
-  Iterator<File> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<File>(this);
-  }
-
-  // From Collection<File>:
-
-  void add(File value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(File value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<File> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(File element) => _Collections.contains(this, element);
-
-  void forEach(void f(File element)) => _Collections.forEach(this, f);
-
-  Collection map(f(File element)) => _Collections.map(this, [], f);
-
-  Collection<File> filter(bool f(File element)) =>
-     _Collections.filter(this, <File>[], f);
-
-  bool every(bool f(File element)) => _Collections.every(this, f);
-
-  bool some(bool f(File element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<File>:
-
-  void sort([Comparator<File> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(File element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(File element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  File get last => this[length - 1];
-
-  File removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [File initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<File> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <File>[]);
-
-  // -- end List<File> mixins.
-
-  _FileImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileReader
-abstract class FileReader implements EventTarget {
-
-  factory FileReader() => _FileReaderFactoryProvider.createFileReader();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  FileReaderEvents get on;
-
-  static const int DONE = 2;
-
-  static const int EMPTY = 0;
-
-  static const int LOADING = 1;
-
-  /** @domName FileReader.error */
-  FileError get error;
-
-  /** @domName FileReader.readyState */
-  int get readyState;
-
-  /** @domName FileReader.result */
-  Object get result;
-
-  /** @domName FileReader.abort */
-  void abort();
-
-  /** @domName FileReader.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileReader.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName FileReader.readAsArrayBuffer */
-  void readAsArrayBuffer(Blob blob);
-
-  /** @domName FileReader.readAsBinaryString */
-  void readAsBinaryString(Blob blob);
-
-  /** @domName FileReader.readAsDataURL */
-  void readAsDataURL(Blob blob);
-
-  /** @domName FileReader.readAsText */
-  void readAsText(Blob blob, [String encoding]);
-
-  /** @domName FileReader.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class FileReaderEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-}
-
-class _FileReaderImpl extends _EventTargetImpl implements FileReader native "*FileReader" {
-
-  _FileReaderEventsImpl get on =>
-    new _FileReaderEventsImpl(this);
-
-  final _FileErrorImpl error;
-
-  final int readyState;
-
-  final Object result;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void readAsArrayBuffer(_BlobImpl blob) native;
-
-  void readAsBinaryString(_BlobImpl blob) native;
-
-  void readAsDataURL(_BlobImpl blob) native;
-
-  void readAsText(_BlobImpl blob, [String encoding]) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _FileReaderEventsImpl extends _EventsImpl implements FileReaderEvents {
-  _FileReaderEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get loadEnd => this['loadend'];
-
-  EventListenerList get loadStart => this['loadstart'];
-
-  EventListenerList get progress => this['progress'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileReaderSync
-abstract class FileReaderSync {
-
-  factory FileReaderSync() => _FileReaderSyncFactoryProvider.createFileReaderSync();
-
-  /** @domName FileReaderSync.readAsArrayBuffer */
-  ArrayBuffer readAsArrayBuffer(Blob blob);
-
-  /** @domName FileReaderSync.readAsBinaryString */
-  String readAsBinaryString(Blob blob);
-
-  /** @domName FileReaderSync.readAsDataURL */
-  String readAsDataURL(Blob blob);
-
-  /** @domName FileReaderSync.readAsText */
-  String readAsText(Blob blob, [String encoding]);
-}
-
-class _FileReaderSyncImpl implements FileReaderSync native "*FileReaderSync" {
-
-  _ArrayBufferImpl readAsArrayBuffer(_BlobImpl blob) native;
-
-  String readAsBinaryString(_BlobImpl blob) native;
-
-  String readAsDataURL(_BlobImpl blob) native;
-
-  String readAsText(_BlobImpl blob, [String encoding]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void FileSystemCallback(DOMFileSystem fileSystem);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileWriter
-abstract class FileWriter implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  FileWriterEvents get on;
-
-  static const int DONE = 2;
-
-  static const int INIT = 0;
-
-  static const int WRITING = 1;
-
-  /** @domName FileWriter.error */
-  FileError get error;
-
-  /** @domName FileWriter.length */
-  int get length;
-
-  /** @domName FileWriter.position */
-  int get position;
-
-  /** @domName FileWriter.readyState */
-  int get readyState;
-
-  /** @domName FileWriter.abort */
-  void abort();
-
-  /** @domName FileWriter.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileWriter.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName FileWriter.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileWriter.seek */
-  void seek(int position);
-
-  /** @domName FileWriter.truncate */
-  void truncate(int size);
-
-  /** @domName FileWriter.write */
-  void write(Blob data);
-}
-
-abstract class FileWriterEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get progress;
-
-  EventListenerList get write;
-
-  EventListenerList get writeEnd;
-
-  EventListenerList get writeStart;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void FileWriterCallback(FileWriter fileWriter);
-
-class _FileWriterImpl extends _EventTargetImpl implements FileWriter native "*FileWriter" {
-
-  _FileWriterEventsImpl get on =>
-    new _FileWriterEventsImpl(this);
-
-  final _FileErrorImpl error;
-
-  final int length;
-
-  final int position;
-
-  final int readyState;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void seek(int position) native;
-
-  void truncate(int size) native;
-
-  void write(_BlobImpl data) native;
-}
-
-class _FileWriterEventsImpl extends _EventsImpl implements FileWriterEvents {
-  _FileWriterEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get progress => this['progress'];
-
-  EventListenerList get write => this['write'];
-
-  EventListenerList get writeEnd => this['writeend'];
-
-  EventListenerList get writeStart => this['writestart'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FileWriterSync
-abstract class FileWriterSync {
-
-  /** @domName FileWriterSync.length */
-  int get length;
-
-  /** @domName FileWriterSync.position */
-  int get position;
-
-  /** @domName FileWriterSync.seek */
-  void seek(int position);
-
-  /** @domName FileWriterSync.truncate */
-  void truncate(int size);
-
-  /** @domName FileWriterSync.write */
-  void write(Blob data);
-}
-
-class _FileWriterSyncImpl implements FileWriterSync native "*FileWriterSync" {
-
-  final int length;
-
-  final int position;
-
-  void seek(int position) native;
-
-  void truncate(int size) native;
-
-  void write(_BlobImpl data) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Float32Array
-abstract class Float32Array implements ArrayBufferView, List<num> {
-
-  factory Float32Array(int length) =>
-    _TypedArrayFactoryProvider.createFloat32Array(length);
-
-  factory Float32Array.fromList(List<num> list) =>
-    _TypedArrayFactoryProvider.createFloat32Array_fromList(list);
-
-  factory Float32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createFloat32Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 4;
-
-  /** @domName Float32Array.length */
-  int get length;
-
-  /** @domName Float32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Float32Array.subarray */
-  Float32Array subarray(int start, [int end]);
-}
-
-class _Float32ArrayImpl extends _ArrayBufferViewImpl implements Float32Array, List<num>, JavaScriptIndexingBehavior native "*Float32Array" {
-
-  final int length;
-
-  num operator[](int index) => JS("num", "#[#]", this, index);
-
-  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<num> mixins.
-  // num is the element type.
-
-  // From Iterable<num>:
-
-  Iterator<num> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<num>(this);
-  }
-
-  // From Collection<num>:
-
-  void add(num value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(num value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<num> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(num element) => _Collections.contains(this, element);
-
-  void forEach(void f(num element)) => _Collections.forEach(this, f);
-
-  Collection map(f(num element)) => _Collections.map(this, [], f);
-
-  Collection<num> filter(bool f(num element)) =>
-     _Collections.filter(this, <num>[], f);
-
-  bool every(bool f(num element)) => _Collections.every(this, f);
-
-  bool some(bool f(num element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<num>:
-
-  void sort([Comparator<num> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(num element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(num element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  num get last => this[length - 1];
-
-  num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<num> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <num>[]);
-
-  // -- end List<num> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Float32ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Float64Array
-abstract class Float64Array implements ArrayBufferView, List<num> {
-
-  factory Float64Array(int length) =>
-    _TypedArrayFactoryProvider.createFloat64Array(length);
-
-  factory Float64Array.fromList(List<num> list) =>
-    _TypedArrayFactoryProvider.createFloat64Array_fromList(list);
-
-  factory Float64Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createFloat64Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 8;
-
-  /** @domName Float64Array.length */
-  int get length;
-
-  /** @domName Float64Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Float64Array.subarray */
-  Float64Array subarray(int start, [int end]);
-}
-
-class _Float64ArrayImpl extends _ArrayBufferViewImpl implements Float64Array, List<num>, JavaScriptIndexingBehavior native "*Float64Array" {
-
-  final int length;
-
-  num operator[](int index) => JS("num", "#[#]", this, index);
-
-  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<num> mixins.
-  // num is the element type.
-
-  // From Iterable<num>:
-
-  Iterator<num> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<num>(this);
-  }
-
-  // From Collection<num>:
-
-  void add(num value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(num value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<num> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(num element) => _Collections.contains(this, element);
-
-  void forEach(void f(num element)) => _Collections.forEach(this, f);
-
-  Collection map(f(num element)) => _Collections.map(this, [], f);
-
-  Collection<num> filter(bool f(num element)) =>
-     _Collections.filter(this, <num>[], f);
-
-  bool every(bool f(num element)) => _Collections.every(this, f);
-
-  bool some(bool f(num element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<num>:
-
-  void sort([Comparator<num> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(num element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(num element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  num get last => this[length - 1];
-
-  num removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [num initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<num> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <num>[]);
-
-  // -- end List<num> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Float64ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLFontElement
-abstract class FontElement implements Element {
-
-  /** @domName HTMLFontElement.color */
-  String color;
-
-  /** @domName HTMLFontElement.face */
-  String face;
-
-  /** @domName HTMLFontElement.size */
-  String size;
-}
-
-class _FontElementImpl extends _ElementImpl implements FontElement native "*HTMLFontElement" {
-
-  String color;
-
-  String face;
-
-  String size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName FormData
-abstract class FormData {
-
-  factory FormData([FormElement form]) {
-    if (!?form) {
-      return _FormDataFactoryProvider.createFormData();
-    }
-    return _FormDataFactoryProvider.createFormData(form);
-  }
-
-  /** @domName FormData.append */
-  void append(String name, String value, String filename);
-}
-
-class _FormDataImpl implements FormData native "*FormData" {
-
-  void append(String name, String value, String filename) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLFormElement
-abstract class FormElement implements Element {
-
-  factory FormElement() => _Elements.createFormElement();
-
-  /** @domName HTMLFormElement.acceptCharset */
-  String acceptCharset;
-
-  /** @domName HTMLFormElement.action */
-  String action;
-
-  /** @domName HTMLFormElement.autocomplete */
-  String autocomplete;
-
-  /** @domName HTMLFormElement.encoding */
-  String encoding;
-
-  /** @domName HTMLFormElement.enctype */
-  String enctype;
-
-  /** @domName HTMLFormElement.length */
-  int get length;
-
-  /** @domName HTMLFormElement.method */
-  String method;
-
-  /** @domName HTMLFormElement.name */
-  String name;
-
-  /** @domName HTMLFormElement.noValidate */
-  bool noValidate;
-
-  /** @domName HTMLFormElement.target */
-  String target;
-
-  /** @domName HTMLFormElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLFormElement.reset */
-  void reset();
-
-  /** @domName HTMLFormElement.submit */
-  void submit();
-}
-
-class _FormElementImpl extends _ElementImpl implements FormElement native "*HTMLFormElement" {
-
-  String acceptCharset;
-
-  String action;
-
-  String autocomplete;
-
-  String encoding;
-
-  String enctype;
-
-  final int length;
-
-  String method;
-
-  String name;
-
-  bool noValidate;
-
-  String target;
-
-  bool checkValidity() native;
-
-  void reset() native;
-
-  void submit() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLFrameElement
-abstract class FrameElement implements Element {
-
-  /** @domName HTMLFrameElement.contentWindow */
-  Window get contentWindow;
-
-  /** @domName HTMLFrameElement.frameBorder */
-  String frameBorder;
-
-  /** @domName HTMLFrameElement.height */
-  int get height;
-
-  /** @domName HTMLFrameElement.location */
-  String location;
-
-  /** @domName HTMLFrameElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLFrameElement.marginHeight */
-  String marginHeight;
-
-  /** @domName HTMLFrameElement.marginWidth */
-  String marginWidth;
-
-  /** @domName HTMLFrameElement.name */
-  String name;
-
-  /** @domName HTMLFrameElement.noResize */
-  bool noResize;
-
-  /** @domName HTMLFrameElement.scrolling */
-  String scrolling;
-
-  /** @domName HTMLFrameElement.src */
-  String src;
-
-  /** @domName HTMLFrameElement.width */
-  int get width;
-}
-
-class _FrameElementImpl extends _ElementImpl implements FrameElement native "*HTMLFrameElement" {
-
-  Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
-  Window get _contentWindow => JS("Window", "#.contentWindow", this);
-
-  String frameBorder;
-
-  final int height;
-
-  String location;
-
-  String longDesc;
-
-  String marginHeight;
-
-  String marginWidth;
-
-  String name;
-
-  bool noResize;
-
-  String scrolling;
-
-  String src;
-
-  final int width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLFrameSetElement
-abstract class FrameSetElement implements Element {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  FrameSetElementEvents get on;
-
-  /** @domName HTMLFrameSetElement.cols */
-  String cols;
-
-  /** @domName HTMLFrameSetElement.rows */
-  String rows;
-}
-
-abstract class FrameSetElementEvents implements ElementEvents {
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get load;
-
-  EventListenerList get message;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get popState;
-
-  EventListenerList get resize;
-
-  EventListenerList get storage;
-
-  EventListenerList get unload;
-}
-
-class _FrameSetElementImpl extends _ElementImpl implements FrameSetElement native "*HTMLFrameSetElement" {
-
-  _FrameSetElementEventsImpl get on =>
-    new _FrameSetElementEventsImpl(this);
-
-  String cols;
-
-  String rows;
-}
-
-class _FrameSetElementEventsImpl extends _ElementEventsImpl implements FrameSetElementEvents {
-  _FrameSetElementEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get beforeUnload => this['beforeunload'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get hashChange => this['hashchange'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get offline => this['offline'];
-
-  EventListenerList get online => this['online'];
-
-  EventListenerList get popState => this['popstate'];
-
-  EventListenerList get resize => this['resize'];
-
-  EventListenerList get storage => this['storage'];
-
-  EventListenerList get unload => this['unload'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName GainNode
-abstract class GainNode implements AudioNode {
-
-  /** @domName GainNode.gain */
-  AudioGain get gain;
-}
-
-class _GainNodeImpl extends _AudioNodeImpl implements GainNode native "*GainNode" {
-
-  final _AudioGainImpl gain;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Gamepad
-abstract class Gamepad {
-
-  /** @domName Gamepad.axes */
-  List<num> get axes;
-
-  /** @domName Gamepad.buttons */
-  List<num> get buttons;
-
-  /** @domName Gamepad.id */
-  String get id;
-
-  /** @domName Gamepad.index */
-  int get index;
-
-  /** @domName Gamepad.timestamp */
-  int get timestamp;
-}
-
-class _GamepadImpl implements Gamepad native "*Gamepad" {
-
-  final List<num> axes;
-
-  final List<num> buttons;
-
-  final String id;
-
-  final int index;
-
-  final int timestamp;
-}
-
-class _GamepadListImpl implements List<Gamepad>, JavaScriptIndexingBehavior native "*GamepadList" {
-
-  final int length;
-
-  _GamepadImpl operator[](int index) => JS("_GamepadImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _GamepadImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Gamepad> mixins.
-  // Gamepad is the element type.
-
-  // From Iterable<Gamepad>:
-
-  Iterator<Gamepad> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Gamepad>(this);
-  }
-
-  // From Collection<Gamepad>:
-
-  void add(Gamepad value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Gamepad value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Gamepad> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Gamepad element) => _Collections.contains(this, element);
-
-  void forEach(void f(Gamepad element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Gamepad element)) => _Collections.map(this, [], f);
-
-  Collection<Gamepad> filter(bool f(Gamepad element)) =>
-     _Collections.filter(this, <Gamepad>[], f);
-
-  bool every(bool f(Gamepad element)) => _Collections.every(this, f);
-
-  bool some(bool f(Gamepad element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Gamepad>:
-
-  void sort([Comparator<Gamepad> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Gamepad element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Gamepad element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Gamepad get last => this[length - 1];
-
-  Gamepad removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Gamepad> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Gamepad>[]);
-
-  // -- end List<Gamepad> mixins.
-
-  _GamepadImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Geolocation
-abstract class Geolocation {
-
-  /** @domName Geolocation.clearWatch */
-  void clearWatch(int watchId);
-
-  /** @domName Geolocation.getCurrentPosition */
-  void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]);
-
-  /** @domName Geolocation.watchPosition */
-  int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]);
-}
-
-class _GeolocationImpl implements Geolocation native "*Geolocation" {
-
-  void clearWatch(int watchId) native;
-
-  void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
-
-  int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Geoposition
-abstract class Geoposition {
-
-  /** @domName Geoposition.coords */
-  Coordinates get coords;
-
-  /** @domName Geoposition.timestamp */
-  int get timestamp;
-}
-
-class _GeopositionImpl implements Geoposition native "*Geoposition" {
-
-  final _CoordinatesImpl coords;
-
-  final int timestamp;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLHRElement
-abstract class HRElement implements Element {
-
-  factory HRElement() => _Elements.createHRElement();
-
-  /** @domName HTMLHRElement.align */
-  String align;
-
-  /** @domName HTMLHRElement.noShade */
-  bool noShade;
-
-  /** @domName HTMLHRElement.size */
-  String size;
-
-  /** @domName HTMLHRElement.width */
-  String width;
-}
-
-class _HRElementImpl extends _ElementImpl implements HRElement native "*HTMLHRElement" {
-
-  String align;
-
-  bool noShade;
-
-  String size;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLAllCollection
-abstract class HTMLAllCollection implements List<Node> {
-
-  /** @domName HTMLAllCollection.length */
-  int get length;
-
-  /** @domName HTMLAllCollection.item */
-  Node item(int index);
-
-  /** @domName HTMLAllCollection.namedItem */
-  Node namedItem(String name);
-
-  /** @domName HTMLAllCollection.tags */
-  List<Node> tags(String name);
-}
-
-class _HTMLAllCollectionImpl implements HTMLAllCollection, JavaScriptIndexingBehavior native "*HTMLAllCollection" {
-
-  final int length;
-
-  _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Node> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     _Collections.filter(this, <Node>[], f);
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Node get last => this[length - 1];
-
-  Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Node> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Node>[]);
-
-  // -- end List<Node> mixins.
-
-  _NodeImpl item(int index) native;
-
-  _NodeImpl namedItem(String name) native;
-
-  List<Node> tags(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLCollection
-abstract class HTMLCollection implements List<Node> {
-
-  /** @domName HTMLCollection.length */
-  int get length;
-
-  /** @domName HTMLCollection.item */
-  Node item(int index);
-
-  /** @domName HTMLCollection.namedItem */
-  Node namedItem(String name);
-}
-
-class _HTMLCollectionImpl implements HTMLCollection, JavaScriptIndexingBehavior native "*HTMLCollection" {
-
-  final int length;
-
-  _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Node> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     _Collections.filter(this, <Node>[], f);
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Node get last => this[length - 1];
-
-  Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Node> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Node>[]);
-
-  // -- end List<Node> mixins.
-
-  _NodeImpl item(int index) native;
-
-  _NodeImpl namedItem(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLOptionsCollection
-abstract class HTMLOptionsCollection implements HTMLCollection {
-
-  /** @domName HTMLOptionsCollection.length */
-  int length;
-
-  /** @domName HTMLOptionsCollection.selectedIndex */
-  int selectedIndex;
-
-  /** @domName HTMLOptionsCollection.remove */
-  void remove(int index);
-}
-
-class _HTMLOptionsCollectionImpl extends _HTMLCollectionImpl implements HTMLOptionsCollection native "*HTMLOptionsCollection" {
-
-  // Shadowing definition.
-  int get length => JS("int", "#.length", this);
-
-  void set length(int value) {
-    JS("void", "#.length = #", this, value);
-  }
-
-  int selectedIndex;
-
-  void remove(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HashChangeEvent
-abstract class HashChangeEvent implements Event {
-
-  /** @domName HashChangeEvent.newURL */
-  String get newURL;
-
-  /** @domName HashChangeEvent.oldURL */
-  String get oldURL;
-
-  /** @domName HashChangeEvent.initHashChangeEvent */
-  void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
-}
-
-class _HashChangeEventImpl extends _EventImpl implements HashChangeEvent native "*HashChangeEvent" {
-
-  final String newURL;
-
-  final String oldURL;
-
-  void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLHeadElement
-abstract class HeadElement implements Element {
-
-  factory HeadElement() => _Elements.createHeadElement();
-
-  /** @domName HTMLHeadElement.profile */
-  String profile;
-}
-
-class _HeadElementImpl extends _ElementImpl implements HeadElement native "*HTMLHeadElement" {
-
-  String profile;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLHeadingElement
-abstract class HeadingElement implements Element {
-
-  factory HeadingElement.h1() => _Elements.createHeadingElement_h1();
-
-  factory HeadingElement.h2() => _Elements.createHeadingElement_h2();
-
-  factory HeadingElement.h3() => _Elements.createHeadingElement_h3();
-
-  factory HeadingElement.h4() => _Elements.createHeadingElement_h4();
-
-  factory HeadingElement.h5() => _Elements.createHeadingElement_h5();
-
-  factory HeadingElement.h6() => _Elements.createHeadingElement_h6();
-
-  /** @domName HTMLHeadingElement.align */
-  String align;
-}
-
-class _HeadingElementImpl extends _ElementImpl implements HeadingElement native "*HTMLHeadingElement" {
-
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLHtmlElement
-abstract class HtmlElement implements Element {
-
-  factory HtmlElement() => _Elements.createHtmlElement();
-}
-
-class _HtmlElementImpl extends _ElementImpl implements HtmlElement native "*HTMLHtmlElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName XMLHttpRequest
-abstract class HttpRequest implements EventTarget {
-  factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
-
-  factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_getWithCredentials(url, onSuccess);
-
-  factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  HttpRequestEvents get on;
-
-  static const int DONE = 4;
-
-  static const int HEADERS_RECEIVED = 2;
-
-  static const int LOADING = 3;
-
-  static const int OPENED = 1;
-
-  static const int UNSENT = 0;
-
-  /** @domName XMLHttpRequest.readyState */
-  int get readyState;
-
-  /** @domName XMLHttpRequest.response */
-  Object get response;
-
-  /** @domName XMLHttpRequest.responseText */
-  String get responseText;
-
-  /** @domName XMLHttpRequest.responseType */
-  String responseType;
-
-  /** @domName XMLHttpRequest.responseXML */
-  Document get responseXML;
-
-  /** @domName XMLHttpRequest.status */
-  int get status;
-
-  /** @domName XMLHttpRequest.statusText */
-  String get statusText;
-
-  /** @domName XMLHttpRequest.upload */
-  HttpRequestUpload get upload;
-
-  /** @domName XMLHttpRequest.withCredentials */
-  bool withCredentials;
-
-  /** @domName XMLHttpRequest.abort */
-  void abort();
-
-  /** @domName XMLHttpRequest.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName XMLHttpRequest.getAllResponseHeaders */
-  String getAllResponseHeaders();
-
-  /** @domName XMLHttpRequest.getResponseHeader */
-  String getResponseHeader(String header);
-
-  /** @domName XMLHttpRequest.open */
-  void open(String method, String url, [bool async, String user, String password]);
-
-  /** @domName XMLHttpRequest.overrideMimeType */
-  void overrideMimeType(String override);
-
-  /** @domName XMLHttpRequest.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.send */
-  void send([data]);
-
-  /** @domName XMLHttpRequest.setRequestHeader */
-  void setRequestHeader(String header, String value);
-}
-
-abstract class HttpRequestEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-
-  EventListenerList get readyStateChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLHttpRequestException
-abstract class HttpRequestException {
-
-  static const int ABORT_ERR = 102;
-
-  static const int NETWORK_ERR = 101;
-
-  /** @domName XMLHttpRequestException.code */
-  int get code;
-
-  /** @domName XMLHttpRequestException.message */
-  String get message;
-
-  /** @domName XMLHttpRequestException.name */
-  String get name;
-
-  /** @domName XMLHttpRequestException.toString */
-  String toString();
-}
-
-class _HttpRequestExceptionImpl implements HttpRequestException native "*XMLHttpRequestException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-
-class _HttpRequestImpl extends _EventTargetImpl implements HttpRequest native "*XMLHttpRequest" {
-
-  _HttpRequestEventsImpl get on =>
-    new _HttpRequestEventsImpl(this);
-
-  final int readyState;
-
-  final Object response;
-
-  final String responseText;
-
-  String responseType;
-
-  final _DocumentImpl responseXML;
-
-  final int status;
-
-  final String statusText;
-
-  final _HttpRequestUploadImpl upload;
-
-  bool withCredentials;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  String getAllResponseHeaders() native;
-
-  String getResponseHeader(String header) native;
-
-  void open(String method, String url, [bool async, String user, String password]) native;
-
-  void overrideMimeType(String override) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void send([data]) native;
-
-  void setRequestHeader(String header, String value) native;
-}
-
-class _HttpRequestEventsImpl extends _EventsImpl implements HttpRequestEvents {
-  _HttpRequestEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get loadEnd => this['loadend'];
-
-  EventListenerList get loadStart => this['loadstart'];
-
-  EventListenerList get progress => this['progress'];
-
-  EventListenerList get readyStateChange => this['readystatechange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLHttpRequestProgressEvent
-abstract class HttpRequestProgressEvent implements ProgressEvent {
-
-  /** @domName XMLHttpRequestProgressEvent.position */
-  int get position;
-
-  /** @domName XMLHttpRequestProgressEvent.totalSize */
-  int get totalSize;
-}
-
-class _HttpRequestProgressEventImpl extends _ProgressEventImpl implements HttpRequestProgressEvent native "*XMLHttpRequestProgressEvent" {
-
-  final int position;
-
-  final int totalSize;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLHttpRequestUpload
-abstract class HttpRequestUpload implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  HttpRequestUploadEvents get on;
-
-  /** @domName XMLHttpRequestUpload.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequestUpload.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName XMLHttpRequestUpload.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class HttpRequestUploadEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-}
-
-class _HttpRequestUploadImpl extends _EventTargetImpl implements HttpRequestUpload native "*XMLHttpRequestUpload" {
-
-  _HttpRequestUploadEventsImpl get on =>
-    new _HttpRequestUploadEventsImpl(this);
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _HttpRequestUploadEventsImpl extends _EventsImpl implements HttpRequestUploadEvents {
-  _HttpRequestUploadEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get loadEnd => this['loadend'];
-
-  EventListenerList get loadStart => this['loadstart'];
-
-  EventListenerList get progress => this['progress'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBAny
-abstract class IDBAny {
-}
-
-class _IDBAnyImpl implements IDBAny native "*IDBAny" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBCursor
-abstract class IDBCursor {
-
-  static const int NEXT = 0;
-
-  static const int NEXT_NO_DUPLICATE = 1;
-
-  static const int PREV = 2;
-
-  static const int PREV_NO_DUPLICATE = 3;
-
-  /** @domName IDBCursor.direction */
-  String get direction;
-
-  /** @domName IDBCursor.key */
-  Object get key;
-
-  /** @domName IDBCursor.primaryKey */
-  Object get primaryKey;
-
-  /** @domName IDBCursor.source */
-  dynamic get source;
-
-  /** @domName IDBCursor.advance */
-  void advance(int count);
-
-  /** @domName IDBCursor.continueFunction */
-  void continueFunction([/*IDBKey*/ key]);
-
-  /** @domName IDBCursor.delete */
-  IDBRequest delete();
-
-  /** @domName IDBCursor.update */
-  IDBRequest update(Object value);
-}
-
-class _IDBCursorImpl implements IDBCursor native "*IDBCursor" {
-
-  final String direction;
-
-  final Object key;
-
-  final Object primaryKey;
-
-  final dynamic source;
-
-  void advance(int count) native;
-
-  void continueFunction([key]) {
-    if (?key) {
-      var key_1 = _convertDartToNative_IDBKey(key);
-      _continueFunction_1(key_1);
-      return;
-    }
-    _continueFunction_2();
-    return;
-  }
-  void _continueFunction_1(key) native "continue";
-  void _continueFunction_2() native "continue";
-
-  _IDBRequestImpl delete() native;
-
-  _IDBRequestImpl update(/*any*/ value) {
-    var value_1 = _convertDartToNative_SerializedScriptValue(value);
-    return _update_1(value_1);
-  }
-  _IDBRequestImpl _update_1(value) native "update";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBCursorWithValue
-abstract class IDBCursorWithValue implements IDBCursor {
-
-  /** @domName IDBCursorWithValue.value */
-  Object get value;
-}
-
-class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue native "*IDBCursorWithValue" {
-
-  final Object value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBDatabase
-abstract class IDBDatabase implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  IDBDatabaseEvents get on;
-
-  /** @domName IDBDatabase.name */
-  String get name;
-
-  /** @domName IDBDatabase.objectStoreNames */
-  List<String> get objectStoreNames;
-
-  /** @domName IDBDatabase.version */
-  dynamic get version;
-
-  /** @domName IDBDatabase.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBDatabase.close */
-  void close();
-
-  /** @domName IDBDatabase.createObjectStore */
-  IDBObjectStore createObjectStore(String name, [Map options]);
-
-  /** @domName IDBDatabase.deleteObjectStore */
-  void deleteObjectStore(String name);
-
-  /** @domName IDBDatabase.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName IDBDatabase.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBDatabase.setVersion */
-  IDBVersionChangeRequest setVersion(String version);
-
-  /** @domName IDBDatabase.transaction */
-  IDBTransaction transaction(storeName_OR_storeNames, String mode);
-}
-
-abstract class IDBDatabaseEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get versionChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBDatabaseException
-abstract class IDBDatabaseException {
-
-  static const int ABORT_ERR = 20;
-
-  static const int CONSTRAINT_ERR = 4;
-
-  static const int DATA_ERR = 5;
-
-  static const int NON_TRANSIENT_ERR = 2;
-
-  static const int NOT_ALLOWED_ERR = 6;
-
-  static const int NOT_FOUND_ERR = 8;
-
-  static const int NO_ERR = 0;
-
-  static const int QUOTA_ERR = 22;
-
-  static const int READ_ONLY_ERR = 9;
-
-  static const int TIMEOUT_ERR = 23;
-
-  static const int TRANSACTION_INACTIVE_ERR = 7;
-
-  static const int UNKNOWN_ERR = 1;
-
-  static const int VER_ERR = 12;
-
-  /** @domName IDBDatabaseException.code */
-  int get code;
-
-  /** @domName IDBDatabaseException.message */
-  String get message;
-
-  /** @domName IDBDatabaseException.name */
-  String get name;
-
-  /** @domName IDBDatabaseException.toString */
-  String toString();
-}
-
-class _IDBDatabaseExceptionImpl implements IDBDatabaseException native "*IDBDatabaseException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-// 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 _IDBDatabaseImpl extends _EventTargetImpl implements IDBDatabase native "*IDBDatabase" {
-
-  _IDBTransactionImpl transaction(storeName_OR_storeNames, String mode) {
-    if (mode != 'readonly' && mode != 'readwrite') {
-      throw new ArgumentError(mode);
-    }
-
-    // TODO(sra): Ensure storeName_OR_storeNames is a string or List<String>,
-    // and copy to JavaScript array if necessary.
-
-    if (_transaction_fn != null) {
-      return _transaction_fn(this, storeName_OR_storeNames, mode);
-    }
-
-    // Try and create a transaction with a string mode.  Browsers that expect a
-    // numeric mode tend to convert the string into a number.  This fails
-    // silently, resulting in zero ('readonly').
-    var txn = _transaction(storeName_OR_storeNames, mode);
-    if (_hasNumericMode(txn)) {
-      _transaction_fn = _transaction_numeric_mode;
-      txn = _transaction_fn(this, storeName_OR_storeNames, mode);
-    } else {
-      _transaction_fn = _transaction_string_mode;
-    }
-    return txn;
-  }
-
-  static _IDBTransactionImpl _transaction_string_mode(_IDBDatabaseImpl db, stores, mode) {
-    return db._transaction(stores, mode);
-  }
-
-  static _IDBTransactionImpl _transaction_numeric_mode(_IDBDatabaseImpl db, stores, mode) {
-    int intMode;
-    if (mode == 'readonly') intMode = IDBTransaction.READ_ONLY;
-    if (mode == 'readwrite') intMode = IDBTransaction.READ_WRITE;
-    return db._transaction(stores, intMode);
-  }
-
-  _IDBTransactionImpl _transaction(stores, mode) native 'transaction';
-
-  static bool _hasNumericMode(txn) =>
-      JS('bool', 'typeof(#.mode) === "number"', txn);
-
-
-  _IDBDatabaseEventsImpl get on =>
-    new _IDBDatabaseEventsImpl(this);
-
-  final String name;
-
-  final _DOMStringListImpl objectStoreNames;
-
-  final dynamic version;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void close() native;
-
-  _IDBObjectStoreImpl createObjectStore(String name, [options]) {
-    if (?options) {
-      var options_1 = _convertDartToNative_Dictionary(options);
-      return _createObjectStore_1(name, options_1);
-    }
-    return _createObjectStore_2(name);
-  }
-  _IDBObjectStoreImpl _createObjectStore_1(name, options) native "createObjectStore";
-  _IDBObjectStoreImpl _createObjectStore_2(name) native "createObjectStore";
-
-  void deleteObjectStore(String name) native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  _IDBVersionChangeRequestImpl setVersion(String version) native;
-}
-
-// TODO(sra): This should be a static member of _IDBTransactionImpl but dart2js
-// can't handle that.  Move it back after dart2js is completely done.
-var _transaction_fn;  // Assigned one of the static methods.
-
-class _IDBDatabaseEventsImpl extends _EventsImpl implements IDBDatabaseEvents {
-  _IDBDatabaseEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get versionChange => this['versionchange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBFactory
-abstract class IDBFactory {
-
-  /** @domName IDBFactory.cmp */
-  int cmp(/*IDBKey*/ first, /*IDBKey*/ second);
-
-  /** @domName IDBFactory.deleteDatabase */
-  IDBVersionChangeRequest deleteDatabase(String name);
-
-  /** @domName IDBFactory.open */
-  IDBOpenDBRequest open(String name, [int version]);
-
-  /** @domName IDBFactory.webkitGetDatabaseNames */
-  IDBRequest webkitGetDatabaseNames();
-}
-
-class _IDBFactoryImpl implements IDBFactory native "*IDBFactory" {
-
-  int cmp(/*IDBKey*/ first, /*IDBKey*/ second) {
-    var first_1 = _convertDartToNative_IDBKey(first);
-    var second_2 = _convertDartToNative_IDBKey(second);
-    return _cmp_1(first_1, second_2);
-  }
-  int _cmp_1(first, second) native "cmp";
-
-  _IDBVersionChangeRequestImpl deleteDatabase(String name) native;
-
-  _IDBOpenDBRequestImpl open(String name, [int version]) native;
-
-  _IDBRequestImpl webkitGetDatabaseNames() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBIndex
-abstract class IDBIndex {
-
-  /** @domName IDBIndex.keyPath */
-  dynamic get keyPath;
-
-  /** @domName IDBIndex.multiEntry */
-  bool get multiEntry;
-
-  /** @domName IDBIndex.name */
-  String get name;
-
-  /** @domName IDBIndex.objectStore */
-  IDBObjectStore get objectStore;
-
-  /** @domName IDBIndex.unique */
-  bool get unique;
-
-  /** @domName IDBIndex.count */
-  IDBRequest count([key_OR_range]);
-
-  /** @domName IDBIndex.get */
-  IDBRequest get(key);
-
-  /** @domName IDBIndex.getKey */
-  IDBRequest getKey(key);
-
-  /** @domName IDBIndex.openCursor */
-  IDBRequest openCursor([key_OR_range, String direction]);
-
-  /** @domName IDBIndex.openKeyCursor */
-  IDBRequest openKeyCursor([key_OR_range, String direction]);
-}
-
-class _IDBIndexImpl implements IDBIndex native "*IDBIndex" {
-
-  final dynamic keyPath;
-
-  final bool multiEntry;
-
-  final String name;
-
-  final _IDBObjectStoreImpl objectStore;
-
-  final bool unique;
-
-  _IDBRequestImpl count([key_OR_range]) {
-    if (!?key_OR_range) {
-      return _count_1();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
-      return _count_2(key_OR_range);
-    }
-    if (?key_OR_range) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
-      return _count_3(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _count_1() native "count";
-  _IDBRequestImpl _count_2(_IDBKeyRangeImpl range) native "count";
-  _IDBRequestImpl _count_3(key) native "count";
-
-  _IDBRequestImpl get(key) {
-    if ((key is IDBKeyRange || key == null)) {
-      return _get_1(key);
-    }
-    if (?key) {
-      var key_1 = _convertDartToNative_IDBKey(key);
-      return _get_2(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _get_1(_IDBKeyRangeImpl key) native "get";
-  _IDBRequestImpl _get_2(key) native "get";
-
-  _IDBRequestImpl getKey(key) {
-    if ((key is IDBKeyRange || key == null)) {
-      return _getKey_1(key);
-    }
-    if (?key) {
-      var key_1 = _convertDartToNative_IDBKey(key);
-      return _getKey_2(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _getKey_1(_IDBKeyRangeImpl key) native "getKey";
-  _IDBRequestImpl _getKey_2(key) native "getKey";
-
-  _IDBRequestImpl openCursor([key_OR_range, direction]) {
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openCursor_1();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        !?direction) {
-      return _openCursor_2(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        (direction is String || direction == null)) {
-      return _openCursor_3(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        !?direction) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_4(key_1);
-    }
-    if (?key_OR_range &&
-        (direction is String || direction == null)) {
-      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_5(key_2, direction);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _openCursor_1() native "openCursor";
-  _IDBRequestImpl _openCursor_2(_IDBKeyRangeImpl range) native "openCursor";
-  _IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
-  _IDBRequestImpl _openCursor_4(key) native "openCursor";
-  _IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
-
-  _IDBRequestImpl openKeyCursor([key_OR_range, direction]) {
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openKeyCursor_1();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        !?direction) {
-      return _openKeyCursor_2(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        (direction is String || direction == null)) {
-      return _openKeyCursor_3(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        !?direction) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openKeyCursor_4(key_1);
-    }
-    if (?key_OR_range &&
-        (direction is String || direction == null)) {
-      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openKeyCursor_5(key_2, direction);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _openKeyCursor_1() native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_2(_IDBKeyRangeImpl range) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_3(_IDBKeyRangeImpl range, String direction) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_4(key) native "openKeyCursor";
-  _IDBRequestImpl _openKeyCursor_5(key, String direction) native "openKeyCursor";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBKey
-abstract class IDBKey {
-}
-
-class _IDBKeyImpl implements IDBKey native "*IDBKey" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName IDBKeyRange
-abstract class IDBKeyRange {
-
-  /**
-   * @domName IDBKeyRange.only
-   */
-  factory IDBKeyRange.only(/*IDBKey*/ value) =>
-      _IDBKeyRangeFactoryProvider.createIDBKeyRange_only(value);
-
-  /**
-   * @domName IDBKeyRange.lowerBound
-   */
-  factory IDBKeyRange.lowerBound(/*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeFactoryProvider.createIDBKeyRange_lowerBound(bound, open);
-
-  /**
-   * @domName IDBKeyRange.upperBound
-   */
-  factory IDBKeyRange.upperBound(/*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeFactoryProvider.createIDBKeyRange_upperBound(bound, open);
-
-  /**
-   * @domName IDBKeyRange.bound
-   */
-  factory IDBKeyRange.bound(/*IDBKey*/ lower, /*IDBKey*/ upper,
-                            [bool lowerOpen = false, bool upperOpen = false]) =>
-      _IDBKeyRangeFactoryProvider.createIDBKeyRange_bound(
-          lower, upper, lowerOpen, upperOpen);
-
-
-  /** @domName IDBKeyRange.lower */
-  dynamic get lower;
-
-  /** @domName IDBKeyRange.lowerOpen */
-  bool get lowerOpen;
-
-  /** @domName IDBKeyRange.upper */
-  dynamic get upper;
-
-  /** @domName IDBKeyRange.upperOpen */
-  bool get upperOpen;
-
-  /** @domName IDBKeyRange.bound_ */
-  static final bound_ = _IDBKeyRangeImpl.bound_;
-
-  /** @domName IDBKeyRange.lowerBound_ */
-  static final lowerBound_ = _IDBKeyRangeImpl.lowerBound_;
-
-  /** @domName IDBKeyRange.only_ */
-  static final only_ = _IDBKeyRangeImpl.only_;
-
-  /** @domName IDBKeyRange.upperBound_ */
-  static final upperBound_ = _IDBKeyRangeImpl.upperBound_;
-}
-
-class _IDBKeyRangeImpl implements IDBKeyRange native "*IDBKeyRange" {
-
-  dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
-  dynamic get _lower => JS("dynamic", "#.lower", this);
-
-  final bool lowerOpen;
-
-  dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
-  dynamic get _upper => JS("dynamic", "#.upper", this);
-
-  final bool upperOpen;
-
-  static _IDBKeyRangeImpl bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [lowerOpen, upperOpen]) {
-    if (?upperOpen) {
-      var lower_1 = _convertDartToNative_IDBKey(lower);
-      var upper_2 = _convertDartToNative_IDBKey(upper);
-      return _bound__1(lower_1, upper_2, lowerOpen, upperOpen);
-    }
-    if (?lowerOpen) {
-      var lower_3 = _convertDartToNative_IDBKey(lower);
-      var upper_4 = _convertDartToNative_IDBKey(upper);
-      return _bound__2(lower_3, upper_4, lowerOpen);
-    }
-    var lower_5 = _convertDartToNative_IDBKey(lower);
-    var upper_6 = _convertDartToNative_IDBKey(upper);
-    return _bound__3(lower_5, upper_6);
-  }
-  _IDBKeyRangeImpl _bound__1(lower, upper, bool lowerOpen, bool upperOpen) native "bound";
-  _IDBKeyRangeImpl _bound__2(lower, upper, bool lowerOpen) native "bound";
-  _IDBKeyRangeImpl _bound__3(lower, upper) native "bound";
-
-  static _IDBKeyRangeImpl lowerBound_(/*IDBKey*/ bound, [open]) {
-    if (?open) {
-      var bound_1 = _convertDartToNative_IDBKey(bound);
-      return _lowerBound__1(bound_1, open);
-    }
-    var bound_2 = _convertDartToNative_IDBKey(bound);
-    return _lowerBound__2(bound_2);
-  }
-  _IDBKeyRangeImpl _lowerBound__1(bound, bool open) native "lowerBound";
-  _IDBKeyRangeImpl _lowerBound__2(bound) native "lowerBound";
-
-  static _IDBKeyRangeImpl only_(/*IDBKey*/ value) {
-    var value_1 = _convertDartToNative_IDBKey(value);
-    return _only__1(value_1);
-  }
-  _IDBKeyRangeImpl _only__1(value) native "only";
-
-  static _IDBKeyRangeImpl upperBound_(/*IDBKey*/ bound, [open]) {
-    if (?open) {
-      var bound_1 = _convertDartToNative_IDBKey(bound);
-      return _upperBound__1(bound_1, open);
-    }
-    var bound_2 = _convertDartToNative_IDBKey(bound);
-    return _upperBound__2(bound_2);
-  }
-  _IDBKeyRangeImpl _upperBound__1(bound, bool open) native "upperBound";
-  _IDBKeyRangeImpl _upperBound__2(bound) native "upperBound";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBObjectStore
-abstract class IDBObjectStore {
-
-  /** @domName IDBObjectStore.autoIncrement */
-  bool get autoIncrement;
-
-  /** @domName IDBObjectStore.indexNames */
-  List<String> get indexNames;
-
-  /** @domName IDBObjectStore.keyPath */
-  dynamic get keyPath;
-
-  /** @domName IDBObjectStore.name */
-  String get name;
-
-  /** @domName IDBObjectStore.transaction */
-  IDBTransaction get transaction;
-
-  /** @domName IDBObjectStore.add */
-  IDBRequest add(Object value, [/*IDBKey*/ key]);
-
-  /** @domName IDBObjectStore.clear */
-  IDBRequest clear();
-
-  /** @domName IDBObjectStore.count */
-  IDBRequest count([key_OR_range]);
-
-  /** @domName IDBObjectStore.createIndex */
-  IDBIndex createIndex(String name, keyPath, [Map options]);
-
-  /** @domName IDBObjectStore.delete */
-  IDBRequest delete(key_OR_keyRange);
-
-  /** @domName IDBObjectStore.deleteIndex */
-  void deleteIndex(String name);
-
-  /** @domName IDBObjectStore.getObject */
-  IDBRequest getObject(key);
-
-  /** @domName IDBObjectStore.index */
-  IDBIndex index(String name);
-
-  /** @domName IDBObjectStore.openCursor */
-  IDBRequest openCursor([key_OR_range, String direction]);
-
-  /** @domName IDBObjectStore.put */
-  IDBRequest put(Object value, [/*IDBKey*/ key]);
-}
-
-class _IDBObjectStoreImpl implements IDBObjectStore native "*IDBObjectStore" {
-
-  final bool autoIncrement;
-
-  final _DOMStringListImpl indexNames;
-
-  final dynamic keyPath;
-
-  final String name;
-
-  final _IDBTransactionImpl transaction;
-
-  _IDBRequestImpl add(/*any*/ value, [key]) {
-    if (?key) {
-      var value_1 = _convertDartToNative_SerializedScriptValue(value);
-      var key_2 = _convertDartToNative_IDBKey(key);
-      return _add_1(value_1, key_2);
-    }
-    var value_3 = _convertDartToNative_SerializedScriptValue(value);
-    return _add_2(value_3);
-  }
-  _IDBRequestImpl _add_1(value, key) native "add";
-  _IDBRequestImpl _add_2(value) native "add";
-
-  _IDBRequestImpl clear() native;
-
-  _IDBRequestImpl count([key_OR_range]) {
-    if (!?key_OR_range) {
-      return _count_1();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
-      return _count_2(key_OR_range);
-    }
-    if (?key_OR_range) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
-      return _count_3(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _count_1() native "count";
-  _IDBRequestImpl _count_2(_IDBKeyRangeImpl range) native "count";
-  _IDBRequestImpl _count_3(key) native "count";
-
-  _IDBIndexImpl createIndex(String name, keyPath, [options]) {
-    if ((keyPath is List<String> || keyPath == null) &&
-        !?options) {
-      List keyPath_1 = _convertDartToNative_StringArray(keyPath);
-      return _createIndex_1(name, keyPath_1);
-    }
-    if ((keyPath is List<String> || keyPath == null) &&
-        (options is Map || options == null)) {
-      List keyPath_2 = _convertDartToNative_StringArray(keyPath);
-      var options_3 = _convertDartToNative_Dictionary(options);
-      return _createIndex_2(name, keyPath_2, options_3);
-    }
-    if ((keyPath is String || keyPath == null) &&
-        !?options) {
-      return _createIndex_3(name, keyPath);
-    }
-    if ((keyPath is String || keyPath == null) &&
-        (options is Map || options == null)) {
-      var options_4 = _convertDartToNative_Dictionary(options);
-      return _createIndex_4(name, keyPath, options_4);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBIndexImpl _createIndex_1(name, List keyPath) native "createIndex";
-  _IDBIndexImpl _createIndex_2(name, List keyPath, options) native "createIndex";
-  _IDBIndexImpl _createIndex_3(name, String keyPath) native "createIndex";
-  _IDBIndexImpl _createIndex_4(name, String keyPath, options) native "createIndex";
-
-  _IDBRequestImpl delete(key_OR_keyRange) {
-    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
-      return _delete_1(key_OR_keyRange);
-    }
-    if (?key_OR_keyRange) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_keyRange);
-      return _delete_2(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _delete_1(_IDBKeyRangeImpl keyRange) native "delete";
-  _IDBRequestImpl _delete_2(key) native "delete";
-
-  void deleteIndex(String name) native;
-
-  _IDBRequestImpl getObject(key) {
-    if ((key is IDBKeyRange || key == null)) {
-      return _getObject_1(key);
-    }
-    if (?key) {
-      var key_1 = _convertDartToNative_IDBKey(key);
-      return _getObject_2(key_1);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _getObject_1(_IDBKeyRangeImpl key) native "get";
-  _IDBRequestImpl _getObject_2(key) native "get";
-
-  _IDBIndexImpl index(String name) native;
-
-  _IDBRequestImpl openCursor([key_OR_range, direction]) {
-    if (!?key_OR_range &&
-        !?direction) {
-      return _openCursor_1();
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        !?direction) {
-      return _openCursor_2(key_OR_range);
-    }
-    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
-        (direction is String || direction == null)) {
-      return _openCursor_3(key_OR_range, direction);
-    }
-    if (?key_OR_range &&
-        !?direction) {
-      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_4(key_1);
-    }
-    if (?key_OR_range &&
-        (direction is String || direction == null)) {
-      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
-      return _openCursor_5(key_2, direction);
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  _IDBRequestImpl _openCursor_1() native "openCursor";
-  _IDBRequestImpl _openCursor_2(_IDBKeyRangeImpl range) native "openCursor";
-  _IDBRequestImpl _openCursor_3(_IDBKeyRangeImpl range, String direction) native "openCursor";
-  _IDBRequestImpl _openCursor_4(key) native "openCursor";
-  _IDBRequestImpl _openCursor_5(key, String direction) native "openCursor";
-
-  _IDBRequestImpl put(/*any*/ value, [key]) {
-    if (?key) {
-      var value_1 = _convertDartToNative_SerializedScriptValue(value);
-      var key_2 = _convertDartToNative_IDBKey(key);
-      return _put_1(value_1, key_2);
-    }
-    var value_3 = _convertDartToNative_SerializedScriptValue(value);
-    return _put_2(value_3);
-  }
-  _IDBRequestImpl _put_1(value, key) native "put";
-  _IDBRequestImpl _put_2(value) native "put";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBOpenDBRequest
-abstract class IDBOpenDBRequest implements IDBRequest, EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  IDBOpenDBRequestEvents get on;
-}
-
-abstract class IDBOpenDBRequestEvents implements IDBRequestEvents {
-
-  EventListenerList get blocked;
-
-  EventListenerList get upgradeNeeded;
-}
-
-class _IDBOpenDBRequestImpl extends _IDBRequestImpl implements IDBOpenDBRequest native "*IDBOpenDBRequest" {
-
-  _IDBOpenDBRequestEventsImpl get on =>
-    new _IDBOpenDBRequestEventsImpl(this);
-}
-
-class _IDBOpenDBRequestEventsImpl extends _IDBRequestEventsImpl implements IDBOpenDBRequestEvents {
-  _IDBOpenDBRequestEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get blocked => this['blocked'];
-
-  EventListenerList get upgradeNeeded => this['upgradeneeded'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBRequest
-abstract class IDBRequest implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  IDBRequestEvents get on;
-
-  /** @domName IDBRequest.error */
-  DOMError get error;
-
-  /** @domName IDBRequest.errorCode */
-  int get errorCode;
-
-  /** @domName IDBRequest.readyState */
-  String get readyState;
-
-  /** @domName IDBRequest.result */
-  dynamic get result;
-
-  /** @domName IDBRequest.source */
-  dynamic get source;
-
-  /** @domName IDBRequest.transaction */
-  IDBTransaction get transaction;
-
-  /** @domName IDBRequest.webkitErrorMessage */
-  String get webkitErrorMessage;
-
-  /** @domName IDBRequest.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBRequest.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName IDBRequest.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class IDBRequestEvents implements Events {
-
-  EventListenerList get error;
-
-  EventListenerList get success;
-}
-
-class _IDBRequestImpl extends _EventTargetImpl implements IDBRequest native "*IDBRequest" {
-
-  _IDBRequestEventsImpl get on =>
-    new _IDBRequestEventsImpl(this);
-
-  final _DOMErrorImpl error;
-
-  final int errorCode;
-
-  final String readyState;
-
-  dynamic get result => _convertNativeToDart_IDBAny(this._result);
-  dynamic get _result => JS("dynamic", "#.result", this);
-
-  final dynamic source;
-
-  final _IDBTransactionImpl transaction;
-
-  final String webkitErrorMessage;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _IDBRequestEventsImpl extends _EventsImpl implements IDBRequestEvents {
-  _IDBRequestEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get success => this['success'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBTransaction
-abstract class IDBTransaction implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  IDBTransactionEvents get on;
-
-  static const int READ_ONLY = 0;
-
-  static const int READ_WRITE = 1;
-
-  static const int VERSION_CHANGE = 2;
-
-  /** @domName IDBTransaction.db */
-  IDBDatabase get db;
-
-  /** @domName IDBTransaction.error */
-  DOMError get error;
-
-  /** @domName IDBTransaction.mode */
-  String get mode;
-
-  /** @domName IDBTransaction.abort */
-  void abort();
-
-  /** @domName IDBTransaction.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBTransaction.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName IDBTransaction.objectStore */
-  IDBObjectStore objectStore(String name);
-
-  /** @domName IDBTransaction.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class IDBTransactionEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get complete;
-
-  EventListenerList get error;
-}
-
-class _IDBTransactionImpl extends _EventTargetImpl implements IDBTransaction native "*IDBTransaction" {
-
-  _IDBTransactionEventsImpl get on =>
-    new _IDBTransactionEventsImpl(this);
-
-  final _IDBDatabaseImpl db;
-
-  final _DOMErrorImpl error;
-
-  final String mode;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  _IDBObjectStoreImpl objectStore(String name) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _IDBTransactionEventsImpl extends _EventsImpl implements IDBTransactionEvents {
-  _IDBTransactionEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get complete => this['complete'];
-
-  EventListenerList get error => this['error'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBVersionChangeEvent
-abstract class IDBUpgradeNeededEvent implements Event {
-
-  /** @domName IDBVersionChangeEvent.newVersion */
-  int get newVersion;
-
-  /** @domName IDBVersionChangeEvent.oldVersion */
-  int get oldVersion;
-}
-
-class _IDBUpgradeNeededEventImpl extends _EventImpl implements IDBUpgradeNeededEvent native "*IDBVersionChangeEvent" {
-
-  final int newVersion;
-
-  final int oldVersion;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBVersionChangeEvent
-abstract class IDBVersionChangeEvent implements Event {
-
-  /** @domName IDBVersionChangeEvent.version */
-  String get version;
-}
-
-class _IDBVersionChangeEventImpl extends _EventImpl implements IDBVersionChangeEvent native "*IDBVersionChangeEvent" {
-
-  final String version;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IDBVersionChangeRequest
-abstract class IDBVersionChangeRequest implements IDBRequest, EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  IDBVersionChangeRequestEvents get on;
-}
-
-abstract class IDBVersionChangeRequestEvents implements IDBRequestEvents {
-
-  EventListenerList get blocked;
-}
-
-class _IDBVersionChangeRequestImpl extends _IDBRequestImpl implements IDBVersionChangeRequest native "*IDBVersionChangeRequest" {
-
-  _IDBVersionChangeRequestEventsImpl get on =>
-    new _IDBVersionChangeRequestEventsImpl(this);
-}
-
-class _IDBVersionChangeRequestEventsImpl extends _IDBRequestEventsImpl implements IDBVersionChangeRequestEvents {
-  _IDBVersionChangeRequestEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get blocked => this['blocked'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLIFrameElement
-abstract class IFrameElement implements Element {
-
-  factory IFrameElement() => _Elements.createIFrameElement();
-
-  /** @domName HTMLIFrameElement.align */
-  String align;
-
-  /** @domName HTMLIFrameElement.contentWindow */
-  Window get contentWindow;
-
-  /** @domName HTMLIFrameElement.frameBorder */
-  String frameBorder;
-
-  /** @domName HTMLIFrameElement.height */
-  String height;
-
-  /** @domName HTMLIFrameElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLIFrameElement.marginHeight */
-  String marginHeight;
-
-  /** @domName HTMLIFrameElement.marginWidth */
-  String marginWidth;
-
-  /** @domName HTMLIFrameElement.name */
-  String name;
-
-  /** @domName HTMLIFrameElement.sandbox */
-  String sandbox;
-
-  /** @domName HTMLIFrameElement.scrolling */
-  String scrolling;
-
-  /** @domName HTMLIFrameElement.src */
-  String src;
-
-  /** @domName HTMLIFrameElement.srcdoc */
-  String srcdoc;
-
-  /** @domName HTMLIFrameElement.width */
-  String width;
-}
-
-class _IFrameElementImpl extends _ElementImpl implements IFrameElement native "*HTMLIFrameElement" {
-
-  String align;
-
-  Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
-  Window get _contentWindow => JS("Window", "#.contentWindow", this);
-
-  String frameBorder;
-
-  String height;
-
-  String longDesc;
-
-  String marginHeight;
-
-  String marginWidth;
-
-  String name;
-
-  String sandbox;
-
-  String scrolling;
-
-  String src;
-
-  String srcdoc;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName IceCandidate
-abstract class IceCandidate {
-
-  factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
-
-  /** @domName IceCandidate.label */
-  String get label;
-
-  /** @domName IceCandidate.toSdp */
-  String toSdp();
-}
-
-class _IceCandidateImpl implements IceCandidate native "*IceCandidate" {
-
-  final String label;
-
-  String toSdp() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ImageData
-abstract class ImageData {
-
-  /** @domName ImageData.data */
-  Uint8ClampedArray get data;
-
-  /** @domName ImageData.height */
-  int get height;
-
-  /** @domName ImageData.width */
-  int get width;
-}
-
-class _ImageDataImpl implements ImageData native "*ImageData" {
-
-  final _Uint8ClampedArrayImpl data;
-
-  final int height;
-
-  final int width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLImageElement
-abstract class ImageElement implements Element {
-
-  factory ImageElement({String src, int width, int height}) {
-    if (!?src) {
-      return _Elements.createImageElement();
-    }
-    if (!?width) {
-      return _Elements.createImageElement(src);
-    }
-    if (!?height) {
-      return _Elements.createImageElement(src, width);
-    }
-    return _Elements.createImageElement(src, width, height);
-  }
-
-  /** @domName HTMLImageElement.align */
-  String align;
-
-  /** @domName HTMLImageElement.alt */
-  String alt;
-
-  /** @domName HTMLImageElement.border */
-  String border;
-
-  /** @domName HTMLImageElement.complete */
-  bool get complete;
-
-  /** @domName HTMLImageElement.crossOrigin */
-  String crossOrigin;
-
-  /** @domName HTMLImageElement.height */
-  int height;
-
-  /** @domName HTMLImageElement.hspace */
-  int hspace;
-
-  /** @domName HTMLImageElement.isMap */
-  bool isMap;
-
-  /** @domName HTMLImageElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLImageElement.lowsrc */
-  String lowsrc;
-
-  /** @domName HTMLImageElement.name */
-  String name;
-
-  /** @domName HTMLImageElement.naturalHeight */
-  int get naturalHeight;
-
-  /** @domName HTMLImageElement.naturalWidth */
-  int get naturalWidth;
-
-  /** @domName HTMLImageElement.src */
-  String src;
-
-  /** @domName HTMLImageElement.useMap */
-  String useMap;
-
-  /** @domName HTMLImageElement.vspace */
-  int vspace;
-
-  /** @domName HTMLImageElement.width */
-  int width;
-
-  /** @domName HTMLImageElement.x */
-  int get x;
-
-  /** @domName HTMLImageElement.y */
-  int get y;
-}
-
-class _ImageElementImpl extends _ElementImpl implements ImageElement native "*HTMLImageElement" {
-
-  String align;
-
-  String alt;
-
-  String border;
-
-  final bool complete;
-
-  String crossOrigin;
-
-  int height;
-
-  int hspace;
-
-  bool isMap;
-
-  String longDesc;
-
-  String lowsrc;
-
-  String name;
-
-  final int naturalHeight;
-
-  final int naturalWidth;
-
-  String src;
-
-  String useMap;
-
-  int vspace;
-
-  int width;
-
-  final int x;
-
-  final int y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLInputElement
-abstract class InputElement implements Element {
-
-  factory InputElement({String type}) {
-    if (!?type) {
-      return _Elements.createInputElement();
-    }
-    return _Elements.createInputElement(type);
-  }
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  InputElementEvents get on;
-
-  /** @domName HTMLInputElement.accept */
-  String accept;
-
-  /** @domName HTMLInputElement.align */
-  String align;
-
-  /** @domName HTMLInputElement.alt */
-  String alt;
-
-  /** @domName HTMLInputElement.autocomplete */
-  String autocomplete;
-
-  /** @domName HTMLInputElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLInputElement.checked */
-  bool checked;
-
-  /** @domName HTMLInputElement.defaultChecked */
-  bool defaultChecked;
-
-  /** @domName HTMLInputElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLInputElement.dirName */
-  String dirName;
-
-  /** @domName HTMLInputElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLInputElement.files */
-  List<File> files;
-
-  /** @domName HTMLInputElement.form */
-  FormElement get form;
-
-  /** @domName HTMLInputElement.formAction */
-  String formAction;
-
-  /** @domName HTMLInputElement.formEnctype */
-  String formEnctype;
-
-  /** @domName HTMLInputElement.formMethod */
-  String formMethod;
-
-  /** @domName HTMLInputElement.formNoValidate */
-  bool formNoValidate;
-
-  /** @domName HTMLInputElement.formTarget */
-  String formTarget;
-
-  /** @domName HTMLInputElement.height */
-  int height;
-
-  /** @domName HTMLInputElement.incremental */
-  bool incremental;
-
-  /** @domName HTMLInputElement.indeterminate */
-  bool indeterminate;
-
-  /** @domName HTMLInputElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLInputElement.list */
-  Element get list;
-
-  /** @domName HTMLInputElement.max */
-  String max;
-
-  /** @domName HTMLInputElement.maxLength */
-  int maxLength;
-
-  /** @domName HTMLInputElement.min */
-  String min;
-
-  /** @domName HTMLInputElement.multiple */
-  bool multiple;
-
-  /** @domName HTMLInputElement.name */
-  String name;
-
-  /** @domName HTMLInputElement.pattern */
-  String pattern;
-
-  /** @domName HTMLInputElement.placeholder */
-  String placeholder;
-
-  /** @domName HTMLInputElement.readOnly */
-  bool readOnly;
-
-  /** @domName HTMLInputElement.required */
-  bool required;
-
-  /** @domName HTMLInputElement.selectionDirection */
-  String selectionDirection;
-
-  /** @domName HTMLInputElement.selectionEnd */
-  int selectionEnd;
-
-  /** @domName HTMLInputElement.selectionStart */
-  int selectionStart;
-
-  /** @domName HTMLInputElement.size */
-  int size;
-
-  /** @domName HTMLInputElement.src */
-  String src;
-
-  /** @domName HTMLInputElement.step */
-  String step;
-
-  /** @domName HTMLInputElement.type */
-  String type;
-
-  /** @domName HTMLInputElement.useMap */
-  String useMap;
-
-  /** @domName HTMLInputElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLInputElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLInputElement.value */
-  String value;
-
-  /** @domName HTMLInputElement.valueAsDate */
-  Date valueAsDate;
-
-  /** @domName HTMLInputElement.valueAsNumber */
-  num valueAsNumber;
-
-  /** @domName HTMLInputElement.webkitEntries */
-  List<Entry> get webkitEntries;
-
-  /** @domName HTMLInputElement.webkitGrammar */
-  bool webkitGrammar;
-
-  /** @domName HTMLInputElement.webkitSpeech */
-  bool webkitSpeech;
-
-  /** @domName HTMLInputElement.webkitdirectory */
-  bool webkitdirectory;
-
-  /** @domName HTMLInputElement.width */
-  int width;
-
-  /** @domName HTMLInputElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLInputElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLInputElement.select */
-  void select();
-
-  /** @domName HTMLInputElement.setCustomValidity */
-  void setCustomValidity(String error);
-
-  /** @domName HTMLInputElement.setRangeText */
-  void setRangeText(String replacement, [int start, int end, String selectionMode]);
-
-  /** @domName HTMLInputElement.setSelectionRange */
-  void setSelectionRange(int start, int end, [String direction]);
-
-  /** @domName HTMLInputElement.stepDown */
-  void stepDown([int n]);
-
-  /** @domName HTMLInputElement.stepUp */
-  void stepUp([int n]);
-}
-
-abstract class InputElementEvents implements ElementEvents {
-
-  EventListenerList get speechChange;
-}
-
-class _InputElementImpl extends _ElementImpl implements InputElement native "*HTMLInputElement" {
-
-  _InputElementEventsImpl get on =>
-    new _InputElementEventsImpl(this);
-
-  String accept;
-
-  String align;
-
-  String alt;
-
-  String autocomplete;
-
-  bool autofocus;
-
-  bool checked;
-
-  bool defaultChecked;
-
-  String defaultValue;
-
-  String dirName;
-
-  bool disabled;
-
-  _FileListImpl files;
-
-  final _FormElementImpl form;
-
-  String formAction;
-
-  String formEnctype;
-
-  String formMethod;
-
-  bool formNoValidate;
-
-  String formTarget;
-
-  int height;
-
-  bool incremental;
-
-  bool indeterminate;
-
-  final List<Node> labels;
-
-  final _ElementImpl list;
-
-  String max;
-
-  int maxLength;
-
-  String min;
-
-  bool multiple;
-
-  String name;
-
-  String pattern;
-
-  String placeholder;
-
-  bool readOnly;
-
-  bool required;
-
-  String selectionDirection;
-
-  int selectionEnd;
-
-  int selectionStart;
-
-  int size;
-
-  String src;
-
-  String step;
-
-  String type;
-
-  String useMap;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  String value;
-
-  Date valueAsDate;
-
-  num valueAsNumber;
-
-  final _EntryArrayImpl webkitEntries;
-
-  bool webkitGrammar;
-
-  bool webkitSpeech;
-
-  bool webkitdirectory;
-
-  int width;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void select() native;
-
-  void setCustomValidity(String error) native;
-
-  void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
-
-  void setSelectionRange(int start, int end, [String direction]) native;
-
-  void stepDown([int n]) native;
-
-  void stepUp([int n]) native;
-}
-
-class _InputElementEventsImpl extends _ElementEventsImpl implements InputElementEvents {
-  _InputElementEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get speechChange => this['webkitSpeechChange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Int16Array
-abstract class Int16Array implements ArrayBufferView, List<int> {
-
-  factory Int16Array(int length) =>
-    _TypedArrayFactoryProvider.createInt16Array(length);
-
-  factory Int16Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createInt16Array_fromList(list);
-
-  factory Int16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createInt16Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 2;
-
-  /** @domName Int16Array.length */
-  int get length;
-
-  /** @domName Int16Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int16Array.subarray */
-  Int16Array subarray(int start, [int end]);
-}
-
-class _Int16ArrayImpl extends _ArrayBufferViewImpl implements Int16Array, List<int>, JavaScriptIndexingBehavior native "*Int16Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Int16ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Int32Array
-abstract class Int32Array implements ArrayBufferView, List<int> {
-
-  factory Int32Array(int length) =>
-    _TypedArrayFactoryProvider.createInt32Array(length);
-
-  factory Int32Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createInt32Array_fromList(list);
-
-  factory Int32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createInt32Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 4;
-
-  /** @domName Int32Array.length */
-  int get length;
-
-  /** @domName Int32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int32Array.subarray */
-  Int32Array subarray(int start, [int end]);
-}
-
-class _Int32ArrayImpl extends _ArrayBufferViewImpl implements Int32Array, List<int>, JavaScriptIndexingBehavior native "*Int32Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Int32ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Int8Array
-abstract class Int8Array implements ArrayBufferView, List<int> {
-
-  factory Int8Array(int length) =>
-    _TypedArrayFactoryProvider.createInt8Array(length);
-
-  factory Int8Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createInt8Array_fromList(list);
-
-  factory Int8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createInt8Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 1;
-
-  /** @domName Int8Array.length */
-  int get length;
-
-  /** @domName Int8Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int8Array.subarray */
-  Int8Array subarray(int start, [int end]);
-}
-
-class _Int8ArrayImpl extends _ArrayBufferViewImpl implements Int8Array, List<int>, JavaScriptIndexingBehavior native "*Int8Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Int8ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName JavaScriptCallFrame
-abstract class JavaScriptCallFrame {
-
-  static const int CATCH_SCOPE = 4;
-
-  static const int CLOSURE_SCOPE = 3;
-
-  static const int GLOBAL_SCOPE = 0;
-
-  static const int LOCAL_SCOPE = 1;
-
-  static const int WITH_SCOPE = 2;
-
-  /** @domName JavaScriptCallFrame.caller */
-  JavaScriptCallFrame get caller;
-
-  /** @domName JavaScriptCallFrame.column */
-  int get column;
-
-  /** @domName JavaScriptCallFrame.functionName */
-  String get functionName;
-
-  /** @domName JavaScriptCallFrame.line */
-  int get line;
-
-  /** @domName JavaScriptCallFrame.scopeChain */
-  List get scopeChain;
-
-  /** @domName JavaScriptCallFrame.sourceID */
-  int get sourceID;
-
-  /** @domName JavaScriptCallFrame.thisObject */
-  Object get thisObject;
-
-  /** @domName JavaScriptCallFrame.type */
-  String get type;
-
-  /** @domName JavaScriptCallFrame.evaluate */
-  void evaluate(String script);
-
-  /** @domName JavaScriptCallFrame.restart */
-  Object restart();
-
-  /** @domName JavaScriptCallFrame.scopeType */
-  int scopeType(int scopeIndex);
-}
-
-class _JavaScriptCallFrameImpl implements JavaScriptCallFrame native "*JavaScriptCallFrame" {
-
-  final _JavaScriptCallFrameImpl caller;
-
-  final int column;
-
-  final String functionName;
-
-  final int line;
-
-  final List scopeChain;
-
-  final int sourceID;
-
-  final Object thisObject;
-
-  final String type;
-
-  void evaluate(String script) native;
-
-  Object restart() native;
-
-  int scopeType(int scopeIndex) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName KeyboardEvent
-abstract class KeyboardEvent implements UIEvent {
-
-  /** @domName KeyboardEvent.altGraphKey */
-  bool get altGraphKey;
-
-  /** @domName KeyboardEvent.altKey */
-  bool get altKey;
-
-  /** @domName KeyboardEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName KeyboardEvent.keyIdentifier */
-  String get keyIdentifier;
-
-  /** @domName KeyboardEvent.keyLocation */
-  int get keyLocation;
-
-  /** @domName KeyboardEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName KeyboardEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName KeyboardEvent.initKeyboardEvent */
-  void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
-}
-
-class _KeyboardEventImpl extends _UIEventImpl implements KeyboardEvent native "*KeyboardEvent" {
-
-  final bool altGraphKey;
-
-  final bool altKey;
-
-  final bool ctrlKey;
-
-  final String keyIdentifier;
-
-  final int keyLocation;
-
-  final bool metaKey;
-
-  final bool shiftKey;
-
-  void initKeyboardEvent(String type, bool canBubble, bool cancelable, _LocalWindowImpl view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLKeygenElement
-abstract class KeygenElement implements Element {
-
-  factory KeygenElement() => _Elements.createKeygenElement();
-
-  /** @domName HTMLKeygenElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLKeygenElement.challenge */
-  String challenge;
-
-  /** @domName HTMLKeygenElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLKeygenElement.form */
-  FormElement get form;
-
-  /** @domName HTMLKeygenElement.keytype */
-  String keytype;
-
-  /** @domName HTMLKeygenElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLKeygenElement.name */
-  String name;
-
-  /** @domName HTMLKeygenElement.type */
-  String get type;
-
-  /** @domName HTMLKeygenElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLKeygenElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLKeygenElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLKeygenElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLKeygenElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-
-class _KeygenElementImpl extends _ElementImpl implements KeygenElement native "*HTMLKeygenElement" {
-
-  bool autofocus;
-
-  String challenge;
-
-  bool disabled;
-
-  final _FormElementImpl form;
-
-  String keytype;
-
-  final List<Node> labels;
-
-  String name;
-
-  final String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLLIElement
-abstract class LIElement implements Element {
-
-  factory LIElement() => _Elements.createLIElement();
-
-  /** @domName HTMLLIElement.type */
-  String type;
-
-  /** @domName HTMLLIElement.value */
-  int value;
-}
-
-class _LIElementImpl extends _ElementImpl implements LIElement native "*HTMLLIElement" {
-
-  String type;
-
-  int value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLLabelElement
-abstract class LabelElement implements Element {
-
-  factory LabelElement() => _Elements.createLabelElement();
-
-  /** @domName HTMLLabelElement.control */
-  Element get control;
-
-  /** @domName HTMLLabelElement.form */
-  FormElement get form;
-
-  /** @domName HTMLLabelElement.htmlFor */
-  String htmlFor;
-}
-
-class _LabelElementImpl extends _ElementImpl implements LabelElement native "*HTMLLabelElement" {
-
-  final _ElementImpl control;
-
-  final _FormElementImpl form;
-
-  String htmlFor;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLLegendElement
-abstract class LegendElement implements Element {
-
-  factory LegendElement() => _Elements.createLegendElement();
-
-  /** @domName HTMLLegendElement.align */
-  String align;
-
-  /** @domName HTMLLegendElement.form */
-  FormElement get form;
-}
-
-class _LegendElementImpl extends _ElementImpl implements LegendElement native "*HTMLLegendElement" {
-
-  String align;
-
-  final _FormElementImpl form;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLLinkElement
-abstract class LinkElement implements Element {
-
-  factory LinkElement() => _Elements.createLinkElement();
-
-  /** @domName HTMLLinkElement.charset */
-  String charset;
-
-  /** @domName HTMLLinkElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLLinkElement.href */
-  String href;
-
-  /** @domName HTMLLinkElement.hreflang */
-  String hreflang;
-
-  /** @domName HTMLLinkElement.media */
-  String media;
-
-  /** @domName HTMLLinkElement.rel */
-  String rel;
-
-  /** @domName HTMLLinkElement.rev */
-  String rev;
-
-  /** @domName HTMLLinkElement.sheet */
-  StyleSheet get sheet;
-
-  /** @domName HTMLLinkElement.sizes */
-  DOMSettableTokenList sizes;
-
-  /** @domName HTMLLinkElement.target */
-  String target;
-
-  /** @domName HTMLLinkElement.type */
-  String type;
-}
-
-class _LinkElementImpl extends _ElementImpl implements LinkElement native "*HTMLLinkElement" {
-
-  String charset;
-
-  bool disabled;
-
-  String href;
-
-  String hreflang;
-
-  String media;
-
-  String rel;
-
-  String rev;
-
-  final _StyleSheetImpl sheet;
-
-  _DOMSettableTokenListImpl sizes;
-
-  String target;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName History
-abstract class LocalHistory implements History {
-
-  /** @domName History.length */
-  int get length;
-
-  /** @domName History.state */
-  dynamic get state;
-
-  /** @domName History.back */
-  void back();
-
-  /** @domName History.forward */
-  void forward();
-
-  /** @domName History.go */
-  void go(int distance);
-
-  /** @domName History.pushState */
-  void pushState(Object data, String title, [String url]);
-
-  /** @domName History.replaceState */
-  void replaceState(Object data, String title, [String url]);
-}
-
-class _LocalHistoryImpl implements LocalHistory native "*History" {
-
-  final int length;
-
-  final dynamic state;
-
-  void back() native;
-
-  void forward() native;
-
-  void go(int distance) native;
-
-  void pushState(Object data, String title, [String url]) native;
-
-  void replaceState(Object data, String title, [String url]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Location
-abstract class LocalLocation implements Location {
-
-  /** @domName Location.ancestorOrigins */
-  List<String> get ancestorOrigins;
-
-  /** @domName Location.hash */
-  String hash;
-
-  /** @domName Location.host */
-  String host;
-
-  /** @domName Location.hostname */
-  String hostname;
-
-  /** @domName Location.href */
-  String href;
-
-  /** @domName Location.origin */
-  String get origin;
-
-  /** @domName Location.pathname */
-  String pathname;
-
-  /** @domName Location.port */
-  String port;
-
-  /** @domName Location.protocol */
-  String protocol;
-
-  /** @domName Location.search */
-  String search;
-
-  /** @domName Location.assign */
-  void assign(String url);
-
-  /** @domName Location.reload */
-  void reload();
-
-  /** @domName Location.replace */
-  void replace(String url);
-
-  /** @domName Location.toString */
-  String toString();
-}
-
-class _LocalLocationImpl implements LocalLocation native "*Location" {
-
-  final _DOMStringListImpl ancestorOrigins;
-
-  String hash;
-
-  String host;
-
-  String hostname;
-
-  String href;
-
-  final String origin;
-
-  String pathname;
-
-  String port;
-
-  String protocol;
-
-  String search;
-
-  void assign(String url) native;
-
-  void reload() native;
-
-  void replace(String url) native;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName LocalMediaStream
-abstract class LocalMediaStream implements MediaStream, EventTarget {
-
-  /** @domName LocalMediaStream.stop */
-  void stop();
-}
-
-class _LocalMediaStreamImpl extends _MediaStreamImpl implements LocalMediaStream native "*LocalMediaStream" {
-
-  void stop() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Window
-abstract class LocalWindow implements EventTarget, Window {
-
-  /**
-   * Register a [port] on this window under the given [name].  This
-   * port may be retrieved by any isolate (or JavaScript script)
-   * running in this window.
-   */
-  void registerPort(String name, SendPortSync port);
-
-  /**
-   * Lookup a port by its [name].  Return null if no port is
-   * registered under [name].
-   */
-  SendPortSync lookupPort(String name);
-
-  /**
-   * Executes a [callback] after the next batch of browser layout measurements
-   * has completed or would have completed if any browser layout measurements
-   * had been scheduled.
-   */
-  void requestLayoutFrame(TimeoutHandler callback);
-
-  /**
-   * Creates a new object URL for the specified object. The URL will be
-   * available until revokeObjectUrl is called.
-   * [object] can be a Blob, MediaStream or MediaSource.
-   */
-  String createObjectUrl(object);
-
-  /** @domName DOMURL.revokeObjectURL */
-  void revokeObjectUrl(String objectUrl);
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  LocalWindowEvents get on;
-
-  static const int PERSISTENT = 1;
-
-  static const int TEMPORARY = 0;
-
-  /** @domName Window.applicationCache */
-  DOMApplicationCache get applicationCache;
-
-  /** @domName Window.clientInformation */
-  Navigator get clientInformation;
-
-  /** @domName Window.closed */
-  bool get closed;
-
-  /** @domName Window.console */
-  Console get console;
-
-  /** @domName Window.crypto */
-  Crypto get crypto;
-
-  /** @domName Window.defaultStatus */
-  String defaultStatus;
-
-  /** @domName Window.defaultstatus */
-  String defaultstatus;
-
-  /** @domName Window.devicePixelRatio */
-  num get devicePixelRatio;
-
-  /** @domName Window.document */
-  Document get document;
-
-  /** @domName Window.event */
-  Event get event;
-
-  /** @domName Window.history */
-  LocalHistory get history;
-
-  /** @domName DOMWindow.indexedDB */
-  IDBFactory get indexedDB;
-
-  /** @domName Window.innerHeight */
-  int get innerHeight;
-
-  /** @domName Window.innerWidth */
-  int get innerWidth;
-
-  /** @domName Window.localStorage */
-  Storage get localStorage;
-
-  /** @domName Window.location */
-  LocalLocation location;
-
-  /** @domName Window.locationbar */
-  BarInfo get locationbar;
-
-  /** @domName Window.menubar */
-  BarInfo get menubar;
-
-  /** @domName Window.name */
-  String name;
-
-  /** @domName Window.navigator */
-  Navigator get navigator;
-
-  /** @domName Window.offscreenBuffering */
-  bool get offscreenBuffering;
-
-  /** @domName Window.opener */
-  Window get opener;
-
-  /** @domName Window.outerHeight */
-  int get outerHeight;
-
-  /** @domName Window.outerWidth */
-  int get outerWidth;
-
-  /** @domName DOMWindow.pagePopupController */
-  PagePopupController get pagePopupController;
-
-  /** @domName Window.pageXOffset */
-  int get pageXOffset;
-
-  /** @domName Window.pageYOffset */
-  int get pageYOffset;
-
-  /** @domName Window.parent */
-  Window get parent;
-
-  /** @domName Window.performance */
-  Performance get performance;
-
-  /** @domName Window.personalbar */
-  BarInfo get personalbar;
-
-  /** @domName Window.screen */
-  Screen get screen;
-
-  /** @domName Window.screenLeft */
-  int get screenLeft;
-
-  /** @domName Window.screenTop */
-  int get screenTop;
-
-  /** @domName Window.screenX */
-  int get screenX;
-
-  /** @domName Window.screenY */
-  int get screenY;
-
-  /** @domName Window.scrollX */
-  int get scrollX;
-
-  /** @domName Window.scrollY */
-  int get scrollY;
-
-  /** @domName Window.scrollbars */
-  BarInfo get scrollbars;
-
-  /** @domName Window.self */
-  Window get self;
-
-  /** @domName Window.sessionStorage */
-  Storage get sessionStorage;
-
-  /** @domName Window.status */
-  String status;
-
-  /** @domName Window.statusbar */
-  BarInfo get statusbar;
-
-  /** @domName Window.styleMedia */
-  StyleMedia get styleMedia;
-
-  /** @domName Window.toolbar */
-  BarInfo get toolbar;
-
-  /** @domName Window.top */
-  Window get top;
-
-  /** @domName DOMWindow.webkitIndexedDB */
-  IDBFactory get webkitIndexedDB;
-
-  /** @domName DOMWindow.webkitNotifications */
-  NotificationCenter get webkitNotifications;
-
-  /** @domName DOMWindow.webkitStorageInfo */
-  StorageInfo get webkitStorageInfo;
-
-  /** @domName Window.window */
-  Window get window;
-
-  /** @domName Window.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Window.alert */
-  void alert(String message);
-
-  /** @domName Window.atob */
-  String atob(String string);
-
-  /** @domName Window.blur */
-  void blur();
-
-  /** @domName Window.btoa */
-  String btoa(String string);
-
-  /** @domName Window.cancelAnimationFrame */
-  void cancelAnimationFrame(int id);
-
-  /** @domName Window.captureEvents */
-  void captureEvents();
-
-  /** @domName Window.clearInterval */
-  void clearInterval(int handle);
-
-  /** @domName Window.clearTimeout */
-  void clearTimeout(int handle);
-
-  /** @domName Window.close */
-  void close();
-
-  /** @domName Window.confirm */
-  bool confirm(String message);
-
-  /** @domName Window.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName Window.find */
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog);
-
-  /** @domName Window.focus */
-  void focus();
-
-  /** @domName Window.getComputedStyle */
-  CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement);
-
-  /** @domName Window.getMatchedCSSRules */
-  List<CSSRule> getMatchedCSSRules(Element element, String pseudoElement);
-
-  /** @domName Window.getSelection */
-  DOMSelection getSelection();
-
-  /** @domName Window.matchMedia */
-  MediaQueryList matchMedia(String query);
-
-  /** @domName Window.moveBy */
-  void moveBy(num x, num y);
-
-  /** @domName Window.moveTo */
-  void moveTo(num x, num y);
-
-  /** @domName Window.open */
-  Window open(String url, String name, [String options]);
-
-  /** @domName DOMWindow.openDatabase */
-  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName Window.postMessage */
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]);
-
-  /** @domName Window.print */
-  void print();
-
-  /** @domName Window.prompt */
-  String prompt(String message, String defaultValue);
-
-  /** @domName Window.releaseEvents */
-  void releaseEvents();
-
-  /** @domName Window.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Window.requestAnimationFrame */
-  int requestAnimationFrame(RequestAnimationFrameCallback callback);
-
-  /** @domName Window.resizeBy */
-  void resizeBy(num x, num y);
-
-  /** @domName Window.resizeTo */
-  void resizeTo(num width, num height);
-
-  /** @domName Window.scroll */
-  void scroll(int x, int y);
-
-  /** @domName Window.scrollBy */
-  void scrollBy(int x, int y);
-
-  /** @domName Window.scrollTo */
-  void scrollTo(int x, int y);
-
-  /** @domName Window.setInterval */
-  int setInterval(TimeoutHandler handler, int timeout);
-
-  /** @domName Window.setTimeout */
-  int setTimeout(TimeoutHandler handler, int timeout);
-
-  /** @domName Window.showModalDialog */
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]);
-
-  /** @domName Window.stop */
-  void stop();
-
-  /** @domName Window.webkitCancelAnimationFrame */
-  void webkitCancelAnimationFrame(int id);
-
-  /** @domName Window.webkitConvertPointFromNodeToPage */
-  Point webkitConvertPointFromNodeToPage(Node node, Point p);
-
-  /** @domName Window.webkitConvertPointFromPageToNode */
-  Point webkitConvertPointFromPageToNode(Node node, Point p);
-
-  /** @domName Window.webkitRequestAnimationFrame */
-  int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
-
-  /** @domName DOMWindow.webkitRequestFileSystem */
-  void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]);
-
-}
-
-abstract class LocalWindowEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get canPlay;
-
-  EventListenerList get canPlayThrough;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get deviceMotion;
-
-  EventListenerList get deviceOrientation;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get durationChange;
-
-  EventListenerList get emptied;
-
-  EventListenerList get ended;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get loadedData;
-
-  EventListenerList get loadedMetadata;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get message;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get pageHide;
-
-  EventListenerList get pageShow;
-
-  EventListenerList get pause;
-
-  EventListenerList get play;
-
-  EventListenerList get playing;
-
-  EventListenerList get popState;
-
-  EventListenerList get progress;
-
-  EventListenerList get rateChange;
-
-  EventListenerList get reset;
-
-  EventListenerList get resize;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get seeked;
-
-  EventListenerList get seeking;
-
-  EventListenerList get select;
-
-  EventListenerList get stalled;
-
-  EventListenerList get storage;
-
-  EventListenerList get submit;
-
-  EventListenerList get suspend;
-
-  EventListenerList get timeUpdate;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get unload;
-
-  EventListenerList get volumeChange;
-
-  EventListenerList get waiting;
-
-  EventListenerList get animationEnd;
-
-  EventListenerList get animationIteration;
-
-  EventListenerList get animationStart;
-
-  EventListenerList get transitionEnd;
-}
-// 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 _LocalWindowImpl extends _EventTargetImpl implements LocalWindow native "@*DOMWindow" {
-
-  _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
-
-  Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
-
-  Window _open3(url, name, options) =>
-      JS('Window', '#.open(#,#,#)', this, url, name, options);
-
-  Window open(String url, String name, [String options]) {
-    if (options == null) {
-      return _DOMWindowCrossFrameImpl._createSafe(_open2(url, name));
-    } else {
-      return _DOMWindowCrossFrameImpl._createSafe(_open3(url, name, options));
-    }
-  }
-
-  // API level getter and setter for Location.
-  // TODO: The cross domain safe wrapper can be inserted here or folded into
-  // _LocationWrapper.
-  LocalLocation get location => _get_location();
-
-  // TODO: consider forcing users to do: window.location.assign('string').
-  /**
-   * Sets the window's location, which causes the browser to navigate to the new
-   * location. [value] may be a Location object or a string.
-   */
-  void set location(value) => _set_location(value);
-
-  // Firefox work-around for Location.  The Firefox location object cannot be
-  // made to behave like a Dart object so must be wrapped.
-
-  LocalLocation _get_location() {
-    var result = _location;
-    if (_isDartLocation(result)) return result;  // e.g. on Chrome.
-    if (null == _location_wrapper) {
-      _location_wrapper = new _LocationWrapper(result);
-    }
-    return _location_wrapper;
-  }
-
-  void _set_location(value) {
-    if (value is _LocationWrapper) {
-      _location = value._ptr;
-    } else {
-      _location = value;
-    }
-  }
-
-  var _location_wrapper;  // Cached wrapped Location object.
-
-  // Native getter and setter to access raw Location object.
-  Location get _location => JS('Location', '#.location', this);
-  void set _location(Location value) {
-    JS('void', '#.location = #', this, value);
-  }
-  // Prevent compiled from thinking 'location' property is available for a Dart
-  // member.
-  _protect_location() native 'location';
-
-  static _isDartLocation(thing) {
-    // On Firefox the code that implements 'is Location' fails to find the patch
-    // stub on Object.prototype and throws an exception.
-    try {
-      return thing is Location;
-    } catch (e) {
-      return false;
-    }
-  }
-
-
-  void requestLayoutFrame(TimeoutHandler callback) {
-    _addMeasurementFrameCallback(callback);
-  }
-
-  /** @domName DOMWindow.requestAnimationFrame */
-  int requestAnimationFrame(RequestAnimationFrameCallback callback) {
-    _ensureRequestAnimationFrame();
-    return _requestAnimationFrame(callback);
-  }
-
-  void cancelAnimationFrame(id) {
-    _ensureRequestAnimationFrame();
-    _cancelAnimationFrame(id);
-  }
-
-  int _requestAnimationFrame(RequestAnimationFrameCallback callback)
-      native 'requestAnimationFrame';
-
-  void _cancelAnimationFrame(int id)
-      native 'cancelAnimationFrame';
-
-  _ensureRequestAnimationFrame() {
-    if (JS('bool',
-           '!!(#.requestAnimationFrame && #.cancelAnimationFrame)', this, this))
-      return;
-
-    JS('void',
-       r"""
-  (function($this) {
-   var vendors = ['ms', 'moz', 'webkit', 'o'];
-   for (var i = 0; i < vendors.length && !$this.requestAnimationFrame; ++i) {
-     $this.requestAnimationFrame = $this[vendors[i] + 'RequestAnimationFrame'];
-     $this.cancelAnimationFrame =
-         $this[vendors[i]+'CancelAnimationFrame'] ||
-         $this[vendors[i]+'CancelRequestAnimationFrame'];
-   }
-   if ($this.requestAnimationFrame && $this.cancelAnimationFrame) return;
-   $this.requestAnimationFrame = function(callback) {
-      return window.setTimeout(function() {
-        callback(Date.now());
-      }, 16 /* 16ms ~= 60fps */);
-   };
-   $this.cancelAnimationFrame = function(id) { clearTimeout(id); }
-  })(#)""",
-       this);
-  }
-
-
-  _IDBFactoryImpl get indexedDB => _get_indexedDB();
-
-  _IDBFactoryImpl _get_indexedDB() =>
-      JS('_IDBFactoryImpl',
-         '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
-         this, this, this);
-
-  // TODO(kasperl): Document these.
-  lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
-    return _deserialize(port);
-  }
-
-  registerPort(String name, var port) {
-    var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
-  }
-
-  String createObjectUrl(object) =>
-      JS('String',
-         '(window.URL || window.webkitURL).createObjectURL(#)', object);
-
-  void revokeObjectUrl(String objectUrl) {
-    JS('void',
-       '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl);
-  }
-
-
-  _LocalWindowEventsImpl get on =>
-    new _LocalWindowEventsImpl(this);
-
-  final _DOMApplicationCacheImpl applicationCache;
-
-  final _NavigatorImpl clientInformation;
-
-  final bool closed;
-
-  final _ConsoleImpl console;
-
-  final _CryptoImpl crypto;
-
-  String defaultStatus;
-
-  String defaultstatus;
-
-  final num devicePixelRatio;
-
-  final _EventImpl event;
-
-  final _LocalHistoryImpl history;
-
-  final int innerHeight;
-
-  final int innerWidth;
-
-  final _StorageImpl localStorage;
-
-  final _BarInfoImpl locationbar;
-
-  final _BarInfoImpl menubar;
-
-  String name;
-
-  final _NavigatorImpl navigator;
-
-  final bool offscreenBuffering;
-
-  Window get opener => _convertNativeToDart_Window(this._opener);
-  Window get _opener => JS("Window", "#.opener", this);
-
-  final int outerHeight;
-
-  final int outerWidth;
-
-  final _PagePopupControllerImpl pagePopupController;
-
-  final int pageXOffset;
-
-  final int pageYOffset;
-
-  Window get parent => _convertNativeToDart_Window(this._parent);
-  Window get _parent => JS("Window", "#.parent", this);
-
-  final _PerformanceImpl performance;
-
-  final _BarInfoImpl personalbar;
-
-  final _ScreenImpl screen;
-
-  final int screenLeft;
-
-  final int screenTop;
-
-  final int screenX;
-
-  final int screenY;
-
-  final int scrollX;
-
-  final int scrollY;
-
-  final _BarInfoImpl scrollbars;
-
-  Window get self => _convertNativeToDart_Window(this._self);
-  Window get _self => JS("Window", "#.self", this);
-
-  final _StorageImpl sessionStorage;
-
-  String status;
-
-  final _BarInfoImpl statusbar;
-
-  final _StyleMediaImpl styleMedia;
-
-  final _BarInfoImpl toolbar;
-
-  Window get top => _convertNativeToDart_Window(this._top);
-  Window get _top => JS("Window", "#.top", this);
-
-  final _IDBFactoryImpl webkitIndexedDB;
-
-  final _NotificationCenterImpl webkitNotifications;
-
-  final _StorageInfoImpl webkitStorageInfo;
-
-  Window get window => _convertNativeToDart_Window(this._window);
-  Window get _window => JS("Window", "#.window", this);
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void alert(String message) native;
-
-  String atob(String string) native;
-
-  void blur() native;
-
-  String btoa(String string) native;
-
-  void captureEvents() native;
-
-  void clearInterval(int handle) native;
-
-  void clearTimeout(int handle) native;
-
-  void close() native;
-
-  bool confirm(String message) native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native;
-
-  void focus() native;
-
-  _CSSStyleDeclarationImpl $dom_getComputedStyle(_ElementImpl element, String pseudoElement) native "getComputedStyle";
-
-  _CSSRuleListImpl getMatchedCSSRules(_ElementImpl element, String pseudoElement) native;
-
-  _DOMSelectionImpl getSelection() native;
-
-  _MediaQueryListImpl matchMedia(String query) native;
-
-  void moveBy(num x, num y) native;
-
-  void moveTo(num x, num y) native;
-
-  _DatabaseImpl openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
-
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [messagePorts]) {
-    if (?message &&
-        !?messagePorts) {
-      var message_1 = _convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, targetOrigin);
-      return;
-    }
-    if (?message &&
-        (messagePorts is List || messagePorts == null)) {
-      var message_2 = _convertDartToNative_SerializedScriptValue(message);
-      _postMessage_2(message_2, targetOrigin, messagePorts);
-      return;
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  void _postMessage_1(message, targetOrigin) native "postMessage";
-  void _postMessage_2(message, targetOrigin, List messagePorts) native "postMessage";
-
-  void print() native;
-
-  String prompt(String message, String defaultValue) native;
-
-  void releaseEvents() native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void resizeBy(num x, num y) native;
-
-  void resizeTo(num width, num height) native;
-
-  void scroll(int x, int y) native;
-
-  void scrollBy(int x, int y) native;
-
-  void scrollTo(int x, int y) native;
-
-  int setInterval(TimeoutHandler handler, int timeout) native;
-
-  int setTimeout(TimeoutHandler handler, int timeout) native;
-
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native;
-
-  void stop() native;
-
-  _PointImpl webkitConvertPointFromNodeToPage(_NodeImpl node, _PointImpl p) native;
-
-  _PointImpl webkitConvertPointFromPageToNode(_NodeImpl node, _PointImpl p) native;
-
-  void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native;
-
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
-
-}
-
-class _LocalWindowEventsImpl extends _EventsImpl implements LocalWindowEvents {
-  _LocalWindowEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get beforeUnload => this['beforeunload'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get canPlay => this['canplay'];
-
-  EventListenerList get canPlayThrough => this['canplaythrough'];
-
-  EventListenerList get change => this['change'];
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get contextMenu => this['contextmenu'];
-
-  EventListenerList get doubleClick => this['dblclick'];
-
-  EventListenerList get deviceMotion => this['devicemotion'];
-
-  EventListenerList get deviceOrientation => this['deviceorientation'];
-
-  EventListenerList get drag => this['drag'];
-
-  EventListenerList get dragEnd => this['dragend'];
-
-  EventListenerList get dragEnter => this['dragenter'];
-
-  EventListenerList get dragLeave => this['dragleave'];
-
-  EventListenerList get dragOver => this['dragover'];
-
-  EventListenerList get dragStart => this['dragstart'];
-
-  EventListenerList get drop => this['drop'];
-
-  EventListenerList get durationChange => this['durationchange'];
-
-  EventListenerList get emptied => this['emptied'];
-
-  EventListenerList get ended => this['ended'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get hashChange => this['hashchange'];
-
-  EventListenerList get input => this['input'];
-
-  EventListenerList get invalid => this['invalid'];
-
-  EventListenerList get keyDown => this['keydown'];
-
-  EventListenerList get keyPress => this['keypress'];
-
-  EventListenerList get keyUp => this['keyup'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get loadedData => this['loadeddata'];
-
-  EventListenerList get loadedMetadata => this['loadedmetadata'];
-
-  EventListenerList get loadStart => this['loadstart'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get mouseDown => this['mousedown'];
-
-  EventListenerList get mouseMove => this['mousemove'];
-
-  EventListenerList get mouseOut => this['mouseout'];
-
-  EventListenerList get mouseOver => this['mouseover'];
-
-  EventListenerList get mouseUp => this['mouseup'];
-
-  EventListenerList get mouseWheel => this['mousewheel'];
-
-  EventListenerList get offline => this['offline'];
-
-  EventListenerList get online => this['online'];
-
-  EventListenerList get pageHide => this['pagehide'];
-
-  EventListenerList get pageShow => this['pageshow'];
-
-  EventListenerList get pause => this['pause'];
-
-  EventListenerList get play => this['play'];
-
-  EventListenerList get playing => this['playing'];
-
-  EventListenerList get popState => this['popstate'];
-
-  EventListenerList get progress => this['progress'];
-
-  EventListenerList get rateChange => this['ratechange'];
-
-  EventListenerList get reset => this['reset'];
-
-  EventListenerList get resize => this['resize'];
-
-  EventListenerList get scroll => this['scroll'];
-
-  EventListenerList get search => this['search'];
-
-  EventListenerList get seeked => this['seeked'];
-
-  EventListenerList get seeking => this['seeking'];
-
-  EventListenerList get select => this['select'];
-
-  EventListenerList get stalled => this['stalled'];
-
-  EventListenerList get storage => this['storage'];
-
-  EventListenerList get submit => this['submit'];
-
-  EventListenerList get suspend => this['suspend'];
-
-  EventListenerList get timeUpdate => this['timeupdate'];
-
-  EventListenerList get touchCancel => this['touchcancel'];
-
-  EventListenerList get touchEnd => this['touchend'];
-
-  EventListenerList get touchMove => this['touchmove'];
-
-  EventListenerList get touchStart => this['touchstart'];
-
-  EventListenerList get unload => this['unload'];
-
-  EventListenerList get volumeChange => this['volumechange'];
-
-  EventListenerList get waiting => this['waiting'];
-
-  EventListenerList get animationEnd => this['webkitAnimationEnd'];
-
-  EventListenerList get animationIteration => this['webkitAnimationIteration'];
-
-  EventListenerList get animationStart => this['webkitAnimationStart'];
-
-  EventListenerList get transitionEnd => this['webkitTransitionEnd'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMapElement
-abstract class MapElement implements Element {
-
-  factory MapElement() => _Elements.createMapElement();
-
-  /** @domName HTMLMapElement.areas */
-  HTMLCollection get areas;
-
-  /** @domName HTMLMapElement.name */
-  String name;
-}
-
-class _MapElementImpl extends _ElementImpl implements MapElement native "*HTMLMapElement" {
-
-  final _HTMLCollectionImpl areas;
-
-  String name;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMarqueeElement
-abstract class MarqueeElement implements Element {
-
-  /** @domName HTMLMarqueeElement.behavior */
-  String behavior;
-
-  /** @domName HTMLMarqueeElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLMarqueeElement.direction */
-  String direction;
-
-  /** @domName HTMLMarqueeElement.height */
-  String height;
-
-  /** @domName HTMLMarqueeElement.hspace */
-  int hspace;
-
-  /** @domName HTMLMarqueeElement.loop */
-  int loop;
-
-  /** @domName HTMLMarqueeElement.scrollAmount */
-  int scrollAmount;
-
-  /** @domName HTMLMarqueeElement.scrollDelay */
-  int scrollDelay;
-
-  /** @domName HTMLMarqueeElement.trueSpeed */
-  bool trueSpeed;
-
-  /** @domName HTMLMarqueeElement.vspace */
-  int vspace;
-
-  /** @domName HTMLMarqueeElement.width */
-  String width;
-
-  /** @domName HTMLMarqueeElement.start */
-  void start();
-
-  /** @domName HTMLMarqueeElement.stop */
-  void stop();
-}
-
-class _MarqueeElementImpl extends _ElementImpl implements MarqueeElement native "*HTMLMarqueeElement" {
-
-  String behavior;
-
-  String bgColor;
-
-  String direction;
-
-  String height;
-
-  int hspace;
-
-  int loop;
-
-  int scrollAmount;
-
-  int scrollDelay;
-
-  bool trueSpeed;
-
-  int vspace;
-
-  String width;
-
-  void start() native;
-
-  void stop() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaController
-abstract class MediaController implements EventTarget {
-
-  factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
-
-  /** @domName MediaController.buffered */
-  TimeRanges get buffered;
-
-  /** @domName MediaController.currentTime */
-  num currentTime;
-
-  /** @domName MediaController.defaultPlaybackRate */
-  num defaultPlaybackRate;
-
-  /** @domName MediaController.duration */
-  num get duration;
-
-  /** @domName MediaController.muted */
-  bool muted;
-
-  /** @domName MediaController.paused */
-  bool get paused;
-
-  /** @domName MediaController.playbackRate */
-  num playbackRate;
-
-  /** @domName MediaController.played */
-  TimeRanges get played;
-
-  /** @domName MediaController.seekable */
-  TimeRanges get seekable;
-
-  /** @domName MediaController.volume */
-  num volume;
-
-  /** @domName MediaController.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaController.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName MediaController.pause */
-  void pause();
-
-  /** @domName MediaController.play */
-  void play();
-
-  /** @domName MediaController.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-class _MediaControllerImpl extends _EventTargetImpl implements MediaController native "*MediaController" {
-
-  final _TimeRangesImpl buffered;
-
-  num currentTime;
-
-  num defaultPlaybackRate;
-
-  final num duration;
-
-  bool muted;
-
-  final bool paused;
-
-  num playbackRate;
-
-  final _TimeRangesImpl played;
-
-  final _TimeRangesImpl seekable;
-
-  num volume;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void pause() native;
-
-  void play() native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMediaElement
-abstract class MediaElement implements Element {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MediaElementEvents get on;
-
-  static const int HAVE_CURRENT_DATA = 2;
-
-  static const int HAVE_ENOUGH_DATA = 4;
-
-  static const int HAVE_FUTURE_DATA = 3;
-
-  static const int HAVE_METADATA = 1;
-
-  static const int HAVE_NOTHING = 0;
-
-  static const int NETWORK_EMPTY = 0;
-
-  static const int NETWORK_IDLE = 1;
-
-  static const int NETWORK_LOADING = 2;
-
-  static const int NETWORK_NO_SOURCE = 3;
-
-  /** @domName HTMLMediaElement.autoplay */
-  bool autoplay;
-
-  /** @domName HTMLMediaElement.buffered */
-  TimeRanges get buffered;
-
-  /** @domName HTMLMediaElement.controller */
-  MediaController controller;
-
-  /** @domName HTMLMediaElement.controls */
-  bool controls;
-
-  /** @domName HTMLMediaElement.currentSrc */
-  String get currentSrc;
-
-  /** @domName HTMLMediaElement.currentTime */
-  num currentTime;
-
-  /** @domName HTMLMediaElement.defaultMuted */
-  bool defaultMuted;
-
-  /** @domName HTMLMediaElement.defaultPlaybackRate */
-  num defaultPlaybackRate;
-
-  /** @domName HTMLMediaElement.duration */
-  num get duration;
-
-  /** @domName HTMLMediaElement.ended */
-  bool get ended;
-
-  /** @domName HTMLMediaElement.error */
-  MediaError get error;
-
-  /** @domName HTMLMediaElement.initialTime */
-  num get initialTime;
-
-  /** @domName HTMLMediaElement.loop */
-  bool loop;
-
-  /** @domName HTMLMediaElement.mediaGroup */
-  String mediaGroup;
-
-  /** @domName HTMLMediaElement.muted */
-  bool muted;
-
-  /** @domName HTMLMediaElement.networkState */
-  int get networkState;
-
-  /** @domName HTMLMediaElement.paused */
-  bool get paused;
-
-  /** @domName HTMLMediaElement.playbackRate */
-  num playbackRate;
-
-  /** @domName HTMLMediaElement.played */
-  TimeRanges get played;
-
-  /** @domName HTMLMediaElement.preload */
-  String preload;
-
-  /** @domName HTMLMediaElement.readyState */
-  int get readyState;
-
-  /** @domName HTMLMediaElement.seekable */
-  TimeRanges get seekable;
-
-  /** @domName HTMLMediaElement.seeking */
-  bool get seeking;
-
-  /** @domName HTMLMediaElement.src */
-  String src;
-
-  /** @domName HTMLMediaElement.startTime */
-  num get startTime;
-
-  /** @domName HTMLMediaElement.textTracks */
-  TextTrackList get textTracks;
-
-  /** @domName HTMLMediaElement.volume */
-  num volume;
-
-  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
-  int get webkitAudioDecodedByteCount;
-
-  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
-  bool webkitClosedCaptionsVisible;
-
-  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
-  bool get webkitHasClosedCaptions;
-
-  /** @domName HTMLMediaElement.webkitPreservesPitch */
-  bool webkitPreservesPitch;
-
-  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
-  int get webkitVideoDecodedByteCount;
-
-  /** @domName HTMLMediaElement.addTextTrack */
-  TextTrack addTextTrack(String kind, [String label, String language]);
-
-  /** @domName HTMLMediaElement.canPlayType */
-  String canPlayType(String type, String keySystem);
-
-  /** @domName HTMLMediaElement.load */
-  void load();
-
-  /** @domName HTMLMediaElement.pause */
-  void pause();
-
-  /** @domName HTMLMediaElement.play */
-  void play();
-
-  /** @domName HTMLMediaElement.webkitAddKey */
-  void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]);
-
-  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
-  void webkitCancelKeyRequest(String keySystem, String sessionId);
-
-  /** @domName HTMLMediaElement.webkitGenerateKeyRequest */
-  void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]);
-}
-
-abstract class MediaElementEvents implements ElementEvents {
-
-  EventListenerList get canPlay;
-
-  EventListenerList get canPlayThrough;
-
-  EventListenerList get durationChange;
-
-  EventListenerList get emptied;
-
-  EventListenerList get ended;
-
-  EventListenerList get loadedData;
-
-  EventListenerList get loadedMetadata;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get pause;
-
-  EventListenerList get play;
-
-  EventListenerList get playing;
-
-  EventListenerList get progress;
-
-  EventListenerList get rateChange;
-
-  EventListenerList get seeked;
-
-  EventListenerList get seeking;
-
-  EventListenerList get show;
-
-  EventListenerList get stalled;
-
-  EventListenerList get suspend;
-
-  EventListenerList get timeUpdate;
-
-  EventListenerList get volumeChange;
-
-  EventListenerList get waiting;
-
-  EventListenerList get keyAdded;
-
-  EventListenerList get keyError;
-
-  EventListenerList get keyMessage;
-
-  EventListenerList get needKey;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaElementAudioSourceNode
-abstract class MediaElementAudioSourceNode implements AudioSourceNode {
-
-  /** @domName MediaElementAudioSourceNode.mediaElement */
-  MediaElement get mediaElement;
-}
-
-class _MediaElementAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaElementAudioSourceNode native "*MediaElementAudioSourceNode" {
-
-  final _MediaElementImpl mediaElement;
-}
-
-class _MediaElementImpl extends _ElementImpl implements MediaElement native "*HTMLMediaElement" {
-
-  _MediaElementEventsImpl get on =>
-    new _MediaElementEventsImpl(this);
-
-  bool autoplay;
-
-  final _TimeRangesImpl buffered;
-
-  _MediaControllerImpl controller;
-
-  bool controls;
-
-  final String currentSrc;
-
-  num currentTime;
-
-  bool defaultMuted;
-
-  num defaultPlaybackRate;
-
-  final num duration;
-
-  final bool ended;
-
-  final _MediaErrorImpl error;
-
-  final num initialTime;
-
-  bool loop;
-
-  String mediaGroup;
-
-  bool muted;
-
-  final int networkState;
-
-  final bool paused;
-
-  num playbackRate;
-
-  final _TimeRangesImpl played;
-
-  String preload;
-
-  final int readyState;
-
-  final _TimeRangesImpl seekable;
-
-  final bool seeking;
-
-  String src;
-
-  final num startTime;
-
-  final _TextTrackListImpl textTracks;
-
-  num volume;
-
-  final int webkitAudioDecodedByteCount;
-
-  bool webkitClosedCaptionsVisible;
-
-  final bool webkitHasClosedCaptions;
-
-  bool webkitPreservesPitch;
-
-  final int webkitVideoDecodedByteCount;
-
-  _TextTrackImpl addTextTrack(String kind, [String label, String language]) native;
-
-  String canPlayType(String type, String keySystem) native;
-
-  void load() native;
-
-  void pause() native;
-
-  void play() native;
-
-  void webkitAddKey(String keySystem, _Uint8ArrayImpl key, [_Uint8ArrayImpl initData, String sessionId]) native;
-
-  void webkitCancelKeyRequest(String keySystem, String sessionId) native;
-
-  void webkitGenerateKeyRequest(String keySystem, [_Uint8ArrayImpl initData]) native;
-}
-
-class _MediaElementEventsImpl extends _ElementEventsImpl implements MediaElementEvents {
-  _MediaElementEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get canPlay => this['canplay'];
-
-  EventListenerList get canPlayThrough => this['canplaythrough'];
-
-  EventListenerList get durationChange => this['durationchange'];
-
-  EventListenerList get emptied => this['emptied'];
-
-  EventListenerList get ended => this['ended'];
-
-  EventListenerList get loadedData => this['loadeddata'];
-
-  EventListenerList get loadedMetadata => this['loadedmetadata'];
-
-  EventListenerList get loadStart => this['loadstart'];
-
-  EventListenerList get pause => this['pause'];
-
-  EventListenerList get play => this['play'];
-
-  EventListenerList get playing => this['playing'];
-
-  EventListenerList get progress => this['progress'];
-
-  EventListenerList get rateChange => this['ratechange'];
-
-  EventListenerList get seeked => this['seeked'];
-
-  EventListenerList get seeking => this['seeking'];
-
-  EventListenerList get show => this['show'];
-
-  EventListenerList get stalled => this['stalled'];
-
-  EventListenerList get suspend => this['suspend'];
-
-  EventListenerList get timeUpdate => this['timeupdate'];
-
-  EventListenerList get volumeChange => this['volumechange'];
-
-  EventListenerList get waiting => this['waiting'];
-
-  EventListenerList get keyAdded => this['webkitkeyadded'];
-
-  EventListenerList get keyError => this['webkitkeyerror'];
-
-  EventListenerList get keyMessage => this['webkitkeymessage'];
-
-  EventListenerList get needKey => this['webkitneedkey'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaError
-abstract class MediaError {
-
-  static const int MEDIA_ERR_ABORTED = 1;
-
-  static const int MEDIA_ERR_DECODE = 3;
-
-  static const int MEDIA_ERR_ENCRYPTED = 5;
-
-  static const int MEDIA_ERR_NETWORK = 2;
-
-  static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
-
-  /** @domName MediaError.code */
-  int get code;
-}
-
-class _MediaErrorImpl implements MediaError native "*MediaError" {
-
-  final int code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaKeyError
-abstract class MediaKeyError {
-
-  static const int MEDIA_KEYERR_CLIENT = 2;
-
-  static const int MEDIA_KEYERR_DOMAIN = 6;
-
-  static const int MEDIA_KEYERR_HARDWARECHANGE = 5;
-
-  static const int MEDIA_KEYERR_OUTPUT = 4;
-
-  static const int MEDIA_KEYERR_SERVICE = 3;
-
-  static const int MEDIA_KEYERR_UNKNOWN = 1;
-
-  /** @domName MediaKeyError.code */
-  int get code;
-}
-
-class _MediaKeyErrorImpl implements MediaKeyError native "*MediaKeyError" {
-
-  final int code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaKeyEvent
-abstract class MediaKeyEvent implements Event {
-
-  /** @domName MediaKeyEvent.defaultURL */
-  String get defaultURL;
-
-  /** @domName MediaKeyEvent.errorCode */
-  MediaKeyError get errorCode;
-
-  /** @domName MediaKeyEvent.initData */
-  Uint8Array get initData;
-
-  /** @domName MediaKeyEvent.keySystem */
-  String get keySystem;
-
-  /** @domName MediaKeyEvent.message */
-  Uint8Array get message;
-
-  /** @domName MediaKeyEvent.sessionId */
-  String get sessionId;
-
-  /** @domName MediaKeyEvent.systemCode */
-  int get systemCode;
-}
-
-class _MediaKeyEventImpl extends _EventImpl implements MediaKeyEvent native "*MediaKeyEvent" {
-
-  final String defaultURL;
-
-  final _MediaKeyErrorImpl errorCode;
-
-  final _Uint8ArrayImpl initData;
-
-  final String keySystem;
-
-  final _Uint8ArrayImpl message;
-
-  final String sessionId;
-
-  final int systemCode;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaList
-abstract class MediaList {
-
-  /** @domName MediaList.length */
-  int get length;
-
-  /** @domName MediaList.mediaText */
-  String mediaText;
-
-  /** @domName MediaList.appendMedium */
-  void appendMedium(String newMedium);
-
-  /** @domName MediaList.deleteMedium */
-  void deleteMedium(String oldMedium);
-
-  /** @domName MediaList.item */
-  String item(int index);
-}
-
-class _MediaListImpl implements MediaList native "*MediaList" {
-
-  final int length;
-
-  String mediaText;
-
-  void appendMedium(String newMedium) native;
-
-  void deleteMedium(String oldMedium) native;
-
-  String item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaQueryList
-abstract class MediaQueryList {
-
-  /** @domName MediaQueryList.matches */
-  bool get matches;
-
-  /** @domName MediaQueryList.media */
-  String get media;
-
-  /** @domName MediaQueryList.addListener */
-  void addListener(MediaQueryListListener listener);
-
-  /** @domName MediaQueryList.removeListener */
-  void removeListener(MediaQueryListListener listener);
-}
-
-class _MediaQueryListImpl implements MediaQueryList native "*MediaQueryList" {
-
-  final bool matches;
-
-  final String media;
-
-  void addListener(MediaQueryListListener listener) native;
-
-  void removeListener(MediaQueryListListener listener) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaQueryListListener
-abstract class MediaQueryListListener {
-
-  /** @domName MediaQueryListListener.queryChanged */
-  void queryChanged(MediaQueryList list);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaSource
-abstract class MediaSource implements EventTarget {
-
-  factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
-
-  /** @domName MediaSource.activeSourceBuffers */
-  SourceBufferList get activeSourceBuffers;
-
-  /** @domName MediaSource.duration */
-  num duration;
-
-  /** @domName MediaSource.readyState */
-  String get readyState;
-
-  /** @domName MediaSource.sourceBuffers */
-  SourceBufferList get sourceBuffers;
-
-  /** @domName MediaSource.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaSource.addSourceBuffer */
-  SourceBuffer addSourceBuffer(String type);
-
-  /** @domName MediaSource.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaSource.endOfStream */
-  void endOfStream(String error);
-
-  /** @domName MediaSource.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaSource.removeSourceBuffer */
-  void removeSourceBuffer(SourceBuffer buffer);
-}
-
-class _MediaSourceImpl extends _EventTargetImpl implements MediaSource native "*MediaSource" {
-
-  final _SourceBufferListImpl activeSourceBuffers;
-
-  num duration;
-
-  final String readyState;
-
-  final _SourceBufferListImpl sourceBuffers;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  _SourceBufferImpl addSourceBuffer(String type) native;
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void endOfStream(String error) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void removeSourceBuffer(_SourceBufferImpl buffer) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStream
-abstract class MediaStream implements EventTarget {
-
-  factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => _MediaStreamFactoryProvider.createMediaStream(audioTracks, videoTracks);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MediaStreamEvents get on;
-
-  static const int ENDED = 2;
-
-  static const int LIVE = 1;
-
-  /** @domName MediaStream.audioTracks */
-  MediaStreamTrackList get audioTracks;
-
-  /** @domName MediaStream.label */
-  String get label;
-
-  /** @domName MediaStream.readyState */
-  int get readyState;
-
-  /** @domName MediaStream.videoTracks */
-  MediaStreamTrackList get videoTracks;
-
-  /** @domName MediaStream.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaStream.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaStream.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class MediaStreamEvents implements Events {
-
-  EventListenerList get ended;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamAudioSourceNode
-abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
-
-  /** @domName MediaStreamAudioSourceNode.mediaStream */
-  MediaStream get mediaStream;
-}
-
-class _MediaStreamAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaStreamAudioSourceNode native "*MediaStreamAudioSourceNode" {
-
-  final _MediaStreamImpl mediaStream;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamEvent
-abstract class MediaStreamEvent implements Event {
-
-  /** @domName MediaStreamEvent.stream */
-  MediaStream get stream;
-}
-
-class _MediaStreamEventImpl extends _EventImpl implements MediaStreamEvent native "*MediaStreamEvent" {
-
-  final _MediaStreamImpl stream;
-}
-
-class _MediaStreamImpl extends _EventTargetImpl implements MediaStream native "*MediaStream" {
-
-  _MediaStreamEventsImpl get on =>
-    new _MediaStreamEventsImpl(this);
-
-  final _MediaStreamTrackListImpl audioTracks;
-
-  final String label;
-
-  final int readyState;
-
-  final _MediaStreamTrackListImpl videoTracks;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _MediaStreamEventsImpl extends _EventsImpl implements MediaStreamEvents {
-  _MediaStreamEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get ended => this['ended'];
-}
-
-class _MediaStreamListImpl implements List<MediaStream>, JavaScriptIndexingBehavior native "*MediaStreamList" {
-
-  final int length;
-
-  _MediaStreamImpl operator[](int index) => JS("_MediaStreamImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _MediaStreamImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<MediaStream> mixins.
-  // MediaStream is the element type.
-
-  // From Iterable<MediaStream>:
-
-  Iterator<MediaStream> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<MediaStream>(this);
-  }
-
-  // From Collection<MediaStream>:
-
-  void add(MediaStream value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(MediaStream value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<MediaStream> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(MediaStream element) => _Collections.contains(this, element);
-
-  void forEach(void f(MediaStream element)) => _Collections.forEach(this, f);
-
-  Collection map(f(MediaStream element)) => _Collections.map(this, [], f);
-
-  Collection<MediaStream> filter(bool f(MediaStream element)) =>
-     _Collections.filter(this, <MediaStream>[], f);
-
-  bool every(bool f(MediaStream element)) => _Collections.every(this, f);
-
-  bool some(bool f(MediaStream element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<MediaStream>:
-
-  void sort([Comparator<MediaStream> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(MediaStream element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(MediaStream element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  MediaStream get last => this[length - 1];
-
-  MediaStream removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<MediaStream> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <MediaStream>[]);
-
-  // -- end List<MediaStream> mixins.
-
-  _MediaStreamImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamTrack
-abstract class MediaStreamTrack implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MediaStreamTrackEvents get on;
-
-  static const int ENDED = 2;
-
-  static const int LIVE = 0;
-
-  static const int MUTED = 1;
-
-  /** @domName MediaStreamTrack.enabled */
-  bool enabled;
-
-  /** @domName MediaStreamTrack.kind */
-  String get kind;
-
-  /** @domName MediaStreamTrack.label */
-  String get label;
-
-  /** @domName MediaStreamTrack.readyState */
-  int get readyState;
-
-  /** @domName MediaStreamTrack.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaStreamTrack.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaStreamTrack.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class MediaStreamTrackEvents implements Events {
-
-  EventListenerList get ended;
-
-  EventListenerList get mute;
-
-  EventListenerList get unmute;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamTrackEvent
-abstract class MediaStreamTrackEvent implements Event {
-
-  /** @domName MediaStreamTrackEvent.track */
-  MediaStreamTrack get track;
-}
-
-class _MediaStreamTrackEventImpl extends _EventImpl implements MediaStreamTrackEvent native "*MediaStreamTrackEvent" {
-
-  final _MediaStreamTrackImpl track;
-}
-
-class _MediaStreamTrackImpl extends _EventTargetImpl implements MediaStreamTrack native "*MediaStreamTrack" {
-
-  _MediaStreamTrackEventsImpl get on =>
-    new _MediaStreamTrackEventsImpl(this);
-
-  bool enabled;
-
-  final String kind;
-
-  final String label;
-
-  final int readyState;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _MediaStreamTrackEventsImpl extends _EventsImpl implements MediaStreamTrackEvents {
-  _MediaStreamTrackEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get ended => this['ended'];
-
-  EventListenerList get mute => this['mute'];
-
-  EventListenerList get unmute => this['unmute'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamTrackList
-abstract class MediaStreamTrackList implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MediaStreamTrackListEvents get on;
-
-  /** @domName MediaStreamTrackList.length */
-  int get length;
-
-  /** @domName MediaStreamTrackList.add */
-  void add(MediaStreamTrack track);
-
-  /** @domName MediaStreamTrackList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaStreamTrackList.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaStreamTrackList.item */
-  MediaStreamTrack item(int index);
-
-  /** @domName MediaStreamTrackList.remove */
-  void remove(MediaStreamTrack track);
-
-  /** @domName MediaStreamTrackList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class MediaStreamTrackListEvents implements Events {
-
-  EventListenerList get addTrack;
-
-  EventListenerList get removeTrack;
-}
-
-class _MediaStreamTrackListImpl extends _EventTargetImpl implements MediaStreamTrackList native "*MediaStreamTrackList" {
-
-  _MediaStreamTrackListEventsImpl get on =>
-    new _MediaStreamTrackListEventsImpl(this);
-
-  final int length;
-
-  void add(_MediaStreamTrackImpl track) native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  _MediaStreamTrackImpl item(int index) native;
-
-  void remove(_MediaStreamTrackImpl track) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _MediaStreamTrackListEventsImpl extends _EventsImpl implements MediaStreamTrackListEvents {
-  _MediaStreamTrackListEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get addTrack => this['addtrack'];
-
-  EventListenerList get removeTrack => this['removetrack'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MemoryInfo
-abstract class MemoryInfo {
-
-  /** @domName MemoryInfo.jsHeapSizeLimit */
-  int get jsHeapSizeLimit;
-
-  /** @domName MemoryInfo.totalJSHeapSize */
-  int get totalJSHeapSize;
-
-  /** @domName MemoryInfo.usedJSHeapSize */
-  int get usedJSHeapSize;
-}
-
-class _MemoryInfoImpl implements MemoryInfo native "*MemoryInfo" {
-
-  final int jsHeapSizeLimit;
-
-  final int totalJSHeapSize;
-
-  final int usedJSHeapSize;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMenuElement
-abstract class MenuElement implements Element {
-
-  factory MenuElement() => _Elements.createMenuElement();
-
-  /** @domName HTMLMenuElement.compact */
-  bool compact;
-}
-
-class _MenuElementImpl extends _ElementImpl implements MenuElement native "*HTMLMenuElement" {
-
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MessageChannel
-abstract class MessageChannel {
-
-  factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
-
-  /** @domName MessageChannel.port1 */
-  MessagePort get port1;
-
-  /** @domName MessageChannel.port2 */
-  MessagePort get port2;
-}
-
-class _MessageChannelImpl implements MessageChannel native "*MessageChannel" {
-
-  final _MessagePortImpl port1;
-
-  final _MessagePortImpl port2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MessageEvent
-abstract class MessageEvent implements Event {
-
-  /** @domName MessageEvent.data */
-  Object get data;
-
-  /** @domName MessageEvent.lastEventId */
-  String get lastEventId;
-
-  /** @domName MessageEvent.origin */
-  String get origin;
-
-  /** @domName MessageEvent.ports */
-  List get ports;
-
-  /** @domName MessageEvent.source */
-  Window get source;
-
-  /** @domName MessageEvent.initMessageEvent */
-  void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
-
-  /** @domName MessageEvent.webkitInitMessageEvent */
-  void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List transferables);
-}
-
-class _MessageEventImpl extends _EventImpl implements MessageEvent native "*MessageEvent" {
-
-  dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
-  dynamic get _data => JS("dynamic", "#.data", this);
-
-  final String lastEventId;
-
-  final String origin;
-
-  final List ports;
-
-  Window get source => _convertNativeToDart_Window(this._source);
-  Window get _source => JS("Window", "#.source", this);
-
-  void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _LocalWindowImpl sourceArg, List messagePorts) native;
-
-  void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _LocalWindowImpl sourceArg, List transferables) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MessagePort
-abstract class MessagePort implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MessagePortEvents get on;
-
-  /** @domName MessagePort.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MessagePort.close */
-  void close();
-
-  /** @domName MessagePort.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName MessagePort.postMessage */
-  void postMessage(Object message, [List messagePorts]);
-
-  /** @domName MessagePort.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MessagePort.start */
-  void start();
-}
-
-abstract class MessagePortEvents implements Events {
-
-  EventListenerList get message;
-}
-
-class _MessagePortImpl extends _EventTargetImpl implements MessagePort native "*MessagePort" {
-
-  _MessagePortEventsImpl get on =>
-    new _MessagePortEventsImpl(this);
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void close() native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void postMessage(/*any*/ message, [messagePorts]) {
-    if (?messagePorts) {
-      var message_1 = _convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, messagePorts);
-      return;
-    }
-    var message_2 = _convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_2);
-    return;
-  }
-  void _postMessage_1(message, List messagePorts) native "postMessage";
-  void _postMessage_2(message) native "postMessage";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void start() native;
-}
-
-class _MessagePortEventsImpl extends _EventsImpl implements MessagePortEvents {
-  _MessagePortEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get message => this['message'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMetaElement
-abstract class MetaElement implements Element {
-
-  /** @domName HTMLMetaElement.content */
-  String content;
-
-  /** @domName HTMLMetaElement.httpEquiv */
-  String httpEquiv;
-
-  /** @domName HTMLMetaElement.name */
-  String name;
-
-  /** @domName HTMLMetaElement.scheme */
-  String scheme;
-}
-
-class _MetaElementImpl extends _ElementImpl implements MetaElement native "*HTMLMetaElement" {
-
-  String content;
-
-  String httpEquiv;
-
-  String name;
-
-  String scheme;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Metadata
-abstract class Metadata {
-
-  /** @domName Metadata.modificationTime */
-  Date get modificationTime;
-
-  /** @domName Metadata.size */
-  int get size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void MetadataCallback(Metadata metadata);
-
-class _MetadataImpl implements Metadata native "*Metadata" {
-
-  final Date modificationTime;
-
-  final int size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLMeterElement
-abstract class MeterElement implements Element {
-
-  factory MeterElement() => _Elements.createMeterElement();
-
-  /** @domName HTMLMeterElement.high */
-  num high;
-
-  /** @domName HTMLMeterElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLMeterElement.low */
-  num low;
-
-  /** @domName HTMLMeterElement.max */
-  num max;
-
-  /** @domName HTMLMeterElement.min */
-  num min;
-
-  /** @domName HTMLMeterElement.optimum */
-  num optimum;
-
-  /** @domName HTMLMeterElement.value */
-  num value;
-}
-
-class _MeterElementImpl extends _ElementImpl implements MeterElement native "*HTMLMeterElement" {
-
-  num high;
-
-  final List<Node> labels;
-
-  num low;
-
-  num max;
-
-  num min;
-
-  num optimum;
-
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLModElement
-abstract class ModElement implements Element {
-
-  /** @domName HTMLModElement.cite */
-  String cite;
-
-  /** @domName HTMLModElement.dateTime */
-  String dateTime;
-}
-
-class _ModElementImpl extends _ElementImpl implements ModElement native "*HTMLModElement" {
-
-  String cite;
-
-  String dateTime;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName MouseEvent
-abstract class MouseEvent implements UIEvent {
-
-  factory MouseEvent(String type, Window view, int detail, int screenX, int screenY,
-      int clientX, int clientY, int button, [bool canBubble = true,
-      bool cancelable = true, bool ctrlKey = false, bool altKey = false,
-      bool shiftKey = false, bool metaKey = false,
-      EventTarget relatedTarget = null]) =>
-      _MouseEventFactoryProvider.createMouseEvent(
-          type, view, detail, screenX, screenY,
-          clientX, clientY, button, canBubble, cancelable,
-          ctrlKey, altKey, shiftKey, metaKey,
-          relatedTarget);
-
-
-  /** @domName MouseEvent.altKey */
-  bool get altKey;
-
-  /** @domName MouseEvent.button */
-  int get button;
-
-  /** @domName MouseEvent.clientX */
-  int get clientX;
-
-  /** @domName MouseEvent.clientY */
-  int get clientY;
-
-  /** @domName MouseEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName MouseEvent.dataTransfer */
-  Clipboard get dataTransfer;
-
-  /** @domName MouseEvent.fromElement */
-  Node get fromElement;
-
-  /** @domName MouseEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName MouseEvent.offsetX */
-  int get offsetX;
-
-  /** @domName MouseEvent.offsetY */
-  int get offsetY;
-
-  /** @domName MouseEvent.relatedTarget */
-  EventTarget get relatedTarget;
-
-  /** @domName MouseEvent.screenX */
-  int get screenX;
-
-  /** @domName MouseEvent.screenY */
-  int get screenY;
-
-  /** @domName MouseEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName MouseEvent.toElement */
-  Node get toElement;
-
-  /** @domName MouseEvent.webkitMovementX */
-  int get webkitMovementX;
-
-  /** @domName MouseEvent.webkitMovementY */
-  int get webkitMovementY;
-
-  /** @domName MouseEvent.x */
-  int get x;
-
-  /** @domName MouseEvent.y */
-  int get y;
-
-  /** @domName MouseEvent.initMouseEvent */
-  void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
-}
-// 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 _MouseEventImpl extends _UIEventImpl implements MouseEvent native "*MouseEvent" {
-
-  final bool altKey;
-
-  final int button;
-
-  final int clientX;
-
-  final int clientY;
-
-  final bool ctrlKey;
-
-  final _ClipboardImpl dataTransfer;
-
-  final _NodeImpl fromElement;
-
-  final bool metaKey;
-
-  EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
-  EventTarget get _relatedTarget => JS("EventTarget", "#.relatedTarget", this);
-
-  final int screenX;
-
-  final int screenY;
-
-  final bool shiftKey;
-
-  final _NodeImpl toElement;
-
-  final int webkitMovementX;
-
-  final int webkitMovementY;
-
-  final int x;
-
-  final int y;
-
-  void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, _LocalWindowImpl view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) {
-    EventTarget relatedTarget_1 = _convertDartToNative_EventTarget(relatedTarget);
-    _$dom_initMouseEvent_1(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
-    return;
-  }
-  void _$dom_initMouseEvent_1(type, canBubble, cancelable, _LocalWindowImpl view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, EventTarget relatedTarget) native "initMouseEvent";
-
-
-  int get offsetX {
-  if (JS('bool', '!!#.offsetX', this)) {
-      return JS('int', '#.offsetX', this);
-    } else {
-      // Firefox does not support offsetX.
-      var target = this.target;
-      if (!(target is Element)) {
-        throw new UnsupportedError(
-            'offsetX is only supported on elements');
-      }
-      return this.clientX - this.target.getBoundingClientRect().left;
-    }
-  }
-
-  int get offsetY {
-    if (JS('bool', '!!#.offsetY', this)) {
-      return JS('int', '#.offsetY', this);
-    } else {
-      // Firefox does not support offsetY.
-      var target = this.target;
-      if (!(target is Element)) {
-        throw new UnsupportedError(
-            'offsetY is only supported on elements');
-      }
-      return this.clientY - this.target.getBoundingClientRect().top;
-    }
-  }
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MutationEvent
-abstract class MutationEvent implements Event {
-
-  static const int ADDITION = 2;
-
-  static const int MODIFICATION = 1;
-
-  static const int REMOVAL = 3;
-
-  /** @domName MutationEvent.attrChange */
-  int get attrChange;
-
-  /** @domName MutationEvent.attrName */
-  String get attrName;
-
-  /** @domName MutationEvent.newValue */
-  String get newValue;
-
-  /** @domName MutationEvent.prevValue */
-  String get prevValue;
-
-  /** @domName MutationEvent.relatedNode */
-  Node get relatedNode;
-
-  /** @domName MutationEvent.initMutationEvent */
-  void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
-}
-
-class _MutationEventImpl extends _EventImpl implements MutationEvent native "*MutationEvent" {
-
-  final int attrChange;
-
-  final String attrName;
-
-  final String newValue;
-
-  final String prevValue;
-
-  final _NodeImpl relatedNode;
-
-  void initMutationEvent(String type, bool canBubble, bool cancelable, _NodeImpl relatedNode, String prevValue, String newValue, String attrName, int attrChange) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName MutationObserver
-abstract class MutationObserver {
-
-  factory MutationObserver(MutationCallback callback) => _MutationObserverFactoryProvider.createMutationObserver(callback);
-
-  /** @domName MutationObserver.disconnect */
-  void disconnect();
-
-  /** @domName MutationObserver.takeRecords */
-  List<MutationRecord> takeRecords();
-
-  void observe(Node target,
-               {Map options,
-                bool childList,
-                bool attributes,
-                bool characterData,
-                bool subtree,
-                bool attributeOldValue,
-                bool characterDataOldValue,
-                List<String> attributeFilter});
-}
-// 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 _MutationObserverImpl implements MutationObserver native "*MutationObserver" {
-
-  void disconnect() native;
-
-  void _observe(_NodeImpl target, Map options) {
-    var options_1 = _convertDartToNative_Dictionary(options);
-    __observe_1(target, options_1);
-    return;
-  }
-  void __observe_1(_NodeImpl target, options) native "observe";
-
-  List<MutationRecord> takeRecords() native;
-
-  void observe(Node target,
-               {Map options,
-                bool childList,
-                bool attributes,
-                bool characterData,
-                bool subtree,
-                bool attributeOldValue,
-                bool characterDataOldValue,
-                List<String> attributeFilter}) {
-
-    // Parse options into map of known type.
-    var parsedOptions = _createDict();
-
-    if (options != null) {
-      options.forEach((k, v) {
-          if (_boolKeys.containsKey(k)) {
-            _add(parsedOptions, k, true == v);
-          } else if (k == 'attributeFilter') {
-            _add(parsedOptions, k, _fixupList(v));
-          } else {
-            throw new ArgumentError(
-                "Illegal MutationObserver.observe option '$k'");
-          }
-        });
-    }
-
-    // Override options passed in the map with named optional arguments.
-    override(key, value) {
-      if (value != null) _add(parsedOptions, key, value);
-    }
-
-    override('childList', childList);
-    override('attributes', attributes);
-    override('characterData', characterData);
-    override('subtree', subtree);
-    override('attributeOldValue', attributeOldValue);
-    override('characterDataOldValue', characterDataOldValue);
-    if (attributeFilter != null) {
-      override('attributeFilter', _fixupList(attributeFilter));
-    }
-
-    _call(target, parsedOptions);
-  }
-
-   // TODO: Change to a set when const Sets are available.
-  static final _boolKeys =
-    const {'childList': true,
-           'attributes': true,
-           'characterData': true,
-           'subtree': true,
-           'attributeOldValue': true,
-           'characterDataOldValue': true };
-
-
-  static _createDict() => JS('var', '{}');
-  static _add(m, String key, value) { JS('void', '#[#] = #', m, key, value); }
-  static _fixupList(list) => list;  // TODO: Ensure is a JavaScript Array.
-
-  // Call native function with no conversions.
-  _call(target, options) native 'observe';
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MutationRecord
-abstract class MutationRecord {
-
-  /** @domName MutationRecord.addedNodes */
-  List<Node> get addedNodes;
-
-  /** @domName MutationRecord.attributeName */
-  String get attributeName;
-
-  /** @domName MutationRecord.attributeNamespace */
-  String get attributeNamespace;
-
-  /** @domName MutationRecord.nextSibling */
-  Node get nextSibling;
-
-  /** @domName MutationRecord.oldValue */
-  String get oldValue;
-
-  /** @domName MutationRecord.previousSibling */
-  Node get previousSibling;
-
-  /** @domName MutationRecord.removedNodes */
-  List<Node> get removedNodes;
-
-  /** @domName MutationRecord.target */
-  Node get target;
-
-  /** @domName MutationRecord.type */
-  String get type;
-}
-
-class _MutationRecordImpl implements MutationRecord native "*MutationRecord" {
-
-  final List<Node> addedNodes;
-
-  final String attributeName;
-
-  final String attributeNamespace;
-
-  final _NodeImpl nextSibling;
-
-  final String oldValue;
-
-  final _NodeImpl previousSibling;
-
-  final List<Node> removedNodes;
-
-  final _NodeImpl target;
-
-  final String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NamedNodeMap
-abstract class NamedNodeMap implements List<Node> {
-
-  /** @domName NamedNodeMap.length */
-  int get length;
-
-  /** @domName NamedNodeMap.getNamedItem */
-  Node getNamedItem(String name);
-
-  /** @domName NamedNodeMap.getNamedItemNS */
-  Node getNamedItemNS(String namespaceURI, String localName);
-
-  /** @domName NamedNodeMap.item */
-  Node item(int index);
-
-  /** @domName NamedNodeMap.removeNamedItem */
-  Node removeNamedItem(String name);
-
-  /** @domName NamedNodeMap.removeNamedItemNS */
-  Node removeNamedItemNS(String namespaceURI, String localName);
-
-  /** @domName NamedNodeMap.setNamedItem */
-  Node setNamedItem(Node node);
-
-  /** @domName NamedNodeMap.setNamedItemNS */
-  Node setNamedItemNS(Node node);
-}
-
-class _NamedNodeMapImpl implements NamedNodeMap, JavaScriptIndexingBehavior native "*NamedNodeMap" {
-
-  final int length;
-
-  _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _NodeImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Node value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Node> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     _Collections.filter(this, <Node>[], f);
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Node get last => this[length - 1];
-
-  Node removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Node> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Node>[]);
-
-  // -- end List<Node> mixins.
-
-  _NodeImpl getNamedItem(String name) native;
-
-  _NodeImpl getNamedItemNS(String namespaceURI, String localName) native;
-
-  _NodeImpl item(int index) native;
-
-  _NodeImpl removeNamedItem(String name) native;
-
-  _NodeImpl removeNamedItemNS(String namespaceURI, String localName) native;
-
-  _NodeImpl setNamedItem(_NodeImpl node) native;
-
-  _NodeImpl setNamedItemNS(_NodeImpl node) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Navigator
-abstract class Navigator {
-
-  /** @domName Navigator.appCodeName */
-  String get appCodeName;
-
-  /** @domName Navigator.appName */
-  String get appName;
-
-  /** @domName Navigator.appVersion */
-  String get appVersion;
-
-  /** @domName Navigator.cookieEnabled */
-  bool get cookieEnabled;
-
-  /** @domName Navigator.geolocation */
-  Geolocation get geolocation;
-
-  /** @domName Navigator.language */
-  String get language;
-
-  /** @domName Navigator.mimeTypes */
-  DOMMimeTypeArray get mimeTypes;
-
-  /** @domName Navigator.onLine */
-  bool get onLine;
-
-  /** @domName Navigator.platform */
-  String get platform;
-
-  /** @domName Navigator.plugins */
-  DOMPluginArray get plugins;
-
-  /** @domName Navigator.product */
-  String get product;
-
-  /** @domName Navigator.productSub */
-  String get productSub;
-
-  /** @domName Navigator.userAgent */
-  String get userAgent;
-
-  /** @domName Navigator.vendor */
-  String get vendor;
-
-  /** @domName Navigator.vendorSub */
-  String get vendorSub;
-
-  /** @domName Navigator.webkitBattery */
-  BatteryManager get webkitBattery;
-
-  /** @domName Navigator.getStorageUpdates */
-  void getStorageUpdates();
-
-  /** @domName Navigator.javaEnabled */
-  bool javaEnabled();
-
-  /** @domName Navigator.webkitGetGamepads */
-  List<Gamepad> webkitGetGamepads();
-
-  /** @domName Navigator.webkitGetUserMedia */
-  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]);
-}
-
-class _NavigatorImpl implements Navigator native "*Navigator" {
-
-  final String appCodeName;
-
-  final String appName;
-
-  final String appVersion;
-
-  final bool cookieEnabled;
-
-  final _GeolocationImpl geolocation;
-
-  final String language;
-
-  final _DOMMimeTypeArrayImpl mimeTypes;
-
-  final bool onLine;
-
-  final String platform;
-
-  final _DOMPluginArrayImpl plugins;
-
-  final String product;
-
-  final String productSub;
-
-  final String userAgent;
-
-  final String vendor;
-
-  final String vendorSub;
-
-  final _BatteryManagerImpl webkitBattery;
-
-  void getStorageUpdates() native;
-
-  bool javaEnabled() native;
-
-  _GamepadListImpl webkitGetGamepads() native;
-
-  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [errorCallback]) {
-    if (?errorCallback) {
-      var options_1 = _convertDartToNative_Dictionary(options);
-      _webkitGetUserMedia_1(options_1, successCallback, errorCallback);
-      return;
-    }
-    var options_2 = _convertDartToNative_Dictionary(options);
-    _webkitGetUserMedia_2(options_2, successCallback);
-    return;
-  }
-  void _webkitGetUserMedia_1(options, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback) native "webkitGetUserMedia";
-  void _webkitGetUserMedia_2(options, NavigatorUserMediaSuccessCallback successCallback) native "webkitGetUserMedia";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NavigatorUserMediaError
-abstract class NavigatorUserMediaError {
-
-  static const int PERMISSION_DENIED = 1;
-
-  /** @domName NavigatorUserMediaError.code */
-  int get code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
-
-class _NavigatorUserMediaErrorImpl implements NavigatorUserMediaError native "*NavigatorUserMediaError" {
-
-  final int code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Node
-abstract class Node implements EventTarget {
-  List<Node> get nodes;
-
-  void set nodes(Collection<Node> value);
-
-  /**
-   * Replaces this node with another node.
-   * @domName Node.replaceChild
-   */
-  Node replaceWith(Node otherNode);
-
-  /**
-   * Removes this node from the DOM.
-   * @domName Node.removeChild
-   */
-  void remove();
-
-
-  static const int ATTRIBUTE_NODE = 2;
-
-  static const int CDATA_SECTION_NODE = 4;
-
-  static const int COMMENT_NODE = 8;
-
-  static const int DOCUMENT_FRAGMENT_NODE = 11;
-
-  static const int DOCUMENT_NODE = 9;
-
-  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-
-  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
-
-  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
-
-  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
-
-  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
-
-  static const int DOCUMENT_TYPE_NODE = 10;
-
-  static const int ELEMENT_NODE = 1;
-
-  static const int ENTITY_NODE = 6;
-
-  static const int ENTITY_REFERENCE_NODE = 5;
-
-  static const int NOTATION_NODE = 12;
-
-  static const int PROCESSING_INSTRUCTION_NODE = 7;
-
-  static const int TEXT_NODE = 3;
-
-  /** @domName Node.attributes */
-  NamedNodeMap get $dom_attributes;
-
-  /** @domName Node.childNodes */
-  List<Node> get $dom_childNodes;
-
-  /** @domName Node.firstChild */
-  Node get $dom_firstChild;
-
-  /** @domName Node.lastChild */
-  Node get $dom_lastChild;
-
-  /** @domName Node.nextSibling */
-  Node get nextNode;
-
-  /** @domName Node.nodeType */
-  int get $dom_nodeType;
-
-  /** @domName Node.ownerDocument */
-  Document get document;
-
-  /** @domName Node.parentNode */
-  Node get parent;
-
-  /** @domName Node.previousSibling */
-  Node get previousNode;
-
-  /** @domName Node.textContent */
-  String text;
-
-  /** @domName Node.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.appendChild */
-  Node $dom_appendChild(Node newChild);
-
-  /** @domName Node.cloneNode */
-  Node clone(bool deep);
-
-  /** @domName Node.contains */
-  bool contains(Node other);
-
-  /** @domName Node.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName Node.hasChildNodes */
-  bool hasChildNodes();
-
-  /** @domName Node.insertBefore */
-  Node insertBefore(Node newChild, Node refChild);
-
-  /** @domName Node.removeChild */
-  Node $dom_removeChild(Node oldChild);
-
-  /** @domName Node.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.replaceChild */
-  Node $dom_replaceChild(Node newChild, Node oldChild);
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NodeFilter
-abstract class NodeFilter {
-
-  static const int FILTER_ACCEPT = 1;
-
-  static const int FILTER_REJECT = 2;
-
-  static const int FILTER_SKIP = 3;
-
-  static const int SHOW_ALL = 0xFFFFFFFF;
-
-  static const int SHOW_ATTRIBUTE = 0x00000002;
-
-  static const int SHOW_CDATA_SECTION = 0x00000008;
-
-  static const int SHOW_COMMENT = 0x00000080;
-
-  static const int SHOW_DOCUMENT = 0x00000100;
-
-  static const int SHOW_DOCUMENT_FRAGMENT = 0x00000400;
-
-  static const int SHOW_DOCUMENT_TYPE = 0x00000200;
-
-  static const int SHOW_ELEMENT = 0x00000001;
-
-  static const int SHOW_ENTITY = 0x00000020;
-
-  static const int SHOW_ENTITY_REFERENCE = 0x00000010;
-
-  static const int SHOW_NOTATION = 0x00000800;
-
-  static const int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
-
-  static const int SHOW_TEXT = 0x00000004;
-
-  /** @domName NodeFilter.acceptNode */
-  int acceptNode(Node n);
-}
-
-class _NodeFilterImpl implements NodeFilter native "*NodeFilter" {
-
-  int acceptNode(_NodeImpl n) native;
-}
-// 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.
-
-/**
- * Lazy implementation of the child nodes of an element that does not request
- * the actual child nodes of an element until strictly necessary greatly
- * improving performance for the typical cases where it is not required.
- */
-class _ChildNodeListLazy implements List {
-  final _NodeImpl _this;
-
-  _ChildNodeListLazy(this._this);
-
-
-  _NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
-  _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
-
-  void add(_NodeImpl value) {
-    _this.$dom_appendChild(value);
-  }
-
-  void addLast(_NodeImpl value) {
-    _this.$dom_appendChild(value);
-  }
-
-
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
-      _this.$dom_appendChild(node);
-    }
-  }
-
-  _NodeImpl removeLast() {
-    final result = last;
-    if (result != null) {
-      _this.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  void clear() {
-    _this.text = '';
-  }
-
-  void operator []=(int index, _NodeImpl value) {
-    _this.$dom_replaceChild(value, this[index]);
-  }
-
-  Iterator<Node> iterator() => _this.$dom_childNodes.iterator();
-
-  // TODO(jacobr): We can implement these methods much more efficiently by
-  // looking up the nodeList only once instead of once per iteration.
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  // TODO(jacobr): this could be implemented for child node lists.
-  // The exception we throw here is misleading.
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start = 0]) =>
-      _Lists.lastIndexOf(this, element, start);
-
-  // FIXME: implement these.
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError(
-        "Cannot setRange on immutable List.");
-  }
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError(
-        "Cannot removeRange on immutable List.");
-  }
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError(
-        "Cannot insertRange on immutable List.");
-  }
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
-
-  // -- end List<Node> mixins.
-
-  // TODO(jacobr): benchmark whether this is more efficient or whether caching
-  // a local copy of $dom_childNodes is more efficient.
-  int get length => _this.$dom_childNodes.length;
-
-  _NodeImpl operator[](int index) => _this.$dom_childNodes[index];
-}
-
-class _NodeImpl extends _EventTargetImpl implements Node native "*Node" {
-  _ChildNodeListLazy get nodes {
-    return new _ChildNodeListLazy(this);
-  }
-
-  void set nodes(Collection<Node> value) {
-    // Copy list first since we don't want liveness during iteration.
-    // TODO(jacobr): there is a better way to do this.
-    List copy = new List.from(value);
-    text = '';
-    for (Node node in copy) {
-      $dom_appendChild(node);
-    }
-  }
-
-  // TODO(jacobr): should we throw an exception if parent is already null?
-  // TODO(vsm): Use the native remove when available.
-  void remove() {
-    if (this.parent != null) {
-      final _NodeImpl parent = this.parent;
-      parent.$dom_removeChild(this);
-    }
-  }
-
-  _NodeImpl replaceWith(Node otherNode) {
-    try {
-      final _NodeImpl parent = this.parent;
-      parent.$dom_replaceChild(otherNode, this);
-    } catch (e) {
-
-    };
-    return this;
-  }
-
-
-  _NamedNodeMapImpl get $dom_attributes => JS("_NamedNodeMapImpl", "#.attributes", this);
-
-  List<Node> get $dom_childNodes => JS("List<Node>", "#.childNodes", this);
-
-  _NodeImpl get $dom_firstChild => JS("_NodeImpl", "#.firstChild", this);
-
-  _NodeImpl get $dom_lastChild => JS("_NodeImpl", "#.lastChild", this);
-
-  _NodeImpl get nextNode => JS("_NodeImpl", "#.nextSibling", this);
-
-  int get $dom_nodeType => JS("int", "#.nodeType", this);
-
-  _DocumentImpl get document => JS("_DocumentImpl", "#.ownerDocument", this);
-
-  _NodeImpl get parent => JS("_NodeImpl", "#.parentNode", this);
-
-  _NodeImpl get previousNode => JS("_NodeImpl", "#.previousSibling", this);
-
-  String get text => JS("String", "#.textContent", this);
-
-  void set text(String value) {
-    JS("void", "#.textContent = #", this, value);
-  }
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  _NodeImpl $dom_appendChild(_NodeImpl newChild) native "appendChild";
-
-  _NodeImpl clone(bool deep) native "cloneNode";
-
-  bool contains(_NodeImpl other) native;
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  bool hasChildNodes() native;
-
-  _NodeImpl insertBefore(_NodeImpl newChild, _NodeImpl refChild) native;
-
-  _NodeImpl $dom_removeChild(_NodeImpl oldChild) native "removeChild";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  _NodeImpl $dom_replaceChild(_NodeImpl newChild, _NodeImpl oldChild) native "replaceChild";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NodeIterator
-abstract class NodeIterator {
-
-  /** @domName NodeIterator.expandEntityReferences */
-  bool get expandEntityReferences;
-
-  /** @domName NodeIterator.filter */
-  NodeFilter get filter;
-
-  /** @domName NodeIterator.pointerBeforeReferenceNode */
-  bool get pointerBeforeReferenceNode;
-
-  /** @domName NodeIterator.referenceNode */
-  Node get referenceNode;
-
-  /** @domName NodeIterator.root */
-  Node get root;
-
-  /** @domName NodeIterator.whatToShow */
-  int get whatToShow;
-
-  /** @domName NodeIterator.detach */
-  void detach();
-
-  /** @domName NodeIterator.nextNode */
-  Node nextNode();
-
-  /** @domName NodeIterator.previousNode */
-  Node previousNode();
-}
-
-class _NodeIteratorImpl implements NodeIterator native "*NodeIterator" {
-
-  final bool expandEntityReferences;
-
-  final _NodeFilterImpl filter;
-
-  final bool pointerBeforeReferenceNode;
-
-  final _NodeImpl referenceNode;
-
-  final _NodeImpl root;
-
-  final int whatToShow;
-
-  void detach() native;
-
-  _NodeImpl nextNode() native;
-
-  _NodeImpl previousNode() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName NodeList
-abstract class NodeList implements List<Node> {
-
-  List<Node> filter(bool f(Node element));
-
-  List<Node> getRange(int start, int length);
-
-  Node get first;
-
-
-  /** @domName NodeList.length */
-  int get length;
-
-}
-// 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.
-
-// TODO(nweiz): when all implementations we target have the same name for the
-// coreimpl implementation of List<E>, extend that rather than wrapping.
-class _ListWrapper<E> implements List<E> {
-  List _list;
-
-  _ListWrapper(List this._list);
-
-  Iterator<E> iterator() => _list.iterator();
-
-  bool contains(E element) => _list.contains(element);
-
-  void forEach(void f(E element)) => _list.forEach(f);
-
-  Collection map(f(E element)) => _list.map(f);
-
-  List<E> filter(bool f(E element)) => _list.filter(f);
-
-  bool every(bool f(E element)) => _list.every(f);
-
-  bool some(bool f(E element)) => _list.some(f);
-
-  bool get isEmpty => _list.isEmpty;
-
-  int get length => _list.length;
-
-  E operator [](int index) => _list[index];
-
-  void operator []=(int index, E value) { _list[index] = value; }
-
-  void set length(int newLength) { _list.length = newLength; }
-
-  void add(E value) => _list.add(value);
-
-  void addLast(E value) => _list.addLast(value);
-
-  void addAll(Collection<E> collection) => _list.addAll(collection);
-
-  void sort([Comparator<E> compare = Comparable.compare]) => _list.sort(compare);
-
-  int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
-
-  int lastIndexOf(E element, [int start = 0]) =>
-    _list.lastIndexOf(element, start);
-
-  void clear() => _list.clear();
-
-  E removeLast() => _list.removeLast();
-
-  E get last => _list.last;
-
-  List<E> getRange(int start, int rangeLength) =>
-    _list.getRange(start, rangeLength);
-
-  void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0])
-      => _list.setRange(start, rangeLength, from, startFrom);
-
-  void removeRange(int start, int rangeLength) =>
-    _list.removeRange(start, rangeLength);
-
-  void insertRange(int start, int rangeLength, [E initialValue = null]) =>
-    _list.insertRange(start, rangeLength, initialValue);
-
-  E get first => _list[0];
-}
-
-/**
- * This class is used to insure the results of list operations are NodeLists
- * instead of lists.
- */
-class _NodeListWrapper extends _ListWrapper<Node> implements List {
-  _NodeListWrapper(List list) : super(list);
-
-  List<Node> filter(bool f(Node element)) =>
-    new _NodeListWrapper(_list.filter(f));
-
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_list.getRange(start, rangeLength));
-}
-
-class _NodeListImpl implements NodeList, JavaScriptIndexingBehavior native "*NodeList" {
-  _NodeImpl _parent;
-
-  // -- start List<Node> mixins.
-  // Node is the element type.
-
-  // From Iterable<Node>:
-
-  Iterator<Node> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Node>(this);
-  }
-
-  // From Collection<Node>:
-
-  void add(_NodeImpl value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addLast(_NodeImpl value) {
-    _parent.$dom_appendChild(value);
-  }
-
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
-      _parent.$dom_appendChild(node);
-    }
-  }
-
-  _NodeImpl removeLast() {
-    final result = this.last;
-    if (result != null) {
-      _parent.$dom_removeChild(result);
-    }
-    return result;
-  }
-
-  void clear() {
-    _parent.text = '';
-  }
-
-  void operator []=(int index, _NodeImpl value) {
-    _parent.$dom_replaceChild(value, this[index]);
-  }
-
-  bool contains(Node element) => _Collections.contains(this, element);
-
-  void forEach(void f(Node element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Node element)) => _Collections.map(this, [], f);
-
-  Collection<Node> filter(bool f(Node element)) =>
-     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
-
-  bool every(bool f(Node element)) => _Collections.every(this, f);
-
-  bool some(bool f(Node element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Node>:
-
-  void sort([Comparator<Node> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Node element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Node element, [int start = 0]) =>
-      _Lists.lastIndexOf(this, element, start);
-
-  Node get last => this[length - 1];
-  Node get first => this[0];
-
-  // FIXME: implement thesee.
-  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-  void insertRange(int start, int rangeLength, [Node initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-  List<Node> getRange(int start, int rangeLength) =>
-    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
-
-  // -- end List<Node> mixins.
-
-
-  final int length;
-
-  _NodeImpl operator[](int index) => JS("_NodeImpl", "#[#]", this, index);
-
-  _NodeImpl _item(int index) native "item";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Notation
-abstract class Notation implements Node {
-
-  /** @domName Notation.publicId */
-  String get publicId;
-
-  /** @domName Notation.systemId */
-  String get systemId;
-}
-
-class _NotationImpl extends _NodeImpl implements Notation native "*Notation" {
-
-  final String publicId;
-
-  final String systemId;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Notification
-abstract class Notification implements EventTarget {
-
-  factory Notification(String title, [Map options]) {
-    if (!?options) {
-      return _NotificationFactoryProvider.createNotification(title);
-    }
-    return _NotificationFactoryProvider.createNotification(title, options);
-  }
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  NotificationEvents get on;
-
-  /** @domName Notification.dir */
-  String dir;
-
-  /** @domName Notification.permission */
-  String get permission;
-
-  /** @domName Notification.replaceId */
-  String replaceId;
-
-  /** @domName Notification.tag */
-  String tag;
-
-  /** @domName Notification.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Notification.cancel */
-  void cancel();
-
-  /** @domName Notification.close */
-  void close();
-
-  /** @domName Notification.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName Notification.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Notification.requestPermission */
-  static final requestPermission = _NotificationImpl.requestPermission;
-
-  /** @domName Notification.show */
-  void show();
-}
-
-abstract class NotificationEvents implements Events {
-
-  EventListenerList get click;
-
-  EventListenerList get close;
-
-  EventListenerList get display;
-
-  EventListenerList get error;
-
-  EventListenerList get show;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NotificationCenter
-abstract class NotificationCenter {
-
-  /** @domName NotificationCenter.checkPermission */
-  int checkPermission();
-
-  /** @domName NotificationCenter.createHTMLNotification */
-  Notification createHTMLNotification(String url);
-
-  /** @domName NotificationCenter.createNotification */
-  Notification createNotification(String iconUrl, String title, String body);
-
-  /** @domName NotificationCenter.requestPermission */
-  void requestPermission(VoidCallback callback);
-}
-
-class _NotificationCenterImpl implements NotificationCenter native "*NotificationCenter" {
-
-  int checkPermission() native;
-
-  _NotificationImpl createHTMLNotification(String url) native;
-
-  _NotificationImpl createNotification(String iconUrl, String title, String body) native;
-
-  void requestPermission(VoidCallback callback) native;
-}
-
-class _NotificationImpl extends _EventTargetImpl implements Notification native "*Notification" {
-
-  _NotificationEventsImpl get on =>
-    new _NotificationEventsImpl(this);
-
-  String dir;
-
-  final String permission;
-
-  String replaceId;
-
-  String tag;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void cancel() native;
-
-  void close() native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  static void requestPermission(NotificationPermissionCallback callback) native;
-
-  void show() native;
-}
-
-class _NotificationEventsImpl extends _EventsImpl implements NotificationEvents {
-  _NotificationEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get close => this['close'];
-
-  EventListenerList get display => this['display'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get show => this['show'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void NotificationPermissionCallback(String permission);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OESElementIndexUint
-abstract class OESElementIndexUint {
-}
-
-class _OESElementIndexUintImpl implements OESElementIndexUint native "*OESElementIndexUint" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OESStandardDerivatives
-abstract class OESStandardDerivatives {
-
-  static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
-}
-
-class _OESStandardDerivativesImpl implements OESStandardDerivatives native "*OESStandardDerivatives" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OESTextureFloat
-abstract class OESTextureFloat {
-}
-
-class _OESTextureFloatImpl implements OESTextureFloat native "*OESTextureFloat" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OESVertexArrayObject
-abstract class OESVertexArrayObject {
-
-  static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
-
-  /** @domName OESVertexArrayObject.bindVertexArrayOES */
-  void bindVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-
-  /** @domName OESVertexArrayObject.createVertexArrayOES */
-  WebGLVertexArrayObjectOES createVertexArrayOES();
-
-  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
-  void deleteVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-
-  /** @domName OESVertexArrayObject.isVertexArrayOES */
-  bool isVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-}
-
-class _OESVertexArrayObjectImpl implements OESVertexArrayObject native "*OESVertexArrayObject" {
-
-  void bindVertexArrayOES(_WebGLVertexArrayObjectOESImpl arrayObject) native;
-
-  _WebGLVertexArrayObjectOESImpl createVertexArrayOES() native;
-
-  void deleteVertexArrayOES(_WebGLVertexArrayObjectOESImpl arrayObject) native;
-
-  bool isVertexArrayOES(_WebGLVertexArrayObjectOESImpl arrayObject) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLOListElement
-abstract class OListElement implements Element {
-
-  factory OListElement() => _Elements.createOListElement();
-
-  /** @domName HTMLOListElement.compact */
-  bool compact;
-
-  /** @domName HTMLOListElement.reversed */
-  bool reversed;
-
-  /** @domName HTMLOListElement.start */
-  int start;
-
-  /** @domName HTMLOListElement.type */
-  String type;
-}
-
-class _OListElementImpl extends _ElementImpl implements OListElement native "*HTMLOListElement" {
-
-  bool compact;
-
-  bool reversed;
-
-  int start;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLObjectElement
-abstract class ObjectElement implements Element {
-
-  factory ObjectElement() => _Elements.createObjectElement();
-
-  /** @domName HTMLObjectElement.align */
-  String align;
-
-  /** @domName HTMLObjectElement.archive */
-  String archive;
-
-  /** @domName HTMLObjectElement.border */
-  String border;
-
-  /** @domName HTMLObjectElement.code */
-  String code;
-
-  /** @domName HTMLObjectElement.codeBase */
-  String codeBase;
-
-  /** @domName HTMLObjectElement.codeType */
-  String codeType;
-
-  /** @domName HTMLObjectElement.data */
-  String data;
-
-  /** @domName HTMLObjectElement.declare */
-  bool declare;
-
-  /** @domName HTMLObjectElement.form */
-  FormElement get form;
-
-  /** @domName HTMLObjectElement.height */
-  String height;
-
-  /** @domName HTMLObjectElement.hspace */
-  int hspace;
-
-  /** @domName HTMLObjectElement.name */
-  String name;
-
-  /** @domName HTMLObjectElement.standby */
-  String standby;
-
-  /** @domName HTMLObjectElement.type */
-  String type;
-
-  /** @domName HTMLObjectElement.useMap */
-  String useMap;
-
-  /** @domName HTMLObjectElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLObjectElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLObjectElement.vspace */
-  int vspace;
-
-  /** @domName HTMLObjectElement.width */
-  String width;
-
-  /** @domName HTMLObjectElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLObjectElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLObjectElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-
-class _ObjectElementImpl extends _ElementImpl implements ObjectElement native "*HTMLObjectElement" {
-
-  String align;
-
-  String archive;
-
-  String border;
-
-  String code;
-
-  String codeBase;
-
-  String codeType;
-
-  String data;
-
-  bool declare;
-
-  final _FormElementImpl form;
-
-  String height;
-
-  int hspace;
-
-  String name;
-
-  String standby;
-
-  String type;
-
-  String useMap;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  int vspace;
-
-  String width;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OfflineAudioCompletionEvent
-abstract class OfflineAudioCompletionEvent implements Event {
-
-  /** @domName OfflineAudioCompletionEvent.renderedBuffer */
-  AudioBuffer get renderedBuffer;
-}
-
-class _OfflineAudioCompletionEventImpl extends _EventImpl implements OfflineAudioCompletionEvent native "*OfflineAudioCompletionEvent" {
-
-  final _AudioBufferImpl renderedBuffer;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLOptGroupElement
-abstract class OptGroupElement implements Element {
-
-  factory OptGroupElement() => _Elements.createOptGroupElement();
-
-  /** @domName HTMLOptGroupElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLOptGroupElement.label */
-  String label;
-}
-
-class _OptGroupElementImpl extends _ElementImpl implements OptGroupElement native "*HTMLOptGroupElement" {
-
-  bool disabled;
-
-  String label;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLOptionElement
-abstract class OptionElement implements Element {
-
-  factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
-    if (!?data) {
-      return _OptionElementFactoryProvider.createOptionElement();
-    }
-    if (!?value) {
-      return _OptionElementFactoryProvider.createOptionElement(data);
-    }
-    if (!?defaultSelected) {
-      return _OptionElementFactoryProvider.createOptionElement(data, value);
-    }
-    if (!?selected) {
-      return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected);
-    }
-    return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected, selected);
-  }
-
-  /** @domName HTMLOptionElement.defaultSelected */
-  bool defaultSelected;
-
-  /** @domName HTMLOptionElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLOptionElement.form */
-  FormElement get form;
-
-  /** @domName HTMLOptionElement.index */
-  int get index;
-
-  /** @domName HTMLOptionElement.label */
-  String label;
-
-  /** @domName HTMLOptionElement.selected */
-  bool selected;
-
-  /** @domName HTMLOptionElement.value */
-  String value;
-}
-
-class _OptionElementImpl extends _ElementImpl implements OptionElement native "*HTMLOptionElement" {
-
-  bool defaultSelected;
-
-  bool disabled;
-
-  final _FormElementImpl form;
-
-  final int index;
-
-  String label;
-
-  bool selected;
-
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OscillatorNode
-abstract class OscillatorNode implements AudioSourceNode {
-
-  static const int CUSTOM = 4;
-
-  static const int FINISHED_STATE = 3;
-
-  static const int PLAYING_STATE = 2;
-
-  static const int SAWTOOTH = 2;
-
-  static const int SCHEDULED_STATE = 1;
-
-  static const int SINE = 0;
-
-  static const int SQUARE = 1;
-
-  static const int TRIANGLE = 3;
-
-  static const int UNSCHEDULED_STATE = 0;
-
-  /** @domName OscillatorNode.detune */
-  AudioParam get detune;
-
-  /** @domName OscillatorNode.frequency */
-  AudioParam get frequency;
-
-  /** @domName OscillatorNode.playbackState */
-  int get playbackState;
-
-  /** @domName OscillatorNode.type */
-  int type;
-
-  /** @domName OscillatorNode.setWaveTable */
-  void setWaveTable(WaveTable waveTable);
-
-  /** @domName OscillatorNode.start */
-  void start(num when);
-
-  /** @domName OscillatorNode.stop */
-  void stop(num when);
-}
-
-class _OscillatorNodeImpl extends _AudioSourceNodeImpl implements OscillatorNode native "*OscillatorNode" {
-
-  final _AudioParamImpl detune;
-
-  final _AudioParamImpl frequency;
-
-  final int playbackState;
-
-  int type;
-
-  void setWaveTable(_WaveTableImpl waveTable) native;
-
-  void start(num when) native;
-
-  void stop(num when) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLOutputElement
-abstract class OutputElement implements Element {
-
-  factory OutputElement() => _Elements.createOutputElement();
-
-  /** @domName HTMLOutputElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLOutputElement.form */
-  FormElement get form;
-
-  /** @domName HTMLOutputElement.htmlFor */
-  DOMSettableTokenList htmlFor;
-
-  /** @domName HTMLOutputElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLOutputElement.name */
-  String name;
-
-  /** @domName HTMLOutputElement.type */
-  String get type;
-
-  /** @domName HTMLOutputElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLOutputElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLOutputElement.value */
-  String value;
-
-  /** @domName HTMLOutputElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLOutputElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLOutputElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-
-class _OutputElementImpl extends _ElementImpl implements OutputElement native "*HTMLOutputElement" {
-
-  String defaultValue;
-
-  final _FormElementImpl form;
-
-  _DOMSettableTokenListImpl htmlFor;
-
-  final List<Node> labels;
-
-  String name;
-
-  final String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  String value;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName OverflowEvent
-abstract class OverflowEvent implements Event {
-
-  static const int BOTH = 2;
-
-  static const int HORIZONTAL = 0;
-
-  static const int VERTICAL = 1;
-
-  /** @domName OverflowEvent.horizontalOverflow */
-  bool get horizontalOverflow;
-
-  /** @domName OverflowEvent.orient */
-  int get orient;
-
-  /** @domName OverflowEvent.verticalOverflow */
-  bool get verticalOverflow;
-}
-
-class _OverflowEventImpl extends _EventImpl implements OverflowEvent native "*OverflowEvent" {
-
-  final bool horizontalOverflow;
-
-  final int orient;
-
-  final bool verticalOverflow;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PagePopupController
-abstract class PagePopupController {
-
-  /** @domName PagePopupController.localizeNumberString */
-  String localizeNumberString(String numberString);
-
-  /** @domName PagePopupController.setValueAndClosePopup */
-  void setValueAndClosePopup(int numberValue, String stringValue);
-}
-
-class _PagePopupControllerImpl implements PagePopupController native "*PagePopupController" {
-
-  String localizeNumberString(String numberString) native;
-
-  void setValueAndClosePopup(int numberValue, String stringValue) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PageTransitionEvent
-abstract class PageTransitionEvent implements Event {
-
-  /** @domName PageTransitionEvent.persisted */
-  bool get persisted;
-}
-
-class _PageTransitionEventImpl extends _EventImpl implements PageTransitionEvent native "*PageTransitionEvent" {
-
-  final bool persisted;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PannerNode
-abstract class PannerNode implements AudioNode {
-
-  static const int EQUALPOWER = 0;
-
-  static const int EXPONENTIAL_DISTANCE = 2;
-
-  static const int HRTF = 1;
-
-  static const int INVERSE_DISTANCE = 1;
-
-  static const int LINEAR_DISTANCE = 0;
-
-  static const int SOUNDFIELD = 2;
-
-  /** @domName PannerNode.coneGain */
-  AudioGain get coneGain;
-
-  /** @domName PannerNode.coneInnerAngle */
-  num coneInnerAngle;
-
-  /** @domName PannerNode.coneOuterAngle */
-  num coneOuterAngle;
-
-  /** @domName PannerNode.coneOuterGain */
-  num coneOuterGain;
-
-  /** @domName PannerNode.distanceGain */
-  AudioGain get distanceGain;
-
-  /** @domName PannerNode.distanceModel */
-  int distanceModel;
-
-  /** @domName PannerNode.maxDistance */
-  num maxDistance;
-
-  /** @domName PannerNode.panningModel */
-  int panningModel;
-
-  /** @domName PannerNode.refDistance */
-  num refDistance;
-
-  /** @domName PannerNode.rolloffFactor */
-  num rolloffFactor;
-
-  /** @domName PannerNode.setOrientation */
-  void setOrientation(num x, num y, num z);
-
-  /** @domName PannerNode.setPosition */
-  void setPosition(num x, num y, num z);
-
-  /** @domName PannerNode.setVelocity */
-  void setVelocity(num x, num y, num z);
-}
-
-class _PannerNodeImpl extends _AudioNodeImpl implements PannerNode native "*PannerNode" {
-
-  final _AudioGainImpl coneGain;
-
-  num coneInnerAngle;
-
-  num coneOuterAngle;
-
-  num coneOuterGain;
-
-  final _AudioGainImpl distanceGain;
-
-  int distanceModel;
-
-  num maxDistance;
-
-  int panningModel;
-
-  num refDistance;
-
-  num rolloffFactor;
-
-  void setOrientation(num x, num y, num z) native;
-
-  void setPosition(num x, num y, num z) native;
-
-  void setVelocity(num x, num y, num z) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLParagraphElement
-abstract class ParagraphElement implements Element {
-
-  factory ParagraphElement() => _Elements.createParagraphElement();
-
-  /** @domName HTMLParagraphElement.align */
-  String align;
-}
-
-class _ParagraphElementImpl extends _ElementImpl implements ParagraphElement native "*HTMLParagraphElement" {
-
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLParamElement
-abstract class ParamElement implements Element {
-
-  factory ParamElement() => _Elements.createParamElement();
-
-  /** @domName HTMLParamElement.name */
-  String name;
-
-  /** @domName HTMLParamElement.type */
-  String type;
-
-  /** @domName HTMLParamElement.value */
-  String value;
-
-  /** @domName HTMLParamElement.valueType */
-  String valueType;
-}
-
-class _ParamElementImpl extends _ElementImpl implements ParamElement native "*HTMLParamElement" {
-
-  String name;
-
-  String type;
-
-  String value;
-
-  String valueType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PeerConnection00
-abstract class PeerConnection00 implements EventTarget {
-
-  factory PeerConnection00(String serverConfiguration, IceCallback iceCallback) => _PeerConnection00FactoryProvider.createPeerConnection00(serverConfiguration, iceCallback);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  PeerConnection00Events get on;
-
-  static const int ACTIVE = 2;
-
-  static const int CLOSED = 3;
-
-  static const int ICE_CHECKING = 0x300;
-
-  static const int ICE_CLOSED = 0x700;
-
-  static const int ICE_COMPLETED = 0x500;
-
-  static const int ICE_CONNECTED = 0x400;
-
-  static const int ICE_FAILED = 0x600;
-
-  static const int ICE_GATHERING = 0x100;
-
-  static const int ICE_WAITING = 0x200;
-
-  static const int NEW = 0;
-
-  static const int OPENING = 1;
-
-  static const int SDP_ANSWER = 0x300;
-
-  static const int SDP_OFFER = 0x100;
-
-  static const int SDP_PRANSWER = 0x200;
-
-  /** @domName PeerConnection00.iceState */
-  int get iceState;
-
-  /** @domName PeerConnection00.localDescription */
-  SessionDescription get localDescription;
-
-  /** @domName PeerConnection00.localStreams */
-  List<MediaStream> get localStreams;
-
-  /** @domName PeerConnection00.readyState */
-  int get readyState;
-
-  /** @domName PeerConnection00.remoteDescription */
-  SessionDescription get remoteDescription;
-
-  /** @domName PeerConnection00.remoteStreams */
-  List<MediaStream> get remoteStreams;
-
-  /** @domName PeerConnection00.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName PeerConnection00.addStream */
-  void addStream(MediaStream stream, [Map mediaStreamHints]);
-
-  /** @domName PeerConnection00.close */
-  void close();
-
-  /** @domName PeerConnection00.createAnswer */
-  SessionDescription createAnswer(String offer, [Map mediaHints]);
-
-  /** @domName PeerConnection00.createOffer */
-  SessionDescription createOffer([Map mediaHints]);
-
-  /** @domName PeerConnection00.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName PeerConnection00.processIceMessage */
-  void processIceMessage(IceCandidate candidate);
-
-  /** @domName PeerConnection00.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName PeerConnection00.removeStream */
-  void removeStream(MediaStream stream);
-
-  /** @domName PeerConnection00.setLocalDescription */
-  void setLocalDescription(int action, SessionDescription desc);
-
-  /** @domName PeerConnection00.setRemoteDescription */
-  void setRemoteDescription(int action, SessionDescription desc);
-
-  /** @domName PeerConnection00.startIce */
-  void startIce([Map iceOptions]);
-}
-
-abstract class PeerConnection00Events implements Events {
-
-  EventListenerList get addStream;
-
-  EventListenerList get connecting;
-
-  EventListenerList get open;
-
-  EventListenerList get removeStream;
-
-  EventListenerList get stateChange;
-}
-
-class _PeerConnection00Impl extends _EventTargetImpl implements PeerConnection00 native "*PeerConnection00" {
-
-  _PeerConnection00EventsImpl get on =>
-    new _PeerConnection00EventsImpl(this);
-
-  final int iceState;
-
-  final _SessionDescriptionImpl localDescription;
-
-  final _MediaStreamListImpl localStreams;
-
-  final int readyState;
-
-  final _SessionDescriptionImpl remoteDescription;
-
-  final _MediaStreamListImpl remoteStreams;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void addStream(_MediaStreamImpl stream, [mediaStreamHints]) {
-    if (?mediaStreamHints) {
-      var mediaStreamHints_1 = _convertDartToNative_Dictionary(mediaStreamHints);
-      _addStream_1(stream, mediaStreamHints_1);
-      return;
-    }
-    _addStream_2(stream);
-    return;
-  }
-  void _addStream_1(_MediaStreamImpl stream, mediaStreamHints) native "addStream";
-  void _addStream_2(_MediaStreamImpl stream) native "addStream";
-
-  void close() native;
-
-  _SessionDescriptionImpl createAnswer(String offer, [mediaHints]) {
-    if (?mediaHints) {
-      var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
-      return _createAnswer_1(offer, mediaHints_1);
-    }
-    return _createAnswer_2(offer);
-  }
-  _SessionDescriptionImpl _createAnswer_1(offer, mediaHints) native "createAnswer";
-  _SessionDescriptionImpl _createAnswer_2(offer) native "createAnswer";
-
-  _SessionDescriptionImpl createOffer([mediaHints]) {
-    if (?mediaHints) {
-      var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
-      return _createOffer_1(mediaHints_1);
-    }
-    return _createOffer_2();
-  }
-  _SessionDescriptionImpl _createOffer_1(mediaHints) native "createOffer";
-  _SessionDescriptionImpl _createOffer_2() native "createOffer";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void processIceMessage(_IceCandidateImpl candidate) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void removeStream(_MediaStreamImpl stream) native;
-
-  void setLocalDescription(int action, _SessionDescriptionImpl desc) native;
-
-  void setRemoteDescription(int action, _SessionDescriptionImpl desc) native;
-
-  void startIce([iceOptions]) {
-    if (?iceOptions) {
-      var iceOptions_1 = _convertDartToNative_Dictionary(iceOptions);
-      _startIce_1(iceOptions_1);
-      return;
-    }
-    _startIce_2();
-    return;
-  }
-  void _startIce_1(iceOptions) native "startIce";
-  void _startIce_2() native "startIce";
-}
-
-class _PeerConnection00EventsImpl extends _EventsImpl implements PeerConnection00Events {
-  _PeerConnection00EventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get addStream => this['addstream'];
-
-  EventListenerList get connecting => this['connecting'];
-
-  EventListenerList get open => this['open'];
-
-  EventListenerList get removeStream => this['removestream'];
-
-  EventListenerList get stateChange => this['statechange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Performance
-abstract class Performance implements EventTarget {
-
-  /** @domName Performance.memory */
-  MemoryInfo get memory;
-
-  /** @domName Performance.navigation */
-  PerformanceNavigation get navigation;
-
-  /** @domName Performance.timing */
-  PerformanceTiming get timing;
-
-  /** @domName Performance.now */
-  num now();
-}
-
-class _PerformanceImpl extends _EventTargetImpl implements Performance native "*Performance" {
-
-  final _MemoryInfoImpl memory;
-
-  final _PerformanceNavigationImpl navigation;
-
-  final _PerformanceTimingImpl timing;
-
-  num now() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PerformanceNavigation
-abstract class PerformanceNavigation {
-
-  static const int TYPE_BACK_FORWARD = 2;
-
-  static const int TYPE_NAVIGATE = 0;
-
-  static const int TYPE_RELOAD = 1;
-
-  static const int TYPE_RESERVED = 255;
-
-  /** @domName PerformanceNavigation.redirectCount */
-  int get redirectCount;
-
-  /** @domName PerformanceNavigation.type */
-  int get type;
-}
-
-class _PerformanceNavigationImpl implements PerformanceNavigation native "*PerformanceNavigation" {
-
-  final int redirectCount;
-
-  final int type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PerformanceTiming
-abstract class PerformanceTiming {
-
-  /** @domName PerformanceTiming.connectEnd */
-  int get connectEnd;
-
-  /** @domName PerformanceTiming.connectStart */
-  int get connectStart;
-
-  /** @domName PerformanceTiming.domComplete */
-  int get domComplete;
-
-  /** @domName PerformanceTiming.domContentLoadedEventEnd */
-  int get domContentLoadedEventEnd;
-
-  /** @domName PerformanceTiming.domContentLoadedEventStart */
-  int get domContentLoadedEventStart;
-
-  /** @domName PerformanceTiming.domInteractive */
-  int get domInteractive;
-
-  /** @domName PerformanceTiming.domLoading */
-  int get domLoading;
-
-  /** @domName PerformanceTiming.domainLookupEnd */
-  int get domainLookupEnd;
-
-  /** @domName PerformanceTiming.domainLookupStart */
-  int get domainLookupStart;
-
-  /** @domName PerformanceTiming.fetchStart */
-  int get fetchStart;
-
-  /** @domName PerformanceTiming.loadEventEnd */
-  int get loadEventEnd;
-
-  /** @domName PerformanceTiming.loadEventStart */
-  int get loadEventStart;
-
-  /** @domName PerformanceTiming.navigationStart */
-  int get navigationStart;
-
-  /** @domName PerformanceTiming.redirectEnd */
-  int get redirectEnd;
-
-  /** @domName PerformanceTiming.redirectStart */
-  int get redirectStart;
-
-  /** @domName PerformanceTiming.requestStart */
-  int get requestStart;
-
-  /** @domName PerformanceTiming.responseEnd */
-  int get responseEnd;
-
-  /** @domName PerformanceTiming.responseStart */
-  int get responseStart;
-
-  /** @domName PerformanceTiming.secureConnectionStart */
-  int get secureConnectionStart;
-
-  /** @domName PerformanceTiming.unloadEventEnd */
-  int get unloadEventEnd;
-
-  /** @domName PerformanceTiming.unloadEventStart */
-  int get unloadEventStart;
-}
-
-class _PerformanceTimingImpl implements PerformanceTiming native "*PerformanceTiming" {
-
-  final int connectEnd;
-
-  final int connectStart;
-
-  final int domComplete;
-
-  final int domContentLoadedEventEnd;
-
-  final int domContentLoadedEventStart;
-
-  final int domInteractive;
-
-  final int domLoading;
-
-  final int domainLookupEnd;
-
-  final int domainLookupStart;
-
-  final int fetchStart;
-
-  final int loadEventEnd;
-
-  final int loadEventStart;
-
-  final int navigationStart;
-
-  final int redirectEnd;
-
-  final int redirectStart;
-
-  final int requestStart;
-
-  final int responseEnd;
-
-  final int responseStart;
-
-  final int secureConnectionStart;
-
-  final int unloadEventEnd;
-
-  final int unloadEventStart;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName WebKitPoint
-abstract class Point {
-
-  factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
-
-  /** @domName WebKitPoint.x */
-  num x;
-
-  /** @domName WebKitPoint.y */
-  num y;
-}
-
-class _PointImpl implements Point native "*WebKitPoint" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PopStateEvent
-abstract class PopStateEvent implements Event {
-
-  /** @domName PopStateEvent.state */
-  Object get state;
-}
-
-class _PopStateEventImpl extends _EventImpl implements PopStateEvent native "*PopStateEvent" {
-
-  final Object state;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void PositionCallback(Geoposition position);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName PositionError
-abstract class PositionError {
-
-  static const int PERMISSION_DENIED = 1;
-
-  static const int POSITION_UNAVAILABLE = 2;
-
-  static const int TIMEOUT = 3;
-
-  /** @domName PositionError.code */
-  int get code;
-
-  /** @domName PositionError.message */
-  String get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void PositionErrorCallback(PositionError error);
-
-class _PositionErrorImpl implements PositionError native "*PositionError" {
-
-  final int code;
-
-  final String message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLPreElement
-abstract class PreElement implements Element {
-
-  factory PreElement() => _Elements.createPreElement();
-
-  /** @domName HTMLPreElement.width */
-  int width;
-
-  /** @domName HTMLPreElement.wrap */
-  bool wrap;
-}
-
-class _PreElementImpl extends _ElementImpl implements PreElement native "*HTMLPreElement" {
-
-  int width;
-
-  bool wrap;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ProcessingInstruction
-abstract class ProcessingInstruction implements Node {
-
-  /** @domName ProcessingInstruction.data */
-  String data;
-
-  /** @domName ProcessingInstruction.sheet */
-  StyleSheet get sheet;
-
-  /** @domName ProcessingInstruction.target */
-  String get target;
-}
-
-class _ProcessingInstructionImpl extends _NodeImpl implements ProcessingInstruction native "*ProcessingInstruction" {
-
-  String data;
-
-  final _StyleSheetImpl sheet;
-
-  final String target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLProgressElement
-abstract class ProgressElement implements Element {
-
-  factory ProgressElement() => _Elements.createProgressElement();
-
-  /** @domName HTMLProgressElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLProgressElement.max */
-  num max;
-
-  /** @domName HTMLProgressElement.position */
-  num get position;
-
-  /** @domName HTMLProgressElement.value */
-  num value;
-}
-
-class _ProgressElementImpl extends _ElementImpl implements ProgressElement native "*HTMLProgressElement" {
-
-  final List<Node> labels;
-
-  num max;
-
-  final num position;
-
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ProgressEvent
-abstract class ProgressEvent implements Event {
-
-  /** @domName ProgressEvent.lengthComputable */
-  bool get lengthComputable;
-
-  /** @domName ProgressEvent.loaded */
-  int get loaded;
-
-  /** @domName ProgressEvent.total */
-  int get total;
-}
-
-class _ProgressEventImpl extends _EventImpl implements ProgressEvent native "*ProgressEvent" {
-
-  final bool lengthComputable;
-
-  final int loaded;
-
-  final int total;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLQuoteElement
-abstract class QuoteElement implements Element {
-
-  /** @domName HTMLQuoteElement.cite */
-  String cite;
-}
-
-class _QuoteElementImpl extends _ElementImpl implements QuoteElement native "*HTMLQuoteElement" {
-
-  String cite;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RGBColor
-abstract class RGBColor {
-
-  /** @domName RGBColor.blue */
-  CSSPrimitiveValue get blue;
-
-  /** @domName RGBColor.green */
-  CSSPrimitiveValue get green;
-
-  /** @domName RGBColor.red */
-  CSSPrimitiveValue get red;
-}
-
-class _RGBColorImpl implements RGBColor native "*RGBColor" {
-
-  final _CSSPrimitiveValueImpl blue;
-
-  final _CSSPrimitiveValueImpl green;
-
-  final _CSSPrimitiveValueImpl red;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCDataChannel
-abstract class RTCDataChannel implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  RTCDataChannelEvents get on;
-
-  /** @domName RTCDataChannel.binaryType */
-  String binaryType;
-
-  /** @domName RTCDataChannel.bufferedAmount */
-  int get bufferedAmount;
-
-  /** @domName RTCDataChannel.label */
-  String get label;
-
-  /** @domName RTCDataChannel.readyState */
-  String get readyState;
-
-  /** @domName RTCDataChannel.reliable */
-  bool get reliable;
-
-  /** @domName RTCDataChannel.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCDataChannel.close */
-  void close();
-
-  /** @domName RTCDataChannel.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName RTCDataChannel.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCDataChannel.send */
-  void send(data);
-}
-
-abstract class RTCDataChannelEvents implements Events {
-
-  EventListenerList get close;
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCDataChannelEvent
-abstract class RTCDataChannelEvent implements Event {
-
-  /** @domName RTCDataChannelEvent.channel */
-  RTCDataChannel get channel;
-}
-
-class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent native "*RTCDataChannelEvent" {
-
-  final _RTCDataChannelImpl channel;
-}
-
-class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel native "*RTCDataChannel" {
-
-  _RTCDataChannelEventsImpl get on =>
-    new _RTCDataChannelEventsImpl(this);
-
-  String binaryType;
-
-  final int bufferedAmount;
-
-  final String label;
-
-  final String readyState;
-
-  final bool reliable;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void close() native;
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void send(data) native;
-}
-
-class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
-  _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get close => this['close'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get open => this['open'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void RTCErrorCallback(String errorInformation);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCIceCandidate
-abstract class RTCIceCandidate {
-
-  factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
-
-  /** @domName RTCIceCandidate.candidate */
-  String get candidate;
-
-  /** @domName RTCIceCandidate.sdpMLineIndex */
-  int get sdpMLineIndex;
-
-  /** @domName RTCIceCandidate.sdpMid */
-  String get sdpMid;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCIceCandidateEvent
-abstract class RTCIceCandidateEvent implements Event {
-
-  /** @domName RTCIceCandidateEvent.candidate */
-  RTCIceCandidate get candidate;
-}
-
-class _RTCIceCandidateEventImpl extends _EventImpl implements RTCIceCandidateEvent native "*RTCIceCandidateEvent" {
-
-  final _RTCIceCandidateImpl candidate;
-}
-
-class _RTCIceCandidateImpl implements RTCIceCandidate native "*RTCIceCandidate" {
-
-  final String candidate;
-
-  final int sdpMLineIndex;
-
-  final String sdpMid;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCPeerConnection
-abstract class RTCPeerConnection implements EventTarget {
-
-  factory RTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
-    if (!?mediaConstraints) {
-      return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers);
-    }
-    return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers, mediaConstraints);
-  }
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  RTCPeerConnectionEvents get on;
-
-  /** @domName RTCPeerConnection.iceState */
-  String get iceState;
-
-  /** @domName RTCPeerConnection.localDescription */
-  RTCSessionDescription get localDescription;
-
-  /** @domName RTCPeerConnection.localStreams */
-  List<MediaStream> get localStreams;
-
-  /** @domName RTCPeerConnection.readyState */
-  String get readyState;
-
-  /** @domName RTCPeerConnection.remoteDescription */
-  RTCSessionDescription get remoteDescription;
-
-  /** @domName RTCPeerConnection.remoteStreams */
-  List<MediaStream> get remoteStreams;
-
-  /** @domName RTCPeerConnection.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCPeerConnection.addIceCandidate */
-  void addIceCandidate(RTCIceCandidate candidate);
-
-  /** @domName RTCPeerConnection.addStream */
-  void addStream(MediaStream stream, [Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.close */
-  void close();
-
-  /** @domName RTCPeerConnection.createAnswer */
-  void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.createDataChannel */
-  RTCDataChannel createDataChannel(String label, [Map options]);
-
-  /** @domName RTCPeerConnection.createOffer */
-  void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName RTCPeerConnection.getStats */
-  void getStats(RTCStatsCallback successCallback, MediaStreamTrack selector);
-
-  /** @domName RTCPeerConnection.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCPeerConnection.removeStream */
-  void removeStream(MediaStream stream);
-
-  /** @domName RTCPeerConnection.setLocalDescription */
-  void setLocalDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]);
-
-  /** @domName RTCPeerConnection.setRemoteDescription */
-  void setRemoteDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]);
-
-  /** @domName RTCPeerConnection.updateIce */
-  void updateIce([Map configuration, Map mediaConstraints]);
-}
-
-abstract class RTCPeerConnectionEvents implements Events {
-
-  EventListenerList get addStream;
-
-  EventListenerList get iceCandidate;
-
-  EventListenerList get iceChange;
-
-  EventListenerList get negotiationNeeded;
-
-  EventListenerList get open;
-
-  EventListenerList get removeStream;
-
-  EventListenerList get stateChange;
-}
-
-class _RTCPeerConnectionImpl extends _EventTargetImpl implements RTCPeerConnection native "*RTCPeerConnection" {
-
-  _RTCPeerConnectionEventsImpl get on =>
-    new _RTCPeerConnectionEventsImpl(this);
-
-  final String iceState;
-
-  final _RTCSessionDescriptionImpl localDescription;
-
-  final _MediaStreamListImpl localStreams;
-
-  final String readyState;
-
-  final _RTCSessionDescriptionImpl remoteDescription;
-
-  final _MediaStreamListImpl remoteStreams;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void addIceCandidate(_RTCIceCandidateImpl candidate) native;
-
-  void addStream(_MediaStreamImpl stream, [mediaConstraints]) {
-    if (?mediaConstraints) {
-      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
-      _addStream_1(stream, mediaConstraints_1);
-      return;
-    }
-    _addStream_2(stream);
-    return;
-  }
-  void _addStream_1(_MediaStreamImpl stream, mediaConstraints) native "addStream";
-  void _addStream_2(_MediaStreamImpl stream) native "addStream";
-
-  void close() native;
-
-  void createAnswer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
-    if (?mediaConstraints) {
-      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
-      _createAnswer_1(successCallback, failureCallback, mediaConstraints_1);
-      return;
-    }
-    _createAnswer_2(successCallback, failureCallback);
-    return;
-  }
-  void _createAnswer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createAnswer";
-  void _createAnswer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createAnswer";
-
-  _RTCDataChannelImpl createDataChannel(String label, [options]) {
-    if (?options) {
-      var options_1 = _convertDartToNative_Dictionary(options);
-      return _createDataChannel_1(label, options_1);
-    }
-    return _createDataChannel_2(label);
-  }
-  _RTCDataChannelImpl _createDataChannel_1(label, options) native "createDataChannel";
-  _RTCDataChannelImpl _createDataChannel_2(label) native "createDataChannel";
-
-  void createOffer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
-    if (?mediaConstraints) {
-      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
-      _createOffer_1(successCallback, failureCallback, mediaConstraints_1);
-      return;
-    }
-    _createOffer_2(successCallback, failureCallback);
-    return;
-  }
-  void _createOffer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createOffer";
-  void _createOffer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createOffer";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  void getStats(RTCStatsCallback successCallback, _MediaStreamTrackImpl selector) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void removeStream(_MediaStreamImpl stream) native;
-
-  void setLocalDescription(_RTCSessionDescriptionImpl description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
-
-  void setRemoteDescription(_RTCSessionDescriptionImpl description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
-
-  void updateIce([configuration, mediaConstraints]) {
-    if (?mediaConstraints) {
-      var configuration_1 = _convertDartToNative_Dictionary(configuration);
-      var mediaConstraints_2 = _convertDartToNative_Dictionary(mediaConstraints);
-      _updateIce_1(configuration_1, mediaConstraints_2);
-      return;
-    }
-    if (?configuration) {
-      var configuration_3 = _convertDartToNative_Dictionary(configuration);
-      _updateIce_2(configuration_3);
-      return;
-    }
-    _updateIce_3();
-    return;
-  }
-  void _updateIce_1(configuration, mediaConstraints) native "updateIce";
-  void _updateIce_2(configuration) native "updateIce";
-  void _updateIce_3() native "updateIce";
-}
-
-class _RTCPeerConnectionEventsImpl extends _EventsImpl implements RTCPeerConnectionEvents {
-  _RTCPeerConnectionEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get addStream => this['addstream'];
-
-  EventListenerList get iceCandidate => this['icecandidate'];
-
-  EventListenerList get iceChange => this['icechange'];
-
-  EventListenerList get negotiationNeeded => this['negotiationneeded'];
-
-  EventListenerList get open => this['open'];
-
-  EventListenerList get removeStream => this['removestream'];
-
-  EventListenerList get stateChange => this['statechange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCSessionDescription
-abstract class RTCSessionDescription {
-
-  factory RTCSessionDescription(Map dictionary) => _RTCSessionDescriptionFactoryProvider.createRTCSessionDescription(dictionary);
-
-  /** @domName RTCSessionDescription.sdp */
-  String sdp;
-
-  /** @domName RTCSessionDescription.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
-
-class _RTCSessionDescriptionImpl implements RTCSessionDescription native "*RTCSessionDescription" {
-
-  String sdp;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void RTCStatsCallback(RTCStatsResponse response);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCStatsElement
-abstract class RTCStatsElement {
-
-  /** @domName RTCStatsElement.timestamp */
-  Date get timestamp;
-
-  /** @domName RTCStatsElement.stat */
-  String stat(String name);
-}
-
-class _RTCStatsElementImpl implements RTCStatsElement native "*RTCStatsElement" {
-
-  final Date timestamp;
-
-  String stat(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCStatsReport
-abstract class RTCStatsReport {
-
-  /** @domName RTCStatsReport.local */
-  RTCStatsElement get local;
-
-  /** @domName RTCStatsReport.remote */
-  RTCStatsElement get remote;
-}
-
-class _RTCStatsReportImpl implements RTCStatsReport native "*RTCStatsReport" {
-
-  final _RTCStatsElementImpl local;
-
-  final _RTCStatsElementImpl remote;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCStatsResponse
-abstract class RTCStatsResponse {
-
-  /** @domName RTCStatsResponse.result */
-  List<RTCStatsReport> result();
-}
-
-class _RTCStatsResponseImpl implements RTCStatsResponse native "*RTCStatsResponse" {
-
-  List<RTCStatsReport> result() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RadioNodeList
-abstract class RadioNodeList implements NodeList {
-
-  /** @domName RadioNodeList.value */
-  String value;
-}
-
-class _RadioNodeListImpl extends _NodeListImpl implements RadioNodeList native "*RadioNodeList" {
-
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Range
-abstract class Range {
-
-  static const int END_TO_END = 2;
-
-  static const int END_TO_START = 3;
-
-  static const int NODE_AFTER = 1;
-
-  static const int NODE_BEFORE = 0;
-
-  static const int NODE_BEFORE_AND_AFTER = 2;
-
-  static const int NODE_INSIDE = 3;
-
-  static const int START_TO_END = 1;
-
-  static const int START_TO_START = 0;
-
-  /** @domName Range.collapsed */
-  bool get collapsed;
-
-  /** @domName Range.commonAncestorContainer */
-  Node get commonAncestorContainer;
-
-  /** @domName Range.endContainer */
-  Node get endContainer;
-
-  /** @domName Range.endOffset */
-  int get endOffset;
-
-  /** @domName Range.startContainer */
-  Node get startContainer;
-
-  /** @domName Range.startOffset */
-  int get startOffset;
-
-  /** @domName Range.cloneContents */
-  DocumentFragment cloneContents();
-
-  /** @domName Range.cloneRange */
-  Range cloneRange();
-
-  /** @domName Range.collapse */
-  void collapse(bool toStart);
-
-  /** @domName Range.compareNode */
-  int compareNode(Node refNode);
-
-  /** @domName Range.comparePoint */
-  int comparePoint(Node refNode, int offset);
-
-  /** @domName Range.createContextualFragment */
-  DocumentFragment createContextualFragment(String html);
-
-  /** @domName Range.deleteContents */
-  void deleteContents();
-
-  /** @domName Range.detach */
-  void detach();
-
-  /** @domName Range.expand */
-  void expand(String unit);
-
-  /** @domName Range.extractContents */
-  DocumentFragment extractContents();
-
-  /** @domName Range.getBoundingClientRect */
-  ClientRect getBoundingClientRect();
-
-  /** @domName Range.getClientRects */
-  List<ClientRect> getClientRects();
-
-  /** @domName Range.insertNode */
-  void insertNode(Node newNode);
-
-  /** @domName Range.intersectsNode */
-  bool intersectsNode(Node refNode);
-
-  /** @domName Range.isPointInRange */
-  bool isPointInRange(Node refNode, int offset);
-
-  /** @domName Range.selectNode */
-  void selectNode(Node refNode);
-
-  /** @domName Range.selectNodeContents */
-  void selectNodeContents(Node refNode);
-
-  /** @domName Range.setEnd */
-  void setEnd(Node refNode, int offset);
-
-  /** @domName Range.setEndAfter */
-  void setEndAfter(Node refNode);
-
-  /** @domName Range.setEndBefore */
-  void setEndBefore(Node refNode);
-
-  /** @domName Range.setStart */
-  void setStart(Node refNode, int offset);
-
-  /** @domName Range.setStartAfter */
-  void setStartAfter(Node refNode);
-
-  /** @domName Range.setStartBefore */
-  void setStartBefore(Node refNode);
-
-  /** @domName Range.surroundContents */
-  void surroundContents(Node newParent);
-
-  /** @domName Range.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RangeException
-abstract class RangeException {
-
-  static const int BAD_BOUNDARYPOINTS_ERR = 1;
-
-  static const int INVALID_NODE_TYPE_ERR = 2;
-
-  /** @domName RangeException.code */
-  int get code;
-
-  /** @domName RangeException.message */
-  String get message;
-
-  /** @domName RangeException.name */
-  String get name;
-
-  /** @domName RangeException.toString */
-  String toString();
-}
-
-class _RangeExceptionImpl implements RangeException native "*RangeException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-
-class _RangeImpl implements Range native "*Range" {
-
-  final bool collapsed;
-
-  final _NodeImpl commonAncestorContainer;
-
-  final _NodeImpl endContainer;
-
-  final int endOffset;
-
-  final _NodeImpl startContainer;
-
-  final int startOffset;
-
-  _DocumentFragmentImpl cloneContents() native;
-
-  _RangeImpl cloneRange() native;
-
-  void collapse(bool toStart) native;
-
-  int compareNode(_NodeImpl refNode) native;
-
-  int comparePoint(_NodeImpl refNode, int offset) native;
-
-  _DocumentFragmentImpl createContextualFragment(String html) native;
-
-  void deleteContents() native;
-
-  void detach() native;
-
-  void expand(String unit) native;
-
-  _DocumentFragmentImpl extractContents() native;
-
-  _ClientRectImpl getBoundingClientRect() native;
-
-  _ClientRectListImpl getClientRects() native;
-
-  void insertNode(_NodeImpl newNode) native;
-
-  bool intersectsNode(_NodeImpl refNode) native;
-
-  bool isPointInRange(_NodeImpl refNode, int offset) native;
-
-  void selectNode(_NodeImpl refNode) native;
-
-  void selectNodeContents(_NodeImpl refNode) native;
-
-  void setEnd(_NodeImpl refNode, int offset) native;
-
-  void setEndAfter(_NodeImpl refNode) native;
-
-  void setEndBefore(_NodeImpl refNode) native;
-
-  void setStart(_NodeImpl refNode, int offset) native;
-
-  void setStartAfter(_NodeImpl refNode) native;
-
-  void setStartBefore(_NodeImpl refNode) native;
-
-  void surroundContents(_NodeImpl newParent) native;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Rect
-abstract class Rect {
-
-  /** @domName Rect.bottom */
-  CSSPrimitiveValue get bottom;
-
-  /** @domName Rect.left */
-  CSSPrimitiveValue get left;
-
-  /** @domName Rect.right */
-  CSSPrimitiveValue get right;
-
-  /** @domName Rect.top */
-  CSSPrimitiveValue get top;
-}
-
-class _RectImpl implements Rect native "*Rect" {
-
-  final _CSSPrimitiveValueImpl bottom;
-
-  final _CSSPrimitiveValueImpl left;
-
-  final _CSSPrimitiveValueImpl right;
-
-  final _CSSPrimitiveValueImpl top;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void RequestAnimationFrameCallback(num highResTime);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLError
-abstract class SQLError {
-
-  static const int CONSTRAINT_ERR = 6;
-
-  static const int DATABASE_ERR = 1;
-
-  static const int QUOTA_ERR = 4;
-
-  static const int SYNTAX_ERR = 5;
-
-  static const int TIMEOUT_ERR = 7;
-
-  static const int TOO_LARGE_ERR = 3;
-
-  static const int UNKNOWN_ERR = 0;
-
-  static const int VERSION_ERR = 2;
-
-  /** @domName SQLError.code */
-  int get code;
-
-  /** @domName SQLError.message */
-  String get message;
-}
-
-class _SQLErrorImpl implements SQLError native "*SQLError" {
-
-  final int code;
-
-  final String message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLException
-abstract class SQLException {
-
-  static const int CONSTRAINT_ERR = 6;
-
-  static const int DATABASE_ERR = 1;
-
-  static const int QUOTA_ERR = 4;
-
-  static const int SYNTAX_ERR = 5;
-
-  static const int TIMEOUT_ERR = 7;
-
-  static const int TOO_LARGE_ERR = 3;
-
-  static const int UNKNOWN_ERR = 0;
-
-  static const int VERSION_ERR = 2;
-
-  /** @domName SQLException.code */
-  int get code;
-
-  /** @domName SQLException.message */
-  String get message;
-}
-
-class _SQLExceptionImpl implements SQLException native "*SQLException" {
-
-  final int code;
-
-  final String message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLResultSet
-abstract class SQLResultSet {
-
-  /** @domName SQLResultSet.insertId */
-  int get insertId;
-
-  /** @domName SQLResultSet.rows */
-  SQLResultSetRowList get rows;
-
-  /** @domName SQLResultSet.rowsAffected */
-  int get rowsAffected;
-}
-
-class _SQLResultSetImpl implements SQLResultSet native "*SQLResultSet" {
-
-  final int insertId;
-
-  final _SQLResultSetRowListImpl rows;
-
-  final int rowsAffected;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLResultSetRowList
-abstract class SQLResultSetRowList implements List<Map> {
-
-  /** @domName SQLResultSetRowList.length */
-  int get length;
-
-  /** @domName SQLResultSetRowList.item */
-  Map item(int index);
-}
-
-class _SQLResultSetRowListImpl implements SQLResultSetRowList, JavaScriptIndexingBehavior native "*SQLResultSetRowList" {
-
-  final int length;
-
-  Map operator[](int index) => JS("Map", "#[#]", this, index);
-
-  void operator[]=(int index, Map value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Map> mixins.
-  // Map is the element type.
-
-  // From Iterable<Map>:
-
-  Iterator<Map> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Map>(this);
-  }
-
-  // From Collection<Map>:
-
-  void add(Map value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Map value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Map> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Map element) => _Collections.contains(this, element);
-
-  void forEach(void f(Map element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Map element)) => _Collections.map(this, [], f);
-
-  Collection<Map> filter(bool f(Map element)) =>
-     _Collections.filter(this, <Map>[], f);
-
-  bool every(bool f(Map element)) => _Collections.every(this, f);
-
-  bool some(bool f(Map element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Map>:
-
-  void sort([Comparator<Map> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Map element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Map element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Map get last => this[length - 1];
-
-  Map removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Map initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Map> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Map>[]);
-
-  // -- end List<Map> mixins.
-
-  Map item(int index) {
-    return _convertNativeToDart_Dictionary(_item_1(index));
-  }
-  _item_1(index) native "item";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLTransaction
-abstract class SQLTransaction {
-
-  /** @domName SQLTransaction.executeSql */
-  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void SQLTransactionCallback(SQLTransaction transaction);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void SQLTransactionErrorCallback(SQLError error);
-
-class _SQLTransactionImpl implements SQLTransaction native "*SQLTransaction" {
-
-  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SQLTransactionSync
-abstract class SQLTransactionSync {
-
-  /** @domName SQLTransactionSync.executeSql */
-  SQLResultSet executeSql(String sqlStatement, List arguments);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
-
-class _SQLTransactionSyncImpl implements SQLTransactionSync native "*SQLTransactionSync" {
-
-  _SQLResultSetImpl executeSql(String sqlStatement, List arguments) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAElement
-abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGAElement.target */
-  SVGAnimatedString get target;
-}
-
-class _SVGAElementImpl extends _SVGElementImpl implements SVGAElement native "*SVGAElement" {
-
-  final _SVGAnimatedStringImpl target;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAltGlyphDefElement
-abstract class SVGAltGlyphDefElement implements SVGElement {
-}
-
-class _SVGAltGlyphDefElementImpl extends _SVGElementImpl implements SVGAltGlyphDefElement native "*SVGAltGlyphDefElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAltGlyphElement
-abstract class SVGAltGlyphElement implements SVGTextPositioningElement, SVGURIReference {
-
-  /** @domName SVGAltGlyphElement.format */
-  String format;
-
-  /** @domName SVGAltGlyphElement.glyphRef */
-  String glyphRef;
-}
-
-class _SVGAltGlyphElementImpl extends _SVGTextPositioningElementImpl implements SVGAltGlyphElement native "*SVGAltGlyphElement" {
-
-  String format;
-
-  String glyphRef;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAltGlyphItemElement
-abstract class SVGAltGlyphItemElement implements SVGElement {
-}
-
-class _SVGAltGlyphItemElementImpl extends _SVGElementImpl implements SVGAltGlyphItemElement native "*SVGAltGlyphItemElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAngle
-abstract class SVGAngle {
-
-  static const int SVG_ANGLETYPE_DEG = 2;
-
-  static const int SVG_ANGLETYPE_GRAD = 4;
-
-  static const int SVG_ANGLETYPE_RAD = 3;
-
-  static const int SVG_ANGLETYPE_UNKNOWN = 0;
-
-  static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
-
-  /** @domName SVGAngle.unitType */
-  int get unitType;
-
-  /** @domName SVGAngle.value */
-  num value;
-
-  /** @domName SVGAngle.valueAsString */
-  String valueAsString;
-
-  /** @domName SVGAngle.valueInSpecifiedUnits */
-  num valueInSpecifiedUnits;
-
-  /** @domName SVGAngle.convertToSpecifiedUnits */
-  void convertToSpecifiedUnits(int unitType);
-
-  /** @domName SVGAngle.newValueSpecifiedUnits */
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits);
-}
-
-class _SVGAngleImpl implements SVGAngle native "*SVGAngle" {
-
-  final int unitType;
-
-  num value;
-
-  String valueAsString;
-
-  num valueInSpecifiedUnits;
-
-  void convertToSpecifiedUnits(int unitType) native;
-
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimateColorElement
-abstract class SVGAnimateColorElement implements SVGAnimationElement {
-}
-
-class _SVGAnimateColorElementImpl extends _SVGAnimationElementImpl implements SVGAnimateColorElement native "*SVGAnimateColorElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimateElement
-abstract class SVGAnimateElement implements SVGAnimationElement {
-}
-
-class _SVGAnimateElementImpl extends _SVGAnimationElementImpl implements SVGAnimateElement native "*SVGAnimateElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimateMotionElement
-abstract class SVGAnimateMotionElement implements SVGAnimationElement {
-}
-
-class _SVGAnimateMotionElementImpl extends _SVGAnimationElementImpl implements SVGAnimateMotionElement native "*SVGAnimateMotionElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimateTransformElement
-abstract class SVGAnimateTransformElement implements SVGAnimationElement {
-}
-
-class _SVGAnimateTransformElementImpl extends _SVGAnimationElementImpl implements SVGAnimateTransformElement native "*SVGAnimateTransformElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedAngle
-abstract class SVGAnimatedAngle {
-
-  /** @domName SVGAnimatedAngle.animVal */
-  SVGAngle get animVal;
-
-  /** @domName SVGAnimatedAngle.baseVal */
-  SVGAngle get baseVal;
-}
-
-class _SVGAnimatedAngleImpl implements SVGAnimatedAngle native "*SVGAnimatedAngle" {
-
-  final _SVGAngleImpl animVal;
-
-  final _SVGAngleImpl baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedBoolean
-abstract class SVGAnimatedBoolean {
-
-  /** @domName SVGAnimatedBoolean.animVal */
-  bool get animVal;
-
-  /** @domName SVGAnimatedBoolean.baseVal */
-  bool baseVal;
-}
-
-class _SVGAnimatedBooleanImpl implements SVGAnimatedBoolean native "*SVGAnimatedBoolean" {
-
-  final bool animVal;
-
-  bool baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedEnumeration
-abstract class SVGAnimatedEnumeration {
-
-  /** @domName SVGAnimatedEnumeration.animVal */
-  int get animVal;
-
-  /** @domName SVGAnimatedEnumeration.baseVal */
-  int baseVal;
-}
-
-class _SVGAnimatedEnumerationImpl implements SVGAnimatedEnumeration native "*SVGAnimatedEnumeration" {
-
-  final int animVal;
-
-  int baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedInteger
-abstract class SVGAnimatedInteger {
-
-  /** @domName SVGAnimatedInteger.animVal */
-  int get animVal;
-
-  /** @domName SVGAnimatedInteger.baseVal */
-  int baseVal;
-}
-
-class _SVGAnimatedIntegerImpl implements SVGAnimatedInteger native "*SVGAnimatedInteger" {
-
-  final int animVal;
-
-  int baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedLength
-abstract class SVGAnimatedLength {
-
-  /** @domName SVGAnimatedLength.animVal */
-  SVGLength get animVal;
-
-  /** @domName SVGAnimatedLength.baseVal */
-  SVGLength get baseVal;
-}
-
-class _SVGAnimatedLengthImpl implements SVGAnimatedLength native "*SVGAnimatedLength" {
-
-  final _SVGLengthImpl animVal;
-
-  final _SVGLengthImpl baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedLengthList
-abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
-
-  /** @domName SVGAnimatedLengthList.animVal */
-  SVGLengthList get animVal;
-
-  /** @domName SVGAnimatedLengthList.baseVal */
-  SVGLengthList get baseVal;
-}
-
-class _SVGAnimatedLengthListImpl implements SVGAnimatedLengthList, JavaScriptIndexingBehavior native "*SVGAnimatedLengthList" {
-
-  final _SVGLengthListImpl animVal;
-
-  final _SVGLengthListImpl baseVal;
-
-  _SVGAnimatedLengthImpl operator[](int index) => JS("_SVGAnimatedLengthImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGAnimatedLengthImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGAnimatedLength> mixins.
-  // SVGAnimatedLength is the element type.
-
-  // From Iterable<SVGAnimatedLength>:
-
-  Iterator<SVGAnimatedLength> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGAnimatedLength>(this);
-  }
-
-  // From Collection<SVGAnimatedLength>:
-
-  void add(SVGAnimatedLength value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGAnimatedLength value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGAnimatedLength> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGAnimatedLength element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGAnimatedLength element)) => _Collections.map(this, [], f);
-
-  Collection<SVGAnimatedLength> filter(bool f(SVGAnimatedLength element)) =>
-     _Collections.filter(this, <SVGAnimatedLength>[], f);
-
-  bool every(bool f(SVGAnimatedLength element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGAnimatedLength>:
-
-  void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGAnimatedLength element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGAnimatedLength element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGAnimatedLength get last => this[length - 1];
-
-  SVGAnimatedLength removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedLength>[]);
-
-  // -- end List<SVGAnimatedLength> mixins.
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedNumber
-abstract class SVGAnimatedNumber {
-
-  /** @domName SVGAnimatedNumber.animVal */
-  num get animVal;
-
-  /** @domName SVGAnimatedNumber.baseVal */
-  num baseVal;
-}
-
-class _SVGAnimatedNumberImpl implements SVGAnimatedNumber native "*SVGAnimatedNumber" {
-
-  final num animVal;
-
-  num baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedNumberList
-abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
-
-  /** @domName SVGAnimatedNumberList.animVal */
-  SVGNumberList get animVal;
-
-  /** @domName SVGAnimatedNumberList.baseVal */
-  SVGNumberList get baseVal;
-}
-
-class _SVGAnimatedNumberListImpl implements SVGAnimatedNumberList, JavaScriptIndexingBehavior native "*SVGAnimatedNumberList" {
-
-  final _SVGNumberListImpl animVal;
-
-  final _SVGNumberListImpl baseVal;
-
-  _SVGAnimatedNumberImpl operator[](int index) => JS("_SVGAnimatedNumberImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGAnimatedNumberImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGAnimatedNumber> mixins.
-  // SVGAnimatedNumber is the element type.
-
-  // From Iterable<SVGAnimatedNumber>:
-
-  Iterator<SVGAnimatedNumber> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGAnimatedNumber>(this);
-  }
-
-  // From Collection<SVGAnimatedNumber>:
-
-  void add(SVGAnimatedNumber value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGAnimatedNumber value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGAnimatedNumber> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGAnimatedNumber element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGAnimatedNumber element)) => _Collections.map(this, [], f);
-
-  Collection<SVGAnimatedNumber> filter(bool f(SVGAnimatedNumber element)) =>
-     _Collections.filter(this, <SVGAnimatedNumber>[], f);
-
-  bool every(bool f(SVGAnimatedNumber element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGAnimatedNumber>:
-
-  void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGAnimatedNumber element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGAnimatedNumber get last => this[length - 1];
-
-  SVGAnimatedNumber removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimatedNumber>[]);
-
-  // -- end List<SVGAnimatedNumber> mixins.
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedPreserveAspectRatio
-abstract class SVGAnimatedPreserveAspectRatio {
-
-  /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  SVGPreserveAspectRatio get animVal;
-
-  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  SVGPreserveAspectRatio get baseVal;
-}
-
-class _SVGAnimatedPreserveAspectRatioImpl implements SVGAnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
-
-  final _SVGPreserveAspectRatioImpl animVal;
-
-  final _SVGPreserveAspectRatioImpl baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedRect
-abstract class SVGAnimatedRect {
-
-  /** @domName SVGAnimatedRect.animVal */
-  SVGRect get animVal;
-
-  /** @domName SVGAnimatedRect.baseVal */
-  SVGRect get baseVal;
-}
-
-class _SVGAnimatedRectImpl implements SVGAnimatedRect native "*SVGAnimatedRect" {
-
-  final _SVGRectImpl animVal;
-
-  final _SVGRectImpl baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedString
-abstract class SVGAnimatedString {
-
-  /** @domName SVGAnimatedString.animVal */
-  String get animVal;
-
-  /** @domName SVGAnimatedString.baseVal */
-  String baseVal;
-}
-
-class _SVGAnimatedStringImpl implements SVGAnimatedString native "*SVGAnimatedString" {
-
-  final String animVal;
-
-  String baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimatedTransformList
-abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
-
-  /** @domName SVGAnimatedTransformList.animVal */
-  SVGTransformList get animVal;
-
-  /** @domName SVGAnimatedTransformList.baseVal */
-  SVGTransformList get baseVal;
-}
-
-class _SVGAnimatedTransformListImpl implements SVGAnimatedTransformList, JavaScriptIndexingBehavior native "*SVGAnimatedTransformList" {
-
-  final _SVGTransformListImpl animVal;
-
-  final _SVGTransformListImpl baseVal;
-
-  _SVGAnimateTransformElementImpl operator[](int index) => JS("_SVGAnimateTransformElementImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGAnimateTransformElementImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGAnimateTransformElement> mixins.
-  // SVGAnimateTransformElement is the element type.
-
-  // From Iterable<SVGAnimateTransformElement>:
-
-  Iterator<SVGAnimateTransformElement> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGAnimateTransformElement>(this);
-  }
-
-  // From Collection<SVGAnimateTransformElement>:
-
-  void add(SVGAnimateTransformElement value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGAnimateTransformElement value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGAnimateTransformElement> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGAnimateTransformElement element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGAnimateTransformElement element)) => _Collections.map(this, [], f);
-
-  Collection<SVGAnimateTransformElement> filter(bool f(SVGAnimateTransformElement element)) =>
-     _Collections.filter(this, <SVGAnimateTransformElement>[], f);
-
-  bool every(bool f(SVGAnimateTransformElement element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGAnimateTransformElement>:
-
-  void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGAnimateTransformElement get last => this[length - 1];
-
-  SVGAnimateTransformElement removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGAnimateTransformElement>[]);
-
-  // -- end List<SVGAnimateTransformElement> mixins.
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGAnimationElement
-abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
-
-  /** @domName SVGAnimationElement.targetElement */
-  SVGElement get targetElement;
-
-  /** @domName SVGAnimationElement.getCurrentTime */
-  num getCurrentTime();
-
-  /** @domName SVGAnimationElement.getSimpleDuration */
-  num getSimpleDuration();
-
-  /** @domName SVGAnimationElement.getStartTime */
-  num getStartTime();
-}
-
-class _SVGAnimationElementImpl extends _SVGElementImpl implements SVGAnimationElement native "*SVGAnimationElement" {
-
-  final _SVGElementImpl targetElement;
-
-  num getCurrentTime() native;
-
-  num getSimpleDuration() native;
-
-  num getStartTime() native;
-
-  // From ElementTimeControl
-
-  void beginElement() native;
-
-  void beginElementAt(num offset) native;
-
-  void endElement() native;
-
-  void endElementAt(num offset) native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGCircleElement
-abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGCircleElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGCircleElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGCircleElement.r */
-  SVGAnimatedLength get r;
-}
-
-class _SVGCircleElementImpl extends _SVGElementImpl implements SVGCircleElement native "*SVGCircleElement" {
-
-  final _SVGAnimatedLengthImpl cx;
-
-  final _SVGAnimatedLengthImpl cy;
-
-  final _SVGAnimatedLengthImpl r;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGClipPathElement
-abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGClipPathElement.clipPathUnits */
-  SVGAnimatedEnumeration get clipPathUnits;
-}
-
-class _SVGClipPathElementImpl extends _SVGElementImpl implements SVGClipPathElement native "*SVGClipPathElement" {
-
-  final _SVGAnimatedEnumerationImpl clipPathUnits;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGColor
-abstract class SVGColor implements CSSValue {
-
-  static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
-
-  static const int SVG_COLORTYPE_RGBCOLOR = 1;
-
-  static const int SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2;
-
-  static const int SVG_COLORTYPE_UNKNOWN = 0;
-
-  /** @domName SVGColor.colorType */
-  int get colorType;
-
-  /** @domName SVGColor.rgbColor */
-  RGBColor get rgbColor;
-
-  /** @domName SVGColor.setColor */
-  void setColor(int colorType, String rgbColor, String iccColor);
-
-  /** @domName SVGColor.setRGBColor */
-  void setRGBColor(String rgbColor);
-
-  /** @domName SVGColor.setRGBColorICCColor */
-  void setRGBColorICCColor(String rgbColor, String iccColor);
-}
-
-class _SVGColorImpl extends _CSSValueImpl implements SVGColor native "*SVGColor" {
-
-  final int colorType;
-
-  final _RGBColorImpl rgbColor;
-
-  void setColor(int colorType, String rgbColor, String iccColor) native;
-
-  void setRGBColor(String rgbColor) native;
-
-  void setRGBColorICCColor(String rgbColor, String iccColor) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGComponentTransferFunctionElement
-abstract class SVGComponentTransferFunctionElement implements SVGElement {
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
-
-  static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
-
-  /** @domName SVGComponentTransferFunctionElement.amplitude */
-  SVGAnimatedNumber get amplitude;
-
-  /** @domName SVGComponentTransferFunctionElement.exponent */
-  SVGAnimatedNumber get exponent;
-
-  /** @domName SVGComponentTransferFunctionElement.intercept */
-  SVGAnimatedNumber get intercept;
-
-  /** @domName SVGComponentTransferFunctionElement.offset */
-  SVGAnimatedNumber get offset;
-
-  /** @domName SVGComponentTransferFunctionElement.slope */
-  SVGAnimatedNumber get slope;
-
-  /** @domName SVGComponentTransferFunctionElement.tableValues */
-  SVGAnimatedNumberList get tableValues;
-
-  /** @domName SVGComponentTransferFunctionElement.type */
-  SVGAnimatedEnumeration get type;
-}
-
-class _SVGComponentTransferFunctionElementImpl extends _SVGElementImpl implements SVGComponentTransferFunctionElement native "*SVGComponentTransferFunctionElement" {
-
-  final _SVGAnimatedNumberImpl amplitude;
-
-  final _SVGAnimatedNumberImpl exponent;
-
-  final _SVGAnimatedNumberImpl intercept;
-
-  final _SVGAnimatedNumberImpl offset;
-
-  final _SVGAnimatedNumberImpl slope;
-
-  final _SVGAnimatedNumberListImpl tableValues;
-
-  final _SVGAnimatedEnumerationImpl type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGCursorElement
-abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
-
-  /** @domName SVGCursorElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGCursorElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGCursorElementImpl extends _SVGElementImpl implements SVGCursorElement native "*SVGCursorElement" {
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGDefsElement
-abstract class SVGDefsElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-
-class _SVGDefsElementImpl extends _SVGElementImpl implements SVGDefsElement native "*SVGDefsElement" {
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGDescElement
-abstract class SVGDescElement implements SVGElement, SVGLangSpace, SVGStylable {
-}
-
-class _SVGDescElementImpl extends _SVGElementImpl implements SVGDescElement native "*SVGDescElement" {
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGDocument
-abstract class SVGDocument implements Document {
-
-  /** @domName SVGDocument.rootElement */
-  SVGSVGElement get rootElement;
-
-  /** @domName SVGDocument.createEvent */
-  Event $dom_createEvent(String eventType);
-}
-
-class _SVGDocumentImpl extends _DocumentImpl implements SVGDocument native "*SVGDocument" {
-
-  final _SVGSVGElementImpl rootElement;
-
-  _EventImpl $dom_createEvent(String eventType) native "createEvent";
-}
-// 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.
-
-
-/// @domName SVGElement
-abstract class SVGElement implements Element {
-
-  factory SVGElement.tag(String tag) =>
-      _SVGElementFactoryProvider.createSVGElement_tag(tag);
-  factory SVGElement.svg(String svg) =>
-      _SVGElementFactoryProvider.createSVGElement_svg(svg);
-
-  SVGElement clone(bool deep);
-
-
-  /** @domName SVGElement.id */
-  String id;
-
-  /** @domName SVGElement.ownerSVGElement */
-  SVGSVGElement get ownerSVGElement;
-
-  /** @domName SVGElement.viewportElement */
-  SVGElement get viewportElement;
-
-  /** @domName SVGElement.xmlbase */
-  String xmlbase;
-
-}
-// 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.
-
-class _AttributeClassSet extends _CssClassSet {
-  _AttributeClassSet(element) : super(element);
-
-  String $dom_className() => _element.attributes['class'];
-
-  void _write(Set s) {
-    _element.attributes['class'] = _formatSet(s);
-  }
-}
-
-class _SVGElementImpl extends _ElementImpl implements SVGElement native "*SVGElement" {
-  CSSClassSet get classes {
-    if (_cssClassSet == null) {
-      _cssClassSet = new _AttributeClassSet(_ptr);
-    }
-    return _cssClassSet;
-  }
-
-  List<Element> get elements => new _FilteredElementList(this);
-
-  void set elements(Collection<Element> value) {
-    final elements = this.elements;
-    elements.clear();
-    elements.addAll(value);
-  }
-
-  String get outerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.add(cloned);
-    return container.innerHTML;
-  }
-
-  String get innerHTML {
-    final container = new Element.tag("div");
-    final SVGElement cloned = this.clone(true);
-    container.elements.addAll(cloned.elements);
-    return container.innerHTML;
-  }
-
-  void set innerHTML(String svg) {
-    final container = new Element.tag("div");
-    // Wrap the SVG string in <svg> so that SVGElements are created, rather than
-    // HTMLElements.
-    container.innerHTML = '<svg version="1.1">$svg</svg>';
-    this.elements = container.elements[0].elements;
-  }
-
-
-  // Shadowing definition.
-  String get id => JS("String", "#.id", this);
-
-  void set id(String value) {
-    JS("void", "#.id = #", this, value);
-  }
-
-  final _SVGSVGElementImpl ownerSVGElement;
-
-  final _SVGElementImpl viewportElement;
-
-  String xmlbase;
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGElementInstance
-abstract class SVGElementInstance implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SVGElementInstanceEvents get on;
-
-  /** @domName SVGElementInstance.childNodes */
-  List<SVGElementInstance> get childNodes;
-
-  /** @domName SVGElementInstance.correspondingElement */
-  SVGElement get correspondingElement;
-
-  /** @domName SVGElementInstance.correspondingUseElement */
-  SVGUseElement get correspondingUseElement;
-
-  /** @domName SVGElementInstance.firstChild */
-  SVGElementInstance get firstChild;
-
-  /** @domName SVGElementInstance.lastChild */
-  SVGElementInstance get lastChild;
-
-  /** @domName SVGElementInstance.nextSibling */
-  SVGElementInstance get nextSibling;
-
-  /** @domName SVGElementInstance.parentNode */
-  SVGElementInstance get parentNode;
-
-  /** @domName SVGElementInstance.previousSibling */
-  SVGElementInstance get previousSibling;
-}
-
-abstract class SVGElementInstanceEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get reset;
-
-  EventListenerList get resize;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get unload;
-}
-
-class _SVGElementInstanceImpl extends _EventTargetImpl implements SVGElementInstance native "*SVGElementInstance" {
-
-  _SVGElementInstanceEventsImpl get on =>
-    new _SVGElementInstanceEventsImpl(this);
-
-  final _SVGElementInstanceListImpl childNodes;
-
-  final _SVGElementImpl correspondingElement;
-
-  final _SVGUseElementImpl correspondingUseElement;
-
-  final _SVGElementInstanceImpl firstChild;
-
-  final _SVGElementInstanceImpl lastChild;
-
-  final _SVGElementInstanceImpl nextSibling;
-
-  final _SVGElementInstanceImpl parentNode;
-
-  final _SVGElementInstanceImpl previousSibling;
-}
-
-class _SVGElementInstanceEventsImpl extends _EventsImpl implements SVGElementInstanceEvents {
-  _SVGElementInstanceEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get beforeCopy => this['beforecopy'];
-
-  EventListenerList get beforeCut => this['beforecut'];
-
-  EventListenerList get beforePaste => this['beforepaste'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get change => this['change'];
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get contextMenu => this['contextmenu'];
-
-  EventListenerList get copy => this['copy'];
-
-  EventListenerList get cut => this['cut'];
-
-  EventListenerList get doubleClick => this['dblclick'];
-
-  EventListenerList get drag => this['drag'];
-
-  EventListenerList get dragEnd => this['dragend'];
-
-  EventListenerList get dragEnter => this['dragenter'];
-
-  EventListenerList get dragLeave => this['dragleave'];
-
-  EventListenerList get dragOver => this['dragover'];
-
-  EventListenerList get dragStart => this['dragstart'];
-
-  EventListenerList get drop => this['drop'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get input => this['input'];
-
-  EventListenerList get keyDown => this['keydown'];
-
-  EventListenerList get keyPress => this['keypress'];
-
-  EventListenerList get keyUp => this['keyup'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get mouseDown => this['mousedown'];
-
-  EventListenerList get mouseMove => this['mousemove'];
-
-  EventListenerList get mouseOut => this['mouseout'];
-
-  EventListenerList get mouseOver => this['mouseover'];
-
-  EventListenerList get mouseUp => this['mouseup'];
-
-  EventListenerList get mouseWheel => this['mousewheel'];
-
-  EventListenerList get paste => this['paste'];
-
-  EventListenerList get reset => this['reset'];
-
-  EventListenerList get resize => this['resize'];
-
-  EventListenerList get scroll => this['scroll'];
-
-  EventListenerList get search => this['search'];
-
-  EventListenerList get select => this['select'];
-
-  EventListenerList get selectStart => this['selectstart'];
-
-  EventListenerList get submit => this['submit'];
-
-  EventListenerList get unload => this['unload'];
-}
-
-class _SVGElementInstanceListImpl implements List<SVGElementInstance>, JavaScriptIndexingBehavior native "*SVGElementInstanceList" {
-
-  final int length;
-
-  _SVGElementInstanceImpl operator[](int index) => JS("_SVGElementInstanceImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGElementInstanceImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGElementInstance> mixins.
-  // SVGElementInstance is the element type.
-
-  // From Iterable<SVGElementInstance>:
-
-  Iterator<SVGElementInstance> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGElementInstance>(this);
-  }
-
-  // From Collection<SVGElementInstance>:
-
-  void add(SVGElementInstance value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGElementInstance value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGElementInstance> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
-
-  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
-     _Collections.filter(this, <SVGElementInstance>[], f);
-
-  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGElementInstance>:
-
-  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGElementInstance element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGElementInstance element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGElementInstance get last => this[length - 1];
-
-  SVGElementInstance removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGElementInstance> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
-
-  // -- end List<SVGElementInstance> mixins.
-
-  _SVGElementInstanceImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGEllipseElement
-abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGEllipseElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGEllipseElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGEllipseElement.rx */
-  SVGAnimatedLength get rx;
-
-  /** @domName SVGEllipseElement.ry */
-  SVGAnimatedLength get ry;
-}
-
-class _SVGEllipseElementImpl extends _SVGElementImpl implements SVGEllipseElement native "*SVGEllipseElement" {
-
-  final _SVGAnimatedLengthImpl cx;
-
-  final _SVGAnimatedLengthImpl cy;
-
-  final _SVGAnimatedLengthImpl rx;
-
-  final _SVGAnimatedLengthImpl ry;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGException
-abstract class SVGException {
-
-  static const int SVG_INVALID_VALUE_ERR = 1;
-
-  static const int SVG_MATRIX_NOT_INVERTABLE = 2;
-
-  static const int SVG_WRONG_TYPE_ERR = 0;
-
-  /** @domName SVGException.code */
-  int get code;
-
-  /** @domName SVGException.message */
-  String get message;
-
-  /** @domName SVGException.name */
-  String get name;
-
-  /** @domName SVGException.toString */
-  String toString();
-}
-
-class _SVGExceptionImpl implements SVGException native "*SVGException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGExternalResourcesRequired
-abstract class SVGExternalResourcesRequired {
-
-  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEBlendElement
-abstract class SVGFEBlendElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_FEBLEND_MODE_DARKEN = 4;
-
-  static const int SVG_FEBLEND_MODE_LIGHTEN = 5;
-
-  static const int SVG_FEBLEND_MODE_MULTIPLY = 2;
-
-  static const int SVG_FEBLEND_MODE_NORMAL = 1;
-
-  static const int SVG_FEBLEND_MODE_SCREEN = 3;
-
-  static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
-
-  /** @domName SVGFEBlendElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEBlendElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFEBlendElement.mode */
-  SVGAnimatedEnumeration get mode;
-}
-
-class _SVGFEBlendElementImpl extends _SVGElementImpl implements SVGFEBlendElement native "*SVGFEBlendElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedStringImpl in2;
-
-  final _SVGAnimatedEnumerationImpl mode;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEColorMatrixElement
-abstract class SVGFEColorMatrixElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
-
-  static const int SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
-
-  static const int SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
-
-  static const int SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
-
-  static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
-
-  /** @domName SVGFEColorMatrixElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEColorMatrixElement.type */
-  SVGAnimatedEnumeration get type;
-
-  /** @domName SVGFEColorMatrixElement.values */
-  SVGAnimatedNumberList get values;
-}
-
-class _SVGFEColorMatrixElementImpl extends _SVGElementImpl implements SVGFEColorMatrixElement native "*SVGFEColorMatrixElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedEnumerationImpl type;
-
-  final _SVGAnimatedNumberListImpl values;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEComponentTransferElement
-abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEComponentTransferElement.in1 */
-  SVGAnimatedString get in1;
-}
-
-class _SVGFEComponentTransferElementImpl extends _SVGElementImpl implements SVGFEComponentTransferElement native "*SVGFEComponentTransferElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFECompositeElement
-abstract class SVGFECompositeElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_IN = 2;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_OUT = 3;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_OVER = 1;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
-
-  static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
-
-  /** @domName SVGFECompositeElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFECompositeElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFECompositeElement.k1 */
-  SVGAnimatedNumber get k1;
-
-  /** @domName SVGFECompositeElement.k2 */
-  SVGAnimatedNumber get k2;
-
-  /** @domName SVGFECompositeElement.k3 */
-  SVGAnimatedNumber get k3;
-
-  /** @domName SVGFECompositeElement.k4 */
-  SVGAnimatedNumber get k4;
-
-  /** @domName SVGFECompositeElement.operator */
-  SVGAnimatedEnumeration get operator;
-}
-
-class _SVGFECompositeElementImpl extends _SVGElementImpl implements SVGFECompositeElement native "*SVGFECompositeElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedStringImpl in2;
-
-  final _SVGAnimatedNumberImpl k1;
-
-  final _SVGAnimatedNumberImpl k2;
-
-  final _SVGAnimatedNumberImpl k3;
-
-  final _SVGAnimatedNumberImpl k4;
-
-  final _SVGAnimatedEnumerationImpl operator;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEConvolveMatrixElement
-abstract class SVGFEConvolveMatrixElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_EDGEMODE_DUPLICATE = 1;
-
-  static const int SVG_EDGEMODE_NONE = 3;
-
-  static const int SVG_EDGEMODE_UNKNOWN = 0;
-
-  static const int SVG_EDGEMODE_WRAP = 2;
-
-  /** @domName SVGFEConvolveMatrixElement.bias */
-  SVGAnimatedNumber get bias;
-
-  /** @domName SVGFEConvolveMatrixElement.divisor */
-  SVGAnimatedNumber get divisor;
-
-  /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  SVGAnimatedEnumeration get edgeMode;
-
-  /** @domName SVGFEConvolveMatrixElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  SVGAnimatedNumberList get kernelMatrix;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY;
-
-  /** @domName SVGFEConvolveMatrixElement.orderX */
-  SVGAnimatedInteger get orderX;
-
-  /** @domName SVGFEConvolveMatrixElement.orderY */
-  SVGAnimatedInteger get orderY;
-
-  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  SVGAnimatedBoolean get preserveAlpha;
-
-  /** @domName SVGFEConvolveMatrixElement.targetX */
-  SVGAnimatedInteger get targetX;
-
-  /** @domName SVGFEConvolveMatrixElement.targetY */
-  SVGAnimatedInteger get targetY;
-}
-
-class _SVGFEConvolveMatrixElementImpl extends _SVGElementImpl implements SVGFEConvolveMatrixElement native "*SVGFEConvolveMatrixElement" {
-
-  final _SVGAnimatedNumberImpl bias;
-
-  final _SVGAnimatedNumberImpl divisor;
-
-  final _SVGAnimatedEnumerationImpl edgeMode;
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedNumberListImpl kernelMatrix;
-
-  final _SVGAnimatedNumberImpl kernelUnitLengthX;
-
-  final _SVGAnimatedNumberImpl kernelUnitLengthY;
-
-  final _SVGAnimatedIntegerImpl orderX;
-
-  final _SVGAnimatedIntegerImpl orderY;
-
-  final _SVGAnimatedBooleanImpl preserveAlpha;
-
-  final _SVGAnimatedIntegerImpl targetX;
-
-  final _SVGAnimatedIntegerImpl targetY;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEDiffuseLightingElement
-abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  SVGAnimatedNumber get diffuseConstant;
-
-  /** @domName SVGFEDiffuseLightingElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX;
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY;
-
-  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale;
-}
-
-class _SVGFEDiffuseLightingElementImpl extends _SVGElementImpl implements SVGFEDiffuseLightingElement native "*SVGFEDiffuseLightingElement" {
-
-  final _SVGAnimatedNumberImpl diffuseConstant;
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedNumberImpl kernelUnitLengthX;
-
-  final _SVGAnimatedNumberImpl kernelUnitLengthY;
-
-  final _SVGAnimatedNumberImpl surfaceScale;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEDisplacementMapElement
-abstract class SVGFEDisplacementMapElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_CHANNEL_A = 4;
-
-  static const int SVG_CHANNEL_B = 3;
-
-  static const int SVG_CHANNEL_G = 2;
-
-  static const int SVG_CHANNEL_R = 1;
-
-  static const int SVG_CHANNEL_UNKNOWN = 0;
-
-  /** @domName SVGFEDisplacementMapElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDisplacementMapElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFEDisplacementMapElement.scale */
-  SVGAnimatedNumber get scale;
-
-  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  SVGAnimatedEnumeration get xChannelSelector;
-
-  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  SVGAnimatedEnumeration get yChannelSelector;
-}
-
-class _SVGFEDisplacementMapElementImpl extends _SVGElementImpl implements SVGFEDisplacementMapElement native "*SVGFEDisplacementMapElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedStringImpl in2;
-
-  final _SVGAnimatedNumberImpl scale;
-
-  final _SVGAnimatedEnumerationImpl xChannelSelector;
-
-  final _SVGAnimatedEnumerationImpl yChannelSelector;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEDistantLightElement
-abstract class SVGFEDistantLightElement implements SVGElement {
-
-  /** @domName SVGFEDistantLightElement.azimuth */
-  SVGAnimatedNumber get azimuth;
-
-  /** @domName SVGFEDistantLightElement.elevation */
-  SVGAnimatedNumber get elevation;
-}
-
-class _SVGFEDistantLightElementImpl extends _SVGElementImpl implements SVGFEDistantLightElement native "*SVGFEDistantLightElement" {
-
-  final _SVGAnimatedNumberImpl azimuth;
-
-  final _SVGAnimatedNumberImpl elevation;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEDropShadowElement
-abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEDropShadowElement.dx */
-  SVGAnimatedNumber get dx;
-
-  /** @domName SVGFEDropShadowElement.dy */
-  SVGAnimatedNumber get dy;
-
-  /** @domName SVGFEDropShadowElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDropShadowElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX;
-
-  /** @domName SVGFEDropShadowElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY;
-
-  /** @domName SVGFEDropShadowElement.setStdDeviation */
-  void setStdDeviation(num stdDeviationX, num stdDeviationY);
-}
-
-class _SVGFEDropShadowElementImpl extends _SVGElementImpl implements SVGFEDropShadowElement native "*SVGFEDropShadowElement" {
-
-  final _SVGAnimatedNumberImpl dx;
-
-  final _SVGAnimatedNumberImpl dy;
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedNumberImpl stdDeviationX;
-
-  final _SVGAnimatedNumberImpl stdDeviationY;
-
-  void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEFloodElement
-abstract class SVGFEFloodElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-}
-
-class _SVGFEFloodElementImpl extends _SVGElementImpl implements SVGFEFloodElement native "*SVGFEFloodElement" {
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEFuncAElement
-abstract class SVGFEFuncAElement implements SVGComponentTransferFunctionElement {
-}
-
-class _SVGFEFuncAElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncAElement native "*SVGFEFuncAElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEFuncBElement
-abstract class SVGFEFuncBElement implements SVGComponentTransferFunctionElement {
-}
-
-class _SVGFEFuncBElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncBElement native "*SVGFEFuncBElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEFuncGElement
-abstract class SVGFEFuncGElement implements SVGComponentTransferFunctionElement {
-}
-
-class _SVGFEFuncGElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncGElement native "*SVGFEFuncGElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEFuncRElement
-abstract class SVGFEFuncRElement implements SVGComponentTransferFunctionElement {
-}
-
-class _SVGFEFuncRElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncRElement native "*SVGFEFuncRElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEGaussianBlurElement
-abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEGaussianBlurElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX;
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY;
-
-  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
-  void setStdDeviation(num stdDeviationX, num stdDeviationY);
-}
-
-class _SVGFEGaussianBlurElementImpl extends _SVGElementImpl implements SVGFEGaussianBlurElement native "*SVGFEGaussianBlurElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedNumberImpl stdDeviationX;
-
-  final _SVGAnimatedNumberImpl stdDeviationY;
-
-  void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEImageElement
-abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-}
-
-class _SVGFEImageElementImpl extends _SVGElementImpl implements SVGFEImageElement native "*SVGFEImageElement" {
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEMergeElement
-abstract class SVGFEMergeElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-}
-
-class _SVGFEMergeElementImpl extends _SVGElementImpl implements SVGFEMergeElement native "*SVGFEMergeElement" {
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEMergeNodeElement
-abstract class SVGFEMergeNodeElement implements SVGElement {
-
-  /** @domName SVGFEMergeNodeElement.in1 */
-  SVGAnimatedString get in1;
-}
-
-class _SVGFEMergeNodeElementImpl extends _SVGElementImpl implements SVGFEMergeNodeElement native "*SVGFEMergeNodeElement" {
-
-  final _SVGAnimatedStringImpl in1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEMorphologyElement
-abstract class SVGFEMorphologyElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
-
-  static const int SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
-
-  static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
-
-  /** @domName SVGFEMorphologyElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEMorphologyElement.operator */
-  SVGAnimatedEnumeration get operator;
-
-  /** @domName SVGFEMorphologyElement.radiusX */
-  SVGAnimatedNumber get radiusX;
-
-  /** @domName SVGFEMorphologyElement.radiusY */
-  SVGAnimatedNumber get radiusY;
-
-  /** @domName SVGFEMorphologyElement.setRadius */
-  void setRadius(num radiusX, num radiusY);
-}
-
-class _SVGFEMorphologyElementImpl extends _SVGElementImpl implements SVGFEMorphologyElement native "*SVGFEMorphologyElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedEnumerationImpl operator;
-
-  final _SVGAnimatedNumberImpl radiusX;
-
-  final _SVGAnimatedNumberImpl radiusY;
-
-  void setRadius(num radiusX, num radiusY) native;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEOffsetElement
-abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFEOffsetElement.dx */
-  SVGAnimatedNumber get dx;
-
-  /** @domName SVGFEOffsetElement.dy */
-  SVGAnimatedNumber get dy;
-
-  /** @domName SVGFEOffsetElement.in1 */
-  SVGAnimatedString get in1;
-}
-
-class _SVGFEOffsetElementImpl extends _SVGElementImpl implements SVGFEOffsetElement native "*SVGFEOffsetElement" {
-
-  final _SVGAnimatedNumberImpl dx;
-
-  final _SVGAnimatedNumberImpl dy;
-
-  final _SVGAnimatedStringImpl in1;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFEPointLightElement
-abstract class SVGFEPointLightElement implements SVGElement {
-
-  /** @domName SVGFEPointLightElement.x */
-  SVGAnimatedNumber get x;
-
-  /** @domName SVGFEPointLightElement.y */
-  SVGAnimatedNumber get y;
-
-  /** @domName SVGFEPointLightElement.z */
-  SVGAnimatedNumber get z;
-}
-
-class _SVGFEPointLightElementImpl extends _SVGElementImpl implements SVGFEPointLightElement native "*SVGFEPointLightElement" {
-
-  final _SVGAnimatedNumberImpl x;
-
-  final _SVGAnimatedNumberImpl y;
-
-  final _SVGAnimatedNumberImpl z;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFESpecularLightingElement
-abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFESpecularLightingElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFESpecularLightingElement.specularConstant */
-  SVGAnimatedNumber get specularConstant;
-
-  /** @domName SVGFESpecularLightingElement.specularExponent */
-  SVGAnimatedNumber get specularExponent;
-
-  /** @domName SVGFESpecularLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale;
-}
-
-class _SVGFESpecularLightingElementImpl extends _SVGElementImpl implements SVGFESpecularLightingElement native "*SVGFESpecularLightingElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  final _SVGAnimatedNumberImpl specularConstant;
-
-  final _SVGAnimatedNumberImpl specularExponent;
-
-  final _SVGAnimatedNumberImpl surfaceScale;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFESpotLightElement
-abstract class SVGFESpotLightElement implements SVGElement {
-
-  /** @domName SVGFESpotLightElement.limitingConeAngle */
-  SVGAnimatedNumber get limitingConeAngle;
-
-  /** @domName SVGFESpotLightElement.pointsAtX */
-  SVGAnimatedNumber get pointsAtX;
-
-  /** @domName SVGFESpotLightElement.pointsAtY */
-  SVGAnimatedNumber get pointsAtY;
-
-  /** @domName SVGFESpotLightElement.pointsAtZ */
-  SVGAnimatedNumber get pointsAtZ;
-
-  /** @domName SVGFESpotLightElement.specularExponent */
-  SVGAnimatedNumber get specularExponent;
-
-  /** @domName SVGFESpotLightElement.x */
-  SVGAnimatedNumber get x;
-
-  /** @domName SVGFESpotLightElement.y */
-  SVGAnimatedNumber get y;
-
-  /** @domName SVGFESpotLightElement.z */
-  SVGAnimatedNumber get z;
-}
-
-class _SVGFESpotLightElementImpl extends _SVGElementImpl implements SVGFESpotLightElement native "*SVGFESpotLightElement" {
-
-  final _SVGAnimatedNumberImpl limitingConeAngle;
-
-  final _SVGAnimatedNumberImpl pointsAtX;
-
-  final _SVGAnimatedNumberImpl pointsAtY;
-
-  final _SVGAnimatedNumberImpl pointsAtZ;
-
-  final _SVGAnimatedNumberImpl specularExponent;
-
-  final _SVGAnimatedNumberImpl x;
-
-  final _SVGAnimatedNumberImpl y;
-
-  final _SVGAnimatedNumberImpl z;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFETileElement
-abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  /** @domName SVGFETileElement.in1 */
-  SVGAnimatedString get in1;
-}
-
-class _SVGFETileElementImpl extends _SVGElementImpl implements SVGFETileElement native "*SVGFETileElement" {
-
-  final _SVGAnimatedStringImpl in1;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFETurbulenceElement
-abstract class SVGFETurbulenceElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-
-  static const int SVG_STITCHTYPE_NOSTITCH = 2;
-
-  static const int SVG_STITCHTYPE_STITCH = 1;
-
-  static const int SVG_STITCHTYPE_UNKNOWN = 0;
-
-  static const int SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
-
-  static const int SVG_TURBULENCE_TYPE_TURBULENCE = 2;
-
-  static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
-
-  /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  SVGAnimatedNumber get baseFrequencyX;
-
-  /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  SVGAnimatedNumber get baseFrequencyY;
-
-  /** @domName SVGFETurbulenceElement.numOctaves */
-  SVGAnimatedInteger get numOctaves;
-
-  /** @domName SVGFETurbulenceElement.seed */
-  SVGAnimatedNumber get seed;
-
-  /** @domName SVGFETurbulenceElement.stitchTiles */
-  SVGAnimatedEnumeration get stitchTiles;
-
-  /** @domName SVGFETurbulenceElement.type */
-  SVGAnimatedEnumeration get type;
-}
-
-class _SVGFETurbulenceElementImpl extends _SVGElementImpl implements SVGFETurbulenceElement native "*SVGFETurbulenceElement" {
-
-  final _SVGAnimatedNumberImpl baseFrequencyX;
-
-  final _SVGAnimatedNumberImpl baseFrequencyY;
-
-  final _SVGAnimatedIntegerImpl numOctaves;
-
-  final _SVGAnimatedNumberImpl seed;
-
-  final _SVGAnimatedEnumerationImpl stitchTiles;
-
-  final _SVGAnimatedEnumerationImpl type;
-
-  // From SVGFilterPrimitiveStandardAttributes
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedStringImpl result;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFilterElement
-abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
-
-  /** @domName SVGFilterElement.filterResX */
-  SVGAnimatedInteger get filterResX;
-
-  /** @domName SVGFilterElement.filterResY */
-  SVGAnimatedInteger get filterResY;
-
-  /** @domName SVGFilterElement.filterUnits */
-  SVGAnimatedEnumeration get filterUnits;
-
-  /** @domName SVGFilterElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGFilterElement.primitiveUnits */
-  SVGAnimatedEnumeration get primitiveUnits;
-
-  /** @domName SVGFilterElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGFilterElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGFilterElement.y */
-  SVGAnimatedLength get y;
-
-  /** @domName SVGFilterElement.setFilterRes */
-  void setFilterRes(int filterResX, int filterResY);
-}
-
-class _SVGFilterElementImpl extends _SVGElementImpl implements SVGFilterElement native "*SVGFilterElement" {
-
-  final _SVGAnimatedIntegerImpl filterResX;
-
-  final _SVGAnimatedIntegerImpl filterResY;
-
-  final _SVGAnimatedEnumerationImpl filterUnits;
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedEnumerationImpl primitiveUnits;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  void setFilterRes(int filterResX, int filterResY) native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFilterPrimitiveStandardAttributes
-abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  SVGAnimatedString get result;
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFitToViewBox
-abstract class SVGFitToViewBox {
-
-  /** @domName SVGFitToViewBox.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-
-  /** @domName SVGFitToViewBox.viewBox */
-  SVGAnimatedRect get viewBox;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontElement
-abstract class SVGFontElement implements SVGElement {
-}
-
-class _SVGFontElementImpl extends _SVGElementImpl implements SVGFontElement native "*SVGFontElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontFaceElement
-abstract class SVGFontFaceElement implements SVGElement {
-}
-
-class _SVGFontFaceElementImpl extends _SVGElementImpl implements SVGFontFaceElement native "*SVGFontFaceElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontFaceFormatElement
-abstract class SVGFontFaceFormatElement implements SVGElement {
-}
-
-class _SVGFontFaceFormatElementImpl extends _SVGElementImpl implements SVGFontFaceFormatElement native "*SVGFontFaceFormatElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontFaceNameElement
-abstract class SVGFontFaceNameElement implements SVGElement {
-}
-
-class _SVGFontFaceNameElementImpl extends _SVGElementImpl implements SVGFontFaceNameElement native "*SVGFontFaceNameElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontFaceSrcElement
-abstract class SVGFontFaceSrcElement implements SVGElement {
-}
-
-class _SVGFontFaceSrcElementImpl extends _SVGElementImpl implements SVGFontFaceSrcElement native "*SVGFontFaceSrcElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGFontFaceUriElement
-abstract class SVGFontFaceUriElement implements SVGElement {
-}
-
-class _SVGFontFaceUriElementImpl extends _SVGElementImpl implements SVGFontFaceUriElement native "*SVGFontFaceUriElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGForeignObjectElement
-abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGForeignObjectElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGForeignObjectElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGForeignObjectElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGForeignObjectElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGForeignObjectElementImpl extends _SVGElementImpl implements SVGForeignObjectElement native "*SVGForeignObjectElement" {
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGGElement
-abstract class SVGGElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-
-class _SVGGElementImpl extends _SVGElementImpl implements SVGGElement native "*SVGGElement" {
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGGlyphElement
-abstract class SVGGlyphElement implements SVGElement {
-}
-
-class _SVGGlyphElementImpl extends _SVGElementImpl implements SVGGlyphElement native "*SVGGlyphElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGGlyphRefElement
-abstract class SVGGlyphRefElement implements SVGElement, SVGURIReference, SVGStylable {
-
-  /** @domName SVGGlyphRefElement.dx */
-  num dx;
-
-  /** @domName SVGGlyphRefElement.dy */
-  num dy;
-
-  /** @domName SVGGlyphRefElement.format */
-  String format;
-
-  /** @domName SVGGlyphRefElement.glyphRef */
-  String glyphRef;
-
-  /** @domName SVGGlyphRefElement.x */
-  num x;
-
-  /** @domName SVGGlyphRefElement.y */
-  num y;
-}
-
-class _SVGGlyphRefElementImpl extends _SVGElementImpl implements SVGGlyphRefElement native "*SVGGlyphRefElement" {
-
-  num dx;
-
-  num dy;
-
-  String format;
-
-  String glyphRef;
-
-  num x;
-
-  num y;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGGradientElement
-abstract class SVGGradientElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired, SVGStylable {
-
-  static const int SVG_SPREADMETHOD_PAD = 1;
-
-  static const int SVG_SPREADMETHOD_REFLECT = 2;
-
-  static const int SVG_SPREADMETHOD_REPEAT = 3;
-
-  static const int SVG_SPREADMETHOD_UNKNOWN = 0;
-
-  /** @domName SVGGradientElement.gradientTransform */
-  SVGAnimatedTransformList get gradientTransform;
-
-  /** @domName SVGGradientElement.gradientUnits */
-  SVGAnimatedEnumeration get gradientUnits;
-
-  /** @domName SVGGradientElement.spreadMethod */
-  SVGAnimatedEnumeration get spreadMethod;
-}
-
-class _SVGGradientElementImpl extends _SVGElementImpl implements SVGGradientElement native "*SVGGradientElement" {
-
-  final _SVGAnimatedTransformListImpl gradientTransform;
-
-  final _SVGAnimatedEnumerationImpl gradientUnits;
-
-  final _SVGAnimatedEnumerationImpl spreadMethod;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGHKernElement
-abstract class SVGHKernElement implements SVGElement {
-}
-
-class _SVGHKernElementImpl extends _SVGElementImpl implements SVGHKernElement native "*SVGHKernElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGImageElement
-abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGImageElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-
-  /** @domName SVGImageElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGImageElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGImageElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGImageElementImpl extends _SVGElementImpl implements SVGImageElement native "*SVGImageElement" {
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLangSpace
-abstract class SVGLangSpace {
-
-  /** @domName SVGLangSpace.xmllang */
-  String xmllang;
-
-  /** @domName SVGLangSpace.xmlspace */
-  String xmlspace;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLength
-abstract class SVGLength {
-
-  static const int SVG_LENGTHTYPE_CM = 6;
-
-  static const int SVG_LENGTHTYPE_EMS = 3;
-
-  static const int SVG_LENGTHTYPE_EXS = 4;
-
-  static const int SVG_LENGTHTYPE_IN = 8;
-
-  static const int SVG_LENGTHTYPE_MM = 7;
-
-  static const int SVG_LENGTHTYPE_NUMBER = 1;
-
-  static const int SVG_LENGTHTYPE_PC = 10;
-
-  static const int SVG_LENGTHTYPE_PERCENTAGE = 2;
-
-  static const int SVG_LENGTHTYPE_PT = 9;
-
-  static const int SVG_LENGTHTYPE_PX = 5;
-
-  static const int SVG_LENGTHTYPE_UNKNOWN = 0;
-
-  /** @domName SVGLength.unitType */
-  int get unitType;
-
-  /** @domName SVGLength.value */
-  num value;
-
-  /** @domName SVGLength.valueAsString */
-  String valueAsString;
-
-  /** @domName SVGLength.valueInSpecifiedUnits */
-  num valueInSpecifiedUnits;
-
-  /** @domName SVGLength.convertToSpecifiedUnits */
-  void convertToSpecifiedUnits(int unitType);
-
-  /** @domName SVGLength.newValueSpecifiedUnits */
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits);
-}
-
-class _SVGLengthImpl implements SVGLength native "*SVGLength" {
-
-  final int unitType;
-
-  num value;
-
-  String valueAsString;
-
-  num valueInSpecifiedUnits;
-
-  void convertToSpecifiedUnits(int unitType) native;
-
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLengthList
-abstract class SVGLengthList implements List<SVGLength> {
-
-  /** @domName SVGLengthList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGLengthList.appendItem */
-  SVGLength appendItem(SVGLength item);
-
-  /** @domName SVGLengthList.clear */
-  void clear();
-
-  /** @domName SVGLengthList.getItem */
-  SVGLength getItem(int index);
-
-  /** @domName SVGLengthList.initialize */
-  SVGLength initialize(SVGLength item);
-
-  /** @domName SVGLengthList.insertItemBefore */
-  SVGLength insertItemBefore(SVGLength item, int index);
-
-  /** @domName SVGLengthList.removeItem */
-  SVGLength removeItem(int index);
-
-  /** @domName SVGLengthList.replaceItem */
-  SVGLength replaceItem(SVGLength item, int index);
-}
-
-class _SVGLengthListImpl implements SVGLengthList, JavaScriptIndexingBehavior native "*SVGLengthList" {
-
-  final int numberOfItems;
-
-  _SVGLengthImpl operator[](int index) => JS("_SVGLengthImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGLengthImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGLength> mixins.
-  // SVGLength is the element type.
-
-  // From Iterable<SVGLength>:
-
-  Iterator<SVGLength> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGLength>(this);
-  }
-
-  // From Collection<SVGLength>:
-
-  void add(SVGLength value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGLength value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGLength> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGLength element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGLength element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGLength element)) => _Collections.map(this, [], f);
-
-  Collection<SVGLength> filter(bool f(SVGLength element)) =>
-     _Collections.filter(this, <SVGLength>[], f);
-
-  bool every(bool f(SVGLength element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGLength element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGLength>:
-
-  void sort([Comparator<SVGLength> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGLength element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGLength element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGLength get last => this[length - 1];
-
-  SVGLength removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGLength> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGLength>[]);
-
-  // -- end List<SVGLength> mixins.
-
-  _SVGLengthImpl appendItem(_SVGLengthImpl item) native;
-
-  void clear() native;
-
-  _SVGLengthImpl getItem(int index) native;
-
-  _SVGLengthImpl initialize(_SVGLengthImpl item) native;
-
-  _SVGLengthImpl insertItemBefore(_SVGLengthImpl item, int index) native;
-
-  _SVGLengthImpl removeItem(int index) native;
-
-  _SVGLengthImpl replaceItem(_SVGLengthImpl item, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLineElement
-abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGLineElement.x1 */
-  SVGAnimatedLength get x1;
-
-  /** @domName SVGLineElement.x2 */
-  SVGAnimatedLength get x2;
-
-  /** @domName SVGLineElement.y1 */
-  SVGAnimatedLength get y1;
-
-  /** @domName SVGLineElement.y2 */
-  SVGAnimatedLength get y2;
-}
-
-class _SVGLineElementImpl extends _SVGElementImpl implements SVGLineElement native "*SVGLineElement" {
-
-  final _SVGAnimatedLengthImpl x1;
-
-  final _SVGAnimatedLengthImpl x2;
-
-  final _SVGAnimatedLengthImpl y1;
-
-  final _SVGAnimatedLengthImpl y2;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLinearGradientElement
-abstract class SVGLinearGradientElement implements SVGGradientElement {
-
-  /** @domName SVGLinearGradientElement.x1 */
-  SVGAnimatedLength get x1;
-
-  /** @domName SVGLinearGradientElement.x2 */
-  SVGAnimatedLength get x2;
-
-  /** @domName SVGLinearGradientElement.y1 */
-  SVGAnimatedLength get y1;
-
-  /** @domName SVGLinearGradientElement.y2 */
-  SVGAnimatedLength get y2;
-}
-
-class _SVGLinearGradientElementImpl extends _SVGGradientElementImpl implements SVGLinearGradientElement native "*SVGLinearGradientElement" {
-
-  final _SVGAnimatedLengthImpl x1;
-
-  final _SVGAnimatedLengthImpl x2;
-
-  final _SVGAnimatedLengthImpl y1;
-
-  final _SVGAnimatedLengthImpl y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGLocatable
-abstract class SVGLocatable {
-
-  /** @domName SVGLocatable.farthestViewportElement */
-  SVGElement get farthestViewportElement;
-
-  /** @domName SVGLocatable.nearestViewportElement */
-  SVGElement get nearestViewportElement;
-
-  /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox();
-
-  /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM();
-
-  /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM();
-
-  /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMPathElement
-abstract class SVGMPathElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired {
-}
-
-class _SVGMPathElementImpl extends _SVGElementImpl implements SVGMPathElement native "*SVGMPathElement" {
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMarkerElement
-abstract class SVGMarkerElement implements SVGElement, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
-
-  static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
-
-  static const int SVG_MARKERUNITS_UNKNOWN = 0;
-
-  static const int SVG_MARKERUNITS_USERSPACEONUSE = 1;
-
-  static const int SVG_MARKER_ORIENT_ANGLE = 2;
-
-  static const int SVG_MARKER_ORIENT_AUTO = 1;
-
-  static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
-
-  /** @domName SVGMarkerElement.markerHeight */
-  SVGAnimatedLength get markerHeight;
-
-  /** @domName SVGMarkerElement.markerUnits */
-  SVGAnimatedEnumeration get markerUnits;
-
-  /** @domName SVGMarkerElement.markerWidth */
-  SVGAnimatedLength get markerWidth;
-
-  /** @domName SVGMarkerElement.orientAngle */
-  SVGAnimatedAngle get orientAngle;
-
-  /** @domName SVGMarkerElement.orientType */
-  SVGAnimatedEnumeration get orientType;
-
-  /** @domName SVGMarkerElement.refX */
-  SVGAnimatedLength get refX;
-
-  /** @domName SVGMarkerElement.refY */
-  SVGAnimatedLength get refY;
-
-  /** @domName SVGMarkerElement.setOrientToAngle */
-  void setOrientToAngle(SVGAngle angle);
-
-  /** @domName SVGMarkerElement.setOrientToAuto */
-  void setOrientToAuto();
-}
-
-class _SVGMarkerElementImpl extends _SVGElementImpl implements SVGMarkerElement native "*SVGMarkerElement" {
-
-  final _SVGAnimatedLengthImpl markerHeight;
-
-  final _SVGAnimatedEnumerationImpl markerUnits;
-
-  final _SVGAnimatedLengthImpl markerWidth;
-
-  final _SVGAnimatedAngleImpl orientAngle;
-
-  final _SVGAnimatedEnumerationImpl orientType;
-
-  final _SVGAnimatedLengthImpl refX;
-
-  final _SVGAnimatedLengthImpl refY;
-
-  void setOrientToAngle(_SVGAngleImpl angle) native;
-
-  void setOrientToAuto() native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMaskElement
-abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
-
-  /** @domName SVGMaskElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGMaskElement.maskContentUnits */
-  SVGAnimatedEnumeration get maskContentUnits;
-
-  /** @domName SVGMaskElement.maskUnits */
-  SVGAnimatedEnumeration get maskUnits;
-
-  /** @domName SVGMaskElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGMaskElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGMaskElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGMaskElementImpl extends _SVGElementImpl implements SVGMaskElement native "*SVGMaskElement" {
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedEnumerationImpl maskContentUnits;
-
-  final _SVGAnimatedEnumerationImpl maskUnits;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMatrix
-abstract class SVGMatrix {
-
-  /** @domName SVGMatrix.a */
-  num a;
-
-  /** @domName SVGMatrix.b */
-  num b;
-
-  /** @domName SVGMatrix.c */
-  num c;
-
-  /** @domName SVGMatrix.d */
-  num d;
-
-  /** @domName SVGMatrix.e */
-  num e;
-
-  /** @domName SVGMatrix.f */
-  num f;
-
-  /** @domName SVGMatrix.flipX */
-  SVGMatrix flipX();
-
-  /** @domName SVGMatrix.flipY */
-  SVGMatrix flipY();
-
-  /** @domName SVGMatrix.inverse */
-  SVGMatrix inverse();
-
-  /** @domName SVGMatrix.multiply */
-  SVGMatrix multiply(SVGMatrix secondMatrix);
-
-  /** @domName SVGMatrix.rotate */
-  SVGMatrix rotate(num angle);
-
-  /** @domName SVGMatrix.rotateFromVector */
-  SVGMatrix rotateFromVector(num x, num y);
-
-  /** @domName SVGMatrix.scale */
-  SVGMatrix scale(num scaleFactor);
-
-  /** @domName SVGMatrix.scaleNonUniform */
-  SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY);
-
-  /** @domName SVGMatrix.skewX */
-  SVGMatrix skewX(num angle);
-
-  /** @domName SVGMatrix.skewY */
-  SVGMatrix skewY(num angle);
-
-  /** @domName SVGMatrix.translate */
-  SVGMatrix translate(num x, num y);
-}
-
-class _SVGMatrixImpl implements SVGMatrix native "*SVGMatrix" {
-
-  num a;
-
-  num b;
-
-  num c;
-
-  num d;
-
-  num e;
-
-  num f;
-
-  _SVGMatrixImpl flipX() native;
-
-  _SVGMatrixImpl flipY() native;
-
-  _SVGMatrixImpl inverse() native;
-
-  _SVGMatrixImpl multiply(_SVGMatrixImpl secondMatrix) native;
-
-  _SVGMatrixImpl rotate(num angle) native;
-
-  _SVGMatrixImpl rotateFromVector(num x, num y) native;
-
-  _SVGMatrixImpl scale(num scaleFactor) native;
-
-  _SVGMatrixImpl scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
-
-  _SVGMatrixImpl skewX(num angle) native;
-
-  _SVGMatrixImpl skewY(num angle) native;
-
-  _SVGMatrixImpl translate(num x, num y) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMetadataElement
-abstract class SVGMetadataElement implements SVGElement {
-}
-
-class _SVGMetadataElementImpl extends _SVGElementImpl implements SVGMetadataElement native "*SVGMetadataElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGMissingGlyphElement
-abstract class SVGMissingGlyphElement implements SVGElement {
-}
-
-class _SVGMissingGlyphElementImpl extends _SVGElementImpl implements SVGMissingGlyphElement native "*SVGMissingGlyphElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGNumber
-abstract class SVGNumber {
-
-  /** @domName SVGNumber.value */
-  num value;
-}
-
-class _SVGNumberImpl implements SVGNumber native "*SVGNumber" {
-
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGNumberList
-abstract class SVGNumberList implements List<SVGNumber> {
-
-  /** @domName SVGNumberList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGNumberList.appendItem */
-  SVGNumber appendItem(SVGNumber item);
-
-  /** @domName SVGNumberList.clear */
-  void clear();
-
-  /** @domName SVGNumberList.getItem */
-  SVGNumber getItem(int index);
-
-  /** @domName SVGNumberList.initialize */
-  SVGNumber initialize(SVGNumber item);
-
-  /** @domName SVGNumberList.insertItemBefore */
-  SVGNumber insertItemBefore(SVGNumber item, int index);
-
-  /** @domName SVGNumberList.removeItem */
-  SVGNumber removeItem(int index);
-
-  /** @domName SVGNumberList.replaceItem */
-  SVGNumber replaceItem(SVGNumber item, int index);
-}
-
-class _SVGNumberListImpl implements SVGNumberList, JavaScriptIndexingBehavior native "*SVGNumberList" {
-
-  final int numberOfItems;
-
-  _SVGNumberImpl operator[](int index) => JS("_SVGNumberImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGNumberImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGNumber> mixins.
-  // SVGNumber is the element type.
-
-  // From Iterable<SVGNumber>:
-
-  Iterator<SVGNumber> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGNumber>(this);
-  }
-
-  // From Collection<SVGNumber>:
-
-  void add(SVGNumber value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGNumber value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGNumber> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGNumber element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGNumber element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGNumber element)) => _Collections.map(this, [], f);
-
-  Collection<SVGNumber> filter(bool f(SVGNumber element)) =>
-     _Collections.filter(this, <SVGNumber>[], f);
-
-  bool every(bool f(SVGNumber element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGNumber>:
-
-  void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGNumber element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGNumber element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGNumber get last => this[length - 1];
-
-  SVGNumber removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGNumber> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGNumber>[]);
-
-  // -- end List<SVGNumber> mixins.
-
-  _SVGNumberImpl appendItem(_SVGNumberImpl item) native;
-
-  void clear() native;
-
-  _SVGNumberImpl getItem(int index) native;
-
-  _SVGNumberImpl initialize(_SVGNumberImpl item) native;
-
-  _SVGNumberImpl insertItemBefore(_SVGNumberImpl item, int index) native;
-
-  _SVGNumberImpl removeItem(int index) native;
-
-  _SVGNumberImpl replaceItem(_SVGNumberImpl item, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPaint
-abstract class SVGPaint implements SVGColor {
-
-  static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
-
-  static const int SVG_PAINTTYPE_NONE = 101;
-
-  static const int SVG_PAINTTYPE_RGBCOLOR = 1;
-
-  static const int SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2;
-
-  static const int SVG_PAINTTYPE_UNKNOWN = 0;
-
-  static const int SVG_PAINTTYPE_URI = 107;
-
-  static const int SVG_PAINTTYPE_URI_CURRENTCOLOR = 104;
-
-  static const int SVG_PAINTTYPE_URI_NONE = 103;
-
-  static const int SVG_PAINTTYPE_URI_RGBCOLOR = 105;
-
-  static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
-
-  /** @domName SVGPaint.paintType */
-  int get paintType;
-
-  /** @domName SVGPaint.uri */
-  String get uri;
-
-  /** @domName SVGPaint.setPaint */
-  void setPaint(int paintType, String uri, String rgbColor, String iccColor);
-
-  /** @domName SVGPaint.setUri */
-  void setUri(String uri);
-}
-
-class _SVGPaintImpl extends _SVGColorImpl implements SVGPaint native "*SVGPaint" {
-
-  final int paintType;
-
-  final String uri;
-
-  void setPaint(int paintType, String uri, String rgbColor, String iccColor) native;
-
-  void setUri(String uri) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathElement
-abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  SVGPathSegList get animatedNormalizedPathSegList;
-
-  /** @domName SVGPathElement.animatedPathSegList */
-  SVGPathSegList get animatedPathSegList;
-
-  /** @domName SVGPathElement.normalizedPathSegList */
-  SVGPathSegList get normalizedPathSegList;
-
-  /** @domName SVGPathElement.pathLength */
-  SVGAnimatedNumber get pathLength;
-
-  /** @domName SVGPathElement.pathSegList */
-  SVGPathSegList get pathSegList;
-
-  /** @domName SVGPathElement.createSVGPathSegArcAbs */
-  SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
-
-  /** @domName SVGPathElement.createSVGPathSegArcRel */
-  SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
-
-  /** @domName SVGPathElement.createSVGPathSegClosePath */
-  SVGPathSegClosePath createSVGPathSegClosePath();
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
-  SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
-  SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
-  SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
-  SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
-  SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
-  SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
-  SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
-  SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
-  SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
-  SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
-  SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
-  SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
-  SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
-  SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y);
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
-  SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
-  SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y);
-
-  /** @domName SVGPathElement.getPathSegAtLength */
-  int getPathSegAtLength(num distance);
-
-  /** @domName SVGPathElement.getPointAtLength */
-  SVGPoint getPointAtLength(num distance);
-
-  /** @domName SVGPathElement.getTotalLength */
-  num getTotalLength();
-}
-
-class _SVGPathElementImpl extends _SVGElementImpl implements SVGPathElement native "*SVGPathElement" {
-
-  final _SVGPathSegListImpl animatedNormalizedPathSegList;
-
-  final _SVGPathSegListImpl animatedPathSegList;
-
-  final _SVGPathSegListImpl normalizedPathSegList;
-
-  final _SVGAnimatedNumberImpl pathLength;
-
-  final _SVGPathSegListImpl pathSegList;
-
-  _SVGPathSegArcAbsImpl createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
-
-  _SVGPathSegArcRelImpl createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
-
-  _SVGPathSegClosePathImpl createSVGPathSegClosePath() native;
-
-  _SVGPathSegCurvetoCubicAbsImpl createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native;
-
-  _SVGPathSegCurvetoCubicRelImpl createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native;
-
-  _SVGPathSegCurvetoCubicSmoothAbsImpl createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native;
-
-  _SVGPathSegCurvetoCubicSmoothRelImpl createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native;
-
-  _SVGPathSegCurvetoQuadraticAbsImpl createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native;
-
-  _SVGPathSegCurvetoQuadraticRelImpl createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native;
-
-  _SVGPathSegCurvetoQuadraticSmoothAbsImpl createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native;
-
-  _SVGPathSegCurvetoQuadraticSmoothRelImpl createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native;
-
-  _SVGPathSegLinetoAbsImpl createSVGPathSegLinetoAbs(num x, num y) native;
-
-  _SVGPathSegLinetoHorizontalAbsImpl createSVGPathSegLinetoHorizontalAbs(num x) native;
-
-  _SVGPathSegLinetoHorizontalRelImpl createSVGPathSegLinetoHorizontalRel(num x) native;
-
-  _SVGPathSegLinetoRelImpl createSVGPathSegLinetoRel(num x, num y) native;
-
-  _SVGPathSegLinetoVerticalAbsImpl createSVGPathSegLinetoVerticalAbs(num y) native;
-
-  _SVGPathSegLinetoVerticalRelImpl createSVGPathSegLinetoVerticalRel(num y) native;
-
-  _SVGPathSegMovetoAbsImpl createSVGPathSegMovetoAbs(num x, num y) native;
-
-  _SVGPathSegMovetoRelImpl createSVGPathSegMovetoRel(num x, num y) native;
-
-  int getPathSegAtLength(num distance) native;
-
-  _SVGPointImpl getPointAtLength(num distance) native;
-
-  num getTotalLength() native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSeg
-abstract class SVGPathSeg {
-
-  static const int PATHSEG_ARC_ABS = 10;
-
-  static const int PATHSEG_ARC_REL = 11;
-
-  static const int PATHSEG_CLOSEPATH = 1;
-
-  static const int PATHSEG_CURVETO_CUBIC_ABS = 6;
-
-  static const int PATHSEG_CURVETO_CUBIC_REL = 7;
-
-  static const int PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
-
-  static const int PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
-
-  static const int PATHSEG_CURVETO_QUADRATIC_ABS = 8;
-
-  static const int PATHSEG_CURVETO_QUADRATIC_REL = 9;
-
-  static const int PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
-
-  static const int PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
-
-  static const int PATHSEG_LINETO_ABS = 4;
-
-  static const int PATHSEG_LINETO_HORIZONTAL_ABS = 12;
-
-  static const int PATHSEG_LINETO_HORIZONTAL_REL = 13;
-
-  static const int PATHSEG_LINETO_REL = 5;
-
-  static const int PATHSEG_LINETO_VERTICAL_ABS = 14;
-
-  static const int PATHSEG_LINETO_VERTICAL_REL = 15;
-
-  static const int PATHSEG_MOVETO_ABS = 2;
-
-  static const int PATHSEG_MOVETO_REL = 3;
-
-  static const int PATHSEG_UNKNOWN = 0;
-
-  /** @domName SVGPathSeg.pathSegType */
-  int get pathSegType;
-
-  /** @domName SVGPathSeg.pathSegTypeAsLetter */
-  String get pathSegTypeAsLetter;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegArcAbs
-abstract class SVGPathSegArcAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegArcAbs.angle */
-  num angle;
-
-  /** @domName SVGPathSegArcAbs.largeArcFlag */
-  bool largeArcFlag;
-
-  /** @domName SVGPathSegArcAbs.r1 */
-  num r1;
-
-  /** @domName SVGPathSegArcAbs.r2 */
-  num r2;
-
-  /** @domName SVGPathSegArcAbs.sweepFlag */
-  bool sweepFlag;
-
-  /** @domName SVGPathSegArcAbs.x */
-  num x;
-
-  /** @domName SVGPathSegArcAbs.y */
-  num y;
-}
-
-class _SVGPathSegArcAbsImpl extends _SVGPathSegImpl implements SVGPathSegArcAbs native "*SVGPathSegArcAbs" {
-
-  num angle;
-
-  bool largeArcFlag;
-
-  num r1;
-
-  num r2;
-
-  bool sweepFlag;
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegArcRel
-abstract class SVGPathSegArcRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegArcRel.angle */
-  num angle;
-
-  /** @domName SVGPathSegArcRel.largeArcFlag */
-  bool largeArcFlag;
-
-  /** @domName SVGPathSegArcRel.r1 */
-  num r1;
-
-  /** @domName SVGPathSegArcRel.r2 */
-  num r2;
-
-  /** @domName SVGPathSegArcRel.sweepFlag */
-  bool sweepFlag;
-
-  /** @domName SVGPathSegArcRel.x */
-  num x;
-
-  /** @domName SVGPathSegArcRel.y */
-  num y;
-}
-
-class _SVGPathSegArcRelImpl extends _SVGPathSegImpl implements SVGPathSegArcRel native "*SVGPathSegArcRel" {
-
-  num angle;
-
-  bool largeArcFlag;
-
-  num r1;
-
-  num r2;
-
-  bool sweepFlag;
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegClosePath
-abstract class SVGPathSegClosePath implements SVGPathSeg {
-}
-
-class _SVGPathSegClosePathImpl extends _SVGPathSegImpl implements SVGPathSegClosePath native "*SVGPathSegClosePath" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoCubicAbs
-abstract class SVGPathSegCurvetoCubicAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
-  num y1;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
-  num y2;
-}
-
-class _SVGPathSegCurvetoCubicAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicAbs native "*SVGPathSegCurvetoCubicAbs" {
-
-  num x;
-
-  num x1;
-
-  num x2;
-
-  num y;
-
-  num y1;
-
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoCubicRel
-abstract class SVGPathSegCurvetoCubicRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoCubicRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicRel.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoCubicRel.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y1 */
-  num y1;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y2 */
-  num y2;
-}
-
-class _SVGPathSegCurvetoCubicRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicRel native "*SVGPathSegCurvetoCubicRel" {
-
-  num x;
-
-  num x1;
-
-  num x2;
-
-  num y;
-
-  num y1;
-
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoCubicSmoothAbs
-abstract class SVGPathSegCurvetoCubicSmoothAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
-  num y2;
-}
-
-class _SVGPathSegCurvetoCubicSmoothAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicSmoothAbs native "*SVGPathSegCurvetoCubicSmoothAbs" {
-
-  num x;
-
-  num x2;
-
-  num y;
-
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoCubicSmoothRel
-abstract class SVGPathSegCurvetoCubicSmoothRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
-  num y2;
-}
-
-class _SVGPathSegCurvetoCubicSmoothRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicSmoothRel native "*SVGPathSegCurvetoCubicSmoothRel" {
-
-  num x;
-
-  num x2;
-
-  num y;
-
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoQuadraticAbs
-abstract class SVGPathSegCurvetoQuadraticAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
-  num y1;
-}
-
-class _SVGPathSegCurvetoQuadraticAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticAbs native "*SVGPathSegCurvetoQuadraticAbs" {
-
-  num x;
-
-  num x1;
-
-  num y;
-
-  num y1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoQuadraticRel
-abstract class SVGPathSegCurvetoQuadraticRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
-  num y1;
-}
-
-class _SVGPathSegCurvetoQuadraticRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticRel native "*SVGPathSegCurvetoQuadraticRel" {
-
-  num x;
-
-  num x1;
-
-  num y;
-
-  num y1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoQuadraticSmoothAbs
-abstract class SVGPathSegCurvetoQuadraticSmoothAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
-  num y;
-}
-
-class _SVGPathSegCurvetoQuadraticSmoothAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticSmoothAbs native "*SVGPathSegCurvetoQuadraticSmoothAbs" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegCurvetoQuadraticSmoothRel
-abstract class SVGPathSegCurvetoQuadraticSmoothRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
-  num y;
-}
-
-class _SVGPathSegCurvetoQuadraticSmoothRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticSmoothRel native "*SVGPathSegCurvetoQuadraticSmoothRel" {
-
-  num x;
-
-  num y;
-}
-
-class _SVGPathSegImpl implements SVGPathSeg native "*SVGPathSeg" {
-
-  final int pathSegType;
-
-  final String pathSegTypeAsLetter;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoAbs
-abstract class SVGPathSegLinetoAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoAbs.x */
-  num x;
-
-  /** @domName SVGPathSegLinetoAbs.y */
-  num y;
-}
-
-class _SVGPathSegLinetoAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoAbs native "*SVGPathSegLinetoAbs" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoHorizontalAbs
-abstract class SVGPathSegLinetoHorizontalAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoHorizontalAbs.x */
-  num x;
-}
-
-class _SVGPathSegLinetoHorizontalAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoHorizontalAbs native "*SVGPathSegLinetoHorizontalAbs" {
-
-  num x;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoHorizontalRel
-abstract class SVGPathSegLinetoHorizontalRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoHorizontalRel.x */
-  num x;
-}
-
-class _SVGPathSegLinetoHorizontalRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoHorizontalRel native "*SVGPathSegLinetoHorizontalRel" {
-
-  num x;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoRel
-abstract class SVGPathSegLinetoRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoRel.x */
-  num x;
-
-  /** @domName SVGPathSegLinetoRel.y */
-  num y;
-}
-
-class _SVGPathSegLinetoRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoRel native "*SVGPathSegLinetoRel" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoVerticalAbs
-abstract class SVGPathSegLinetoVerticalAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoVerticalAbs.y */
-  num y;
-}
-
-class _SVGPathSegLinetoVerticalAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoVerticalAbs native "*SVGPathSegLinetoVerticalAbs" {
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegLinetoVerticalRel
-abstract class SVGPathSegLinetoVerticalRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegLinetoVerticalRel.y */
-  num y;
-}
-
-class _SVGPathSegLinetoVerticalRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoVerticalRel native "*SVGPathSegLinetoVerticalRel" {
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegList
-abstract class SVGPathSegList implements List<SVGPathSeg> {
-
-  /** @domName SVGPathSegList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGPathSegList.appendItem */
-  SVGPathSeg appendItem(SVGPathSeg newItem);
-
-  /** @domName SVGPathSegList.clear */
-  void clear();
-
-  /** @domName SVGPathSegList.getItem */
-  SVGPathSeg getItem(int index);
-
-  /** @domName SVGPathSegList.initialize */
-  SVGPathSeg initialize(SVGPathSeg newItem);
-
-  /** @domName SVGPathSegList.insertItemBefore */
-  SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index);
-
-  /** @domName SVGPathSegList.removeItem */
-  SVGPathSeg removeItem(int index);
-
-  /** @domName SVGPathSegList.replaceItem */
-  SVGPathSeg replaceItem(SVGPathSeg newItem, int index);
-}
-
-class _SVGPathSegListImpl implements SVGPathSegList, JavaScriptIndexingBehavior native "*SVGPathSegList" {
-
-  final int numberOfItems;
-
-  _SVGPathSegImpl operator[](int index) => JS("_SVGPathSegImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGPathSegImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGPathSeg> mixins.
-  // SVGPathSeg is the element type.
-
-  // From Iterable<SVGPathSeg>:
-
-  Iterator<SVGPathSeg> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGPathSeg>(this);
-  }
-
-  // From Collection<SVGPathSeg>:
-
-  void add(SVGPathSeg value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGPathSeg value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGPathSeg> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGPathSeg element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGPathSeg element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGPathSeg element)) => _Collections.map(this, [], f);
-
-  Collection<SVGPathSeg> filter(bool f(SVGPathSeg element)) =>
-     _Collections.filter(this, <SVGPathSeg>[], f);
-
-  bool every(bool f(SVGPathSeg element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGPathSeg>:
-
-  void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGPathSeg element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGPathSeg element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGPathSeg get last => this[length - 1];
-
-  SVGPathSeg removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGPathSeg> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGPathSeg>[]);
-
-  // -- end List<SVGPathSeg> mixins.
-
-  _SVGPathSegImpl appendItem(_SVGPathSegImpl newItem) native;
-
-  void clear() native;
-
-  _SVGPathSegImpl getItem(int index) native;
-
-  _SVGPathSegImpl initialize(_SVGPathSegImpl newItem) native;
-
-  _SVGPathSegImpl insertItemBefore(_SVGPathSegImpl newItem, int index) native;
-
-  _SVGPathSegImpl removeItem(int index) native;
-
-  _SVGPathSegImpl replaceItem(_SVGPathSegImpl newItem, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegMovetoAbs
-abstract class SVGPathSegMovetoAbs implements SVGPathSeg {
-
-  /** @domName SVGPathSegMovetoAbs.x */
-  num x;
-
-  /** @domName SVGPathSegMovetoAbs.y */
-  num y;
-}
-
-class _SVGPathSegMovetoAbsImpl extends _SVGPathSegImpl implements SVGPathSegMovetoAbs native "*SVGPathSegMovetoAbs" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPathSegMovetoRel
-abstract class SVGPathSegMovetoRel implements SVGPathSeg {
-
-  /** @domName SVGPathSegMovetoRel.x */
-  num x;
-
-  /** @domName SVGPathSegMovetoRel.y */
-  num y;
-}
-
-class _SVGPathSegMovetoRelImpl extends _SVGPathSegImpl implements SVGPathSegMovetoRel native "*SVGPathSegMovetoRel" {
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPatternElement
-abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
-
-  /** @domName SVGPatternElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGPatternElement.patternContentUnits */
-  SVGAnimatedEnumeration get patternContentUnits;
-
-  /** @domName SVGPatternElement.patternTransform */
-  SVGAnimatedTransformList get patternTransform;
-
-  /** @domName SVGPatternElement.patternUnits */
-  SVGAnimatedEnumeration get patternUnits;
-
-  /** @domName SVGPatternElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGPatternElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGPatternElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGPatternElementImpl extends _SVGElementImpl implements SVGPatternElement native "*SVGPatternElement" {
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedEnumerationImpl patternContentUnits;
-
-  final _SVGAnimatedTransformListImpl patternTransform;
-
-  final _SVGAnimatedEnumerationImpl patternUnits;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPoint
-abstract class SVGPoint {
-
-  /** @domName SVGPoint.x */
-  num x;
-
-  /** @domName SVGPoint.y */
-  num y;
-
-  /** @domName SVGPoint.matrixTransform */
-  SVGPoint matrixTransform(SVGMatrix matrix);
-}
-
-class _SVGPointImpl implements SVGPoint native "*SVGPoint" {
-
-  num x;
-
-  num y;
-
-  _SVGPointImpl matrixTransform(_SVGMatrixImpl matrix) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPointList
-abstract class SVGPointList {
-
-  /** @domName SVGPointList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGPointList.appendItem */
-  SVGPoint appendItem(SVGPoint item);
-
-  /** @domName SVGPointList.clear */
-  void clear();
-
-  /** @domName SVGPointList.getItem */
-  SVGPoint getItem(int index);
-
-  /** @domName SVGPointList.initialize */
-  SVGPoint initialize(SVGPoint item);
-
-  /** @domName SVGPointList.insertItemBefore */
-  SVGPoint insertItemBefore(SVGPoint item, int index);
-
-  /** @domName SVGPointList.removeItem */
-  SVGPoint removeItem(int index);
-
-  /** @domName SVGPointList.replaceItem */
-  SVGPoint replaceItem(SVGPoint item, int index);
-}
-
-class _SVGPointListImpl implements SVGPointList native "*SVGPointList" {
-
-  final int numberOfItems;
-
-  _SVGPointImpl appendItem(_SVGPointImpl item) native;
-
-  void clear() native;
-
-  _SVGPointImpl getItem(int index) native;
-
-  _SVGPointImpl initialize(_SVGPointImpl item) native;
-
-  _SVGPointImpl insertItemBefore(_SVGPointImpl item, int index) native;
-
-  _SVGPointImpl removeItem(int index) native;
-
-  _SVGPointImpl replaceItem(_SVGPointImpl item, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPolygonElement
-abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGPolygonElement.animatedPoints */
-  SVGPointList get animatedPoints;
-
-  /** @domName SVGPolygonElement.points */
-  SVGPointList get points;
-}
-
-class _SVGPolygonElementImpl extends _SVGElementImpl implements SVGPolygonElement native "*SVGPolygonElement" {
-
-  final _SVGPointListImpl animatedPoints;
-
-  final _SVGPointListImpl points;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPolylineElement
-abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGPolylineElement.animatedPoints */
-  SVGPointList get animatedPoints;
-
-  /** @domName SVGPolylineElement.points */
-  SVGPointList get points;
-}
-
-class _SVGPolylineElementImpl extends _SVGElementImpl implements SVGPolylineElement native "*SVGPolylineElement" {
-
-  final _SVGPointListImpl animatedPoints;
-
-  final _SVGPointListImpl points;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGPreserveAspectRatio
-abstract class SVGPreserveAspectRatio {
-
-  static const int SVG_MEETORSLICE_MEET = 1;
-
-  static const int SVG_MEETORSLICE_SLICE = 2;
-
-  static const int SVG_MEETORSLICE_UNKNOWN = 0;
-
-  static const int SVG_PRESERVEASPECTRATIO_NONE = 1;
-
-  static const int SVG_PRESERVEASPECTRATIO_UNKNOWN = 0;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMAXYMID = 7;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMIDYMID = 6;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMINYMAX = 8;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMINYMID = 5;
-
-  static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
-
-  /** @domName SVGPreserveAspectRatio.align */
-  int align;
-
-  /** @domName SVGPreserveAspectRatio.meetOrSlice */
-  int meetOrSlice;
-}
-
-class _SVGPreserveAspectRatioImpl implements SVGPreserveAspectRatio native "*SVGPreserveAspectRatio" {
-
-  int align;
-
-  int meetOrSlice;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGRadialGradientElement
-abstract class SVGRadialGradientElement implements SVGGradientElement {
-
-  /** @domName SVGRadialGradientElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGRadialGradientElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGRadialGradientElement.fr */
-  SVGAnimatedLength get fr;
-
-  /** @domName SVGRadialGradientElement.fx */
-  SVGAnimatedLength get fx;
-
-  /** @domName SVGRadialGradientElement.fy */
-  SVGAnimatedLength get fy;
-
-  /** @domName SVGRadialGradientElement.r */
-  SVGAnimatedLength get r;
-}
-
-class _SVGRadialGradientElementImpl extends _SVGGradientElementImpl implements SVGRadialGradientElement native "*SVGRadialGradientElement" {
-
-  final _SVGAnimatedLengthImpl cx;
-
-  final _SVGAnimatedLengthImpl cy;
-
-  final _SVGAnimatedLengthImpl fr;
-
-  final _SVGAnimatedLengthImpl fx;
-
-  final _SVGAnimatedLengthImpl fy;
-
-  final _SVGAnimatedLengthImpl r;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGRect
-abstract class SVGRect {
-
-  /** @domName SVGRect.height */
-  num height;
-
-  /** @domName SVGRect.width */
-  num width;
-
-  /** @domName SVGRect.x */
-  num x;
-
-  /** @domName SVGRect.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGRectElement
-abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGRectElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGRectElement.rx */
-  SVGAnimatedLength get rx;
-
-  /** @domName SVGRectElement.ry */
-  SVGAnimatedLength get ry;
-
-  /** @domName SVGRectElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGRectElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGRectElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGRectElementImpl extends _SVGElementImpl implements SVGRectElement native "*SVGRectElement" {
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGAnimatedLengthImpl rx;
-
-  final _SVGAnimatedLengthImpl ry;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-
-class _SVGRectImpl implements SVGRect native "*SVGRect" {
-
-  num height;
-
-  num width;
-
-  num x;
-
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGRenderingIntent
-abstract class SVGRenderingIntent {
-
-  static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
-
-  static const int RENDERING_INTENT_AUTO = 1;
-
-  static const int RENDERING_INTENT_PERCEPTUAL = 2;
-
-  static const int RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3;
-
-  static const int RENDERING_INTENT_SATURATION = 4;
-
-  static const int RENDERING_INTENT_UNKNOWN = 0;
-}
-
-class _SVGRenderingIntentImpl implements SVGRenderingIntent native "*SVGRenderingIntent" {
-}
-// 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.
-
-
-/// @domName SVGSVGElement
-abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
-  factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
-
-
-  /** @domName SVGSVGElement.contentScriptType */
-  String contentScriptType;
-
-  /** @domName SVGSVGElement.contentStyleType */
-  String contentStyleType;
-
-  /** @domName SVGSVGElement.currentScale */
-  num currentScale;
-
-  /** @domName SVGSVGElement.currentTranslate */
-  SVGPoint get currentTranslate;
-
-  /** @domName SVGSVGElement.currentView */
-  SVGViewSpec get currentView;
-
-  /** @domName SVGSVGElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  num get pixelUnitToMillimeterX;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  num get pixelUnitToMillimeterY;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  num get screenPixelToMillimeterX;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  num get screenPixelToMillimeterY;
-
-  /** @domName SVGSVGElement.useCurrentView */
-  bool get useCurrentView;
-
-  /** @domName SVGSVGElement.viewport */
-  SVGRect get viewport;
-
-  /** @domName SVGSVGElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGSVGElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGSVGElement.y */
-  SVGAnimatedLength get y;
-
-  /** @domName SVGSVGElement.animationsPaused */
-  bool animationsPaused();
-
-  /** @domName SVGSVGElement.checkEnclosure */
-  bool checkEnclosure(SVGElement element, SVGRect rect);
-
-  /** @domName SVGSVGElement.checkIntersection */
-  bool checkIntersection(SVGElement element, SVGRect rect);
-
-  /** @domName SVGSVGElement.createSVGAngle */
-  SVGAngle createSVGAngle();
-
-  /** @domName SVGSVGElement.createSVGLength */
-  SVGLength createSVGLength();
-
-  /** @domName SVGSVGElement.createSVGMatrix */
-  SVGMatrix createSVGMatrix();
-
-  /** @domName SVGSVGElement.createSVGNumber */
-  SVGNumber createSVGNumber();
-
-  /** @domName SVGSVGElement.createSVGPoint */
-  SVGPoint createSVGPoint();
-
-  /** @domName SVGSVGElement.createSVGRect */
-  SVGRect createSVGRect();
-
-  /** @domName SVGSVGElement.createSVGTransform */
-  SVGTransform createSVGTransform();
-
-  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
-
-  /** @domName SVGSVGElement.deselectAll */
-  void deselectAll();
-
-  /** @domName SVGSVGElement.forceRedraw */
-  void forceRedraw();
-
-  /** @domName SVGSVGElement.getCurrentTime */
-  num getCurrentTime();
-
-  /** @domName SVGSVGElement.getElementById */
-  Element getElementById(String elementId);
-
-  /** @domName SVGSVGElement.getEnclosureList */
-  List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement);
-
-  /** @domName SVGSVGElement.getIntersectionList */
-  List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement);
-
-  /** @domName SVGSVGElement.pauseAnimations */
-  void pauseAnimations();
-
-  /** @domName SVGSVGElement.setCurrentTime */
-  void setCurrentTime(num seconds);
-
-  /** @domName SVGSVGElement.suspendRedraw */
-  int suspendRedraw(int maxWaitMilliseconds);
-
-  /** @domName SVGSVGElement.unpauseAnimations */
-  void unpauseAnimations();
-
-  /** @domName SVGSVGElement.unsuspendRedraw */
-  void unsuspendRedraw(int suspendHandleId);
-
-  /** @domName SVGSVGElement.unsuspendRedrawAll */
-  void unsuspendRedrawAll();
-
-}
-
-class _SVGSVGElementImpl extends _SVGElementImpl implements SVGSVGElement native "*SVGSVGElement" {
-
-  String contentScriptType;
-
-  String contentStyleType;
-
-  num currentScale;
-
-  final _SVGPointImpl currentTranslate;
-
-  final _SVGViewSpecImpl currentView;
-
-  final _SVGAnimatedLengthImpl height;
-
-  final num pixelUnitToMillimeterX;
-
-  final num pixelUnitToMillimeterY;
-
-  final num screenPixelToMillimeterX;
-
-  final num screenPixelToMillimeterY;
-
-  final bool useCurrentView;
-
-  final _SVGRectImpl viewport;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  bool animationsPaused() native;
-
-  bool checkEnclosure(_SVGElementImpl element, _SVGRectImpl rect) native;
-
-  bool checkIntersection(_SVGElementImpl element, _SVGRectImpl rect) native;
-
-  _SVGAngleImpl createSVGAngle() native;
-
-  _SVGLengthImpl createSVGLength() native;
-
-  _SVGMatrixImpl createSVGMatrix() native;
-
-  _SVGNumberImpl createSVGNumber() native;
-
-  _SVGPointImpl createSVGPoint() native;
-
-  _SVGRectImpl createSVGRect() native;
-
-  _SVGTransformImpl createSVGTransform() native;
-
-  _SVGTransformImpl createSVGTransformFromMatrix(_SVGMatrixImpl matrix) native;
-
-  void deselectAll() native;
-
-  void forceRedraw() native;
-
-  num getCurrentTime() native;
-
-  _ElementImpl getElementById(String elementId) native;
-
-  List<Node> getEnclosureList(_SVGRectImpl rect, _SVGElementImpl referenceElement) native;
-
-  List<Node> getIntersectionList(_SVGRectImpl rect, _SVGElementImpl referenceElement) native;
-
-  void pauseAnimations() native;
-
-  void setCurrentTime(num seconds) native;
-
-  int suspendRedraw(int maxWaitMilliseconds) native;
-
-  void unpauseAnimations() native;
-
-  void unsuspendRedraw(int suspendHandleId) native;
-
-  void unsuspendRedrawAll() native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGZoomAndPan
-
-  int zoomAndPan;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGScriptElement
-abstract class SVGScriptElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired {
-
-  /** @domName SVGScriptElement.type */
-  String type;
-}
-
-class _SVGScriptElementImpl extends _SVGElementImpl implements SVGScriptElement native "*SVGScriptElement" {
-
-  String type;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGSetElement
-abstract class SVGSetElement implements SVGAnimationElement {
-}
-
-class _SVGSetElementImpl extends _SVGAnimationElementImpl implements SVGSetElement native "*SVGSetElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGStopElement
-abstract class SVGStopElement implements SVGElement, SVGStylable {
-
-  /** @domName SVGStopElement.offset */
-  SVGAnimatedNumber get offset;
-}
-
-class _SVGStopElementImpl extends _SVGElementImpl implements SVGStopElement native "*SVGStopElement" {
-
-  final _SVGAnimatedNumberImpl offset;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGStringList
-abstract class SVGStringList implements List<String> {
-
-  /** @domName SVGStringList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGStringList.appendItem */
-  String appendItem(String item);
-
-  /** @domName SVGStringList.clear */
-  void clear();
-
-  /** @domName SVGStringList.getItem */
-  String getItem(int index);
-
-  /** @domName SVGStringList.initialize */
-  String initialize(String item);
-
-  /** @domName SVGStringList.insertItemBefore */
-  String insertItemBefore(String item, int index);
-
-  /** @domName SVGStringList.removeItem */
-  String removeItem(int index);
-
-  /** @domName SVGStringList.replaceItem */
-  String replaceItem(String item, int index);
-}
-
-class _SVGStringListImpl implements SVGStringList, JavaScriptIndexingBehavior native "*SVGStringList" {
-
-  final int numberOfItems;
-
-  String operator[](int index) => JS("String", "#[#]", this, index);
-
-  void operator[]=(int index, String value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<String> mixins.
-  // String is the element type.
-
-  // From Iterable<String>:
-
-  Iterator<String> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<String>(this);
-  }
-
-  // From Collection<String>:
-
-  void add(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<String> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(String element) => _Collections.contains(this, element);
-
-  void forEach(void f(String element)) => _Collections.forEach(this, f);
-
-  Collection map(f(String element)) => _Collections.map(this, [], f);
-
-  Collection<String> filter(bool f(String element)) =>
-     _Collections.filter(this, <String>[], f);
-
-  bool every(bool f(String element)) => _Collections.every(this, f);
-
-  bool some(bool f(String element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<String>:
-
-  void sort([Comparator<String> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(String element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(String element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  String get last => this[length - 1];
-
-  String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<String> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <String>[]);
-
-  // -- end List<String> mixins.
-
-  String appendItem(String item) native;
-
-  void clear() native;
-
-  String getItem(int index) native;
-
-  String initialize(String item) native;
-
-  String insertItemBefore(String item, int index) native;
-
-  String removeItem(int index) native;
-
-  String replaceItem(String item, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGStylable
-abstract class SVGStylable {
-
-  /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName;
-
-  /** @domName SVGStylable.style */
-  CSSStyleDeclaration get style;
-
-  /** @domName SVGStylable.getPresentationAttribute */
-  CSSValue getPresentationAttribute(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGStyleElement
-abstract class SVGStyleElement implements SVGElement, SVGLangSpace {
-
-  /** @domName SVGStyleElement.disabled */
-  bool disabled;
-
-  /** @domName SVGStyleElement.media */
-  String media;
-
-  /** @domName SVGStyleElement.title */
-  String title;
-
-  /** @domName SVGStyleElement.type */
-  String type;
-}
-
-class _SVGStyleElementImpl extends _SVGElementImpl implements SVGStyleElement native "*SVGStyleElement" {
-
-  bool disabled;
-
-  String media;
-
-  // Shadowing definition.
-  String get title => JS("String", "#.title", this);
-
-  void set title(String value) {
-    JS("void", "#.title = #", this, value);
-  }
-
-  String type;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGSwitchElement
-abstract class SVGSwitchElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-
-class _SVGSwitchElementImpl extends _SVGElementImpl implements SVGSwitchElement native "*SVGSwitchElement" {
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGSymbolElement
-abstract class SVGSymbolElement implements SVGElement, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
-}
-
-class _SVGSymbolElementImpl extends _SVGElementImpl implements SVGSymbolElement native "*SVGSymbolElement" {
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTRefElement
-abstract class SVGTRefElement implements SVGTextPositioningElement, SVGURIReference {
-}
-
-class _SVGTRefElementImpl extends _SVGTextPositioningElementImpl implements SVGTRefElement native "*SVGTRefElement" {
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTSpanElement
-abstract class SVGTSpanElement implements SVGTextPositioningElement {
-}
-
-class _SVGTSpanElementImpl extends _SVGTextPositioningElementImpl implements SVGTSpanElement native "*SVGTSpanElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTests
-abstract class SVGTests {
-
-  /** @domName SVGTests.requiredExtensions */
-  SVGStringList get requiredExtensions;
-
-  /** @domName SVGTests.requiredFeatures */
-  SVGStringList get requiredFeatures;
-
-  /** @domName SVGTests.systemLanguage */
-  SVGStringList get systemLanguage;
-
-  /** @domName SVGTests.hasExtension */
-  bool hasExtension(String extension);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTextContentElement
-abstract class SVGTextContentElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
-
-  static const int LENGTHADJUST_SPACING = 1;
-
-  static const int LENGTHADJUST_SPACINGANDGLYPHS = 2;
-
-  static const int LENGTHADJUST_UNKNOWN = 0;
-
-  /** @domName SVGTextContentElement.lengthAdjust */
-  SVGAnimatedEnumeration get lengthAdjust;
-
-  /** @domName SVGTextContentElement.textLength */
-  SVGAnimatedLength get textLength;
-
-  /** @domName SVGTextContentElement.getCharNumAtPosition */
-  int getCharNumAtPosition(SVGPoint point);
-
-  /** @domName SVGTextContentElement.getComputedTextLength */
-  num getComputedTextLength();
-
-  /** @domName SVGTextContentElement.getEndPositionOfChar */
-  SVGPoint getEndPositionOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getExtentOfChar */
-  SVGRect getExtentOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getNumberOfChars */
-  int getNumberOfChars();
-
-  /** @domName SVGTextContentElement.getRotationOfChar */
-  num getRotationOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getStartPositionOfChar */
-  SVGPoint getStartPositionOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getSubStringLength */
-  num getSubStringLength(int offset, int length);
-
-  /** @domName SVGTextContentElement.selectSubString */
-  void selectSubString(int offset, int length);
-}
-
-class _SVGTextContentElementImpl extends _SVGElementImpl implements SVGTextContentElement native "*SVGTextContentElement" {
-
-  final _SVGAnimatedEnumerationImpl lengthAdjust;
-
-  final _SVGAnimatedLengthImpl textLength;
-
-  int getCharNumAtPosition(_SVGPointImpl point) native;
-
-  num getComputedTextLength() native;
-
-  _SVGPointImpl getEndPositionOfChar(int offset) native;
-
-  _SVGRectImpl getExtentOfChar(int offset) native;
-
-  int getNumberOfChars() native;
-
-  num getRotationOfChar(int offset) native;
-
-  _SVGPointImpl getStartPositionOfChar(int offset) native;
-
-  num getSubStringLength(int offset, int length) native;
-
-  void selectSubString(int offset, int length) native;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTextElement
-abstract class SVGTextElement implements SVGTextPositioningElement, SVGTransformable {
-}
-
-class _SVGTextElementImpl extends _SVGTextPositioningElementImpl implements SVGTextElement native "*SVGTextElement" {
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTextPathElement
-abstract class SVGTextPathElement implements SVGTextContentElement, SVGURIReference {
-
-  static const int TEXTPATH_METHODTYPE_ALIGN = 1;
-
-  static const int TEXTPATH_METHODTYPE_STRETCH = 2;
-
-  static const int TEXTPATH_METHODTYPE_UNKNOWN = 0;
-
-  static const int TEXTPATH_SPACINGTYPE_AUTO = 1;
-
-  static const int TEXTPATH_SPACINGTYPE_EXACT = 2;
-
-  static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
-
-  /** @domName SVGTextPathElement.method */
-  SVGAnimatedEnumeration get method;
-
-  /** @domName SVGTextPathElement.spacing */
-  SVGAnimatedEnumeration get spacing;
-
-  /** @domName SVGTextPathElement.startOffset */
-  SVGAnimatedLength get startOffset;
-}
-
-class _SVGTextPathElementImpl extends _SVGTextContentElementImpl implements SVGTextPathElement native "*SVGTextPathElement" {
-
-  final _SVGAnimatedEnumerationImpl method;
-
-  final _SVGAnimatedEnumerationImpl spacing;
-
-  final _SVGAnimatedLengthImpl startOffset;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTextPositioningElement
-abstract class SVGTextPositioningElement implements SVGTextContentElement {
-
-  /** @domName SVGTextPositioningElement.dx */
-  SVGAnimatedLengthList get dx;
-
-  /** @domName SVGTextPositioningElement.dy */
-  SVGAnimatedLengthList get dy;
-
-  /** @domName SVGTextPositioningElement.rotate */
-  SVGAnimatedNumberList get rotate;
-
-  /** @domName SVGTextPositioningElement.x */
-  SVGAnimatedLengthList get x;
-
-  /** @domName SVGTextPositioningElement.y */
-  SVGAnimatedLengthList get y;
-}
-
-class _SVGTextPositioningElementImpl extends _SVGTextContentElementImpl implements SVGTextPositioningElement native "*SVGTextPositioningElement" {
-
-  final _SVGAnimatedLengthListImpl dx;
-
-  final _SVGAnimatedLengthListImpl dy;
-
-  final _SVGAnimatedNumberListImpl rotate;
-
-  final _SVGAnimatedLengthListImpl x;
-
-  final _SVGAnimatedLengthListImpl y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTitleElement
-abstract class SVGTitleElement implements SVGElement, SVGLangSpace, SVGStylable {
-}
-
-class _SVGTitleElementImpl extends _SVGElementImpl implements SVGTitleElement native "*SVGTitleElement" {
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTransform
-abstract class SVGTransform {
-
-  static const int SVG_TRANSFORM_MATRIX = 1;
-
-  static const int SVG_TRANSFORM_ROTATE = 4;
-
-  static const int SVG_TRANSFORM_SCALE = 3;
-
-  static const int SVG_TRANSFORM_SKEWX = 5;
-
-  static const int SVG_TRANSFORM_SKEWY = 6;
-
-  static const int SVG_TRANSFORM_TRANSLATE = 2;
-
-  static const int SVG_TRANSFORM_UNKNOWN = 0;
-
-  /** @domName SVGTransform.angle */
-  num get angle;
-
-  /** @domName SVGTransform.matrix */
-  SVGMatrix get matrix;
-
-  /** @domName SVGTransform.type */
-  int get type;
-
-  /** @domName SVGTransform.setMatrix */
-  void setMatrix(SVGMatrix matrix);
-
-  /** @domName SVGTransform.setRotate */
-  void setRotate(num angle, num cx, num cy);
-
-  /** @domName SVGTransform.setScale */
-  void setScale(num sx, num sy);
-
-  /** @domName SVGTransform.setSkewX */
-  void setSkewX(num angle);
-
-  /** @domName SVGTransform.setSkewY */
-  void setSkewY(num angle);
-
-  /** @domName SVGTransform.setTranslate */
-  void setTranslate(num tx, num ty);
-}
-
-class _SVGTransformImpl implements SVGTransform native "*SVGTransform" {
-
-  final num angle;
-
-  final _SVGMatrixImpl matrix;
-
-  final int type;
-
-  void setMatrix(_SVGMatrixImpl matrix) native;
-
-  void setRotate(num angle, num cx, num cy) native;
-
-  void setScale(num sx, num sy) native;
-
-  void setSkewX(num angle) native;
-
-  void setSkewY(num angle) native;
-
-  void setTranslate(num tx, num ty) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTransformList
-abstract class SVGTransformList implements List<SVGTransform> {
-
-  /** @domName SVGTransformList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGTransformList.appendItem */
-  SVGTransform appendItem(SVGTransform item);
-
-  /** @domName SVGTransformList.clear */
-  void clear();
-
-  /** @domName SVGTransformList.consolidate */
-  SVGTransform consolidate();
-
-  /** @domName SVGTransformList.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
-
-  /** @domName SVGTransformList.getItem */
-  SVGTransform getItem(int index);
-
-  /** @domName SVGTransformList.initialize */
-  SVGTransform initialize(SVGTransform item);
-
-  /** @domName SVGTransformList.insertItemBefore */
-  SVGTransform insertItemBefore(SVGTransform item, int index);
-
-  /** @domName SVGTransformList.removeItem */
-  SVGTransform removeItem(int index);
-
-  /** @domName SVGTransformList.replaceItem */
-  SVGTransform replaceItem(SVGTransform item, int index);
-}
-
-class _SVGTransformListImpl implements SVGTransformList, JavaScriptIndexingBehavior native "*SVGTransformList" {
-
-  final int numberOfItems;
-
-  _SVGTransformImpl operator[](int index) => JS("_SVGTransformImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SVGTransformImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGTransform> mixins.
-  // SVGTransform is the element type.
-
-  // From Iterable<SVGTransform>:
-
-  Iterator<SVGTransform> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGTransform>(this);
-  }
-
-  // From Collection<SVGTransform>:
-
-  void add(SVGTransform value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGTransform value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGTransform> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGTransform element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGTransform element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGTransform element)) => _Collections.map(this, [], f);
-
-  Collection<SVGTransform> filter(bool f(SVGTransform element)) =>
-     _Collections.filter(this, <SVGTransform>[], f);
-
-  bool every(bool f(SVGTransform element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGTransform>:
-
-  void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGTransform element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGTransform element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGTransform get last => this[length - 1];
-
-  SVGTransform removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGTransform> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGTransform>[]);
-
-  // -- end List<SVGTransform> mixins.
-
-  _SVGTransformImpl appendItem(_SVGTransformImpl item) native;
-
-  void clear() native;
-
-  _SVGTransformImpl consolidate() native;
-
-  _SVGTransformImpl createSVGTransformFromMatrix(_SVGMatrixImpl matrix) native;
-
-  _SVGTransformImpl getItem(int index) native;
-
-  _SVGTransformImpl initialize(_SVGTransformImpl item) native;
-
-  _SVGTransformImpl insertItemBefore(_SVGTransformImpl item, int index) native;
-
-  _SVGTransformImpl removeItem(int index) native;
-
-  _SVGTransformImpl replaceItem(_SVGTransformImpl item, int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGTransformable
-abstract class SVGTransformable implements SVGLocatable {
-
-  /** @domName SVGTransformable.transform */
-  SVGAnimatedTransformList get transform;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGURIReference
-abstract class SVGURIReference {
-
-  /** @domName SVGURIReference.href */
-  SVGAnimatedString get href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGUnitTypes
-abstract class SVGUnitTypes {
-
-  static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
-
-  static const int SVG_UNIT_TYPE_UNKNOWN = 0;
-
-  static const int SVG_UNIT_TYPE_USERSPACEONUSE = 1;
-}
-
-class _SVGUnitTypesImpl implements SVGUnitTypes native "*SVGUnitTypes" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGUseElement
-abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGUseElement.animatedInstanceRoot */
-  SVGElementInstance get animatedInstanceRoot;
-
-  /** @domName SVGUseElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGUseElement.instanceRoot */
-  SVGElementInstance get instanceRoot;
-
-  /** @domName SVGUseElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGUseElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGUseElement.y */
-  SVGAnimatedLength get y;
-}
-
-class _SVGUseElementImpl extends _SVGElementImpl implements SVGUseElement native "*SVGUseElement" {
-
-  final _SVGElementInstanceImpl animatedInstanceRoot;
-
-  final _SVGAnimatedLengthImpl height;
-
-  final _SVGElementInstanceImpl instanceRoot;
-
-  final _SVGAnimatedLengthImpl width;
-
-  final _SVGAnimatedLengthImpl x;
-
-  final _SVGAnimatedLengthImpl y;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGLangSpace
-
-  String xmllang;
-
-  String xmlspace;
-
-  // From SVGLocatable
-
-  final _SVGElementImpl farthestViewportElement;
-
-  final _SVGElementImpl nearestViewportElement;
-
-  _SVGRectImpl getBBox() native;
-
-  _SVGMatrixImpl getCTM() native;
-
-  _SVGMatrixImpl getScreenCTM() native;
-
-  _SVGMatrixImpl getTransformToElement(_SVGElementImpl element) native;
-
-  // From SVGStylable
-
-  _SVGAnimatedStringImpl get $dom_svgClassName => JS("_SVGAnimatedStringImpl", "#.className", this);
-
-  // Use implementation from Element.
-  // final _CSSStyleDeclarationImpl style;
-
-  _CSSValueImpl getPresentationAttribute(String name) native;
-
-  // From SVGTests
-
-  final _SVGStringListImpl requiredExtensions;
-
-  final _SVGStringListImpl requiredFeatures;
-
-  final _SVGStringListImpl systemLanguage;
-
-  bool hasExtension(String extension) native;
-
-  // From SVGTransformable
-
-  final _SVGAnimatedTransformListImpl transform;
-
-  // From SVGURIReference
-
-  final _SVGAnimatedStringImpl href;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGVKernElement
-abstract class SVGVKernElement implements SVGElement {
-}
-
-class _SVGVKernElementImpl extends _SVGElementImpl implements SVGVKernElement native "*SVGVKernElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGViewElement
-abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
-
-  /** @domName SVGViewElement.viewTarget */
-  SVGStringList get viewTarget;
-}
-
-class _SVGViewElementImpl extends _SVGElementImpl implements SVGViewElement native "*SVGViewElement" {
-
-  final _SVGStringListImpl viewTarget;
-
-  // From SVGExternalResourcesRequired
-
-  final _SVGAnimatedBooleanImpl externalResourcesRequired;
-
-  // From SVGFitToViewBox
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  // From SVGZoomAndPan
-
-  int zoomAndPan;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGViewSpec
-abstract class SVGViewSpec {
-
-  /** @domName SVGViewSpec.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-
-  /** @domName SVGViewSpec.preserveAspectRatioString */
-  String get preserveAspectRatioString;
-
-  /** @domName SVGViewSpec.transform */
-  SVGTransformList get transform;
-
-  /** @domName SVGViewSpec.transformString */
-  String get transformString;
-
-  /** @domName SVGViewSpec.viewBox */
-  SVGAnimatedRect get viewBox;
-
-  /** @domName SVGViewSpec.viewBoxString */
-  String get viewBoxString;
-
-  /** @domName SVGViewSpec.viewTarget */
-  SVGElement get viewTarget;
-
-  /** @domName SVGViewSpec.viewTargetString */
-  String get viewTargetString;
-
-  /** @domName SVGViewSpec.zoomAndPan */
-  int zoomAndPan;
-}
-
-class _SVGViewSpecImpl implements SVGViewSpec native "*SVGViewSpec" {
-
-  final _SVGAnimatedPreserveAspectRatioImpl preserveAspectRatio;
-
-  final String preserveAspectRatioString;
-
-  final _SVGTransformListImpl transform;
-
-  final String transformString;
-
-  final _SVGAnimatedRectImpl viewBox;
-
-  final String viewBoxString;
-
-  final _SVGElementImpl viewTarget;
-
-  final String viewTargetString;
-
-  int zoomAndPan;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGZoomAndPan
-abstract class SVGZoomAndPan {
-
-  static const int SVG_ZOOMANDPAN_DISABLE = 1;
-
-  static const int SVG_ZOOMANDPAN_MAGNIFY = 2;
-
-  static const int SVG_ZOOMANDPAN_UNKNOWN = 0;
-
-  /** @domName SVGZoomAndPan.zoomAndPan */
-  int zoomAndPan;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGZoomEvent
-abstract class SVGZoomEvent implements UIEvent {
-
-  /** @domName SVGZoomEvent.newScale */
-  num get newScale;
-
-  /** @domName SVGZoomEvent.newTranslate */
-  SVGPoint get newTranslate;
-
-  /** @domName SVGZoomEvent.previousScale */
-  num get previousScale;
-
-  /** @domName SVGZoomEvent.previousTranslate */
-  SVGPoint get previousTranslate;
-
-  /** @domName SVGZoomEvent.zoomRectScreen */
-  SVGRect get zoomRectScreen;
-}
-
-class _SVGZoomEventImpl extends _UIEventImpl implements SVGZoomEvent native "*SVGZoomEvent" {
-
-  final num newScale;
-
-  final _SVGPointImpl newTranslate;
-
-  final num previousScale;
-
-  final _SVGPointImpl previousTranslate;
-
-  final _SVGRectImpl zoomRectScreen;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Screen
-abstract class Screen {
-
-  /** @domName Screen.availHeight */
-  int get availHeight;
-
-  /** @domName Screen.availLeft */
-  int get availLeft;
-
-  /** @domName Screen.availTop */
-  int get availTop;
-
-  /** @domName Screen.availWidth */
-  int get availWidth;
-
-  /** @domName Screen.colorDepth */
-  int get colorDepth;
-
-  /** @domName Screen.height */
-  int get height;
-
-  /** @domName Screen.pixelDepth */
-  int get pixelDepth;
-
-  /** @domName Screen.width */
-  int get width;
-}
-
-class _ScreenImpl implements Screen native "*Screen" {
-
-  final int availHeight;
-
-  final int availLeft;
-
-  final int availTop;
-
-  final int availWidth;
-
-  final int colorDepth;
-
-  final int height;
-
-  final int pixelDepth;
-
-  final int width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLScriptElement
-abstract class ScriptElement implements Element {
-
-  factory ScriptElement() => _Elements.createScriptElement();
-
-  /** @domName HTMLScriptElement.async */
-  bool async;
-
-  /** @domName HTMLScriptElement.charset */
-  String charset;
-
-  /** @domName HTMLScriptElement.crossOrigin */
-  String crossOrigin;
-
-  /** @domName HTMLScriptElement.defer */
-  bool defer;
-
-  /** @domName HTMLScriptElement.event */
-  String event;
-
-  /** @domName HTMLScriptElement.htmlFor */
-  String htmlFor;
-
-  /** @domName HTMLScriptElement.src */
-  String src;
-
-  /** @domName HTMLScriptElement.type */
-  String type;
-}
-
-class _ScriptElementImpl extends _ElementImpl implements ScriptElement native "*HTMLScriptElement" {
-
-  bool async;
-
-  String charset;
-
-  String crossOrigin;
-
-  bool defer;
-
-  String event;
-
-  String htmlFor;
-
-  String src;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ScriptProcessorNode
-abstract class ScriptProcessorNode implements AudioNode, EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ScriptProcessorNodeEvents get on;
-
-  /** @domName ScriptProcessorNode.bufferSize */
-  int get bufferSize;
-}
-
-abstract class ScriptProcessorNodeEvents implements Events {
-
-  EventListenerList get audioProcess;
-}
-
-class _ScriptProcessorNodeImpl extends _AudioNodeImpl implements ScriptProcessorNode native "*ScriptProcessorNode" {
-
-  _ScriptProcessorNodeEventsImpl get on =>
-    new _ScriptProcessorNodeEventsImpl(this);
-
-  final int bufferSize;
-}
-
-class _ScriptProcessorNodeEventsImpl extends _EventsImpl implements ScriptProcessorNodeEvents {
-  _ScriptProcessorNodeEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get audioProcess => this['audioprocess'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ScriptProfile
-abstract class ScriptProfile {
-
-  /** @domName ScriptProfile.head */
-  ScriptProfileNode get head;
-
-  /** @domName ScriptProfile.title */
-  String get title;
-
-  /** @domName ScriptProfile.uid */
-  int get uid;
-}
-
-class _ScriptProfileImpl implements ScriptProfile native "*ScriptProfile" {
-
-  final _ScriptProfileNodeImpl head;
-
-  final String title;
-
-  final int uid;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ScriptProfileNode
-abstract class ScriptProfileNode {
-
-  /** @domName ScriptProfileNode.callUID */
-  int get callUID;
-
-  /** @domName ScriptProfileNode.functionName */
-  String get functionName;
-
-  /** @domName ScriptProfileNode.lineNumber */
-  int get lineNumber;
-
-  /** @domName ScriptProfileNode.numberOfCalls */
-  int get numberOfCalls;
-
-  /** @domName ScriptProfileNode.selfTime */
-  num get selfTime;
-
-  /** @domName ScriptProfileNode.totalTime */
-  num get totalTime;
-
-  /** @domName ScriptProfileNode.url */
-  String get url;
-
-  /** @domName ScriptProfileNode.visible */
-  bool get visible;
-
-  /** @domName ScriptProfileNode.children */
-  List<ScriptProfileNode> children();
-}
-
-class _ScriptProfileNodeImpl implements ScriptProfileNode native "*ScriptProfileNode" {
-
-  final int callUID;
-
-  final String functionName;
-
-  final int lineNumber;
-
-  final int numberOfCalls;
-
-  final num selfTime;
-
-  final num totalTime;
-
-  final String url;
-
-  final bool visible;
-
-  List<ScriptProfileNode> children() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLSelectElement
-abstract class SelectElement implements Element {
-
-  factory SelectElement() => _Elements.createSelectElement();
-
-  /** @domName HTMLSelectElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLSelectElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLSelectElement.form */
-  FormElement get form;
-
-  /** @domName HTMLSelectElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLSelectElement.length */
-  int length;
-
-  /** @domName HTMLSelectElement.multiple */
-  bool multiple;
-
-  /** @domName HTMLSelectElement.name */
-  String name;
-
-  /** @domName HTMLSelectElement.options */
-  HTMLOptionsCollection get options;
-
-  /** @domName HTMLSelectElement.required */
-  bool required;
-
-  /** @domName HTMLSelectElement.selectedIndex */
-  int selectedIndex;
-
-  /** @domName HTMLSelectElement.selectedOptions */
-  HTMLCollection get selectedOptions;
-
-  /** @domName HTMLSelectElement.size */
-  int size;
-
-  /** @domName HTMLSelectElement.type */
-  String get type;
-
-  /** @domName HTMLSelectElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLSelectElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLSelectElement.value */
-  String value;
-
-  /** @domName HTMLSelectElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLSelectElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLSelectElement.item */
-  Node item(int index);
-
-  /** @domName HTMLSelectElement.namedItem */
-  Node namedItem(String name);
-
-  /** @domName HTMLSelectElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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 _SelectElementImpl extends _ElementImpl implements SelectElement native "*HTMLSelectElement" {
-
-  bool autofocus;
-
-  bool disabled;
-
-  final _FormElementImpl form;
-
-  final List<Node> labels;
-
-  int length;
-
-  bool multiple;
-
-  String name;
-
-  bool required;
-
-  int selectedIndex;
-
-  int size;
-
-  final String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  String value;
-
-  final bool willValidate;
-
-  bool checkValidity() native;
-
-  _NodeImpl item(int index) native;
-
-  _NodeImpl namedItem(String name) native;
-
-  void setCustomValidity(String error) native;
-
-
-  // Override default options, since IE returns SelectElement itself and it
-  // does not operate as a List.
-  List<OptionElement> get options {
-    return this.elements.filter((e) => e is OptionElement);
-  }
-
-  List<OptionElement> get selectedOptions {
-    // IE does not change the selected flag for single-selection items.
-    if (this.multiple) {
-      return this.options.filter((o) => o.selected);
-    } else {
-      return [this.options[this.selectedIndex]];
-    }
-  }
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SessionDescription
-abstract class SessionDescription {
-
-  factory SessionDescription(String sdp) => _SessionDescriptionFactoryProvider.createSessionDescription(sdp);
-
-  /** @domName SessionDescription.addCandidate */
-  void addCandidate(IceCandidate candidate);
-
-  /** @domName SessionDescription.toSdp */
-  String toSdp();
-}
-
-class _SessionDescriptionImpl implements SessionDescription native "*SessionDescription" {
-
-  void addCandidate(_IceCandidateImpl candidate) native;
-
-  String toSdp() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLShadowElement
-abstract class ShadowElement implements Element {
-
-  /** @domName HTMLShadowElement.resetStyleInheritance */
-  bool resetStyleInheritance;
-}
-
-class _ShadowElementImpl extends _ElementImpl implements ShadowElement native "*HTMLShadowElement" {
-
-  bool resetStyleInheritance;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName ShadowRoot
-abstract class ShadowRoot implements DocumentFragment {
-
-  factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
-
-  /** @domName ShadowRoot.activeElement */
-  Element get activeElement;
-
-  /** @domName ShadowRoot.applyAuthorStyles */
-  bool applyAuthorStyles;
-
-  /** @domName ShadowRoot.innerHTML */
-  String innerHTML;
-
-  /** @domName ShadowRoot.resetStyleInheritance */
-  bool resetStyleInheritance;
-
-  /** @domName ShadowRoot.cloneNode */
-  Node clone(bool deep);
-
-  /** @domName ShadowRoot.getElementById */
-  Element $dom_getElementById(String elementId);
-
-  /** @domName ShadowRoot.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String className);
-
-  /** @domName ShadowRoot.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String tagName);
-
-  /** @domName ShadowRoot.getSelection */
-  DOMSelection getSelection();
-
-  static bool get supported => _ShadowRootImpl.supported;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ShadowRootImpl extends _DocumentFragmentImpl implements ShadowRoot native "*ShadowRoot" {
-
-  final _ElementImpl activeElement;
-
-  bool applyAuthorStyles;
-
-  String innerHTML;
-
-  bool resetStyleInheritance;
-
-  _NodeImpl clone(bool deep) native "cloneNode";
-
-  _ElementImpl $dom_getElementById(String elementId) native "getElementById";
-
-  List<Node> $dom_getElementsByClassName(String className) native "getElementsByClassName";
-
-  List<Node> $dom_getElementsByTagName(String tagName) native "getElementsByTagName";
-
-  _DOMSelectionImpl getSelection() native;
-
-  static bool get supported =>
-      JS('bool', '!!(window.ShadowRoot || window.WebKitShadowRoot)');
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SharedWorker
-abstract class SharedWorker implements AbstractWorker {
-
-  factory SharedWorker(String scriptURL, [String name]) {
-    if (!?name) {
-      return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL);
-    }
-    return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL, name);
-  }
-
-  /** @domName SharedWorker.port */
-  MessagePort get port;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SharedWorkerContext
-abstract class SharedWorkerContext implements WorkerContext {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SharedWorkerContextEvents get on;
-
-  /** @domName SharedWorkerContext.name */
-  String get name;
-}
-
-abstract class SharedWorkerContextEvents implements WorkerContextEvents {
-
-  EventListenerList get connect;
-}
-
-class _SharedWorkerContextImpl extends _WorkerContextImpl implements SharedWorkerContext native "*SharedWorkerContext" {
-
-  _SharedWorkerContextEventsImpl get on =>
-    new _SharedWorkerContextEventsImpl(this);
-
-  final String name;
-}
-
-class _SharedWorkerContextEventsImpl extends _WorkerContextEventsImpl implements SharedWorkerContextEvents {
-  _SharedWorkerContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get connect => this['connect'];
-}
-
-class _SharedWorkerImpl extends _AbstractWorkerImpl implements SharedWorker native "*SharedWorker" {
-
-  final _MessagePortImpl port;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SourceBuffer
-abstract class SourceBuffer {
-
-  /** @domName SourceBuffer.buffered */
-  TimeRanges get buffered;
-
-  /** @domName SourceBuffer.timestampOffset */
-  num timestampOffset;
-
-  /** @domName SourceBuffer.abort */
-  void abort();
-
-  /** @domName SourceBuffer.append */
-  void append(Uint8Array data);
-}
-
-class _SourceBufferImpl implements SourceBuffer native "*SourceBuffer" {
-
-  final _TimeRangesImpl buffered;
-
-  num timestampOffset;
-
-  void abort() native;
-
-  void append(_Uint8ArrayImpl data) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SourceBufferList
-abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
-
-  /** @domName SourceBufferList.length */
-  int get length;
-
-  /** @domName SourceBufferList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SourceBufferList.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName SourceBufferList.item */
-  SourceBuffer item(int index);
-
-  /** @domName SourceBufferList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList, JavaScriptIndexingBehavior native "*SourceBufferList" {
-
-  final int length;
-
-  _SourceBufferImpl operator[](int index) => JS("_SourceBufferImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SourceBufferImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SourceBuffer> mixins.
-  // SourceBuffer is the element type.
-
-  // From Iterable<SourceBuffer>:
-
-  Iterator<SourceBuffer> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SourceBuffer>(this);
-  }
-
-  // From Collection<SourceBuffer>:
-
-  void add(SourceBuffer value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SourceBuffer value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SourceBuffer> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SourceBuffer element) => _Collections.contains(this, element);
-
-  void forEach(void f(SourceBuffer element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SourceBuffer element)) => _Collections.map(this, [], f);
-
-  Collection<SourceBuffer> filter(bool f(SourceBuffer element)) =>
-     _Collections.filter(this, <SourceBuffer>[], f);
-
-  bool every(bool f(SourceBuffer element)) => _Collections.every(this, f);
-
-  bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SourceBuffer>:
-
-  void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SourceBuffer element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SourceBuffer element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SourceBuffer get last => this[length - 1];
-
-  SourceBuffer removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SourceBuffer> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SourceBuffer>[]);
-
-  // -- end List<SourceBuffer> mixins.
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  _SourceBufferImpl item(int index) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLSourceElement
-abstract class SourceElement implements Element {
-
-  factory SourceElement() => _Elements.createSourceElement();
-
-  /** @domName HTMLSourceElement.media */
-  String media;
-
-  /** @domName HTMLSourceElement.src */
-  String src;
-
-  /** @domName HTMLSourceElement.type */
-  String type;
-}
-
-class _SourceElementImpl extends _ElementImpl implements SourceElement native "*HTMLSourceElement" {
-
-  String media;
-
-  String src;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLSpanElement
-abstract class SpanElement implements Element {
-
-  factory SpanElement() => _Elements.createSpanElement();
-}
-
-class _SpanElementImpl extends _ElementImpl implements SpanElement native "*HTMLSpanElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechGrammar
-abstract class SpeechGrammar {
-
-  factory SpeechGrammar() => _SpeechGrammarFactoryProvider.createSpeechGrammar();
-
-  /** @domName SpeechGrammar.src */
-  String src;
-
-  /** @domName SpeechGrammar.weight */
-  num weight;
-}
-
-class _SpeechGrammarImpl implements SpeechGrammar native "*SpeechGrammar" {
-
-  String src;
-
-  num weight;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechGrammarList
-abstract class SpeechGrammarList implements List<SpeechGrammar> {
-
-  factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
-
-  /** @domName SpeechGrammarList.length */
-  int get length;
-
-  /** @domName SpeechGrammarList.addFromString */
-  void addFromString(String string, [num weight]);
-
-  /** @domName SpeechGrammarList.addFromUri */
-  void addFromUri(String src, [num weight]);
-
-  /** @domName SpeechGrammarList.item */
-  SpeechGrammar item(int index);
-}
-
-class _SpeechGrammarListImpl implements SpeechGrammarList, JavaScriptIndexingBehavior native "*SpeechGrammarList" {
-
-  final int length;
-
-  _SpeechGrammarImpl operator[](int index) => JS("_SpeechGrammarImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SpeechGrammarImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SpeechGrammar> mixins.
-  // SpeechGrammar is the element type.
-
-  // From Iterable<SpeechGrammar>:
-
-  Iterator<SpeechGrammar> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SpeechGrammar>(this);
-  }
-
-  // From Collection<SpeechGrammar>:
-
-  void add(SpeechGrammar value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SpeechGrammar value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SpeechGrammar> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SpeechGrammar element) => _Collections.contains(this, element);
-
-  void forEach(void f(SpeechGrammar element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SpeechGrammar element)) => _Collections.map(this, [], f);
-
-  Collection<SpeechGrammar> filter(bool f(SpeechGrammar element)) =>
-     _Collections.filter(this, <SpeechGrammar>[], f);
-
-  bool every(bool f(SpeechGrammar element)) => _Collections.every(this, f);
-
-  bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SpeechGrammar>:
-
-  void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SpeechGrammar element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SpeechGrammar element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SpeechGrammar get last => this[length - 1];
-
-  SpeechGrammar removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SpeechGrammar> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SpeechGrammar>[]);
-
-  // -- end List<SpeechGrammar> mixins.
-
-  void addFromString(String string, [num weight]) native;
-
-  void addFromUri(String src, [num weight]) native;
-
-  _SpeechGrammarImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechInputEvent
-abstract class SpeechInputEvent implements Event {
-
-  /** @domName SpeechInputEvent.results */
-  List<SpeechInputResult> get results;
-}
-
-class _SpeechInputEventImpl extends _EventImpl implements SpeechInputEvent native "*SpeechInputEvent" {
-
-  final _SpeechInputResultListImpl results;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechInputResult
-abstract class SpeechInputResult {
-
-  /** @domName SpeechInputResult.confidence */
-  num get confidence;
-
-  /** @domName SpeechInputResult.utterance */
-  String get utterance;
-}
-
-class _SpeechInputResultImpl implements SpeechInputResult native "*SpeechInputResult" {
-
-  final num confidence;
-
-  final String utterance;
-}
-
-class _SpeechInputResultListImpl implements List<SpeechInputResult>, JavaScriptIndexingBehavior native "*SpeechInputResultList" {
-
-  final int length;
-
-  _SpeechInputResultImpl operator[](int index) => JS("_SpeechInputResultImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SpeechInputResultImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SpeechInputResult> mixins.
-  // SpeechInputResult is the element type.
-
-  // From Iterable<SpeechInputResult>:
-
-  Iterator<SpeechInputResult> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SpeechInputResult>(this);
-  }
-
-  // From Collection<SpeechInputResult>:
-
-  void add(SpeechInputResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SpeechInputResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SpeechInputResult> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SpeechInputResult element) => _Collections.contains(this, element);
-
-  void forEach(void f(SpeechInputResult element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SpeechInputResult element)) => _Collections.map(this, [], f);
-
-  Collection<SpeechInputResult> filter(bool f(SpeechInputResult element)) =>
-     _Collections.filter(this, <SpeechInputResult>[], f);
-
-  bool every(bool f(SpeechInputResult element)) => _Collections.every(this, f);
-
-  bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SpeechInputResult>:
-
-  void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SpeechInputResult element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SpeechInputResult element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SpeechInputResult get last => this[length - 1];
-
-  SpeechInputResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SpeechInputResult> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SpeechInputResult>[]);
-
-  // -- end List<SpeechInputResult> mixins.
-
-  _SpeechInputResultImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognition
-abstract class SpeechRecognition implements EventTarget {
-
-  factory SpeechRecognition() => _SpeechRecognitionFactoryProvider.createSpeechRecognition();
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SpeechRecognitionEvents get on;
-
-  /** @domName SpeechRecognition.continuous */
-  bool continuous;
-
-  /** @domName SpeechRecognition.grammars */
-  SpeechGrammarList grammars;
-
-  /** @domName SpeechRecognition.interimResults */
-  bool interimResults;
-
-  /** @domName SpeechRecognition.lang */
-  String lang;
-
-  /** @domName SpeechRecognition.maxAlternatives */
-  int maxAlternatives;
-
-  /** @domName SpeechRecognition.abort */
-  void abort();
-
-  /** @domName SpeechRecognition.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SpeechRecognition.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName SpeechRecognition.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SpeechRecognition.start */
-  void start();
-
-  /** @domName SpeechRecognition.stop */
-  void stop();
-}
-
-abstract class SpeechRecognitionEvents implements Events {
-
-  EventListenerList get audioEnd;
-
-  EventListenerList get audioStart;
-
-  EventListenerList get end;
-
-  EventListenerList get error;
-
-  EventListenerList get noMatch;
-
-  EventListenerList get result;
-
-  EventListenerList get soundEnd;
-
-  EventListenerList get soundStart;
-
-  EventListenerList get speechEnd;
-
-  EventListenerList get speechStart;
-
-  EventListenerList get start;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionAlternative
-abstract class SpeechRecognitionAlternative {
-
-  /** @domName SpeechRecognitionAlternative.confidence */
-  num get confidence;
-
-  /** @domName SpeechRecognitionAlternative.transcript */
-  String get transcript;
-}
-
-class _SpeechRecognitionAlternativeImpl implements SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
-
-  final num confidence;
-
-  final String transcript;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionError
-abstract class SpeechRecognitionError implements Event {
-
-  static const int ABORTED = 2;
-
-  static const int AUDIO_CAPTURE = 3;
-
-  static const int BAD_GRAMMAR = 7;
-
-  static const int LANGUAGE_NOT_SUPPORTED = 8;
-
-  static const int NETWORK = 4;
-
-  static const int NOT_ALLOWED = 5;
-
-  static const int NO_SPEECH = 1;
-
-  static const int OTHER = 0;
-
-  static const int SERVICE_NOT_ALLOWED = 6;
-
-  /** @domName SpeechRecognitionError.code */
-  int get code;
-
-  /** @domName SpeechRecognitionError.message */
-  String get message;
-}
-
-class _SpeechRecognitionErrorImpl extends _EventImpl implements SpeechRecognitionError native "*SpeechRecognitionError" {
-
-  final int code;
-
-  final String message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionEvent
-abstract class SpeechRecognitionEvent implements Event {
-
-  /** @domName SpeechRecognitionEvent.result */
-  SpeechRecognitionResult get result;
-
-  /** @domName SpeechRecognitionEvent.resultHistory */
-  List<SpeechRecognitionResult> get resultHistory;
-
-  /** @domName SpeechRecognitionEvent.resultIndex */
-  int get resultIndex;
-}
-
-class _SpeechRecognitionEventImpl extends _EventImpl implements SpeechRecognitionEvent native "*SpeechRecognitionEvent" {
-
-  final _SpeechRecognitionResultImpl result;
-
-  final _SpeechRecognitionResultListImpl resultHistory;
-
-  final int resultIndex;
-}
-
-class _SpeechRecognitionImpl extends _EventTargetImpl implements SpeechRecognition native "*SpeechRecognition" {
-
-  _SpeechRecognitionEventsImpl get on =>
-    new _SpeechRecognitionEventsImpl(this);
-
-  bool continuous;
-
-  _SpeechGrammarListImpl grammars;
-
-  bool interimResults;
-
-  String lang;
-
-  int maxAlternatives;
-
-  void abort() native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void start() native;
-
-  void stop() native;
-}
-
-class _SpeechRecognitionEventsImpl extends _EventsImpl implements SpeechRecognitionEvents {
-  _SpeechRecognitionEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get audioEnd => this['audioend'];
-
-  EventListenerList get audioStart => this['audiostart'];
-
-  EventListenerList get end => this['end'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get noMatch => this['nomatch'];
-
-  EventListenerList get result => this['result'];
-
-  EventListenerList get soundEnd => this['soundend'];
-
-  EventListenerList get soundStart => this['soundstart'];
-
-  EventListenerList get speechEnd => this['speechend'];
-
-  EventListenerList get speechStart => this['speechstart'];
-
-  EventListenerList get start => this['start'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionResult
-abstract class SpeechRecognitionResult {
-
-  /** @domName SpeechRecognitionResult.emma */
-  Document get emma;
-
-  /** @domName SpeechRecognitionResult.finalValue */
-  bool get finalValue;
-
-  /** @domName SpeechRecognitionResult.length */
-  int get length;
-
-  /** @domName SpeechRecognitionResult.item */
-  SpeechRecognitionAlternative item(int index);
-}
-
-class _SpeechRecognitionResultImpl implements SpeechRecognitionResult native "*SpeechRecognitionResult" {
-
-  final _DocumentImpl emma;
-
-  bool get finalValue => JS("bool", "#.final", this);
-
-  final int length;
-
-  _SpeechRecognitionAlternativeImpl item(int index) native;
-}
-
-class _SpeechRecognitionResultListImpl implements List<SpeechRecognitionResult>, JavaScriptIndexingBehavior native "*SpeechRecognitionResultList" {
-
-  final int length;
-
-  _SpeechRecognitionResultImpl operator[](int index) => JS("_SpeechRecognitionResultImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _SpeechRecognitionResultImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SpeechRecognitionResult> mixins.
-  // SpeechRecognitionResult is the element type.
-
-  // From Iterable<SpeechRecognitionResult>:
-
-  Iterator<SpeechRecognitionResult> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SpeechRecognitionResult>(this);
-  }
-
-  // From Collection<SpeechRecognitionResult>:
-
-  void add(SpeechRecognitionResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SpeechRecognitionResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SpeechRecognitionResult> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
-
-  void forEach(void f(SpeechRecognitionResult element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SpeechRecognitionResult element)) => _Collections.map(this, [], f);
-
-  Collection<SpeechRecognitionResult> filter(bool f(SpeechRecognitionResult element)) =>
-     _Collections.filter(this, <SpeechRecognitionResult>[], f);
-
-  bool every(bool f(SpeechRecognitionResult element)) => _Collections.every(this, f);
-
-  bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SpeechRecognitionResult>:
-
-  void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SpeechRecognitionResult element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SpeechRecognitionResult get last => this[length - 1];
-
-  SpeechRecognitionResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SpeechRecognitionResult>[]);
-
-  // -- end List<SpeechRecognitionResult> mixins.
-
-  _SpeechRecognitionResultImpl item(int index) native;
-}
-// 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.
-
-
-/// @domName Storage
-abstract class Storage implements Map<String, String> {
-
-  /** @domName Storage.length */
-  int get $dom_length;
-
-  /** @domName Storage.clear */
-  void $dom_clear();
-
-  /** @domName Storage.getItem */
-  String $dom_getItem(String key);
-
-  /** @domName Storage.key */
-  String $dom_key(int index);
-
-  /** @domName Storage.removeItem */
-  void $dom_removeItem(String key);
-
-  /** @domName Storage.setItem */
-  void $dom_setItem(String key, String data);
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName StorageEvent
-abstract class StorageEvent implements Event {
-
-  /** @domName StorageEvent.key */
-  String get key;
-
-  /** @domName StorageEvent.newValue */
-  String get newValue;
-
-  /** @domName StorageEvent.oldValue */
-  String get oldValue;
-
-  /** @domName StorageEvent.storageArea */
-  Storage get storageArea;
-
-  /** @domName StorageEvent.url */
-  String get url;
-
-  /** @domName StorageEvent.initStorageEvent */
-  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
-}
-
-class _StorageEventImpl extends _EventImpl implements StorageEvent native "*StorageEvent" {
-
-  final String key;
-
-  final String newValue;
-
-  final String oldValue;
-
-  final _StorageImpl storageArea;
-
-  final String url;
-
-  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, _StorageImpl storageAreaArg) native;
-}
-// 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 _StorageImpl implements Storage native "*Storage" {
-
-  // TODO(nweiz): update this when maps support lazy iteration
-  bool containsValue(String value) => values.some((e) => e == value);
-
-  bool containsKey(String key) => $dom_getItem(key) != null;
-
-  String operator [](String key) => $dom_getItem(key);
-
-  void operator []=(String key, String value) => $dom_setItem(key, value);
-
-  String putIfAbsent(String key, String ifAbsent()) {
-    if (!containsKey(key)) this[key] = ifAbsent();
-    return this[key];
-  }
-
-  String remove(String key) {
-    final value = this[key];
-    $dom_removeItem(key);
-    return value;
-  }
-
-  void clear() => $dom_clear();
-
-  void forEach(void f(String key, String value)) {
-    for (var i = 0; true; i++) {
-      final key = $dom_key(i);
-      if (key == null) return;
-
-      f(key, this[key]);
-    }
-  }
-
-  Collection<String> get keys {
-    final keys = [];
-    forEach((k, v) => keys.add(k));
-    return keys;
-  }
-
-  Collection<String> get values {
-    final values = [];
-    forEach((k, v) => values.add(v));
-    return values;
-  }
-
-  int get length => $dom_length;
-
-  bool get isEmpty => $dom_key(0) == null;
-
-  int get $dom_length => JS("int", "#.length", this);
-
-  void $dom_clear() native "clear";
-
-  String $dom_getItem(String key) native "getItem";
-
-  String $dom_key(int index) native "key";
-
-  void $dom_removeItem(String key) native "removeItem";
-
-  void $dom_setItem(String key, String data) native "setItem";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName StorageInfo
-abstract class StorageInfo {
-
-  static const int PERSISTENT = 1;
-
-  static const int TEMPORARY = 0;
-
-  /** @domName StorageInfo.queryUsageAndQuota */
-  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]);
-
-  /** @domName StorageInfo.requestQuota */
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void StorageInfoErrorCallback(DOMException error);
-
-class _StorageInfoImpl implements StorageInfo native "*StorageInfo" {
-
-  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native;
-
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void StringCallback(String data);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLStyleElement
-abstract class StyleElement implements Element {
-
-  factory StyleElement() => _Elements.createStyleElement();
-
-  /** @domName HTMLStyleElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLStyleElement.media */
-  String media;
-
-  /** @domName HTMLStyleElement.scoped */
-  bool scoped;
-
-  /** @domName HTMLStyleElement.sheet */
-  StyleSheet get sheet;
-
-  /** @domName HTMLStyleElement.type */
-  String type;
-}
-
-class _StyleElementImpl extends _ElementImpl implements StyleElement native "*HTMLStyleElement" {
-
-  bool disabled;
-
-  String media;
-
-  bool scoped;
-
-  final _StyleSheetImpl sheet;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName StyleMedia
-abstract class StyleMedia {
-
-  /** @domName StyleMedia.type */
-  String get type;
-
-  /** @domName StyleMedia.matchMedium */
-  bool matchMedium(String mediaquery);
-}
-
-class _StyleMediaImpl implements StyleMedia native "*StyleMedia" {
-
-  final String type;
-
-  bool matchMedium(String mediaquery) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName StyleSheet
-abstract class StyleSheet {
-
-  /** @domName StyleSheet.disabled */
-  bool disabled;
-
-  /** @domName StyleSheet.href */
-  String get href;
-
-  /** @domName StyleSheet.media */
-  MediaList get media;
-
-  /** @domName StyleSheet.ownerNode */
-  Node get ownerNode;
-
-  /** @domName StyleSheet.parentStyleSheet */
-  StyleSheet get parentStyleSheet;
-
-  /** @domName StyleSheet.title */
-  String get title;
-
-  /** @domName StyleSheet.type */
-  String get type;
-}
-
-class _StyleSheetImpl implements StyleSheet native "*StyleSheet" {
-
-  bool disabled;
-
-  final String href;
-
-  final _MediaListImpl media;
-
-  final _NodeImpl ownerNode;
-
-  final _StyleSheetImpl parentStyleSheet;
-
-  final String title;
-
-  final String type;
-}
-
-class _StyleSheetListImpl implements List<StyleSheet>, JavaScriptIndexingBehavior native "*StyleSheetList" {
-
-  final int length;
-
-  _StyleSheetImpl operator[](int index) => JS("_StyleSheetImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _StyleSheetImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<StyleSheet> mixins.
-  // StyleSheet is the element type.
-
-  // From Iterable<StyleSheet>:
-
-  Iterator<StyleSheet> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<StyleSheet>(this);
-  }
-
-  // From Collection<StyleSheet>:
-
-  void add(StyleSheet value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(StyleSheet value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<StyleSheet> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(StyleSheet element) => _Collections.contains(this, element);
-
-  void forEach(void f(StyleSheet element)) => _Collections.forEach(this, f);
-
-  Collection map(f(StyleSheet element)) => _Collections.map(this, [], f);
-
-  Collection<StyleSheet> filter(bool f(StyleSheet element)) =>
-     _Collections.filter(this, <StyleSheet>[], f);
-
-  bool every(bool f(StyleSheet element)) => _Collections.every(this, f);
-
-  bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<StyleSheet>:
-
-  void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(StyleSheet element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(StyleSheet element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  StyleSheet get last => this[length - 1];
-
-  StyleSheet removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<StyleSheet> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <StyleSheet>[]);
-
-  // -- end List<StyleSheet> mixins.
-
-  _StyleSheetImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableCaptionElement
-abstract class TableCaptionElement implements Element {
-
-  factory TableCaptionElement() => _Elements.createTableCaptionElement();
-
-  /** @domName HTMLTableCaptionElement.align */
-  String align;
-}
-
-class _TableCaptionElementImpl extends _ElementImpl implements TableCaptionElement native "*HTMLTableCaptionElement" {
-
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableCellElement
-abstract class TableCellElement implements Element {
-
-  factory TableCellElement() => _Elements.createTableCellElement();
-
-  /** @domName HTMLTableCellElement.abbr */
-  String abbr;
-
-  /** @domName HTMLTableCellElement.align */
-  String align;
-
-  /** @domName HTMLTableCellElement.axis */
-  String axis;
-
-  /** @domName HTMLTableCellElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableCellElement.cellIndex */
-  int get cellIndex;
-
-  /** @domName HTMLTableCellElement.ch */
-  String ch;
-
-  /** @domName HTMLTableCellElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableCellElement.colSpan */
-  int colSpan;
-
-  /** @domName HTMLTableCellElement.headers */
-  String headers;
-
-  /** @domName HTMLTableCellElement.height */
-  String height;
-
-  /** @domName HTMLTableCellElement.noWrap */
-  bool noWrap;
-
-  /** @domName HTMLTableCellElement.rowSpan */
-  int rowSpan;
-
-  /** @domName HTMLTableCellElement.scope */
-  String scope;
-
-  /** @domName HTMLTableCellElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableCellElement.width */
-  String width;
-}
-
-class _TableCellElementImpl extends _ElementImpl implements TableCellElement native "*HTMLTableCellElement" {
-
-  String abbr;
-
-  String align;
-
-  String axis;
-
-  String bgColor;
-
-  final int cellIndex;
-
-  String ch;
-
-  String chOff;
-
-  int colSpan;
-
-  String headers;
-
-  String height;
-
-  bool noWrap;
-
-  int rowSpan;
-
-  String scope;
-
-  String vAlign;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableColElement
-abstract class TableColElement implements Element {
-
-  factory TableColElement() => _Elements.createTableColElement();
-
-  /** @domName HTMLTableColElement.align */
-  String align;
-
-  /** @domName HTMLTableColElement.ch */
-  String ch;
-
-  /** @domName HTMLTableColElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableColElement.span */
-  int span;
-
-  /** @domName HTMLTableColElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableColElement.width */
-  String width;
-}
-
-class _TableColElementImpl extends _ElementImpl implements TableColElement native "*HTMLTableColElement" {
-
-  String align;
-
-  String ch;
-
-  String chOff;
-
-  int span;
-
-  String vAlign;
-
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableElement
-abstract class TableElement implements Element {
-
-  factory TableElement() => _Elements.createTableElement();
-
-  /** @domName HTMLTableElement.align */
-  String align;
-
-  /** @domName HTMLTableElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableElement.border */
-  String border;
-
-  /** @domName HTMLTableElement.caption */
-  TableCaptionElement caption;
-
-  /** @domName HTMLTableElement.cellPadding */
-  String cellPadding;
-
-  /** @domName HTMLTableElement.cellSpacing */
-  String cellSpacing;
-
-  /** @domName HTMLTableElement.frame */
-  String frame;
-
-  /** @domName HTMLTableElement.rows */
-  HTMLCollection get rows;
-
-  /** @domName HTMLTableElement.rules */
-  String rules;
-
-  /** @domName HTMLTableElement.summary */
-  String summary;
-
-  /** @domName HTMLTableElement.tBodies */
-  HTMLCollection get tBodies;
-
-  /** @domName HTMLTableElement.tFoot */
-  TableSectionElement tFoot;
-
-  /** @domName HTMLTableElement.tHead */
-  TableSectionElement tHead;
-
-  /** @domName HTMLTableElement.width */
-  String width;
-
-  /** @domName HTMLTableElement.createCaption */
-  Element createCaption();
-
-  /** @domName HTMLTableElement.createTBody */
-  Element createTBody();
-
-  /** @domName HTMLTableElement.createTFoot */
-  Element createTFoot();
-
-  /** @domName HTMLTableElement.createTHead */
-  Element createTHead();
-
-  /** @domName HTMLTableElement.deleteCaption */
-  void deleteCaption();
-
-  /** @domName HTMLTableElement.deleteRow */
-  void deleteRow(int index);
-
-  /** @domName HTMLTableElement.deleteTFoot */
-  void deleteTFoot();
-
-  /** @domName HTMLTableElement.deleteTHead */
-  void deleteTHead();
-
-  /** @domName HTMLTableElement.insertRow */
-  Element insertRow(int index);
-}
-// 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 _TableElementImpl extends _ElementImpl implements TableElement native "*HTMLTableElement" {
-
-  String align;
-
-  String bgColor;
-
-  String border;
-
-  _TableCaptionElementImpl caption;
-
-  String cellPadding;
-
-  String cellSpacing;
-
-  String frame;
-
-  final _HTMLCollectionImpl rows;
-
-  String rules;
-
-  String summary;
-
-  final _HTMLCollectionImpl tBodies;
-
-  _TableSectionElementImpl tFoot;
-
-  _TableSectionElementImpl tHead;
-
-  String width;
-
-  _ElementImpl createCaption() native;
-
-  _ElementImpl createTFoot() native;
-
-  _ElementImpl createTHead() native;
-
-  void deleteCaption() native;
-
-  void deleteRow(int index) native;
-
-  void deleteTFoot() native;
-
-  void deleteTHead() native;
-
-  _ElementImpl insertRow(int index) native;
-
-
-  _ElementImpl createTBody() {
-    if (JS('bool', '!!#.createTBody', this)) {
-      return this._createTBody();
-    }
-    var tbody = new Element.tag('tbody');
-    this.elements.add(tbody);
-    return tbody;
-  }
-
-  _ElementImpl _createTBody() native 'createTBody';
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableRowElement
-abstract class TableRowElement implements Element {
-
-  factory TableRowElement() => _Elements.createTableRowElement();
-
-  /** @domName HTMLTableRowElement.align */
-  String align;
-
-  /** @domName HTMLTableRowElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableRowElement.cells */
-  HTMLCollection get cells;
-
-  /** @domName HTMLTableRowElement.ch */
-  String ch;
-
-  /** @domName HTMLTableRowElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableRowElement.rowIndex */
-  int get rowIndex;
-
-  /** @domName HTMLTableRowElement.sectionRowIndex */
-  int get sectionRowIndex;
-
-  /** @domName HTMLTableRowElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableRowElement.deleteCell */
-  void deleteCell(int index);
-
-  /** @domName HTMLTableRowElement.insertCell */
-  Element insertCell(int index);
-}
-
-class _TableRowElementImpl extends _ElementImpl implements TableRowElement native "*HTMLTableRowElement" {
-
-  String align;
-
-  String bgColor;
-
-  final _HTMLCollectionImpl cells;
-
-  String ch;
-
-  String chOff;
-
-  final int rowIndex;
-
-  final int sectionRowIndex;
-
-  String vAlign;
-
-  void deleteCell(int index) native;
-
-  _ElementImpl insertCell(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTableSectionElement
-abstract class TableSectionElement implements Element {
-
-  /** @domName HTMLTableSectionElement.align */
-  String align;
-
-  /** @domName HTMLTableSectionElement.ch */
-  String ch;
-
-  /** @domName HTMLTableSectionElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableSectionElement.rows */
-  HTMLCollection get rows;
-
-  /** @domName HTMLTableSectionElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableSectionElement.deleteRow */
-  void deleteRow(int index);
-
-  /** @domName HTMLTableSectionElement.insertRow */
-  Element insertRow(int index);
-}
-
-class _TableSectionElementImpl extends _ElementImpl implements TableSectionElement native "*HTMLTableSectionElement" {
-
-  String align;
-
-  String ch;
-
-  String chOff;
-
-  final _HTMLCollectionImpl rows;
-
-  String vAlign;
-
-  void deleteRow(int index) native;
-
-  _ElementImpl insertRow(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Text
-abstract class Text implements CharacterData {
-
-  factory Text(String data) => _TextFactoryProvider.createText(data);
-
-  /** @domName Text.wholeText */
-  String get wholeText;
-
-  /** @domName Text.replaceWholeText */
-  Text replaceWholeText(String content);
-
-  /** @domName Text.splitText */
-  Text splitText(int offset);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTextAreaElement
-abstract class TextAreaElement implements Element {
-
-  factory TextAreaElement() => _Elements.createTextAreaElement();
-
-  /** @domName HTMLTextAreaElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLTextAreaElement.cols */
-  int cols;
-
-  /** @domName HTMLTextAreaElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLTextAreaElement.dirName */
-  String dirName;
-
-  /** @domName HTMLTextAreaElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLTextAreaElement.form */
-  FormElement get form;
-
-  /** @domName HTMLTextAreaElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLTextAreaElement.maxLength */
-  int maxLength;
-
-  /** @domName HTMLTextAreaElement.name */
-  String name;
-
-  /** @domName HTMLTextAreaElement.placeholder */
-  String placeholder;
-
-  /** @domName HTMLTextAreaElement.readOnly */
-  bool readOnly;
-
-  /** @domName HTMLTextAreaElement.required */
-  bool required;
-
-  /** @domName HTMLTextAreaElement.rows */
-  int rows;
-
-  /** @domName HTMLTextAreaElement.selectionDirection */
-  String selectionDirection;
-
-  /** @domName HTMLTextAreaElement.selectionEnd */
-  int selectionEnd;
-
-  /** @domName HTMLTextAreaElement.selectionStart */
-  int selectionStart;
-
-  /** @domName HTMLTextAreaElement.textLength */
-  int get textLength;
-
-  /** @domName HTMLTextAreaElement.type */
-  String get type;
-
-  /** @domName HTMLTextAreaElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLTextAreaElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLTextAreaElement.value */
-  String value;
-
-  /** @domName HTMLTextAreaElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLTextAreaElement.wrap */
-  String wrap;
-
-  /** @domName HTMLTextAreaElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLTextAreaElement.select */
-  void select();
-
-  /** @domName HTMLTextAreaElement.setCustomValidity */
-  void setCustomValidity(String error);
-
-  /** @domName HTMLTextAreaElement.setRangeText */
-  void setRangeText(String replacement, [int start, int end, String selectionMode]);
-
-  /** @domName HTMLTextAreaElement.setSelectionRange */
-  void setSelectionRange(int start, int end, [String direction]);
-}
-
-class _TextAreaElementImpl extends _ElementImpl implements TextAreaElement native "*HTMLTextAreaElement" {
-
-  bool autofocus;
-
-  int cols;
-
-  String defaultValue;
-
-  String dirName;
-
-  bool disabled;
-
-  final _FormElementImpl form;
-
-  final List<Node> labels;
-
-  int maxLength;
-
-  String name;
-
-  String placeholder;
-
-  bool readOnly;
-
-  bool required;
-
-  int rows;
-
-  String selectionDirection;
-
-  int selectionEnd;
-
-  int selectionStart;
-
-  final int textLength;
-
-  final String type;
-
-  final String validationMessage;
-
-  final _ValidityStateImpl validity;
-
-  String value;
-
-  final bool willValidate;
-
-  String wrap;
-
-  bool checkValidity() native;
-
-  void select() native;
-
-  void setCustomValidity(String error) native;
-
-  void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
-
-  void setSelectionRange(int start, int end, [String direction]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextEvent
-abstract class TextEvent implements UIEvent {
-
-  /** @domName TextEvent.data */
-  String get data;
-
-  /** @domName TextEvent.initTextEvent */
-  void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
-}
-
-class _TextEventImpl extends _UIEventImpl implements TextEvent native "*TextEvent" {
-
-  final String data;
-
-  void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, _LocalWindowImpl viewArg, String dataArg) native;
-}
-
-class _TextImpl extends _CharacterDataImpl implements Text native "*Text" {
-
-  final String wholeText;
-
-  _TextImpl replaceWholeText(String content) native;
-
-  _TextImpl splitText(int offset) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextMetrics
-abstract class TextMetrics {
-
-  /** @domName TextMetrics.width */
-  num get width;
-}
-
-class _TextMetricsImpl implements TextMetrics native "*TextMetrics" {
-
-  final num width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextTrack
-abstract class TextTrack implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  TextTrackEvents get on;
-
-  /** @domName TextTrack.activeCues */
-  TextTrackCueList get activeCues;
-
-  /** @domName TextTrack.cues */
-  TextTrackCueList get cues;
-
-  /** @domName TextTrack.kind */
-  String get kind;
-
-  /** @domName TextTrack.label */
-  String get label;
-
-  /** @domName TextTrack.language */
-  String get language;
-
-  /** @domName TextTrack.mode */
-  String mode;
-
-  /** @domName TextTrack.addCue */
-  void addCue(TextTrackCue cue);
-
-  /** @domName TextTrack.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName TextTrack.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName TextTrack.removeCue */
-  void removeCue(TextTrackCue cue);
-
-  /** @domName TextTrack.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class TextTrackEvents implements Events {
-
-  EventListenerList get cueChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextTrackCue
-abstract class TextTrackCue implements EventTarget {
-
-  factory TextTrackCue(num startTime, num endTime, String text) => _TextTrackCueFactoryProvider.createTextTrackCue(startTime, endTime, text);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  TextTrackCueEvents get on;
-
-  /** @domName TextTrackCue.align */
-  String align;
-
-  /** @domName TextTrackCue.endTime */
-  num endTime;
-
-  /** @domName TextTrackCue.id */
-  String id;
-
-  /** @domName TextTrackCue.line */
-  int line;
-
-  /** @domName TextTrackCue.pauseOnExit */
-  bool pauseOnExit;
-
-  /** @domName TextTrackCue.position */
-  int position;
-
-  /** @domName TextTrackCue.size */
-  int size;
-
-  /** @domName TextTrackCue.snapToLines */
-  bool snapToLines;
-
-  /** @domName TextTrackCue.startTime */
-  num startTime;
-
-  /** @domName TextTrackCue.text */
-  String text;
-
-  /** @domName TextTrackCue.track */
-  TextTrack get track;
-
-  /** @domName TextTrackCue.vertical */
-  String vertical;
-
-  /** @domName TextTrackCue.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName TextTrackCue.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName TextTrackCue.getCueAsHTML */
-  DocumentFragment getCueAsHTML();
-
-  /** @domName TextTrackCue.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class TextTrackCueEvents implements Events {
-
-  EventListenerList get enter;
-
-  EventListenerList get exit;
-}
-
-class _TextTrackCueImpl extends _EventTargetImpl implements TextTrackCue native "*TextTrackCue" {
-
-  _TextTrackCueEventsImpl get on =>
-    new _TextTrackCueEventsImpl(this);
-
-  String align;
-
-  num endTime;
-
-  String id;
-
-  int line;
-
-  bool pauseOnExit;
-
-  int position;
-
-  int size;
-
-  bool snapToLines;
-
-  num startTime;
-
-  String text;
-
-  final _TextTrackImpl track;
-
-  String vertical;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  _DocumentFragmentImpl getCueAsHTML() native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _TextTrackCueEventsImpl extends _EventsImpl implements TextTrackCueEvents {
-  _TextTrackCueEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get enter => this['enter'];
-
-  EventListenerList get exit => this['exit'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextTrackCueList
-abstract class TextTrackCueList implements List<TextTrackCue> {
-
-  /** @domName TextTrackCueList.length */
-  int get length;
-
-  /** @domName TextTrackCueList.getCueById */
-  TextTrackCue getCueById(String id);
-
-  /** @domName TextTrackCueList.item */
-  TextTrackCue item(int index);
-}
-
-class _TextTrackCueListImpl implements TextTrackCueList, JavaScriptIndexingBehavior native "*TextTrackCueList" {
-
-  final int length;
-
-  _TextTrackCueImpl operator[](int index) => JS("_TextTrackCueImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _TextTrackCueImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<TextTrackCue> mixins.
-  // TextTrackCue is the element type.
-
-  // From Iterable<TextTrackCue>:
-
-  Iterator<TextTrackCue> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<TextTrackCue>(this);
-  }
-
-  // From Collection<TextTrackCue>:
-
-  void add(TextTrackCue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(TextTrackCue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<TextTrackCue> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(TextTrackCue element) => _Collections.contains(this, element);
-
-  void forEach(void f(TextTrackCue element)) => _Collections.forEach(this, f);
-
-  Collection map(f(TextTrackCue element)) => _Collections.map(this, [], f);
-
-  Collection<TextTrackCue> filter(bool f(TextTrackCue element)) =>
-     _Collections.filter(this, <TextTrackCue>[], f);
-
-  bool every(bool f(TextTrackCue element)) => _Collections.every(this, f);
-
-  bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<TextTrackCue>:
-
-  void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(TextTrackCue element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(TextTrackCue element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  TextTrackCue get last => this[length - 1];
-
-  TextTrackCue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<TextTrackCue> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <TextTrackCue>[]);
-
-  // -- end List<TextTrackCue> mixins.
-
-  _TextTrackCueImpl getCueById(String id) native;
-
-  _TextTrackCueImpl item(int index) native;
-}
-
-class _TextTrackImpl extends _EventTargetImpl implements TextTrack native "*TextTrack" {
-
-  _TextTrackEventsImpl get on =>
-    new _TextTrackEventsImpl(this);
-
-  final _TextTrackCueListImpl activeCues;
-
-  final _TextTrackCueListImpl cues;
-
-  final String kind;
-
-  final String label;
-
-  final String language;
-
-  String mode;
-
-  void addCue(_TextTrackCueImpl cue) native;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void removeCue(_TextTrackCueImpl cue) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _TextTrackEventsImpl extends _EventsImpl implements TextTrackEvents {
-  _TextTrackEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get cueChange => this['cuechange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TextTrackList
-abstract class TextTrackList implements EventTarget, List<TextTrack> {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  TextTrackListEvents get on;
-
-  /** @domName TextTrackList.length */
-  int get length;
-
-  /** @domName TextTrackList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName TextTrackList.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName TextTrackList.item */
-  TextTrack item(int index);
-
-  /** @domName TextTrackList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class TextTrackListEvents implements Events {
-
-  EventListenerList get addTrack;
-}
-
-class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList, JavaScriptIndexingBehavior native "*TextTrackList" {
-
-  _TextTrackListEventsImpl get on =>
-    new _TextTrackListEventsImpl(this);
-
-  final int length;
-
-  _TextTrackImpl operator[](int index) => JS("_TextTrackImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _TextTrackImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<TextTrack> mixins.
-  // TextTrack is the element type.
-
-  // From Iterable<TextTrack>:
-
-  Iterator<TextTrack> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<TextTrack>(this);
-  }
-
-  // From Collection<TextTrack>:
-
-  void add(TextTrack value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(TextTrack value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<TextTrack> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(TextTrack element) => _Collections.contains(this, element);
-
-  void forEach(void f(TextTrack element)) => _Collections.forEach(this, f);
-
-  Collection map(f(TextTrack element)) => _Collections.map(this, [], f);
-
-  Collection<TextTrack> filter(bool f(TextTrack element)) =>
-     _Collections.filter(this, <TextTrack>[], f);
-
-  bool every(bool f(TextTrack element)) => _Collections.every(this, f);
-
-  bool some(bool f(TextTrack element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<TextTrack>:
-
-  void sort([Comparator<TextTrack> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(TextTrack element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(TextTrack element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  TextTrack get last => this[length - 1];
-
-  TextTrack removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<TextTrack> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <TextTrack>[]);
-
-  // -- end List<TextTrack> mixins.
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  _TextTrackImpl item(int index) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-
-class _TextTrackListEventsImpl extends _EventsImpl implements TextTrackListEvents {
-  _TextTrackListEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get addTrack => this['addtrack'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TimeRanges
-abstract class TimeRanges {
-
-  /** @domName TimeRanges.length */
-  int get length;
-
-  /** @domName TimeRanges.end */
-  num end(int index);
-
-  /** @domName TimeRanges.start */
-  num start(int index);
-}
-
-class _TimeRangesImpl implements TimeRanges native "*TimeRanges" {
-
-  final int length;
-
-  num end(int index) native;
-
-  num start(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void TimeoutHandler();
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTitleElement
-abstract class TitleElement implements Element {
-
-  factory TitleElement() => _Elements.createTitleElement();
-}
-
-class _TitleElementImpl extends _ElementImpl implements TitleElement native "*HTMLTitleElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Touch
-abstract class Touch {
-
-  /** @domName Touch.clientX */
-  int get clientX;
-
-  /** @domName Touch.clientY */
-  int get clientY;
-
-  /** @domName Touch.identifier */
-  int get identifier;
-
-  /** @domName Touch.pageX */
-  int get pageX;
-
-  /** @domName Touch.pageY */
-  int get pageY;
-
-  /** @domName Touch.screenX */
-  int get screenX;
-
-  /** @domName Touch.screenY */
-  int get screenY;
-
-  /** @domName Touch.target */
-  EventTarget get target;
-
-  /** @domName Touch.webkitForce */
-  num get webkitForce;
-
-  /** @domName Touch.webkitRadiusX */
-  int get webkitRadiusX;
-
-  /** @domName Touch.webkitRadiusY */
-  int get webkitRadiusY;
-
-  /** @domName Touch.webkitRotationAngle */
-  num get webkitRotationAngle;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TouchEvent
-abstract class TouchEvent implements UIEvent {
-
-  /** @domName TouchEvent.altKey */
-  bool get altKey;
-
-  /** @domName TouchEvent.changedTouches */
-  TouchList get changedTouches;
-
-  /** @domName TouchEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName TouchEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName TouchEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName TouchEvent.targetTouches */
-  TouchList get targetTouches;
-
-  /** @domName TouchEvent.touches */
-  TouchList get touches;
-
-  /** @domName TouchEvent.initTouchEvent */
-  void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
-}
-
-class _TouchEventImpl extends _UIEventImpl implements TouchEvent native "*TouchEvent" {
-
-  final bool altKey;
-
-  final _TouchListImpl changedTouches;
-
-  final bool ctrlKey;
-
-  final bool metaKey;
-
-  final bool shiftKey;
-
-  final _TouchListImpl targetTouches;
-
-  final _TouchListImpl touches;
-
-  void initTouchEvent(_TouchListImpl touches, _TouchListImpl targetTouches, _TouchListImpl changedTouches, String type, _LocalWindowImpl view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
-}
-
-class _TouchImpl implements Touch native "*Touch" {
-
-  final int clientX;
-
-  final int clientY;
-
-  final int identifier;
-
-  final int pageX;
-
-  final int pageY;
-
-  final int screenX;
-
-  final int screenY;
-
-  EventTarget get target => _convertNativeToDart_EventTarget(this._target);
-  EventTarget get _target => JS("EventTarget", "#.target", this);
-
-  final num webkitForce;
-
-  final int webkitRadiusX;
-
-  final int webkitRadiusY;
-
-  final num webkitRotationAngle;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TouchList
-abstract class TouchList implements List<Touch> {
-
-  /** @domName TouchList.length */
-  int get length;
-
-  /** @domName TouchList.item */
-  Touch item(int index);
-}
-
-class _TouchListImpl implements TouchList, JavaScriptIndexingBehavior native "*TouchList" {
-
-  final int length;
-
-  _TouchImpl operator[](int index) => JS("_TouchImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _TouchImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Touch> mixins.
-  // Touch is the element type.
-
-  // From Iterable<Touch>:
-
-  Iterator<Touch> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Touch>(this);
-  }
-
-  // From Collection<Touch>:
-
-  void add(Touch value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Touch value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Touch> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Touch element) => _Collections.contains(this, element);
-
-  void forEach(void f(Touch element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Touch element)) => _Collections.map(this, [], f);
-
-  Collection<Touch> filter(bool f(Touch element)) =>
-     _Collections.filter(this, <Touch>[], f);
-
-  bool every(bool f(Touch element)) => _Collections.every(this, f);
-
-  bool some(bool f(Touch element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Touch>:
-
-  void sort([Comparator<Touch> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Touch element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Touch element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Touch get last => this[length - 1];
-
-  Touch removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Touch initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Touch> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Touch>[]);
-
-  // -- end List<Touch> mixins.
-
-  _TouchImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLTrackElement
-abstract class TrackElement implements Element {
-
-  factory TrackElement() => _Elements.createTrackElement();
-
-  static const int ERROR = 3;
-
-  static const int LOADED = 2;
-
-  static const int LOADING = 1;
-
-  static const int NONE = 0;
-
-  /** @domName HTMLTrackElement.defaultValue */
-  bool defaultValue;
-
-  /** @domName HTMLTrackElement.kind */
-  String kind;
-
-  /** @domName HTMLTrackElement.label */
-  String label;
-
-  /** @domName HTMLTrackElement.readyState */
-  int get readyState;
-
-  /** @domName HTMLTrackElement.src */
-  String src;
-
-  /** @domName HTMLTrackElement.srclang */
-  String srclang;
-
-  /** @domName HTMLTrackElement.track */
-  TextTrack get track;
-}
-
-class _TrackElementImpl extends _ElementImpl implements TrackElement native "*HTMLTrackElement" {
-
-  bool get defaultValue => JS("bool", "#.default", this);
-
-  void set defaultValue(bool value) {
-    JS("void", "#.default = #", this, value);
-  }
-
-  String kind;
-
-  String label;
-
-  final int readyState;
-
-  String src;
-
-  String srclang;
-
-  final _TextTrackImpl track;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TrackEvent
-abstract class TrackEvent implements Event {
-
-  /** @domName TrackEvent.track */
-  Object get track;
-}
-
-class _TrackEventImpl extends _EventImpl implements TrackEvent native "*TrackEvent" {
-
-  final Object track;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitTransitionEvent
-abstract class TransitionEvent implements Event {
-
-  /** @domName WebKitTransitionEvent.elapsedTime */
-  num get elapsedTime;
-
-  /** @domName WebKitTransitionEvent.propertyName */
-  String get propertyName;
-}
-
-class _TransitionEventImpl extends _EventImpl implements TransitionEvent native "*WebKitTransitionEvent" {
-
-  final num elapsedTime;
-
-  final String propertyName;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TreeWalker
-abstract class TreeWalker {
-
-  /** @domName TreeWalker.currentNode */
-  Node currentNode;
-
-  /** @domName TreeWalker.expandEntityReferences */
-  bool get expandEntityReferences;
-
-  /** @domName TreeWalker.filter */
-  NodeFilter get filter;
-
-  /** @domName TreeWalker.root */
-  Node get root;
-
-  /** @domName TreeWalker.whatToShow */
-  int get whatToShow;
-
-  /** @domName TreeWalker.firstChild */
-  Node firstChild();
-
-  /** @domName TreeWalker.lastChild */
-  Node lastChild();
-
-  /** @domName TreeWalker.nextNode */
-  Node nextNode();
-
-  /** @domName TreeWalker.nextSibling */
-  Node nextSibling();
-
-  /** @domName TreeWalker.parentNode */
-  Node parentNode();
-
-  /** @domName TreeWalker.previousNode */
-  Node previousNode();
-
-  /** @domName TreeWalker.previousSibling */
-  Node previousSibling();
-}
-
-class _TreeWalkerImpl implements TreeWalker native "*TreeWalker" {
-
-  _NodeImpl currentNode;
-
-  final bool expandEntityReferences;
-
-  final _NodeFilterImpl filter;
-
-  final _NodeImpl root;
-
-  final int whatToShow;
-
-  _NodeImpl firstChild() native;
-
-  _NodeImpl lastChild() native;
-
-  _NodeImpl nextNode() native;
-
-  _NodeImpl nextSibling() native;
-
-  _NodeImpl parentNode() native;
-
-  _NodeImpl previousNode() native;
-
-  _NodeImpl previousSibling() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName UIEvent
-abstract class UIEvent implements Event {
-
-  /** @domName UIEvent.charCode */
-  int get charCode;
-
-  /** @domName UIEvent.detail */
-  int get detail;
-
-  /** @domName UIEvent.keyCode */
-  int get keyCode;
-
-  /** @domName UIEvent.layerX */
-  int get layerX;
-
-  /** @domName UIEvent.layerY */
-  int get layerY;
-
-  /** @domName UIEvent.pageX */
-  int get pageX;
-
-  /** @domName UIEvent.pageY */
-  int get pageY;
-
-  /** @domName UIEvent.view */
-  Window get view;
-
-  /** @domName UIEvent.which */
-  int get which;
-
-  /** @domName UIEvent.initUIEvent */
-  void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
-}
-
-class _UIEventImpl extends _EventImpl implements UIEvent native "*UIEvent" {
-
-  final int charCode;
-
-  final int detail;
-
-  final int keyCode;
-
-  final int layerX;
-
-  final int layerY;
-
-  final int pageX;
-
-  final int pageY;
-
-  Window get view => _convertNativeToDart_Window(this._view);
-  Window get _view => JS("Window", "#.view", this);
-
-  final int which;
-
-  void initUIEvent(String type, bool canBubble, bool cancelable, _LocalWindowImpl view, int detail) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLUListElement
-abstract class UListElement implements Element {
-
-  factory UListElement() => _Elements.createUListElement();
-
-  /** @domName HTMLUListElement.compact */
-  bool compact;
-
-  /** @domName HTMLUListElement.type */
-  String type;
-}
-
-class _UListElementImpl extends _ElementImpl implements UListElement native "*HTMLUListElement" {
-
-  bool compact;
-
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Uint16Array
-abstract class Uint16Array implements ArrayBufferView, List<int> {
-
-  factory Uint16Array(int length) =>
-    _TypedArrayFactoryProvider.createUint16Array(length);
-
-  factory Uint16Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createUint16Array_fromList(list);
-
-  factory Uint16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createUint16Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 2;
-
-  /** @domName Uint16Array.length */
-  int get length;
-
-  /** @domName Uint16Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint16Array.subarray */
-  Uint16Array subarray(int start, [int end]);
-}
-
-class _Uint16ArrayImpl extends _ArrayBufferViewImpl implements Uint16Array, List<int>, JavaScriptIndexingBehavior native "*Uint16Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Uint16ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Uint32Array
-abstract class Uint32Array implements ArrayBufferView, List<int> {
-
-  factory Uint32Array(int length) =>
-    _TypedArrayFactoryProvider.createUint32Array(length);
-
-  factory Uint32Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createUint32Array_fromList(list);
-
-  factory Uint32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createUint32Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 4;
-
-  /** @domName Uint32Array.length */
-  int get length;
-
-  /** @domName Uint32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint32Array.subarray */
-  Uint32Array subarray(int start, [int end]);
-}
-
-class _Uint32ArrayImpl extends _ArrayBufferViewImpl implements Uint32Array, List<int>, JavaScriptIndexingBehavior native "*Uint32Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Uint32ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Uint8Array
-abstract class Uint8Array implements ArrayBufferView, List<int> {
-
-  factory Uint8Array(int length) =>
-    _TypedArrayFactoryProvider.createUint8Array(length);
-
-  factory Uint8Array.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createUint8Array_fromList(list);
-
-  factory Uint8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createUint8Array_fromBuffer(buffer, byteOffset, length);
-
-  static const int BYTES_PER_ELEMENT = 1;
-
-  /** @domName Uint8Array.length */
-  int get length;
-
-  /** @domName Uint8Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint8Array.subarray */
-  Uint8Array subarray(int start, [int end]);
-}
-
-class _Uint8ArrayImpl extends _ArrayBufferViewImpl implements Uint8Array, List<int>, JavaScriptIndexingBehavior native "*Uint8Array" {
-
-  final int length;
-
-  int operator[](int index) => JS("int", "#[#]", this, index);
-
-  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
-  // -- start List<int> mixins.
-  // int is the element type.
-
-  // From Iterable<int>:
-
-  Iterator<int> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<int>(this);
-  }
-
-  // From Collection<int>:
-
-  void add(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(int value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<int> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(int element) => _Collections.contains(this, element);
-
-  void forEach(void f(int element)) => _Collections.forEach(this, f);
-
-  Collection map(f(int element)) => _Collections.map(this, [], f);
-
-  Collection<int> filter(bool f(int element)) =>
-     _Collections.filter(this, <int>[], f);
-
-  bool every(bool f(int element)) => _Collections.every(this, f);
-
-  bool some(bool f(int element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<int>:
-
-  void sort([Comparator<int> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(int element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(int element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  int get last => this[length - 1];
-
-  int removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [int initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<int> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <int>[]);
-
-  // -- end List<int> mixins.
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Uint8ArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Uint8ClampedArray
-abstract class Uint8ClampedArray implements Uint8Array {
-
-  factory Uint8ClampedArray(int length) =>
-    _TypedArrayFactoryProvider.createUint8ClampedArray(length);
-
-  factory Uint8ClampedArray.fromList(List<int> list) =>
-    _TypedArrayFactoryProvider.createUint8ClampedArray_fromList(list);
-
-  factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
-    _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
-
-  /** @domName Uint8ClampedArray.length */
-  int get length;
-
-  /** @domName Uint8ClampedArray.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint8ClampedArray.subarray */
-  Uint8ClampedArray subarray(int start, [int end]);
-}
-
-class _Uint8ClampedArrayImpl extends _Uint8ArrayImpl implements Uint8ClampedArray native "*Uint8ClampedArray" {
-
-  // Use implementation from Uint8Array.
-  // final int length;
-
-  void setElements(Object array, [int offset]) native "set";
-
-  _Uint8ClampedArrayImpl subarray(int start, [int end]) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLUnknownElement
-abstract class UnknownElement implements Element {
-}
-
-class _UnknownElementImpl extends _ElementImpl implements UnknownElement native "*HTMLUnknownElement" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName ValidityState
-abstract class ValidityState {
-
-  /** @domName ValidityState.customError */
-  bool get customError;
-
-  /** @domName ValidityState.patternMismatch */
-  bool get patternMismatch;
-
-  /** @domName ValidityState.rangeOverflow */
-  bool get rangeOverflow;
-
-  /** @domName ValidityState.rangeUnderflow */
-  bool get rangeUnderflow;
-
-  /** @domName ValidityState.stepMismatch */
-  bool get stepMismatch;
-
-  /** @domName ValidityState.tooLong */
-  bool get tooLong;
-
-  /** @domName ValidityState.typeMismatch */
-  bool get typeMismatch;
-
-  /** @domName ValidityState.valid */
-  bool get valid;
-
-  /** @domName ValidityState.valueMissing */
-  bool get valueMissing;
-}
-
-class _ValidityStateImpl implements ValidityState native "*ValidityState" {
-
-  final bool customError;
-
-  final bool patternMismatch;
-
-  final bool rangeOverflow;
-
-  final bool rangeUnderflow;
-
-  final bool stepMismatch;
-
-  final bool tooLong;
-
-  final bool typeMismatch;
-
-  final bool valid;
-
-  final bool valueMissing;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName HTMLVideoElement
-abstract class VideoElement implements MediaElement {
-
-  factory VideoElement() => _Elements.createVideoElement();
-
-  /** @domName HTMLVideoElement.height */
-  int height;
-
-  /** @domName HTMLVideoElement.poster */
-  String poster;
-
-  /** @domName HTMLVideoElement.videoHeight */
-  int get videoHeight;
-
-  /** @domName HTMLVideoElement.videoWidth */
-  int get videoWidth;
-
-  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
-  int get webkitDecodedFrameCount;
-
-  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
-  bool get webkitDisplayingFullscreen;
-
-  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
-  int get webkitDroppedFrameCount;
-
-  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
-  bool get webkitSupportsFullscreen;
-
-  /** @domName HTMLVideoElement.width */
-  int width;
-
-  /** @domName HTMLVideoElement.webkitEnterFullScreen */
-  void webkitEnterFullScreen();
-
-  /** @domName HTMLVideoElement.webkitEnterFullscreen */
-  void webkitEnterFullscreen();
-
-  /** @domName HTMLVideoElement.webkitExitFullScreen */
-  void webkitExitFullScreen();
-
-  /** @domName HTMLVideoElement.webkitExitFullscreen */
-  void webkitExitFullscreen();
-}
-
-class _VideoElementImpl extends _MediaElementImpl implements VideoElement native "*HTMLVideoElement" {
-
-  int height;
-
-  String poster;
-
-  final int videoHeight;
-
-  final int videoWidth;
-
-  final int webkitDecodedFrameCount;
-
-  final bool webkitDisplayingFullscreen;
-
-  final int webkitDroppedFrameCount;
-
-  final bool webkitSupportsFullscreen;
-
-  int width;
-
-  void webkitEnterFullScreen() native;
-
-  void webkitEnterFullscreen() native;
-
-  void webkitExitFullScreen() native;
-
-  void webkitExitFullscreen() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void VoidCallback();
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WaveShaperNode
-abstract class WaveShaperNode implements AudioNode {
-
-  /** @domName WaveShaperNode.curve */
-  Float32Array curve;
-}
-
-class _WaveShaperNodeImpl extends _AudioNodeImpl implements WaveShaperNode native "*WaveShaperNode" {
-
-  _Float32ArrayImpl curve;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WaveTable
-abstract class WaveTable {
-}
-
-class _WaveTableImpl implements WaveTable native "*WaveTable" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLActiveInfo
-abstract class WebGLActiveInfo {
-
-  /** @domName WebGLActiveInfo.name */
-  String get name;
-
-  /** @domName WebGLActiveInfo.size */
-  int get size;
-
-  /** @domName WebGLActiveInfo.type */
-  int get type;
-}
-
-class _WebGLActiveInfoImpl implements WebGLActiveInfo native "*WebGLActiveInfo" {
-
-  final String name;
-
-  final int size;
-
-  final int type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLBuffer
-abstract class WebGLBuffer {
-}
-
-class _WebGLBufferImpl implements WebGLBuffer native "*WebGLBuffer" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLCompressedTextureS3TC
-abstract class WebGLCompressedTextureS3TC {
-
-  static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
-
-  static const int COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2;
-
-  static const int COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3;
-
-  static const int COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
-}
-
-class _WebGLCompressedTextureS3TCImpl implements WebGLCompressedTextureS3TC native "*WebGLCompressedTextureS3TC" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLContextAttributes
-abstract class WebGLContextAttributes {
-
-  /** @domName WebGLContextAttributes.alpha */
-  bool alpha;
-
-  /** @domName WebGLContextAttributes.antialias */
-  bool antialias;
-
-  /** @domName WebGLContextAttributes.depth */
-  bool depth;
-
-  /** @domName WebGLContextAttributes.premultipliedAlpha */
-  bool premultipliedAlpha;
-
-  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
-  bool preserveDrawingBuffer;
-
-  /** @domName WebGLContextAttributes.stencil */
-  bool stencil;
-}
-
-class _WebGLContextAttributesImpl implements WebGLContextAttributes native "*WebGLContextAttributes" {
-
-  bool alpha;
-
-  bool antialias;
-
-  bool depth;
-
-  bool premultipliedAlpha;
-
-  bool preserveDrawingBuffer;
-
-  bool stencil;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLContextEvent
-abstract class WebGLContextEvent implements Event {
-
-  /** @domName WebGLContextEvent.statusMessage */
-  String get statusMessage;
-}
-
-class _WebGLContextEventImpl extends _EventImpl implements WebGLContextEvent native "*WebGLContextEvent" {
-
-  final String statusMessage;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLDebugRendererInfo
-abstract class WebGLDebugRendererInfo {
-
-  static const int UNMASKED_RENDERER_WEBGL = 0x9246;
-
-  static const int UNMASKED_VENDOR_WEBGL = 0x9245;
-}
-
-class _WebGLDebugRendererInfoImpl implements WebGLDebugRendererInfo native "*WebGLDebugRendererInfo" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLDebugShaders
-abstract class WebGLDebugShaders {
-
-  /** @domName WebGLDebugShaders.getTranslatedShaderSource */
-  String getTranslatedShaderSource(WebGLShader shader);
-}
-
-class _WebGLDebugShadersImpl implements WebGLDebugShaders native "*WebGLDebugShaders" {
-
-  String getTranslatedShaderSource(_WebGLShaderImpl shader) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLDepthTexture
-abstract class WebGLDepthTexture {
-
-  static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
-}
-
-class _WebGLDepthTextureImpl implements WebGLDepthTexture native "*WebGLDepthTexture" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLFramebuffer
-abstract class WebGLFramebuffer {
-}
-
-class _WebGLFramebufferImpl implements WebGLFramebuffer native "*WebGLFramebuffer" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLLoseContext
-abstract class WebGLLoseContext {
-
-  /** @domName WebGLLoseContext.loseContext */
-  void loseContext();
-
-  /** @domName WebGLLoseContext.restoreContext */
-  void restoreContext();
-}
-
-class _WebGLLoseContextImpl implements WebGLLoseContext native "*WebGLLoseContext" {
-
-  void loseContext() native;
-
-  void restoreContext() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLProgram
-abstract class WebGLProgram {
-}
-
-class _WebGLProgramImpl implements WebGLProgram native "*WebGLProgram" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLRenderbuffer
-abstract class WebGLRenderbuffer {
-}
-
-class _WebGLRenderbufferImpl implements WebGLRenderbuffer native "*WebGLRenderbuffer" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLRenderingContext
-abstract class WebGLRenderingContext implements CanvasRenderingContext {
-
-  static const int ACTIVE_ATTRIBUTES = 0x8B89;
-
-  static const int ACTIVE_TEXTURE = 0x84E0;
-
-  static const int ACTIVE_UNIFORMS = 0x8B86;
-
-  static const int ALIASED_LINE_WIDTH_RANGE = 0x846E;
-
-  static const int ALIASED_POINT_SIZE_RANGE = 0x846D;
-
-  static const int ALPHA = 0x1906;
-
-  static const int ALPHA_BITS = 0x0D55;
-
-  static const int ALWAYS = 0x0207;
-
-  static const int ARRAY_BUFFER = 0x8892;
-
-  static const int ARRAY_BUFFER_BINDING = 0x8894;
-
-  static const int ATTACHED_SHADERS = 0x8B85;
-
-  static const int BACK = 0x0405;
-
-  static const int BLEND = 0x0BE2;
-
-  static const int BLEND_COLOR = 0x8005;
-
-  static const int BLEND_DST_ALPHA = 0x80CA;
-
-  static const int BLEND_DST_RGB = 0x80C8;
-
-  static const int BLEND_EQUATION = 0x8009;
-
-  static const int BLEND_EQUATION_ALPHA = 0x883D;
-
-  static const int BLEND_EQUATION_RGB = 0x8009;
-
-  static const int BLEND_SRC_ALPHA = 0x80CB;
-
-  static const int BLEND_SRC_RGB = 0x80C9;
-
-  static const int BLUE_BITS = 0x0D54;
-
-  static const int BOOL = 0x8B56;
-
-  static const int BOOL_VEC2 = 0x8B57;
-
-  static const int BOOL_VEC3 = 0x8B58;
-
-  static const int BOOL_VEC4 = 0x8B59;
-
-  static const int BROWSER_DEFAULT_WEBGL = 0x9244;
-
-  static const int BUFFER_SIZE = 0x8764;
-
-  static const int BUFFER_USAGE = 0x8765;
-
-  static const int BYTE = 0x1400;
-
-  static const int CCW = 0x0901;
-
-  static const int CLAMP_TO_EDGE = 0x812F;
-
-  static const int COLOR_ATTACHMENT0 = 0x8CE0;
-
-  static const int COLOR_BUFFER_BIT = 0x00004000;
-
-  static const int COLOR_CLEAR_VALUE = 0x0C22;
-
-  static const int COLOR_WRITEMASK = 0x0C23;
-
-  static const int COMPILE_STATUS = 0x8B81;
-
-  static const int COMPRESSED_TEXTURE_FORMATS = 0x86A3;
-
-  static const int CONSTANT_ALPHA = 0x8003;
-
-  static const int CONSTANT_COLOR = 0x8001;
-
-  static const int CONTEXT_LOST_WEBGL = 0x9242;
-
-  static const int CULL_FACE = 0x0B44;
-
-  static const int CULL_FACE_MODE = 0x0B45;
-
-  static const int CURRENT_PROGRAM = 0x8B8D;
-
-  static const int CURRENT_VERTEX_ATTRIB = 0x8626;
-
-  static const int CW = 0x0900;
-
-  static const int DECR = 0x1E03;
-
-  static const int DECR_WRAP = 0x8508;
-
-  static const int DELETE_STATUS = 0x8B80;
-
-  static const int DEPTH_ATTACHMENT = 0x8D00;
-
-  static const int DEPTH_BITS = 0x0D56;
-
-  static const int DEPTH_BUFFER_BIT = 0x00000100;
-
-  static const int DEPTH_CLEAR_VALUE = 0x0B73;
-
-  static const int DEPTH_COMPONENT = 0x1902;
-
-  static const int DEPTH_COMPONENT16 = 0x81A5;
-
-  static const int DEPTH_FUNC = 0x0B74;
-
-  static const int DEPTH_RANGE = 0x0B70;
-
-  static const int DEPTH_STENCIL = 0x84F9;
-
-  static const int DEPTH_STENCIL_ATTACHMENT = 0x821A;
-
-  static const int DEPTH_TEST = 0x0B71;
-
-  static const int DEPTH_WRITEMASK = 0x0B72;
-
-  static const int DITHER = 0x0BD0;
-
-  static const int DONT_CARE = 0x1100;
-
-  static const int DST_ALPHA = 0x0304;
-
-  static const int DST_COLOR = 0x0306;
-
-  static const int DYNAMIC_DRAW = 0x88E8;
-
-  static const int ELEMENT_ARRAY_BUFFER = 0x8893;
-
-  static const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
-
-  static const int EQUAL = 0x0202;
-
-  static const int FASTEST = 0x1101;
-
-  static const int FLOAT = 0x1406;
-
-  static const int FLOAT_MAT2 = 0x8B5A;
-
-  static const int FLOAT_MAT3 = 0x8B5B;
-
-  static const int FLOAT_MAT4 = 0x8B5C;
-
-  static const int FLOAT_VEC2 = 0x8B50;
-
-  static const int FLOAT_VEC3 = 0x8B51;
-
-  static const int FLOAT_VEC4 = 0x8B52;
-
-  static const int FRAGMENT_SHADER = 0x8B30;
-
-  static const int FRAMEBUFFER = 0x8D40;
-
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
-
-  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
-
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
-
-  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
-
-  static const int FRAMEBUFFER_BINDING = 0x8CA6;
-
-  static const int FRAMEBUFFER_COMPLETE = 0x8CD5;
-
-  static const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
-
-  static const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
-
-  static const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
-
-  static const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
-
-  static const int FRONT = 0x0404;
-
-  static const int FRONT_AND_BACK = 0x0408;
-
-  static const int FRONT_FACE = 0x0B46;
-
-  static const int FUNC_ADD = 0x8006;
-
-  static const int FUNC_REVERSE_SUBTRACT = 0x800B;
-
-  static const int FUNC_SUBTRACT = 0x800A;
-
-  static const int GENERATE_MIPMAP_HINT = 0x8192;
-
-  static const int GEQUAL = 0x0206;
-
-  static const int GREATER = 0x0204;
-
-  static const int GREEN_BITS = 0x0D53;
-
-  static const int HIGH_FLOAT = 0x8DF2;
-
-  static const int HIGH_INT = 0x8DF5;
-
-  static const int INCR = 0x1E02;
-
-  static const int INCR_WRAP = 0x8507;
-
-  static const int INT = 0x1404;
-
-  static const int INT_VEC2 = 0x8B53;
-
-  static const int INT_VEC3 = 0x8B54;
-
-  static const int INT_VEC4 = 0x8B55;
-
-  static const int INVALID_ENUM = 0x0500;
-
-  static const int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
-
-  static const int INVALID_OPERATION = 0x0502;
-
-  static const int INVALID_VALUE = 0x0501;
-
-  static const int INVERT = 0x150A;
-
-  static const int KEEP = 0x1E00;
-
-  static const int LEQUAL = 0x0203;
-
-  static const int LESS = 0x0201;
-
-  static const int LINEAR = 0x2601;
-
-  static const int LINEAR_MIPMAP_LINEAR = 0x2703;
-
-  static const int LINEAR_MIPMAP_NEAREST = 0x2701;
-
-  static const int LINES = 0x0001;
-
-  static const int LINE_LOOP = 0x0002;
-
-  static const int LINE_STRIP = 0x0003;
-
-  static const int LINE_WIDTH = 0x0B21;
-
-  static const int LINK_STATUS = 0x8B82;
-
-  static const int LOW_FLOAT = 0x8DF0;
-
-  static const int LOW_INT = 0x8DF3;
-
-  static const int LUMINANCE = 0x1909;
-
-  static const int LUMINANCE_ALPHA = 0x190A;
-
-  static const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
-
-  static const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
-
-  static const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
-
-  static const int MAX_RENDERBUFFER_SIZE = 0x84E8;
-
-  static const int MAX_TEXTURE_IMAGE_UNITS = 0x8872;
-
-  static const int MAX_TEXTURE_SIZE = 0x0D33;
-
-  static const int MAX_VARYING_VECTORS = 0x8DFC;
-
-  static const int MAX_VERTEX_ATTRIBS = 0x8869;
-
-  static const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
-
-  static const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
-
-  static const int MAX_VIEWPORT_DIMS = 0x0D3A;
-
-  static const int MEDIUM_FLOAT = 0x8DF1;
-
-  static const int MEDIUM_INT = 0x8DF4;
-
-  static const int MIRRORED_REPEAT = 0x8370;
-
-  static const int NEAREST = 0x2600;
-
-  static const int NEAREST_MIPMAP_LINEAR = 0x2702;
-
-  static const int NEAREST_MIPMAP_NEAREST = 0x2700;
-
-  static const int NEVER = 0x0200;
-
-  static const int NICEST = 0x1102;
-
-  static const int NONE = 0;
-
-  static const int NOTEQUAL = 0x0205;
-
-  static const int NO_ERROR = 0;
-
-  static const int ONE = 1;
-
-  static const int ONE_MINUS_CONSTANT_ALPHA = 0x8004;
-
-  static const int ONE_MINUS_CONSTANT_COLOR = 0x8002;
-
-  static const int ONE_MINUS_DST_ALPHA = 0x0305;
-
-  static const int ONE_MINUS_DST_COLOR = 0x0307;
-
-  static const int ONE_MINUS_SRC_ALPHA = 0x0303;
-
-  static const int ONE_MINUS_SRC_COLOR = 0x0301;
-
-  static const int OUT_OF_MEMORY = 0x0505;
-
-  static const int PACK_ALIGNMENT = 0x0D05;
-
-  static const int POINTS = 0x0000;
-
-  static const int POLYGON_OFFSET_FACTOR = 0x8038;
-
-  static const int POLYGON_OFFSET_FILL = 0x8037;
-
-  static const int POLYGON_OFFSET_UNITS = 0x2A00;
-
-  static const int RED_BITS = 0x0D52;
-
-  static const int RENDERBUFFER = 0x8D41;
-
-  static const int RENDERBUFFER_ALPHA_SIZE = 0x8D53;
-
-  static const int RENDERBUFFER_BINDING = 0x8CA7;
-
-  static const int RENDERBUFFER_BLUE_SIZE = 0x8D52;
-
-  static const int RENDERBUFFER_DEPTH_SIZE = 0x8D54;
-
-  static const int RENDERBUFFER_GREEN_SIZE = 0x8D51;
-
-  static const int RENDERBUFFER_HEIGHT = 0x8D43;
-
-  static const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
-
-  static const int RENDERBUFFER_RED_SIZE = 0x8D50;
-
-  static const int RENDERBUFFER_STENCIL_SIZE = 0x8D55;
-
-  static const int RENDERBUFFER_WIDTH = 0x8D42;
-
-  static const int RENDERER = 0x1F01;
-
-  static const int REPEAT = 0x2901;
-
-  static const int REPLACE = 0x1E01;
-
-  static const int RGB = 0x1907;
-
-  static const int RGB565 = 0x8D62;
-
-  static const int RGB5_A1 = 0x8057;
-
-  static const int RGBA = 0x1908;
-
-  static const int RGBA4 = 0x8056;
-
-  static const int SAMPLER_2D = 0x8B5E;
-
-  static const int SAMPLER_CUBE = 0x8B60;
-
-  static const int SAMPLES = 0x80A9;
-
-  static const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
-
-  static const int SAMPLE_BUFFERS = 0x80A8;
-
-  static const int SAMPLE_COVERAGE = 0x80A0;
-
-  static const int SAMPLE_COVERAGE_INVERT = 0x80AB;
-
-  static const int SAMPLE_COVERAGE_VALUE = 0x80AA;
-
-  static const int SCISSOR_BOX = 0x0C10;
-
-  static const int SCISSOR_TEST = 0x0C11;
-
-  static const int SHADER_TYPE = 0x8B4F;
-
-  static const int SHADING_LANGUAGE_VERSION = 0x8B8C;
-
-  static const int SHORT = 0x1402;
-
-  static const int SRC_ALPHA = 0x0302;
-
-  static const int SRC_ALPHA_SATURATE = 0x0308;
-
-  static const int SRC_COLOR = 0x0300;
-
-  static const int STATIC_DRAW = 0x88E4;
-
-  static const int STENCIL_ATTACHMENT = 0x8D20;
-
-  static const int STENCIL_BACK_FAIL = 0x8801;
-
-  static const int STENCIL_BACK_FUNC = 0x8800;
-
-  static const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
-
-  static const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
-
-  static const int STENCIL_BACK_REF = 0x8CA3;
-
-  static const int STENCIL_BACK_VALUE_MASK = 0x8CA4;
-
-  static const int STENCIL_BACK_WRITEMASK = 0x8CA5;
-
-  static const int STENCIL_BITS = 0x0D57;
-
-  static const int STENCIL_BUFFER_BIT = 0x00000400;
-
-  static const int STENCIL_CLEAR_VALUE = 0x0B91;
-
-  static const int STENCIL_FAIL = 0x0B94;
-
-  static const int STENCIL_FUNC = 0x0B92;
-
-  static const int STENCIL_INDEX = 0x1901;
-
-  static const int STENCIL_INDEX8 = 0x8D48;
-
-  static const int STENCIL_PASS_DEPTH_FAIL = 0x0B95;
-
-  static const int STENCIL_PASS_DEPTH_PASS = 0x0B96;
-
-  static const int STENCIL_REF = 0x0B97;
-
-  static const int STENCIL_TEST = 0x0B90;
-
-  static const int STENCIL_VALUE_MASK = 0x0B93;
-
-  static const int STENCIL_WRITEMASK = 0x0B98;
-
-  static const int STREAM_DRAW = 0x88E0;
-
-  static const int SUBPIXEL_BITS = 0x0D50;
-
-  static const int TEXTURE = 0x1702;
-
-  static const int TEXTURE0 = 0x84C0;
-
-  static const int TEXTURE1 = 0x84C1;
-
-  static const int TEXTURE10 = 0x84CA;
-
-  static const int TEXTURE11 = 0x84CB;
-
-  static const int TEXTURE12 = 0x84CC;
-
-  static const int TEXTURE13 = 0x84CD;
-
-  static const int TEXTURE14 = 0x84CE;
-
-  static const int TEXTURE15 = 0x84CF;
-
-  static const int TEXTURE16 = 0x84D0;
-
-  static const int TEXTURE17 = 0x84D1;
-
-  static const int TEXTURE18 = 0x84D2;
-
-  static const int TEXTURE19 = 0x84D3;
-
-  static const int TEXTURE2 = 0x84C2;
-
-  static const int TEXTURE20 = 0x84D4;
-
-  static const int TEXTURE21 = 0x84D5;
-
-  static const int TEXTURE22 = 0x84D6;
-
-  static const int TEXTURE23 = 0x84D7;
-
-  static const int TEXTURE24 = 0x84D8;
-
-  static const int TEXTURE25 = 0x84D9;
-
-  static const int TEXTURE26 = 0x84DA;
-
-  static const int TEXTURE27 = 0x84DB;
-
-  static const int TEXTURE28 = 0x84DC;
-
-  static const int TEXTURE29 = 0x84DD;
-
-  static const int TEXTURE3 = 0x84C3;
-
-  static const int TEXTURE30 = 0x84DE;
-
-  static const int TEXTURE31 = 0x84DF;
-
-  static const int TEXTURE4 = 0x84C4;
-
-  static const int TEXTURE5 = 0x84C5;
-
-  static const int TEXTURE6 = 0x84C6;
-
-  static const int TEXTURE7 = 0x84C7;
-
-  static const int TEXTURE8 = 0x84C8;
-
-  static const int TEXTURE9 = 0x84C9;
-
-  static const int TEXTURE_2D = 0x0DE1;
-
-  static const int TEXTURE_BINDING_2D = 0x8069;
-
-  static const int TEXTURE_BINDING_CUBE_MAP = 0x8514;
-
-  static const int TEXTURE_CUBE_MAP = 0x8513;
-
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
-
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
-
-  static const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
-
-  static const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
-
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
-
-  static const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
-
-  static const int TEXTURE_MAG_FILTER = 0x2800;
-
-  static const int TEXTURE_MIN_FILTER = 0x2801;
-
-  static const int TEXTURE_WRAP_S = 0x2802;
-
-  static const int TEXTURE_WRAP_T = 0x2803;
-
-  static const int TRIANGLES = 0x0004;
-
-  static const int TRIANGLE_FAN = 0x0006;
-
-  static const int TRIANGLE_STRIP = 0x0005;
-
-  static const int UNPACK_ALIGNMENT = 0x0CF5;
-
-  static const int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
-
-  static const int UNPACK_FLIP_Y_WEBGL = 0x9240;
-
-  static const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
-
-  static const int UNSIGNED_BYTE = 0x1401;
-
-  static const int UNSIGNED_INT = 0x1405;
-
-  static const int UNSIGNED_SHORT = 0x1403;
-
-  static const int UNSIGNED_SHORT_4_4_4_4 = 0x8033;
-
-  static const int UNSIGNED_SHORT_5_5_5_1 = 0x8034;
-
-  static const int UNSIGNED_SHORT_5_6_5 = 0x8363;
-
-  static const int VALIDATE_STATUS = 0x8B83;
-
-  static const int VENDOR = 0x1F00;
-
-  static const int VERSION = 0x1F02;
-
-  static const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
-
-  static const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
-
-  static const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
-
-  static const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
-
-  static const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
-
-  static const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
-
-  static const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
-
-  static const int VERTEX_SHADER = 0x8B31;
-
-  static const int VIEWPORT = 0x0BA2;
-
-  static const int ZERO = 0;
-
-  /** @domName WebGLRenderingContext.drawingBufferHeight */
-  int get drawingBufferHeight;
-
-  /** @domName WebGLRenderingContext.drawingBufferWidth */
-  int get drawingBufferWidth;
-
-  /** @domName WebGLRenderingContext.activeTexture */
-  void activeTexture(int texture);
-
-  /** @domName WebGLRenderingContext.attachShader */
-  void attachShader(WebGLProgram program, WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.bindAttribLocation */
-  void bindAttribLocation(WebGLProgram program, int index, String name);
-
-  /** @domName WebGLRenderingContext.bindBuffer */
-  void bindBuffer(int target, WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.bindFramebuffer */
-  void bindFramebuffer(int target, WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.bindRenderbuffer */
-  void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.bindTexture */
-  void bindTexture(int target, WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.blendColor */
-  void blendColor(num red, num green, num blue, num alpha);
-
-  /** @domName WebGLRenderingContext.blendEquation */
-  void blendEquation(int mode);
-
-  /** @domName WebGLRenderingContext.blendEquationSeparate */
-  void blendEquationSeparate(int modeRGB, int modeAlpha);
-
-  /** @domName WebGLRenderingContext.blendFunc */
-  void blendFunc(int sfactor, int dfactor);
-
-  /** @domName WebGLRenderingContext.blendFuncSeparate */
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha);
-
-  /** @domName WebGLRenderingContext.bufferData */
-  void bufferData(int target, data_OR_size, int usage);
-
-  /** @domName WebGLRenderingContext.bufferSubData */
-  void bufferSubData(int target, int offset, data);
-
-  /** @domName WebGLRenderingContext.checkFramebufferStatus */
-  int checkFramebufferStatus(int target);
-
-  /** @domName WebGLRenderingContext.clear */
-  void clear(int mask);
-
-  /** @domName WebGLRenderingContext.clearColor */
-  void clearColor(num red, num green, num blue, num alpha);
-
-  /** @domName WebGLRenderingContext.clearDepth */
-  void clearDepth(num depth);
-
-  /** @domName WebGLRenderingContext.clearStencil */
-  void clearStencil(int s);
-
-  /** @domName WebGLRenderingContext.colorMask */
-  void colorMask(bool red, bool green, bool blue, bool alpha);
-
-  /** @domName WebGLRenderingContext.compileShader */
-  void compileShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.compressedTexImage2D */
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data);
-
-  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data);
-
-  /** @domName WebGLRenderingContext.copyTexImage2D */
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border);
-
-  /** @domName WebGLRenderingContext.copyTexSubImage2D */
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
-
-  /** @domName WebGLRenderingContext.createBuffer */
-  WebGLBuffer createBuffer();
-
-  /** @domName WebGLRenderingContext.createFramebuffer */
-  WebGLFramebuffer createFramebuffer();
-
-  /** @domName WebGLRenderingContext.createProgram */
-  WebGLProgram createProgram();
-
-  /** @domName WebGLRenderingContext.createRenderbuffer */
-  WebGLRenderbuffer createRenderbuffer();
-
-  /** @domName WebGLRenderingContext.createShader */
-  WebGLShader createShader(int type);
-
-  /** @domName WebGLRenderingContext.createTexture */
-  WebGLTexture createTexture();
-
-  /** @domName WebGLRenderingContext.cullFace */
-  void cullFace(int mode);
-
-  /** @domName WebGLRenderingContext.deleteBuffer */
-  void deleteBuffer(WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.deleteFramebuffer */
-  void deleteFramebuffer(WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.deleteProgram */
-  void deleteProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.deleteRenderbuffer */
-  void deleteRenderbuffer(WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.deleteShader */
-  void deleteShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.deleteTexture */
-  void deleteTexture(WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.depthFunc */
-  void depthFunc(int func);
-
-  /** @domName WebGLRenderingContext.depthMask */
-  void depthMask(bool flag);
-
-  /** @domName WebGLRenderingContext.depthRange */
-  void depthRange(num zNear, num zFar);
-
-  /** @domName WebGLRenderingContext.detachShader */
-  void detachShader(WebGLProgram program, WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.disable */
-  void disable(int cap);
-
-  /** @domName WebGLRenderingContext.disableVertexAttribArray */
-  void disableVertexAttribArray(int index);
-
-  /** @domName WebGLRenderingContext.drawArrays */
-  void drawArrays(int mode, int first, int count);
-
-  /** @domName WebGLRenderingContext.drawElements */
-  void drawElements(int mode, int count, int type, int offset);
-
-  /** @domName WebGLRenderingContext.enable */
-  void enable(int cap);
-
-  /** @domName WebGLRenderingContext.enableVertexAttribArray */
-  void enableVertexAttribArray(int index);
-
-  /** @domName WebGLRenderingContext.finish */
-  void finish();
-
-  /** @domName WebGLRenderingContext.flush */
-  void flush();
-
-  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.framebufferTexture2D */
-  void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level);
-
-  /** @domName WebGLRenderingContext.frontFace */
-  void frontFace(int mode);
-
-  /** @domName WebGLRenderingContext.generateMipmap */
-  void generateMipmap(int target);
-
-  /** @domName WebGLRenderingContext.getActiveAttrib */
-  WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index);
-
-  /** @domName WebGLRenderingContext.getActiveUniform */
-  WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
-
-  /** @domName WebGLRenderingContext.getAttachedShaders */
-  void getAttachedShaders(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.getAttribLocation */
-  int getAttribLocation(WebGLProgram program, String name);
-
-  /** @domName WebGLRenderingContext.getBufferParameter */
-  Object getBufferParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getContextAttributes */
-  WebGLContextAttributes getContextAttributes();
-
-  /** @domName WebGLRenderingContext.getError */
-  int getError();
-
-  /** @domName WebGLRenderingContext.getExtension */
-  Object getExtension(String name);
-
-  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
-
-  /** @domName WebGLRenderingContext.getParameter */
-  Object getParameter(int pname);
-
-  /** @domName WebGLRenderingContext.getProgramInfoLog */
-  String getProgramInfoLog(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.getProgramParameter */
-  Object getProgramParameter(WebGLProgram program, int pname);
-
-  /** @domName WebGLRenderingContext.getRenderbufferParameter */
-  Object getRenderbufferParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getShaderInfoLog */
-  String getShaderInfoLog(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.getShaderParameter */
-  Object getShaderParameter(WebGLShader shader, int pname);
-
-  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
-  WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype);
-
-  /** @domName WebGLRenderingContext.getShaderSource */
-  String getShaderSource(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.getSupportedExtensions */
-  List<String> getSupportedExtensions();
-
-  /** @domName WebGLRenderingContext.getTexParameter */
-  Object getTexParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getUniform */
-  Object getUniform(WebGLProgram program, WebGLUniformLocation location);
-
-  /** @domName WebGLRenderingContext.getUniformLocation */
-  WebGLUniformLocation getUniformLocation(WebGLProgram program, String name);
-
-  /** @domName WebGLRenderingContext.getVertexAttrib */
-  Object getVertexAttrib(int index, int pname);
-
-  /** @domName WebGLRenderingContext.getVertexAttribOffset */
-  int getVertexAttribOffset(int index, int pname);
-
-  /** @domName WebGLRenderingContext.hint */
-  void hint(int target, int mode);
-
-  /** @domName WebGLRenderingContext.isBuffer */
-  bool isBuffer(WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.isContextLost */
-  bool isContextLost();
-
-  /** @domName WebGLRenderingContext.isEnabled */
-  bool isEnabled(int cap);
-
-  /** @domName WebGLRenderingContext.isFramebuffer */
-  bool isFramebuffer(WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.isProgram */
-  bool isProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.isRenderbuffer */
-  bool isRenderbuffer(WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.isShader */
-  bool isShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.isTexture */
-  bool isTexture(WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.lineWidth */
-  void lineWidth(num width);
-
-  /** @domName WebGLRenderingContext.linkProgram */
-  void linkProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.pixelStorei */
-  void pixelStorei(int pname, int param);
-
-  /** @domName WebGLRenderingContext.polygonOffset */
-  void polygonOffset(num factor, num units);
-
-  /** @domName WebGLRenderingContext.readPixels */
-  void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels);
-
-  /** @domName WebGLRenderingContext.releaseShaderCompiler */
-  void releaseShaderCompiler();
-
-  /** @domName WebGLRenderingContext.renderbufferStorage */
-  void renderbufferStorage(int target, int internalformat, int width, int height);
-
-  /** @domName WebGLRenderingContext.sampleCoverage */
-  void sampleCoverage(num value, bool invert);
-
-  /** @domName WebGLRenderingContext.scissor */
-  void scissor(int x, int y, int width, int height);
-
-  /** @domName WebGLRenderingContext.shaderSource */
-  void shaderSource(WebGLShader shader, String string);
-
-  /** @domName WebGLRenderingContext.stencilFunc */
-  void stencilFunc(int func, int ref, int mask);
-
-  /** @domName WebGLRenderingContext.stencilFuncSeparate */
-  void stencilFuncSeparate(int face, int func, int ref, int mask);
-
-  /** @domName WebGLRenderingContext.stencilMask */
-  void stencilMask(int mask);
-
-  /** @domName WebGLRenderingContext.stencilMaskSeparate */
-  void stencilMaskSeparate(int face, int mask);
-
-  /** @domName WebGLRenderingContext.stencilOp */
-  void stencilOp(int fail, int zfail, int zpass);
-
-  /** @domName WebGLRenderingContext.stencilOpSeparate */
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass);
-
-  /** @domName WebGLRenderingContext.texImage2D */
-  void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, ArrayBufferView pixels]);
-
-  /** @domName WebGLRenderingContext.texParameterf */
-  void texParameterf(int target, int pname, num param);
-
-  /** @domName WebGLRenderingContext.texParameteri */
-  void texParameteri(int target, int pname, int param);
-
-  /** @domName WebGLRenderingContext.texSubImage2D */
-  void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, ArrayBufferView pixels]);
-
-  /** @domName WebGLRenderingContext.uniform1f */
-  void uniform1f(WebGLUniformLocation location, num x);
-
-  /** @domName WebGLRenderingContext.uniform1fv */
-  void uniform1fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform1i */
-  void uniform1i(WebGLUniformLocation location, int x);
-
-  /** @domName WebGLRenderingContext.uniform1iv */
-  void uniform1iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform2f */
-  void uniform2f(WebGLUniformLocation location, num x, num y);
-
-  /** @domName WebGLRenderingContext.uniform2fv */
-  void uniform2fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform2i */
-  void uniform2i(WebGLUniformLocation location, int x, int y);
-
-  /** @domName WebGLRenderingContext.uniform2iv */
-  void uniform2iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform3f */
-  void uniform3f(WebGLUniformLocation location, num x, num y, num z);
-
-  /** @domName WebGLRenderingContext.uniform3fv */
-  void uniform3fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform3i */
-  void uniform3i(WebGLUniformLocation location, int x, int y, int z);
-
-  /** @domName WebGLRenderingContext.uniform3iv */
-  void uniform3iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform4f */
-  void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w);
-
-  /** @domName WebGLRenderingContext.uniform4fv */
-  void uniform4fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform4i */
-  void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w);
-
-  /** @domName WebGLRenderingContext.uniform4iv */
-  void uniform4iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniformMatrix2fv */
-  void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.uniformMatrix3fv */
-  void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.uniformMatrix4fv */
-  void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.useProgram */
-  void useProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.validateProgram */
-  void validateProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.vertexAttrib1f */
-  void vertexAttrib1f(int indx, num x);
-
-  /** @domName WebGLRenderingContext.vertexAttrib1fv */
-  void vertexAttrib1fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib2f */
-  void vertexAttrib2f(int indx, num x, num y);
-
-  /** @domName WebGLRenderingContext.vertexAttrib2fv */
-  void vertexAttrib2fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib3f */
-  void vertexAttrib3f(int indx, num x, num y, num z);
-
-  /** @domName WebGLRenderingContext.vertexAttrib3fv */
-  void vertexAttrib3fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib4f */
-  void vertexAttrib4f(int indx, num x, num y, num z, num w);
-
-  /** @domName WebGLRenderingContext.vertexAttrib4fv */
-  void vertexAttrib4fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttribPointer */
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset);
-
-  /** @domName WebGLRenderingContext.viewport */
-  void viewport(int x, int y, int width, int height);
-}
-
-class _WebGLRenderingContextImpl extends _CanvasRenderingContextImpl implements WebGLRenderingContext native "*WebGLRenderingContext" {
-
-  final int drawingBufferHeight;
-
-  final int drawingBufferWidth;
-
-  void activeTexture(int texture) native;
-
-  void attachShader(_WebGLProgramImpl program, _WebGLShaderImpl shader) native;
-
-  void bindAttribLocation(_WebGLProgramImpl program, int index, String name) native;
-
-  void bindBuffer(int target, _WebGLBufferImpl buffer) native;
-
-  void bindFramebuffer(int target, _WebGLFramebufferImpl framebuffer) native;
-
-  void bindRenderbuffer(int target, _WebGLRenderbufferImpl renderbuffer) native;
-
-  void bindTexture(int target, _WebGLTextureImpl texture) native;
-
-  void blendColor(num red, num green, num blue, num alpha) native;
-
-  void blendEquation(int mode) native;
-
-  void blendEquationSeparate(int modeRGB, int modeAlpha) native;
-
-  void blendFunc(int sfactor, int dfactor) native;
-
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native;
-
-  void bufferData(int target, data_OR_size, int usage) native;
-
-  void bufferSubData(int target, int offset, data) native;
-
-  int checkFramebufferStatus(int target) native;
-
-  void clear(int mask) native;
-
-  void clearColor(num red, num green, num blue, num alpha) native;
-
-  void clearDepth(num depth) native;
-
-  void clearStencil(int s) native;
-
-  void colorMask(bool red, bool green, bool blue, bool alpha) native;
-
-  void compileShader(_WebGLShaderImpl shader) native;
-
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, _ArrayBufferViewImpl data) native;
-
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, _ArrayBufferViewImpl data) native;
-
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native;
-
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native;
-
-  _WebGLBufferImpl createBuffer() native;
-
-  _WebGLFramebufferImpl createFramebuffer() native;
-
-  _WebGLProgramImpl createProgram() native;
-
-  _WebGLRenderbufferImpl createRenderbuffer() native;
-
-  _WebGLShaderImpl createShader(int type) native;
-
-  _WebGLTextureImpl createTexture() native;
-
-  void cullFace(int mode) native;
-
-  void deleteBuffer(_WebGLBufferImpl buffer) native;
-
-  void deleteFramebuffer(_WebGLFramebufferImpl framebuffer) native;
-
-  void deleteProgram(_WebGLProgramImpl program) native;
-
-  void deleteRenderbuffer(_WebGLRenderbufferImpl renderbuffer) native;
-
-  void deleteShader(_WebGLShaderImpl shader) native;
-
-  void deleteTexture(_WebGLTextureImpl texture) native;
-
-  void depthFunc(int func) native;
-
-  void depthMask(bool flag) native;
-
-  void depthRange(num zNear, num zFar) native;
-
-  void detachShader(_WebGLProgramImpl program, _WebGLShaderImpl shader) native;
-
-  void disable(int cap) native;
-
-  void disableVertexAttribArray(int index) native;
-
-  void drawArrays(int mode, int first, int count) native;
-
-  void drawElements(int mode, int count, int type, int offset) native;
-
-  void enable(int cap) native;
-
-  void enableVertexAttribArray(int index) native;
-
-  void finish() native;
-
-  void flush() native;
-
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, _WebGLRenderbufferImpl renderbuffer) native;
-
-  void framebufferTexture2D(int target, int attachment, int textarget, _WebGLTextureImpl texture, int level) native;
-
-  void frontFace(int mode) native;
-
-  void generateMipmap(int target) native;
-
-  _WebGLActiveInfoImpl getActiveAttrib(_WebGLProgramImpl program, int index) native;
-
-  _WebGLActiveInfoImpl getActiveUniform(_WebGLProgramImpl program, int index) native;
-
-  void getAttachedShaders(_WebGLProgramImpl program) native;
-
-  int getAttribLocation(_WebGLProgramImpl program, String name) native;
-
-  Object getBufferParameter(int target, int pname) native;
-
-  _WebGLContextAttributesImpl getContextAttributes() native;
-
-  int getError() native;
-
-  Object getExtension(String name) native;
-
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
-
-  Object getParameter(int pname) native;
-
-  String getProgramInfoLog(_WebGLProgramImpl program) native;
-
-  Object getProgramParameter(_WebGLProgramImpl program, int pname) native;
-
-  Object getRenderbufferParameter(int target, int pname) native;
-
-  String getShaderInfoLog(_WebGLShaderImpl shader) native;
-
-  Object getShaderParameter(_WebGLShaderImpl shader, int pname) native;
-
-  _WebGLShaderPrecisionFormatImpl getShaderPrecisionFormat(int shadertype, int precisiontype) native;
-
-  String getShaderSource(_WebGLShaderImpl shader) native;
-
-  List<String> getSupportedExtensions() native;
-
-  Object getTexParameter(int target, int pname) native;
-
-  Object getUniform(_WebGLProgramImpl program, _WebGLUniformLocationImpl location) native;
-
-  _WebGLUniformLocationImpl getUniformLocation(_WebGLProgramImpl program, String name) native;
-
-  Object getVertexAttrib(int index, int pname) native;
-
-  int getVertexAttribOffset(int index, int pname) native;
-
-  void hint(int target, int mode) native;
-
-  bool isBuffer(_WebGLBufferImpl buffer) native;
-
-  bool isContextLost() native;
-
-  bool isEnabled(int cap) native;
-
-  bool isFramebuffer(_WebGLFramebufferImpl framebuffer) native;
-
-  bool isProgram(_WebGLProgramImpl program) native;
-
-  bool isRenderbuffer(_WebGLRenderbufferImpl renderbuffer) native;
-
-  bool isShader(_WebGLShaderImpl shader) native;
-
-  bool isTexture(_WebGLTextureImpl texture) native;
-
-  void lineWidth(num width) native;
-
-  void linkProgram(_WebGLProgramImpl program) native;
-
-  void pixelStorei(int pname, int param) native;
-
-  void polygonOffset(num factor, num units) native;
-
-  void readPixels(int x, int y, int width, int height, int format, int type, _ArrayBufferViewImpl pixels) native;
-
-  void releaseShaderCompiler() native;
-
-  void renderbufferStorage(int target, int internalformat, int width, int height) native;
-
-  void sampleCoverage(num value, bool invert) native;
-
-  void scissor(int x, int y, int width, int height) native;
-
-  void shaderSource(_WebGLShaderImpl shader, String string) native;
-
-  void stencilFunc(int func, int ref, int mask) native;
-
-  void stencilFuncSeparate(int face, int func, int ref, int mask) native;
-
-  void stencilMask(int mask) native;
-
-  void stencilMaskSeparate(int face, int mask) native;
-
-  void stencilOp(int fail, int zfail, int zpass) native;
-
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
-
-  void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [format, type, pixels]) {
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
-        (format is int || format == null) &&
-        (type is int || type == null) &&
-        (pixels is ArrayBufferView || pixels == null)) {
-      _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
-      return;
-    }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
-        !?format &&
-        !?type &&
-        !?pixels) {
-      var pixels_1 = _convertDartToNative_ImageData(border_OR_canvas_OR_image_OR_pixels_OR_video);
-      _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, pixels_1);
-      return;
-    }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
-        !?format &&
-        !?type &&
-        !?pixels) {
-      _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
-        !?format &&
-        !?type &&
-        !?pixels) {
-      _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
-        !?format &&
-        !?type &&
-        !?pixels) {
-      _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  void _texImage2D_1(target, level, internalformat, width, height, int border, int format, int type, _ArrayBufferViewImpl pixels) native "texImage2D";
-  void _texImage2D_2(target, level, internalformat, format, type, pixels) native "texImage2D";
-  void _texImage2D_3(target, level, internalformat, format, type, _ImageElementImpl image) native "texImage2D";
-  void _texImage2D_4(target, level, internalformat, format, type, _CanvasElementImpl canvas) native "texImage2D";
-  void _texImage2D_5(target, level, internalformat, format, type, _VideoElementImpl video) native "texImage2D";
-
-  void texParameterf(int target, int pname, num param) native;
-
-  void texParameteri(int target, int pname, int param) native;
-
-  void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [type, pixels]) {
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
-        (type is int || type == null) &&
-        (pixels is ArrayBufferView || pixels == null)) {
-      _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
-      return;
-    }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
-        !?type &&
-        !?pixels) {
-      var pixels_1 = _convertDartToNative_ImageData(canvas_OR_format_OR_image_OR_pixels_OR_video);
-      _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, pixels_1);
-      return;
-    }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
-        !?type &&
-        !?pixels) {
-      _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
-        !?type &&
-        !?pixels) {
-      _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
-        !?type &&
-        !?pixels) {
-      _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
-      return;
-    }
-    throw const Exception("Incorrect number or type of arguments");
-  }
-  void _texSubImage2D_1(target, level, xoffset, yoffset, width, height, int format, int type, _ArrayBufferViewImpl pixels) native "texSubImage2D";
-  void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels) native "texSubImage2D";
-  void _texSubImage2D_3(target, level, xoffset, yoffset, format, type, _ImageElementImpl image) native "texSubImage2D";
-  void _texSubImage2D_4(target, level, xoffset, yoffset, format, type, _CanvasElementImpl canvas) native "texSubImage2D";
-  void _texSubImage2D_5(target, level, xoffset, yoffset, format, type, _VideoElementImpl video) native "texSubImage2D";
-
-  void uniform1f(_WebGLUniformLocationImpl location, num x) native;
-
-  void uniform1fv(_WebGLUniformLocationImpl location, _Float32ArrayImpl v) native;
-
-  void uniform1i(_WebGLUniformLocationImpl location, int x) native;
-
-  void uniform1iv(_WebGLUniformLocationImpl location, _Int32ArrayImpl v) native;
-
-  void uniform2f(_WebGLUniformLocationImpl location, num x, num y) native;
-
-  void uniform2fv(_WebGLUniformLocationImpl location, _Float32ArrayImpl v) native;
-
-  void uniform2i(_WebGLUniformLocationImpl location, int x, int y) native;
-
-  void uniform2iv(_WebGLUniformLocationImpl location, _Int32ArrayImpl v) native;
-
-  void uniform3f(_WebGLUniformLocationImpl location, num x, num y, num z) native;
-
-  void uniform3fv(_WebGLUniformLocationImpl location, _Float32ArrayImpl v) native;
-
-  void uniform3i(_WebGLUniformLocationImpl location, int x, int y, int z) native;
-
-  void uniform3iv(_WebGLUniformLocationImpl location, _Int32ArrayImpl v) native;
-
-  void uniform4f(_WebGLUniformLocationImpl location, num x, num y, num z, num w) native;
-
-  void uniform4fv(_WebGLUniformLocationImpl location, _Float32ArrayImpl v) native;
-
-  void uniform4i(_WebGLUniformLocationImpl location, int x, int y, int z, int w) native;
-
-  void uniform4iv(_WebGLUniformLocationImpl location, _Int32ArrayImpl v) native;
-
-  void uniformMatrix2fv(_WebGLUniformLocationImpl location, bool transpose, _Float32ArrayImpl array) native;
-
-  void uniformMatrix3fv(_WebGLUniformLocationImpl location, bool transpose, _Float32ArrayImpl array) native;
-
-  void uniformMatrix4fv(_WebGLUniformLocationImpl location, bool transpose, _Float32ArrayImpl array) native;
-
-  void useProgram(_WebGLProgramImpl program) native;
-
-  void validateProgram(_WebGLProgramImpl program) native;
-
-  void vertexAttrib1f(int indx, num x) native;
-
-  void vertexAttrib1fv(int indx, _Float32ArrayImpl values) native;
-
-  void vertexAttrib2f(int indx, num x, num y) native;
-
-  void vertexAttrib2fv(int indx, _Float32ArrayImpl values) native;
-
-  void vertexAttrib3f(int indx, num x, num y, num z) native;
-
-  void vertexAttrib3fv(int indx, _Float32ArrayImpl values) native;
-
-  void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
-
-  void vertexAttrib4fv(int indx, _Float32ArrayImpl values) native;
-
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native;
-
-  void viewport(int x, int y, int width, int height) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLShader
-abstract class WebGLShader {
-}
-
-class _WebGLShaderImpl implements WebGLShader native "*WebGLShader" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLShaderPrecisionFormat
-abstract class WebGLShaderPrecisionFormat {
-
-  /** @domName WebGLShaderPrecisionFormat.precision */
-  int get precision;
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMax */
-  int get rangeMax;
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMin */
-  int get rangeMin;
-}
-
-class _WebGLShaderPrecisionFormatImpl implements WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
-
-  final int precision;
-
-  final int rangeMax;
-
-  final int rangeMin;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLTexture
-abstract class WebGLTexture {
-}
-
-class _WebGLTextureImpl implements WebGLTexture native "*WebGLTexture" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLUniformLocation
-abstract class WebGLUniformLocation {
-}
-
-class _WebGLUniformLocationImpl implements WebGLUniformLocation native "*WebGLUniformLocation" {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebGLVertexArrayObjectOES
-abstract class WebGLVertexArrayObjectOES {
-}
-
-class _WebGLVertexArrayObjectOESImpl implements WebGLVertexArrayObjectOES native "*WebGLVertexArrayObjectOES" {
-}
-
-class _WebKitAnimationListImpl implements List<Animation>, JavaScriptIndexingBehavior native "*WebKitAnimationList" {
-
-  final int length;
-
-  _AnimationImpl operator[](int index) => JS("_AnimationImpl", "#[#]", this, index);
-
-  void operator[]=(int index, _AnimationImpl value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Animation> mixins.
-  // Animation is the element type.
-
-  // From Iterable<Animation>:
-
-  Iterator<Animation> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Animation>(this);
-  }
-
-  // From Collection<Animation>:
-
-  void add(Animation value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Animation value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Animation> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Animation element) => _Collections.contains(this, element);
-
-  void forEach(void f(Animation element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Animation element)) => _Collections.map(this, [], f);
-
-  Collection<Animation> filter(bool f(Animation element)) =>
-     _Collections.filter(this, <Animation>[], f);
-
-  bool every(bool f(Animation element)) => _Collections.every(this, f);
-
-  bool some(bool f(Animation element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Animation>:
-
-  void sort([Comparator<Animation> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Animation element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Animation element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Animation get last => this[length - 1];
-
-  Animation removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Animation initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Animation> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Animation>[]);
-
-  // -- end List<Animation> mixins.
-
-  _AnimationImpl item(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSFilterValue
-abstract class WebKitCSSFilterValue implements List<CSSValue> {
-
-  static const int CSS_FILTER_BLUR = 10;
-
-  static const int CSS_FILTER_BRIGHTNESS = 8;
-
-  static const int CSS_FILTER_CONTRAST = 9;
-
-  static const int CSS_FILTER_CUSTOM = 12;
-
-  static const int CSS_FILTER_DROP_SHADOW = 11;
-
-  static const int CSS_FILTER_GRAYSCALE = 2;
-
-  static const int CSS_FILTER_HUE_ROTATE = 5;
-
-  static const int CSS_FILTER_INVERT = 6;
-
-  static const int CSS_FILTER_OPACITY = 7;
-
-  static const int CSS_FILTER_REFERENCE = 1;
-
-  static const int CSS_FILTER_SATURATE = 4;
-
-  static const int CSS_FILTER_SEPIA = 3;
-
-  /** @domName WebKitCSSFilterValue.operationType */
-  int get operationType;
-}
-
-class _WebKitCSSFilterValueImpl extends _CSSValueListImpl implements WebKitCSSFilterValue native "*WebKitCSSFilterValue" {
-
-  final int operationType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitNamedFlow
-abstract class WebKitNamedFlow implements EventTarget {
-
-  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
-  int get firstEmptyRegionIndex;
-
-  /** @domName WebKitNamedFlow.name */
-  String get name;
-
-  /** @domName WebKitNamedFlow.overset */
-  bool get overset;
-
-  /** @domName WebKitNamedFlow.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebKitNamedFlow.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName WebKitNamedFlow.getContent */
-  List<Node> getContent();
-
-  /** @domName WebKitNamedFlow.getRegions */
-  List<Node> getRegions();
-
-  /** @domName WebKitNamedFlow.getRegionsByContent */
-  List<Node> getRegionsByContent(Node contentNode);
-
-  /** @domName WebKitNamedFlow.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-class _WebKitNamedFlowImpl extends _EventTargetImpl implements WebKitNamedFlow native "*WebKitNamedFlow" {
-
-  final int firstEmptyRegionIndex;
-
-  final String name;
-
-  final bool overset;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  bool $dom_dispatchEvent(_EventImpl event) native "dispatchEvent";
-
-  List<Node> getContent() native;
-
-  List<Node> getRegions() native;
-
-  List<Node> getRegionsByContent(_NodeImpl contentNode) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName WebSocket
-abstract class WebSocket implements EventTarget {
-
-  factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WebSocketEvents get on;
-
-  static const int CLOSED = 3;
-
-  static const int CLOSING = 2;
-
-  static const int CONNECTING = 0;
-
-  static const int OPEN = 1;
-
-  /** @domName WebSocket.URL */
-  String get URL;
-
-  /** @domName WebSocket.binaryType */
-  String binaryType;
-
-  /** @domName WebSocket.bufferedAmount */
-  int get bufferedAmount;
-
-  /** @domName WebSocket.extensions */
-  String get extensions;
-
-  /** @domName WebSocket.protocol */
-  String get protocol;
-
-  /** @domName WebSocket.readyState */
-  int get readyState;
-
-  /** @domName WebSocket.url */
-  String get url;
-
-  /** @domName WebSocket.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.close */
-  void close([int code, String reason]);
-
-  /** @domName WebSocket.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName WebSocket.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.send */
-  void send(data);
-}
-
-abstract class WebSocketEvents implements Events {
-
-  EventListenerList get close;
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
-
-class _WebSocketImpl extends _EventTargetImpl implements WebSocket native "*WebSocket" {
-
-  _WebSocketEventsImpl get on =>
-    new _WebSocketEventsImpl(this);
-
-  final String URL;
-
-  String binaryType;
-
-  final int bufferedAmount;
-
-  final String extensions;
-
-  final String protocol;
-
-  final int readyState;
-
-  final String url;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void close([int code, String reason]) native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  void send(data) native;
-}
-
-class _WebSocketEventsImpl extends _EventsImpl implements WebSocketEvents {
-  _WebSocketEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get close => this['close'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get open => this['open'];
-}
-// 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.
-
-
-/// @domName WheelEvent
-abstract class WheelEvent implements MouseEvent {
-
-  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
-  bool get webkitDirectionInvertedFromDevice;
-
-  /** @domName WheelEvent.wheelDeltaX */
-  int get $dom_wheelDeltaX;
-
-  /** @domName WheelEvent.wheelDeltaY */
-  int get $dom_wheelDeltaY;
-
-  /** @domName WheelEvent.initWebKitWheelEvent */
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
-
-
-  /** @domName WheelEvent.deltaX */
-  abstract num get deltaX;
-
-  /** @domName WheelEvent.deltaY */
-  abstract num get deltaY;
-
-  /** @domName WheelEvent.deltaMode */
-  abstract int get deltaMode;
-}
-// 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 _WheelEventImpl extends _MouseEventImpl implements WheelEvent native "*WheelEvent" {
-
-  final bool webkitDirectionInvertedFromDevice;
-
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, _LocalWindowImpl view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
-
-
-  num get deltaY {
-    if (JS('bool', '#.deltaY !== undefined', this)) {
-      // W3C WheelEvent
-      return this._deltaY;
-    } else if (JS('bool', '#.wheelDelta !== undefined', this)) {
-      // Chrome and IE
-      return this._wheelDelta;
-    } else if (JS('bool', '#.detail !== undefined', this)) {
-      // Firefox
-
-      // Handle DOMMouseScroll case where it uses detail and the axis to
-      // differentiate.
-      if (JS('bool', '#.axis == MouseScrollEvent.VERTICAL_AXIS', this)) {
-        var detail = this._detail;
-        // Firefox is normally the number of lines to scale (normally 3)
-        // so multiply it by 40 to get pixels to move, matching IE & WebKit.
-        if (detail < 100) {
-          return detail * 40;
-        }
-        return detail;
-      }
-      return 0;
-    }
-    throw new UnsupportedError(
-        'deltaY is not supported');
-  }
-
-  num get deltaX {
-    if (JS('bool', '#.deltaX !== undefined', this)) {
-      // W3C WheelEvent
-      return this._deltaX;
-    } else if (JS('bool', '#.wheelDeltaX !== undefined', this)) {
-      // Chrome
-      return this._wheelDeltaX;
-    } else if (JS('bool', '#.detail !== undefined', this)) {
-      // Firefox and IE.
-      // IE will have detail set but will not set axis.
-
-      // Handle DOMMouseScroll case where it uses detail and the axis to
-      // differentiate.
-      if (JS('bool', '#.axis !== undefined && #.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
-        var detail = this._detail;
-        // Firefox is normally the number of lines to scale (normally 3)
-        // so multiply it by 40 to get pixels to move, matching IE & WebKit.
-        if (detail < 100) {
-          return detail * 40;
-        }
-        return detail;
-      }
-      return 0;
-    }
-    throw new UnsupportedError(
-        'deltaX is not supported');
-  }
-
-  int get deltaMode {
-    if (JS('bool', '!!#.deltaMode', this)) {
-      // If not available then we're poly-filling and doing pixel scroll.
-      return 0;
-    }
-    return this._deltaMode;
-  }
-
-  num get _deltaY => JS('num', '#.deltaY', this);
-  num get _deltaX => JS('num', '#.deltaX', this);
-  num get _wheelDelta => JS('num', '#.wheelDelta', this);
-  num get _wheelDeltaX => JS('num', '#.wheelDeltaX', this);
-  num get _detail => JS('num', '#.detail', this);
-  int get _deltaMode => JS('int', '#.deltaMode', this);
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Worker
-abstract class Worker implements AbstractWorker {
-
-  factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WorkerEvents get on;
-
-  /** @domName Worker.postMessage */
-  void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]);
-
-  /** @domName Worker.terminate */
-  void terminate();
-}
-
-abstract class WorkerEvents implements AbstractWorkerEvents {
-
-  EventListenerList get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerContext
-abstract class WorkerContext implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WorkerContextEvents get on;
-
-  static const int PERSISTENT = 1;
-
-  static const int TEMPORARY = 0;
-
-  /** @domName WorkerContext.indexedDB */
-  IDBFactory get indexedDB;
-
-  /** @domName WorkerContext.location */
-  WorkerLocation get location;
-
-  /** @domName WorkerContext.navigator */
-  WorkerNavigator get navigator;
-
-  /** @domName WorkerContext.self */
-  WorkerContext get self;
-
-  /** @domName WorkerContext.webkitIndexedDB */
-  IDBFactory get webkitIndexedDB;
-
-  /** @domName WorkerContext.webkitNotifications */
-  NotificationCenter get webkitNotifications;
-
-  /** @domName WorkerContext.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WorkerContext.clearInterval */
-  void clearInterval(int handle);
-
-  /** @domName WorkerContext.clearTimeout */
-  void clearTimeout(int handle);
-
-  /** @domName WorkerContext.close */
-  void close();
-
-  /** @domName WorkerContext.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName WorkerContext.importScripts */
-  void importScripts();
-
-  /** @domName WorkerContext.openDatabase */
-  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName WorkerContext.openDatabaseSync */
-  DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName WorkerContext.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WorkerContext.setInterval */
-  int setInterval(TimeoutHandler handler, int timeout);
-
-  /** @domName WorkerContext.setTimeout */
-  int setTimeout(TimeoutHandler handler, int timeout);
-
-  /** @domName WorkerContext.webkitRequestFileSystem */
-  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]);
-
-  /** @domName WorkerContext.webkitRequestFileSystemSync */
-  DOMFileSystemSync webkitRequestFileSystemSync(int type, int size);
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
-  EntrySync webkitResolveLocalFileSystemSyncURL(String url);
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]);
-}
-
-abstract class WorkerContextEvents implements Events {
-
-  EventListenerList get error;
-}
-
-class _WorkerContextImpl extends _EventTargetImpl implements WorkerContext native "*WorkerContext" {
-
-  _WorkerContextEventsImpl get on =>
-    new _WorkerContextEventsImpl(this);
-
-  final _IDBFactoryImpl indexedDB;
-
-  final _WorkerLocationImpl location;
-
-  final _WorkerNavigatorImpl navigator;
-
-  final _WorkerContextImpl self;
-
-  final _IDBFactoryImpl webkitIndexedDB;
-
-  final _NotificationCenterImpl webkitNotifications;
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
-
-  void clearInterval(int handle) native;
-
-  void clearTimeout(int handle) native;
-
-  void close() native;
-
-  bool $dom_dispatchEvent(_EventImpl evt) native "dispatchEvent";
-
-  void importScripts() native;
-
-  _DatabaseImpl openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
-
-  _DatabaseSyncImpl openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
-
-  int setInterval(TimeoutHandler handler, int timeout) native;
-
-  int setTimeout(TimeoutHandler handler, int timeout) native;
-
-  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native;
-
-  _DOMFileSystemSyncImpl webkitRequestFileSystemSync(int type, int size) native;
-
-  _EntrySyncImpl webkitResolveLocalFileSystemSyncURL(String url) native;
-
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
-}
-
-class _WorkerContextEventsImpl extends _EventsImpl implements WorkerContextEvents {
-  _WorkerContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get error => this['error'];
-}
-
-class _WorkerImpl extends _AbstractWorkerImpl implements Worker native "*Worker" {
-
-  _WorkerEventsImpl get on =>
-    new _WorkerEventsImpl(this);
-
-  void postMessage(/*SerializedScriptValue*/ message, [messagePorts]) {
-    if (?messagePorts) {
-      var message_1 = _convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, messagePorts);
-      return;
-    }
-    var message_2 = _convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_2);
-    return;
-  }
-  void _postMessage_1(message, List messagePorts) native "postMessage";
-  void _postMessage_2(message) native "postMessage";
-
-  void terminate() native;
-}
-
-class _WorkerEventsImpl extends _AbstractWorkerEventsImpl implements WorkerEvents {
-  _WorkerEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get message => this['message'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerLocation
-abstract class WorkerLocation {
-
-  /** @domName WorkerLocation.hash */
-  String get hash;
-
-  /** @domName WorkerLocation.host */
-  String get host;
-
-  /** @domName WorkerLocation.hostname */
-  String get hostname;
-
-  /** @domName WorkerLocation.href */
-  String get href;
-
-  /** @domName WorkerLocation.pathname */
-  String get pathname;
-
-  /** @domName WorkerLocation.port */
-  String get port;
-
-  /** @domName WorkerLocation.protocol */
-  String get protocol;
-
-  /** @domName WorkerLocation.search */
-  String get search;
-
-  /** @domName WorkerLocation.toString */
-  String toString();
-}
-
-class _WorkerLocationImpl implements WorkerLocation native "*WorkerLocation" {
-
-  final String hash;
-
-  final String host;
-
-  final String hostname;
-
-  final String href;
-
-  final String pathname;
-
-  final String port;
-
-  final String protocol;
-
-  final String search;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerNavigator
-abstract class WorkerNavigator {
-
-  /** @domName WorkerNavigator.appName */
-  String get appName;
-
-  /** @domName WorkerNavigator.appVersion */
-  String get appVersion;
-
-  /** @domName WorkerNavigator.onLine */
-  bool get onLine;
-
-  /** @domName WorkerNavigator.platform */
-  String get platform;
-
-  /** @domName WorkerNavigator.userAgent */
-  String get userAgent;
-}
-
-class _WorkerNavigatorImpl implements WorkerNavigator native "*WorkerNavigator" {
-
-  final String appName;
-
-  final String appVersion;
-
-  final bool onLine;
-
-  final String platform;
-
-  final String userAgent;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLSerializer
-abstract class XMLSerializer {
-
-  factory XMLSerializer() => _XMLSerializerFactoryProvider.createXMLSerializer();
-
-  /** @domName XMLSerializer.serializeToString */
-  String serializeToString(Node node);
-}
-
-class _XMLSerializerImpl implements XMLSerializer native "*XMLSerializer" {
-
-  String serializeToString(_NodeImpl node) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathEvaluator
-abstract class XPathEvaluator {
-
-  factory XPathEvaluator() => _XPathEvaluatorFactoryProvider.createXPathEvaluator();
-
-  /** @domName XPathEvaluator.createExpression */
-  XPathExpression createExpression(String expression, XPathNSResolver resolver);
-
-  /** @domName XPathEvaluator.createNSResolver */
-  XPathNSResolver createNSResolver(Node nodeResolver);
-
-  /** @domName XPathEvaluator.evaluate */
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult);
-}
-
-class _XPathEvaluatorImpl implements XPathEvaluator native "*XPathEvaluator" {
-
-  _XPathExpressionImpl createExpression(String expression, _XPathNSResolverImpl resolver) native;
-
-  _XPathNSResolverImpl createNSResolver(_NodeImpl nodeResolver) native;
-
-  _XPathResultImpl evaluate(String expression, _NodeImpl contextNode, _XPathNSResolverImpl resolver, int type, _XPathResultImpl inResult) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathException
-abstract class XPathException {
-
-  static const int INVALID_EXPRESSION_ERR = 51;
-
-  static const int TYPE_ERR = 52;
-
-  /** @domName XPathException.code */
-  int get code;
-
-  /** @domName XPathException.message */
-  String get message;
-
-  /** @domName XPathException.name */
-  String get name;
-
-  /** @domName XPathException.toString */
-  String toString();
-}
-
-class _XPathExceptionImpl implements XPathException native "*XPathException" {
-
-  final int code;
-
-  final String message;
-
-  final String name;
-
-  String toString() native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathExpression
-abstract class XPathExpression {
-
-  /** @domName XPathExpression.evaluate */
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult);
-}
-
-class _XPathExpressionImpl implements XPathExpression native "*XPathExpression" {
-
-  _XPathResultImpl evaluate(_NodeImpl contextNode, int type, _XPathResultImpl inResult) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathNSResolver
-abstract class XPathNSResolver {
-
-  /** @domName XPathNSResolver.lookupNamespaceURI */
-  String lookupNamespaceURI(String prefix);
-}
-
-class _XPathNSResolverImpl implements XPathNSResolver native "*XPathNSResolver" {
-
-  String lookupNamespaceURI(String prefix) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathResult
-abstract class XPathResult {
-
-  static const int ANY_TYPE = 0;
-
-  static const int ANY_UNORDERED_NODE_TYPE = 8;
-
-  static const int BOOLEAN_TYPE = 3;
-
-  static const int FIRST_ORDERED_NODE_TYPE = 9;
-
-  static const int NUMBER_TYPE = 1;
-
-  static const int ORDERED_NODE_ITERATOR_TYPE = 5;
-
-  static const int ORDERED_NODE_SNAPSHOT_TYPE = 7;
-
-  static const int STRING_TYPE = 2;
-
-  static const int UNORDERED_NODE_ITERATOR_TYPE = 4;
-
-  static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
-
-  /** @domName XPathResult.booleanValue */
-  bool get booleanValue;
-
-  /** @domName XPathResult.invalidIteratorState */
-  bool get invalidIteratorState;
-
-  /** @domName XPathResult.numberValue */
-  num get numberValue;
-
-  /** @domName XPathResult.resultType */
-  int get resultType;
-
-  /** @domName XPathResult.singleNodeValue */
-  Node get singleNodeValue;
-
-  /** @domName XPathResult.snapshotLength */
-  int get snapshotLength;
-
-  /** @domName XPathResult.stringValue */
-  String get stringValue;
-
-  /** @domName XPathResult.iterateNext */
-  Node iterateNext();
-
-  /** @domName XPathResult.snapshotItem */
-  Node snapshotItem(int index);
-}
-
-class _XPathResultImpl implements XPathResult native "*XPathResult" {
-
-  final bool booleanValue;
-
-  final bool invalidIteratorState;
-
-  final num numberValue;
-
-  final int resultType;
-
-  final _NodeImpl singleNodeValue;
-
-  final int snapshotLength;
-
-  final String stringValue;
-
-  _NodeImpl iterateNext() native;
-
-  _NodeImpl snapshotItem(int index) native;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XSLTProcessor
-abstract class XSLTProcessor {
-
-  factory XSLTProcessor() => _XSLTProcessorFactoryProvider.createXSLTProcessor();
-
-  /** @domName XSLTProcessor.clearParameters */
-  void clearParameters();
-
-  /** @domName XSLTProcessor.getParameter */
-  String getParameter(String namespaceURI, String localName);
-
-  /** @domName XSLTProcessor.importStylesheet */
-  void importStylesheet(Node stylesheet);
-
-  /** @domName XSLTProcessor.removeParameter */
-  void removeParameter(String namespaceURI, String localName);
-
-  /** @domName XSLTProcessor.reset */
-  void reset();
-
-  /** @domName XSLTProcessor.setParameter */
-  void setParameter(String namespaceURI, String localName, String value);
-
-  /** @domName XSLTProcessor.transformToDocument */
-  Document transformToDocument(Node source);
-
-  /** @domName XSLTProcessor.transformToFragment */
-  DocumentFragment transformToFragment(Node source, Document docVal);
-}
-
-class _XSLTProcessorImpl implements XSLTProcessor native "*XSLTProcessor" {
-
-  void clearParameters() native;
-
-  String getParameter(String namespaceURI, String localName) native;
-
-  void importStylesheet(_NodeImpl stylesheet) native;
-
-  void removeParameter(String namespaceURI, String localName) native;
-
-  void reset() native;
-
-  void setParameter(String namespaceURI, String localName, String value) native;
-
-  _DocumentImpl transformToDocument(_NodeImpl source) native;
-
-  _DocumentFragmentImpl transformToFragment(_NodeImpl source, _DocumentImpl docVal) native;
-}
-// 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 _ArrayBufferFactoryProvider {
-  static ArrayBuffer createArrayBuffer(int length) =>
-      JS('ArrayBuffer', 'new ArrayBuffer(#)', length);
-}
-// 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 _AudioElementFactoryProvider {
-  static AudioElement createAudioElement([String src = null]) {
-    if (src == null) return JS('AudioElement', 'new Audio()');
-    return JS('AudioElement', 'new Audio(#)', src);
-  }
-}
-// 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 _BlobFactoryProvider {
-  static Blob createBlob([List blobParts = null, String type, String endings]) {
-    // TODO: validate that blobParts is a JS Array and convert if not.
-    // TODO: any coercions on the elements of blobParts, e.g. coerce a typed
-    // array to ArrayBuffer if it is a total view.
-    if (type == null && endings == null) {
-      return _create_1(blobParts);
-    }
-    var bag = _create_bag();
-    if (type != null) _bag_set(bag, 'type', type);
-    if (endings != null) _bag_set(bag, 'endings', endings);
-    return _create_2(blobParts, bag);
-  }
-
-  static _create_1(parts) => JS('Blob', 'new Blob(#)', parts);
-  static _create_2(parts, bag) => JS('Blob', 'new Blob(#, #)', parts, bag);
-
-  static _create_bag() => JS('var', '{}');
-  static _bag_set(bag, key, value) { JS('void', '#[#] = #', bag, key, value); }
-}
-// 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 _CSSMatrixFactoryProvider {
-  static CSSMatrix createCSSMatrix([String cssValue = '']) =>
-      JS('CSSMatrix', 'new WebKitCSSMatrix(#)', cssValue);
-}
-// 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 _DOMParserFactoryProvider {
-  static DOMParser createDOMParser() =>
-      JS('DOMParser', 'new DOMParser()' );
-}
-// 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 _DOMURLFactoryProvider {
-  static DOMURL createDOMURL() =>
-      JS('DOMURL', 'new DOMURL()' );
-}
-// 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 _DataViewFactoryProvider {
-  static DataView createDataView(
-      ArrayBuffer buffer, [int byteOffset = null, int byteLength = null]) {
-    if (byteOffset == null) {
-      return JS('DataView', 'new DataView(#)', buffer);
-    }
-    if (byteLength == null) {
-      return JS('DataView', 'new DataView(#,#)', buffer, byteOffset);
-    }
-    return JS('DataView', 'new DataView(#,#,#)', buffer, byteOffset, byteLength);
-  }
-}
-// 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 {
-
-
-  static AnchorElement createAnchorElement([String href]) {
-    _AnchorElementImpl _e = _document.$dom_createElement("a");
-    if (href != null) _e.href = href;
-    return _e;
-  }
-
-  static AreaElement createAreaElement() {
-    _AreaElementImpl _e = _document.$dom_createElement("area");
-    return _e;
-  }
-
-  static BRElement createBRElement() {
-    _BRElementImpl _e = _document.$dom_createElement("br");
-    return _e;
-  }
-
-  static BaseElement createBaseElement() {
-    _BaseElementImpl _e = _document.$dom_createElement("base");
-    return _e;
-  }
-
-  static BodyElement createBodyElement() {
-    _BodyElementImpl _e = _document.$dom_createElement("body");
-    return _e;
-  }
-
-  static ButtonElement createButtonElement() {
-    _ButtonElementImpl _e = _document.$dom_createElement("button");
-    return _e;
-  }
-
-  static CanvasElement createCanvasElement([int width, int height]) {
-    _CanvasElementImpl _e = _document.$dom_createElement("canvas");
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static ContentElement createContentElement() {
-    _ContentElementImpl _e = _document.$dom_createElement("content");
-    return _e;
-  }
-
-  static DListElement createDListElement() {
-    _DListElementImpl _e = _document.$dom_createElement("dl");
-    return _e;
-  }
-
-  static DataListElement createDataListElement() {
-    _DataListElementImpl _e = _document.$dom_createElement("datalist");
-    return _e;
-  }
-
-  static DetailsElement createDetailsElement() {
-    _DetailsElementImpl _e = _document.$dom_createElement("details");
-    return _e;
-  }
-
-  static DivElement createDivElement() {
-    _DivElementImpl _e = _document.$dom_createElement("div");
-    return _e;
-  }
-
-  static EmbedElement createEmbedElement() {
-    _EmbedElementImpl _e = _document.$dom_createElement("embed");
-    return _e;
-  }
-
-  static FieldSetElement createFieldSetElement() {
-    _FieldSetElementImpl _e = _document.$dom_createElement("fieldset");
-    return _e;
-  }
-
-  static FormElement createFormElement() {
-    _FormElementImpl _e = _document.$dom_createElement("form");
-    return _e;
-  }
-
-  static HRElement createHRElement() {
-    _HRElementImpl _e = _document.$dom_createElement("hr");
-    return _e;
-  }
-
-  static HeadElement createHeadElement() {
-    _HeadElementImpl _e = _document.$dom_createElement("head");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h1() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h1");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h2() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h2");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h3() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h3");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h4() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h4");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h5() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h5");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h6() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h6");
-    return _e;
-  }
-
-  static HtmlElement createHtmlElement() {
-    _HtmlElementImpl _e = _document.$dom_createElement("html");
-    return _e;
-  }
-
-  static IFrameElement createIFrameElement() {
-    _IFrameElementImpl _e = _document.$dom_createElement("iframe");
-    return _e;
-  }
-
-  static ImageElement createImageElement([String src, int width, int height]) {
-    _ImageElementImpl _e = _document.$dom_createElement("img");
-    if (src != null) _e.src = src;
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static InputElement createInputElement([String type]) {
-    _InputElementImpl _e = _document.$dom_createElement("input");
-    if (type != null) _e.type = type;
-    return _e;
-  }
-
-  static KeygenElement createKeygenElement() {
-    _KeygenElementImpl _e = _document.$dom_createElement("keygen");
-    return _e;
-  }
-
-  static LIElement createLIElement() {
-    _LIElementImpl _e = _document.$dom_createElement("li");
-    return _e;
-  }
-
-  static LabelElement createLabelElement() {
-    _LabelElementImpl _e = _document.$dom_createElement("label");
-    return _e;
-  }
-
-  static LegendElement createLegendElement() {
-    _LegendElementImpl _e = _document.$dom_createElement("legend");
-    return _e;
-  }
-
-  static LinkElement createLinkElement() {
-    _LinkElementImpl _e = _document.$dom_createElement("link");
-    return _e;
-  }
-
-  static MapElement createMapElement() {
-    _MapElementImpl _e = _document.$dom_createElement("map");
-    return _e;
-  }
-
-  static MenuElement createMenuElement() {
-    _MenuElementImpl _e = _document.$dom_createElement("menu");
-    return _e;
-  }
-
-  static MeterElement createMeterElement() {
-    _MeterElementImpl _e = _document.$dom_createElement("meter");
-    return _e;
-  }
-
-  static OListElement createOListElement() {
-    _OListElementImpl _e = _document.$dom_createElement("ol");
-    return _e;
-  }
-
-  static ObjectElement createObjectElement() {
-    _ObjectElementImpl _e = _document.$dom_createElement("object");
-    return _e;
-  }
-
-  static OptGroupElement createOptGroupElement() {
-    _OptGroupElementImpl _e = _document.$dom_createElement("optgroup");
-    return _e;
-  }
-
-  static OutputElement createOutputElement() {
-    _OutputElementImpl _e = _document.$dom_createElement("output");
-    return _e;
-  }
-
-  static ParagraphElement createParagraphElement() {
-    _ParagraphElementImpl _e = _document.$dom_createElement("p");
-    return _e;
-  }
-
-  static ParamElement createParamElement() {
-    _ParamElementImpl _e = _document.$dom_createElement("param");
-    return _e;
-  }
-
-  static PreElement createPreElement() {
-    _PreElementImpl _e = _document.$dom_createElement("pre");
-    return _e;
-  }
-
-  static ProgressElement createProgressElement() {
-    _ProgressElementImpl _e = _document.$dom_createElement("progress");
-    return _e;
-  }
-
-  static ScriptElement createScriptElement() {
-    _ScriptElementImpl _e = _document.$dom_createElement("script");
-    return _e;
-  }
-
-  static SelectElement createSelectElement() {
-    _SelectElementImpl _e = _document.$dom_createElement("select");
-    return _e;
-  }
-
-  static SourceElement createSourceElement() {
-    _SourceElementImpl _e = _document.$dom_createElement("source");
-    return _e;
-  }
-
-  static SpanElement createSpanElement() {
-    _SpanElementImpl _e = _document.$dom_createElement("span");
-    return _e;
-  }
-
-  static StyleElement createStyleElement() {
-    _StyleElementImpl _e = _document.$dom_createElement("style");
-    return _e;
-  }
-
-  static TableCaptionElement createTableCaptionElement() {
-    _TableCaptionElementImpl _e = _document.$dom_createElement("caption");
-    return _e;
-  }
-
-  static TableCellElement createTableCellElement() {
-    _TableCellElementImpl _e = _document.$dom_createElement("td");
-    return _e;
-  }
-
-  static TableColElement createTableColElement() {
-    _TableColElementImpl _e = _document.$dom_createElement("col");
-    return _e;
-  }
-
-  static TableElement createTableElement() {
-    _TableElementImpl _e = _document.$dom_createElement("table");
-    return _e;
-  }
-
-  static TableRowElement createTableRowElement() {
-    _TableRowElementImpl _e = _document.$dom_createElement("tr");
-    return _e;
-  }
-
-  static TextAreaElement createTextAreaElement() {
-    _TextAreaElementImpl _e = _document.$dom_createElement("textarea");
-    return _e;
-  }
-
-  static TitleElement createTitleElement() {
-    _TitleElementImpl _e = _document.$dom_createElement("title");
-    return _e;
-  }
-
-  static TrackElement createTrackElement() {
-    _TrackElementImpl _e = _document.$dom_createElement("track");
-    return _e;
-  }
-
-  static UListElement createUListElement() {
-    _UListElementImpl _e = _document.$dom_createElement("ul");
-    return _e;
-  }
-
-  static VideoElement createVideoElement() {
-    _VideoElementImpl _e = _document.$dom_createElement("video");
-    return _e;
-  }
-}
-// 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 _EventSourceFactoryProvider {
-  static EventSource createEventSource(String scriptUrl) =>
-      JS('EventSource', 'new EventSource(#)', scriptUrl);
-}
-// 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 _FileReaderFactoryProvider {
-  static FileReader createFileReader() =>
-      JS('FileReader', 'new FileReader()' );
-}
-// 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 _FileReaderSyncFactoryProvider {
-  static FileReaderSync createFileReaderSync() =>
-      JS('FileReaderSync', 'new FileReaderSync()' );
-}
-// 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 _FormDataFactoryProvider {
-  static FormData createFormData([FormElement form = null]) {
-    if (form == null) return JS('FormData', 'new FormData()');
-    return JS('FormData', 'new FormData(#)', form);
-  }
-}
-// 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 _HttpRequestFactoryProvider {
-  static HttpRequest createHttpRequest() =>
-      JS('HttpRequest', 'new XMLHttpRequest();');
-
-  static HttpRequest createHttpRequest_get(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, false);
-
-  static HttpRequest createHttpRequest_getWithCredentials(String url,
-      onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, true);
-}
-// 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 _IceCandidateFactoryProvider {
-  static IceCandidate createIceCandidate(String label, String candidateLine) =>
-      JS('IceCandidate', 'new IceCandidate(#,#)', label, candidateLine);
-}
-// 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 _MediaControllerFactoryProvider {
-  static MediaController createMediaController() =>
-      JS('MediaController', 'new MediaController()' );
-}
-// 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 _MediaSourceFactoryProvider {
-  static MediaSource createMediaSource() =>
-      JS('MediaSource', 'new MediaSource()' );
-}
-// 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 _MediaStreamFactoryProvider {
-  static MediaStream createMediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) =>
-      JS('MediaStream', 'new MediaStream(#,#)', audioTracks, videoTracks);
-}
-// 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 _MessageChannelFactoryProvider {
-  static MessageChannel createMessageChannel() =>
-      JS('MessageChannel', 'new MessageChannel()' );
-}
-// 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 _MutationObserverFactoryProvider {
-  static MutationObserver createMutationObserver(MutationCallback callback) native '''
-    var constructor =
-        window.MutationObserver || window.WebKitMutationObserver ||
-        window.MozMutationObserver;
-    return new constructor(callback);
-  ''';
-
-  // TODO(sra): Dart2js inserts a conversion when a Dart function (i.e. an
-  // object with a call method) is passed to a native method.  This is so the
-  // native code sees a JavaScript function.
-  //
-  // This does not happen when a function is 'passed' to a JS-form so it is not
-  // possible to rewrite the above code to, e.g. (simplified):
-  //
-  // static createMutationObserver(MutationCallback callback) =>
-  //    JS('var', 'new (window.MutationObserver)(#)', callback);
-}
-// 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 _NotificationFactoryProvider {
-  static Notification createNotification(String title, [Map options]) =>
-      JS('Notification', 'new Notification(#,#)', title, options);
-}
-// 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 _OptionElementFactoryProvider {
-  static OptionElement createOptionElement(
-      [String data, String value, bool defaultSelected, bool selected]) {
-    if (data == null) {
-      return JS('OptionElement', 'new Option()');
-    }
-    if (value == null) {
-      return JS('OptionElement', 'new Option(#)', data);
-    }
-    if (defaultSelected == null) {
-      return JS('OptionElement', 'new Option(#,#)', data, value);
-    }
-    if (selected == null) {
-      return JS('OptionElement', 'new Option(#,#,#)',
-                data, value, defaultSelected);
-    }
-    return JS('OptionElement', 'new Option(#,#,#,#)',
-              data, value, defaultSelected, selected);
-  }
-}
-// 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 _PeerConnection00FactoryProvider {
-  static PeerConnection00 createPeerConnection00(String serverConfiguration, IceCallback iceCallback) =>
-      JS('PeerConnection00', 'new PeerConnection00(#,#)', serverConfiguration, iceCallback);
-}
-// 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 _RTCIceCandidateFactoryProvider {
-  static RTCIceCandidate createRTCIceCandidate(Map dictionary) =>
-      JS('RTCIceCandidate', 'new RTCIceCandidate(#)', dictionary);
-}
-// 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 _RTCPeerConnectionFactoryProvider {
-  static RTCPeerConnection createRTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) =>
-      JS('RTCPeerConnection', 'new RTCPeerConnection(#,#)', rtcIceServers, mediaConstraints);
-}
-// 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 _RTCSessionDescriptionFactoryProvider {
-  static RTCSessionDescription createRTCSessionDescription(Map dictionary) =>
-      JS('RTCSessionDescription', 'new RTCSessionDescription(#)', dictionary);
-}
-// 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 _SessionDescriptionFactoryProvider {
-  static SessionDescription createSessionDescription(String sdp) =>
-      JS('SessionDescription', 'new SessionDescription(#)', sdp);
-}
-// 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 _ShadowRootFactoryProvider {
-  static ShadowRoot createShadowRoot(Element host) =>
-      JS('ShadowRoot',
-         'new (window.ShadowRoot || window.WebKitShadowRoot)(#)', host);
-}
-// 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 _SharedWorkerFactoryProvider {
-  static SharedWorker createSharedWorker(String scriptURL, [String name]) {
-    if (name == null) return JS('SharedWorker', 'new SharedWorker(#)', scriptURL);
-    return JS('SharedWorker', 'new SharedWorker(#,#)', scriptURL, name);
-  }
-}
-// 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 _SpeechGrammarFactoryProvider {
-  static SpeechGrammar createSpeechGrammar() =>
-      JS('SpeechGrammar', 'new SpeechGrammar()' );
-}
-// 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 _SpeechGrammarListFactoryProvider {
-  static SpeechGrammarList createSpeechGrammarList() =>
-      JS('SpeechGrammarList', 'new SpeechGrammarList()' );
-}
-// 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 _SpeechRecognitionFactoryProvider {
-  static SpeechRecognition createSpeechRecognition() =>
-      JS('SpeechRecognition', 'new SpeechRecognition()' );
-}
-// 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 _TextTrackCueFactoryProvider {
-  static TextTrackCue createTextTrackCue(
-      String id, num startTime, num endTime, String text,
-      [String settings, bool pauseOnExit]) {
-        if (settings == null) {
-          return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#)',
-                    id, startTime, endTime, text);
-        }
-        if (pauseOnExit == null) {
-          return JS('TextTrackCue',
-                    'new TextTrackCue(#,#,#,#,#)',
-                    id, startTime, endTime, text, settings);
-        }
-        return JS('TextTrackCue',
-                  'new TextTrackCue(#,#,#,#,#,#)',
-                  id, startTime, endTime, text, settings, pauseOnExit);
-  }
-}
-// 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 _WorkerFactoryProvider {
-  static Worker createWorker(String scriptUrl) =>
-      JS('Worker', 'new Worker(#)', scriptUrl);
-}
-// 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 _XMLSerializerFactoryProvider {
-  static XMLSerializer createXMLSerializer() =>
-      JS('XMLSerializer', 'new XMLSerializer()' );
-}
-// 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 _XPathEvaluatorFactoryProvider {
-  static XPathEvaluator createXPathEvaluator() =>
-      JS('XPathEvaluator', 'new XPathEvaluator()' );
-}
-// 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 _XSLTProcessorFactoryProvider {
-  static XSLTProcessor createXSLTProcessor() =>
-      JS('XSLTProcessor', 'new XSLTProcessor()' );
-}
-// 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.
-
-abstract class Window {
-  // Fields.
-  Location get location;
-  History get history;
-
-  bool get closed;
-  Window get opener;
-  Window get parent;
-  Window get top;
-
-  // Methods.
-  void focus();
-  void blur();
-  void close();
-  void postMessage(var message, String targetOrigin, [List messagePorts = null]);
-}
-
-abstract class Location {
-  void set href(String val);
-}
-
-abstract class History {
-  void back();
-  void forward();
-  void go(int distance);
-}
-// 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.
-
-typedef void EventListener(Event event);
-// 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.
-
-/**
- * Defines the standard key locations returned by
- * KeyboardEvent.getKeyLocation.
- */
-abstract class KeyLocation {
-
-  /**
-   * The event key is not distinguished as the left or right version
-   * of the key, and did not originate from the numeric keypad (or did not
-   * originate with a virtual key corresponding to the numeric keypad).
-   */
-  static const int STANDARD = 0;
-
-  /**
-   * The event key is in the left key location.
-   */
-  static const int LEFT = 1;
-
-  /**
-   * The event key is in the right key location.
-   */
-  static const int RIGHT = 2;
-
-  /**
-   * The event key originated on the numeric keypad or with a virtual key
-   * corresponding to the numeric keypad.
-   */
-  static const int NUMPAD = 3;
-
-  /**
-   * The event key originated on a mobile device, either on a physical
-   * keypad or a virtual keyboard.
-   */
-  static const int MOBILE = 4;
-
-  /**
-   * The event key originated on a game controller or a joystick on a mobile
-   * device.
-   */
-  static const int JOYSTICK = 5;
-}
-// 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.
-
-/**
- * Defines the standard keyboard identifier names for keys that are returned
- * by KeyEvent.getKeyboardIdentifier when the key does not have a direct
- * unicode mapping.
- */
-abstract class KeyName {
-
-  /** The Accept (Commit, OK) key */
-  static const String ACCEPT = "Accept";
-
-  /** The Add key */
-  static const String ADD = "Add";
-
-  /** The Again key */
-  static const String AGAIN = "Again";
-
-  /** The All Candidates key */
-  static const String ALL_CANDIDATES = "AllCandidates";
-
-  /** The Alphanumeric key */
-  static const String ALPHANUMERIC = "Alphanumeric";
-
-  /** The Alt (Menu) key */
-  static const String ALT = "Alt";
-
-  /** The Alt-Graph key */
-  static const String ALT_GRAPH = "AltGraph";
-
-  /** The Application key */
-  static const String APPS = "Apps";
-
-  /** The ATTN key */
-  static const String ATTN = "Attn";
-
-  /** The Browser Back key */
-  static const String BROWSER_BACK = "BrowserBack";
-
-  /** The Browser Favorites key */
-  static const String BROWSER_FAVORTIES = "BrowserFavorites";
-
-  /** The Browser Forward key */
-  static const String BROWSER_FORWARD = "BrowserForward";
-
-  /** The Browser Home key */
-  static const String BROWSER_NAME = "BrowserHome";
-
-  /** The Browser Refresh key */
-  static const String BROWSER_REFRESH = "BrowserRefresh";
-
-  /** The Browser Search key */
-  static const String BROWSER_SEARCH = "BrowserSearch";
-
-  /** The Browser Stop key */
-  static const String BROWSER_STOP = "BrowserStop";
-
-  /** The Camera key */
-  static const String CAMERA = "Camera";
-
-  /** The Caps Lock (Capital) key */
-  static const String CAPS_LOCK = "CapsLock";
-
-  /** The Clear key */
-  static const String CLEAR = "Clear";
-
-  /** The Code Input key */
-  static const String CODE_INPUT = "CodeInput";
-
-  /** The Compose key */
-  static const String COMPOSE = "Compose";
-
-  /** The Control (Ctrl) key */
-  static const String CONTROL = "Control";
-
-  /** The Crsel key */
-  static const String CRSEL = "Crsel";
-
-  /** The Convert key */
-  static const String CONVERT = "Convert";
-
-  /** The Copy key */
-  static const String COPY = "Copy";
-
-  /** The Cut key */
-  static const String CUT = "Cut";
-
-  /** The Decimal key */
-  static const String DECIMAL = "Decimal";
-
-  /** The Divide key */
-  static const String DIVIDE = "Divide";
-
-  /** The Down Arrow key */
-  static const String DOWN = "Down";
-
-  /** The diagonal Down-Left Arrow key */
-  static const String DOWN_LEFT = "DownLeft";
-
-  /** The diagonal Down-Right Arrow key */
-  static const String DOWN_RIGHT = "DownRight";
-
-  /** The Eject key */
-  static const String EJECT = "Eject";
-
-  /** The End key */
-  static const String END = "End";
-
-  /**
-   * The Enter key. Note: This key value must also be used for the Return
-   *  (Macintosh numpad) key
-   */
-  static const String ENTER = "Enter";
-
-  /** The Erase EOF key */
-  static const String ERASE_EOF= "EraseEof";
-
-  /** The Execute key */
-  static const String EXECUTE = "Execute";
-
-  /** The Exsel key */
-  static const String EXSEL = "Exsel";
-
-  /** The Function switch key */
-  static const String FN = "Fn";
-
-  /** The F1 key */
-  static const String F1 = "F1";
-
-  /** The F2 key */
-  static const String F2 = "F2";
-
-  /** The F3 key */
-  static const String F3 = "F3";
-
-  /** The F4 key */
-  static const String F4 = "F4";
-
-  /** The F5 key */
-  static const String F5 = "F5";
-
-  /** The F6 key */
-  static const String F6 = "F6";
-
-  /** The F7 key */
-  static const String F7 = "F7";
-
-  /** The F8 key */
-  static const String F8 = "F8";
-
-  /** The F9 key */
-  static const String F9 = "F9";
-
-  /** The F10 key */
-  static const String F10 = "F10";
-
-  /** The F11 key */
-  static const String F11 = "F11";
-
-  /** The F12 key */
-  static const String F12 = "F12";
-
-  /** The F13 key */
-  static const String F13 = "F13";
-
-  /** The F14 key */
-  static const String F14 = "F14";
-
-  /** The F15 key */
-  static const String F15 = "F15";
-
-  /** The F16 key */
-  static const String F16 = "F16";
-
-  /** The F17 key */
-  static const String F17 = "F17";
-
-  /** The F18 key */
-  static const String F18 = "F18";
-
-  /** The F19 key */
-  static const String F19 = "F19";
-
-  /** The F20 key */
-  static const String F20 = "F20";
-
-  /** The F21 key */
-  static const String F21 = "F21";
-
-  /** The F22 key */
-  static const String F22 = "F22";
-
-  /** The F23 key */
-  static const String F23 = "F23";
-
-  /** The F24 key */
-  static const String F24 = "F24";
-
-  /** The Final Mode (Final) key used on some asian keyboards */
-  static const String FINAL_MODE = "FinalMode";
-
-  /** The Find key */
-  static const String FIND = "Find";
-
-  /** The Full-Width Characters key */
-  static const String FULL_WIDTH = "FullWidth";
-
-  /** The Half-Width Characters key */
-  static const String HALF_WIDTH = "HalfWidth";
-
-  /** The Hangul (Korean characters) Mode key */
-  static const String HANGUL_MODE = "HangulMode";
-
-  /** The Hanja (Korean characters) Mode key */
-  static const String HANJA_MODE = "HanjaMode";
-
-  /** The Help key */
-  static const String HELP = "Help";
-
-  /** The Hiragana (Japanese Kana characters) key */
-  static const String HIRAGANA = "Hiragana";
-
-  /** The Home key */
-  static const String HOME = "Home";
-
-  /** The Insert (Ins) key */
-  static const String INSERT = "Insert";
-
-  /** The Japanese-Hiragana key */
-  static const String JAPANESE_HIRAGANA = "JapaneseHiragana";
-
-  /** The Japanese-Katakana key */
-  static const String JAPANESE_KATAKANA = "JapaneseKatakana";
-
-  /** The Japanese-Romaji key */
-  static const String JAPANESE_ROMAJI = "JapaneseRomaji";
-
-  /** The Junja Mode key */
-  static const String JUNJA_MODE = "JunjaMode";
-
-  /** The Kana Mode (Kana Lock) key */
-  static const String KANA_MODE = "KanaMode";
-
-  /**
-   * The Kanji (Japanese name for ideographic characters of Chinese origin)
-   * Mode key
-   */
-  static const String KANJI_MODE = "KanjiMode";
-
-  /** The Katakana (Japanese Kana characters) key */
-  static const String KATAKANA = "Katakana";
-
-  /** The Start Application One key */
-  static const String LAUNCH_APPLICATION_1 = "LaunchApplication1";
-
-  /** The Start Application Two key */
-  static const String LAUNCH_APPLICATION_2 = "LaunchApplication2";
-
-  /** The Start Mail key */
-  static const String LAUNCH_MAIL = "LaunchMail";
-
-  /** The Left Arrow key */
-  static const String LEFT = "Left";
-
-  /** The Menu key */
-  static const String MENU = "Menu";
-
-  /**
-   * The Meta key. Note: This key value shall be also used for the Apple
-   * Command key
-   */
-  static const String META = "Meta";
-
-  /** The Media Next Track key */
-  static const String MEDIA_NEXT_TRACK = "MediaNextTrack";
-
-  /** The Media Play Pause key */
-  static const String MEDIA_PAUSE_PLAY = "MediaPlayPause";
-
-  /** The Media Previous Track key */
-  static const String MEDIA_PREVIOUS_TRACK = "MediaPreviousTrack";
-
-  /** The Media Stop key */
-  static const String MEDIA_STOP = "MediaStop";
-
-  /** The Mode Change key */
-  static const String MODE_CHANGE = "ModeChange";
-
-  /** The Next Candidate function key */
-  static const String NEXT_CANDIDATE = "NextCandidate";
-
-  /** The Nonconvert (Don't Convert) key */
-  static const String NON_CONVERT = "Nonconvert";
-
-  /** The Number Lock key */
-  static const String NUM_LOCK = "NumLock";
-
-  /** The Page Down (Next) key */
-  static const String PAGE_DOWN = "PageDown";
-
-  /** The Page Up key */
-  static const String PAGE_UP = "PageUp";
-
-  /** The Paste key */
-  static const String PASTE = "Paste";
-
-  /** The Pause key */
-  static const String PAUSE = "Pause";
-
-  /** The Play key */
-  static const String PLAY = "Play";
-
-  /**
-   * The Power key. Note: Some devices may not expose this key to the
-   * operating environment
-   */
-  static const String POWER = "Power";
-
-  /** The Previous Candidate function key */
-  static const String PREVIOUS_CANDIDATE = "PreviousCandidate";
-
-  /** The Print Screen (PrintScrn, SnapShot) key */
-  static const String PRINT_SCREEN = "PrintScreen";
-
-  /** The Process key */
-  static const String PROCESS = "Process";
-
-  /** The Props key */
-  static const String PROPS = "Props";
-
-  /** The Right Arrow key */
-  static const String RIGHT = "Right";
-
-  /** The Roman Characters function key */
-  static const String ROMAN_CHARACTERS = "RomanCharacters";
-
-  /** The Scroll Lock key */
-  static const String SCROLL = "Scroll";
-
-  /** The Select key */
-  static const String SELECT = "Select";
-
-  /** The Select Media key */
-  static const String SELECT_MEDIA = "SelectMedia";
-
-  /** The Separator key */
-  static const String SEPARATOR = "Separator";
-
-  /** The Shift key */
-  static const String SHIFT = "Shift";
-
-  /** The Soft1 key */
-  static const String SOFT_1 = "Soft1";
-
-  /** The Soft2 key */
-  static const String SOFT_2 = "Soft2";
-
-  /** The Soft3 key */
-  static const String SOFT_3 = "Soft3";
-
-  /** The Soft4 key */
-  static const String SOFT_4 = "Soft4";
-
-  /** The Stop key */
-  static const String STOP = "Stop";
-
-  /** The Subtract key */
-  static const String SUBTRACT = "Subtract";
-
-  /** The Symbol Lock key */
-  static const String SYMBOL_LOCK = "SymbolLock";
-
-  /** The Up Arrow key */
-  static const String UP = "Up";
-
-  /** The diagonal Up-Left Arrow key */
-  static const String UP_LEFT = "UpLeft";
-
-  /** The diagonal Up-Right Arrow key */
-  static const String UP_RIGHT = "UpRight";
-
-  /** The Undo key */
-  static const String UNDO = "Undo";
-
-  /** The Volume Down key */
-  static const String VOLUME_DOWN = "VolumeDown";
-
-  /** The Volume Mute key */
-  static const String VOLUMN_MUTE = "VolumeMute";
-
-  /** The Volume Up key */
-  static const String VOLUMN_UP = "VolumeUp";
-
-  /** The Windows Logo key */
-  static const String WIN = "Win";
-
-  /** The Zoom key */
-  static const String ZOOM = "Zoom";
-
-  /**
-   * The Backspace (Back) key. Note: This key value shall be also used for the
-   * key labeled 'delete' MacOS keyboards when not modified by the 'Fn' key
-   */
-  static const String BACKSPACE = "Backspace";
-
-  /** The Horizontal Tabulation (Tab) key */
-  static const String TAB = "Tab";
-
-  /** The Cancel key */
-  static const String CANCEL = "Cancel";
-
-  /** The Escape (Esc) key */
-  static const String ESC = "Esc";
-
-  /** The Space (Spacebar) key:   */
-  static const String SPACEBAR = "Spacebar";
-
-  /**
-   * The Delete (Del) Key. Note: This key value shall be also used for the key
-   * labeled 'delete' MacOS keyboards when modified by the 'Fn' key
-   */
-  static const String DEL = "Del";
-
-  /** The Combining Grave Accent (Greek Varia, Dead Grave) key */
-  static const String DEAD_GRAVE = "DeadGrave";
-
-  /**
-   * The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute)
-   * key
-   */
-  static const String DEAD_EACUTE = "DeadEacute";
-
-  /** The Combining Circumflex Accent (Hat, Dead Circumflex) key */
-  static const String DEAD_CIRCUMFLEX = "DeadCircumflex";
-
-  /** The Combining Tilde (Dead Tilde) key */
-  static const String DEAD_TILDE = "DeadTilde";
-
-  /** The Combining Macron (Long, Dead Macron) key */
-  static const String DEAD_MACRON = "DeadMacron";
-
-  /** The Combining Breve (Short, Dead Breve) key */
-  static const String DEAD_BREVE = "DeadBreve";
-
-  /** The Combining Dot Above (Derivative, Dead Above Dot) key */
-  static const String DEAD_ABOVE_DOT = "DeadAboveDot";
-
-  /**
-   * The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika,
-   * Double Derivative, Dead Diaeresis) key
-   */
-  static const String DEAD_UMLAUT = "DeadUmlaut";
-
-  /** The Combining Ring Above (Dead Above Ring) key */
-  static const String DEAD_ABOVE_RING = "DeadAboveRing";
-
-  /** The Combining Double Acute Accent (Dead Doubleacute) key */
-  static const String DEAD_DOUBLEACUTE = "DeadDoubleacute";
-
-  /** The Combining Caron (Hacek, V Above, Dead Caron) key */
-  static const String DEAD_CARON = "DeadCaron";
-
-  /** The Combining Cedilla (Dead Cedilla) key */
-  static const String DEAD_CEDILLA = "DeadCedilla";
-
-  /** The Combining Ogonek (Nasal Hook, Dead Ogonek) key */
-  static const String DEAD_OGONEK = "DeadOgonek";
-
-  /**
-   * The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota
-   * Subscript, Dead Iota) key
-   */
-  static const String DEAD_IOTA = "DeadIota";
-
-  /**
-   * The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key
-   */
-  static const String DEAD_VOICED_SOUND = "DeadVoicedSound";
-
-  /**
-   * The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced
-   * Sound) key
-   */
-  static const String DEC_SEMIVOICED_SOUND= "DeadSemivoicedSound";
-
-  /**
-   * Key value used when an implementation is unable to identify another key
-   * value, due to either hardware, platform, or software constraints
-   */
-  static const String UNIDENTIFIED = "Unidentified";
-}
-// 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.
-
-/**
- * Contains the set of standard values returned by HTMLDocument.getReadyState.
- */
-abstract class ReadyState {
-  /**
-   * Indicates the document is still loading and parsing.
-   */
-  static const String LOADING = "loading";
-
-  /**
-   * Indicates the document is finished parsing but is still loading
-   * subresources.
-   */
-  static const String INTERACTIVE = "interactive";
-
-  /**
-   * Indicates the document and all subresources have been loaded.
-   */
-  static const String COMPLETE = "complete";
-}
-// 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.
-
-// TODO(antonm): support not DOM isolates too.
-class _Timer implements Timer {
-  final canceller;
-
-  _Timer(this.canceller);
-
-  void cancel() { canceller(); }
-}
-
-get _timerFactoryClosure => (int milliSeconds, void callback(Timer timer), bool repeating) {
-  var maker;
-  var canceller;
-  if (repeating) {
-    maker = window.setInterval;
-    canceller = window.clearInterval;
-  } else {
-    maker = window.setTimeout;
-    canceller = window.clearTimeout;
-  }
-  Timer timer;
-  final int id = maker(() { callback(timer); }, milliSeconds);
-  timer = new _Timer(() { canceller(id); });
-  return timer;
-};
-// 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.
-
-/**
- * The [Collections] class implements static methods useful when
- * writing a class that implements [Collection] and the [iterator]
- * method.
- */
-class _Collections {
-  static bool contains(Iterable<Object> iterable, Object element) {
-    for (final e in iterable) {
-      if (e == element) return true;
-    }
-    return false;
-  }
-
-  static void forEach(Iterable<Object> iterable, void f(Object o)) {
-    for (final e in iterable) {
-      f(e);
-    }
-  }
-
-  static List map(Iterable<Object> source,
-                  List<Object> destination,
-                  f(o)) {
-    for (final e in source) {
-      destination.add(f(e));
-    }
-    return destination;
-  }
-
-  static bool some(Iterable<Object> iterable, bool f(Object o)) {
-    for (final e in iterable) {
-      if (f(e)) return true;
-    }
-    return false;
-  }
-
-  static bool every(Iterable<Object> iterable, bool f(Object o)) {
-    for (final e in iterable) {
-      if (!f(e)) return false;
-    }
-    return true;
-  }
-
-  static List filter(Iterable<Object> source,
-                     List<Object> destination,
-                     bool f(o)) {
-    for (final e in source) {
-      if (f(e)) destination.add(e);
-    }
-    return destination;
-  }
-
-  static bool isEmpty(Iterable<Object> iterable) {
-    return !iterable.iterator().hasNext;
-  }
-}
-// 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 _HttpRequestUtils {
-
-  // Helper for factory HttpRequest.get
-  static HttpRequest get(String url,
-                            onSuccess(HttpRequest request),
-                            bool withCredentials) {
-    final request = new HttpRequest();
-    request.open('GET', url, true);
-
-    request.withCredentials = withCredentials;
-
-    // Status 0 is for local XHR request.
-    request.on.readyStateChange.add((e) {
-      if (request.readyState == HttpRequest.DONE &&
-          (request.status == 200 || request.status == 0)) {
-        onSuccess(request);
-      }
-    });
-
-    request.send();
-
-    return request;
-  }
-}
-// 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.
-
-_serialize(var message) {
-  return new _JsSerializer().traverse(message);
-}
-
-class _JsSerializer extends _Serializer {
-
-  visitSendPortSync(SendPortSync x) {
-    if (x is _JsSendPortSync) return visitJsSendPortSync(x);
-    if (x is _LocalSendPortSync) return visitLocalSendPortSync(x);
-    if (x is _RemoteSendPortSync) return visitRemoteSendPortSync(x);
-    throw "Unknown port type $x";
-  }
-
-  visitJsSendPortSync(_JsSendPortSync x) {
-    return [ 'sendport', 'nativejs', x._id ];
-  }
-
-  visitLocalSendPortSync(_LocalSendPortSync x) {
-    return [ 'sendport', 'dart',
-             ReceivePortSync._isolateId, x._receivePort._portId ];
-  }
-
-  visitRemoteSendPortSync(_RemoteSendPortSync x) {
-    return [ 'sendport', 'dart',
-             x._receivePort._isolateId, x._receivePort._portId ];
-  }
-}
-
-_deserialize(var message) {
-  return new _JsDeserializer().deserialize(message);
-}
-
-
-class _JsDeserializer extends _Deserializer {
-
-  static const _UNSPECIFIED = const Object();
-
-  deserializeSendPort(List x) {
-    String tag = x[1];
-    switch (tag) {
-      case 'nativejs':
-        num id = x[2];
-        return new _JsSendPortSync(id);
-      case 'dart':
-        num isolateId = x[2];
-        num portId = x[3];
-        return ReceivePortSync._lookup(isolateId, portId);
-      default:
-        throw 'Illegal SendPortSync type: $tag';
-    }
-  }
-}
-
-// The receiver is JS.
-class _JsSendPortSync implements SendPortSync {
-
-  num _id;
-  _JsSendPortSync(this._id);
-
-  callSync(var message) {
-    var serialized = _serialize(message);
-    var result = _callPortSync(_id, serialized);
-    return _deserialize(result);
-  }
-
-}
-
-// TODO(vsm): Differentiate between Dart2Js and Dartium isolates.
-// The receiver is a different Dart isolate, compiled to JS.
-class _RemoteSendPortSync implements SendPortSync {
-
-  int _isolateId;
-  int _portId;
-  _RemoteSendPortSync(this._isolateId, this._portId);
-
-  callSync(var message) {
-    var serialized = _serialize(message);
-    var result = _call(_isolateId, _portId, serialized);
-    return _deserialize(result);
-  }
-
-  static _call(int isolateId, int portId, var message) {
-    var target = 'dart-port-$isolateId-$portId'; 
-    // TODO(vsm): Make this re-entrant.
-    // TODO(vsm): Set this up set once, on the first call.
-    var source = '$target-result';
-    var result = null;
-    var listener = (Event e) {
-      result = JSON.parse(_getPortSyncEventData(e));
-    };
-    window.on[source].add(listener);
-    _dispatchEvent(target, [source, message]);
-    window.on[source].remove(listener);
-    return result;
-  }
-}
-
-// The receiver is in the same Dart isolate, compiled to JS.
-class _LocalSendPortSync implements SendPortSync {
-
-  ReceivePortSync _receivePort;
-
-  _LocalSendPortSync._internal(this._receivePort);
-
-  callSync(var message) {
-    // TODO(vsm): Do a more efficient deep copy.
-    var copy = _deserialize(_serialize(message));
-    var result = _receivePort._callback(copy);
-    return _deserialize(_serialize(result));
-  }
-}
-
-// TODO(vsm): Move this to dart:isolate.  This will take some
-// refactoring as there are dependences here on the DOM.  Users
-// interact with this class (or interface if we change it) directly -
-// new ReceivePortSync.  I think most of the DOM logic could be
-// delayed until the corresponding SendPort is registered on the
-// window.
-
-// A Dart ReceivePortSync (tagged 'dart' when serialized) is
-// identifiable / resolvable by the combination of its isolateid and
-// portid.  When a corresponding SendPort is used within the same
-// isolate, the _portMap below can be used to obtain the
-// ReceivePortSync directly.  Across isolates (or from JS), an
-// EventListener can be used to communicate with the port indirectly.
-class ReceivePortSync {
-
-  static Map<int, ReceivePortSync> _portMap;
-  static int _portIdCount;
-  static int _cachedIsolateId;
-
-  num _portId;
-  Function _callback;
-  EventListener _listener;
-
-  ReceivePortSync() {
-    if (_portIdCount == null) {
-      _portIdCount = 0;
-      _portMap = new Map<int, ReceivePortSync>();
-    }
-    _portId = _portIdCount++;
-    _portMap[_portId] = this;
-  }
-
-  static int get _isolateId {
-    // TODO(vsm): Make this coherent with existing isolate code.
-    if (_cachedIsolateId == null) {
-      _cachedIsolateId = _getNewIsolateId();      
-    }
-    return _cachedIsolateId;
-  }
-
-  static String _getListenerName(isolateId, portId) =>
-      'dart-port-$isolateId-$portId'; 
-  String get _listenerName => _getListenerName(_isolateId, _portId);
-
-  void receive(callback(var message)) {
-    _callback = callback;
-    if (_listener == null) {
-      _listener = (Event e) {
-        var data = JSON.parse(_getPortSyncEventData(e));
-        var replyTo = data[0];
-        var message = _deserialize(data[1]);
-        var result = _callback(message);
-        _dispatchEvent(replyTo, _serialize(result));
-      };
-      window.on[_listenerName].add(_listener);
-    }
-  }
-
-  void close() {
-    _portMap.remove(_portId);
-    if (_listener != null) window.on[_listenerName].remove(_listener);
-  }
-
-  SendPortSync toSendPort() {
-    return new _LocalSendPortSync._internal(this);
-  }
-
-  static SendPortSync _lookup(int isolateId, int portId) {
-    if (isolateId == _isolateId) {
-      return _portMap[portId].toSendPort();
-    } else {
-      return new _RemoteSendPortSync(isolateId, portId);
-    }
-  }
-}
-
-get _isolateId => ReceivePortSync._isolateId;
-
-void _dispatchEvent(String receiver, var message) {
-  var event = new CustomEvent(receiver, false, false, JSON.stringify(message));
-  window.$dom_dispatchEvent(event);
-}
-
-String _getPortSyncEventData(CustomEvent event) => event.detail;
-// 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.
-
-typedef Object ComputeValue();
-
-class _MeasurementRequest<T> {
-  final ComputeValue computeValue;
-  final Completer<T> completer;
-  Object value;
-  bool exception = false;
-  _MeasurementRequest(this.computeValue, this.completer);
-}
-
-typedef void _MeasurementCallback();
-
-
-/**
- * This class attempts to invoke a callback as soon as the current event stack
- * unwinds, but before the browser repaints.
- */
-abstract class _MeasurementScheduler {
-  bool _nextMeasurementFrameScheduled = false;
-  _MeasurementCallback _callback;
-
-  _MeasurementScheduler(this._callback);
-
-  /**
-   * Creates the best possible measurement scheduler for the current platform.
-   */
-  factory _MeasurementScheduler.best(_MeasurementCallback callback) {
-    if (_isMutationObserverSupported()) {
-      return new _MutationObserverScheduler(callback);
-    }
-    return new _PostMessageScheduler(callback);
-  }
-
-  /**
-   * Schedules a measurement callback if one has not been scheduled already.
-   */
-  void maybeSchedule() {
-    if (this._nextMeasurementFrameScheduled) {
-      return;
-    }
-    this._nextMeasurementFrameScheduled = true;
-    this._schedule();
-  }
-
-  /**
-   * Does the actual scheduling of the callback.
-   */
-  void _schedule();
-
-  /**
-   * Handles the measurement callback and forwards it if necessary.
-   */
-  void _onCallback() {
-    // Ignore spurious messages.
-    if (!_nextMeasurementFrameScheduled) {
-      return;
-    }
-    _nextMeasurementFrameScheduled = false;
-    this._callback();
-  }
-}
-
-/**
- * Scheduler which uses window.postMessage to schedule events.
- */
-class _PostMessageScheduler extends _MeasurementScheduler {
-  const _MEASUREMENT_MESSAGE = "DART-MEASURE";
-
-  _PostMessageScheduler(_MeasurementCallback callback): super(callback) {
-      // Messages from other windows do not cause a security risk as
-      // all we care about is that _handleMessage is called
-      // after the current event loop is unwound and calling the function is
-      // a noop when zero requests are pending.
-      window.on.message.add(this._handleMessage);
-  }
-
-  void _schedule() {
-    window.postMessage(_MEASUREMENT_MESSAGE, "*");
-  }
-
-  _handleMessage(e) {
-    this._onCallback();
-  }
-}
-
-/**
- * Scheduler which uses a MutationObserver to schedule events.
- */
-class _MutationObserverScheduler extends _MeasurementScheduler {
-  MutationObserver _observer;
-  Element _dummy;
-
-  _MutationObserverScheduler(_MeasurementCallback callback): super(callback) {
-    // Mutation events get fired as soon as the current event stack is unwound
-    // so we just make a dummy event and listen for that.
-    _observer = new MutationObserver(this._handleMutation);
-    _dummy = new DivElement();
-    _observer.observe(_dummy, attributes: true);
-  }
-
-  void _schedule() {
-    // Toggle it to trigger the mutation event.
-    _dummy.hidden = !_dummy.hidden;
-  }
-
-  _handleMutation(List<MutationRecord> mutations, MutationObserver observer) {
-    this._onCallback();
-  }
-}
-
-
-List<_MeasurementRequest> _pendingRequests;
-List<TimeoutHandler> _pendingMeasurementFrameCallbacks;
-_MeasurementScheduler _measurementScheduler = null;
-
-void _maybeScheduleMeasurementFrame() {
-  if (_measurementScheduler == null) {
-    _measurementScheduler =
-      new _MeasurementScheduler.best(_completeMeasurementFutures);
-  }
-  _measurementScheduler.maybeSchedule();
-}
-
-/**
- * Registers a [callback] which is called after the next batch of measurements
- * completes. Even if no measurements completed, the callback is triggered
- * when they would have completed to avoid confusing bugs if it happened that
- * no measurements were actually requested.
- */
-void _addMeasurementFrameCallback(TimeoutHandler callback) {
-  if (_pendingMeasurementFrameCallbacks == null) {
-    _pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
-    _maybeScheduleMeasurementFrame();
-  }
-  _pendingMeasurementFrameCallbacks.add(callback);
-}
-
-/**
- * Returns a [Future] whose value will be the result of evaluating
- * [computeValue] during the next safe measurement interval.
- * The next safe measurement interval is after the current event loop has
- * unwound but before the browser has rendered the page.
- * It is important that the [computeValue] function only queries the html
- * layout and html in any way.
- */
-Future _createMeasurementFuture(ComputeValue computeValue,
-                                Completer completer) {
-  if (_pendingRequests == null) {
-    _pendingRequests = <_MeasurementRequest>[];
-    _maybeScheduleMeasurementFrame();
-  }
-  _pendingRequests.add(new _MeasurementRequest(computeValue, completer));
-  return completer.future;
-}
-
-/**
- * Complete all pending measurement futures evaluating them in a single batch
- * so that the the browser is guaranteed to avoid multiple layouts.
- */
-void _completeMeasurementFutures() {
-  // We must compute all new values before fulfilling the futures as
-  // the onComplete callbacks for the futures could modify the DOM making
-  // subsequent measurement calculations expensive to compute.
-  if (_pendingRequests != null) {
-    for (_MeasurementRequest request in _pendingRequests) {
-      try {
-        request.value = request.computeValue();
-      } catch (e) {
-        request.value = e;
-        request.exception = true;
-      }
-    }
-  }
-
-  final completedRequests = _pendingRequests;
-  final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
-  _pendingRequests = null;
-  _pendingMeasurementFrameCallbacks = null;
-  if (completedRequests != null) {
-    for (_MeasurementRequest request in completedRequests) {
-      if (request.exception) {
-        request.completer.completeException(request.value);
-      } else {
-        request.completer.complete(request.value);
-      }
-    }
-  }
-
-  if (readyMeasurementFrameCallbacks != null) {
-    for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
-      // TODO(jacobr): wrap each call to a handler in a try-catch block.
-      handler();
-    }
-  }
-}
-// 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 the dart:isolate library.
-
-/********************************************************
-  Inserted from lib/isolate/serialization.dart
- ********************************************************/
-
-class _MessageTraverserVisitedMap {
-
-  operator[](var object) => null;
-  void operator[]=(var object, var info) { }
-
-  void reset() { }
-  void cleanup() { }
-
-}
-
-/** Abstract visitor for dart objects that can be sent as isolate messages. */
-class _MessageTraverser {
-
-  _MessageTraverserVisitedMap _visited;
-  _MessageTraverser() : _visited = new _MessageTraverserVisitedMap();
-
-  /** Visitor's entry point. */
-  traverse(var x) {
-    if (isPrimitive(x)) return visitPrimitive(x);
-    _visited.reset();
-    var result;
-    try {
-      result = _dispatch(x);
-    } finally {
-      _visited.cleanup();
-    }
-    return result;
-  }
-
-  _dispatch(var x) {
-    if (isPrimitive(x)) return visitPrimitive(x);
-    if (x is List) return visitList(x);
-    if (x is Map) return visitMap(x);
-    if (x is SendPort) return visitSendPort(x);
-    if (x is SendPortSync) return visitSendPortSync(x);
-
-    // Overridable fallback.
-    return visitObject(x);
-  }
-
-  abstract visitPrimitive(x);
-  abstract visitList(List x);
-  abstract visitMap(Map x);
-  abstract visitSendPort(SendPort x);
-  abstract visitSendPortSync(SendPortSync x);
-
-  visitObject(Object x) {
-    // TODO(floitsch): make this a real exception. (which one)?
-    throw "Message serialization: Illegal value $x passed";
-  }
-
-  static bool isPrimitive(x) {
-    return (x == null) || (x is String) || (x is num) || (x is bool);
-  }
-}
-
-
-/** A visitor that recursively copies a message. */
-class _Copier extends _MessageTraverser {
-
-  visitPrimitive(x) => x;
-
-  List visitList(List list) {
-    List copy = _visited[list];
-    if (copy != null) return copy;
-
-    int len = list.length;
-
-    // TODO(floitsch): we loose the generic type of the List.
-    copy = new List(len);
-    _visited[list] = copy;
-    for (int i = 0; i < len; i++) {
-      copy[i] = _dispatch(list[i]);
-    }
-    return copy;
-  }
-
-  Map visitMap(Map map) {
-    Map copy = _visited[map];
-    if (copy != null) return copy;
-
-    // TODO(floitsch): we loose the generic type of the map.
-    copy = new Map();
-    _visited[map] = copy;
-    map.forEach((key, val) {
-      copy[_dispatch(key)] = _dispatch(val);
-    });
-    return copy;
-  }
-
-}
-
-/** Visitor that serializes a message as a JSON array. */
-class _Serializer extends _MessageTraverser {
-  int _nextFreeRefId = 0;
-
-  visitPrimitive(x) => x;
-
-  visitList(List list) {
-    int copyId = _visited[list];
-    if (copyId != null) return ['ref', copyId];
-
-    int id = _nextFreeRefId++;
-    _visited[list] = id;
-    var jsArray = _serializeList(list);
-    // TODO(floitsch): we are losing the generic type.
-    return ['list', id, jsArray];
-  }
-
-  visitMap(Map map) {
-    int copyId = _visited[map];
-    if (copyId != null) return ['ref', copyId];
-
-    int id = _nextFreeRefId++;
-    _visited[map] = id;
-    var keys = _serializeList(map.keys);
-    var values = _serializeList(map.values);
-    // TODO(floitsch): we are losing the generic type.
-    return ['map', id, keys, values];
-  }
-
-  _serializeList(List list) {
-    int len = list.length;
-    var result = new List(len);
-    for (int i = 0; i < len; i++) {
-      result[i] = _dispatch(list[i]);
-    }
-    return result;
-  }
-}
-
-/** Deserializes arrays created with [_Serializer]. */
-class _Deserializer {
-  Map<int, dynamic> _deserialized;
-
-  _Deserializer();
-
-  static bool isPrimitive(x) {
-    return (x == null) || (x is String) || (x is num) || (x is bool);
-  }
-
-  deserialize(x) {
-    if (isPrimitive(x)) return x;
-    // TODO(floitsch): this should be new HashMap<int, dynamic>()
-    _deserialized = new HashMap();
-    return _deserializeHelper(x);
-  }
-
-  _deserializeHelper(x) {
-    if (isPrimitive(x)) return x;
-    assert(x is List);
-    switch (x[0]) {
-      case 'ref': return _deserializeRef(x);
-      case 'list': return _deserializeList(x);
-      case 'map': return _deserializeMap(x);
-      case 'sendport': return deserializeSendPort(x);
-      default: return deserializeObject(x);
-    }
-  }
-
-  _deserializeRef(List x) {
-    int id = x[1];
-    var result = _deserialized[id];
-    assert(result != null);
-    return result;
-  }
-
-  List _deserializeList(List x) {
-    int id = x[1];
-    // We rely on the fact that Dart-lists are directly mapped to Js-arrays.
-    List dartList = x[2];
-    _deserialized[id] = dartList;
-    int len = dartList.length;
-    for (int i = 0; i < len; i++) {
-      dartList[i] = _deserializeHelper(dartList[i]);
-    }
-    return dartList;
-  }
-
-  Map _deserializeMap(List x) {
-    Map result = new Map();
-    int id = x[1];
-    _deserialized[id] = result;
-    List keys = x[2];
-    List values = x[3];
-    int len = keys.length;
-    assert(len == values.length);
-    for (int i = 0; i < len; i++) {
-      var key = _deserializeHelper(keys[i]);
-      var value = _deserializeHelper(values[i]);
-      result[key] = value;
-    }
-    return result;
-  }
-
-  abstract deserializeSendPort(List x);
-
-  deserializeObject(List x) {
-    // TODO(floitsch): Use real exception (which one?).
-    throw "Unexpected serialized object";
-  }
-}
-
-// 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 _CustomEventFactoryProvider {
-  static CustomEvent createCustomEvent(String type, [bool canBubble = true,
-      bool cancelable = true, Object detail = null]) {
-    final _CustomEventImpl e = _document.$dom_createEvent("CustomEvent");
-    e.$dom_initCustomEvent(type, canBubble, cancelable, detail);
-    return e;
-  }
-}
-
-class _EventFactoryProvider {
-  static Event createEvent(String type, [bool canBubble = true,
-      bool cancelable = true]) {
-    final _EventImpl e = _document.$dom_createEvent("Event");
-    e.$dom_initEvent(type, canBubble, cancelable);
-    return e;
-  }
-}
-
-class _MouseEventFactoryProvider {
-  static MouseEvent createMouseEvent(String type, Window view, int detail,
-      int screenX, int screenY, int clientX, int clientY, int button,
-      [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
-      bool altKey = false, bool shiftKey = false, bool metaKey = false,
-      EventTarget relatedTarget = null]) {
-    final e = _document.$dom_createEvent("MouseEvent");
-    e.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
-        screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
-        button, relatedTarget);
-    return e;
-  }
-}
-
-class _CSSStyleDeclarationFactoryProvider {
-  static CSSStyleDeclaration createCSSStyleDeclaration_css(String css) {
-    final style = new Element.tag('div').style;
-    style.cssText = css;
-    return style;
-  }
-
-  static CSSStyleDeclaration createCSSStyleDeclaration() {
-    return new CSSStyleDeclaration.css('');
-  }
-}
-
-class _DocumentFragmentFactoryProvider {
-  /** @domName Document.createDocumentFragment */
-  static DocumentFragment createDocumentFragment() =>
-      document.createDocumentFragment();
-
-  static DocumentFragment createDocumentFragment_html(String html) {
-    final fragment = new DocumentFragment();
-    fragment.innerHTML = html;
-    return fragment;
-  }
-
-  // TODO(nweiz): enable this when XML is ported.
-  // factory DocumentFragment.xml(String xml) {
-  //   final fragment = new DocumentFragment();
-  //   final e = new XMLElement.tag("xml");
-  //   e.innerHTML = xml;
-  //
-  //   // Copy list first since we don't want liveness during iteration.
-  //   final List nodes = new List.from(e.nodes);
-  //   fragment.nodes.addAll(nodes);
-  //   return fragment;
-  // }
-
-  static DocumentFragment createDocumentFragment_svg(String svg) {
-    final fragment = new DocumentFragment();
-    final e = new SVGSVGElement();
-    e.innerHTML = svg;
-
-    // Copy list first since we don't want liveness during iteration.
-    final List nodes = new List.from(e.nodes);
-    fragment.nodes.addAll(nodes);
-    return fragment;
-  }
-}
-
-class _SVGElementFactoryProvider {
-  static SVGElement createSVGElement_tag(String tag) {
-    final Element temp =
-      _document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
-    return temp;
-  }
-
-  static SVGElement createSVGElement_svg(String svg) {
-    Element parentTag;
-    final match = _START_TAG_REGEXP.firstMatch(svg);
-    if (match != null && match.group(1).toLowerCase() == 'svg') {
-      parentTag = new Element.tag('div');
-    } else {
-      parentTag = new SVGSVGElement();
-    }
-
-    parentTag.innerHTML = svg;
-    if (parentTag.elements.length == 1) return parentTag.elements.removeLast();
-
-    throw new ArgumentError(
-        'SVG had ${parentTag.elements.length} '
-        'top-level elements but 1 expected');
-  }
-}
-
-class _SVGSVGElementFactoryProvider {
-  static SVGSVGElement createSVGSVGElement() {
-    final el = new SVGElement.tag("svg");
-    // The SVG spec requires the version attribute to match the spec version
-    el.attributes['version'] = "1.1";
-    return el;
-  }
-}
-// 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.
-
-
-// Conversions for IDBKey.
-//
-// Per http://www.w3.org/TR/IndexedDB/#key-construct
-//
-// "A value is said to be a valid key if it is one of the following types: Array
-// JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float
-// [WEBIDL]. However Arrays are only valid keys if every item in the array is
-// defined and is a valid key (i.e. sparse arrays can not be valid keys) and if
-// the Array doesn't directly or indirectly contain itself. Any non-numeric
-// properties are ignored, and thus does not affect whether the Array is a valid
-// key. Additionally, if the value is of type float, it is only a valid key if
-// it is not NaN, and if the value is of type Date it is only a valid key if its
-// [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN."
-
-// What is required is to ensure that an Lists in the key are actually
-// JavaScript arrays, and any Dates are JavaScript Dates.
-
-// Conversions for Window.  These check if the window is the local
-// window, and if it's not, wraps or unwraps it with a secure wrapper.
-// We need to test for EventTarget here as well as it's a base type.
-// We omit an unwrapper for Window as no methods take a non-local
-// window as a parameter.
-
-Window _convertNativeToDart_Window(win) {
-  return _DOMWindowCrossFrameImpl._createSafe(win);
-}
-
-EventTarget _convertNativeToDart_EventTarget(e) {
-  // Assume it's a Window if it contains the setInterval property.  It may be
-  // from a different frame - without a patched prototype - so we cannot
-  // rely on Dart type checking.
-  if (JS('bool', r'"setInterval" in #', e))
-    return _DOMWindowCrossFrameImpl._createSafe(e);
-  else
-    return e;
-}
-
-EventTarget _convertDartToNative_EventTarget(e) {
-  if (e is _DOMWindowCrossFrameImpl) {
-    return e._window;
-  } else {
-    return e;
-  }
-}
-
-// Conversions for ImageData
-//
-// On Firefox, the returned ImageData is a plain object.
-
-class _TypedImageData implements ImageData {
-  final Uint8ClampedArray data;
-  final int height;
-  final int width;
-
-  _TypedImageData(this.data, this.height, this.width);
-}
-
-ImageData _convertNativeToDart_ImageData(nativeImageData) {
-  if (nativeImageData is ImageData) return nativeImageData;
-
-  // On Firefox the above test fails because imagedata is a plain object.
-  // So we create a _TypedImageData.
-
-  return new _TypedImageData(
-      JS('var', '#.data', nativeImageData),
-      JS('var', '#.height', nativeImageData),
-      JS('var', '#.width', nativeImageData));
-}
-
-// We can get rid of this conversion if _TypedImageData implements the fields
-// with native names.
-_convertDartToNative_ImageData(ImageData imageData) {
-  if (imageData is _ImageDataImpl) return imageData;
-  return JS('Object', '{data: #, height: #, width: #}',
-            imageData.data, imageData.height, imageData.width);
-}
-
-
-/// Converts a JavaScript object with properties into a Dart Map.
-/// Not suitable for nested objects.
-Map _convertNativeToDart_Dictionary(object) {
-  if (object == null) return null;
-  var dict = {};
-  for (final key in JS('List', 'Object.getOwnPropertyNames(#)', object)) {
-    dict[key] = JS('var', '#[#]', object, key);
-  }
-  return dict;
-}
-
-/// Converts a flat Dart map into a JavaScript object with properties.
-_convertDartToNative_Dictionary(Map dict) {
-  if (dict == null) return null;
-  var object = JS('var', '{}');
-  dict.forEach((String key, value) {
-      JS('void', '#[#] = #', object, key, value);
-    });
-  return object;
-}
-
-
-/**
- * Ensures that the input is a JavaScript Array.
- *
- * Creates a new JavaScript array if necessary, otherwise returns the original.
- */
-List _convertDartToNative_StringArray(List<String> input) {
-  // TODO(sra).  Implement this.
-  return input;
-}
-
-
-// -----------------------------------------------------------------------------
-
-/**
- * Converts a native IDBKey into a Dart object.
- *
- * May return the original input.  May mutate the original input (but will be
- * idempotent if mutation occurs).  It is assumed that this conversion happens
- * on native IDBKeys on all paths that return IDBKeys from native DOM calls.
- *
- * If necessary, JavaScript Dates are converted into Dart Dates.
- */
-_convertNativeToDart_IDBKey(nativeKey) {
-  containsDate(object) {
-    if (_isJavaScriptDate(object)) return true;
-    if (object is List) {
-      for (int i = 0; i < object.length; i++) {
-        if (containsDate(object[i])) return true;
-      }
-    }
-    return false;  // number, string.
-  }
-  if (containsDate(nativeKey)) {
-    throw const NotImplementedException('IDBKey containing Date');
-  }
-  // TODO: Cache conversion somewhere?
-  return nativeKey;
-}
-
-/**
- * Converts a Dart object into a valid IDBKey.
- *
- * May return the original input.  Does not mutate input.
- *
- * If necessary, [dartKey] may be copied to ensure all lists are converted into
- * JavaScript Arrays and Dart Dates into JavaScript Dates.
- */
-_convertDartToNative_IDBKey(dartKey) {
-  // TODO: Implement.
-  return dartKey;
-}
-
-
-
-/// May modify original.  If so, action is idempotent.
-_convertNativeToDart_IDBAny(object) {
-  return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: false);
-}
-
-/// Converts a Dart value into a JavaScript SerializedScriptValue.
-_convertDartToNative_SerializedScriptValue(value) {
-  return _convertDartToNative_PrepareForStructuredClone(value);
-}
-
-/// Since the source object may be viewed via a JavaScript event listener the
-/// original may not be modified.
-_convertNativeToDart_SerializedScriptValue(object) {
-  return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: true);
-}
-
-
-/**
- * Converts a Dart value into a JavaScript SerializedScriptValue.  Returns the
- * original input or a functional 'copy'.  Does not mutate the original.
- *
- * The main transformation is the translation of Dart Maps are converted to
- * JavaScript Objects.
- *
- * The algorithm is essentially a dry-run of the structured clone algorithm
- * described at
- * http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#structured-clone
- * https://www.khronos.org/registry/typedarray/specs/latest/#9
- *
- * Since the result of this function is expected to be passed only to JavaScript
- * operations that perform the structured clone algorithm which does not mutate
- * its output, the result may share structure with the input [value].
- */
-_convertDartToNative_PrepareForStructuredClone(value) {
-
-  // TODO(sra): Replace slots with identity hash table.
-  var values = [];
-  var copies = [];  // initially 'null', 'true' during initial DFS, then a copy.
-
-  int findSlot(value) {
-    int length = values.length;
-    for (int i = 0; i < length; i++) {
-      if (identical(values[i], value)) return i;
-    }
-    values.add(value);
-    copies.add(null);
-    return length;
-  }
-  readSlot(int i) => copies[i];
-  writeSlot(int i, x) { copies[i] = x; }
-  cleanupSlots() {}  // Will be needed if we mark objects with a property.
-
-  // Returns the input, or a clone of the input.
-  walk(e) {
-    if (e == null) return e;
-    if (e is bool) return e;
-    if (e is num) return e;
-    if (e is String) return e;
-    if (e is Date) {
-      // TODO(sra).
-      throw const NotImplementedException('structured clone of Date');
-    }
-    if (e is RegExp) {
-      // TODO(sra).
-      throw const NotImplementedException('structured clone of RegExp');
-    }
-
-    // The browser's internal structured cloning algorithm will copy certain
-    // types of object, but it will copy only its own implementations and not
-    // just any Dart implementations of the interface.
-
-    // TODO(sra): The JavaScript objects suitable for direct cloning by the
-    // structured clone algorithm could be tagged with an private interface.
-
-    if (e is _FileImpl) return e;
-    if (e is File) {
-      throw const NotImplementedException('structured clone of File');
-    }
-
-    if (e is _BlobImpl) return e;
-    if (e is Blob) {
-      throw const NotImplementedException('structured clone of Blob');
-    }
-
-    if (e is _FileListImpl) return e;
-
-    // TODO(sra): Firefox: How to convert _TypedImageData on the other end?
-    if (e is _ImageDataImpl) return e;
-    if (e is ImageData) {
-      throw const NotImplementedException('structured clone of ImageData');
-    }
-
-    if (e is _ArrayBufferImpl) return e;
-    if (e is ArrayBuffer) {
-      throw const NotImplementedException('structured clone of ArrayBuffer');
-    }
-
-    if (e is _ArrayBufferViewImpl) return e;
-    if (e is ArrayBufferView) {
-      throw const NotImplementedException('structured clone of ArrayBufferView');
-    }
-
-    if (e is Map) {
-      var slot = findSlot(e);
-      var copy = readSlot(slot);
-      if (copy != null) return copy;
-      copy = JS('var', '{}');
-      writeSlot(slot, copy);
-      e.forEach((key, value) {
-          JS('void', '#[#] = #', copy, key, walk(value));
-        });
-      return copy;
-    }
-
-    if (e is List) {
-      // Since a JavaScript Array is an instance of Dart List it is possible to
-      // avoid making a copy of the list if there is no need to copy anything
-      // reachable from the array.  We defer creating a new array until a cycle
-      // is detected or a subgraph was copied.
-      int length = e.length;
-      var slot = findSlot(e);
-      var copy = readSlot(slot);
-      if (copy != null) {
-        if (true == copy) {  // Cycle, so commit to making a copy.
-          copy = JS('List', 'new Array(#)', length);
-          writeSlot(slot, copy);
-        }
-        return copy;
-      }
-
-      int i = 0;
-
-      if (_isJavaScriptArray(e) &&
-          // We have to copy immutable lists, otherwise the structured clone
-          // algorithm will copy the .immutable$list marker property, making the
-          // list immutable when received!
-          !_isImmutableJavaScriptArray(e)) {
-        writeSlot(slot, true);  // Deferred copy.
-        for ( ; i < length; i++) {
-          var element = e[i];
-          var elementCopy = walk(element);
-          if (!identical(elementCopy, element)) {
-            copy = readSlot(slot);   // Cyclic reference may have created it.
-            if (true == copy) {
-              copy = JS('List', 'new Array(#)', length);
-              writeSlot(slot, copy);
-            }
-            for (int j = 0; j < i; j++) {
-              copy[j] = e[j];
-            }
-            copy[i] = elementCopy;
-            i++;
-            break;
-          }
-        }
-        if (copy == null) {
-          copy = e;
-          writeSlot(slot, copy);
-        }
-      } else {
-        // Not a JavaScript Array.  We are forced to make a copy.
-        copy = JS('List', 'new Array(#)', length);
-        writeSlot(slot, copy);
-      }
-
-      for ( ; i < length; i++) {
-        copy[i] = walk(e[i]);
-      }
-      return copy;
-    }
-
-    throw const NotImplementedException('structured clone of other type');
-  }
-
-  var copy = walk(value);
-  cleanupSlots();
-  return copy;
-}
-
-/**
- * Converts a native value into a Dart object.
- *
- * If [mustCopy] is [:false:], may return the original input.  May mutate the
- * original input (but will be idempotent if mutation occurs).  It is assumed
- * that this conversion happens on native serializable script values such values
- * from native DOM calls.
- *
- * [object] is the result of a structured clone operation.
- *
- * If necessary, JavaScript Dates are converted into Dart Dates.
- *
- * If [mustCopy] is [:true:], the entire object is copied and the original input
- * is not mutated.  This should be the case where Dart and JavaScript code can
- * access the value, for example, via multiple event listeners for
- * MessageEvents.  Mutating the object to make it more 'Dart-like' would corrupt
- * the value as seen from the JavaScript listeners.
- */
-_convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
-
-  // TODO(sra): Replace slots with identity hash table that works on non-dart
-  // objects.
-  var values = [];
-  var copies = [];
-
-  int findSlot(value) {
-    int length = values.length;
-    for (int i = 0; i < length; i++) {
-      if (identical(values[i], value)) return i;
-    }
-    values.add(value);
-    copies.add(null);
-    return length;
-  }
-  readSlot(int i) => copies[i];
-  writeSlot(int i, x) { copies[i] = x; }
-
-  walk(e) {
-    if (e == null) return e;
-    if (e is bool) return e;
-    if (e is num) return e;
-    if (e is String) return e;
-
-    if (_isJavaScriptDate(e)) {
-      // TODO(sra).
-      throw const NotImplementedException('structured clone of Date');
-    }
-
-    if (_isJavaScriptRegExp(e)) {
-      // TODO(sra).
-      throw const NotImplementedException('structured clone of RegExp');
-    }
-
-    if (_isJavaScriptSimpleObject(e)) {
-      // TODO(sra): If mustCopy is false, swizzle the prototype for one of a Map
-      // implementation that uses the properies as storage.
-      var slot = findSlot(e);
-      var copy = readSlot(slot);
-      if (copy != null) return copy;
-      copy = {};
-
-      writeSlot(slot, copy);
-      for (final key in JS('List', 'Object.keys(#)', e)) {
-        copy[key] = walk(JS('var', '#[#]', e, key));
-      }
-      return copy;
-    }
-
-    if (_isJavaScriptArray(e)) {
-      var slot = findSlot(e);
-      var copy = readSlot(slot);
-      if (copy != null) return copy;
-
-      int length = e.length;
-      // Since a JavaScript Array is an instance of Dart List, we can modify it
-      // in-place unless we must copy.
-      copy = mustCopy ? JS('List', 'new Array(#)', length) : e;
-      writeSlot(slot, copy);
-
-      for (int i = 0; i < length; i++) {
-        copy[i] = walk(e[i]);
-      }
-      return copy;
-    }
-
-    // Assume anything else is already a valid Dart object, either by having
-    // already been processed, or e.g. a clonable native class.
-    return e;
-  }
-
-  var copy = walk(object);
-  return copy;
-}
-
-
-bool _isJavaScriptDate(value) => JS('bool', '# instanceof Date', value);
-bool _isJavaScriptRegExp(value) => JS('bool', '# instanceof RegExp', value);
-bool _isJavaScriptArray(value) => JS('bool', '# instanceof Array', value);
-bool _isJavaScriptSimpleObject(value) =>
-    JS('bool', 'Object.getPrototypeOf(#) === Object.prototype', value);
-bool _isImmutableJavaScriptArray(value) =>
-    JS('bool', r'!!(#.immutable$list)', value);
-// 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.
-
-// TODO(vsm): Unify with Dartium version.
-class _DOMWindowCrossFrameImpl implements Window {
-  // Private window.  Note, this is a window in another frame, so it
-  // cannot be typed as "Window" as its prototype is not patched
-  // properly.  Its fields and methods can only be accessed via JavaScript.
-  var _window;
-
-  // Fields.
-  History get history =>
-    _HistoryCrossFrameImpl._createSafe(JS('History', '#.history', _window));
-  Location get location =>
-    _LocationCrossFrameImpl._createSafe(JS('Location', '#.location', _window));
-
-  // TODO(vsm): Add frames to navigate subframes.  See 2312.
-
-  bool get closed => JS('bool', '#.closed', _window);
-
-  Window get opener => _createSafe(JS('Window', '#.opener', _window));
-
-  Window get parent => _createSafe(JS('Window', '#.parent', _window));
-
-  Window get top => _createSafe(JS('Window', '#.top', _window));
-
-  // Methods.
-  void focus() => JS('void', '#.focus()', _window);
-
-  void blur() => JS('void', '#.blur()', _window);
-
-  void close() => JS('void', '#.close()', _window);
-
-  void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
-    if (messagePorts == null) {
-      JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
-    } else {
-      JS('void', '#.postMessage(#,#,#)', _window, message, targetOrigin, messagePorts);
-    }
-  }
-
-  // Implementation support.
-  _DOMWindowCrossFrameImpl(this._window);
-
-  static Window _createSafe(w) {
-    if (identical(w, window)) {
-      return w;
-    } else {
-      // TODO(vsm): Cache or implement equality.
-      return new _DOMWindowCrossFrameImpl(w);
-    }
-  }
-}
-
-class _LocationCrossFrameImpl implements Location {
-  // Private location.  Note, this is a location object in another frame, so it
-  // cannot be typed as "Location" as its prototype is not patched
-  // properly.  Its fields and methods can only be accessed via JavaScript.
-  var _location;
-
-  void set href(String val) => _setHref(_location, val);
-  static void _setHref(location, val) {
-    JS('void', '#.href = #', location, val);
-  }
-
-  // Implementation support.
-  _LocationCrossFrameImpl(this._location);
-
-  static Location _createSafe(location) {
-    if (identical(location, window.location)) {
-      return location;
-    } else {
-      // TODO(vsm): Cache or implement equality.
-      return new _LocationCrossFrameImpl(location);
-    }
-  }
-}
-
-class _HistoryCrossFrameImpl implements History {
-  // Private history.  Note, this is a history object in another frame, so it
-  // cannot be typed as "History" as its prototype is not patched
-  // properly.  Its fields and methods can only be accessed via JavaScript.
-  var _history;
-
-  void back() => JS('void', '#.back()', _history);
-
-  void forward() => JS('void', '#.forward()', _history);
-
-  void go(int distance) => JS('void', '#.go(#)', _history, distance);
-
-  // Implementation support.
-  _HistoryCrossFrameImpl(this._history);
-
-  static History _createSafe(h) {
-    if (identical(h, window.history)) {
-      return h;
-    } else {
-      // TODO(vsm): Cache or implement equality.
-      return new _HistoryCrossFrameImpl(h);
-    }
-  }
-}
-// 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 _AudioContextFactoryProvider {
-
-  static AudioContext createAudioContext() {
-    return JS('AudioContext',
-              'new (window.AudioContext || window.webkitAudioContext)()');
-  }
-}
-
-class _PointFactoryProvider {
-  static Point createPoint(num x, num y) =>
-      JS('Point', 'new WebKitPoint(#, #)', x, y);
-}
-
-class _WebSocketFactoryProvider {
-  static WebSocket createWebSocket(String url) =>
-      JS('WebSocket', 'new WebSocket(#)', url);
-}
-
-class _TextFactoryProvider {
-  static Text createText(String data) =>
-      JS('Text', 'document.createTextNode(#)', data);
-}
-// 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 _IDBKeyRangeFactoryProvider {
-
-  static IDBKeyRange createIDBKeyRange_only(/*IDBKey*/ value) =>
-      _only(_class(), _translateKey(value));
-
-  static IDBKeyRange createIDBKeyRange_lowerBound(
-      /*IDBKey*/ bound, [bool open = false]) =>
-      _lowerBound(_class(), _translateKey(bound), open);
-
-  static IDBKeyRange createIDBKeyRange_upperBound(
-      /*IDBKey*/ bound, [bool open = false]) =>
-      _upperBound(_class(), _translateKey(bound), open);
-
-  static IDBKeyRange createIDBKeyRange_bound(/*IDBKey*/ lower, /*IDBKey*/ upper,
-      [bool lowerOpen = false, bool upperOpen = false]) =>
-      _bound(_class(), _translateKey(lower), _translateKey(upper),
-             lowerOpen, upperOpen);
-
-  static var _cachedClass;
-
-  static _class() {
-    if (_cachedClass != null) return _cachedClass;
-    return _cachedClass = _uncachedClass();
-  }
-
-  static _uncachedClass() =>
-    JS('var',
-       '''window.webkitIDBKeyRange || window.mozIDBKeyRange ||
-          window.msIDBKeyRange || window.IDBKeyRange''');
-
-  static _translateKey(idbkey) => idbkey;  // TODO: fixme.
-
-  static _IDBKeyRangeImpl _only(cls, value) =>
-       JS('_IDBKeyRangeImpl', '#.only(#)', cls, value);
-
-  static _IDBKeyRangeImpl _lowerBound(cls, bound, open) =>
-       JS('_IDBKeyRangeImpl', '#.lowerBound(#, #)', cls, bound, open);
-
-  static _IDBKeyRangeImpl _upperBound(cls, bound, open) =>
-       JS('_IDBKeyRangeImpl', '#.upperBound(#, #)', cls, bound, open);
-
-  static _IDBKeyRangeImpl _bound(cls, lower, upper, lowerOpen, upperOpen) =>
-       JS('_IDBKeyRangeImpl', '#.bound(#, #, #, #)',
-          cls, lower, upper, lowerOpen, upperOpen);
-}
-// 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.
-
-
-// On Firefox 11, the object obtained from 'window.location' is very strange.
-// It can't be monkey-patched and seems immune to putting methods on
-// Object.prototype.  We are forced to wrap the object.
-
-class _LocationWrapper implements LocalLocation {
-
-  final _ptr;  // Opaque reference to real location.
-
-  _LocationWrapper(this._ptr);
-
-  // TODO(sra): Replace all the _set and _get calls with 'JS' forms.
-
-  // final List<String> ancestorOrigins;
-  List<String> get ancestorOrigins => _get(_ptr, 'ancestorOrigins');
-
-  // String hash;
-  String get hash => _get(_ptr, 'hash');
-  void set hash(String value) => _set(_ptr, 'hash', value);
-
-  // String host;
-  String get host => _get(_ptr, 'host');
-  void set host(String value) => _set(_ptr, 'host', value);
-
-  // String hostname;
-  String get hostname => _get(_ptr, 'hostname');
-  void set hostname(String value) => _set(_ptr, 'hostname', value);
-
-  // String href;
-  String get href => _get(_ptr, 'href');
-  void set href(String value) => _set(_ptr, 'href', value);
-
-  // final String origin;
-  String get origin => _get(_ptr, 'origin');
-
-  // String pathname;
-  String get pathname => _get(_ptr, 'pathname');
-  void set pathname(String value) => _set(_ptr, 'pathname', value);
-
-  // String port;
-  String get port => _get(_ptr, 'port');
-  void set port(String value) => _set(_ptr, 'port', value);
-
-  // String protocol;
-  String get protocol => _get(_ptr, 'protocol');
-  void set protocol(String value) => _set(_ptr, 'protocol', value);
-
-  // String search;
-  String get search => _get(_ptr, 'search');
-  void set search(String value) => _set(_ptr, 'search', value);
-
-
-  void assign(String url) => JS('void', '#.assign(#)', _ptr, url);
-
-  void reload() => JS('void', '#.reload()', _ptr);
-
-  void replace(String url) => JS('void', '#.replace(#)', _ptr, url);
-
-  String toString() => JS('String', '#.toString()', _ptr);
-
-
-  static _get(p, m) => JS('var', '#[#]', p, m);
-  static _set(p, m, v) => JS('void', '#[#] = #', p, m, v);
-}
-// 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.
-
-/**
- * Checks to see if the mutation observer API is supported on the current
- * platform.
- */
-bool _isMutationObserverSupported() =>
-  JS('bool', '!!(window.MutationObserver || window.WebKitMutationObserver)');
-// 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 _TypedArrayFactoryProvider {
-
-  static Float32Array createFloat32Array(int length) => _F32(length);
-  static Float32Array createFloat32Array_fromList(List<num> list) =>
-      _F32(ensureNative(list));
-  static Float32Array createFloat32Array_fromBuffer(ArrayBuffer buffer,
-                                  [int byteOffset = 0, int length]) {
-    if (length == null) return _F32_2(buffer, byteOffset);
-    return _F32_3(buffer, byteOffset, length);
-  }
-
-  static Float64Array createFloat64Array(int length) => _F64(length);
-  static Float64Array createFloat64Array_fromList(List<num> list) =>
-      _F64(ensureNative(list));
-  static Float64Array createFloat64Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _F64_2(buffer, byteOffset);
-    return _F64_3(buffer, byteOffset, length);
-  }
-
-  static Int8Array createInt8Array(int length) => _I8(length);
-  static Int8Array createInt8Array_fromList(List<num> list) =>
-      _I8(ensureNative(list));
-  static Int8Array createInt8Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _I8_2(buffer, byteOffset);
-    return _I8_3(buffer, byteOffset, length);
-  }
-
-  static Int16Array createInt16Array(int length) => _I16(length);
-  static Int16Array createInt16Array_fromList(List<num> list) =>
-      _I16(ensureNative(list));
-  static Int16Array createInt16Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _I16_2(buffer, byteOffset);
-    return _I16_3(buffer, byteOffset, length);
-  }
-
-  static Int32Array createInt32Array(int length) => _I32(length);
-  static Int32Array createInt32Array_fromList(List<num> list) =>
-      _I32(ensureNative(list));
-  static Int32Array createInt32Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _I32_2(buffer, byteOffset);
-    return _I32_3(buffer, byteOffset, length);
-  }
-
-  static Uint8Array createUint8Array(int length) => _U8(length);
-  static Uint8Array createUint8Array_fromList(List<num> list) =>
-      _U8(ensureNative(list));
-  static Uint8Array createUint8Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _U8_2(buffer, byteOffset);
-    return _U8_3(buffer, byteOffset, length);
-  }
-
-  static Uint16Array createUint16Array(int length) => _U16(length);
-  static Uint16Array createUint16Array_fromList(List<num> list) =>
-      _U16(ensureNative(list));
-  static Uint16Array createUint16Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _U16_2(buffer, byteOffset);
-    return _U16_3(buffer, byteOffset, length);
-  }
-
-  static Uint32Array createUint32Array(int length) => _U32(length);
-  static Uint32Array createUint32Array_fromList(List<num> list) =>
-      _U32(ensureNative(list));
-  static Uint32Array createUint32Array_fromBuffer(ArrayBuffer buffer,
-      [int byteOffset = 0, int length]) {
-    if (length == null) return _U32_2(buffer, byteOffset);
-    return _U32_3(buffer, byteOffset, length);
-  }
-
-  static Uint8ClampedArray createUint8ClampedArray(int length) => _U8C(length);
-  static Uint8ClampedArray createUint8ClampedArray_fromList(List<num> list) =>
-      _U8C(ensureNative(list));
-  static Uint8ClampedArray createUint8ClampedArray_fromBuffer(
-        ArrayBuffer buffer, [int byteOffset = 0, int length]) {
-    if (length == null) return _U8C_2(buffer, byteOffset);
-    return _U8C_3(buffer, byteOffset, length);
-  }
-
-  static Float32Array _F32(arg) =>
-      JS('Float32Array', 'new Float32Array(#)', arg);
-  static Float64Array _F64(arg) =>
-      JS('Float64Array', 'new Float64Array(#)', arg);
-  static Int8Array _I8(arg) =>
-      JS('Int8Array', 'new Int8Array(#)', arg);
-  static Int16Array _I16(arg) =>
-      JS('Int16Array', 'new Int16Array(#)', arg);
-  static Int32Array _I32(arg) =>
-      JS('Int32Array', 'new Int32Array(#)', arg);
-  static Uint8Array _U8(arg) =>
-      JS('Uint8Array', 'new Uint8Array(#)', arg);
-  static Uint16Array _U16(arg) =>
-      JS('Uint16Array', 'new Uint16Array(#)', arg);
-  static Uint32Array _U32(arg) =>
-      JS('Uint32Array', 'new Uint32Array(#)', arg);
-  static Uint8ClampedArray _U8C(arg) =>
-      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#)', arg);
-
-  static Float32Array _F32_2(arg1, arg2) =>
-      JS('Float32Array', 'new Float32Array(#, #)', arg1, arg2);
-  static Float64Array _F64_2(arg1, arg2) =>
-      JS('Float64Array', 'new Float64Array(#, #)', arg1, arg2);
-  static Int8Array _I8_2(arg1, arg2) =>
-      JS('Int8Array', 'new Int8Array(#, #)', arg1, arg2);
-  static Int16Array _I16_2(arg1, arg2) =>
-      JS('Int16Array', 'new Int16Array(#, #)', arg1, arg2);
-  static Int32Array _I32_2(arg1, arg2) =>
-      JS('Int32Array', 'new Int32Array(#, #)', arg1, arg2);
-  static Uint8Array _U8_2(arg1, arg2) =>
-      JS('Uint8Array', 'new Uint8Array(#, #)', arg1, arg2);
-  static Uint16Array _U16_2(arg1, arg2) =>
-      JS('Uint16Array', 'new Uint16Array(#, #)', arg1, arg2);
-  static Uint32Array _U32_2(arg1, arg2) =>
-      JS('Uint32Array', 'new Uint32Array(#, #)', arg1, arg2);
-  static Uint8ClampedArray _U8C_2(arg1, arg2) =>
-      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#, #)', arg1, arg2);
-
-  static Float32Array _F32_3(arg1, arg2, arg3) =>
-      JS('Float32Array', 'new Float32Array(#, #, #)', arg1, arg2, arg3);
-  static Float64Array _F64_3(arg1, arg2, arg3) =>
-      JS('Float64Array', 'new Float64Array(#, #, #)', arg1, arg2, arg3);
-  static Int8Array _I8_3(arg1, arg2, arg3) =>
-      JS('Int8Array', 'new Int8Array(#, #, #)', arg1, arg2, arg3);
-  static Int16Array _I16_3(arg1, arg2, arg3) =>
-      JS('Int16Array', 'new Int16Array(#, #, #)', arg1, arg2, arg3);
-  static Int32Array _I32_3(arg1, arg2, arg3) =>
-      JS('Int32Array', 'new Int32Array(#, #, #)', arg1, arg2, arg3);
-  static Uint8Array _U8_3(arg1, arg2, arg3) =>
-      JS('Uint8Array', 'new Uint8Array(#, #, #)', arg1, arg2, arg3);
-  static Uint16Array _U16_3(arg1, arg2, arg3) =>
-      JS('Uint16Array', 'new Uint16Array(#, #, #)', arg1, arg2, arg3);
-  static Uint32Array _U32_3(arg1, arg2, arg3) =>
-      JS('Uint32Array', 'new Uint32Array(#, #, #)', arg1, arg2, arg3);
-  static Uint8ClampedArray _U8C_3(arg1, arg2, arg3) =>
-      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#, #, #)', arg1, arg2, arg3);
-
-
-  // Ensures that [list] is a JavaScript Array or a typed array.  If necessary,
-  // copies the list.
-  static ensureNative(List list) => list;  // TODO: make sure.
-}
-// 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.
-
-// TODO(rnystrom): add a way to supress public classes from DartDoc output.
-// TODO(jacobr): we can remove this class now that we are using the $dom_
-// convention for deprecated methods rather than truly private methods.
-/**
- * This class is intended for testing purposes only.
- */
-class Testing {
-  static void addEventListener(EventTarget target, String type, EventListener listener, bool useCapture) {
-    target.$dom_addEventListener(type, listener, useCapture);
-  }
-  static void removeEventListener(EventTarget target, String type, EventListener listener, bool useCapture) {
-    target.$dom_removeEventListener(type, listener, useCapture);
-  }
-
-}// 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.
-
-/**
- * Utils for device detection.
- */
-class _Device {
-  /**
-   * Gets the browser's user agent. Using this function allows tests to inject
-   * the user agent.
-   * Returns the user agent.
-   */
-  static String get userAgent => window.navigator.userAgent;
-
-  /**
-   * Determines if the current device is running Opera.
-   */
-  static bool get isOpera => userAgent.contains("Opera", 0);
-
-  /**
-   * Determines if the current device is running Internet Explorer.
-   */
-  static bool get isIE => !isOpera && userAgent.contains("MSIE", 0);
-
-  /**
-   * Determines if the current device is running Firefox.
-   */
-  static bool get isFirefox => userAgent.contains("Firefox", 0);
-
-  /**
-   * Determines if the current device is running WebKit.
-   */
-  static bool get isWebKit => !isOpera && userAgent.contains("WebKit", 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.
-
-// Iterator for arrays with fixed size.
-class _FixedSizeListIterator<T> extends _VariableSizeListIterator<T> {
-  _FixedSizeListIterator(List<T> array)
-      : super(array),
-        _length = array.length;
-
-  bool get hasNext => _length > _pos;
-
-  final int _length;  // Cache array length for faster access.
-}
-
-// Iterator for arrays with variable size.
-class _VariableSizeListIterator<T> implements Iterator<T> {
-  _VariableSizeListIterator(List<T> array)
-      : _array = array,
-        _pos = 0;
-
-  bool get hasNext => _array.length > _pos;
-
-  T next() {
-    if (!hasNext) {
-      throw new StateError("No more elements");
-    }
-    return _array[_pos++];
-  }
-
-  final List<T> _array;
-  int _pos;
-}
-// 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.
-
-class _Lists {
-
-  /**
-   * Returns the index in the array [a] of the given [element], starting
-   * the search at index [startIndex] to [endIndex] (exclusive).
-   * Returns -1 if [element] is not found.
-   */
-  static int indexOf(List a,
-                     Object element,
-                     int startIndex,
-                     int endIndex) {
-    if (startIndex >= a.length) {
-      return -1;
-    }
-    if (startIndex < 0) {
-      startIndex = 0;
-    }
-    for (int i = startIndex; i < endIndex; i++) {
-      if (a[i] == element) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the last index in the array [a] of the given [element], starting
-   * the search at index [startIndex] to 0.
-   * Returns -1 if [element] is not found.
-   */
-  static int lastIndexOf(List a, Object element, int startIndex) {
-    if (startIndex < 0) {
-      return -1;
-    }
-    if (startIndex >= a.length) {
-      startIndex = a.length - 1;
-    }
-    for (int i = startIndex; i >= 0; i--) {
-      if (a[i] == element) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns a sub list copy of this list, from [start] to
-   * [:start + length:].
-   * Returns an empty list if [length] is 0.
-   * Throws an [ArgumentError] if [length] is negative.
-   * Throws a [RangeError] if [start] or [:start + length:] are out of range.
-   */
-  static List getRange(List a, int start, int length, List accumulator) {
-    if (length < 0) throw new ArgumentError('length');
-    if (start < 0) throw new RangeError.value(start);
-    int end = start + length;
-    if (end > a.length) throw new RangeError.value(end);
-    for (int i = start; i < end; i++) {
-      accumulator.add(a[i]);
-    }
-    return accumulator;
-  }
-}
diff --git a/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate b/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
deleted file mode 100644
index ac6f2d1..0000000
--- a/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-
-  void requestLayoutFrame(TimeoutHandler callback) {
-    _addMeasurementFrameCallback(callback);
-  }
-
-  // TODO(kasperl): Document these.
-  lookupPort(String name) {
-    var port = JSON.parse(localStorage['dart-port:$name']);
-    return _deserialize(port);
-  }
-
-  registerPort(String name, var port) {
-    var serialized = _serialize(port);
-    localStorage['dart-port:$name'] = JSON.stringify(serialized);
-  }
-
-  String createObjectUrl(object) => DOMURL.createObjectURL(object);
-  void revokeObjectUrl(String url) {
-    DOMURL.revokeObjectURL(url);
-  }
-
-$!MEMBERS
-}
diff --git a/lib/html/templates/html/impl/impl_EventTarget.darttemplate b/lib/html/templates/html/impl/impl_EventTarget.darttemplate
deleted file mode 100644
index 23e8f5b..0000000
--- a/lib/html/templates/html/impl/impl_EventTarget.darttemplate
+++ /dev/null
@@ -1,58 +0,0 @@
-// 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 _ptr;
-
-  _EventsImpl(this._ptr);
-
-  _EventListenerListImpl operator [](String type) {
-    return new _EventListenerListImpl(_ptr, type);
-  }
-}
-
-class _EventListenerListImpl implements EventListenerList {
-
-  // TODO(jacobr): make this _EventTargetImpl
-  final _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) {
-    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/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate b/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
deleted file mode 100644
index a97d617..0000000
--- a/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-part of html;
-
-$!COMMENT
-abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
-  factory SVGSVGElement() => _$(ID)FactoryProvider.createSVGSVGElement();
-
-$!MEMBERS
-}
diff --git a/pkg/args/example/test_runner.dart b/pkg/args/example/test_runner.dart
index f91e385..d0a6ed8 100644
--- a/pkg/args/example/test_runner.dart
+++ b/pkg/args/example/test_runner.dart
@@ -7,11 +7,11 @@
  * It shows what it looks like to build an [ArgParser] and then, when the code
  * is run, demonstrates what the generated usage text looks like.
  */
-#library('example');
+library example;
 
-#import('dart:io');
+import 'dart:io';
 
-#import('package:args/args.dart');
+import 'package:args/args.dart';
 
 main() {
   var parser = new ArgParser();
diff --git a/pkg/args/lib/args.dart b/pkg/args/lib/args.dart
index a74c981..ad0d907 100644
--- a/pkg/args/lib/args.dart
+++ b/pkg/args/lib/args.dart
@@ -188,12 +188,12 @@
  * [posix]: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02
  * [gnu]: http://www.gnu.org/prep/standards/standards.html#Command_002dLine-Interfaces
  */
-#library('args');
+library args;
 
-#import('dart:math');
+import 'dart:math';
 
 // TODO(rnystrom): Use "package:" URL here when test.dart can handle pub.
-#import('src/utils.dart');
+import 'src/utils.dart';
 
 /**
  * A class for taking a list of raw command line arguments and parsing out
diff --git a/pkg/args/lib/src/utils.dart b/pkg/args/lib/src/utils.dart
index 029ada3..c6997c8 100644
--- a/pkg/args/lib/src/utils.dart
+++ b/pkg/args/lib/src/utils.dart
@@ -4,7 +4,7 @@
 
 // TODO(rnystrom): This file was copied from pub.
 /** Generic utility functions. Stuff that should possibly be in core. */
-#library('args_utils');
+library args_utils;
 
 /** Pads [source] to [length] by adding spaces at the end. */
 String padRight(String source, int length) {
diff --git a/pkg/args/test/args_test.dart b/pkg/args/test/args_test.dart
index d3b219b..6111296 100644
--- a/pkg/args/test/args_test.dart
+++ b/pkg/args/test/args_test.dart
@@ -2,12 +2,12 @@
 // 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('args_test');
+library args_test;
 
-#import('../../unittest/unittest.dart');
+import '../../../pkg/unittest/lib/unittest.dart';
 
 // TODO(rnystrom): Use "package:" URL here when test.dart can handle pub.
-#import('../lib/args.dart');
+import '../lib/args.dart';
 
 main() {
   group('ArgParser.addFlag()', () {
diff --git a/pkg/fixnum/fixnum.dart b/pkg/fixnum/fixnum.dart
index a34ea63..837564c 100644
--- a/pkg/fixnum/fixnum.dart
+++ b/pkg/fixnum/fixnum.dart
@@ -2,8 +2,8 @@
 // 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('fixnum');
-#import('dart:math', prefix: 'Math');
-#source('intx.dart');
-#source('int32.dart');
-#source('int64.dart');
+library fixnum;
+import 'dart:math' as Math;
+part 'intx.dart';
+part 'int32.dart';
+part 'int64.dart';
diff --git a/pkg/fixnum/int32.dart b/pkg/fixnum/int32.dart
index 295a340..80f5f3c 100644
--- a/pkg/fixnum/int32.dart
+++ b/pkg/fixnum/int32.dart
@@ -2,6 +2,8 @@
 // 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 fixnum;
+
 /**
  * An immutable 32-bit signed integer, in the range [-2^31, 2^31 - 1].
  * Arithmetic operations may overflow in order to maintain this range.
diff --git a/pkg/fixnum/int64.dart b/pkg/fixnum/int64.dart
index 8509e72..47ade36 100644
--- a/pkg/fixnum/int64.dart
+++ b/pkg/fixnum/int64.dart
@@ -2,6 +2,8 @@
 // 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 fixnum;
+
 /**
  * An immutable 64-bit signed integer, in the range [-2^63, 2^63 - 1].
  * Arithmetic operations may overflow in order to maintain this range.
diff --git a/pkg/fixnum/intx.dart b/pkg/fixnum/intx.dart
index a18d849..582fe72 100644
--- a/pkg/fixnum/intx.dart
+++ b/pkg/fixnum/intx.dart
@@ -2,6 +2,8 @@
 // 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 fixnum;
+
 /**
  * A fixed-precision integer.
  */
diff --git a/pkg/fixnum/test/int_32_test.dart b/pkg/fixnum/test/int_32_test.dart
index 63a80f0..9d5cafee 100644
--- a/pkg/fixnum/test/int_32_test.dart
+++ b/pkg/fixnum/test/int_32_test.dart
@@ -2,8 +2,8 @@
 // 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("int32test");
-#import('../fixnum.dart');
+library int32test;
+import '../fixnum.dart';
 
 void main() {
   Expect.equals("0", new int32.fromInt(0).toString());
diff --git a/pkg/fixnum/test/int_64_test.dart b/pkg/fixnum/test/int_64_test.dart
index a843c89..cd79122 100644
--- a/pkg/fixnum/test/int_64_test.dart
+++ b/pkg/fixnum/test/int_64_test.dart
@@ -2,8 +2,8 @@
 // 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('int64test');
-#import('../fixnum.dart');
+library int64test;
+import '../fixnum.dart';
 
 void main() {
   testAdditive();
diff --git a/pkg/fixnum/test/int_64_vm_test.dart b/pkg/fixnum/test/int_64_vm_test.dart
index 22d026a..97e985c 100644
--- a/pkg/fixnum/test/int_64_vm_test.dart
+++ b/pkg/fixnum/test/int_64_vm_test.dart
@@ -4,11 +4,11 @@
 
 // A test to compare the results of the fixnum library with the Dart VM
 
-#library('int64vmtest');
-#import('dart:math', prefix: 'Math');
-#source('../intx.dart');
-#source('../int32.dart');
-#source('../int64.dart');
+library int64vmtest;
+import 'dart:math', prefix: 'Math';
+part '../intx.dart';
+part '../int32.dart';
+part '../int64.dart';
 
 void main() {
   int64VMTest test = new int64VMTest();
diff --git a/pkg/htmlescape/lib/htmlescape.dart b/pkg/htmlescape/lib/htmlescape.dart
index 6c5e4f8..b34c297 100644
--- a/pkg/htmlescape/lib/htmlescape.dart
+++ b/pkg/htmlescape/lib/htmlescape.dart
@@ -6,7 +6,7 @@
  * This library contains functions to escape strings for safe inclusion
  * in HTML source.
  */
-#library("htmlescape");
+library htmlescape;
 
 /**
  * Escapes HTML-special characters of [text] so that the result can be
diff --git a/pkg/http/lib/http.dart b/pkg/http/lib/http.dart
new file mode 100644
index 0000000..d13b2fb
--- /dev/null
+++ b/pkg/http/lib/http.dart
@@ -0,0 +1,176 @@
+// 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.
+
+/// A composable, [Future]-based library for making HTTP requests.
+///
+/// The easiest way to use this library is via the top-level functions. They
+/// allow you to make individual HTTP requests with minimal hassle:
+///
+///     import 'package:http/http.dart' as http;
+///
+///     var url = "http://example.com/whatsit/create";
+///     http.post(url, fields: {"name": "doodle", "color": "blue"})
+///         .then((response) {
+///       print("Response status: ${response.statusCode}");
+///       print("Response body: ${response.body}");
+///     });
+///
+///     http.read("http://example.com/foobar.txt").then(print);
+///
+/// If you're making multiple requests to the same server, you can keep open a
+/// persistent connection by using a [Client] rather than making one-off
+/// requests. If you do this, make sure to close the client when you're done:
+///
+///     var client = new http.Client();
+///     client.post(
+///         "http://example.com/whatsit/create",
+///         fields: {"name": "doodle", "color": "blue"})
+///       .chain((response) => client.get(response.bodyFields['uri']))
+///       .transform((response) => print(response.body))
+///       .onComplete((_) => client.close());
+///
+/// You can also exert more fine-grained control over your requests and
+/// responses by creating [Request] or [StreamedRequest] objects yourself and
+/// passing them to [Client.send].
+///
+/// This package is designed to be composable. This makes it easy for external
+/// libraries to work with one another to add behavior to it. Libraries wishing
+/// to add behavior should create a subclass of [BaseClient] that wraps another
+/// [BaseClient] and adds the desired behavior:
+///
+///     class UserAgentClient extends http.BaseClient {
+///       final String userAgent;
+///       final HttpClient _inner;
+///
+///       UserAgentClient(this.userAgent, this._inner);
+///
+///       Future<StreamedResponse> send(BaseRequest request) {
+///         request.headers[HttpHeaders.USER_AGENT] = userAgent;
+///         return _inner.send(request);
+///       }
+///     }
+///
+/// In turn, libraries using [Client] should take a [BaseClient] so that the
+/// decorated clients can be used transparently.
+
+library http;
+
+import 'dart:scalarlist';
+import 'dart:uri';
+
+import 'src/client.dart';
+import 'src/response.dart';
+
+export 'src/base_client.dart';
+export 'src/base_request.dart';
+export 'src/base_response.dart';
+export 'src/client.dart';
+export 'src/multipart_file.dart';
+export 'src/multipart_request.dart';
+export 'src/request.dart';
+export 'src/response.dart';
+export 'src/streamed_request.dart';
+export 'src/streamed_response.dart';
+
+/// Sends an HTTP HEAD request with the given headers to the given URL, which
+/// can be a [Uri] or a [String].
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request, use [Request] instead.
+Future<Response> head(url, {Map<String, String> headers}) =>
+  _withClient((client) => client.head(url, headers: headers));
+
+/// Sends an HTTP GET request with the given headers to the given URL, which can
+/// be a [Uri] or a [String].
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request, use [Request] instead.
+Future<Response> get(url, {Map<String, String> headers}) =>
+  _withClient((client) => client.get(url, headers: headers));
+
+/// Sends an HTTP POST request with the given headers and fields to the given
+/// URL, which an be a [Uri] or a [String]. If any fields are specified, the
+/// content-type is automatically set to `"application/x-www-form-urlencoded"`.
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request, use [Request] or
+/// [StreamedRequest] instead.
+Future<Response> post(url,
+    {Map<String, String> headers,
+     Map<String, String> fields}) =>
+  _withClient((client) => client.post(url, headers: headers, fields: fields));
+
+/// Sends an HTTP POST request with the given headers and fields to the given
+/// URL, which can be a [Uri] or a [String]. If any fields are specified, the
+/// content-type is automatically set to `"application/x-www-form-urlencoded"`.
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request, use [Request] or
+/// [StreamedRequest] instead.
+Future<Response> put(url,
+    {Map<String, String> headers,
+     Map<String, String> fields}) =>
+  _withClient((client) => client.put(url, headers: headers, fields: fields));
+
+/// Sends an HTTP DELETE request with the given headers to the given URL, which
+/// can be a [Uri] or a [String].
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request, use [Request] instead.
+Future<Response> delete(url, {Map<String, String> headers}) =>
+  _withClient((client) => client.delete(url, headers: headers));
+
+/// Sends an HTTP GET request with the given headers to the given URL, which can
+/// be a [Uri] or a [String], and returns a Future that completes to the body of
+/// the response as a [String].
+///
+/// The Future will emit an [HttpException] if the response doesn't have a
+/// success status code.
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request and response, use [Request]
+/// instead.
+Future<String> read(url, {Map<String, String> headers}) =>
+  _withClient((client) => client.read(url, headers: headers));
+
+/// Sends an HTTP GET request with the given headers to the given URL, which can
+/// be a [Uri] or a [String], and returns a Future that completes to the body of
+/// the response as a list of bytes.
+///
+/// The Future will emit an [HttpException] if the response doesn't have a
+/// success status code.
+///
+/// This automatically initializes a new [Client] and closes that client once
+/// the request is complete. If you're planning on making multiple requests to
+/// the same server, you should use a single [Client] for all of those requests.
+///
+/// For more fine-grained control over the request and response, use [Request]
+/// instead.
+Future<Uint8List> readBytes(url, {Map<String, String> headers}) =>
+  _withClient((client) => client.readBytes(url, headers: headers));
+
+Future _withClient(Future fn(Client)) {
+  var client = new Client();
+  var future = fn(client);
+  future.onComplete((_) => client.close());
+  return future;
+}
diff --git a/pkg/http/lib/src/base_client.dart b/pkg/http/lib/src/base_client.dart
new file mode 100644
index 0000000..0b9c52d
--- /dev/null
+++ b/pkg/http/lib/src/base_client.dart
@@ -0,0 +1,135 @@
+// 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 base_client;
+
+import 'dart:io';
+import 'dart:scalarlist';
+import 'dart:uri';
+
+import 'base_request.dart';
+import 'request.dart';
+import 'response.dart';
+import 'streamed_response.dart';
+import 'utils.dart';
+
+/// The abstract base class for an HTTP client. This is a mixin-style class;
+/// subclasses only need to implement [send] and maybe [close], and then they
+/// get various convenience methods for free.
+abstract class BaseClient {
+  /// Sends an HTTP HEAD request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> head(url, {Map<String, String> headers}) =>
+    _sendUnstreamed("HEAD", url, headers);
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> get(url, {Map<String, String> headers}) =>
+    _sendUnstreamed("GET", url, headers);
+
+  /// Sends an HTTP POST request with the given headers and fields to the given
+  /// URL, which can be a [Uri] or a [String]. If any fields are specified, the
+  /// content-type is automatically set to
+  /// `"application/x-www-form-urlencoded"`.
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> post(url,
+      {Map<String, String> headers,
+       Map<String, String> fields}) =>
+    _sendUnstreamed("POST", url, headers, fields);
+
+  /// Sends an HTTP PUT request with the given headers and fields to the given
+  /// URL, which can be a [Uri] or a [String]. If any fields are specified, the
+  /// content-type is automatically set to
+  /// `"application/x-www-form-urlencoded"`.
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> put(url,
+      {Map<String, String> headers,
+       Map<String, String> fields}) =>
+    _sendUnstreamed("PUT", url, headers, fields);
+
+  /// Sends an HTTP DELETE request with the given headers to the given URL,
+  /// which can be a [Uri] or a [String].
+  ///
+  /// For more fine-grained control over the request, use [send] instead.
+  Future<Response> delete(url, {Map<String, String> headers}) =>
+    _sendUnstreamed("DELETE", url, headers);
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String], and returns a Future that completes to the
+  /// body of the response as a String.
+  ///
+  /// The Future will emit an [HttpException] if the response doesn't have a
+  /// success status code.
+  ///
+  /// For more fine-grained control over the request and response, use [send] or
+  /// [get] instead.
+  Future<String> read(url, {Map<String, String> headers}) {
+    return get(url, headers: headers).transform((response) {
+      _checkResponseSuccess(url, response);
+      return response.body;
+    });
+  }
+
+  /// Sends an HTTP GET request with the given headers to the given URL, which
+  /// can be a [Uri] or a [String], and returns a Future that completes to the
+  /// body of the response as a list of bytes.
+  ///
+  /// The Future will emit an [HttpException] if the response doesn't have a
+  /// success status code.
+  ///
+  /// For more fine-grained control over the request and response, use [send] or
+  /// [get] instead.
+  Future<Uint8List> readBytes(url, {Map<String, String> headers}) {
+    return get(url, headers: headers).transform((response) {
+      _checkResponseSuccess(url, response);
+      return response.bodyBytes;
+    });
+  }
+
+  /// Sends an HTTP request and asynchronously returns the response.
+  ///
+  /// Implementers should call [BaseRequest.finalize] to get the body of the
+  /// request as an [InputStream]. They shouldn't make any assumptions about the
+  /// state of the stream; it could have data written to it asynchronously at a
+  /// later point, or it could already be closed when it's returned.
+  Future<StreamedResponse> send(BaseRequest request);
+
+  /// Sends a non-streaming [Request] and returns a non-streaming [Response].
+  Future<Response> _sendUnstreamed(
+      String method, url, Map<String, String> headers,
+      [Map<String, String> fields]) {
+    // Wrap everything in a Future block so that synchronous validation errors
+    // are passed asynchronously through the Future chain.
+    return async.chain((_) {
+      if (url is String) url = new Uri.fromString(url);
+      var request = new Request(method, url);
+
+      if (headers != null) mapAddAll(request.headers, headers);
+      if (fields != null && !fields.isEmpty) request.bodyFields = fields;
+
+      return send(request);
+    }).chain(Response.fromStream);
+  }
+
+  /// Throws an error if [response] is not successful.
+  void _checkResponseSuccess(url, Response response) {
+    if (response.statusCode < 400) return;
+    var message = "Request to $url failed with status ${response.statusCode}";
+    if (response.reasonPhrase != null) {
+      message = "$message: ${response.reasonPhrase}";
+    }
+    throw new HttpException("$message.");
+  }
+
+  /// Closes the client and cleans up any resources associated with it. It's
+  /// important to close each client when it's done being used; failing to do so
+  /// can cause the Dart process to hang.
+  void close() {}
+}
diff --git a/pkg/http/lib/src/base_request.dart b/pkg/http/lib/src/base_request.dart
new file mode 100644
index 0000000..ecf5f7a
--- /dev/null
+++ b/pkg/http/lib/src/base_request.dart
@@ -0,0 +1,117 @@
+// 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 base_request;
+
+import 'dart:io';
+import 'dart:uri';
+
+import 'client.dart';
+import 'streamed_response.dart';
+
+/// The base class for HTTP requests.
+///
+/// Subclasses of [BaseRequest] can be constructed manually and passed to
+/// [BaseClient.send], which allows the user to provide fine-grained control
+/// over the request properties. However, usually it's easier to use convenience
+/// methods like [get] or [BaseClient.get].
+abstract class BaseRequest {
+  /// The HTTP method of the request. Most commonly "GET" or "POST", less
+  /// commonly "HEAD", "PUT", or "DELETE". Non-standard method names are also
+  /// supported.
+  final String method;
+
+  /// The URL to which the request will be sent.
+  final Uri url;
+
+  /// The size of the request body, in bytes. This defaults to -1, which
+  /// indicates that the size of the request is not known in advance.
+  int get contentLength => _contentLength;
+  int _contentLength = -1;
+
+  set contentLength(int value) {
+    _checkFinalized();
+    _contentLength = value;
+  }
+
+  /// Whether a persistent connection should be maintained with the server.
+  /// Defaults to true.
+  bool get persistentConnection => _persistentConnection;
+  bool _persistentConnection = true;
+
+  set persistentConnection(bool value) {
+    _checkFinalized();
+    _persistentConnection = value;
+  }
+
+  /// Whether the client should follow redirects while resolving this request.
+  /// Defaults to true.
+  bool get followRedirects => _followRedirects;
+  bool _followRedirects = true;
+
+  set followRedirects(bool value) {
+    _checkFinalized();
+    _followRedirects = value;
+  }
+
+  /// The maximum number of redirects to follow when [followRedirects] is true.
+  /// If this number is exceeded the [BaseResponse] future will signal a
+  /// [RedirectLimitExceeded] exception. Defaults to 5.
+  int get maxRedirects => _maxRedirects;
+  int _maxRedirects = 5;
+
+  set maxRedirects(int value) {
+    _checkFinalized();
+    _maxRedirects = value;
+  }
+
+  // TODO(nweiz): automatically parse cookies from headers
+
+  // TODO(nweiz): make this a HttpHeaders object
+  /// The headers for this request.
+  final Map<String, String> headers;
+
+  /// Whether the request has been finalized.
+  bool get finalized => _finalized;
+  bool _finalized = false;
+
+  /// Creates a new HTTP request.
+  BaseRequest(this.method, this.url)
+    : headers = <String>{};
+
+  /// Finalizes the HTTP request in preparation for it being sent. This freezes
+  /// all mutable fields and returns an [InputStream] that should emit the body
+  /// of the request. The stream may be closed to indicate a request with no
+  /// body.
+  ///
+  /// The base implementation of this returns null rather than an [InputStream];
+  /// subclasses are responsible for creating the return value. They should also
+  /// freeze any additional mutable fields they add that don't make sense to
+  /// change after the request headers are sent.
+  InputStream finalize() {
+    // TODO(nweiz): freeze headers
+    if (finalized) throw new StateError("Can't finalize a finalized Request.");
+    _finalized = true;
+    return null;
+  }
+
+  /// Sends this request.
+  ///
+  /// This automatically initializes a new [Client] and closes that client once
+  /// the request is complete. If you're planning on making multiple requests to
+  /// the same server, you should use a single [Client] for all of those
+  /// requests.
+  Future<StreamedResponse> send() {
+    var client = new Client();
+    var future = client.send(this);
+    future.onComplete((_) => client.close());
+    return future;
+  }
+
+  /// Throws an error if this request has been finalized.
+  void _checkFinalized() {
+    if (!finalized) return;
+    throw new StateError("Can't modify a finalized Request.");
+  }
+}
diff --git a/pkg/http/lib/src/base_response.dart b/pkg/http/lib/src/base_response.dart
new file mode 100644
index 0000000..57f4a95
--- /dev/null
+++ b/pkg/http/lib/src/base_response.dart
@@ -0,0 +1,44 @@
+// 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 base_response;
+
+import 'dart:io';
+
+/// The base class for HTTP responses.
+///
+/// Subclasses of [BaseResponse] are usually not constructed manually; instead,
+/// they're returned by [BaseClient.send] or other HTTP client methods.
+abstract class BaseResponse {
+  /// The status code of the response.
+  final int statusCode;
+
+  /// The reason phrase associated with the status code.
+  final String reasonPhrase;
+
+  /// The size of the response body, in bytes. If the size of the request is not
+  /// known in advance, this is -1.
+  final int contentLength;
+
+  // TODO(nweiz): automatically parse cookies from headers
+
+  // TODO(nweiz): make this a HttpHeaders object.
+  /// The headers for this response.
+  final Map<String, String> headers;
+
+  /// Whether this response is a redirect.
+  final bool isRedirect;
+
+  /// Whether the server requested that a persistent connection be maintained.
+  final bool persistentConnection;
+
+  /// Creates a new HTTP response.
+  BaseResponse(
+      this.statusCode,
+      this.contentLength,
+      {this.headers: const <String>{},
+       this.isRedirect: false,
+       this.persistentConnection: true,
+       this.reasonPhrase});
+}
diff --git a/pkg/http/lib/src/client.dart b/pkg/http/lib/src/client.dart
new file mode 100644
index 0000000..bbee58d
--- /dev/null
+++ b/pkg/http/lib/src/client.dart
@@ -0,0 +1,82 @@
+// 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 client;
+
+import 'dart:io';
+
+import 'base_client.dart';
+import 'base_request.dart';
+import 'streamed_response.dart';
+import 'utils.dart';
+
+/// An HTTP client which takes care of maintaining persistent connections across
+/// multiple requests to the same server. If you only need to send a single
+/// request, it's usually easier to use [head], [get], [post],
+/// [put], or [delete] instead.
+///
+/// When creating an HTTP client class with additional functionality, it's
+/// recommended that you subclass [BaseClient] and wrap another instance of
+/// [BaseClient] rather than subclassing [Client] directly. This allows all
+/// subclasses of [BaseClient] to be mutually composable.
+class Client extends BaseClient {
+  /// The underlying `dart:io` HTTP client.
+  HttpClient _inner;
+
+  /// Creates a new HTTP client.
+  Client() : _inner = new HttpClient();
+
+  /// Sends an HTTP request and asynchronously returns the response.
+  Future<StreamedResponse> send(BaseRequest request) {
+    var stream = request.finalize();
+
+    var completer = new Completer<StreamedResponse>();
+    var connection = _inner.openUrl(request.method, request.url);
+    connection.onError = (e) {
+      async.then((_) {
+        // TODO(nweiz): remove this when issue 4974 is fixed
+        if (completer.future.isComplete) throw e;
+
+        completer.completeException(e);
+      });
+    };
+
+    connection.onRequest = (underlyingRequest) {
+      underlyingRequest.contentLength = request.contentLength;
+      underlyingRequest.persistentConnection = request.persistentConnection;
+      request.headers.forEach((name, value) {
+        underlyingRequest.headers.set(name, value);
+      });
+
+      if (stream.closed) {
+        underlyingRequest.outputStream.close();
+      } else {
+        stream.pipe(underlyingRequest.outputStream);
+      }
+    };
+
+    connection.onResponse = (response) {
+      var headers = <String>{};
+      response.headers.forEach((key, value) => headers[key] = value);
+
+      completer.complete(new StreamedResponse(
+          response.inputStream,
+          response.statusCode,
+          response.contentLength,
+          headers: headers,
+          isRedirect: response.isRedirect,
+          persistentConnection: response.persistentConnection,
+          reasonPhrase: response.reasonPhrase));
+    };
+
+    return completer.future;
+  }
+
+  /// Closes the client. This terminates all active connections. If a client
+  /// remains unclosed, the Dart process may not terminate.
+  void close() {
+    if (_inner != null) _inner.shutdown();
+    _inner = null;
+  }
+}
diff --git a/pkg/http/lib/src/mock_client.dart b/pkg/http/lib/src/mock_client.dart
new file mode 100644
index 0000000..ce2916f
--- /dev/null
+++ b/pkg/http/lib/src/mock_client.dart
@@ -0,0 +1,76 @@
+// 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 mock_client;
+
+import 'dart:io';
+
+import 'base_client.dart';
+import 'base_request.dart';
+import 'request.dart';
+import 'response.dart';
+import 'streamed_response.dart';
+import 'utils.dart';
+
+// TODO(nweiz): once Dart has some sort of Rack- or WSGI-like standard for
+// server APIs, MockClient should conform to it.
+
+/// A mock HTTP client designed for use when testing code that uses
+/// [BaseClient]. This client allows you to define a handler callback for all
+/// requests that are made through it so that you can mock a server without
+/// having to send real HTTP requests.
+class MockClient extends BaseClient {
+  /// The handler for receiving [StreamedRequest]s and sending
+  /// [StreamedResponse]s.
+  final MockClientStreamHandler _handler;
+
+  /// Creates a [MockClient] with a handler that receives [Request]s and sends
+  /// [Response]s.
+  MockClient(MockClientHandler fn)
+    : this.streaming((baseRequest, bodyStream) {
+      return consumeInputStream(bodyStream).chain((bodyBytes) {
+        var request = new Request(baseRequest.method, baseRequest.url);
+        request.persistentConnection = baseRequest.persistentConnection;
+        request.followRedirects = baseRequest.followRedirects;
+        request.maxRedirects = baseRequest.maxRedirects;
+        mapAddAll(request.headers, baseRequest.headers);
+        request.bodyBytes = bodyBytes;
+        request.finalize();
+
+        return fn(request);
+      }).transform((response) {
+        var stream = new ListInputStream();
+        stream.write(response.bodyBytes);
+        stream.markEndOfStream();
+
+        return new StreamedResponse(
+            stream,
+            response.statusCode,
+            response.contentLength,
+            headers: response.headers,
+            isRedirect: response.isRedirect,
+            persistentConnection: response.persistentConnection,
+            reasonPhrase: response.reasonPhrase);
+      });
+    });
+
+  /// Creates a [MockClient] with a handler that receives [StreamedRequest]s and
+  /// sends [StreamedResponse]s.
+  MockClient.streaming(MockClientStreamHandler this._handler);
+
+  /// Sends a request.
+  Future<StreamedResponse> send(BaseRequest request) {
+    var bodyStream = request.finalize();
+    return async.chain((_) => _handler(request, bodyStream));
+  }
+}
+
+/// A handler function that receives [StreamedRequest]s and sends
+/// [StreamedResponse]s. Note that [request] will be finalized.
+typedef Future<StreamedResponse> MockClientStreamHandler(
+    BaseRequest request, InputStream bodyStream);
+
+/// A handler function that receives [Request]s and sends [Response]s. Note that
+/// [request] will be finalized.
+typedef Future<Response> MockClientHandler(Request request);
diff --git a/pkg/http/lib/src/multipart_file.dart b/pkg/http/lib/src/multipart_file.dart
new file mode 100644
index 0000000..9894b3d
--- /dev/null
+++ b/pkg/http/lib/src/multipart_file.dart
@@ -0,0 +1,105 @@
+// 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 multipart_file;
+
+import 'dart:io';
+
+import 'utils.dart';
+
+/// A file to be uploaded as part of a [MultipartRequest]. This doesn't need to
+/// correspond to a physical file.
+class MultipartFile {
+  /// The name of the form field for the file.
+  final String field;
+
+  /// The size of the file in bytes. This must be known in advance, even if this
+  /// file is created from an [InputStream].
+  final int length;
+
+  /// The basename of the file. May be null.
+  final String filename;
+
+  /// The content-type of the file. Defaults to `application/octet-stream`.
+  final ContentType contentType;
+
+  /// The stream that will emit the file's contents.
+  final InputStream _stream;
+
+  /// Whether [finalize] has been called.
+  bool get isFinalized => _isFinalized;
+  bool _isFinalized = false;
+
+  /// Creates a new [MultipartFile] from an [InputStream]. The length of the
+  /// file in bytes must be known in advance. If it's not, read the data from
+  /// the stream and use [MultipartFile.fromBytes] instead.
+  ///
+  /// [contentType] currently defaults to `application/octet-stream`, but in the
+  /// future may be inferred from [filename].
+  MultipartFile(this.field, this._stream, this.length,
+      {this.filename, ContentType contentType})
+    : this.contentType = contentType != null ? contentType :
+          new ContentType("application", "octet-stream");
+
+  /// Creates a new [MultipartFile] from a byte array.
+  ///
+  /// [contentType] currently defaults to `application/octet-stream`, but in the
+  /// future may be inferred from [filename].
+  factory MultipartFile.fromBytes(String field, List<int> value,
+      {String filename, ContentType contentType}) {
+    var stream = new ListInputStream();
+    stream.write(value);
+    stream.markEndOfStream();
+    return new MultipartFile(field, stream, value.length,
+        filename: filename,
+        contentType: contentType);
+  }
+
+  /// Creates a new [MultipartFile] from a string.
+  ///
+  /// The encoding to use when translating [value] into bytes is taken from
+  /// [contentType] if it has a charset set. Otherwise, it defaults to UTF-8.
+  /// [contentType] currently defaults to `text/plain; charset=utf-8`, but in
+  /// the future may be inferred from [filename].
+  factory MultipartFile.fromString(String field, String value,
+      {String filename, ContentType contentType}) {
+    contentType = contentType == null ? new ContentType("text", "plain") :
+        // Make a copy of the original contentType so we can modify charset.
+        new ContentType.fromString(contentType.toString());
+    var charset = contentType.charset;
+    var encoding = encodingForCharset(contentType.charset, Encoding.UTF_8);
+    contentType.charset = encoding.name;
+
+    return new MultipartFile.fromBytes(field, encodeString(value, encoding),
+        filename: filename,
+        contentType: contentType);
+  }
+
+  // TODO(nweiz): Infer the content-type from the filename.
+  /// Creates a new [MultipartFile] from a [File].
+  ///
+  /// [filename] defaults to the name of the file on disk. [contentType]
+  /// currently defaults to `application/octet-stream`, but in the future may be
+  /// inferred from [filename].
+  static Future<MultipartFile> fromFile(String field, File file,
+      {String filename, ContentType contentType}) {
+    if (filename == null) filename = new Path(file.name).filename;
+    return file.length().transform((length) {
+      return new MultipartFile(field, file.openInputStream(), length,
+          filename: filename,
+          contentType: contentType);
+    });
+  }
+
+  // Finalizes the file in preparation for it being sent as part of a
+  // [MultipartRequest]. This returns an [InputStream] that should emit the body
+  // of the file. The stream may be closed to indicate an empty file.
+  InputStream finalize() {
+    if (isFinalized) {
+      throw new StateError("Can't finalize a finalized MultipartFile.");
+    }
+    _isFinalized = true;
+    return _stream;
+  }
+}
diff --git a/pkg/http/lib/src/multipart_request.dart b/pkg/http/lib/src/multipart_request.dart
new file mode 100644
index 0000000..b523956
--- /dev/null
+++ b/pkg/http/lib/src/multipart_request.dart
@@ -0,0 +1,166 @@
+// 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 multipart_request;
+
+import 'dart:io';
+import 'dart:math';
+import 'dart:uri';
+import 'dart:utf';
+
+import 'base_request.dart';
+import 'multipart_file.dart';
+import 'utils.dart';
+
+/// A `multipart/form-data` request. Such a request has both string [fields],
+/// which function as normal form fields, and (potentially streamed) binary
+/// [files].
+///
+/// This request automatically sets the Content-Type header to
+/// `multipart/form-data` and the Content-Transfer-Encoding header to `binary`.
+/// These values will override any values set by the user.
+///
+///     var uri = new Uri.fromString("http://pub.dartlang.org/packages/create");
+///     var request = new http.MultipartRequest("POST", url);
+///     request.fields['user'] = 'nweiz@google.com';
+///     request.files.add(new http.MultipartFile.fromFile(
+///         'package',
+///         new File('build/package.tar.gz'),
+///         contentType: new ContentType('application', 'x-tar'));
+///     request.send().then((response) {
+///       if (response.statusCode == 200) print("Uploaded!");
+///     });
+class MultipartRequest extends BaseRequest {
+  /// The total length of the multipart boundaries used when building the
+  /// request body. According to http://tools.ietf.org/html/rfc1341.html, this
+  /// can't be longer than 70.
+  static final int _BOUNDARY_LENGTH = 70;
+
+  static final Random _random = new Random();
+
+  /// The total length of the request body, in bytes. This is calculated from
+  /// [fields] and [files] and cannot be set manually.
+  int get contentLength {
+    var length = 0;
+
+    fields.forEach((name, value) {
+      length += "--".length + _BOUNDARY_LENGTH + "\r\n".length +
+          _headerForField(name, value).length +
+          encodeUtf8(value).length + "\r\n".length;
+    });
+
+    for (var file in files) {
+      length += "--".length + _BOUNDARY_LENGTH + "\r\n".length +
+          _headerForFile(file).length +
+          file.length + "\r\n".length;
+    }
+
+    return length + "--".length + _BOUNDARY_LENGTH + "--\r\n".length;
+  }
+
+  set contentLength(int value) {
+    throw new UnsupportedError("Cannot set the contentLength property of "
+        "multipart requests.");
+  }
+
+  /// The form fields to send for this request.
+  final Map<String, String> fields;
+
+  /// The files to upload for this request.
+  final List<MultipartFile> files;
+
+  /// Creates a new [MultipartRequest].
+  MultipartRequest(String method, Uri url)
+    : super(method, url),
+      fields = <String>{},
+      files = <MultipartFile>[];
+
+  /// Freezes all mutable fields and returns an [InputStream] that will emit the
+  /// request body.
+  InputStream finalize() {
+    // TODO(nweiz): freeze fields and files
+    var boundary = _boundaryString(_BOUNDARY_LENGTH);
+    headers['content-type'] = 'multipart/form-data, boundary="$boundary"';
+    headers['content-transfer-encoding'] = 'binary';
+    super.finalize();
+
+    var stream = new ListInputStream();
+
+    void writeAscii(String string) {
+      assert(isPlainAscii(string));
+      stream.write(string.charCodes);
+    }
+
+    void writeUtf8(String string) => stream.write(encodeUtf8(string));
+    void writeLine() => stream.write([13, 10]); // \r\n
+
+    fields.forEach((name, value) {
+      writeAscii('--$boundary\r\n');
+      writeAscii(_headerForField(name, value));
+      writeUtf8(value);
+      writeLine();
+    });
+
+    forEachFuture(files, (file) {
+      writeAscii('--$boundary\r\n');
+      writeAscii(_headerForFile(file));
+      return writeInputToInput(file.finalize(), stream)
+        .transform((_) => writeLine());
+    }).then((_) {
+      // TODO(nweiz): pass any errors propagated through this future on to
+      // the stream. See issue 3657.
+      writeAscii('--$boundary--\r\n');
+      stream.markEndOfStream();
+    });
+
+    return stream;
+  }
+
+  /// All character codes that are valid in multipart boundaries. From
+  /// http://tools.ietf.org/html/rfc2046#section-5.1.1.
+  static final List<int> _BOUNDARY_CHARACTERS = const <int>[
+    39, 40, 41, 43, 95, 44, 45, 46, 47, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54,
+    55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+    81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103,
+    104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+    119, 120, 121, 122
+  ];
+
+  /// Returns the header string for a field. The return value is guaranteed to
+  /// contain only ASCII characters.
+  String _headerForField(String name, String value) {
+    // http://tools.ietf.org/html/rfc2388 mandates some complex encodings for
+    // field names and file names, but in practice user agents seem to just
+    // URL-encode them so we do the same.
+    var header = 'content-disposition: form-data; name="${encodeUri(name)}"';
+    if (!isPlainAscii(value)) {
+      header = '$header\r\ncontent-type: text/plain; charset=UTF-8';
+    }
+    return '$header\r\n\r\n';
+  }
+
+  /// Returns the header string for a file. The return value is guaranteed to
+  /// contain only ASCII characters.
+  String _headerForFile(MultipartFile file) {
+    var header = 'content-type: ${file.contentType}\r\n'
+      'content-disposition: form-data; name="${encodeUri(file.field)}"';
+
+    if (file.filename != null) {
+      header = '$header; filename="${encodeUri(file.filename)}"';
+    }
+    return '$header\r\n\r\n';
+  }
+
+  /// Returns a randomly-generated multipart boundary string of the given
+  /// [length].
+  String _boundaryString(int length) {
+    var prefix = "dart-http-boundary-";
+    var list = new List<int>(length - prefix.length);
+    for (var i = 0; i < list.length; i++) {
+      list[i] = _BOUNDARY_CHARACTERS[
+          _random.nextInt(_BOUNDARY_CHARACTERS.length)];
+    }
+    return "$prefix${new String.fromCharCodes(list)}";
+  }
+}
diff --git a/pkg/http/lib/src/request.dart b/pkg/http/lib/src/request.dart
new file mode 100644
index 0000000..574070a
--- /dev/null
+++ b/pkg/http/lib/src/request.dart
@@ -0,0 +1,162 @@
+// 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 request;
+
+import 'dart:io';
+import 'dart:scalarlist';
+import 'dart:uri';
+
+import 'base_request.dart';
+import 'utils.dart';
+
+/// An HTTP request where the entire request body is known in advance.
+class Request extends BaseRequest {
+  /// The size of the request body, in bytes. This is calculated from
+  /// [bodyBytes].
+  ///
+  /// The content length cannot be set for [Request], since it's automatically
+  /// calculated from [bodyBytes].
+  int get contentLength => bodyBytes.length;
+
+  set contentLength(int value) {
+    throw new UnsupportedError("Cannot set the contentLength property of "
+        "non-streaming Request objects.");
+  }
+
+  /// The default encoding to use when converting between [bodyBytes] and
+  /// [body]. This is only used if [encoding] hasn't been manually set and if
+  /// the content-type header has no encoding information.
+  Encoding _defaultEncoding;
+
+  /// The encoding used for the request. This encoding is used when converting
+  /// between [bodyBytes] and [body].
+  ///
+  /// If the request has a `Content-Type` header and that header has a `charset`
+  /// parameter, that parameter's value is used as the encoding. Otherwise, if
+  /// [encoding] has been set manually, that encoding is used. If that hasn't
+  /// been set either, this defaults to [Encoding.UTF_8].
+  ///
+  /// If the `charset` parameter's value is not a known [Encoding], reading this
+  /// will throw a [FormatException].
+  ///
+  /// If the request has a `Content-Type` header, setting this will set the
+  /// charset parameter on that header.
+  Encoding get encoding {
+    if (_contentType == null || _contentType.charset == null) {
+      return _defaultEncoding;
+    }
+    return requiredEncodingForCharset(_contentType.charset);
+  }
+
+  set encoding(Encoding value) {
+    _checkFinalized();
+    _defaultEncoding = value;
+    var contentType = _contentType;
+    if (contentType != null) {
+      contentType.charset = value.name;
+      _contentType = contentType;
+    }
+  }
+
+  // TODO(nweiz): make this return a read-only view
+  /// The bytes comprising the body of the request. This is converted to and
+  /// from [body] using [encoding].
+  ///
+  /// This list should only be set, not be modified in place.
+  Uint8List get bodyBytes => _bodyBytes;
+  Uint8List _bodyBytes;
+
+  set bodyBytes(List<int> value) {
+    _checkFinalized();
+    _bodyBytes = toUint8List(value);
+  }
+
+  /// The body of the request as a string. This is converted to and from
+  /// [bodyBytes] using [encoding].
+  ///
+  /// When this is set, if the request does not yet have a `Content-Type`
+  /// header, one will be added with the type `text/plain`. Then the `charset`
+  /// parameter of the `Content-Type` header (whether new or pre-existing) will
+  /// be set to [encoding] if it wasn't already set.
+  String get body => decodeString(bodyBytes, encoding);
+
+  set body(String value) {
+    bodyBytes = encodeString(value, encoding);
+    var contentType = _contentType;
+    if (contentType == null) contentType = new ContentType("text", "plain");
+    if (contentType.charset == null) contentType.charset = encoding.name;
+    _contentType = contentType;
+  }
+
+  /// The form-encoded fields in the body of the request as a map from field
+  /// names to values. The form-encoded body is converted to and from
+  /// [bodyBytes] using [encoding] (in the same way as [body]).
+  ///
+  /// If the request doesn't have a `Content-Type` header of
+  /// `application/x-www-form-urlencoded`, reading this will throw a
+  /// [StateError].
+  ///
+  /// If the request has a `Content-Type` header with a type other than
+  /// `application/x-www-form-urlencoded`, setting this will throw a
+  /// [StateError]. Otherwise, the content type will be set to
+  /// `application/x-www-form-urlencoded`.
+  ///
+  /// This map should only be set, not modified in place.
+  Map<String, String> get bodyFields {
+    if (_contentType == null ||
+        _contentType.value != "application/x-www-form-urlencoded") {
+      throw new StateError('Cannot access the body fields of a Request without '
+          'content-type "application/x-www-form-urlencoded".');
+    }
+
+    return queryToMap(body);
+  }
+
+  set bodyFields(Map<String, String> fields) {
+    if (_contentType == null) {
+      _contentType = new ContentType("application", "x-www-form-urlencoded");
+    } else if (_contentType.value != "application/x-www-form-urlencoded") {
+      throw new StateError('Cannot set the body fields of a Request with '
+          'content-type "${_contentType.value}".');
+    }
+
+    this.body = mapToQuery(fields);
+  }
+
+  /// Creates a new HTTP request.
+  Request(String method, Uri url)
+    : super(method, url),
+      _defaultEncoding = Encoding.UTF_8,
+      _bodyBytes = new Uint8List(0);
+
+  /// Freeze all mutable fields and return an [InputStream] containing the
+  /// request body.
+  InputStream finalize() {
+    super.finalize();
+
+    var stream = new ListInputStream();
+    stream.write(bodyBytes);
+    stream.markEndOfStream();
+    return stream;
+  }
+
+  /// The `Content-Type` header of the request (if it exists) as a
+  /// [ContentType].
+  ContentType get _contentType {
+    var contentType = headers[HttpHeaders.CONTENT_TYPE];
+    if (contentType == null) return null;
+    return new ContentType.fromString(contentType);
+  }
+
+  set _contentType(ContentType value) {
+    headers[HttpHeaders.CONTENT_TYPE] = value.toString();
+  }
+
+  /// Throw an error if this request has been finalized.
+  void _checkFinalized() {
+    if (!finalized) return;
+    throw new StateError("Can't modify a finalized Request.");
+  }
+}
diff --git a/pkg/http/lib/src/response.dart b/pkg/http/lib/src/response.dart
new file mode 100644
index 0000000..d3546fe
--- /dev/null
+++ b/pkg/http/lib/src/response.dart
@@ -0,0 +1,87 @@
+// 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 response;
+
+import 'dart:io';
+import 'dart:scalarlist';
+
+import 'base_response.dart';
+import 'streamed_response.dart';
+import 'utils.dart';
+
+/// An HTTP response where the entire response body is known in advance.
+class Response extends BaseResponse {
+  /// The bytes comprising the body of this response.
+  final Uint8List bodyBytes;
+
+  /// The body of the response as a string. This is converted from [bodyBytes]
+  /// using the `charset` parameter of the `Content-Type` header field, if
+  /// available. If it's unavailable or if the encoding name is unknown,
+  /// [Encoding.ISO_8859_1] is used by default, as per [RFC 2616][].
+  ///
+  /// [RFC 2616]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html
+  String get body => decodeString(bodyBytes, _encodingForHeaders(headers));
+
+  /// Creates a new HTTP response with a string body.
+  Response(
+      String body,
+      int statusCode,
+      {Map<String, String> headers: const <String>{},
+       bool isRedirect: false,
+       bool persistentConnection: true,
+       String reasonPhrase})
+    : this.bytes(
+        encodeString(body, _encodingForHeaders(headers)),
+        statusCode,
+        headers: headers,
+        isRedirect: isRedirect,
+        persistentConnection: persistentConnection,
+        reasonPhrase: reasonPhrase);
+
+  /// Create a new HTTP response with a byte array body.
+  Response.bytes(
+      List<int> bodyBytes,
+      int statusCode,
+      {Map<String, String> headers: const <String>{},
+       bool isRedirect: false,
+       bool persistentConnection: true,
+       String reasonPhrase})
+    : bodyBytes = toUint8List(bodyBytes),
+      super(
+        statusCode,
+        bodyBytes.length,
+        headers: headers,
+        isRedirect: isRedirect,
+        persistentConnection: persistentConnection,
+        reasonPhrase: reasonPhrase);
+
+  /// Creates a new HTTP response by waiting for the full body to become
+  /// available from a [StreamedResponse].
+  static Future<Response> fromStream(StreamedResponse response) {
+    return consumeInputStream(response.stream).transform((body) {
+      return new Response.bytes(
+          body,
+          response.statusCode,
+          headers: response.headers,
+          isRedirect: response.isRedirect,
+          persistentConnection: response.persistentConnection,
+          reasonPhrase: response.reasonPhrase);
+    });
+  }
+}
+
+/// Returns the encoding to use for a response with the given headers. This
+/// defaults to [Encoding.ISO_8859_1] if the headers don't specify a charset or
+/// if that charset is unknown.
+Encoding _encodingForHeaders(Map<String, String> headers) =>
+  encodingForCharset(_contentTypeForHeaders(headers).charset);
+
+/// Returns the [ContentType] object for the given headers. Defaults to
+/// `application/octet-stream`.
+ContentType _contentTypeForHeaders(Map<String, String> headers) {
+  var contentType = headers[HttpHeaders.CONTENT_TYPE];
+  if (contentType != null) return new ContentType.fromString(contentType);
+  return new ContentType("application", "octet-stream");
+}
diff --git a/pkg/http/lib/src/streamed_request.dart b/pkg/http/lib/src/streamed_request.dart
new file mode 100644
index 0000000..3570541
--- /dev/null
+++ b/pkg/http/lib/src/streamed_request.dart
@@ -0,0 +1,49 @@
+// 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 streamed_request;
+
+import 'dart:io';
+import 'dart:uri';
+
+import 'base_request.dart';
+
+/// An HTTP request where the request body is sent asynchronously after the
+/// connection has been established and the headers have been sent.
+///
+/// When the request is sent via [BaseClient.send], only the headers and
+/// whatever data has already been written to [StreamedRequest.stream] will be
+/// sent immediately. More data will be sent as soon as it's written to
+/// [StreamedRequest.stream], and when the stream is closed the request will
+/// end.
+class StreamedRequest extends BaseRequest {
+  /// The stream to which to write data that will be sent as the request body.
+  /// This may be safely written to before the request is sent; the data will be
+  /// buffered.
+  ///
+  /// Closing this signals the end of the request.
+  final OutputStream stream;
+
+  /// The stream from which the [BaseClient] will read the data in [stream] once
+  /// the request has been finalized.
+  final ListInputStream _inputStream;
+
+  /// Creates a new streaming request.
+  StreamedRequest(String method, Uri url)
+    : super(method, url),
+      stream = new ListOutputStream(),
+      _inputStream = new ListInputStream() {
+    // TODO(nweiz): pipe errors from the output stream to the input stream once
+    // issue 3657 is fixed
+    stream.onData = () => _inputStream.write(stream.read());
+    stream.onClosed = _inputStream.markEndOfStream;
+  }
+
+  /// Freezes all mutable fields other than [stream] and returns an [InputStream]
+  /// that emits the data being written to [stream].
+  InputStream finalize() {
+    super.finalize();
+    return _inputStream;
+  }
+}
diff --git a/pkg/http/lib/src/streamed_response.dart b/pkg/http/lib/src/streamed_response.dart
new file mode 100644
index 0000000..8810df7
--- /dev/null
+++ b/pkg/http/lib/src/streamed_response.dart
@@ -0,0 +1,33 @@
+// 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 streamed_response;
+
+import 'dart:io';
+
+import 'base_response.dart';
+
+/// An HTTP response where the response body is received asynchronously after
+/// the headers have been received.
+class StreamedResponse extends BaseResponse {
+  /// The stream from which the response body data can be read.
+  final InputStream stream;
+
+  /// Creates a new streaming response.
+  StreamedResponse(
+      this.stream,
+      int statusCode,
+      int contentLength,
+      {Map<String, String> headers: const <String>{},
+       bool isRedirect: false,
+       bool persistentConnection: true,
+       String reasonPhrase})
+    : super(
+        statusCode,
+        contentLength,
+        headers: headers,
+        isRedirect: isRedirect,
+        persistentConnection: persistentConnection,
+        reasonPhrase: reasonPhrase);
+}
diff --git a/pkg/http/lib/src/utils.dart b/pkg/http/lib/src/utils.dart
new file mode 100644
index 0000000..02a0f7e
--- /dev/null
+++ b/pkg/http/lib/src/utils.dart
@@ -0,0 +1,185 @@
+// 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 utils;
+
+import 'dart:crypto';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:scalarlist';
+import 'dart:uri';
+import 'dart:utf';
+
+/// Converts a URL query string (or `application/x-www-form-urlencoded` body)
+/// into a [Map] from parameter names to values.
+///
+///     queryToMap("foo=bar&baz=bang&qux");
+///     //=> {"foo": "bar", "baz": "bang", "qux": ""}
+Map<String, String> queryToMap(String queryList) {
+  var map = <String>{};
+  for (var pair in queryList.split("&")) {
+    var split = split1(pair, "=");
+    if (split.isEmpty) continue;
+    var key = urlDecode(split[0]);
+    var value = urlDecode(split.length > 1 ? split[1] : "");
+    map[key] = value;
+  }
+  return map;
+}
+
+/// Converts a [Map] from parameter names to values to a URL query string.
+///
+///     mapToQuery({"foo": "bar", "baz": "bang"});
+///     //=> "foo=bar&baz=bang"
+String mapToQuery(Map<String, String> map) {
+  var pairs = <List<String>>[];
+  map.forEach((key, value) =>
+      pairs.add([encodeUriComponent(key), encodeUriComponent(value)]));
+  return Strings.join(pairs.map((pair) => "${pair[0]}=${pair[1]}"), "&");
+}
+
+/// Adds all key/value pairs from [source] to [destination], overwriting any
+/// pre-existing values.
+///
+///     var a = {"foo": "bar", "baz": "bang"};
+///     mapAddAll(a, {"baz": "zap", "qux": "quux"});
+///     a; //=> {"foo": "bar", "baz": "zap", "qux": "quux"}
+void mapAddAll(Map destination, Map source) =>
+  source.forEach((key, value) => destination[key] = value);
+
+/// Decodes a URL-encoded string. Unlike [decodeUriComponent], this includes
+/// replacing `+` with ` `.
+String urlDecode(String encoded) =>
+  decodeUriComponent(encoded.replaceAll("+", " "));
+
+/// Like [String.split], but only splits on the first occurrence of the pattern.
+/// This will always return an array of two elements or fewer.
+///
+///     split1("foo,bar,baz", ","); //=> ["foo", "bar,baz"]
+///     split1("foo", ","); //=> ["foo"]
+///     split1("", ","); //=> []
+List<String> split1(String toSplit, String pattern) {
+  if (toSplit.isEmpty) return <String>[];
+
+  var index = toSplit.indexOf(pattern);
+  if (index == -1) return [toSplit];
+  return [
+    toSplit.substring(0, index),
+    toSplit.substring(index + pattern.length)
+  ];
+}
+
+/// Returns the [Encoding] that corresponds to [charset]. Returns [fallback] if
+/// [charset] is null or if no [Encoding] was found that corresponds to
+/// [charset].
+Encoding encodingForCharset(
+    String charset, [Encoding fallback = Encoding.ISO_8859_1]) {
+  if (charset == null) return fallback;
+  var encoding = _encodingForCharset(charset);
+  return encoding == null ? fallback : encoding;
+}
+
+/// Returns the [Encoding] that corresponds to [charset]. Throws a
+/// [FormatException] if no [Encoding] was found that corresponds to [charset].
+/// [charset] may not be null.
+Encoding requiredEncodingForCharset(String charset) {
+  var encoding = _encodingForCharset(charset);
+  if (encoding != null) return encoding;
+  throw new FormatException('Unsupported encoding "$charset".');
+}
+
+/// Returns the [Encoding] that corresponds to [charset]. Returns null if no
+/// [Encoding] was found that corresponds to [charset]. [charset] may not be
+/// null.
+Encoding _encodingForCharset(String charset) {
+  charset = charset.toLowerCase();
+  if (charset == 'ascii' || charset == 'us-ascii') return Encoding.ASCII;
+  if (charset == 'utf-8') return Encoding.UTF_8;
+  if (charset == 'iso-8859-1') return Encoding.ISO_8859_1;
+  return null;
+}
+
+/// Converts [bytes] into a [String] according to [encoding].
+String decodeString(List<int> bytes, Encoding encoding) {
+  // TODO(nweiz): implement this once issue 6284 is fixed.
+  return new String.fromCharCodes(bytes);
+}
+
+/// Converts [string] into a byte array according to [encoding].
+List<int> encodeString(String string, Encoding encoding) {
+  // TODO(nweiz): implement this once issue 6284 is fixed.
+  return string.charCodes;
+}
+
+/// A regular expression that matches strings that are composed entirely of
+/// ASCII-compatible characters.
+final RegExp _ASCII_ONLY = const RegExp(r"^[\x00-\x7F]+$");
+
+/// Returns whether [string] is composed entirely of ASCII-compatible
+/// characters.
+bool isPlainAscii(String string) => _ASCII_ONLY.hasMatch(string);
+
+/// Converts [input] into a [Uint8List]. If [input] is a [ByteArray] or
+/// [ByteArrayViewable], this just returns a view on [input].
+Uint8List toUint8List(List<int> input) {
+  if (input is Uint8List) return input;
+  if (input is ByteArrayViewable) input = input.asByteArray();
+  if (input is ByteArray) return new Uint8List.view(input);
+  var output = new Uint8List(input.length);
+  output.setRange(0, input.length, input);
+  return output;
+}
+
+/// Buffers all input from an InputStream and returns it as a future.
+Future<List<int>> consumeInputStream(InputStream stream) {
+  var completer = new Completer<List<int>>();
+  /// TODO(nweiz): use BufferList when issue 6409 is fixed
+  var buffer = <int>[];
+  stream.onClosed = () => completer.complete(buffer);
+  stream.onData = () => buffer.addAll(stream.read());
+  stream.onError = completer.completeException;
+  return completer.future;
+}
+
+/// Takes all input from [source] and writes it to [sink], then closes [sink].
+void pipeInputToInput(InputStream source, ListInputStream sink) {
+  source.onClosed = () => sink.markEndOfStream();
+  source.onData = () => sink.write(source.read());
+  // TODO(nweiz): propagate source errors to the sink. See issue 3657.
+}
+
+/// Takes all input from [source] and writes it to [sink], but does not close
+/// [sink] when [source] is closed. Returns a [Future] that completes when
+/// [source] is closed.
+Future writeInputToInput(InputStream source, ListInputStream sink) {
+  var completer = new Completer();
+  source.onClosed = () => completer.complete(null);
+  source.onData = () => sink.write(source.read());
+  // TODO(nweiz): propagate source errors to the sink. See issue 3657.
+  return completer.future;
+}
+
+/// Returns a [Future] that asynchronously completes to `null`.
+Future get async {
+  var completer = new Completer();
+  new Timer(0, (_) => completer.complete(null));
+  return completer.future;
+}
+
+// TOOD(nweiz): Get rid of this once https://codereview.chromium.org/11293132/
+// is in.
+/// Runs [fn] for each element in [input] in order, moving to the next element
+/// only when the [Future] returned by [fn] completes. Returns a [Future] that
+/// completes when all elements have been processed.
+///
+/// The return values of all [Future]s are discarded. Any errors will cause the
+/// iteration to stop and will be piped through the return value.
+Future forEachFuture(Iterable input, Future fn(element)) {
+  var iterator = input.iterator();
+  Future nextElement(_) {
+    if (!iterator.hasNext) return new Future.immediate(null);
+    return fn(iterator.next()).chain(nextElement);
+  }
+  return nextElement(null);
+}
diff --git a/pkg/http/lib/testing.dart b/pkg/http/lib/testing.dart
new file mode 100644
index 0000000..2d9ccaf
--- /dev/null
+++ b/pkg/http/lib/testing.dart
@@ -0,0 +1,27 @@
+// 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 testing;
+
+/// This library contains testing classes for the HTTP library.
+///
+/// The [MockClient] class is a drop-in replacement for `http.Client` that
+/// allows test code to set up a local request handler in order to fake a server
+/// that responds to HTTP requests:
+///
+///     import 'dart:json';
+///     import 'package:http/testing.dart';
+///
+///     var client = new MockClient((request) {
+///       if (request.url.path != "/data.json") {
+///         return new Response("", 404);
+///       }
+///       return new Response(JSON.stringify({
+///         'numbers': [1, 4, 15, 19, 214]
+///       }, 200, headers: {
+///         'content-type': 'application/json'
+///       });
+///     };
+
+export 'src/mock_client.dart';
diff --git a/pkg/http/pubspec.yaml b/pkg/http/pubspec.yaml
new file mode 100644
index 0000000..9978dd4
--- /dev/null
+++ b/pkg/http/pubspec.yaml
@@ -0,0 +1,5 @@
+name: http
+description: A composable, Future-based API for making HTTP requests.
+dependencies:
+  unittest:
+    sdk: unittest
diff --git a/pkg/http/test/client_test.dart b/pkg/http/test/client_test.dart
new file mode 100644
index 0000000..e7c3501
--- /dev/null
+++ b/pkg/http/test/client_test.dart
@@ -0,0 +1,43 @@
+// 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 client_test;
+
+import 'dart:io';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import '../lib/src/utils.dart';
+import 'utils.dart';
+
+void main() {
+  setUp(startServer);
+  tearDown(stopServer);
+
+  test('#send a StreamedRequest', () {
+    var client = new http.Client();
+    var request = new http.StreamedRequest("POST", serverUrl);
+    request.headers[HttpHeaders.CONTENT_TYPE] =
+      'application/json; charset=utf-8';
+
+    var future = client.send(request).chain((response) {
+      expect(response.statusCode, equals(200));
+      return consumeInputStream(response.stream);
+    }).transform((bytes) => new String.fromCharCodes(bytes));
+    future.onComplete((_) => client.close());
+
+    expect(future, completion(parse(equals({
+      'method': 'POST',
+      'path': '/',
+      'headers': {
+        'content-type': ['application/json; charset=utf-8'],
+        'transfer-encoding': ['chunked']
+      },
+      'body': '{"hello": "world"}'
+    }))));
+
+    request.stream.writeString('{"hello": "world"}');
+    request.stream.close();
+  });
+}
diff --git a/pkg/http/test/http_test.dart b/pkg/http/test/http_test.dart
new file mode 100644
index 0000000..9085171
--- /dev/null
+++ b/pkg/http/test/http_test.dart
@@ -0,0 +1,185 @@
+// 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 http_test;
+
+import 'dart:io';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import 'utils.dart';
+
+main() {
+  group('http.', () {
+    setUp(startServer);
+    tearDown(stopServer);
+
+    test('head', () {
+      expect(http.head(serverUrl).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, equals(''));
+      }), completes);
+    });
+
+    test('get', () {
+      expect(http.get(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'GET',
+          'path': '/',
+          'headers': {
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          },
+        })));
+      }), completes);
+    });
+
+    test('post', () {
+      expect(http.post(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }, fields: {
+        'some-field': 'value',
+        'other-field': 'other value'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'POST',
+          'path': '/',
+          'headers': {
+            'content-type': [
+              'application/x-www-form-urlencoded; charset=UTF-8'
+            ],
+            'content-length': ['42'],
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          },
+          'body': 'some-field=value&other-field=other%20value'
+        })));
+      }), completes);
+    });
+
+    test('post without fields', () {
+      expect(http.post(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value',
+        'Content-Type': 'text/plain'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'POST',
+          'path': '/',
+          'headers': {
+            'content-type': ['text/plain'],
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          }
+        })));
+      }), completes);
+    });
+
+    test('put', () {
+      expect(http.put(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }, fields: {
+        'some-field': 'value',
+        'other-field': 'other value'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'PUT',
+          'path': '/',
+          'headers': {
+            'content-type': [
+              'application/x-www-form-urlencoded; charset=UTF-8'
+            ],
+            'content-length': ['42'],
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          },
+          'body': 'some-field=value&other-field=other%20value'
+        })));
+      }), completes);
+    });
+
+    test('put without fields', () {
+      expect(http.put(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value',
+        'Content-Type': 'text/plain'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'PUT',
+          'path': '/',
+          'headers': {
+            'content-type': ['text/plain'],
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          }
+        })));
+      }), completes);
+    });
+
+    test('delete', () {
+      expect(http.delete(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }).transform((response) {
+        expect(response.statusCode, equals(200));
+        expect(response.body, parse(equals({
+          'method': 'DELETE',
+          'path': '/',
+          'headers': {
+            'x-random-header': ['Value'],
+            'x-other-header': ['Other Value']
+          }
+        })));
+      }), completes);
+    });
+
+    test('read', () {
+      expect(http.read(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }), completion(parse(equals({
+        'method': 'GET',
+        'path': '/',
+        'headers': {
+          'x-random-header': ['Value'],
+          'x-other-header': ['Other Value']
+        },
+      }))));
+    });
+
+    test('read throws an error for a 4** status code', () {
+      expect(http.read(serverUrl.resolve('/error')), throwsHttpException);
+    });
+
+    test('readBytes', () {
+      var future = http.readBytes(serverUrl, headers: {
+        'X-Random-Header': 'Value',
+        'X-Other-Header': 'Other Value'
+      }).transform((bytes) => new String.fromCharCodes(bytes));
+
+      expect(future, completion(parse(equals({
+        'method': 'GET',
+        'path': '/',
+        'headers': {
+          'x-random-header': ['Value'],
+          'x-other-header': ['Other Value']
+        },
+      }))));
+    });
+
+    test('readBytes throws an error for a 4** status code', () {
+      expect(http.readBytes(serverUrl.resolve('/error')), throwsHttpException);
+    });
+  });
+}
diff --git a/pkg/http/test/mock_client_test.dart b/pkg/http/test/mock_client_test.dart
new file mode 100644
index 0000000..2425467
--- /dev/null
+++ b/pkg/http/test/mock_client_test.dart
@@ -0,0 +1,57 @@
+// 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 mock_client_test;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+// TODO(nweiz): make these "package:" imports.
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import '../lib/testing.dart';
+import '../lib/src/utils.dart';
+import 'utils.dart';
+
+void main() {
+  test('handles a request', () {
+    var client = new MockClient((request) {
+      return new Future.immediate(new http.Response(
+          JSON.stringify(request.bodyFields), 200,
+          headers: {'content-type': 'application/json'}));
+    });
+
+    expect(client.post("http://example.com/foo", fields: {
+      'field1': 'value1',
+      'field2': 'value2'
+    }).transform((response) => response.body), completion(parse(equals({
+      'field1': 'value1',
+      'field2': 'value2'
+    }))));
+  });
+
+  test('handles a streamed request', () {
+    var client = new MockClient.streaming((request, bodyStream) {
+      return consumeInputStream(bodyStream).transform((body) {
+        var stream = new ListInputStream();
+        async.then((_) {
+          var bodyString = new String.fromCharCodes(body);
+          stream.write('Request body was "$bodyString"'.charCodes);
+          stream.markEndOfStream();
+        });
+
+        return new http.StreamedResponse(stream, 200, -1);
+      });
+    });
+
+    var uri = new Uri.fromString("http://example.com/foo");
+    var request = new http.Request("POST", uri);
+    request.body = "hello, world";
+    var future = client.send(request)
+        .chain(http.Response.fromStream)
+        .transform((response) => response.body);
+    expect(future, completion(equals('Request body was "hello, world"')));
+  });
+}
diff --git a/pkg/http/test/multipart_test.dart b/pkg/http/test/multipart_test.dart
new file mode 100644
index 0000000..136dfa0
--- /dev/null
+++ b/pkg/http/test/multipart_test.dart
@@ -0,0 +1,206 @@
+// 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 multipart_test;
+
+import 'dart:io';
+import 'dart:utf';
+
+// TODO(nweiz): get rid of this import before packaging this
+import '../../../tests/utils/test_utils.dart';
+// TODO(nweiz): make these package: imports
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import '../lib/src/utils.dart';
+
+import 'utils.dart';
+
+/// A matcher that validates the body of a multipart request after finalization.
+/// The string "{{boundary}}" in [pattern] will be replaced by the boundary
+/// string for the request, and LF newlines will be replaced with CRLF.
+/// Indentation will be normalized.
+Matcher bodyMatches(String pattern) => new _BodyMatches(pattern);
+
+class _BodyMatches extends BaseMatcher {
+  final String _pattern;
+
+  _BodyMatches(this._pattern);
+
+  bool matches(item, MatchState matchState) {
+    if (item is! http.MultipartRequest) return false;
+
+    var future = consumeInputStream(item.finalize()).transform((bodyBytes) {
+      var body = decodeUtf8(bodyBytes);
+      var contentType = new ContentType.fromString(
+          item.headers['content-type']);
+      var boundary = contentType.parameters['boundary'];
+      var expected = cleanUpLiteral(_pattern)
+          .replaceAll("\n", "\r\n")
+          .replaceAll("{{boundary}}", boundary);
+
+      expect(body, equals(expected));
+      expect(item.contentLength, equals(bodyBytes.length));
+    });
+
+    return completes.matches(future, matchState);
+  }
+
+  Description describe(Description description) {
+    return description.add('has a body that matches "$_pattern"');
+  }
+}
+
+void main() {
+  test('empty', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    expect(request, bodyMatches('''
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with fields and files', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    request.fields['field1'] = 'value1';
+    request.fields['field2'] = 'value2';
+    request.files.add(new http.MultipartFile.fromString("file1", "contents1",
+        filename: "filename1.txt"));
+    request.files.add(new http.MultipartFile.fromString("file2", "contents2"));
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-disposition: form-data; name="field1"
+
+        value1
+        --{{boundary}}
+        content-disposition: form-data; name="field2"
+
+        value2
+        --{{boundary}}
+        content-type: text/plain; charset=UTF-8
+        content-disposition: form-data; name="file1"; filename="filename1.txt"
+
+        contents1
+        --{{boundary}}
+        content-type: text/plain; charset=UTF-8
+        content-disposition: form-data; name="file2"
+
+        contents2
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with a unicode field name', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    request.fields['fïēld'] = 'value';
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-disposition: form-data; name="f%C3%AF%C4%93ld"
+
+        value
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with a unicode field value', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    request.fields['field'] = 'vⱥlūe';
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-disposition: form-data; name="field"
+        content-type: text/plain; charset=UTF-8
+
+        vⱥlūe
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with a unicode filename', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    request.files.add(new http.MultipartFile.fromString('file', 'contents',
+        filename: 'fïlēname.txt'));
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-type: text/plain; charset=UTF-8
+        content-disposition: form-data; name="file"; filename="f%C3%AFl%C4%93name.txt"
+
+        contents
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with a string file with a content-type but no charset', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    var file = new http.MultipartFile.fromString('file', '{"hello": "world"}',
+        contentType: new ContentType('application', 'json'));
+    request.files.add(file);
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-type: application/json; charset=UTF-8
+        content-disposition: form-data; name="file"
+
+        {"hello": "world"}
+        --{{boundary}}--
+        '''));
+  });
+
+  // TODO(nweiz): test creating a multipart file with a charset other than UTF-8
+  // once issue 6284 is fixed.
+
+  // TODO(nweiz): test creating a string with a unicode body once issue 6284 is
+  // fixed.
+
+  test('with a stream file', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    var stream = new ListInputStream();
+    request.files.add(new http.MultipartFile('file', stream, 5));
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-type: application/octet-stream
+        content-disposition: form-data; name="file"
+
+        hello
+        --{{boundary}}--
+        '''));
+
+    stream.write([104, 101, 108, 108, 111]);
+    stream.markEndOfStream();
+  });
+
+  test('with an empty stream file', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    var stream = new ListInputStream();
+    stream.markEndOfStream();
+    request.files.add(new http.MultipartFile('file', stream, 0));
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-type: application/octet-stream
+        content-disposition: form-data; name="file"
+
+        
+        --{{boundary}}--
+        '''));
+  });
+
+  test('with a byte file', () {
+    var request = new http.MultipartRequest('POST', dummyUrl);
+    var file = new http.MultipartFile.fromBytes(
+        'file', [104, 101, 108, 108, 111]);
+    request.files.add(file);
+
+    expect(request, bodyMatches('''
+        --{{boundary}}
+        content-type: application/octet-stream
+        content-disposition: form-data; name="file"
+
+        hello
+        --{{boundary}}--
+        '''));
+  });
+}
diff --git a/pkg/http/test/request_test.dart b/pkg/http/test/request_test.dart
new file mode 100644
index 0000000..5c2d98c
--- /dev/null
+++ b/pkg/http/test/request_test.dart
@@ -0,0 +1,352 @@
+// 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 request_test;
+
+import 'dart:io';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import '../lib/src/utils.dart';
+import 'utils.dart';
+
+void main() {
+  test('.send', () {
+    print("This test is known to be flaky, please ignore "
+          "(debug prints below added by sgjesse@)");
+    print(".send test starting server...");
+    startServer();
+    print(".send test server running");
+
+    var request = new http.Request('POST', serverUrl);
+    request.body = "hello";
+    var future = request.send().chain((response) {
+      print(".send test response received");
+      expect(response.statusCode, equals(200));
+      return consumeInputStream(response.stream);
+    }).transform((bytes) => new String.fromCharCodes(bytes));
+    future.onComplete((_) {
+      print(".send test stopping server...");
+      stopServer();
+      print(".send test server stopped");
+    });
+
+    expect(future, completion(parse(equals({
+      'method': 'POST',
+      'path': '/',
+      'headers': {
+        'content-type': ['text/plain; charset=UTF-8'],
+        'content-length': ['5']
+      },
+      'body': 'hello'
+    }))));
+    print(".send test started");
+  });
+
+  group('#contentLength', () {
+    test('is computed from bodyBytes', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyBytes = [1, 2, 3, 4, 5];
+      expect(request.contentLength, equals(5));
+      request.bodyBytes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+      expect(request.contentLength, equals(10));
+    });
+
+    test('is computed from body', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.body = "hello";
+      expect(request.contentLength, equals(5));
+      request.body = "hello, world";
+      expect(request.contentLength, equals(12));
+    });
+
+    test('is not directly mutable', () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(() => request.contentLength = 50, throwsUnsupportedError);
+    });
+  });
+
+  group('#encoding', () {
+    test('defaults to utf-8', () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(request.encoding.name, equals(Encoding.UTF_8.name));
+    });
+
+    test('can be set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.encoding = Encoding.ISO_8859_1;
+      expect(request.encoding.name, equals(Encoding.ISO_8859_1.name));
+    });
+
+    test('is based on the content-type charset if it exists', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'text/plain; charset=iso-8859-1';
+      expect(request.encoding.name, equals(Encoding.ISO_8859_1.name));
+    });
+
+    test('remains the default if the content-type charset is set and unset',
+        () {
+      var request = new http.Request('POST', dummyUrl);
+      request.encoding = Encoding.ISO_8859_1;
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'text/plain; charset=utf-8';
+      expect(request.encoding.name, equals(Encoding.UTF_8.name));
+
+      request.headers.remove(HttpHeaders.CONTENT_TYPE);
+      expect(request.encoding.name, equals(Encoding.ISO_8859_1.name));
+    });
+
+    test('throws an error if the content-type charset is unknown', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'text/plain; charset=not-a-real-charset';
+      expect(() => request.encoding, throwsFormatException);
+    });
+  });
+
+  group('#bodyBytes', () {
+    test('defaults to empty', () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(request.bodyBytes, isEmpty);
+    });
+
+    test('can be set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyBytes = [104, 101, 108, 108, 111];
+      expect(request.bodyBytes, equals([104, 101, 108, 108, 111]));
+    });
+
+    test('changes when body changes', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.body = "hello";
+      expect(request.bodyBytes, equals([104, 101, 108, 108, 111]));
+    });
+  });
+
+  group('#body', () {
+    test('defaults to empty', () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(request.body, isEmpty);
+    });
+
+    test('can be set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.body = "hello";
+      expect(request.body, equals("hello"));
+    });
+
+    test('changes when bodyBytes changes', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyBytes = [104, 101, 108, 108, 111];
+      expect(request.body, equals("hello"));
+    });
+
+    // TODO(nweiz): test that both the getter and the setter respect #encoding
+    // when issue 6284 is fixed.
+  });
+
+  group('#bodyFields', () {
+    test("can't be read without setting the content-type", () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(() => request.bodyFields, throwsStateError);
+    });
+
+    test("can't be read with the wrong content-type", () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] = 'text/plain';
+      expect(() => request.bodyFields, throwsStateError);
+    });
+
+    test("can't be set with the wrong content-type", () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] = 'text/plain';
+      expect(() => request.bodyFields = {}, throwsStateError);
+    });
+
+    test('defaults to empty', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'application/x-www-form-urlencoded';
+      expect(request.bodyFields, isEmpty);
+    });
+
+    test('can be set with no content-type', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyFields = {'hello': 'world'};
+      expect(request.bodyFields, equals({'hello': 'world'}));
+    });
+
+    test('changes when body changes', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'application/x-www-form-urlencoded';
+      request.body = 'key%201=value&key+2=other%2bvalue';
+      expect(request.bodyFields,
+          equals({'key 1': 'value', 'key 2': 'other+value'}));
+    });
+
+    // TODO(nweiz): test that both the getter and the setter respect #encoding
+    // when issue 6284 is fixed.
+  });
+
+  group('content-type header', () {
+    test('defaults to empty', () {
+      var request = new http.Request('POST', dummyUrl);
+      expect(request.headers[HttpHeaders.CONTENT_TYPE], isNull);
+    });
+
+    test('defaults to empty if only encoding is set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.encoding = Encoding.ISO_8859_1;
+      expect(request.headers[HttpHeaders.CONTENT_TYPE], isNull);
+    });
+
+    test('is set to application/x-www-form-urlencoded with charset utf-8 if '
+        'bodyFields is set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyFields = {'hello': 'world'};
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/x-www-form-urlencoded; charset=UTF-8'));
+    });
+
+    test('is set to application/x-www-form-urlencoded with the given charset '
+        'if bodyFields and encoding are set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.encoding = Encoding.ISO_8859_1;
+      request.bodyFields = {'hello': 'world'};
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/x-www-form-urlencoded; charset=ISO-8859-1'));
+    });
+
+    test('is set to text/plain and the given encoding if body and encoding are '
+        'both set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.encoding = Encoding.ISO_8859_1;
+      request.body = 'hello, world';
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('text/plain; charset=ISO-8859-1'));
+    });
+
+    test('is modified to include utf-8 if body is set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] = 'application/json';
+      request.body = '{"hello": "world"}';
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/json; charset=UTF-8'));
+    });
+
+    test('is modified to include the given encoding if encoding is set', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] = 'application/json';
+      request.encoding = Encoding.ISO_8859_1;
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/json; charset=ISO-8859-1'));
+    });
+
+    test('has its charset overridden by an explicit encoding', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'application/json; charset=utf-8';
+      request.encoding = Encoding.ISO_8859_1;
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/json; charset=ISO-8859-1'));
+    });
+
+    test("doen't have its charset overridden by setting bodyFields", () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'application/x-www-form-urlencoded; charset=iso-8859-1';
+      request.bodyFields = {'hello': 'world'};
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/x-www-form-urlencoded; charset=iso-8859-1'));
+    });
+
+    test("doen't have its charset overridden by setting body", () {
+      var request = new http.Request('POST', dummyUrl);
+      request.headers[HttpHeaders.CONTENT_TYPE] =
+          'application/json; charset=iso-8859-1';
+      request.body = '{"hello": "world"}';
+      expect(request.headers[HttpHeaders.CONTENT_TYPE],
+          equals('application/json; charset=iso-8859-1'));
+    });
+  });
+
+  group('#finalize', () {
+    test('returns a stream that emits the request body', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.body = "Hello, world!";
+      expect(
+          consumeInputStream(request.finalize())
+              .transform((bytes) => new String.fromCharCodes(bytes)),
+          completion(equals("Hello, world!")));
+    });
+
+    test('freezes #persistentConnection', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.finalize();
+
+      expect(request.persistentConnection, isTrue);
+      expect(() => request.persistentConnection = false, throwsStateError);
+    });
+
+    test('freezes #followRedirects', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.finalize();
+
+      expect(request.followRedirects, isTrue);
+      expect(() => request.followRedirects = false, throwsStateError);
+    });
+
+    test('freezes #maxRedirects', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.finalize();
+
+      expect(request.maxRedirects, equals(5));
+      expect(() => request.maxRedirects = 10, throwsStateError);
+    });
+
+    test('freezes #encoding', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.finalize();
+
+      expect(request.encoding.name, equals(Encoding.UTF_8.name));
+      expect(() => request.encoding = Encoding.ASCII, throwsStateError);
+    });
+
+    test('freezes #bodyBytes', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyBytes = [1, 2, 3];
+      request.finalize();
+
+      expect(request.bodyBytes, equals([1, 2, 3]));
+      expect(() => request.bodyBytes = [4, 5, 6], throwsStateError);
+    });
+
+    test('freezes #body', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.body = "hello";
+      request.finalize();
+
+      expect(request.body, equals("hello"));
+      expect(() => request.body = "goodbye", throwsStateError);
+    });
+
+    test('freezes #bodyFields', () {
+      var request = new http.Request('POST', dummyUrl);
+      request.bodyFields = {"hello": "world"};
+      request.finalize();
+
+      expect(request.bodyFields, equals({"hello": "world"}));
+      expect(() => request.bodyFields = {}, throwsStateError);
+    });
+
+    test("can't be called twice", () {
+      var request = new http.Request('POST', dummyUrl);
+      request.finalize();
+      expect(request.finalize, throwsStateError);
+    });
+  });
+}
+
diff --git a/pkg/http/test/response_test.dart b/pkg/http/test/response_test.dart
new file mode 100644
index 0000000..6062dab
--- /dev/null
+++ b/pkg/http/test/response_test.dart
@@ -0,0 +1,68 @@
+// 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 response_test;
+
+import 'dart:io';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+
+void main() {
+  group('()', () {
+    test('sets body', () {
+      var response = new http.Response("Hello, world!", 200);
+      expect(response.body, equals("Hello, world!"));
+    });
+
+    test('sets bodyBytes', () {
+      var response = new http.Response("Hello, world!", 200);
+      expect(response.bodyBytes, equals(
+          [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]));
+    });
+
+    // TODO(nweiz): test that this respects the inferred encoding when issue
+    // 6284 is fixed.
+  });
+
+  group('.bytes()', () {
+    test('sets body', () {
+      var response = new http.Response.bytes([104, 101, 108, 108, 111], 200);
+      expect(response.body, equals("hello"));
+    });
+
+    test('sets bodyBytes', () {
+      var response = new http.Response.bytes([104, 101, 108, 108, 111], 200);
+      expect(response.bodyBytes, equals([104, 101, 108, 108, 111]));
+    });
+
+    // TODO(nweiz): test that this respects the inferred encoding when issue
+    // 6284 is fixed.
+  });
+
+  group('.fromStream()', () {
+    test('sets body', () {
+      var stream = new ListInputStream();
+      var streamResponse = new http.StreamedResponse(stream, 200, 13);
+      var future = http.Response.fromStream(streamResponse)
+        .transform((response) => response.body);
+      expect(future, completion(equals("Hello, world!")));
+
+      stream.write([72, 101, 108, 108, 111, 44, 32]);
+      stream.write([119, 111, 114, 108, 100, 33]);
+      stream.markEndOfStream();
+    });
+
+    test('sets bodyBytes', () {
+      var stream = new ListInputStream();
+      var streamResponse = new http.StreamedResponse(stream, 200, 5);
+      var future = http.Response.fromStream(streamResponse)
+        .transform((response) => response.bodyBytes);
+      expect(future, completion(equals([104, 101, 108, 108, 111])));
+
+      stream.write([104, 101, 108, 108, 111]);
+      stream.markEndOfStream();
+    });
+  });
+}
diff --git a/pkg/http/test/streamed_request_test.dart b/pkg/http/test/streamed_request_test.dart
new file mode 100644
index 0000000..e71d50b
--- /dev/null
+++ b/pkg/http/test/streamed_request_test.dart
@@ -0,0 +1,21 @@
+// 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 streamed_request_test;
+
+import 'dart:io';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import 'utils.dart';
+
+void main() {
+  test('#finalize freezes contentLength', () {
+    var request = new http.StreamedRequest('POST', dummyUrl);
+    request.finalize();
+
+    expect(request.contentLength, equals(-1));
+    expect(() => request.contentLength = 10, throwsStateError);
+  });
+}
\ No newline at end of file
diff --git a/pkg/http/test/utils.dart b/pkg/http/test/utils.dart
new file mode 100644
index 0000000..9b4d7e9
--- /dev/null
+++ b/pkg/http/test/utils.dart
@@ -0,0 +1,140 @@
+// 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 utils;
+
+import 'dart:io';
+import 'dart:json';
+import 'dart:uri';
+
+import '../../unittest/lib/unittest.dart';
+import '../lib/http.dart' as http;
+import '../lib/src/utils.dart';
+
+/// The current server instance.
+HttpServer _server;
+
+/// The URL for the current server instance.
+Uri get serverUrl => new Uri.fromString('http://localhost:${_server.port}');
+
+/// A dummy URL for constructing requests that won't be sent.
+Uri get dummyUrl => new Uri.fromString('http://dartlang.org/');
+
+/// Starts a new HTTP server.
+void startServer() {
+  _server = new HttpServer();
+
+  _server.addRequestHandler((request) => request.path == '/error',
+      (request, response) {
+    response.statusCode = 400;
+    response.outputStream.close();
+  });
+
+  _server.defaultRequestHandler = (request, response) {
+    consumeInputStream(request.inputStream).then((requestBodyBytes) {
+      response.statusCode = 200;
+      response.headers.contentType = new ContentType("application", "json");
+
+      var requestBody;
+      if (requestBodyBytes.isEmpty) {
+        requestBody = null;
+      } else if (request.headers.contentType.charset != null) {
+        var encoding = requiredEncodingForCharset(
+            request.headers.contentType.charset);
+        requestBody = decodeString(requestBodyBytes, encoding);
+      } else {
+        requestBody = requestBodyBytes;
+      }
+
+      var content = {
+        'method': request.method,
+        'path': request.path,
+        'headers': <String>{}
+      };
+      if (requestBody != null) content['body'] = requestBody;
+      request.headers.forEach((name, values) {
+        // These headers are automatically generated by dart:io, so we don't
+        // want to test them here.
+        if (name == 'cookie' || name == 'host') return;
+
+        content['headers'][name] = values;
+      });
+
+      var outputEncoding;
+      var encodingName = request.queryParameters['response-encoding'];
+      if (encodingName != null) {
+        outputEncoding = requiredEncodingForCharset(encodingName);
+      } else {
+        outputEncoding = Encoding.ASCII;
+      }
+
+      var body = JSON.stringify(content);
+      response.contentLength = body.length;
+      response.outputStream.writeString(body, outputEncoding);
+      response.outputStream.close();
+    });
+  };
+
+  _server.listen("127.0.0.1", 0);
+}
+
+/// Stops the current HTTP server.
+void stopServer() {
+  _server.close();
+  _server = null;
+}
+
+/// A matcher that matches JSON that parses to a value that matches the inner
+/// matcher.
+Matcher parse(matcher) => new _Parse(matcher);
+
+class _Parse extends BaseMatcher {
+  final Matcher _matcher;
+
+  _Parse(this._matcher);
+
+  bool matches(item, MatchState matchState) {
+    print("_Parse.matches [$item]");
+    if (item is! String) return false;
+
+    var parsed;
+    try {
+      parsed = JSON.parse(item);
+    } catch (e) {
+      return false;
+    }
+
+    return _matcher.matches(parsed, matchState);
+  }
+
+  Description describe(Description description) {
+    return description.add('parses to a value that ')
+      .addDescriptionOf(_matcher);
+  }
+}
+
+// TODO(nweiz): remove this once it's built in to unittest
+/// A matcher for StateErrors.
+const isStateError = const _StateError();
+
+/// A matcher for functions that throw StateError.
+const Matcher throwsStateError =
+    const Throws(isStateError);
+
+class _StateError extends TypeMatcher {
+  const _StateError() : super("StateError");
+  bool matches(item, MatchState matchState) => item is StateError;
+}
+
+/// A matcher for HttpExceptions.
+const isHttpException = const _HttpException();
+
+/// A matcher for functions that throw HttpException.
+const Matcher throwsHttpException =
+    const Throws(isHttpException);
+
+class _HttpException extends TypeMatcher {
+  const _HttpException() : super("HttpException");
+  bool matches(item, MatchState matchState) => item is HttpException;
+}
diff --git a/pkg/intl/lib/src/date_format_field.dart b/pkg/intl/lib/src/date_format_field.dart
index 3e7c6cf..7e210a3 100644
--- a/pkg/intl/lib/src/date_format_field.dart
+++ b/pkg/intl/lib/src/date_format_field.dart
@@ -378,15 +378,15 @@
 
   String formatTimeZoneId(Date date) {
     // TODO(alanknight): implement time zone support
-    throw new NotImplementedException();
+    throw new UnimplementedError();
   }
 
   String formatTimeZone(Date date) {
-    throw new NotImplementedException();
+    throw new UnimplementedError();
   }
 
   String formatTimeZoneRFC(Date date) {
-    throw new NotImplementedException();
+    throw new UnimplementedError();
   }
 
  /**
diff --git a/pkg/intl/test/bidi_format_test.dart b/pkg/intl/test/bidi_format_test.dart
index 6b26672..639adab 100644
--- a/pkg/intl/test/bidi_format_test.dart
+++ b/pkg/intl/test/bidi_format_test.dart
@@ -6,7 +6,7 @@
 library bidi_format_test;
 
 import '../lib/intl.dart';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 /**
  * Tests the bidirectional text formatting library.
diff --git a/pkg/intl/test/bidi_utils_test.dart b/pkg/intl/test/bidi_utils_test.dart
index e65a241..629f670 100644
--- a/pkg/intl/test/bidi_utils_test.dart
+++ b/pkg/intl/test/bidi_utils_test.dart
@@ -6,7 +6,7 @@
 library bidi_utils_test;
 
 import '../lib/intl.dart';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 /**
  * Tests the bidi utilities library.
diff --git a/pkg/intl/test/data_directory.dart b/pkg/intl/test/data_directory.dart
index b2e23da..96fa450 100644
--- a/pkg/intl/test/data_directory.dart
+++ b/pkg/intl/test/data_directory.dart
@@ -22,4 +22,4 @@
     return 'lib${_sep}src${_sep}data${_sep}dates${_sep}';
   }
   return 'pkg${_sep}intl${_sep}lib${_sep}src${_sep}data${_sep}dates${_sep}';
-}
\ No newline at end of file
+}
diff --git a/pkg/intl/test/date_time_format_file_test_stub.dart b/pkg/intl/test/date_time_format_file_test_stub.dart
index 4a09ccf..18b596c 100644
--- a/pkg/intl/test/date_time_format_file_test_stub.dart
+++ b/pkg/intl/test/date_time_format_file_test_stub.dart
@@ -14,7 +14,7 @@
 import 'dart:io';
 import 'date_time_format_test_core.dart';
 import 'data_directory.dart';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 runWith([Function getSubset]) {
   // Initialize one locale just so we know what the list is.
@@ -32,4 +32,4 @@
     Futures.wait(futures).then(
         expectAsync1((results) => runDateTests(getSubset())));
   });
-}
\ No newline at end of file
+}
diff --git a/pkg/intl/test/date_time_format_http_request_test.dart b/pkg/intl/test/date_time_format_http_request_test.dart
index d0b9062..fb147b4 100644
--- a/pkg/intl/test/date_time_format_http_request_test.dart
+++ b/pkg/intl/test/date_time_format_http_request_test.dart
@@ -13,7 +13,7 @@
 import '../lib/date_symbol_data_http_request.dart';
 import 'date_time_format_test_core.dart';
 import 'dart:html';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 var url = "http://localhost:9876/pkg/intl/lib/src/data/dates/";
 
diff --git a/pkg/intl/test/date_time_format_local_test_stub.dart b/pkg/intl/test/date_time_format_local_test_stub.dart
index 862832e..0556cd5 100644
--- a/pkg/intl/test/date_time_format_local_test_stub.dart
+++ b/pkg/intl/test/date_time_format_local_test_stub.dart
@@ -27,4 +27,4 @@
   var futures = DateFormat.allLocalesWithSymbols().map(
       (locale) => initializeDateFormatting(locale, null));
   Futures.wait(futures).then((results) => runDateTests(getSubset()));
-}
\ No newline at end of file
+}
diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart
index 8be3aab..ef13882 100644
--- a/pkg/intl/test/date_time_format_test_core.dart
+++ b/pkg/intl/test/date_time_format_test_core.dart
@@ -10,7 +10,7 @@
 
 library date_time_format_tests;
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import 'date_time_format_test_data.dart';
 import '../lib/intl.dart';
 import '../lib/src/date_format_internal.dart';
diff --git a/pkg/intl/test/date_time_format_test_data.dart b/pkg/intl/test/date_time_format_test_data.dart
index eae473c..cec221a 100644
--- a/pkg/intl/test/date_time_format_test_data.dart
+++ b/pkg/intl/test/date_time_format_test_data.dart
@@ -334,4 +334,4 @@
       "Παρ, 27 Ιαν 2012 8:58:59 μ.μ. GMT-08:00",
   "HOUR_MINUTE_SECOND + ABBR_GENERIC_TZ" :
       "8:58:59 μ.μ. Ηνωμένες Πολιτείες της Αμερικής (Λος Άντζελες)",
-  "HOUR_MINUTE + ABBR_SPECIFIC_TZ" : "8:58 μ.μ. GMT-08:00"};
\ No newline at end of file
+  "HOUR_MINUTE + ABBR_SPECIFIC_TZ" : "8:58 μ.μ. GMT-08:00"};
diff --git a/pkg/intl/test/find_default_locale_browser_test.dart b/pkg/intl/test/find_default_locale_browser_test.dart
index 29b6523..a9798ed 100644
--- a/pkg/intl/test/find_default_locale_browser_test.dart
+++ b/pkg/intl/test/find_default_locale_browser_test.dart
@@ -6,7 +6,7 @@
 
 import '../lib/intl.dart';
 import '../lib/intl_browser.dart';
-import '../../unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("Find system locale in browser", () {
diff --git a/pkg/intl/test/find_default_locale_standalone_test.dart b/pkg/intl/test/find_default_locale_standalone_test.dart
index 0e3a150..c8f5224 100644
--- a/pkg/intl/test/find_default_locale_standalone_test.dart
+++ b/pkg/intl/test/find_default_locale_standalone_test.dart
@@ -6,7 +6,7 @@
 
 import '../lib/intl.dart';
 import '../lib/intl_standalone.dart';
-import '../../unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("Find system locale standalone", () {
diff --git a/pkg/intl/test/intl_message_basic_example_test.dart b/pkg/intl/test/intl_message_basic_example_test.dart
index 3bf4ce6..bc92f9d 100644
--- a/pkg/intl/test/intl_message_basic_example_test.dart
+++ b/pkg/intl/test/intl_message_basic_example_test.dart
@@ -11,7 +11,7 @@
 import '../lib/intl.dart';
 import '../lib/message_lookup_local.dart';
 import '../example/basic/basic_example.dart';
-import '../../unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 List list;
 
@@ -30,4 +30,4 @@
   expect(list[2], "วิ่ง 0:00:00 on วันพฤหัสบดี 1 มกราคม 1970.");
   expect(list[3], "วิ่ง now on today.");
   });
-}
\ No newline at end of file
+}
diff --git a/pkg/intl/test/intl_message_test.dart b/pkg/intl/test/intl_message_test.dart
index c15ee5b..6d433cd 100644
--- a/pkg/intl/test/intl_message_test.dart
+++ b/pkg/intl/test/intl_message_test.dart
@@ -5,7 +5,7 @@
 library intl_message_test;
 
 import '../lib/intl.dart';
-import '../../unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../lib/message_lookup_local.dart';
 
 /** Tests the MessageFormat library in dart. */
diff --git a/pkg/intl/test/intl_test.dart b/pkg/intl/test/intl_test.dart
index 519497d..d03b5e7 100644
--- a/pkg/intl/test/intl_test.dart
+++ b/pkg/intl/test/intl_test.dart
@@ -6,7 +6,7 @@
 
 import '../lib/intl.dart';
 // TODO(rnystrom): Use "package:" import when test.dart supports it (#4968).
-import '../../unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../lib/date_symbol_data_local.dart';
 
 main() {
diff --git a/pkg/intl/test/number_format_test.dart b/pkg/intl/test/number_format_test.dart
index b0baf21..a1c0d9d 100644
--- a/pkg/intl/test/number_format_test.dart
+++ b/pkg/intl/test/number_format_test.dart
@@ -6,7 +6,7 @@
 
 library number_format_test;
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../lib/number_format.dart';
 import '../lib/intl.dart';
 
@@ -46,4 +46,4 @@
       expect(formatted, x);
     }
   });
-}
\ No newline at end of file
+}
diff --git a/pkg/logging/lib/logging.dart b/pkg/logging/lib/logging.dart
index b423e20..3713175 100644
--- a/pkg/logging/lib/logging.dart
+++ b/pkg/logging/lib/logging.dart
@@ -7,7 +7,7 @@
  * abstractions similar to those used in other languages, such as the Closure JS
  * Logger and java.util.logging.Logger.
  */
-#library('logging');
+library logging;
 
 /**
  * Whether to allow fine-grain logging and configuration of loggers in a
diff --git a/pkg/logging/test/logging_test.dart b/pkg/logging/test/logging_test.dart
index a3e1cd5d..37518b1 100644
--- a/pkg/logging/test/logging_test.dart
+++ b/pkg/logging/test/logging_test.dart
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-#library('logging_test');
+library logging_test;
 
 // TODO(rnystrom): Use "package:" import when test.dart supports it (#4968).
-#import('../lib/logging.dart');
-#import('../../../pkg/unittest/unittest.dart');
+import '../lib/logging.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('level comparison is a valid comparator', () {
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart
index cd8d64a..ba49c2b 100644
--- a/pkg/meta/lib/meta.dart
+++ b/pkg/meta/lib/meta.dart
@@ -7,7 +7,7 @@
  * semantic information about the program being annotated. These annotations are
  * intended to be used by tools to provide a better user experience.
  */
-#library('meta');
+library meta;
 
 /**
  * An annotation used to mark a class, field, getter, setter, method, top-level
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 4d2c5e5..3599c65 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -12,8 +12,13 @@
 [$compiler == dart2dart]
 *: Skip
 
+# Don't compiile tests that use dart:io to JS
+[ $compiler == dart2js || $compiler == dart2dart || $compiler == dartc ]
+http/test/*: Skip
+
 # Skip tests that use local file access if we're running in any browser
 [ $runtime == opera || $runtime == ff || $runtime == ie9 || $runtime == dartium || $runtime == chrome || $runtime == safari || $runtime == drt ]
+http/test/*: Skip
 intl/test/date_time_format_file_even_test: Skip
 intl/test/date_time_format_file_odd_test: Skip
 intl/test/find_default_locale_standalone_test: Skip
@@ -26,24 +31,12 @@
 [ $runtime == vm ]
 intl/test/find_default_locale_browser_test: Skip
 intl/test/date_time_format_http_request_test: Skip
-unittest/test/mock_test: Fail  # noSuchMethod InvocationMirror not correct yet.
 
 # Skip http request tests on Dartium while resolving an odd
 # error there that causes the tests to timeout.
 [ $runtime == dartium || $runtime == drt ]
 intl/test/date_time_format_http_request_test: Skip
 
-[ $runtime == drt && $compiler == none ]
-intl/test/bidi_format_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/bidi_utils_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/date_time_format_local_even_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/date_time_format_local_odd_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/find_default_locale_browser_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/intl_message_basic_example_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/intl_message_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/intl_test: Fail # New import syntax is not supported by test frameowrk
-intl/test/number_format_test: Fail # New import syntax is not supported by test frameowrk
-
 # Skip intl_message tests that use mirrors on dart2js until it's been
 # implemented there.
 [ $compiler == dart2js ]
@@ -54,11 +47,8 @@
 unittest/test/mock_regexp_negative_test: Fail
 unittest/test/mock_stepwise_negative_test: Fail
 
-# pkg issue 6340
-fixnum/test/int_32_test: Fail, OK
-fixnum/test/int_64_test: Fail, OK
-unittest/test/matchers_test: Fail, OK
-
+[ $system == windows ]
+http/test/request_test: Pass, Timeout # Issue 6594
 
 [ $compiler == dart2js || $compiler == dartc ]
 unittest/test/instance_test: Skip
@@ -66,5 +56,3 @@
 [ $compiler == none && $runtime == drt ]
 dartdoc/test/dartdoc_test: Skip # See dartbug.com/4541.
 
-[ $compiler == none && ($runtime == dartium || $runtime == drt) ]
-unittest/test/mock_test: Fail
diff --git a/pkg/unittest/html_config.dart b/pkg/unittest/html_config.dart
deleted file mode 100644
index e7a5dbd..0000000
--- a/pkg/unittest/html_config.dart
+++ /dev/null
@@ -1,76 +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.
-
-/**
- * A simple unit test library for running tests in a browser.
- */
-#library('unittest_html_config');
-
-#import('dart:html');
-#import('unittest.dart');
-
-#source('html_print.dart');
-
-class HtmlConfiguration extends Configuration {
-  /** Whether this is run within dartium layout tests. */
-  final bool _isLayoutTest;
-  HtmlConfiguration(this._isLayoutTest);
-
-  // TODO(rnystrom): Get rid of this if we get canonical closures for methods.
-  EventListener _onErrorClosure;
-  EventListener _onMessageClosure;
-
-  void _installHandlers() {
-    if (_onErrorClosure == null) {
-      _onErrorClosure =
-          (e) => handleExternalError(e, '(DOM callback has errors)');
-      // Listen for uncaught errors.
-      window.on.error.add(_onErrorClosure);
-    }
-    if (_onMessageClosure == null) {
-      _onMessageClosure = (e) => processMessage(e);
-      // Listen for errors from JS.
-      window.on.message.add(_onMessageClosure);
-    }
-  }
-
-  void _uninstallHandlers() {
-    if (_onErrorClosure != null) {
-      window.on.error.remove(_onErrorClosure);
-      _onErrorClosure = null;
-    }
-    if (_onMessageClosure != null) {
-      window.on.message.remove(_onMessageClosure);
-      _onMessageClosure = null;
-    }
-  }
-
-  void processMessage(e) {
-    if ('unittest-suite-external-error' == e.data) {
-      handleExternalError('<unknown>', '(external error detected)');
-    }
-  }
-
-  void onInit() {
-    _installHandlers();
-  }
-
-  void onStart() {
-    window.postMessage('unittest-suite-wait-for-done', '*');
-  }
-
-  void onTestResult(TestCase testCase) {}
-
-  void onDone(int passed, int failed, int errors, List<TestCase> results,
-      String uncaughtError) {
-    _uninstallHandlers();
-    _showResultsInPage(passed, failed, errors, results, _isLayoutTest,
-        uncaughtError);
-    window.postMessage('unittest-suite-done', '*');
-  }
-}
-
-void useHtmlConfiguration([bool isLayoutTest = false]) {
-  configure(new HtmlConfiguration(isLayoutTest));
-}
diff --git a/pkg/unittest/html_print.dart b/pkg/unittest/html_print.dart
deleted file mode 100644
index 1ee70e7..0000000
--- a/pkg/unittest/html_print.dart
+++ /dev/null
@@ -1,79 +0,0 @@
-// 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.
-
-/** This file is sourced by both dom_config.dart and html_config.dart. */
-
-/** Creates a table showing tests results in HTML. */
-void _showResultsInPage(int passed, int failed, int errors,
-    List<TestCase> results, bool isLayoutTest, String uncaughtError) {
-  if (isLayoutTest && (passed == results.length) && uncaughtError == null) {
-    document.body.innerHTML = "PASS";
-  } else {
-    var newBody = new StringBuffer();
-    newBody.add("<table class='unittest-table'><tbody>");
-    newBody.add(passed == results.length && uncaughtError == null
-        ? "<tr><td colspan='3' class='unittest-pass'>PASS</td></tr>"
-        : "<tr><td colspan='3' class='unittest-fail'>FAIL</td></tr>");
-
-    for (final test_ in results) {
-      newBody.add(_toHtml(test_));
-    }
-
-    if (uncaughtError != null) {
-        newBody.add('''<tr>
-          <td>--</td>
-          <td class="unittest-error">ERROR</td>
-          <td>Uncaught error: $uncaughtError</td>
-        </tr>''');
-    }
-
-    if (passed == results.length && uncaughtError == null) {
-      newBody.add("""
-          <tr><td colspan='3' class='unittest-pass'>
-            All ${passed} tests passed
-          </td></tr>""");
-    } else {
-      newBody.add("""
-          <tr><td colspan='3'>Total
-            <span class='unittest-pass'>${passed} passed</span>,
-            <span class='unittest-fail'>${failed} failed</span>
-            <span class='unittest-error'>
-            ${errors + (uncaughtError == null ? 0 : 1)} errors</span>
-          </td></tr>""");
-    }
-    newBody.add("</tbody></table>");
-    document.body.innerHTML = newBody.toString();
-  }
-}
-
-String _toHtml(TestCase test_) {
-  if (!test_.isComplete) {
-    return '''
-        <tr>
-          <td>${test_.id}</td>
-          <td class="unittest-error">NO STATUS</td>
-          <td>Test did not complete</td>
-        </tr>''';
-  }
-
-  var html = '''
-      <tr>
-        <td>${test_.id}</td>
-        <td class="unittest-${test_.result}">${test_.result.toUpperCase()}</td>
-        <td>Expectation: ${test_.description}. ${_htmlEscape(test_.message)}</td>
-      </tr>''';
-
-  if (test_.stackTrace != null) {
-    html = '$html<tr><td></td><td colspan="2"><pre>${_htmlEscape(test_.stackTrace)}</pre></td></tr>';
-  }
-
-  return html;
-}
-
-//TODO(pquitslund): Move to a common lib
-String _htmlEscape(String string) {
-  return string.replaceAll('&', '&amp;')
-               .replaceAll('<','&lt;')
-               .replaceAll('>','&gt;');
-}
diff --git a/pkg/unittest/lib/html_config.dart b/pkg/unittest/lib/html_config.dart
new file mode 100644
index 0000000..3a8b3c4
--- /dev/null
+++ b/pkg/unittest/lib/html_config.dart
@@ -0,0 +1,148 @@
+// 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.
+
+/**
+ * A simple unit test library for running tests in a browser.
+ */
+library unittest_html_config;
+
+import 'dart:html';
+import 'unittest.dart';
+
+/** Creates a table showing tests results in HTML. */
+void _showResultsInPage(int passed, int failed, int errors,
+    List<TestCase> results, bool isLayoutTest, String uncaughtError) {
+  if (isLayoutTest && (passed == results.length) && uncaughtError == null) {
+    document.body.innerHTML = "PASS";
+  } else {
+    var newBody = new StringBuffer();
+    newBody.add("<table class='unittest-table'><tbody>");
+    newBody.add(passed == results.length && uncaughtError == null
+        ? "<tr><td colspan='3' class='unittest-pass'>PASS</td></tr>"
+        : "<tr><td colspan='3' class='unittest-fail'>FAIL</td></tr>");
+
+    for (final test_ in results) {
+      newBody.add(_toHtml(test_));
+    }
+
+    if (uncaughtError != null) {
+        newBody.add('''<tr>
+          <td>--</td>
+          <td class="unittest-error">ERROR</td>
+          <td>Uncaught error: $uncaughtError</td>
+        </tr>''');
+    }
+
+    if (passed == results.length && uncaughtError == null) {
+      newBody.add("""
+          <tr><td colspan='3' class='unittest-pass'>
+            All ${passed} tests passed
+          </td></tr>""");
+    } else {
+      newBody.add("""
+          <tr><td colspan='3'>Total
+            <span class='unittest-pass'>${passed} passed</span>,
+            <span class='unittest-fail'>${failed} failed</span>
+            <span class='unittest-error'>
+            ${errors + (uncaughtError == null ? 0 : 1)} errors</span>
+          </td></tr>""");
+    }
+    newBody.add("</tbody></table>");
+    document.body.innerHTML = newBody.toString();
+  }
+}
+
+String _toHtml(TestCase test_) {
+  if (!test_.isComplete) {
+    return '''
+        <tr>
+          <td>${test_.id}</td>
+          <td class="unittest-error">NO STATUS</td>
+          <td>Test did not complete</td>
+        </tr>''';
+  }
+
+  var html = '''
+      <tr>
+        <td>${test_.id}</td>
+        <td class="unittest-${test_.result}">${test_.result.toUpperCase()}</td>
+        <td>Expectation: ${test_.description}. ${_htmlEscape(test_.message)}</td>
+      </tr>''';
+
+  if (test_.stackTrace != null) {
+    html = '$html<tr><td></td><td colspan="2"><pre>${_htmlEscape(test_.stackTrace)}</pre></td></tr>';
+  }
+
+  return html;
+}
+
+//TODO(pquitslund): Move to a common lib
+String _htmlEscape(String string) {
+  return string.replaceAll('&', '&amp;')
+               .replaceAll('<','&lt;')
+               .replaceAll('>','&gt;');
+}
+
+class HtmlConfiguration extends Configuration {
+  /** Whether this is run within dartium layout tests. */
+  final bool _isLayoutTest;
+  HtmlConfiguration(this._isLayoutTest);
+
+  // TODO(rnystrom): Get rid of this if we get canonical closures for methods.
+  EventListener _onErrorClosure;
+  EventListener _onMessageClosure;
+
+  void _installHandlers() {
+    if (_onErrorClosure == null) {
+      _onErrorClosure =
+          (e) => handleExternalError(e, '(DOM callback has errors)');
+      // Listen for uncaught errors.
+      window.on.error.add(_onErrorClosure);
+    }
+    if (_onMessageClosure == null) {
+      _onMessageClosure = (e) => processMessage(e);
+      // Listen for errors from JS.
+      window.on.message.add(_onMessageClosure);
+    }
+  }
+
+  void _uninstallHandlers() {
+    if (_onErrorClosure != null) {
+      window.on.error.remove(_onErrorClosure);
+      _onErrorClosure = null;
+    }
+    if (_onMessageClosure != null) {
+      window.on.message.remove(_onMessageClosure);
+      _onMessageClosure = null;
+    }
+  }
+
+  void processMessage(e) {
+    if ('unittest-suite-external-error' == e.data) {
+      handleExternalError('<unknown>', '(external error detected)');
+    }
+  }
+
+  void onInit() {
+    _installHandlers();
+  }
+
+  void onStart() {
+    window.postMessage('unittest-suite-wait-for-done', '*');
+  }
+
+  void onTestResult(TestCase testCase) {}
+
+  void onDone(int passed, int failed, int errors, List<TestCase> results,
+      String uncaughtError) {
+    _uninstallHandlers();
+    _showResultsInPage(passed, failed, errors, results, _isLayoutTest,
+        uncaughtError);
+    window.postMessage('unittest-suite-done', '*');
+  }
+}
+
+void useHtmlConfiguration([bool isLayoutTest = false]) {
+  configure(new HtmlConfiguration(isLayoutTest));
+}
diff --git a/pkg/unittest/html_enhanced_config.dart b/pkg/unittest/lib/html_enhanced_config.dart
similarity index 98%
rename from pkg/unittest/html_enhanced_config.dart
rename to pkg/unittest/lib/html_enhanced_config.dart
index 65d0e47..ce68ef7 100644
--- a/pkg/unittest/html_enhanced_config.dart
+++ b/pkg/unittest/lib/html_enhanced_config.dart
@@ -8,11 +8,10 @@
  * Provides enhanced HTML output with collapsible group headers
  * and other at-a-glance information about the test results.
  */
-#library('unittest_html_enhanced_config');
+library unittest_html_enhanced_config;
 
-#import('dart:html');
-#import('unittest.dart');
-
+import 'dart:html';
+import 'unittest.dart';
 
 class HtmlEnhancedConfiguration extends Configuration {
   /** Whether this is run within dartium layout tests. */
diff --git a/pkg/unittest/html_layout_config.dart b/pkg/unittest/lib/html_layout_config.dart
similarity index 98%
rename from pkg/unittest/html_layout_config.dart
rename to pkg/unittest/lib/html_layout_config.dart
index 198a50e..1e56248 100644
--- a/pkg/unittest/html_layout_config.dart
+++ b/pkg/unittest/lib/html_layout_config.dart
@@ -9,11 +9,11 @@
  * recreated the IFrame for each test, here the IFrames are preserved.
  * Furthermore we post a message on completion.
  */
-#library('html_layout_config');
+library html_layout_config;
 
-#import('dart:html');
-#import('dart:math');
-#import('unittest.dart');
+import 'dart:html';
+import 'dart:math';
+import 'unittest.dart';
 
 /** The messages exchanged between parent and child. */
 // TODO(gram) At some point postMessage was supposed to support
diff --git a/pkg/unittest/interactive_html_config.dart b/pkg/unittest/lib/interactive_html_config.dart
similarity index 99%
rename from pkg/unittest/interactive_html_config.dart
rename to pkg/unittest/lib/interactive_html_config.dart
index f8f3a81..3ff750a 100644
--- a/pkg/unittest/interactive_html_config.dart
+++ b/pkg/unittest/lib/interactive_html_config.dart
@@ -9,14 +9,14 @@
  * config that manages all the tests, and a 'child' config for the
  * IFrame that runs the individual tests.
  */
-#library('unittest_interactive_html_config');
+library unittest_interactive_html_config;
 
 // TODO(gram) - add options for: remove IFrame on done/keep
 // IFrame for failed tests/keep IFrame for all tests.
 
-#import('dart:html');
-#import('dart:math');
-#import('unittest.dart');
+import 'dart:html';
+import 'dart:math';
+import 'unittest.dart';
 
 /** The messages exchanged between parent and child. */
 
diff --git a/pkg/unittest/lib/matcher.dart b/pkg/unittest/lib/matcher.dart
new file mode 100644
index 0000000..83d6d03
--- /dev/null
+++ b/pkg/unittest/lib/matcher.dart
@@ -0,0 +1,25 @@
+// 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.
+/**
+ * The matcher library provides a 3rd generation assertion mechanism, drawing
+ * inspiration from [Hamcrest] and Ladislav Thon's [dart-matchers]
+ * library.
+ *
+ * See [Hamcrest] http://en.wikipedia.org/wiki/Hamcrest
+ *     [Hamcrest] http://code.google.com/p/hamcrest/
+ *     [dart-matchers] https://github.com/Ladicek/dart-matchers
+ */
+library matcher;
+
+part 'src/basematcher.dart';
+part 'src/collection_matchers.dart';
+part 'src/core_matchers.dart';
+part 'src/description.dart';
+part 'src/expect.dart';
+part 'src/future_matchers.dart';
+part 'src/interfaces.dart';
+part 'src/map_matchers.dart';
+part 'src/numeric_matchers.dart';
+part 'src/operator_matchers.dart';
+part 'src/string_matchers.dart';
diff --git a/pkg/unittest/mock.dart b/pkg/unittest/lib/mock.dart
similarity index 98%
rename from pkg/unittest/mock.dart
rename to pkg/unittest/lib/mock.dart
index f0f5765..928cb88 100644
--- a/pkg/unittest/mock.dart
+++ b/pkg/unittest/lib/mock.dart
@@ -2,7 +2,8 @@
 // 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 unittest;
+library mock;
+import 'matcher.dart';
 
 /**
  * The error formatter for mocking is a bit different from the default one
@@ -40,9 +41,10 @@
 
 _MockFailureHandler _mockFailureHandler = null;
 
-/**
- * [_noArg] is a sentinel value representing no argument.
- */
+/** Sentinel value for representing no argument. */
+class _Sentinel {
+  const _Sentinel();
+}
 const _noArg = const _Sentinel();
 
 /** The ways in which a call to a mock method can be handled. */
@@ -1270,23 +1272,21 @@
   }
 
   /**
-   * This is the handler for method calls. We loo through the list
+   * This is the handler for method calls. We loop through the list
    * of [Behavior]s, and find the first match that still has return
    * values available, and then do the action specified by that
    * return value. If we find no [Behavior] to apply an exception is
    * thrown.
    */
   noSuchMethod(InvocationMirror invocation) {
-    String method = invocation.memberName;
-    // Remove this when InvocationMirror works correctly.
-    if (method.startsWith("get:")) method = method.substring(4);
-
+    var method = invocation.memberName;
+    var args = invocation.positionalArguments;
     if (invocation.isGetter) {
       method = 'get $method';
+    } else if (method.startsWith('get:')) {
+      // TODO(gram): Remove this when VM handles the isGetter version above.
+      method = 'get ${method.substring(4)}';
     }
-    List args = invocation.positionalArguments;
-    // TODO: Handle named arguments too.
-
     bool matchedMethodName = false;
     MatchState matchState = new MatchState();
     for (String k in _behaviors.keys) {
@@ -1322,6 +1322,9 @@
           }
           throw value;
         } else if (action == Action.PROXY) {
+          // TODO(gram): Replace all this with:
+          //     var rtn = invocation.invokeOn(value);
+          // once that is supported.
           var rtn;
           switch (args.length) {
             case 0:
diff --git a/pkg/unittest/matcher.dart b/pkg/unittest/lib/src/basematcher.dart
similarity index 98%
rename from pkg/unittest/matcher.dart
rename to pkg/unittest/lib/src/basematcher.dart
index 1c430f1..2859336 100644
--- a/pkg/unittest/matcher.dart
+++ b/pkg/unittest/lib/src/basematcher.dart
@@ -2,6 +2,8 @@
 // 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 matcher;
+
 /**
  * MatchState is a simple wrapper around an arbitrary object.
  * [Matcher] [matches] methods can use this to store useful
@@ -13,9 +15,6 @@
  * state, if set, will typically be a [Map] with a number of key-value
  * pairs containing relevant state information.
  */
-
-part of unittest;
-
 class MatchState {
   var state = null;
 
diff --git a/pkg/unittest/collection_matchers.dart b/pkg/unittest/lib/src/collection_matchers.dart
similarity index 99%
rename from pkg/unittest/collection_matchers.dart
rename to pkg/unittest/lib/src/collection_matchers.dart
index 4f8de3b..db13658 100644
--- a/pkg/unittest/collection_matchers.dart
+++ b/pkg/unittest/lib/src/collection_matchers.dart
@@ -7,7 +7,7 @@
  * match the given [matcher].
  */
 
-part of unittest;
+part of matcher;
 
 Matcher everyElement(matcher) => new _EveryElement(wrapMatcher(matcher));
 
diff --git a/pkg/unittest/config.dart b/pkg/unittest/lib/src/config.dart
similarity index 100%
rename from pkg/unittest/config.dart
rename to pkg/unittest/lib/src/config.dart
diff --git a/pkg/unittest/core_matchers.dart b/pkg/unittest/lib/src/core_matchers.dart
similarity index 94%
rename from pkg/unittest/core_matchers.dart
rename to pkg/unittest/lib/src/core_matchers.dart
index fc40400..046da2c 100644
--- a/pkg/unittest/core_matchers.dart
+++ b/pkg/unittest/lib/src/core_matchers.dart
@@ -2,7 +2,7 @@
 // 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 unittest;
+part of matcher;
 
 /**
  * Returns a matcher that matches empty strings, maps or collections.
@@ -284,7 +284,7 @@
     if (item is Future) {
       // Queue up an asynchronous expectation that validates when the future
       // completes.
-      item.onComplete(expectAsync1((future) {
+      item.onComplete(wrapAsync((future) {
         if (future.hasValue) {
           expect(false, isTrue, reason:
               "Expected future to fail, but succeeded with '${future.value}'.");
@@ -456,7 +456,7 @@
 /** A matcher for RangeErrors. */
 const isRangeError = const _RangeError();
 
-/** A matcher for functions that throw RangeError */
+/** A matcher for functions that throw RangeError. */
 const Matcher throwsRangeError =
     const Throws(isRangeError);
 
@@ -465,6 +465,19 @@
   bool matches(item, MatchState matchState) => item is RangeError;
 }
 
+// Temporary matcher for deprecated IndexOutOfRangeException.
+/** A matcher for IndexOutOfRangeExceptions. */
+const isIndexOutOfRangeException = const _IndexOutOfRangeException();
+
+/** A matcher for functions that throw IndexOutOfRangeException. */
+const Matcher throwsIndexOutOfRangeException =
+    const Throws(isIndexOutOfRangeException);
+
+class _IndexOutOfRangeException extends TypeMatcher {
+  const _IndexOutOfRangeException() : super("IndexOutOfRangeException");
+  bool matches(item, MatchState matchState) => item is IndexOutOfRangeException;
+}
+
 /** A matcher for NoSuchMethodErrors. */
 const isNoSuchMethodError = const _NoSuchMethodError();
 
@@ -477,17 +490,26 @@
   bool matches(item, MatchState matchState) => item is NoSuchMethodError;
 }
 
+/** A matcher for UnimplementedErrors. */
+const isUnimplementedError = const _UnimplementedError();
+
+/** A matcher for functions that throw Exception. */
+const Matcher throwsUnimplementedError =
+    const Throws(isUnimplementedError);
+
+class _UnimplementedError extends TypeMatcher {
+  const _UnimplementedError() : super("UnimplementedError");
+  bool matches(item, MatchState matchState) => item is UnimplementedError;
+}
+
+// Temporary matcher until NotImplementedException is removed.
 /** A matcher for NotImplementedExceptions. */
-const isNotImplementedException = const _NotImplementedException();
+const isNotImplementedException = isUnimplementedError;
 
 /** A matcher for functions that throw Exception. */
 const Matcher throwsNotImplementedException =
-    const Throws(isNotImplementedException);
+    const Throws(isUnimplementedError);
 
-class _NotImplementedException extends TypeMatcher {
-  const _NotImplementedException() : super("NotImplementedException");
-  bool matches(item, MatchState matchState) => item is NotImplementedException;
-}
 
 /** A matcher for NullPointerExceptions. */
 const isNullPointerException = const _NullPointerException();
diff --git a/pkg/unittest/description.dart b/pkg/unittest/lib/src/description.dart
similarity index 98%
rename from pkg/unittest/description.dart
rename to pkg/unittest/lib/src/description.dart
index 6652e6b..d851d33 100644
--- a/pkg/unittest/description.dart
+++ b/pkg/unittest/lib/src/description.dart
@@ -7,7 +7,7 @@
  * could be supported.
  */
 
-part of unittest;
+part of matcher;
 
 class StringDescription implements Description {
   var _out;
diff --git a/pkg/unittest/expect.dart b/pkg/unittest/lib/src/expect.dart
similarity index 89%
rename from pkg/unittest/expect.dart
rename to pkg/unittest/lib/src/expect.dart
index 1269493..3a5a160 100644
--- a/pkg/unittest/expect.dart
+++ b/pkg/unittest/lib/src/expect.dart
@@ -2,7 +2,18 @@
 // 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 unittest;
+part of matcher;
+
+/**
+ * Some matchers, like those for Futures and exception testing,
+ * can fail in asynchronous sections, and throw exceptions.
+ * A user of this library will typically want to catch and handle 
+ * such exceptions. The [wrapAsync] property is a function that
+ * can wrap callbacks used by these Matchers so that they can be
+ * used safely. For example, the unittest library will set this
+ * to be expectAsync1. By default this is an identity function.
+ */
+Function wrapAsync = (f) => f;
 
 /**
  * This is the main assertion function. It asserts that [actual]
@@ -23,14 +34,6 @@
  * In some cases extra diagnostic info can be produced on failure (for
  * example, stack traces on mismatched exceptions). To enable these,
  * [verbose] should be specified as true;
- *
- * expect() is a 3rd generation assertion mechanism, drawing
- * inspiration from [Hamcrest] and Ladislav Thon's [dart-matchers]
- * library.
- *
- * See [Hamcrest] http://en.wikipedia.org/wiki/Hamcrest
- *     [Hamcrest] http://code.google.com/p/hamcrest/
- *     [dart-matchers] https://github.com/Ladicek/dart-matchers
  */
 void expect(actual, matcher, {String reason, FailureHandler failureHandler,
             bool verbose : false}) {
diff --git a/pkg/unittest/future_matchers.dart b/pkg/unittest/lib/src/future_matchers.dart
similarity index 96%
rename from pkg/unittest/future_matchers.dart
rename to pkg/unittest/lib/src/future_matchers.dart
index 87d30f2..ce7e804 100644
--- a/pkg/unittest/future_matchers.dart
+++ b/pkg/unittest/lib/src/future_matchers.dart
@@ -12,7 +12,7 @@
  * [throwsA].
  */
 
-part of unittest;
+part of matcher;
 
 Matcher completes = const _Completes(null);
 
@@ -35,7 +35,7 @@
   bool matches(item, MatchState matchState) {
     if (item is! Future) return false;
 
-    item.onComplete(expectAsync1((future) {
+    item.onComplete(wrapAsync((future) {
       var reason = 'Expected future to complete successfully, but it failed '
         'with ${future.exception}';
       if (future.stackTrace != null) {
diff --git a/pkg/unittest/interfaces.dart b/pkg/unittest/lib/src/interfaces.dart
similarity index 99%
rename from pkg/unittest/interfaces.dart
rename to pkg/unittest/lib/src/interfaces.dart
index 42c498b..3757f40 100644
--- a/pkg/unittest/interfaces.dart
+++ b/pkg/unittest/lib/src/interfaces.dart
@@ -14,7 +14,7 @@
  * error formatter with another.
  */
 
-part of unittest;
+part of matcher;
 
 typedef String ErrorFormatter(actual, Matcher matcher, String reason,
     MatchState matchState, bool verbose);
diff --git a/pkg/unittest/map_matchers.dart b/pkg/unittest/lib/src/map_matchers.dart
similarity index 98%
rename from pkg/unittest/map_matchers.dart
rename to pkg/unittest/lib/src/map_matchers.dart
index e4b40ba..4c1e572 100644
--- a/pkg/unittest/map_matchers.dart
+++ b/pkg/unittest/lib/src/map_matchers.dart
@@ -6,7 +6,7 @@
  * Returns a matcher which matches maps containing the given [value].
  */
 
-part of unittest;
+part of matcher;
 
 Matcher containsValue(value) => new _ContainsValue(value);
 
diff --git a/pkg/unittest/numeric_matchers.dart b/pkg/unittest/lib/src/numeric_matchers.dart
similarity index 99%
rename from pkg/unittest/numeric_matchers.dart
rename to pkg/unittest/lib/src/numeric_matchers.dart
index bb4cb96..e1f1adf 100644
--- a/pkg/unittest/numeric_matchers.dart
+++ b/pkg/unittest/lib/src/numeric_matchers.dart
@@ -7,7 +7,7 @@
  * than the given [value].
  */
 
-part of unittest;
+part of matcher;
 
 Matcher greaterThan(value) =>
   new _OrderingComparison(value, false, false, true, 'a value greater than');
diff --git a/pkg/unittest/operator_matchers.dart b/pkg/unittest/lib/src/operator_matchers.dart
similarity index 99%
rename from pkg/unittest/operator_matchers.dart
rename to pkg/unittest/lib/src/operator_matchers.dart
index 183be06..d5142be 100644
--- a/pkg/unittest/operator_matchers.dart
+++ b/pkg/unittest/lib/src/operator_matchers.dart
@@ -2,7 +2,7 @@
 // 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 unittest;
+part of matcher;
 
 /**
  * This returns a matcher that inverts [matcher] to its logical negation.
diff --git a/pkg/unittest/string_matchers.dart b/pkg/unittest/lib/src/string_matchers.dart
similarity index 99%
rename from pkg/unittest/string_matchers.dart
rename to pkg/unittest/lib/src/string_matchers.dart
index 8899379..8409f53 100644
--- a/pkg/unittest/string_matchers.dart
+++ b/pkg/unittest/lib/src/string_matchers.dart
@@ -7,7 +7,7 @@
  * is equal to [value] when compared case-insensitively.
  */
 
-part of unittest;
+part of matcher;
 
 Matcher equalsIgnoringCase(String value) => new _IsEqualIgnoringCase(value);
 
diff --git a/pkg/unittest/test_case.dart b/pkg/unittest/lib/src/test_case.dart
similarity index 96%
rename from pkg/unittest/test_case.dart
rename to pkg/unittest/lib/src/test_case.dart
index bf4f1a2..0b13cb1 100644
--- a/pkg/unittest/test_case.dart
+++ b/pkg/unittest/lib/src/test_case.dart
@@ -105,7 +105,7 @@
     _complete();
   }
 
-  void fail(String messageText, String stack) {
+  void fail(String messageText, [String stack = '']) {
     if (result != null) {
       if (result == PASS) {
         error('Test failed after initially passing: $messageText', stack);
@@ -120,7 +120,7 @@
     }
   }
 
-  void error(String messageText, String stack) {
+  void error(String messageText, [String stack = '']) {
     result = ERROR;
     message = messageText;
     stackTrace = stack;
diff --git a/pkg/unittest/unittest.dart b/pkg/unittest/lib/unittest.dart
similarity index 98%
rename from pkg/unittest/unittest.dart
rename to pkg/unittest/lib/unittest.dart
index 4f7bdf0..87a6f9d 100644
--- a/pkg/unittest/unittest.dart
+++ b/pkg/unittest/lib/unittest.dart
@@ -11,10 +11,10 @@
  *     dependencies:
  *       unittest:
  *         sdk: unittest
- *         
+ *
  * Then run 'pub install' from your project directory or using
  * the DartEditor.
- *         
+ *
  * Please see [Pub Getting Started](http://pub.dartlang.org/doc)
  * for more details about the pub package manager.
  *
@@ -148,21 +148,11 @@
 library unittest;
 
 import 'dart:isolate';
+import 'matcher.dart';
+export 'matcher.dart';
 
-part 'collection_matchers.dart';
-part 'config.dart';
-part 'core_matchers.dart';
-part 'description.dart';
-part 'expect.dart';
-part 'future_matchers.dart';
-part 'interfaces.dart';
-part 'map_matchers.dart';
-part 'matcher.dart';
-part 'mock.dart';
-part 'numeric_matchers.dart';
-part 'operator_matchers.dart';
-part 'string_matchers.dart';
-part 'test_case.dart';
+part 'src/config.dart';
+part 'src/test_case.dart';
 
 /** [Configuration] used by the unittest library. */
 Configuration _config = null;
@@ -860,6 +850,8 @@
     return;
   }
   _initialized = true;
+  // Hook our async guard into the matcher library.
+  wrapAsync = expectAsync1;
 
   _tests = <TestCase>[];
   _testRunner = _nextBatch;
diff --git a/pkg/unittest/vm_config.dart b/pkg/unittest/lib/vm_config.dart
similarity index 90%
rename from pkg/unittest/vm_config.dart
rename to pkg/unittest/lib/vm_config.dart
index e77f293..3a9efb8 100644
--- a/pkg/unittest/vm_config.dart
+++ b/pkg/unittest/lib/vm_config.dart
@@ -5,10 +5,10 @@
 /**
  * A simple unit test library for running tests on the VM.
  */
-#library('unittest_vm_config');
+library unittest_vm_config;
 
-#import('dart:io');
-#import('unittest.dart');
+import 'dart:io';
+import 'unittest.dart';
 
 class VmConfiguration extends Configuration {
   void onDone(int passed, int failed, int errors, List<TestCase> results,
diff --git a/pkg/unittest/test/instance_test.dart b/pkg/unittest/test/instance_test.dart
index f70127a..889d078 100644
--- a/pkg/unittest/test/instance_test.dart
+++ b/pkg/unittest/test/instance_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.
 
-#library('instance_test');
-#import('../../../pkg/unittest/unittest.dart');
-#source('test_utils.dart');
+library unittestTests;
+import '../../../pkg/unittest/lib/unittest.dart';
+
+part 'test_utils.dart';
 
 doesThrow() { throw 'X'; }
 
diff --git a/pkg/unittest/test/matchers_test.dart b/pkg/unittest/test/matchers_test.dart
index fe400f0..22f2f0c 100644
--- a/pkg/unittest/test/matchers_test.dart
+++ b/pkg/unittest/test/matchers_test.dart
@@ -2,9 +2,9 @@
 // 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('matcherTest');
-#import('../../../pkg/unittest/unittest.dart');
-#source('test_utils.dart');
+library unittestTests;
+import '../../../pkg/unittest/lib/unittest.dart';
+part 'test_utils.dart';
 
 doesNotThrow() {}
 doesThrow() { throw 'X'; }
@@ -126,17 +126,16 @@
     });
 
     test('throwsRangeError', () {
-      shouldPass(() { throw new RangeError.value(0); },
+      shouldPass(() { throw new RangeError(0); },
           throwsRangeError);
       shouldFail(() { throw new Exception(); },
           throwsRangeError,
         "Expected: throws an exception which matches RangeError "
-        "but:  exception <Exception> does not match "
-            "RangeError.");
+        "but:  exception <Exception> does not match RangeError.");
     });
 
     test('throwsNoSuchMethodError', () {
-      shouldPass(() { throw new NoSuchMethodError(null, '', null); },
+      shouldPass(() { throw new NoSuchMethodError(null, '', null, null); },
           throwsNoSuchMethodError);
       shouldFail(() { throw new Exception(); },
           throwsNoSuchMethodError,
@@ -145,14 +144,14 @@
             "NoSuchMethodError.");
     });
 
-    test('throwsNotImplementedException', () {
-      shouldPass(() { throw new NotImplementedException(''); },
-          throwsNotImplementedException);
+    test('throwsUnimplementedError', () {
+      shouldPass(() { throw new UnimplementedError(''); },
+          throwsUnimplementedError);
       shouldFail(() { throw new Exception(); },
-          throwsNotImplementedException,
-        "Expected: throws an exception which matches NotImplementedException "
+          throwsUnimplementedError,
+        "Expected: throws an exception which matches UnimplementedError "
         "but:  exception <Exception> does not match "
-            "NotImplementedException.");
+            "UnimplementedError.");
     });
 
     test('throwsNullPointerException', () {
diff --git a/pkg/unittest/test/mock_regexp_negative_test.dart b/pkg/unittest/test/mock_regexp_negative_test.dart
index 5f5267d..91811f5 100644
--- a/pkg/unittest/test/mock_regexp_negative_test.dart
+++ b/pkg/unittest/test/mock_regexp_negative_test.dart
@@ -2,8 +2,9 @@
 // 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('unittestTest');
-#import('../../../pkg/unittest/unittest.dart');
+library mock_regexp_negative_test;
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../../pkg/unittest/lib/mock.dart';
 
 main() {
   test('Mocking: RegExp CallMatcher bad', () {
diff --git a/pkg/unittest/test/mock_stepwise_negative_test.dart b/pkg/unittest/test/mock_stepwise_negative_test.dart
index 9a29976..b6bbaf8 100644
--- a/pkg/unittest/test/mock_stepwise_negative_test.dart
+++ b/pkg/unittest/test/mock_stepwise_negative_test.dart
@@ -2,8 +2,9 @@
 // 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('unittestTest');
-#import('../../../pkg/unittest/unittest.dart');
+library mock_stepwise_negative_test;
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../../pkg/unittest/lib/mock.dart';
 
 main() {
   test('Mocking: stepwiseValidate', () {
diff --git a/pkg/unittest/test/mock_test.dart b/pkg/unittest/test/mock_test.dart
index ea6426c..7a6534d 100644
--- a/pkg/unittest/test/mock_test.dart
+++ b/pkg/unittest/test/mock_test.dart
@@ -2,8 +2,9 @@
 // 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('unittestTest');
-#import('../../../pkg/unittest/unittest.dart');
+library mock_test;
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../../pkg/unittest/lib/mock.dart';
 
 class MockList extends Mock implements List {
 }
diff --git a/pkg/unittest/test/test_utils.dart b/pkg/unittest/test/test_utils.dart
index 3d61abd..cdacdfc 100644
--- a/pkg/unittest/test/test_utils.dart
+++ b/pkg/unittest/test/test_utils.dart
@@ -2,6 +2,8 @@
 // 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 unittestTests;
+
 int errorCount;
 String errorString;
 var _testHandler = null;
diff --git a/pkg/unittest/test/unittest_test.dart b/pkg/unittest/test/unittest_test.dart
index ecf6c89..c7a474f 100644
--- a/pkg/unittest/test/unittest_test.dart
+++ b/pkg/unittest/test/unittest_test.dart
@@ -9,9 +9,9 @@
 // so the outer timeout doesn't fire. So I removed all such tests.
 // I'd like to revisit this at some point.
 
-#library('unittestTest');
-#import('dart:isolate');
-#import('../../../pkg/unittest/unittest.dart');
+library unittestTest;
+import 'dart:isolate';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 var tests; // array of test names
 var expected; // array of test expected results (from buildStatusString)
diff --git a/pkg/unittest/test_controller.js b/pkg/unittest/test_controller.js
index 94c9f2f..5a7db1e 100644
--- a/pkg/unittest/test_controller.js
+++ b/pkg/unittest/test_controller.js
@@ -14,7 +14,12 @@
 // Set window onerror to make sure that we catch test harness errors across all
 // browsers.
 window.onerror = function (message, url, lineNumber) {
-  showErrorAndExit("\n\n" + url + ":" + lineNumber + ":\n" + message + "\n\n");
+  if (url) {
+    showErrorAndExit(
+        "\n\n" + url + ":" + lineNumber + ":\n" + message + "\n\n");
+  } else {
+    showErrorAndExit(message);
+  }
   window.postMessage('unittest-suite-external-error', '*');
 };
 
diff --git a/pkg/webdriver/base64decoder.dart b/pkg/webdriver/lib/src/base64decoder.dart
similarity index 86%
rename from pkg/webdriver/base64decoder.dart
rename to pkg/webdriver/lib/src/base64decoder.dart
index 343030f..616f2f4 100644
--- a/pkg/webdriver/base64decoder.dart
+++ b/pkg/webdriver/lib/src/base64decoder.dart
@@ -1,3 +1,9 @@
+// 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.
+
+part of webdriver;
+
 /**
  * A simple base64 decoder class, used to decode web browser screenshots
  * returned by WebDriver.
diff --git a/pkg/webdriver/webdriver.dart b/pkg/webdriver/lib/webdriver.dart
similarity index 98%
rename from pkg/webdriver/webdriver.dart
rename to pkg/webdriver/lib/webdriver.dart
index 64785fb..efb6a41 100644
--- a/pkg/webdriver/webdriver.dart
+++ b/pkg/webdriver/lib/webdriver.dart
@@ -1,9 +1,15 @@
-#library('webdriver');
-#import('dart:json');
-#import('dart:uri');
-#import('dart:io');
-#import('dart:math');
-#source('base64decoder.dart');
+// 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.
+
+library webdriver;
+
+import 'dart:json';
+import 'dart:uri';
+import 'dart:io';
+import 'dart:math';
+
+part 'src/base64decoder.dart';
 
 /**
  * WebDriver bindings for Dart.
diff --git a/pkg/webdriver/pubspec.yaml b/pkg/webdriver/pubspec.yaml
new file mode 100644
index 0000000..d5bd4fa
--- /dev/null
+++ b/pkg/webdriver/pubspec.yaml
@@ -0,0 +1,5 @@
+name: webdriver
+description: >
+ Provides WedDriver bindings for Dart. These use the WebDriver JSON
+ interface, and as such, require the use of the WebDriver remote server.
+
diff --git a/pkg/webdriver/test/webdrivertest.dart b/pkg/webdriver/test/webdrivertest.dart
index af7655b..69b8073 100644
--- a/pkg/webdriver/test/webdrivertest.dart
+++ b/pkg/webdriver/test/webdrivertest.dart
@@ -1,6 +1,6 @@
-#library('webdriver_test');
-#import('../webdriver.dart');
-#import('../../../pkg/unittest/unittest.dart');
+library webdriver_test;
+import '../webdriver.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 WebDriver web_driver;
 
diff --git a/runtime/bin/bin.gypi b/runtime/bin/bin.gypi
index c851c97..3cde1ee 100644
--- a/runtime/bin/bin.gypi
+++ b/runtime/bin/bin.gypi
@@ -84,7 +84,7 @@
         'io.dart',
       ],
       'includes': [
-        '../../lib/io/iolib_sources.gypi',
+        '../../sdk/lib/io/iolib_sources.gypi',
       ],
       'actions': [
         {
@@ -322,6 +322,9 @@
         '../vm/debugger_api_impl.cc',
         '<(version_cc_file)',
       ],
+      'defines': [
+        'DART_SHARED_LIB',
+      ],
     },
     {
       # Completely statically linked binary for generating snapshots.
@@ -472,6 +475,13 @@
           'link_settings': {
             'libraries': [ '-lws2_32.lib', '-lRpcrt4.lib' ],
           },
+          # Generate an import library on Windows, by exporting a function.
+          # Extensions use this import library to link to the API in dart.exe.
+          'msvs_settings': {
+            'VCLinkerTool': {
+              'AdditionalOptions': [ '/EXPORT:Dart_True' ],
+            },
+          },
        }]],
     },
     {
@@ -543,6 +553,7 @@
         'test_extension_dllmain_win.cc',
       ],
       'defines': [
+        # The only effect of DART_SHARED_LIB is to export the Dart API entries.
         'DART_SHARED_LIB',
       ],
       'conditions': [
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 5807fc6..27b7e09 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -106,7 +106,7 @@
       throw "Not a known scheme: $uri";
   }
 
-  if (isWindows) {
+  if (isWindows && path.startsWith("/")) {
     // For Windows we need to massage the paths a bit according to
     // http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx
     //
diff --git a/runtime/bin/builtin_natives.cc b/runtime/bin/builtin_natives.cc
index 995207c..68258c3 100644
--- a/runtime/bin/builtin_natives.cc
+++ b/runtime/bin/builtin_natives.cc
@@ -103,17 +103,16 @@
 // test/debug functionality in standalone dart mode.
 
 void Builtin::PrintString(FILE* out, Dart_Handle str) {
-  const char* chars = NULL;
-
-  Dart_Handle result = Dart_StringToCString(str, &chars);
+  intptr_t length = 0;
+  uint8_t* chars = NULL;
+  Dart_Handle result = Dart_StringToUTF8(str, &chars, &length);
   if (Dart_IsError(result)) {
     // TODO(turnidge): Consider propagating some errors here.  What if
     // an isolate gets interrupted by the embedder in the middle of
-    // Dart_StringToBytes?  We need to make sure not to swallow the
+    // Dart_StringToUTF8?  We need to make sure not to swallow the
     // interrupt.
     fputs(Dart_GetError(result), out);
   } else {
-    intptr_t length = strlen(chars);
     fwrite(chars, sizeof(*chars), length, out);
   }
   fputc('\n', out);
diff --git a/runtime/bin/crypto_sources.gypi b/runtime/bin/crypto_sources.gypi
index 302edbe..fc8f00f 100644
--- a/runtime/bin/crypto_sources.gypi
+++ b/runtime/bin/crypto_sources.gypi
@@ -6,15 +6,15 @@
 #
 # TODO(ager): ../lib/crypto/crypto_vm.dart should be removed when the
 # VM can use the #source directive for libraries.  At that point
-# ../../lib/crypto/crypto.dart should be the only crypto library file.
+# ../../sdk/lib/crypto/crypto.dart should be the only crypto library file.
 {
   'sources': [
     '../lib/crypto/crypto_vm.dart',
-    '../../lib/crypto/crypto_utils.dart',
-    '../../lib/crypto/hash_utils.dart',
-    '../../lib/crypto/hmac.dart',
-    '../../lib/crypto/md5.dart',
-    '../../lib/crypto/sha1.dart',
-    '../../lib/crypto/sha256.dart',
+    '../../sdk/lib/crypto/crypto_utils.dart',
+    '../../sdk/lib/crypto/hash_utils.dart',
+    '../../sdk/lib/crypto/hmac.dart',
+    '../../sdk/lib/crypto/md5.dart',
+    '../../sdk/lib/crypto/sha1.dart',
+    '../../sdk/lib/crypto/sha256.dart',
   ],
 }
diff --git a/runtime/bin/json_sources.gypi b/runtime/bin/json_sources.gypi
index c41f93e..6c9ca3d 100644
--- a/runtime/bin/json_sources.gypi
+++ b/runtime/bin/json_sources.gypi
@@ -5,6 +5,6 @@
 # This file contains all sources for the dart:io library.
 {
   'sources': [
-    '../../lib/json/json.dart',
+    '../../sdk/lib/json/json.dart',
   ],
 }
diff --git a/runtime/bin/uri_sources.gypi b/runtime/bin/uri_sources.gypi
index e100e90..36a9e3c 100644
--- a/runtime/bin/uri_sources.gypi
+++ b/runtime/bin/uri_sources.gypi
@@ -5,8 +5,8 @@
 # This file contains all sources for the dart:uri library.
 {
   'sources': [
-    '../../lib/uri/uri.dart',
-    '../../lib/uri/helpers.dart',
-    '../../lib/uri/encode_decode.dart',
+    '../../sdk/lib/uri/uri.dart',
+    '../../sdk/lib/uri/helpers.dart',
+    '../../sdk/lib/uri/encode_decode.dart',
   ],
 }
diff --git a/runtime/bin/utf_sources.gypi b/runtime/bin/utf_sources.gypi
index 4698fcd..a8fc95b 100644
--- a/runtime/bin/utf_sources.gypi
+++ b/runtime/bin/utf_sources.gypi
@@ -6,7 +6,7 @@
 #
 # TODO(ager): ../lib/utf/utf_vm.dart should be removed when the
 # VM can use the #source directive for libraries.  At that point
-# ../../lib/utf/utf.dart should be the only utf library file.
+# ../../sdk/lib/utf/utf.dart should be the only utf library file.
 {
   'sources': [
     # The utf_vm.dart file needs to be the first source file. It contains
@@ -15,9 +15,9 @@
     # in the order they are listed.
     '../lib/utf/utf_vm.dart',
 
-    '../../lib/utf/utf_core.dart',
-    '../../lib/utf/utf8.dart',
-    '../../lib/utf/utf16.dart',
-    '../../lib/utf/utf32.dart',
+    '../../sdk/lib/utf/utf_core.dart',
+    '../../sdk/lib/utf/utf8.dart',
+    '../../sdk/lib/utf/utf16.dart',
+    '../../sdk/lib/utf/utf32.dart',
   ],
 }
diff --git a/runtime/dart-runtime.gyp b/runtime/dart-runtime.gyp
index 8eb37ec..9286e71 100644
--- a/runtime/dart-runtime.gyp
+++ b/runtime/dart-runtime.gyp
@@ -67,6 +67,7 @@
         '<(version_cc_file)',
       ],
       'defines': [
+        # The only effect of DART_SHARED_LIB is to export the Dart API entries.
         'DART_SHARED_LIB',
       ],
       'direct_dependent_settings': {
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 17c2dc0..33f1775 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -1455,15 +1455,16 @@
  * Gets a UTF-8 encoded representation of a String.
  *
  * \param str A string.
- * \param utf8_array An array allocated by the caller, used to return
- *   the array of UTF-8 encoded characters.
- * \param length Used to pass in the length of the provided array.
- *   Used to return the length of the array which was actually used.
+ * \param utf8_array Returns the String represented as UTF-8 code
+ *   units.  This UTF-8 array is scope allocated and is only valid
+ *   until the next call to Dart_ExitScope.
+ * \param length Used to return the length of the array which was
+ *   actually used.
  *
  * \return A valid handle if no error occurs during the operation.
  */
 DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str,
-                                          uint8_t* utf8_array,
+                                          uint8_t** utf8_array,
                                           intptr_t* length);
 
 /**
diff --git a/runtime/lib/function_patch.dart b/runtime/lib/function_patch.dart
index c90dc6e..a82084e 100644
--- a/runtime/lib/function_patch.dart
+++ b/runtime/lib/function_patch.dart
@@ -6,6 +6,6 @@
   /* patch */ static apply(Function function,
                            List positionalArguments,
                            [Map<String,Dynamic> namedArguments]) {
-    throw new NotImplementedException('Function.apply not implemented');
+    throw new UnimplementedError('Function.apply not implemented');
   }
 }
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index d2fec8b..2fdef36 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -335,7 +335,7 @@
 static bool RunIsolate(uword parameter) {
   Isolate* isolate = reinterpret_cast<Isolate*>(parameter);
   SpawnState* state = reinterpret_cast<SpawnState*>(isolate->spawn_data());
-  isolate->set_spawn_data(NULL);
+  isolate->set_spawn_data(0);
   {
     StartIsolateScope start_scope(isolate);
     StackZone zone(isolate);
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 0233d09..969e1ae 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -95,7 +95,7 @@
 
 abstract class _LocalMirrorImpl implements Mirror {
   int get hashCode {
-    throw new NotImplementedException('Mirror.hashCode is not implemented');
+    throw new UnimplementedError('Mirror.hashCode is not implemented');
   }
 
   // Local mirrors always return the same MirrorSystem.  This field
@@ -144,7 +144,7 @@
                                 List positionalArguments,
                                 [Map<String,Dynamic> namedArguments]) {
     if (namedArguments != null) {
-      throw new NotImplementedException(
+      throw new UnimplementedError(
           'named argument support is not implemented');
     }
     // Walk the arguments and make sure they are legal.
@@ -300,14 +300,14 @@
   final MethodMirror function;
 
   String get source {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClosureMirror.source is not implemented');
   }
 
   Future<InstanceMirror> apply(List<Object> positionalArguments,
                                [Map<String,Object> namedArguments]) {
     if (namedArguments != null) {
-      throw new NotImplementedException(
+      throw new UnimplementedError(
           'named argument support is not implemented');
     }
     // Walk the arguments and make sure they are legal.
@@ -326,7 +326,7 @@
   }
 
   Future<InstanceMirror> findInContext(String name) {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClosureMirror.findInContext() is not implemented');
   }
 
@@ -345,13 +345,13 @@
       } else if (typeName == 'void') {
         return mirrors.voidType;
       } else {
-        throw new NotImplementedException(
+        throw new UnimplementedError(
             "Mirror for type '$typeName' is not implemented");
       }
     }
     var resolved = mirrors.libraries[libraryName].members[typeName];
     if (resolved == null) {
-      throw new NotImplementedException(
+      throw new UnimplementedError(
           "Mirror for type '$typeName' is not implemented");
     }
     return resolved;
@@ -403,7 +403,7 @@
   final bool isTopLevel = true;
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClassMirror.location is not implemented');
   }
 
@@ -485,17 +485,17 @@
   Map<String, TypeVariableMirror> typeVariables;
 
   Map<String, TypeMirror> get typeArguments {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClassMirror.typeArguments is not implemented');
   }
 
   bool get isOriginalDeclaration {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClassMirror.isOriginalDeclaration is not implemented');
   }
 
   ClassMirror get genericDeclaration {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ClassMirror.originalDeclaration is not implemented');
   }
 
@@ -505,7 +505,7 @@
                                      List positionalArguments,
                                      [Map<String,Dynamic> namedArguments]) {
     if (namedArguments != null) {
-      throw new NotImplementedException(
+      throw new UnimplementedError(
           'named argument support is not implemented');
     }
     // Walk the arguments and make sure they are legal.
@@ -610,7 +610,7 @@
   final bool isTopLevel = false;
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'TypeVariableMirror.location is not implemented');
   }
 
@@ -654,7 +654,7 @@
   final bool isTopLevel = true;
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'TypedefMirror.location is not implemented');
   }
 
@@ -702,7 +702,7 @@
   final bool isTopLevel = false;
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'LibraryMirror.location is not implemented');
   }
 
@@ -799,7 +799,7 @@
   bool get isTopLevel =>  owner is LibraryMirror;
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'MethodMirror.location is not implemented');
   }
 
@@ -819,7 +819,7 @@
   bool get isRegularMethod => !isGetter && !isSetter && !isConstructor;
 
   TypeMirror get isOperator {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'MethodMirror.isOperator is not implemented');
   }
 
@@ -891,7 +891,7 @@
   }
 
   SourceLocation get location {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'VariableMirror.location is not implemented');
   }
 
@@ -917,12 +917,12 @@
   final bool isOptional;
 
   String get defaultValue {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ParameterMirror.defaultValue is not implemented');
   }
 
   bool get hasDefaultValue {
-    throw new NotImplementedException(
+    throw new UnimplementedError(
         'ParameterMirror.hasDefaultValue is not implemented');
   }
 }
@@ -956,7 +956,7 @@
       }
     } else {
       // Make a remote mirror system
-      throw new NotImplementedException(
+      throw new UnimplementedError(
           'Remote mirror support is not implemented');
     }
     return completer.future;
diff --git a/runtime/lib/mirrors_sources.gypi b/runtime/lib/mirrors_sources.gypi
index 1bce812..8f1f805 100644
--- a/runtime/lib/mirrors_sources.gypi
+++ b/runtime/lib/mirrors_sources.gypi
@@ -6,7 +6,7 @@
 
 {
   'sources': [
-    '../../lib/mirrors/mirrors.dart',
+    '../../sdk/lib/mirrors/mirrors.dart',
     'mirrors.cc',
     'mirrors.h',
     'mirrors_impl.dart',
diff --git a/runtime/tests/vm/dart/isolate_mirror_remote_test.dart b/runtime/tests/vm/dart/isolate_mirror_remote_test.dart
index e1a1c64..6bf6537 100644
--- a/runtime/tests/vm/dart/isolate_mirror_remote_test.dart
+++ b/runtime/tests/vm/dart/isolate_mirror_remote_test.dart
@@ -27,6 +27,6 @@
     mirrorSystemOf(sp).then(testMirrorSystem);
     Expect.fail('Should not reach here.  Remote isolates not implemented.');
   } catch (exception) {
-    Expect.isTrue(exception is NotImplementedException);
+    Expect.isTrue(exception is UnimplementedError);
   }
 }
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index 96ff9af..3498c6b 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.h
@@ -906,7 +906,7 @@
     : AstNode(token_pos),
       kind_(kind),
       label_(label),
-      inlined_finally_list_(NULL) {
+      inlined_finally_list_() {
     ASSERT(label_ != NULL);
     ASSERT(kind_ == Token::kBREAK || kind_ == Token::kCONTINUE);
     if (kind_ == Token::kCONTINUE) {
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index ccc840c..29a2417 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -233,7 +233,8 @@
 static char* ComputeDart2JSPath(const char* arg) {
   char buffer[2048];
   char* dart2js_path = strdup(File::GetCanonicalPath(arg));
-  const char* compiler_path = "%s%slib%scompiler%scompiler.dart";
+  const char* compiler_path =
+      "%s%ssdk%slib%s_internal%scompiler%scompiler.dart";
   const char* path_separator = File::PathSeparator();
   ASSERT(path_separator != NULL && strlen(path_separator) == 1);
   char* ptr = strrchr(dart2js_path, *path_separator);
@@ -243,6 +244,8 @@
                 dart2js_path,
                 path_separator,
                 path_separator,
+                path_separator,
+                path_separator,
                 path_separator);
     if (File::Exists(buffer)) {
       break;
@@ -271,7 +274,8 @@
   char* dart_root = ComputeDart2JSPath(Benchmark::Executable());
   char* script = NULL;
   if (dart_root != NULL) {
-    const char* kFormatStr ="#import('%s/lib/compiler/compiler.dart');";
+    const char* kFormatStr =
+        "#import('%s/sdk/lib/_internal/compiler/compiler.dart');";
     intptr_t len = OS::SNPrint(NULL, 0, kFormatStr, dart_root) + 1;
     script = reinterpret_cast<char*>(malloc(len));
     EXPECT(script != NULL);
@@ -282,7 +286,7 @@
     EXPECT_VALID(lib);
   } else {
     Dart_Handle lib = TestCase::LoadTestScript(
-        "#import('lib/compiler/compiler.dart');",
+        "#import('sdk/lib/_internal/compiler/compiler.dart');",
         reinterpret_cast<Dart_NativeEntryResolver>(NativeResolver));
     EXPECT_VALID(lib);
   }
diff --git a/runtime/vm/cha.cc b/runtime/vm/cha.cc
index 63dde76..01aabcc 100644
--- a/runtime/vm/cha.cc
+++ b/runtime/vm/cha.cc
@@ -70,6 +70,27 @@
 }
 
 
+bool CHA::HasOverride(const Class& cls, const String& function_name) {
+  const GrowableObjectArray& cls_direct_subclasses =
+      GrowableObjectArray::Handle(cls.direct_subclasses());
+  if (cls_direct_subclasses.IsNull()) {
+    return false;
+  }
+  Class& direct_subclass = Class::Handle();
+  for (intptr_t i = 0; i < cls_direct_subclasses.Length(); i++) {
+    direct_subclass ^= cls_direct_subclasses.At(i);
+    if (direct_subclass.LookupDynamicFunction(function_name) !=
+        Function::null()) {
+      return true;
+    }
+    if (HasOverride(direct_subclass, function_name)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+
 ZoneGrowableArray<Function*>* CHA::GetNamedInstanceFunctionsOf(
     const ZoneGrowableArray<intptr_t>& cids,
     const String& function_name) {
diff --git a/runtime/vm/cha.h b/runtime/vm/cha.h
index 9eb25ff..d20445f 100644
--- a/runtime/vm/cha.h
+++ b/runtime/vm/cha.h
@@ -9,6 +9,7 @@
 
 namespace dart {
 
+class Class;
 class Function;
 template <typename T> class ZoneGrowableArray;
 class String;
@@ -33,6 +34,9 @@
   // Returns an array of functions overriding the given function.
   // Must not be called for a function of class Object.
   static ZoneGrowableArray<Function*>* GetOverridesOf(const Function& function);
+
+  // Returns true if any subclass of 'cls' contains the function.
+  static bool HasOverride(const Class& cls, const String& function_name);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index dec72be..f2bb1dc 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -711,6 +711,8 @@
                             parameterized_class.NumTypeParameters();
     type_parameter.set_index(type_parameter.index() + offset);
     type_parameter.set_is_finalized();
+    // TODO(regis): We are not able to finalize the bound here without getting
+    // into cycles. Revisit.
     // We do not canonicalize type parameters.
     return type_parameter.raw();
   }
@@ -953,6 +955,8 @@
 }
 
 
+// Check if an instance field or method of same name exists
+// in any super class.
 static RawClass* FindSuperOwnerOfInstanceMember(const Class& cls,
                                                 const String& name) {
   Class& super_class = Class::Handle();
@@ -960,7 +964,6 @@
   Field& field = Field::Handle();
   super_class = cls.SuperClass();
   while (!super_class.IsNull()) {
-    // Check if an instance member of same name exists in any super class.
     function = super_class.LookupFunction(name);
     if (!function.IsNull() && !function.is_static()) {
       return super_class.raw();
@@ -975,13 +978,13 @@
 }
 
 
+// Check if an instance method of same name exists in any super class.
 static RawClass* FindSuperOwnerOfFunction(const Class& cls,
                                           const String& name) {
   Class& super_class = Class::Handle();
   Function& function = Function::Handle();
   super_class = cls.SuperClass();
   while (!super_class.IsNull()) {
-    // Check if a function of same name exists in any super class.
     function = super_class.LookupFunction(name);
     if (!function.IsNull() && !function.is_static()) {
       return super_class.raw();
@@ -1021,8 +1024,6 @@
   // The only compile errors we report are therefore:
   // - a getter having the same name as a method (but not a getter) in a super
   //   class or in a subclass.
-  // - a setter having the same name as a method (but not a setter) in a super
-  //   class or in a subclass.
   // - a static field, instance field, or static method (but not an instance
   //   method) having the same name as an instance member in a super class.
 
@@ -1040,18 +1041,36 @@
     type = FinalizeType(cls, type, kCanonicalize);
     field.set_type(type);
     name = field.name();
-    super_class = FindSuperOwnerOfInstanceMember(cls, name);
-    if (!super_class.IsNull()) {
-      const String& class_name = String::Handle(cls.Name());
-      const String& super_class_name = String::Handle(super_class.Name());
-      const Script& script = Script::Handle(cls.script());
-      ReportError(script, field.token_pos(),
-                  "field '%s' of class '%s' conflicts with instance "
-                  "member '%s' of super class '%s'",
-                  name.ToCString(),
-                  class_name.ToCString(),
-                  name.ToCString(),
-                  super_class_name.ToCString());
+    if (field.is_static()) {
+      super_class = FindSuperOwnerOfInstanceMember(cls, name);
+      if (!super_class.IsNull()) {
+        const String& class_name = String::Handle(cls.Name());
+        const String& super_class_name = String::Handle(super_class.Name());
+        const Script& script = Script::Handle(cls.script());
+        ReportError(script, field.token_pos(),
+                    "static field '%s' of class '%s' conflicts with "
+                    "instance member '%s' of super class '%s'",
+                    name.ToCString(),
+                    class_name.ToCString(),
+                    name.ToCString(),
+                    super_class_name.ToCString());
+      }
+    } else {
+      // Instance field. Check whether the field overrides a method
+      // (but not getter).
+      super_class = FindSuperOwnerOfFunction(cls, name);
+      if (!super_class.IsNull()) {
+        const String& class_name = String::Handle(cls.Name());
+        const String& super_class_name = String::Handle(super_class.Name());
+        const Script& script = Script::Handle(cls.script());
+        ReportError(script, field.token_pos(),
+                    "field '%s' of class '%s' conflicts with method '%s' "
+                    "of super class '%s'",
+                    name.ToCString(),
+                    class_name.ToCString(),
+                    name.ToCString(),
+                    super_class_name.ToCString());
+      }
     }
   }
   // Collect interfaces, super interfaces, and super classes of this class.
@@ -1129,22 +1148,9 @@
                     name.ToCString(),
                     super_class_name.ToCString());
       }
-    } else if (function.IsSetterFunction()) {
-      name = Field::NameFromSetter(function_name);
-      super_class = FindSuperOwnerOfFunction(cls, name);
-      if (!super_class.IsNull()) {
-        const String& class_name = String::Handle(cls.Name());
-        const String& super_class_name = String::Handle(super_class.Name());
-        const Script& script = Script::Handle(cls.script());
-        ReportError(script, function.token_pos(),
-                    "setter '%s' of class '%s' conflicts with "
-                    "function '%s' of super class '%s'",
-                    name.ToCString(),
-                    class_name.ToCString(),
-                    name.ToCString(),
-                    super_class_name.ToCString());
-      }
-    } else {
+    } else if (!function.IsSetterFunction()) {
+      // A function cannot conflict with a setter, since they cannot
+      // have the same name. Thus, we do not need to check setters.
       name = Field::GetterName(function_name);
       super_class = FindSuperOwnerOfFunction(cls, name);
       if (!super_class.IsNull()) {
@@ -1159,20 +1165,6 @@
                     function_name.ToCString(),
                     super_class_name.ToCString());
       }
-      name = Field::SetterName(function_name);
-      super_class = FindSuperOwnerOfFunction(cls, name);
-      if (!super_class.IsNull()) {
-        const String& class_name = String::Handle(cls.Name());
-        const String& super_class_name = String::Handle(super_class.Name());
-        const Script& script = Script::Handle(cls.script());
-        ReportError(script, function.token_pos(),
-                    "function '%s' of class '%s' conflicts with "
-                    "setter '%s' of super class '%s'",
-                    function_name.ToCString(),
-                    class_name.ToCString(),
-                    function_name.ToCString(),
-                    super_class_name.ToCString());
-      }
     }
   }
 }
diff --git a/runtime/vm/code_generator.h b/runtime/vm/code_generator.h
index 34b60f0..7716ccf 100644
--- a/runtime/vm/code_generator.h
+++ b/runtime/vm/code_generator.h
@@ -84,6 +84,7 @@
   V(UnboxInteger)                                                              \
   V(CheckClass)                                                                \
   V(CheckSmi)                                                                  \
+  V(CheckArrayBound)                                                           \
   V(AtCall)                                                                    \
   V(NumReasons)                                                                \
 
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 7007b6a..16c426e 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -132,10 +132,7 @@
                        &CompilerStats::graphbuilder_timer,
                        isolate);
       if (optimized) {
-        // Transition to optimized code only from unoptimized code ...
-        // for now.
         ASSERT(parsed_function.function().HasCode());
-        ASSERT(!parsed_function.function().HasOptimizedCode());
         // Extract type feedback before the graph is built, as the graph
         // builder uses it to attach it to nodes.
         // Do not use type feedback to optimize a function that was
@@ -151,7 +148,8 @@
 
       // Build the flow graph.
       FlowGraphBuilder builder(parsed_function);
-      flow_graph = builder.BuildGraph(FlowGraphBuilder::kNotInlining);
+      flow_graph = builder.BuildGraph(FlowGraphBuilder::kNotInlining,
+                                      0);  // The initial loop depth is zero.
     }
 
     if (optimized) {
@@ -280,8 +278,8 @@
       graph_compiler.FinalizeExceptionHandlers(code);
       graph_compiler.FinalizeComments(code);
       if (optimized) {
+        CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
         function.SetCode(code);
-        CodePatcher::PatchEntry(Code::Handle(function.unoptimized_code()));
         if (FLAG_trace_compiler) {
           OS::Print("--> patching entry %#"Px"\n",
                     Code::Handle(function.unoptimized_code()).EntryPoint());
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 7194b57..202a81f 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -33,7 +33,6 @@
 namespace dart {
 
 DECLARE_FLAG(bool, print_class_table);
-DECLARE_FLAG(bool, use_cha);
 
 ThreadLocalKey Api::api_native_key_ = Thread::kUnsetThreadLocalKey;
 
@@ -143,7 +142,7 @@
     }                                                                          \
     return type::Handle(iso);                                                  \
   }
-CLASS_LIST_NO_OBJECT(DEFINE_UNWRAP)
+CLASS_LIST_FOR_HANDLES(DEFINE_UNWRAP)
 #undef DEFINE_UNWRAP
 
 
@@ -1643,6 +1642,9 @@
                                              const char** cstr) {
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
+  if (cstr == NULL) {
+    RETURN_NULL_ERROR(cstr);
+  }
   const String& str_obj = Api::UnwrapStringHandle(isolate, object);
   if (str_obj.IsNull()) {
     RETURN_TYPE_ERROR(isolate, object, String);
@@ -1661,20 +1663,27 @@
 
 
 DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str,
-                                          uint8_t* utf8_array,
+                                          uint8_t** utf8_array,
                                           intptr_t* length) {
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
+  if (utf8_array == NULL) {
+    RETURN_NULL_ERROR(utf8_array);
+  }
+  if (length == NULL) {
+    RETURN_NULL_ERROR(length);
+  }
   const String& str_obj = Api::UnwrapStringHandle(isolate, str);
   if (str_obj.IsNull()) {
     RETURN_TYPE_ERROR(isolate, str, String);
   }
-  intptr_t str_len = str_obj.Length();
-  if (str_len > *length) {
-    return Api::NewError("Input array is not large enough to hold the result");
+  intptr_t str_len = Utf8::Length(str_obj);
+  *utf8_array = Api::TopScope(isolate)->zone()->Alloc<uint8_t>(str_len);
+  if (*utf8_array == NULL) {
+    return Api::NewError("Unable to allocate memory");
   }
-  str_obj.ToUTF8(utf8_array, str_len);
-  *length= str_len;
+  str_obj.ToUTF8(*utf8_array, str_len);
+  *length = str_len;
   return Api::Success(isolate);
 }
 
@@ -4002,45 +4011,11 @@
 }
 
 
-// Removes optimized code once we load more classes, since --use_cha based
-// optimizations may have become invalid.
-// TODO(srdjan): Note which functions use which CHA decision and deoptimize
-// only the necessary ones.
-static void RemoveOptimizedCode() {
-  ASSERT(FLAG_use_cha);
-  // Deoptimize all live frames.
-  DeoptimizeAll();
-  // Switch all functions' code to unoptimized.
-  const ClassTable& class_table = *Isolate::Current()->class_table();
-  Class& cls = Class::Handle();
-  Array& array = Array::Handle();
-  Function& function = Function::Handle();
-  const intptr_t num_cids = class_table.NumCids();
-  for (intptr_t i = kInstanceCid; i < num_cids; i++) {
-    if (!class_table.HasValidClassAt(i)) continue;
-    cls = class_table.At(i);
-    ASSERT(!cls.IsNull());
-    array = cls.functions();
-    intptr_t num_functions = array.IsNull() ? 0 : array.Length();
-    for (intptr_t f = 0; f < num_functions; f++) {
-      function ^= array.At(f);
-      ASSERT(!function.IsNull());
-      if (function.HasOptimizedCode()) {
-        function.SwitchToUnoptimizedCode();
-      }
-    }
-  }
-}
-
-
 DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url,
                                         Dart_Handle source) {
   TIMERSCOPE(time_script_loading);
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
-  if (FLAG_use_cha) {
-    RemoveOptimizedCode();
-  }
   const String& url_str = Api::UnwrapStringHandle(isolate, url);
   if (url_str.IsNull()) {
     RETURN_TYPE_ERROR(isolate, url, String);
@@ -4078,9 +4053,6 @@
   if (buffer == NULL) {
     RETURN_NULL_ERROR(buffer);
   }
-  if (FLAG_use_cha) {
-    RemoveOptimizedCode();
-  }
   const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
   if (!snapshot->IsScriptSnapshot()) {
     return Api::NewError("%s expects parameter 'buffer' to be a script type"
@@ -4252,9 +4224,6 @@
   TIMERSCOPE(time_script_loading);
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
-  if (FLAG_use_cha) {
-    RemoveOptimizedCode();
-  }
   const String& url_str = Api::UnwrapStringHandle(isolate, url);
   if (url_str.IsNull()) {
     RETURN_TYPE_ERROR(isolate, url, String);
@@ -4344,9 +4313,6 @@
   TIMERSCOPE(time_script_loading);
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
-  if (FLAG_use_cha) {
-    RemoveOptimizedCode();
-  }
   const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
   if (lib.IsNull()) {
     RETURN_TYPE_ERROR(isolate, library, Library);
@@ -4372,9 +4338,6 @@
   TIMERSCOPE(time_script_loading);
   Isolate* isolate = Isolate::Current();
   DARTSCOPE(isolate);
-  if (FLAG_use_cha) {
-    RemoveOptimizedCode();
-  }
   const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
   if (lib.IsNull()) {
     RETURN_TYPE_ERROR(isolate, library, Library);
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index 28c24dc..674b643c 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -81,7 +81,7 @@
 #define DECLARE_UNWRAP(Type)                                                   \
   static const Type& Unwrap##Type##Handle(Isolate* isolate,                    \
                                           Dart_Handle object);
-  CLASS_LIST_NO_OBJECT(DECLARE_UNWRAP)
+  CLASS_LIST_FOR_HANDLES(DECLARE_UNWRAP)
 #undef DECLARE_UNWRAP
 
   // Validates and converts the passed in handle as a local handle.
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc
index 26e2eb1..0ead0a2 100644
--- a/runtime/vm/flow_graph.cc
+++ b/runtime/vm/flow_graph.cc
@@ -940,7 +940,9 @@
     exits.Sort(LowestBlockIdFirst);
     // Create a join of the returns.
     JoinEntryInstr* join =
-        new JoinEntryInstr(++max_block_id_, CatchClauseNode::kInvalidTryIndex);
+        new JoinEntryInstr(++max_block_id_,
+                           CatchClauseNode::kInvalidTryIndex,
+                           caller_entry->loop_depth());
     for (intptr_t i = 0; i < exits.length(); ++i) {
       ReturnInstr* exit_instr = exits[i]->last_instruction()->AsReturn();
       ASSERT(exit_instr != NULL);
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 5684503..96d9e43 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -162,7 +162,9 @@
     temp_index_ = true_fragment.temp_index();
   } else {
     JoinEntryInstr* join =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           owner()->try_index(),
+                           loop_depth());
     true_exit->Goto(join);
     false_exit->Goto(join);
     exit_ = join;
@@ -191,7 +193,9 @@
     Append(test_fragment);
   } else {
     JoinEntryInstr* join =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           owner()->try_index(),
+                           loop_depth() + 1);
     join->LinkTo(test_fragment.entry());
     Goto(join);
     body_exit->Goto(join);
@@ -303,7 +307,9 @@
   ASSERT(!branches.is_empty());
   for (intptr_t i = 0; i < branches.length(); i++) {
     TargetEntryInstr* target =
-        new TargetEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new TargetEntryInstr(owner()->AllocateBlockId(),
+                             owner()->try_index(),
+                             loop_depth());
     *(branches[i]) = target;
     target->Goto(join);
   }
@@ -326,13 +332,17 @@
 
   if (branches.length() == 1) {
     TargetEntryInstr* target =
-        new TargetEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new TargetEntryInstr(owner()->AllocateBlockId(),
+                             owner()->try_index(),
+                             loop_depth());
     *(branches[0]) = target;
     return target;
   }
 
   JoinEntryInstr* join =
-      new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+      new JoinEntryInstr(owner()->AllocateBlockId(),
+                         owner()->try_index(),
+                         loop_depth());
   ConnectBranchesTo(branches, join);
   return join;
 }
@@ -425,11 +435,13 @@
   if ((node->kind() == Token::kAND) || (node->kind() == Token::kOR)) {
     TestGraphVisitor for_left(owner(),
                               temp_index(),
+                              loop_depth(),
                               node->left()->token_pos());
     node->left()->Visit(&for_left);
 
     TestGraphVisitor for_right(owner(),
                                temp_index(),
+                               loop_depth(),
                                node->right()->token_pos());
     node->right()->Visit(&for_right);
 
@@ -468,13 +480,13 @@
 // <Statement> ::= Return { value:                <Expression>
 //                          inlined_finally_list: <InlinedFinally>* }
 void EffectGraphVisitor::VisitReturnNode(ReturnNode* node) {
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
 
   for (intptr_t i = 0; i < node->inlined_finally_list_length(); i++) {
     InlineBailout("EffectGraphVisitor::VisitReturnNode (exception)");
-    EffectGraphVisitor for_effect(owner(), temp_index());
+    EffectGraphVisitor for_effect(owner(), temp_index(), loop_depth());
     node->InlinedFinallyNodeAt(i)->Visit(&for_effect);
     Append(for_effect);
     if (!is_open()) return;
@@ -599,7 +611,7 @@
 
 
 void ValueGraphVisitor::VisitAssignableNode(AssignableNode* node) {
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->expr()->Visit(&for_value);
   Append(for_value);
   ReturnValue(BuildAssignableValue(node->expr()->token_pos(),
@@ -619,11 +631,12 @@
     // See ValueGraphVisitor::VisitBinaryOpNode.
     TestGraphVisitor for_left(owner(),
                               temp_index(),
+                              loop_depth(),
                               node->left()->token_pos());
     node->left()->Visit(&for_left);
-    EffectGraphVisitor for_right(owner(), temp_index());
+    EffectGraphVisitor for_right(owner(), temp_index(), loop_depth());
     node->right()->Visit(&for_right);
-    EffectGraphVisitor empty(owner(), temp_index());
+    EffectGraphVisitor empty(owner(), temp_index(), loop_depth());
     if (node->kind() == Token::kAND) {
       Join(for_left, for_right, empty);
     } else {
@@ -631,12 +644,12 @@
     }
     return;
   }
-  ValueGraphVisitor for_left_value(owner(), temp_index());
+  ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_left_value);
   Append(for_left_value);
   PushArgumentInstr* push_left = PushArgument(for_left_value.value());
 
-  ValueGraphVisitor for_right_value(owner(), temp_index());
+  ValueGraphVisitor for_right_value(owner(), temp_index(), loop_depth());
   node->right()->Visit(&for_right_value);
   Append(for_right_value);
   PushArgumentInstr* push_right = PushArgument(for_right_value.value());
@@ -670,10 +683,11 @@
 
     TestGraphVisitor for_test(owner(),
                               temp_index(),
+                              loop_depth(),
                               node->left()->token_pos());
     node->left()->Visit(&for_test);
 
-    ValueGraphVisitor for_right(owner(), temp_index());
+    ValueGraphVisitor for_right(owner(), temp_index(), loop_depth());
     node->right()->Visit(&for_right);
     Value* right_value = for_right.value();
     if (FLAG_enable_type_checks) {
@@ -689,13 +703,13 @@
     for_right.Do(BuildStoreExprTemp(compare));
 
     if (node->kind() == Token::kAND) {
-      ValueGraphVisitor for_false(owner(), temp_index());
+      ValueGraphVisitor for_false(owner(), temp_index(), loop_depth());
       Value* constant_false = for_false.Bind(new ConstantInstr(bool_false));
       for_false.Do(BuildStoreExprTemp(constant_false));
       Join(for_test, for_right, for_false);
     } else {
       ASSERT(node->kind() == Token::kOR);
-      ValueGraphVisitor for_true(owner(), temp_index());
+      ValueGraphVisitor for_true(owner(), temp_index(), loop_depth());
       Value* constant_true = for_true.Bind(new ConstantInstr(bool_true));
       for_true.Do(BuildStoreExprTemp(constant_true));
       Join(for_test, for_true, for_right);
@@ -780,7 +794,7 @@
 
 void EffectGraphVisitor::BuildTypeTest(ComparisonNode* node) {
   ASSERT(Token::IsTypeTestOperator(node->kind()));
-  EffectGraphVisitor for_left_value(owner(), temp_index());
+  EffectGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_left_value);
   Append(for_left_value);
 }
@@ -790,7 +804,7 @@
   ASSERT(Token::IsTypeCastOperator(node->kind()));
   const AbstractType& type = node->right()->AsTypeNode()->type();
   ASSERT(type.IsFinalized());  // The type in a type cast may be malformed.
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_value);
   const String& dst_name = String::ZoneHandle(
       Symbols::New(Exceptions::kCastErrorDstName));
@@ -813,7 +827,7 @@
   const Type& object_type = Type::Handle(Type::ObjectType());
   if (type.IsInstantiated() && object_type.IsSubtypeOf(type, NULL)) {
     // Must evaluate left side.
-    EffectGraphVisitor for_left_value(owner(), temp_index());
+    EffectGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
     node->left()->Visit(&for_left_value);
     Append(for_left_value);
     ReturnDefinition(new ConstantInstr(negate_result ? bool_false : bool_true));
@@ -844,7 +858,7 @@
     return;
   }
 
-  ValueGraphVisitor for_left_value(owner(), temp_index());
+  ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_left_value);
   Append(for_left_value);
   Value* instantiator = NULL;
@@ -874,7 +888,7 @@
   ASSERT(Token::IsTypeCastOperator(node->kind()));
   const AbstractType& type = node->right()->AsTypeNode()->type();
   ASSERT(type.IsFinalized());  // The type in a type cast may be malformed.
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_value);
   Append(for_value);
   const String& dst_name = String::ZoneHandle(
@@ -901,10 +915,10 @@
   }
   if ((node->kind() == Token::kEQ_STRICT) ||
       (node->kind() == Token::kNE_STRICT)) {
-    ValueGraphVisitor for_left_value(owner(), temp_index());
+    ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
     node->left()->Visit(&for_left_value);
     Append(for_left_value);
-    ValueGraphVisitor for_right_value(owner(), temp_index());
+    ValueGraphVisitor for_right_value(owner(), temp_index(), loop_depth());
     node->right()->Visit(&for_right_value);
     Append(for_right_value);
     StrictCompareInstr* comp = new StrictCompareInstr(
@@ -914,10 +928,10 @@
   }
 
   if ((node->kind() == Token::kEQ) || (node->kind() == Token::kNE)) {
-    ValueGraphVisitor for_left_value(owner(), temp_index());
+    ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
     node->left()->Visit(&for_left_value);
     Append(for_left_value);
-    ValueGraphVisitor for_right_value(owner(), temp_index());
+    ValueGraphVisitor for_right_value(owner(), temp_index(), loop_depth());
     node->right()->Visit(&for_right_value);
     Append(for_right_value);
     if (FLAG_enable_type_checks) {
@@ -944,10 +958,10 @@
     return;
   }
 
-  ValueGraphVisitor for_left_value(owner(), temp_index());
+  ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
   node->left()->Visit(&for_left_value);
   Append(for_left_value);
-  ValueGraphVisitor for_right_value(owner(), temp_index());
+  ValueGraphVisitor for_right_value(owner(), temp_index(), loop_depth());
   node->right()->Visit(&for_right_value);
   Append(for_right_value);
   RelationalOpInstr* comp = new RelationalOpInstr(node->token_pos(),
@@ -961,7 +975,7 @@
 void EffectGraphVisitor::VisitUnaryOpNode(UnaryOpNode* node) {
   // "!" cannot be overloaded, therefore do not call operator.
   if (node->kind() == Token::kNOT) {
-    ValueGraphVisitor for_value(owner(), temp_index());
+    ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
     node->operand()->Visit(&for_value);
     Append(for_value);
     Value* value = for_value.value();
@@ -974,7 +988,7 @@
     return;
   }
 
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->operand()->Visit(&for_value);
   Append(for_value);
   PushArgumentInstr* push_value = PushArgument(for_value.value());
@@ -996,13 +1010,14 @@
 void EffectGraphVisitor::VisitConditionalExprNode(ConditionalExprNode* node) {
   TestGraphVisitor for_test(owner(),
                             temp_index(),
+                            loop_depth(),
                             node->condition()->token_pos());
   node->condition()->Visit(&for_test);
 
   // Translate the subexpressions for their effects.
-  EffectGraphVisitor for_true(owner(), temp_index());
+  EffectGraphVisitor for_true(owner(), temp_index(), loop_depth());
   node->true_expr()->Visit(&for_true);
-  EffectGraphVisitor for_false(owner(), temp_index());
+  EffectGraphVisitor for_false(owner(), temp_index(), loop_depth());
   node->false_expr()->Visit(&for_false);
 
   Join(for_test, for_true, for_false);
@@ -1012,15 +1027,16 @@
 void ValueGraphVisitor::VisitConditionalExprNode(ConditionalExprNode* node) {
   TestGraphVisitor for_test(owner(),
                             temp_index(),
+                            loop_depth(),
                             node->condition()->token_pos());
   node->condition()->Visit(&for_test);
 
-  ValueGraphVisitor for_true(owner(), temp_index());
+  ValueGraphVisitor for_true(owner(), temp_index(), loop_depth());
   node->true_expr()->Visit(&for_true);
   ASSERT(for_true.is_open());
   for_true.Do(BuildStoreExprTemp(for_true.value()));
 
-  ValueGraphVisitor for_false(owner(), temp_index());
+  ValueGraphVisitor for_false(owner(), temp_index(), loop_depth());
   node->false_expr()->Visit(&for_false);
   ASSERT(for_false.is_open());
   for_false.Do(BuildStoreExprTemp(for_false.value()));
@@ -1036,11 +1052,12 @@
 void EffectGraphVisitor::VisitIfNode(IfNode* node) {
   TestGraphVisitor for_test(owner(),
                             temp_index(),
+                            loop_depth(),
                             node->condition()->token_pos());
   node->condition()->Visit(&for_test);
 
-  EffectGraphVisitor for_true(owner(), temp_index());
-  EffectGraphVisitor for_false(owner(), temp_index());
+  EffectGraphVisitor for_true(owner(), temp_index(), loop_depth());
+  EffectGraphVisitor for_false(owner(), temp_index(), loop_depth());
 
   node->true_branch()->Visit(&for_true);
   // The for_false graph fragment will be empty (default graph fragment) if
@@ -1051,10 +1068,11 @@
 
 
 void EffectGraphVisitor::VisitSwitchNode(SwitchNode* node) {
-  EffectGraphVisitor switch_body(owner(), temp_index());
+  EffectGraphVisitor switch_body(owner(), temp_index(), loop_depth());
   node->body()->Visit(&switch_body);
   Append(switch_body);
   if ((node->label() != NULL) && (node->label()->join_for_break() != NULL)) {
+    node->label()->join_for_break()->set_loop_depth(loop_depth());
     if (is_open()) Goto(node->label()->join_for_break());
     exit_ = node->label()->join_for_break();
   }
@@ -1088,7 +1106,7 @@
 void EffectGraphVisitor::VisitCaseNode(CaseNode* node) {
   const intptr_t len = node->case_expressions()->length();
   // Create case statements instructions.
-  EffectGraphVisitor for_case_statements(owner(), temp_index());
+  EffectGraphVisitor for_case_statements(owner(), temp_index(), loop_depth());
   // Compute start of statements fragment.
   JoinEntryInstr* statement_start = NULL;
   if ((node->label() != NULL) && node->label()->is_continue_target()) {
@@ -1096,13 +1114,15 @@
     // allocate JoinNode here and use it as statement start.
     statement_start = node->label()->join_for_continue();
     if (statement_start == NULL) {
-      statement_start =
-          new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+      statement_start = new JoinEntryInstr(owner()->AllocateBlockId(),
+                                           owner()->try_index(),
+                                           loop_depth());
       node->label()->set_join_for_continue(statement_start);
     }
   } else {
-    statement_start =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+    statement_start = new JoinEntryInstr(owner()->AllocateBlockId(),
+                                         owner()->try_index(),
+                                         loop_depth());
   }
   node->statements()->Visit(&for_case_statements);
   Instruction* statement_exit =
@@ -1121,6 +1141,7 @@
     AstNode* case_expr = node->case_expressions()->NodeAt(i);
     TestGraphVisitor for_case_expression(owner(),
                                          temp_index(),
+                                         loop_depth(),
                                          case_expr->token_pos());
     case_expr->Visit(&for_case_expression);
     if (i == 0) {
@@ -1149,7 +1170,8 @@
     } else {
       if (statement_exit != NULL) {
         JoinEntryInstr* join = new JoinEntryInstr(owner()->AllocateBlockId(),
-                                                  owner()->try_index());
+                                                  owner()->try_index(),
+                                                  loop_depth());
         statement_exit->Goto(join);
         next_target->Goto(join);
         exit_instruction = join;
@@ -1183,11 +1205,12 @@
 void EffectGraphVisitor::VisitWhileNode(WhileNode* node) {
   TestGraphVisitor for_test(owner(),
                             temp_index(),
+                            loop_depth() + 1,
                             node->condition()->token_pos());
   node->condition()->Visit(&for_test);
   ASSERT(!for_test.is_empty());  // Language spec.
 
-  EffectGraphVisitor for_body(owner(), temp_index());
+  EffectGraphVisitor for_body(owner(), temp_index(), loop_depth() + 1);
   for_body.AddInstruction(
       new CheckStackOverflowInstr(node->token_pos()));
   node->body()->Visit(&for_body);
@@ -1197,12 +1220,14 @@
   ASSERT(lbl != NULL);
   JoinEntryInstr* join = lbl->join_for_continue();
   if (join != NULL) {
+    join->set_loop_depth(loop_depth() + 1);
     if (for_body.is_open()) for_body.Goto(join);
     for_body.exit_ = join;
   }
   TieLoop(for_test, for_body);
   join = lbl->join_for_break();
   if (join != NULL) {
+    join->set_loop_depth(loop_depth());
     Goto(join);
     exit_ = join;
   }
@@ -1219,28 +1244,34 @@
 // g) break-join
 void EffectGraphVisitor::VisitDoWhileNode(DoWhileNode* node) {
   // Traverse body first in order to generate continue and break labels.
-  EffectGraphVisitor for_body(owner(), temp_index());
+  EffectGraphVisitor for_body(owner(), temp_index(), loop_depth() + 1);
   for_body.AddInstruction(
       new CheckStackOverflowInstr(node->token_pos()));
   node->body()->Visit(&for_body);
 
   TestGraphVisitor for_test(owner(),
                             temp_index(),
+                            loop_depth() + 1,
                             node->condition()->token_pos());
   node->condition()->Visit(&for_test);
   ASSERT(is_open());
 
   // Tie do-while loop (test is after the body).
   JoinEntryInstr* body_entry_join =
-      new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+      new JoinEntryInstr(owner()->AllocateBlockId(),
+                         owner()->try_index(),
+                         loop_depth() + 1);
   Goto(body_entry_join);
   Instruction* body_exit = AppendFragment(body_entry_join, for_body);
 
   JoinEntryInstr* join = node->label()->join_for_continue();
   if ((body_exit != NULL) || (join != NULL)) {
     if (join == NULL) {
-      join =
-          new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+      join = new JoinEntryInstr(owner()->AllocateBlockId(),
+                                owner()->try_index(),
+                                loop_depth() + 1);
+    } else {
+      join->set_loop_depth(loop_depth() + 1);
     }
     join->LinkTo(for_test.entry());
     if (body_exit != NULL) {
@@ -1248,13 +1279,14 @@
     }
   }
 
-
   for_test.IfTrueGoto(body_entry_join);
-  if (node->label()->join_for_break() == NULL) {
+  join = node->label()->join_for_break();
+  if (join == NULL) {
     exit_ = for_test.CreateFalseSuccessor();
   } else {
-    for_test.IfFalseGoto(node->label()->join_for_break());
-    exit_ = node->label()->join_for_break();
+    join->set_loop_depth(loop_depth());
+    for_test.IfFalseGoto(join);
+    exit_ = join;
   }
 }
 
@@ -1272,13 +1304,13 @@
 // h) loop-exit-target
 // i) break-join
 void EffectGraphVisitor::VisitForNode(ForNode* node) {
-  EffectGraphVisitor for_initializer(owner(), temp_index());
+  EffectGraphVisitor for_initializer(owner(), temp_index(), loop_depth());
   node->initializer()->Visit(&for_initializer);
   Append(for_initializer);
   ASSERT(is_open());
 
   // Compose body to set any jump labels.
-  EffectGraphVisitor for_body(owner(), temp_index());
+  EffectGraphVisitor for_body(owner(), temp_index(), loop_depth() + 1);
   for_body.AddInstruction(
       new CheckStackOverflowInstr(node->token_pos()));
   node->body()->Visit(&for_body);
@@ -1286,10 +1318,11 @@
   // Join loop body, increment and compute their end instruction.
   ASSERT(!for_body.is_empty());
   Instruction* loop_increment_end = NULL;
-  EffectGraphVisitor for_increment(owner(), temp_index());
+  EffectGraphVisitor for_increment(owner(), temp_index(), loop_depth() + 1);
   node->increment()->Visit(&for_increment);
   JoinEntryInstr* join = node->label()->join_for_continue();
   if (join != NULL) {
+    join->set_loop_depth(loop_depth() + 1);
     // Insert the join between the body and increment.
     if (for_body.is_open()) for_body.Goto(join);
     loop_increment_end = AppendFragment(join, for_increment);
@@ -1308,7 +1341,9 @@
   // body is not open, i.e., no backward branch exists.
   if (loop_increment_end != NULL) {
     JoinEntryInstr* loop_start =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           owner()->try_index(),
+                           loop_depth() + 1);
     Goto(loop_start);
     loop_increment_end->Goto(loop_start);
     exit_ = loop_start;
@@ -1317,16 +1352,20 @@
   if (node->condition() == NULL) {
     // Endless loop, no test.
     JoinEntryInstr* body_entry =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           owner()->try_index(),
+                           loop_depth() + 1);
     AppendFragment(body_entry, for_body);
     Goto(body_entry);
     if (node->label()->join_for_break() != NULL) {
+      node->label()->join_for_break()->set_loop_depth(loop_depth());
       // Control flow of ForLoop continues into join_for_break.
       exit_ = node->label()->join_for_break();
     }
   } else {
     TestGraphVisitor for_test(owner(),
                               temp_index(),
+                              loop_depth() + 1,
                               node->condition()->token_pos());
     node->condition()->Visit(&for_test);
     Append(for_test);
@@ -1337,6 +1376,7 @@
     if (node->label()->join_for_break() == NULL) {
       exit_ = for_test.CreateFalseSuccessor();
     } else {
+      node->label()->join_for_break()->set_loop_depth(loop_depth());
       for_test.IfFalseGoto(node->label()->join_for_break());
       exit_ = node->label()->join_for_break();
     }
@@ -1346,7 +1386,7 @@
 
 void EffectGraphVisitor::VisitJumpNode(JumpNode* node) {
   for (intptr_t i = 0; i < node->inlined_finally_list_length(); i++) {
-    EffectGraphVisitor for_effect(owner(), temp_index());
+    EffectGraphVisitor for_effect(owner(), temp_index(), loop_depth());
     node->InlinedFinallyNodeAt(i)->Visit(&for_effect);
     Append(for_effect);
     if (!is_open()) return;
@@ -1384,13 +1424,17 @@
   if (node->kind() == Token::kBREAK) {
     if (node->label()->join_for_break() == NULL) {
       node->label()->set_join_for_break(
-          new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index()));
+          new JoinEntryInstr(owner()->AllocateBlockId(),
+                             owner()->try_index(),
+                             BlockEntryInstr::kInvalidLoopDepth));
     }
     jump_target = node->label()->join_for_break();
   } else {
     if (node->label()->join_for_continue() == NULL) {
       node->label()->set_join_for_continue(
-          new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index()));
+          new JoinEntryInstr(owner()->AllocateBlockId(),
+                             owner()->try_index(),
+                             BlockEntryInstr::kInvalidLoopDepth));
     }
     jump_target = node->label()->join_for_continue();
   }
@@ -1419,7 +1463,7 @@
   ZoneGrowableArray<PushArgumentInstr*>* arguments =
       new ZoneGrowableArray<PushArgumentInstr*>(node->length());
   for (int i = 0; i < node->length(); ++i) {
-    ValueGraphVisitor for_value(owner(), temp_index());
+    ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
     node->ElementAt(i)->Visit(&for_value);
     Append(for_value);
     arguments->Add(PushArgument(for_value.value()));
@@ -1453,7 +1497,7 @@
     }
     receiver = BuildNullValue();
   } else if (function.IsImplicitInstanceClosureFunction()) {
-    ValueGraphVisitor for_receiver(owner(), temp_index());
+    ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
     node->receiver()->Visit(&for_receiver);
     Append(for_receiver);
     receiver = for_receiver.value();
@@ -1488,7 +1532,7 @@
     const ArgumentListNode& node,
     ZoneGrowableArray<Value*>* values) {
   for (intptr_t i = 0; i < node.length(); ++i) {
-    ValueGraphVisitor for_argument(owner(), temp_index());
+    ValueGraphVisitor for_argument(owner(), temp_index(), loop_depth());
     node.NodeAt(i)->Visit(&for_argument);
     Append(for_argument);
     values->Add(for_argument.value());
@@ -1500,7 +1544,7 @@
     const ArgumentListNode& node,
     ZoneGrowableArray<PushArgumentInstr*>* values) {
   for (intptr_t i = 0; i < node.length(); ++i) {
-    ValueGraphVisitor for_argument(owner(), temp_index());
+    ValueGraphVisitor for_argument(owner(), temp_index(), loop_depth());
     node.NodeAt(i)->Visit(&for_argument);
     Append(for_argument);
     PushArgumentInstr* push_arg = PushArgument(for_argument.value());
@@ -1510,7 +1554,7 @@
 
 
 void EffectGraphVisitor::VisitInstanceCallNode(InstanceCallNode* node) {
-  ValueGraphVisitor for_receiver(owner(), temp_index());
+  ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
   node->receiver()->Visit(&for_receiver);
   Append(for_receiver);
   PushArgumentInstr* push_receiver = PushArgument(for_receiver.value());
@@ -1539,10 +1583,10 @@
       const Library& core_lib = Library::Handle(Library::CoreLibrary());
       if (cls.library() == core_lib.raw()) {
         ASSERT(node->arguments()->length() == 2);
-        ValueGraphVisitor for_left_value(owner(), temp_index());
+        ValueGraphVisitor for_left_value(owner(), temp_index(), loop_depth());
         node->arguments()->NodeAt(0)->Visit(&for_left_value);
         Append(for_left_value);
-        ValueGraphVisitor for_right_value(owner(), temp_index());
+        ValueGraphVisitor for_right_value(owner(), temp_index(), loop_depth());
         node->arguments()->NodeAt(1)->Visit(&for_right_value);
         Append(for_right_value);
         StrictCompareInstr* comp = new StrictCompareInstr(
@@ -1568,7 +1612,7 @@
 
 ClosureCallInstr* EffectGraphVisitor::BuildClosureCall(
     ClosureCallNode* node) {
-  ValueGraphVisitor for_closure(owner(), temp_index());
+  ValueGraphVisitor for_closure(owner(), temp_index(), loop_depth());
   node->closure()->Visit(&for_closure);
   Append(for_closure);
   PushArgumentInstr* push_closure = PushArgument(for_closure.value());
@@ -1771,7 +1815,7 @@
   }
 
   ASSERT(owner()->parsed_function().instantiator() != NULL);
-  ValueGraphVisitor for_instantiator(owner(), temp_index());
+  ValueGraphVisitor for_instantiator(owner(), temp_index(), loop_depth());
   owner()->parsed_function().instantiator()->Visit(&for_instantiator);
   Append(for_instantiator);
   return for_instantiator.value();
@@ -1806,7 +1850,7 @@
     // No instantiator for factories.
     ASSERT(instantiator == NULL);
     ASSERT(owner()->parsed_function().instantiator() != NULL);
-    ValueGraphVisitor for_instantiator(owner(), temp_index());
+    ValueGraphVisitor for_instantiator(owner(), temp_index(), loop_depth());
     owner()->parsed_function().instantiator()->Visit(&for_instantiator);
     Append(for_instantiator);
     return for_instantiator.value();
@@ -1954,7 +1998,7 @@
 
 
 void EffectGraphVisitor::VisitInstanceGetterNode(InstanceGetterNode* node) {
-  ValueGraphVisitor for_receiver(owner(), temp_index());
+  ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
   node->receiver()->Visit(&for_receiver);
   Append(for_receiver);
   PushArgumentInstr* push_receiver = PushArgument(for_receiver.value());
@@ -1974,12 +2018,12 @@
     InstanceSetterNode* node,
     ZoneGrowableArray<PushArgumentInstr*>* arguments,
     bool result_is_needed) {
-  ValueGraphVisitor for_receiver(owner(), temp_index());
+  ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
   node->receiver()->Visit(&for_receiver);
   Append(for_receiver);
   arguments->Add(PushArgument(for_receiver.value()));
 
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
 
@@ -2037,7 +2081,7 @@
         Resolver::ResolveDynamicAnyArgs(node->cls(), getter_name);
     ASSERT(!getter_function.IsNull());
     ASSERT(node->receiver() != NULL);
-    ValueGraphVisitor receiver_value(owner(), temp_index());
+    ValueGraphVisitor receiver_value(owner(), temp_index(), loop_depth());
     node->receiver()->Visit(&receiver_value);
     Append(receiver_value);
     arguments->Add(PushArgument(receiver_value.value()));
@@ -2105,12 +2149,12 @@
       new ZoneGrowableArray<PushArgumentInstr*>(1);
   if (is_super_setter) {
     // Add receiver of instance getter.
-    ValueGraphVisitor for_receiver(owner(), temp_index());
+    ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
     node->receiver()->Visit(&for_receiver);
     Append(for_receiver);
     arguments->Add(PushArgument(for_receiver.value()));
   }
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
   Value* value = NULL;
@@ -2160,7 +2204,7 @@
 // <Expression> ::= LoadLocal { local: LocalVariable }
 void EffectGraphVisitor::VisitLoadLocalNode(LoadLocalNode* node) {
   if (node->HasPseudo()) {
-    EffectGraphVisitor for_pseudo(owner(), temp_index());
+    EffectGraphVisitor for_pseudo(owner(), temp_index(), loop_depth());
     node->pseudo()->Visit(&for_pseudo);
     Append(for_pseudo);
   }
@@ -2178,7 +2222,7 @@
 //                               value: <Expression> }
 void EffectGraphVisitor::HandleStoreLocal(StoreLocalNode* node,
                                           bool result_is_needed) {
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
   Value* store_value = for_value.value();
@@ -2207,7 +2251,7 @@
 
 void EffectGraphVisitor::VisitLoadInstanceFieldNode(
     LoadInstanceFieldNode* node) {
-  ValueGraphVisitor for_instance(owner(), temp_index());
+  ValueGraphVisitor for_instance(owner(), temp_index(), loop_depth());
   node->instance()->Visit(&for_instance);
   Append(for_instance);
   LoadFieldInstr* load = new LoadFieldInstr(
@@ -2220,10 +2264,10 @@
 
 void EffectGraphVisitor::VisitStoreInstanceFieldNode(
     StoreInstanceFieldNode* node) {
-  ValueGraphVisitor for_instance(owner(), temp_index());
+  ValueGraphVisitor for_instance(owner(), temp_index(), loop_depth());
   node->instance()->Visit(&for_instance);
   Append(for_instance);
-  ValueGraphVisitor for_value(owner(), for_instance.temp_index());
+  ValueGraphVisitor for_value(owner(), for_instance.temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
   Value* store_value = for_value.value();
@@ -2257,7 +2301,7 @@
 
 Definition* EffectGraphVisitor::BuildStoreStaticField(
   StoreStaticFieldNode* node, bool result_is_needed) {
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
   Value* store_value = NULL;
@@ -2321,12 +2365,12 @@
   }
   ZoneGrowableArray<PushArgumentInstr*>* arguments =
       new ZoneGrowableArray<PushArgumentInstr*>(2);
-  ValueGraphVisitor for_array(owner(), temp_index());
+  ValueGraphVisitor for_array(owner(), temp_index(), loop_depth());
   node->array()->Visit(&for_array);
   Append(for_array);
   arguments->Add(PushArgument(for_array.value()));
 
-  ValueGraphVisitor for_index(owner(), temp_index());
+  ValueGraphVisitor for_index(owner(), temp_index(), loop_depth());
   node->index_expr()->Visit(&for_index);
   Append(for_index);
   arguments->Add(PushArgument(for_index.value()));
@@ -2370,7 +2414,7 @@
       if (result_is_needed) {
         // Even though noSuchMethod most likely does not return,
         // we save the stored value if the result is needed.
-        ValueGraphVisitor for_value(owner(), temp_index());
+        ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
         node->value()->Visit(&for_value);
         Append(for_value);
         Bind(BuildStoreExprTemp(for_value.value()));
@@ -2394,17 +2438,17 @@
 
   ZoneGrowableArray<PushArgumentInstr*>* arguments =
       new ZoneGrowableArray<PushArgumentInstr*>(3);
-  ValueGraphVisitor for_array(owner(), temp_index());
+  ValueGraphVisitor for_array(owner(), temp_index(), loop_depth());
   node->array()->Visit(&for_array);
   Append(for_array);
   arguments->Add(PushArgument(for_array.value()));
 
-  ValueGraphVisitor for_index(owner(), temp_index());
+  ValueGraphVisitor for_index(owner(), temp_index(), loop_depth());
   node->index_expr()->Visit(&for_index);
   Append(for_index);
   arguments->Add(PushArgument(for_index.value()));
 
-  ValueGraphVisitor for_value(owner(), temp_index());
+  ValueGraphVisitor for_value(owner(), temp_index(), loop_depth());
   node->value()->Visit(&for_value);
   Append(for_value);
   Value* value = NULL;
@@ -2588,7 +2632,7 @@
 
   intptr_t i = 0;
   while (is_open() && (i < node->length())) {
-    EffectGraphVisitor for_effect(owner(), temp_index());
+    EffectGraphVisitor for_effect(owner(), temp_index(), loop_depth());
     node->NodeAt(i++)->Visit(&for_effect);
     Append(for_effect);
     if (!is_open()) {
@@ -2613,6 +2657,7 @@
   // taken care of unchaining the context.
   if ((node->label() != NULL) &&
       (node->label()->join_for_break() != NULL)) {
+    node->label()->join_for_break()->set_loop_depth(loop_depth());
     if (is_open()) Goto(node->label()->join_for_break());
     exit_ = node->label()->join_for_break();
   }
@@ -2633,7 +2678,7 @@
       new CatchEntryInstr(node->exception_var(), node->stacktrace_var()));
   BuildLoadContext(node->context_var());
 
-  EffectGraphVisitor for_catch(owner(), temp_index());
+  EffectGraphVisitor for_catch(owner(), temp_index(), loop_depth());
   node->VisitChildren(&for_catch);
   Append(for_catch);
 }
@@ -2648,18 +2693,20 @@
   // Preserve CTX into local variable '%saved_context'.
   BuildStoreContext(node->context_var());
 
-  EffectGraphVisitor for_try_block(owner(), temp_index());
+  EffectGraphVisitor for_try_block(owner(), temp_index(), loop_depth());
   node->try_block()->Visit(&for_try_block);
 
   if (for_try_block.is_open()) {
     JoinEntryInstr* after_try =
-        new JoinEntryInstr(owner()->AllocateBlockId(), old_try_index);
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           old_try_index,
+                           loop_depth());
     for_try_block.Goto(after_try);
     for_try_block.exit_ = after_try;
   }
 
   JoinEntryInstr* try_entry =
-      new JoinEntryInstr(owner()->AllocateBlockId(), try_index);
+      new JoinEntryInstr(owner()->AllocateBlockId(), try_index, loop_depth());
 
   Goto(try_entry);
   AppendFragment(try_entry, for_try_block);
@@ -2674,10 +2721,12 @@
     // that we can set the appropriate handler pc when we generate
     // code for this catch block.
     catch_block->set_try_index(try_index);
-    EffectGraphVisitor for_catch_block(owner(), temp_index());
+    EffectGraphVisitor for_catch_block(owner(), temp_index(), loop_depth());
     catch_block->Visit(&for_catch_block);
     TargetEntryInstr* catch_entry =
-        new TargetEntryInstr(owner()->AllocateBlockId(), old_try_index);
+        new TargetEntryInstr(owner()->AllocateBlockId(),
+                             old_try_index,
+                             loop_depth());
     catch_entry->set_catch_try_index(try_index);
     owner()->AddCatchEntry(catch_entry);
     ASSERT(!for_catch_block.is_open());
@@ -2685,6 +2734,7 @@
     if (node->end_catch_label() != NULL) {
       JoinEntryInstr* join = node->end_catch_label()->join_for_continue();
       if (join != NULL) {
+        join->set_loop_depth(loop_depth());
         if (is_open()) Goto(join);
         exit_ = join;
       }
@@ -2693,7 +2743,7 @@
 
   // Generate code for the finally block if one exists.
   if ((node->finally_block() != NULL) && is_open()) {
-    EffectGraphVisitor for_finally_block(owner(), temp_index());
+    EffectGraphVisitor for_finally_block(owner(), temp_index(), loop_depth());
     node->finally_block()->Visit(&for_finally_block);
     Append(for_finally_block);
   }
@@ -2724,7 +2774,7 @@
 
   // Evaluate the receiver before the arguments. This will be used
   // as an argument to the noSuchMethod call.
-  ValueGraphVisitor for_receiver(owner(), temp_index());
+  ValueGraphVisitor for_receiver(owner(), temp_index(), loop_depth());
   receiver->Visit(&for_receiver);
   Append(for_receiver);
   PushArgumentInstr* push_receiver = PushArgument(for_receiver.value());
@@ -2773,7 +2823,7 @@
   // TODO(kmillikin) non-local control flow is not handled correctly
   // by the inliner.
   InlineBailout("EffectGraphVisitor::BuildThrowNode (exception)");
-  ValueGraphVisitor for_exception(owner(), temp_index());
+  ValueGraphVisitor for_exception(owner(), temp_index(), loop_depth());
   node->exception()->Visit(&for_exception);
   Append(for_exception);
   PushArgument(for_exception.value());
@@ -2781,7 +2831,7 @@
   if (node->stacktrace() == NULL) {
     instr = new ThrowInstr(node->token_pos());
   } else {
-    ValueGraphVisitor for_stack_trace(owner(), temp_index());
+    ValueGraphVisitor for_stack_trace(owner(), temp_index(), loop_depth());
     node->stacktrace()->Visit(&for_stack_trace);
     Append(for_stack_trace);
     PushArgument(for_stack_trace.value());
@@ -2818,8 +2868,10 @@
   BuildLoadContext(node->context_var());
 
   JoinEntryInstr* finally_entry =
-      new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
-  EffectGraphVisitor for_finally_block(owner(), temp_index());
+      new JoinEntryInstr(owner()->AllocateBlockId(),
+                         owner()->try_index(),
+                         loop_depth());
+  EffectGraphVisitor for_finally_block(owner(), temp_index(), loop_depth());
   node->finally_block()->Visit(&for_finally_block);
 
   if (try_index >= 0) {
@@ -2828,7 +2880,9 @@
 
   if (for_finally_block.is_open()) {
     JoinEntryInstr* after_finally =
-        new JoinEntryInstr(owner()->AllocateBlockId(), owner()->try_index());
+        new JoinEntryInstr(owner()->AllocateBlockId(),
+                           owner()->try_index(),
+                           loop_depth());
     for_finally_block.Goto(after_finally);
     for_finally_block.exit_ = after_finally;
   }
@@ -2839,7 +2893,8 @@
 }
 
 
-FlowGraph* FlowGraphBuilder::BuildGraph(InliningContext context) {
+FlowGraph* FlowGraphBuilder::BuildGraph(InliningContext context,
+                                        intptr_t initial_loop_depth) {
   if (FLAG_print_ast) {
     // Print the function ast before IL generation.
     AstPrinter::PrintFunctionNodes(parsed_function());
@@ -2852,9 +2907,10 @@
   const Function& function = parsed_function().function();
   TargetEntryInstr* normal_entry =
       new TargetEntryInstr(AllocateBlockId(),
-                           CatchClauseNode::kInvalidTryIndex);
+                           CatchClauseNode::kInvalidTryIndex,
+                           initial_loop_depth);
   graph_entry_ = new GraphEntryInstr(normal_entry);
-  EffectGraphVisitor for_effect(this, 0);
+  EffectGraphVisitor for_effect(this, 0, initial_loop_depth);
   if (InInliningContext()) {
     exits_ = new ZoneGrowableArray<ReturnInstr*>();
   }
diff --git a/runtime/vm/flow_graph_builder.h b/runtime/vm/flow_graph_builder.h
index 9c675af..64139bd 100644
--- a/runtime/vm/flow_graph_builder.h
+++ b/runtime/vm/flow_graph_builder.h
@@ -28,7 +28,7 @@
     kTestContext
   };
 
-  FlowGraph* BuildGraph(InliningContext context);
+  FlowGraph* BuildGraph(InliningContext context, intptr_t initial_loop_depth);
 
   const ParsedFunction& parsed_function() const { return parsed_function_; }
 
@@ -106,11 +106,14 @@
 //   - (i0, i1): an open graph fragment
 class EffectGraphVisitor : public AstNodeVisitor {
  public:
-  EffectGraphVisitor(FlowGraphBuilder* owner, intptr_t temp_index)
+  EffectGraphVisitor(FlowGraphBuilder* owner,
+                     intptr_t temp_index,
+                     intptr_t loop_depth)
       : owner_(owner),
         temp_index_(temp_index),
         entry_(NULL),
-        exit_(NULL) { }
+        exit_(NULL),
+        loop_depth_(loop_depth) { }
 
 #define DEFINE_VISIT(type, name) virtual void Visit##type(type* node);
   NODE_LIST(DEFINE_VISIT)
@@ -118,6 +121,7 @@
 
   FlowGraphBuilder* owner() const { return owner_; }
   intptr_t temp_index() const { return temp_index_; }
+  intptr_t loop_depth() const { return loop_depth_; }
   Instruction* entry() const { return entry_; }
   Instruction* exit() const { return exit_; }
 
@@ -288,6 +292,9 @@
   // Output parameters.
   Instruction* entry_;
   Instruction* exit_;
+
+  // Internal state.
+  const intptr_t loop_depth_;
 };
 
 
@@ -298,8 +305,10 @@
 // language Value.
 class ValueGraphVisitor : public EffectGraphVisitor {
  public:
-  ValueGraphVisitor(FlowGraphBuilder* owner, intptr_t temp_index)
-      : EffectGraphVisitor(owner, temp_index), value_(NULL) { }
+  ValueGraphVisitor(FlowGraphBuilder* owner,
+                    intptr_t temp_index,
+                    intptr_t loop_depth)
+      : EffectGraphVisitor(owner, temp_index, loop_depth), value_(NULL) { }
 
   // Visit functions overridden by this class.
   virtual void VisitLiteralNode(LiteralNode* node);
@@ -360,8 +369,9 @@
  public:
   TestGraphVisitor(FlowGraphBuilder* owner,
                    intptr_t temp_index,
+                   intptr_t loop_depth,
                    intptr_t condition_token_pos)
-      : ValueGraphVisitor(owner, temp_index),
+      : ValueGraphVisitor(owner, temp_index, loop_depth),
         true_successor_addresses_(1),
         false_successor_addresses_(1),
         condition_token_pos_(condition_token_pos) { }
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 57e02d4..ef47dc0 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -477,23 +477,27 @@
     const ICData& ic_data) {
   ASSERT(!ic_data.IsNull());
   ASSERT(FLAG_propagate_ic_data || (ic_data.NumberOfChecks() == 0));
-  // Because optimized code should not waste time.
-  ASSERT(!is_optimizing() || ic_data.num_args_tested() == 1);
   const Array& arguments_descriptor =
       DartEntry::ArgumentsDescriptor(argument_count, argument_names);
   uword label_address = 0;
-  switch (ic_data.num_args_tested()) {
-    case 1:
-      label_address = StubCode::OneArgCheckInlineCacheEntryPoint();
-      break;
-    case 2:
-      label_address = StubCode::TwoArgsCheckInlineCacheEntryPoint();
-      break;
-    case 3:
-      label_address = StubCode::ThreeArgsCheckInlineCacheEntryPoint();
-      break;
-    default:
-      UNIMPLEMENTED();
+  if (is_optimizing()) {
+    // Megamorphic call requires one argument ICData.
+    ASSERT(ic_data.num_args_tested() == 1);
+    label_address = StubCode::MegamorphicCallEntryPoint();
+  } else {
+    switch (ic_data.num_args_tested()) {
+      case 1:
+        label_address = StubCode::OneArgCheckInlineCacheEntryPoint();
+        break;
+      case 2:
+        label_address = StubCode::TwoArgsCheckInlineCacheEntryPoint();
+        break;
+      case 3:
+        label_address = StubCode::ThreeArgsCheckInlineCacheEntryPoint();
+        break;
+      default:
+        UNIMPLEMENTED();
+    }
   }
   ExternalLabel target_label("InlineCache", label_address);
 
@@ -576,8 +580,9 @@
                                         LocationSummary* locs) {
   ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0));
   Label match_found;
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
-    const bool is_last_check = (i == (ic_data.NumberOfChecks() - 1));
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
+    const bool is_last_check = (i == (len - 1));
     Label next_test;
     assembler()->cmpl(class_id_reg, Immediate(ic_data.GetReceiverClassIdAt(i)));
     if (is_last_check) {
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 74cc804..b5848d6 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -20,11 +20,23 @@
 
 DEFINE_FLAG(bool, trace_inlining, false, "Trace inlining");
 DEFINE_FLAG(charp, inlining_filter, NULL, "Inline only in named function");
-DEFINE_FLAG(int, inlining_size_threshold, 50,
-    "Inline only functions with up to threshold instructions (default 50)");
-// TODO(srdjan): set to 3 once crash in apidoc.dart is resolved.
+
+// Flags for inlining heuristics.
 DEFINE_FLAG(int, inlining_depth_threshold, 3,
-    "Inline recursively up to threshold depth (default 3)");
+    "Inline function calls up to threshold nesting depth");
+DEFINE_FLAG(int, inlining_size_threshold, 20,
+    "Always inline functions that have threshold or fewer instructions");
+DEFINE_FLAG(int, inlining_in_loop_size_threshold, 80,
+    "Inline functions in loops that have threshold or fewer instructions");
+DEFINE_FLAG(int, inlining_callee_call_sites_threshold, 1,
+    "Always inline functions containing threshold or fewer calls.");
+DEFINE_FLAG(int, inlining_constant_arguments_count, 1,
+    "Inline function calls with sufficient constant arguments "
+    "and up to the increased threshold on instructions");
+DEFINE_FLAG(int, inlining_constant_arguments_size_threshold, 60,
+    "Inline function calls with sufficient constant arguments "
+    "and up to the increased threshold on instructions");
+
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(int, deoptimization_counter_threshold);
 DECLARE_FLAG(bool, verify_compiler);
@@ -127,6 +139,42 @@
 };
 
 
+// Helper to collect information about a callee graph when considering it for
+// inlining.
+class GraphInfoCollector : public ValueObject {
+ public:
+  GraphInfoCollector()
+      : call_site_count_(0),
+        instruction_count_(0) { }
+
+  void Collect(const FlowGraph& graph) {
+    call_site_count_ = 0;
+    instruction_count_ = 0;
+    for (BlockIterator block_it = graph.postorder_iterator();
+         !block_it.Done();
+         block_it.Advance()) {
+      for (ForwardInstructionIterator it(block_it.Current());
+           !it.Done();
+           it.Advance()) {
+        ++instruction_count_;
+        if (it.Current()->IsStaticCall() ||
+            it.Current()->IsClosureCall() ||
+            it.Current()->IsPolymorphicInstanceCall()) {
+          ++call_site_count_;
+        }
+      }
+    }
+  }
+
+  intptr_t call_site_count() const { return call_site_count_; }
+  intptr_t instruction_count() const { return instruction_count_; }
+
+ private:
+  intptr_t call_site_count_;
+  intptr_t instruction_count_;
+};
+
+
 // A collection of call sites to consider for inlining.
 class CallSites : public FlowGraphVisitor {
  public:
@@ -134,7 +182,8 @@
       : FlowGraphVisitor(flow_graph->postorder()),  // We don't use this order.
         static_calls_(),
         closure_calls_(),
-        instance_calls_() { }
+        instance_calls_(),
+        skip_static_call_deopt_ids_() { }
 
   GrowableArray<StaticCallInstr*>* static_calls() {
     return &static_calls_;
@@ -158,9 +207,16 @@
     static_calls_.Clear();
     closure_calls_.Clear();
     instance_calls_.Clear();
+    skip_static_call_deopt_ids_.Clear();
   }
 
   void FindCallSites(FlowGraph* graph) {
+    ASSERT(graph != NULL);
+    const Function& function = graph->parsed_function().function();
+    ASSERT(function.HasCode());
+    const Code& code = Code::Handle(function.CurrentCode());
+    skip_static_call_deopt_ids_.Clear();
+    code.ExtractUncalledStaticCallDeoptIds(&skip_static_call_deopt_ids_);
     for (BlockIterator block_it = graph->postorder_iterator();
          !block_it.Done();
          block_it.Advance()) {
@@ -181,13 +237,22 @@
   }
 
   void VisitStaticCall(StaticCallInstr* call) {
-    if (call->function().IsInlineable()) static_calls_.Add(call);
+    if (!call->function().IsInlineable()) return;
+    const intptr_t call_deopt_id = call->deopt_id();
+    for (intptr_t i = 0; i < skip_static_call_deopt_ids_.length(); i++) {
+      if (call_deopt_id == skip_static_call_deopt_ids_[i]) {
+        // Do not inline this call.
+        return;
+      }
+    }
+    static_calls_.Add(call);
   }
 
  private:
   GrowableArray<StaticCallInstr*> static_calls_;
   GrowableArray<ClosureCallInstr*> closure_calls_;
   GrowableArray<PolymorphicInstanceCallInstr*> instance_calls_;
+  GrowableArray<intptr_t> skip_static_call_deopt_ids_;
 
   DISALLOW_COPY_AND_ASSIGN(CallSites);
 };
@@ -206,6 +271,30 @@
         inlining_call_sites_(NULL),
         function_cache_() { }
 
+  // Inlining heuristics based on Cooper et al. 2008.
+  bool ShouldWeInline(intptr_t loop_depth,
+                      intptr_t instr_count,
+                      intptr_t call_site_count,
+                      intptr_t const_arg_count) {
+    if (instr_count <= FLAG_inlining_size_threshold) {
+      return true;
+    }
+    if (call_site_count <= FLAG_inlining_callee_call_sites_threshold) {
+      return true;
+    }
+    if ((loop_depth > 0) &&
+        (instr_count <= FLAG_inlining_in_loop_size_threshold)) {
+      return true;
+    }
+    if ((const_arg_count >= FLAG_inlining_constant_arguments_count) &&
+        (instr_count <= FLAG_inlining_constant_arguments_size_threshold)) {
+      return true;
+    }
+    return false;
+  }
+
+  // TODO(srdjan): Handle large 'skip_static_call_deopt_ids'. Currently
+  // max. size observed is 11 (dart2js).
   void InlineCalls() {
     // If inlining depth is less then one abort.
     if (FLAG_inlining_depth_threshold < 1) return;
@@ -309,6 +398,7 @@
       }
 
       // Build the callee graph.
+      const intptr_t loop_depth = call->GetBlock()->loop_depth();
       FlowGraphBuilder builder(*parsed_function);
       builder.SetInitialBlockId(caller_graph_->max_block_id());
       FlowGraph* callee_graph;
@@ -316,7 +406,8 @@
         TimerScope timer(FLAG_compiler_stats,
                          &CompilerStats::graphinliner_build_timer,
                          isolate);
-        callee_graph = builder.BuildGraph(FlowGraphBuilder::kValueContext);
+        callee_graph =
+            builder.BuildGraph(FlowGraphBuilder::kValueContext, loop_depth);
       }
 
       // The parameter stubs are a copy of the actual arguments providing
@@ -381,15 +472,39 @@
         printer.PrintBlocks();
       }
 
-      // If result is more than size threshold then abort.
+      // Collect information about the call site and caller graph.
       // TODO(zerny): Do this after CP and dead code elimination.
-      intptr_t size = callee_graph->InstructionCount();
-      if (size > FLAG_inlining_size_threshold) {
-        function.set_is_inlinable(false);
+      intptr_t constants_count = 0;
+      for (intptr_t i = 0; i < param_stubs.length(); ++i) {
+        if (param_stubs[i]->IsConstant()) ++constants_count;
+      }
+      GraphInfoCollector info;
+      info.Collect(*callee_graph);
+      const intptr_t size = info.instruction_count();
+      // Use heuristics do decide if this call should be inlined.
+      if (!ShouldWeInline(loop_depth,
+                          size,
+                          info.call_site_count(),
+                          constants_count)) {
+        // If size is larger than all thresholds, don't consider it again.
+        if ((size > FLAG_inlining_size_threshold) &&
+            (size > FLAG_inlining_in_loop_size_threshold) &&
+            (size > FLAG_inlining_callee_call_sites_threshold) &&
+            (size > FLAG_inlining_constant_arguments_size_threshold)) {
+          function.set_is_inlinable(false);
+        }
         isolate->set_long_jump_base(base);
         isolate->set_deopt_id(prev_deopt_id);
         isolate->set_ic_data_array(prev_ic_data.raw());
-        TRACE_INLINING(OS::Print("     Bailout: graph size %"Pd"\n", size));
+        TRACE_INLINING(OS::Print("     Bailout: heuristics with "
+                                 "loop depth: %"Pd", "
+                                 "code size:  %"Pd", "
+                                 "call sites: %"Pd", "
+                                 "const args: %"Pd"\n",
+                                 loop_depth,
+                                 size,
+                                 info.call_site_count(),
+                                 constants_count));
         return false;
       }
 
diff --git a/runtime/vm/flow_graph_inliner.h b/runtime/vm/flow_graph_inliner.h
index ba2d080..7f37ac6 100644
--- a/runtime/vm/flow_graph_inliner.h
+++ b/runtime/vm/flow_graph_inliner.h
@@ -10,11 +10,12 @@
 namespace dart {
 
 class FlowGraph;
+template <typename T> class GrowableArray;
 
 class FlowGraphInliner : ValueObject {
  public:
   explicit FlowGraphInliner(FlowGraph* flow_graph)
-      : flow_graph_(flow_graph) { }
+      : flow_graph_(flow_graph) {}
 
   // The flow graph is destructively updated upon inlining.
   void Inline();
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index e82a9e4..9b61175 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -273,7 +273,8 @@
 
 static bool ICDataHasReceiverClassId(const ICData& ic_data, intptr_t class_id) {
   ASSERT(ic_data.num_args_tested() > 0);
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     const intptr_t test_class_id = ic_data.GetReceiverClassIdAt(i);
     if (test_class_id == class_id) {
       return true;
@@ -291,7 +292,8 @@
   if (ic_data.num_args_tested() != 2) return false;
 
   Function& target = Function::Handle();
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     GrowableArray<intptr_t> class_ids;
     ic_data.GetCheckAt(i, &class_ids, &target);
     ASSERT(class_ids.length() == 2);
@@ -323,7 +325,8 @@
     const GrowableArray<intptr_t>& argument_class_ids) {
   if (ic_data.num_args_tested() != 2) return false;
   Function& target = Function::Handle();
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     GrowableArray<intptr_t> class_ids;
     ic_data.GetCheckAt(i, &class_ids, &target);
     ASSERT(class_ids.length() == 2);
@@ -447,7 +450,8 @@
   if (ic_data.NumberOfChecks() == 0) return false;
   GrowableArray<intptr_t> class_ids;
   Function& target = Function::Handle();
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     ic_data.GetCheckAt(i, &class_ids, &target);
     if (class_ids[arg_n] != kSmiCid) return false;
   }
@@ -470,10 +474,20 @@
                new CheckSmiInstr((*index)->Copy(), call->deopt_id()),
                call->env(),
                Definition::kEffect);
-  // If both index and array are constants, then the bound check always
-  // succeeded.
-  // TODO(srdjan): Remove once constant propagation lands.
-  if (!((*array)->BindsToConstant() && (*index)->BindsToConstant())) {
+  // If both index and array are constants, then do a compile-time check.
+  // TODO(srdjan): Remove once constant propagation handles bounds checks.
+  bool skip_check = false;
+  if ((*array)->BindsToConstant() && (*index)->BindsToConstant()) {
+    ConstantInstr* array_def = (*array)->definition()->AsConstant();
+    const ImmutableArray& constant_array =
+        ImmutableArray::Cast(array_def->value());
+    ConstantInstr* index_def = (*index)->definition()->AsConstant();
+    if (index_def->value().IsSmi()) {
+      intptr_t constant_index = Smi::Cast(index_def->value()).Value();
+      skip_check = (constant_index < constant_array.Length());
+    }
+  }
+  if (!skip_check) {
     // Insert array bounds check.
     InsertBefore(call,
                  new CheckArrayBoundInstr((*array)->Copy(),
@@ -876,19 +890,8 @@
   if (function.IsDynamicFunction() &&
       callee_receiver->IsParameter() &&
       (callee_receiver->AsParameter()->index() == 0)) {
-    const intptr_t static_receiver_cid = Class::Handle(function.Owner()).id();
-    ZoneGrowableArray<intptr_t>* subclass_cids =
-        CHA::GetSubclassIdsOf(static_receiver_cid);
-    if (subclass_cids->is_empty()) {
-      // No subclasses, no check needed.
-      return false;
-    }
-    ZoneGrowableArray<Function*>* overriding_functions =
-        CHA::GetNamedInstanceFunctionsOf(*subclass_cids, call->function_name());
-    if (overriding_functions->is_empty()) {
-      // No overriding functions.
-      return false;
-    }
+    return CHA::HasOverride(Class::Handle(function.Owner()),
+                            call->function_name());
   }
   return true;
 }
@@ -1096,6 +1099,46 @@
   ic_data.GetCheckAt(0, &class_ids, &target);
   MethodRecognizer::Kind recognized_kind =
       MethodRecognizer::RecognizeKind(target);
+  if ((recognized_kind == MethodRecognizer::kStringBaseCharCodeAt) &&
+      (ic_data.NumberOfChecks() == 1) &&
+      ((class_ids[0] == kOneByteStringCid) ||
+       (class_ids[0] == kTwoByteStringCid))) {
+    Value* str= call->ArgumentAt(0)->value();
+    Value* index = call->ArgumentAt(1)->value();
+    AddCheckClass(call, str->Copy());
+    InsertBefore(call,
+                 new CheckSmiInstr(index->Copy(), call->deopt_id()),
+                 call->env(),
+                 Definition::kEffect);
+    // If both index and string are constants, then do a compile-time check.
+    // TODO(srdjan): Remove once constant propagation handles bounds checks.
+    bool skip_check = false;
+    if (str->BindsToConstant() && index->BindsToConstant()) {
+      ConstantInstr* string_def = str->definition()->AsConstant();
+      const String& constant_string =
+          String::Cast(string_def->value());
+      ConstantInstr* index_def = index->definition()->AsConstant();
+      if (index_def->value().IsSmi()) {
+        intptr_t constant_index = Smi::Cast(index_def->value()).Value();
+        skip_check = (constant_index < constant_string.Length());
+      }
+    }
+    if (!skip_check) {
+      // Insert bounds check.
+      InsertBefore(call,
+                   new CheckArrayBoundInstr(str->Copy(),
+                                            index->Copy(),
+                                            class_ids[0],
+                                            call),
+                   call->env(),
+                   Definition::kEffect);
+    }
+    StringCharCodeAtInstr* instr =
+        new StringCharCodeAtInstr(str, index, class_ids[0]);
+    call->ReplaceWith(instr, current_iterator());
+    RemovePushArguments(call);
+    return true;
+  }
 
   if ((recognized_kind == MethodRecognizer::kIntegerToDouble) &&
       (class_ids[0] == kSmiCid)) {
@@ -1132,7 +1175,8 @@
       ICData::ZoneHandle(instr->ic_data()->AsUnaryClassChecks());
   if ((unary_checks.NumberOfChecks() > FLAG_max_polymorphic_checks) &&
       InstanceCallNeedsClassCheck(instr)) {
-    // Too many checks, leave it megamorphic.
+    // Too many checks, it will be megamorphic which needs unary checks.
+    instr->set_ic_data(&unary_checks);
     return;
   }
 
@@ -1155,7 +1199,8 @@
   if ((op_kind == Token::kGET) && TryInlineInstanceGetter(instr)) {
     return;
   }
-  if ((op_kind == Token::kSET) && TryInlineInstanceSetter(instr)) {
+  if ((op_kind == Token::kSET) &&
+      TryInlineInstanceSetter(instr, unary_checks)) {
     return;
   }
   if (TryInlineInstanceMethod(instr)) {
@@ -1198,15 +1243,16 @@
 }
 
 
-bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr) {
+bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr,
+                                                 const ICData& unary_ic_data) {
+  ASSERT((unary_ic_data.NumberOfChecks() > 0) &&
+      (unary_ic_data.num_args_tested() == 1));
   if (FLAG_enable_type_checks) {
     // TODO(srdjan): Add assignable check node if --enable_type_checks.
     return false;
   }
 
   ASSERT(instr->HasICData());
-  const ICData& unary_ic_data =
-      ICData::Handle(instr->ic_data()->AsUnaryClassChecks());
   if (unary_ic_data.NumberOfChecks() == 0) {
     // No type feedback collected.
     return false;
@@ -3230,6 +3276,11 @@
 }
 
 
+void ConstantPropagator::VisitStringCharCodeAt(StringCharCodeAtInstr* instr) {
+  SetValue(instr, non_constant_);
+}
+
+
 void ConstantPropagator::VisitLoadIndexed(LoadIndexedInstr* instr) {
   SetValue(instr, non_constant_);
 }
@@ -3615,14 +3666,17 @@
         ASSERT(branch->comparison()->IsStrictCompare());
         ASSERT(if_false->parallel_move() == NULL);
         ASSERT(if_false->loop_info() == NULL);
-        join =
-            new JoinEntryInstr(if_false->block_id(), if_false->try_index());
+        join = new JoinEntryInstr(if_false->block_id(),
+                                  if_false->try_index(),
+                                  if_false->loop_depth());
         next = if_false->next();
       } else if (!reachable_->Contains(if_false->preorder_number())) {
         ASSERT(branch->comparison()->IsStrictCompare());
         ASSERT(if_true->parallel_move() == NULL);
         ASSERT(if_true->loop_info() == NULL);
-        join = new JoinEntryInstr(if_true->block_id(), if_true->try_index());
+        join = new JoinEntryInstr(if_true->block_id(),
+                                  if_true->try_index(),
+                                  if_true->loop_depth());
         next = if_true->next();
       }
 
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index cd0cda1..047dd0c 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -63,7 +63,8 @@
   bool TryReplaceWithUnaryOp(InstanceCallInstr* call, Token::Kind op_kind);
 
   bool TryInlineInstanceGetter(InstanceCallInstr* call);
-  bool TryInlineInstanceSetter(InstanceCallInstr* call);
+  bool TryInlineInstanceSetter(InstanceCallInstr* call,
+                               const ICData& unary_ic_data);
 
   bool TryInlineInstanceMethod(InstanceCallInstr* call);
 
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 97fd838..340065d 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -153,6 +153,13 @@
 }
 
 
+bool StringCharCodeAtInstr::AttributesEqual(Instruction* other) const {
+  StringCharCodeAtInstr* other_load = other->AsStringCharCodeAt();
+  ASSERT(other_load != NULL);
+  return class_id() == other_load->class_id();
+}
+
+
 bool LoadIndexedInstr::AttributesEqual(Instruction* other) const {
   LoadIndexedInstr* other_load = other->AsLoadIndexed();
   ASSERT(other_load != NULL);
@@ -189,7 +196,7 @@
 
 
 GraphEntryInstr::GraphEntryInstr(TargetEntryInstr* normal_entry)
-    : BlockEntryInstr(0, CatchClauseNode::kInvalidTryIndex),
+    : BlockEntryInstr(0, CatchClauseNode::kInvalidTryIndex, 0),
       normal_entry_(normal_entry),
       catch_entries_(),
       initial_definitions_(),
@@ -1113,6 +1120,16 @@
 }
 
 
+RawAbstractType* StringCharCodeAtInstr::CompileType() const {
+  return Type::IntType();
+}
+
+
+intptr_t StringCharCodeAtInstr::ResultCid() const {
+  return kSmiCid;
+}
+
+
 RawAbstractType* LoadIndexedInstr::CompileType() const {
   switch (class_id_) {
     case kArrayCid:
@@ -2118,8 +2135,7 @@
 
 RangeBoundary RangeBoundary::LowerBound() const {
   if (IsConstant()) return *this;
-  if (symbol()->range() == NULL) return MinSmi();
-  return Add(symbol()->range()->min().LowerBound(),
+  return Add(Range::ConstantMin(symbol()->range()),
              RangeBoundary::FromConstant(offset_),
              MinSmi());
 }
@@ -2127,14 +2143,23 @@
 
 RangeBoundary RangeBoundary::UpperBound() const {
   if (IsConstant()) return *this;
-  if (symbol()->range() == NULL) return MaxSmi();
-  return Add(symbol()->range()->max().UpperBound(),
+  return Add(Range::ConstantMax(symbol()->range()),
              RangeBoundary::FromConstant(offset_),
              MaxSmi());
 }
 
 
+static Definition* UnwrapConstraint(Definition* defn) {
+  while (defn->IsConstraint()) {
+    defn = defn->AsConstraint()->value()->definition();
+  }
+  return defn;
+}
+
+
 static bool AreEqualDefinitions(Definition* a, Definition* b) {
+  a = UnwrapConstraint(a);
+  b = UnwrapConstraint(b);
   return (a == b) || (!a->AffectedBySideEffect() && a->Equals(b));
 }
 
@@ -2605,6 +2630,26 @@
 }
 
 
+intptr_t CheckArrayBoundInstr::LengthOffsetFor(intptr_t class_id) {
+  switch (class_id) {
+    case kGrowableObjectArrayCid:
+      return GrowableObjectArray::length_offset();
+    case kFloat64ArrayCid:
+      return Float64Array::length_offset();
+    case kFloat32ArrayCid:
+      return Float32Array::length_offset();
+    case kOneByteStringCid:
+    case kTwoByteStringCid:
+      return String::length_offset();
+    case kArrayCid:
+    case kImmutableArrayCid:
+      return Array::length_offset();
+    default:
+      UNREACHABLE();
+      return -1;
+  }
+}
+
 #undef __
 
 }  // namespace dart
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 0bd4fde..7010631 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -37,6 +37,7 @@
   V(_GrowableObjectArray, get:capacity, GrowableArrayCapacity)                 \
   V(_StringBase, get:length, StringBaseLength)                                 \
   V(_StringBase, get:isEmpty, StringBaseIsEmpty)                               \
+  V(_StringBase, charCodeAt, StringBaseCharCodeAt)                             \
   V(_IntegerImplementation, toDouble, IntegerToDouble)                         \
   V(_Double, toInt, DoubleToInteger)                                           \
   V(::, sqrt, MathSqrt)                                                        \
@@ -263,6 +264,7 @@
   M(UnaryMintOp)                                                               \
   M(CheckArrayBound)                                                           \
   M(Constraint)                                                                \
+  M(StringCharCodeAt)
 
 
 #define FORWARD_DECLARATION(type) class type##Instr;
@@ -525,6 +527,7 @@
   friend class CheckSmiInstr;
   friend class CheckArrayBoundInstr;
   friend class CheckEitherNonSmiInstr;
+  friend class StringCharCodeAtInstr;
   friend class LICM;
 
   intptr_t deopt_id_;
@@ -664,6 +667,8 @@
 // branches.
 class BlockEntryInstr : public Instruction {
  public:
+  static const intptr_t kInvalidLoopDepth = -1;
+
   virtual BlockEntryInstr* AsBlockEntry() { return this; }
 
   virtual intptr_t PredecessorCount() const = 0;
@@ -744,12 +749,19 @@
     loop_info_ = loop_info;
   }
 
+  intptr_t loop_depth() const { return loop_depth_; }
+  void set_loop_depth(intptr_t loop_depth) {
+    ASSERT(loop_depth_ == kInvalidLoopDepth);
+    ASSERT(loop_depth != kInvalidLoopDepth);
+    loop_depth_ = loop_depth;
+  }
+
   virtual BlockEntryInstr* GetBlock() const {
     return const_cast<BlockEntryInstr*>(this);
   }
 
  protected:
-  BlockEntryInstr(intptr_t block_id, intptr_t try_index)
+  BlockEntryInstr(intptr_t block_id, intptr_t try_index, intptr_t loop_depth)
       : block_id_(block_id),
         try_index_(try_index),
         preorder_number_(-1),
@@ -758,7 +770,8 @@
         dominated_blocks_(1),
         last_instruction_(NULL),
         parallel_move_(NULL),
-        loop_info_(NULL) { }
+        loop_info_(NULL),
+        loop_depth_(loop_depth) { }
 
  private:
   virtual void ClearPredecessors() = 0;
@@ -785,6 +798,9 @@
   // preorder number.
   BitVector* loop_info_;
 
+  // Syntactic loop depth of the block.
+  intptr_t loop_depth_;
+
   DISALLOW_COPY_AND_ASSIGN(BlockEntryInstr);
 };
 
@@ -898,8 +914,8 @@
 
 class JoinEntryInstr : public BlockEntryInstr {
  public:
-  JoinEntryInstr(intptr_t block_id, intptr_t try_index)
-      : BlockEntryInstr(block_id, try_index),
+  JoinEntryInstr(intptr_t block_id, intptr_t try_index, intptr_t loop_depth)
+      : BlockEntryInstr(block_id, try_index, loop_depth),
         predecessors_(2),  // Two is the assumed to be the common case.
         phis_(NULL),
         phi_count_(0) { }
@@ -968,8 +984,8 @@
 
 class TargetEntryInstr : public BlockEntryInstr {
  public:
-  TargetEntryInstr(intptr_t block_id, intptr_t try_index)
-      : BlockEntryInstr(block_id, try_index),
+  TargetEntryInstr(intptr_t block_id, intptr_t try_index, intptr_t loop_depth)
+      : BlockEntryInstr(block_id, try_index, loop_depth),
         predecessor_(NULL),
         catch_try_index_(CatchClauseNode::kInvalidTryIndex) { }
 
@@ -2042,6 +2058,9 @@
     return (ic_data() != NULL) && !ic_data()->IsNull();
   }
 
+  // ICData can be replaced by optimizer.
+  void set_ic_data(const ICData* value) { ic_data_ = value; }
+
   intptr_t token_pos() const { return token_pos_; }
   const String& function_name() const { return function_name_; }
   Token::Kind token_kind() const { return token_kind_; }
@@ -2635,6 +2654,42 @@
 };
 
 
+class StringCharCodeAtInstr : public TemplateDefinition<2> {
+ public:
+  StringCharCodeAtInstr(Value* receiver,
+                        Value* index,
+                        intptr_t class_id)
+      : class_id_(class_id) {
+    ASSERT(receiver != NULL);
+    ASSERT(index != NULL);
+    inputs_[0] = receiver;
+    inputs_[1] = index;
+  }
+
+  DECLARE_INSTRUCTION(StringCharCodeAt)
+  virtual RawAbstractType* CompileType() const;
+
+  Value* receiver() const { return inputs_[0]; }
+  Value* index() const { return inputs_[1]; }
+  intptr_t class_id() const { return class_id_; }
+
+  virtual bool CanDeoptimize() const { return false; }
+
+  virtual bool HasSideEffect() const { return false; }
+
+  virtual intptr_t ResultCid() const;
+
+  virtual bool AttributesEqual(Instruction* other) const;
+
+  virtual bool AffectedBySideEffect() const { return true; }
+
+ private:
+  const intptr_t class_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(StringCharCodeAtInstr);
+};
+
+
 class LoadIndexedInstr : public TemplateDefinition<2> {
  public:
   LoadIndexedInstr(Value* array, Value* index, intptr_t class_id)
@@ -3980,6 +4035,9 @@
  private:
   intptr_t array_type_;
 
+  // Returns the length offset for array and string types.
+  static intptr_t LengthOffsetFor(intptr_t class_id);
+
   DISALLOW_COPY_AND_ASSIGN(CheckArrayBoundInstr);
 };
 
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index cabafbe..3d2ebb5 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -60,16 +60,14 @@
       // Do not optimize if usage count must be reported.
       __ cmpl(FieldAddress(temp, Function::usage_counter_offset()),
           Immediate(FLAG_optimization_counter_threshold));
-      Label not_yet_hot, already_optimized;
+      Label not_yet_hot;
       __ j(LESS, &not_yet_hot, Assembler::kNearJump);
-      __ j(GREATER, &already_optimized, Assembler::kNearJump);
       __ pushl(result);  // Preserve result.
       __ pushl(temp);  // Argument for runtime: function to optimize.
       __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry);
       __ popl(temp);  // Remove argument.
       __ popl(result);  // Restore result.
       __ Bind(&not_yet_hot);
-      __ Bind(&already_optimized);
     }
   }
   if (FLAG_trace_functions) {
@@ -455,7 +453,8 @@
   ObjectStore* object_store = Isolate::Current()->object_store();
   Condition cond = TokenKindToSmiCondition(kind);
   Label done;
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     // Assert that the Smi is at position 0, if at all.
     ASSERT((ic_data.GetReceiverClassIdAt(i) != kSmiCid) || (i == 0));
     Label next_test;
@@ -538,9 +537,10 @@
   __ j(EQUAL, &identity_compare);
 
   __ LoadClassId(temp, left);
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     __ cmpl(temp, Immediate(ic_data.GetReceiverClassIdAt(i)));
-    if (i == (ic_data.NumberOfChecks() - 1)) {
+    if (i == (len - 1)) {
       __ j(NOT_EQUAL, deopt);
     } else {
       __ j(EQUAL, &identity_compare);
@@ -1080,12 +1080,52 @@
 static bool CanBeImmediateIndex(Value* index) {
   if (!index->definition()->IsConstant()) return false;
   const Object& constant = index->definition()->AsConstant()->value();
+  if (!constant.IsSmi()) return false;
   const Smi& smi_const = Smi::Cast(constant);
   int64_t disp = smi_const.AsInt64Value() * kWordSize + sizeof(RawArray);
   return Utils::IsInt(32, disp);
 }
 
 
+LocationSummary* StringCharCodeAtInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, Location::RequiresRegister());
+  // TODO(fschneider): Allow immediate operands for the index.
+  locs->set_in(1, Location::RequiresRegister());
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+void StringCharCodeAtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register str = locs()->in(0).reg();
+  Register index = locs()->in(1).reg();
+  Register result = locs()->out().reg();
+
+  ASSERT((class_id() == kOneByteStringCid) ||
+         (class_id() == kTwoByteStringCid));
+  if (class_id() == kOneByteStringCid) {
+    __ SmiUntag(index);
+    __ movzxb(result, FieldAddress(str,
+                                   index,
+                                   TIMES_1,
+                                   OneByteString::data_offset()));
+    __ SmiTag(index);  // Retag index.
+    __ SmiTag(result);
+  } else {
+    // Don't untag smi-index and use TIMES_1 for two byte strings.
+    __ movzxw(result, FieldAddress(str,
+                                   index,
+                                   TIMES_1,
+                                   TwoByteString::data_offset()));
+    __ SmiTag(result);
+  }
+}
+
+
 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
@@ -2354,29 +2394,16 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const DeoptReasonId deopt_reason =
-      (array_type() == kGrowableObjectArrayCid) ?
-          kDeoptLoadIndexedGrowableArray : kDeoptLoadIndexedFixedArray;
   Label* deopt = compiler->AddDeoptStub(deopt_id(),
-                                        deopt_reason);
-  ASSERT((array_type() == kArrayCid) ||
-         (array_type() == kImmutableArrayCid) ||
-         (array_type() == kGrowableObjectArrayCid) ||
-         (array_type() == kFloat64ArrayCid) ||
-         (array_type() == kFloat32ArrayCid));
-  intptr_t length_offset = -1;
-  if (array_type() == kGrowableObjectArrayCid) {
-    length_offset = GrowableObjectArray::length_offset();
-  } else if (array_type() == kFloat64ArrayCid) {
-    length_offset = Float64Array::length_offset();
-  } else if (array_type() == kFloat32ArrayCid) {
-    length_offset = Float32Array::length_offset();
-  } else {
-    length_offset = Array::length_offset();
+                                        kDeoptCheckArrayBound);
+  if (locs()->in(0).IsConstant() && locs()->in(1).IsConstant()) {
+    // Unconditionally deoptimize for constant bounds checks because they
+    // only occur only when index is out-of-bounds.
+    __ jmp(deopt);
+    return;
   }
-  // This case should not have created a bound check instruction.
-  ASSERT(!(locs()->in(0).IsConstant() && locs()->in(1).IsConstant()));
 
+  intptr_t length_offset = LengthOffsetFor(array_type());
   if (locs()->in(1).IsConstant()) {
     Register receiver = locs()->in(0).reg();
     const Object& constant = locs()->in(1).constant();
@@ -2386,12 +2413,14 @@
     __ cmpl(FieldAddress(receiver, length_offset), Immediate(imm));
     __ j(BELOW_EQUAL, deopt);
   } else if (locs()->in(0).IsConstant()) {
-    const Object& constant = locs()->in(0).constant();
-    ASSERT(constant.IsArray());
-    const Array& array =  Array::Cast(constant);
+    ASSERT(locs()->in(0).constant().IsArray() ||
+           locs()->in(0).constant().IsString());
+    intptr_t length = locs()->in(0).constant().IsArray()
+        ? Array::Cast(locs()->in(0).constant()).Length()
+        : String::Cast(locs()->in(0).constant()).Length();
     Register index = locs()->in(1).reg();
     __ cmpl(index,
-        Immediate(reinterpret_cast<int32_t>(Smi::New(array.Length()))));
+        Immediate(reinterpret_cast<int32_t>(Smi::New(length))));
     __ j(ABOVE_EQUAL, deopt);
   } else {
     Register receiver = locs()->in(0).reg();
diff --git a/runtime/vm/intermediate_language_test.cc b/runtime/vm/intermediate_language_test.cc
index cc02c03..26e9de9 100644
--- a/runtime/vm/intermediate_language_test.cc
+++ b/runtime/vm/intermediate_language_test.cc
@@ -9,7 +9,7 @@
 
 TEST_CASE(InstructionTests) {
   TargetEntryInstr* target_instr =
-      new TargetEntryInstr(1, CatchClauseNode::kInvalidTryIndex);
+      new TargetEntryInstr(1, CatchClauseNode::kInvalidTryIndex, 0);
   EXPECT(target_instr->IsBlockEntry());
   EXPECT(!target_instr->IsDefinition());
   CurrentContextInstr* context = new CurrentContextInstr();
@@ -20,7 +20,7 @@
 
 TEST_CASE(OptimizationTests) {
   JoinEntryInstr* join =
-      new JoinEntryInstr(1, CatchClauseNode::kInvalidTryIndex);
+      new JoinEntryInstr(1, CatchClauseNode::kInvalidTryIndex, 0);
 
   Definition* def1 = new PhiInstr(join, 0);
   Definition* def2 = new PhiInstr(join, 0);
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 07e4cb4..e9a35e2 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -61,16 +61,14 @@
       // Do not optimize if usage count must be reported.
       __ cmpq(FieldAddress(temp, Function::usage_counter_offset()),
           Immediate(FLAG_optimization_counter_threshold));
-      Label not_yet_hot, already_optimized;
+      Label not_yet_hot;
       __ j(LESS, &not_yet_hot, Assembler::kNearJump);
-      __ j(GREATER, &already_optimized, Assembler::kNearJump);
       __ pushq(result);  // Preserve result.
       __ pushq(temp);  // Argument for runtime: function to optimize.
       __ CallRuntime(kOptimizeInvokedFunctionRuntimeEntry);
       __ popq(temp);  // Remove argument.
       __ popq(result);  // Restore result.
       __ Bind(&not_yet_hot);
-      __ Bind(&already_optimized);
     }
   }
   if (FLAG_trace_functions) {
@@ -453,7 +451,8 @@
   ObjectStore* object_store = Isolate::Current()->object_store();
   Condition cond = TokenKindToSmiCondition(kind);
   Label done;
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     // Assert that the Smi is at position 0, if at all.
     ASSERT((ic_data.GetReceiverClassIdAt(i) != kSmiCid) || (i == 0));
     Label next_test;
@@ -537,9 +536,10 @@
   __ j(EQUAL, &identity_compare);
 
   __ LoadClassId(temp, left);
-  for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
+  const intptr_t len = ic_data.NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     __ cmpq(temp, Immediate(ic_data.GetReceiverClassIdAt(i)));
-    if (i == (ic_data.NumberOfChecks() - 1)) {
+    if (i == (len - 1)) {
       __ j(NOT_EQUAL, deopt);
     } else {
       __ j(EQUAL, &identity_compare);
@@ -945,12 +945,52 @@
 static bool CanBeImmediateIndex(Value* index) {
   if (!index->definition()->IsConstant()) return false;
   const Object& constant = index->definition()->AsConstant()->value();
+  if (!constant.IsSmi()) return false;
   const Smi& smi_const = Smi::Cast(constant);
   int64_t disp = smi_const.AsInt64Value() * kWordSize + sizeof(RawArray);
   return Utils::IsInt(32, disp);
 }
 
 
+LocationSummary* StringCharCodeAtInstr::MakeLocationSummary() const {
+  const intptr_t kNumInputs = 2;
+  const intptr_t kNumTemps = 0;
+  LocationSummary* locs =
+      new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
+  locs->set_in(0, Location::RequiresRegister());
+  // TODO(fschneider): Allow immediate operands for the index.
+  locs->set_in(1, Location::RequiresRegister());
+  locs->set_out(Location::RequiresRegister());
+  return locs;
+}
+
+
+void StringCharCodeAtInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Register str = locs()->in(0).reg();
+  Register index = locs()->in(1).reg();
+  Register result = locs()->out().reg();
+
+  ASSERT((class_id() == kOneByteStringCid) ||
+         (class_id() == kTwoByteStringCid));
+  if (class_id() == kOneByteStringCid) {
+    __ SmiUntag(index);
+    __ movzxb(result, FieldAddress(str,
+                                   index,
+                                   TIMES_1,
+                                   OneByteString::data_offset()));
+    __ SmiTag(index);  // Retag index.
+    __ SmiTag(result);
+  } else {
+    // Don't untag smi-index and use TIMES_1 for two byte strings.
+    __ movzxw(result, FieldAddress(str,
+                                   index,
+                                   TIMES_1,
+                                   TwoByteString::data_offset()));
+    __ SmiTag(result);
+  }
+}
+
+
 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
@@ -2231,30 +2271,17 @@
 
 
 void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  const DeoptReasonId deopt_reason =
-      (array_type() == kGrowableObjectArrayCid) ?
-          kDeoptLoadIndexedGrowableArray : kDeoptLoadIndexedFixedArray;
   Label* deopt = compiler->AddDeoptStub(deopt_id(),
-                                        deopt_reason);
-  ASSERT((array_type() == kArrayCid) ||
-         (array_type() == kImmutableArrayCid) ||
-         (array_type() == kGrowableObjectArrayCid) ||
-         (array_type() == kFloat64ArrayCid) ||
-         (array_type() == kFloat32ArrayCid));
-  intptr_t length_offset = -1;
-  if (array_type() == kGrowableObjectArrayCid) {
-    length_offset = GrowableObjectArray::length_offset();
-  } else if (array_type() == kFloat64ArrayCid) {
-    length_offset = Float64Array::length_offset();
-  } else if (array_type() == kFloat32ArrayCid) {
-    length_offset = Float32Array::length_offset();
-  } else {
-    length_offset = Array::length_offset();
+                                        kDeoptCheckArrayBound);
+  if (locs()->in(0).IsConstant() && locs()->in(1).IsConstant()) {
+    // Unconditionally deoptimize for constant bounds checks because they
+    // only occur only when index is out-of-bounds.
+    __ jmp(deopt);
+    return;
   }
 
-  // This case should not have created a bound check instruction.
-  ASSERT(!(locs()->in(0).IsConstant() && locs()->in(1).IsConstant()));
 
+  intptr_t length_offset = LengthOffsetFor(array_type());
   if (locs()->in(1).IsConstant()) {
     Register receiver = locs()->in(0).reg();
     const Object& constant = locs()->in(1).constant();
@@ -2264,12 +2291,14 @@
     __ cmpq(FieldAddress(receiver, length_offset), Immediate(imm));
     __ j(BELOW_EQUAL, deopt);
   } else if (locs()->in(0).IsConstant()) {
-    const Object& constant = locs()->in(0).constant();
-    ASSERT(constant.IsArray());
-    const Array& array =  Array::Cast(constant);
+    ASSERT(locs()->in(0).constant().IsArray() ||
+           locs()->in(0).constant().IsString());
+    intptr_t length = locs()->in(0).constant().IsArray()
+        ? Array::Cast(locs()->in(0).constant()).Length()
+        : String::Cast(locs()->in(0).constant()).Length();
     Register index = locs()->in(1).reg();
     __ cmpq(index,
-        Immediate(reinterpret_cast<int64_t>(Smi::New(array.Length()))));
+        Immediate(reinterpret_cast<int64_t>(Smi::New(length))));
     __ j(ABOVE_EQUAL, deopt);
   } else {
     Register receiver = locs()->in(0).reg();
diff --git a/runtime/vm/intrinsifier.cc b/runtime/vm/intrinsifier.cc
index 128d131..007ac57 100644
--- a/runtime/vm/intrinsifier.cc
+++ b/runtime/vm/intrinsifier.cc
@@ -69,31 +69,32 @@
 
 bool Intrinsifier::CanIntrinsify(const Function& function) {
   if (!FLAG_intrinsify) return false;
-  // Closure functions may have different arguments.
   if (function.IsClosureFunction()) return false;
+  // Intrinsic kind is set lazily below.
+  if (function.intrinsic_kind() == Function::kIsIntrinsic) return true;
+  if (function.intrinsic_kind() == Function::kIsNotIntrinsic) return false;
+  // Closure functions may have different arguments.
   const char* function_name = String::Handle(function.name()).ToCString();
   const Class& function_class = Class::Handle(function.Owner());
-  const char* class_name = String::Handle(function_class.Name()).ToCString();
   // Only core, math and scalarlist library methods can be intrinsified.
-  const Library& core_lib = Library::Handle(Library::CoreLibrary());
-  const Library& core_impl_lib = Library::Handle(Library::CoreImplLibrary());
-  const Library& math_lib = Library::Handle(Library::MathLibrary());
-  const Library& scalarlist_lib = Library::Handle(Library::ScalarlistLibrary());
-  if ((function_class.library() != core_lib.raw()) &&
-      (function_class.library() != core_impl_lib.raw()) &&
-      (function_class.library() != math_lib.raw()) &&
-      (function_class.library() != scalarlist_lib.raw())) {
+  if ((function_class.library() != Library::CoreLibrary()) &&
+      (function_class.library() != Library::CoreImplLibrary()) &&
+      (function_class.library() != Library::MathLibrary()) &&
+      (function_class.library() != Library::ScalarlistLibrary())) {
     return false;
   }
+  const char* class_name = String::Handle(function_class.Name()).ToCString();
 #define FIND_INTRINSICS(test_class_name, test_function_name, destination)      \
   if (TestFunction(function,                                                   \
                    class_name, function_name,                                  \
                    #test_class_name, #test_function_name)) {                   \
+    function.set_intrinsic_kind(Function::kIsIntrinsic);                       \
     return true;                                                               \
   }                                                                            \
 
 INTRINSIC_LIST(FIND_INTRINSICS);
 #undef FIND_INTRINSICS
+  function.set_intrinsic_kind(Function::kIsNotIntrinsic);
   return false;
 }
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 84263f5..af8f5e3 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -165,7 +165,7 @@
       stack_limit_(0),
       saved_stack_limit_(0),
       message_handler_(NULL),
-      spawn_data_(NULL),
+      spawn_data_(0),
       gc_prologue_callbacks_(),
       gc_epilogue_callbacks_(),
       deopt_cpu_registers_copy_(NULL),
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc
index 11770d9..2727eac 100644
--- a/runtime/vm/message_handler.cc
+++ b/runtime/vm/message_handler.cc
@@ -36,7 +36,7 @@
       task_(NULL),
       start_callback_(NULL),
       end_callback_(NULL),
-      callback_data_(NULL) {
+      callback_data_(0) {
   ASSERT(queue_ != NULL);
   ASSERT(oob_queue_ != NULL);
 }
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 342bbca..92f5e28 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -406,7 +406,7 @@
   // strings as symbols.
   cls = Class::New<Array>();
   isolate->object_store()->set_array_class(cls);
-  cls = Class::New<OneByteString>();
+  cls = Class::NewStringClass(kOneByteStringCid);
   isolate->object_store()->set_one_byte_string_class(cls);
 
   // Allocate and initialize the empty_array instance.
@@ -545,7 +545,7 @@
   object_store->set_type_parameter_class(cls);
 
   // Pre-allocate the OneByteString class needed by the symbol table.
-  cls = Class::New<OneByteString>();
+  cls = Class::NewStringClass(kOneByteStringCid);
   object_store->set_one_byte_string_class(cls);
 
   // Setup the symbol table for the symbols created in the isolate.
@@ -606,19 +606,19 @@
   RegisterPrivateClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
 
-  cls = Class::New<TwoByteString>();
+  cls = Class::NewStringClass(kTwoByteStringCid);
   object_store->set_two_byte_string_class(cls);
   name = Symbols::TwoByteString();
   RegisterPrivateClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
 
-  cls = Class::New<ExternalOneByteString>();
+  cls = Class::NewStringClass(kExternalOneByteStringCid);
   object_store->set_external_one_byte_string_class(cls);
   name = Symbols::ExternalOneByteString();
   RegisterPrivateClass(cls, name, core_lib);
   pending_classes.Add(cls, Heap::kOld);
 
-  cls = Class::New<ExternalTwoByteString>();
+  cls = Class::NewStringClass(kExternalTwoByteStringCid);
   object_store->set_external_two_byte_string_class(cls);
   name = Symbols::ExternalTwoByteString();
   RegisterPrivateClass(cls, name, core_lib);
@@ -1085,16 +1085,16 @@
   cls = Class::New<Bigint>();
   object_store->set_bigint_class(cls);
 
-  cls = Class::New<OneByteString>();
+  cls = Class::NewStringClass(kOneByteStringCid);
   object_store->set_one_byte_string_class(cls);
 
-  cls = Class::New<TwoByteString>();
+  cls = Class::NewStringClass(kTwoByteStringCid);
   object_store->set_two_byte_string_class(cls);
 
-  cls = Class::New<ExternalOneByteString>();
+  cls = Class::NewStringClass(kExternalOneByteStringCid);
   object_store->set_external_one_byte_string_class(cls);
 
-  cls = Class::New<ExternalTwoByteString>();
+  cls = Class::NewStringClass(kExternalTwoByteStringCid);
   object_store->set_external_two_byte_string_class(cls);
 
   cls = Class::New<Bool>();
@@ -1559,13 +1559,16 @@
     intptr_t num_type_params = type_params.Length();
     TypeParameter& type_param = TypeParameter::Handle();
     String& type_param_name = String::Handle();
-    AbstractType& bound = AbstractType::Handle();
+    // TODO(regis): We do not copy the bound (= type_param.bound()), since
+    // we are not able to finalize the bounds of type parameter references
+    // without getting into cycles. Revisit.
+    const AbstractType& bound = AbstractType::Handle(
+        Isolate::Current()->object_store()->object_type());
     for (intptr_t i = 0; i < num_type_params; i++) {
       type_param ^= type_params.TypeAt(i);
       type_param_name = type_param.name();
       if (type_param_name.Equals(type_name)) {
         intptr_t index = type_param.index();
-        bound = type_param.bound();
         // Create a non-finalized new TypeParameter with the given token_pos.
         if (type_param.IsFinalized()) {
           // The index was adjusted during finalization. Revert.
@@ -1878,6 +1881,26 @@
 }
 
 
+RawClass* Class::NewStringClass(intptr_t class_id) {
+  intptr_t instance_size;
+  if (class_id == kOneByteStringCid) {
+    instance_size = OneByteString::InstanceSize();
+  } else if (class_id == kTwoByteStringCid) {
+    instance_size = TwoByteString::InstanceSize();
+  } else if (class_id == kExternalOneByteStringCid) {
+    instance_size = ExternalOneByteString::InstanceSize();
+  } else {
+    ASSERT(class_id == kExternalTwoByteStringCid);
+    instance_size = ExternalTwoByteString::InstanceSize();
+  }
+  Class& result = Class::Handle(New<String>(class_id));
+  result.set_instance_size(instance_size);
+  result.set_next_field_offset(instance_size);
+  result.set_is_prefinalized();
+  return result.raw();
+}
+
+
 void Class::set_name(const String& value) const {
   ASSERT(value.IsSymbol());
   StorePointer(&raw_ptr()->name_, value.raw());
@@ -2191,20 +2214,18 @@
 RawFunction* Class::LookupFunction(const String& name) const {
   Isolate* isolate = Isolate::Current();
   ASSERT(name.IsOneByteString());
-  const OneByteString& lookup_name = OneByteString::Cast(name);
   Array& funcs = Array::Handle(isolate, functions());
   if (funcs.IsNull()) {
     // This can occur, e.g., for Null classes.
     return Function::null();
   }
   Function& function = Function::Handle(isolate, Function::null());
-  OneByteString& function_name =
-      OneByteString::Handle(isolate, OneByteString::null());
+  String& function_name = String::Handle(isolate, String::null());
   intptr_t len = funcs.Length();
   for (intptr_t i = 0; i < len; i++) {
     function ^= funcs.At(i);
     function_name ^= function.name();
-    if (function_name.EqualsIgnoringPrivateKey(lookup_name)) {
+    if (OneByteString::EqualsIgnoringPrivateKey(function_name, name)) {
       return function.raw();
     }
   }
@@ -2300,16 +2321,14 @@
 RawField* Class::LookupField(const String& name) const {
   Isolate* isolate = Isolate::Current();
   ASSERT(name.IsOneByteString());
-  const OneByteString& lookup_name = OneByteString::Cast(name);
   const Array& flds = Array::Handle(isolate, fields());
   Field& field = Field::Handle(isolate, Field::null());
-  OneByteString& field_name =
-      OneByteString::Handle(isolate, OneByteString::null());
+  String& field_name = String::Handle(isolate, String::null());
   intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
     field ^= flds.At(i);
     field_name ^= field.name();
-    if (field_name.EqualsIgnoringPrivateKey(lookup_name)) {
+    if (OneByteString::EqualsIgnoringPrivateKey(field_name, name)) {
       return field.raw();
     }
   }
@@ -3280,6 +3299,11 @@
 }
 
 
+void Function::set_intrinsic_kind(IntrinsicKind value) const {
+  set_kind_tag(IntrinsicKindBits::update(value, raw_ptr()->kind_tag_));
+}
+
+
 void Function::set_is_static(bool value) const {
   set_kind_tag(StaticBit::update(value, raw_ptr()->kind_tag_));
 }
@@ -3776,6 +3800,7 @@
   result.set_is_const(is_const);
   result.set_is_abstract(is_abstract);
   result.set_is_external(is_external);
+  result.set_intrinsic_kind(kUnknownIntrinsic);
   result.set_owner(owner);
   result.set_token_pos(token_pos);
   result.set_end_token_pos(token_pos);
@@ -7184,6 +7209,26 @@
 }
 
 
+void Code::ExtractUncalledStaticCallDeoptIds(
+    GrowableArray<intptr_t>* deopt_ids) const {
+  ASSERT(deopt_ids != NULL);
+  deopt_ids->Clear();
+  const PcDescriptors& descriptors =
+      PcDescriptors::Handle(this->pc_descriptors());
+  Function& function = Function::Handle();
+  for (intptr_t i = 0; i < descriptors.Length(); i++) {
+    if (descriptors.DescriptorKind(i) == PcDescriptors::kFuncCall) {
+      // Static call.
+      uword target_addr;
+      CodePatcher::GetStaticCallAt(descriptors.PC(i), &function, &target_addr);
+      if (target_addr == StubCode::CallStaticFunctionEntryPoint()) {
+        deopt_ids->Add(descriptors.DeoptId(i));
+      }
+    }
+  }
+}
+
+
 RawStackmap* Code::GetStackmap(uword pc, Array* maps, Stackmap* map) const {
   // This code is used during iterating frames during a GC and hence it
   // should not in turn start a GC.
@@ -7386,7 +7431,8 @@
 #if defined(DEBUG)
 // Used in asserts to verify that a check is not added twice.
 bool ICData::HasCheck(const GrowableArray<intptr_t>& cids) const {
-  for (intptr_t i = 0; i < NumberOfChecks(); i++) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     GrowableArray<intptr_t> class_ids;
     Function& target = Function::Handle();
     GetCheckAt(i, &class_ids, &target);
@@ -7516,14 +7562,14 @@
 RawFunction* ICData::GetTargetAt(intptr_t index) const {
   const Array& data = Array::Handle(ic_data());
   const intptr_t data_pos = index * TestEntryLength() + num_args_tested();
-  Function& target = Function::Handle();
-  target ^= data.At(data_pos);
-  return target.raw();
+  ASSERT(Object::Handle(data.At(data_pos)).IsFunction());
+  return reinterpret_cast<RawFunction*>(data.At(data_pos));
 }
 
 
 RawFunction* ICData::GetTargetForReceiverClassId(intptr_t class_id) const {
-  for (intptr_t i = 0; i < NumberOfChecks(); i++) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     if (GetReceiverClassIdAt(i) == class_id) {
       return GetTargetAt(i);
     }
@@ -7545,10 +7591,12 @@
       String::Handle(target_name()),
       deopt_id(),
       kNumArgsTested));
-  for (intptr_t i = 0; i < NumberOfChecks(); i++) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     const intptr_t class_id = GetClassIdAt(i, arg_nr);
     intptr_t duplicate_class_id = -1;
-    for (intptr_t k = 0; k < result.NumberOfChecks(); k++) {
+    const intptr_t result_len = result.NumberOfChecks();
+    for (intptr_t k = 0; k < result_len; k++) {
       if (class_id == result.GetReceiverClassIdAt(k)) {
         duplicate_class_id = k;
         break;
@@ -7571,7 +7619,8 @@
 bool ICData::AllTargetsHaveSameOwner(intptr_t owner_cid) const {
   if (NumberOfChecks() == 0) return false;
   Class& cls = Class::Handle();
-  for (intptr_t i = 0; i < NumberOfChecks(); i++) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     cls = Function::Handle(GetTargetAt(i)).Owner();
     if (cls.id() != owner_cid) {
       return false;
@@ -7584,7 +7633,8 @@
 bool ICData::AllReceiversAreNumbers() const {
   if (NumberOfChecks() == 0) return false;
   Class& cls = Class::Handle();
-  for (intptr_t i = 0; i < NumberOfChecks(); i++) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 0; i < len; i++) {
     cls = Function::Handle(GetTargetAt(i)).Owner();
     const intptr_t cid = cls.id();
     if ((cid != kSmiCid) &&
@@ -7603,10 +7653,9 @@
 bool ICData::HasOneTarget() const {
   ASSERT(NumberOfChecks() > 0);
   const Function& first_target = Function::Handle(GetTargetAt(0));
-  Function& test_target = Function::Handle();
-  for (intptr_t i = 1; i < NumberOfChecks(); i++) {
-    test_target = GetTargetAt(i);
-    if (first_target.raw() != test_target.raw()) {
+  const intptr_t len = NumberOfChecks();
+  for (intptr_t i = 1; i < len; i++) {
+    if (GetTargetAt(i) != first_target.raw()) {
       return false;
     }
   }
@@ -9002,10 +9051,9 @@
   // We are not supposed to have integers represented as two byte or
   // four byte strings.
   ASSERT(str.IsOneByteString());
-  const OneByteString& onestr = OneByteString::Cast(str);
   int64_t value;
-  if (!OS::StringToInt64(onestr.ToCString(), &value)) {
-    const Bigint& big = Bigint::Handle(Bigint::New(onestr, space));
+  if (!OS::StringToInt64(str.ToCString(), &value)) {
+    const Bigint& big = Bigint::Handle(Bigint::New(str, space));
     ASSERT(!BigintOperations::FitsIntoSmi(big));
     ASSERT(!BigintOperations::FitsIntoMint(big));
     return big.raw();
@@ -9770,16 +9818,41 @@
 
 
 int32_t String::CharAt(intptr_t index) const {
-  // String is an abstract class.
-  UNREACHABLE();
-  return 0;
+  intptr_t class_id = raw()->GetClassId();
+  ASSERT(RawObject::IsStringClassId(class_id));
+  NoGCScope no_gc;
+  if (class_id == kOneByteStringCid) {
+      return *OneByteString::CharAddr(*this, index);
+  }
+  if (class_id == kTwoByteStringCid) {
+      return *TwoByteString::CharAddr(*this, index);
+  }
+  if (class_id == kExternalOneByteStringCid) {
+      return *ExternalOneByteString::CharAddr(*this, index);
+  }
+  ASSERT(class_id == kExternalTwoByteStringCid);
+  return *ExternalTwoByteString::CharAddr(*this, index);
 }
 
 
 intptr_t String::CharSize() const {
-  // String is an abstract class.
-  UNREACHABLE();
-  return 0;
+  intptr_t class_id = raw()->GetClassId();
+  if (class_id == kOneByteStringCid || class_id == kExternalOneByteStringCid) {
+    return kOneByteChar;
+  }
+  ASSERT(class_id == kTwoByteStringCid ||
+         class_id == kExternalTwoByteStringCid);
+  return kTwoByteChar;
+}
+
+
+void* String::GetPeer() const {
+  intptr_t class_id = raw()->GetClassId();
+  if (class_id == kExternalOneByteStringCid) {
+    return ExternalOneByteString::GetPeer(*this);
+  }
+  ASSERT(class_id == kExternalTwoByteStringCid);
+  return ExternalTwoByteString::GetPeer(*this);
 }
 
 
@@ -9925,19 +9998,19 @@
   Utf8::Type type;
   intptr_t len = Utf8::CodePointCount(utf8_array, array_len, &type);
   if (type == Utf8::kAscii) {
-    const OneByteString& strobj
-        = OneByteString::Handle(OneByteString::New(len, space));
+    const String& strobj = String::Handle(OneByteString::New(len, space));
     if (len > 0) {
       NoGCScope no_gc;
-      Utf8::DecodeToAscii(utf8_array, array_len, strobj.CharAddr(0), len);
+      Utf8::DecodeToAscii(utf8_array, array_len,
+                          OneByteString::CharAddr(strobj, 0), len);
     }
     return strobj.raw();
   }
   ASSERT((type == Utf8::kBMP) || (type == Utf8::kSMP));
-  const TwoByteString& strobj =
-      TwoByteString::Handle(TwoByteString::New(len, space));
+  const String& strobj = String::Handle(TwoByteString::New(len, space));
   NoGCScope no_gc;
-  Utf8::DecodeToUTF16(utf8_array, array_len, strobj.CharAddr(0), len);
+  Utf8::DecodeToUTF16(utf8_array, array_len,
+                      TwoByteString::CharAddr(strobj, 0), len);
   return strobj.raw();
 }
 
@@ -10023,16 +10096,15 @@
   ASSERT(len >= 0);
   ASSERT(len <= (dst.Length() - dst_offset));
   if (dst.IsOneByteString()) {
-    const OneByteString& onestr = OneByteString::Cast(dst);
     NoGCScope no_gc;
     if (len > 0) {
-      memmove(onestr.CharAddr(dst_offset), characters, len);
+      memmove(OneByteString::CharAddr(dst, dst_offset),
+              characters,
+              len);
     }
   } else if (dst.IsTwoByteString()) {
-    const TwoByteString& twostr = TwoByteString::Cast(dst);
-    NoGCScope no_gc;
     for (intptr_t i = 0; i < len; ++i) {
-      *twostr.CharAddr(i + dst_offset) = characters[i];
+      *TwoByteString::CharAddr(dst, i + dst_offset) = characters[i];
     }
   }
 }
@@ -10045,18 +10117,18 @@
   ASSERT(array_len >= 0);
   ASSERT(array_len <= (dst.Length() - dst_offset));
   if (dst.IsOneByteString()) {
-    const OneByteString& onestr = OneByteString::Cast(dst);
     NoGCScope no_gc;
     for (intptr_t i = 0; i < array_len; ++i) {
       ASSERT(utf16_array[i] <= 0x7F);
-      *onestr.CharAddr(i + dst_offset) = utf16_array[i];
+      *OneByteString::CharAddr(dst, i + dst_offset) = utf16_array[i];
     }
   } else {
     ASSERT(dst.IsTwoByteString());
-    const TwoByteString& twostr = TwoByteString::Cast(dst);
     NoGCScope no_gc;
     if (array_len > 0) {
-      memmove(twostr.CharAddr(dst_offset), utf16_array, (array_len * 2));
+      memmove(TwoByteString::CharAddr(dst, dst_offset),
+              utf16_array,
+              array_len * 2);
     }
   }
 }
@@ -10074,26 +10146,34 @@
     intptr_t char_size = src.CharSize();
     if (char_size == kOneByteChar) {
       if (src.IsOneByteString()) {
-        const OneByteString& onestr = OneByteString::Cast(src);
         NoGCScope no_gc;
-        String::Copy(dst, dst_offset, onestr.CharAddr(0) + src_offset, len);
+        String::Copy(dst,
+                     dst_offset,
+                     OneByteString::CharAddr(src, src_offset),
+                     len);
       } else {
         ASSERT(src.IsExternalOneByteString());
-        const ExternalOneByteString& onestr = ExternalOneByteString::Cast(src);
         NoGCScope no_gc;
-        String::Copy(dst, dst_offset, onestr.CharAddr(0) + src_offset, len);
+        String::Copy(dst,
+                     dst_offset,
+                     ExternalOneByteString::CharAddr(src, src_offset),
+                     len);
       }
     } else {
       ASSERT(char_size == kTwoByteChar);
       if (src.IsTwoByteString()) {
-        const TwoByteString& twostr = TwoByteString::Cast(src);
         NoGCScope no_gc;
-        String::Copy(dst, dst_offset, twostr.CharAddr(0) + src_offset, len);
+        String::Copy(dst,
+                     dst_offset,
+                     TwoByteString::CharAddr(src, src_offset),
+                     len);
       } else {
         ASSERT(src.IsExternalTwoByteString());
-        const ExternalTwoByteString& twostr = ExternalTwoByteString::Cast(src);
         NoGCScope no_gc;
-        String::Copy(dst, dst_offset, twostr.CharAddr(0) + src_offset, len);
+        String::Copy(dst,
+                     dst_offset,
+                     ExternalTwoByteString::CharAddr(src, src_offset),
+                     len);
       }
     }
   }
@@ -10102,12 +10182,10 @@
 
 RawString* String::EscapeSpecialCharacters(const String& str, bool raw_str) {
   if (str.IsOneByteString()) {
-    const OneByteString& onestr = OneByteString::Cast(str);
-    return onestr.EscapeSpecialCharacters(raw_str);
+    return OneByteString::EscapeSpecialCharacters(str, raw_str);
   }
   ASSERT(str.IsTwoByteString());
-  const TwoByteString& twostr = TwoByteString::Cast(str);
-  return twostr.EscapeSpecialCharacters(raw_str);
+  return TwoByteString::EscapeSpecialCharacters(str, raw_str);
 }
 
 
@@ -10224,10 +10302,10 @@
 
 void String::ToUTF8(uint8_t* utf8_array, intptr_t array_len) const {
   if (CharSize() == kOneByteChar) {
-    const OneByteString& obj = OneByteString::Cast(*this);
+    const String& obj = *this;
     ASSERT(array_len >= obj.Length());
     if (obj.Length() > 0) {
-      memmove(utf8_array, obj.CharAddr(0), obj.Length());
+      memmove(utf8_array, OneByteString::CharAddr(obj, 0), obj.Length());
     }
   } else {
     ASSERT(array_len >= Utf8::Length(*this));
@@ -10275,41 +10353,42 @@
 }
 
 
-RawOneByteString* OneByteString::EscapeSpecialCharacters(bool raw_str) const {
-  intptr_t len = Length();
+RawOneByteString* OneByteString::EscapeSpecialCharacters(const String& str,
+                                                         bool raw_str) {
+  intptr_t len = str.Length();
   if (len > 0) {
     intptr_t num_escapes = 0;
     intptr_t index = 0;
     for (intptr_t i = 0; i < len; i++) {
-      if (IsSpecialCharacter(*CharAddr(i)) ||
-          (!raw_str && (*CharAddr(i) == '\\'))) {
+      if (IsSpecialCharacter(*CharAddr(str, i)) ||
+          (!raw_str && (*CharAddr(str, i) == '\\'))) {
         num_escapes += 1;
       }
     }
-    const OneByteString& dststr = OneByteString::Handle(
+    const String& dststr = String::Handle(
         OneByteString::New(len + num_escapes, Heap::kNew));
     for (intptr_t i = 0; i < len; i++) {
-      if (IsSpecialCharacter(*CharAddr(i))) {
-        *(dststr.CharAddr(index)) = '\\';
-        *(dststr.CharAddr(index + 1)) = SpecialCharacter(*CharAddr(i));
+      if (IsSpecialCharacter(*CharAddr(str, i))) {
+        *(CharAddr(dststr, index)) = '\\';
+        *(CharAddr(dststr, index + 1)) = SpecialCharacter(*CharAddr(str, i));
         index += 2;
-      } else if (!raw_str && (*CharAddr(i) == '\\')) {
-        *(dststr.CharAddr(index)) = '\\';
-        *(dststr.CharAddr(index + 1)) = '\\';
+      } else if (!raw_str && (*CharAddr(str, i) == '\\')) {
+        *(CharAddr(dststr, index)) = '\\';
+        *(CharAddr(dststr, index + 1)) = '\\';
         index += 2;
       } else {
-        *(dststr.CharAddr(index)) = *CharAddr(i);
+        *(CharAddr(dststr, index)) = *CharAddr(str, i);
         index += 1;
       }
     }
-    return dststr.raw();
+    return OneByteString::raw(dststr);
   }
   return OneByteString::null();
 }
 
 
-// Check to see if 'name' matches 'this' as is or
-// once the private key separator is stripped from name.
+// Check to see if 'str1' matches 'str2' as is or
+// once the private key separator is stripped from str2.
 //
 // Things are made more complicated by the fact that constructors are
 // added *after* the private suffix, so "foo@123.named" should match
@@ -10319,46 +10398,49 @@
 //
 //    _ReceivePortImpl@6be832b._internal@6be832b
 //
-bool OneByteString::EqualsIgnoringPrivateKey(const OneByteString& name) const {
-  if (raw() == name.raw()) {
+bool OneByteString::EqualsIgnoringPrivateKey(const String& str1,
+                                             const String& str2) {
+  ASSERT(str2.IsOneByteString());
+  if (str1.raw() == str2.raw()) {
     return true;  // Both handles point to the same raw instance.
   }
-  intptr_t len = Length();
-  intptr_t name_len = name.Length();
-  if (len == name_len) {
+  NoGCScope no_gc;
+  intptr_t len = str1.Length();
+  intptr_t str2_len = str2.Length();
+  if (len == str2_len) {
     for (intptr_t i = 0; i < len; i++) {
-      if (*(CharAddr(i)) != *(name.CharAddr(i))) {
+      if (*CharAddr(str1, i) != *CharAddr(str2, i)) {
         return false;
       }
     }
     return true;
   }
-  if (len < name_len) {
+  if (len < str2_len) {
     return false;  // No way they can match.
   }
   intptr_t pos = 0;
-  intptr_t name_pos = 0;
+  intptr_t str2_pos = 0;
   while (pos < len) {
-    int32_t ch = *(CharAddr(pos));
+    int32_t ch = *CharAddr(str1, pos);
     pos++;
 
     if (ch == Scanner::kPrivateKeySeparator) {
       // Consume a private key separator.
-      while (pos < len && *(CharAddr(pos)) != '.') {
+      while ((pos < len) && (*CharAddr(str1, pos) != '.')) {
         pos++;
       }
       // Resume matching characters.
       continue;
     }
-    if (name_pos == name_len || ch != *(name.CharAddr(name_pos))) {
+    if ((str2_pos == str2_len) || (ch != *CharAddr(str2, str2_pos))) {
       return false;
     }
-    name_pos++;
+    str2_pos++;
   }
 
   // We have reached the end of mangled_name string.
   ASSERT(pos == len);
-  return (name_pos == name_len);
+  return (str2_pos == str2_len);
 }
 
 
@@ -10371,7 +10453,7 @@
     // This should be caught before we reach here.
     FATAL1("Fatal error in OneByteString::New: invalid len %"Pd"\n", len);
   }
-  OneByteString& result = OneByteString::Handle();
+  String& result = String::Handle();
   {
     RawObject* raw = Object::Allocate(OneByteString::kClassId,
                                       OneByteString::InstanceSize(len),
@@ -10381,56 +10463,52 @@
     result.SetLength(len);
     result.SetHash(0);
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
 RawOneByteString* OneByteString::New(const uint8_t* characters,
                                      intptr_t len,
                                      Heap::Space space) {
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result = String::Handle(OneByteString::New(len, space));
   if (len > 0) {
     NoGCScope no_gc;
-    memmove(result.CharAddr(0), characters, len);
+    memmove(CharAddr(result, 0), characters, len);
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
 RawOneByteString* OneByteString::New(const uint16_t* characters,
                                      intptr_t len,
                                      Heap::Space space) {
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result =String::Handle(OneByteString::New(len, space));
   for (intptr_t i = 0; i < len; ++i) {
     ASSERT(characters[i] <= 0x7F);
-    *result.CharAddr(i) = characters[i];
+    *CharAddr(result, i) = characters[i];
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
 RawOneByteString* OneByteString::New(const uint32_t* characters,
                                      intptr_t len,
                                      Heap::Space space) {
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result = String::Handle(OneByteString::New(len, space));
   for (intptr_t i = 0; i < len; ++i) {
     ASSERT(characters[i] <= 0x7F);
-    *result.CharAddr(i) = characters[i];
+    *CharAddr(result, i) = characters[i];
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
-RawOneByteString* OneByteString::New(const OneByteString& str,
+RawOneByteString* OneByteString::New(const String& str,
                                      Heap::Space space) {
   intptr_t len = str.Length();
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result = String::Handle(OneByteString::New(len, space));
   String::Copy(result, 0, str, 0, len);
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
@@ -10440,20 +10518,18 @@
   intptr_t len1 = str1.Length();
   intptr_t len2 = str2.Length();
   intptr_t len = len1 + len2;
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result = String::Handle(OneByteString::New(len, space));
   String::Copy(result, 0, str1, 0, len1);
   String::Copy(result, len1, str2, 0, len2);
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
 RawOneByteString* OneByteString::ConcatAll(const Array& strings,
                                            intptr_t len,
                                            Heap::Space space) {
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
-  OneByteString& str = OneByteString::Handle();
+  const String& result = String::Handle(OneByteString::New(len, space));
+  String& str = String::Handle();
   intptr_t strings_len = strings.Length();
   intptr_t pos = 0;
   for (intptr_t i = 0; i < strings_len; i++) {
@@ -10462,7 +10538,7 @@
     String::Copy(result, pos, str, 0, str_len);
     pos += str_len;
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
@@ -10471,50 +10547,45 @@
                                            Heap::Space space) {
   ASSERT(!str.IsNull());
   intptr_t len = str.Length();
-  const OneByteString& result =
-      OneByteString::Handle(OneByteString::New(len, space));
+  const String& result = String::Handle(OneByteString::New(len, space));
   for (intptr_t i = 0; i < len; ++i) {
     int32_t ch = mapping(str.CharAt(i));
     ASSERT(ch >= 0 && ch <= 0x7F);
-    *result.CharAddr(i) = ch;
+    *CharAddr(result, i) = ch;
   }
-  return result.raw();
+  return OneByteString::raw(result);
 }
 
 
-const char* OneByteString::ToCString() const {
-  return String::ToCString();
-}
-
-
-RawTwoByteString* TwoByteString::EscapeSpecialCharacters(bool raw_str) const {
-  intptr_t len = Length();
+RawTwoByteString* TwoByteString::EscapeSpecialCharacters(const String& str,
+                                                         bool raw_str) {
+  intptr_t len = str.Length();
   if (len > 0) {
     intptr_t num_escapes = 0;
     intptr_t index = 0;
     for (intptr_t i = 0; i < len; i++) {
-      if (IsSpecialCharacter(*CharAddr(i)) ||
-          (!raw_str && (*CharAddr(i) == '\\'))) {
+      if (IsSpecialCharacter(*CharAddr(str, i)) ||
+          (!raw_str && (*CharAddr(str, i) == '\\'))) {
         num_escapes += 1;
       }
     }
-    const TwoByteString& dststr = TwoByteString::Handle(
+    const String& dststr = String::Handle(
         TwoByteString::New(len + num_escapes, Heap::kNew));
     for (intptr_t i = 0; i < len; i++) {
-      if (IsSpecialCharacter(*CharAddr(i))) {
-        *(dststr.CharAddr(index)) = '\\';
-        *(dststr.CharAddr(index + 1)) = SpecialCharacter(*CharAddr(i));
+      if (IsSpecialCharacter(*CharAddr(str, i))) {
+        *(CharAddr(dststr, index)) = '\\';
+        *(CharAddr(dststr, index + 1)) = SpecialCharacter(*CharAddr(str, i));
         index += 2;
-      } else if (!raw_str && (*CharAddr(i) == '\\')) {
-        *(dststr.CharAddr(index)) = '\\';
-        *(dststr.CharAddr(index + 1)) = '\\';
+      } else if (!raw_str && (*CharAddr(str, i) == '\\')) {
+        *(CharAddr(dststr, index)) = '\\';
+        *(CharAddr(dststr, index + 1)) = '\\';
         index += 2;
       } else {
-        *(dststr.CharAddr(index)) = *CharAddr(i);
+        *(CharAddr(dststr, index)) = *CharAddr(str, i);
         index += 1;
       }
     }
-    return dststr.raw();
+    return TwoByteString::raw(dststr);
   }
   return TwoByteString::null();
 }
@@ -10527,7 +10598,7 @@
     // This should be caught before we reach here.
     FATAL1("Fatal error in TwoByteString::New: invalid len %"Pd"\n", len);
   }
-  TwoByteString& result = TwoByteString::Handle();
+  String& result = String::Handle();
   {
     RawObject* raw = Object::Allocate(TwoByteString::kClassId,
                                       TwoByteString::InstanceSize(len),
@@ -10537,7 +10608,7 @@
     result.SetLength(len);
     result.SetHash(0);
   }
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
@@ -10545,13 +10616,12 @@
                                      intptr_t array_len,
                                      Heap::Space space) {
   ASSERT(array_len > 0);
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(array_len, space));
+  const String& result = String::Handle(TwoByteString::New(array_len, space));
   {
     NoGCScope no_gc;
-    memmove(result.CharAddr(0), utf16_array, (array_len * 2));
+    memmove(CharAddr(result, 0), utf16_array, (array_len * 2));
   }
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
@@ -10560,34 +10630,32 @@
                                      intptr_t array_len,
                                      Heap::Space space) {
   ASSERT((array_len > 0) && (utf16_len >= array_len));
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(utf16_len, space));
+  const String& result = String::Handle(TwoByteString::New(utf16_len, space));
   {
     NoGCScope no_gc;
     intptr_t j = 0;
     for (intptr_t i = 0; i < array_len; ++i) {
       if (utf32_array[i] > 0xffff) {
         ASSERT(j < (utf16_len - 1));
-        Utf8::ConvertUTF32ToUTF16(utf32_array[i], result.CharAddr(j));
+        Utf8::ConvertUTF32ToUTF16(utf32_array[i], CharAddr(result, j));
         j += 2;
       } else {
         ASSERT(j < utf16_len);
-        *result.CharAddr(j) = utf32_array[i];
+        *CharAddr(result, j) = utf32_array[i];
         j += 1;
       }
     }
   }
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
-RawTwoByteString* TwoByteString::New(const TwoByteString& str,
+RawTwoByteString* TwoByteString::New(const String& str,
                                      Heap::Space space) {
   intptr_t len = str.Length();
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(len, space));
+  const String& result = String::Handle(TwoByteString::New(len, space));
   String::Copy(result, 0, str, 0, len);
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
@@ -10597,19 +10665,17 @@
   intptr_t len1 = str1.Length();
   intptr_t len2 = str2.Length();
   intptr_t len = len1 + len2;
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(len, space));
+  const String& result = String::Handle(TwoByteString::New(len, space));
   String::Copy(result, 0, str1, 0, len1);
   String::Copy(result, len1, str2, 0, len2);
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
 RawTwoByteString* TwoByteString::ConcatAll(const Array& strings,
                                            intptr_t len,
                                            Heap::Space space) {
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(len, space));
+  const String& result = String::Handle(TwoByteString::New(len, space));
   String& str = String::Handle();
   intptr_t strings_len = strings.Length();
   intptr_t pos = 0;
@@ -10619,7 +10685,7 @@
     String::Copy(result, pos, str, 0, str_len);
     pos += str_len;
   }
-  return result.raw();
+  return TwoByteString::raw(result);
 }
 
 
@@ -10628,19 +10694,13 @@
                                            Heap::Space space) {
   ASSERT(!str.IsNull());
   intptr_t len = str.Length();
-  const TwoByteString& result =
-      TwoByteString::Handle(TwoByteString::New(len, space));
+  const String& result = String::Handle(TwoByteString::New(len, space));
   for (intptr_t i = 0; i < len; ++i) {
     int32_t ch = mapping(str.CharAt(i));
     ASSERT(ch >= 0 && ch <= 0xFFFF);
-    *result.CharAddr(i) = ch;
+    *CharAddr(result, i) = ch;
   }
-  return result.raw();
-}
-
-
-const char* TwoByteString::ToCString() const {
-  return String::ToCString();
+  return TwoByteString::raw(result);
 }
 
 
@@ -10664,14 +10724,14 @@
     void* peer,
     Dart_PeerFinalizer callback,
     Heap::Space space) {
-  ASSERT(Isolate::Current()->object_store()->external_one_byte_string_class() !=
-         Class::null());
+  ASSERT(Isolate::Current()->object_store()->
+         external_one_byte_string_class() != Class::null());
   if (len < 0 || len > kMaxElements) {
     // This should be caught before we reach here.
     FATAL1("Fatal error in ExternalOneByteString::New: invalid len %"Pd"\n",
            len);
   }
-  ExternalOneByteString& result = ExternalOneByteString::Handle();
+  String& result = String::Handle();
   ExternalStringData<uint8_t>* external_data =
       new ExternalStringData<uint8_t>(data, peer, callback);
   {
@@ -10682,10 +10742,10 @@
     result ^= raw;
     result.SetLength(len);
     result.SetHash(0);
-    result.SetExternalData(external_data);
+    SetExternalData(result, external_data);
   }
   AddFinalizer(result, external_data, ExternalOneByteString::Finalize);
-  return result.raw();
+  return ExternalOneByteString::raw(result);
 }
 
 
@@ -10705,11 +10765,6 @@
 }
 
 
-const char* ExternalOneByteString::ToCString() const {
-  return String::ToCString();
-}
-
-
 RawExternalTwoByteString* ExternalTwoByteString::New(
     const uint16_t* data,
     intptr_t len,
@@ -10723,7 +10778,7 @@
     FATAL1("Fatal error in ExternalTwoByteString::New: invalid len %"Pd"\n",
            len);
   }
-  ExternalTwoByteString& result = ExternalTwoByteString::Handle();
+  String& result = String::Handle();
   ExternalStringData<uint16_t>* external_data =
       new ExternalStringData<uint16_t>(data, peer, callback);
   {
@@ -10734,10 +10789,10 @@
     result ^= raw;
     result.SetLength(len);
     result.SetHash(0);
-    result.SetExternalData(external_data);
+    SetExternalData(result, external_data);
   }
   AddFinalizer(result, external_data, ExternalTwoByteString::Finalize);
-  return result.raw();
+  return ExternalTwoByteString::raw(result);
 }
 
 
@@ -10747,11 +10802,6 @@
 }
 
 
-const char* ExternalTwoByteString::ToCString() const {
-  return String::ToCString();
-}
-
-
 RawBool* Bool::True() {
   return Isolate::Current()->object_store()->true_value();
 }
@@ -10818,21 +10868,19 @@
 
 
 RawArray* Array::New(intptr_t len, Heap::Space space) {
-  ObjectStore* object_store = Isolate::Current()->object_store();
-  ASSERT(object_store->array_class() != Class::null());
-  Class& cls = Class::Handle(object_store->array_class());
-  return New(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->array_class() != Class::null());
+  return New(kClassId, len, space);
 }
 
 
-RawArray* Array::New(const Class& cls, intptr_t len, Heap::Space space) {
+RawArray* Array::New(intptr_t class_id, intptr_t len, Heap::Space space) {
   if (len < 0 || len > Array::kMaxElements) {
     // This should be caught before we reach here.
     FATAL1("Fatal error in Array::New: invalid len %"Pd"\n", len);
   }
   Array& result = Array::Handle();
   {
-    RawObject* raw = Object::Allocate(cls.id(),
+    RawObject* raw = Object::Allocate(class_id,
                                       Array::InstanceSize(len),
                                       space);
     NoGCScope no_gc;
@@ -10844,15 +10892,10 @@
 
 
 void Array::MakeImmutable() const {
-  Isolate* isolate = Isolate::Current();
-  const Class& cls = Class::Handle(
-      isolate, isolate->object_store()->immutable_array_class());
-  {
-    NoGCScope no_gc;
-    uword tags = raw_ptr()->tags_;
-    tags = RawObject::ClassIdTag::update(cls.id(), tags);
-    raw_ptr()->tags_ = tags;
-  }
+  NoGCScope no_gc;
+  uword tags = raw_ptr()->tags_;
+  tags = RawObject::ClassIdTag::update(kImmutableArrayCid, tags);
+  raw_ptr()->tags_ = tags;
 }
 
 
@@ -10913,10 +10956,9 @@
       // As we have enough space to use an array object, update the leftover
       // space as an Array object.
       RawArray* raw = reinterpret_cast<RawArray*>(RawObject::FromAddr(addr));
-      const Class& cls = Class::Handle(isolate->object_store()->array_class());
       tags = 0;
       tags = RawObject::SizeTag::update(leftover_size, tags);
-      tags = RawObject::ClassIdTag::update(cls.id(), tags);
+      tags = RawObject::ClassIdTag::update(kArrayCid, tags);
       raw->ptr()->tags_ = tags;
       intptr_t leftover_len =
           ((leftover_size - Array::InstanceSize(0)) / kWordSize);
@@ -10938,10 +10980,9 @@
 
 RawImmutableArray* ImmutableArray::New(intptr_t len,
                                        Heap::Space space) {
-  ObjectStore* object_store = Isolate::Current()->object_store();
-  ASSERT(object_store->immutable_array_class() != Class::null());
-  Class& cls = Class::Handle(object_store->immutable_array_class());
-  return reinterpret_cast<RawImmutableArray*>(Array::New(cls, len, space));
+  ASSERT(Isolate::Current()->object_store()->immutable_array_class() !=
+         Class::null());
+  return reinterpret_cast<RawImmutableArray*>(Array::New(kClassId, len, space));
 }
 
 
@@ -11117,7 +11158,7 @@
 
 
 template<typename HandleT, typename RawT, typename ElementT>
-RawT* ByteArray::NewExternalImpl(const Class& cls,
+RawT* ByteArray::NewExternalImpl(intptr_t class_id,
                                  ElementT* data,
                                  intptr_t len,
                                  void* peer,
@@ -11132,7 +11173,7 @@
   ExternalByteArrayData<ElementT>* external_data =
       new ExternalByteArrayData<ElementT>(data, peer, callback);
   {
-    RawObject* raw = Object::Allocate(cls.id(), HandleT::InstanceSize(), space);
+    RawObject* raw = Object::Allocate(class_id, HandleT::InstanceSize(), space);
     NoGCScope no_gc;
     result ^= raw;
     result.SetLength(len);
@@ -11165,14 +11206,14 @@
 
 
 template<typename HandleT, typename RawT>
-RawT* ByteArray::NewImpl(const Class& cls, intptr_t len, Heap::Space space) {
+RawT* ByteArray::NewImpl(intptr_t class_id, intptr_t len, Heap::Space space) {
   if (len < 0 || len > HandleT::kMaxElements) {
     // This should be caught before we reach here.
     FATAL1("Fatal error in ByteArray::NewImpl: invalid len %"Pd"\n", len);
   }
   HandleT& result = HandleT::Handle();
   {
-    RawObject* raw = Object::Allocate(cls.id(),
+    RawObject* raw = Object::Allocate(class_id,
                                       HandleT::InstanceSize(len),
                                       space);
     NoGCScope no_gc;
@@ -11187,7 +11228,7 @@
 
 
 template<typename HandleT, typename RawT, typename ElementT>
-RawT* ByteArray::NewImpl(const Class& cls,
+RawT* ByteArray::NewImpl(intptr_t class_id,
                          const ElementT* data,
                          intptr_t len,
                          Heap::Space space) {
@@ -11197,7 +11238,7 @@
   }
   HandleT& result = HandleT::Handle();
   {
-    RawObject* raw = Object::Allocate(cls.id(),
+    RawObject* raw = Object::Allocate(class_id,
                                       HandleT::InstanceSize(len),
                                       space);
     NoGCScope no_gc;
@@ -11212,22 +11253,18 @@
 
 
 RawInt8Array* Int8Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int8_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int8_array_class());
-  return NewImpl<Int8Array, RawInt8Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->int8_array_class() !=
+         Class::null());
+  return NewImpl<Int8Array, RawInt8Array>(kClassId, len, space);
 }
 
 
 RawInt8Array* Int8Array::New(const int8_t* data,
                              intptr_t len,
                              Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int8_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int8_array_class());
-  return NewImpl<Int8Array, RawInt8Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->int8_array_class() !=
+         Class::null());
+  return NewImpl<Int8Array, RawInt8Array>(kClassId, data, len, space);
 }
 
 
@@ -11237,22 +11274,18 @@
 
 
 RawUint8Array* Uint8Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint8_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint8_array_class());
-  return NewImpl<Uint8Array, RawUint8Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint8_array_class() !=
+         Class::null());
+  return NewImpl<Uint8Array, RawUint8Array>(kClassId, len, space);
 }
 
 
 RawUint8Array* Uint8Array::New(const uint8_t* data,
                                intptr_t len,
                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint8_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint8_array_class());
-  return NewImpl<Uint8Array, RawUint8Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint8_array_class() !=
+         Class::null());
+  return NewImpl<Uint8Array, RawUint8Array>(kClassId, data, len, space);
 }
 
 
@@ -11262,22 +11295,18 @@
 
 
 RawInt16Array* Int16Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int16_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int16_array_class());
-  return NewImpl<Int16Array, RawInt16Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->int16_array_class() !=
+         Class::null());
+  return NewImpl<Int16Array, RawInt16Array>(kClassId, len, space);
 }
 
 
 RawInt16Array* Int16Array::New(const int16_t* data,
                                intptr_t len,
                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int16_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int16_array_class());
-  return NewImpl<Int16Array, RawInt16Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->int16_array_class() !=
+         Class::null());
+  return NewImpl<Int16Array, RawInt16Array>(kClassId, data, len, space);
 }
 
 
@@ -11287,22 +11316,18 @@
 
 
 RawUint16Array* Uint16Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint16_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint16_array_class());
-  return NewImpl<Uint16Array, RawUint16Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint16_array_class() !=
+         Class::null());
+  return NewImpl<Uint16Array, RawUint16Array>(kClassId, len, space);
 }
 
 
 RawUint16Array* Uint16Array::New(const uint16_t* data,
                                  intptr_t len,
                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint16_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint16_array_class());
-  return NewImpl<Uint16Array, RawUint16Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint16_array_class() !=
+         Class::null());
+  return NewImpl<Uint16Array, RawUint16Array>(kClassId, data, len, space);
 }
 
 
@@ -11312,22 +11337,18 @@
 
 
 RawInt32Array* Int32Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int32_array_class());
-  return NewImpl<Int32Array, RawInt32Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->int32_array_class() !=
+         Class::null());
+  return NewImpl<Int32Array, RawInt32Array>(kClassId, len, space);
 }
 
 
 RawInt32Array* Int32Array::New(const int32_t* data,
                                intptr_t len,
                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int32_array_class());
-  return NewImpl<Int32Array, RawInt32Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->int32_array_class() !=
+         Class::null());
+  return NewImpl<Int32Array, RawInt32Array>(kClassId, data, len, space);
 }
 
 
@@ -11337,22 +11358,18 @@
 
 
 RawUint32Array* Uint32Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint32_array_class());
-  return NewImpl<Uint32Array, RawUint32Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint32_array_class() !=
+         Class::null());
+  return NewImpl<Uint32Array, RawUint32Array>(kClassId, len, space);
 }
 
 
 RawUint32Array* Uint32Array::New(const uint32_t* data,
                                  intptr_t len,
                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint32_array_class());
-  return NewImpl<Uint32Array, RawUint32Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint32_array_class() !=
+         Class::null());
+  return NewImpl<Uint32Array, RawUint32Array>(kClassId, data, len, space);
 }
 
 
@@ -11362,22 +11379,18 @@
 
 
 RawInt64Array* Int64Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int64_array_class());
-  return NewImpl<Int64Array, RawInt64Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->int64_array_class() !=
+         Class::null());
+  return NewImpl<Int64Array, RawInt64Array>(kClassId, len, space);
 }
 
 
 RawInt64Array* Int64Array::New(const int64_t* data,
                                intptr_t len,
                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->int64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->int64_array_class());
-  return NewImpl<Int64Array, RawInt64Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->int64_array_class() !=
+         Class::null());
+  return NewImpl<Int64Array, RawInt64Array>(kClassId, data, len, space);
 }
 
 
@@ -11387,22 +11400,18 @@
 
 
 RawUint64Array* Uint64Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint64_array_class());
-  return NewImpl<Uint64Array, RawUint64Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint64_array_class() !=
+         Class::null());
+  return NewImpl<Uint64Array, RawUint64Array>(kClassId, len, space);
 }
 
 
 RawUint64Array* Uint64Array::New(const uint64_t* data,
                                  intptr_t len,
                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->uint64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->uint64_array_class());
-  return NewImpl<Uint64Array, RawUint64Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->uint64_array_class() !=
+         Class::null());
+  return NewImpl<Uint64Array, RawUint64Array>(kClassId, data, len, space);
 }
 
 
@@ -11412,22 +11421,18 @@
 
 
 RawFloat32Array* Float32Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->float32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->float32_array_class());
-  return NewImpl<Float32Array, RawFloat32Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->float32_array_class() !=
+         Class::null());
+  return NewImpl<Float32Array, RawFloat32Array>(kClassId, len, space);
 }
 
 
 RawFloat32Array* Float32Array::New(const float* data,
                                    intptr_t len,
                                    Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->float32_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->float32_array_class());
-  return NewImpl<Float32Array, RawFloat32Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->float32_array_class() !=
+         Class::null());
+  return NewImpl<Float32Array, RawFloat32Array>(kClassId, data, len, space);
 }
 
 
@@ -11437,22 +11442,18 @@
 
 
 RawFloat64Array* Float64Array::New(intptr_t len, Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->float64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->float64_array_class());
-  return NewImpl<Float64Array, RawFloat64Array>(cls, len, space);
+  ASSERT(Isolate::Current()->object_store()->float64_array_class() !=
+         Class::null());
+  return NewImpl<Float64Array, RawFloat64Array>(kClassId, len, space);
 }
 
 
 RawFloat64Array* Float64Array::New(const double* data,
                                    intptr_t len,
                                    Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->float64_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->float64_array_class());
-  return NewImpl<Float64Array, RawFloat64Array>(cls, data, len, space);
+  ASSERT(Isolate::Current()->object_store()->float64_array_class() !=
+         Class::null());
+  return NewImpl<Float64Array, RawFloat64Array>(kClassId, data, len, space);
 }
 
 
@@ -11466,12 +11467,10 @@
                                              void* peer,
                                              Dart_PeerFinalizer callback,
                                              Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_int8_array_class() != Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_int8_array_class());
+  ASSERT(Isolate::Current()->object_store()->external_int8_array_class() !=
+         Class::null());
   return NewExternalImpl<ExternalInt8Array, RawExternalInt8Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11485,13 +11484,10 @@
                                                void* peer,
                                                Dart_PeerFinalizer callback,
                                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_uint8_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_uint8_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_uint8_array_class());
   return NewExternalImpl<ExternalUint8Array, RawExternalUint8Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11505,13 +11501,10 @@
                                                void* peer,
                                                Dart_PeerFinalizer callback,
                                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_int16_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_int16_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_int16_array_class());
   return NewExternalImpl<ExternalInt16Array, RawExternalInt16Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11525,13 +11518,10 @@
                                                  void* peer,
                                                  Dart_PeerFinalizer callback,
                                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_uint16_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_uint16_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_uint16_array_class());
   return NewExternalImpl<ExternalUint16Array, RawExternalUint16Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11545,13 +11535,10 @@
                                                void* peer,
                                                Dart_PeerFinalizer callback,
                                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_int32_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_int32_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_int32_array_class());
   return NewExternalImpl<ExternalInt32Array, RawExternalInt32Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11565,13 +11552,10 @@
                                                  void* peer,
                                                  Dart_PeerFinalizer callback,
                                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_uint32_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_uint32_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_uint32_array_class());
   return NewExternalImpl<ExternalUint32Array, RawExternalUint32Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11585,13 +11569,10 @@
                                                void* peer,
                                                Dart_PeerFinalizer callback,
                                                Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_int64_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_int64_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_int64_array_class());
   return NewExternalImpl<ExternalInt64Array, RawExternalInt64Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11605,13 +11586,10 @@
                                                  void* peer,
                                                  Dart_PeerFinalizer callback,
                                                  Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_uint64_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_uint64_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_uint64_array_class());
   return NewExternalImpl<ExternalUint64Array, RawExternalUint64Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11625,13 +11603,10 @@
                                                    void* peer,
                                                    Dart_PeerFinalizer callback,
                                                    Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_float32_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_float32_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_float32_array_class());
   return NewExternalImpl<ExternalFloat32Array, RawExternalFloat32Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
@@ -11645,13 +11620,10 @@
                                                    void* peer,
                                                    Dart_PeerFinalizer callback,
                                                    Heap::Space space) {
-  Isolate* isolate = Isolate::Current();
-  ASSERT(isolate->object_store()->external_float64_array_class() !=
+  ASSERT(Isolate::Current()->object_store()->external_float64_array_class() !=
          Class::null());
-  const Class& cls =
-      Class::Handle(isolate->object_store()->external_float64_array_class());
   return NewExternalImpl<ExternalFloat64Array, RawExternalFloat64Array>(
-      cls, data, len, peer, callback, space);
+      kClassId, data, len, peer, callback, space);
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 27dc8d1..2836dda 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -150,7 +150,9 @@
   virtual ~Object() { }
 
   RawObject* raw() const { return raw_; }
-  void operator=(RawObject* value) { SetRaw(value); }
+  void operator=(RawObject* value) {
+    initializeHandle(this, value);
+  }
 
   void set_tags(intptr_t value) const {
     // TODO(asiva): Remove the capability of setting tags in general. The mask
@@ -178,7 +180,7 @@
   // Class testers.
 #define DEFINE_CLASS_TESTER(clazz)                                             \
   virtual bool Is##clazz() const { return false; }
-CLASS_LIST_NO_OBJECT(DEFINE_CLASS_TESTER);
+  CLASS_LIST_FOR_HANDLES(DEFINE_CLASS_TESTER);
 #undef DEFINE_CLASS_TESTER
 
   bool IsNull() const { return raw_ == null_; }
@@ -212,7 +214,7 @@
 
   static Object& Handle(Isolate* isolate, RawObject* raw_ptr) {
     Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateHandle(isolate));
-    obj->SetRaw(raw_ptr);
+    initializeHandle(obj, raw_ptr);
     return *obj;
   }
 
@@ -231,7 +233,7 @@
   static Object& ZoneHandle(Isolate* isolate, RawObject* raw_ptr) {
     Object* obj = reinterpret_cast<Object*>(
         VMHandles::AllocateZoneHandle(isolate));
-    obj->SetRaw(raw_ptr);
+    initializeHandle(obj, raw_ptr);
     return *obj;
   }
 
@@ -371,6 +373,17 @@
                                    const String& name,
                                    const Library& lib);
 
+  /* Initialize the handle based on the raw_ptr in the presence of null. */
+  static void initializeHandle(Object* obj, RawObject* raw_ptr) {
+    if (raw_ptr != Object::null()) {
+      obj->SetRaw(raw_ptr);
+    } else {
+      obj->raw_ = Object::null();
+      Object fake_object;
+      obj->set_vtable(fake_object.vtable());
+    }
+  }
+
   cpp_vtable* vtable_address() const {
     uword vtable_addr = reinterpret_cast<uword>(this);
     return reinterpret_cast<cpp_vtable*>(vtable_addr);
@@ -425,6 +438,10 @@
   friend void RawObject::Validate(Isolate* isolate) const;
   friend class Closure;
   friend class SnapshotReader;
+  friend class OneByteString;
+  friend class TwoByteString;
+  friend class ExternalOneByteString;
+  friend class ExternalTwoByteString;
 
   // Disallow allocation.
   void* operator new(size_t size);
@@ -715,6 +732,9 @@
                                     const String& name,
                                     int num_fields);
 
+  // Allocate the raw string classes.
+  static RawClass* NewStringClass(intptr_t class_id);
+
   // Allocate a class representing a function signature described by
   // signature_function, which must be a closure function or a signature
   // function.
@@ -1273,6 +1293,17 @@
   bool IsInlineable() const;
   void set_is_inlinable(bool value) const;
 
+  enum IntrinsicKind {
+    kUnknownIntrinsic = 0,  // Initial value.
+    kIsIntrinsic,
+    kIsNotIntrinsic,
+  };
+
+  IntrinsicKind intrinsic_kind() const {
+    return IntrinsicKindBits::decode(raw_ptr()->kind_tag_);
+  }
+  void set_intrinsic_kind(IntrinsicKind value) const;
+
   bool HasOptimizedCode() const;
 
   // Returns true if the argument counts are valid for calling this function.
@@ -1402,15 +1433,17 @@
 
  private:
   enum KindTagBits {
-    kStaticBit = 1,
-    kConstBit,
-    kOptimizableBit,
-    kInlinableBit,
-    kHasFinallyBit,
-    kNativeBit,
-    kAbstractBit,
-    kExternalBit,
-    kKindTagBit,
+    kStaticBit = 0,
+    kConstBit = 1,
+    kOptimizableBit = 2,
+    kInlinableBit = 3,
+    kHasFinallyBit = 4,
+    kNativeBit = 5,
+    kAbstractBit = 6,
+    kExternalBit = 7,
+    kIntrinsicTagBit = 8,
+    kIntrinsicTagSize = 2,
+    kKindTagBit = 10,
     kKindTagSize = 4,
   };
   class StaticBit : public BitField<bool, kStaticBit, 1> {};
@@ -1421,6 +1454,9 @@
   class NativeBit : public BitField<bool, kNativeBit, 1> {};
   class AbstractBit : public BitField<bool, kAbstractBit, 1> {};
   class ExternalBit : public BitField<bool, kExternalBit, 1> {};
+  class IntrinsicKindBits :
+    public BitField<Function::IntrinsicKind,
+                    kIntrinsicTagBit, kIntrinsicTagSize> {};  // NOLINT
   class KindBits :
     public BitField<RawFunction::Kind, kKindTagBit, kKindTagSize> {};  // NOLINT
 
@@ -2547,6 +2583,11 @@
   // Returns an array indexed by deopt id, containing the extracted ICData.
   RawArray* ExtractTypeFeedbackArray() const;
 
+  // Returns deopt-ids of all static calls that were never resolved, i.e.,
+  // never executed.
+  void ExtractUncalledStaticCallDeoptIds(
+      GrowableArray<intptr_t>* deopt_ids) const;
+
  private:
   // An object finder visitor interface.
   class FindRawCodeVisitor : public FindObjectVisitor {
@@ -3643,9 +3684,9 @@
   static intptr_t Hash(const uint16_t* characters, intptr_t len);
   static intptr_t Hash(const uint32_t* characters, intptr_t len);
 
-  virtual int32_t CharAt(intptr_t index) const;
+  int32_t CharAt(intptr_t index) const;
 
-  virtual intptr_t CharSize() const;
+  intptr_t CharSize() const;
 
   inline bool Equals(const String& str) const;
   inline bool Equals(const String& str,
@@ -3666,12 +3707,28 @@
 
   bool IsSymbol() const { return raw()->IsCanonical(); }
 
-  virtual bool IsExternal() const { return false; }
-  virtual void* GetPeer() const {
-    UNREACHABLE();
-    return NULL;
+  bool IsOneByteString() const {
+    return raw()->GetClassId() == kOneByteStringCid;
   }
 
+  bool IsTwoByteString() const {
+    return raw()->GetClassId() == kTwoByteStringCid;
+  }
+
+  bool IsExternalOneByteString() const {
+    return raw()->GetClassId() == kExternalOneByteStringCid;
+  }
+
+  bool IsExternalTwoByteString() const {
+    return raw()->GetClassId() == kExternalTwoByteStringCid;
+  }
+
+  bool IsExternal() const {
+    return RawObject::IsExternalStringClassId(raw()->GetClassId());
+  }
+
+  void* GetPeer() const;
+
   void ToUTF8(uint8_t* utf8_array, intptr_t array_len) const;
 
   // Creates a new String object from a C string that is assumed to contain
@@ -3775,30 +3832,33 @@
 
   template<typename HandleType, typename ElementType>
   static void ReadFromImpl(SnapshotReader* reader,
-                           HandleType* str_obj,
+                           String* str_obj,
                            intptr_t len,
                            intptr_t tags,
                            Snapshot::Kind kind);
 
   HEAP_OBJECT_IMPLEMENTATION(String, Instance);
 
+  friend class Class;
   friend class Symbols;
+  friend class OneByteString;
+  friend class TwoByteString;
+  friend class ExternalOneByteString;
+  friend class ExternalTwoByteString;
 };
 
 
-class OneByteString : public String {
+class OneByteString : public AllStatic {
  public:
-  virtual int32_t CharAt(intptr_t index) const {
-    return *CharAddr(index);
+  static int32_t CharAt(const String& str, intptr_t index) {
+    return *CharAddr(str, index);
   }
 
-  virtual intptr_t CharSize() const {
-    return kOneByteChar;
-  }
+  static RawOneByteString* EscapeSpecialCharacters(const String& str,
+                                                   bool raw_str);
 
-  RawOneByteString* EscapeSpecialCharacters(bool raw_str) const;
-
-  bool EqualsIgnoringPrivateKey(const OneByteString& str) const;
+  static bool EqualsIgnoringPrivateKey(const String& str1,
+                                       const String& str2);
 
   // We use the same maximum elements for all strings.
   static const intptr_t kBytesPerElement = 1;
@@ -3812,9 +3872,9 @@
   }
 
   static intptr_t InstanceSize(intptr_t len) {
-    ASSERT(sizeof(RawOneByteString) == kSizeofRawString);
+    ASSERT(sizeof(RawOneByteString) == String::kSizeofRawString);
     ASSERT(0 <= len && len <= kMaxElements);
-    return RoundedAllocationSize(
+    return String::RoundedAllocationSize(
         sizeof(RawOneByteString) + (len * kBytesPerElement));
   }
 
@@ -3835,7 +3895,7 @@
   static RawOneByteString* New(const uint32_t* characters,
                                intptr_t len,
                                Heap::Space space);
-  static RawOneByteString* New(const OneByteString& str,
+  static RawOneByteString* New(const String& str,
                                Heap::Space space);
 
   static RawOneByteString* Concat(const String& str1,
@@ -3849,44 +3909,63 @@
                                      const String& str,
                                      Heap::Space space);
 
- private:
-  uint8_t* CharAddr(intptr_t index) const {
-    // TODO(iposva): Determine if we should throw an exception here.
-    ASSERT((index >= 0) && (index < Length()));
-    return &raw_ptr()->data_[index];
+  static const ClassId kClassId = kOneByteStringCid;
+
+  static RawOneByteString* null() {
+    return reinterpret_cast<RawOneByteString*>(Object::null());
   }
 
-  HEAP_OBJECT_IMPLEMENTATION(OneByteString, String);
+ private:
+  static RawOneByteString* raw(const String& str) {
+    return reinterpret_cast<RawOneByteString*>(str.raw());
+  }
+
+  static RawOneByteString* raw_ptr(const String& str) {
+    return reinterpret_cast<RawOneByteString*>(str.raw_ptr());
+  }
+
+  static uint8_t* CharAddr(const String& str, intptr_t index) {
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsOneByteString());
+    NoGCScope no_gc;
+    return &raw_ptr(str)->data_[index];
+  }
+
+  static RawOneByteString* ReadFrom(SnapshotReader* reader,
+                                    intptr_t object_id,
+                                    intptr_t tags,
+                                    Snapshot::Kind kind);
+
   friend class Class;
   friend class String;
+  friend class SnapshotReader;
 };
 
 
-class TwoByteString : public String {
+class TwoByteString : public AllStatic {
  public:
-  virtual int32_t CharAt(intptr_t index) const {
-    return *CharAddr(index);
+  static int32_t CharAt(const String& str, intptr_t index) {
+    return *CharAddr(str, index);
   }
 
-  virtual intptr_t CharSize() const {
-    return kTwoByteChar;
-  }
-
-  RawTwoByteString* EscapeSpecialCharacters(bool raw_str) const;
+  static RawTwoByteString* EscapeSpecialCharacters(const String& str,
+                                                   bool raw_str);
 
   // We use the same maximum elements for all strings.
   static const intptr_t kBytesPerElement = 2;
   static const intptr_t kMaxElements = String::kMaxElements;
 
+  static intptr_t data_offset() { return OFFSET_OF(RawTwoByteString, data_); }
+
   static intptr_t InstanceSize() {
     ASSERT(sizeof(RawTwoByteString) == OFFSET_OF(RawTwoByteString, data_));
     return 0;
   }
 
   static intptr_t InstanceSize(intptr_t len) {
-    ASSERT(sizeof(RawTwoByteString) == kSizeofRawString);
+    ASSERT(sizeof(RawTwoByteString) == String::kSizeofRawString);
     ASSERT(0 <= len && len <= kMaxElements);
-    return RoundedAllocationSize(
+    return String::RoundedAllocationSize(
         sizeof(RawTwoByteString) + (len * kBytesPerElement));
   }
 
@@ -3899,7 +3978,7 @@
                                const uint32_t* characters,
                                intptr_t len,
                                Heap::Space space);
-  static RawTwoByteString* New(const TwoByteString& str,
+  static RawTwoByteString* New(const String& str,
                                Heap::Space space);
 
   static RawTwoByteString* Concat(const String& str1,
@@ -3913,31 +3992,48 @@
                                      const String& str,
                                      Heap::Space space);
 
- private:
-  uint16_t* CharAddr(intptr_t index) const {
-    ASSERT((index >= 0) && (index < Length()));
-    return &raw_ptr()->data_[index];
+  static RawTwoByteString* null() {
+    return reinterpret_cast<RawTwoByteString*>(Object::null());
   }
 
-  HEAP_OBJECT_IMPLEMENTATION(TwoByteString, String);
+
+  static const ClassId kClassId = kTwoByteStringCid;
+
+ private:
+  static RawTwoByteString* raw(const String& str) {
+    return reinterpret_cast<RawTwoByteString*>(str.raw());
+  }
+
+  static RawTwoByteString* raw_ptr(const String& str) {
+    return reinterpret_cast<RawTwoByteString*>(str.raw_ptr());
+  }
+
+  static uint16_t* CharAddr(const String& str, intptr_t index) {
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsTwoByteString());
+    NoGCScope no_gc;
+    return &raw_ptr(str)->data_[index];
+  }
+
+  static RawTwoByteString* ReadFrom(SnapshotReader* reader,
+                                    intptr_t object_id,
+                                    intptr_t tags,
+                                    Snapshot::Kind kind);
+
   friend class Class;
   friend class String;
+  friend class SnapshotReader;
 };
 
 
-class ExternalOneByteString : public String {
+class ExternalOneByteString : public AllStatic {
  public:
-  virtual int32_t CharAt(intptr_t index) const {
-    return *CharAddr(index);
+  static int32_t CharAt(const String& str, intptr_t index) {
+    return *CharAddr(str, index);
   }
 
-  virtual intptr_t CharSize() const {
-    return kOneByteChar;
-  }
-
-  virtual bool IsExternal() const { return true; }
-  virtual void* GetPeer() const {
-    return raw_ptr()->external_data_->peer();
+  static void* GetPeer(const String& str) {
+    return raw_ptr(str)->external_data_->peer();
   }
 
   // We use the same maximum elements for all strings.
@@ -3945,7 +4041,7 @@
   static const intptr_t kMaxElements = String::kMaxElements;
 
   static intptr_t InstanceSize() {
-    return RoundedAllocationSize(sizeof(RawExternalOneByteString));
+    return String::RoundedAllocationSize(sizeof(RawExternalOneByteString));
   }
 
   static RawExternalOneByteString* New(const uint8_t* characters,
@@ -3954,38 +4050,56 @@
                                        Dart_PeerFinalizer callback,
                                        Heap::Space space);
 
- private:
-  const uint8_t* CharAddr(intptr_t index) const {
-    // TODO(iposva): Determine if we should throw an exception here.
-    ASSERT((index >= 0) && (index < Length()));
-    return &(raw_ptr()->external_data_->data()[index]);
+  static RawExternalOneByteString* null() {
+    return reinterpret_cast<RawExternalOneByteString*>(Object::null());
   }
 
-  void SetExternalData(ExternalStringData<uint8_t>* data) {
-    raw_ptr()->external_data_ = data;
+  static const ClassId kClassId = kExternalOneByteStringCid;
+
+ private:
+  static RawExternalOneByteString* raw(const String& str) {
+    return reinterpret_cast<RawExternalOneByteString*>(str.raw());
+  }
+
+  static RawExternalOneByteString* raw_ptr(const String& str) {
+    return reinterpret_cast<RawExternalOneByteString*>(str.raw_ptr());
+  }
+
+  static const uint8_t* CharAddr(const String& str, intptr_t index) {
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsExternalOneByteString());
+    NoGCScope no_gc;
+    return &(raw_ptr(str)->external_data_->data()[index]);
+  }
+
+  static void SetExternalData(const String& str,
+                              ExternalStringData<uint8_t>* data) {
+    ASSERT(str.IsExternalOneByteString());
+    NoGCScope no_gc;
+    raw_ptr(str)->external_data_ = data;
   }
 
   static void Finalize(Dart_Handle handle, void* peer);
 
-  HEAP_OBJECT_IMPLEMENTATION(ExternalOneByteString, String);
+  static RawExternalOneByteString* ReadFrom(SnapshotReader* reader,
+                                            intptr_t object_id,
+                                            intptr_t tags,
+                                            Snapshot::Kind kind);
+
   friend class Class;
   friend class String;
+  friend class SnapshotReader;
 };
 
 
-class ExternalTwoByteString : public String {
+class ExternalTwoByteString : public AllStatic {
  public:
-  virtual int32_t CharAt(intptr_t index) const {
-    return *CharAddr(index);
+  static int32_t CharAt(const String& str, intptr_t index) {
+    return *CharAddr(str, index);
   }
 
-  virtual intptr_t CharSize() const {
-    return kTwoByteChar;
-  }
-
-  virtual bool IsExternal() const { return true; }
-  virtual void* GetPeer() const {
-    return raw_ptr()->external_data_->peer();
+  static void* GetPeer(const String& str) {
+    return raw_ptr(str)->external_data_->peer();
   }
 
   // We use the same maximum elements for all strings.
@@ -3993,7 +4107,7 @@
   static const intptr_t kMaxElements = String::kMaxElements;
 
   static intptr_t InstanceSize() {
-    return RoundedAllocationSize(sizeof(RawExternalTwoByteString));
+    return String::RoundedAllocationSize(sizeof(RawExternalTwoByteString));
   }
 
   static RawExternalTwoByteString* New(const uint16_t* characters,
@@ -4002,22 +4116,45 @@
                                        Dart_PeerFinalizer callback,
                                        Heap::Space space = Heap::kNew);
 
- private:
-  const uint16_t* CharAddr(intptr_t index) const {
-    // TODO(iposva): Determine if we should throw an exception here.
-    ASSERT((index >= 0) && (index < Length()));
-    return &(raw_ptr()->external_data_->data()[index]);
+  static RawExternalTwoByteString* null() {
+    return reinterpret_cast<RawExternalTwoByteString*>(Object::null());
   }
 
-  void SetExternalData(ExternalStringData<uint16_t>* data) {
-    raw_ptr()->external_data_ = data;
+  static const ClassId kClassId = kExternalTwoByteStringCid;
+
+ private:
+  static RawExternalTwoByteString* raw(const String& str) {
+    return reinterpret_cast<RawExternalTwoByteString*>(str.raw());
+  }
+
+  static RawExternalTwoByteString* raw_ptr(const String& str) {
+    return reinterpret_cast<RawExternalTwoByteString*>(str.raw_ptr());
+  }
+
+  static const uint16_t* CharAddr(const String& str, intptr_t index) {
+    ASSERT((index >= 0) && (index < str.Length()));
+    ASSERT(str.IsExternalTwoByteString());
+    NoGCScope no_gc;
+    return &(raw_ptr(str)->external_data_->data()[index]);
+  }
+
+  static void SetExternalData(const String& str,
+                              ExternalStringData<uint16_t>* data) {
+    ASSERT(str.IsExternalTwoByteString());
+    NoGCScope no_gc;
+    raw_ptr(str)->external_data_ = data;
   }
 
   static void Finalize(Dart_Handle handle, void* peer);
 
-  HEAP_OBJECT_IMPLEMENTATION(ExternalTwoByteString, String);
+  static RawExternalTwoByteString* ReadFrom(SnapshotReader* reader,
+                                            intptr_t object_id,
+                                            intptr_t tags,
+                                            Snapshot::Kind kind);
+
   friend class Class;
   friend class String;
+  friend class SnapshotReader;
 };
 
 
@@ -4120,7 +4257,7 @@
   static RawArray* MakeArray(const GrowableObjectArray& growable_array);
 
  protected:
-  static RawArray* New(const Class& cls,
+  static RawArray* New(intptr_t class_id,
                        intptr_t len,
                        Heap::Space space = Heap::kNew);
 
@@ -4276,18 +4413,18 @@
   virtual uint8_t* ByteAddr(intptr_t byte_offset) const;
 
   template<typename HandleT, typename RawT>
-  static RawT* NewImpl(const Class& cls,
+  static RawT* NewImpl(intptr_t class_id,
                        intptr_t len,
                        Heap::Space space);
 
   template<typename HandleT, typename RawT, typename ElementT>
-  static RawT* NewImpl(const Class& cls,
+  static RawT* NewImpl(intptr_t class_id,
                        const ElementT* data,
                        intptr_t len,
                        Heap::Space space);
 
   template<typename HandleT, typename RawT, typename ElementT>
-  static RawT* NewExternalImpl(const Class& cls,
+  static RawT* NewExternalImpl(intptr_t class_id,
                                ElementT* data,
                                intptr_t len,
                                void* peer,
@@ -5657,11 +5794,12 @@
   if ((reinterpret_cast<uword>(raw_) & kSmiTagMask) == kSmiTag) {
     set_vtable(Smi::handle_vtable_);
     return;
-  } else if (raw_ == null_) {
-    set_vtable(handle_vtable_);
-    return;
   }
-
+  intptr_t cid = raw_->GetClassId();
+  if (cid >= kNumPredefinedCids) {
+      cid = kInstanceCid;
+  }
+  set_vtable(builtin_vtables_[cid]);
 #if defined(DEBUG)
   Isolate* isolate = Isolate::Current();
   if (FLAG_verify_handles) {
@@ -5670,17 +5808,9 @@
     ASSERT(isolate_heap->Contains(reinterpret_cast<uword>(raw_->ptr())) ||
            vm_isolate_heap->Contains(reinterpret_cast<uword>(raw_->ptr())));
   }
+  ASSERT(builtin_vtables_[cid] ==
+         isolate->class_table()->At(cid)->ptr()->handle_vtable_);
 #endif
-  intptr_t cid = raw_->GetClassId();
-  if (cid < kNumPredefinedCids) {
-#if defined(DEBUG)
-    ASSERT(builtin_vtables_[cid] ==
-           isolate->class_table()->At(cid)->ptr()->handle_vtable_);
-#endif
-    set_vtable(builtin_vtables_[cid]);
-  } else {
-    set_vtable(builtin_vtables_[kInstanceCid]);
-  }
 }
 
 
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 9347a56..2c35fd7 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -2488,102 +2488,102 @@
 
 
 TEST_CASE(EqualsIgnoringPrivate) {
-  OneByteString& mangled_name = OneByteString::Handle();
-  OneByteString& bare_name = OneByteString::Handle();
+  String& mangled_name = String::Handle();
+  String& bare_name = String::Handle();
 
   // Simple matches.
   mangled_name = OneByteString::New("foo");
   bare_name = OneByteString::New("foo");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo.");
   bare_name = OneByteString::New("foo.");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo.named");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Simple mismatches.
   mangled_name = OneByteString::New("bar");
   bare_name = OneByteString::New("foo");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo.");
   bare_name = OneByteString::New("foo");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo");
   bare_name = OneByteString::New("foo.");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo.name");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   mangled_name = OneByteString::New("foo.named");
   bare_name = OneByteString::New("foo.name");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private match.
   mangled_name = OneByteString::New("foo@12345");
   bare_name = OneByteString::New("foo");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private mismatch.
   mangled_name = OneByteString::New("food@12345");
   bare_name = OneByteString::New("foo");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private mismatch 2.
   mangled_name = OneByteString::New("foo@12345");
   bare_name = OneByteString::New("food");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private constructor match.
   mangled_name = OneByteString::New("foo@12345.");
   bare_name = OneByteString::New("foo.");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private constructor mismatch.
   mangled_name = OneByteString::New("foo@12345.");
   bare_name = OneByteString::New("foo");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Private constructor mismatch 2.
   mangled_name = OneByteString::New("foo@12345");
   bare_name = OneByteString::New("foo.");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named private constructor match.
   mangled_name = OneByteString::New("foo@12345.named");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named private constructor mismatch.
   mangled_name = OneByteString::New("foo@12345.name");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named private constructor mismatch 2.
   mangled_name = OneByteString::New("foo@12345.named");
   bare_name = OneByteString::New("foo.name");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named double-private constructor match.  Yes, this happens.
   mangled_name = OneByteString::New("foo@12345.named@12345");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named double-private constructor mismatch.
   mangled_name = OneByteString::New("foo@12345.name@12345");
   bare_name = OneByteString::New("foo.named");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 
   // Named double-private constructor mismatch.
   mangled_name = OneByteString::New("foo@12345.named@12345");
   bare_name = OneByteString::New("foo.name");
-  EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name));
+  EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
 }
 
 
@@ -2659,9 +2659,9 @@
   {
     // Weak property and value in new. Key in old.
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key", Heap::kOld);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kNew);
     weak ^= WeakProperty::New(Heap::kNew);
     weak.set_key(key);
@@ -2677,9 +2677,9 @@
   {
     // Weak property and value in old. Key in new.
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key", Heap::kNew);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kOld);
     weak ^= WeakProperty::New(Heap::kOld);
     weak.set_key(key);
@@ -2697,7 +2697,7 @@
     HANDLESCOPE(isolate);
     Integer& key = Integer::Handle();
     key ^= Integer::New(31);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kNew);
     weak ^= WeakProperty::New(Heap::kNew);
     weak.set_key(key);
@@ -2715,7 +2715,7 @@
     HANDLESCOPE(isolate);
     Integer& key = Integer::Handle();
     key ^= Integer::New(32);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kOld);
     weak ^= WeakProperty::New(Heap::kOld);
     weak.set_key(key);
@@ -2731,9 +2731,9 @@
   {
     // Weak property and value in new. Key in VM isolate.
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= Symbols::Dot();
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kNew);
     weak ^= WeakProperty::New(Heap::kNew);
     weak.set_key(key);
@@ -2749,9 +2749,9 @@
   {
     // Weak property and value in old. Key in VM isolate.
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= Symbols::Dot();
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kOld);
     weak ^= WeakProperty::New(Heap::kOld);
     weak.set_key(key);
@@ -2775,10 +2775,10 @@
   Array& arr = Array::Handle(Array::New(1));
   {
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key");
     arr.SetAt(0, key);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value");
     weak ^= WeakProperty::New();
     weak.set_key(key);
@@ -2793,11 +2793,11 @@
 TEST_CASE(WeakProperty_PreserveOne_NewSpace) {
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak = WeakProperty::Handle();
-  OneByteString& key = OneByteString::Handle();
+  String& key = String::Handle();
   key ^= OneByteString::New("key");
   {
     HANDLESCOPE(isolate);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value");
     weak ^= WeakProperty::New();
     weak.set_key(key);
@@ -2812,19 +2812,19 @@
 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) {
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak1 = WeakProperty::Handle();
-  OneByteString& key1 = OneByteString::Handle();
+  String& key1 = String::Handle();
   key1 ^= OneByteString::New("key1");
   WeakProperty& weak2 = WeakProperty::Handle();
-  OneByteString& key2 = OneByteString::Handle();
+  String& key2 = String::Handle();
   key2 ^= OneByteString::New("key2");
   {
     HANDLESCOPE(isolate);
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1");
     weak1 ^= WeakProperty::New();
     weak1.set_key(key1);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2");
     weak2 ^= WeakProperty::New();
     weak2.set_key(key2);
@@ -2842,16 +2842,16 @@
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak1 = WeakProperty::Handle();
   WeakProperty& weak2 = WeakProperty::Handle();
-  OneByteString& key = OneByteString::Handle();
+  String& key = String::Handle();
   key ^= OneByteString::New("key");
   {
     HANDLESCOPE(isolate);
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1");
     weak1 ^= WeakProperty::New();
     weak1.set_key(key);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2");
     weak2 ^= WeakProperty::New();
     weak2.set_key(key);
@@ -2868,11 +2868,11 @@
 TEST_CASE(WeakProperty_PreserveOne_OldSpace) {
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak = WeakProperty::Handle();
-  OneByteString& key = OneByteString::Handle();
+  String& key = String::Handle();
   key ^= OneByteString::New("key", Heap::kOld);
   {
     HANDLESCOPE(isolate);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kOld);
     weak ^= WeakProperty::New(Heap::kOld);
     weak.set_key(key);
@@ -2887,19 +2887,19 @@
 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) {
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak1 = WeakProperty::Handle();
-  OneByteString& key1 = OneByteString::Handle();
+  String& key1 = String::Handle();
   key1 ^= OneByteString::New("key1", Heap::kOld);
   WeakProperty& weak2 = WeakProperty::Handle();
-  OneByteString& key2 = OneByteString::Handle();
+  String& key2 = String::Handle();
   key2 ^= OneByteString::New("key2", Heap::kOld);
   {
     HANDLESCOPE(isolate);
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1", Heap::kOld);
     weak1 ^= WeakProperty::New(Heap::kOld);
     weak1.set_key(key1);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2", Heap::kOld);
     weak2 ^= WeakProperty::New(Heap::kOld);
     weak2.set_key(key2);
@@ -2917,16 +2917,16 @@
   Isolate* isolate = Isolate::Current();
   WeakProperty& weak1 = WeakProperty::Handle();
   WeakProperty& weak2 = WeakProperty::Handle();
-  OneByteString& key = OneByteString::Handle();
+  String& key = String::Handle();
   key ^= OneByteString::New("key", Heap::kOld);
   {
     HANDLESCOPE(isolate);
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1", Heap::kOld);
     weak1 ^= WeakProperty::New(Heap::kOld);
     weak1.set_key(key);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2", Heap::kOld);
     weak2 ^= WeakProperty::New(Heap::kOld);
     weak2.set_key(key);
@@ -2945,9 +2945,9 @@
   WeakProperty& weak = WeakProperty::Handle();
   {
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key");
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value");
     weak ^= WeakProperty::New();
     weak.set_key(key);
@@ -2967,14 +2967,14 @@
   WeakProperty& weak2 = WeakProperty::Handle();
   {
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key");
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1");
     weak1 ^= WeakProperty::New();
     weak1.set_key(key);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2");
     weak2 ^= WeakProperty::New();
     weak2.set_key(key);
@@ -2993,9 +2993,9 @@
   WeakProperty& weak = WeakProperty::Handle();
   {
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key", Heap::kOld);
-    OneByteString& value = OneByteString::Handle();
+    String& value = String::Handle();
     value ^= OneByteString::New("value", Heap::kOld);
     weak ^= WeakProperty::New(Heap::kOld);
     weak.set_key(key);
@@ -3015,14 +3015,14 @@
   WeakProperty& weak2 = WeakProperty::Handle();
   {
     HANDLESCOPE(isolate);
-    OneByteString& key = OneByteString::Handle();
+    String& key = String::Handle();
     key ^= OneByteString::New("key", Heap::kOld);
-    OneByteString& value1 = OneByteString::Handle();
+    String& value1 = String::Handle();
     value1 ^= OneByteString::New("value1");
     weak1 ^= WeakProperty::New(Heap::kOld);
     weak1.set_key(key);
     weak1.set_value(value1);
-    OneByteString& value2 = OneByteString::Handle();
+    String& value2 = String::Handle();
     value2 ^= OneByteString::New("value2", Heap::kOld);
     weak2 ^= WeakProperty::New(Heap::kOld);
     weak2.set_key(key);
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 49a088d..2ecd491 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -33,6 +33,7 @@
             "Warning on legacy type Dynamic)");
 DEFINE_FLAG(bool, warn_legacy_getters, false,
             "Warning on legacy getter syntax");
+DECLARE_FLAG(bool, use_cha);
 
 static void CheckedModeHandler(bool value) {
   FLAG_enable_asserts = value;
@@ -342,8 +343,42 @@
 }
 
 
+// Removes optimized code once we load more classes, since --use_cha based
+// optimizations may have become invalid.
+// TODO(srdjan): Note which functions use which CHA decision and deoptimize
+// only the necessary ones.
+static void RemoveOptimizedCode() {
+  ASSERT(FLAG_use_cha);
+  // Deoptimize all live frames.
+  DeoptimizeAll();
+  // Switch all functions' code to unoptimized.
+  const ClassTable& class_table = *Isolate::Current()->class_table();
+  Class& cls = Class::Handle();
+  Array& array = Array::Handle();
+  Function& function = Function::Handle();
+  const intptr_t num_cids = class_table.NumCids();
+  for (intptr_t i = kInstanceCid; i < num_cids; i++) {
+    if (!class_table.HasValidClassAt(i)) continue;
+    cls = class_table.At(i);
+    ASSERT(!cls.IsNull());
+    array = cls.functions();
+    intptr_t num_functions = array.IsNull() ? 0 : array.Length();
+    for (intptr_t f = 0; f < num_functions; f++) {
+      function ^= array.At(f);
+      ASSERT(!function.IsNull());
+      if (function.HasOptimizedCode()) {
+        function.SwitchToUnoptimizedCode();
+      }
+    }
+  }
+}
+
+
 void Parser::ParseCompilationUnit(const Library& library,
                                   const Script& script) {
+  if (FLAG_use_cha) {
+    RemoveOptimizedCode();
+  }
   ASSERT(Isolate::Current()->long_jump_base()->IsSafeToJump());
   TimerScope timer(FLAG_compiler_stats, &CompilerStats::parser_timer);
   Parser parser(script, library);
@@ -547,48 +582,67 @@
         fields_(GrowableObjectArray::Handle(GrowableObjectArray::New())) {
   }
 
+  // Parameter 'name' is the unmangled name, i.e. without the setter
+  // name mangling.
   bool FunctionNameExists(const String& name, RawFunction::Kind kind) const {
     // First check if a function or field of same name exists.
-    if (NameExists<Function>(functions_, name) ||
-        NameExists<Field>(fields_, name)) {
+    if ((kind != RawFunction::kSetterFunction) && FunctionExists(name)) {
       return true;
     }
-    String& accessor_name = String::Handle();
-    if (kind != RawFunction::kSetterFunction) {
-      // Check if a getter function of same name exists.
-      accessor_name = Field::GetterName(name);
-      if (NameExists<Function>(functions_, accessor_name)) {
+    // Now check whether there is a field and whether its implicit getter
+    // or setter collides with the name.
+    Field* field = LookupField(name);
+    if (field != NULL) {
+      if (kind == RawFunction::kSetterFunction) {
+        // It's ok to have an implicit getter, it does not collide with
+        // this setter function.
+        if (!field->is_final()) {
+          return true;
+        }
+      } else {
+        // The implicit getter of the field collides with the name.
         return true;
       }
     }
-    if (kind != RawFunction::kGetterFunction) {
+
+    String& accessor_name = String::Handle();
+    if (kind == RawFunction::kSetterFunction) {
       // Check if a setter function of same name exists.
       accessor_name = Field::SetterName(name);
-      if (NameExists<Function>(functions_, accessor_name)) {
+      if (FunctionExists(accessor_name)) {
+        return true;
+      }
+    } else {
+      // Check if a getter function of same name exists.
+      accessor_name = Field::GetterName(name);
+      if (FunctionExists(accessor_name)) {
         return true;
       }
     }
     return false;
   }
 
-  bool FieldNameExists(const String& name) const {
+  bool FieldNameExists(const String& name, bool check_setter) const {
     // First check if a function or field of same name exists.
-    if (NameExists<Function>(functions_, name) ||
-        NameExists<Field>(fields_, name)) {
+    if (FunctionExists(name) || FieldExists(name)) {
       return true;
     }
     // Now check if a getter/setter function of same name exists.
     String& getter_name = String::Handle(Field::GetterName(name));
-    String& setter_name = String::Handle(Field::SetterName(name));
-    if (NameExists<Function>(functions_, getter_name) ||
-        NameExists<Function>(functions_, setter_name)) {
+    if (FunctionExists(getter_name)) {
       return true;
     }
+    if (check_setter) {
+      String& setter_name = String::Handle(Field::SetterName(name));
+      if (FunctionExists(setter_name)) {
+        return true;
+      }
+    }
     return false;
   }
 
   void AddFunction(const Function& function) {
-    ASSERT(!NameExists<Function>(functions_, String::Handle(function.name())));
+    ASSERT(!FunctionExists(String::Handle(function.name())));
     functions_.Add(function);
   }
 
@@ -597,7 +651,7 @@
   }
 
   void AddField(const Field& field) {
-    ASSERT(!NameExists<Field>(fields_, String::Handle(field.name())));
+    ASSERT(!FieldExists(String::Handle(field.name())));
     fields_.Add(field);
   }
 
@@ -650,18 +704,38 @@
   }
 
  private:
-  template<typename T>
-  bool NameExists(const GrowableObjectArray& list, const String& name) const {
+  Field* LookupField(const String& name) const {
     String& test_name = String::Handle();
-    T& obj = T::Handle();
-    for (int i = 0; i < list.Length(); i++) {
-      obj ^= list.At(i);
-      test_name = obj.name();
+    Field& field = Field::Handle();
+    for (int i = 0; i < fields_.Length(); i++) {
+      field ^= fields_.At(i);
+      test_name = field.name();
       if (name.Equals(test_name)) {
-        return true;
+        return &field;
       }
     }
-    return false;
+    return NULL;
+  }
+
+  bool FieldExists(const String& name) const {
+    return LookupField(name) != NULL;
+  }
+
+  Function* LookupFunction(const String& name) const {
+    String& test_name = String::Handle();
+    Function& func = Function::Handle();
+    for (int i = 0; i < functions_.Length(); i++) {
+      func ^= functions_.At(i);
+      test_name = func.name();
+      if (name.Equals(test_name)) {
+        return &func;
+      }
+    }
+    return NULL;
+  }
+
+  bool FunctionExists(const String& name) const {
+    return LookupFunction(name) != NULL;
   }
 
   const Class& clazz_;
@@ -2703,6 +2777,7 @@
   ASSERT(field->type != NULL);
   ASSERT(field->name_pos > 0);
   ASSERT(current_member_ == field);
+  // All const fields are also final.
   ASSERT(!field->has_const || field->has_final);
 
   if (field->has_abstract) {
@@ -2714,7 +2789,7 @@
   if (field->has_factory) {
     ErrorMsg("keyword 'factory' not allowed in field declaration");
   }
-  if (members->FieldNameExists(*field->name)) {
+  if (members->FieldNameExists(*field->name, !field->has_final)) {
     ErrorMsg(field->name_pos,
              "'%s' field/method already defined\n", field->name->ToCString());
   }
@@ -3831,10 +3906,14 @@
       ErrorMsg(name_pos, "getter for '%s' is already defined",
                var_name.ToCString());
     }
-    accessor_name = Field::SetterName(var_name);
-    if (library_.LookupLocalObject(accessor_name) != Object::null()) {
-      ErrorMsg(name_pos, "setter for '%s' is already defined",
-               var_name.ToCString());
+    // A const or final variable does not define an implicit setter,
+    // so we only check setters for non-final variables.
+    if (!is_final) {
+      accessor_name = Field::SetterName(var_name);
+      if (library_.LookupLocalObject(accessor_name) != Object::null()) {
+        ErrorMsg(name_pos, "setter for '%s' is already defined",
+                 var_name.ToCString());
+      }
     }
 
     field = Field::New(var_name, is_static, is_final, is_const,
@@ -3922,11 +4001,8 @@
     ErrorMsg(name_pos, "'%s' is already defined as getter",
              func_name.ToCString());
   }
-  accessor_name = Field::SetterName(func_name);
-  if (library_.LookupLocalObject(accessor_name) != Object::null()) {
-    ErrorMsg(name_pos, "'%s' is already defined as setter",
-             func_name.ToCString());
-  }
+  // A setter named x= may co-exist with a function named x, thus we do
+  // not need to check setters.
 
   if (CurrentToken() != Token::kLPAREN) {
     ErrorMsg("'(' expected");
@@ -4036,10 +4112,19 @@
              is_getter ? "getter" : "setter");
   }
 
-  if (library_.LookupLocalObject(*field_name) != Object::null()) {
+  if (is_getter && library_.LookupLocalObject(*field_name) != Object::null()) {
     ErrorMsg(name_pos, "'%s' is already defined in this library",
              field_name->ToCString());
   }
+  if (!is_getter) {
+    // Check whether there is a field with the same name that has an implicit
+    // setter.
+    const Field& field = Field::Handle(library_.LookupLocalField(*field_name));
+    if (!field.IsNull() && !field.is_final()) {
+      ErrorMsg(name_pos, "Variable '%s' is already defined in this library",
+               field_name->ToCString());
+    }
+  }
   bool found = library_.LookupLocalObject(accessor_name) != Object::null();
   if (found && !is_patch) {
     ErrorMsg(name_pos, "%s for '%s' is already defined",
@@ -4088,11 +4173,11 @@
 // TODO(hausner): Remove support for old library definition syntax.
 void Parser::ParseLibraryNameObsoleteSyntax() {
   if ((script_.kind() == RawScript::kLibraryTag) &&
-      (CurrentToken() != Token::kLIBRARY)) {
+      (CurrentToken() != Token::kLEGACY_LIBRARY)) {
     // Handle error case early to get consistent error message.
-    ExpectToken(Token::kLIBRARY);
+    ExpectToken(Token::kLEGACY_LIBRARY);
   }
-  if (CurrentToken() == Token::kLIBRARY) {
+  if (CurrentToken() == Token::kLEGACY_LIBRARY) {
     ConsumeToken();
     ExpectToken(Token::kLPAREN);
     if (CurrentToken() != Token::kSTRING) {
@@ -4129,7 +4214,7 @@
 
 // TODO(hausner): Remove support for old library definition syntax.
 void Parser::ParseLibraryImportObsoleteSyntax() {
-  while (CurrentToken() == Token::kIMPORT) {
+  while (CurrentToken() == Token::kLEGACY_IMPORT) {
     const intptr_t import_pos = TokenPos();
     ConsumeToken();
     ExpectToken(Token::kLPAREN);
@@ -4196,7 +4281,7 @@
 
 // TODO(hausner): Remove support for old library definition syntax.
 void Parser::ParseLibraryIncludeObsoleteSyntax() {
-  while (CurrentToken() == Token::kSOURCE) {
+  while (CurrentToken() == Token::kLEGACY_SOURCE) {
     const intptr_t source_pos = TokenPos();
     ConsumeToken();
     ExpectToken(Token::kLPAREN);
@@ -4217,7 +4302,7 @@
 
 
 void Parser::ParseLibraryName() {
-  ASSERT(IsLiteral("library"));
+  ASSERT(CurrentToken() == Token::kLIBRARY);
   ConsumeToken();
   // TODO(hausner): Exact syntax of library name still unclear: identifier,
   // qualified identifier or even multiple dots allowed? For now we just
@@ -4241,8 +4326,8 @@
 
 
 void Parser::ParseLibraryImportExport() {
-  bool is_import = IsLiteral("import");
-  bool is_export = IsLiteral("export");
+  bool is_import = (CurrentToken() == Token::kIMPORT);
+  bool is_export = (CurrentToken() == Token::kEXPORT);
   ASSERT(is_import || is_export);
   const intptr_t import_pos = TokenPos();
   ConsumeToken();
@@ -4352,9 +4437,9 @@
   }
 
   // TODO(hausner): Remove support for old library definition syntax.
-  if ((CurrentToken() == Token::kLIBRARY) ||
-      (CurrentToken() == Token::kIMPORT) ||
-      (CurrentToken() == Token::kSOURCE)) {
+  if ((CurrentToken() == Token::kLEGACY_LIBRARY) ||
+      (CurrentToken() == Token::kLEGACY_IMPORT) ||
+      (CurrentToken() == Token::kLEGACY_SOURCE)) {
     ParseLibraryNameObsoleteSyntax();
     ParseLibraryImportObsoleteSyntax();
     ParseLibraryIncludeObsoleteSyntax();
@@ -4376,14 +4461,15 @@
   // successfully consumed.
   intptr_t metadata_pos = TokenPos();
   SkipMetadata();
-  if (IsLiteral("library")) {
+  if (CurrentToken() == Token::kLIBRARY) {
     ParseLibraryName();
     metadata_pos = TokenPos();
     SkipMetadata();
   } else if (script_.kind() == RawScript::kLibraryTag) {
     ErrorMsg("library name definition expected");
   }
-  while (IsLiteral("import") || IsLiteral("export")) {
+  while ((CurrentToken() == Token::kIMPORT) ||
+      (CurrentToken() == Token::kEXPORT)) {
     ParseLibraryImportExport();
     metadata_pos = TokenPos();
     SkipMetadata();
@@ -4397,14 +4483,11 @@
         Namespace::New(core_lib, Array::Handle(), Array::Handle()));
     library_.AddImport(core_ns);
   }
-  while (IsLiteral("part")) {
+  while (CurrentToken() == Token::kPART) {
     ParseLibraryPart();
     metadata_pos = TokenPos();
     SkipMetadata();
   }
-  if (IsLiteral("library") || IsLiteral("import") || IsLiteral("export")) {
-    ErrorMsg("unexpected token '%s'", CurrentLiteral()->ToCString());
-  }
   SetPosition(metadata_pos);
 }
 
@@ -4415,7 +4498,7 @@
   // TODO(hausner): Once support for old #source directive is removed
   // from the compiler, add an error message here if we don't find
   // a 'part of' directive.
-  if (IsLiteral("part")) {
+  if (CurrentToken() == Token::kPART) {
     ConsumeToken();
     if (!IsLiteral("of")) {
       ErrorMsg("'part of' expected");
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 18ae342..cc6ae14 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -13,7 +13,7 @@
 namespace dart {
 
 // Macrobatics to define the Object hierarchy of VM implementation classes.
-#define CLASS_LIST_NO_OBJECT(V)                                                \
+#define CLASS_LIST_NO_OBJECT_OR_STRING(V)                                      \
   V(Class)                                                                     \
   V(UnresolvedClass)                                                           \
   V(AbstractTypeArguments)                                                     \
@@ -56,11 +56,6 @@
         V(Mint)                                                                \
         V(Bigint)                                                              \
       V(Double)                                                                \
-    V(String)                                                                  \
-      V(OneByteString)                                                         \
-      V(TwoByteString)                                                         \
-      V(ExternalOneByteString)                                                 \
-      V(ExternalTwoByteString)                                                 \
     V(Bool)                                                                    \
     V(Array)                                                                   \
       V(ImmutableArray)                                                        \
@@ -91,6 +86,21 @@
     V(WeakProperty)                                                            \
     V(DartFunction)                                                            \
 
+#define CLASS_LIST_STRINGS(V)                                                  \
+  V(String)                                                                    \
+    V(OneByteString)                                                           \
+    V(TwoByteString)                                                           \
+    V(ExternalOneByteString)                                                   \
+    V(ExternalTwoByteString)
+
+#define CLASS_LIST_FOR_HANDLES(V)                                              \
+  CLASS_LIST_NO_OBJECT_OR_STRING(V)                                            \
+  V(String)
+
+#define CLASS_LIST_NO_OBJECT(V)                                                \
+  CLASS_LIST_NO_OBJECT_OR_STRING(V)                                            \
+  CLASS_LIST_STRINGS(V)
+
 #define CLASS_LIST(V)                                                          \
   V(Object)                                                                    \
   CLASS_LIST_NO_OBJECT(V)
@@ -385,6 +395,7 @@
   friend class Scavenger;
   friend class SnapshotReader;
   friend class SnapshotWriter;
+  friend class String;
 
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(RawObject);
@@ -1493,9 +1504,8 @@
          kSmiCid == kNumberCid + 2 &&
          kMintCid == kNumberCid + 3 &&
          kBigintCid == kNumberCid + 4 &&
-         kDoubleCid == kNumberCid + 5 &&
-         kStringCid == kNumberCid + 6);
-  return (index >= kNumberCid && index < kStringCid);
+         kDoubleCid == kNumberCid + 5);
+  return (index >= kNumberCid && index < kBoolCid);
 }
 
 
@@ -1514,9 +1524,8 @@
   ASSERT(kOneByteStringCid == kStringCid + 1 &&
          kTwoByteStringCid == kStringCid + 2 &&
          kExternalOneByteStringCid == kStringCid + 3 &&
-         kExternalTwoByteStringCid == kStringCid + 4 &&
-         kBoolCid == kStringCid + 5);
-  return (index >= kStringCid && index < kBoolCid);
+         kExternalTwoByteStringCid == kStringCid + 4);
+  return (index >= kStringCid && index <= kExternalTwoByteStringCid);
 }
 
 
@@ -1525,8 +1534,7 @@
   ASSERT(kOneByteStringCid == kStringCid + 1 &&
          kTwoByteStringCid == kStringCid + 2 &&
          kExternalOneByteStringCid == kStringCid + 3 &&
-         kExternalTwoByteStringCid == kStringCid + 4 &&
-         kBoolCid == kStringCid + 5);
+         kExternalTwoByteStringCid == kStringCid + 4);
   return (index == kOneByteStringCid || index == kExternalOneByteStringCid);
 }
 
@@ -1536,8 +1544,7 @@
   ASSERT(kOneByteStringCid == kStringCid + 1 &&
          kTwoByteStringCid == kStringCid + 2 &&
          kExternalOneByteStringCid == kStringCid + 3 &&
-         kExternalTwoByteStringCid == kStringCid + 4 &&
-         kBoolCid == kStringCid + 5);
+         kExternalTwoByteStringCid == kStringCid + 4);
   return (index == kOneByteStringCid ||
           index == kTwoByteStringCid ||
           index == kExternalOneByteStringCid ||
@@ -1550,8 +1557,7 @@
   ASSERT(kOneByteStringCid == kStringCid + 1 &&
          kTwoByteStringCid == kStringCid + 2 &&
          kExternalOneByteStringCid == kStringCid + 3 &&
-         kExternalTwoByteStringCid == kStringCid + 4 &&
-         kBoolCid == kStringCid + 5);
+         kExternalTwoByteStringCid == kStringCid + 4);
   return (index == kExternalOneByteStringCid ||
           index == kExternalTwoByteStringCid);
 }
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index fd67149..1248eca 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -1626,9 +1626,9 @@
 }
 
 
-template<typename HandleType, typename CharacterType>
+template<typename StringType, typename CharacterType>
 void String::ReadFromImpl(SnapshotReader* reader,
-                          HandleType* str_obj,
+                          String* str_obj,
                           intptr_t len,
                           intptr_t tags,
                           Snapshot::Kind kind) {
@@ -1644,11 +1644,11 @@
     *str_obj ^= Symbols::New(ptr, len);
   } else {
     // Set up the string object.
-    *str_obj = HandleType::New(len, HEAP_SPACE(kind));
+    *str_obj = StringType::New(len, HEAP_SPACE(kind));
     str_obj->set_tags(tags);
     str_obj->SetHash(0);  // Will get computed when needed.
     for (intptr_t i = 0; i < len; i++) {
-      *str_obj->CharAddr(i) = reader->Read<CharacterType>();
+      *StringType::CharAddr(*str_obj, i) = reader->Read<CharacterType>();
     }
   }
 }
@@ -1662,8 +1662,7 @@
   ASSERT(reader != NULL);
   intptr_t len = reader->ReadSmiValue();
   intptr_t hash = reader->ReadSmiValue();
-  OneByteString& str_obj = OneByteString::ZoneHandle(reader->isolate(),
-                                                     OneByteString::null());
+  String& str_obj = String::Handle(reader->isolate(), String::null());
 
   if (kind == Snapshot::kFull) {
     ASSERT(reader->isolate()->no_gc_scope_depth() != 0);
@@ -1672,15 +1671,16 @@
     str_obj.set_tags(tags);
     obj->ptr()->hash_ = Smi::New(hash);
     if (len > 0) {
-      uint8_t* raw_ptr = str_obj.CharAddr(0);
+      uint8_t* raw_ptr = CharAddr(str_obj, 0);
       reader->ReadBytes(raw_ptr, len);
     }
     ASSERT((hash == 0) || (String::Hash(str_obj, 0, str_obj.Length()) == hash));
   } else {
-    ReadFromImpl<OneByteString, uint8_t>(reader, &str_obj, len, tags, kind);
+    String::ReadFromImpl<OneByteString, uint8_t>(
+        reader, &str_obj, len, tags, kind);
   }
   reader->AddBackRef(object_id, &str_obj, kIsDeserialized);
-  return str_obj.raw();
+  return raw(str_obj);
 }
 
 
@@ -1692,26 +1692,26 @@
   ASSERT(reader != NULL);
   intptr_t len = reader->ReadSmiValue();
   intptr_t hash = reader->ReadSmiValue();
-  TwoByteString& str_obj = TwoByteString::ZoneHandle(reader->isolate(),
-                                                     TwoByteString::null());
+  String& str_obj = String::Handle(reader->isolate(), String::null());
 
   if (kind == Snapshot::kFull) {
     RawTwoByteString* obj = reader->NewTwoByteString(len);
     str_obj = obj;
     str_obj.set_tags(tags);
     obj->ptr()->hash_ = Smi::New(hash);
-    uint16_t* raw_ptr = (len > 0)? str_obj.CharAddr(0) : NULL;
+    uint16_t* raw_ptr = (len > 0)? CharAddr(str_obj, 0) : NULL;
     for (intptr_t i = 0; i < len; i++) {
-      ASSERT(str_obj.CharAddr(i) == raw_ptr);  // Will trigger assertions.
+      ASSERT(CharAddr(str_obj, i) == raw_ptr);  // Will trigger assertions.
       *raw_ptr = reader->Read<uint16_t>();
       raw_ptr += 1;
     }
     ASSERT(String::Hash(str_obj, 0, str_obj.Length()) == hash);
   } else {
-    ReadFromImpl<TwoByteString, uint16_t>(reader, &str_obj, len, tags, kind);
+    String::ReadFromImpl<TwoByteString, uint16_t>(
+        reader, &str_obj, len, tags, kind);
   }
   reader->AddBackRef(object_id, &str_obj, kIsDeserialized);
-  return str_obj.raw();
+  return raw(str_obj);
 }
 
 
@@ -2032,10 +2032,7 @@
   void* peer = reinterpret_cast<void*>(reader->ReadIntptrValue());             \
   Dart_PeerFinalizer callback =                                                \
       reinterpret_cast<Dart_PeerFinalizer>(reader->ReadIntptrValue());         \
-  const Class& cls = Class::Handle(                                            \
-      reader->isolate()->object_store()->external_##lname##_array_class());    \
-  return NewExternalImpl<External##name##Array, RawExternal##name##Array>(     \
-      cls, data, length, peer, callback, HEAP_SPACE(kind));                    \
+  return New(data, length, peer, callback, HEAP_SPACE(kind));                  \
 }                                                                              \
 
 
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc
index 883f86d..229dfdf 100644
--- a/runtime/vm/scanner.cc
+++ b/runtime/vm/scanner.cc
@@ -24,6 +24,12 @@
     object_store->InitKeywordTable();
     keyword_symbol_table_ = object_store->keyword_symbols();
     ASSERT(!keyword_symbol_table_.IsNull());
+    String& symbol = String::Handle();
+    for (int i = 0; i < Token::numKeywords; i++) {
+      Token::Kind token = static_cast<Token::Kind>(Token::kFirstKeyword + i);
+      symbol = Symbols::New(Token::Str(token));
+      keyword_symbol_table_.SetAt(i, symbol);
+    }
   }
   for (int i = 0; i < Token::numKeywords; i++) {
     Token::Kind token = static_cast<Token::Kind>(Token::kFirstKeyword + i);
@@ -276,10 +282,7 @@
         if (keywords_[i].keyword_symbol == NULL) {
           String& symbol = String::ZoneHandle();
           symbol ^= keyword_symbol_table_.At(i);
-          if (symbol.IsNull()) {
-            symbol = Symbols::New(source_, ident_pos, ident_length);
-            keyword_symbol_table_.SetAt(i, symbol);
-          }
+          ASSERT(!symbol.IsNull());
           keywords_[i].keyword_symbol = &symbol;
         }
         current_token_.literal = keywords_[i].keyword_symbol;
@@ -397,15 +400,15 @@
   const String& kSource = String::Handle(Symbols::Source());
   const String& ident = String::Handle(ConsumeIdentChars(false));
   if (ident.Equals(kLibrary)) {
-    current_token_.kind = Token::kLIBRARY;
+    current_token_.kind = Token::kLEGACY_LIBRARY;
     return;
   }
   if (ident.Equals(kImport)) {
-    current_token_.kind = Token::kIMPORT;
+    current_token_.kind = Token::kLEGACY_IMPORT;
     return;
   }
   if (ident.Equals(kSource)) {
-    current_token_.kind = Token::kSOURCE;
+    current_token_.kind = Token::kLEGACY_SOURCE;
     return;
   }
   ErrorMsg("Unrecognized library token");
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 77204f3..e966889 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -30,7 +30,8 @@
 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 <= kWeakPropertyCid));
+          (class_id >= kInstanceCid && class_id <= kWeakPropertyCid) ||
+          RawObject::IsStringClassId(class_id));
 }
 
 
@@ -431,7 +432,8 @@
   ASSERT(kind_ == Snapshot::kFull);
   ASSERT(isolate()->no_gc_scope_depth() != 0);
   if (class_id < kNumPredefinedCids) {
-    ASSERT((class_id >= kInstanceCid) && (class_id <= kDartFunctionCid));
+    ASSERT((class_id >= kInstanceCid) &&
+           (class_id <= kExternalTwoByteStringCid));
     return isolate()->class_table()->At(class_id);
   }
   cls_ = Object::class_class();
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 3e84b59..d0e57de 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -1140,6 +1140,67 @@
 }
 
 
+UNIT_TEST_CASE(ScriptSnapshot1) {
+  const char* kScriptChars =
+    "class _SimpleNumEnumerable<T extends num> {"
+      "final Iterable<T> _source;"
+      "const _SimpleNumEnumerable(this._source) : super();"
+    "}";
+
+  Dart_Handle result;
+  uint8_t* buffer;
+  intptr_t size;
+  uint8_t* full_snapshot = NULL;
+  uint8_t* script_snapshot = NULL;
+
+  {
+    // Start an Isolate, and create a full snapshot of it.
+    TestIsolateScope __test_isolate__;
+    Dart_EnterScope();  // Start a Dart API scope for invoking API functions.
+
+    // Write out the script snapshot.
+    result = Dart_CreateSnapshot(&buffer, &size);
+    EXPECT_VALID(result);
+    full_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
+    memmove(full_snapshot, buffer, size);
+    Dart_ExitScope();
+  }
+
+  {
+    // Create an Isolate using the full snapshot, load a script and create
+    // a script snapshot of the script.
+    TestCase::CreateTestIsolateFromSnapshot(full_snapshot);
+    Dart_EnterScope();  // Start a Dart API scope for invoking API functions.
+
+    // Create a test library and Load up a test script in it.
+    TestCase::LoadTestScript(kScriptChars, NULL);
+
+    // Write out the script snapshot.
+    result = Dart_CreateScriptSnapshot(&buffer, &size);
+    EXPECT_VALID(result);
+    script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
+    memmove(script_snapshot, buffer, size);
+    Dart_ExitScope();
+    Dart_ShutdownIsolate();
+  }
+
+  {
+    // Now Create an Isolate using the full snapshot and load the
+    // script snapshot created above and execute it.
+    TestCase::CreateTestIsolateFromSnapshot(full_snapshot);
+    Dart_EnterScope();  // Start a Dart API scope for invoking API functions.
+
+    // Load the test library from the snapshot.
+    EXPECT(script_snapshot != NULL);
+    result = Dart_LoadScriptFromSnapshot(script_snapshot);
+    EXPECT_VALID(result);
+  }
+  Dart_ShutdownIsolate();
+  free(full_snapshot);
+  free(script_snapshot);
+}
+
+
 TEST_CASE(IntArrayMessage) {
   StackZone zone(Isolate::Current());
   uint8_t* buffer = NULL;
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index c26e671..9d309e7 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -55,6 +55,7 @@
   V(OneArgCheckInlineCache)                                                    \
   V(TwoArgsCheckInlineCache)                                                   \
   V(ThreeArgsCheckInlineCache)                                                 \
+  V(MegamorphicCall)                                                           \
   V(BreakpointDynamic)                                                         \
   V(EqualityWithNullArg)                                                       \
 
@@ -183,6 +184,9 @@
                                                const Function& func);
   static void GenerateNArgsCheckInlineCacheStub(Assembler* assembler,
                                                 intptr_t num_args);
+  static void GenerateUsageCounterIncrement(Assembler* assembler,
+                                            Register ic_reg,
+                                            Register temp_reg);
 };
 
 }  // namespace dart
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 9be505a..0210021 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1543,6 +1543,27 @@
 }
 
 
+// Loads function into 'temp_reg', preserves 'ic_reg'.
+void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
+                                             Register ic_reg,
+                                             Register temp_reg) {
+  __ movl(temp_reg, FieldAddress(ic_reg, ICData::function_offset()));
+  Label is_hot;
+  if (FlowGraphCompiler::CanOptimize()) {
+    ASSERT(FLAG_optimization_counter_threshold > 1);
+    // The usage_counter is always less than FLAG_optimization_counter_threshold
+    // except when the function gets optimized.
+    __ cmpl(FieldAddress(temp_reg, Function::usage_counter_offset()),
+        Immediate(FLAG_optimization_counter_threshold));
+    __ j(EQUAL, &is_hot, Assembler::kNearJump);
+    // As long as VM has no OSR do not optimize in the middle of the function
+    // but only at exit so that we have collected all type feedback before
+    // optimizing.
+  }
+  __ incl(FieldAddress(temp_reg, Function::usage_counter_offset()));
+  __ Bind(&is_hot);
+}
+
 
 // Generate inline cache check for 'num_args'.
 //  ECX: Inline cache data object.
@@ -1570,26 +1591,6 @@
   }
 #endif  // DEBUG
 
-  __ movl(EBX, FieldAddress(ECX, ICData::function_offset()));
-  Label is_hot;
-  if (FlowGraphCompiler::CanOptimize()) {
-    ASSERT(FLAG_optimization_counter_threshold > 1);
-    // The usage_counter is always less than FLAG_optimization_counter_threshold
-    // except when the function gets optimized.
-    __ cmpl(FieldAddress(EBX, Function::usage_counter_offset()),
-        Immediate(FLAG_optimization_counter_threshold - 1));
-    // Do not increment to equality with threshold, since a counter greater
-    // than threshold denotes a function that was already optimized.
-    // The equality should be reached only at exit of the method
-    // (return instruction).
-    __ j(EQUAL, &is_hot, Assembler::kNearJump);
-    // As long as VM has no OSR do not optimize in the middle of the function
-    // but only at exit so that we have collected all type feedback before
-    // optimizing.
-  }
-  __ incl(FieldAddress(EBX, Function::usage_counter_offset()));
-  __ Bind(&is_hot);
-
   // Loop that checks if there is an IC data match.
   Label loop, update, test, found, get_class_id_as_smi;
   // ECX: IC data object (preserved).
@@ -1712,30 +1713,40 @@
 
 // Use inline cache data array to invoke the target or continue in inline
 // cache miss handler. Stub for 1-argument check (receiver class).
-//  ECX: Inline cache data array
-//  EDX: Arguments array
-//  TOS(0): return address
-// Inline cache data array structure:
+//  ECX: Inline cache data object.
+//  EDX: Arguments array.
+//  TOS(0): Return address.
+// Inline cache data object structure:
 // 0: function-name
 // 1: N, number of arguments checked.
 // 2 .. (length - 1): group of checks, each check containing:
 //   - N classes.
 //   - 1 target function.
 void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, ECX, EBX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 1);
 }
 
 
 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, ECX, EBX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 2);
 }
 
 
 void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, ECX, EBX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 3);
 }
 
 
+// Megamorphic call is currently implemented as IC call but through a stub
+// that does not check/count function invocations.
+void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) {
+  return GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
+
+
 //  ECX: Function object.
 //  EDX: Arguments array.
 //  TOS(0): return address (Dart code).
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index a1dbf92..a75461d 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -1523,6 +1523,26 @@
 }
 
 
+// Loads function into 'temp_reg', preserves 'ic_reg'.
+void StubCode::GenerateUsageCounterIncrement(Assembler* assembler,
+                                             Register ic_reg,
+                                             Register temp_reg) {
+  __ movq(temp_reg, FieldAddress(ic_reg, ICData::function_offset()));
+  Label is_hot;
+  if (FlowGraphCompiler::CanOptimize()) {
+    ASSERT(FLAG_optimization_counter_threshold > 1);
+    // The usage_counter is always less than FLAG_optimization_counter_threshold
+    // except when the function gets optimized.
+    __ cmpq(FieldAddress(temp_reg, Function::usage_counter_offset()),
+        Immediate(FLAG_optimization_counter_threshold));
+    __ j(EQUAL, &is_hot, Assembler::kNearJump);
+    // As long as VM has no OSR do not optimize in the middle of the function
+    // but only at exit so that we have collected all type feedback before
+    // optimizing.
+  }
+  __ incq(FieldAddress(temp_reg, Function::usage_counter_offset()));
+  __ Bind(&is_hot);
+}
 
 // Generate inline cache check for 'num_args'.
 //  RBX: Inline cache data object.
@@ -1550,26 +1570,6 @@
   }
 #endif  // DEBUG
 
-  __ movq(RCX, FieldAddress(RBX, ICData::function_offset()));
-  Label is_hot;
-  if (FlowGraphCompiler::CanOptimize()) {
-    ASSERT(FLAG_optimization_counter_threshold > 1);
-    // The usage_counter is always less than FLAG_optimization_counter_threshold
-    // except when the function gets optimized.
-    __ cmpq(FieldAddress(RCX, Function::usage_counter_offset()),
-        Immediate(FLAG_optimization_counter_threshold - 1));
-    // Do not increment to equality with threshold, since a counter greater
-    // than threshold denotes a function that was already optimized.
-    // The equality should be reached only at exit of the method
-    // (return instruction).
-    __ j(EQUAL, &is_hot, Assembler::kNearJump);
-    // As long as VM has no OSR do not optimize in the middle of the function
-    // but only at exit so that we have collected all type feedback before
-    // optimizing.
-  }
-  __ incq(FieldAddress(RCX, Function::usage_counter_offset()));
-  __ Bind(&is_hot);
-
   // Loop that checks if there is an IC data match.
   Label loop, update, test, found, get_class_id_as_smi;
   // RBX: IC data object (preserved).
@@ -1689,29 +1689,37 @@
 
 // Use inline cache data array to invoke the target or continue in inline
 // cache miss handler. Stub for 1-argument check (receiver class).
-//  RCX: Inline cache data array
-//  RDX: Arguments array
-//  TOS(0): return address
-// Inline cache data array structure:
+//  RBX: Inline cache data object.
+//  RDX: Arguments array.
+//  TOS(0): Return address.
+// Inline cache data object structure:
 // 0: function-name
 // 1: N, number of arguments checked.
 // 2 .. (length - 1): group of checks, each check containing:
 //   - N classes.
 //   - 1 target function.
 void StubCode::GenerateOneArgCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, RBX, RCX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 1);
 }
 
 
 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, RBX, RCX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 2);
 }
 
 
 void StubCode::GenerateThreeArgsCheckInlineCacheStub(Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, RBX, RCX);
   return GenerateNArgsCheckInlineCacheStub(assembler, 3);
 }
 
+// Megamorphic call is currently implemented as IC call but through a stub
+// that does not check/count function invocations.
+void StubCode::GenerateMegamorphicCallStub(Assembler* assembler) {
+  return GenerateNArgsCheckInlineCacheStub(assembler, 1);
+}
 
 //  RBX: Function object.
 //  R10: Arguments array.
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index 3547f87..3572964 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -47,7 +47,7 @@
   ASSERT((sizeof(names) / sizeof(const char*)) == Symbols::kMaxId);
   const Array& symbol_table =
       Array::Handle(isolate->object_store()->symbol_table());
-  dart::OneByteString& str = OneByteString::Handle();
+  dart::String& str = String::Handle();
 
   for (intptr_t i = 1; i < Symbols::kMaxId; i++) {
     str = OneByteString::New(names[i], Heap::kOld);
diff --git a/runtime/vm/token.h b/runtime/vm/token.h
index a4d1d9f..f1199ff 100644
--- a/runtime/vm/token.h
+++ b/runtime/vm/token.h
@@ -134,9 +134,9 @@
                                                                                \
   /* Support for Dart scripts. */                                              \
   TOK(kSCRIPTTAG, "#!", 0, kNoAttribute)                                       \
-  TOK(kLIBRARY, "#library", 0, kNoAttribute)                                   \
-  TOK(kIMPORT, "#import", 0, kNoAttribute)                                     \
-  TOK(kSOURCE, "#source", 0, kNoAttribute)                                     \
+  TOK(kLEGACY_LIBRARY, "#library", 0, kNoAttribute)                            \
+  TOK(kLEGACY_IMPORT, "#import", 0, kNoAttribute)                              \
+  TOK(kLEGACY_SOURCE, "#source", 0, kNoAttribute)                              \
 
 // List of keywords. The list must be alphabetically ordered. The
 // keyword recognition code depends on the ordering.
@@ -154,6 +154,7 @@
   KW(kDEFAULT, "default", 0, kKeyword)                                         \
   KW(kDO, "do", 0, kKeyword)                                                   \
   KW(kELSE, "else", 0, kKeyword)                                               \
+  KW(kEXPORT, "export", 0, kPseudoKeyword)                                     \
   KW(kEXTENDS, "extends", 0, kKeyword)                                         \
   KW(kEXTERNAL, "external", 0, kPseudoKeyword)                                 \
   KW(kFACTORY, "factory", 0, kPseudoKeyword)                                   \
@@ -164,12 +165,15 @@
   KW(kGET, "get", 0, kPseudoKeyword)                                           \
   KW(kIF, "if", 0, kKeyword)                                                   \
   KW(kIMPLEMENTS, "implements", 0, kPseudoKeyword)                             \
+  KW(kIMPORT, "import", 0, kPseudoKeyword)                                     \
   KW(kIN, "in", 0, kKeyword)                                                   \
   KW(kINTERFACE, "interface", 0, kPseudoKeyword)                               \
   KW(kIS, "is", 10, kKeyword)                                                  \
+  KW(kLIBRARY, "library", 0, kPseudoKeyword)                                   \
   KW(kNEW, "new", 0, kKeyword)                                                 \
   KW(kNULL, "null", 0, kKeyword)                                               \
   KW(kOPERATOR, "operator", 0, kPseudoKeyword)                                 \
+  KW(kPART, "part", 0, kPseudoKeyword)                                         \
   KW(kRETURN, "return", 0, kKeyword)                                           \
   KW(kSET, "set", 0, kPseudoKeyword)                                           \
   KW(kSTATIC, "static", 0, kPseudoKeyword)                                     \
diff --git a/runtime/vm/vm.gypi b/runtime/vm/vm.gypi
index f84916f..cc45491 100644
--- a/runtime/vm/vm.gypi
+++ b/runtime/vm/vm.gypi
@@ -129,7 +129,7 @@
       'type': 'none',
       'includes': [
         # Load the shared core library sources.
-        '../../lib/core/corelib_sources.gypi',
+        '../../sdk/lib/core/corelib_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -205,7 +205,7 @@
       'type': 'none',
       'includes': [
         # Load the shared core library sources.
-        '../../lib/coreimpl/corelib_impl_sources.gypi',
+        '../../sdk/lib/coreimpl/corelib_impl_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -281,7 +281,7 @@
       'type': 'none',
       'includes': [
         # Load the shared collection library sources.
-        '../../lib/collection/collection_sources.gypi',
+        '../../sdk/lib/collection/collection_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -319,7 +319,7 @@
       'type': 'none',
       'includes': [
         # Load the shared math library sources.
-        '../../lib/math/math_sources.gypi',
+        '../../sdk/lib/math/math_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -395,7 +395,7 @@
       'type': 'none',
       'includes': [
         # Load the shared core library sources.
-        '../../lib/mirrors/mirrors_sources.gypi',
+        '../../sdk/lib/mirrors/mirrors_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -471,7 +471,7 @@
       'type': 'none',
       'includes': [
         # Load the runtime implementation sources.
-        '../../lib/isolate/isolate_sources.gypi',
+        '../../sdk/lib/isolate/isolate_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
@@ -547,7 +547,7 @@
       'type': 'none',
       'includes': [
         # Load the shared library sources.
-        '../../lib/scalarlist/scalarlist_sources.gypi',
+        '../../sdk/lib/scalarlist/scalarlist_sources.gypi',
       ],
       'sources/': [
         # Exclude all .[cc|h] files.
diff --git a/lib/compiler/compiler.dart b/sdk/lib/_internal/compiler/compiler.dart
similarity index 92%
rename from lib/compiler/compiler.dart
rename to sdk/lib/_internal/compiler/compiler.dart
index 258a8b4..af37116 100644
--- a/lib/compiler/compiler.dart
+++ b/sdk/lib/_internal/compiler/compiler.dart
@@ -2,10 +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.
 
-#library('compiler');
+library compiler;
 
-#import('dart:uri');
-#import('implementation/apiimpl.dart');
+import 'dart:uri';
+import 'implementation/apiimpl.dart';
 
 // Unless explicitly allowed, passing [:null:] for any argument to the
 // methods of library will result in a NullPointerException being
@@ -43,6 +43,12 @@
                        ReadStringFromUri provider,
                        DiagnosticHandler handler,
                        [List<String> options = const []]) {
+  if (!libraryRoot.path.endsWith("/")) {
+    throw new ArgumentError("libraryRoot must end with a /");
+  }
+  if (packageRoot != null && !packageRoot.path.endsWith("/")) {
+    throw new ArgumentError("packageRoot must end with a /");
+  }
   // TODO(ahe): Consider completing the future with an exception if
   // code is null.
   Compiler compiler = new Compiler(provider, handler, libraryRoot, packageRoot,
diff --git a/lib/compiler/implementation/README.txt b/sdk/lib/_internal/compiler/implementation/README.txt
similarity index 100%
rename from lib/compiler/implementation/README.txt
rename to sdk/lib/_internal/compiler/implementation/README.txt
diff --git a/lib/compiler/implementation/apiimpl.dart b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
similarity index 94%
rename from lib/compiler/implementation/apiimpl.dart
rename to sdk/lib/_internal/compiler/implementation/apiimpl.dart
index 8bcd5ca..0d92a95 100644
--- a/lib/compiler/implementation/apiimpl.dart
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
@@ -11,7 +11,7 @@
 import 'tree/tree.dart' as tree;
 import 'elements/elements.dart' as elements;
 import 'ssa/tracer.dart' as ssa;
-import '../../../lib/_internal/libraries.dart';
+import '../../libraries.dart';
 import 'source_file.dart';
 
 class Compiler extends leg.Compiler {
@@ -34,7 +34,14 @@
             disallowUnsafeEval: hasOption(options, '--disallow-unsafe-eval'),
             strips: getStrips(options),
             enableConcreteTypeInference:
-              hasOption(options, '--enable-concrete-type-inference'));
+              hasOption(options, '--enable-concrete-type-inference')) {
+    if (!libraryRoot.path.endsWith("/")) {
+      throw new ArgumentError("libraryRoot must end with a /");
+    }
+    if (packageRoot != null && !packageRoot.path.endsWith("/")) {
+      throw new ArgumentError("packageRoot must end with a /");
+    }
+  }
 
   static List<String> getStrips(List<String> options) {
     for (String option in options) {
diff --git a/lib/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
similarity index 100%
rename from lib/compiler/implementation/closure.dart
rename to sdk/lib/_internal/compiler/implementation/closure.dart
diff --git a/lib/compiler/implementation/code_buffer.dart b/sdk/lib/_internal/compiler/implementation/code_buffer.dart
similarity index 100%
rename from lib/compiler/implementation/code_buffer.dart
rename to sdk/lib/_internal/compiler/implementation/code_buffer.dart
diff --git a/lib/compiler/implementation/colors.dart b/sdk/lib/_internal/compiler/implementation/colors.dart
similarity index 96%
rename from lib/compiler/implementation/colors.dart
rename to sdk/lib/_internal/compiler/implementation/colors.dart
index aa9a6a8..42b3e7f 100644
--- a/lib/compiler/implementation/colors.dart
+++ b/sdk/lib/_internal/compiler/implementation/colors.dart
@@ -2,7 +2,7 @@
 // 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('colors');
+library colors;
 
 const String GREEN_COLOR = '\u001b[32m';
 const String RED_COLOR = '\u001b[31m';
diff --git a/lib/compiler/implementation/compile_time_constants.dart b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
similarity index 99%
rename from lib/compiler/implementation/compile_time_constants.dart
rename to sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
index 0b1a61e..e005cd7 100644
--- a/lib/compiler/implementation/compile_time_constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/compile_time_constants.dart
@@ -301,8 +301,7 @@
 
   Constant visitLiteralMap(LiteralMap node) {
     if (!node.isConst()) {
-      signalNotCompileTimeConstant(node);
-      error(node);
+      return signalNotCompileTimeConstant(node);
     }
     List<StringConstant> keys = <StringConstant>[];
     Map<StringConstant, Constant> map = new Map<StringConstant, Constant>();
diff --git a/lib/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
similarity index 97%
rename from lib/compiler/implementation/compiler.dart
rename to sdk/lib/_internal/compiler/implementation/compiler.dart
index 0f5fa17..774c2c6 100644
--- a/lib/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -72,12 +72,12 @@
     });
   }
 
-  abstract void enqueueHelpers(Enqueuer world);
-  abstract void codegen(WorkItem work);
-  abstract void processNativeClasses(Enqueuer world,
-                                     Collection<LibraryElement> libraries);
-  abstract void assembleProgram();
-  abstract List<CompilerTask> get tasks;
+  void enqueueHelpers(Enqueuer world);
+  void codegen(WorkItem work);
+  void processNativeClasses(Enqueuer world,
+                            Collection<LibraryElement> libraries);
+  void assembleProgram();
+  List<CompilerTask> get tasks;
 
   // TODO(ahe,karlklose): rename this?
   void dumpInferredTypes() {}
@@ -88,7 +88,7 @@
 
   SourceString getCheckedModeHelper(DartType type) => null;
 
-  abstract Element getInterceptor(Selector selector);
+  Element getInterceptor(Selector selector);
 }
 
 abstract class Compiler implements DiagnosticListener {
@@ -127,6 +127,7 @@
   ClassElement functionClass;
   ClassElement nullClass;
   ClassElement listClass;
+  ClassElement typeClass;
   ClassElement mapClass;
   ClassElement jsInvocationMirrorClass;
   Element assertMethod;
@@ -383,7 +384,7 @@
     }
   }
 
-  abstract LibraryElement scanBuiltinLibrary(String filename);
+  LibraryElement scanBuiltinLibrary(String filename);
 
   void initializeSpecialClasses() {
     bool coreLibValid = true;
@@ -403,6 +404,7 @@
     stringClass = lookupSpecialClass(const SourceString('String'));
     functionClass = lookupSpecialClass(const SourceString('Function'));
     listClass = lookupSpecialClass(const SourceString('List'));
+    typeClass = lookupSpecialClass(const SourceString('Type'));
     mapClass = lookupSpecialClass(const SourceString('Map'));
     jsInvocationMirrorClass =
         lookupSpecialClass(const SourceString('JSInvocationMirror'));
@@ -458,7 +460,7 @@
    * Get an [Uri] pointing to a patch for the dart: library with
    * the given path. Returns null if there is no patch.
    */
-  abstract Uri resolvePatchUri(String dartLibraryPath);
+  Uri resolvePatchUri(String dartLibraryPath);
 
   /** Define the JS helper functions in the given library. */
   void addForeignFunctions(LibraryElement library) {
@@ -482,11 +484,13 @@
     String libraryName = library.uri.toString();
     if (library.entryCompilationUnit.script.name.contains(
             'dart/tests/compiler/dart2js_native')
+        || libraryName == 'dart:mirrors'
         || libraryName == 'dart:isolate'
         || libraryName == 'dart:math'
         || libraryName == 'dart:html') {
-      if (libraryName == 'dart:html') {
+      if (libraryName == 'dart:html' || libraryName == 'dart:mirrors') {
         // dart:html needs access to convertDartClosureToJS.
+        // dart:mirrors needs access to the Primitives class.
         importHelperLibrary(library);
       }
       library.addToScope(findHelper(const SourceString('JS')), this);
@@ -748,8 +752,7 @@
     reportDiagnostic(span, "$message", kind);
   }
 
-  abstract void reportDiagnostic(SourceSpan span, String message,
-                                 api.Diagnostic kind);
+  void reportDiagnostic(SourceSpan span, String message, api.Diagnostic kind);
 
   SourceSpan spanFromTokens(Token begin, Token end, [Uri uri]) {
     if (begin == null || end == null) {
diff --git a/lib/compiler/implementation/constant_system.dart b/sdk/lib/_internal/compiler/implementation/constant_system.dart
similarity index 100%
rename from lib/compiler/implementation/constant_system.dart
rename to sdk/lib/_internal/compiler/implementation/constant_system.dart
diff --git a/lib/compiler/implementation/constant_system_dart.dart b/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
similarity index 98%
rename from lib/compiler/implementation/constant_system_dart.dart
rename to sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
index ad01e99..7899d17 100644
--- a/lib/compiler/implementation/constant_system_dart.dart
+++ b/sdk/lib/_internal/compiler/implementation/constant_system_dart.dart
@@ -69,7 +69,7 @@
     return null;
   }
 
-  abstract int foldInts(int left, int right);
+  int foldInts(int left, int right);
 }
 
 class BitOrOperation extends BinaryBitOperation {
@@ -128,7 +128,7 @@
     return null;
   }
 
-  abstract bool foldBools(bool left, bool right);
+  bool foldBools(bool left, bool right);
 }
 
 class BooleanAndOperation extends BinaryBoolOperation {
@@ -172,7 +172,7 @@
 
   bool isDivide() => false;
   num foldInts(int left, int right) => foldNums(left, right);
-  abstract num foldNums(num left, num right);
+  num foldNums(num left, num right);
 }
 
 class SubtractOperation extends ArithmeticNumOperation {
@@ -254,7 +254,7 @@
     }
   }
 
-  abstract bool foldNums(num left, num right);
+  bool foldNums(num left, num right);
 }
 
 class LessOperation extends RelationalNumOperation {
diff --git a/lib/compiler/implementation/constants.dart b/sdk/lib/_internal/compiler/implementation/constants.dart
similarity index 97%
rename from lib/compiler/implementation/constants.dart
rename to sdk/lib/_internal/compiler/implementation/constants.dart
index d4b0e8a..6e20124 100644
--- a/lib/compiler/implementation/constants.dart
+++ b/sdk/lib/_internal/compiler/implementation/constants.dart
@@ -42,11 +42,11 @@
   bool isNaN() => false;
   bool isMinusZero() => false;
 
-  abstract DartType computeType(Compiler compiler);
+  DartType computeType(Compiler compiler);
 
-  abstract List<Constant> getDependencies();
+  List<Constant> getDependencies();
 
-  abstract accept(ConstantVisitor);
+  accept(ConstantVisitor);
 }
 
 class SentinelConstant extends Constant {
@@ -93,7 +93,7 @@
 }
 
 abstract class PrimitiveConstant extends Constant {
-  abstract get value;
+  get value;
   const PrimitiveConstant();
   bool isPrimitive() => true;
 
@@ -107,7 +107,7 @@
   String toString() => value.toString();
   // Primitive constants don't have dependencies.
   List<Constant> getDependencies() => const <Constant>[];
-  abstract DartString toDartString();
+  DartString toDartString();
 }
 
 class NullConstant extends PrimitiveConstant {
@@ -135,7 +135,7 @@
 }
 
 abstract class NumConstant extends PrimitiveConstant {
-  abstract num get value;
+  num get value;
   const NumConstant();
   bool isNum() => true;
 }
@@ -240,7 +240,7 @@
     return compiler.boolClass.computeType(compiler);
   }
 
-  abstract BoolConstant negate();
+  BoolConstant negate();
 }
 
 class TrueConstant extends BoolConstant {
@@ -318,7 +318,7 @@
 
   // TODO(1603): The class should be marked as abstract, but the VM doesn't
   // currently allow this.
-  abstract int get hashCode;
+  int get hashCode;
 }
 
 class ListConstant extends ObjectConstant {
diff --git a/lib/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
similarity index 97%
rename from lib/compiler/implementation/dart2js.dart
rename to sdk/lib/_internal/compiler/implementation/dart2js.dart
index eafb1e6..f6a91d7 100644
--- a/lib/compiler/implementation/dart2js.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
@@ -2,19 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#library('dart2js');
+library dart2js;
 
-#import('dart:io');
-#import('dart:uri');
-#import('dart:utf');
+import 'dart:io';
+import 'dart:uri';
+import 'dart:utf';
 
-#import('../compiler.dart', prefix: 'api');
-#import('colors.dart', prefix: 'colors');
-#import('source_file.dart');
-#import('filenames.dart');
-#import('util/uri_extras.dart');
+import '../compiler.dart' as api;
+import 'colors.dart' as colors;
+import 'source_file.dart';
+import 'filenames.dart';
+import 'util/uri_extras.dart';
 
-const String LIBRARY_ROOT = '../../../..';
+const String LIBRARY_ROOT = '../../../../..';
 const String OUTPUT_LANGUAGE_DART = 'Dart';
 
 typedef void HandleOption(String option);
diff --git a/lib/compiler/implementation/dart2jslib.dart b/sdk/lib/_internal/compiler/implementation/dart2jslib.dart
similarity index 100%
rename from lib/compiler/implementation/dart2jslib.dart
rename to sdk/lib/_internal/compiler/implementation/dart2jslib.dart
diff --git a/lib/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
similarity index 98%
rename from lib/compiler/implementation/dart_backend/backend.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 0ac9d3e..101918b 100644
--- a/lib/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -264,11 +264,12 @@
      * Tells whether we should output given element. Corelib classes like
      * Object should not be in the resulting code.
      */
-    bool shouldOutput(Element element) =>
-      !identical(element.kind, ElementKind.VOID) &&
-      isUserLibrary(element.getLibrary()) &&
-      element is !SynthesizedConstructorElement &&
-      element is !AbstractFieldElement;
+    bool shouldOutput(Element element) {
+      return !identical(element.kind, ElementKind.VOID)
+          && isUserLibrary(element.getLibrary())
+          && element is !SynthesizedConstructorElement
+          && element is !AbstractFieldElement;
+    }
 
     final elementAsts = new Map<Element, ElementAst>();
 
@@ -315,8 +316,7 @@
       if (shouldOutput(classElement)) addClass(classElement);
     });
     resolvedElements.forEach((element, treeElements) {
-      if (!shouldOutput(element)) return;
-
+      if (!shouldOutput(element) || treeElements == null) return;
       var elementAst = new ElementAst.rewrite(
           compiler, parse(element), treeElements, stripAsserts);
       if (element.isField()) {
diff --git a/lib/compiler/implementation/dart_backend/dart_backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart
similarity index 100%
rename from lib/compiler/implementation/dart_backend/dart_backend.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart
diff --git a/lib/compiler/implementation/dart_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/emitter.dart
similarity index 100%
rename from lib/compiler/implementation/dart_backend/emitter.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/emitter.dart
diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
similarity index 99%
rename from lib/compiler/implementation/dart_backend/placeholder_collector.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
index c0e51de..34d36bc 100644
--- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -130,6 +130,10 @@
   internalError(String reason, {Node node}) {
     collector.internalError(reason, node: node);
   }
+
+  visitTypeReferenceSend(Send node) {
+    collector.makeElementPlaceholder(node.selector, elements[node]);
+  }
 }
 
 class PlaceholderCollector extends Visitor {
diff --git a/lib/compiler/implementation/dart_backend/renamer.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
similarity index 99%
rename from lib/compiler/implementation/dart_backend/renamer.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
index 7b71afa..d41d5b2 100644
--- a/lib/compiler/implementation/dart_backend/renamer.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/renamer.dart
@@ -24,8 +24,8 @@
     return typeDiff != 0 ? typeDiff : compareInternals(other);
   }
 
-  abstract int compareInternals(Renamable other);
-  abstract int getTypeId();
+  int compareInternals(Renamable other);
+  int getTypeId();
 
   String rename() => renamer(this);
 }
diff --git a/lib/compiler/implementation/dart_backend/utils.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart
similarity index 100%
rename from lib/compiler/implementation/dart_backend/utils.dart
rename to sdk/lib/_internal/compiler/implementation/dart_backend/utils.dart
diff --git a/lib/compiler/implementation/diagnostic_listener.dart b/sdk/lib/_internal/compiler/implementation/diagnostic_listener.dart
similarity index 100%
rename from lib/compiler/implementation/diagnostic_listener.dart
rename to sdk/lib/_internal/compiler/implementation/diagnostic_listener.dart
diff --git a/lib/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
similarity index 95%
rename from lib/compiler/implementation/elements/elements.dart
rename to sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 82808cf..684ba90 100644
--- a/lib/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -116,6 +116,8 @@
   static const ElementKind VOID =
     const ElementKind('void', ElementCategory.NONE);
 
+  static const ElementKind AMBIGUOUS =
+      const ElementKind('ambiguous', ElementCategory.NONE);
   static const ElementKind ERROR =
       const ElementKind('error', ElementCategory.NONE);
 
@@ -195,6 +197,9 @@
   /** See [ErroneousElement] for documentation. */
   bool isErroneous() => false;
 
+  /** See [AmbiguousElement] for documentation. */
+  bool isAmbiguous() => false;
+
   /**
    * Is [:true:] if this element has a corresponding patch.
    *
@@ -374,15 +379,13 @@
  * to check for unresolvable elements instead of
  *   [: element == null :].
  */
-class ErroneousElement extends Element {
+class ErroneousElement extends Element implements FunctionElement {
   final MessageKind messageKind;
   final List messageArguments;
-  final SourceString targetName;
 
   ErroneousElement(this.messageKind, this.messageArguments,
-                   this.targetName, Element enclosing)
-      : super(const SourceString('erroneous element'),
-              ElementKind.ERROR, enclosing);
+                   SourceString name, Element enclosing)
+      : super(name, ElementKind.ERROR, enclosing);
 
   isErroneous() => true;
 
@@ -390,23 +393,7 @@
     throw 'unsupported operation on erroneous element';
   }
 
-  SourceString get name => unsupported();
   Link<MetadataAnnotation> get metadata => unsupported();
-
-  getLibrary() => enclosingElement.getLibrary();
-
-  String toString() {
-    String n = targetName.slowToString();
-    return '<$n: ${messageKind.message(messageArguments)}>';
-  }
-}
-
-class ErroneousFunctionElement extends ErroneousElement
-                               implements FunctionElement {
-  ErroneousFunctionElement(MessageKind messageKind, List messageArguments,
-                           SourceString targetName, Element enclosing)
-      : super(messageKind, messageArguments, targetName, enclosing);
-
   get type => unsupported();
   get cachedNode => unsupported();
   get functionSignature => unsupported();
@@ -420,6 +407,52 @@
   requiredParameterCount(compiler) => unsupported();
   optionalParameterCount(compiler) => unsupported();
   parameterCount(copmiler) => unsupported();
+
+  get redirectionTarget => this;
+
+  getLibrary() => enclosingElement.getLibrary();
+
+  String toString() {
+    String n = name.slowToString();
+    return '<$n: ${messageKind.message(messageArguments)}>';
+  }
+}
+
+/**
+ * An ambiguous element represent multiple elements accessible by the same name.
+ *
+ * Ambiguous elements are created during handling of import/export scopes. If an
+ * ambiguous element is encountered during resolution a warning/error should be
+ * reported.
+ */
+class AmbiguousElement extends Element {
+  /**
+   * The message to report on resolving this element.
+   */
+  final MessageKind messageKind;
+
+  /**
+   * The message arguments to report on resolving this element.
+   */
+  final List messageArguments;
+
+  /**
+   * The first element that this ambiguous element might refer to.
+   */
+  final Element existingElement;
+
+  /**
+   * The second element that this ambiguous element might refer to.
+   */
+  final Element newElement;
+
+  AmbiguousElement(this.messageKind, this.messageArguments,
+      Element enclosingElement, Element existingElement, Element newElement)
+      : this.existingElement = existingElement,
+        this.newElement = newElement,
+        super(existingElement.name, ElementKind.AMBIGUOUS, enclosingElement);
+
+  bool isAmbiguous() => true;
 }
 
 class ContainerElement extends Element {
@@ -660,13 +693,11 @@
   void addImport(Element element, DiagnosticListener listener) {
     Element existing = importScope[element.name];
     if (existing != null) {
-      if (!existing.isErroneous()) {
-        // TODO(johnniwinther): Provide access to both the new and existing
-        // elements.
-        importScope[element.name] = new ErroneousElement(
-            MessageKind.DUPLICATE_IMPORT,
-            [element.name], element.name, this);
-      }
+      // TODO(johnniwinther): Provide access to the import tags from which
+      // the elements came.
+      importScope[element.name] = new AmbiguousElement(
+          MessageKind.DUPLICATE_IMPORT, [element.name],
+          this, existing, element);
     } else {
       importScope[element.name] = element;
     }
@@ -1101,10 +1132,14 @@
   FunctionElement origin = null;
 
   /**
-   * If this is an interface constructor, [defaultImplementation] will
-   * changed by the resolver to point to the default
-   * implementation. Otherwise, [:defaultImplementation === this:].
+   * If this is a redirecting factory, [defaultImplementation] will be
+   * changed by the resolver to point to the redirection target.  If
+   * this is an interface constructor, [defaultImplementation] will be
+   * changed by the resolver to point to the default implementation.
+   * Otherwise, [:defaultImplementation === this:].
    */
+  // TODO(ahe): Rename this field to redirectionTarget and remove
+  // mention of interface constructors above.
   FunctionElement defaultImplementation;
 
   FunctionElement(SourceString name,
@@ -1141,6 +1176,24 @@
   bool get isPatched => patch != null;
   bool get isPatch => origin != null;
 
+  FunctionElement get redirectionTarget {
+    if (this == defaultImplementation) return this;
+    Element target = defaultImplementation;
+    Set<Element> seen = new Set<Element>();
+    seen.add(target);
+    while (!target.isErroneous() && target != target.defaultImplementation) {
+      target = target.defaultImplementation;
+      if (seen.contains(target)) {
+        // TODO(ahe): This is expedient for now, but it should be
+        // checked by the resolver.  Keeping http://dartbug.com/3970
+        // open to track this.
+        throw new SpannableAssertionFailure(
+            target, 'redirecting factory leads to cycle');
+      }
+    }
+    return target;
+  }
+
   /**
    * Applies a patch function to this function. The patch function's body
    * is used as replacement when parsing this function's body.
@@ -1280,7 +1333,7 @@
    */
   // TODO(johnniwinther): Find a (better) way to decouple [typeVariables] from
   // [Compiler].
-  abstract Link<DartType> get typeVariables;
+  Link<DartType> get typeVariables;
 
   /**
    * Creates the type variables, their type and corresponding element, for the
@@ -1332,7 +1385,7 @@
       resolutionState = initialState,
       super(name, ElementKind.CLASS, enclosing);
 
-  abstract ClassNode parseNode(Compiler compiler);
+  ClassNode parseNode(Compiler compiler);
 
   InterfaceType computeType(compiler) {
     if (type == null) {
@@ -1948,7 +2001,7 @@
    * The compile-time constant which this annotation resolves to.
    * In the mirror system, this would be an object mirror.
    */
-  abstract Constant get value;
+  Constant get value;
   Element annotatedElement;
   int resolutionState;
 
diff --git a/lib/compiler/implementation/enqueue.dart b/sdk/lib/_internal/compiler/implementation/enqueue.dart
similarity index 100%
rename from lib/compiler/implementation/enqueue.dart
rename to sdk/lib/_internal/compiler/implementation/enqueue.dart
diff --git a/lib/compiler/implementation/filenames.dart b/sdk/lib/_internal/compiler/implementation/filenames.dart
similarity index 92%
rename from lib/compiler/implementation/filenames.dart
rename to sdk/lib/_internal/compiler/implementation/filenames.dart
index d3f4e7b..ddfe506 100644
--- a/lib/compiler/implementation/filenames.dart
+++ b/sdk/lib/_internal/compiler/implementation/filenames.dart
@@ -2,10 +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.
 
-#library('filenames');
+library filenames;
 
-#import('dart:io');
-#import('dart:uri');
+import 'dart:io';
+import 'dart:uri';
 
 // TODO(ahe): This library should be replaced by a general
 // path-munging library.
diff --git a/lib/compiler/implementation/js/js.dart b/sdk/lib/_internal/compiler/implementation/js/js.dart
similarity index 100%
rename from lib/compiler/implementation/js/js.dart
rename to sdk/lib/_internal/compiler/implementation/js/js.dart
diff --git a/lib/compiler/implementation/js/nodes.dart b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
similarity index 98%
rename from lib/compiler/implementation/js/nodes.dart
rename to sdk/lib/_internal/compiler/implementation/js/nodes.dart
index ae0ae14..18139b2 100644
--- a/lib/compiler/implementation/js/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
@@ -147,8 +147,8 @@
   var sourcePosition;
   var endSourcePosition;
 
-  abstract accept(NodeVisitor visitor);
-  abstract void visitChildren(NodeVisitor visitor);
+  accept(NodeVisitor visitor);
+  void visitChildren(NodeVisitor visitor);
 }
 
 class Program extends Node {
@@ -428,7 +428,7 @@
 }
 
 abstract class Expression extends Node {
-  abstract int get precedenceLevel;
+  int get precedenceLevel;
 }
 
 class LiteralExpression extends Expression {
@@ -645,7 +645,7 @@
   // referenced like other variables.
   VariableReference(this.name);
 
-  abstract accept(NodeVisitor visitor);
+  accept(NodeVisitor visitor);
   int get precedenceLevel => PRIMARY;
   void visitChildren(NodeVisitor visitor) {}
 }
diff --git a/lib/compiler/implementation/js/precedence.dart b/sdk/lib/_internal/compiler/implementation/js/precedence.dart
similarity index 97%
rename from lib/compiler/implementation/js/precedence.dart
rename to sdk/lib/_internal/compiler/implementation/js/precedence.dart
index 0a548f1..6d66f1f 100644
--- a/lib/compiler/implementation/js/precedence.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/precedence.dart
@@ -2,7 +2,7 @@
 // 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("precedence");
+library precedence;
 
 const EXPRESSION = 0;
 const ASSIGNMENT = EXPRESSION + 1;
diff --git a/lib/compiler/implementation/js/printer.dart b/sdk/lib/_internal/compiler/implementation/js/printer.dart
similarity index 87%
rename from lib/compiler/implementation/js/printer.dart
rename to sdk/lib/_internal/compiler/implementation/js/printer.dart
index eaa8579..5bdbfd9 100644
--- a/lib/compiler/implementation/js/printer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/printer.dart
@@ -16,16 +16,18 @@
   bool pendingSemicolon = false;
   bool pendingSpace = false;
 
-  Printer(leg.Compiler compiler)
+  Printer(leg.Compiler compiler, { allowVariableMinification: true })
       : shouldCompressOutput = compiler.enableMinification,
         this.compiler = compiler,
         outBuffer = new leg.CodeBuffer(),
         danglingElseVisitor = new DanglingElseVisitor(compiler),
-        namer = determineRenamer(compiler.enableMinification);
+        namer = determineRenamer(compiler.enableMinification,
+                                 allowVariableMinification);
 
-  static Namer determineRenamer(bool shouldCompressOutput) {
-    // TODO(erikcorry): Re-enable the MinifyRenamer after M1.
-    return new IdentityNamer();
+  static Namer determineRenamer(bool shouldCompressOutput,
+                                bool allowVariableMinification) {
+    return (shouldCompressOutput && allowVariableMinification)
+        ? new MinifyRenamer() : new IdentityNamer();
   }
 
   void spaceOut() {
@@ -277,25 +279,25 @@
 
   visitContinue(Continue node) {
     if (node.targetLabel == null) {
-      outIndentLn("continue");
+      outIndent("continue");
     } else {
-      outIndentLn("continue ${node.targetLabel}");
+      outIndent("continue ${node.targetLabel}");
     }
-    pendingSemicolon = true;
+    outSemicolonLn();
   }
 
   visitBreak(Break node) {
     if (node.targetLabel == null) {
-      outIndentLn("break");
+      outIndent("break");
     } else {
-      outIndentLn("break ${node.targetLabel}");
+      outIndent("break ${node.targetLabel}");
     }
-    pendingSemicolon = true;
+    outSemicolonLn();
   }
 
   visitReturn(Return node) {
     if (node.value == null) {
-      outIndentLn("return");
+      outIndent("return");
     } else {
       outIndent("return");
       pendingSpace = true;
@@ -815,23 +817,44 @@
 }
 
 
+class OrderedSet<T> {
+  final Set<T> set;
+  final List<T> list;
+
+  OrderedSet() : set = new Set<T>(), list = <T>[];
+
+  void add(T x) {
+    if (!set.contains(x)) {
+      set.add(x);
+      list.add(x);
+    }
+  }
+
+  void forEach(void fun(T x)) {
+    list.forEach(fun);
+  }
+}
+
 // Collects all the var declarations in the function.  We need to do this in a
 // separate pass because JS vars are lifted to the top of the function.
 class VarCollector extends BaseVisitor {
   bool nested;
-  final Set<String> vars;
-  final List<String> ordered_vars;
+  final OrderedSet<String> vars;
+  final OrderedSet<String> params;
 
-  VarCollector() : nested = false, vars = new Set<String>(), ordered_vars = [];
+  VarCollector() : nested = false,
+                   vars = new OrderedSet<String>(),
+                   params = new OrderedSet<String>();
 
-  void forEach(void fn(String)) => ordered_vars.forEach(fn);
+  void forEachVar(void fn(String v)) => vars.forEach(fn);
+  void forEachParam(void fn(String p)) => params.forEach(fn);
 
   void collectVarsInFunction(Fun fun) {
     if (!nested) {
       nested = true;
       if (fun.params != null) {
         for (int i = 0; i < fun.params.length; i++) {
-          add(fun.params[i].name);
+          params.add(fun.params[i].name);
         }
       }
       visitBlock(fun.body);
@@ -839,13 +862,6 @@
     }
   }
 
-  void add(String name) {
-    if (!vars.contains(name)) {
-      vars.add(name);
-      ordered_vars.add(name);
-    }
-  }
-
   void visitFunctionDeclaration(FunctionDeclaration declaration) {
     // Note that we don't bother collecting the name of the function.
     collectVarsInFunction(declaration.function);
@@ -860,8 +876,10 @@
     collectVarsInFunction(fun);
   }
 
+  void visitThis(This node) {}
+
   void visitVariableDeclaration(VariableDeclaration decl) {
-    add(decl.name);
+    vars.add(decl.name);
   }
 }
 
@@ -916,9 +934,11 @@
 }
 
 
-leg.CodeBuffer prettyPrint(Node node,
-                           leg.Compiler compiler) {
-  Printer printer = new Printer(compiler);
+leg.CodeBuffer prettyPrint(Node node, leg.Compiler compiler,
+                           { allowVariableMinification: true }) {
+  Printer printer =
+      new Printer(compiler,
+                  allowVariableMinification: allowVariableMinification);
   printer.visit(node);
   return printer.outBuffer;
 }
@@ -926,7 +946,8 @@
 
 abstract class Namer {
   String getName(String oldName);
-  String declareName(String oldName);
+  String declareVariable(String oldName);
+  String declareParameter(String oldName);
   void enterScope(VarCollector vars);
   void leaveScope();
 }
@@ -934,7 +955,8 @@
 
 class IdentityNamer implements Namer {
   String getName(String oldName) => oldName;
-  String declareName(String oldName) => oldName;
+  String declareVariable(String oldName) => oldName;
+  String declareParameter(String oldName) => oldName;
   void enterScope(VarCollector vars) {}
   void leaveScope() {}
 }
@@ -942,23 +964,29 @@
 
 class MinifyRenamer implements Namer {
   final List<Map<String, String>> maps = [];
-  final List<int> nameNumberStack = [];
-  int nameNumber = 0;
+  final List<int> parameterNumberStack = [];
+  final List<int> variableNumberStack = [];
+  int parameterNumber = 0;
+  int variableNumber = 0;
 
   MinifyRenamer();
 
   void enterScope(VarCollector vars) {
     maps.add(new Map<String, String>());
-    nameNumberStack.add(nameNumber);
-    vars.forEach(declareName);
+    variableNumberStack.add(variableNumber);
+    parameterNumberStack.add(parameterNumber);
+    vars.forEachVar(declareVariable);
+    vars.forEachParam(declareParameter);
   }
 
   void leaveScope() {
     maps.removeLast();
-    nameNumber = nameNumberStack.removeLast();
+    variableNumber = variableNumberStack.removeLast();
+    parameterNumber = parameterNumberStack.removeLast();
   }
 
   String getName(String oldName) {
+    // Go from inner scope to outer looking for mapping of name.
     for (int i = maps.length - 1; i >= 0; i--) {
       var map = maps[i];
       var replacement = map[oldName];
@@ -967,17 +995,51 @@
     return oldName;
   }
 
+  static const LOWER_CASE_LETTERS = 26;
+  static const LETTERS = 52;
+  static const DIGITS = 10;
+
   static int nthLetter(int n) {
-    return (n < 26) ? charCodes.$a + n : charCodes.$A + n - 26;
+    return (n < LOWER_CASE_LETTERS) ?
+           charCodes.$a + n :
+           charCodes.$A + n - LOWER_CASE_LETTERS;
   }
 
-  String declareName(String oldName) {
-    const LETTERS = 52;
-    const DIGITS = 10;
+  // Parameters go from a to z and variables go from z to a.  This makes each
+  // argument list and each top-of-function var declaration look similar and
+  // helps gzip compress the file.  If we have more than 26 arguments and
+  // variables then we meet somewhere in the middle of the alphabet.  After
+  // that we give up trying to be nice to the compression algorithm and just
+  // use the same namespace for arguments and variables, starting with A, and
+  // moving on to a0, a1, etc.
+  String declareVariable(String oldName) {
+    var newName;
+    if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) {
+      // Variables start from z and go backwards, for better gzipability.
+      newName = getNameNumber(oldName, LOWER_CASE_LETTERS - 1 - variableNumber);
+    } else {
+      // After 26 variables and parameters we allocate them in the same order.
+      newName = getNameNumber(oldName, variableNumber + parameterNumber);
+    }
+    variableNumber++;
+    return newName;
+  }
+
+  String declareParameter(String oldName) {
+    var newName;
+    if (variableNumber + parameterNumber < LOWER_CASE_LETTERS) {
+      newName = getNameNumber(oldName, parameterNumber);
+    } else {
+      newName = getNameNumber(oldName, variableNumber + parameterNumber);
+    }
+    parameterNumber++;
+    return newName;
+  }
+
+  String getNameNumber(String oldName, int n) {
     if (maps.isEmpty) return oldName;
 
     String newName;
-    int n = nameNumber;
     if (n < LETTERS) {
       // Start naming variables a, b, c, ..., z, A, B, C, ..., Z.
       newName = new String.fromCharCodes([nthLetter(n)]);
@@ -1006,7 +1068,6 @@
       newName = new String.fromCharCodes(codes);
     }
     assert(const RegExp(r'[a-zA-Z][a-zA-Z0-9]*').hasMatch(newName));
-    nameNumber++;
     maps.last[oldName] = newName;
     return newName;
   }
diff --git a/lib/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
similarity index 99%
rename from lib/compiler/implementation/js_backend/backend.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 672e4ab..9cedefb 100644
--- a/lib/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -907,7 +907,9 @@
     Element element = type.element;
     bool nativeCheck =
           emitter.nativeEmitter.requiresNativeIsCheck(element);
-    if (element == compiler.stringClass) {
+    if (type == compiler.types.voidType) {
+      return const SourceString('voidTypeCheck');
+    } else if (element == compiler.stringClass) {
       return const SourceString('stringTypeCheck');
     } else if (element == compiler.doubleClass) {
       return const SourceString('doubleTypeCheck');
diff --git a/lib/compiler/implementation/js_backend/constant_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/constant_emitter.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/constant_emitter.dart
diff --git a/lib/compiler/implementation/js_backend/constant_system_javascript.dart b/sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/constant_system_javascript.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/constant_system_javascript.dart
diff --git a/lib/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
similarity index 99%
rename from lib/compiler/implementation/js_backend/emitter.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index aecbea0..6972a0e 100644
--- a/lib/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -1286,8 +1286,12 @@
       int type = METHOD;
       if (selector.isGetter()) {
         type = GETTER;
+        assert(methodName.startsWith("get:"));
+        methodName = methodName.substring(4);
       } else if (selector.isSetter()) {
         type = SETTER;
+        assert(methodName.startsWith("set:"));
+        methodName = "${methodName.substring(4)}=";
       }
       CodeBuffer args = new CodeBuffer();
       for (int i = 0; i < selector.argumentCount; i++) {
@@ -1442,7 +1446,6 @@
       String invocationName = "${namer.closureInvocationName(selector)}";
       mainEnsureGetter = "$mainAccess.$invocationName = $mainAccess";
     }
-
     // TODO(ngeoffray): These globals are currently required by the isolate
     // library. They should be removed.
     buffer.add("""
diff --git a/lib/compiler/implementation/js_backend/emitter_no_eval.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/emitter_no_eval.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/emitter_no_eval.dart
diff --git a/lib/compiler/implementation/js_backend/js_backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/js_backend.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
diff --git a/lib/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/namer.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
similarity index 100%
rename from lib/compiler/implementation/js_backend/native_emitter.dart
rename to sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
diff --git a/lib/compiler/implementation/lib/constant_map.dart b/sdk/lib/_internal/compiler/implementation/lib/constant_map.dart
similarity index 100%
rename from lib/compiler/implementation/lib/constant_map.dart
rename to sdk/lib/_internal/compiler/implementation/lib/constant_map.dart
diff --git a/lib/compiler/implementation/lib/core_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
similarity index 100%
rename from lib/compiler/implementation/lib/core_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/core_patch.dart
diff --git a/lib/compiler/implementation/lib/coreimpl_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/coreimpl_patch.dart
similarity index 100%
rename from lib/compiler/implementation/lib/coreimpl_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/coreimpl_patch.dart
diff --git a/lib/compiler/implementation/lib/interceptors.dart b/sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
similarity index 100%
rename from lib/compiler/implementation/lib/interceptors.dart
rename to sdk/lib/_internal/compiler/implementation/lib/interceptors.dart
diff --git a/lib/compiler/implementation/lib/io_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/io_patch.dart
similarity index 100%
rename from lib/compiler/implementation/lib/io_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/io_patch.dart
diff --git a/lib/compiler/implementation/lib/isolate_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/isolate_patch.dart
similarity index 98%
rename from lib/compiler/implementation/lib/isolate_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/isolate_patch.dart
index 58b8093..1eeec4e 100644
--- a/lib/compiler/implementation/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/isolate_patch.dart
@@ -18,7 +18,7 @@
 /**
  * Called by the compiler to fetch the current isolate context.
  */
-void _currentIsolate() => _globalState.currentContext;
+_IsolateContext _currentIsolate() => _globalState.currentContext;
 
 /********************************************************
   Inserted from lib/isolate/dart2js/compiler_hooks.dart
@@ -378,7 +378,7 @@
 /** A stub for interacting with the main manager. */
 class _MainManagerStub implements _ManagerStub {
   get id => 0;
-  void set id(int i) { throw new NotImplementedException(); }
+  void set id(int i) { throw new UnimplementedError(); }
   void set onmessage(f) {
     throw new Exception("onmessage should not be set on MainManagerStub");
   }
@@ -398,7 +398,7 @@
   void set onmessage(f) { JS("void", "#.onmessage = #", this, f); }
   void postMessage(msg) => JS("Object", "#.postMessage(#)", this, msg);
   // terminate() is implemented by Worker.
-  abstract void terminate();
+  void terminate();
 }
 
 const String _SPAWNED_SIGNAL = "spawned";
@@ -648,9 +648,9 @@
     return completer.future;
   }
 
-  abstract void send(var message, [SendPort replyTo]);
-  abstract bool operator ==(var other);
-  abstract int get hashCode;
+  void send(var message, [SendPort replyTo]);
+  bool operator ==(var other);
+  int get hashCode;
 }
 
 /** A send port that delivers messages in-memory via native JavaScript calls. */
@@ -1078,11 +1078,11 @@
     return visitObject(x);
   }
 
-  abstract visitPrimitive(x);
-  abstract visitList(List x);
-  abstract visitMap(Map x);
-  abstract visitSendPort(SendPort x);
-  abstract visitSendPortSync(SendPortSync x);
+  visitPrimitive(x);
+  visitList(List x);
+  visitMap(Map x);
+  visitSendPort(SendPort x);
+  visitSendPortSync(SendPortSync x);
 
   visitObject(Object x) {
     // TODO(floitsch): make this a real exception. (which one)?
@@ -1233,7 +1233,7 @@
     return result;
   }
 
-  abstract deserializeSendPort(List x);
+  deserializeSendPort(List x);
 
   deserializeObject(List x) {
     // TODO(floitsch): Use real exception (which one?).
diff --git a/lib/compiler/implementation/lib/js_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
similarity index 98%
rename from lib/compiler/implementation/lib/js_helper.dart
rename to sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
index 56807be..5b4f36a6 100644
--- a/lib/compiler/implementation/lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
@@ -11,6 +11,7 @@
 #source('native_helper.dart');
 #source('regexp_helper.dart');
 #source('string_helper.dart');
+#source('mirror_opt_in_message.dart');
 
 // Performance critical helper methods.
 add(var a, var b) => (a is num && b is num)
@@ -413,6 +414,8 @@
 class Primitives {
   static int hashCodeSeed = 0;
 
+  static bool mirrorsEnabled = false;
+
   static int objectHashCode(object) {
     int hash = JS('var', r'#.$identityHash', object);
     if (hash == null) {
@@ -429,8 +432,12 @@
    * by defining a function in JavaScript called "dartPrint".
    */
   static void printString(String string) {
-    // Support overriding print from JavaScript.
-    if (JS('bool', r'typeof dartPrint == "function"')) {
+    if ((MIRROR_OPT_IN_MESSAGE == string)) {
+      // Turn on mirrors. Also, make sure that this message isn't easy
+      // to suppress by not calling dartPrint.
+      mirrorsEnabled = true;
+    } else if (JS('bool', r'typeof dartPrint == "function"')) {
+      // Support overriding print from JavaScript.
       JS('void', r'dartPrint(#)', string);
       return;
     }
@@ -712,6 +719,11 @@
     // [function].
     return JS('var', '#.apply(#, #)', jsFunction, function, arguments);
   }
+
+  static getConstructor(String className) {
+    // TODO(ahe): How to safely access $?
+    return JS('var', r'$[#]', className);
+  }
 }
 
 /**
@@ -1375,6 +1387,11 @@
   propertyTypeCastError(value, property);
 }
 
+voidTypeCheck(value) {
+  if (value == null) return value;
+  throw new TypeErrorImplementation(value, 'void');
+}
+
 /**
  * Special interface recognized by the compiler and implemented by DOM
  * objects that support integer indexing. This interface is not
diff --git a/lib/compiler/implementation/lib/math_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/math_patch.dart
similarity index 100%
rename from lib/compiler/implementation/lib/math_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/math_patch.dart
diff --git a/sdk/lib/_internal/compiler/implementation/lib/mirror_opt_in_message.dart b/sdk/lib/_internal/compiler/implementation/lib/mirror_opt_in_message.dart
new file mode 100644
index 0000000..df196a2
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/lib/mirror_opt_in_message.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// Yeah, seriously: mirrors in dart2js are experimental...
+const String MIRROR_OPT_IN_MESSAGE = """
+
+This program is using an experimental feature called \"mirrors\".  As
+currently implemented, mirrors do not work with minification, and will
+cause spurious errors depending on how code was optimized.
+
+The authors of this program are aware of these problems and have
+decided the thrill of using an experimental feature is outweighing the
+risks.  Furthermore, the authors of this program understand that
+long-term, to fix the problems mentioned above, mirrors may have
+negative impact on size and performance of Dart programs compiled to
+JavaScript.
+""";
diff --git a/sdk/lib/_internal/compiler/implementation/lib/mirrors.dart b/sdk/lib/_internal/compiler/implementation/lib/mirrors.dart
new file mode 100644
index 0000000..6728d47
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/lib/mirrors.dart
@@ -0,0 +1,96 @@
+// 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 dart_mirrors;
+
+import 'dart:isolate';
+
+part '../../../../mirrors/mirrors.dart';
+
+/**
+ * Stub class for the mirror system.
+ */
+class _Mirrors {
+  static MirrorSystem currentMirrorSystem() {
+    _ensureEnabled();
+    throw new UnsupportedError("MirrorSystem not implemented");
+  }
+
+  static Future<MirrorSystem> mirrorSystemOf(SendPort port) {
+    _ensureEnabled();
+    throw new UnsupportedError("MirrorSystem not implemented");
+  }
+
+  static InstanceMirror reflect(Object reflectee) {
+    _ensureEnabled();
+    return new _InstanceMirror(reflectee);
+  }
+}
+
+class _InstanceMirror extends InstanceMirror {
+  static final Expando<ClassMirror> classMirrors = new Expando<ClassMirror>();
+
+  final reflectee;
+
+  _InstanceMirror(this.reflectee) {
+    _ensureEnabled();
+  }
+
+  bool get hasReflectee => true;
+
+  ClassMirror get type {
+    String className = Primitives.objectTypeName(reflectee);
+    var constructor = Primitives.getConstructor(className);
+    var mirror = classMirrors[constructor];
+    if (mirror == null) {
+      mirror = new _ClassMirror(className, constructor);
+      classMirrors[constructor] = mirror;
+    }
+    return mirror;
+  }
+
+  Future<InstanceMirror> invoke(String memberName,
+                                List<Object> positionalArguments,
+                                [Map<String,Object> namedArguments]) {
+    if (namedArguments != null && !namedArguments.isEmpty) {
+      throw new UnsupportedError('Named arguments are not implemented');
+    }
+    // Copy the list to ensure that it can safely be passed to
+    // JavaScript.
+    var jsList = new List.from(positionalArguments);
+    var mangledName = '${memberName}\$${positionalArguments.length}';
+    var method = JS('var', '#[#]', reflectee, mangledName);
+    var completer = new Completer<InstanceMirror>();
+    // TODO(ahe): [Completer] or [Future] should have API to create a
+    // delayed action.  Simulating with a [Timer].
+    new Timer(0, (timer) {
+      if (JS('String', 'typeof #', method) == 'function') {
+        var result =
+            JS('var', '#.apply(#, #)', method, reflectee, jsList);
+        completer.complete(new _InstanceMirror(result));
+      } else {
+        completer.completeException('not a method $memberName');
+      }
+    });
+    return completer.future;
+  }
+
+  String toString() => 'InstanceMirror($reflectee)';
+}
+
+class _ClassMirror extends ClassMirror {
+  final String _name;
+  final _jsConstructor;
+
+  _ClassMirror(this._name, this._jsConstructor) {
+    _ensureEnabled();
+  }
+
+  String toString() => 'ClassMirror($_name)';
+}
+
+_ensureEnabled() {
+  if (Primitives.mirrorsEnabled) return;
+  throw new UnsupportedError('dart:mirrors is an experimental feature');
+}
diff --git a/lib/compiler/implementation/lib/native_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
similarity index 99%
rename from lib/compiler/implementation/lib/native_helper.dart
rename to sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
index 3f79e26..196136d 100644
--- a/lib/compiler/implementation/lib/native_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/native_helper.dart
@@ -175,7 +175,7 @@
   return 'Instance of $name';
 }
 
-String hashCodeForNativeObject(object) => Primitives.objectHashCode(object);
+int hashCodeForNativeObject(object) => Primitives.objectHashCode(object);
 
 /**
  * Sets a JavaScript property on an object.
diff --git a/lib/compiler/implementation/lib/regexp_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
similarity index 100%
rename from lib/compiler/implementation/lib/regexp_helper.dart
rename to sdk/lib/_internal/compiler/implementation/lib/regexp_helper.dart
diff --git a/lib/compiler/implementation/lib/scalarlist_patch.dart b/sdk/lib/_internal/compiler/implementation/lib/scalarlist_patch.dart
similarity index 100%
rename from lib/compiler/implementation/lib/scalarlist_patch.dart
rename to sdk/lib/_internal/compiler/implementation/lib/scalarlist_patch.dart
diff --git a/lib/compiler/implementation/lib/string_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
similarity index 100%
rename from lib/compiler/implementation/lib/string_helper.dart
rename to sdk/lib/_internal/compiler/implementation/lib/string_helper.dart
diff --git a/lib/compiler/implementation/library_loader.dart b/sdk/lib/_internal/compiler/implementation/library_loader.dart
similarity index 97%
rename from lib/compiler/implementation/library_loader.dart
rename to sdk/lib/_internal/compiler/implementation/library_loader.dart
index 9b56a38..359aa43 100644
--- a/lib/compiler/implementation/library_loader.dart
+++ b/sdk/lib/_internal/compiler/implementation/library_loader.dart
@@ -20,12 +20,12 @@
    *
    * This is the main entry point for [LibraryLoader].
    */
-  abstract LibraryElement loadLibrary(Uri uri, Node node, Uri canonicalUri);
+  LibraryElement loadLibrary(Uri uri, Node node, Uri canonicalUri);
 
   // TODO(johnniwinther): Remove this when patches don't need special parsing.
-  abstract void registerLibraryFromTag(LibraryDependencyHandler handler,
-                                       LibraryElement library,
-                                       LibraryDependency tag);
+  void registerLibraryFromTag(LibraryDependencyHandler handler,
+                              LibraryElement library,
+                              LibraryDependency tag);
 
   /**
    * Adds the elements in the export scope of [importedLibrary] to the import
@@ -33,9 +33,9 @@
    */
   // TODO(johnniwinther): Move handling of 'js_helper' to the library loader
   // to remove this method from the [LibraryLoader] interface.
-  abstract void importLibrary(LibraryElement importingLibrary,
-                              LibraryElement importedLibrary,
-                              Import tag);
+  void importLibrary(LibraryElement importingLibrary,
+                     LibraryElement importedLibrary,
+                     Import tag);
 }
 
 /**
diff --git a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
similarity index 88%
rename from pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
rename to sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
index 7523ad6..fe4e6da 100644
--- a/pkg/dartdoc/lib/src/mirrors/dart2js_mirror.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
@@ -7,23 +7,22 @@
 import 'dart:io';
 import 'dart:uri';
 
-import '../../../../../lib/compiler/compiler.dart' as diagnostics;
-import '../../../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../../../lib/compiler/implementation/resolution/resolution.dart'
-    show ResolverTask, ResolverVisitor;
-import '../../../../../lib/compiler/implementation/apiimpl.dart' as api;
-import '../../../../../lib/compiler/implementation/scanner/scannerlib.dart';
-import '../../../../../lib/compiler/implementation/ssa/ssa.dart';
-import '../../../../../lib/compiler/implementation/dart2jslib.dart';
-import '../../../../../lib/compiler/implementation/filenames.dart';
-import '../../../../../lib/compiler/implementation/source_file.dart';
-import '../../../../../lib/compiler/implementation/tree/tree.dart';
-import '../../../../../lib/compiler/implementation/util/util.dart';
-import '../../../../../lib/compiler/implementation/util/uri_extras.dart';
-import '../../../../../lib/compiler/implementation/dart2js.dart';
+import '../../compiler.dart' as diagnostics;
+import '../elements/elements.dart';
+import '../resolution/resolution.dart' show ResolverTask, ResolverVisitor;
+import '../apiimpl.dart' as api;
+import '../scanner/scannerlib.dart';
+import '../ssa/ssa.dart';
+import '../dart2jslib.dart';
+import '../filenames.dart';
+import '../source_file.dart';
+import '../tree/tree.dart';
+import '../util/util.dart';
+import '../util/uri_extras.dart';
+import '../dart2js.dart';
+import '../util/characters.dart';
 
-// TODO(rnystrom): Use "package:" URL (#4968).
-import '../../mirrors.dart';
+import 'mirrors.dart';
 import 'util.dart';
 
 //------------------------------------------------------------------------------
@@ -403,11 +402,13 @@
 
   bool get isConstructor => false;
 
-  bool get isField => false;
+  bool get isVariable => false;
 
   bool get isMethod => false;
 
   bool get isStatic => false;
+
+  bool get isParameter => false;
 }
 
 abstract class Dart2JsTypeMirror extends Dart2JsDeclarationMirror
@@ -428,7 +429,7 @@
 
   String get displayName => simpleName;
 
-  SourceLocation get location => new Dart2JsLocation(
+  SourceLocation get location => new Dart2JsSourceLocation(
       _element.getCompilationUnit().script,
       mirrors.compiler.spanFromElement(_element));
 
@@ -617,35 +618,82 @@
 
   SourceLocation get location {
     var script = _library.getCompilationUnit().script;
-    return new Dart2JsLocation(
-        script,
-        new SourceSpan(script.uri, 0, script.text.length));
+    SourceSpan span;
+    if (_library.libraryTag != null) {
+      span = mirrors.compiler.spanFromNode(_library.libraryTag, script.uri);
+    } else {
+      span = new SourceSpan(script.uri, 0, 0);
+    }
+    return new Dart2JsSourceLocation(script, span);
   }
 }
 
-class Dart2JsLocation implements SourceLocation {
-  Script _script;
-  SourceSpan _span;
+class Dart2JsSourceLocation implements SourceLocation {
+  final Script _script;
+  final SourceSpan _span;
+  int _line;
+  int _column;
 
-  Dart2JsLocation(this._script, this._span);
+  Dart2JsSourceLocation(this._script, this._span);
 
-  int get start => _span.begin;
+  int _computeLine() {
+    var sourceFile = _script.file as SourceFile;
+    if (sourceFile != null) {
+      return sourceFile.getLine(offset) + 1;
+    }
+    var index = 0;
+    var lineNumber = 0;
+    while (index <= offset && index < sourceText.length) {
+      index = sourceText.indexOf('\n', index) + 1;
+      if (index <= 0) break;
+      lineNumber++;
+    }
+    return lineNumber;
+  }
 
-  int get end => _span.end;
+  int get line {
+    if (_line == null) {
+      _line = _computeLine();
+    }
+    return _line;
+  }
 
-  Source get source => new Dart2JsSource(_script);
+  int _computeColumn() {
+    if (length == 0) return 0;
 
-  String get text => _script.text.substring(start, end);
-}
+    var sourceFile = _script.file as SourceFile;
+    if (sourceFile != null) {
+      return sourceFile.getColumn(sourceFile.getLine(offset), offset) + 1;
+    }
+    int index = offset - 1;
+    var columnNumber = 0;
+    while (0 <= index && index < sourceText.length) {
+      columnNumber++;
+      var charCode = sourceText.charCodeAt(index);
+      if (charCode == $CR || charCode == $LF) {
+        break;
+      }
+      index--;
+    }
+    return columnNumber;
+  }
 
-class Dart2JsSource implements Source {
-  Script _script;
+  int get column {
+    if (_column == null) {
+      _column = _computeColumn();
+    }
+    return _column;
+  }
 
-  Dart2JsSource(this._script);
+  int get offset => _span.begin;
 
-  Uri get uri => _script.uri;
+  int get length => _span.end - _span.begin;
 
-  String get text => _script.text;
+  String get text => _script.text.substring(_span.begin, _span.end);
+
+  Uri get sourceUri => _script.uri;
+
+  String get sourceText => _script.text;
 }
 
 class Dart2JsParameterMirror extends Dart2JsMemberMirror
@@ -764,7 +812,7 @@
       if (node != null) {
         var script = _class.getCompilationUnit().script;
         var span = mirrors.compiler.spanFromNode(node, script.uri);
-        return new Dart2JsLocation(script, span);
+        return new Dart2JsSourceLocation(script, span);
       }
     }
     return super.location;
@@ -899,7 +947,7 @@
     if (node != null) {
       var script = _typedef.element.getCompilationUnit().script;
       var span = mirrors.compiler.spanFromNode(node, script.uri);
-      return new Dart2JsLocation(script, span);
+      return new Dart2JsSourceLocation(script, span);
     }
     return super.location;
   }
@@ -1023,8 +1071,8 @@
 
   SourceLocation get location {
     var script = _type.element.getCompilationUnit().script;
-    return new Dart2JsLocation(script,
-                               mirrors.compiler.spanFromElement(_type.element));
+    return new Dart2JsSourceLocation(script,
+        mirrors.compiler.spanFromElement(_type.element));
   }
 
   DeclarationMirror get owner => library;
@@ -1305,81 +1353,91 @@
 class Dart2JsMethodMirror extends Dart2JsMemberMirror
     implements MethodMirror {
   final Dart2JsContainerMirror _objectMirror;
-  String _simpleName;
-  String _displayName;
-  String _constructorName;
-  String _operatorName;
-  Dart2JsMethodKind _kind;
+  final String simpleName;
+  final String displayName;
+  final String constructorName;
+  final String operatorName;
+  final Dart2JsMethodKind _kind;
 
-  Dart2JsMethodMirror(Dart2JsContainerMirror objectMirror,
-                      FunctionElement function)
+  Dart2JsMethodMirror._internal(Dart2JsContainerMirror objectMirror,
+      FunctionElement function,
+      String this.simpleName,
+      String this.displayName,
+      String this.constructorName,
+      String this.operatorName,
+      Dart2JsMethodKind this._kind)
       : this._objectMirror = objectMirror,
-        super(objectMirror.mirrors, function) {
-    _simpleName = _element.name.slowToString();
-    if (_function.kind == ElementKind.GETTER) {
-      _kind = Dart2JsMethodKind.GETTER;
-      _displayName = _simpleName;
-    } else if (_function.kind == ElementKind.SETTER) {
-      _kind = Dart2JsMethodKind.SETTER;
-      _displayName = _simpleName;
-      _simpleName = '$_simpleName=';
-    } else if (_function.kind == ElementKind.GENERATIVE_CONSTRUCTOR) {
+        super(objectMirror.mirrors, function);
+
+  factory Dart2JsMethodMirror(Dart2JsContainerMirror objectMirror,
+                              FunctionElement function) {
+    String simpleName = function.name.slowToString();
+    String displayName;
+    String constructorName = null;
+    String operatorName = null;
+    Dart2JsMethodKind kind;
+    if (function.kind == ElementKind.GETTER) {
+      kind = Dart2JsMethodKind.GETTER;
+      displayName = simpleName;
+    } else if (function.kind == ElementKind.SETTER) {
+      kind = Dart2JsMethodKind.SETTER;
+      displayName = simpleName;
+      simpleName = '$simpleName=';
+    } else if (function.kind == ElementKind.GENERATIVE_CONSTRUCTOR) {
       // TODO(johnniwinther): Support detection of redirecting constructors.
-      _constructorName = '';
-      int dollarPos = _simpleName.indexOf('\$');
+      constructorName = '';
+      int dollarPos = simpleName.indexOf('\$');
       if (dollarPos != -1) {
-        _constructorName = _simpleName.substring(dollarPos + 1);
-        _simpleName = _simpleName.substring(0, dollarPos);
+        constructorName = simpleName.substring(dollarPos + 1);
+        simpleName = simpleName.substring(0, dollarPos);
         // Simple name is TypeName.constructorName.
-        _simpleName = '$_simpleName.$_constructorName';
+        simpleName = '$simpleName.$constructorName';
       } else {
         // Simple name is TypeName.
       }
-      if (_function.modifiers.isConst()) {
-        _kind = Dart2JsMethodKind.CONST;
+      if (function.modifiers.isConst()) {
+        kind = Dart2JsMethodKind.CONST;
       } else {
-        _kind = Dart2JsMethodKind.GENERATIVE;
+        kind = Dart2JsMethodKind.GENERATIVE;
       }
-      _displayName = _simpleName;
-    } else if (_function.modifiers.isFactory()) {
-      _kind = Dart2JsMethodKind.FACTORY;
-      _constructorName = '';
-      int dollarPos = _simpleName.indexOf('\$');
+      displayName = simpleName;
+    } else if (function.modifiers.isFactory()) {
+      kind = Dart2JsMethodKind.FACTORY;
+      constructorName = '';
+      int dollarPos = simpleName.indexOf('\$');
       if (dollarPos != -1) {
-        _constructorName = _simpleName.substring(dollarPos+1);
-        _simpleName = _simpleName.substring(0, dollarPos);
-        _simpleName = '$_simpleName.$_constructorName';
+        constructorName = simpleName.substring(dollarPos+1);
+        simpleName = simpleName.substring(0, dollarPos);
+        simpleName = '$simpleName.$constructorName';
       }
       // Simple name is TypeName.constructorName.
-      _displayName = _simpleName;
-    } else if (_simpleName == 'negate') {
-      _kind = Dart2JsMethodKind.OPERATOR;
-      _operatorName = '-';
+      displayName = simpleName;
+    } else if (simpleName == 'negate') {
+      kind = Dart2JsMethodKind.OPERATOR;
+      operatorName = '-';
       // Simple name is 'unary-'.
-      _simpleName = Mirror.UNARY_MINUS;
+      simpleName = Mirror.UNARY_MINUS;
       // Display name is 'operator operatorName'.
-      _displayName = 'operator -';
-    } else if (_simpleName.startsWith('operator\$')) {
-      String str = _simpleName.substring(9);
-      _simpleName = 'operator';
-      _kind = Dart2JsMethodKind.OPERATOR;
-      _operatorName = _getOperatorFromOperatorName(str);
+      displayName = 'operator -';
+    } else if (simpleName.startsWith('operator\$')) {
+      String str = simpleName.substring(9);
+      simpleName = 'operator';
+      kind = Dart2JsMethodKind.OPERATOR;
+      operatorName = _getOperatorFromOperatorName(str);
       // Simple name is 'operator operatorName'.
-      _simpleName = _operatorName;
+      simpleName = operatorName;
       // Display name is 'operator operatorName'.
-      _displayName = 'operator $_operatorName';
+      displayName = 'operator $operatorName';
     } else {
-      _kind = Dart2JsMethodKind.REGULAR;
-      _displayName = _simpleName;
+      kind = Dart2JsMethodKind.REGULAR;
+      displayName = simpleName;
     }
+    return new Dart2JsMethodMirror._internal(objectMirror, function,
+        simpleName, displayName, constructorName, operatorName, kind);
   }
 
   FunctionElement get _function => _element;
 
-  String get simpleName => _simpleName;
-
-  String get displayName => _displayName;
-
   String get qualifiedName
       => '${owner.qualifiedName}.$simpleName';
 
@@ -1419,22 +1477,18 @@
 
   bool get isFactoryConstructor => _kind == Dart2JsMethodKind.FACTORY;
 
-  String get constructorName => _constructorName;
-
   bool get isGetter => _kind == Dart2JsMethodKind.GETTER;
 
   bool get isSetter => _kind == Dart2JsMethodKind.SETTER;
 
   bool get isOperator => _kind == Dart2JsMethodKind.OPERATOR;
 
-  String get operatorName => _operatorName;
-
   SourceLocation get location {
     var node = _function.parseNode(_diagnosticListener);
     if (node != null) {
       var script = _function.getCompilationUnit().script;
       var span = mirrors.compiler.spanFromNode(node, script.uri);
-      return new Dart2JsLocation(script, span);
+      return new Dart2JsSourceLocation(script, span);
     }
     return super.location;
   }
@@ -1458,7 +1512,7 @@
 
   bool get isTopLevel => _objectMirror is LibraryMirror;
 
-  bool get isField => true;
+  bool get isVariable => true;
 
   bool get isStatic => _variable.modifiers.isStatic();
 
@@ -1475,10 +1529,10 @@
     var node = _variable.variables.parseNode(_diagnosticListener);
     if (node != null) {
       var span = mirrors.compiler.spanFromNode(node, script.uri);
-      return new Dart2JsLocation(script, span);
+      return new Dart2JsSourceLocation(script, span);
     } else {
       var span = mirrors.compiler.spanFromElement(_variable);
-      return new Dart2JsLocation(script, span);
+      return new Dart2JsSourceLocation(script, span);
     }
   }
 }
diff --git a/pkg/dartdoc/lib/mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
similarity index 91%
rename from pkg/dartdoc/lib/mirrors.dart
rename to sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
index 6f49c95..9b7384b 100644
--- a/pkg/dartdoc/lib/mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart
@@ -8,7 +8,7 @@
 import 'dart:uri';
 
 // TODO(rnystrom): Use "package:" URL (#4968).
-import 'src/mirrors/dart2js_mirror.dart';
+import 'dart2js_mirror.dart';
 
 /**
  * [Compilation] encapsulates the compilation of a program.
@@ -401,24 +401,33 @@
  */
 abstract class MemberMirror implements DeclarationMirror {
   /**
-   * Returns true if this member is a constructor.
+   * Is this member a constructor?
    */
   bool get isConstructor;
 
   /**
-   * Returns true if this member is a field.
+   * Is this member a variable?
+   *
+   * This is [:false:] for locals.
    */
-  bool get isField;
+  bool get isVariable;
 
   /**
-   * Returns true if this member is a method.
+   * Is this member a method?.
+   *
+   * This is [:false:] for constructors.
    */
   bool get isMethod;
 
   /**
-   * Returns true if this member is static.
+   * Is this member declared static?
    */
   bool get isStatic;
+
+  /**
+   * Is this member a parameter?
+   */
+  bool get isParameter;
 }
 
 /**
@@ -563,45 +572,51 @@
 
 /**
  * A [SourceLocation] describes the span of an entity in Dart source code.
- * A [SourceLocation] should be the minimum span that encloses the declaration
- * of the mirrored entity.
+ * A [SourceLocation] with a non-zero [length] should be the minimum span that
+ * encloses the declaration of the mirrored entity.
  */
 abstract class SourceLocation {
   /**
-   * The character position where the location begins.
+   * The 1-based line number for this source location.
+   *
+   * A value of 0 means that the line number is unknown.
    */
-  int get start;
+  int get line;
 
   /**
-   * The character position where the location ends.
+   * The 1-based column number for this source location.
+   *
+   * A value of 0 means that the column number is unknown.
    */
-  int get end;
+  int get column;
 
   /**
-   * Returns the [Source] in which this [SourceLocation] indexes.
-   * If [:loc:] is a location, [:loc.source().text()[loc.start]:] is where it
-   * starts, and [:loc.source().text()[loc.end]:] is where it ends.
+   * The 0-based character offset into the [sourceText] where this source
+   * location begins.
+   *
+   * A value of -1 means that the offset is unknown.
    */
-  Source get source;
+  int get offset;
+
+  /**
+   * The number of characters in this source location.
+   *
+   * A value of 0 means that the [offset] is approximate.
+   */
+  int get length;
 
   /**
    * The text of the location span.
    */
   String get text;
-}
 
-/**
- * A [Source] describes the source code of a compilation unit in Dart source
- * code.
- */
-abstract class Source {
   /**
    * Returns the URI where the source originated.
    */
-  Uri get uri;
+  Uri get sourceUri;
 
   /**
    * Returns the text of this source.
    */
-  String get text;
+  String get sourceText;
 }
diff --git a/pkg/dartdoc/lib/mirrors_util.dart b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
similarity index 86%
rename from pkg/dartdoc/lib/mirrors_util.dart
rename to sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
index 35fc16d..cede225 100644
--- a/pkg/dartdoc/lib/mirrors_util.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart
@@ -6,7 +6,6 @@
 
 // TODO(rnystrom): Use "package:" URL (#4968).
 import 'mirrors.dart';
-import '../../../lib/compiler/implementation/util/characters.dart';
 
 //------------------------------------------------------------------------------
 // Utility functions for using the Mirror API
@@ -45,7 +44,7 @@
 }
 
 LibraryMirror findLibrary(MemberMirror member) {
-  ContainerMirror owner = member.owner;
+  DeclarationMirror owner = member.owner;
   if (owner is LibraryMirror) {
     return owner;
   } else if (owner is TypeMirror) {
@@ -54,25 +53,6 @@
   throw new Exception('Unexpected owner: ${owner}');
 }
 
-
-/**
- * Returns the column of the start of a location.
- */
-int getLocationColumn(SourceLocation location) {
-  String text = location.source.text;
-  int index = location.start-1;
-  var column = 0;
-  while (0 <= index && index < text.length) {
-    var charCode = text.charCodeAt(index);
-    if (charCode == $CR || charCode == $LF) {
-      break;
-    }
-    index--;
-    column++;
-  }
-  return column;
-}
-
 class HierarchyIterable implements Iterable<ClassMirror> {
   final bool includeType;
   final ClassMirror type;
diff --git a/pkg/dartdoc/lib/src/mirrors/util.dart b/sdk/lib/_internal/compiler/implementation/mirrors/util.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/mirrors/util.dart
rename to sdk/lib/_internal/compiler/implementation/mirrors/util.dart
diff --git a/lib/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
similarity index 100%
rename from lib/compiler/implementation/native_handler.dart
rename to sdk/lib/_internal/compiler/implementation/native_handler.dart
diff --git a/lib/compiler/implementation/patch_parser.dart b/sdk/lib/_internal/compiler/implementation/patch_parser.dart
similarity index 100%
rename from lib/compiler/implementation/patch_parser.dart
rename to sdk/lib/_internal/compiler/implementation/patch_parser.dart
diff --git a/lib/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
similarity index 95%
rename from lib/compiler/implementation/resolution/members.dart
rename to sdk/lib/_internal/compiler/implementation/resolution/members.dart
index f96bf11..1ebc710 100644
--- a/lib/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -1083,9 +1083,9 @@
     DartType type;
     if (element == null) {
       onFailure(node, MessageKind.CANNOT_RESOLVE_TYPE, [node.typeName]);
-    } else if (element.isErroneous()) {
-      ErroneousElement error = element;
-      onFailure(node, error.messageKind, error.messageArguments);
+    } else if (element.isAmbiguous()) {
+      AmbiguousElement ambiguous = element;
+      onFailure(node, ambiguous.messageKind, ambiguous.messageArguments);
     } else if (!element.impliesType()) {
       onFailure(node, MessageKind.NOT_A_TYPE, [node.typeName]);
     } else {
@@ -1176,7 +1176,8 @@
   ExpressionStatement currentExpressionStatement;
   bool typeRequired = false;
   StatementScope statementScope;
-  int allowedCategory = ElementCategory.VARIABLE | ElementCategory.FUNCTION;
+  int allowedCategory = ElementCategory.VARIABLE | ElementCategory.FUNCTION
+      | ElementCategory.IMPLIES_TYPE;
 
   ResolverVisitor(Compiler compiler, Element element, this.mapping)
     : this.enclosingElement = element,
@@ -1198,8 +1199,19 @@
 
   Element lookup(Node node, SourceString name) {
     Element result = scope.lookup(name);
-    if (!inInstanceContext && result != null && result.isInstanceMember()) {
-      error(node, MessageKind.NO_INSTANCE_AVAILABLE, [node]);
+    if (!Elements.isUnresolved(result)) {
+      if (!inInstanceContext && result.isInstanceMember()) {
+        error(node, MessageKind.NO_INSTANCE_AVAILABLE, [node]);
+        // TODO(johnniwinther): Create an ErroneousElement.
+      } else if (result.isAmbiguous()) {
+        AmbiguousElement ambiguous = result;
+        compiler.reportMessage(compiler.spanFromNode(node),
+            ambiguous.messageKind.error(ambiguous.messageArguments),
+            Diagnostic.ERROR);
+        return new ErroneousElement(ambiguous.messageKind,
+                                    ambiguous.messageArguments,
+                                    name, enclosingElement);
+      }
     }
     return result;
   }
@@ -1240,17 +1252,9 @@
                                                  SourceString name,
                                                  MessageKind kind,
                                                  List<Node> arguments) {
-    return warnOnErroneousElement(node,
-        new ErroneousElement(kind, arguments, name, enclosingElement));
-  }
-
-  ErroneousElement warnOnErroneousElement(Node node,
-                                          ErroneousElement erroneousElement) {
-    ResolutionWarning warning =
-        new ResolutionWarning(erroneousElement.messageKind,
-                              erroneousElement.messageArguments);
+    ResolutionWarning warning = new ResolutionWarning(kind, arguments);
     compiler.reportWarning(node, warning);
-    return erroneousElement;
+    return new ErroneousElement(kind, arguments, name, enclosingElement);
   }
 
   Element visitIdentifier(Identifier node) {
@@ -1274,13 +1278,18 @@
                                                   [node]);
         }
       } else if (element.isErroneous()) {
-        element = warnOnErroneousElement(node, element);
+        // Use the erroneous element.
       } else {
         if ((element.kind.category & allowedCategory) == 0) {
           // TODO(ahe): Improve error message. Need UX input.
           error(node, MessageKind.GENERIC, ["is not an expression $element"]);
         }
       }
+      if (!Elements.isUnresolved(element)
+          && element.kind == ElementKind.CLASS) {
+        ClassElement classElement = element;
+        classElement.ensureResolved(compiler);
+      }
       return useElement(node, element);
     }
   }
@@ -1506,12 +1515,12 @@
         }
         return compiler.assertMethod;
       }
+
       return node.selector.accept(this);
     }
 
     var oldCategory = allowedCategory;
-    allowedCategory |=
-      ElementCategory.CLASS | ElementCategory.PREFIX | ElementCategory.SUPER;
+    allowedCategory |= ElementCategory.PREFIX | ElementCategory.SUPER;
     Element resolvedReceiver = visit(node.receiver);
     allowedCategory = oldCategory;
 
@@ -1546,6 +1555,15 @@
     } else if (identical(resolvedReceiver.kind, ElementKind.CLASS)) {
       ClassElement receiverClass = resolvedReceiver;
       receiverClass.ensureResolved(compiler);
+      if (node.isOperator) {
+        // When the resolved receiver is a class, we can have two cases:
+        //  1) a static send: C.foo, or
+        //  2) an operator send, where the receiver is a class literal: 'C + 1'.
+        // The following code that looks up the selector on the resolved
+        // receiver will treat the second as the invocation of a static operator
+        // if the resolved receiver is not null.
+        return null;
+      }
       target = receiverClass.lookupLocalMember(name);
       if (target == null) {
         // TODO(johnniwinther): With the simplified [TreeElements] invariant,
@@ -1564,10 +1582,13 @@
     } else if (identical(resolvedReceiver.kind, ElementKind.PREFIX)) {
       PrefixElement prefix = resolvedReceiver;
       target = prefix.lookupLocalMember(name);
-      if (target == null) {
+      if (Elements.isUnresolved(target)) {
         return warnAndCreateErroneousElement(
             node, name, MessageKind.NO_SUCH_LIBRARY_MEMBER,
             [prefix.name, name]);
+      } else if (target.kind == ElementKind.CLASS) {
+        ClassElement classElement = target;
+        classElement.ensureResolved(compiler);
       }
     }
     return target;
@@ -1707,6 +1728,10 @@
         // with the same arguments.
         Selector call = new Selector.callClosureFrom(selector);
         world.registerDynamicInvocation(call.name, call);
+      } else if (target.impliesType()) {
+        // We call 'call()' on a Type instance returned from the reference to a
+        // class or typedef literal. We do not need to register this call as a
+        // dynamic invocation, because we statically know what the target is.
       } else if (!selector.applies(target, compiler)) {
         warnArgumentMismatch(node, target);
       }
@@ -1853,9 +1878,38 @@
 
   visitReturn(Return node) {
     if (node.isRedirectingFactoryBody) {
-      unimplemented(node, 'redirecting constructors');
+      handleRedirectingFactoryBody(node);
+    } else {
+      visit(node.expression);
     }
-    visit(node.expression);
+  }
+
+  void handleRedirectingFactoryBody(Return node) {
+    Element redirectionTarget = resolveRedirectingFactory(node);
+    var type = mapping.getType(node.expression);
+    if (type is InterfaceType && !type.arguments.isEmpty) {
+      unimplemented(node.expression, 'type arguments on redirecting factory');
+    }
+    useElement(node.expression, redirectionTarget);
+    assert(invariant(node, enclosingElement.isFactoryConstructor()));
+    FunctionElement constructor = enclosingElement;
+    if (constructor.modifiers.isConst() &&
+        !redirectionTarget.modifiers.isConst()) {
+      error(node, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
+    }
+    // TODO(ahe): Check that this doesn't lead to a cycle.  For now,
+    // just make sure that the redirection target isn't itself a
+    // redirecting factory.
+    { // This entire block is temporary code per the above TODO.
+      FunctionElement targetImplementation = redirectionTarget.implementation;
+      FunctionExpression function = targetImplementation.parseNode(compiler);
+      if (function.body != null && function.body.asReturn() != null
+          && function.body.asReturn().isRedirectingFactoryBody) {
+        unimplemented(node.expression, 'redirecing to redirecting factory');
+      }
+    }
+    constructor.defaultImplementation = redirectionTarget;
+    world.registerStaticUse(redirectionTarget);
   }
 
   visitThrow(Throw node) {
@@ -1929,6 +1983,10 @@
     return node.accept(new ConstructorResolver(compiler, this));
   }
 
+  FunctionElement resolveRedirectingFactory(Return node) {
+    return node.accept(new ConstructorResolver(compiler, this));
+  }
+
   DartType resolveTypeRequired(TypeAnnotation node) {
     bool old = typeRequired;
     typeRequired = true;
@@ -2881,8 +2939,7 @@
     } else {
       ResolutionWarning warning  = new ResolutionWarning(kind, arguments);
       compiler.reportWarning(diagnosticNode, warning);
-      return new ErroneousFunctionElement(kind, arguments, targetName,
-                                          enclosing);
+      return new ErroneousElement(kind, arguments, targetName, enclosing);
     }
   }
 
@@ -2923,13 +2980,27 @@
     inConstContext = node.isConst();
     Node selector = node.send.selector;
     Element e = visit(selector);
-    if (!Elements.isUnresolved(e) && identical(e.kind, ElementKind.CLASS)) {
+    return finishConstructorReference(e, node.send.selector, node);
+  }
+
+  /// Finishes resolution of a constructor reference and records the
+  /// type of the constructed instance on [expression].
+  FunctionElement finishConstructorReference(Element e,
+                                             Node diagnosticNode,
+                                             Node expression) {
+    // Find the unnamed constructor if the reference resolved to a
+    // class.
+    if (!Elements.isUnresolved(e) && e.isClass()) {
       ClassElement cls = e;
       cls.ensureResolved(compiler);
       if (cls.isInterface() && (cls.defaultClass == null)) {
-        error(selector, MessageKind.CANNOT_INSTANTIATE_INTERFACE, [cls.name]);
+        // TODO(ahe): Remove this check and error message when we
+        // don't have interfaces anymore.
+        error(diagnosticNode,
+              MessageKind.CANNOT_INSTANTIATE_INTERFACE, [cls.name]);
       }
-      e = lookupConstructor(cls, selector, const SourceString(''));
+      // The unnamed constructor may not exist, so [e] may become unresolved.
+      e = lookupConstructor(cls, diagnosticNode, const SourceString(''));
     }
     if (type == null) {
       if (Elements.isUnresolved(e)) {
@@ -2938,7 +3009,7 @@
         type = e.getEnclosingClass().computeType(compiler).asRaw();
       }
     }
-    resolver.mapping.setType(node, type);
+    resolver.mapping.setType(expression, type);
     return e;
   }
 
@@ -2986,6 +3057,8 @@
     if (e == null) {
       return failOrReturnErroneousElement(resolver.enclosingElement, node, name,
                                           MessageKind.CANNOT_RESOLVE, [name]);
+    } else if (e.isErroneous()) {
+      return e;
     } else if (identical(e.kind, ElementKind.TYPEDEF)) {
       error(node, MessageKind.CANNOT_INSTANTIATE_TYPEDEF, [name]);
     } else if (identical(e.kind, ElementKind.TYPE_VARIABLE)) {
@@ -2996,4 +3069,11 @@
     }
     return e;
   }
+
+  /// Assumed to be called by [resolveRedirectingFactory].
+  Element visitReturn(Return node) {
+    Node expression = node.expression;
+    return finishConstructorReference(visit(expression),
+                                      expression, expression);
+  }
 }
diff --git a/lib/compiler/implementation/resolution/resolution.dart b/sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
similarity index 100%
rename from lib/compiler/implementation/resolution/resolution.dart
rename to sdk/lib/_internal/compiler/implementation/resolution/resolution.dart
diff --git a/lib/compiler/implementation/resolution/scope.dart b/sdk/lib/_internal/compiler/implementation/resolution/scope.dart
similarity index 96%
rename from lib/compiler/implementation/resolution/scope.dart
rename to sdk/lib/_internal/compiler/implementation/resolution/scope.dart
index 519cb66..af5b0e7 100644
--- a/lib/compiler/implementation/resolution/scope.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/scope.dart
@@ -9,12 +9,12 @@
    * Adds [element] to this scope. This operation is only allowed on mutable
    * scopes such as [MethodScope] and [BlockScope].
    */
-  abstract Element add(Element element);
+  Element add(Element element);
 
   /**
    * Looks up the [Element] for [name] in this scope.
    */
-  abstract Element lookup(SourceString name);
+  Element lookup(SourceString name);
 
   static Scope buildEnclosingScope(Element element) {
     return element.enclosingElement != null
@@ -33,7 +33,7 @@
     return parent.lookup(name);
   }
 
-  abstract Element localLookup(SourceString name);
+  Element localLookup(SourceString name);
 
   static Scope buildEnclosingScope(Element element) {
     return element.enclosingElement != null
diff --git a/lib/compiler/implementation/resolution/secret_tree_element.dart b/sdk/lib/_internal/compiler/implementation/resolution/secret_tree_element.dart
similarity index 100%
rename from lib/compiler/implementation/resolution/secret_tree_element.dart
rename to sdk/lib/_internal/compiler/implementation/resolution/secret_tree_element.dart
diff --git a/lib/compiler/implementation/resolved_visitor.dart b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
similarity index 68%
rename from lib/compiler/implementation/resolved_visitor.dart
rename to sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
index 8120ac4..e53a3ff 100644
--- a/lib/compiler/implementation/resolved_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
@@ -15,7 +15,13 @@
     } else if (node.isOperator) {
       return visitOperatorSend(node);
     } else if (node.isPropertyAccess) {
-      return visitGetterSend(node);
+      Element element = elements[node];
+      if (!Elements.isUnresolved(element) && element.impliesType()) {
+        // A reference to a class literal, typedef or type variable.
+        return visitTypeReferenceSend(node);
+      } else {
+        return visitGetterSend(node);
+      }
     } else if (Elements.isClosureSend(node, elements[node])) {
       return visitClosureSend(node);
     } else {
@@ -28,8 +34,9 @@
         } else {
           return visitStaticSend(node);
         }
-      } else if (element.kind == ElementKind.CLASS) {
-        internalError("Cannot generate code for send", node: node);
+      } else if (element.impliesType()) {
+        // A reference to a class literal, typedef or type variable.
+        return visitTypeReferenceSend(node);
       } else if (element.isInstanceMember()) {
         // Example: f() with 'f' bound to instance method.
         return visitDynamicSend(node);
@@ -46,15 +53,16 @@
     }
   }
 
-  abstract R visitSuperSend(Send node);
-  abstract R visitOperatorSend(Send node);
-  abstract R visitGetterSend(Send node);
-  abstract R visitClosureSend(Send node);
-  abstract R visitDynamicSend(Send node);
-  abstract R visitForeignSend(Send node);
-  abstract R visitStaticSend(Send node);
+  R visitSuperSend(Send node);
+  R visitOperatorSend(Send node);
+  R visitGetterSend(Send node);
+  R visitClosureSend(Send node);
+  R visitDynamicSend(Send node);
+  R visitForeignSend(Send node);
+  R visitStaticSend(Send node);
+  abstract R visitTypeReferenceSend(Send node);
 
-  abstract void internalError(String reason, {Node node});
+  void internalError(String reason, {Node node});
 
   R visitNode(Node node) {
     internalError("Unhandled node", node: node);
diff --git a/lib/compiler/implementation/runtime_types.dart b/sdk/lib/_internal/compiler/implementation/runtime_types.dart
similarity index 91%
rename from lib/compiler/implementation/runtime_types.dart
rename to sdk/lib/_internal/compiler/implementation/runtime_types.dart
index 9b0820f..c583cb1 100644
--- a/lib/compiler/implementation/runtime_types.dart
+++ b/sdk/lib/_internal/compiler/implementation/runtime_types.dart
@@ -11,6 +11,10 @@
 import 'util/util.dart';
 
 class RuntimeTypeInformation {
+
+  static final SourceString CACHE_HELPER_NAME =
+      const SourceString('getOrCreateCachedRuntimeType');
+
   /**
    * Names used for elements in runtime type information. This map is kept to
    * detect elements with the same name and use a different name instead.
@@ -64,17 +68,17 @@
   /**
    * Generate a string representation template for this element, using '#' to
    * denote the place for the type argument input. If there are more type
-   * variables than [numberOfInputs], 'Dynamic' is used as the value for these
+   * variables than [numberOfInputs], 'dynamic' is used as the value for these
    * arguments.
    */
   String generateRuntimeTypeString(ClassElement element, int numberOfInputs) {
     String elementName = getName(element);
-    if (element.typeVariables.isEmpty) return "'$elementName'";
-    String stringify(_, bool hasValue) => hasValue ? "' + # + '" : "Dynamic";
+    if (element.typeVariables.isEmpty) return "$elementName";
+    String stringify(_, bool hasValue) => hasValue ? "' + # + '" : "dynamic";
     String arguments = stringifyTypeVariables(element.typeVariables,
                                               numberOfInputs,
                                               stringify);
-    return "'$elementName<$arguments>'";
+    return "$elementName<$arguments>";
   }
 
   /**
diff --git a/lib/compiler/implementation/scanner/array_based_scanner.dart b/sdk/lib/_internal/compiler/implementation/scanner/array_based_scanner.dart
similarity index 99%
rename from lib/compiler/implementation/scanner/array_based_scanner.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/array_based_scanner.dart
index f0cb22f..d1e0099 100644
--- a/lib/compiler/implementation/scanner/array_based_scanner.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/array_based_scanner.dart
@@ -181,5 +181,5 @@
   }
 
   // TODO(ahe): make class abstract instead of adding an abstract method.
-  abstract peek();
+  peek();
 }
diff --git a/lib/compiler/implementation/scanner/byte_array_scanner.dart b/sdk/lib/_internal/compiler/implementation/scanner/byte_array_scanner.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/byte_array_scanner.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/byte_array_scanner.dart
diff --git a/lib/compiler/implementation/scanner/byte_strings.dart b/sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart
similarity index 98%
rename from lib/compiler/implementation/scanner/byte_strings.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart
index 6a89fb2..f6c220f 100644
--- a/lib/compiler/implementation/scanner/byte_strings.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart
@@ -13,7 +13,7 @@
 
   ByteString(List<int> this.bytes, int this.offset, int this.length);
 
-  abstract String get charset;
+  String get charset;
 
   String slowToString() => new String.fromCharCodes(
       new Utf8Decoder(bytes, offset, length).decodeRest());
diff --git a/lib/compiler/implementation/scanner/class_element_parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/class_element_parser.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
diff --git a/lib/compiler/implementation/scanner/keyword.dart b/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
similarity index 98%
rename from lib/compiler/implementation/scanner/keyword.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
index 335951c..4a23d73 100644
--- a/lib/compiler/implementation/scanner/keyword.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/keyword.dart
@@ -125,9 +125,9 @@
  * Abstract state in a state machine for scanning keywords.
  */
 abstract class KeywordState {
-  abstract bool isLeaf();
-  abstract KeywordState next(int c);
-  abstract Keyword get keyword;
+  bool isLeaf();
+  KeywordState next(int c);
+  Keyword get keyword;
 
   static KeywordState _KEYWORD_STATE;
   static KeywordState get KEYWORD_STATE {
diff --git a/lib/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/listener.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/listener.dart
diff --git a/lib/compiler/implementation/scanner/parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/parser.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/parser.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/parser.dart
diff --git a/lib/compiler/implementation/scanner/parser_task.dart b/sdk/lib/_internal/compiler/implementation/scanner/parser_task.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/parser_task.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/parser_task.dart
diff --git a/lib/compiler/implementation/scanner/partial_parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/partial_parser.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/partial_parser.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/partial_parser.dart
diff --git a/lib/compiler/implementation/scanner/scanner.dart b/sdk/lib/_internal/compiler/implementation/scanner/scanner.dart
similarity index 94%
rename from lib/compiler/implementation/scanner/scanner.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/scanner.dart
index 647880b..123b650 100644
--- a/lib/compiler/implementation/scanner/scanner.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/scanner.dart
@@ -12,8 +12,8 @@
  * Common base class for a Dart scanner.
  */
 abstract class AbstractScanner<T extends SourceString> implements Scanner {
-  abstract int advance();
-  abstract int nextByte();
+  int advance();
+  int nextByte();
 
   /**
    * Returns the current character or byte depending on the underlying input
@@ -21,7 +21,7 @@
    * characters (Unicode codepoints represented as int) whereas
    * [ByteArrayScanner] operates on byte arrays and thus returns bytes.
    */
-  abstract int peek();
+  int peek();
 
   /**
    * Appends a fixed token based on whether the current char is [choice] or not.
@@ -29,30 +29,30 @@
    * is determined by [yes] is appended, otherwise a fixed token whose kind
    * and content is determined by [no] is appended.
    */
-  abstract int select(int choice, PrecedenceInfo yes, PrecedenceInfo no);
+  int select(int choice, PrecedenceInfo yes, PrecedenceInfo no);
 
   /**
    * Appends a fixed token whose kind and content is determined by [info].
    */
-  abstract void appendPrecedenceToken(PrecedenceInfo info);
+  void appendPrecedenceToken(PrecedenceInfo info);
 
   /**
    * Appends a token whose kind is determined by [info] and content is [value].
    */
-  abstract void appendStringToken(PrecedenceInfo info, String value);
+  void appendStringToken(PrecedenceInfo info, String value);
 
   /**
    * Appends a token whose kind is determined by [info] and content is defined
    * by the SourceString [value].
    */
-  abstract void appendByteStringToken(PrecedenceInfo info, T value);
+  void appendByteStringToken(PrecedenceInfo info, T value);
 
   /**
    * Appends a keyword token whose kind is determined by [keyword].
    */
-  abstract void appendKeywordToken(Keyword keyword);
-  abstract void appendWhiteSpace(int next);
-  abstract void appendEofToken();
+  void appendKeywordToken(Keyword keyword);
+  void appendWhiteSpace(int next);
+  void appendEofToken();
 
   /**
    * Creates an ASCII SourceString whose content begins at the source byte
@@ -61,20 +61,20 @@
    * [:asciiString(0,-1):] creates an ASCII SourceString whose content is found
    * at the [0,9[ byte interval of the source text.
    */
-  abstract T asciiString(int start, int offset);
-  abstract T utf8String(int start, int offset);
-  abstract Token firstToken();
-  abstract Token previousToken();
-  abstract void beginToken();
-  abstract void addToCharOffset(int offset);
-  abstract int get charOffset;
-  abstract int get byteOffset;
-  abstract void appendBeginGroup(PrecedenceInfo info, String value);
-  abstract int appendEndGroup(PrecedenceInfo info, String value, int openKind);
-  abstract void appendGt(PrecedenceInfo info, String value);
-  abstract void appendGtGt(PrecedenceInfo info, String value);
-  abstract void appendGtGtGt(PrecedenceInfo info, String value);
-  abstract void appendComment();
+  T asciiString(int start, int offset);
+  T utf8String(int start, int offset);
+  Token firstToken();
+  Token previousToken();
+  void beginToken();
+  void addToCharOffset(int offset);
+  int get charOffset;
+  int get byteOffset;
+  void appendBeginGroup(PrecedenceInfo info, String value);
+  int appendEndGroup(PrecedenceInfo info, String value, int openKind);
+  void appendGt(PrecedenceInfo info, String value);
+  void appendGtGt(PrecedenceInfo info, String value);
+  void appendGtGtGt(PrecedenceInfo info, String value);
+  void appendComment();
 
   /**
    * We call this method to discard '<' from the "grouping" stack
@@ -88,7 +88,7 @@
    * something which cannot possibly be part of a type
    * parameter/argument list.
    */
-  abstract void discardOpenLt();
+  void discardOpenLt();
 
   // TODO(ahe): Move this class to implementation.
 
diff --git a/lib/compiler/implementation/scanner/scanner_implementation.dart b/sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/scanner_implementation.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart
diff --git a/lib/compiler/implementation/scanner/scanner_task.dart b/sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/scanner_task.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/scanner_task.dart
diff --git a/lib/compiler/implementation/scanner/scannerlib.dart b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/scannerlib.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
diff --git a/lib/compiler/implementation/scanner/string_scanner.dart b/sdk/lib/_internal/compiler/implementation/scanner/string_scanner.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/string_scanner.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/string_scanner.dart
diff --git a/lib/compiler/implementation/scanner/token.dart b/sdk/lib/_internal/compiler/implementation/scanner/token.dart
similarity index 100%
rename from lib/compiler/implementation/scanner/token.dart
rename to sdk/lib/_internal/compiler/implementation/scanner/token.dart
diff --git a/lib/compiler/implementation/script.dart b/sdk/lib/_internal/compiler/implementation/script.dart
similarity index 100%
rename from lib/compiler/implementation/script.dart
rename to sdk/lib/_internal/compiler/implementation/script.dart
diff --git a/lib/compiler/implementation/source_file.dart b/sdk/lib/_internal/compiler/implementation/source_file.dart
similarity index 96%
rename from lib/compiler/implementation/source_file.dart
rename to sdk/lib/_internal/compiler/implementation/source_file.dart
index d517e76..14a4175 100644
--- a/lib/compiler/implementation/source_file.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_file.dart
@@ -2,11 +2,11 @@
 // 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('source_file');
+library source_file;
 
-#import('dart:math');
+import 'dart:math';
 
-#import('colors.dart', prefix: 'colors');
+import 'colors.dart' as colors;
 
 /**
  * Represents a file of source code.
diff --git a/lib/compiler/implementation/source_map_builder.dart b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
similarity index 97%
rename from lib/compiler/implementation/source_map_builder.dart
rename to sdk/lib/_internal/compiler/implementation/source_map_builder.dart
index a29b0fe..0670ee2 100644
--- a/lib/compiler/implementation/source_map_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/source_map_builder.dart
@@ -2,12 +2,12 @@
 // 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('source_map_builder');
+library source_map_builder;
 
-#import('dart:json');
+import 'dart:json';
 
-#import('scanner/scannerlib.dart');
-#import('source_file.dart');
+import 'scanner/scannerlib.dart';
+import 'source_file.dart';
 
 class SourceMapBuilder {
   static const int VLQ_BASE_SHIFT = 5;
diff --git a/lib/compiler/implementation/ssa/bailout.dart b/sdk/lib/_internal/compiler/implementation/ssa/bailout.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/bailout.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/bailout.dart
diff --git a/lib/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
similarity index 93%
rename from lib/compiler/implementation/ssa/builder.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 50b8006..cab86dd 100644
--- a/lib/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -332,8 +332,7 @@
       if (element != null && element.isGenerativeConstructorBody()) {
         // The box is passed as a parameter to a generative
         // constructor body.
-        box = new HParameterValue(scopeData.boxElement);
-        builder.add(box);
+        box = builder.addParameter(scopeData.boxElement);
       } else {
         box = createBox();
       }
@@ -394,8 +393,7 @@
       FunctionElement functionElement = element;
       FunctionSignature params = functionElement.computeSignature(compiler);
       params.orderedForEachParameter((Element parameterElement) {
-        HInstruction parameter = new HParameterValue(parameterElement);
-        builder.add(parameter);
+        HInstruction parameter = builder.addParameter(parameterElement);
         builder.parameters[parameterElement] = parameter;
         directLocals[parameterElement] = parameter;
         parameter.guaranteedType =
@@ -665,6 +663,9 @@
   }
 
   void endLoop(HBasicBlock loopEntry) {
+    // If the loop has an aborting body, we don't update the loop
+    // phis.
+    if (loopEntry.predecessors.length == 1) return;
     loopEntry.forEachPhi((HPhi phi) {
       Element element = phi.sourceElement;
       HInstruction postLoopDefinition = directLocals[element];
@@ -767,6 +768,8 @@
   void forEachBreak(void action(HBreak instruction, LocalsHandler locals));
   void forEachContinue(void action(HContinue instruction,
                                    LocalsHandler locals));
+  bool hasAnyContinue();
+  bool hasAnyBreak();
   void close();
   final TargetElement target;
   List<LabelElement> labels();
@@ -791,6 +794,8 @@
   void forEachBreak(Function ignored) { }
   void forEachContinue(Function ignored) { }
   void close() { }
+  bool hasAnyContinue() => false;
+  bool hasAnyBreak() => false;
 
   List<LabelElement> labels() => const <LabelElement>[];
   TargetElement get target => null;
@@ -848,6 +853,20 @@
     }
   }
 
+  bool hasAnyContinue() {
+    for (JumpHandlerEntry entry in jumps) {
+      if (entry.isContinue()) return true;
+    }
+    return false;
+  }
+
+  bool hasAnyBreak() {
+    for (JumpHandlerEntry entry in jumps) {
+      if (entry.isBreak()) return true;
+    }
+    return false;
+  }
+
   void close() {
     // The mapping from TargetElement to JumpHandler is no longer needed.
     builder.jumpTargets.remove(target);
@@ -875,6 +894,7 @@
   HInstruction rethrowableException;
   Map<Element, HInstruction> parameters;
   final RuntimeTypeInformation rti;
+  HParameterValue lastAddedParameter;
 
   Map<TargetElement, JumpHandler> jumpTargets;
 
@@ -924,7 +944,9 @@
   static const MAX_INLINING_DEPTH = 3;
   static const MAX_INLINING_SOURCE_SIZE = 128;
   List<InliningState> inliningStack;
-  Element returnElement = null;
+  Element returnElement;
+  DartType returnType;
+  bool inTryStatement = false;
 
   void disableMethodInterception() {
     assert(methodInterceptionEnabled);
@@ -959,7 +981,7 @@
     assert(!link.isEmpty && link.tail.isEmpty);
     visit(link.head);
     HInstruction value = pop();
-    value = potentiallyCheckType(value, variable);
+    value = potentiallyCheckType(value, variable.computeType(compiler));
     close(new HReturn(value)).addSuccessor(graph.exit);
     return closeFunction();
   }
@@ -1016,6 +1038,17 @@
     return bodyElement;
   }
 
+  HParameterValue addParameter(Element element) {
+    HParameterValue result = new HParameterValue(element);
+    if (lastAddedParameter == null) {
+      graph.entry.addBefore(graph.entry.first, result);
+    } else {
+      graph.entry.addAfter(lastAddedParameter, result);
+    }
+    lastAddedParameter = result;
+    return result;
+  }
+
   /**
    * Documentation wanted -- johnniwinther
    *
@@ -1036,7 +1069,7 @@
     assert(succeeded);
 
     InliningState state =
-        new InliningState(function, returnElement, elements, stack);
+        new InliningState(function, returnElement, returnType, elements, stack);
     inliningStack.add(state);
     sourceElementStack.add(function);
     stack = <HInstruction>[];
@@ -1048,11 +1081,12 @@
     elements = compiler.enqueuer.resolution.getCachedElements(function);
     assert(elements != null);
     FunctionSignature signature = function.computeSignature(compiler);
+    returnType = signature.returnType;
     int index = 0;
     signature.orderedForEachParameter((Element parameter) {
       HInstruction argument = compiledArguments[index++];
       localsHandler.updateLocal(parameter, argument);
-      potentiallyCheckType(argument, parameter);
+      potentiallyCheckType(argument, parameter.computeType(compiler));
     });
     return state;
   }
@@ -1065,6 +1099,7 @@
     elements = state.oldElements;
     stack.add(localsHandler.readLocal(returnElement));
     returnElement = state.oldReturnElement;
+    returnType = state.oldReturnType;
     assert(stack.length == 1);
     state.oldStack.add(stack[0]);
     stack = state.oldStack;
@@ -1346,8 +1381,8 @@
     List<HInstruction> constructorArguments = <HInstruction>[];
     classElement.forEachInstanceField(
         (ClassElement enclosingClass, Element member) {
-          constructorArguments.add(
-              potentiallyCheckType(fieldValues[member], member));
+          constructorArguments.add(potentiallyCheckType(
+              fieldValues[member], member.computeType(compiler)));
         },
         includeBackendMembers: true,
         includeSuperMembers: true);
@@ -1432,8 +1467,7 @@
     if (currentElement.isGenerativeConstructorBody()) {
       // A generative constructor body receives extra parameters that
       // indicate if a parameter was passed to the factory.
-      check = new HParameterValue(checkResultElement);
-      add(check);
+      check = addParameter(checkResultElement);
     } else {
       // This is the code we emit for a parameter that is being checked
       // on whether it was given at value at the call site:
@@ -1496,8 +1530,8 @@
 
     if (element is FunctionElement) {
       FunctionElement functionElement = element;
-      FunctionSignature params = functionElement.computeSignature(compiler);
-      params.orderedForEachParameter((Element parameterElement) {
+      FunctionSignature signature = functionElement.computeSignature(compiler);
+      signature.orderedForEachParameter((Element parameterElement) {
         if (elements.isParameterChecked(parameterElement)) {
           addParameterCheckInstruction(parameterElement);
         }
@@ -1507,11 +1541,14 @@
       // because that is where the type guards will also be inserted.
       // This way we ensure that a type guard will dominate the type
       // check.
-      params.orderedForEachParameter((Element element) {
+      signature.orderedForEachParameter((Element element) {
         HInstruction newParameter = potentiallyCheckType(
-            localsHandler.directLocals[element], element);
+            localsHandler.directLocals[element],
+            element.computeType(compiler));
         localsHandler.directLocals[element] = newParameter;
       });
+
+      returnType = signature.returnType;
     } else {
       // Otherwise it is a lazy initializer which does not have parameters.
       assert(element is VariableElement);
@@ -1522,18 +1559,17 @@
     var enclosing = element.enclosingElement;
     if (element.isConstructor() && compiler.world.needsRti(enclosing)) {
       enclosing.typeVariables.forEach((TypeVariableType typeVariable) {
-        HParameterValue param = new HParameterValue(typeVariable.element);
-        add(param);
+        HParameterValue param = addParameter(typeVariable.element);
         localsHandler.directLocals[typeVariable.element] = param;
       });
     }
   }
 
   HInstruction potentiallyCheckType(
-      HInstruction original, Element sourceElement,
+      HInstruction original, DartType type,
       { int kind: HTypeConversion.CHECKED_MODE_CHECK }) {
     if (!compiler.enableTypeAssertions) return original;
-    HInstruction other = original.convertType(compiler, sourceElement, kind);
+    HInstruction other = original.convertType(compiler, type, kind);
     if (other != original) add(other);
     return other;
   }
@@ -1615,7 +1651,7 @@
     if (compiler.enableTypeAssertions) {
       return potentiallyCheckType(
           value,
-          compiler.boolClass,
+          compiler.boolClass.computeType(compiler),
           kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
     }
     HInstruction result = new HBoolify(value);
@@ -1709,14 +1745,18 @@
                HBasicBlock branchBlock,
                JumpHandler jumpHandler,
                LocalsHandler savedLocals) {
+    if (branchBlock == null && !jumpHandler.hasAnyBreak()) return;
+
     HBasicBlock loopExitBlock = addNewBlock();
-    assert(branchBlock.successors.length == 1);
+    assert(branchBlock == null || branchBlock.successors.length == 1);
     List<LocalsHandler> breakLocals = <LocalsHandler>[];
     jumpHandler.forEachBreak((HBreak breakInstruction, LocalsHandler locals) {
       breakInstruction.block.addSuccessor(loopExitBlock);
       breakLocals.add(locals);
     });
-    branchBlock.addSuccessor(loopExitBlock);
+    if (branchBlock != null) {
+      branchBlock.addSuccessor(loopExitBlock);
+    }
     open(loopExitBlock);
     localsHandler.endLoop(loopEntry);
     if (!breakLocals.isEmpty) {
@@ -1787,57 +1827,69 @@
     open(beginBodyBlock);
 
     localsHandler.enterLoopBody(loop);
-    hackAroundPossiblyAbortingBody(loop, body);
+    body();
 
-    SubGraph bodyGraph = new SubGraph(beginBodyBlock, current);
-    HBasicBlock bodyBlock = close(new HGoto());
+    SubGraph bodyGraph = new SubGraph(beginBodyBlock, lastOpenedBlock);
+    HBasicBlock bodyBlock = current;
+    if (current != null) close(new HGoto());
 
-    // Update.
-    // We create an update block, even when we are in a while loop. There the
-    // update block is the jump-target for continue statements. We could avoid
-    // the creation if there is no continue, but for now we always create it.
-    HBasicBlock updateBlock = addNewBlock();
+    SubExpression updateGraph;
 
-    List<LocalsHandler> continueLocals = <LocalsHandler>[];
-    jumpHandler.forEachContinue((HContinue instruction, LocalsHandler locals) {
-      instruction.block.addSuccessor(updateBlock);
-      continueLocals.add(locals);
-    });
-    bodyBlock.addSuccessor(updateBlock);
-    continueLocals.add(localsHandler);
+    // Check that the loop has at least one back-edge.
+    if (jumpHandler.hasAnyContinue() || bodyBlock != null) {
+      // Update.
+      // We create an update block, even when we are in a while loop. There the
+      // update block is the jump-target for continue statements. We could avoid
+      // the creation if there is no continue, but for now we always create it.
+      HBasicBlock updateBlock = addNewBlock();
 
-    open(updateBlock);
+      List<LocalsHandler> continueLocals = <LocalsHandler>[];
+      jumpHandler.forEachContinue((HContinue instruction,
+                                   LocalsHandler locals) {
+        instruction.block.addSuccessor(updateBlock);
+        continueLocals.add(locals);
+      });
 
-    localsHandler = localsHandler.mergeMultiple(continueLocals, updateBlock);
 
-    HLabeledBlockInformation labelInfo;
-    List<LabelElement> labels = jumpHandler.labels();
-    TargetElement target = elements[loop];
-    if (!labels.isEmpty) {
-      beginBodyBlock.setBlockFlow(
-          new HLabeledBlockInformation(
-              new HSubGraphBlockInformation(bodyGraph),
-              jumpHandler.labels(),
-              isContinue: true),
-          updateBlock);
-    } else if (target != null && target.isContinueTarget) {
-      beginBodyBlock.setBlockFlow(
-          new HLabeledBlockInformation.implicit(
-              new HSubGraphBlockInformation(bodyGraph),
-              target,
-              isContinue: true),
-          updateBlock);
+      if (bodyBlock != null) {
+        continueLocals.add(localsHandler);
+        bodyBlock.addSuccessor(updateBlock);
+      }
+
+      open(updateBlock);
+      localsHandler =
+          continueLocals[0].mergeMultiple(continueLocals, updateBlock);
+
+      HLabeledBlockInformation labelInfo;
+      List<LabelElement> labels = jumpHandler.labels();
+      TargetElement target = elements[loop];
+      if (!labels.isEmpty) {
+        beginBodyBlock.setBlockFlow(
+            new HLabeledBlockInformation(
+                new HSubGraphBlockInformation(bodyGraph),
+                jumpHandler.labels(),
+                isContinue: true),
+            updateBlock);
+      } else if (target != null && target.isContinueTarget) {
+        beginBodyBlock.setBlockFlow(
+            new HLabeledBlockInformation.implicit(
+                new HSubGraphBlockInformation(bodyGraph),
+                target,
+                isContinue: true),
+            updateBlock);
+      }
+
+      localsHandler.enterLoopUpdates(loop);
+
+      update();
+
+      HBasicBlock updateEndBlock = close(new HGoto());
+      // The back-edge completing the cycle.
+      updateEndBlock.addSuccessor(conditionBlock);
+      updateGraph = new SubExpression(updateBlock, updateEndBlock);
     }
 
-    localsHandler.enterLoopUpdates(loop);
-
-    update();
-
-    HBasicBlock updateEndBlock = close(new HGoto());
-    // The back-edge completing the cycle.
-    updateEndBlock.addSuccessor(conditionBlock);
     conditionBlock.postProcessLoopHeader();
-    SubExpression updateGraph = new SubExpression(updateBlock, updateEndBlock);
 
     endLoop(conditionBlock, conditionExitBlock, jumpHandler, savedLocals);
     HLoopBlockInformation info =
@@ -1922,51 +1974,71 @@
       bodyEntryBlock = openNewBlock();
     }
     localsHandler.enterLoopBody(node);
-    hackAroundPossiblyAbortingBody(node, () { visit(node.body); });
+    visit(node.body);
 
     // If there are no continues we could avoid the creation of the condition
     // block. This could also lead to a block having multiple entries and exits.
-    HBasicBlock bodyExitBlock = close(new HGoto());
-    HBasicBlock conditionBlock = addNewBlock();
-
-    List<LocalsHandler> continueLocals = <LocalsHandler>[];
-    jumpHandler.forEachContinue((HContinue instruction, LocalsHandler locals) {
-      instruction.block.addSuccessor(conditionBlock);
-      continueLocals.add(locals);
-    });
-    bodyExitBlock.addSuccessor(conditionBlock);
-    if (!continueLocals.isEmpty) {
-      continueLocals.add(localsHandler);
-      localsHandler = savedLocals.mergeMultiple(continueLocals, conditionBlock);
-      SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
-      List<LabelElement> labels = jumpHandler.labels();
-      HSubGraphBlockInformation bodyInfo =
-          new HSubGraphBlockInformation(bodyGraph);
-      HLabeledBlockInformation info;
-      if (!labels.isEmpty) {
-        info = new HLabeledBlockInformation(bodyInfo, labels, isContinue: true);
-      } else {
-        info = new HLabeledBlockInformation.implicit(bodyInfo, target,
-                                                     isContinue: true);
-      }
-      bodyEntryBlock.setBlockFlow(info, conditionBlock);
+    HBasicBlock bodyExitBlock;
+    bool isAbortingBody = false;
+    if (current != null) {
+      bodyExitBlock = close(new HGoto());
+    } else {
+      isAbortingBody = true;
+      bodyExitBlock = lastOpenedBlock;
     }
-    open(conditionBlock);
 
-    visit(node.condition);
-    assert(!isAborted());
-    HInstruction conditionInstruction = popBoolified();
-    HBasicBlock conditionEndBlock =
-        close(new HLoopBranch(conditionInstruction, HLoopBranch.DO_WHILE_LOOP));
+    SubExpression conditionExpression;
+    HBasicBlock conditionEndBlock;
+    if (!isAbortingBody || hasContinues) {
+      HBasicBlock conditionBlock = addNewBlock();
 
-    conditionEndBlock.addSuccessor(loopEntryBlock);  // The back-edge.
+      List<LocalsHandler> continueLocals = <LocalsHandler>[];
+      jumpHandler.forEachContinue((HContinue instruction,
+                                   LocalsHandler locals) {
+        instruction.block.addSuccessor(conditionBlock);
+        continueLocals.add(locals);
+      });
+
+      if (!isAbortingBody) {
+        bodyExitBlock.addSuccessor(conditionBlock);
+      }
+
+      if (!continueLocals.isEmpty) {
+        if (!isAbortingBody) continueLocals.add(localsHandler);
+        localsHandler =
+            savedLocals.mergeMultiple(continueLocals, conditionBlock);
+        SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
+        List<LabelElement> labels = jumpHandler.labels();
+        HSubGraphBlockInformation bodyInfo =
+            new HSubGraphBlockInformation(bodyGraph);
+        HLabeledBlockInformation info;
+        if (!labels.isEmpty) {
+          info = new HLabeledBlockInformation(bodyInfo, labels,
+                                              isContinue: true);
+        } else {
+          info = new HLabeledBlockInformation.implicit(bodyInfo, target,
+                                                       isContinue: true);
+        }
+        bodyEntryBlock.setBlockFlow(info, conditionBlock);
+      }
+      open(conditionBlock);
+
+      visit(node.condition);
+      assert(!isAborted());
+      HInstruction conditionInstruction = popBoolified();
+      conditionEndBlock = close(
+          new HLoopBranch(conditionInstruction, HLoopBranch.DO_WHILE_LOOP));
+
+      conditionEndBlock.addSuccessor(loopEntryBlock);  // The back-edge.
+      conditionExpression =
+          new SubExpression(conditionBlock, conditionEndBlock);
+    }
+
     loopEntryBlock.postProcessLoopHeader();
 
     endLoop(loopEntryBlock, conditionEndBlock, jumpHandler, localsHandler);
     jumpHandler.close();
 
-    SubExpression conditionExpression =
-        new SubExpression(conditionBlock, conditionEndBlock);
     SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
 
     HLoopBlockInformation loopBlockInfo =
@@ -2192,7 +2264,7 @@
   }
 
   String getTargetName(ErroneousElement error, [String prefix]) {
-    String result = error.targetName.slowToString();
+    String result = error.name.slowToString();
     if (?prefix) {
       result = '$prefix $result';
     }
@@ -2298,7 +2370,7 @@
         add(target);
         addWithPosition(new HInvokeStatic(<HInstruction>[target, value]), send);
       } else {
-        value = potentiallyCheckType(value, element);
+        value = potentiallyCheckType(value, element.computeType(compiler));
         addWithPosition(new HStaticStore(element, value), send);
       }
       stack.add(value);
@@ -2316,7 +2388,8 @@
       if (value.sourceElement == null) {
         value.sourceElement = element;
       }
-      HInstruction checked = potentiallyCheckType(value, element);
+      HInstruction checked = potentiallyCheckType(
+          value, element.computeType(compiler));
       if (!identical(checked, value)) {
         pop();
         stack.add(checked);
@@ -2434,7 +2507,7 @@
       TypeAnnotation typeAnnotation = argument.asTypeAnnotation();
       DartType type = elements.getType(typeAnnotation);
       HInstruction converted = expression.convertType(
-          compiler, type.element, HTypeConversion.CAST_TYPE_CHECK);
+          compiler, type, HTypeConversion.CAST_TYPE_CHECK);
       if (converted != expression) add(converted);
       stack.add(converted);
     } else {
@@ -2573,6 +2646,7 @@
     }
 
     addDynamicSendArgumentsToList(node, inputs);
+
     // The first entry in the inputs list is the receiver.
     pushWithPosition(new HInvokeDynamicMethod(selector, inputs), node);
 
@@ -2950,7 +3024,7 @@
       HInstruction runtimeType = createForeign(runtimeTypeString, rtiInputs);
       add(runtimeType);
       runtimeCodeInputs.add(runtimeType);
-      runtimeCode.add('runtimeType: #');
+      runtimeCode.add("runtimeType: '#'");
     }
     if (needsRti) {
       if (runtimeTypeIsUsed) runtimeCode.add(', ');
@@ -2999,7 +3073,7 @@
       compiler.internalError("Unresolved element: $constructor", node: node);
     }
     FunctionElement functionElement = constructor;
-    constructor = functionElement.defaultImplementation;
+    constructor = functionElement.redirectionTarget;
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HStatic].
     HInstruction target = new HStatic(constructor.declaration);
@@ -3022,9 +3096,23 @@
       return;
     }
     if (compiler.world.needsRti(constructor.enclosingElement)) {
-      type.arguments.forEach((DartType argument) {
-        inputs.add(analyzeTypeArgument(argument, node));
-      });
+      if (!type.arguments.isEmpty) {
+        type.arguments.forEach((DartType argument) {
+          inputs.add(analyzeTypeArgument(argument, node));
+        });
+      } else if (compiler.enabledRuntimeType) {
+        Link<DartType> variables =
+            constructor.getEnclosingClass().typeVariables;
+        if (!variables.isEmpty) {
+          // If the class has type variables but no type arguments have been
+          // provided, add [:dynamic:] as argument for all type variables.
+          DartString stringDynamic = new DartString.literal('dynamic');
+          HInstruction input = graph.addConstantString(stringDynamic,
+                                                       node,
+                                                       constantSystem);
+          variables.forEach((_) => inputs.add(input));
+        }
+      }
     }
 
     HType elementType = computeType(constructor);
@@ -3096,6 +3184,43 @@
     }
   }
 
+  HConstant addConstantString(Node node, String string) {
+    DartString dartString = new DartString.literal(string);
+    Constant constant = constantSystem.createString(dartString, node);
+    return graph.addConstant(constant);
+  }
+
+  visitTypeReferenceSend(Send node) {
+    Element element = elements[node];
+    HInstruction name;
+    Element helper =
+        compiler.findHelper(RuntimeTypeInformation.CACHE_HELPER_NAME);
+    if (element.isClass()) {
+      String string = rti.generateRuntimeTypeString(element, 0);
+      name = addConstantString(node.selector, string);
+    } else if (element.isTypedef()) {
+      // TODO(karlklose): implement support for type variables in typedefs.
+      name = addConstantString(node.selector, rti.getName(element));
+    } else if (element.isTypeVariable()) {
+      // TODO(6248): implement support for type variables.
+      compiler.unimplemented('first class type for type variable', node: node);
+    } else {
+      internalError('unexpected element $element', node: node);
+    }
+    pushInvokeHelper1(helper, name);
+    if (node.isCall) {
+      // This send is of the form 'e(...)', where e is resolved to a type
+      // reference. We create a regular closure call on the result of the type
+      // reference instead of creating a NoSuchMethodError to avoid pulling it
+      // in if it is not used (e.g., in a try/catch).
+      HInstruction target = pop();
+      Selector selector = elements.getSelector(node);
+      List<HInstruction> inputs = <HInstruction>[target];
+      addDynamicSendArgumentsToList(node, inputs);
+      push(new HInvokeClosure(selector, inputs));
+    }
+  }
+
   visitGetterSend(Send node) {
     generateGetter(node, elements[node]);
   }
@@ -3106,10 +3231,7 @@
   }
 
   void generateError(Node node, String message, Element helper) {
-    DartString messageObject = new DartString.literal(message);
-    Constant messageConstant =
-        constantSystem.createString(messageObject, node);
-    HInstruction errorMessage = graph.addConstant(messageConstant);
+    HInstruction errorMessage = addConstantString(node, message);
     pushInvokeHelper1(helper, errorMessage);
   }
 
@@ -3185,6 +3307,9 @@
 
   visitNewExpression(NewExpression node) {
     Element element = elements[node.send];
+    if (!Elements.isErroneousElement(element)) {
+      element = element.redirectionTarget;
+    }
     if (Elements.isErroneousElement(element)) {
       ErroneousElement error = element;
       if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR) {
@@ -3209,9 +3334,15 @@
   }
 
   visitSendSet(SendSet node) {
+    Element element = elements[node];
+    if (!Elements.isUnresolved(element) && element.impliesType()) {
+      Identifier selector = node.selector;
+      generateThrowNoSuchMethod(node, selector.source.slowToString(),
+                                argumentNodes: node.arguments);
+      return;
+    }
     Operator op = node.assignmentOperator;
     if (node.isSuperCall) {
-      Element element = elements[node];
       if (element == null) return generateSuperNoSuchMethodSend(node);
       HInstruction target = new HStatic(element);
       HInstruction context = localsHandler.readThis();
@@ -3289,6 +3420,7 @@
 
       // [receiver] is only used if the node is an instance send.
       HInstruction receiver = null;
+      Element selectorElement = elements[node];
       if (Elements.isInstanceSend(node, elements)) {
         receiver = generateInstanceSendReceiver(node);
         generateInstanceGetterWithCompiledReceiver(node, receiver);
@@ -3381,22 +3513,35 @@
     dup();
   }
 
+  void handleInTryStatement() {
+    if (!inTryStatement) return;
+    HBasicBlock block = close(new HExitTry());
+    HBasicBlock newBlock = graph.addNewBlock();
+    block.addSuccessor(newBlock);
+    open(newBlock);
+  }
+
   visitReturn(Return node) {
     if (identical(node.getBeginToken().stringValue, 'native')) {
       native.handleSsaNative(this, node.expression);
       return;
     }
-    if (node.isRedirectingFactoryBody) {
-      compiler.internalError("Unimplemented: Redirecting factory constructor",
-                             node: node);
-    }
+    assert(invariant(node, !node.isRedirectingFactoryBody));
     HInstruction value;
     if (node.expression == null) {
       value = graph.addConstantNull(constantSystem);
     } else {
       visit(node.expression);
       value = pop();
+      if (value is HForeign) {
+        // TODO(6530, 6534): remove this check.
+      } else {
+        value = potentiallyCheckType(value, returnType);
+      }
     }
+
+    handleInTryStatement();
+
     if (!inliningStack.isEmpty) {
       localsHandler.updateLocal(returnElement, value);
     } else {
@@ -3487,6 +3632,7 @@
 
   visitBreakStatement(BreakStatement node) {
     assert(!isAborted());
+    handleInTryStatement();
     TargetElement target = elements[node];
     assert(target != null);
     JumpHandler handler = jumpTargets[target];
@@ -3500,6 +3646,7 @@
   }
 
   visitContinueStatement(ContinueStatement node) {
+    handleInTryStatement();
     TargetElement target = elements[node];
     assert(target != null);
     JumpHandler handler = jumpTargets[target];
@@ -3610,7 +3757,7 @@
     JumpHandler handler = new JumpHandler(this, targetElement);
     // Introduce a new basic block.
     HBasicBlock entryBlock = openNewBlock();
-    hackAroundPossiblyAbortingBody(node, () { visit(body); });
+    visit(body);
     SubGraph bodyGraph = new SubGraph(entryBlock, lastOpenedBlock);
 
     HBasicBlock joinBlock = graph.addNewBlock();
@@ -4039,6 +4186,8 @@
     HBasicBlock enterBlock = openNewBlock();
     HTry tryInstruction = new HTry();
     close(tryInstruction);
+    bool oldInTryStatement = inTryStatement;
+    inTryStatement = true;
 
     HBasicBlock startTryBlock;
     HBasicBlock endTryBlock;
@@ -4153,6 +4302,22 @@
     HBasicBlock exitBlock = graph.addNewBlock();
 
     addOptionalSuccessor(b1, b2) { if (b2 != null) b1.addSuccessor(b2); }
+    addExitTrySuccessor(successor) {
+      if (successor == null) return;
+      // Iterate over all blocks created inside this try/catch, and
+      // attach successor information to blocks that end with
+      // [HExitTry].
+      for (int i = startTryBlock.id; i < successor.id; i++) {
+        HBasicBlock block = graph.blocks[i];
+        var last = block.last;
+        if (last is HExitTry) {
+          block.addSuccessor(successor);
+        } else if (last is HTry) {
+          // Skip all blocks inside this nested try/catch.
+          i = last.joinBlock.id;
+        }
+      }
+    }
 
     // Setup all successors. The entry block that contains the [HTry]
     // has 1) the body, 2) the catch, 3) the finally, and 4) the exit
@@ -4181,6 +4346,12 @@
       endFinallyBlock.addSuccessor(exitBlock);
     }
 
+    // If a block inside try/catch aborts (eg with a return statement),
+    // we explicitely mark this block a predecessor of the catch
+    // block and the finally block.
+    addExitTrySuccessor(startCatchBlock);
+    addExitTrySuccessor(startFinallyBlock);
+
     // Use the locals handler not altered by the catch and finally
     // blocks.
     localsHandler = savedLocals;
@@ -4192,6 +4363,7 @@
           wrapStatementGraph(catchGraph),
           wrapStatementGraph(finallyGraph)),
         exitBlock);
+    inTryStatement = oldInTryStatement;
   }
 
   visitScriptTag(ScriptTag node) {
@@ -4222,18 +4394,6 @@
     if (element == builder.compiler.stringClass) return HType.STRING;
     return HType.UNKNOWN;
   }
-
-  /** HACK HACK HACK */
-  void hackAroundPossiblyAbortingBody(Node statement, void body()) {
-    visitCondition() {
-      stack.add(graph.addConstantBool(true, constantSystem));
-    }
-    buildBody() {
-      // TODO(lrn): Make sure to take continue into account.
-      body();
-    }
-    handleIf(statement, visitCondition, buildBody, null);
-  }
 }
 
 /**
@@ -4370,11 +4530,13 @@
    */
   final PartialFunctionElement function;
   final Element oldReturnElement;
+  final DartType oldReturnType;
   final TreeElements oldElements;
   final List<HInstruction> oldStack;
 
   InliningState(this.function,
                 this.oldReturnElement,
+                this.oldReturnType,
                 this.oldElements,
                 this.oldStack) {
     assert(function.isImplementation);
diff --git a/lib/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
similarity index 91%
rename from lib/compiler/implementation/ssa/codegen.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index 2bf0d51..040337d 100644
--- a/lib/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -37,8 +37,10 @@
     return result;
   }
 
-  CodeBuffer prettyPrint(js.Node node) {
-    return js.prettyPrint(node, compiler);
+  CodeBuffer prettyPrint(js.Node node, {bool allowVariableMinification: true}) {
+    var code = js.prettyPrint(
+        node, compiler, allowVariableMinification: allowVariableMinification);
+    return code;
   }
 
   CodeBuffer generateCode(WorkItem work, HGraph graph) {
@@ -52,12 +54,11 @@
   CodeBuffer generateLazyInitializer(work, graph) {
     return measure(() {
       compiler.tracer.traceGraph("codegen", graph);
-      List<js.Parameter> parameters = <js.Parameter>[];
-      SsaOptimizedCodeGenerator codegen = new SsaOptimizedCodeGenerator(
-          backend, work, parameters, new Map<Element, String>());
+      SsaOptimizedCodeGenerator codegen =
+          new SsaOptimizedCodeGenerator(backend, work);
       codegen.visitGraph(graph);
       js.Block body = codegen.body;
-      js.Fun fun = new js.Fun(parameters, body);
+      js.Fun fun = new js.Fun(codegen.parameters, body);
       return prettyPrint(fun);
     });
   }
@@ -75,26 +76,14 @@
         }
       });
       compiler.tracer.traceGraph("codegen", graph);
-      Map<Element, String> parameterNames = getParameterNames(work);
-      // Use [work.element] to ensure that the parameter element come from
-      // the declaration.
-      FunctionElement function = work.element;
-      function.computeSignature(compiler).forEachParameter((element) {
-        compiler.enqueuer.codegen.addToWorkList(element, work.resolutionTree);
-      });
-      List<js.Parameter> parameters = <js.Parameter>[];
-      parameterNames.forEach((element, name) {
-        parameters.add(new js.Parameter(name));
-      });
-      addBackendParameters(work.element, parameters, parameterNames);
-      String parametersString = Strings.join(parameterNames.values, ", ");
-      SsaOptimizedCodeGenerator codegen = new SsaOptimizedCodeGenerator(
-          backend, work, parameters, parameterNames);
+      SsaOptimizedCodeGenerator codegen =
+          new SsaOptimizedCodeGenerator(backend, work);
       codegen.visitGraph(graph);
 
       FunctionElement element = work.element;
       js.Block body;
       ClassElement enclosingClass = element.getEnclosingClass();
+      bool allowVariableMinification;
       if (element.isInstanceMember()
           && enclosingClass.isNative()
           && native.isOverriddenMethod(
@@ -105,81 +94,29 @@
         nativeEmitter.overriddenMethods.add(element);
         StringBuffer buffer = new StringBuffer();
         String codeString = prettyPrint(codegen.body).toString();
+        String parametersString =
+            Strings.join(codegen.parameterNames.values, ", ");
         native.generateMethodWithPrototypeCheckForElement(
             compiler, buffer, element, codeString, parametersString);
         js.Node nativeCode = new js.LiteralStatement(buffer.toString());
         body = new js.Block(<js.Statement>[nativeCode]);
+        allowVariableMinification = false;
       } else {
         body = codegen.body;
+        allowVariableMinification = !codegen.visitedForeignCode;
       }
-      js.Fun fun = buildJavaScriptFunction(element, parameters, body);
-      return prettyPrint(fun);
+      js.Fun fun = buildJavaScriptFunction(element, codegen.parameters, body);
+      return prettyPrint(fun,
+                         allowVariableMinification: allowVariableMinification);
     });
   }
 
-  void addBackendParameter(Element element,
-                           List<js.Parameter> parameters,
-                           Map<Element, String> parameterNames) {
-    String name = element.name.slowToString();
-    String prefix = '';
-    // Avoid collisions with real parameters of the method.
-    do {
-      name = JsNames.getValid('$prefix$name');
-      prefix = '\$$prefix';
-    } while (parameterNames.containsValue(name));
-    parameterNames[element] = name;
-    parameters.add(new js.Parameter(name));
-  }
-
-  void addBackendParameters(Element element,
-                            List<js.Parameter> parameters,
-                            Map<Element, String> parameterNames) {
-    // TODO(ngeoffray): We should infer this information from the
-    // graph, instead of recomputing what the builder did.
-    if (element.isConstructor()) {
-      // Put the type parameters.
-      ClassElement cls = element.enclosingElement;
-      if (!compiler.world.needsRti(cls)) return;
-      cls.typeVariables.forEach((TypeVariableType typeVariable) {
-        addBackendParameter(typeVariable.element, parameters, parameterNames);
-      });
-    } else if (element.isGenerativeConstructorBody()) {
-      // Put the parameter checks parameters.
-      Node node = element.implementation.parseNode(compiler);
-      ClosureClassMap closureData =
-          compiler.closureToClassMapper.getMappingForNestedFunction(node);
-      FunctionElement functionElement = element;
-      FunctionSignature params = functionElement.computeSignature(compiler);
-      TreeElements elements =
-          compiler.enqueuer.resolution.getCachedElements(element);
-      params.orderedForEachParameter((Element element) {
-        if (elements.isParameterChecked(element)) {
-          Element checkResultElement =
-              closureData.parametersWithSentinel[element];
-          addBackendParameter(checkResultElement, parameters, parameterNames);
-        }
-      });
-      // Put the box parameter.
-      ClosureScope scopeData = closureData.capturingScopes[node];
-      if (scopeData != null) {
-        addBackendParameter(scopeData.boxElement, parameters, parameterNames);
-      }
-    }
-  }
-
   CodeBuffer generateBailoutMethod(WorkItem work, HGraph graph) {
     return measure(() {
       compiler.tracer.traceGraph("codegen-bailout", graph);
 
-      Map<Element, String> parameterNames = getParameterNames(work);
-      List<js.Parameter> parameters = <js.Parameter>[];
-      parameterNames.forEach((element, name) {
-        parameters.add(new js.Parameter(name));
-      });
-      addBackendParameters(work.element, parameters, parameterNames);
-
-      SsaUnoptimizedCodeGenerator codegen = new SsaUnoptimizedCodeGenerator(
-          backend, work, parameters, parameterNames);
+      SsaUnoptimizedCodeGenerator codegen =
+          new SsaUnoptimizedCodeGenerator(backend, work);
       codegen.visitGraph(graph);
 
       js.Block body = new js.Block(<js.Statement>[]);
@@ -190,24 +127,29 @@
       return prettyPrint(fun);
     });
   }
+}
 
-  Map<Element, String> getParameterNames(WorkItem work) {
-    // Make sure the map preserves insertion order, so that fetching
-    // the values will keep the order of parameters.
-    Map<Element, String> parameterNames = new LinkedHashMap<Element, String>();
-    FunctionElement function = work.element.implementation;
+// Stop-gap until the core classes have such a class.
+class OrderedSet<T> {
+  final LinkedHashMap<T, bool> map = new LinkedHashMap<T, bool>();
 
-    // The dom/html libraries have inline JS code that reference
-    // parameter names directly. Long-term such code will be rejected.
-    // Now, just don't mangle the parameter name.
-    FunctionSignature signature = function.computeSignature(compiler);
-    signature.orderedForEachParameter((Element element) {
-      parameterNames[element] = function.isNative()
-          ? element.name.slowToString()
-          : JsNames.getValid('${element.name.slowToString()}');
-    });
-    return parameterNames;
+  void add(T x) {
+    if (!map.containsKey(x)) {
+      map[x] = true;
+    }
   }
+
+  bool contains(T x) => map.containsKey(x);
+
+  bool remove(T x) => map.remove(x) != null;
+
+  bool get isEmpty => map.isEmpty;
+
+  void forEach(f) => map.keys.forEach(f);
+
+  T get first => map.keys.iterator().next();
+
+  get length => map.length;
 }
 
 typedef void ElementAction(Element element);
@@ -235,6 +177,8 @@
    */
   bool isGeneratingExpression = false;
 
+  bool visitedForeignCode = false;
+
   final JavaScriptBackend backend;
   final WorkItem work;
   final HTypeMap types;
@@ -244,6 +188,7 @@
   final Map<Element, ElementAction> breakAction;
   final Map<Element, ElementAction> continueAction;
   final Map<Element, String> parameterNames;
+  final List<js.Parameter> parameters;
 
   js.Block currentContainer;
   js.Block get body => currentContainer;
@@ -255,17 +200,20 @@
    * copies to perform on block transitioning.
    */
   VariableNames variableNames;
+  bool shouldGroupVarDeclarations = false;
 
   /**
    * While generating expressions, we can't insert variable declarations.
-   * Instead we declare them at the end of the function
+   * Instead we declare them at the start of the function.  When minifying
+   * we do this most of the time, because it reduces the size unless there
+   * is only one variable.
    */
-  final Set<String> delayedVariableDeclarations;
+  final OrderedSet<String> collectedVariableDeclarations;
 
   /**
-   * Set of variables that have already been declared.
+   * Set of variables and parameters that have already been declared.
    */
-  final Set<String> declaredVariables;
+  final Set<String> declaredLocals;
 
   Element equalsNullElement;
   Element boolifiedEqualsNullElement;
@@ -280,15 +228,15 @@
   // if branches.
   SubGraph subGraph;
 
-  SsaCodeGenerator(this.backend,
-                   WorkItem work,
-                   this.parameterNames)
+  SsaCodeGenerator(this.backend, WorkItem work)
     : this.work = work,
       this.types =
           (work.compilationContext as JavaScriptItemCompilationContext).types,
-      declaredVariables = new Set<String>(),
-      delayedVariableDeclarations = new Set<String>(),
+      parameterNames = new LinkedHashMap<Element, String>(),
+      declaredLocals = new Set<String>(),
+      collectedVariableDeclarations = new OrderedSet<String>(),
       currentContainer = new js.Block.empty(),
+      parameters = <js.Parameter>[],
       expressionStack = <js.Expression>[],
       oldContainerStack = <js.Block>[],
       generateAtUseSite = new Set<HInstruction>(),
@@ -359,6 +307,10 @@
     currentContainer.statements.add(statement);
   }
 
+  void insertStatementAtStart(js.Statement statement) {
+    currentContainer.statements.insertRange(0, 1, statement);
+  }
+
   /**
    * If the [instruction] is not `null` it will be used to attach the position
    * to the [expression].
@@ -400,19 +352,19 @@
     return jsNode;
   }
 
-  abstract visitTypeGuard(HTypeGuard node);
-  abstract visitBailoutTarget(HBailoutTarget node);
+  visitTypeGuard(HTypeGuard node);
+  visitBailoutTarget(HBailoutTarget node);
 
-  abstract beginGraph(HGraph graph);
-  abstract endGraph(HGraph graph);
+  beginGraph(HGraph graph);
+  endGraph(HGraph graph);
 
-  abstract beginLoop(HBasicBlock block);
-  abstract endLoop(HBasicBlock block);
-  abstract handleLoopCondition(HLoopBranch node);
+  beginLoop(HBasicBlock block);
+  endLoop(HBasicBlock block);
+  handleLoopCondition(HLoopBranch node);
 
-  abstract preLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
-  abstract startLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
-  abstract endLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
+  preLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
+  startLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
+  endLabeledBlock(HLabeledBlockInformation labeledBlockInfo);
 
   void preGenerateMethod(HGraph graph) {
     new SsaInstructionMerger(types, generateAtUseSite).visitGraph(graph);
@@ -429,6 +381,48 @@
         parameterNames);
     allocator.visitGraph(graph);
     variableNames = allocator.names;
+    shouldGroupVarDeclarations = allocator.names.numberOfVariables > 1;
+  }
+
+  void handleDelayedVariableDeclarations() {
+    // If we have only one variable declaration and the first statement is an
+    // assignment to that variable then we can merge the two.  We count the
+    // number of variables in the variable allocator to try to avoid this issue,
+    // but it sometimes happens that the variable allocator introduces a
+    // temporary variable that it later eliminates.
+    if (!collectedVariableDeclarations.isEmpty) {
+      if (collectedVariableDeclarations.length == 1 &&
+          currentContainer.statements.length >= 1 &&
+          currentContainer.statements[0] is js.ExpressionStatement) {
+        String name = collectedVariableDeclarations.first;
+        js.ExpressionStatement statement = currentContainer.statements[0];
+        if (statement.expression is js.Assignment) {
+          js.Assignment assignment = statement.expression;
+          if (!assignment.isCompound &&
+              assignment.leftHandSide is js.VariableReference) {
+            js.VariableReference variableReference = assignment.leftHandSide;
+            if (variableReference.name == name) {
+              js.VariableDeclaration decl = new js.VariableDeclaration(name);
+              js.VariableInitialization initialization =
+                  new js.VariableInitialization(decl, assignment.value);
+              currentContainer.statements[0] = new js.ExpressionStatement(
+                  new js.VariableDeclarationList([initialization]));
+              return;
+            }
+          }
+        }
+      }
+      // If we can't merge the declaration with the first assignment then we
+      // just do it with a new var z,y,x; statement.
+      List<js.VariableInitialization> declarations =
+          <js.VariableInitialization>[];
+      collectedVariableDeclarations.forEach((String name) {
+        declarations.add(new js.VariableInitialization(
+            new js.VariableDeclaration(name), null));
+      });
+      var declarationList = new js.VariableDeclarationList(declarations);
+      insertStatementAtStart(new js.ExpressionStatement(declarationList));
+    }
   }
 
   visitGraph(HGraph graph) {
@@ -438,15 +432,7 @@
     subGraph = new SubGraph(graph.entry, graph.exit);
     HBasicBlock start = beginGraph(graph);
     visitBasicBlock(start);
-    if (!delayedVariableDeclarations.isEmpty) {
-      List<js.VariableInitialization> declarations =
-          <js.VariableInitialization>[];
-      delayedVariableDeclarations.forEach((String name) {
-        declarations.add(new js.VariableInitialization(
-            new js.VariableDeclaration(name), null));
-      });
-      pushExpressionAsStatement(new js.VariableDeclarationList(declarations));
-    }
+    handleDelayedVariableDeclarations();
     endGraph(graph);
   }
 
@@ -616,7 +602,8 @@
   }
 
   bool isVariableDeclared(String variableName) {
-    return declaredVariables.contains(variableName);
+    return declaredLocals.contains(variableName) ||
+        collectedVariableDeclarations.contains(variableName);
   }
 
   js.Expression generateExpressionAssignment(String variableName,
@@ -644,16 +631,19 @@
 
   void assignVariable(String variableName, js.Expression value) {
     if (isGeneratingExpression) {
+      // If we are in an expression then we can't declare the variable here.
+      // We have no choice, but to use it and then declare it separately.
       if (!isVariableDeclared(variableName)) {
-        delayedVariableDeclarations.add(variableName);
-        // We can treat the variable as being declared from this point on.
-        declaredVariables.add(variableName);
+        collectedVariableDeclarations.add(variableName);
       }
       push(generateExpressionAssignment(variableName, value));
-    } else if (!isVariableDeclared(variableName) ||
-               delayedVariableDeclarations.contains(variableName)) {
-      declaredVariables.add(variableName);
-      delayedVariableDeclarations.remove(variableName);
+      // Otherwise if we are trying to declare inline and we are in a statement
+      // then we declare (unless it was already declared).
+    } else if (!shouldGroupVarDeclarations &&
+               !declaredLocals.contains(variableName)) {
+      // It may be necessary to remove it from the ones to be declared later.
+      collectedVariableDeclarations.remove(variableName);
+      declaredLocals.add(variableName);
       js.VariableDeclaration decl = new js.VariableDeclaration(variableName);
       js.VariableInitialization initialization =
           new js.VariableInitialization(decl, value);
@@ -661,6 +651,11 @@
       pushExpressionAsStatement(new js.VariableDeclarationList(
           <js.VariableInitialization>[initialization]));
     } else {
+      // Otherwise we are just going to use it.  If we have not already declared
+      // it then we make sure we will declare it later.
+      if (!declaredLocals.contains(variableName)) {
+        collectedVariableDeclarations.add(variableName);
+      }
       pushExpressionAsStatement(
           generateExpressionAssignment(variableName, value));
     }
@@ -836,7 +831,7 @@
 
   bool visitLoopInfo(HLoopBlockInformation info) {
     HExpressionInformation condition = info.condition;
-    bool isConditionExpression = isJSCondition(condition);
+    bool isConditionExpression = condition == null || isJSCondition(condition);
 
     js.Loop loop;
 
@@ -860,9 +855,10 @@
           // expression, generate a for-loop.
           js.Expression jsInitialization = null;
           if (initialization != null) {
-            int delayedVariablesCount = delayedVariableDeclarations.length;
+            int delayedVariablesCount = collectedVariableDeclarations.length;
             jsInitialization = generateExpression(initialization);
-            if (delayedVariablesCount < delayedVariableDeclarations.length) {
+            if (!shouldGroupVarDeclarations &&
+                delayedVariablesCount < collectedVariableDeclarations.length) {
               // We just added a new delayed variable-declaration. See if we
               // can put in a 'var' in front of the initialization to make it
               // go away.
@@ -895,7 +891,7 @@
                   js.Node declaration = new js.VariableDeclaration(id);
                   inits.add(new js.VariableInitialization(declaration,
                                                           assignment.value));
-                  delayedVariableDeclarations.remove(id);
+                  collectedVariableDeclarations.remove(id);
                 }
                 jsInitialization = new js.VariableDeclarationList(inits);
               }
@@ -947,7 +943,11 @@
         }
         break;
       case HLoopBlockInformation.DO_WHILE_LOOP:
-        // Generate do-while loop in all cases.
+        // If there are phi copies after the condition, we cannot emit
+        // a pretty do/while loop, se we fallback to the generic
+        // emission of a loop.
+        CopyHandler handler = variableNames.getCopyHandler(info.end);
+        if (handler != null && !handler.isEmpty) return false;
         if (info.initializer != null) {
           generateStatements(info.initializer);
         }
@@ -962,7 +962,9 @@
         if (info.updates != null) {
           generateStatements(info.updates);
         }
-        if (isConditionExpression) {
+        if (condition == null) {
+          push(newLiteralBool(false));
+        } else if (isConditionExpression) {
           push(generateExpression(condition));
         } else {
           generateStatements(condition);
@@ -1135,7 +1137,9 @@
    * Sequentialize a list of conceptually parallel copies. Parallel
    * copies may contain cycles, that this method breaks.
    */
-  void sequentializeCopies(List<Copy> copies) {
+  void sequentializeCopies(List<Copy> copies,
+                           String tempName,
+                           void doAssignment(String target, String source)) {
     // Map to keep track of the current location (ie the variable that
     // holds the initial value) of a variable.
     Map<String, String> currentLocation = new Map<String, String>();
@@ -1153,10 +1157,8 @@
     // Prune [copies] by removing self-copies.
     List<Copy> prunedCopies = <Copy>[];
     for (Copy copy in copies) {
-      String sourceName = variableNames.getName(copy.source);
-      String destinationName = variableNames.getName(copy.destination);
-      if (sourceName != destinationName) {
-        prunedCopies.add(new Copy(sourceName, destinationName));
+      if (copy.source != copy.destination) {
+        prunedCopies.add(copy);
       }
     }
     copies = prunedCopies;
@@ -1186,7 +1188,7 @@
         // Since [source] might have been updated, use the current
         // location of [source]
         String copy = currentLocation[source];
-        emitAssignment(destination, copy);
+        doAssignment(destination, copy);
         // Now [destination] is the current location of [source].
         currentLocation[source] = destination;
         // If [source] hasn't been updated and needs to have a value,
@@ -1204,8 +1206,7 @@
       // cycle that we break by using a temporary name.
       if (currentLocation[current] != null
           && current != currentLocation[initialValue[current]]) {
-        String tempName = variableNames.swapTemp;
-        emitAssignment(tempName, current);
+        doAssignment(tempName, current);
         currentLocation[current] = tempName;
         // [current] can now be safely updated. Copies of [current]
         // will now use [tempName].
@@ -1218,7 +1219,13 @@
     CopyHandler handler = variableNames.getCopyHandler(node);
     if (handler == null) return;
 
-    sequentializeCopies(handler.copies);
+    // Map the instructions to strings.
+    List<Copy> copies = handler.copies.map((Copy copy) {
+      return new Copy(variableNames.getName(copy.source),
+                      variableNames.getName(copy.destination));
+    });
+
+    sequentializeCopies(copies, variableNames.getSwapTemp(), emitAssignment);
 
     for (Copy copy in handler.assignments) {
       String name = variableNames.getName(copy.destination);
@@ -1237,7 +1244,16 @@
       }
       instruction = instruction.next;
     }
-    assignPhisOfSuccessors(node);
+    if (instruction is HLoopBranch) {
+      HLoopBranch branch = instruction;
+      // If the loop is a do/while loop, the phi updates must happen
+      // after the evaluation of the condition.
+      if (!branch.isDoWhile()) {
+        assignPhisOfSuccessors(node);
+      }
+    } else {
+      assignPhisOfSuccessors(node);
+    }
     visit(instruction);
   }
 
@@ -1413,6 +1429,15 @@
     }
   }
 
+  visitExitTry(HExitTry node) {
+    // An [HExitTry] is used to represent the control flow graph of a
+    // try/catch block, ie the try body is always a predecessor
+    // of the catch and finally. Here, we continue visiting the try
+    // body by visiting the block that contains the user-level control
+    // flow instruction.
+    visitBasicBlock(node.bodyTrySuccessor);
+  }
+
   visitTry(HTry node) {
     // We should never get here. Try/catch/finally is always handled using block
     // information in [visitTryInfo], or not at all, in the case of the bailout
@@ -1713,6 +1738,7 @@
   }
 
   visitForeign(HForeign node) {
+    visitedForeignCode = true;
     String code = node.code.slowToString();
     List<HInstruction> inputs = node.inputs;
     if (node.isJsStatement(types)) {
@@ -1732,6 +1758,7 @@
   }
 
   visitForeignNew(HForeignNew node) {
+    visitedForeignCode = true;
     String jsClassReference = backend.namer.isolateAccess(node.element);
     List<HInstruction> inputs = node.inputs;
     // We can't use 'visitArguments', since our arguments start at input[0].
@@ -1759,7 +1786,8 @@
     // TODO(floitsch): should we use the ConstantVisitor here?
     if (!constant.isObject()) {
       if (constant.isBool()) {
-        push(newLiteralBool(constant.value));
+        BoolConstant boolConstant = constant;
+        push(newLiteralBool(boolConstant.value));
       } else if (constant.isNum()) {
         // TODO(floitsch): get rid of the code buffer.
         CodeBuffer buffer = new CodeBuffer();
@@ -1817,8 +1845,12 @@
     HBasicBlock branchBlock = currentBlock;
     handleLoopCondition(node);
     List<HBasicBlock> dominated = currentBlock.dominatedBlocks;
-    // For a do while loop, the body has already been visited.
-    if (!node.isDoWhile()) {
+    if (node.isDoWhile()) {
+      // Now that the condition has been evaluated, we can update the
+      // phis of a do/while loop.
+      assignPhisOfSuccessors(node.block);
+    } else {
+      // For a do while loop, the body has already been visited.
       visitBasicBlock(dominated[0]);
     }
     endLoop(node.block);
@@ -2524,18 +2556,20 @@
 }
 
 class SsaOptimizedCodeGenerator extends SsaCodeGenerator {
-  SsaOptimizedCodeGenerator(backend, work, parameters, parameterNames)
-    : super(backend, work, parameterNames) {
-    // Declare the parameter names only for the optimized version. The
-    // unoptimized version has different parameters.
-    parameterNames.forEach((Element element, String name) {
-      declaredVariables.add(name);
-    });
-  }
+  SsaOptimizedCodeGenerator(backend, work) : super(backend, work);
 
   int maxBailoutParameters;
 
-  HBasicBlock beginGraph(HGraph graph) => graph.entry;
+  HBasicBlock beginGraph(HGraph graph) {
+    // Declare the parameter names only for the optimized version. The
+    // unoptimized version has different parameters.
+    parameterNames.forEach((Element element, String name) {
+      parameters.add(new js.Parameter(name));
+      declaredLocals.add(name);
+    });
+    return graph.entry;
+  }
+
   void endGraph(HGraph graph) {}
 
   js.Statement bailout(HTypeGuard guard, String reason) {
@@ -2564,12 +2598,6 @@
       use(target.inputs[i]);
       arguments.add(pop());
     }
-    // Make sure we call the bailout method with the number of
-    // arguments it expects. This avoids having the underlying
-    // JS engine fill them in for us.
-    for (; i < maxBailoutParameters; i++) {
-      arguments.add(new js.LiteralNumber('0'));
-    }
 
     js.Expression bailoutTarget;
     if (element.isInstanceMember()) {
@@ -2686,7 +2714,8 @@
     body = unwrapStatement(body);
     js.While loop = new js.While(newLiteralBool(true), body);
 
-    HLoopInformation info = block.loopInformation;
+    HBasicBlock header = block.isLoopHeader() ? block : block.parentLoopHeader;
+    HLoopInformation info = header.loopInformation;
     attachLocationRange(loop,
                         info.loopBlockInformation.sourcePosition,
                         info.loopBlockInformation.endSourcePosition);
@@ -2695,7 +2724,9 @@
 
   void handleLoopCondition(HLoopBranch node) {
     use(node.inputs[0]);
-    pushStatement(new js.If.noElse(pop(), new js.Break(null)), node);
+    js.Expression test = new js.Prefix('!', pop());
+    js.Statement then = new js.Break(null);
+    pushStatement(new js.If.noElse(test, then), node);
   }
 
 
@@ -2727,8 +2758,8 @@
   SsaBailoutPropagator propagator;
   HInstruction savedFirstInstruction;
 
-  SsaUnoptimizedCodeGenerator(backend, work, parameters, parameterNames)
-    : super(backend, work, parameterNames),
+  SsaUnoptimizedCodeGenerator(backend, work)
+    : super(backend, work),
       oldBailoutSwitches = <js.Switch>[],
       newParameters = <js.Parameter>[],
       labels = <String>[],
@@ -2763,7 +2794,7 @@
       // the right variables in the setup phase.
       for (int i = 0; i < propagator.maxBailoutParameters; i++) {
         String name = 'env$i';
-        declaredVariables.add(name);
+        declaredLocals.add(name);
         newParameters.add(new js.Parameter(name));
       }
 
@@ -2780,7 +2811,7 @@
       for (HInstruction input in propagator.firstBailoutTarget.inputs) {
         input = unwrap(input);
         String name = variableNames.getName(input);
-        declaredVariables.add(name);
+        declaredLocals.add(name);
         newParameters.add(new js.Parameter(name));
       }
 
@@ -2846,26 +2877,33 @@
     pushExpressionAsStatement(new js.Assignment(generateStateUse(),
                                                 new js.LiteralNumber('0')));
     js.Block setupBlock = new js.Block.empty();
-    int i = 0;
-    for (HInstruction input in node.inputs) {
+    List<Copy> copies = <Copy>[];
+    for (int i = 0; i < node.inputs.length; i++) {
+      HInstruction input = node.inputs[i];
       input = unwrap(input);
       String name = variableNames.getName(input);
-      if (!isVariableDeclared(name)) {
-        declaredVariables.add(name);
+      String source = "env$i";
+      copies.add(new Copy(source, name));
+    }
+    sequentializeCopies(copies,
+                        variableNames.getSwapTemp(),
+                        (String target, String source) {
+      if (!isVariableDeclared(target) && !shouldGroupVarDeclarations) {
         js.VariableInitialization init =
-            new js.VariableInitialization(new js.VariableDeclaration(name),
-                                          new js.VariableUse('env$i'));
+            new js.VariableInitialization(new js.VariableDeclaration(target),
+                                          new js.VariableUse(source));
         js.Expression varList =
             new js.VariableDeclarationList(<js.VariableInitialization>[init]);
         setupBlock.statements.add(new js.ExpressionStatement(varList));
       } else {
-        js.Expression target = new js.VariableUse(name);
-        js.Expression source = new js.VariableUse('env$i');
-        js.Expression assignment = new js.Assignment(target, source);
+        collectedVariableDeclarations.add(target);
+        js.Expression jsTarget = new js.VariableUse(target);
+        js.Expression jsSource = new js.VariableUse(source);
+        js.Expression assignment = new js.Assignment(jsTarget, jsSource);
         setupBlock.statements.add(new js.ExpressionStatement(assignment));
       }
-      i++;
-    }
+      declaredLocals.add(target);
+    });
     setupBlock.statements.add(new js.Break(null));
     js.Case setupClause =
         new js.Case(new js.LiteralNumber('${node.state}'), setupBlock);
diff --git a/lib/compiler/implementation/ssa/codegen_helpers.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/codegen_helpers.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/codegen_helpers.dart
diff --git a/lib/compiler/implementation/ssa/js_names.dart b/sdk/lib/_internal/compiler/implementation/ssa/js_names.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/js_names.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/js_names.dart
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
similarity index 98%
rename from lib/compiler/implementation/ssa/nodes.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index 5e416d1..ac51d42 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -19,6 +19,7 @@
   R visitDivide(HDivide node);
   R visitEquals(HEquals node);
   R visitExit(HExit node);
+  R visitExitTry(HExitTry node);
   R visitFieldGet(HFieldGet node);
   R visitFieldSet(HFieldSet node);
   R visitForeign(HForeign node);
@@ -95,13 +96,13 @@
     visitBasicBlockAndSuccessors(graph.entry);
   }
 
-  abstract visitBasicBlock(HBasicBlock block);
+  visitBasicBlock(HBasicBlock block);
 }
 
 abstract class HInstructionVisitor extends HGraphVisitor {
   HBasicBlock currentBlock;
 
-  abstract visitInstruction(HInstruction node);
+  visitInstruction(HInstruction node);
 
   visitBasicBlock(HBasicBlock node) {
     void visitInstructionList(HInstructionList list) {
@@ -220,7 +221,6 @@
       HBasicBlock block = blocks[i];
       List<HBasicBlock> predecessors = block.predecessors;
       if (block.isLoopHeader()) {
-        assert(predecessors.length >= 2);
         block.assignCommonDominator(predecessors[0]);
       } else {
         for (int j = predecessors.length - 1; j >= 0; j--) {
@@ -279,6 +279,7 @@
   visitDivide(HDivide node) => visitBinaryArithmetic(node);
   visitEquals(HEquals node) => visitRelational(node);
   visitExit(HExit node) => visitControlFlow(node);
+  visitExitTry(HExitTry node) => visitControlFlow(node);
   visitFieldGet(HFieldGet node) => visitFieldAccess(node);
   visitFieldSet(HFieldSet node) => visitFieldAccess(node);
   visitForeign(HForeign node) => visitInstruction(node);
@@ -871,6 +872,7 @@
   bool isInteger(HTypeMap types) => types[this].isInteger();
   bool isDouble(HTypeMap types) => types[this].isDouble();
   bool isNumber(HTypeMap types) => types[this].isNumber();
+  bool isNumberOrNull(HTypeMap types) => types[this].isNumberOrNull();
   bool isString(HTypeMap types) => types[this].isString();
   bool isTypeUnknown(HTypeMap types) => types[this].isUnknown();
   bool isIndexablePrimitive(HTypeMap types)
@@ -975,7 +977,7 @@
   bool typeEquals(HInstruction other) => false;
   bool dataEquals(HInstruction other) => false;
 
-  abstract accept(HVisitor visitor);
+  accept(HVisitor visitor);
 
   void notifyAddedToBlock(HBasicBlock targetBlock) {
     assert(!isInBasicBlock());
@@ -1128,10 +1130,7 @@
   }
 
 
-  HInstruction convertType(Compiler compiler,
-                           Element sourceElement,
-                           int kind) {
-    DartType type = sourceElement.computeType(compiler);
+  HInstruction convertType(Compiler compiler, DartType type, int kind) {
     if (type == null) return this;
     if (identical(type.element, compiler.dynamicClass)) return this;
     if (identical(type.element, compiler.objectClass)) return this;
@@ -1286,12 +1285,12 @@
   HInstruction get condition => inputs[0];
   HBasicBlock get trueBranch => block.successors[0];
   HBasicBlock get falseBranch => block.successors[1];
-  abstract toString();
+  toString();
 }
 
 abstract class HControlFlow extends HInstruction {
   HControlFlow(inputs) : super(inputs);
-  abstract toString();
+  toString();
   void prepareGvn(HTypeMap types) {
     // Control flow does not have side-effects.
   }
@@ -1309,7 +1308,7 @@
   static const int ARGUMENTS_OFFSET = 1;
 
   // TODO(floitsch): make class abstract instead of adding an abstract method.
-  abstract accept(HVisitor visitor);
+  accept(HVisitor visitor);
 }
 
 abstract class HInvokeDynamic extends HInvoke {
@@ -1322,7 +1321,7 @@
   HInstruction get receiver => inputs[0];
 
   // TODO(floitsch): make class abstract instead of adding an abstract method.
-  abstract accept(HVisitor visitor);
+  accept(HVisitor visitor);
 }
 
 class HInvokeClosure extends HInvokeDynamic {
@@ -1347,7 +1346,7 @@
   toString() => 'invoke dynamic field: $selector';
 
   // TODO(floitsch): make class abstract instead of adding an abstract method.
-  abstract accept(HVisitor visitor);
+  accept(HVisitor visitor);
 }
 
 class HInvokeDynamicGetter extends HInvokeDynamicField {
@@ -1626,8 +1625,8 @@
   HInstruction get left => inputs[1];
   HInstruction get right => inputs[2];
 
-  abstract BinaryOperation operation(ConstantSystem constantSystem);
-  abstract isBuiltin(HTypeMap types);
+  BinaryOperation operation(ConstantSystem constantSystem);
+  isBuiltin(HTypeMap types);
 }
 
 abstract class HBinaryArithmetic extends HInvokeBinary {
@@ -1687,7 +1686,7 @@
     return HType.UNKNOWN;
   }
 
-  abstract BinaryOperation operation(ConstantSystem constantSystem);
+  BinaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HAdd extends HBinaryArithmetic {
@@ -1831,7 +1830,7 @@
   }
 
   // TODO(floitsch): make class abstract instead of adding an abstract method.
-  abstract accept(HVisitor visitor);
+  accept(HVisitor visitor);
 }
 
 class HShiftLeft extends HBinaryBitOp {
@@ -1947,7 +1946,7 @@
 
   HType computeLikelyType(HTypeMap types, Compiler compiler) => HType.NUMBER;
 
-  abstract UnaryOperation operation(ConstantSystem constantSystem);
+  UnaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HNegate extends HInvokeUnary {
@@ -2035,6 +2034,18 @@
   HBasicBlock get joinBlock => this.block.successors.last;
 }
 
+// An [HExitTry] control flow node is used when the body of a try or
+// the body of a catch contains a return, break or continue. To build
+// the control flow graph, we explicitely mark the body that
+// leads to one of this instruction a predecessor of catch and
+// finally.
+class HExitTry extends HControlFlow {
+  HExitTry() : super(const <HInstruction>[]);
+  toString() => 'exit try';
+  accept(HVisitor visitor) => visitor.visitExitTry(this);
+  HBasicBlock get bodyTrySuccessor => block.successors[0];
+}
+
 class HIf extends HConditionalBranch {
   HBlockFlow blockInformation = null;
   HIf(HInstruction condition) : super(<HInstruction>[condition]);
@@ -2292,7 +2303,7 @@
   bool isBuiltin(HTypeMap types)
       => left.isNumber(types) && right.isNumber(types);
   // TODO(1603): the class should be marked as abstract.
-  abstract BinaryOperation operation(ConstantSystem constantSystem);
+  BinaryOperation operation(ConstantSystem constantSystem);
 }
 
 class HEquals extends HRelational {
@@ -2916,7 +2927,7 @@
 
   HBasicBlock get end {
     if (updates != null) return updates.end;
-    if (kind == DO_WHILE_LOOP) {
+    if (kind == DO_WHILE_LOOP && condition != null) {
       return condition.end;
     }
     return body.end;
diff --git a/lib/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
similarity index 98%
rename from lib/compiler/implementation/ssa/optimize.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 30da6c5..26f990d 100644
--- a/lib/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -142,12 +142,15 @@
         }
         block.rewrite(instruction, replacement);
         block.remove(instruction);
-        // If the replacement instruction does not know its type or
-        // source element yet, use the type and source element of the
+
+        // If we can replace [instruction] with [replacement], then
+        // [replacement]'s type can be narrowed.
+        types[replacement] =
+            types[replacement].intersection(types[instruction], compiler);
+
+        // If the replacement instruction does not know its
+        // source element, use the source element of the
         // instruction.
-        if (!types[replacement].isUseful()) {
-          types[replacement] = types[instruction];
-        }
         if (replacement.sourceElement == null) {
           replacement.sourceElement = instruction.sourceElement;
         }
@@ -395,10 +398,9 @@
     HInstruction right = node.right;
     HType leftType = types[left];
     HType rightType = types[right];
-    assert(!leftType.isConflicting() && !rightType.isConflicting());
 
     // We don't optimize on numbers to preserve the runtime semantics.
-    if (!(left.isNumber(types) && right.isNumber(types)) &&
+    if (!(left.isNumberOrNull(types) && right.isNumberOrNull(types)) &&
         leftType.intersection(rightType, compiler).isConflicting()) {
       return graph.addConstantBool(false, constantSystem);
     }
@@ -620,7 +622,9 @@
     HInstruction value = node.inputs[1];
     if (compiler.enableTypeAssertions) {
       HInstruction other = value.convertType(
-          compiler, field, HTypeConversion.CHECKED_MODE_CHECK);
+          compiler,
+          field.computeType(compiler),
+          HTypeConversion.CHECKED_MODE_CHECK);
       if (other != value) {
         node.block.addBefore(node, other);
         value = other;
@@ -747,6 +751,7 @@
            && instruction is !HInvokeDynamicGetter
            && instruction is !HCheck
            && instruction is !HTypeGuard
+           && instruction is !HParameterValue
            && !instruction.isControlFlow();
   }
 
diff --git a/lib/compiler/implementation/ssa/ssa.dart b/sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/ssa.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/ssa.dart
diff --git a/lib/compiler/implementation/ssa/tracer.dart b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
similarity index 99%
rename from lib/compiler/implementation/ssa/tracer.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
index b08bfd0..e38fe7c 100644
--- a/lib/compiler/implementation/ssa/tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
@@ -458,6 +458,10 @@
     return visitInvokeStatic(node);
   }
 
+  String visitExitTry(HExitTry node) {
+    return "Exit try";
+  }
+
   String visitTry(HTry node) {
     List<HBasicBlock> successors = currentBlock.successors;
     String tryBlock = 'B${successors[0].id}';
diff --git a/lib/compiler/implementation/ssa/types.dart b/sdk/lib/_internal/compiler/implementation/ssa/types.dart
similarity index 98%
rename from lib/compiler/implementation/ssa/types.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/types.dart
index da534d583..597ccf1 100644
--- a/lib/compiler/implementation/ssa/types.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/types.dart
@@ -94,7 +94,7 @@
   /** Alias for isReadableArray. */
   bool isArray() => isReadableArray();
 
-  abstract DartType computeType(Compiler compiler);
+  DartType computeType(Compiler compiler);
 
   /**
    * The intersection of two types is the intersection of its values. For
@@ -109,7 +109,7 @@
    * An intersection with [UNKNOWN] returns the non-UNKNOWN type. An
    * intersection with [CONFLICTING] returns [CONFLICTING].
    */
-  abstract HType intersection(HType other, Compiler compiler);
+  HType intersection(HType other, Compiler compiler);
 
   /**
    * The union of two types is the union of its values. For example:
@@ -123,7 +123,7 @@
    * A union with [UNKNOWN] returns [UNKNOWN].
    * A union of [CONFLICTING] with any other types returns the other type.
    */
-  abstract HType union(HType other, Compiler compiler);
+  HType union(HType other, Compiler compiler);
 }
 
 /** Used to represent [HType.UNKNOWN] and [HType.CONFLICTING]. */
@@ -216,8 +216,8 @@
   HType intersection(HType other, Compiler compiler) {
     if (other.isConflicting()) return HType.CONFLICTING;
     if (other.isUnknown()) return HType.BOOLEAN_OR_NULL;
-    if (other.isBooleanOrNull()) return HType.BOOLEAN_OR_NULL;
     if (other.isBoolean()) return HType.BOOLEAN;
+    if (other.isBooleanOrNull()) return HType.BOOLEAN_OR_NULL;
     if (other.canBeNull()) return HType.NULL;
     return HType.CONFLICTING;
   }
@@ -226,6 +226,7 @@
 class HBooleanType extends HPrimitiveType {
   const HBooleanType();
   bool isBoolean() => true;
+  bool isBooleanOrNull() => true;
   String toString() => "boolean";
 
   DartType computeType(Compiler compiler) {
@@ -285,6 +286,7 @@
 class HNumberType extends HPrimitiveType {
   const HNumberType();
   bool isNumber() => true;
+  bool isNumberOrNull() => true;
   String toString() => "number";
 
   DartType computeType(Compiler compiler) {
@@ -334,8 +336,8 @@
   HType intersection(HType other, Compiler compiler) {
     if (other.isConflicting()) return HType.CONFLICTING;
     if (other.isUnknown()) return HType.INTEGER_OR_NULL;
-    if (other.isIntegerOrNull()) return HType.INTEGER_OR_NULL;
     if (other.isInteger()) return HType.INTEGER;
+    if (other.isIntegerOrNull()) return HType.INTEGER_OR_NULL;
     if (other.isDouble()) return HType.CONFLICTING;
     if (other.isDoubleOrNull()) return HType.NULL;
     if (other.isNumber()) return HType.INTEGER;
@@ -348,6 +350,7 @@
 class HIntegerType extends HNumberType {
   const HIntegerType();
   bool isInteger() => true;
+  bool isIntegerOrNull() => true;
   String toString() => "integer";
 
   DartType computeType(Compiler compiler) {
@@ -401,8 +404,8 @@
   HType intersection(HType other, Compiler compiler) {
     if (other.isConflicting()) return HType.CONFLICTING;
     if (other.isUnknown()) return HType.DOUBLE_OR_NULL;
-    if (other.isIntegerOrNull()) return HType.NULL;
     if (other.isInteger()) return HType.CONFLICTING;
+    if (other.isIntegerOrNull()) return HType.NULL;
     if (other.isDouble()) return HType.DOUBLE;
     if (other.isDoubleOrNull()) return HType.DOUBLE_OR_NULL;
     if (other.isNumber()) return HType.DOUBLE;
@@ -415,6 +418,7 @@
 class HDoubleType extends HNumberType {
   const HDoubleType();
   bool isDouble() => true;
+  bool isDoubleOrNull() => true;
   String toString() => "double";
 
   DartType computeType(Compiler compiler) {
@@ -529,6 +533,7 @@
 class HStringType extends HIndexablePrimitiveType {
   const HStringType();
   bool isString() => true;
+  bool isStringOrNull() => true;
   String toString() => "String";
 
   DartType computeType(Compiler compiler) {
diff --git a/lib/compiler/implementation/ssa/types_propagation.dart b/sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/types_propagation.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/types_propagation.dart
diff --git a/lib/compiler/implementation/ssa/validate.dart b/sdk/lib/_internal/compiler/implementation/ssa/validate.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/validate.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/validate.dart
diff --git a/lib/compiler/implementation/ssa/value_range_analyzer.dart b/sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/value_range_analyzer.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/value_range_analyzer.dart
diff --git a/lib/compiler/implementation/ssa/value_set.dart b/sdk/lib/_internal/compiler/implementation/ssa/value_set.dart
similarity index 100%
rename from lib/compiler/implementation/ssa/value_set.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/value_set.dart
diff --git a/lib/compiler/implementation/ssa/variable_allocator.dart b/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
similarity index 93%
rename from lib/compiler/implementation/ssa/variable_allocator.dart
rename to sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
index 50f308c..b416c3f 100644
--- a/lib/compiler/implementation/ssa/variable_allocator.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/variable_allocator.dart
@@ -287,7 +287,9 @@
 
     // If the block is a loop header, we can remove the loop marker,
     // because it will just recompute the loop phis.
-    if (block.isLoopHeader()) {
+    // We also check if this loop header has any back edges. If not,
+    // we know there is no loop marker for it.
+    if (block.isLoopHeader() && block.predecessors.length > 1) {
       updateLoopMarker(block);
     }
   }
@@ -370,6 +372,9 @@
 class VariableNames {
   final Map<HInstruction, String> ownName;
   final Map<HBasicBlock, CopyHandler> copyHandlers;
+
+  // Used to control heuristic that determines how local variables are declared.
+  final Set<String> allUsedNames;
   /**
    * Name that is used as a temporary to break cycles in
    * parallel copies. We make sure this name is not being used
@@ -382,12 +387,20 @@
    */
   final String stateName;
 
+  String getSwapTemp() {
+    allUsedNames.add(swapTemp);
+    return swapTemp;
+  }
+
   VariableNames(Map<Element, String> parameterNames)
     : ownName = new Map<HInstruction, String>(),
       copyHandlers = new Map<HBasicBlock, CopyHandler>(),
+      allUsedNames = new Set<String>(),
       swapTemp = computeFreshWithPrefix("t", parameterNames),
       stateName = computeFreshWithPrefix("state", parameterNames);
 
+  int get numberOfVariables => allUsedNames.length;
+
   /** Returns a fresh variable with the given prefix. */
   static String computeFreshWithPrefix(String prefix,
                                        Map<Element, String> parameterNames) {
@@ -406,6 +419,8 @@
     return copyHandlers[block];
   }
 
+  void addNameUsed(String name) => allUsedNames.add(name);
+
   bool hasName(HInstruction instruction) => ownName.containsKey(instruction);
 
   void addCopy(HBasicBlock block, HInstruction source, HPhi destination) {
@@ -434,10 +449,14 @@
   VariableNamer(LiveEnvironment environment, this.names, this.parameterNames)
     : usedNames = new Set<String>(),
       freeTemporaryNames = new List<String>() {
-    // [VariableNames.swapTemp] and [VariableNames.stateName] are being used
-    // throughout the function. Therefore we make sure no one uses it at any
-    // time.
+    // [VariableNames.swapTemp] is used when there is a cycle in a copy handler.
+    // Therefore we make sure no one uses it.
     usedNames.add(names.swapTemp);
+    // [VariableNames.stateName] is being used throughout a bailout function.
+    // Whenever a bailout-target is reached we set the state-variable to 0. We
+    // must therefore not have any local variable that could clash with the
+    // state variable.
+    // Therefore we make sure no one uses it at any time.
     usedNames.add(names.stateName);
 
     // All liveIns instructions must have a name at this point, so we
@@ -446,6 +465,7 @@
       String name = names.getName(instruction);
       if (name != null) {
         usedNames.add(name);
+        names.addNameUsed(name);
       }
     });
   }
@@ -489,16 +509,15 @@
         name = names.ownName[temp];
       } while (name == null && temp is HCheck);
       if (name != null) return addAllocatedName(instruction, name);
-    } else if (instruction is HParameterValue) {
-      HParameterValue parameter = instruction;
-      name = parameterNames[parameter.sourceElement];
-      if (name == null) {
-        name = allocateWithHint(parameter.sourceElement.name.slowToString());
-      }
-      return addAllocatedName(instruction, name);
     }
 
-    if (instruction.sourceElement != null) {
+    // The dom/html libraries have inline JS code that reference	
+    // parameter names directly. Long-term such code will be rejected.
+    // Now, just don't mangle the parameter name.
+    if (instruction is HParameterValue
+        && instruction.sourceElement.enclosingElement.isNative()) {
+      name = instruction.sourceElement.name.slowToString();
+    } else if (instruction.sourceElement != null) {
       name = allocateWithHint(instruction.sourceElement.name.slowToString());
     } else {
       // We could not find an element for the instruction. If the
@@ -516,7 +535,11 @@
   }
 
   String addAllocatedName(HInstruction instruction, String name) {
+    if (instruction is HParameterValue) {
+      parameterNames[instruction.sourceElement] = name;
+    }
     usedNames.add(name);
+    names.addNameUsed(name);
     names.ownName[instruction] = name;
     return name;
   }
@@ -592,11 +615,11 @@
    * have no users or that are generated at use site does not need a name.
    */
   bool needsName(HInstruction instruction) {
-    if (instruction.usedBy.isEmpty) return false;
     // TODO(ngeoffray): locals/parameters are being generated at use site,
     // but we need a name for them. We should probably not make
     // them generate at use site to make things simpler.
     if (instruction is HLocalValue && instruction is !HThis) return true;
+    if (instruction.usedBy.isEmpty) return false;
     if (generateAtUseSite.contains(instruction)) return false;
     // A [HCheck] instruction that has control flow needs a name only if its
     // checked input needs a name (e.g. a check [HConstant] does not
diff --git a/lib/compiler/implementation/string_validator.dart b/sdk/lib/_internal/compiler/implementation/string_validator.dart
similarity index 100%
rename from lib/compiler/implementation/string_validator.dart
rename to sdk/lib/_internal/compiler/implementation/string_validator.dart
diff --git a/lib/compiler/implementation/tools/find_file_to_parse.sh b/sdk/lib/_internal/compiler/implementation/tools/find_file_to_parse.sh
similarity index 100%
rename from lib/compiler/implementation/tools/find_file_to_parse.sh
rename to sdk/lib/_internal/compiler/implementation/tools/find_file_to_parse.sh
diff --git a/lib/compiler/implementation/tools/mini_parser.dart b/sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart
similarity index 93%
rename from lib/compiler/implementation/tools/mini_parser.dart
rename to sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart
index 356e6f0..ea56771 100644
--- a/lib/compiler/implementation/tools/mini_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart
@@ -2,26 +2,26 @@
 // 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('parser');
+library parser;
 
-#import('dart:io');
-#import('dart:scalarlist');
+import 'dart:io';
+import 'dart:scalarlist';
 
-#import('../../../utf/utf.dart');
+import 'dart:utf';
 
-#import('../elements/elements.dart');
-#import('../scanner/scanner_implementation.dart');
-#import('../scanner/scannerlib.dart');
-#import('../tree/tree.dart');
-#import('../util/characters.dart');
-#import('../source_file.dart');
-#import('../ssa/ssa.dart');
+import '../elements/elements.dart';
+import '../scanner/scanner_implementation.dart';
+import '../scanner/scannerlib.dart';
+import '../tree/tree.dart';
+import '../util/characters.dart';
+import '../source_file.dart';
+import '../ssa/ssa.dart';
 
-#import('../../compiler.dart', prefix: 'api');
+import '../../compiler.dart' as api;
 
-#source('../diagnostic_listener.dart');
-#source('../scanner/byte_array_scanner.dart');
-#source('../scanner/byte_strings.dart');
+part '../diagnostic_listener.dart';
+part '../scanner/byte_array_scanner.dart';
+part '../scanner/byte_strings.dart';
 
 int charCount = 0;
 Stopwatch stopwatch;
diff --git a/lib/compiler/implementation/tree/dartstring.dart b/sdk/lib/_internal/compiler/implementation/tree/dartstring.dart
similarity index 97%
rename from lib/compiler/implementation/tree/dartstring.dart
rename to sdk/lib/_internal/compiler/implementation/tree/dartstring.dart
index ac50e27..08ed05a 100644
--- a/lib/compiler/implementation/tree/dartstring.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/dartstring.dart
@@ -26,10 +26,10 @@
     return new ConsDartString(first, second);
   }
   const DartString();
-  abstract int get length;
+  int get length;
   bool get isEmpty => length == 0;
-  abstract Iterator<int> iterator();
-  abstract String slowToString();
+  Iterator<int> iterator();
+  String slowToString();
 
   bool operator ==(var other) {
     if (other is !DartString) return false;
@@ -43,7 +43,7 @@
     return true;
   }
   String toString() => "DartString#${length}:${slowToString()}";
-  abstract SourceString get source;
+  SourceString get source;
 }
 
 
@@ -67,7 +67,7 @@
   final SourceString source;
   final int length;
   SourceBasedDartString(this.source, this.length);
-  abstract Iterator<int> iterator();
+  Iterator<int> iterator();
 }
 
 /**
diff --git a/lib/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
similarity index 98%
rename from lib/compiler/implementation/tree/nodes.dart
rename to sdk/lib/_internal/compiler/implementation/tree/nodes.dart
index 9d0be9eb..99d3a88 100644
--- a/lib/compiler/implementation/tree/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
@@ -7,7 +7,7 @@
 abstract class Visitor<R> {
   const Visitor();
 
-  abstract R visitNode(Node node);
+  R visitNode(Node node);
 
   R visitBlock(Block node) => visitStatement(node);
   R visitBreakStatement(BreakStatement node) => visitGotoStatement(node);
@@ -110,9 +110,9 @@
 
   Node() : hashCode = ++_HASH_COUNTER;
 
-  abstract accept(Visitor visitor);
+  accept(Visitor visitor);
 
-  abstract visitChildren(Visitor visitor);
+  visitChildren(Visitor visitor);
 
   /**
    * Returns this node unparsed to Dart source string.
@@ -128,9 +128,9 @@
 
   String getObjectDescription() => super.toString();
 
-  abstract Token getBeginToken();
+  Token getBeginToken();
 
-  abstract Token getEndToken();
+  Token getEndToken();
 
   Block asBlock() => null;
   BreakStatement asBreakStatement() => null;
@@ -241,7 +241,7 @@
   Expression asExpression() => this;
 
   // TODO(ahe): make class abstract instead of adding an abstract method.
-  abstract accept(Visitor visitor);
+  accept(Visitor visitor);
 }
 
 abstract class Statement extends Node {
@@ -250,7 +250,7 @@
   Statement asStatement() => this;
 
   // TODO(ahe): make class abstract instead of adding an abstract method.
-  abstract accept(Visitor visitor);
+  accept(Visitor visitor);
 
   bool isValidBreakTarget() => true;
 }
@@ -665,7 +665,7 @@
 
   Literal(Token this.token, DecodeErrorHandler this.handler);
 
-  abstract T get value;
+  T get value;
 
   visitChildren(Visitor visitor) {}
 
@@ -799,8 +799,8 @@
   * Superclass for classes representing string literals.
   */
 abstract class StringNode extends Expression {
-  abstract DartString get dartString;
-  abstract bool get isInterpolation;
+  DartString get dartString;
+  bool get isInterpolation;
 
   StringNode asStringNode() => this;
 }
@@ -1032,7 +1032,7 @@
 }
 
 abstract class Loop extends Statement {
-  abstract Expression get condition;
+  Expression get condition;
   final Statement body;
 
   Loop(this.body);
@@ -1502,7 +1502,7 @@
   Token getEndToken() => semicolonToken;
 
   // TODO(ahe): make class abstract instead of adding an abstract method.
-  abstract accept(Visitor visitor);
+  accept(Visitor visitor);
 }
 
 class BreakStatement extends GotoStatement {
diff --git a/lib/compiler/implementation/tree/prettyprint.dart b/sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart
similarity index 100%
rename from lib/compiler/implementation/tree/prettyprint.dart
rename to sdk/lib/_internal/compiler/implementation/tree/prettyprint.dart
diff --git a/lib/compiler/implementation/tree/tree.dart b/sdk/lib/_internal/compiler/implementation/tree/tree.dart
similarity index 100%
rename from lib/compiler/implementation/tree/tree.dart
rename to sdk/lib/_internal/compiler/implementation/tree/tree.dart
diff --git a/lib/compiler/implementation/tree/unparser.dart b/sdk/lib/_internal/compiler/implementation/tree/unparser.dart
similarity index 100%
rename from lib/compiler/implementation/tree/unparser.dart
rename to sdk/lib/_internal/compiler/implementation/tree/unparser.dart
diff --git a/lib/compiler/implementation/tree/visitors.dart b/sdk/lib/_internal/compiler/implementation/tree/visitors.dart
similarity index 100%
rename from lib/compiler/implementation/tree/visitors.dart
rename to sdk/lib/_internal/compiler/implementation/tree/visitors.dart
diff --git a/lib/compiler/implementation/tree_validator.dart b/sdk/lib/_internal/compiler/implementation/tree_validator.dart
similarity index 100%
rename from lib/compiler/implementation/tree_validator.dart
rename to sdk/lib/_internal/compiler/implementation/tree_validator.dart
diff --git a/lib/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart
similarity index 98%
rename from lib/compiler/implementation/typechecker.dart
rename to sdk/lib/_internal/compiler/implementation/typechecker.dart
index d9c27ff..d4889b6 100644
--- a/lib/compiler/implementation/typechecker.dart
+++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart
@@ -42,9 +42,9 @@
 }
 
 abstract class DartType {
-  abstract SourceString get name;
+  SourceString get name;
 
-  abstract TypeKind get kind;
+  TypeKind get kind;
 
   const DartType();
 
@@ -57,7 +57,7 @@
    *
    * Invariant: [element] must be a declaration element.
    */
-  abstract Element get element;
+  Element get element;
 
   /**
    * Returns the unaliased type of this type.
@@ -69,9 +69,9 @@
    * function type [: (B) -> A :] and the unaliased type of
    * [: Func<int,String> :] is the function type [: (String) -> int :].
    */
-  abstract DartType unalias(Compiler compiler);
+  DartType unalias(Compiler compiler);
 
-  abstract bool operator ==(other);
+  bool operator ==(other);
 
   DartType asRaw() => this;
 }
@@ -796,7 +796,7 @@
     if (node.isRedirectingFactoryBody) {
       // TODO(lrn): Typecheck the body. It must refer to the constructor
       // of a subtype.
-      return elements.getType(node);
+      return StatementType.RETURNING;
     }
 
     final expression = node.expression;
diff --git a/lib/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
similarity index 98%
rename from lib/compiler/implementation/types/concrete_types_inferrer.dart
rename to sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index dd66e61..ec025ea 100644
--- a/lib/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -92,15 +92,15 @@
 
   factory ConcreteType.unknown() => const UnknownConcreteType();
 
-  abstract ConcreteType union(ConcreteType other);
-  abstract bool isUnkown();
-  abstract Set<BaseType> get baseTypes;
+  ConcreteType union(ConcreteType other);
+  bool isUnkown();
+  Set<BaseType> get baseTypes;
 
   /**
    * Returns the unique element of [: this :] if [: this :] is a singleton,
    * null otherwise.
    */
-  abstract ClassElement getUniqueType();
+  ClassElement getUniqueType();
 }
 
 /**
@@ -261,6 +261,7 @@
   final BaseType listBaseType;
   final BaseType mapBaseType;
   final BaseType objectBaseType;
+  final BaseType typeBaseType;
 
   BaseTypes(Compiler compiler) :
     intBaseType = new ClassBaseType(compiler.intClass),
@@ -270,7 +271,8 @@
     stringBaseType = new ClassBaseType(compiler.stringClass),
     listBaseType = new ClassBaseType(compiler.listClass),
     mapBaseType = new ClassBaseType(compiler.mapClass),
-    objectBaseType = new ClassBaseType(compiler.objectClass);
+    objectBaseType = new ClassBaseType(compiler.objectClass),
+    typeBaseType = new ClassBaseType(compiler.typeClass);
 }
 
 /**
@@ -1390,4 +1392,8 @@
   void internalError(String reason, {Node node}) {
     inferrer.fail(node, reason);
   }
+
+  ConcreteType visitTypeReferenceSend(Send) {
+    return new ConcreteType.singleton(inferrer.baseTypes.typeBaseType);
+  }
 }
diff --git a/lib/compiler/implementation/types/types.dart b/sdk/lib/_internal/compiler/implementation/types/types.dart
similarity index 100%
rename from lib/compiler/implementation/types/types.dart
rename to sdk/lib/_internal/compiler/implementation/types/types.dart
diff --git a/lib/compiler/implementation/universe/function_set.dart b/sdk/lib/_internal/compiler/implementation/universe/function_set.dart
similarity index 100%
rename from lib/compiler/implementation/universe/function_set.dart
rename to sdk/lib/_internal/compiler/implementation/universe/function_set.dart
diff --git a/lib/compiler/implementation/universe/partial_type_tree.dart b/sdk/lib/_internal/compiler/implementation/universe/partial_type_tree.dart
similarity index 95%
rename from lib/compiler/implementation/universe/partial_type_tree.dart
rename to sdk/lib/_internal/compiler/implementation/universe/partial_type_tree.dart
index cbe1be0..a3d74bb 100644
--- a/lib/compiler/implementation/universe/partial_type_tree.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/partial_type_tree.dart
@@ -26,7 +26,7 @@
 
   PartialTypeTree(this.compiler);
 
-  abstract PartialTypeTreeNode newSpecializedNode(ClassElement type);
+  PartialTypeTreeNode newSpecializedNode(ClassElement type);
 
   PartialTypeTreeNode newNode(ClassElement type) {
     PartialTypeTreeNode node = newSpecializedNode(type);
@@ -62,8 +62,11 @@
 
   // TODO(kasperl): Move this to the Selector class?
   ClassElement selectorType(Selector selector) {
+    // TODO(ngeoffray): Should the tree be specialized with DartType?
     DartType type = selector.receiverType;
-    return (type != null) ? type.element : compiler.objectClass;
+    if (type == null) return compiler.objectClass;
+    if (type.element.isTypedef()) return compiler.functionClass;
+    return type.element;
   }
 
   /**
diff --git a/lib/compiler/implementation/universe/selector_map.dart b/sdk/lib/_internal/compiler/implementation/universe/selector_map.dart
similarity index 100%
rename from lib/compiler/implementation/universe/selector_map.dart
rename to sdk/lib/_internal/compiler/implementation/universe/selector_map.dart
diff --git a/lib/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
similarity index 97%
rename from lib/compiler/implementation/universe/universe.dart
rename to sdk/lib/_internal/compiler/implementation/universe/universe.dart
index d4a01a5..596a85a 100644
--- a/lib/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -422,7 +422,12 @@
       return appliesUntyped(element, compiler);
     }
 
-    ClassElement self = receiverType.element;
+    Element self = receiverType.element;
+    if (self.isTypedef()) {
+      // A typedef is a function type that doesn't have any
+      // user-defined members.
+      return false;
+    }
 
     if (other.implementsInterface(self)
         || other.isSubclassOf(self)
@@ -430,7 +435,9 @@
       return appliesUntyped(element, compiler);
     }
 
-    if (!self.isInterface() && self.isSubclassOf(other)) {
+    // If [self] is a subclass of [other], it inherits the
+    // implementation of [element].
+    if (self.isSubclassOf(other)) {
       // Resolve an invocation of [element.name] on [self]. If it
       // is found, this selector is a candidate.
       return hasElementIn(self, element) && appliesUntyped(element, compiler);
diff --git a/lib/compiler/implementation/util/characters.dart b/sdk/lib/_internal/compiler/implementation/util/characters.dart
similarity index 100%
rename from lib/compiler/implementation/util/characters.dart
rename to sdk/lib/_internal/compiler/implementation/util/characters.dart
diff --git a/lib/compiler/implementation/util/link.dart b/sdk/lib/_internal/compiler/implementation/util/link.dart
similarity index 100%
rename from lib/compiler/implementation/util/link.dart
rename to sdk/lib/_internal/compiler/implementation/util/link.dart
diff --git a/lib/compiler/implementation/util/link_implementation.dart b/sdk/lib/_internal/compiler/implementation/util/link_implementation.dart
similarity index 100%
rename from lib/compiler/implementation/util/link_implementation.dart
rename to sdk/lib/_internal/compiler/implementation/util/link_implementation.dart
diff --git a/lib/compiler/implementation/util/uri_extras.dart b/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
similarity index 96%
rename from lib/compiler/implementation/util/uri_extras.dart
rename to sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
index aa2f93a..fed5f15 100644
--- a/lib/compiler/implementation/util/uri_extras.dart
+++ b/sdk/lib/_internal/compiler/implementation/util/uri_extras.dart
@@ -2,10 +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.
 
-#library('uri_extras');
+library uri_extras;
 
-#import('dart:math');
-#import('dart:uri');
+import 'dart:math';
+import 'dart:uri';
 
 String relativize(Uri base, Uri uri, bool isWindows) {
   if (!base.path.startsWith('/')) {
diff --git a/lib/compiler/implementation/util/util.dart b/sdk/lib/_internal/compiler/implementation/util/util.dart
similarity index 100%
rename from lib/compiler/implementation/util/util.dart
rename to sdk/lib/_internal/compiler/implementation/util/util.dart
diff --git a/lib/compiler/implementation/util/util_implementation.dart b/sdk/lib/_internal/compiler/implementation/util/util_implementation.dart
similarity index 100%
rename from lib/compiler/implementation/util/util_implementation.dart
rename to sdk/lib/_internal/compiler/implementation/util/util_implementation.dart
diff --git a/lib/compiler/implementation/warnings.dart b/sdk/lib/_internal/compiler/implementation/warnings.dart
similarity index 100%
rename from lib/compiler/implementation/warnings.dart
rename to sdk/lib/_internal/compiler/implementation/warnings.dart
diff --git a/lib/compiler/implementation/world.dart b/sdk/lib/_internal/compiler/implementation/world.dart
similarity index 100%
rename from lib/compiler/implementation/world.dart
rename to sdk/lib/_internal/compiler/implementation/world.dart
diff --git a/lib/compiler/samples/leap/index.html b/sdk/lib/_internal/compiler/samples/leap/index.html
similarity index 100%
rename from lib/compiler/samples/leap/index.html
rename to sdk/lib/_internal/compiler/samples/leap/index.html
diff --git a/lib/compiler/samples/leap/isolate.html b/sdk/lib/_internal/compiler/samples/leap/isolate.html
similarity index 100%
rename from lib/compiler/samples/leap/isolate.html
rename to sdk/lib/_internal/compiler/samples/leap/isolate.html
diff --git a/lib/compiler/samples/leap/leap.css b/sdk/lib/_internal/compiler/samples/leap/leap.css
similarity index 100%
rename from lib/compiler/samples/leap/leap.css
rename to sdk/lib/_internal/compiler/samples/leap/leap.css
diff --git a/lib/compiler/samples/leap/leap.dart b/sdk/lib/_internal/compiler/samples/leap/leap.dart
similarity index 100%
rename from lib/compiler/samples/leap/leap.dart
rename to sdk/lib/_internal/compiler/samples/leap/leap.dart
diff --git a/lib/compiler/samples/leap/leap_leg.dart b/sdk/lib/_internal/compiler/samples/leap/leap_leg.dart
similarity index 100%
rename from lib/compiler/samples/leap/leap_leg.dart
rename to sdk/lib/_internal/compiler/samples/leap/leap_leg.dart
diff --git a/lib/compiler/samples/leap/leap_script.dart b/sdk/lib/_internal/compiler/samples/leap/leap_script.dart
similarity index 100%
rename from lib/compiler/samples/leap/leap_script.dart
rename to sdk/lib/_internal/compiler/samples/leap/leap_script.dart
diff --git a/lib/compiler/samples/leap/leap_server.dart b/sdk/lib/_internal/compiler/samples/leap/leap_server.dart
similarity index 96%
rename from lib/compiler/samples/leap/leap_server.dart
rename to sdk/lib/_internal/compiler/samples/leap/leap_server.dart
index 357e9fa..95fad72 100644
--- a/lib/compiler/samples/leap/leap_server.dart
+++ b/sdk/lib/_internal/compiler/samples/leap/leap_server.dart
@@ -39,7 +39,7 @@
     String path = request.path;
     if (path == '/') return redirect('/$landingPage');
     if (path == '/favicon.ico') {
-      path = '/pkg/dartdoc/static/favicon.ico';
+      path = '/lib/_internal/dartdoc/static/favicon.ico';
     }
     if (path.contains('..') || path.contains('%')) return notFound();
     var f = new File("./$path");
diff --git a/lib/compiler/samples/leap/request_cache.dart b/sdk/lib/_internal/compiler/samples/leap/request_cache.dart
similarity index 100%
rename from lib/compiler/samples/leap/request_cache.dart
rename to sdk/lib/_internal/compiler/samples/leap/request_cache.dart
diff --git a/pkg/dartdoc/.gitignore b/sdk/lib/_internal/dartdoc/.gitignore
similarity index 100%
rename from pkg/dartdoc/.gitignore
rename to sdk/lib/_internal/dartdoc/.gitignore
diff --git a/pkg/dartdoc/README.txt b/sdk/lib/_internal/dartdoc/README.txt
similarity index 100%
rename from pkg/dartdoc/README.txt
rename to sdk/lib/_internal/dartdoc/README.txt
diff --git a/pkg/dartdoc/bin/dartdoc.dart b/sdk/lib/_internal/dartdoc/bin/dartdoc.dart
similarity index 95%
rename from pkg/dartdoc/bin/dartdoc.dart
rename to sdk/lib/_internal/dartdoc/bin/dartdoc.dart
index 25fc655..1b45e3c 100755
--- a/pkg/dartdoc/bin/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/bin/dartdoc.dart
@@ -20,10 +20,10 @@
 
 // TODO(rnystrom): Use "package:" URL (#4968).
 import '../lib/dartdoc.dart';
-import '../../args/lib/args.dart';
+import '../../../../../pkg/args/lib/args.dart';
 
 /**
- * Run this from the `pkg/dartdoc` directory.
+ * Run this from the `lib/_internal/dartdoc` directory.
  */
 main() {
   // Need this because ArgParser.getUsage doesn't show command invocation.
@@ -35,8 +35,8 @@
 
   final argParser = new ArgParser();
 
-  final Path libPath = scriptDir.append('../../../');
-  Path pkgPath = scriptDir.append('../../../pkg/');
+  final Path libPath = scriptDir.append('../../../../');
+  Path pkgPath = scriptDir.append('../../../../pkg/');
 
   argParser.addFlag('no-code',
       help: 'Do not include source code in the documentation.',
@@ -166,7 +166,7 @@
         }
       });
 
-  dartdoc.dartdocPath = libPath.append('pkg/dartdoc');
+  dartdoc.dartdocPath = libPath.append('lib/_internal/dartdoc');
 
   if (args.isEmpty) {
     print('No arguments provided.');
diff --git a/pkg/dartdoc/lib/classify.dart b/sdk/lib/_internal/dartdoc/lib/classify.dart
similarity index 98%
rename from pkg/dartdoc/lib/classify.dart
rename to sdk/lib/_internal/dartdoc/lib/classify.dart
index 0532a1e..de7697d 100644
--- a/pkg/dartdoc/lib/classify.dart
+++ b/sdk/lib/_internal/dartdoc/lib/classify.dart
@@ -4,7 +4,7 @@
 
 library classify;
 
-import '../../../lib/compiler/implementation/scanner/scannerlib.dart';
+import '../../compiler/implementation/scanner/scannerlib.dart';
 // TODO(rnystrom): Use "package:" URL (#4968).
 import 'markdown.dart' as md;
 
diff --git a/pkg/dartdoc/lib/dartdoc.dart b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
similarity index 98%
rename from pkg/dartdoc/lib/dartdoc.dart
rename to sdk/lib/_internal/dartdoc/lib/dartdoc.dart
index b4bdecb..fb116a1 100644
--- a/pkg/dartdoc/lib/dartdoc.dart
+++ b/sdk/lib/_internal/dartdoc/lib/dartdoc.dart
@@ -21,14 +21,13 @@
 import 'dart:uri';
 import 'dart:json';
 
-// TODO(rnystrom): Use "package:" URL (#4968).
-import 'mirrors.dart';
-import 'mirrors_util.dart';
-import 'src/mirrors/dart2js_mirror.dart' as dart2js;
+import '../../compiler/implementation/mirrors/mirrors.dart';
+import '../../compiler/implementation/mirrors/mirrors_util.dart';
+import '../../compiler/implementation/mirrors/dart2js_mirror.dart' as dart2js;
 import 'classify.dart';
 import 'markdown.dart' as md;
-import '../../../lib/compiler/implementation/scanner/scannerlib.dart' as dart2js;
-import '../../../lib/_internal/libraries.dart';
+import '../../compiler/implementation/scanner/scannerlib.dart' as dart2js;
+import '../../libraries.dart';
 
 // TODO(rnystrom): Use "package:" URL (#4968).
 part 'src/dartdoc/comment_map.dart';
@@ -75,7 +74,7 @@
 void cleanOutputDirectory(Path path) {
   final outputDir = new Directory.fromPath(path);
   if (outputDir.existsSync()) {
-    outputDir.deleteRecursivelySync();
+    outputDir.deleteSync(recursive: true);
   }
 
   try {
@@ -128,7 +127,7 @@
 Future<bool> compileScript(int mode, Path outputDir, Path libPath) {
   var clientScript = (mode == MODE_STATIC) ? 'static' : 'live-nav';
   var dartPath = libPath.append(
-      'pkg/dartdoc/lib/src/client/client-$clientScript.dart');
+      'lib/_internal/dartdoc/lib/src/client/client-$clientScript.dart');
   var jsPath = outputDir.append('client-$clientScript.js');
 
   var completer = new Completer<bool>();
@@ -564,7 +563,7 @@
   void cleanup() {
     final dir = new Directory.fromPath(tmpPath);
     if (dir.existsSync()) {
-      dir.deleteRecursivelySync();
+      dir.deleteSync(recursive: true);
     }
   }
 
@@ -625,7 +624,7 @@
       if (!showPrivate && member.isPrivate) continue;
 
       var memberInfo = {};
-      if (member.isField) {
+      if (member.isVariable) {
         memberInfo[KIND] = FIELD;
       } else {
         MethodMirror method = member;
@@ -895,6 +894,9 @@
     listTypes(types, header) {
       if (types == null) return;
 
+      // Filter out injected types. (JavaScriptIndexingBehavior)
+      types = new List.from(types.filter((t) => t.library != null));
+
       var publicTypes;
       if (showPrivate) {
         publicTypes = types;
@@ -1068,7 +1070,7 @@
           }
           if (!inherit) return;
 
-          if (member.isField) {
+          if (member.isVariable) {
             // Fields override both getters and setters.
             memberMap.putIfAbsent(member.simpleName, () => member);
             memberMap.putIfAbsent('${member.simpleName}=', () => member);
@@ -1463,7 +1465,7 @@
   /** Get the doc comment associated with the given library. */
   DocComment getLibraryComment(LibraryMirror library) {
     // Look for a comment for the entire library.
-    final comment = _comments.findLibrary(library.location.source);
+    final comment = _comments.findLibrary(library.location);
     if (comment == null) return null;
     return createDocComment(comment);
   }
@@ -1538,7 +1540,9 @@
     if (type is LibraryMirror) {
       return '${sanitize(type.simpleName)}.html';
     }
-    assert (type is TypeMirror);
+    if (type.library == null) {
+      return '';
+    }
     // Always get the generic type to strip off any type parameters or
     // arguments. If the type isn't generic, genericType returns `this`, so it
     // works for non-generic types too.
@@ -1698,7 +1702,7 @@
    * Remove leading indentation to line up with first line.
    */
   unindentCode(SourceLocation span) {
-    final column = getLocationColumn(span);
+    final column = span.column;
     final lines = span.text.split('\n');
     // TODO(rnystrom): Dirty hack.
     for (var i = 1; i < lines.length; i++) {
diff --git a/pkg/dartdoc/lib/markdown.dart b/sdk/lib/_internal/dartdoc/lib/markdown.dart
similarity index 100%
rename from pkg/dartdoc/lib/markdown.dart
rename to sdk/lib/_internal/dartdoc/lib/markdown.dart
diff --git a/pkg/dartdoc/lib/src/client/client-live-nav.dart b/sdk/lib/_internal/dartdoc/lib/src/client/client-live-nav.dart
similarity index 97%
rename from pkg/dartdoc/lib/src/client/client-live-nav.dart
rename to sdk/lib/_internal/dartdoc/lib/src/client/client-live-nav.dart
index e1e8bfc..4405bab 100644
--- a/pkg/dartdoc/lib/src/client/client-live-nav.dart
+++ b/sdk/lib/_internal/dartdoc/lib/src/client/client-live-nav.dart
@@ -7,7 +7,7 @@
 
 import 'dart:html';
 import 'dart:json';
-import '../../../../../lib/compiler/implementation/source_file.dart';
+import '../../../../compiler/implementation/source_file.dart';
 // TODO(rnystrom): Use "package:" URL (#4968).
 import '../../classify.dart';
 import '../../markdown.dart' as md;
diff --git a/pkg/dartdoc/lib/src/client/client-shared.dart b/sdk/lib/_internal/dartdoc/lib/src/client/client-shared.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/client/client-shared.dart
rename to sdk/lib/_internal/dartdoc/lib/src/client/client-shared.dart
diff --git a/pkg/dartdoc/lib/src/client/client-static.dart b/sdk/lib/_internal/dartdoc/lib/src/client/client-static.dart
similarity index 90%
rename from pkg/dartdoc/lib/src/client/client-static.dart
rename to sdk/lib/_internal/dartdoc/lib/src/client/client-static.dart
index 5bca3b2..ee47dc6 100644
--- a/pkg/dartdoc/lib/src/client/client-static.dart
+++ b/sdk/lib/_internal/dartdoc/lib/src/client/client-static.dart
@@ -7,7 +7,7 @@
 
 import 'dart:html';
 import 'dart:json';
-import '../../../../../lib/compiler/implementation/source_file.dart';
+import '../../../../compiler/implementation/source_file.dart';
 // TODO(rnystrom): Use "package:" URL (#4968).
 import '../../classify.dart';
 
diff --git a/pkg/dartdoc/lib/src/client/dropdown.dart b/sdk/lib/_internal/dartdoc/lib/src/client/dropdown.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/client/dropdown.dart
rename to sdk/lib/_internal/dartdoc/lib/src/client/dropdown.dart
diff --git a/pkg/dartdoc/lib/src/client/search.dart b/sdk/lib/_internal/dartdoc/lib/src/client/search.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/client/search.dart
rename to sdk/lib/_internal/dartdoc/lib/src/client/search.dart
diff --git a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
similarity index 83%
rename from pkg/dartdoc/lib/src/dartdoc/comment_map.dart
rename to sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
index 25240d4..77b7e07 100644
--- a/pkg/dartdoc/lib/src/dartdoc/comment_map.dart
+++ b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/comment_map.dart
@@ -18,7 +18,7 @@
    */
   Map<String, Map<int, String>> _comments;
 
-  /** Doc comments before #library() directives. */
+  /** Doc comments before `library` directives. */
   Map<String, String> _libraryComments;
 
   CommentMap()
@@ -33,34 +33,34 @@
   String find(SourceLocation span) {
     if (span == null) return null;
 
-    _ensureFileParsed(span.source);
-    String comment = _comments[span.source.uri.toString()][span.start];
+    _ensureFileParsed(span);
+    String comment = _comments[span.sourceUri.toString()][span.offset];
     assert(comment == null || !comment.trim().isEmpty);
     return comment;
   }
 
   /**
-   * Finds the doc comment associated with the `#library` directive for the
+   * Finds the doc comment associated with the `library` directive for the
    * given file.
    *
    * If a comment is returned, it is guaranteed to be non-empty.
    */
-  String findLibrary(Source source) {
+  String findLibrary(SourceLocation source) {
     _ensureFileParsed(source);
-    String comment = _libraryComments[source.uri.toString()];
+    String comment = _libraryComments[source.sourceUri.toString()];
     assert(comment == null || !comment.trim().isEmpty);
     return comment;
   }
 
-  _ensureFileParsed(Source source) {
-    _comments.putIfAbsent(source.uri.toString(), () =>
+  _ensureFileParsed(SourceLocation source) {
+    _comments.putIfAbsent(source.sourceUri.toString(), () =>
         _parseComments(source));
   }
 
-  _parseComments(Source source) {
+  _parseComments(SourceLocation source) {
     final comments = new Map<int, String>();
 
-    final scanner = new dart2js.StringScanner(source.text,
+    final scanner = new dart2js.StringScanner(source.sourceText,
                                               includeComments: true);
     var lastComment = null;
 
@@ -82,10 +82,10 @@
           }
         }
       } else if (token.kind == dart2js.HASH_TOKEN) {
-        // Look for #library() to find the library comment.
+        // Look for `library` to find the library comment.
         final next = token.next;
         if ((lastComment != null) && (next.stringValue == 'library')) {
-          _libraryComments[source.uri.toString()] = lastComment;
+          _libraryComments[source.sourceUri.toString()] = lastComment;
           lastComment = null;
         }
       } else if (lastComment != null) {
diff --git a/pkg/dartdoc/lib/src/dartdoc/nav.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/nav.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/dartdoc/nav.dart
rename to sdk/lib/_internal/dartdoc/lib/src/dartdoc/nav.dart
diff --git a/pkg/dartdoc/lib/src/dartdoc/utils.dart b/sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/dartdoc/utils.dart
rename to sdk/lib/_internal/dartdoc/lib/src/dartdoc/utils.dart
diff --git a/pkg/dartdoc/lib/src/markdown/ast.dart b/sdk/lib/_internal/dartdoc/lib/src/markdown/ast.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/markdown/ast.dart
rename to sdk/lib/_internal/dartdoc/lib/src/markdown/ast.dart
diff --git a/pkg/dartdoc/lib/src/markdown/block_parser.dart b/sdk/lib/_internal/dartdoc/lib/src/markdown/block_parser.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/markdown/block_parser.dart
rename to sdk/lib/_internal/dartdoc/lib/src/markdown/block_parser.dart
diff --git a/pkg/dartdoc/lib/src/markdown/html_renderer.dart b/sdk/lib/_internal/dartdoc/lib/src/markdown/html_renderer.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/markdown/html_renderer.dart
rename to sdk/lib/_internal/dartdoc/lib/src/markdown/html_renderer.dart
diff --git a/pkg/dartdoc/lib/src/markdown/inline_parser.dart b/sdk/lib/_internal/dartdoc/lib/src/markdown/inline_parser.dart
similarity index 100%
rename from pkg/dartdoc/lib/src/markdown/inline_parser.dart
rename to sdk/lib/_internal/dartdoc/lib/src/markdown/inline_parser.dart
diff --git a/pkg/dartdoc/pubspec.yaml b/sdk/lib/_internal/dartdoc/pubspec.yaml
similarity index 100%
rename from pkg/dartdoc/pubspec.yaml
rename to sdk/lib/_internal/dartdoc/pubspec.yaml
diff --git a/pkg/dartdoc/static/body-bg.png b/sdk/lib/_internal/dartdoc/static/body-bg.png
similarity index 100%
rename from pkg/dartdoc/static/body-bg.png
rename to sdk/lib/_internal/dartdoc/static/body-bg.png
Binary files differ
diff --git a/pkg/dartdoc/static/class.png b/sdk/lib/_internal/dartdoc/static/class.png
similarity index 100%
rename from pkg/dartdoc/static/class.png
rename to sdk/lib/_internal/dartdoc/static/class.png
Binary files differ
diff --git a/pkg/dartdoc/static/content-bg.png b/sdk/lib/_internal/dartdoc/static/content-bg.png
similarity index 100%
rename from pkg/dartdoc/static/content-bg.png
rename to sdk/lib/_internal/dartdoc/static/content-bg.png
Binary files differ
diff --git a/pkg/dartdoc/static/dart-logo-small.png b/sdk/lib/_internal/dartdoc/static/dart-logo-small.png
similarity index 100%
rename from pkg/dartdoc/static/dart-logo-small.png
rename to sdk/lib/_internal/dartdoc/static/dart-logo-small.png
Binary files differ
diff --git a/pkg/dartdoc/static/exception.png b/sdk/lib/_internal/dartdoc/static/exception.png
similarity index 100%
rename from pkg/dartdoc/static/exception.png
rename to sdk/lib/_internal/dartdoc/static/exception.png
Binary files differ
diff --git a/pkg/dartdoc/static/external-link.png b/sdk/lib/_internal/dartdoc/static/external-link.png
similarity index 100%
rename from pkg/dartdoc/static/external-link.png
rename to sdk/lib/_internal/dartdoc/static/external-link.png
Binary files differ
diff --git a/pkg/dartdoc/static/favicon.ico b/sdk/lib/_internal/dartdoc/static/favicon.ico
similarity index 100%
rename from pkg/dartdoc/static/favicon.ico
rename to sdk/lib/_internal/dartdoc/static/favicon.ico
Binary files differ
diff --git a/pkg/dartdoc/static/header-bg.png b/sdk/lib/_internal/dartdoc/static/header-bg.png
similarity index 100%
rename from pkg/dartdoc/static/header-bg.png
rename to sdk/lib/_internal/dartdoc/static/header-bg.png
Binary files differ
diff --git a/pkg/dartdoc/static/interface.png b/sdk/lib/_internal/dartdoc/static/interface.png
similarity index 100%
rename from pkg/dartdoc/static/interface.png
rename to sdk/lib/_internal/dartdoc/static/interface.png
Binary files differ
diff --git a/pkg/dartdoc/static/library.png b/sdk/lib/_internal/dartdoc/static/library.png
similarity index 100%
rename from pkg/dartdoc/static/library.png
rename to sdk/lib/_internal/dartdoc/static/library.png
Binary files differ
diff --git a/pkg/dartdoc/static/styles.css b/sdk/lib/_internal/dartdoc/static/styles.css
similarity index 100%
rename from pkg/dartdoc/static/styles.css
rename to sdk/lib/_internal/dartdoc/static/styles.css
diff --git a/pkg/dartdoc/test/dartdoc_search_test.dart b/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
similarity index 99%
rename from pkg/dartdoc/test/dartdoc_search_test.dart
rename to sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
index 0395687..fff9349 100644
--- a/pkg/dartdoc/test/dartdoc_search_test.dart
+++ b/sdk/lib/_internal/dartdoc/test/dartdoc_search_test.dart
@@ -49,4 +49,4 @@
 	testTopLevelVsMembers();

 	testTopLevelFullVsPrefix();

 	testMemberFullVsPrefix();

-}
\ No newline at end of file
+}

diff --git a/pkg/dartdoc/test/dartdoc_test.dart b/sdk/lib/_internal/dartdoc/test/dartdoc_test.dart
similarity index 95%
rename from pkg/dartdoc/test/dartdoc_test.dart
rename to sdk/lib/_internal/dartdoc/test/dartdoc_test.dart
index 9b176ee..27fc89a 100644
--- a/pkg/dartdoc/test/dartdoc_test.dart
+++ b/sdk/lib/_internal/dartdoc/test/dartdoc_test.dart
@@ -3,14 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Unit tests for doc.
-#library('dartdoc_tests');
+library dartdocTests;
 
 // TODO(rnystrom): Use "package:" URL (#4968).
-#import('../lib/dartdoc.dart', prefix: 'dd');
-#import('../lib/markdown.dart', prefix: 'md');
+import '../lib/dartdoc.dart' as dd;
+import '../lib/markdown.dart' as md;
 
 // TODO(rnystrom): Better path to unittest.
-#import('../../unittest/unittest.dart');
+import '../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   group('countOccurrences', () {
diff --git a/pkg/dartdoc/test/markdown_test.dart b/sdk/lib/_internal/dartdoc/test/markdown_test.dart
similarity index 99%
rename from pkg/dartdoc/test/markdown_test.dart
rename to sdk/lib/_internal/dartdoc/test/markdown_test.dart
index 0dbef79..ceb6813 100644
--- a/pkg/dartdoc/test/markdown_test.dart
+++ b/sdk/lib/_internal/dartdoc/test/markdown_test.dart
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Unit tests for markdown.
-#library('markdown_tests');
+library markdownTests;
 
 // TODO(rnystrom): Use "package:" URL (#4968).
-#import('../lib/markdown.dart');
+import '../lib/markdown.dart';
 
 // TODO(rnystrom): Better path to unittest.
-#import('../../unittest/unittest.dart');
+import '../../../pkg/unittest/lib/unittest.dart';
 
 /// Most of these tests are based on observing how showdown behaves:
 /// http://softwaremaniacs.org/playground/showdown-highlight/
diff --git a/lib/_internal/libraries.dart b/sdk/lib/_internal/libraries.dart
similarity index 85%
rename from lib/_internal/libraries.dart
rename to sdk/lib/_internal/libraries.dart
index bcd7386..6669eaa4 100644
--- a/lib/_internal/libraries.dart
+++ b/sdk/lib/_internal/libraries.dart
@@ -28,12 +28,12 @@
 
   "core": const LibraryInfo(
       "core/core.dart",
-      dart2jsPatchPath: "compiler/implementation/lib/core_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/core_patch.dart"),
 
   "coreimpl": const LibraryInfo(
       "coreimpl/coreimpl.dart",
       implementation: true,
-      dart2jsPatchPath: "compiler/implementation/lib/coreimpl_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/coreimpl_patch.dart"),
 
   "crypto": const LibraryInfo(
       "crypto/crypto.dart"),
@@ -46,22 +46,22 @@
   "io": const LibraryInfo(
       "io/io.dart",
       category: "Server",
-      dart2jsPatchPath: "compiler/implementation/lib/io_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/io_patch.dart"),
 
   "isolate": const LibraryInfo(
       "isolate/isolate.dart",
-      dart2jsPatchPath: "compiler/implementation/lib/isolate_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/isolate_patch.dart"),
 
   "json": const LibraryInfo(
       "json/json.dart"),
 
   "math": const LibraryInfo(
       "math/math.dart",
-      dart2jsPatchPath: "compiler/implementation/lib/math_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/math_patch.dart"),
 
   "mirrors": const LibraryInfo(
       "mirrors/mirrors.dart",
-      dart2jsPath: "compiler/implementation/lib/mirrors.dart"),
+      dart2jsPath: "_internal/compiler/implementation/lib/mirrors.dart"),
 
   "nativewrappers": const LibraryInfo(
       "html/dartium/nativewrappers.dart",
@@ -73,7 +73,7 @@
   "scalarlist": const LibraryInfo(
       "scalarlist/scalarlist.dart",
       category: "Server",
-      dart2jsPatchPath: "compiler/implementation/lib/scalarlist_patch.dart"),
+      dart2jsPatchPath: "_internal/compiler/implementation/lib/scalarlist_patch.dart"),
 
   "uri": const LibraryInfo(
       "uri/uri.dart"),
@@ -82,13 +82,13 @@
       "utf/utf.dart"),
 
   "_js_helper": const LibraryInfo(
-      "compiler/implementation/lib/js_helper.dart",
+      "_internal/compiler/implementation/lib/js_helper.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
 
   "_interceptors": const LibraryInfo(
-      "compiler/implementation/lib/interceptors.dart",
+      "_internal/compiler/implementation/lib/interceptors.dart",
       category: "Internal",
       documented: false,
       platforms: DART2JS_PLATFORM),
diff --git a/lib/collection/arrays.dart b/sdk/lib/collection/arrays.dart
similarity index 100%
rename from lib/collection/arrays.dart
rename to sdk/lib/collection/arrays.dart
diff --git a/lib/collection/collection.dart b/sdk/lib/collection/collection.dart
similarity index 100%
rename from lib/collection/collection.dart
rename to sdk/lib/collection/collection.dart
diff --git a/lib/collection/collection_sources.gypi b/sdk/lib/collection/collection_sources.gypi
similarity index 100%
rename from lib/collection/collection_sources.gypi
rename to sdk/lib/collection/collection_sources.gypi
diff --git a/lib/collection/collections.dart b/sdk/lib/collection/collections.dart
similarity index 100%
rename from lib/collection/collections.dart
rename to sdk/lib/collection/collections.dart
diff --git a/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
similarity index 100%
rename from lib/collection/maps.dart
rename to sdk/lib/collection/maps.dart
diff --git a/lib/collection/splay_tree.dart b/sdk/lib/collection/splay_tree.dart
similarity index 100%
rename from lib/collection/splay_tree.dart
rename to sdk/lib/collection/splay_tree.dart
diff --git a/lib/core/bool.dart b/sdk/lib/core/bool.dart
similarity index 100%
rename from lib/core/bool.dart
rename to sdk/lib/core/bool.dart
diff --git a/lib/core/collection.dart b/sdk/lib/core/collection.dart
similarity index 100%
rename from lib/core/collection.dart
rename to sdk/lib/core/collection.dart
diff --git a/lib/core/comparable.dart b/sdk/lib/core/comparable.dart
similarity index 100%
rename from lib/core/comparable.dart
rename to sdk/lib/core/comparable.dart
diff --git a/lib/core/core.dart b/sdk/lib/core/core.dart
similarity index 100%
rename from lib/core/core.dart
rename to sdk/lib/core/core.dart
diff --git a/lib/core/corelib_sources.gypi b/sdk/lib/core/corelib_sources.gypi
similarity index 100%
rename from lib/core/corelib_sources.gypi
rename to sdk/lib/core/corelib_sources.gypi
diff --git a/lib/core/date.dart b/sdk/lib/core/date.dart
similarity index 100%
rename from lib/core/date.dart
rename to sdk/lib/core/date.dart
diff --git a/lib/core/double.dart b/sdk/lib/core/double.dart
similarity index 100%
rename from lib/core/double.dart
rename to sdk/lib/core/double.dart
diff --git a/lib/core/duration.dart b/sdk/lib/core/duration.dart
similarity index 100%
rename from lib/core/duration.dart
rename to sdk/lib/core/duration.dart
diff --git a/lib/core/errors.dart b/sdk/lib/core/errors.dart
similarity index 79%
rename from lib/core/errors.dart
rename to sdk/lib/core/errors.dart
index c516426..fec2de5 100644
--- a/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -27,11 +27,11 @@
 /**
  * Error thrown when a function is passed an unacceptable argument.
  */
- class ArgumentError implements Error {
+class ArgumentError implements Error {
   final message;
 
   /** The [message] describes the erroneous argument. */
-  const ArgumentError([this.message = ""]);
+  const ArgumentError([this.message]);
 
   String toString() {
     if (message != null) {
@@ -44,13 +44,17 @@
 /**
  * Exception thrown because of an index outside of the valid range.
  *
- * Temporarily extends [Exception] for backwards compatiblity.
+ * Temporarily implements [IndexOutOfRangeException] for backwards compatiblity.
  */
-class RangeError extends ArgumentError implements Exception {
+class RangeError extends ArgumentError implements IndexOutOfRangeException {
   // TODO(lrn): This constructor should be called only with string values.
   // It currently isn't in all cases.
-  /** Create a new [RangeError] with the given [message]. */
-  RangeError(var message) : super("$message");
+  /**
+   * Create a new [RangeError] with the given [message].
+   *
+   * Temporarily made const for backwards compatibilty.
+   */
+  const RangeError(var message) : super(message);
 
   /** Create a new [RangeError] with a message for the given [value]. */
   RangeError.value(num value) : super("value $value");
@@ -63,11 +67,10 @@
  *
  * This class allows code throwing the old [IndexOutOfRangeException] to
  * work until they change to the new [RangeError] name.
- * Code **catching** IndexOutOfRangeException will fail to catch
- * the [RangeError] objects that are now thrown.
+ * Constructor of [RangeError] is const only to support this interface.
  */
-class IndexOutOfRangeException extends ArgumentError {
-  IndexOutOfRangeException(var message) : super(message);
+interface IndexOutOfRangeException extends Exception default RangeError {
+  const IndexOutOfRangeException(var message);
 }
 
 
@@ -206,6 +209,35 @@
   String toString() => "Unsupported operation: $message";
 }
 
+
+/**
+ * Thrown by operations that have not been implemented yet.
+ *
+ * This [Error] is thrown by unfinished code that hasn't yet implemented
+ * all the features it needs.
+ *
+ * If a class is not intending to implement the feature, it should throw
+ * an [UnsupportedError] instead. This error is only intended for
+ * use during development.
+ *
+ * This class temporarily implements [Exception] for backwards compatibility.
+ * The constructor is temporarily const to support [NotImplementedException].
+ */
+class UnimplementedError implements UnsupportedError, NotImplementedException {
+  final String message;
+  const UnimplementedError([String this.message]);
+  String toString() => (this.message !== null
+                        ? "UnimplementedError: $message"
+                        : "UnimplementedError");
+}
+
+
+/** Temporary class added for backwards compatibility. Will be removed. */
+interface NotImplementedException extends Exception default UnimplementedError {
+  const NotImplementedException([String message]);
+}
+
+
 /**
  * The operation was not allowed by the current state of the object.
  *
diff --git a/lib/core/exceptions.dart b/sdk/lib/core/exceptions.dart
similarity index 88%
rename from lib/core/exceptions.dart
rename to sdk/lib/core/exceptions.dart
index e498567..2d2bc43 100644
--- a/lib/core/exceptions.dart
+++ b/sdk/lib/core/exceptions.dart
@@ -61,15 +61,6 @@
 }
 
 
-class NotImplementedException implements Exception {
-  const NotImplementedException([String message]) : this._message = message;
-  String toString() => (this._message !== null
-                        ? "NotImplementedException: $_message"
-                        : "NotImplementedException");
-  final String _message;
-}
-
-
 class IllegalJSRegExpException implements Exception {
   const IllegalJSRegExpException(String this._pattern, String this._errmsg);
   String toString() => "IllegalJSRegExpException: '$_pattern' '$_errmsg'";
diff --git a/lib/core/expando.dart b/sdk/lib/core/expando.dart
similarity index 100%
rename from lib/core/expando.dart
rename to sdk/lib/core/expando.dart
diff --git a/lib/core/expect.dart b/sdk/lib/core/expect.dart
similarity index 100%
rename from lib/core/expect.dart
rename to sdk/lib/core/expect.dart
diff --git a/lib/core/function.dart b/sdk/lib/core/function.dart
similarity index 100%
rename from lib/core/function.dart
rename to sdk/lib/core/function.dart
diff --git a/lib/core/future.dart b/sdk/lib/core/future.dart
similarity index 100%
rename from lib/core/future.dart
rename to sdk/lib/core/future.dart
diff --git a/lib/core/future_impl.dart b/sdk/lib/core/future_impl.dart
similarity index 100%
rename from lib/core/future_impl.dart
rename to sdk/lib/core/future_impl.dart
diff --git a/lib/core/hashable.dart b/sdk/lib/core/hashable.dart
similarity index 100%
rename from lib/core/hashable.dart
rename to sdk/lib/core/hashable.dart
diff --git a/lib/core/identical.dart b/sdk/lib/core/identical.dart
similarity index 100%
rename from lib/core/identical.dart
rename to sdk/lib/core/identical.dart
diff --git a/lib/core/int.dart b/sdk/lib/core/int.dart
similarity index 100%
rename from lib/core/int.dart
rename to sdk/lib/core/int.dart
diff --git a/lib/core/invocation_mirror.dart b/sdk/lib/core/invocation_mirror.dart
similarity index 100%
rename from lib/core/invocation_mirror.dart
rename to sdk/lib/core/invocation_mirror.dart
diff --git a/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
similarity index 100%
rename from lib/core/iterable.dart
rename to sdk/lib/core/iterable.dart
diff --git a/lib/core/iterator.dart b/sdk/lib/core/iterator.dart
similarity index 97%
rename from lib/core/iterator.dart
rename to sdk/lib/core/iterator.dart
index 2e324f6..5d5e979 100644
--- a/lib/core/iterator.dart
+++ b/sdk/lib/core/iterator.dart
@@ -20,5 +20,5 @@
   /**
    * Returns whether the [Iterator] has elements left.
    */
-  bool hasNext;
+  bool get hasNext;
 }
diff --git a/lib/core/list.dart b/sdk/lib/core/list.dart
similarity index 100%
rename from lib/core/list.dart
rename to sdk/lib/core/list.dart
diff --git a/lib/coreimpl/hash_map_set.dart b/sdk/lib/core/map.dart
similarity index 60%
rename from lib/coreimpl/hash_map_set.dart
rename to sdk/lib/core/map.dart
index d696150..60db6ce 100644
--- a/lib/coreimpl/hash_map_set.dart
+++ b/sdk/lib/core/map.dart
@@ -1,9 +1,129 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
+/**
+ * A [Map] is an associative container, mapping a key to a value.
+ * Null values are supported, but null keys are not.
+ */
+abstract class Map<K, V> {
+  /**
+   * Creates a map with the default implementation.
+   */
+  factory Map() => new _HashMapImpl<K, V>();
+
+  /**
+   * Creates a [Map] that contains all key value pairs of [other].
+   */
+  factory Map.from(Map<K, V> other) => new _HashMapImpl<K, V>.from(other);
+
+
+  /**
+   * Returns whether this map contains the given [value].
+   */
+  bool containsValue(V value);
+
+  /**
+   * Returns whether this map contains the given [key].
+   */
+  bool containsKey(K key);
+
+  /**
+   * Returns the value for the given [key] or null if [key] is not
+   * in the map. Because null values are supported, one should either
+   * use containsKey to distinguish between an absent key and a null
+   * value, or use the [putIfAbsent] method.
+   */
+  V operator [](K key);
+
+  /**
+   * Associates the [key] with the given [value].
+   */
+  void operator []=(K key, V value);
+
+  /**
+   * If [key] is not associated to a value, calls [ifAbsent] and
+   * updates the map by mapping [key] to the value returned by
+   * [ifAbsent]. Returns the value in the map.
+   */
+  V putIfAbsent(K key, V ifAbsent());
+
+  /**
+   * Removes the association for the given [key]. Returns the value for
+   * [key] in the map or null if [key] is not in the map. Note that values
+   * can be null and a returned null value does not always imply that the
+   * key is absent.
+   */
+  V remove(K key);
+
+  /**
+   * Removes all pairs from the map.
+   */
+  void clear();
+
+  /**
+   * Applies [f] to each {key, value} pair of the map.
+   */
+  void forEach(void f(K key, V value));
+
+  /**
+   * Returns a collection containing all the keys in the map.
+   */
+  Collection<K> get keys;
+
+  /**
+   * Returns a collection containing all the values in the map.
+   */
+  Collection<V> get values;
+
+  /**
+   * The number of {key, value} pairs in the map.
+   */
+  int get length;
+
+  /**
+   * Returns true if there is no {key, value} pair in the map.
+   */
+  bool get isEmpty;
+}
+
+/**
+ * Hash map version of the [Map] interface. A [HashMap] does not
+ * provide any guarantees on the order of keys and values in [keys]
+ * and [values].
+ */
+abstract class HashMap<K, V> extends Map<K, V> {
+  /**
+   * Creates a map with the default implementation.
+   */
+  factory HashMap() => new _HashMapImpl<K, V>();
+
+  /**
+   * Creates a [HashMap] that contains all key value pairs of [other].
+   */
+  factory HashMap.from(Map<K, V> other) => new _HashMapImpl<K, V>.from(other);
+}
+
+/**
+ * Hash map version of the [Map] interface that preserves insertion
+ * order.
+ */
+abstract class LinkedHashMap<K, V> extends HashMap<K, V> {
+  /**
+   * Creates a map with the default implementation.
+   */
+  factory LinkedHashMap() => new _LinkedHashMapImpl<K, V>();
+
+  /**
+   * Creates a [LinkedHashMap] that contains all key value pairs of [other].
+   */
+  factory LinkedHashMap.from(Map<K, V> other)
+    => new _LinkedHashMapImpl<K, V>.from(other);
+}
+
+
 // Hash map implementation with open addressing and quadratic probing.
-class HashMapImplementation<K, V> implements HashMap<K, V> {
+class _HashMapImpl<K, V> implements HashMap<K, V> {
 
   // The [_keys] list contains the keys inserted in the map.
   // The [_keys] list must be a raw list because it
@@ -42,7 +162,7 @@
   // The initial capacity of a hash map.
   static const int _INITIAL_CAPACITY = 8;  // must be power of 2
 
-  HashMapImplementation() {
+  _HashMapImpl() {
     _numberOfEntries = 0;
     _numberOfDeleted = 0;
     _loadLimit = _computeLoadLimit(_INITIAL_CAPACITY);
@@ -50,8 +170,8 @@
     _values = new List<V>(_INITIAL_CAPACITY);
   }
 
-  factory HashMapImplementation.from(Map<K, V> other) {
-    Map<K, V> result = new HashMapImplementation<K, V>();
+  factory _HashMapImpl.from(Map<K, V> other) {
+    Map<K, V> result = new _HashMapImpl<K, V>();
     other.forEach((K key, V value) { result[key] = value; });
     return result;
   }
@@ -276,174 +396,6 @@
   }
 }
 
-class HashSetImplementation<E > implements HashSet<E> {
-
-  HashSetImplementation() {
-    _backingMap = new HashMapImplementation<E, E>();
-  }
-
-  factory HashSetImplementation.from(Iterable<E> other) {
-    Set<E> set = new HashSetImplementation<E>();
-    for (final e in other) {
-      set.add(e);
-    }
-    return set;
-  }
-
-  void clear() {
-    _backingMap.clear();
-  }
-
-  void add(E value) {
-    _backingMap[value] = value;
-  }
-
-  bool contains(E value) {
-    return _backingMap.containsKey(value);
-  }
-
-  bool remove(E value) {
-    if (!_backingMap.containsKey(value)) return false;
-    _backingMap.remove(value);
-    return true;
-  }
-
-  void addAll(Collection<E> collection) {
-    collection.forEach(void _(E value) {
-      add(value);
-    });
-  }
-
-  Set<E> intersection(Collection<E> collection) {
-    Set<E> result = new Set<E>();
-    collection.forEach(void _(E value) {
-      if (contains(value)) result.add(value);
-    });
-    return result;
-  }
-
-  bool isSubsetOf(Collection<E> other) {
-    return new Set<E>.from(other).containsAll(this);
-  }
-
-  void removeAll(Collection<E> collection) {
-    collection.forEach(void _(E value) {
-      remove(value);
-    });
-  }
-
-  bool containsAll(Collection<E> collection) {
-    return collection.every(bool _(E value) {
-      return contains(value);
-    });
-  }
-
-  void forEach(void f(E element)) {
-    _backingMap.forEach(void _(E key, E value) {
-      f(key);
-    });
-  }
-
-  Set map(f(E element)) {
-    Set result = new Set();
-    _backingMap.forEach(void _(E key, E value) {
-      result.add(f(key));
-    });
-    return result;
-  }
-
-  Dynamic reduce(Dynamic initialValue,
-                 Dynamic combine(Dynamic previousValue, E element)) {
-    return Collections.reduce(this, initialValue, combine);
-  }
-
-  Set<E> filter(bool f(E element)) {
-    Set<E> result = new Set<E>();
-    _backingMap.forEach(void _(E key, E value) {
-      if (f(key)) result.add(key);
-    });
-    return result;
-  }
-
-  bool every(bool f(E element)) {
-    Collection<E> keys = _backingMap.keys;
-    return keys.every(f);
-  }
-
-  bool some(bool f(E element)) {
-    Collection<E> keys = _backingMap.keys;
-    return keys.some(f);
-  }
-
-  bool get isEmpty {
-    return _backingMap.isEmpty;
-  }
-
-  int get length {
-    return _backingMap.length;
-  }
-
-  Iterator<E> iterator() {
-    return new HashSetIterator<E>(this);
-  }
-
-  String toString() {
-    return Collections.collectionToString(this);
-  }
-
-  // The map backing this set. The associations in this map are all
-  // of the form element -> element. If a value is not in the map,
-  // then it is not in the set.
-  HashMapImplementation<E, E> _backingMap;
-}
-
-class HashSetIterator<E> implements Iterator<E> {
-
-  // TODO(4504458): Replace set_ with set.
-  HashSetIterator(HashSetImplementation<E> set_)
-    : _nextValidIndex = -1,
-      _entries = set_._backingMap._keys {
-    _advance();
-  }
-
-  bool get hasNext {
-    if (_nextValidIndex >= _entries.length) return false;
-    if (_entries[_nextValidIndex] === HashMapImplementation._DELETED_KEY) {
-      // This happens in case the set was modified in the meantime.
-      // A modification on the set may make this iterator misbehave,
-      // but we should never return the sentinel.
-      _advance();
-    }
-    return _nextValidIndex < _entries.length;
-  }
-
-  E next() {
-    if (!hasNext) {
-      throw new StateError("No more elements");
-    }
-    E res = _entries[_nextValidIndex];
-    _advance();
-    return res;
-  }
-
-  void _advance() {
-    int length = _entries.length;
-    var entry;
-    final deletedKey = HashMapImplementation._DELETED_KEY;
-    do {
-      if (++_nextValidIndex >= length) break;
-      entry = _entries[_nextValidIndex];
-    } while ((entry === null) || (entry === deletedKey));
-  }
-
-  // The entries in the set. May contain null or the sentinel value.
-  List<E> _entries;
-
-  // The next valid index in [_entries] or the length of [entries_].
-  // If it is the length of [_entries], calling [hasNext] on the
-  // iterator will return false.
-  int _nextValidIndex;
-}
 
 /**
  * A singleton sentinel used to represent when a key is deleted from the map.
@@ -454,3 +406,121 @@
 class _DeletedKeySentinel {
   const _DeletedKeySentinel();
 }
+
+
+/**
+ * This class represents a pair of two objects, used by LinkedHashMap
+ * to store a {key, value} in a list.
+ */
+class _KeyValuePair<K, V> {
+  _KeyValuePair(this.key, this.value) {}
+
+  final K key;
+  V value;
+}
+
+/**
+ * A LinkedHashMap is a hash map that preserves the insertion order
+ * when iterating over the keys or the values. Updating the value of a
+ * key does not change the order.
+ */
+class _LinkedHashMapImpl<K, V> implements LinkedHashMap<K, V> {
+  DoubleLinkedQueue<_KeyValuePair<K, V>> _list;
+  HashMap<K, DoubleLinkedQueueEntry<_KeyValuePair<K, V>>> _map;
+
+  _LinkedHashMapImpl() {
+    _map = new HashMap<K, DoubleLinkedQueueEntry<_KeyValuePair<K, V>>>();
+    _list = new DoubleLinkedQueue<_KeyValuePair<K, V>>();
+  }
+
+  factory _LinkedHashMapImpl.from(Map<K, V> other) {
+    Map<K, V> result = new _LinkedHashMapImpl<K, V>();
+    other.forEach((K key, V value) { result[key] = value; });
+    return result;
+  }
+
+  void operator []=(K key, V value) {
+    if (_map.containsKey(key)) {
+      _map[key].element.value = value;
+    } else {
+      _list.addLast(new _KeyValuePair<K, V>(key, value));
+      _map[key] = _list.lastEntry();
+    }
+  }
+
+  V operator [](K key) {
+    DoubleLinkedQueueEntry<_KeyValuePair<K, V>> entry = _map[key];
+    if (entry === null) return null;
+    return entry.element.value;
+  }
+
+  V remove(K key) {
+    DoubleLinkedQueueEntry<_KeyValuePair<K, V>> entry = _map.remove(key);
+    if (entry === null) return null;
+    entry.remove();
+    return entry.element.value;
+  }
+
+  V putIfAbsent(K key, V ifAbsent()) {
+    V value = this[key];
+    if ((this[key] === null) && !(containsKey(key))) {
+      value = ifAbsent();
+      this[key] = value;
+    }
+    return value;
+  }
+
+  Collection<K> get keys {
+    List<K> list = new List<K>(length);
+    int index = 0;
+    _list.forEach(void _(_KeyValuePair<K, V> entry) {
+      list[index++] = entry.key;
+    });
+    assert(index == length);
+    return list;
+  }
+
+
+  Collection<V> get values {
+    List<V> list = new List<V>(length);
+    int index = 0;
+    _list.forEach(void _(_KeyValuePair<K, V> entry) {
+      list[index++] = entry.value;
+    });
+    assert(index == length);
+    return list;
+  }
+
+  void forEach(void f(K key, V value)) {
+    _list.forEach(void _(_KeyValuePair<K, V> entry) {
+      f(entry.key, entry.value);
+    });
+  }
+
+  bool containsKey(K key) {
+    return _map.containsKey(key);
+  }
+
+  bool containsValue(V value) {
+    return _list.some(bool _(_KeyValuePair<K, V> entry) {
+      return (entry.value == value);
+    });
+  }
+
+  int get length {
+    return _map.length;
+  }
+
+  bool get isEmpty {
+    return length == 0;
+  }
+
+  void clear() {
+    _map.clear();
+    _list.clear();
+  }
+
+  String toString() {
+    return Maps.mapToString(this);
+  }
+}
diff --git a/lib/core/num.dart b/sdk/lib/core/num.dart
similarity index 100%
rename from lib/core/num.dart
rename to sdk/lib/core/num.dart
diff --git a/lib/core/object.dart b/sdk/lib/core/object.dart
similarity index 100%
rename from lib/core/object.dart
rename to sdk/lib/core/object.dart
diff --git a/lib/core/options.dart b/sdk/lib/core/options.dart
similarity index 100%
rename from lib/core/options.dart
rename to sdk/lib/core/options.dart
diff --git a/lib/core/pattern.dart b/sdk/lib/core/pattern.dart
similarity index 100%
rename from lib/core/pattern.dart
rename to sdk/lib/core/pattern.dart
diff --git a/lib/core/print.dart b/sdk/lib/core/print.dart
similarity index 100%
rename from lib/core/print.dart
rename to sdk/lib/core/print.dart
diff --git a/lib/core/queue.dart b/sdk/lib/core/queue.dart
similarity index 100%
rename from lib/core/queue.dart
rename to sdk/lib/core/queue.dart
diff --git a/lib/core/regexp.dart b/sdk/lib/core/regexp.dart
similarity index 100%
rename from lib/core/regexp.dart
rename to sdk/lib/core/regexp.dart
diff --git a/lib/core/sequences.dart b/sdk/lib/core/sequences.dart
similarity index 100%
rename from lib/core/sequences.dart
rename to sdk/lib/core/sequences.dart
diff --git a/sdk/lib/core/set.dart b/sdk/lib/core/set.dart
new file mode 100644
index 0000000..7c1f2a7
--- /dev/null
+++ b/sdk/lib/core/set.dart
@@ -0,0 +1,247 @@
+// 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.
+
+/**
+ * This class is the public interface of a set. A set is a collection
+ * without duplicates.
+ */
+abstract class Set<E> extends Collection<E> {
+  factory Set() => new _HashSetImpl<E>();
+
+  /**
+   * Creates a [Set] that contains all elements of [other].
+   */
+  factory Set.from(Iterable<E> other) => new _HashSetImpl<E>.from(other);
+
+  /**
+   * Returns true if [value] is in the set.
+   */
+  bool contains(E value);
+
+  /**
+   * Adds [value] into the set. The method has no effect if
+   * [value] was already in the set.
+   */
+  void add(E value);
+
+  /**
+   * Removes [value] from the set. Returns true if [value] was
+   * in the set. Returns false otherwise. The method has no effect
+   * if [value] value was not in the set.
+   */
+  bool remove(E value);
+
+  /**
+   * Adds all the elements of the given collection to the set.
+   */
+  void addAll(Collection<E> collection);
+
+  /**
+   * Removes all the elements of the given collection from the set.
+   */
+  void removeAll(Collection<E> collection);
+
+  /**
+   * Returns true if [collection] contains all the elements of this
+   * collection.
+   */
+  bool isSubsetOf(Collection<E> collection);
+
+  /**
+   * Returns true if this collection contains all the elements of
+   * [collection].
+   */
+  bool containsAll(Collection<E> collection);
+
+  /**
+   * Returns a new set which is the intersection between this set and
+   * the given collection.
+   */
+  Set<E> intersection(Collection<E> other);
+
+  /**
+   * Removes all elements in the set.
+   */
+  void clear();
+
+}
+
+abstract class HashSet<E> extends Set<E> {
+  factory HashSet() => new _HashSetImpl<E>();
+
+  /**
+   * Creates a [Set] that contains all elements of [other].
+   */
+  factory HashSet.from(Iterable<E> other) => new _HashSetImpl<E>.from(other);
+}
+
+
+class _HashSetImpl<E> implements HashSet<E> {
+
+  _HashSetImpl() {
+    _backingMap = new _HashMapImpl<E, E>();
+  }
+
+  factory _HashSetImpl.from(Iterable<E> other) {
+    Set<E> set = new _HashSetImpl<E>();
+    for (final e in other) {
+      set.add(e);
+    }
+    return set;
+  }
+
+  void clear() {
+    _backingMap.clear();
+  }
+
+  void add(E value) {
+    _backingMap[value] = value;
+  }
+
+  bool contains(E value) {
+    return _backingMap.containsKey(value);
+  }
+
+  bool remove(E value) {
+    if (!_backingMap.containsKey(value)) return false;
+    _backingMap.remove(value);
+    return true;
+  }
+
+  void addAll(Collection<E> collection) {
+    collection.forEach(void _(E value) {
+      add(value);
+    });
+  }
+
+  Set<E> intersection(Collection<E> collection) {
+    Set<E> result = new Set<E>();
+    collection.forEach(void _(E value) {
+      if (contains(value)) result.add(value);
+    });
+    return result;
+  }
+
+  bool isSubsetOf(Collection<E> other) {
+    return new Set<E>.from(other).containsAll(this);
+  }
+
+  void removeAll(Collection<E> collection) {
+    collection.forEach(void _(E value) {
+      remove(value);
+    });
+  }
+
+  bool containsAll(Collection<E> collection) {
+    return collection.every(bool _(E value) {
+      return contains(value);
+    });
+  }
+
+  void forEach(void f(E element)) {
+    _backingMap.forEach(void _(E key, E value) {
+      f(key);
+    });
+  }
+
+  Set map(f(E element)) {
+    Set result = new Set();
+    _backingMap.forEach(void _(E key, E value) {
+      result.add(f(key));
+    });
+    return result;
+  }
+
+  Dynamic reduce(Dynamic initialValue,
+                 Dynamic combine(Dynamic previousValue, E element)) {
+    return Collections.reduce(this, initialValue, combine);
+  }
+
+  Set<E> filter(bool f(E element)) {
+    Set<E> result = new Set<E>();
+    _backingMap.forEach(void _(E key, E value) {
+      if (f(key)) result.add(key);
+    });
+    return result;
+  }
+
+  bool every(bool f(E element)) {
+    Collection<E> keys = _backingMap.keys;
+    return keys.every(f);
+  }
+
+  bool some(bool f(E element)) {
+    Collection<E> keys = _backingMap.keys;
+    return keys.some(f);
+  }
+
+  bool get isEmpty {
+    return _backingMap.isEmpty;
+  }
+
+  int get length {
+    return _backingMap.length;
+  }
+
+  Iterator<E> iterator() {
+    return new _HashSetIterator<E>(this);
+  }
+
+  String toString() {
+    return Collections.collectionToString(this);
+  }
+
+  // The map backing this set. The associations in this map are all
+  // of the form element -> element. If a value is not in the map,
+  // then it is not in the set.
+  _HashMapImpl<E, E> _backingMap;
+}
+
+class _HashSetIterator<E> implements Iterator<E> {
+
+  // TODO(4504458): Replace set_ with set.
+  _HashSetIterator(_HashSetImpl<E> set_)
+    : _nextValidIndex = -1,
+      _entries = set_._backingMap._keys {
+    _advance();
+  }
+
+  bool get hasNext {
+    if (_nextValidIndex >= _entries.length) return false;
+    if (identical(_entries[_nextValidIndex], _HashMapImpl._DELETED_KEY)) {
+      // This happens in case the set was modified in the meantime.
+      // A modification on the set may make this iterator misbehave,
+      // but we should never return the sentinel.
+      _advance();
+    }
+    return _nextValidIndex < _entries.length;
+  }
+
+  E next() {
+    if (!hasNext) {
+      throw new StateError("No more elements");
+    }
+    E res = _entries[_nextValidIndex];
+    _advance();
+    return res;
+  }
+
+  void _advance() {
+    int length = _entries.length;
+    var entry;
+    final deletedKey = _HashMapImpl._DELETED_KEY;
+    do {
+      if (++_nextValidIndex >= length) break;
+      entry = _entries[_nextValidIndex];
+    } while ((entry === null) || (entry === deletedKey));
+  }
+
+  // The entries in the set. May contain null or the sentinel value.
+  List<E> _entries;
+
+  // The next valid index in [_entries] or the length of [entries_].
+  // If it is the length of [_entries], calling [hasNext] on the
+  // iterator will return false.
+  int _nextValidIndex;
+}
diff --git a/lib/core/sort.dart b/sdk/lib/core/sort.dart
similarity index 100%
rename from lib/core/sort.dart
rename to sdk/lib/core/sort.dart
diff --git a/lib/core/stopwatch.dart b/sdk/lib/core/stopwatch.dart
similarity index 100%
rename from lib/core/stopwatch.dart
rename to sdk/lib/core/stopwatch.dart
diff --git a/lib/core/string.dart b/sdk/lib/core/string.dart
similarity index 100%
rename from lib/core/string.dart
rename to sdk/lib/core/string.dart
diff --git a/lib/core/string_buffer.dart b/sdk/lib/core/string_buffer.dart
similarity index 100%
rename from lib/core/string_buffer.dart
rename to sdk/lib/core/string_buffer.dart
diff --git a/lib/core/strings.dart b/sdk/lib/core/strings.dart
similarity index 100%
rename from lib/core/strings.dart
rename to sdk/lib/core/strings.dart
diff --git a/lib/core/type.dart b/sdk/lib/core/type.dart
similarity index 100%
rename from lib/core/type.dart
rename to sdk/lib/core/type.dart
diff --git a/lib/coreimpl/coreimpl.dart b/sdk/lib/coreimpl/coreimpl.dart
similarity index 82%
rename from lib/coreimpl/coreimpl.dart
rename to sdk/lib/coreimpl/coreimpl.dart
index c28a72b..067ea2f 100644
--- a/lib/coreimpl/coreimpl.dart
+++ b/sdk/lib/coreimpl/coreimpl.dart
@@ -6,6 +6,4 @@
 
 #import("dart:collection");
 
-#source("hash_map_set.dart");
-#source("linked_hash_map.dart");
 #source("regexp.dart");
diff --git a/lib/coreimpl/corelib_impl_sources.gypi b/sdk/lib/coreimpl/corelib_impl_sources.gypi
similarity index 82%
rename from lib/coreimpl/corelib_impl_sources.gypi
rename to sdk/lib/coreimpl/corelib_impl_sources.gypi
index 82531db..7f6bcbf 100644
--- a/lib/coreimpl/corelib_impl_sources.gypi
+++ b/sdk/lib/coreimpl/corelib_impl_sources.gypi
@@ -4,8 +4,6 @@
 
 {
   'sources': [
-    'hash_map_set.dart',
-    'linked_hash_map.dart',
     'regexp.dart',
   ],
 }
diff --git a/lib/coreimpl/regexp.dart b/sdk/lib/coreimpl/regexp.dart
similarity index 100%
rename from lib/coreimpl/regexp.dart
rename to sdk/lib/coreimpl/regexp.dart
diff --git a/lib/crypto/crypto.dart b/sdk/lib/crypto/crypto.dart
similarity index 100%
rename from lib/crypto/crypto.dart
rename to sdk/lib/crypto/crypto.dart
diff --git a/lib/crypto/crypto_utils.dart b/sdk/lib/crypto/crypto_utils.dart
similarity index 100%
rename from lib/crypto/crypto_utils.dart
rename to sdk/lib/crypto/crypto_utils.dart
diff --git a/lib/crypto/hash_utils.dart b/sdk/lib/crypto/hash_utils.dart
similarity index 100%
rename from lib/crypto/hash_utils.dart
rename to sdk/lib/crypto/hash_utils.dart
diff --git a/lib/crypto/hmac.dart b/sdk/lib/crypto/hmac.dart
similarity index 100%
rename from lib/crypto/hmac.dart
rename to sdk/lib/crypto/hmac.dart
diff --git a/lib/crypto/md5.dart b/sdk/lib/crypto/md5.dart
similarity index 100%
rename from lib/crypto/md5.dart
rename to sdk/lib/crypto/md5.dart
diff --git a/lib/crypto/sha1.dart b/sdk/lib/crypto/sha1.dart
similarity index 100%
rename from lib/crypto/sha1.dart
rename to sdk/lib/crypto/sha1.dart
diff --git a/lib/crypto/sha256.dart b/sdk/lib/crypto/sha256.dart
similarity index 100%
rename from lib/crypto/sha256.dart
rename to sdk/lib/crypto/sha256.dart
diff --git a/lib/html/.gitignore b/sdk/lib/html/.gitignore
similarity index 100%
rename from lib/html/.gitignore
rename to sdk/lib/html/.gitignore
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
new file mode 100644
index 0000000..5c2265e4
--- /dev/null
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -0,0 +1,28811 @@
+library html;
+
+import 'dart:isolate';
+import 'dart:json';
+// 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.
+
+// DO NOT EDIT
+// Auto-generated dart:html library.
+
+
+
+
+
+
+
+LocalWindow get window => JS('LocalWindow', 'window');
+
+Document get document => JS('Document', 'document');
+
+Element query(String selector) => document.query(selector);
+List<Element> queryAll(String selector) => document.queryAll(selector);
+
+// Workaround for tags like <cite> that lack their own Element subclass --
+// Dart issue 1990.
+class HTMLElement extends Element native "*HTMLElement" {
+}
+
+// Support for Send/ReceivePortSync.
+int _getNewIsolateId() {
+  if (JS('bool', r'!window.$dart$isolate$counter')) {
+    JS('void', r'window.$dart$isolate$counter = 1');
+  }
+  return JS('int', r'window.$dart$isolate$counter++');
+}
+
+// Fast path to invoke JS send port.
+_callPortSync(int id, message) {
+  return JS('var', r'ReceivePortSync.dispatchCall(#, #)', id, message);
+}
+
+// TODO(vsm): Plumb this properly.
+spawnDomFunction(f) => spawnFunction(f);
+
+/// @domName AbstractWorker
+class AbstractWorker extends EventTarget native "*AbstractWorker" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  AbstractWorkerEvents get on =>
+    new AbstractWorkerEvents(this);
+
+  /** @domName AbstractWorker.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName AbstractWorker.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName AbstractWorker.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class AbstractWorkerEvents extends Events {
+  AbstractWorkerEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get error => this['error'];
+}
+
+/// @domName AnalyserNode
+class AnalyserNode extends AudioNode native "*AnalyserNode" {
+
+  /** @domName AnalyserNode.fftSize */
+  int fftSize;
+
+  /** @domName AnalyserNode.frequencyBinCount */
+  final int frequencyBinCount;
+
+  /** @domName AnalyserNode.maxDecibels */
+  num maxDecibels;
+
+  /** @domName AnalyserNode.minDecibels */
+  num minDecibels;
+
+  /** @domName AnalyserNode.smoothingTimeConstant */
+  num smoothingTimeConstant;
+
+  /** @domName AnalyserNode.getByteFrequencyData */
+  void getByteFrequencyData(Uint8Array array) native;
+
+  /** @domName AnalyserNode.getByteTimeDomainData */
+  void getByteTimeDomainData(Uint8Array array) native;
+
+  /** @domName AnalyserNode.getFloatFrequencyData */
+  void getFloatFrequencyData(Float32Array array) native;
+}
+
+/// @domName HTMLAnchorElement
+class AnchorElement extends Element implements Element native "*HTMLAnchorElement" {
+
+  factory AnchorElement({String href}) {
+    if (!?href) {
+      return _Elements.createAnchorElement();
+    }
+    return _Elements.createAnchorElement(href);
+  }
+
+  /** @domName HTMLAnchorElement.charset */
+  String charset;
+
+  /** @domName HTMLAnchorElement.coords */
+  String coords;
+
+  /** @domName HTMLAnchorElement.download */
+  String download;
+
+  /** @domName HTMLAnchorElement.hash */
+  String hash;
+
+  /** @domName HTMLAnchorElement.host */
+  String host;
+
+  /** @domName HTMLAnchorElement.hostname */
+  String hostname;
+
+  /** @domName HTMLAnchorElement.href */
+  String href;
+
+  /** @domName HTMLAnchorElement.hreflang */
+  String hreflang;
+
+  /** @domName HTMLAnchorElement.name */
+  String name;
+
+  /** @domName HTMLAnchorElement.origin */
+  final String origin;
+
+  /** @domName HTMLAnchorElement.pathname */
+  String pathname;
+
+  /** @domName HTMLAnchorElement.ping */
+  String ping;
+
+  /** @domName HTMLAnchorElement.port */
+  String port;
+
+  /** @domName HTMLAnchorElement.protocol */
+  String protocol;
+
+  /** @domName HTMLAnchorElement.rel */
+  String rel;
+
+  /** @domName HTMLAnchorElement.rev */
+  String rev;
+
+  /** @domName HTMLAnchorElement.search */
+  String search;
+
+  /** @domName HTMLAnchorElement.shape */
+  String shape;
+
+  /** @domName HTMLAnchorElement.target */
+  String target;
+
+  /** @domName HTMLAnchorElement.type */
+  String type;
+
+  /** @domName HTMLAnchorElement.toString */
+  String toString() native;
+}
+
+/// @domName WebKitAnimation
+class Animation native "*WebKitAnimation" {
+
+  static const int DIRECTION_ALTERNATE = 1;
+
+  static const int DIRECTION_NORMAL = 0;
+
+  static const int FILL_BACKWARDS = 1;
+
+  static const int FILL_BOTH = 3;
+
+  static const int FILL_FORWARDS = 2;
+
+  static const int FILL_NONE = 0;
+
+  /** @domName WebKitAnimation.delay */
+  final num delay;
+
+  /** @domName WebKitAnimation.direction */
+  final int direction;
+
+  /** @domName WebKitAnimation.duration */
+  final num duration;
+
+  /** @domName WebKitAnimation.elapsedTime */
+  num elapsedTime;
+
+  /** @domName WebKitAnimation.ended */
+  final bool ended;
+
+  /** @domName WebKitAnimation.fillMode */
+  final int fillMode;
+
+  /** @domName WebKitAnimation.iterationCount */
+  final int iterationCount;
+
+  /** @domName WebKitAnimation.name */
+  final String name;
+
+  /** @domName WebKitAnimation.paused */
+  final bool paused;
+
+  /** @domName WebKitAnimation.pause */
+  void pause() native;
+
+  /** @domName WebKitAnimation.play */
+  void play() native;
+}
+
+/// @domName WebKitAnimationEvent
+class AnimationEvent extends Event native "*WebKitAnimationEvent" {
+
+  /** @domName WebKitAnimationEvent.animationName */
+  final String animationName;
+
+  /** @domName WebKitAnimationEvent.elapsedTime */
+  final num elapsedTime;
+}
+
+/// @domName HTMLAppletElement
+class AppletElement extends Element implements Element native "*HTMLAppletElement" {
+
+  /** @domName HTMLAppletElement.align */
+  String align;
+
+  /** @domName HTMLAppletElement.alt */
+  String alt;
+
+  /** @domName HTMLAppletElement.archive */
+  String archive;
+
+  /** @domName HTMLAppletElement.code */
+  String code;
+
+  /** @domName HTMLAppletElement.codeBase */
+  String codeBase;
+
+  /** @domName HTMLAppletElement.height */
+  String height;
+
+  /** @domName HTMLAppletElement.hspace */
+  String hspace;
+
+  /** @domName HTMLAppletElement.name */
+  String name;
+
+  /** @domName HTMLAppletElement.object */
+  String object;
+
+  /** @domName HTMLAppletElement.vspace */
+  String vspace;
+
+  /** @domName HTMLAppletElement.width */
+  String width;
+}
+
+/// @domName HTMLAreaElement
+class AreaElement extends Element implements Element native "*HTMLAreaElement" {
+
+  factory AreaElement() => _Elements.createAreaElement();
+
+  /** @domName HTMLAreaElement.alt */
+  String alt;
+
+  /** @domName HTMLAreaElement.coords */
+  String coords;
+
+  /** @domName HTMLAreaElement.hash */
+  final String hash;
+
+  /** @domName HTMLAreaElement.host */
+  final String host;
+
+  /** @domName HTMLAreaElement.hostname */
+  final String hostname;
+
+  /** @domName HTMLAreaElement.href */
+  String href;
+
+  /** @domName HTMLAreaElement.noHref */
+  bool noHref;
+
+  /** @domName HTMLAreaElement.pathname */
+  final String pathname;
+
+  /** @domName HTMLAreaElement.ping */
+  String ping;
+
+  /** @domName HTMLAreaElement.port */
+  final String port;
+
+  /** @domName HTMLAreaElement.protocol */
+  final String protocol;
+
+  /** @domName HTMLAreaElement.search */
+  final String search;
+
+  /** @domName HTMLAreaElement.shape */
+  String shape;
+
+  /** @domName HTMLAreaElement.target */
+  String target;
+}
+
+/// @domName ArrayBuffer
+class ArrayBuffer native "*ArrayBuffer" {
+
+  factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
+
+  /** @domName ArrayBuffer.byteLength */
+  final int byteLength;
+
+  /** @domName ArrayBuffer.slice */
+  ArrayBuffer slice(int begin, [int end]) native;
+}
+
+/// @domName ArrayBufferView
+class ArrayBufferView native "*ArrayBufferView" {
+
+  /** @domName ArrayBufferView.buffer */
+  final ArrayBuffer buffer;
+
+  /** @domName ArrayBufferView.byteLength */
+  final int byteLength;
+
+  /** @domName ArrayBufferView.byteOffset */
+  final int byteOffset;
+}
+
+/// @domName Attr
+class Attr extends Node native "*Attr" {
+
+  /** @domName Attr.isId */
+  final bool isId;
+
+  /** @domName Attr.name */
+  final String name;
+
+  /** @domName Attr.ownerElement */
+  final Element ownerElement;
+
+  /** @domName Attr.specified */
+  final bool specified;
+
+  /** @domName Attr.value */
+  String value;
+}
+
+/// @domName AudioBuffer
+class AudioBuffer native "*AudioBuffer" {
+
+  /** @domName AudioBuffer.duration */
+  final num duration;
+
+  /** @domName AudioBuffer.gain */
+  num gain;
+
+  /** @domName AudioBuffer.length */
+  final int length;
+
+  /** @domName AudioBuffer.numberOfChannels */
+  final int numberOfChannels;
+
+  /** @domName AudioBuffer.sampleRate */
+  final num sampleRate;
+
+  /** @domName AudioBuffer.getChannelData */
+  Float32Array getChannelData(int channelIndex) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void AudioBufferCallback(AudioBuffer audioBuffer);
+// 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 AudioBufferSourceNode extends AudioSourceNode native "*AudioBufferSourceNode" {
+
+  // TODO(efortuna): Remove these methods when Chrome stable also uses start
+  // instead of noteOn.
+  void start(num when, [num grainOffset, num grainDuration]) {
+    if (JS('bool', '!!#.start', this)) {
+      if (?grainDuration) {
+        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.start(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.start(#)', this, when);
+      }
+    } else {
+      if (?grainDuration) {
+        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
+      } else if (?grainOffset) {
+        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
+      } else {
+        JS('void', '#.noteOn(#)', this, when);
+      }
+    }
+  }
+
+  void stop(num when) {
+    if (JS('bool', '!!#.stop', this)) {
+      JS('void', '#.stop(#)', this, when);
+    } else {
+      JS('void', '#.noteOff(#)', this, when);
+    }
+  }
+
+  static const int FINISHED_STATE = 3;
+
+  static const int PLAYING_STATE = 2;
+
+  static const int SCHEDULED_STATE = 1;
+
+  static const int UNSCHEDULED_STATE = 0;
+
+  /** @domName AudioBufferSourceNode.buffer */
+  AudioBuffer buffer;
+
+  /** @domName AudioBufferSourceNode.gain */
+  final AudioGain gain;
+
+  /** @domName AudioBufferSourceNode.loop */
+  bool loop;
+
+  /** @domName AudioBufferSourceNode.loopEnd */
+  num loopEnd;
+
+  /** @domName AudioBufferSourceNode.loopStart */
+  num loopStart;
+
+  /** @domName AudioBufferSourceNode.playbackRate */
+  final AudioParam playbackRate;
+
+  /** @domName AudioBufferSourceNode.playbackState */
+  final int playbackState;
+
+}
+// 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 AudioContext extends EventTarget native "*AudioContext" {
+  factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  AudioContextEvents get on =>
+    new AudioContextEvents(this);
+
+  /** @domName AudioContext.activeSourceCount */
+  final int activeSourceCount;
+
+  /** @domName AudioContext.currentTime */
+  final num currentTime;
+
+  /** @domName AudioContext.destination */
+  final AudioDestinationNode destination;
+
+  /** @domName AudioContext.listener */
+  final AudioListener listener;
+
+  /** @domName AudioContext.sampleRate */
+  final num sampleRate;
+
+  /** @domName AudioContext.createAnalyser */
+  AnalyserNode createAnalyser() native;
+
+  /** @domName AudioContext.createBiquadFilter */
+  BiquadFilterNode createBiquadFilter() native;
+
+  /** @domName AudioContext.createBuffer */
+  AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]) native;
+
+  /** @domName AudioContext.createBufferSource */
+  AudioBufferSourceNode createBufferSource() native;
+
+  /** @domName AudioContext.createChannelMerger */
+  ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
+
+  /** @domName AudioContext.createChannelSplitter */
+  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
+
+  /** @domName AudioContext.createConvolver */
+  ConvolverNode createConvolver() native;
+
+  /** @domName AudioContext.createDelay */
+  DelayNode createDelay([num maxDelayTime]) native;
+
+  /** @domName AudioContext.createDynamicsCompressor */
+  DynamicsCompressorNode createDynamicsCompressor() native;
+
+  /** @domName AudioContext.createMediaElementSource */
+  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) native;
+
+  /** @domName AudioContext.createMediaStreamSource */
+  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) native;
+
+  /** @domName AudioContext.createOscillator */
+  OscillatorNode createOscillator() native;
+
+  /** @domName AudioContext.createPanner */
+  PannerNode createPanner() native;
+
+  /** @domName AudioContext.createWaveShaper */
+  WaveShaperNode createWaveShaper() native;
+
+  /** @domName AudioContext.createWaveTable */
+  WaveTable createWaveTable(Float32Array real, Float32Array imag) native;
+
+  /** @domName AudioContext.decodeAudioData */
+  void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native;
+
+  /** @domName AudioContext.startRendering */
+  void startRendering() native;
+
+  GainNode createGain() {
+    if (JS('bool', '#.createGain !== undefined', this)) {
+      return JS('GainNode', '#.createGain()', this);
+    } else {
+      return JS('GainNode', '#.createGainNode()', this);
+    }
+  }
+
+  ScriptProcessorNode createScriptProcessor(int bufferSize,
+      [int numberOfInputChannels, int numberOfOutputChannels]) {
+    var function = JS('dynamic', '#.createScriptProcessor || '
+        '#.createJavaScriptNode', this, this);
+    if (?numberOfOutputChannels) {
+      return JS('ScriptProcessorNode', '#.call(#, #, #, #)', function, this,
+          bufferSize, numberOfInputChannels, numberOfOutputChannels);
+    } else if (?numberOfInputChannels) {
+      return JS('ScriptProcessorNode', '#.call(#, #, #)', function, this,
+          bufferSize, numberOfInputChannels);
+    } else {
+      return JS('ScriptProcessorNode', '#.call(#, #)', function, this,
+          bufferSize);
+    }
+  }
+}
+
+class AudioContextEvents extends Events {
+  AudioContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get complete => this['complete'];
+}
+
+/// @domName AudioDestinationNode
+class AudioDestinationNode extends AudioNode native "*AudioDestinationNode" {
+
+  /** @domName AudioDestinationNode.numberOfChannels */
+  final int numberOfChannels;
+}
+
+/// @domName HTMLAudioElement
+class AudioElement extends MediaElement native "*HTMLAudioElement" {
+
+  factory AudioElement([String src]) {
+    if (!?src) {
+      return _AudioElementFactoryProvider.createAudioElement();
+    }
+    return _AudioElementFactoryProvider.createAudioElement(src);
+  }
+}
+
+/// @domName AudioGain
+class AudioGain extends AudioParam native "*AudioGain" {
+}
+
+/// @domName AudioListener
+class AudioListener native "*AudioListener" {
+
+  /** @domName AudioListener.dopplerFactor */
+  num dopplerFactor;
+
+  /** @domName AudioListener.speedOfSound */
+  num speedOfSound;
+
+  /** @domName AudioListener.setOrientation */
+  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native;
+
+  /** @domName AudioListener.setPosition */
+  void setPosition(num x, num y, num z) native;
+
+  /** @domName AudioListener.setVelocity */
+  void setVelocity(num x, num y, num z) native;
+}
+
+/// @domName AudioNode
+class AudioNode native "*AudioNode" {
+
+  /** @domName AudioNode.context */
+  final AudioContext context;
+
+  /** @domName AudioNode.numberOfInputs */
+  final int numberOfInputs;
+
+  /** @domName AudioNode.numberOfOutputs */
+  final int numberOfOutputs;
+
+  /** @domName AudioNode.connect */
+  void connect(destination, int output, [int input]) native;
+
+  /** @domName AudioNode.disconnect */
+  void disconnect(int output) native;
+}
+
+/// @domName AudioParam
+class AudioParam native "*AudioParam" {
+
+  /** @domName AudioParam.defaultValue */
+  final num defaultValue;
+
+  /** @domName AudioParam.maxValue */
+  final num maxValue;
+
+  /** @domName AudioParam.minValue */
+  final num minValue;
+
+  /** @domName AudioParam.name */
+  final String name;
+
+  /** @domName AudioParam.units */
+  final int units;
+
+  /** @domName AudioParam.value */
+  num value;
+
+  /** @domName AudioParam.cancelScheduledValues */
+  void cancelScheduledValues(num startTime) native;
+
+  /** @domName AudioParam.exponentialRampToValueAtTime */
+  void exponentialRampToValueAtTime(num value, num time) native;
+
+  /** @domName AudioParam.linearRampToValueAtTime */
+  void linearRampToValueAtTime(num value, num time) native;
+
+  /** @domName AudioParam.setTargetAtTime */
+  void setTargetAtTime(num target, num time, num timeConstant) native;
+
+  /** @domName AudioParam.setValueAtTime */
+  void setValueAtTime(num value, num time) native;
+
+  /** @domName AudioParam.setValueCurveAtTime */
+  void setValueCurveAtTime(Float32Array values, num time, num duration) native;
+}
+
+/// @domName AudioProcessingEvent
+class AudioProcessingEvent extends Event native "*AudioProcessingEvent" {
+
+  /** @domName AudioProcessingEvent.inputBuffer */
+  final AudioBuffer inputBuffer;
+
+  /** @domName AudioProcessingEvent.outputBuffer */
+  final AudioBuffer outputBuffer;
+}
+
+/// @domName AudioSourceNode
+class AudioSourceNode extends AudioNode native "*AudioSourceNode" {
+}
+
+/// @domName HTMLBRElement
+class BRElement extends Element implements Element native "*HTMLBRElement" {
+
+  factory BRElement() => _Elements.createBRElement();
+
+  /** @domName HTMLBRElement.clear */
+  String clear;
+}
+
+/// @domName BarInfo
+class BarInfo native "*BarInfo" {
+
+  /** @domName BarInfo.visible */
+  final bool visible;
+}
+
+/// @domName HTMLBaseElement
+class BaseElement extends Element implements Element native "*HTMLBaseElement" {
+
+  factory BaseElement() => _Elements.createBaseElement();
+
+  /** @domName HTMLBaseElement.href */
+  String href;
+
+  /** @domName HTMLBaseElement.target */
+  String target;
+}
+
+/// @domName HTMLBaseFontElement
+class BaseFontElement extends Element implements Element native "*HTMLBaseFontElement" {
+
+  /** @domName HTMLBaseFontElement.color */
+  String color;
+
+  /** @domName HTMLBaseFontElement.face */
+  String face;
+
+  /** @domName HTMLBaseFontElement.size */
+  int size;
+}
+
+/// @domName BatteryManager
+class BatteryManager extends EventTarget native "*BatteryManager" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  BatteryManagerEvents get on =>
+    new BatteryManagerEvents(this);
+
+  /** @domName BatteryManager.charging */
+  final bool charging;
+
+  /** @domName BatteryManager.chargingTime */
+  final num chargingTime;
+
+  /** @domName BatteryManager.dischargingTime */
+  final num dischargingTime;
+
+  /** @domName BatteryManager.level */
+  final num level;
+
+  /** @domName BatteryManager.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName BatteryManager.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName BatteryManager.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class BatteryManagerEvents extends Events {
+  BatteryManagerEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get chargingChange => this['chargingchange'];
+
+  EventListenerList get chargingTimeChange => this['chargingtimechange'];
+
+  EventListenerList get dischargingTimeChange => this['dischargingtimechange'];
+
+  EventListenerList get levelChange => this['levelchange'];
+}
+
+/// @domName BeforeLoadEvent
+class BeforeLoadEvent extends Event native "*BeforeLoadEvent" {
+
+  /** @domName BeforeLoadEvent.url */
+  final String url;
+}
+
+/// @domName BiquadFilterNode
+class BiquadFilterNode extends AudioNode native "*BiquadFilterNode" {
+
+  static const int ALLPASS = 7;
+
+  static const int BANDPASS = 2;
+
+  static const int HIGHPASS = 1;
+
+  static const int HIGHSHELF = 4;
+
+  static const int LOWPASS = 0;
+
+  static const int LOWSHELF = 3;
+
+  static const int NOTCH = 6;
+
+  static const int PEAKING = 5;
+
+  /** @domName BiquadFilterNode.Q */
+  final AudioParam Q;
+
+  /** @domName BiquadFilterNode.frequency */
+  final AudioParam frequency;
+
+  /** @domName BiquadFilterNode.gain */
+  final AudioParam gain;
+
+  /** @domName BiquadFilterNode.type */
+  int type;
+
+  /** @domName BiquadFilterNode.getFrequencyResponse */
+  void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse) native;
+}
+
+/// @domName Blob
+class Blob native "*Blob" {
+
+  factory Blob(List blobParts, [String type, String endings]) {
+    if (!?type) {
+      return _BlobFactoryProvider.createBlob(blobParts);
+    }
+    if (!?endings) {
+      return _BlobFactoryProvider.createBlob(blobParts, type);
+    }
+    return _BlobFactoryProvider.createBlob(blobParts, type, endings);
+  }
+
+  /** @domName Blob.size */
+  final int size;
+
+  /** @domName Blob.type */
+  final String type;
+
+  /** @domName Blob.slice */
+  Blob slice([int start, int end, String contentType]) native;
+}
+
+/// @domName HTMLBodyElement
+class BodyElement extends Element implements Element native "*HTMLBodyElement" {
+
+  factory BodyElement() => _Elements.createBodyElement();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  BodyElementEvents get on =>
+    new BodyElementEvents(this);
+
+  /** @domName HTMLBodyElement.aLink */
+  String aLink;
+
+  /** @domName HTMLBodyElement.background */
+  String background;
+
+  /** @domName HTMLBodyElement.bgColor */
+  String bgColor;
+
+  /** @domName HTMLBodyElement.link */
+  String link;
+
+  /** @domName HTMLBodyElement.vLink */
+  String vLink;
+}
+
+class BodyElementEvents extends ElementEvents {
+  BodyElementEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get beforeUnload => this['beforeunload'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get hashChange => this['hashchange'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get offline => this['offline'];
+
+  EventListenerList get online => this['online'];
+
+  EventListenerList get popState => this['popstate'];
+
+  EventListenerList get resize => this['resize'];
+
+  EventListenerList get storage => this['storage'];
+
+  EventListenerList get unload => this['unload'];
+}
+
+/// @domName HTMLButtonElement
+class ButtonElement extends Element implements Element native "*HTMLButtonElement" {
+
+  factory ButtonElement() => _Elements.createButtonElement();
+
+  /** @domName HTMLButtonElement.autofocus */
+  bool autofocus;
+
+  /** @domName HTMLButtonElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLButtonElement.form */
+  final FormElement form;
+
+  /** @domName HTMLButtonElement.formAction */
+  String formAction;
+
+  /** @domName HTMLButtonElement.formEnctype */
+  String formEnctype;
+
+  /** @domName HTMLButtonElement.formMethod */
+  String formMethod;
+
+  /** @domName HTMLButtonElement.formNoValidate */
+  bool formNoValidate;
+
+  /** @domName HTMLButtonElement.formTarget */
+  String formTarget;
+
+  /** @domName HTMLButtonElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLButtonElement.name */
+  String name;
+
+  /** @domName HTMLButtonElement.type */
+  String type;
+
+  /** @domName HTMLButtonElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLButtonElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLButtonElement.value */
+  String value;
+
+  /** @domName HTMLButtonElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLButtonElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLButtonElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+}
+
+/// @domName CDATASection
+class CDATASection extends Text native "*CDATASection" {
+}
+
+/// @domName CSSCharsetRule
+class CSSCharsetRule extends CSSRule native "*CSSCharsetRule" {
+
+  /** @domName CSSCharsetRule.encoding */
+  String encoding;
+}
+
+/// @domName CSSFontFaceRule
+class CSSFontFaceRule extends CSSRule native "*CSSFontFaceRule" {
+
+  /** @domName CSSFontFaceRule.style */
+  final CSSStyleDeclaration style;
+}
+
+/// @domName CSSImportRule
+class CSSImportRule extends CSSRule native "*CSSImportRule" {
+
+  /** @domName CSSImportRule.href */
+  final String href;
+
+  /** @domName CSSImportRule.media */
+  final MediaList media;
+
+  /** @domName CSSImportRule.styleSheet */
+  final CSSStyleSheet styleSheet;
+}
+
+/// @domName WebKitCSSKeyframeRule
+class CSSKeyframeRule extends CSSRule native "*WebKitCSSKeyframeRule" {
+
+  /** @domName WebKitCSSKeyframeRule.keyText */
+  String keyText;
+
+  /** @domName WebKitCSSKeyframeRule.style */
+  final CSSStyleDeclaration style;
+}
+
+/// @domName WebKitCSSKeyframesRule
+class CSSKeyframesRule extends CSSRule native "*WebKitCSSKeyframesRule" {
+
+  /** @domName WebKitCSSKeyframesRule.cssRules */
+  final List<CSSRule> cssRules;
+
+  /** @domName WebKitCSSKeyframesRule.name */
+  String name;
+
+  /** @domName WebKitCSSKeyframesRule.deleteRule */
+  void deleteRule(String key) native;
+
+  /** @domName WebKitCSSKeyframesRule.findRule */
+  CSSKeyframeRule findRule(String key) native;
+
+  /** @domName WebKitCSSKeyframesRule.insertRule */
+  void insertRule(String rule) native;
+}
+
+/// @domName WebKitCSSMatrix
+class CSSMatrix native "*WebKitCSSMatrix" {
+
+  factory CSSMatrix([String cssValue]) {
+    if (!?cssValue) {
+      return _CSSMatrixFactoryProvider.createCSSMatrix();
+    }
+    return _CSSMatrixFactoryProvider.createCSSMatrix(cssValue);
+  }
+
+  /** @domName WebKitCSSMatrix.a */
+  num a;
+
+  /** @domName WebKitCSSMatrix.b */
+  num b;
+
+  /** @domName WebKitCSSMatrix.c */
+  num c;
+
+  /** @domName WebKitCSSMatrix.d */
+  num d;
+
+  /** @domName WebKitCSSMatrix.e */
+  num e;
+
+  /** @domName WebKitCSSMatrix.f */
+  num f;
+
+  /** @domName WebKitCSSMatrix.m11 */
+  num m11;
+
+  /** @domName WebKitCSSMatrix.m12 */
+  num m12;
+
+  /** @domName WebKitCSSMatrix.m13 */
+  num m13;
+
+  /** @domName WebKitCSSMatrix.m14 */
+  num m14;
+
+  /** @domName WebKitCSSMatrix.m21 */
+  num m21;
+
+  /** @domName WebKitCSSMatrix.m22 */
+  num m22;
+
+  /** @domName WebKitCSSMatrix.m23 */
+  num m23;
+
+  /** @domName WebKitCSSMatrix.m24 */
+  num m24;
+
+  /** @domName WebKitCSSMatrix.m31 */
+  num m31;
+
+  /** @domName WebKitCSSMatrix.m32 */
+  num m32;
+
+  /** @domName WebKitCSSMatrix.m33 */
+  num m33;
+
+  /** @domName WebKitCSSMatrix.m34 */
+  num m34;
+
+  /** @domName WebKitCSSMatrix.m41 */
+  num m41;
+
+  /** @domName WebKitCSSMatrix.m42 */
+  num m42;
+
+  /** @domName WebKitCSSMatrix.m43 */
+  num m43;
+
+  /** @domName WebKitCSSMatrix.m44 */
+  num m44;
+
+  /** @domName WebKitCSSMatrix.inverse */
+  CSSMatrix inverse() native;
+
+  /** @domName WebKitCSSMatrix.multiply */
+  CSSMatrix multiply(CSSMatrix secondMatrix) native;
+
+  /** @domName WebKitCSSMatrix.rotate */
+  CSSMatrix rotate(num rotX, num rotY, num rotZ) native;
+
+  /** @domName WebKitCSSMatrix.rotateAxisAngle */
+  CSSMatrix rotateAxisAngle(num x, num y, num z, num angle) native;
+
+  /** @domName WebKitCSSMatrix.scale */
+  CSSMatrix scale(num scaleX, num scaleY, num scaleZ) native;
+
+  /** @domName WebKitCSSMatrix.setMatrixValue */
+  void setMatrixValue(String string) native;
+
+  /** @domName WebKitCSSMatrix.skewX */
+  CSSMatrix skewX(num angle) native;
+
+  /** @domName WebKitCSSMatrix.skewY */
+  CSSMatrix skewY(num angle) native;
+
+  /** @domName WebKitCSSMatrix.toString */
+  String toString() native;
+
+  /** @domName WebKitCSSMatrix.translate */
+  CSSMatrix translate(num x, num y, num z) native;
+}
+
+/// @domName CSSMediaRule
+class CSSMediaRule extends CSSRule native "*CSSMediaRule" {
+
+  /** @domName CSSMediaRule.cssRules */
+  final List<CSSRule> cssRules;
+
+  /** @domName CSSMediaRule.media */
+  final MediaList media;
+
+  /** @domName CSSMediaRule.deleteRule */
+  void deleteRule(int index) native;
+
+  /** @domName CSSMediaRule.insertRule */
+  int insertRule(String rule, int index) native;
+}
+
+/// @domName CSSPageRule
+class CSSPageRule extends CSSRule native "*CSSPageRule" {
+
+  /** @domName CSSPageRule.selectorText */
+  String selectorText;
+
+  /** @domName CSSPageRule.style */
+  final CSSStyleDeclaration style;
+}
+
+/// @domName CSSPrimitiveValue
+class CSSPrimitiveValue extends CSSValue native "*CSSPrimitiveValue" {
+
+  static const int CSS_ATTR = 22;
+
+  static const int CSS_CM = 6;
+
+  static const int CSS_COUNTER = 23;
+
+  static const int CSS_DEG = 11;
+
+  static const int CSS_DIMENSION = 18;
+
+  static const int CSS_EMS = 3;
+
+  static const int CSS_EXS = 4;
+
+  static const int CSS_GRAD = 13;
+
+  static const int CSS_HZ = 16;
+
+  static const int CSS_IDENT = 21;
+
+  static const int CSS_IN = 8;
+
+  static const int CSS_KHZ = 17;
+
+  static const int CSS_MM = 7;
+
+  static const int CSS_MS = 14;
+
+  static const int CSS_NUMBER = 1;
+
+  static const int CSS_PC = 10;
+
+  static const int CSS_PERCENTAGE = 2;
+
+  static const int CSS_PT = 9;
+
+  static const int CSS_PX = 5;
+
+  static const int CSS_RAD = 12;
+
+  static const int CSS_RECT = 24;
+
+  static const int CSS_RGBCOLOR = 25;
+
+  static const int CSS_S = 15;
+
+  static const int CSS_STRING = 19;
+
+  static const int CSS_UNKNOWN = 0;
+
+  static const int CSS_URI = 20;
+
+  static const int CSS_VH = 27;
+
+  static const int CSS_VMIN = 28;
+
+  static const int CSS_VW = 26;
+
+  /** @domName CSSPrimitiveValue.primitiveType */
+  final int primitiveType;
+
+  /** @domName CSSPrimitiveValue.getCounterValue */
+  Counter getCounterValue() native;
+
+  /** @domName CSSPrimitiveValue.getFloatValue */
+  num getFloatValue(int unitType) native;
+
+  /** @domName CSSPrimitiveValue.getRGBColorValue */
+  RGBColor getRGBColorValue() native;
+
+  /** @domName CSSPrimitiveValue.getRectValue */
+  Rect getRectValue() native;
+
+  /** @domName CSSPrimitiveValue.getStringValue */
+  String getStringValue() native;
+
+  /** @domName CSSPrimitiveValue.setFloatValue */
+  void setFloatValue(int unitType, num floatValue) native;
+
+  /** @domName CSSPrimitiveValue.setStringValue */
+  void setStringValue(int stringType, String stringValue) native;
+}
+
+/// @domName CSSRule
+class CSSRule native "*CSSRule" {
+
+  static const int CHARSET_RULE = 2;
+
+  static const int FONT_FACE_RULE = 5;
+
+  static const int IMPORT_RULE = 3;
+
+  static const int MEDIA_RULE = 4;
+
+  static const int PAGE_RULE = 6;
+
+  static const int STYLE_RULE = 1;
+
+  static const int UNKNOWN_RULE = 0;
+
+  static const int WEBKIT_KEYFRAMES_RULE = 7;
+
+  static const int WEBKIT_KEYFRAME_RULE = 8;
+
+  /** @domName CSSRule.cssText */
+  String cssText;
+
+  /** @domName CSSRule.parentRule */
+  final CSSRule parentRule;
+
+  /** @domName CSSRule.parentStyleSheet */
+  final CSSStyleSheet parentStyleSheet;
+
+  /** @domName CSSRule.type */
+  final int type;
+}
+// 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.
+
+String _cachedBrowserPrefix;
+
+String get _browserPrefix {
+  if (_cachedBrowserPrefix == null) {
+    if (_Device.isFirefox) {
+      _cachedBrowserPrefix = '-moz-';
+    } else if (_Device.isIE) {
+      _cachedBrowserPrefix = '-ms-';
+    } else if (_Device.isOpera) {
+      _cachedBrowserPrefix = '-o-';
+    } else {
+      _cachedBrowserPrefix = '-webkit-';
+    }
+  }
+  return _cachedBrowserPrefix;
+}
+
+class CSSStyleDeclaration native "*CSSStyleDeclaration" {
+  factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
+  factory CSSStyleDeclaration.css(String css) =>
+      _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration_css(css);
+
+
+  /** @domName CSSStyleDeclaration.cssText */
+  String cssText;
+
+  /** @domName CSSStyleDeclaration.length */
+  final int length;
+
+  /** @domName CSSStyleDeclaration.parentRule */
+  final CSSRule parentRule;
+
+  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
+  CSSValue getPropertyCSSValue(String propertyName) native;
+
+  /** @domName CSSStyleDeclaration.getPropertyPriority */
+  String getPropertyPriority(String propertyName) native;
+
+  /** @domName CSSStyleDeclaration.getPropertyShorthand */
+  String getPropertyShorthand(String propertyName) native;
+
+  /** @domName CSSStyleDeclaration._getPropertyValue */
+  String _getPropertyValue(String propertyName) native "getPropertyValue";
+
+  /** @domName CSSStyleDeclaration.isPropertyImplicit */
+  bool isPropertyImplicit(String propertyName) native;
+
+  /** @domName CSSStyleDeclaration.item */
+  String item(int index) native;
+
+  /** @domName CSSStyleDeclaration.removeProperty */
+  String removeProperty(String propertyName) native;
+
+
+  String getPropertyValue(String propertyName) {
+    var propValue = _getPropertyValue(propertyName);
+    return propValue != null ? propValue : '';
+  }
+
+  void setProperty(String propertyName, String value, [String priority]) {
+    JS('void', '#.setProperty(#, #, #)', this, propertyName, value, priority);
+    // Bug #2772, IE9 requires a poke to actually apply the value.
+    if (JS('bool', '!!#.setAttribute', this)) {
+      JS('void', '#.setAttribute(#, #)', this, propertyName, value);
+    }
+  }
+
+  // TODO(jacobr): generate this list of properties using the existing script.
+    /** Gets the value of "animation" */
+  String get animation =>
+    getPropertyValue('${_browserPrefix}animation');
+
+  /** Sets the value of "animation" */
+  void set animation(var value) {
+    setProperty('${_browserPrefix}animation', value, '');
+  }
+
+  /** Gets the value of "animation-delay" */
+  String get animationDelay =>
+    getPropertyValue('${_browserPrefix}animation-delay');
+
+  /** Sets the value of "animation-delay" */
+  void set animationDelay(var value) {
+    setProperty('${_browserPrefix}animation-delay', value, '');
+  }
+
+  /** Gets the value of "animation-direction" */
+  String get animationDirection =>
+    getPropertyValue('${_browserPrefix}animation-direction');
+
+  /** Sets the value of "animation-direction" */
+  void set animationDirection(var value) {
+    setProperty('${_browserPrefix}animation-direction', value, '');
+  }
+
+  /** Gets the value of "animation-duration" */
+  String get animationDuration =>
+    getPropertyValue('${_browserPrefix}animation-duration');
+
+  /** Sets the value of "animation-duration" */
+  void set animationDuration(var value) {
+    setProperty('${_browserPrefix}animation-duration', value, '');
+  }
+
+  /** Gets the value of "animation-fill-mode" */
+  String get animationFillMode =>
+    getPropertyValue('${_browserPrefix}animation-fill-mode');
+
+  /** Sets the value of "animation-fill-mode" */
+  void set animationFillMode(var value) {
+    setProperty('${_browserPrefix}animation-fill-mode', value, '');
+  }
+
+  /** Gets the value of "animation-iteration-count" */
+  String get animationIterationCount =>
+    getPropertyValue('${_browserPrefix}animation-iteration-count');
+
+  /** Sets the value of "animation-iteration-count" */
+  void set animationIterationCount(var value) {
+    setProperty('${_browserPrefix}animation-iteration-count', value, '');
+  }
+
+  /** Gets the value of "animation-name" */
+  String get animationName =>
+    getPropertyValue('${_browserPrefix}animation-name');
+
+  /** Sets the value of "animation-name" */
+  void set animationName(var value) {
+    setProperty('${_browserPrefix}animation-name', value, '');
+  }
+
+  /** Gets the value of "animation-play-state" */
+  String get animationPlayState =>
+    getPropertyValue('${_browserPrefix}animation-play-state');
+
+  /** Sets the value of "animation-play-state" */
+  void set animationPlayState(var value) {
+    setProperty('${_browserPrefix}animation-play-state', value, '');
+  }
+
+  /** Gets the value of "animation-timing-function" */
+  String get animationTimingFunction =>
+    getPropertyValue('${_browserPrefix}animation-timing-function');
+
+  /** Sets the value of "animation-timing-function" */
+  void set animationTimingFunction(var value) {
+    setProperty('${_browserPrefix}animation-timing-function', value, '');
+  }
+
+  /** Gets the value of "appearance" */
+  String get appearance =>
+    getPropertyValue('${_browserPrefix}appearance');
+
+  /** Sets the value of "appearance" */
+  void set appearance(var value) {
+    setProperty('${_browserPrefix}appearance', value, '');
+  }
+
+  /** Gets the value of "backface-visibility" */
+  String get backfaceVisibility =>
+    getPropertyValue('${_browserPrefix}backface-visibility');
+
+  /** Sets the value of "backface-visibility" */
+  void set backfaceVisibility(var value) {
+    setProperty('${_browserPrefix}backface-visibility', value, '');
+  }
+
+  /** Gets the value of "background" */
+  String get background =>
+    getPropertyValue('background');
+
+  /** Sets the value of "background" */
+  void set background(var value) {
+    setProperty('background', value, '');
+  }
+
+  /** Gets the value of "background-attachment" */
+  String get backgroundAttachment =>
+    getPropertyValue('background-attachment');
+
+  /** Sets the value of "background-attachment" */
+  void set backgroundAttachment(var value) {
+    setProperty('background-attachment', value, '');
+  }
+
+  /** Gets the value of "background-clip" */
+  String get backgroundClip =>
+    getPropertyValue('background-clip');
+
+  /** Sets the value of "background-clip" */
+  void set backgroundClip(var value) {
+    setProperty('background-clip', value, '');
+  }
+
+  /** Gets the value of "background-color" */
+  String get backgroundColor =>
+    getPropertyValue('background-color');
+
+  /** Sets the value of "background-color" */
+  void set backgroundColor(var value) {
+    setProperty('background-color', value, '');
+  }
+
+  /** Gets the value of "background-composite" */
+  String get backgroundComposite =>
+    getPropertyValue('${_browserPrefix}background-composite');
+
+  /** Sets the value of "background-composite" */
+  void set backgroundComposite(var value) {
+    setProperty('${_browserPrefix}background-composite', value, '');
+  }
+
+  /** Gets the value of "background-image" */
+  String get backgroundImage =>
+    getPropertyValue('background-image');
+
+  /** Sets the value of "background-image" */
+  void set backgroundImage(var value) {
+    setProperty('background-image', value, '');
+  }
+
+  /** Gets the value of "background-origin" */
+  String get backgroundOrigin =>
+    getPropertyValue('background-origin');
+
+  /** Sets the value of "background-origin" */
+  void set backgroundOrigin(var value) {
+    setProperty('background-origin', value, '');
+  }
+
+  /** Gets the value of "background-position" */
+  String get backgroundPosition =>
+    getPropertyValue('background-position');
+
+  /** Sets the value of "background-position" */
+  void set backgroundPosition(var value) {
+    setProperty('background-position', value, '');
+  }
+
+  /** Gets the value of "background-position-x" */
+  String get backgroundPositionX =>
+    getPropertyValue('background-position-x');
+
+  /** Sets the value of "background-position-x" */
+  void set backgroundPositionX(var value) {
+    setProperty('background-position-x', value, '');
+  }
+
+  /** Gets the value of "background-position-y" */
+  String get backgroundPositionY =>
+    getPropertyValue('background-position-y');
+
+  /** Sets the value of "background-position-y" */
+  void set backgroundPositionY(var value) {
+    setProperty('background-position-y', value, '');
+  }
+
+  /** Gets the value of "background-repeat" */
+  String get backgroundRepeat =>
+    getPropertyValue('background-repeat');
+
+  /** Sets the value of "background-repeat" */
+  void set backgroundRepeat(var value) {
+    setProperty('background-repeat', value, '');
+  }
+
+  /** Gets the value of "background-repeat-x" */
+  String get backgroundRepeatX =>
+    getPropertyValue('background-repeat-x');
+
+  /** Sets the value of "background-repeat-x" */
+  void set backgroundRepeatX(var value) {
+    setProperty('background-repeat-x', value, '');
+  }
+
+  /** Gets the value of "background-repeat-y" */
+  String get backgroundRepeatY =>
+    getPropertyValue('background-repeat-y');
+
+  /** Sets the value of "background-repeat-y" */
+  void set backgroundRepeatY(var value) {
+    setProperty('background-repeat-y', value, '');
+  }
+
+  /** Gets the value of "background-size" */
+  String get backgroundSize =>
+    getPropertyValue('background-size');
+
+  /** Sets the value of "background-size" */
+  void set backgroundSize(var value) {
+    setProperty('background-size', value, '');
+  }
+
+  /** Gets the value of "border" */
+  String get border =>
+    getPropertyValue('border');
+
+  /** Sets the value of "border" */
+  void set border(var value) {
+    setProperty('border', value, '');
+  }
+
+  /** Gets the value of "border-after" */
+  String get borderAfter =>
+    getPropertyValue('${_browserPrefix}border-after');
+
+  /** Sets the value of "border-after" */
+  void set borderAfter(var value) {
+    setProperty('${_browserPrefix}border-after', value, '');
+  }
+
+  /** Gets the value of "border-after-color" */
+  String get borderAfterColor =>
+    getPropertyValue('${_browserPrefix}border-after-color');
+
+  /** Sets the value of "border-after-color" */
+  void set borderAfterColor(var value) {
+    setProperty('${_browserPrefix}border-after-color', value, '');
+  }
+
+  /** Gets the value of "border-after-style" */
+  String get borderAfterStyle =>
+    getPropertyValue('${_browserPrefix}border-after-style');
+
+  /** Sets the value of "border-after-style" */
+  void set borderAfterStyle(var value) {
+    setProperty('${_browserPrefix}border-after-style', value, '');
+  }
+
+  /** Gets the value of "border-after-width" */
+  String get borderAfterWidth =>
+    getPropertyValue('${_browserPrefix}border-after-width');
+
+  /** Sets the value of "border-after-width" */
+  void set borderAfterWidth(var value) {
+    setProperty('${_browserPrefix}border-after-width', value, '');
+  }
+
+  /** Gets the value of "border-before" */
+  String get borderBefore =>
+    getPropertyValue('${_browserPrefix}border-before');
+
+  /** Sets the value of "border-before" */
+  void set borderBefore(var value) {
+    setProperty('${_browserPrefix}border-before', value, '');
+  }
+
+  /** Gets the value of "border-before-color" */
+  String get borderBeforeColor =>
+    getPropertyValue('${_browserPrefix}border-before-color');
+
+  /** Sets the value of "border-before-color" */
+  void set borderBeforeColor(var value) {
+    setProperty('${_browserPrefix}border-before-color', value, '');
+  }
+
+  /** Gets the value of "border-before-style" */
+  String get borderBeforeStyle =>
+    getPropertyValue('${_browserPrefix}border-before-style');
+
+  /** Sets the value of "border-before-style" */
+  void set borderBeforeStyle(var value) {
+    setProperty('${_browserPrefix}border-before-style', value, '');
+  }
+
+  /** Gets the value of "border-before-width" */
+  String get borderBeforeWidth =>
+    getPropertyValue('${_browserPrefix}border-before-width');
+
+  /** Sets the value of "border-before-width" */
+  void set borderBeforeWidth(var value) {
+    setProperty('${_browserPrefix}border-before-width', value, '');
+  }
+
+  /** Gets the value of "border-bottom" */
+  String get borderBottom =>
+    getPropertyValue('border-bottom');
+
+  /** Sets the value of "border-bottom" */
+  void set borderBottom(var value) {
+    setProperty('border-bottom', value, '');
+  }
+
+  /** Gets the value of "border-bottom-color" */
+  String get borderBottomColor =>
+    getPropertyValue('border-bottom-color');
+
+  /** Sets the value of "border-bottom-color" */
+  void set borderBottomColor(var value) {
+    setProperty('border-bottom-color', value, '');
+  }
+
+  /** Gets the value of "border-bottom-left-radius" */
+  String get borderBottomLeftRadius =>
+    getPropertyValue('border-bottom-left-radius');
+
+  /** Sets the value of "border-bottom-left-radius" */
+  void set borderBottomLeftRadius(var value) {
+    setProperty('border-bottom-left-radius', value, '');
+  }
+
+  /** Gets the value of "border-bottom-right-radius" */
+  String get borderBottomRightRadius =>
+    getPropertyValue('border-bottom-right-radius');
+
+  /** Sets the value of "border-bottom-right-radius" */
+  void set borderBottomRightRadius(var value) {
+    setProperty('border-bottom-right-radius', value, '');
+  }
+
+  /** Gets the value of "border-bottom-style" */
+  String get borderBottomStyle =>
+    getPropertyValue('border-bottom-style');
+
+  /** Sets the value of "border-bottom-style" */
+  void set borderBottomStyle(var value) {
+    setProperty('border-bottom-style', value, '');
+  }
+
+  /** Gets the value of "border-bottom-width" */
+  String get borderBottomWidth =>
+    getPropertyValue('border-bottom-width');
+
+  /** Sets the value of "border-bottom-width" */
+  void set borderBottomWidth(var value) {
+    setProperty('border-bottom-width', value, '');
+  }
+
+  /** Gets the value of "border-collapse" */
+  String get borderCollapse =>
+    getPropertyValue('border-collapse');
+
+  /** Sets the value of "border-collapse" */
+  void set borderCollapse(var value) {
+    setProperty('border-collapse', value, '');
+  }
+
+  /** Gets the value of "border-color" */
+  String get borderColor =>
+    getPropertyValue('border-color');
+
+  /** Sets the value of "border-color" */
+  void set borderColor(var value) {
+    setProperty('border-color', value, '');
+  }
+
+  /** Gets the value of "border-end" */
+  String get borderEnd =>
+    getPropertyValue('${_browserPrefix}border-end');
+
+  /** Sets the value of "border-end" */
+  void set borderEnd(var value) {
+    setProperty('${_browserPrefix}border-end', value, '');
+  }
+
+  /** Gets the value of "border-end-color" */
+  String get borderEndColor =>
+    getPropertyValue('${_browserPrefix}border-end-color');
+
+  /** Sets the value of "border-end-color" */
+  void set borderEndColor(var value) {
+    setProperty('${_browserPrefix}border-end-color', value, '');
+  }
+
+  /** Gets the value of "border-end-style" */
+  String get borderEndStyle =>
+    getPropertyValue('${_browserPrefix}border-end-style');
+
+  /** Sets the value of "border-end-style" */
+  void set borderEndStyle(var value) {
+    setProperty('${_browserPrefix}border-end-style', value, '');
+  }
+
+  /** Gets the value of "border-end-width" */
+  String get borderEndWidth =>
+    getPropertyValue('${_browserPrefix}border-end-width');
+
+  /** Sets the value of "border-end-width" */
+  void set borderEndWidth(var value) {
+    setProperty('${_browserPrefix}border-end-width', value, '');
+  }
+
+  /** Gets the value of "border-fit" */
+  String get borderFit =>
+    getPropertyValue('${_browserPrefix}border-fit');
+
+  /** Sets the value of "border-fit" */
+  void set borderFit(var value) {
+    setProperty('${_browserPrefix}border-fit', value, '');
+  }
+
+  /** Gets the value of "border-horizontal-spacing" */
+  String get borderHorizontalSpacing =>
+    getPropertyValue('${_browserPrefix}border-horizontal-spacing');
+
+  /** Sets the value of "border-horizontal-spacing" */
+  void set borderHorizontalSpacing(var value) {
+    setProperty('${_browserPrefix}border-horizontal-spacing', value, '');
+  }
+
+  /** Gets the value of "border-image" */
+  String get borderImage =>
+    getPropertyValue('border-image');
+
+  /** Sets the value of "border-image" */
+  void set borderImage(var value) {
+    setProperty('border-image', value, '');
+  }
+
+  /** Gets the value of "border-image-outset" */
+  String get borderImageOutset =>
+    getPropertyValue('border-image-outset');
+
+  /** Sets the value of "border-image-outset" */
+  void set borderImageOutset(var value) {
+    setProperty('border-image-outset', value, '');
+  }
+
+  /** Gets the value of "border-image-repeat" */
+  String get borderImageRepeat =>
+    getPropertyValue('border-image-repeat');
+
+  /** Sets the value of "border-image-repeat" */
+  void set borderImageRepeat(var value) {
+    setProperty('border-image-repeat', value, '');
+  }
+
+  /** Gets the value of "border-image-slice" */
+  String get borderImageSlice =>
+    getPropertyValue('border-image-slice');
+
+  /** Sets the value of "border-image-slice" */
+  void set borderImageSlice(var value) {
+    setProperty('border-image-slice', value, '');
+  }
+
+  /** Gets the value of "border-image-source" */
+  String get borderImageSource =>
+    getPropertyValue('border-image-source');
+
+  /** Sets the value of "border-image-source" */
+  void set borderImageSource(var value) {
+    setProperty('border-image-source', value, '');
+  }
+
+  /** Gets the value of "border-image-width" */
+  String get borderImageWidth =>
+    getPropertyValue('border-image-width');
+
+  /** Sets the value of "border-image-width" */
+  void set borderImageWidth(var value) {
+    setProperty('border-image-width', value, '');
+  }
+
+  /** Gets the value of "border-left" */
+  String get borderLeft =>
+    getPropertyValue('border-left');
+
+  /** Sets the value of "border-left" */
+  void set borderLeft(var value) {
+    setProperty('border-left', value, '');
+  }
+
+  /** Gets the value of "border-left-color" */
+  String get borderLeftColor =>
+    getPropertyValue('border-left-color');
+
+  /** Sets the value of "border-left-color" */
+  void set borderLeftColor(var value) {
+    setProperty('border-left-color', value, '');
+  }
+
+  /** Gets the value of "border-left-style" */
+  String get borderLeftStyle =>
+    getPropertyValue('border-left-style');
+
+  /** Sets the value of "border-left-style" */
+  void set borderLeftStyle(var value) {
+    setProperty('border-left-style', value, '');
+  }
+
+  /** Gets the value of "border-left-width" */
+  String get borderLeftWidth =>
+    getPropertyValue('border-left-width');
+
+  /** Sets the value of "border-left-width" */
+  void set borderLeftWidth(var value) {
+    setProperty('border-left-width', value, '');
+  }
+
+  /** Gets the value of "border-radius" */
+  String get borderRadius =>
+    getPropertyValue('border-radius');
+
+  /** Sets the value of "border-radius" */
+  void set borderRadius(var value) {
+    setProperty('border-radius', value, '');
+  }
+
+  /** Gets the value of "border-right" */
+  String get borderRight =>
+    getPropertyValue('border-right');
+
+  /** Sets the value of "border-right" */
+  void set borderRight(var value) {
+    setProperty('border-right', value, '');
+  }
+
+  /** Gets the value of "border-right-color" */
+  String get borderRightColor =>
+    getPropertyValue('border-right-color');
+
+  /** Sets the value of "border-right-color" */
+  void set borderRightColor(var value) {
+    setProperty('border-right-color', value, '');
+  }
+
+  /** Gets the value of "border-right-style" */
+  String get borderRightStyle =>
+    getPropertyValue('border-right-style');
+
+  /** Sets the value of "border-right-style" */
+  void set borderRightStyle(var value) {
+    setProperty('border-right-style', value, '');
+  }
+
+  /** Gets the value of "border-right-width" */
+  String get borderRightWidth =>
+    getPropertyValue('border-right-width');
+
+  /** Sets the value of "border-right-width" */
+  void set borderRightWidth(var value) {
+    setProperty('border-right-width', value, '');
+  }
+
+  /** Gets the value of "border-spacing" */
+  String get borderSpacing =>
+    getPropertyValue('border-spacing');
+
+  /** Sets the value of "border-spacing" */
+  void set borderSpacing(var value) {
+    setProperty('border-spacing', value, '');
+  }
+
+  /** Gets the value of "border-start" */
+  String get borderStart =>
+    getPropertyValue('${_browserPrefix}border-start');
+
+  /** Sets the value of "border-start" */
+  void set borderStart(var value) {
+    setProperty('${_browserPrefix}border-start', value, '');
+  }
+
+  /** Gets the value of "border-start-color" */
+  String get borderStartColor =>
+    getPropertyValue('${_browserPrefix}border-start-color');
+
+  /** Sets the value of "border-start-color" */
+  void set borderStartColor(var value) {
+    setProperty('${_browserPrefix}border-start-color', value, '');
+  }
+
+  /** Gets the value of "border-start-style" */
+  String get borderStartStyle =>
+    getPropertyValue('${_browserPrefix}border-start-style');
+
+  /** Sets the value of "border-start-style" */
+  void set borderStartStyle(var value) {
+    setProperty('${_browserPrefix}border-start-style', value, '');
+  }
+
+  /** Gets the value of "border-start-width" */
+  String get borderStartWidth =>
+    getPropertyValue('${_browserPrefix}border-start-width');
+
+  /** Sets the value of "border-start-width" */
+  void set borderStartWidth(var value) {
+    setProperty('${_browserPrefix}border-start-width', value, '');
+  }
+
+  /** Gets the value of "border-style" */
+  String get borderStyle =>
+    getPropertyValue('border-style');
+
+  /** Sets the value of "border-style" */
+  void set borderStyle(var value) {
+    setProperty('border-style', value, '');
+  }
+
+  /** Gets the value of "border-top" */
+  String get borderTop =>
+    getPropertyValue('border-top');
+
+  /** Sets the value of "border-top" */
+  void set borderTop(var value) {
+    setProperty('border-top', value, '');
+  }
+
+  /** Gets the value of "border-top-color" */
+  String get borderTopColor =>
+    getPropertyValue('border-top-color');
+
+  /** Sets the value of "border-top-color" */
+  void set borderTopColor(var value) {
+    setProperty('border-top-color', value, '');
+  }
+
+  /** Gets the value of "border-top-left-radius" */
+  String get borderTopLeftRadius =>
+    getPropertyValue('border-top-left-radius');
+
+  /** Sets the value of "border-top-left-radius" */
+  void set borderTopLeftRadius(var value) {
+    setProperty('border-top-left-radius', value, '');
+  }
+
+  /** Gets the value of "border-top-right-radius" */
+  String get borderTopRightRadius =>
+    getPropertyValue('border-top-right-radius');
+
+  /** Sets the value of "border-top-right-radius" */
+  void set borderTopRightRadius(var value) {
+    setProperty('border-top-right-radius', value, '');
+  }
+
+  /** Gets the value of "border-top-style" */
+  String get borderTopStyle =>
+    getPropertyValue('border-top-style');
+
+  /** Sets the value of "border-top-style" */
+  void set borderTopStyle(var value) {
+    setProperty('border-top-style', value, '');
+  }
+
+  /** Gets the value of "border-top-width" */
+  String get borderTopWidth =>
+    getPropertyValue('border-top-width');
+
+  /** Sets the value of "border-top-width" */
+  void set borderTopWidth(var value) {
+    setProperty('border-top-width', value, '');
+  }
+
+  /** Gets the value of "border-vertical-spacing" */
+  String get borderVerticalSpacing =>
+    getPropertyValue('${_browserPrefix}border-vertical-spacing');
+
+  /** Sets the value of "border-vertical-spacing" */
+  void set borderVerticalSpacing(var value) {
+    setProperty('${_browserPrefix}border-vertical-spacing', value, '');
+  }
+
+  /** Gets the value of "border-width" */
+  String get borderWidth =>
+    getPropertyValue('border-width');
+
+  /** Sets the value of "border-width" */
+  void set borderWidth(var value) {
+    setProperty('border-width', value, '');
+  }
+
+  /** Gets the value of "bottom" */
+  String get bottom =>
+    getPropertyValue('bottom');
+
+  /** Sets the value of "bottom" */
+  void set bottom(var value) {
+    setProperty('bottom', value, '');
+  }
+
+  /** Gets the value of "box-align" */
+  String get boxAlign =>
+    getPropertyValue('${_browserPrefix}box-align');
+
+  /** Sets the value of "box-align" */
+  void set boxAlign(var value) {
+    setProperty('${_browserPrefix}box-align', value, '');
+  }
+
+  /** Gets the value of "box-direction" */
+  String get boxDirection =>
+    getPropertyValue('${_browserPrefix}box-direction');
+
+  /** Sets the value of "box-direction" */
+  void set boxDirection(var value) {
+    setProperty('${_browserPrefix}box-direction', value, '');
+  }
+
+  /** Gets the value of "box-flex" */
+  String get boxFlex =>
+    getPropertyValue('${_browserPrefix}box-flex');
+
+  /** Sets the value of "box-flex" */
+  void set boxFlex(var value) {
+    setProperty('${_browserPrefix}box-flex', value, '');
+  }
+
+  /** Gets the value of "box-flex-group" */
+  String get boxFlexGroup =>
+    getPropertyValue('${_browserPrefix}box-flex-group');
+
+  /** Sets the value of "box-flex-group" */
+  void set boxFlexGroup(var value) {
+    setProperty('${_browserPrefix}box-flex-group', value, '');
+  }
+
+  /** Gets the value of "box-lines" */
+  String get boxLines =>
+    getPropertyValue('${_browserPrefix}box-lines');
+
+  /** Sets the value of "box-lines" */
+  void set boxLines(var value) {
+    setProperty('${_browserPrefix}box-lines', value, '');
+  }
+
+  /** Gets the value of "box-ordinal-group" */
+  String get boxOrdinalGroup =>
+    getPropertyValue('${_browserPrefix}box-ordinal-group');
+
+  /** Sets the value of "box-ordinal-group" */
+  void set boxOrdinalGroup(var value) {
+    setProperty('${_browserPrefix}box-ordinal-group', value, '');
+  }
+
+  /** Gets the value of "box-orient" */
+  String get boxOrient =>
+    getPropertyValue('${_browserPrefix}box-orient');
+
+  /** Sets the value of "box-orient" */
+  void set boxOrient(var value) {
+    setProperty('${_browserPrefix}box-orient', value, '');
+  }
+
+  /** Gets the value of "box-pack" */
+  String get boxPack =>
+    getPropertyValue('${_browserPrefix}box-pack');
+
+  /** Sets the value of "box-pack" */
+  void set boxPack(var value) {
+    setProperty('${_browserPrefix}box-pack', value, '');
+  }
+
+  /** Gets the value of "box-reflect" */
+  String get boxReflect =>
+    getPropertyValue('${_browserPrefix}box-reflect');
+
+  /** Sets the value of "box-reflect" */
+  void set boxReflect(var value) {
+    setProperty('${_browserPrefix}box-reflect', value, '');
+  }
+
+  /** Gets the value of "box-shadow" */
+  String get boxShadow =>
+    getPropertyValue('box-shadow');
+
+  /** Sets the value of "box-shadow" */
+  void set boxShadow(var value) {
+    setProperty('box-shadow', value, '');
+  }
+
+  /** Gets the value of "box-sizing" */
+  String get boxSizing =>
+    getPropertyValue('box-sizing');
+
+  /** Sets the value of "box-sizing" */
+  void set boxSizing(var value) {
+    setProperty('box-sizing', value, '');
+  }
+
+  /** Gets the value of "caption-side" */
+  String get captionSide =>
+    getPropertyValue('caption-side');
+
+  /** Sets the value of "caption-side" */
+  void set captionSide(var value) {
+    setProperty('caption-side', value, '');
+  }
+
+  /** Gets the value of "clear" */
+  String get clear =>
+    getPropertyValue('clear');
+
+  /** Sets the value of "clear" */
+  void set clear(var value) {
+    setProperty('clear', value, '');
+  }
+
+  /** Gets the value of "clip" */
+  String get clip =>
+    getPropertyValue('clip');
+
+  /** Sets the value of "clip" */
+  void set clip(var value) {
+    setProperty('clip', value, '');
+  }
+
+  /** Gets the value of "color" */
+  String get color =>
+    getPropertyValue('color');
+
+  /** Sets the value of "color" */
+  void set color(var value) {
+    setProperty('color', value, '');
+  }
+
+  /** Gets the value of "color-correction" */
+  String get colorCorrection =>
+    getPropertyValue('${_browserPrefix}color-correction');
+
+  /** Sets the value of "color-correction" */
+  void set colorCorrection(var value) {
+    setProperty('${_browserPrefix}color-correction', value, '');
+  }
+
+  /** Gets the value of "column-break-after" */
+  String get columnBreakAfter =>
+    getPropertyValue('${_browserPrefix}column-break-after');
+
+  /** Sets the value of "column-break-after" */
+  void set columnBreakAfter(var value) {
+    setProperty('${_browserPrefix}column-break-after', value, '');
+  }
+
+  /** Gets the value of "column-break-before" */
+  String get columnBreakBefore =>
+    getPropertyValue('${_browserPrefix}column-break-before');
+
+  /** Sets the value of "column-break-before" */
+  void set columnBreakBefore(var value) {
+    setProperty('${_browserPrefix}column-break-before', value, '');
+  }
+
+  /** Gets the value of "column-break-inside" */
+  String get columnBreakInside =>
+    getPropertyValue('${_browserPrefix}column-break-inside');
+
+  /** Sets the value of "column-break-inside" */
+  void set columnBreakInside(var value) {
+    setProperty('${_browserPrefix}column-break-inside', value, '');
+  }
+
+  /** Gets the value of "column-count" */
+  String get columnCount =>
+    getPropertyValue('${_browserPrefix}column-count');
+
+  /** Sets the value of "column-count" */
+  void set columnCount(var value) {
+    setProperty('${_browserPrefix}column-count', value, '');
+  }
+
+  /** Gets the value of "column-gap" */
+  String get columnGap =>
+    getPropertyValue('${_browserPrefix}column-gap');
+
+  /** Sets the value of "column-gap" */
+  void set columnGap(var value) {
+    setProperty('${_browserPrefix}column-gap', value, '');
+  }
+
+  /** Gets the value of "column-rule" */
+  String get columnRule =>
+    getPropertyValue('${_browserPrefix}column-rule');
+
+  /** Sets the value of "column-rule" */
+  void set columnRule(var value) {
+    setProperty('${_browserPrefix}column-rule', value, '');
+  }
+
+  /** Gets the value of "column-rule-color" */
+  String get columnRuleColor =>
+    getPropertyValue('${_browserPrefix}column-rule-color');
+
+  /** Sets the value of "column-rule-color" */
+  void set columnRuleColor(var value) {
+    setProperty('${_browserPrefix}column-rule-color', value, '');
+  }
+
+  /** Gets the value of "column-rule-style" */
+  String get columnRuleStyle =>
+    getPropertyValue('${_browserPrefix}column-rule-style');
+
+  /** Sets the value of "column-rule-style" */
+  void set columnRuleStyle(var value) {
+    setProperty('${_browserPrefix}column-rule-style', value, '');
+  }
+
+  /** Gets the value of "column-rule-width" */
+  String get columnRuleWidth =>
+    getPropertyValue('${_browserPrefix}column-rule-width');
+
+  /** Sets the value of "column-rule-width" */
+  void set columnRuleWidth(var value) {
+    setProperty('${_browserPrefix}column-rule-width', value, '');
+  }
+
+  /** Gets the value of "column-span" */
+  String get columnSpan =>
+    getPropertyValue('${_browserPrefix}column-span');
+
+  /** Sets the value of "column-span" */
+  void set columnSpan(var value) {
+    setProperty('${_browserPrefix}column-span', value, '');
+  }
+
+  /** Gets the value of "column-width" */
+  String get columnWidth =>
+    getPropertyValue('${_browserPrefix}column-width');
+
+  /** Sets the value of "column-width" */
+  void set columnWidth(var value) {
+    setProperty('${_browserPrefix}column-width', value, '');
+  }
+
+  /** Gets the value of "columns" */
+  String get columns =>
+    getPropertyValue('${_browserPrefix}columns');
+
+  /** Sets the value of "columns" */
+  void set columns(var value) {
+    setProperty('${_browserPrefix}columns', value, '');
+  }
+
+  /** Gets the value of "content" */
+  String get content =>
+    getPropertyValue('content');
+
+  /** Sets the value of "content" */
+  void set content(var value) {
+    setProperty('content', value, '');
+  }
+
+  /** Gets the value of "counter-increment" */
+  String get counterIncrement =>
+    getPropertyValue('counter-increment');
+
+  /** Sets the value of "counter-increment" */
+  void set counterIncrement(var value) {
+    setProperty('counter-increment', value, '');
+  }
+
+  /** Gets the value of "counter-reset" */
+  String get counterReset =>
+    getPropertyValue('counter-reset');
+
+  /** Sets the value of "counter-reset" */
+  void set counterReset(var value) {
+    setProperty('counter-reset', value, '');
+  }
+
+  /** Gets the value of "cursor" */
+  String get cursor =>
+    getPropertyValue('cursor');
+
+  /** Sets the value of "cursor" */
+  void set cursor(var value) {
+    setProperty('cursor', value, '');
+  }
+
+  /** Gets the value of "direction" */
+  String get direction =>
+    getPropertyValue('direction');
+
+  /** Sets the value of "direction" */
+  void set direction(var value) {
+    setProperty('direction', value, '');
+  }
+
+  /** Gets the value of "display" */
+  String get display =>
+    getPropertyValue('display');
+
+  /** Sets the value of "display" */
+  void set display(var value) {
+    setProperty('display', value, '');
+  }
+
+  /** Gets the value of "empty-cells" */
+  String get emptyCells =>
+    getPropertyValue('empty-cells');
+
+  /** Sets the value of "empty-cells" */
+  void set emptyCells(var value) {
+    setProperty('empty-cells', value, '');
+  }
+
+  /** Gets the value of "filter" */
+  String get filter =>
+    getPropertyValue('${_browserPrefix}filter');
+
+  /** Sets the value of "filter" */
+  void set filter(var value) {
+    setProperty('${_browserPrefix}filter', value, '');
+  }
+
+  /** Gets the value of "flex-align" */
+  String get flexAlign =>
+    getPropertyValue('${_browserPrefix}flex-align');
+
+  /** Sets the value of "flex-align" */
+  void set flexAlign(var value) {
+    setProperty('${_browserPrefix}flex-align', value, '');
+  }
+
+  /** Gets the value of "flex-flow" */
+  String get flexFlow =>
+    getPropertyValue('${_browserPrefix}flex-flow');
+
+  /** Sets the value of "flex-flow" */
+  void set flexFlow(var value) {
+    setProperty('${_browserPrefix}flex-flow', value, '');
+  }
+
+  /** Gets the value of "flex-order" */
+  String get flexOrder =>
+    getPropertyValue('${_browserPrefix}flex-order');
+
+  /** Sets the value of "flex-order" */
+  void set flexOrder(var value) {
+    setProperty('${_browserPrefix}flex-order', value, '');
+  }
+
+  /** Gets the value of "flex-pack" */
+  String get flexPack =>
+    getPropertyValue('${_browserPrefix}flex-pack');
+
+  /** Sets the value of "flex-pack" */
+  void set flexPack(var value) {
+    setProperty('${_browserPrefix}flex-pack', value, '');
+  }
+
+  /** Gets the value of "float" */
+  String get float =>
+    getPropertyValue('float');
+
+  /** Sets the value of "float" */
+  void set float(var value) {
+    setProperty('float', value, '');
+  }
+
+  /** Gets the value of "flow-from" */
+  String get flowFrom =>
+    getPropertyValue('${_browserPrefix}flow-from');
+
+  /** Sets the value of "flow-from" */
+  void set flowFrom(var value) {
+    setProperty('${_browserPrefix}flow-from', value, '');
+  }
+
+  /** Gets the value of "flow-into" */
+  String get flowInto =>
+    getPropertyValue('${_browserPrefix}flow-into');
+
+  /** Sets the value of "flow-into" */
+  void set flowInto(var value) {
+    setProperty('${_browserPrefix}flow-into', value, '');
+  }
+
+  /** Gets the value of "font" */
+  String get font =>
+    getPropertyValue('font');
+
+  /** Sets the value of "font" */
+  void set font(var value) {
+    setProperty('font', value, '');
+  }
+
+  /** Gets the value of "font-family" */
+  String get fontFamily =>
+    getPropertyValue('font-family');
+
+  /** Sets the value of "font-family" */
+  void set fontFamily(var value) {
+    setProperty('font-family', value, '');
+  }
+
+  /** Gets the value of "font-feature-settings" */
+  String get fontFeatureSettings =>
+    getPropertyValue('${_browserPrefix}font-feature-settings');
+
+  /** Sets the value of "font-feature-settings" */
+  void set fontFeatureSettings(var value) {
+    setProperty('${_browserPrefix}font-feature-settings', value, '');
+  }
+
+  /** Gets the value of "font-size" */
+  String get fontSize =>
+    getPropertyValue('font-size');
+
+  /** Sets the value of "font-size" */
+  void set fontSize(var value) {
+    setProperty('font-size', value, '');
+  }
+
+  /** Gets the value of "font-size-delta" */
+  String get fontSizeDelta =>
+    getPropertyValue('${_browserPrefix}font-size-delta');
+
+  /** Sets the value of "font-size-delta" */
+  void set fontSizeDelta(var value) {
+    setProperty('${_browserPrefix}font-size-delta', value, '');
+  }
+
+  /** Gets the value of "font-smoothing" */
+  String get fontSmoothing =>
+    getPropertyValue('${_browserPrefix}font-smoothing');
+
+  /** Sets the value of "font-smoothing" */
+  void set fontSmoothing(var value) {
+    setProperty('${_browserPrefix}font-smoothing', value, '');
+  }
+
+  /** Gets the value of "font-stretch" */
+  String get fontStretch =>
+    getPropertyValue('font-stretch');
+
+  /** Sets the value of "font-stretch" */
+  void set fontStretch(var value) {
+    setProperty('font-stretch', value, '');
+  }
+
+  /** Gets the value of "font-style" */
+  String get fontStyle =>
+    getPropertyValue('font-style');
+
+  /** Sets the value of "font-style" */
+  void set fontStyle(var value) {
+    setProperty('font-style', value, '');
+  }
+
+  /** Gets the value of "font-variant" */
+  String get fontVariant =>
+    getPropertyValue('font-variant');
+
+  /** Sets the value of "font-variant" */
+  void set fontVariant(var value) {
+    setProperty('font-variant', value, '');
+  }
+
+  /** Gets the value of "font-weight" */
+  String get fontWeight =>
+    getPropertyValue('font-weight');
+
+  /** Sets the value of "font-weight" */
+  void set fontWeight(var value) {
+    setProperty('font-weight', value, '');
+  }
+
+  /** Gets the value of "height" */
+  String get height =>
+    getPropertyValue('height');
+
+  /** Sets the value of "height" */
+  void set height(var value) {
+    setProperty('height', value, '');
+  }
+
+  /** Gets the value of "highlight" */
+  String get highlight =>
+    getPropertyValue('${_browserPrefix}highlight');
+
+  /** Sets the value of "highlight" */
+  void set highlight(var value) {
+    setProperty('${_browserPrefix}highlight', value, '');
+  }
+
+  /** Gets the value of "hyphenate-character" */
+  String get hyphenateCharacter =>
+    getPropertyValue('${_browserPrefix}hyphenate-character');
+
+  /** Sets the value of "hyphenate-character" */
+  void set hyphenateCharacter(var value) {
+    setProperty('${_browserPrefix}hyphenate-character', value, '');
+  }
+
+  /** Gets the value of "hyphenate-limit-after" */
+  String get hyphenateLimitAfter =>
+    getPropertyValue('${_browserPrefix}hyphenate-limit-after');
+
+  /** Sets the value of "hyphenate-limit-after" */
+  void set hyphenateLimitAfter(var value) {
+    setProperty('${_browserPrefix}hyphenate-limit-after', value, '');
+  }
+
+  /** Gets the value of "hyphenate-limit-before" */
+  String get hyphenateLimitBefore =>
+    getPropertyValue('${_browserPrefix}hyphenate-limit-before');
+
+  /** Sets the value of "hyphenate-limit-before" */
+  void set hyphenateLimitBefore(var value) {
+    setProperty('${_browserPrefix}hyphenate-limit-before', value, '');
+  }
+
+  /** Gets the value of "hyphenate-limit-lines" */
+  String get hyphenateLimitLines =>
+    getPropertyValue('${_browserPrefix}hyphenate-limit-lines');
+
+  /** Sets the value of "hyphenate-limit-lines" */
+  void set hyphenateLimitLines(var value) {
+    setProperty('${_browserPrefix}hyphenate-limit-lines', value, '');
+  }
+
+  /** Gets the value of "hyphens" */
+  String get hyphens =>
+    getPropertyValue('${_browserPrefix}hyphens');
+
+  /** Sets the value of "hyphens" */
+  void set hyphens(var value) {
+    setProperty('${_browserPrefix}hyphens', value, '');
+  }
+
+  /** Gets the value of "image-rendering" */
+  String get imageRendering =>
+    getPropertyValue('image-rendering');
+
+  /** Sets the value of "image-rendering" */
+  void set imageRendering(var value) {
+    setProperty('image-rendering', value, '');
+  }
+
+  /** Gets the value of "left" */
+  String get left =>
+    getPropertyValue('left');
+
+  /** Sets the value of "left" */
+  void set left(var value) {
+    setProperty('left', value, '');
+  }
+
+  /** Gets the value of "letter-spacing" */
+  String get letterSpacing =>
+    getPropertyValue('letter-spacing');
+
+  /** Sets the value of "letter-spacing" */
+  void set letterSpacing(var value) {
+    setProperty('letter-spacing', value, '');
+  }
+
+  /** Gets the value of "line-box-contain" */
+  String get lineBoxContain =>
+    getPropertyValue('${_browserPrefix}line-box-contain');
+
+  /** Sets the value of "line-box-contain" */
+  void set lineBoxContain(var value) {
+    setProperty('${_browserPrefix}line-box-contain', value, '');
+  }
+
+  /** Gets the value of "line-break" */
+  String get lineBreak =>
+    getPropertyValue('${_browserPrefix}line-break');
+
+  /** Sets the value of "line-break" */
+  void set lineBreak(var value) {
+    setProperty('${_browserPrefix}line-break', value, '');
+  }
+
+  /** Gets the value of "line-clamp" */
+  String get lineClamp =>
+    getPropertyValue('${_browserPrefix}line-clamp');
+
+  /** Sets the value of "line-clamp" */
+  void set lineClamp(var value) {
+    setProperty('${_browserPrefix}line-clamp', value, '');
+  }
+
+  /** Gets the value of "line-height" */
+  String get lineHeight =>
+    getPropertyValue('line-height');
+
+  /** Sets the value of "line-height" */
+  void set lineHeight(var value) {
+    setProperty('line-height', value, '');
+  }
+
+  /** Gets the value of "list-style" */
+  String get listStyle =>
+    getPropertyValue('list-style');
+
+  /** Sets the value of "list-style" */
+  void set listStyle(var value) {
+    setProperty('list-style', value, '');
+  }
+
+  /** Gets the value of "list-style-image" */
+  String get listStyleImage =>
+    getPropertyValue('list-style-image');
+
+  /** Sets the value of "list-style-image" */
+  void set listStyleImage(var value) {
+    setProperty('list-style-image', value, '');
+  }
+
+  /** Gets the value of "list-style-position" */
+  String get listStylePosition =>
+    getPropertyValue('list-style-position');
+
+  /** Sets the value of "list-style-position" */
+  void set listStylePosition(var value) {
+    setProperty('list-style-position', value, '');
+  }
+
+  /** Gets the value of "list-style-type" */
+  String get listStyleType =>
+    getPropertyValue('list-style-type');
+
+  /** Sets the value of "list-style-type" */
+  void set listStyleType(var value) {
+    setProperty('list-style-type', value, '');
+  }
+
+  /** Gets the value of "locale" */
+  String get locale =>
+    getPropertyValue('${_browserPrefix}locale');
+
+  /** Sets the value of "locale" */
+  void set locale(var value) {
+    setProperty('${_browserPrefix}locale', value, '');
+  }
+
+  /** Gets the value of "logical-height" */
+  String get logicalHeight =>
+    getPropertyValue('${_browserPrefix}logical-height');
+
+  /** Sets the value of "logical-height" */
+  void set logicalHeight(var value) {
+    setProperty('${_browserPrefix}logical-height', value, '');
+  }
+
+  /** Gets the value of "logical-width" */
+  String get logicalWidth =>
+    getPropertyValue('${_browserPrefix}logical-width');
+
+  /** Sets the value of "logical-width" */
+  void set logicalWidth(var value) {
+    setProperty('${_browserPrefix}logical-width', value, '');
+  }
+
+  /** Gets the value of "margin" */
+  String get margin =>
+    getPropertyValue('margin');
+
+  /** Sets the value of "margin" */
+  void set margin(var value) {
+    setProperty('margin', value, '');
+  }
+
+  /** Gets the value of "margin-after" */
+  String get marginAfter =>
+    getPropertyValue('${_browserPrefix}margin-after');
+
+  /** Sets the value of "margin-after" */
+  void set marginAfter(var value) {
+    setProperty('${_browserPrefix}margin-after', value, '');
+  }
+
+  /** Gets the value of "margin-after-collapse" */
+  String get marginAfterCollapse =>
+    getPropertyValue('${_browserPrefix}margin-after-collapse');
+
+  /** Sets the value of "margin-after-collapse" */
+  void set marginAfterCollapse(var value) {
+    setProperty('${_browserPrefix}margin-after-collapse', value, '');
+  }
+
+  /** Gets the value of "margin-before" */
+  String get marginBefore =>
+    getPropertyValue('${_browserPrefix}margin-before');
+
+  /** Sets the value of "margin-before" */
+  void set marginBefore(var value) {
+    setProperty('${_browserPrefix}margin-before', value, '');
+  }
+
+  /** Gets the value of "margin-before-collapse" */
+  String get marginBeforeCollapse =>
+    getPropertyValue('${_browserPrefix}margin-before-collapse');
+
+  /** Sets the value of "margin-before-collapse" */
+  void set marginBeforeCollapse(var value) {
+    setProperty('${_browserPrefix}margin-before-collapse', value, '');
+  }
+
+  /** Gets the value of "margin-bottom" */
+  String get marginBottom =>
+    getPropertyValue('margin-bottom');
+
+  /** Sets the value of "margin-bottom" */
+  void set marginBottom(var value) {
+    setProperty('margin-bottom', value, '');
+  }
+
+  /** Gets the value of "margin-bottom-collapse" */
+  String get marginBottomCollapse =>
+    getPropertyValue('${_browserPrefix}margin-bottom-collapse');
+
+  /** Sets the value of "margin-bottom-collapse" */
+  void set marginBottomCollapse(var value) {
+    setProperty('${_browserPrefix}margin-bottom-collapse', value, '');
+  }
+
+  /** Gets the value of "margin-collapse" */
+  String get marginCollapse =>
+    getPropertyValue('${_browserPrefix}margin-collapse');
+
+  /** Sets the value of "margin-collapse" */
+  void set marginCollapse(var value) {
+    setProperty('${_browserPrefix}margin-collapse', value, '');
+  }
+
+  /** Gets the value of "margin-end" */
+  String get marginEnd =>
+    getPropertyValue('${_browserPrefix}margin-end');
+
+  /** Sets the value of "margin-end" */
+  void set marginEnd(var value) {
+    setProperty('${_browserPrefix}margin-end', value, '');
+  }
+
+  /** Gets the value of "margin-left" */
+  String get marginLeft =>
+    getPropertyValue('margin-left');
+
+  /** Sets the value of "margin-left" */
+  void set marginLeft(var value) {
+    setProperty('margin-left', value, '');
+  }
+
+  /** Gets the value of "margin-right" */
+  String get marginRight =>
+    getPropertyValue('margin-right');
+
+  /** Sets the value of "margin-right" */
+  void set marginRight(var value) {
+    setProperty('margin-right', value, '');
+  }
+
+  /** Gets the value of "margin-start" */
+  String get marginStart =>
+    getPropertyValue('${_browserPrefix}margin-start');
+
+  /** Sets the value of "margin-start" */
+  void set marginStart(var value) {
+    setProperty('${_browserPrefix}margin-start', value, '');
+  }
+
+  /** Gets the value of "margin-top" */
+  String get marginTop =>
+    getPropertyValue('margin-top');
+
+  /** Sets the value of "margin-top" */
+  void set marginTop(var value) {
+    setProperty('margin-top', value, '');
+  }
+
+  /** Gets the value of "margin-top-collapse" */
+  String get marginTopCollapse =>
+    getPropertyValue('${_browserPrefix}margin-top-collapse');
+
+  /** Sets the value of "margin-top-collapse" */
+  void set marginTopCollapse(var value) {
+    setProperty('${_browserPrefix}margin-top-collapse', value, '');
+  }
+
+  /** Gets the value of "marquee" */
+  String get marquee =>
+    getPropertyValue('${_browserPrefix}marquee');
+
+  /** Sets the value of "marquee" */
+  void set marquee(var value) {
+    setProperty('${_browserPrefix}marquee', value, '');
+  }
+
+  /** Gets the value of "marquee-direction" */
+  String get marqueeDirection =>
+    getPropertyValue('${_browserPrefix}marquee-direction');
+
+  /** Sets the value of "marquee-direction" */
+  void set marqueeDirection(var value) {
+    setProperty('${_browserPrefix}marquee-direction', value, '');
+  }
+
+  /** Gets the value of "marquee-increment" */
+  String get marqueeIncrement =>
+    getPropertyValue('${_browserPrefix}marquee-increment');
+
+  /** Sets the value of "marquee-increment" */
+  void set marqueeIncrement(var value) {
+    setProperty('${_browserPrefix}marquee-increment', value, '');
+  }
+
+  /** Gets the value of "marquee-repetition" */
+  String get marqueeRepetition =>
+    getPropertyValue('${_browserPrefix}marquee-repetition');
+
+  /** Sets the value of "marquee-repetition" */
+  void set marqueeRepetition(var value) {
+    setProperty('${_browserPrefix}marquee-repetition', value, '');
+  }
+
+  /** Gets the value of "marquee-speed" */
+  String get marqueeSpeed =>
+    getPropertyValue('${_browserPrefix}marquee-speed');
+
+  /** Sets the value of "marquee-speed" */
+  void set marqueeSpeed(var value) {
+    setProperty('${_browserPrefix}marquee-speed', value, '');
+  }
+
+  /** Gets the value of "marquee-style" */
+  String get marqueeStyle =>
+    getPropertyValue('${_browserPrefix}marquee-style');
+
+  /** Sets the value of "marquee-style" */
+  void set marqueeStyle(var value) {
+    setProperty('${_browserPrefix}marquee-style', value, '');
+  }
+
+  /** Gets the value of "mask" */
+  String get mask =>
+    getPropertyValue('${_browserPrefix}mask');
+
+  /** Sets the value of "mask" */
+  void set mask(var value) {
+    setProperty('${_browserPrefix}mask', value, '');
+  }
+
+  /** Gets the value of "mask-attachment" */
+  String get maskAttachment =>
+    getPropertyValue('${_browserPrefix}mask-attachment');
+
+  /** Sets the value of "mask-attachment" */
+  void set maskAttachment(var value) {
+    setProperty('${_browserPrefix}mask-attachment', value, '');
+  }
+
+  /** Gets the value of "mask-box-image" */
+  String get maskBoxImage =>
+    getPropertyValue('${_browserPrefix}mask-box-image');
+
+  /** Sets the value of "mask-box-image" */
+  void set maskBoxImage(var value) {
+    setProperty('${_browserPrefix}mask-box-image', value, '');
+  }
+
+  /** Gets the value of "mask-box-image-outset" */
+  String get maskBoxImageOutset =>
+    getPropertyValue('${_browserPrefix}mask-box-image-outset');
+
+  /** Sets the value of "mask-box-image-outset" */
+  void set maskBoxImageOutset(var value) {
+    setProperty('${_browserPrefix}mask-box-image-outset', value, '');
+  }
+
+  /** Gets the value of "mask-box-image-repeat" */
+  String get maskBoxImageRepeat =>
+    getPropertyValue('${_browserPrefix}mask-box-image-repeat');
+
+  /** Sets the value of "mask-box-image-repeat" */
+  void set maskBoxImageRepeat(var value) {
+    setProperty('${_browserPrefix}mask-box-image-repeat', value, '');
+  }
+
+  /** Gets the value of "mask-box-image-slice" */
+  String get maskBoxImageSlice =>
+    getPropertyValue('${_browserPrefix}mask-box-image-slice');
+
+  /** Sets the value of "mask-box-image-slice" */
+  void set maskBoxImageSlice(var value) {
+    setProperty('${_browserPrefix}mask-box-image-slice', value, '');
+  }
+
+  /** Gets the value of "mask-box-image-source" */
+  String get maskBoxImageSource =>
+    getPropertyValue('${_browserPrefix}mask-box-image-source');
+
+  /** Sets the value of "mask-box-image-source" */
+  void set maskBoxImageSource(var value) {
+    setProperty('${_browserPrefix}mask-box-image-source', value, '');
+  }
+
+  /** Gets the value of "mask-box-image-width" */
+  String get maskBoxImageWidth =>
+    getPropertyValue('${_browserPrefix}mask-box-image-width');
+
+  /** Sets the value of "mask-box-image-width" */
+  void set maskBoxImageWidth(var value) {
+    setProperty('${_browserPrefix}mask-box-image-width', value, '');
+  }
+
+  /** Gets the value of "mask-clip" */
+  String get maskClip =>
+    getPropertyValue('${_browserPrefix}mask-clip');
+
+  /** Sets the value of "mask-clip" */
+  void set maskClip(var value) {
+    setProperty('${_browserPrefix}mask-clip', value, '');
+  }
+
+  /** Gets the value of "mask-composite" */
+  String get maskComposite =>
+    getPropertyValue('${_browserPrefix}mask-composite');
+
+  /** Sets the value of "mask-composite" */
+  void set maskComposite(var value) {
+    setProperty('${_browserPrefix}mask-composite', value, '');
+  }
+
+  /** Gets the value of "mask-image" */
+  String get maskImage =>
+    getPropertyValue('${_browserPrefix}mask-image');
+
+  /** Sets the value of "mask-image" */
+  void set maskImage(var value) {
+    setProperty('${_browserPrefix}mask-image', value, '');
+  }
+
+  /** Gets the value of "mask-origin" */
+  String get maskOrigin =>
+    getPropertyValue('${_browserPrefix}mask-origin');
+
+  /** Sets the value of "mask-origin" */
+  void set maskOrigin(var value) {
+    setProperty('${_browserPrefix}mask-origin', value, '');
+  }
+
+  /** Gets the value of "mask-position" */
+  String get maskPosition =>
+    getPropertyValue('${_browserPrefix}mask-position');
+
+  /** Sets the value of "mask-position" */
+  void set maskPosition(var value) {
+    setProperty('${_browserPrefix}mask-position', value, '');
+  }
+
+  /** Gets the value of "mask-position-x" */
+  String get maskPositionX =>
+    getPropertyValue('${_browserPrefix}mask-position-x');
+
+  /** Sets the value of "mask-position-x" */
+  void set maskPositionX(var value) {
+    setProperty('${_browserPrefix}mask-position-x', value, '');
+  }
+
+  /** Gets the value of "mask-position-y" */
+  String get maskPositionY =>
+    getPropertyValue('${_browserPrefix}mask-position-y');
+
+  /** Sets the value of "mask-position-y" */
+  void set maskPositionY(var value) {
+    setProperty('${_browserPrefix}mask-position-y', value, '');
+  }
+
+  /** Gets the value of "mask-repeat" */
+  String get maskRepeat =>
+    getPropertyValue('${_browserPrefix}mask-repeat');
+
+  /** Sets the value of "mask-repeat" */
+  void set maskRepeat(var value) {
+    setProperty('${_browserPrefix}mask-repeat', value, '');
+  }
+
+  /** Gets the value of "mask-repeat-x" */
+  String get maskRepeatX =>
+    getPropertyValue('${_browserPrefix}mask-repeat-x');
+
+  /** Sets the value of "mask-repeat-x" */
+  void set maskRepeatX(var value) {
+    setProperty('${_browserPrefix}mask-repeat-x', value, '');
+  }
+
+  /** Gets the value of "mask-repeat-y" */
+  String get maskRepeatY =>
+    getPropertyValue('${_browserPrefix}mask-repeat-y');
+
+  /** Sets the value of "mask-repeat-y" */
+  void set maskRepeatY(var value) {
+    setProperty('${_browserPrefix}mask-repeat-y', value, '');
+  }
+
+  /** Gets the value of "mask-size" */
+  String get maskSize =>
+    getPropertyValue('${_browserPrefix}mask-size');
+
+  /** Sets the value of "mask-size" */
+  void set maskSize(var value) {
+    setProperty('${_browserPrefix}mask-size', value, '');
+  }
+
+  /** Gets the value of "match-nearest-mail-blockquote-color" */
+  String get matchNearestMailBlockquoteColor =>
+    getPropertyValue('${_browserPrefix}match-nearest-mail-blockquote-color');
+
+  /** Sets the value of "match-nearest-mail-blockquote-color" */
+  void set matchNearestMailBlockquoteColor(var value) {
+    setProperty('${_browserPrefix}match-nearest-mail-blockquote-color', value, '');
+  }
+
+  /** Gets the value of "max-height" */
+  String get maxHeight =>
+    getPropertyValue('max-height');
+
+  /** Sets the value of "max-height" */
+  void set maxHeight(var value) {
+    setProperty('max-height', value, '');
+  }
+
+  /** Gets the value of "max-logical-height" */
+  String get maxLogicalHeight =>
+    getPropertyValue('${_browserPrefix}max-logical-height');
+
+  /** Sets the value of "max-logical-height" */
+  void set maxLogicalHeight(var value) {
+    setProperty('${_browserPrefix}max-logical-height', value, '');
+  }
+
+  /** Gets the value of "max-logical-width" */
+  String get maxLogicalWidth =>
+    getPropertyValue('${_browserPrefix}max-logical-width');
+
+  /** Sets the value of "max-logical-width" */
+  void set maxLogicalWidth(var value) {
+    setProperty('${_browserPrefix}max-logical-width', value, '');
+  }
+
+  /** Gets the value of "max-width" */
+  String get maxWidth =>
+    getPropertyValue('max-width');
+
+  /** Sets the value of "max-width" */
+  void set maxWidth(var value) {
+    setProperty('max-width', value, '');
+  }
+
+  /** Gets the value of "min-height" */
+  String get minHeight =>
+    getPropertyValue('min-height');
+
+  /** Sets the value of "min-height" */
+  void set minHeight(var value) {
+    setProperty('min-height', value, '');
+  }
+
+  /** Gets the value of "min-logical-height" */
+  String get minLogicalHeight =>
+    getPropertyValue('${_browserPrefix}min-logical-height');
+
+  /** Sets the value of "min-logical-height" */
+  void set minLogicalHeight(var value) {
+    setProperty('${_browserPrefix}min-logical-height', value, '');
+  }
+
+  /** Gets the value of "min-logical-width" */
+  String get minLogicalWidth =>
+    getPropertyValue('${_browserPrefix}min-logical-width');
+
+  /** Sets the value of "min-logical-width" */
+  void set minLogicalWidth(var value) {
+    setProperty('${_browserPrefix}min-logical-width', value, '');
+  }
+
+  /** Gets the value of "min-width" */
+  String get minWidth =>
+    getPropertyValue('min-width');
+
+  /** Sets the value of "min-width" */
+  void set minWidth(var value) {
+    setProperty('min-width', value, '');
+  }
+
+  /** Gets the value of "nbsp-mode" */
+  String get nbspMode =>
+    getPropertyValue('${_browserPrefix}nbsp-mode');
+
+  /** Sets the value of "nbsp-mode" */
+  void set nbspMode(var value) {
+    setProperty('${_browserPrefix}nbsp-mode', value, '');
+  }
+
+  /** Gets the value of "opacity" */
+  String get opacity =>
+    getPropertyValue('opacity');
+
+  /** Sets the value of "opacity" */
+  void set opacity(var value) {
+    setProperty('opacity', value, '');
+  }
+
+  /** Gets the value of "orphans" */
+  String get orphans =>
+    getPropertyValue('orphans');
+
+  /** Sets the value of "orphans" */
+  void set orphans(var value) {
+    setProperty('orphans', value, '');
+  }
+
+  /** Gets the value of "outline" */
+  String get outline =>
+    getPropertyValue('outline');
+
+  /** Sets the value of "outline" */
+  void set outline(var value) {
+    setProperty('outline', value, '');
+  }
+
+  /** Gets the value of "outline-color" */
+  String get outlineColor =>
+    getPropertyValue('outline-color');
+
+  /** Sets the value of "outline-color" */
+  void set outlineColor(var value) {
+    setProperty('outline-color', value, '');
+  }
+
+  /** Gets the value of "outline-offset" */
+  String get outlineOffset =>
+    getPropertyValue('outline-offset');
+
+  /** Sets the value of "outline-offset" */
+  void set outlineOffset(var value) {
+    setProperty('outline-offset', value, '');
+  }
+
+  /** Gets the value of "outline-style" */
+  String get outlineStyle =>
+    getPropertyValue('outline-style');
+
+  /** Sets the value of "outline-style" */
+  void set outlineStyle(var value) {
+    setProperty('outline-style', value, '');
+  }
+
+  /** Gets the value of "outline-width" */
+  String get outlineWidth =>
+    getPropertyValue('outline-width');
+
+  /** Sets the value of "outline-width" */
+  void set outlineWidth(var value) {
+    setProperty('outline-width', value, '');
+  }
+
+  /** Gets the value of "overflow" */
+  String get overflow =>
+    getPropertyValue('overflow');
+
+  /** Sets the value of "overflow" */
+  void set overflow(var value) {
+    setProperty('overflow', value, '');
+  }
+
+  /** Gets the value of "overflow-x" */
+  String get overflowX =>
+    getPropertyValue('overflow-x');
+
+  /** Sets the value of "overflow-x" */
+  void set overflowX(var value) {
+    setProperty('overflow-x', value, '');
+  }
+
+  /** Gets the value of "overflow-y" */
+  String get overflowY =>
+    getPropertyValue('overflow-y');
+
+  /** Sets the value of "overflow-y" */
+  void set overflowY(var value) {
+    setProperty('overflow-y', value, '');
+  }
+
+  /** Gets the value of "padding" */
+  String get padding =>
+    getPropertyValue('padding');
+
+  /** Sets the value of "padding" */
+  void set padding(var value) {
+    setProperty('padding', value, '');
+  }
+
+  /** Gets the value of "padding-after" */
+  String get paddingAfter =>
+    getPropertyValue('${_browserPrefix}padding-after');
+
+  /** Sets the value of "padding-after" */
+  void set paddingAfter(var value) {
+    setProperty('${_browserPrefix}padding-after', value, '');
+  }
+
+  /** Gets the value of "padding-before" */
+  String get paddingBefore =>
+    getPropertyValue('${_browserPrefix}padding-before');
+
+  /** Sets the value of "padding-before" */
+  void set paddingBefore(var value) {
+    setProperty('${_browserPrefix}padding-before', value, '');
+  }
+
+  /** Gets the value of "padding-bottom" */
+  String get paddingBottom =>
+    getPropertyValue('padding-bottom');
+
+  /** Sets the value of "padding-bottom" */
+  void set paddingBottom(var value) {
+    setProperty('padding-bottom', value, '');
+  }
+
+  /** Gets the value of "padding-end" */
+  String get paddingEnd =>
+    getPropertyValue('${_browserPrefix}padding-end');
+
+  /** Sets the value of "padding-end" */
+  void set paddingEnd(var value) {
+    setProperty('${_browserPrefix}padding-end', value, '');
+  }
+
+  /** Gets the value of "padding-left" */
+  String get paddingLeft =>
+    getPropertyValue('padding-left');
+
+  /** Sets the value of "padding-left" */
+  void set paddingLeft(var value) {
+    setProperty('padding-left', value, '');
+  }
+
+  /** Gets the value of "padding-right" */
+  String get paddingRight =>
+    getPropertyValue('padding-right');
+
+  /** Sets the value of "padding-right" */
+  void set paddingRight(var value) {
+    setProperty('padding-right', value, '');
+  }
+
+  /** Gets the value of "padding-start" */
+  String get paddingStart =>
+    getPropertyValue('${_browserPrefix}padding-start');
+
+  /** Sets the value of "padding-start" */
+  void set paddingStart(var value) {
+    setProperty('${_browserPrefix}padding-start', value, '');
+  }
+
+  /** Gets the value of "padding-top" */
+  String get paddingTop =>
+    getPropertyValue('padding-top');
+
+  /** Sets the value of "padding-top" */
+  void set paddingTop(var value) {
+    setProperty('padding-top', value, '');
+  }
+
+  /** Gets the value of "page" */
+  String get page =>
+    getPropertyValue('page');
+
+  /** Sets the value of "page" */
+  void set page(var value) {
+    setProperty('page', value, '');
+  }
+
+  /** Gets the value of "page-break-after" */
+  String get pageBreakAfter =>
+    getPropertyValue('page-break-after');
+
+  /** Sets the value of "page-break-after" */
+  void set pageBreakAfter(var value) {
+    setProperty('page-break-after', value, '');
+  }
+
+  /** Gets the value of "page-break-before" */
+  String get pageBreakBefore =>
+    getPropertyValue('page-break-before');
+
+  /** Sets the value of "page-break-before" */
+  void set pageBreakBefore(var value) {
+    setProperty('page-break-before', value, '');
+  }
+
+  /** Gets the value of "page-break-inside" */
+  String get pageBreakInside =>
+    getPropertyValue('page-break-inside');
+
+  /** Sets the value of "page-break-inside" */
+  void set pageBreakInside(var value) {
+    setProperty('page-break-inside', value, '');
+  }
+
+  /** Gets the value of "perspective" */
+  String get perspective =>
+    getPropertyValue('${_browserPrefix}perspective');
+
+  /** Sets the value of "perspective" */
+  void set perspective(var value) {
+    setProperty('${_browserPrefix}perspective', value, '');
+  }
+
+  /** Gets the value of "perspective-origin" */
+  String get perspectiveOrigin =>
+    getPropertyValue('${_browserPrefix}perspective-origin');
+
+  /** Sets the value of "perspective-origin" */
+  void set perspectiveOrigin(var value) {
+    setProperty('${_browserPrefix}perspective-origin', value, '');
+  }
+
+  /** Gets the value of "perspective-origin-x" */
+  String get perspectiveOriginX =>
+    getPropertyValue('${_browserPrefix}perspective-origin-x');
+
+  /** Sets the value of "perspective-origin-x" */
+  void set perspectiveOriginX(var value) {
+    setProperty('${_browserPrefix}perspective-origin-x', value, '');
+  }
+
+  /** Gets the value of "perspective-origin-y" */
+  String get perspectiveOriginY =>
+    getPropertyValue('${_browserPrefix}perspective-origin-y');
+
+  /** Sets the value of "perspective-origin-y" */
+  void set perspectiveOriginY(var value) {
+    setProperty('${_browserPrefix}perspective-origin-y', value, '');
+  }
+
+  /** Gets the value of "pointer-events" */
+  String get pointerEvents =>
+    getPropertyValue('pointer-events');
+
+  /** Sets the value of "pointer-events" */
+  void set pointerEvents(var value) {
+    setProperty('pointer-events', value, '');
+  }
+
+  /** Gets the value of "position" */
+  String get position =>
+    getPropertyValue('position');
+
+  /** Sets the value of "position" */
+  void set position(var value) {
+    setProperty('position', value, '');
+  }
+
+  /** Gets the value of "quotes" */
+  String get quotes =>
+    getPropertyValue('quotes');
+
+  /** Sets the value of "quotes" */
+  void set quotes(var value) {
+    setProperty('quotes', value, '');
+  }
+
+  /** Gets the value of "region-break-after" */
+  String get regionBreakAfter =>
+    getPropertyValue('${_browserPrefix}region-break-after');
+
+  /** Sets the value of "region-break-after" */
+  void set regionBreakAfter(var value) {
+    setProperty('${_browserPrefix}region-break-after', value, '');
+  }
+
+  /** Gets the value of "region-break-before" */
+  String get regionBreakBefore =>
+    getPropertyValue('${_browserPrefix}region-break-before');
+
+  /** Sets the value of "region-break-before" */
+  void set regionBreakBefore(var value) {
+    setProperty('${_browserPrefix}region-break-before', value, '');
+  }
+
+  /** Gets the value of "region-break-inside" */
+  String get regionBreakInside =>
+    getPropertyValue('${_browserPrefix}region-break-inside');
+
+  /** Sets the value of "region-break-inside" */
+  void set regionBreakInside(var value) {
+    setProperty('${_browserPrefix}region-break-inside', value, '');
+  }
+
+  /** Gets the value of "region-overflow" */
+  String get regionOverflow =>
+    getPropertyValue('${_browserPrefix}region-overflow');
+
+  /** Sets the value of "region-overflow" */
+  void set regionOverflow(var value) {
+    setProperty('${_browserPrefix}region-overflow', value, '');
+  }
+
+  /** Gets the value of "resize" */
+  String get resize =>
+    getPropertyValue('resize');
+
+  /** Sets the value of "resize" */
+  void set resize(var value) {
+    setProperty('resize', value, '');
+  }
+
+  /** Gets the value of "right" */
+  String get right =>
+    getPropertyValue('right');
+
+  /** Sets the value of "right" */
+  void set right(var value) {
+    setProperty('right', value, '');
+  }
+
+  /** Gets the value of "rtl-ordering" */
+  String get rtlOrdering =>
+    getPropertyValue('${_browserPrefix}rtl-ordering');
+
+  /** Sets the value of "rtl-ordering" */
+  void set rtlOrdering(var value) {
+    setProperty('${_browserPrefix}rtl-ordering', value, '');
+  }
+
+  /** Gets the value of "size" */
+  String get size =>
+    getPropertyValue('size');
+
+  /** Sets the value of "size" */
+  void set size(var value) {
+    setProperty('size', value, '');
+  }
+
+  /** Gets the value of "speak" */
+  String get speak =>
+    getPropertyValue('speak');
+
+  /** Sets the value of "speak" */
+  void set speak(var value) {
+    setProperty('speak', value, '');
+  }
+
+  /** Gets the value of "src" */
+  String get src =>
+    getPropertyValue('src');
+
+  /** Sets the value of "src" */
+  void set src(var value) {
+    setProperty('src', value, '');
+  }
+
+  /** Gets the value of "table-layout" */
+  String get tableLayout =>
+    getPropertyValue('table-layout');
+
+  /** Sets the value of "table-layout" */
+  void set tableLayout(var value) {
+    setProperty('table-layout', value, '');
+  }
+
+  /** Gets the value of "tap-highlight-color" */
+  String get tapHighlightColor =>
+    getPropertyValue('${_browserPrefix}tap-highlight-color');
+
+  /** Sets the value of "tap-highlight-color" */
+  void set tapHighlightColor(var value) {
+    setProperty('${_browserPrefix}tap-highlight-color', value, '');
+  }
+
+  /** Gets the value of "text-align" */
+  String get textAlign =>
+    getPropertyValue('text-align');
+
+  /** Sets the value of "text-align" */
+  void set textAlign(var value) {
+    setProperty('text-align', value, '');
+  }
+
+  /** Gets the value of "text-combine" */
+  String get textCombine =>
+    getPropertyValue('${_browserPrefix}text-combine');
+
+  /** Sets the value of "text-combine" */
+  void set textCombine(var value) {
+    setProperty('${_browserPrefix}text-combine', value, '');
+  }
+
+  /** Gets the value of "text-decoration" */
+  String get textDecoration =>
+    getPropertyValue('text-decoration');
+
+  /** Sets the value of "text-decoration" */
+  void set textDecoration(var value) {
+    setProperty('text-decoration', value, '');
+  }
+
+  /** Gets the value of "text-decorations-in-effect" */
+  String get textDecorationsInEffect =>
+    getPropertyValue('${_browserPrefix}text-decorations-in-effect');
+
+  /** Sets the value of "text-decorations-in-effect" */
+  void set textDecorationsInEffect(var value) {
+    setProperty('${_browserPrefix}text-decorations-in-effect', value, '');
+  }
+
+  /** Gets the value of "text-emphasis" */
+  String get textEmphasis =>
+    getPropertyValue('${_browserPrefix}text-emphasis');
+
+  /** Sets the value of "text-emphasis" */
+  void set textEmphasis(var value) {
+    setProperty('${_browserPrefix}text-emphasis', value, '');
+  }
+
+  /** Gets the value of "text-emphasis-color" */
+  String get textEmphasisColor =>
+    getPropertyValue('${_browserPrefix}text-emphasis-color');
+
+  /** Sets the value of "text-emphasis-color" */
+  void set textEmphasisColor(var value) {
+    setProperty('${_browserPrefix}text-emphasis-color', value, '');
+  }
+
+  /** Gets the value of "text-emphasis-position" */
+  String get textEmphasisPosition =>
+    getPropertyValue('${_browserPrefix}text-emphasis-position');
+
+  /** Sets the value of "text-emphasis-position" */
+  void set textEmphasisPosition(var value) {
+    setProperty('${_browserPrefix}text-emphasis-position', value, '');
+  }
+
+  /** Gets the value of "text-emphasis-style" */
+  String get textEmphasisStyle =>
+    getPropertyValue('${_browserPrefix}text-emphasis-style');
+
+  /** Sets the value of "text-emphasis-style" */
+  void set textEmphasisStyle(var value) {
+    setProperty('${_browserPrefix}text-emphasis-style', value, '');
+  }
+
+  /** Gets the value of "text-fill-color" */
+  String get textFillColor =>
+    getPropertyValue('${_browserPrefix}text-fill-color');
+
+  /** Sets the value of "text-fill-color" */
+  void set textFillColor(var value) {
+    setProperty('${_browserPrefix}text-fill-color', value, '');
+  }
+
+  /** Gets the value of "text-indent" */
+  String get textIndent =>
+    getPropertyValue('text-indent');
+
+  /** Sets the value of "text-indent" */
+  void set textIndent(var value) {
+    setProperty('text-indent', value, '');
+  }
+
+  /** Gets the value of "text-line-through" */
+  String get textLineThrough =>
+    getPropertyValue('text-line-through');
+
+  /** Sets the value of "text-line-through" */
+  void set textLineThrough(var value) {
+    setProperty('text-line-through', value, '');
+  }
+
+  /** Gets the value of "text-line-through-color" */
+  String get textLineThroughColor =>
+    getPropertyValue('text-line-through-color');
+
+  /** Sets the value of "text-line-through-color" */
+  void set textLineThroughColor(var value) {
+    setProperty('text-line-through-color', value, '');
+  }
+
+  /** Gets the value of "text-line-through-mode" */
+  String get textLineThroughMode =>
+    getPropertyValue('text-line-through-mode');
+
+  /** Sets the value of "text-line-through-mode" */
+  void set textLineThroughMode(var value) {
+    setProperty('text-line-through-mode', value, '');
+  }
+
+  /** Gets the value of "text-line-through-style" */
+  String get textLineThroughStyle =>
+    getPropertyValue('text-line-through-style');
+
+  /** Sets the value of "text-line-through-style" */
+  void set textLineThroughStyle(var value) {
+    setProperty('text-line-through-style', value, '');
+  }
+
+  /** Gets the value of "text-line-through-width" */
+  String get textLineThroughWidth =>
+    getPropertyValue('text-line-through-width');
+
+  /** Sets the value of "text-line-through-width" */
+  void set textLineThroughWidth(var value) {
+    setProperty('text-line-through-width', value, '');
+  }
+
+  /** Gets the value of "text-orientation" */
+  String get textOrientation =>
+    getPropertyValue('${_browserPrefix}text-orientation');
+
+  /** Sets the value of "text-orientation" */
+  void set textOrientation(var value) {
+    setProperty('${_browserPrefix}text-orientation', value, '');
+  }
+
+  /** Gets the value of "text-overflow" */
+  String get textOverflow =>
+    getPropertyValue('text-overflow');
+
+  /** Sets the value of "text-overflow" */
+  void set textOverflow(var value) {
+    setProperty('text-overflow', value, '');
+  }
+
+  /** Gets the value of "text-overline" */
+  String get textOverline =>
+    getPropertyValue('text-overline');
+
+  /** Sets the value of "text-overline" */
+  void set textOverline(var value) {
+    setProperty('text-overline', value, '');
+  }
+
+  /** Gets the value of "text-overline-color" */
+  String get textOverlineColor =>
+    getPropertyValue('text-overline-color');
+
+  /** Sets the value of "text-overline-color" */
+  void set textOverlineColor(var value) {
+    setProperty('text-overline-color', value, '');
+  }
+
+  /** Gets the value of "text-overline-mode" */
+  String get textOverlineMode =>
+    getPropertyValue('text-overline-mode');
+
+  /** Sets the value of "text-overline-mode" */
+  void set textOverlineMode(var value) {
+    setProperty('text-overline-mode', value, '');
+  }
+
+  /** Gets the value of "text-overline-style" */
+  String get textOverlineStyle =>
+    getPropertyValue('text-overline-style');
+
+  /** Sets the value of "text-overline-style" */
+  void set textOverlineStyle(var value) {
+    setProperty('text-overline-style', value, '');
+  }
+
+  /** Gets the value of "text-overline-width" */
+  String get textOverlineWidth =>
+    getPropertyValue('text-overline-width');
+
+  /** Sets the value of "text-overline-width" */
+  void set textOverlineWidth(var value) {
+    setProperty('text-overline-width', value, '');
+  }
+
+  /** Gets the value of "text-rendering" */
+  String get textRendering =>
+    getPropertyValue('text-rendering');
+
+  /** Sets the value of "text-rendering" */
+  void set textRendering(var value) {
+    setProperty('text-rendering', value, '');
+  }
+
+  /** Gets the value of "text-security" */
+  String get textSecurity =>
+    getPropertyValue('${_browserPrefix}text-security');
+
+  /** Sets the value of "text-security" */
+  void set textSecurity(var value) {
+    setProperty('${_browserPrefix}text-security', value, '');
+  }
+
+  /** Gets the value of "text-shadow" */
+  String get textShadow =>
+    getPropertyValue('text-shadow');
+
+  /** Sets the value of "text-shadow" */
+  void set textShadow(var value) {
+    setProperty('text-shadow', value, '');
+  }
+
+  /** Gets the value of "text-size-adjust" */
+  String get textSizeAdjust =>
+    getPropertyValue('${_browserPrefix}text-size-adjust');
+
+  /** Sets the value of "text-size-adjust" */
+  void set textSizeAdjust(var value) {
+    setProperty('${_browserPrefix}text-size-adjust', value, '');
+  }
+
+  /** Gets the value of "text-stroke" */
+  String get textStroke =>
+    getPropertyValue('${_browserPrefix}text-stroke');
+
+  /** Sets the value of "text-stroke" */
+  void set textStroke(var value) {
+    setProperty('${_browserPrefix}text-stroke', value, '');
+  }
+
+  /** Gets the value of "text-stroke-color" */
+  String get textStrokeColor =>
+    getPropertyValue('${_browserPrefix}text-stroke-color');
+
+  /** Sets the value of "text-stroke-color" */
+  void set textStrokeColor(var value) {
+    setProperty('${_browserPrefix}text-stroke-color', value, '');
+  }
+
+  /** Gets the value of "text-stroke-width" */
+  String get textStrokeWidth =>
+    getPropertyValue('${_browserPrefix}text-stroke-width');
+
+  /** Sets the value of "text-stroke-width" */
+  void set textStrokeWidth(var value) {
+    setProperty('${_browserPrefix}text-stroke-width', value, '');
+  }
+
+  /** Gets the value of "text-transform" */
+  String get textTransform =>
+    getPropertyValue('text-transform');
+
+  /** Sets the value of "text-transform" */
+  void set textTransform(var value) {
+    setProperty('text-transform', value, '');
+  }
+
+  /** Gets the value of "text-underline" */
+  String get textUnderline =>
+    getPropertyValue('text-underline');
+
+  /** Sets the value of "text-underline" */
+  void set textUnderline(var value) {
+    setProperty('text-underline', value, '');
+  }
+
+  /** Gets the value of "text-underline-color" */
+  String get textUnderlineColor =>
+    getPropertyValue('text-underline-color');
+
+  /** Sets the value of "text-underline-color" */
+  void set textUnderlineColor(var value) {
+    setProperty('text-underline-color', value, '');
+  }
+
+  /** Gets the value of "text-underline-mode" */
+  String get textUnderlineMode =>
+    getPropertyValue('text-underline-mode');
+
+  /** Sets the value of "text-underline-mode" */
+  void set textUnderlineMode(var value) {
+    setProperty('text-underline-mode', value, '');
+  }
+
+  /** Gets the value of "text-underline-style" */
+  String get textUnderlineStyle =>
+    getPropertyValue('text-underline-style');
+
+  /** Sets the value of "text-underline-style" */
+  void set textUnderlineStyle(var value) {
+    setProperty('text-underline-style', value, '');
+  }
+
+  /** Gets the value of "text-underline-width" */
+  String get textUnderlineWidth =>
+    getPropertyValue('text-underline-width');
+
+  /** Sets the value of "text-underline-width" */
+  void set textUnderlineWidth(var value) {
+    setProperty('text-underline-width', value, '');
+  }
+
+  /** Gets the value of "top" */
+  String get top =>
+    getPropertyValue('top');
+
+  /** Sets the value of "top" */
+  void set top(var value) {
+    setProperty('top', value, '');
+  }
+
+  /** Gets the value of "transform" */
+  String get transform =>
+    getPropertyValue('${_browserPrefix}transform');
+
+  /** Sets the value of "transform" */
+  void set transform(var value) {
+    setProperty('${_browserPrefix}transform', value, '');
+  }
+
+  /** Gets the value of "transform-origin" */
+  String get transformOrigin =>
+    getPropertyValue('${_browserPrefix}transform-origin');
+
+  /** Sets the value of "transform-origin" */
+  void set transformOrigin(var value) {
+    setProperty('${_browserPrefix}transform-origin', value, '');
+  }
+
+  /** Gets the value of "transform-origin-x" */
+  String get transformOriginX =>
+    getPropertyValue('${_browserPrefix}transform-origin-x');
+
+  /** Sets the value of "transform-origin-x" */
+  void set transformOriginX(var value) {
+    setProperty('${_browserPrefix}transform-origin-x', value, '');
+  }
+
+  /** Gets the value of "transform-origin-y" */
+  String get transformOriginY =>
+    getPropertyValue('${_browserPrefix}transform-origin-y');
+
+  /** Sets the value of "transform-origin-y" */
+  void set transformOriginY(var value) {
+    setProperty('${_browserPrefix}transform-origin-y', value, '');
+  }
+
+  /** Gets the value of "transform-origin-z" */
+  String get transformOriginZ =>
+    getPropertyValue('${_browserPrefix}transform-origin-z');
+
+  /** Sets the value of "transform-origin-z" */
+  void set transformOriginZ(var value) {
+    setProperty('${_browserPrefix}transform-origin-z', value, '');
+  }
+
+  /** Gets the value of "transform-style" */
+  String get transformStyle =>
+    getPropertyValue('${_browserPrefix}transform-style');
+
+  /** Sets the value of "transform-style" */
+  void set transformStyle(var value) {
+    setProperty('${_browserPrefix}transform-style', value, '');
+  }
+
+  /** Gets the value of "transition" */
+  String get transition =>
+    getPropertyValue('${_browserPrefix}transition');
+
+  /** Sets the value of "transition" */
+  void set transition(var value) {
+    setProperty('${_browserPrefix}transition', value, '');
+  }
+
+  /** Gets the value of "transition-delay" */
+  String get transitionDelay =>
+    getPropertyValue('${_browserPrefix}transition-delay');
+
+  /** Sets the value of "transition-delay" */
+  void set transitionDelay(var value) {
+    setProperty('${_browserPrefix}transition-delay', value, '');
+  }
+
+  /** Gets the value of "transition-duration" */
+  String get transitionDuration =>
+    getPropertyValue('${_browserPrefix}transition-duration');
+
+  /** Sets the value of "transition-duration" */
+  void set transitionDuration(var value) {
+    setProperty('${_browserPrefix}transition-duration', value, '');
+  }
+
+  /** Gets the value of "transition-property" */
+  String get transitionProperty =>
+    getPropertyValue('${_browserPrefix}transition-property');
+
+  /** Sets the value of "transition-property" */
+  void set transitionProperty(var value) {
+    setProperty('${_browserPrefix}transition-property', value, '');
+  }
+
+  /** Gets the value of "transition-timing-function" */
+  String get transitionTimingFunction =>
+    getPropertyValue('${_browserPrefix}transition-timing-function');
+
+  /** Sets the value of "transition-timing-function" */
+  void set transitionTimingFunction(var value) {
+    setProperty('${_browserPrefix}transition-timing-function', value, '');
+  }
+
+  /** Gets the value of "unicode-bidi" */
+  String get unicodeBidi =>
+    getPropertyValue('unicode-bidi');
+
+  /** Sets the value of "unicode-bidi" */
+  void set unicodeBidi(var value) {
+    setProperty('unicode-bidi', value, '');
+  }
+
+  /** Gets the value of "unicode-range" */
+  String get unicodeRange =>
+    getPropertyValue('unicode-range');
+
+  /** Sets the value of "unicode-range" */
+  void set unicodeRange(var value) {
+    setProperty('unicode-range', value, '');
+  }
+
+  /** Gets the value of "user-drag" */
+  String get userDrag =>
+    getPropertyValue('${_browserPrefix}user-drag');
+
+  /** Sets the value of "user-drag" */
+  void set userDrag(var value) {
+    setProperty('${_browserPrefix}user-drag', value, '');
+  }
+
+  /** Gets the value of "user-modify" */
+  String get userModify =>
+    getPropertyValue('${_browserPrefix}user-modify');
+
+  /** Sets the value of "user-modify" */
+  void set userModify(var value) {
+    setProperty('${_browserPrefix}user-modify', value, '');
+  }
+
+  /** Gets the value of "user-select" */
+  String get userSelect =>
+    getPropertyValue('${_browserPrefix}user-select');
+
+  /** Sets the value of "user-select" */
+  void set userSelect(var value) {
+    setProperty('${_browserPrefix}user-select', value, '');
+  }
+
+  /** Gets the value of "vertical-align" */
+  String get verticalAlign =>
+    getPropertyValue('vertical-align');
+
+  /** Sets the value of "vertical-align" */
+  void set verticalAlign(var value) {
+    setProperty('vertical-align', value, '');
+  }
+
+  /** Gets the value of "visibility" */
+  String get visibility =>
+    getPropertyValue('visibility');
+
+  /** Sets the value of "visibility" */
+  void set visibility(var value) {
+    setProperty('visibility', value, '');
+  }
+
+  /** Gets the value of "white-space" */
+  String get whiteSpace =>
+    getPropertyValue('white-space');
+
+  /** Sets the value of "white-space" */
+  void set whiteSpace(var value) {
+    setProperty('white-space', value, '');
+  }
+
+  /** Gets the value of "widows" */
+  String get widows =>
+    getPropertyValue('widows');
+
+  /** Sets the value of "widows" */
+  void set widows(var value) {
+    setProperty('widows', value, '');
+  }
+
+  /** Gets the value of "width" */
+  String get width =>
+    getPropertyValue('width');
+
+  /** Sets the value of "width" */
+  void set width(var value) {
+    setProperty('width', value, '');
+  }
+
+  /** Gets the value of "word-break" */
+  String get wordBreak =>
+    getPropertyValue('word-break');
+
+  /** Sets the value of "word-break" */
+  void set wordBreak(var value) {
+    setProperty('word-break', value, '');
+  }
+
+  /** Gets the value of "word-spacing" */
+  String get wordSpacing =>
+    getPropertyValue('word-spacing');
+
+  /** Sets the value of "word-spacing" */
+  void set wordSpacing(var value) {
+    setProperty('word-spacing', value, '');
+  }
+
+  /** Gets the value of "word-wrap" */
+  String get wordWrap =>
+    getPropertyValue('word-wrap');
+
+  /** Sets the value of "word-wrap" */
+  void set wordWrap(var value) {
+    setProperty('word-wrap', value, '');
+  }
+
+  /** Gets the value of "wrap-shape" */
+  String get wrapShape =>
+    getPropertyValue('${_browserPrefix}wrap-shape');
+
+  /** Sets the value of "wrap-shape" */
+  void set wrapShape(var value) {
+    setProperty('${_browserPrefix}wrap-shape', value, '');
+  }
+
+  /** Gets the value of "writing-mode" */
+  String get writingMode =>
+    getPropertyValue('${_browserPrefix}writing-mode');
+
+  /** Sets the value of "writing-mode" */
+  void set writingMode(var value) {
+    setProperty('${_browserPrefix}writing-mode', value, '');
+  }
+
+  /** Gets the value of "z-index" */
+  String get zIndex =>
+    getPropertyValue('z-index');
+
+  /** Sets the value of "z-index" */
+  void set zIndex(var value) {
+    setProperty('z-index', value, '');
+  }
+
+  /** Gets the value of "zoom" */
+  String get zoom =>
+    getPropertyValue('zoom');
+
+  /** Sets the value of "zoom" */
+  void set zoom(var value) {
+    setProperty('zoom', value, '');
+  }
+}
+
+/// @domName CSSStyleRule
+class CSSStyleRule extends CSSRule native "*CSSStyleRule" {
+
+  /** @domName CSSStyleRule.selectorText */
+  String selectorText;
+
+  /** @domName CSSStyleRule.style */
+  final CSSStyleDeclaration style;
+}
+
+/// @domName CSSStyleSheet
+class CSSStyleSheet extends StyleSheet native "*CSSStyleSheet" {
+
+  /** @domName CSSStyleSheet.cssRules */
+  final List<CSSRule> cssRules;
+
+  /** @domName CSSStyleSheet.ownerRule */
+  final CSSRule ownerRule;
+
+  /** @domName CSSStyleSheet.rules */
+  final List<CSSRule> rules;
+
+  /** @domName CSSStyleSheet.addRule */
+  int addRule(String selector, String style, [int index]) native;
+
+  /** @domName CSSStyleSheet.deleteRule */
+  void deleteRule(int index) native;
+
+  /** @domName CSSStyleSheet.insertRule */
+  int insertRule(String rule, int index) native;
+
+  /** @domName CSSStyleSheet.removeRule */
+  void removeRule(int index) native;
+}
+
+/// @domName WebKitCSSTransformValue
+class CSSTransformValue extends _CSSValueList native "*WebKitCSSTransformValue" {
+
+  static const int CSS_MATRIX = 11;
+
+  static const int CSS_MATRIX3D = 21;
+
+  static const int CSS_PERSPECTIVE = 20;
+
+  static const int CSS_ROTATE = 4;
+
+  static const int CSS_ROTATE3D = 17;
+
+  static const int CSS_ROTATEX = 14;
+
+  static const int CSS_ROTATEY = 15;
+
+  static const int CSS_ROTATEZ = 16;
+
+  static const int CSS_SCALE = 5;
+
+  static const int CSS_SCALE3D = 19;
+
+  static const int CSS_SCALEX = 6;
+
+  static const int CSS_SCALEY = 7;
+
+  static const int CSS_SCALEZ = 18;
+
+  static const int CSS_SKEW = 8;
+
+  static const int CSS_SKEWX = 9;
+
+  static const int CSS_SKEWY = 10;
+
+  static const int CSS_TRANSLATE = 1;
+
+  static const int CSS_TRANSLATE3D = 13;
+
+  static const int CSS_TRANSLATEX = 2;
+
+  static const int CSS_TRANSLATEY = 3;
+
+  static const int CSS_TRANSLATEZ = 12;
+
+  /** @domName WebKitCSSTransformValue.operationType */
+  final int operationType;
+}
+
+/// @domName CSSUnknownRule
+class CSSUnknownRule extends CSSRule native "*CSSUnknownRule" {
+}
+
+/// @domName CSSValue
+class CSSValue native "*CSSValue" {
+
+  static const int CSS_CUSTOM = 3;
+
+  static const int CSS_INHERIT = 0;
+
+  static const int CSS_PRIMITIVE_VALUE = 1;
+
+  static const int CSS_VALUE_LIST = 2;
+
+  /** @domName CSSValue.cssText */
+  String cssText;
+
+  /** @domName CSSValue.cssValueType */
+  final int cssValueType;
+}
+// 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 CanvasElement extends Element implements Element native "*HTMLCanvasElement" {
+
+  factory CanvasElement({int width, int height}) {
+    if (!?width) {
+      return _Elements.createCanvasElement();
+    }
+    if (!?height) {
+      return _Elements.createCanvasElement(width);
+    }
+    return _Elements.createCanvasElement(width, height);
+  }
+
+  /** @domName HTMLCanvasElement.height */
+  int height;
+
+  /** @domName HTMLCanvasElement.width */
+  int width;
+
+  /** @domName HTMLCanvasElement.toDataURL */
+  String toDataURL(String type, [num quality]) native;
+
+
+  CanvasRenderingContext getContext(String contextId) native;
+  CanvasRenderingContext2D get context2d => getContext('2d');
+}
+
+/// @domName CanvasGradient
+class CanvasGradient native "*CanvasGradient" {
+
+  /** @domName CanvasGradient.addColorStop */
+  void addColorStop(num offset, String color) native;
+}
+
+/// @domName CanvasPattern
+class CanvasPattern native "*CanvasPattern" {
+}
+
+/// @domName CanvasRenderingContext
+class CanvasRenderingContext native "*CanvasRenderingContext" {
+
+  /** @domName CanvasRenderingContext.canvas */
+  final CanvasElement canvas;
+}
+// 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 CanvasRenderingContext2D extends CanvasRenderingContext native "*CanvasRenderingContext2D" {
+
+  /** @domName CanvasRenderingContext2D.fillStyle */
+  dynamic fillStyle;
+
+  /** @domName CanvasRenderingContext2D.font */
+  String font;
+
+  /** @domName CanvasRenderingContext2D.globalAlpha */
+  num globalAlpha;
+
+  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
+  String globalCompositeOperation;
+
+  /** @domName CanvasRenderingContext2D.lineCap */
+  String lineCap;
+
+  /** @domName CanvasRenderingContext2D.lineDashOffset */
+  num lineDashOffset;
+
+  /** @domName CanvasRenderingContext2D.lineJoin */
+  String lineJoin;
+
+  /** @domName CanvasRenderingContext2D.lineWidth */
+  num lineWidth;
+
+  /** @domName CanvasRenderingContext2D.miterLimit */
+  num miterLimit;
+
+  /** @domName CanvasRenderingContext2D.shadowBlur */
+  num shadowBlur;
+
+  /** @domName CanvasRenderingContext2D.shadowColor */
+  String shadowColor;
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetX */
+  num shadowOffsetX;
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetY */
+  num shadowOffsetY;
+
+  /** @domName CanvasRenderingContext2D.strokeStyle */
+  dynamic strokeStyle;
+
+  /** @domName CanvasRenderingContext2D.textAlign */
+  String textAlign;
+
+  /** @domName CanvasRenderingContext2D.textBaseline */
+  String textBaseline;
+
+  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
+  final num webkitBackingStorePixelRatio;
+
+  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
+  bool webkitImageSmoothingEnabled;
+
+  /** @domName CanvasRenderingContext2D.webkitLineDash */
+  List webkitLineDash;
+
+  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
+  num webkitLineDashOffset;
+
+  /** @domName CanvasRenderingContext2D.arc */
+  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native;
+
+  /** @domName CanvasRenderingContext2D.arcTo */
+  void arcTo(num x1, num y1, num x2, num y2, num radius) native;
+
+  /** @domName CanvasRenderingContext2D.beginPath */
+  void beginPath() native;
+
+  /** @domName CanvasRenderingContext2D.bezierCurveTo */
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native;
+
+  /** @domName CanvasRenderingContext2D.clearRect */
+  void clearRect(num x, num y, num width, num height) native;
+
+  /** @domName CanvasRenderingContext2D.clearShadow */
+  void clearShadow() native;
+
+  /** @domName CanvasRenderingContext2D.clip */
+  void clip() native;
+
+  /** @domName CanvasRenderingContext2D.closePath */
+  void closePath() native;
+
+  /** @domName CanvasRenderingContext2D.createImageData */
+  ImageData createImageData(imagedata_OR_sw, [sh]) {
+    if ((imagedata_OR_sw is ImageData || imagedata_OR_sw == null) &&
+        !?sh) {
+      var imagedata_1 = _convertDartToNative_ImageData(imagedata_OR_sw);
+      return _convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
+    }
+    if ((imagedata_OR_sw is num || imagedata_OR_sw == null) &&
+        (sh is num || sh == null)) {
+      return _convertNativeToDart_ImageData(_createImageData_2(imagedata_OR_sw, sh));
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  _createImageData_1(imagedata) native "createImageData";
+  _createImageData_2(num sw, num sh) native "createImageData";
+
+  /** @domName CanvasRenderingContext2D.createLinearGradient */
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
+
+  /** @domName CanvasRenderingContext2D.createPattern */
+  CanvasPattern createPattern(canvas_OR_image, String repetitionType) native;
+
+  /** @domName CanvasRenderingContext2D.createRadialGradient */
+  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native;
+
+  /** @domName CanvasRenderingContext2D.drawImage */
+  void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]) native;
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect */
+  void drawImageFromRect(ImageElement image, [num sx, num sy, num sw, num sh, num dx, num dy, num dw, num dh, String compositeOperation]) native;
+
+  /** @domName CanvasRenderingContext2D.fill */
+  void fill() native;
+
+  /** @domName CanvasRenderingContext2D.fillRect */
+  void fillRect(num x, num y, num width, num height) native;
+
+  /** @domName CanvasRenderingContext2D.fillText */
+  void fillText(String text, num x, num y, [num maxWidth]) native;
+
+  /** @domName CanvasRenderingContext2D.getImageData */
+  ImageData getImageData(num sx, num sy, num sw, num sh) {
+    return _convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
+  }
+  _getImageData_1(sx, sy, sw, sh) native "getImageData";
+
+  /** @domName CanvasRenderingContext2D.getLineDash */
+  List<num> getLineDash() native;
+
+  /** @domName CanvasRenderingContext2D.isPointInPath */
+  bool isPointInPath(num x, num y) native;
+
+  /** @domName CanvasRenderingContext2D.lineTo */
+  void lineTo(num x, num y) native;
+
+  /** @domName CanvasRenderingContext2D.measureText */
+  TextMetrics measureText(String text) native;
+
+  /** @domName CanvasRenderingContext2D.moveTo */
+  void moveTo(num x, num y) native;
+
+  /** @domName CanvasRenderingContext2D.putImageData */
+  void putImageData(ImageData imagedata, num dx, num dy, [dirtyX, dirtyY, dirtyWidth, dirtyHeight]) {
+    if (!?dirtyX &&
+        !?dirtyY &&
+        !?dirtyWidth &&
+        !?dirtyHeight) {
+      var imagedata_1 = _convertDartToNative_ImageData(imagedata);
+      _putImageData_1(imagedata_1, dx, dy);
+      return;
+    }
+    if ((dirtyX is num || dirtyX == null) &&
+        (dirtyY is num || dirtyY == null) &&
+        (dirtyWidth is num || dirtyWidth == null) &&
+        (dirtyHeight is num || dirtyHeight == null)) {
+      var imagedata_2 = _convertDartToNative_ImageData(imagedata);
+      _putImageData_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      return;
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  void _putImageData_1(imagedata, dx, dy) native "putImageData";
+  void _putImageData_2(imagedata, dx, dy, num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight) native "putImageData";
+
+  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
+
+  /** @domName CanvasRenderingContext2D.rect */
+  void rect(num x, num y, num width, num height) native;
+
+  /** @domName CanvasRenderingContext2D.restore */
+  void restore() native;
+
+  /** @domName CanvasRenderingContext2D.rotate */
+  void rotate(num angle) native;
+
+  /** @domName CanvasRenderingContext2D.save */
+  void save() native;
+
+  /** @domName CanvasRenderingContext2D.scale */
+  void scale(num sx, num sy) native;
+
+  /** @domName CanvasRenderingContext2D.setAlpha */
+  void setAlpha(num alpha) native;
+
+  /** @domName CanvasRenderingContext2D.setCompositeOperation */
+  void setCompositeOperation(String compositeOperation) native;
+
+  /** @domName CanvasRenderingContext2D.setLineCap */
+  void setLineCap(String cap) native;
+
+  /** @domName CanvasRenderingContext2D.setLineDash */
+  void setLineDash(List<num> dash) native;
+
+  /** @domName CanvasRenderingContext2D.setLineJoin */
+  void setLineJoin(String join) native;
+
+  /** @domName CanvasRenderingContext2D.setLineWidth */
+  void setLineWidth(num width) native;
+
+  /** @domName CanvasRenderingContext2D.setMiterLimit */
+  void setMiterLimit(num limit) native;
+
+  /** @domName CanvasRenderingContext2D.setShadow */
+  void setShadow(num width, num height, num blur, [c_OR_color_OR_grayLevel_OR_r, num alpha_OR_g_OR_m, num b_OR_y, num a_OR_k, num a]) native;
+
+  /** @domName CanvasRenderingContext2D.setTransform */
+  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native;
+
+  /** @domName CanvasRenderingContext2D.stroke */
+  void stroke() native;
+
+  /** @domName CanvasRenderingContext2D.strokeRect */
+  void strokeRect(num x, num y, num width, num height, [num lineWidth]) native;
+
+  /** @domName CanvasRenderingContext2D.strokeText */
+  void strokeText(String text, num x, num y, [num maxWidth]) native;
+
+  /** @domName CanvasRenderingContext2D.transform */
+  void transform(num m11, num m12, num m21, num m22, num dx, num dy) native;
+
+  /** @domName CanvasRenderingContext2D.translate */
+  void translate(num tx, num ty) native;
+
+  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
+  ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) {
+    return _convertNativeToDart_ImageData(_webkitGetImageDataHD_1(sx, sy, sw, sh));
+  }
+  _webkitGetImageDataHD_1(sx, sy, sw, sh) native "webkitGetImageDataHD";
+
+  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD */
+  void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [dirtyX, dirtyY, dirtyWidth, dirtyHeight]) {
+    if (!?dirtyX &&
+        !?dirtyY &&
+        !?dirtyWidth &&
+        !?dirtyHeight) {
+      var imagedata_1 = _convertDartToNative_ImageData(imagedata);
+      _webkitPutImageDataHD_1(imagedata_1, dx, dy);
+      return;
+    }
+    if ((dirtyX is num || dirtyX == null) &&
+        (dirtyY is num || dirtyY == null) &&
+        (dirtyWidth is num || dirtyWidth == null) &&
+        (dirtyHeight is num || dirtyHeight == null)) {
+      var imagedata_2 = _convertDartToNative_ImageData(imagedata);
+      _webkitPutImageDataHD_2(imagedata_2, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      return;
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  void _webkitPutImageDataHD_1(imagedata, dx, dy) native "webkitPutImageDataHD";
+  void _webkitPutImageDataHD_2(imagedata, dx, dy, num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight) native "webkitPutImageDataHD";
+
+
+  /**
+   * Sets the color used inside shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
+  void setFillColorRgb(int r, int g, int b, [num a = 1]) {
+    this.fillStyle = 'rgba($r, $g, $b, $a)';
+  }
+
+  /**
+   * Sets the color used inside shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
+  void setFillColorHsl(int h, num s, num l, [num a = 1]) {
+    this.fillStyle = 'hsla($h, $s%, $l%, $a)';
+  }
+
+  /**
+   * Sets the color used for stroking shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
+  void setStrokeColorRgb(int r, int g, int b, [num a = 1]) {
+    this.strokeStyle = 'rgba($r, $g, $b, $a)';
+  }
+
+  /**
+   * Sets the color used for stroking shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
+  void setStrokeColorHsl(int h, num s, num l, [num a = 1]) {
+    this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
+  }
+}
+
+/// @domName ChannelMergerNode
+class ChannelMergerNode extends AudioNode native "*ChannelMergerNode" {
+}
+
+/// @domName ChannelSplitterNode
+class ChannelSplitterNode extends AudioNode native "*ChannelSplitterNode" {
+}
+
+/// @domName CharacterData
+class CharacterData extends Node native "*CharacterData" {
+
+  /** @domName CharacterData.data */
+  String data;
+
+  /** @domName CharacterData.length */
+  final int length;
+
+  /** @domName CharacterData.appendData */
+  void appendData(String data) native;
+
+  /** @domName CharacterData.deleteData */
+  void deleteData(int offset, int length) native;
+
+  /** @domName CharacterData.insertData */
+  void insertData(int offset, String data) native;
+
+  /** @domName CharacterData.remove */
+  void remove() native;
+
+  /** @domName CharacterData.replaceData */
+  void replaceData(int offset, int length, String data) native;
+
+  /** @domName CharacterData.substringData */
+  String substringData(int offset, int length) native;
+}
+
+/// @domName ClientRect
+class ClientRect native "*ClientRect" {
+
+  /** @domName ClientRect.bottom */
+  final num bottom;
+
+  /** @domName ClientRect.height */
+  final num height;
+
+  /** @domName ClientRect.left */
+  final num left;
+
+  /** @domName ClientRect.right */
+  final num right;
+
+  /** @domName ClientRect.top */
+  final num top;
+
+  /** @domName ClientRect.width */
+  final num width;
+}
+
+/// @domName Clipboard
+class Clipboard native "*Clipboard" {
+
+  /** @domName Clipboard.dropEffect */
+  String dropEffect;
+
+  /** @domName Clipboard.effectAllowed */
+  String effectAllowed;
+
+  /** @domName Clipboard.files */
+  final List<File> files;
+
+  /** @domName Clipboard.items */
+  final DataTransferItemList items;
+
+  /** @domName Clipboard.types */
+  final List types;
+
+  /** @domName Clipboard.clearData */
+  void clearData([String type]) native;
+
+  /** @domName Clipboard.getData */
+  String getData(String type) native;
+
+  /** @domName Clipboard.setData */
+  bool setData(String type, String data) native;
+
+  /** @domName Clipboard.setDragImage */
+  void setDragImage(ImageElement image, int x, int y) native;
+}
+
+/// @domName CloseEvent
+class CloseEvent extends Event native "*CloseEvent" {
+
+  /** @domName CloseEvent.code */
+  final int code;
+
+  /** @domName CloseEvent.reason */
+  final String reason;
+
+  /** @domName CloseEvent.wasClean */
+  final bool wasClean;
+}
+
+/// @domName Comment
+class Comment extends CharacterData native "*Comment" {
+}
+
+/// @domName CompositionEvent
+class CompositionEvent extends UIEvent native "*CompositionEvent" {
+
+  /** @domName CompositionEvent.data */
+  final String data;
+
+  /** @domName CompositionEvent.initCompositionEvent */
+  void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native;
+}
+// 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 Console
+    // Console is sometimes a singleton bag-of-properties without a prototype.
+    native "=(typeof console == 'undefined' ? {} : console)" {
+
+  /** @domName Console.memory */
+  final MemoryInfo memory;
+
+  /** @domName Console.profiles */
+  final List<ScriptProfile> profiles;
+
+  /** @domName Console.assertCondition */
+  void assertCondition(bool condition, Object arg) native;
+
+  /** @domName Console.count */
+  void count(Object arg) native;
+
+  /** @domName Console.debug */
+  void debug(Object arg) native;
+
+  /** @domName Console.dir */
+  void dir(Object arg) native;
+
+  /** @domName Console.dirxml */
+  void dirxml(Object arg) native;
+
+  /** @domName Console.error */
+  void error(Object arg) native;
+
+  /** @domName Console.group */
+  void group(Object arg) native;
+
+  /** @domName Console.groupCollapsed */
+  void groupCollapsed(Object arg) native;
+
+  /** @domName Console.groupEnd */
+  void groupEnd() native;
+
+  /** @domName Console.info */
+  void info(Object arg) native;
+
+  /** @domName Console.log */
+  void log(Object arg) native;
+
+  /** @domName Console.markTimeline */
+  void markTimeline(Object arg) native;
+
+  /** @domName Console.profile */
+  void profile(String title) native;
+
+  /** @domName Console.profileEnd */
+  void profileEnd(String title) native;
+
+  /** @domName Console.time */
+  void time(String title) native;
+
+  /** @domName Console.timeEnd */
+  void timeEnd(String title, Object arg) native;
+
+  /** @domName Console.timeStamp */
+  void timeStamp(Object arg) native;
+
+  /** @domName Console.trace */
+  void trace(Object arg) native;
+
+  /** @domName Console.warn */
+  void warn(Object arg) native;
+
+}
+
+/// @domName HTMLContentElement
+class ContentElement extends Element implements Element native "*HTMLContentElement" {
+
+  factory ContentElement() => _Elements.createContentElement();
+
+  /** @domName HTMLContentElement.resetStyleInheritance */
+  bool resetStyleInheritance;
+
+  /** @domName HTMLContentElement.select */
+  String select;
+
+  /** @domName HTMLContentElement.getDistributedNodes */
+  List<Node> getDistributedNodes() native;
+}
+
+/// @domName ConvolverNode
+class ConvolverNode extends AudioNode native "*ConvolverNode" {
+
+  /** @domName ConvolverNode.buffer */
+  AudioBuffer buffer;
+
+  /** @domName ConvolverNode.normalize */
+  bool normalize;
+}
+
+/// @domName Coordinates
+class Coordinates native "*Coordinates" {
+
+  /** @domName Coordinates.accuracy */
+  final num accuracy;
+
+  /** @domName Coordinates.altitude */
+  final num altitude;
+
+  /** @domName Coordinates.altitudeAccuracy */
+  final num altitudeAccuracy;
+
+  /** @domName Coordinates.heading */
+  final num heading;
+
+  /** @domName Coordinates.latitude */
+  final num latitude;
+
+  /** @domName Coordinates.longitude */
+  final num longitude;
+
+  /** @domName Coordinates.speed */
+  final num speed;
+}
+
+/// @domName Counter
+class Counter native "*Counter" {
+
+  /** @domName Counter.identifier */
+  final String identifier;
+
+  /** @domName Counter.listStyle */
+  final String listStyle;
+
+  /** @domName Counter.separator */
+  final String separator;
+}
+
+/// @domName Crypto
+class Crypto native "*Crypto" {
+
+  /** @domName Crypto.getRandomValues */
+  void getRandomValues(ArrayBufferView array) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class CustomEvent extends Event native "*CustomEvent" {
+  factory CustomEvent(String type, [bool canBubble = true, bool cancelable = true,
+      Object detail]) => _CustomEventFactoryProvider.createCustomEvent(
+      type, canBubble, cancelable, detail);
+
+  /** @domName CustomEvent.detail */
+  final Object detail;
+
+  /** @domName CustomEvent.initCustomEvent */
+  void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native "initCustomEvent";
+
+}
+
+/// @domName HTMLDListElement
+class DListElement extends Element implements Element native "*HTMLDListElement" {
+
+  factory DListElement() => _Elements.createDListElement();
+
+  /** @domName HTMLDListElement.compact */
+  bool compact;
+}
+
+/// @domName DOMApplicationCache
+class DOMApplicationCache extends EventTarget native "*DOMApplicationCache" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  DOMApplicationCacheEvents get on =>
+    new DOMApplicationCacheEvents(this);
+
+  static const int CHECKING = 2;
+
+  static const int DOWNLOADING = 3;
+
+  static const int IDLE = 1;
+
+  static const int OBSOLETE = 5;
+
+  static const int UNCACHED = 0;
+
+  static const int UPDATEREADY = 4;
+
+  /** @domName DOMApplicationCache.status */
+  final int status;
+
+  /** @domName DOMApplicationCache.abort */
+  void abort() native;
+
+  /** @domName DOMApplicationCache.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName DOMApplicationCache.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName DOMApplicationCache.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName DOMApplicationCache.swapCache */
+  void swapCache() native;
+
+  /** @domName DOMApplicationCache.update */
+  void update() native;
+}
+
+class DOMApplicationCacheEvents extends Events {
+  DOMApplicationCacheEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get cached => this['cached'];
+
+  EventListenerList get checking => this['checking'];
+
+  EventListenerList get downloading => this['downloading'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get noUpdate => this['noupdate'];
+
+  EventListenerList get obsolete => this['obsolete'];
+
+  EventListenerList get progress => this['progress'];
+
+  EventListenerList get updateReady => this['updateready'];
+}
+
+/// @domName DOMError
+class DOMError native "*DOMError" {
+
+  /** @domName DOMError.name */
+  final String name;
+}
+
+/// @domName DOMException
+class DOMException native "*DOMException" {
+
+  static const int ABORT_ERR = 20;
+
+  static const int DATA_CLONE_ERR = 25;
+
+  static const int DOMSTRING_SIZE_ERR = 2;
+
+  static const int HIERARCHY_REQUEST_ERR = 3;
+
+  static const int INDEX_SIZE_ERR = 1;
+
+  static const int INUSE_ATTRIBUTE_ERR = 10;
+
+  static const int INVALID_ACCESS_ERR = 15;
+
+  static const int INVALID_CHARACTER_ERR = 5;
+
+  static const int INVALID_MODIFICATION_ERR = 13;
+
+  static const int INVALID_NODE_TYPE_ERR = 24;
+
+  static const int INVALID_STATE_ERR = 11;
+
+  static const int NAMESPACE_ERR = 14;
+
+  static const int NETWORK_ERR = 19;
+
+  static const int NOT_FOUND_ERR = 8;
+
+  static const int NOT_SUPPORTED_ERR = 9;
+
+  static const int NO_DATA_ALLOWED_ERR = 6;
+
+  static const int NO_MODIFICATION_ALLOWED_ERR = 7;
+
+  static const int QUOTA_EXCEEDED_ERR = 22;
+
+  static const int SECURITY_ERR = 18;
+
+  static const int SYNTAX_ERR = 12;
+
+  static const int TIMEOUT_ERR = 23;
+
+  static const int TYPE_MISMATCH_ERR = 17;
+
+  static const int URL_MISMATCH_ERR = 21;
+
+  static const int VALIDATION_ERR = 16;
+
+  static const int WRONG_DOCUMENT_ERR = 4;
+
+  /** @domName DOMException.code */
+  final int code;
+
+  /** @domName DOMException.message */
+  final String message;
+
+  /** @domName DOMException.name */
+  final String name;
+
+  /** @domName DOMException.toString */
+  String toString() native;
+}
+
+/// @domName DOMFileSystem
+class DOMFileSystem native "*DOMFileSystem" {
+
+  /** @domName DOMFileSystem.name */
+  final String name;
+
+  /** @domName DOMFileSystem.root */
+  final DirectoryEntry root;
+}
+
+/// @domName DOMFileSystemSync
+class DOMFileSystemSync native "*DOMFileSystemSync" {
+
+  /** @domName DOMFileSystemSync.name */
+  final String name;
+
+  /** @domName DOMFileSystemSync.root */
+  final DirectoryEntrySync root;
+}
+
+/// @domName DOMImplementation
+class DOMImplementation native "*DOMImplementation" {
+
+  /** @domName DOMImplementation.createCSSStyleSheet */
+  CSSStyleSheet createCSSStyleSheet(String title, String media) native;
+
+  /** @domName DOMImplementation.createDocument */
+  Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) native;
+
+  /** @domName DOMImplementation.createDocumentType */
+  DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) native;
+
+  /** @domName DOMImplementation.createHTMLDocument */
+  Document createHTMLDocument(String title) native;
+
+  /** @domName DOMImplementation.hasFeature */
+  bool hasFeature(String feature, String version) native;
+}
+
+/// @domName MimeType
+class DOMMimeType native "*MimeType" {
+
+  /** @domName MimeType.description */
+  final String description;
+
+  /** @domName MimeType.enabledPlugin */
+  final DOMPlugin enabledPlugin;
+
+  /** @domName MimeType.suffixes */
+  final String suffixes;
+
+  /** @domName MimeType.type */
+  final String type;
+}
+
+/// @domName MimeTypeArray
+class DOMMimeTypeArray implements JavaScriptIndexingBehavior, List<DOMMimeType> native "*MimeTypeArray" {
+
+  /** @domName MimeTypeArray.length */
+  final int length;
+
+  DOMMimeType operator[](int index) => JS("DOMMimeType", "#[#]", this, index);
+
+  void operator[]=(int index, DOMMimeType value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<DOMMimeType> mixins.
+  // DOMMimeType is the element type.
+
+  // From Iterable<DOMMimeType>:
+
+  Iterator<DOMMimeType> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<DOMMimeType>(this);
+  }
+
+  // From Collection<DOMMimeType>:
+
+  void add(DOMMimeType value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(DOMMimeType value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<DOMMimeType> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(DOMMimeType element) => _Collections.contains(this, element);
+
+  void forEach(void f(DOMMimeType element)) => _Collections.forEach(this, f);
+
+  Collection map(f(DOMMimeType element)) => _Collections.map(this, [], f);
+
+  Collection<DOMMimeType> filter(bool f(DOMMimeType element)) =>
+     _Collections.filter(this, <DOMMimeType>[], f);
+
+  bool every(bool f(DOMMimeType element)) => _Collections.every(this, f);
+
+  bool some(bool f(DOMMimeType element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<DOMMimeType>:
+
+  void sort([Comparator<DOMMimeType> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(DOMMimeType element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(DOMMimeType element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  DOMMimeType get last => this[length - 1];
+
+  DOMMimeType removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<DOMMimeType> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [DOMMimeType initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<DOMMimeType> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <DOMMimeType>[]);
+
+  // -- end List<DOMMimeType> mixins.
+
+  /** @domName MimeTypeArray.item */
+  DOMMimeType item(int index) native;
+
+  /** @domName MimeTypeArray.namedItem */
+  DOMMimeType namedItem(String name) native;
+}
+
+/// @domName DOMParser
+class DOMParser native "*DOMParser" {
+
+  factory DOMParser() => _DOMParserFactoryProvider.createDOMParser();
+
+  /** @domName DOMParser.parseFromString */
+  Document parseFromString(String str, String contentType) native;
+}
+
+/// @domName Plugin
+class DOMPlugin native "*Plugin" {
+
+  /** @domName Plugin.description */
+  final String description;
+
+  /** @domName Plugin.filename */
+  final String filename;
+
+  /** @domName Plugin.length */
+  final int length;
+
+  /** @domName Plugin.name */
+  final String name;
+
+  /** @domName Plugin.item */
+  DOMMimeType item(int index) native;
+
+  /** @domName Plugin.namedItem */
+  DOMMimeType namedItem(String name) native;
+}
+
+/// @domName PluginArray
+class DOMPluginArray implements JavaScriptIndexingBehavior, List<DOMPlugin> native "*PluginArray" {
+
+  /** @domName PluginArray.length */
+  final int length;
+
+  DOMPlugin operator[](int index) => JS("DOMPlugin", "#[#]", this, index);
+
+  void operator[]=(int index, DOMPlugin value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<DOMPlugin> mixins.
+  // DOMPlugin is the element type.
+
+  // From Iterable<DOMPlugin>:
+
+  Iterator<DOMPlugin> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<DOMPlugin>(this);
+  }
+
+  // From Collection<DOMPlugin>:
+
+  void add(DOMPlugin value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(DOMPlugin value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<DOMPlugin> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(DOMPlugin element) => _Collections.contains(this, element);
+
+  void forEach(void f(DOMPlugin element)) => _Collections.forEach(this, f);
+
+  Collection map(f(DOMPlugin element)) => _Collections.map(this, [], f);
+
+  Collection<DOMPlugin> filter(bool f(DOMPlugin element)) =>
+     _Collections.filter(this, <DOMPlugin>[], f);
+
+  bool every(bool f(DOMPlugin element)) => _Collections.every(this, f);
+
+  bool some(bool f(DOMPlugin element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<DOMPlugin>:
+
+  void sort([Comparator<DOMPlugin> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(DOMPlugin element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(DOMPlugin element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  DOMPlugin get last => this[length - 1];
+
+  DOMPlugin removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<DOMPlugin> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [DOMPlugin initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<DOMPlugin> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <DOMPlugin>[]);
+
+  // -- end List<DOMPlugin> mixins.
+
+  /** @domName PluginArray.item */
+  DOMPlugin item(int index) native;
+
+  /** @domName PluginArray.namedItem */
+  DOMPlugin namedItem(String name) native;
+
+  /** @domName PluginArray.refresh */
+  void refresh(bool reload) native;
+}
+
+/// @domName Selection
+class DOMSelection native "*Selection" {
+
+  /** @domName Selection.anchorNode */
+  final Node anchorNode;
+
+  /** @domName Selection.anchorOffset */
+  final int anchorOffset;
+
+  /** @domName Selection.baseNode */
+  final Node baseNode;
+
+  /** @domName Selection.baseOffset */
+  final int baseOffset;
+
+  /** @domName Selection.extentNode */
+  final Node extentNode;
+
+  /** @domName Selection.extentOffset */
+  final int extentOffset;
+
+  /** @domName Selection.focusNode */
+  final Node focusNode;
+
+  /** @domName Selection.focusOffset */
+  final int focusOffset;
+
+  /** @domName Selection.isCollapsed */
+  final bool isCollapsed;
+
+  /** @domName Selection.rangeCount */
+  final int rangeCount;
+
+  /** @domName Selection.type */
+  final String type;
+
+  /** @domName Selection.addRange */
+  void addRange(Range range) native;
+
+  /** @domName Selection.collapse */
+  void collapse(Node node, int index) native;
+
+  /** @domName Selection.collapseToEnd */
+  void collapseToEnd() native;
+
+  /** @domName Selection.collapseToStart */
+  void collapseToStart() native;
+
+  /** @domName Selection.containsNode */
+  bool containsNode(Node node, bool allowPartial) native;
+
+  /** @domName Selection.deleteFromDocument */
+  void deleteFromDocument() native;
+
+  /** @domName Selection.empty */
+  void empty() native;
+
+  /** @domName Selection.extend */
+  void extend(Node node, int offset) native;
+
+  /** @domName Selection.getRangeAt */
+  Range getRangeAt(int index) native;
+
+  /** @domName Selection.modify */
+  void modify(String alter, String direction, String granularity) native;
+
+  /** @domName Selection.removeAllRanges */
+  void removeAllRanges() native;
+
+  /** @domName Selection.selectAllChildren */
+  void selectAllChildren(Node node) native;
+
+  /** @domName Selection.setBaseAndExtent */
+  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) native;
+
+  /** @domName Selection.setPosition */
+  void setPosition(Node node, int offset) native;
+
+  /** @domName Selection.toString */
+  String toString() native;
+}
+
+/// @domName DOMSettableTokenList
+class DOMSettableTokenList extends DOMTokenList native "*DOMSettableTokenList" {
+
+  /** @domName DOMSettableTokenList.value */
+  String value;
+}
+/// @domName DOMStringMap
+abstract class DOMStringMap {
+}
+
+/// @domName DOMTokenList
+class DOMTokenList native "*DOMTokenList" {
+
+  /** @domName DOMTokenList.length */
+  final int length;
+
+  /** @domName DOMTokenList.contains */
+  bool contains(String token) native;
+
+  /** @domName DOMTokenList.item */
+  String item(int index) native;
+
+  /** @domName DOMTokenList.toString */
+  String toString() native;
+
+  /** @domName DOMTokenList.toggle */
+  bool toggle(String token, [bool force]) native;
+}
+
+/// @domName HTMLDataListElement
+class DataListElement extends Element implements Element native "*HTMLDataListElement" {
+
+  factory DataListElement() => _Elements.createDataListElement();
+
+  /** @domName HTMLDataListElement.options */
+  final HTMLCollection options;
+}
+
+/// @domName DataTransferItem
+class DataTransferItem native "*DataTransferItem" {
+
+  /** @domName DataTransferItem.kind */
+  final String kind;
+
+  /** @domName DataTransferItem.type */
+  final String type;
+
+  /** @domName DataTransferItem.getAsFile */
+  Blob getAsFile() native;
+
+  /** @domName DataTransferItem.getAsString */
+  void getAsString([StringCallback callback]) native;
+
+  /** @domName DataTransferItem.webkitGetAsEntry */
+  Entry webkitGetAsEntry() native;
+}
+
+/// @domName DataTransferItemList
+class DataTransferItemList native "*DataTransferItemList" {
+
+  /** @domName DataTransferItemList.length */
+  final int length;
+
+  /** @domName DataTransferItemList.add */
+  void add(data_OR_file, [String type]) native;
+
+  /** @domName DataTransferItemList.clear */
+  void clear() native;
+
+  /** @domName DataTransferItemList.item */
+  DataTransferItem item(int index) native;
+}
+
+/// @domName DataView
+class DataView extends ArrayBufferView native "*DataView" {
+
+  factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
+    if (!?byteOffset) {
+      return _DataViewFactoryProvider.createDataView(buffer);
+    }
+    if (!?byteLength) {
+      return _DataViewFactoryProvider.createDataView(buffer, byteOffset);
+    }
+    return _DataViewFactoryProvider.createDataView(buffer, byteOffset, byteLength);
+  }
+
+  /** @domName DataView.getFloat32 */
+  num getFloat32(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getFloat64 */
+  num getFloat64(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getInt16 */
+  int getInt16(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getInt32 */
+  int getInt32(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getInt8 */
+  int getInt8(int byteOffset) native;
+
+  /** @domName DataView.getUint16 */
+  int getUint16(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getUint32 */
+  int getUint32(int byteOffset, {bool littleEndian}) native;
+
+  /** @domName DataView.getUint8 */
+  int getUint8(int byteOffset) native;
+
+  /** @domName DataView.setFloat32 */
+  void setFloat32(int byteOffset, num value, {bool littleEndian}) native;
+
+  /** @domName DataView.setFloat64 */
+  void setFloat64(int byteOffset, num value, {bool littleEndian}) native;
+
+  /** @domName DataView.setInt16 */
+  void setInt16(int byteOffset, int value, {bool littleEndian}) native;
+
+  /** @domName DataView.setInt32 */
+  void setInt32(int byteOffset, int value, {bool littleEndian}) native;
+
+  /** @domName DataView.setInt8 */
+  void setInt8(int byteOffset, int value) native;
+
+  /** @domName DataView.setUint16 */
+  void setUint16(int byteOffset, int value, {bool littleEndian}) native;
+
+  /** @domName DataView.setUint32 */
+  void setUint32(int byteOffset, int value, {bool littleEndian}) native;
+
+  /** @domName DataView.setUint8 */
+  void setUint8(int byteOffset, int value) native;
+}
+
+/// @domName Database
+class Database native "*Database" {
+
+  /** @domName Database.version */
+  final String version;
+
+  /** @domName Database.changeVersion */
+  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
+
+  /** @domName Database.readTransaction */
+  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
+
+  /** @domName Database.transaction */
+  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void DatabaseCallback(database);
+
+/// @domName DatabaseSync
+class DatabaseSync native "*DatabaseSync" {
+
+  /** @domName DatabaseSync.lastErrorMessage */
+  final String lastErrorMessage;
+
+  /** @domName DatabaseSync.version */
+  final String version;
+
+  /** @domName DatabaseSync.changeVersion */
+  void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]) native;
+
+  /** @domName DatabaseSync.readTransaction */
+  void readTransaction(SQLTransactionSyncCallback callback) native;
+
+  /** @domName DatabaseSync.transaction */
+  void transaction(SQLTransactionSyncCallback callback) native;
+}
+
+/// @domName DedicatedWorkerContext
+class DedicatedWorkerContext extends WorkerContext native "*DedicatedWorkerContext" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  DedicatedWorkerContextEvents get on =>
+    new DedicatedWorkerContextEvents(this);
+
+  /** @domName DedicatedWorkerContext.postMessage */
+  void postMessage(/*any*/ message, [messagePorts]) {
+    if (?messagePorts) {
+      var message_1 = _convertDartToNative_SerializedScriptValue(message);
+      _postMessage_1(message_1, messagePorts);
+      return;
+    }
+    var message_2 = _convertDartToNative_SerializedScriptValue(message);
+    _postMessage_2(message_2);
+    return;
+  }
+  void _postMessage_1(message, List messagePorts) native "postMessage";
+  void _postMessage_2(message) native "postMessage";
+}
+
+class DedicatedWorkerContextEvents extends WorkerContextEvents {
+  DedicatedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get message => this['message'];
+}
+
+/// @domName DelayNode
+class DelayNode extends AudioNode native "*DelayNode" {
+
+  /** @domName DelayNode.delayTime */
+  final AudioParam delayTime;
+}
+
+/// @domName HTMLDetailsElement
+class DetailsElement extends Element implements Element native "*HTMLDetailsElement" {
+
+  factory DetailsElement() => _Elements.createDetailsElement();
+
+  /** @domName HTMLDetailsElement.open */
+  bool open;
+}
+
+/// @domName DeviceMotionEvent
+class DeviceMotionEvent extends Event native "*DeviceMotionEvent" {
+
+  /** @domName DeviceMotionEvent.interval */
+  final num interval;
+}
+
+/// @domName DeviceOrientationEvent
+class DeviceOrientationEvent extends Event native "*DeviceOrientationEvent" {
+
+  /** @domName DeviceOrientationEvent.absolute */
+  final bool absolute;
+
+  /** @domName DeviceOrientationEvent.alpha */
+  final num alpha;
+
+  /** @domName DeviceOrientationEvent.beta */
+  final num beta;
+
+  /** @domName DeviceOrientationEvent.gamma */
+  final num gamma;
+
+  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
+  void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native;
+}
+
+/// @domName HTMLDirectoryElement
+class DirectoryElement extends Element implements Element native "*HTMLDirectoryElement" {
+
+  /** @domName HTMLDirectoryElement.compact */
+  bool compact;
+}
+
+/// @domName DirectoryEntry
+class DirectoryEntry extends Entry native "*DirectoryEntry" {
+
+  /** @domName DirectoryEntry.createReader */
+  DirectoryReader createReader() native;
+
+  /** @domName DirectoryEntry.getDirectory */
+  void getDirectory(String path, {options, successCallback, errorCallback}) {
+    if (?errorCallback) {
+      var options_1 = _convertDartToNative_Dictionary(options);
+      _getDirectory_1(path, options_1, successCallback, errorCallback);
+      return;
+    }
+    if (?successCallback) {
+      var options_2 = _convertDartToNative_Dictionary(options);
+      _getDirectory_2(path, options_2, successCallback);
+      return;
+    }
+    if (?options) {
+      var options_3 = _convertDartToNative_Dictionary(options);
+      _getDirectory_3(path, options_3);
+      return;
+    }
+    _getDirectory_4(path);
+    return;
+  }
+  void _getDirectory_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native "getDirectory";
+  void _getDirectory_2(path, options, EntryCallback successCallback) native "getDirectory";
+  void _getDirectory_3(path, options) native "getDirectory";
+  void _getDirectory_4(path) native "getDirectory";
+
+  /** @domName DirectoryEntry.getFile */
+  void getFile(String path, {options, successCallback, errorCallback}) {
+    if (?errorCallback) {
+      var options_1 = _convertDartToNative_Dictionary(options);
+      _getFile_1(path, options_1, successCallback, errorCallback);
+      return;
+    }
+    if (?successCallback) {
+      var options_2 = _convertDartToNative_Dictionary(options);
+      _getFile_2(path, options_2, successCallback);
+      return;
+    }
+    if (?options) {
+      var options_3 = _convertDartToNative_Dictionary(options);
+      _getFile_3(path, options_3);
+      return;
+    }
+    _getFile_4(path);
+    return;
+  }
+  void _getFile_1(path, options, EntryCallback successCallback, ErrorCallback errorCallback) native "getFile";
+  void _getFile_2(path, options, EntryCallback successCallback) native "getFile";
+  void _getFile_3(path, options) native "getFile";
+  void _getFile_4(path) native "getFile";
+
+  /** @domName DirectoryEntry.removeRecursively */
+  void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
+}
+
+/// @domName DirectoryEntrySync
+class DirectoryEntrySync extends EntrySync native "*DirectoryEntrySync" {
+
+  /** @domName DirectoryEntrySync.createReader */
+  DirectoryReaderSync createReader() native;
+
+  /** @domName DirectoryEntrySync.getDirectory */
+  DirectoryEntrySync getDirectory(String path, Map flags) {
+    var flags_1 = _convertDartToNative_Dictionary(flags);
+    return _getDirectory_1(path, flags_1);
+  }
+  DirectoryEntrySync _getDirectory_1(path, flags) native "getDirectory";
+
+  /** @domName DirectoryEntrySync.getFile */
+  FileEntrySync getFile(String path, Map flags) {
+    var flags_1 = _convertDartToNative_Dictionary(flags);
+    return _getFile_1(path, flags_1);
+  }
+  FileEntrySync _getFile_1(path, flags) native "getFile";
+
+  /** @domName DirectoryEntrySync.removeRecursively */
+  void removeRecursively() native;
+}
+
+/// @domName DirectoryReader
+class DirectoryReader native "*DirectoryReader" {
+
+  /** @domName DirectoryReader.readEntries */
+  void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native;
+}
+
+/// @domName DirectoryReaderSync
+class DirectoryReaderSync native "*DirectoryReaderSync" {
+
+  /** @domName DirectoryReaderSync.readEntries */
+  List<EntrySync> readEntries() native;
+}
+
+/// @domName HTMLDivElement
+class DivElement extends Element implements Element native "*HTMLDivElement" {
+
+  factory DivElement() => _Elements.createDivElement();
+
+  /** @domName HTMLDivElement.align */
+  String align;
+}
+// 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 Document extends Node
+    native "*HTMLDocument"
+{
+
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  DocumentEvents get on =>
+    new DocumentEvents(this);
+
+  /** @domName HTMLDocument.activeElement */
+  final Element activeElement;
+
+  /** @domName Document.body */
+  Element body;
+
+  /** @domName Document.charset */
+  String charset;
+
+  /** @domName Document.cookie */
+  String cookie;
+
+  /** @domName Document.defaultView */
+  Window get window => _convertNativeToDart_Window(this._window);
+  Window get _window => JS("Window", "#.defaultView", this);
+
+  /** @domName Document.documentElement */
+  final Element documentElement;
+
+  /** @domName Document.domain */
+  final String domain;
+
+  /** @domName Document.head */
+  final HeadElement head;
+
+  /** @domName Document.implementation */
+  final DOMImplementation implementation;
+
+  /** @domName Document.lastModified */
+  final String lastModified;
+
+  /** @domName Document.preferredStylesheetSet */
+  final String preferredStylesheetSet;
+
+  /** @domName Document.readyState */
+  final String readyState;
+
+  /** @domName Document.referrer */
+  final String referrer;
+
+  /** @domName Document.selectedStylesheetSet */
+  String selectedStylesheetSet;
+
+  /** @domName Document.styleSheets */
+  final List<StyleSheet> styleSheets;
+
+  /** @domName Document.title */
+  String title;
+
+  /** @domName Document.webkitCurrentFullScreenElement */
+  final Element webkitCurrentFullScreenElement;
+
+  /** @domName Document.webkitFullScreenKeyboardInputAllowed */
+  final bool webkitFullScreenKeyboardInputAllowed;
+
+  /** @domName Document.webkitFullscreenElement */
+  final Element webkitFullscreenElement;
+
+  /** @domName Document.webkitFullscreenEnabled */
+  final bool webkitFullscreenEnabled;
+
+  /** @domName Document.webkitHidden */
+  final bool webkitHidden;
+
+  /** @domName Document.webkitIsFullScreen */
+  final bool webkitIsFullScreen;
+
+  /** @domName Document.webkitPointerLockElement */
+  final Element webkitPointerLockElement;
+
+  /** @domName Document.webkitVisibilityState */
+  final String webkitVisibilityState;
+
+  /** @domName Document.caretRangeFromPoint */
+  Range caretRangeFromPoint(int x, int y) native;
+
+  /** @domName Document.createCDATASection */
+  CDATASection createCDATASection(String data) native;
+
+  /** @domName Document.createDocumentFragment */
+  DocumentFragment createDocumentFragment() native;
+
+  /** @domName Document.createElement */
+  Element $dom_createElement(String tagName) native "createElement";
+
+  /** @domName Document.createElementNS */
+  Element $dom_createElementNS(String namespaceURI, String qualifiedName) native "createElementNS";
+
+  /** @domName Document.createEvent */
+  Event $dom_createEvent(String eventType) native "createEvent";
+
+  /** @domName Document.createRange */
+  Range createRange() native;
+
+  /** @domName Document.createTextNode */
+  Text $dom_createTextNode(String data) native "createTextNode";
+
+  /** @domName Document.createTouch */
+  Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) {
+    EventTarget target_1 = _convertDartToNative_EventTarget(target);
+    return _createTouch_1(window, target_1, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce);
+  }
+  Touch _createTouch_1(LocalWindow window, EventTarget target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "createTouch";
+
+  /** @domName Document.createTouchList */
+  TouchList $dom_createTouchList() native "createTouchList";
+
+  /** @domName Document.elementFromPoint */
+  Element elementFromPoint(int x, int y) native;
+
+  /** @domName Document.execCommand */
+  bool execCommand(String command, bool userInterface, String value) native;
+
+  /** @domName Document.getCSSCanvasContext */
+  CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height) native;
+
+  /** @domName Document.getElementById */
+  Element $dom_getElementById(String elementId) native "getElementById";
+
+  /** @domName Document.getElementsByClassName */
+  List<Node> $dom_getElementsByClassName(String tagname) native "getElementsByClassName";
+
+  /** @domName Document.getElementsByName */
+  List<Node> $dom_getElementsByName(String elementName) native "getElementsByName";
+
+  /** @domName Document.getElementsByTagName */
+  List<Node> $dom_getElementsByTagName(String tagname) native "getElementsByTagName";
+
+  /** @domName Document.queryCommandEnabled */
+  bool queryCommandEnabled(String command) native;
+
+  /** @domName Document.queryCommandIndeterm */
+  bool queryCommandIndeterm(String command) native;
+
+  /** @domName Document.queryCommandState */
+  bool queryCommandState(String command) native;
+
+  /** @domName Document.queryCommandSupported */
+  bool queryCommandSupported(String command) native;
+
+  /** @domName Document.queryCommandValue */
+  String queryCommandValue(String command) native;
+
+  /** @domName Document.querySelector */
+  Element $dom_querySelector(String selectors) native "querySelector";
+
+  /** @domName Document.querySelectorAll */
+  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
+
+  /** @domName Document.webkitCancelFullScreen */
+  void webkitCancelFullScreen() native;
+
+  /** @domName Document.webkitExitFullscreen */
+  void webkitExitFullscreen() native;
+
+  /** @domName Document.webkitExitPointerLock */
+  void webkitExitPointerLock() native;
+
+  // TODO(jacobr): implement all Element methods not on Document.
+
+  Element query(String selectors) {
+    // It is fine for our RegExp to detect element id query selectors to have
+    // false negatives but not false positives.
+    if (const RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) {
+      return $dom_getElementById(selectors.substring(1));
+    }
+    return $dom_querySelector(selectors);
+  }
+
+  List<Element> queryAll(String selectors) {
+    if (const RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) {
+      final mutableMatches = $dom_getElementsByName(
+          selectors.substring(7,selectors.length - 2));
+      int len = mutableMatches.length;
+      final copyOfMatches = new List<Element>(len);
+      for (int i = 0; i < len; ++i) {
+        copyOfMatches[i] = mutableMatches[i];
+      }
+      return new _FrozenElementList._wrap(copyOfMatches);
+    } else if (const RegExp("^[*a-zA-Z0-9]+\$").hasMatch(selectors)) {
+      final mutableMatches = $dom_getElementsByTagName(selectors);
+      int len = mutableMatches.length;
+      final copyOfMatches = new List<Element>(len);
+      for (int i = 0; i < len; ++i) {
+        copyOfMatches[i] = mutableMatches[i];
+      }
+      return new _FrozenElementList._wrap(copyOfMatches);
+    } else {
+      return new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
+    }
+  }
+}
+
+class DocumentEvents extends ElementEvents {
+  DocumentEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get beforeCopy => this['beforecopy'];
+
+  EventListenerList get beforeCut => this['beforecut'];
+
+  EventListenerList get beforePaste => this['beforepaste'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get change => this['change'];
+
+  EventListenerList get click => this['click'];
+
+  EventListenerList get contextMenu => this['contextmenu'];
+
+  EventListenerList get copy => this['copy'];
+
+  EventListenerList get cut => this['cut'];
+
+  EventListenerList get doubleClick => this['dblclick'];
+
+  EventListenerList get drag => this['drag'];
+
+  EventListenerList get dragEnd => this['dragend'];
+
+  EventListenerList get dragEnter => this['dragenter'];
+
+  EventListenerList get dragLeave => this['dragleave'];
+
+  EventListenerList get dragOver => this['dragover'];
+
+  EventListenerList get dragStart => this['dragstart'];
+
+  EventListenerList get drop => this['drop'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get input => this['input'];
+
+  EventListenerList get invalid => this['invalid'];
+
+  EventListenerList get keyDown => this['keydown'];
+
+  EventListenerList get keyPress => this['keypress'];
+
+  EventListenerList get keyUp => this['keyup'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get mouseDown => this['mousedown'];
+
+  EventListenerList get mouseMove => this['mousemove'];
+
+  EventListenerList get mouseOut => this['mouseout'];
+
+  EventListenerList get mouseOver => this['mouseover'];
+
+  EventListenerList get mouseUp => this['mouseup'];
+
+  EventListenerList get mouseWheel => this['mousewheel'];
+
+  EventListenerList get paste => this['paste'];
+
+  EventListenerList get readyStateChange => this['readystatechange'];
+
+  EventListenerList get reset => this['reset'];
+
+  EventListenerList get scroll => this['scroll'];
+
+  EventListenerList get search => this['search'];
+
+  EventListenerList get select => this['select'];
+
+  EventListenerList get selectionChange => this['selectionchange'];
+
+  EventListenerList get selectStart => this['selectstart'];
+
+  EventListenerList get submit => this['submit'];
+
+  EventListenerList get touchCancel => this['touchcancel'];
+
+  EventListenerList get touchEnd => this['touchend'];
+
+  EventListenerList get touchMove => this['touchmove'];
+
+  EventListenerList get touchStart => this['touchstart'];
+
+  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
+
+  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
+
+  EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
+
+  EventListenerList get pointerLockError => this['webkitpointerlockerror'];
+}
+// 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.
+
+class _FilteredElementList implements List {
+  final Node _node;
+  final List<Node> _childNodes;
+
+  _FilteredElementList(Node node): _childNodes = node.nodes, _node = node;
+
+  // We can't memoize this, since it's possible that children will be messed
+  // with externally to this class.
+  //
+  // TODO(nweiz): Do we really need to copy the list to make the types work out?
+  List<Element> get _filtered =>
+    new List.from(_childNodes.filter((n) => n is Element));
+
+  void forEach(void f(Element element)) {
+    _filtered.forEach(f);
+  }
+
+  void operator []=(int index, Element value) {
+    this[index].replaceWith(value);
+  }
+
+  void set length(int newLength) {
+    final len = this.length;
+    if (newLength >= len) {
+      return;
+    } else if (newLength < 0) {
+      throw new ArgumentError("Invalid list length");
+    }
+
+    removeRange(newLength - 1, len - newLength);
+  }
+
+  void add(Element value) {
+    _childNodes.add(value);
+  }
+
+  void addAll(Collection<Element> collection) {
+    collection.forEach(add);
+  }
+
+  void addLast(Element value) {
+    add(value);
+  }
+
+  bool contains(Element element) {
+    return element is Element && _childNodes.contains(element);
+  }
+
+  void sort([Comparator<Element> compare = Comparable.compare]) {
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
+  }
+
+  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
+    throw new UnimplementedError();
+  }
+
+  void removeRange(int start, int rangeLength) {
+    _filtered.getRange(start, rangeLength).forEach((el) => el.remove());
+  }
+
+  void insertRange(int start, int rangeLength, [initialValue = null]) {
+    throw new UnimplementedError();
+  }
+
+  void clear() {
+    // Currently, ElementList#clear clears even non-element nodes, so we follow
+    // that behavior.
+    _childNodes.clear();
+  }
+
+  Element removeLast() {
+    final result = this.last;
+    if (result != null) {
+      result.remove();
+    }
+    return result;
+  }
+
+  Collection map(f(Element element)) => _filtered.map(f);
+  Collection<Element> filter(bool f(Element element)) => _filtered.filter(f);
+  bool every(bool f(Element element)) => _filtered.every(f);
+  bool some(bool f(Element element)) => _filtered.some(f);
+  bool get isEmpty => _filtered.isEmpty;
+  int get length => _filtered.length;
+  Element operator [](int index) => _filtered[index];
+  Iterator<Element> iterator() => _filtered.iterator();
+  List<Element> getRange(int start, int rangeLength) =>
+    _filtered.getRange(start, rangeLength);
+  int indexOf(Element element, [int start = 0]) =>
+    _filtered.indexOf(element, start);
+
+  int lastIndexOf(Element element, [int start = null]) {
+    if (start == null) start = length - 1;
+    return _filtered.lastIndexOf(element, start);
+  }
+
+  Element get last => _filtered.last;
+}
+
+Future<CSSStyleDeclaration> _emptyStyleFuture() {
+  return _createMeasurementFuture(() => new Element.tag('div').style,
+                                  new Completer<CSSStyleDeclaration>());
+}
+
+class EmptyElementRect implements ElementRect {
+  final ClientRect client = const _SimpleClientRect(0, 0, 0, 0);
+  final ClientRect offset = const _SimpleClientRect(0, 0, 0, 0);
+  final ClientRect scroll = const _SimpleClientRect(0, 0, 0, 0);
+  final ClientRect bounding = const _SimpleClientRect(0, 0, 0, 0);
+  final List<ClientRect> clientRects = const <ClientRect>[];
+
+  const EmptyElementRect();
+}
+
+class _FrozenCssClassSet extends _CssClassSet {
+  _FrozenCssClassSet() : super(null);
+
+  void _write(Set s) {
+    throw new UnsupportedError(
+        'frozen class set cannot be modified');
+  }
+  Set<String> _read() => new Set<String>();
+
+  bool get frozen => true;
+}
+
+class DocumentFragment extends Node native "*DocumentFragment" {
+  factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
+
+  factory DocumentFragment.html(String html) =>
+      _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
+
+  factory DocumentFragment.svg(String svg) =>
+      new _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svg);
+
+  List<Element> _elements;
+
+  List<Element> get elements {
+    if (_elements == null) {
+      _elements = new _FilteredElementList(this);
+    }
+    return _elements;
+  }
+
+  // TODO: The type of value should be Collection<Element>. See http://b/5392897
+  void set elements(value) {
+    // Copy list first since we don't want liveness during iteration.
+    List copy = new List.from(value);
+    final elements = this.elements;
+    elements.clear();
+    elements.addAll(copy);
+  }
+
+  Element query(String selectors) => $dom_querySelector(selectors);
+
+  List<Element> queryAll(String selectors) =>
+    new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
+
+  String get innerHTML {
+    final e = new Element.tag("div");
+    e.nodes.add(this.clone(true));
+    return e.innerHTML;
+  }
+
+  String get outerHTML => innerHTML;
+
+  // TODO(nweiz): Do we want to support some variant of innerHTML for XML and/or
+  // SVG strings?
+  void set innerHTML(String value) {
+    this.nodes.clear();
+
+    final e = new Element.tag("div");
+    e.innerHTML = value;
+
+    // Copy list first since we don't want liveness during iteration.
+    List nodes = new List.from(e.nodes);
+    this.nodes.addAll(nodes);
+  }
+
+  Node _insertAdjacentNode(String where, Node node) {
+    switch (where.toLowerCase()) {
+      case "beforebegin": return null;
+      case "afterend": return null;
+      case "afterbegin":
+        var first = this.nodes.length > 0 ? this.nodes[0] : null;
+        this.insertBefore(node, first);
+        return node;
+      case "beforeend":
+        this.nodes.add(node);
+        return node;
+      default:
+        throw new ArgumentError("Invalid position ${where}");
+    }
+  }
+
+  Element insertAdjacentElement(String where, Element element)
+    => this._insertAdjacentNode(where, element);
+
+  void insertAdjacentText(String where, String text) {
+    this._insertAdjacentNode(where, new Text(text));
+  }
+
+  void insertAdjacentHTML(String where, String text) {
+    this._insertAdjacentNode(where, new DocumentFragment.html(text));
+  }
+
+  void addText(String text) {
+    this.insertAdjacentText('beforeend', text);
+  }
+
+  void addHTML(String text) {
+    this.insertAdjacentHTML('beforeend', text);
+  }
+
+  Future<ElementRect> get rect {
+    return _createMeasurementFuture(() => const EmptyElementRect(),
+                                    new Completer<ElementRect>());
+  }
+
+  // If we can come up with a semi-reasonable default value for an Element
+  // getter, we'll use it. In general, these return the same values as an
+  // element that has no parent.
+  String get contentEditable => "false";
+  bool get isContentEditable => false;
+  bool get draggable => false;
+  bool get hidden => false;
+  bool get spellcheck => false;
+  bool get translate => false;
+  int get tabIndex => -1;
+  String get id => "";
+  String get title => "";
+  String get tagName => "";
+  String get webkitdropzone => "";
+  String get webkitRegionOverflow => "";
+  Element get $m_firstElementChild {
+    if (elements.length > 0) {
+      return elements[0];
+    }
+    return null;
+  }
+  Element get $m_lastElementChild() => elements.last;
+  Element get nextElementSibling => null;
+  Element get previousElementSibling => null;
+  Element get offsetParent => null;
+  Element get parent => null;
+  Map<String, String> get attributes => const {};
+  CssClassSet get classes => new _FrozenCssClassSet();
+  Map<String, String> get dataAttributes => const {};
+  CSSStyleDeclaration get style => new Element.tag('div').style;
+  Future<CSSStyleDeclaration> get computedStyle =>
+      _emptyStyleFuture();
+  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) =>
+      _emptyStyleFuture();
+  bool matchesSelector(String selectors) => false;
+
+  // Imperative Element methods are made into no-ops, as they are on parentless
+  // elements.
+  void blur() {}
+  void focus() {}
+  void click() {}
+  void scrollByLines(int lines) {}
+  void scrollByPages(int pages) {}
+  void scrollIntoView([bool centerIfNeeded]) {}
+  void webkitRequestFullScreen(int flags) {}
+  void webkitRequestFullscreen() {}
+
+  // Setters throw errors rather than being no-ops because we aren't going to
+  // retain the values that were set, and erroring out seems clearer.
+  void set attributes(Map<String, String> value) {
+    throw new UnsupportedError(
+      "Attributes can't be set for document fragments.");
+  }
+
+  void set classes(Collection<String> value) {
+    throw new UnsupportedError(
+      "Classes can't be set for document fragments.");
+  }
+
+  void set dataAttributes(Map<String, String> value) {
+    throw new UnsupportedError(
+      "Data attributes can't be set for document fragments.");
+  }
+
+  void set contentEditable(String value) {
+    throw new UnsupportedError(
+      "Content editable can't be set for document fragments.");
+  }
+
+  String get dir {
+    throw new UnsupportedError(
+      "Document fragments don't support text direction.");
+  }
+
+  void set dir(String value) {
+    throw new UnsupportedError(
+      "Document fragments don't support text direction.");
+  }
+
+  void set draggable(bool value) {
+    throw new UnsupportedError(
+      "Draggable can't be set for document fragments.");
+  }
+
+  void set hidden(bool value) {
+    throw new UnsupportedError(
+      "Hidden can't be set for document fragments.");
+  }
+
+  void set id(String value) {
+    throw new UnsupportedError(
+      "ID can't be set for document fragments.");
+  }
+
+  String get lang {
+    throw new UnsupportedError(
+      "Document fragments don't support language.");
+  }
+
+  void set lang(String value) {
+    throw new UnsupportedError(
+      "Document fragments don't support language.");
+  }
+
+  void set scrollLeft(int value) {
+    throw new UnsupportedError(
+      "Document fragments don't support scrolling.");
+  }
+
+  void set scrollTop(int value) {
+    throw new UnsupportedError(
+      "Document fragments don't support scrolling.");
+  }
+
+  void set spellcheck(bool value) {
+     throw new UnsupportedError(
+      "Spellcheck can't be set for document fragments.");
+  }
+
+  void set translate(bool value) {
+     throw new UnsupportedError(
+      "Spellcheck can't be set for document fragments.");
+  }
+
+  void set tabIndex(int value) {
+    throw new UnsupportedError(
+      "Tab index can't be set for document fragments.");
+  }
+
+  void set title(String value) {
+    throw new UnsupportedError(
+      "Title can't be set for document fragments.");
+  }
+
+  void set webkitdropzone(String value) {
+    throw new UnsupportedError(
+      "WebKit drop zone can't be set for document fragments.");
+  }
+
+  void set webkitRegionOverflow(String value) {
+    throw new UnsupportedError(
+      "WebKit region overflow can't be set for document fragments.");
+  }
+
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  ElementEvents get on =>
+    new ElementEvents(this);
+
+  /** @domName DocumentFragment.querySelector */
+  Element $dom_querySelector(String selectors) native "querySelector";
+
+  /** @domName DocumentFragment.querySelectorAll */
+  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
+
+}
+
+/// @domName DocumentType
+class DocumentType extends Node native "*DocumentType" {
+
+  /** @domName DocumentType.entities */
+  final NamedNodeMap entities;
+
+  /** @domName DocumentType.internalSubset */
+  final String internalSubset;
+
+  /** @domName DocumentType.name */
+  final String name;
+
+  /** @domName DocumentType.notations */
+  final NamedNodeMap notations;
+
+  /** @domName DocumentType.publicId */
+  final String publicId;
+
+  /** @domName DocumentType.systemId */
+  final String systemId;
+
+  /** @domName DocumentType.remove */
+  void remove() native;
+}
+
+/// @domName DynamicsCompressorNode
+class DynamicsCompressorNode extends AudioNode native "*DynamicsCompressorNode" {
+
+  /** @domName DynamicsCompressorNode.attack */
+  final AudioParam attack;
+
+  /** @domName DynamicsCompressorNode.knee */
+  final AudioParam knee;
+
+  /** @domName DynamicsCompressorNode.ratio */
+  final AudioParam ratio;
+
+  /** @domName DynamicsCompressorNode.reduction */
+  final AudioParam reduction;
+
+  /** @domName DynamicsCompressorNode.release */
+  final AudioParam release;
+
+  /** @domName DynamicsCompressorNode.threshold */
+  final AudioParam threshold;
+}
+
+/// @domName EXTTextureFilterAnisotropic
+class EXTTextureFilterAnisotropic native "*EXTTextureFilterAnisotropic" {
+
+  static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
+
+  static const int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
+}
+// 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.
+
+// TODO(jacobr): use _Lists.dart to remove some of the duplicated
+// functionality.
+class _ChildrenElementList implements List {
+  // Raw Element.
+  final Element _element;
+  final HTMLCollection _childElements;
+
+  _ChildrenElementList._wrap(Element element)
+    : _childElements = element.$dom_children,
+      _element = element;
+
+  List<Element> _toList() {
+    final output = new List(_childElements.length);
+    for (int i = 0, len = _childElements.length; i < len; i++) {
+      output[i] = _childElements[i];
+    }
+    return output;
+  }
+
+  bool contains(Element element) => _childElements.contains(element);
+
+  void forEach(void f(Element element)) {
+    for (Element element in _childElements) {
+      f(element);
+    }
+  }
+
+  List<Element> filter(bool f(Element element)) {
+    final output = [];
+    forEach((Element element) {
+      if (f(element)) {
+        output.add(element);
+      }
+    });
+    return new _FrozenElementList._wrap(output);
+  }
+
+  bool every(bool f(Element element)) {
+    for (Element element in this) {
+      if (!f(element)) {
+        return false;
+      }
+    };
+    return true;
+  }
+
+  bool some(bool f(Element element)) {
+    for (Element element in this) {
+      if (f(element)) {
+        return true;
+      }
+    };
+    return false;
+  }
+
+  Collection map(f(Element element)) {
+    final out = [];
+    for (Element el in this) {
+      out.add(f(el));
+    }
+    return out;
+  }
+
+  bool get isEmpty {
+    return _element.$dom_firstElementChild == null;
+  }
+
+  int get length {
+    return _childElements.length;
+  }
+
+  Element operator [](int index) {
+    return _childElements[index];
+  }
+
+  void operator []=(int index, Element value) {
+    _element.$dom_replaceChild(value, _childElements[index]);
+  }
+
+   void set length(int newLength) {
+     // TODO(jacobr): remove children when length is reduced.
+     throw new UnsupportedError('');
+   }
+
+  Element add(Element value) {
+    _element.$dom_appendChild(value);
+    return value;
+  }
+
+  Element addLast(Element value) => add(value);
+
+  Iterator<Element> iterator() => _toList().iterator();
+
+  void addAll(Collection<Element> collection) {
+    for (Element element in collection) {
+      _element.$dom_appendChild(element);
+    }
+  }
+
+  void sort([Comparator<Element> compare = Comparable.compare]) {
+    throw new UnsupportedError('TODO(jacobr): should we impl?');
+  }
+
+  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
+    throw new UnimplementedError();
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnimplementedError();
+  }
+
+  void insertRange(int start, int rangeLength, [initialValue = null]) {
+    throw new UnimplementedError();
+  }
+
+  List getRange(int start, int rangeLength) =>
+    new _FrozenElementList._wrap(_Lists.getRange(this, start, rangeLength,
+        []));
+
+  int indexOf(Element element, [int start = 0]) {
+    return _Lists.indexOf(this, element, start, this.length);
+  }
+
+  int lastIndexOf(Element element, [int start = null]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  void clear() {
+    // It is unclear if we want to keep non element nodes?
+    _element.text = '';
+  }
+
+  Element removeLast() {
+    final result = this.last;
+    if (result != null) {
+      _element.$dom_removeChild(result);
+    }
+    return result;
+  }
+
+  Element get last {
+    return _element.$dom_lastElementChild;
+  }
+}
+
+// TODO(jacobr): this is an inefficient implementation but it is hard to see
+// a better option given that we cannot quite force NodeList to be an
+// ElementList as there are valid cases where a NodeList JavaScript object
+// contains Node objects that are not Elements.
+class _FrozenElementList implements List {
+  final List<Node> _nodeList;
+
+  _FrozenElementList._wrap(this._nodeList);
+
+  Element get first {
+    return _nodeList[0];
+  }
+
+  bool contains(Element element) {
+    for (Element el in this) {
+      if (el == element) return true;
+    }
+    return false;
+  }
+
+  void forEach(void f(Element element)) {
+    for (Element el in this) {
+      f(el);
+    }
+  }
+
+  Collection map(f(Element element)) {
+    final out = [];
+    for (Element el in this) {
+      out.add(f(el));
+    }
+    return out;
+  }
+
+  List<Element> filter(bool f(Element element)) {
+    final out = [];
+    for (Element el in this) {
+      if (f(el)) out.add(el);
+    }
+    return out;
+  }
+
+  bool every(bool f(Element element)) {
+    for(Element element in this) {
+      if (!f(element)) {
+        return false;
+      }
+    };
+    return true;
+  }
+
+  bool some(bool f(Element element)) {
+    for(Element element in this) {
+      if (f(element)) {
+        return true;
+      }
+    };
+    return false;
+  }
+
+  bool get isEmpty => _nodeList.isEmpty;
+
+  int get length => _nodeList.length;
+
+  Element operator [](int index) => _nodeList[index];
+
+  void operator []=(int index, Element value) {
+    throw new UnsupportedError('');
+  }
+
+  void set length(int newLength) {
+    _nodeList.length = newLength;
+  }
+
+  void add(Element value) {
+    throw new UnsupportedError('');
+  }
+
+  void addLast(Element value) {
+    throw new UnsupportedError('');
+  }
+
+  Iterator<Element> iterator() => new _FrozenElementListIterator(this);
+
+  void addAll(Collection<Element> collection) {
+    throw new UnsupportedError('');
+  }
+
+  void sort([Comparator<Element> compare = Comparable.compare]) {
+    throw new UnsupportedError('');
+  }
+
+  void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
+    throw new UnsupportedError('');
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError('');
+  }
+
+  void insertRange(int start, int rangeLength, [initialValue = null]) {
+    throw new UnsupportedError('');
+  }
+
+  List<Element> getRange(int start, int rangeLength) =>
+    new _FrozenElementList._wrap(_nodeList.getRange(start, rangeLength));
+
+  int indexOf(Element element, [int start = 0]) =>
+    _nodeList.indexOf(element, start);
+
+  int lastIndexOf(Element element, [int start = null]) =>
+    _nodeList.lastIndexOf(element, start);
+
+  void clear() {
+    throw new UnsupportedError('');
+  }
+
+  Element removeLast() {
+    throw new UnsupportedError('');
+  }
+
+  Element get last => _nodeList.last;
+}
+
+class _FrozenElementListIterator implements Iterator<Element> {
+  final _FrozenElementList _list;
+  int _index = 0;
+
+  _FrozenElementListIterator(this._list);
+
+  /**
+   * Gets the next element in the iteration. Throws a
+   * [StateError("No more elements")] if no element is left.
+   */
+  Element next() {
+    if (!hasNext) {
+      throw new StateError("No more elements");
+    }
+
+    return _list[_index++];
+  }
+
+  /**
+   * Returns whether the [Iterator] has elements left.
+   */
+  bool get hasNext => _index < _list.length;
+}
+
+/**
+ * All your attribute manipulation needs in one place.
+ * Extends the regular Map interface by automatically coercing non-string
+ * values to strings.
+ */
+abstract class AttributeMap implements Map<String, String> {
+  void operator []=(String key, value);
+}
+
+class _ElementAttributeMap extends AttributeMap {
+
+  final Element _element;
+
+  _ElementAttributeMap(this._element);
+
+  bool containsValue(String value) {
+    final attributes = _element.$dom_attributes;
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      if(value == attributes[i].value) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  bool containsKey(String key) {
+    return _element.$dom_hasAttribute(key);
+  }
+
+  String operator [](String key) {
+    return _element.$dom_getAttribute(key);
+  }
+
+  void operator []=(String key, value) {
+    _element.$dom_setAttribute(key, '$value');
+  }
+
+  String putIfAbsent(String key, String ifAbsent()) {
+    if (!containsKey(key)) {
+      this[key] = ifAbsent();
+    }
+    return this[key];
+  }
+
+  String remove(String key) {
+    String value = _element.$dom_getAttribute(key);
+    _element.$dom_removeAttribute(key);
+    return value;
+  }
+
+  void clear() {
+    final attributes = _element.$dom_attributes;
+    for (int i = attributes.length - 1; i >= 0; i--) {
+      remove(attributes[i].name);
+    }
+  }
+
+  void forEach(void f(String key, String value)) {
+    final attributes = _element.$dom_attributes;
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      final item = attributes[i];
+      f(item.name, item.value);
+    }
+  }
+
+  Collection<String> get keys {
+    // TODO(jacobr): generate a lazy collection instead.
+    final attributes = _element.$dom_attributes;
+    final keys = new List<String>(attributes.length);
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      keys[i] = attributes[i].name;
+    }
+    return keys;
+  }
+
+  Collection<String> get values {
+    // TODO(jacobr): generate a lazy collection instead.
+    final attributes = _element.$dom_attributes;
+    final values = new List<String>(attributes.length);
+    for (int i = 0, len = attributes.length; i < len; i++) {
+      values[i] = attributes[i].value;
+    }
+    return values;
+  }
+
+  /**
+   * The number of {key, value} pairs in the map.
+   */
+  int get length {
+    return _element.$dom_attributes.length;
+  }
+
+  /**
+   * Returns true if there is no {key, value} pair in the map.
+   */
+  bool get isEmpty {
+    return length == 0;
+  }
+}
+
+/**
+ * Provides a Map abstraction on top of data-* attributes, similar to the
+ * dataSet in the old DOM.
+ */
+class _DataAttributeMap extends AttributeMap {
+
+  final Map<String, String> $dom_attributes;
+
+  _DataAttributeMap(this.$dom_attributes);
+
+  // interface Map
+
+  // TODO: Use lazy iterator when it is available on Map.
+  bool containsValue(String value) => values.some((v) => v == value);
+
+  bool containsKey(String key) => $dom_attributes.containsKey(_attr(key));
+
+  String operator [](String key) => $dom_attributes[_attr(key)];
+
+  void operator []=(String key, value) {
+    $dom_attributes[_attr(key)] = '$value';
+  }
+
+  String putIfAbsent(String key, String ifAbsent()) =>
+    $dom_attributes.putIfAbsent(_attr(key), ifAbsent);
+
+  String remove(String key) => $dom_attributes.remove(_attr(key));
+
+  void clear() {
+    // Needs to operate on a snapshot since we are mutating the collection.
+    for (String key in keys) {
+      remove(key);
+    }
+  }
+
+  void forEach(void f(String key, String value)) {
+    $dom_attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        f(_strip(key), value);
+      }
+    });
+  }
+
+  Collection<String> get keys {
+    final keys = new List<String>();
+    $dom_attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        keys.add(_strip(key));
+      }
+    });
+    return keys;
+  }
+
+  Collection<String> get values {
+    final values = new List<String>();
+    $dom_attributes.forEach((String key, String value) {
+      if (_matches(key)) {
+        values.add(value);
+      }
+    });
+    return values;
+  }
+
+  int get length => keys.length;
+
+  // TODO: Use lazy iterator when it is available on Map.
+  bool get isEmpty => length == 0;
+
+  // Helpers.
+  String _attr(String key) => 'data-$key';
+  bool _matches(String key) => key.startsWith('data-');
+  String _strip(String key) => key.substring(5);
+}
+
+abstract class CssClassSet implements Set<String> {
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
+  bool toggle(String token);
+
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
+  bool get frozen;
+}
+
+class _CssClassSet extends CssClassSet {
+
+  final Element _element;
+
+  _CssClassSet(this._element);
+
+  String toString() => _formatSet(_read());
+
+  // interface Iterable - BEGIN
+  Iterator<String> iterator() => _read().iterator();
+  // interface Iterable - END
+
+  // interface Collection - BEGIN
+  void forEach(void f(String element)) {
+    _read().forEach(f);
+  }
+
+  Collection map(f(String element)) => _read().map(f);
+
+  Collection<String> filter(bool f(String element)) => _read().filter(f);
+
+  bool every(bool f(String element)) => _read().every(f);
+
+  bool some(bool f(String element)) => _read().some(f);
+
+  bool get isEmpty => _read().isEmpty;
+
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
+  bool get frozen => false;
+
+  int get length =>_read().length;
+
+  // interface Collection - END
+
+  // interface Set - BEGIN
+  bool contains(String value) => _read().contains(value);
+
+  void add(String value) {
+    // TODO - figure out if we need to do any validation here
+    // or if the browser natively does enough
+    _modify((s) => s.add(value));
+  }
+
+  bool remove(String value) {
+    Set<String> s = _read();
+    bool result = s.remove(value);
+    _write(s);
+    return result;
+  }
+
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
+  bool toggle(String value) {
+    Set<String> s = _read();
+    bool result = false;
+    if (s.contains(value)) {
+      s.remove(value);
+    } else {
+      s.add(value);
+      result = true;
+    }
+    _write(s);
+    return result;
+  }
+
+  void addAll(Collection<String> collection) {
+    // TODO - see comment above about validation
+    _modify((s) => s.addAll(collection));
+  }
+
+  void removeAll(Collection<String> collection) {
+    _modify((s) => s.removeAll(collection));
+  }
+
+  bool isSubsetOf(Collection<String> collection) =>
+    _read().isSubsetOf(collection);
+
+  bool containsAll(Collection<String> collection) =>
+    _read().containsAll(collection);
+
+  Set<String> intersection(Collection<String> other) =>
+    _read().intersection(other);
+
+  void clear() {
+    _modify((s) => s.clear());
+  }
+  // interface Set - END
+
+  /**
+   * Helper method used to modify the set of css classes on this element.
+   *
+   *   f - callback with:
+   *      s - a Set of all the css class name currently on this element.
+   *
+   *   After f returns, the modified set is written to the
+   *       className property of this element.
+   */
+  void _modify( f(Set<String> s)) {
+    Set<String> s = _read();
+    f(s);
+    _write(s);
+  }
+
+  /**
+   * Read the class names from the Element class property,
+   * and put them into a set (duplicates are discarded).
+   */
+  Set<String> _read() {
+    // TODO(mattsh) simplify this once split can take regex.
+    Set<String> s = new Set<String>();
+    for (String name in _classname().split(' ')) {
+      String trimmed = name.trim();
+      if (!trimmed.isEmpty) {
+        s.add(trimmed);
+      }
+    }
+    return s;
+  }
+
+  /**
+   * Read the class names as a space-separated string. This is meant to be
+   * overridden by subclasses.
+   */
+  String _classname() => _element.$dom_className;
+
+  /**
+   * Join all the elements of a set into one string and write
+   * back to the element.
+   */
+  void _write(Set s) {
+    _element.$dom_className = _formatSet(s);
+  }
+
+  String _formatSet(Set<String> s) {
+    // TODO(mattsh) should be able to pass Set to String.joins http:/b/5398605
+    List list = new List.from(s);
+    return Strings.join(list, ' ');
+  }
+}
+
+class _SimpleClientRect implements ClientRect {
+  final num left;
+  final num top;
+  final num width;
+  final num height;
+  num get right => left + width;
+  num get bottom => top + height;
+
+  const _SimpleClientRect(this.left, this.top, this.width, this.height);
+
+  bool operator ==(ClientRect other) {
+    return other != null && left == other.left && top == other.top
+        && width == other.width && height == other.height;
+  }
+
+  String toString() => "($left, $top, $width, $height)";
+}
+
+// TODO(jacobr): we cannot currently be lazy about calculating the client
+// rects as we must perform all measurement queries at a safe point to avoid
+// triggering unneeded layouts.
+/**
+ * All your element measurement needs in one place.
+ * @domName none
+ */
+class ElementRect {
+  // Relative to offsetParent.
+  final ClientRect client;
+  final ClientRect offset;
+  final ClientRect scroll;
+
+  // TODO(jacobr): should we move these outside of ElementRect to avoid the
+  // overhead of computing them every time even though they are rarely used.
+  final ClientRect _boundingClientRect;
+  final _ClientRectList _clientRects;
+
+  ElementRect(Element element) :
+    client = new _SimpleClientRect(element.clientLeft,
+                                  element.clientTop,
+                                  element.clientWidth,
+                                  element.clientHeight),
+    offset = new _SimpleClientRect(element.offsetLeft,
+                                  element.offsetTop,
+                                  element.offsetWidth,
+                                  element.offsetHeight),
+    scroll = new _SimpleClientRect(element.scrollLeft,
+                                  element.scrollTop,
+                                  element.scrollWidth,
+                                  element.scrollHeight),
+    _boundingClientRect = element.getBoundingClientRect(),
+    _clientRects = element.getClientRects();
+
+  // In global coords.
+  ClientRect get bounding => _boundingClientRect;
+
+  // In global coords.
+  List<ClientRect> get clientRects {
+    final out = new List(_clientRects.length);
+    for (num i = 0; i < _clientRects.length; i++) {
+      out[i] = _clientRects.item(i);
+    }
+    return out;
+  }
+}
+
+class Element extends Node implements ElementTraversal native "*Element" {
+
+  factory Element.html(String html) =>
+      _ElementFactoryProvider.createElement_html(html);
+  factory Element.tag(String tag) =>
+      _ElementFactoryProvider.createElement_tag(tag);
+
+  /**
+   * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
+   *   Element.removeAttribute
+   */
+  _ElementAttributeMap get attributes => new _ElementAttributeMap(this);
+
+  void set attributes(Map<String, String> value) {
+    Map<String, String> attributes = this.attributes;
+    attributes.clear();
+    for (String key in value.keys) {
+      attributes[key] = value[key];
+    }
+  }
+
+  void set elements(Collection<Element> value) {
+    final elements = this.elements;
+    elements.clear();
+    elements.addAll(value);
+  }
+
+  /**
+   * @domName childElementCount, firstElementChild, lastElementChild,
+   *   children, Node.nodes.add
+   */
+  List<Element> get elements => new _ChildrenElementList._wrap(this);
+
+  Element query(String selectors) => $dom_querySelector(selectors);
+
+  List<Element> queryAll(String selectors) =>
+    new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
+
+  /** @domName className, classList */
+  CssClassSet get classes => new _CssClassSet(this);
+
+  void set classes(Collection<String> value) {
+    CssClassSet classSet = classes;
+    classSet.clear();
+    classSet.addAll(value);
+  }
+
+  Map<String, String> get dataAttributes =>
+    new _DataAttributeMap(attributes);
+
+  void set dataAttributes(Map<String, String> value) {
+    final dataAttributes = this.dataAttributes;
+    dataAttributes.clear();
+    for (String key in value.keys) {
+      dataAttributes[key] = value[key];
+    }
+  }
+
+  /**
+   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
+   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
+   * scrollHeight, scrollWidth, scrollTop, scrollLeft
+   */
+  Future<ElementRect> get rect {
+    return _createMeasurementFuture(
+        () => new ElementRect(this),
+        new Completer<ElementRect>());
+  }
+
+  /** @domName Window.getComputedStyle */
+  Future<CSSStyleDeclaration> get computedStyle {
+     // TODO(jacobr): last param should be null, see b/5045788
+     return getComputedStyle('');
+  }
+
+  /** @domName Window.getComputedStyle */
+  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) {
+    return _createMeasurementFuture(
+        () => window.$dom_getComputedStyle(this, pseudoElement),
+        new Completer<CSSStyleDeclaration>());
+  }
+
+  /**
+   * Adds the specified text as a text node after the last child of this.
+   */
+  void addText(String text) {
+    this.insertAdjacentText('beforeend', text);
+  }
+
+  /**
+   * Parses the specified text as HTML and adds the resulting node after the
+   * last child of this.
+   */
+  void addHTML(String text) {
+    this.insertAdjacentHTML('beforeend', text);
+  }
+
+  // Hooks to support custom WebComponents.
+  /**
+   * Experimental support for [web components][wc]. This field stores a
+   * reference to the component implementation. It was inspired by Mozilla's
+   * [x-tags][] project. Please note: in the future it may be possible to
+   * `extend Element` from your class, in which case this field will be
+   * deprecated and will simply return this [Element] object.
+   *
+   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
+   * [x-tags]: http://x-tags.org/
+   */
+  var xtag;
+
+  // TODO(vsm): Implement noSuchMethod or similar for dart2js.
+
+  /** @domName Element.insertAdjacentText */
+  void insertAdjacentText(String where, String text) {
+    if (JS('bool', '!!#.insertAdjacentText', this)) {
+      _insertAdjacentText(where, text);
+    } else {
+      _insertAdjacentNode(where, new Text(text));
+    }
+  }
+
+  void _insertAdjacentText(String where, String text)
+      native 'insertAdjacentText';
+
+  /** @domName Element.insertAdjacentHTML */
+  void insertAdjacentHTML(String where, String text) {
+    if (JS('bool', '!!#.insertAdjacentHTML', this)) {
+      _insertAdjacentHTML(where, text);
+    } else {
+      _insertAdjacentNode(where, new DocumentFragment.html(text));
+    }
+  }
+
+  void _insertAdjacentHTML(String where, String text)
+      native 'insertAdjacentHTML';
+
+  /** @domName Element.insertAdjacentHTML */
+  Element insertAdjacentElement(String where, Element element) {
+    if (JS('bool', '!!#.insertAdjacentElement', this)) {
+      _insertAdjacentElement(where, element);
+    } else {
+      _insertAdjacentNode(where, element);
+    }
+    return element;
+  }
+
+  void _insertAdjacentElement(String where, Element element)
+      native 'insertAdjacentElement';
+
+  void _insertAdjacentNode(String where, Node node) {
+    switch (where.toLowerCase()) {
+      case 'beforebegin':
+        this.parent.insertBefore(node, this);
+        break;
+      case 'afterbegin':
+        var first = this.nodes.length > 0 ? this.nodes[0] : null;
+        this.insertBefore(node, first);
+        break;
+      case 'beforeend':
+        this.nodes.add(node);
+        break;
+      case 'afterend':
+        this.parent.insertBefore(node, this.nextNode);
+        break;
+      default:
+        throw new ArgumentError("Invalid position ${where}");
+    }
+  }
+
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  ElementEvents get on =>
+    new ElementEvents(this);
+
+  /** @domName HTMLElement.children */
+  HTMLCollection get $dom_children => JS("HTMLCollection", "#.children", this);
+
+  /** @domName HTMLElement.contentEditable */
+  String contentEditable;
+
+  /** @domName HTMLElement.dir */
+  String dir;
+
+  /** @domName HTMLElement.draggable */
+  bool draggable;
+
+  /** @domName HTMLElement.hidden */
+  bool hidden;
+
+  /** @domName HTMLElement.id */
+  String id;
+
+  /** @domName HTMLElement.innerHTML */
+  String innerHTML;
+
+  /** @domName HTMLElement.isContentEditable */
+  final bool isContentEditable;
+
+  /** @domName HTMLElement.lang */
+  String lang;
+
+  /** @domName HTMLElement.outerHTML */
+  final String outerHTML;
+
+  /** @domName HTMLElement.spellcheck */
+  bool spellcheck;
+
+  /** @domName HTMLElement.tabIndex */
+  int tabIndex;
+
+  /** @domName HTMLElement.title */
+  String title;
+
+  /** @domName HTMLElement.translate */
+  bool translate;
+
+  /** @domName HTMLElement.webkitdropzone */
+  String webkitdropzone;
+
+  /** @domName HTMLElement.click */
+  void click() native;
+
+  static const int ALLOW_KEYBOARD_INPUT = 1;
+
+  /** @domName Element.childElementCount */
+  int get $dom_childElementCount => JS("int", "#.childElementCount", this);
+
+  /** @domName Element.className */
+  String get $dom_className => JS("String", "#.className", this);
+
+  /** @domName Element.className */
+  void set $dom_className(String value) {
+    JS("void", "#.className = #", this, value);
+  }
+
+  /** @domName Element.clientHeight */
+  final int clientHeight;
+
+  /** @domName Element.clientLeft */
+  final int clientLeft;
+
+  /** @domName Element.clientTop */
+  final int clientTop;
+
+  /** @domName Element.clientWidth */
+  final int clientWidth;
+
+  /** @domName Element.dataset */
+  final Map<String, String> dataset;
+
+  /** @domName Element.firstElementChild */
+  Element get $dom_firstElementChild => JS("Element", "#.firstElementChild", this);
+
+  /** @domName Element.lastElementChild */
+  Element get $dom_lastElementChild => JS("Element", "#.lastElementChild", this);
+
+  /** @domName Element.nextElementSibling */
+  final Element nextElementSibling;
+
+  /** @domName Element.offsetHeight */
+  final int offsetHeight;
+
+  /** @domName Element.offsetLeft */
+  final int offsetLeft;
+
+  /** @domName Element.offsetParent */
+  final Element offsetParent;
+
+  /** @domName Element.offsetTop */
+  final int offsetTop;
+
+  /** @domName Element.offsetWidth */
+  final int offsetWidth;
+
+  /** @domName Element.previousElementSibling */
+  final Element previousElementSibling;
+
+  /** @domName Element.scrollHeight */
+  final int scrollHeight;
+
+  /** @domName Element.scrollLeft */
+  int scrollLeft;
+
+  /** @domName Element.scrollTop */
+  int scrollTop;
+
+  /** @domName Element.scrollWidth */
+  final int scrollWidth;
+
+  /** @domName Element.style */
+  final CSSStyleDeclaration style;
+
+  /** @domName Element.tagName */
+  final String tagName;
+
+  /** @domName Element.blur */
+  void blur() native;
+
+  /** @domName Element.focus */
+  void focus() native;
+
+  /** @domName Element.getAttribute */
+  String $dom_getAttribute(String name) native "getAttribute";
+
+  /** @domName Element.getBoundingClientRect */
+  ClientRect getBoundingClientRect() native;
+
+  /** @domName Element.getClientRects */
+  List<ClientRect> getClientRects() native;
+
+  /** @domName Element.getElementsByClassName */
+  List<Node> $dom_getElementsByClassName(String name) native "getElementsByClassName";
+
+  /** @domName Element.getElementsByTagName */
+  List<Node> $dom_getElementsByTagName(String name) native "getElementsByTagName";
+
+  /** @domName Element.hasAttribute */
+  bool $dom_hasAttribute(String name) native "hasAttribute";
+
+  /** @domName Element.querySelector */
+  Element $dom_querySelector(String selectors) native "querySelector";
+
+  /** @domName Element.querySelectorAll */
+  List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
+
+  /** @domName Element.removeAttribute */
+  void $dom_removeAttribute(String name) native "removeAttribute";
+
+  /** @domName Element.scrollByLines */
+  void scrollByLines(int lines) native;
+
+  /** @domName Element.scrollByPages */
+  void scrollByPages(int pages) native;
+
+  /** @domName Element.scrollIntoViewIfNeeded */
+  void scrollIntoView([bool centerIfNeeded]) native "scrollIntoViewIfNeeded";
+
+  /** @domName Element.setAttribute */
+  void $dom_setAttribute(String name, String value) native "setAttribute";
+
+  /** @domName Element.webkitMatchesSelector */
+  bool matchesSelector(String selectors) native "webkitMatchesSelector";
+
+  /** @domName Element.webkitRequestFullScreen */
+  void webkitRequestFullScreen(int flags) native;
+
+  /** @domName Element.webkitRequestFullscreen */
+  void webkitRequestFullscreen() native;
+
+  /** @domName Element.webkitRequestPointerLock */
+  void webkitRequestPointerLock() native;
+
+}
+
+// Temporary dispatch hook to support WebComponents.
+Function dynamicUnknownElementDispatcher;
+
+final _START_TAG_REGEXP = const RegExp('<(\\w+)');
+class _ElementFactoryProvider {
+  static final _CUSTOM_PARENT_TAG_MAP = const {
+    'body' : 'html',
+    'head' : 'html',
+    'caption' : 'table',
+    'td': 'tr',
+    'colgroup': 'table',
+    'col' : 'colgroup',
+    'tr' : 'tbody',
+    'tbody' : 'table',
+    'tfoot' : 'table',
+    'thead' : 'table',
+    'track' : 'audio',
+  };
+
+  /** @domName Document.createElement */
+  static Element createElement_html(String html) {
+    // TODO(jacobr): this method can be made more robust and performant.
+    // 1) Cache the dummy parent elements required to use innerHTML rather than
+    //    creating them every call.
+    // 2) Verify that the html does not contain leading or trailing text nodes.
+    // 3) Verify that the html does not contain both <head> and <body> tags.
+    // 4) Detatch the created element from its dummy parent.
+    String parentTag = 'div';
+    String tag;
+    final match = _START_TAG_REGEXP.firstMatch(html);
+    if (match != null) {
+      tag = match.group(1).toLowerCase();
+      if (_CUSTOM_PARENT_TAG_MAP.containsKey(tag)) {
+        parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
+      }
+    }
+    final Element temp = new Element.tag(parentTag);
+    temp.innerHTML = html;
+
+    Element element;
+    if (temp.elements.length == 1) {
+      element = temp.elements[0];
+    } else if (parentTag == 'html' && temp.elements.length == 2) {
+      // Work around for edge case in WebKit and possibly other browsers where
+      // both body and head elements are created even though the inner html
+      // only contains a head or body element.
+      element = temp.elements[tag == 'head' ? 0 : 1];
+    } else {
+      throw new ArgumentError('HTML had ${temp.elements.length} '
+          'top level elements but 1 expected');
+    }
+    element.remove();
+    return element;
+  }
+
+  /** @domName Document.createElement */
+  // Optimization to improve performance until the dart2js compiler inlines this
+  // method.
+  static Element createElement_tag(String tag) =>
+      JS('Element', 'document.createElement(#)', tag);
+}
+// 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 ElementEvents extends Events {
+  ElementEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get beforeCopy => this['beforecopy'];
+
+  EventListenerList get beforeCut => this['beforecut'];
+
+  EventListenerList get beforePaste => this['beforepaste'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get change => this['change'];
+
+  EventListenerList get click => this['click'];
+
+  EventListenerList get contextMenu => this['contextmenu'];
+
+  EventListenerList get copy => this['copy'];
+
+  EventListenerList get cut => this['cut'];
+
+  EventListenerList get doubleClick => this['dblclick'];
+
+  EventListenerList get drag => this['drag'];
+
+  EventListenerList get dragEnd => this['dragend'];
+
+  EventListenerList get dragEnter => this['dragenter'];
+
+  EventListenerList get dragLeave => this['dragleave'];
+
+  EventListenerList get dragOver => this['dragover'];
+
+  EventListenerList get dragStart => this['dragstart'];
+
+  EventListenerList get drop => this['drop'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get input => this['input'];
+
+  EventListenerList get invalid => this['invalid'];
+
+  EventListenerList get keyDown => this['keydown'];
+
+  EventListenerList get keyPress => this['keypress'];
+
+  EventListenerList get keyUp => this['keyup'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get mouseDown => this['mousedown'];
+
+  EventListenerList get mouseMove => this['mousemove'];
+
+  EventListenerList get mouseOut => this['mouseout'];
+
+  EventListenerList get mouseOver => this['mouseover'];
+
+  EventListenerList get mouseUp => this['mouseup'];
+
+  EventListenerList get paste => this['paste'];
+
+  EventListenerList get reset => this['reset'];
+
+  EventListenerList get scroll => this['scroll'];
+
+  EventListenerList get search => this['search'];
+
+  EventListenerList get select => this['select'];
+
+  EventListenerList get selectStart => this['selectstart'];
+
+  EventListenerList get submit => this['submit'];
+
+  EventListenerList get touchCancel => this['touchcancel'];
+
+  EventListenerList get touchEnd => this['touchend'];
+
+  EventListenerList get touchEnter => this['touchenter'];
+
+  EventListenerList get touchLeave => this['touchleave'];
+
+  EventListenerList get touchMove => this['touchmove'];
+
+  EventListenerList get touchStart => this['touchstart'];
+
+  EventListenerList get transitionEnd => this['webkitTransitionEnd'];
+
+  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
+
+  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
+
+  EventListenerList get mouseWheel {
+    if (JS('bool', '#.onwheel !== undefined', _ptr)) {
+      // W3C spec, and should be IE9+, but IE has a bug exposing onwheel.
+      return this['wheel'];
+    } else if (JS('bool', '#.onmousewheel !== undefined', _ptr)) {
+      // Chrome & IE
+      return this['mousewheel'];
+    } else {
+      // Firefox
+      return this['DOMMouseScroll'];
+    }
+  }
+}
+/// @domName ElementTimeControl
+abstract class ElementTimeControl {
+
+  /** @domName ElementTimeControl.beginElement */
+  void beginElement();
+
+  /** @domName ElementTimeControl.beginElementAt */
+  void beginElementAt(num offset);
+
+  /** @domName ElementTimeControl.endElement */
+  void endElement();
+
+  /** @domName ElementTimeControl.endElementAt */
+  void endElementAt(num offset);
+}
+/// @domName ElementTraversal
+abstract class ElementTraversal {
+
+  int childElementCount;
+
+  Element firstElementChild;
+
+  Element lastElementChild;
+
+  Element nextElementSibling;
+
+  Element previousElementSibling;
+}
+
+/// @domName HTMLEmbedElement
+class EmbedElement extends Element implements Element native "*HTMLEmbedElement" {
+
+  factory EmbedElement() => _Elements.createEmbedElement();
+
+  /** @domName HTMLEmbedElement.align */
+  String align;
+
+  /** @domName HTMLEmbedElement.height */
+  String height;
+
+  /** @domName HTMLEmbedElement.name */
+  String name;
+
+  /** @domName HTMLEmbedElement.src */
+  String src;
+
+  /** @domName HTMLEmbedElement.type */
+  String type;
+
+  /** @domName HTMLEmbedElement.width */
+  String width;
+}
+
+/// @domName EntityReference
+class EntityReference extends Node native "*EntityReference" {
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void EntriesCallback(List<Entry> entries);
+
+/// @domName Entry
+class Entry native "*Entry" {
+
+  /** @domName Entry.filesystem */
+  final DOMFileSystem filesystem;
+
+  /** @domName Entry.fullPath */
+  final String fullPath;
+
+  /** @domName Entry.isDirectory */
+  final bool isDirectory;
+
+  /** @domName Entry.isFile */
+  final bool isFile;
+
+  /** @domName Entry.name */
+  final String name;
+
+  /** @domName Entry.copyTo */
+  void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
+
+  /** @domName Entry.getMetadata */
+  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native;
+
+  /** @domName Entry.getParent */
+  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native;
+
+  /** @domName Entry.moveTo */
+  void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]) native;
+
+  /** @domName Entry.remove */
+  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native;
+
+  /** @domName Entry.toURL */
+  String toURL() native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void EntryCallback(Entry entry);
+
+/// @domName EntrySync
+class EntrySync native "*EntrySync" {
+
+  /** @domName EntrySync.filesystem */
+  final DOMFileSystemSync filesystem;
+
+  /** @domName EntrySync.fullPath */
+  final String fullPath;
+
+  /** @domName EntrySync.isDirectory */
+  final bool isDirectory;
+
+  /** @domName EntrySync.isFile */
+  final bool isFile;
+
+  /** @domName EntrySync.name */
+  final String name;
+
+  /** @domName EntrySync.copyTo */
+  EntrySync copyTo(DirectoryEntrySync parent, String name) native;
+
+  /** @domName EntrySync.getMetadata */
+  Metadata getMetadata() native;
+
+  /** @domName EntrySync.getParent */
+  EntrySync getParent() native;
+
+  /** @domName EntrySync.moveTo */
+  EntrySync moveTo(DirectoryEntrySync parent, String name) native;
+
+  /** @domName EntrySync.remove */
+  void remove() native;
+
+  /** @domName EntrySync.toURL */
+  String toURL() native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void ErrorCallback(FileError error);
+
+/// @domName ErrorEvent
+class ErrorEvent extends Event native "*ErrorEvent" {
+
+  /** @domName ErrorEvent.filename */
+  final String filename;
+
+  /** @domName ErrorEvent.lineno */
+  final int lineno;
+
+  /** @domName ErrorEvent.message */
+  final String message;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class Event native "*Event" {
+  // In JS, canBubble and cancelable are technically required parameters to
+  // init*Event. In practice, though, if they aren't provided they simply
+  // default to false (since that's Boolean(undefined)).
+  //
+  // Contrary to JS, we default canBubble and cancelable to true, since that's
+  // what people want most of the time anyway.
+  factory Event(String type, [bool canBubble = true, bool cancelable = true]) =>
+      _EventFactoryProvider.createEvent(type, canBubble, cancelable);
+
+  static const int AT_TARGET = 2;
+
+  static const int BLUR = 8192;
+
+  static const int BUBBLING_PHASE = 3;
+
+  static const int CAPTURING_PHASE = 1;
+
+  static const int CHANGE = 32768;
+
+  static const int CLICK = 64;
+
+  static const int DBLCLICK = 128;
+
+  static const int DRAGDROP = 2048;
+
+  static const int FOCUS = 4096;
+
+  static const int KEYDOWN = 256;
+
+  static const int KEYPRESS = 1024;
+
+  static const int KEYUP = 512;
+
+  static const int MOUSEDOWN = 1;
+
+  static const int MOUSEDRAG = 32;
+
+  static const int MOUSEMOVE = 16;
+
+  static const int MOUSEOUT = 8;
+
+  static const int MOUSEOVER = 4;
+
+  static const int MOUSEUP = 2;
+
+  static const int NONE = 0;
+
+  static const int SELECT = 16384;
+
+  /** @domName Event.bubbles */
+  final bool bubbles;
+
+  /** @domName Event.cancelBubble */
+  bool cancelBubble;
+
+  /** @domName Event.cancelable */
+  final bool cancelable;
+
+  /** @domName Event.clipboardData */
+  final Clipboard clipboardData;
+
+  /** @domName Event.currentTarget */
+  EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
+  EventTarget get _currentTarget => JS("EventTarget", "#.currentTarget", this);
+
+  /** @domName Event.defaultPrevented */
+  final bool defaultPrevented;
+
+  /** @domName Event.eventPhase */
+  final int eventPhase;
+
+  /** @domName Event.returnValue */
+  bool returnValue;
+
+  /** @domName Event.srcElement */
+  EventTarget get srcElement => _convertNativeToDart_EventTarget(this._srcElement);
+  EventTarget get _srcElement => JS("EventTarget", "#.srcElement", this);
+
+  /** @domName Event.target */
+  EventTarget get target => _convertNativeToDart_EventTarget(this._target);
+  EventTarget get _target => JS("EventTarget", "#.target", this);
+
+  /** @domName Event.timeStamp */
+  final int timeStamp;
+
+  /** @domName Event.type */
+  final String type;
+
+  /** @domName Event.initEvent */
+  void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "initEvent";
+
+  /** @domName Event.preventDefault */
+  void preventDefault() native;
+
+  /** @domName Event.stopImmediatePropagation */
+  void stopImmediatePropagation() native;
+
+  /** @domName Event.stopPropagation */
+  void stopPropagation() native;
+
+}
+
+/// @domName EventException
+class EventException native "*EventException" {
+
+  static const int DISPATCH_REQUEST_ERR = 1;
+
+  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
+
+  /** @domName EventException.code */
+  final int code;
+
+  /** @domName EventException.message */
+  final String message;
+
+  /** @domName EventException.name */
+  final String name;
+
+  /** @domName EventException.toString */
+  String toString() native;
+}
+
+/// @domName EventSource
+class EventSource extends EventTarget native "*EventSource" {
+
+  factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  EventSourceEvents get on =>
+    new EventSourceEvents(this);
+
+  static const int CLOSED = 2;
+
+  static const int CONNECTING = 0;
+
+  static const int OPEN = 1;
+
+  /** @domName EventSource.URL */
+  final String URL;
+
+  /** @domName EventSource.readyState */
+  final int readyState;
+
+  /** @domName EventSource.url */
+  final String url;
+
+  /** @domName EventSource.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName EventSource.close */
+  void close() native;
+
+  /** @domName EventSource.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName EventSource.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class EventSourceEvents extends Events {
+  EventSourceEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+// 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 Events {
+  /* Raw event target. */
+  final EventTarget _ptr;
+
+  Events(this._ptr);
+
+  EventListenerList operator [](String type) {
+    return new EventListenerList(_ptr, type);
+  }
+}
+
+class EventListenerList {
+
+  final EventTarget _ptr;
+  final String _type;
+
+  EventListenerList(this._ptr, this._type);
+
+  // TODO(jacobr): implement equals.
+
+  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) {
+    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 EventTarget native "*EventTarget" {
+
+  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  Events get on => new Events(this);
+
+  /** @domName EventTarget.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName EventTarget.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName EventTarget.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+}
+
+/// @domName HTMLFieldSetElement
+class FieldSetElement extends Element implements Element native "*HTMLFieldSetElement" {
+
+  factory FieldSetElement() => _Elements.createFieldSetElement();
+
+  /** @domName HTMLFieldSetElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLFieldSetElement.elements */
+  final HTMLCollection elements;
+
+  /** @domName HTMLFieldSetElement.form */
+  final FormElement form;
+
+  /** @domName HTMLFieldSetElement.name */
+  String name;
+
+  /** @domName HTMLFieldSetElement.type */
+  final String type;
+
+  /** @domName HTMLFieldSetElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLFieldSetElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLFieldSetElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLFieldSetElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLFieldSetElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+}
+
+/// @domName File
+class File extends Blob native "*File" {
+
+  /** @domName File.lastModifiedDate */
+  final Date lastModifiedDate;
+
+  /** @domName File.name */
+  final String name;
+
+  /** @domName File.webkitRelativePath */
+  final String webkitRelativePath;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void FileCallback(File file);
+
+/// @domName FileEntry
+class FileEntry extends Entry native "*FileEntry" {
+
+  /** @domName FileEntry.createWriter */
+  void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native;
+
+  /** @domName FileEntry.file */
+  void file(FileCallback successCallback, [ErrorCallback errorCallback]) native;
+}
+
+/// @domName FileEntrySync
+class FileEntrySync extends EntrySync native "*FileEntrySync" {
+
+  /** @domName FileEntrySync.createWriter */
+  FileWriterSync createWriter() native;
+
+  /** @domName FileEntrySync.file */
+  File file() native;
+}
+
+/// @domName FileError
+class FileError native "*FileError" {
+
+  static const int ABORT_ERR = 3;
+
+  static const int ENCODING_ERR = 5;
+
+  static const int INVALID_MODIFICATION_ERR = 9;
+
+  static const int INVALID_STATE_ERR = 7;
+
+  static const int NOT_FOUND_ERR = 1;
+
+  static const int NOT_READABLE_ERR = 4;
+
+  static const int NO_MODIFICATION_ALLOWED_ERR = 6;
+
+  static const int PATH_EXISTS_ERR = 12;
+
+  static const int QUOTA_EXCEEDED_ERR = 10;
+
+  static const int SECURITY_ERR = 2;
+
+  static const int SYNTAX_ERR = 8;
+
+  static const int TYPE_MISMATCH_ERR = 11;
+
+  /** @domName FileError.code */
+  final int code;
+}
+
+/// @domName FileException
+class FileException native "*FileException" {
+
+  static const int ABORT_ERR = 3;
+
+  static const int ENCODING_ERR = 5;
+
+  static const int INVALID_MODIFICATION_ERR = 9;
+
+  static const int INVALID_STATE_ERR = 7;
+
+  static const int NOT_FOUND_ERR = 1;
+
+  static const int NOT_READABLE_ERR = 4;
+
+  static const int NO_MODIFICATION_ALLOWED_ERR = 6;
+
+  static const int PATH_EXISTS_ERR = 12;
+
+  static const int QUOTA_EXCEEDED_ERR = 10;
+
+  static const int SECURITY_ERR = 2;
+
+  static const int SYNTAX_ERR = 8;
+
+  static const int TYPE_MISMATCH_ERR = 11;
+
+  /** @domName FileException.code */
+  final int code;
+
+  /** @domName FileException.message */
+  final String message;
+
+  /** @domName FileException.name */
+  final String name;
+
+  /** @domName FileException.toString */
+  String toString() native;
+}
+
+/// @domName FileReader
+class FileReader extends EventTarget native "*FileReader" {
+
+  factory FileReader() => _FileReaderFactoryProvider.createFileReader();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  FileReaderEvents get on =>
+    new FileReaderEvents(this);
+
+  static const int DONE = 2;
+
+  static const int EMPTY = 0;
+
+  static const int LOADING = 1;
+
+  /** @domName FileReader.error */
+  final FileError error;
+
+  /** @domName FileReader.readyState */
+  final int readyState;
+
+  /** @domName FileReader.result */
+  final Object result;
+
+  /** @domName FileReader.abort */
+  void abort() native;
+
+  /** @domName FileReader.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName FileReader.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName FileReader.readAsArrayBuffer */
+  void readAsArrayBuffer(Blob blob) native;
+
+  /** @domName FileReader.readAsBinaryString */
+  void readAsBinaryString(Blob blob) native;
+
+  /** @domName FileReader.readAsDataURL */
+  void readAsDataURL(Blob blob) native;
+
+  /** @domName FileReader.readAsText */
+  void readAsText(Blob blob, [String encoding]) native;
+
+  /** @domName FileReader.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class FileReaderEvents extends Events {
+  FileReaderEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get loadEnd => this['loadend'];
+
+  EventListenerList get loadStart => this['loadstart'];
+
+  EventListenerList get progress => this['progress'];
+}
+
+/// @domName FileReaderSync
+class FileReaderSync native "*FileReaderSync" {
+
+  factory FileReaderSync() => _FileReaderSyncFactoryProvider.createFileReaderSync();
+
+  /** @domName FileReaderSync.readAsArrayBuffer */
+  ArrayBuffer readAsArrayBuffer(Blob blob) native;
+
+  /** @domName FileReaderSync.readAsBinaryString */
+  String readAsBinaryString(Blob blob) native;
+
+  /** @domName FileReaderSync.readAsDataURL */
+  String readAsDataURL(Blob blob) native;
+
+  /** @domName FileReaderSync.readAsText */
+  String readAsText(Blob blob, [String encoding]) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void FileSystemCallback(DOMFileSystem fileSystem);
+
+/// @domName FileWriter
+class FileWriter extends EventTarget native "*FileWriter" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  FileWriterEvents get on =>
+    new FileWriterEvents(this);
+
+  static const int DONE = 2;
+
+  static const int INIT = 0;
+
+  static const int WRITING = 1;
+
+  /** @domName FileWriter.error */
+  final FileError error;
+
+  /** @domName FileWriter.length */
+  final int length;
+
+  /** @domName FileWriter.position */
+  final int position;
+
+  /** @domName FileWriter.readyState */
+  final int readyState;
+
+  /** @domName FileWriter.abort */
+  void abort() native;
+
+  /** @domName FileWriter.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName FileWriter.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName FileWriter.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName FileWriter.seek */
+  void seek(int position) native;
+
+  /** @domName FileWriter.truncate */
+  void truncate(int size) native;
+
+  /** @domName FileWriter.write */
+  void write(Blob data) native;
+}
+
+class FileWriterEvents extends Events {
+  FileWriterEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get progress => this['progress'];
+
+  EventListenerList get write => this['write'];
+
+  EventListenerList get writeEnd => this['writeend'];
+
+  EventListenerList get writeStart => this['writestart'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void FileWriterCallback(FileWriter fileWriter);
+
+/// @domName FileWriterSync
+class FileWriterSync native "*FileWriterSync" {
+
+  /** @domName FileWriterSync.length */
+  final int length;
+
+  /** @domName FileWriterSync.position */
+  final int position;
+
+  /** @domName FileWriterSync.seek */
+  void seek(int position) native;
+
+  /** @domName FileWriterSync.truncate */
+  void truncate(int size) native;
+
+  /** @domName FileWriterSync.write */
+  void write(Blob data) native;
+}
+
+/// @domName Float32Array
+class Float32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float32Array" {
+
+  factory Float32Array(int length) =>
+    _TypedArrayFactoryProvider.createFloat32Array(length);
+
+  factory Float32Array.fromList(List<num> list) =>
+    _TypedArrayFactoryProvider.createFloat32Array_fromList(list);
+
+  factory Float32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createFloat32Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 4;
+
+  /** @domName Float32Array.length */
+  final int length;
+
+  num operator[](int index) => JS("num", "#[#]", this, index);
+
+  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<num> mixins.
+  // num is the element type.
+
+  // From Iterable<num>:
+
+  Iterator<num> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<num>(this);
+  }
+
+  // From Collection<num>:
+
+  void add(num value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(num value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<num> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(num element) => _Collections.contains(this, element);
+
+  void forEach(void f(num element)) => _Collections.forEach(this, f);
+
+  Collection map(f(num element)) => _Collections.map(this, [], f);
+
+  Collection<num> filter(bool f(num element)) =>
+     _Collections.filter(this, <num>[], f);
+
+  bool every(bool f(num element)) => _Collections.every(this, f);
+
+  bool some(bool f(num element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<num>:
+
+  void sort([Comparator<num> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(num element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(num element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  num get last => this[length - 1];
+
+  num removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [num initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<num> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <num>[]);
+
+  // -- end List<num> mixins.
+
+  /** @domName Float32Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Float32Array.subarray */
+  Float32Array subarray(int start, [int end]) native;
+}
+
+/// @domName Float64Array
+class Float64Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<num> native "*Float64Array" {
+
+  factory Float64Array(int length) =>
+    _TypedArrayFactoryProvider.createFloat64Array(length);
+
+  factory Float64Array.fromList(List<num> list) =>
+    _TypedArrayFactoryProvider.createFloat64Array_fromList(list);
+
+  factory Float64Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createFloat64Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 8;
+
+  /** @domName Float64Array.length */
+  final int length;
+
+  num operator[](int index) => JS("num", "#[#]", this, index);
+
+  void operator[]=(int index, num value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<num> mixins.
+  // num is the element type.
+
+  // From Iterable<num>:
+
+  Iterator<num> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<num>(this);
+  }
+
+  // From Collection<num>:
+
+  void add(num value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(num value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<num> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(num element) => _Collections.contains(this, element);
+
+  void forEach(void f(num element)) => _Collections.forEach(this, f);
+
+  Collection map(f(num element)) => _Collections.map(this, [], f);
+
+  Collection<num> filter(bool f(num element)) =>
+     _Collections.filter(this, <num>[], f);
+
+  bool every(bool f(num element)) => _Collections.every(this, f);
+
+  bool some(bool f(num element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<num>:
+
+  void sort([Comparator<num> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(num element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(num element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  num get last => this[length - 1];
+
+  num removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<num> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [num initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<num> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <num>[]);
+
+  // -- end List<num> mixins.
+
+  /** @domName Float64Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Float64Array.subarray */
+  Float64Array subarray(int start, [int end]) native;
+}
+
+/// @domName HTMLFontElement
+class FontElement extends Element implements Element native "*HTMLFontElement" {
+
+  /** @domName HTMLFontElement.color */
+  String color;
+
+  /** @domName HTMLFontElement.face */
+  String face;
+
+  /** @domName HTMLFontElement.size */
+  String size;
+}
+
+/// @domName FormData
+class FormData native "*FormData" {
+
+  factory FormData([FormElement form]) {
+    if (!?form) {
+      return _FormDataFactoryProvider.createFormData();
+    }
+    return _FormDataFactoryProvider.createFormData(form);
+  }
+
+  /** @domName FormData.append */
+  void append(String name, String value, String filename) native;
+}
+
+/// @domName HTMLFormElement
+class FormElement extends Element implements Element native "*HTMLFormElement" {
+
+  factory FormElement() => _Elements.createFormElement();
+
+  /** @domName HTMLFormElement.acceptCharset */
+  String acceptCharset;
+
+  /** @domName HTMLFormElement.action */
+  String action;
+
+  /** @domName HTMLFormElement.autocomplete */
+  String autocomplete;
+
+  /** @domName HTMLFormElement.encoding */
+  String encoding;
+
+  /** @domName HTMLFormElement.enctype */
+  String enctype;
+
+  /** @domName HTMLFormElement.length */
+  final int length;
+
+  /** @domName HTMLFormElement.method */
+  String method;
+
+  /** @domName HTMLFormElement.name */
+  String name;
+
+  /** @domName HTMLFormElement.noValidate */
+  bool noValidate;
+
+  /** @domName HTMLFormElement.target */
+  String target;
+
+  /** @domName HTMLFormElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLFormElement.reset */
+  void reset() native;
+
+  /** @domName HTMLFormElement.submit */
+  void submit() native;
+}
+
+/// @domName HTMLFrameElement
+class FrameElement extends Element implements Element native "*HTMLFrameElement" {
+
+  /** @domName HTMLFrameElement.contentWindow */
+  Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
+  Window get _contentWindow => JS("Window", "#.contentWindow", this);
+
+  /** @domName HTMLFrameElement.frameBorder */
+  String frameBorder;
+
+  /** @domName HTMLFrameElement.height */
+  final int height;
+
+  /** @domName HTMLFrameElement.location */
+  String location;
+
+  /** @domName HTMLFrameElement.longDesc */
+  String longDesc;
+
+  /** @domName HTMLFrameElement.marginHeight */
+  String marginHeight;
+
+  /** @domName HTMLFrameElement.marginWidth */
+  String marginWidth;
+
+  /** @domName HTMLFrameElement.name */
+  String name;
+
+  /** @domName HTMLFrameElement.noResize */
+  bool noResize;
+
+  /** @domName HTMLFrameElement.scrolling */
+  String scrolling;
+
+  /** @domName HTMLFrameElement.src */
+  String src;
+
+  /** @domName HTMLFrameElement.width */
+  final int width;
+}
+
+/// @domName HTMLFrameSetElement
+class FrameSetElement extends Element implements Element native "*HTMLFrameSetElement" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  FrameSetElementEvents get on =>
+    new FrameSetElementEvents(this);
+
+  /** @domName HTMLFrameSetElement.cols */
+  String cols;
+
+  /** @domName HTMLFrameSetElement.rows */
+  String rows;
+}
+
+class FrameSetElementEvents extends ElementEvents {
+  FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get beforeUnload => this['beforeunload'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get hashChange => this['hashchange'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get offline => this['offline'];
+
+  EventListenerList get online => this['online'];
+
+  EventListenerList get popState => this['popstate'];
+
+  EventListenerList get resize => this['resize'];
+
+  EventListenerList get storage => this['storage'];
+
+  EventListenerList get unload => this['unload'];
+}
+
+/// @domName GainNode
+class GainNode extends AudioNode native "*GainNode" {
+
+  /** @domName GainNode.gain */
+  final AudioGain gain;
+}
+
+/// @domName Gamepad
+class Gamepad native "*Gamepad" {
+
+  /** @domName Gamepad.axes */
+  final List<num> axes;
+
+  /** @domName Gamepad.buttons */
+  final List<num> buttons;
+
+  /** @domName Gamepad.id */
+  final String id;
+
+  /** @domName Gamepad.index */
+  final int index;
+
+  /** @domName Gamepad.timestamp */
+  final int timestamp;
+}
+
+/// @domName Geolocation
+class Geolocation native "*Geolocation" {
+
+  /** @domName Geolocation.clearWatch */
+  void clearWatch(int watchId) native;
+
+  /** @domName Geolocation.getCurrentPosition */
+  void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
+
+  /** @domName Geolocation.watchPosition */
+  int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native;
+}
+
+/// @domName Geoposition
+class Geoposition native "*Geoposition" {
+
+  /** @domName Geoposition.coords */
+  final Coordinates coords;
+
+  /** @domName Geoposition.timestamp */
+  final int timestamp;
+}
+
+/// @domName HTMLHRElement
+class HRElement extends Element implements Element native "*HTMLHRElement" {
+
+  factory HRElement() => _Elements.createHRElement();
+
+  /** @domName HTMLHRElement.align */
+  String align;
+
+  /** @domName HTMLHRElement.noShade */
+  bool noShade;
+
+  /** @domName HTMLHRElement.size */
+  String size;
+
+  /** @domName HTMLHRElement.width */
+  String width;
+}
+
+/// @domName HTMLAllCollection
+class HTMLAllCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLAllCollection" {
+
+  /** @domName HTMLAllCollection.length */
+  final int length;
+
+  Node operator[](int index) => JS("Node", "#[#]", this, index);
+
+  void operator[]=(int index, Node value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Node> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     _Collections.filter(this, <Node>[], f);
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Node get last => this[length - 1];
+
+  Node removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Node> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
+
+  // -- end List<Node> mixins.
+
+  /** @domName HTMLAllCollection.item */
+  Node item(int index) native;
+
+  /** @domName HTMLAllCollection.namedItem */
+  Node namedItem(String name) native;
+
+  /** @domName HTMLAllCollection.tags */
+  List<Node> tags(String name) native;
+}
+
+/// @domName HTMLCollection
+class HTMLCollection implements JavaScriptIndexingBehavior, List<Node> native "*HTMLCollection" {
+
+  /** @domName HTMLCollection.length */
+  final int length;
+
+  Node operator[](int index) => JS("Node", "#[#]", this, index);
+
+  void operator[]=(int index, Node value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Node> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     _Collections.filter(this, <Node>[], f);
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Node get last => this[length - 1];
+
+  Node removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Node> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
+
+  // -- end List<Node> mixins.
+
+  /** @domName HTMLCollection.item */
+  Node item(int index) native;
+
+  /** @domName HTMLCollection.namedItem */
+  Node namedItem(String name) native;
+}
+
+/// @domName HTMLOptionsCollection
+class HTMLOptionsCollection extends HTMLCollection native "*HTMLOptionsCollection" {
+
+  // Shadowing definition.
+  /** @domName HTMLOptionsCollection.length */
+  int get length => JS("int", "#.length", this);
+
+  /** @domName HTMLOptionsCollection.length */
+  void set length(int value) {
+    JS("void", "#.length = #", this, value);
+  }
+
+  /** @domName HTMLOptionsCollection.selectedIndex */
+  int selectedIndex;
+
+  /** @domName HTMLOptionsCollection.remove */
+  void remove(int index) native;
+}
+
+/// @domName HashChangeEvent
+class HashChangeEvent extends Event native "*HashChangeEvent" {
+
+  /** @domName HashChangeEvent.newURL */
+  final String newURL;
+
+  /** @domName HashChangeEvent.oldURL */
+  final String oldURL;
+
+  /** @domName HashChangeEvent.initHashChangeEvent */
+  void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native;
+}
+
+/// @domName HTMLHeadElement
+class HeadElement extends Element implements Element native "*HTMLHeadElement" {
+
+  factory HeadElement() => _Elements.createHeadElement();
+
+  /** @domName HTMLHeadElement.profile */
+  String profile;
+}
+
+/// @domName HTMLHeadingElement
+class HeadingElement extends Element implements Element native "*HTMLHeadingElement" {
+
+  factory HeadingElement.h1() => _Elements.createHeadingElement_h1();
+
+  factory HeadingElement.h2() => _Elements.createHeadingElement_h2();
+
+  factory HeadingElement.h3() => _Elements.createHeadingElement_h3();
+
+  factory HeadingElement.h4() => _Elements.createHeadingElement_h4();
+
+  factory HeadingElement.h5() => _Elements.createHeadingElement_h5();
+
+  factory HeadingElement.h6() => _Elements.createHeadingElement_h6();
+
+  /** @domName HTMLHeadingElement.align */
+  String align;
+}
+
+/// @domName HTMLHtmlElement
+class HtmlElement extends Element implements Element native "*HTMLHtmlElement" {
+
+  factory HtmlElement() => _Elements.createHtmlElement();
+}
+// 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 HttpRequest extends EventTarget native "*XMLHttpRequest" {
+  factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
+
+  factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
+      _HttpRequestFactoryProvider.createHttpRequestgetWithCredentials(url, onSuccess);
+
+
+  factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  HttpRequestEvents get on =>
+    new HttpRequestEvents(this);
+
+  static const int DONE = 4;
+
+  static const int HEADERS_RECEIVED = 2;
+
+  static const int LOADING = 3;
+
+  static const int OPENED = 1;
+
+  static const int UNSENT = 0;
+
+  /** @domName XMLHttpRequest.readyState */
+  final int readyState;
+
+  /** @domName XMLHttpRequest.response */
+  final Object response;
+
+  /** @domName XMLHttpRequest.responseText */
+  final String responseText;
+
+  /** @domName XMLHttpRequest.responseType */
+  String responseType;
+
+  /** @domName XMLHttpRequest.responseXML */
+  final Document responseXML;
+
+  /** @domName XMLHttpRequest.status */
+  final int status;
+
+  /** @domName XMLHttpRequest.statusText */
+  final String statusText;
+
+  /** @domName XMLHttpRequest.upload */
+  final HttpRequestUpload upload;
+
+  /** @domName XMLHttpRequest.withCredentials */
+  bool withCredentials;
+
+  /** @domName XMLHttpRequest.abort */
+  void abort() native;
+
+  /** @domName XMLHttpRequest.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName XMLHttpRequest.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName XMLHttpRequest.getAllResponseHeaders */
+  String getAllResponseHeaders() native;
+
+  /** @domName XMLHttpRequest.getResponseHeader */
+  String getResponseHeader(String header) native;
+
+  /** @domName XMLHttpRequest.open */
+  void open(String method, String url, [bool async, String user, String password]) native;
+
+  /** @domName XMLHttpRequest.overrideMimeType */
+  void overrideMimeType(String override) native;
+
+  /** @domName XMLHttpRequest.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName XMLHttpRequest.send */
+  void send([data]) native;
+
+  /** @domName XMLHttpRequest.setRequestHeader */
+  void setRequestHeader(String header, String value) native;
+
+}
+
+class HttpRequestEvents extends Events {
+  HttpRequestEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get loadEnd => this['loadend'];
+
+  EventListenerList get loadStart => this['loadstart'];
+
+  EventListenerList get progress => this['progress'];
+
+  EventListenerList get readyStateChange => this['readystatechange'];
+}
+
+/// @domName XMLHttpRequestException
+class HttpRequestException native "*XMLHttpRequestException" {
+
+  static const int ABORT_ERR = 102;
+
+  static const int NETWORK_ERR = 101;
+
+  /** @domName XMLHttpRequestException.code */
+  final int code;
+
+  /** @domName XMLHttpRequestException.message */
+  final String message;
+
+  /** @domName XMLHttpRequestException.name */
+  final String name;
+
+  /** @domName XMLHttpRequestException.toString */
+  String toString() native;
+}
+
+/// @domName XMLHttpRequestProgressEvent
+class HttpRequestProgressEvent extends ProgressEvent native "*XMLHttpRequestProgressEvent" {
+
+  /** @domName XMLHttpRequestProgressEvent.position */
+  final int position;
+
+  /** @domName XMLHttpRequestProgressEvent.totalSize */
+  final int totalSize;
+}
+
+/// @domName XMLHttpRequestUpload
+class HttpRequestUpload extends EventTarget native "*XMLHttpRequestUpload" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  HttpRequestUploadEvents get on =>
+    new HttpRequestUploadEvents(this);
+
+  /** @domName XMLHttpRequestUpload.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName XMLHttpRequestUpload.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName XMLHttpRequestUpload.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class HttpRequestUploadEvents extends Events {
+  HttpRequestUploadEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get loadEnd => this['loadend'];
+
+  EventListenerList get loadStart => this['loadstart'];
+
+  EventListenerList get progress => this['progress'];
+}
+
+/// @domName IDBAny
+class IDBAny native "*IDBAny" {
+}
+
+/// @domName IDBCursor
+class IDBCursor native "*IDBCursor" {
+
+  static const int NEXT = 0;
+
+  static const int NEXT_NO_DUPLICATE = 1;
+
+  static const int PREV = 2;
+
+  static const int PREV_NO_DUPLICATE = 3;
+
+  /** @domName IDBCursor.direction */
+  final String direction;
+
+  /** @domName IDBCursor.key */
+  final Object key;
+
+  /** @domName IDBCursor.primaryKey */
+  final Object primaryKey;
+
+  /** @domName IDBCursor.source */
+  final dynamic source;
+
+  /** @domName IDBCursor.advance */
+  void advance(int count) native;
+
+  /** @domName IDBCursor.continueFunction */
+  void continueFunction([key]) {
+    if (?key) {
+      var key_1 = _convertDartToNative_IDBKey(key);
+      _continueFunction_1(key_1);
+      return;
+    }
+    _continueFunction_2();
+    return;
+  }
+  void _continueFunction_1(key) native "continue";
+  void _continueFunction_2() native "continue";
+
+  /** @domName IDBCursor.delete */
+  IDBRequest delete() native;
+
+  /** @domName IDBCursor.update */
+  IDBRequest update(/*any*/ value) {
+    var value_1 = _convertDartToNative_SerializedScriptValue(value);
+    return _update_1(value_1);
+  }
+  IDBRequest _update_1(value) native "update";
+}
+
+/// @domName IDBCursorWithValue
+class IDBCursorWithValue extends IDBCursor native "*IDBCursorWithValue" {
+
+  /** @domName IDBCursorWithValue.value */
+  final Object value;
+}
+// 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 IDBDatabase extends EventTarget native "*IDBDatabase" {
+
+  IDBTransaction transaction(storeName_OR_storeNames, String mode) {
+    if (mode != 'readonly' && mode != 'readwrite') {
+      throw new ArgumentError(mode);
+    }
+
+    // TODO(sra): Ensure storeName_OR_storeNames is a string or List<String>,
+    // and copy to JavaScript array if necessary.
+
+    if (_transaction_fn != null) {
+      return _transaction_fn(this, storeName_OR_storeNames, mode);
+    }
+
+    // Try and create a transaction with a string mode.  Browsers that expect a
+    // numeric mode tend to convert the string into a number.  This fails
+    // silently, resulting in zero ('readonly').
+    var txn = _transaction(storeName_OR_storeNames, mode);
+    if (_hasNumericMode(txn)) {
+      _transaction_fn = _transaction_numeric_mode;
+      txn = _transaction_fn(this, storeName_OR_storeNames, mode);
+    } else {
+      _transaction_fn = _transaction_string_mode;
+    }
+    return txn;
+  }
+
+  static IDBTransaction _transaction_string_mode(IDBDatabase db, stores, mode) {
+    return db._transaction(stores, mode);
+  }
+
+  static IDBTransaction _transaction_numeric_mode(IDBDatabase db, stores, mode) {
+    int intMode;
+    if (mode == 'readonly') intMode = IDBTransaction.READ_ONLY;
+    if (mode == 'readwrite') intMode = IDBTransaction.READ_WRITE;
+    return db._transaction(stores, intMode);
+  }
+
+  IDBTransaction _transaction(stores, mode) native 'transaction';
+
+  static bool _hasNumericMode(txn) =>
+      JS('bool', 'typeof(#.mode) === "number"', txn);
+
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  IDBDatabaseEvents get on =>
+    new IDBDatabaseEvents(this);
+
+  /** @domName IDBDatabase.name */
+  final String name;
+
+  /** @domName IDBDatabase.objectStoreNames */
+  final List<String> objectStoreNames;
+
+  /** @domName IDBDatabase.version */
+  final dynamic version;
+
+  /** @domName IDBDatabase.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName IDBDatabase.close */
+  void close() native;
+
+  /** @domName IDBDatabase.createObjectStore */
+  IDBObjectStore createObjectStore(String name, [options]) {
+    if (?options) {
+      var options_1 = _convertDartToNative_Dictionary(options);
+      return _createObjectStore_1(name, options_1);
+    }
+    return _createObjectStore_2(name);
+  }
+  IDBObjectStore _createObjectStore_1(name, options) native "createObjectStore";
+  IDBObjectStore _createObjectStore_2(name) native "createObjectStore";
+
+  /** @domName IDBDatabase.deleteObjectStore */
+  void deleteObjectStore(String name) native;
+
+  /** @domName IDBDatabase.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName IDBDatabase.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName IDBDatabase.setVersion */
+  IDBVersionChangeRequest setVersion(String version) native;
+}
+
+// TODO(sra): This should be a static member of IDBTransaction but dart2js
+// can't handle that.  Move it back after dart2js is completely done.
+var _transaction_fn;  // Assigned one of the static methods.
+
+class IDBDatabaseEvents extends Events {
+  IDBDatabaseEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get versionChange => this['versionchange'];
+}
+
+/// @domName IDBDatabaseException
+class IDBDatabaseException native "*IDBDatabaseException" {
+
+  static const int ABORT_ERR = 20;
+
+  static const int CONSTRAINT_ERR = 4;
+
+  static const int DATA_ERR = 5;
+
+  static const int NON_TRANSIENT_ERR = 2;
+
+  static const int NOT_ALLOWED_ERR = 6;
+
+  static const int NOT_FOUND_ERR = 8;
+
+  static const int NO_ERR = 0;
+
+  static const int QUOTA_ERR = 22;
+
+  static const int READ_ONLY_ERR = 9;
+
+  static const int TIMEOUT_ERR = 23;
+
+  static const int TRANSACTION_INACTIVE_ERR = 7;
+
+  static const int UNKNOWN_ERR = 1;
+
+  static const int VER_ERR = 12;
+
+  /** @domName IDBDatabaseException.code */
+  final int code;
+
+  /** @domName IDBDatabaseException.message */
+  final String message;
+
+  /** @domName IDBDatabaseException.name */
+  final String name;
+
+  /** @domName IDBDatabaseException.toString */
+  String toString() native;
+}
+
+/// @domName IDBFactory
+class IDBFactory native "*IDBFactory" {
+
+  /** @domName IDBFactory.cmp */
+  int cmp(/*IDBKey*/ first, /*IDBKey*/ second) {
+    var first_1 = _convertDartToNative_IDBKey(first);
+    var second_2 = _convertDartToNative_IDBKey(second);
+    return _cmp_1(first_1, second_2);
+  }
+  int _cmp_1(first, second) native "cmp";
+
+  /** @domName IDBFactory.deleteDatabase */
+  IDBVersionChangeRequest deleteDatabase(String name) native;
+
+  /** @domName IDBFactory.open */
+  IDBOpenDBRequest open(String name, [int version]) native;
+
+  /** @domName IDBFactory.webkitGetDatabaseNames */
+  IDBRequest webkitGetDatabaseNames() native;
+}
+
+/// @domName IDBIndex
+class IDBIndex native "*IDBIndex" {
+
+  /** @domName IDBIndex.keyPath */
+  final dynamic keyPath;
+
+  /** @domName IDBIndex.multiEntry */
+  final bool multiEntry;
+
+  /** @domName IDBIndex.name */
+  final String name;
+
+  /** @domName IDBIndex.objectStore */
+  final IDBObjectStore objectStore;
+
+  /** @domName IDBIndex.unique */
+  final bool unique;
+
+  /** @domName IDBIndex.count */
+  IDBRequest count([key_OR_range]) {
+    if (!?key_OR_range) {
+      return _count_1();
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
+      return _count_2(key_OR_range);
+    }
+    if (?key_OR_range) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
+      return _count_3(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _count_1() native "count";
+  IDBRequest _count_2(IDBKeyRange range) native "count";
+  IDBRequest _count_3(key) native "count";
+
+  /** @domName IDBIndex.get */
+  IDBRequest get(key) {
+    if ((key is IDBKeyRange || key == null)) {
+      return _get_1(key);
+    }
+    if (?key) {
+      var key_1 = _convertDartToNative_IDBKey(key);
+      return _get_2(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _get_1(IDBKeyRange key) native "get";
+  IDBRequest _get_2(key) native "get";
+
+  /** @domName IDBIndex.getKey */
+  IDBRequest getKey(key) {
+    if ((key is IDBKeyRange || key == null)) {
+      return _getKey_1(key);
+    }
+    if (?key) {
+      var key_1 = _convertDartToNative_IDBKey(key);
+      return _getKey_2(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _getKey_1(IDBKeyRange key) native "getKey";
+  IDBRequest _getKey_2(key) native "getKey";
+
+  /** @domName IDBIndex.openCursor */
+  IDBRequest openCursor([key_OR_range, direction]) {
+    if (!?key_OR_range &&
+        !?direction) {
+      return _openCursor_1();
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        !?direction) {
+      return _openCursor_2(key_OR_range);
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
+      return _openCursor_3(key_OR_range, direction);
+    }
+    if (?key_OR_range &&
+        !?direction) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openCursor_4(key_1);
+    }
+    if (?key_OR_range &&
+        (direction is String || direction == null)) {
+      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openCursor_5(key_2, direction);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _openCursor_1() native "openCursor";
+  IDBRequest _openCursor_2(IDBKeyRange range) native "openCursor";
+  IDBRequest _openCursor_3(IDBKeyRange range, String direction) native "openCursor";
+  IDBRequest _openCursor_4(key) native "openCursor";
+  IDBRequest _openCursor_5(key, String direction) native "openCursor";
+
+  /** @domName IDBIndex.openKeyCursor */
+  IDBRequest openKeyCursor([key_OR_range, direction]) {
+    if (!?key_OR_range &&
+        !?direction) {
+      return _openKeyCursor_1();
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        !?direction) {
+      return _openKeyCursor_2(key_OR_range);
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
+      return _openKeyCursor_3(key_OR_range, direction);
+    }
+    if (?key_OR_range &&
+        !?direction) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openKeyCursor_4(key_1);
+    }
+    if (?key_OR_range &&
+        (direction is String || direction == null)) {
+      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openKeyCursor_5(key_2, direction);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _openKeyCursor_1() native "openKeyCursor";
+  IDBRequest _openKeyCursor_2(IDBKeyRange range) native "openKeyCursor";
+  IDBRequest _openKeyCursor_3(IDBKeyRange range, String direction) native "openKeyCursor";
+  IDBRequest _openKeyCursor_4(key) native "openKeyCursor";
+  IDBRequest _openKeyCursor_5(key, String direction) native "openKeyCursor";
+}
+
+/// @domName IDBKey
+class IDBKey native "*IDBKey" {
+}
+// 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 IDBKeyRange native "*IDBKeyRange" {
+  /**
+   * @domName IDBKeyRange.only
+   */
+  factory IDBKeyRange.only(/*IDBKey*/ value) =>
+      _IDBKeyRangeFactoryProvider.createIDBKeyRange_only(value);
+
+  /**
+   * @domName IDBKeyRange.lowerBound
+   */
+  factory IDBKeyRange.lowerBound(/*IDBKey*/ bound, [bool open = false]) =>
+      _IDBKeyRangeFactoryProvider.createIDBKeyRange_lowerBound(bound, open);
+
+  /**
+   * @domName IDBKeyRange.upperBound
+   */
+  factory IDBKeyRange.upperBound(/*IDBKey*/ bound, [bool open = false]) =>
+      _IDBKeyRangeFactoryProvider.createIDBKeyRange_upperBound(bound, open);
+
+  /**
+   * @domName IDBKeyRange.bound
+   */
+  factory IDBKeyRange.bound(/*IDBKey*/ lower, /*IDBKey*/ upper,
+                            [bool lowerOpen = false, bool upperOpen = false]) =>
+      _IDBKeyRangeFactoryProvider.createIDBKeyRange_bound(
+          lower, upper, lowerOpen, upperOpen);
+
+
+  /** @domName IDBKeyRange.lower */
+  dynamic get lower => _convertNativeToDart_IDBKey(this._lower);
+  dynamic get _lower => JS("dynamic", "#.lower", this);
+
+  /** @domName IDBKeyRange.lowerOpen */
+  final bool lowerOpen;
+
+  /** @domName IDBKeyRange.upper */
+  dynamic get upper => _convertNativeToDart_IDBKey(this._upper);
+  dynamic get _upper => JS("dynamic", "#.upper", this);
+
+  /** @domName IDBKeyRange.upperOpen */
+  final bool upperOpen;
+
+  /** @domName IDBKeyRange.bound_ */
+  static IDBKeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [lowerOpen, upperOpen]) {
+    if (?upperOpen) {
+      var lower_1 = _convertDartToNative_IDBKey(lower);
+      var upper_2 = _convertDartToNative_IDBKey(upper);
+      return _bound__1(lower_1, upper_2, lowerOpen, upperOpen);
+    }
+    if (?lowerOpen) {
+      var lower_3 = _convertDartToNative_IDBKey(lower);
+      var upper_4 = _convertDartToNative_IDBKey(upper);
+      return _bound__2(lower_3, upper_4, lowerOpen);
+    }
+    var lower_5 = _convertDartToNative_IDBKey(lower);
+    var upper_6 = _convertDartToNative_IDBKey(upper);
+    return _bound__3(lower_5, upper_6);
+  }
+  IDBKeyRange _bound__1(lower, upper, bool lowerOpen, bool upperOpen) native "bound";
+  IDBKeyRange _bound__2(lower, upper, bool lowerOpen) native "bound";
+  IDBKeyRange _bound__3(lower, upper) native "bound";
+
+  /** @domName IDBKeyRange.lowerBound_ */
+  static IDBKeyRange lowerBound_(/*IDBKey*/ bound, [open]) {
+    if (?open) {
+      var bound_1 = _convertDartToNative_IDBKey(bound);
+      return _lowerBound__1(bound_1, open);
+    }
+    var bound_2 = _convertDartToNative_IDBKey(bound);
+    return _lowerBound__2(bound_2);
+  }
+  IDBKeyRange _lowerBound__1(bound, bool open) native "lowerBound";
+  IDBKeyRange _lowerBound__2(bound) native "lowerBound";
+
+  /** @domName IDBKeyRange.only_ */
+  static IDBKeyRange only_(/*IDBKey*/ value) {
+    var value_1 = _convertDartToNative_IDBKey(value);
+    return _only__1(value_1);
+  }
+  IDBKeyRange _only__1(value) native "only";
+
+  /** @domName IDBKeyRange.upperBound_ */
+  static IDBKeyRange upperBound_(/*IDBKey*/ bound, [open]) {
+    if (?open) {
+      var bound_1 = _convertDartToNative_IDBKey(bound);
+      return _upperBound__1(bound_1, open);
+    }
+    var bound_2 = _convertDartToNative_IDBKey(bound);
+    return _upperBound__2(bound_2);
+  }
+  IDBKeyRange _upperBound__1(bound, bool open) native "upperBound";
+  IDBKeyRange _upperBound__2(bound) native "upperBound";
+
+}
+
+/// @domName IDBObjectStore
+class IDBObjectStore native "*IDBObjectStore" {
+
+  /** @domName IDBObjectStore.autoIncrement */
+  final bool autoIncrement;
+
+  /** @domName IDBObjectStore.indexNames */
+  final List<String> indexNames;
+
+  /** @domName IDBObjectStore.keyPath */
+  final dynamic keyPath;
+
+  /** @domName IDBObjectStore.name */
+  final String name;
+
+  /** @domName IDBObjectStore.transaction */
+  final IDBTransaction transaction;
+
+  /** @domName IDBObjectStore.add */
+  IDBRequest add(/*any*/ value, [key]) {
+    if (?key) {
+      var value_1 = _convertDartToNative_SerializedScriptValue(value);
+      var key_2 = _convertDartToNative_IDBKey(key);
+      return _add_1(value_1, key_2);
+    }
+    var value_3 = _convertDartToNative_SerializedScriptValue(value);
+    return _add_2(value_3);
+  }
+  IDBRequest _add_1(value, key) native "add";
+  IDBRequest _add_2(value) native "add";
+
+  /** @domName IDBObjectStore.clear */
+  IDBRequest clear() native;
+
+  /** @domName IDBObjectStore.count */
+  IDBRequest count([key_OR_range]) {
+    if (!?key_OR_range) {
+      return _count_1();
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null)) {
+      return _count_2(key_OR_range);
+    }
+    if (?key_OR_range) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
+      return _count_3(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _count_1() native "count";
+  IDBRequest _count_2(IDBKeyRange range) native "count";
+  IDBRequest _count_3(key) native "count";
+
+  /** @domName IDBObjectStore.createIndex */
+  IDBIndex createIndex(String name, keyPath, [options]) {
+    if ((keyPath is List<String> || keyPath == null) &&
+        !?options) {
+      List keyPath_1 = _convertDartToNative_StringArray(keyPath);
+      return _createIndex_1(name, keyPath_1);
+    }
+    if ((keyPath is List<String> || keyPath == null) &&
+        (options is Map || options == null)) {
+      List keyPath_2 = _convertDartToNative_StringArray(keyPath);
+      var options_3 = _convertDartToNative_Dictionary(options);
+      return _createIndex_2(name, keyPath_2, options_3);
+    }
+    if ((keyPath is String || keyPath == null) &&
+        !?options) {
+      return _createIndex_3(name, keyPath);
+    }
+    if ((keyPath is String || keyPath == null) &&
+        (options is Map || options == null)) {
+      var options_4 = _convertDartToNative_Dictionary(options);
+      return _createIndex_4(name, keyPath, options_4);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBIndex _createIndex_1(name, List keyPath) native "createIndex";
+  IDBIndex _createIndex_2(name, List keyPath, options) native "createIndex";
+  IDBIndex _createIndex_3(name, String keyPath) native "createIndex";
+  IDBIndex _createIndex_4(name, String keyPath, options) native "createIndex";
+
+  /** @domName IDBObjectStore.delete */
+  IDBRequest delete(key_OR_keyRange) {
+    if ((key_OR_keyRange is IDBKeyRange || key_OR_keyRange == null)) {
+      return _delete_1(key_OR_keyRange);
+    }
+    if (?key_OR_keyRange) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_keyRange);
+      return _delete_2(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _delete_1(IDBKeyRange keyRange) native "delete";
+  IDBRequest _delete_2(key) native "delete";
+
+  /** @domName IDBObjectStore.deleteIndex */
+  void deleteIndex(String name) native;
+
+  /** @domName IDBObjectStore.getObject */
+  IDBRequest getObject(key) {
+    if ((key is IDBKeyRange || key == null)) {
+      return _getObject_1(key);
+    }
+    if (?key) {
+      var key_1 = _convertDartToNative_IDBKey(key);
+      return _getObject_2(key_1);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _getObject_1(IDBKeyRange key) native "get";
+  IDBRequest _getObject_2(key) native "get";
+
+  /** @domName IDBObjectStore.index */
+  IDBIndex index(String name) native;
+
+  /** @domName IDBObjectStore.openCursor */
+  IDBRequest openCursor([key_OR_range, direction]) {
+    if (!?key_OR_range &&
+        !?direction) {
+      return _openCursor_1();
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        !?direction) {
+      return _openCursor_2(key_OR_range);
+    }
+    if ((key_OR_range is IDBKeyRange || key_OR_range == null) &&
+        (direction is String || direction == null)) {
+      return _openCursor_3(key_OR_range, direction);
+    }
+    if (?key_OR_range &&
+        !?direction) {
+      var key_1 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openCursor_4(key_1);
+    }
+    if (?key_OR_range &&
+        (direction is String || direction == null)) {
+      var key_2 = _convertDartToNative_IDBKey(key_OR_range);
+      return _openCursor_5(key_2, direction);
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  IDBRequest _openCursor_1() native "openCursor";
+  IDBRequest _openCursor_2(IDBKeyRange range) native "openCursor";
+  IDBRequest _openCursor_3(IDBKeyRange range, String direction) native "openCursor";
+  IDBRequest _openCursor_4(key) native "openCursor";
+  IDBRequest _openCursor_5(key, String direction) native "openCursor";
+
+  /** @domName IDBObjectStore.put */
+  IDBRequest put(/*any*/ value, [key]) {
+    if (?key) {
+      var value_1 = _convertDartToNative_SerializedScriptValue(value);
+      var key_2 = _convertDartToNative_IDBKey(key);
+      return _put_1(value_1, key_2);
+    }
+    var value_3 = _convertDartToNative_SerializedScriptValue(value);
+    return _put_2(value_3);
+  }
+  IDBRequest _put_1(value, key) native "put";
+  IDBRequest _put_2(value) native "put";
+}
+
+/// @domName IDBOpenDBRequest
+class IDBOpenDBRequest extends IDBRequest implements EventTarget native "*IDBOpenDBRequest" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  IDBOpenDBRequestEvents get on =>
+    new IDBOpenDBRequestEvents(this);
+}
+
+class IDBOpenDBRequestEvents extends IDBRequestEvents {
+  IDBOpenDBRequestEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get blocked => this['blocked'];
+
+  EventListenerList get upgradeNeeded => this['upgradeneeded'];
+}
+
+/// @domName IDBRequest
+class IDBRequest extends EventTarget native "*IDBRequest" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  IDBRequestEvents get on =>
+    new IDBRequestEvents(this);
+
+  /** @domName IDBRequest.error */
+  final DOMError error;
+
+  /** @domName IDBRequest.errorCode */
+  final int errorCode;
+
+  /** @domName IDBRequest.readyState */
+  final String readyState;
+
+  /** @domName IDBRequest.result */
+  dynamic get result => _convertNativeToDart_IDBAny(this._result);
+  dynamic get _result => JS("dynamic", "#.result", this);
+
+  /** @domName IDBRequest.source */
+  final dynamic source;
+
+  /** @domName IDBRequest.transaction */
+  final IDBTransaction transaction;
+
+  /** @domName IDBRequest.webkitErrorMessage */
+  final String webkitErrorMessage;
+
+  /** @domName IDBRequest.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName IDBRequest.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName IDBRequest.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class IDBRequestEvents extends Events {
+  IDBRequestEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get success => this['success'];
+}
+
+/// @domName IDBTransaction
+class IDBTransaction extends EventTarget native "*IDBTransaction" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  IDBTransactionEvents get on =>
+    new IDBTransactionEvents(this);
+
+  static const int READ_ONLY = 0;
+
+  static const int READ_WRITE = 1;
+
+  static const int VERSION_CHANGE = 2;
+
+  /** @domName IDBTransaction.db */
+  final IDBDatabase db;
+
+  /** @domName IDBTransaction.error */
+  final DOMError error;
+
+  /** @domName IDBTransaction.mode */
+  final String mode;
+
+  /** @domName IDBTransaction.abort */
+  void abort() native;
+
+  /** @domName IDBTransaction.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName IDBTransaction.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName IDBTransaction.objectStore */
+  IDBObjectStore objectStore(String name) native;
+
+  /** @domName IDBTransaction.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class IDBTransactionEvents extends Events {
+  IDBTransactionEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get complete => this['complete'];
+
+  EventListenerList get error => this['error'];
+}
+
+/// @domName IDBVersionChangeEvent
+class IDBUpgradeNeededEvent extends Event native "*IDBVersionChangeEvent" {
+
+  /** @domName IDBVersionChangeEvent.newVersion */
+  final int newVersion;
+
+  /** @domName IDBVersionChangeEvent.oldVersion */
+  final int oldVersion;
+}
+
+/// @domName IDBVersionChangeEvent
+class IDBVersionChangeEvent extends Event native "*IDBVersionChangeEvent" {
+
+  /** @domName IDBVersionChangeEvent.version */
+  final String version;
+}
+
+/// @domName IDBVersionChangeRequest
+class IDBVersionChangeRequest extends IDBRequest implements EventTarget native "*IDBVersionChangeRequest" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  IDBVersionChangeRequestEvents get on =>
+    new IDBVersionChangeRequestEvents(this);
+}
+
+class IDBVersionChangeRequestEvents extends IDBRequestEvents {
+  IDBVersionChangeRequestEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get blocked => this['blocked'];
+}
+
+/// @domName HTMLIFrameElement
+class IFrameElement extends Element implements Element native "*HTMLIFrameElement" {
+
+  factory IFrameElement() => _Elements.createIFrameElement();
+
+  /** @domName HTMLIFrameElement.align */
+  String align;
+
+  /** @domName HTMLIFrameElement.contentWindow */
+  Window get contentWindow => _convertNativeToDart_Window(this._contentWindow);
+  Window get _contentWindow => JS("Window", "#.contentWindow", this);
+
+  /** @domName HTMLIFrameElement.frameBorder */
+  String frameBorder;
+
+  /** @domName HTMLIFrameElement.height */
+  String height;
+
+  /** @domName HTMLIFrameElement.longDesc */
+  String longDesc;
+
+  /** @domName HTMLIFrameElement.marginHeight */
+  String marginHeight;
+
+  /** @domName HTMLIFrameElement.marginWidth */
+  String marginWidth;
+
+  /** @domName HTMLIFrameElement.name */
+  String name;
+
+  /** @domName HTMLIFrameElement.sandbox */
+  String sandbox;
+
+  /** @domName HTMLIFrameElement.scrolling */
+  String scrolling;
+
+  /** @domName HTMLIFrameElement.src */
+  String src;
+
+  /** @domName HTMLIFrameElement.srcdoc */
+  String srcdoc;
+
+  /** @domName HTMLIFrameElement.width */
+  String width;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void IceCallback(IceCandidate candidate, bool moreToFollow, PeerConnection00 source);
+
+/// @domName IceCandidate
+class IceCandidate native "*IceCandidate" {
+
+  factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
+
+  /** @domName IceCandidate.label */
+  final String label;
+
+  /** @domName IceCandidate.toSdp */
+  String toSdp() native;
+}
+
+/// @domName ImageData
+class ImageData native "*ImageData" {
+
+  /** @domName ImageData.data */
+  final Uint8ClampedArray data;
+
+  /** @domName ImageData.height */
+  final int height;
+
+  /** @domName ImageData.width */
+  final int width;
+}
+
+/// @domName HTMLImageElement
+class ImageElement extends Element implements Element native "*HTMLImageElement" {
+
+  factory ImageElement({String src, int width, int height}) {
+    if (!?src) {
+      return _Elements.createImageElement();
+    }
+    if (!?width) {
+      return _Elements.createImageElement(src);
+    }
+    if (!?height) {
+      return _Elements.createImageElement(src, width);
+    }
+    return _Elements.createImageElement(src, width, height);
+  }
+
+  /** @domName HTMLImageElement.align */
+  String align;
+
+  /** @domName HTMLImageElement.alt */
+  String alt;
+
+  /** @domName HTMLImageElement.border */
+  String border;
+
+  /** @domName HTMLImageElement.complete */
+  final bool complete;
+
+  /** @domName HTMLImageElement.crossOrigin */
+  String crossOrigin;
+
+  /** @domName HTMLImageElement.height */
+  int height;
+
+  /** @domName HTMLImageElement.hspace */
+  int hspace;
+
+  /** @domName HTMLImageElement.isMap */
+  bool isMap;
+
+  /** @domName HTMLImageElement.longDesc */
+  String longDesc;
+
+  /** @domName HTMLImageElement.lowsrc */
+  String lowsrc;
+
+  /** @domName HTMLImageElement.name */
+  String name;
+
+  /** @domName HTMLImageElement.naturalHeight */
+  final int naturalHeight;
+
+  /** @domName HTMLImageElement.naturalWidth */
+  final int naturalWidth;
+
+  /** @domName HTMLImageElement.src */
+  String src;
+
+  /** @domName HTMLImageElement.useMap */
+  String useMap;
+
+  /** @domName HTMLImageElement.vspace */
+  int vspace;
+
+  /** @domName HTMLImageElement.width */
+  int width;
+
+  /** @domName HTMLImageElement.x */
+  final int x;
+
+  /** @domName HTMLImageElement.y */
+  final int y;
+}
+
+/// @domName HTMLInputElement
+class InputElement extends Element implements Element native "*HTMLInputElement" {
+
+  factory InputElement({String type}) {
+    if (!?type) {
+      return _Elements.createInputElement();
+    }
+    return _Elements.createInputElement(type);
+  }
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  InputElementEvents get on =>
+    new InputElementEvents(this);
+
+  /** @domName HTMLInputElement.accept */
+  String accept;
+
+  /** @domName HTMLInputElement.align */
+  String align;
+
+  /** @domName HTMLInputElement.alt */
+  String alt;
+
+  /** @domName HTMLInputElement.autocomplete */
+  String autocomplete;
+
+  /** @domName HTMLInputElement.autofocus */
+  bool autofocus;
+
+  /** @domName HTMLInputElement.checked */
+  bool checked;
+
+  /** @domName HTMLInputElement.defaultChecked */
+  bool defaultChecked;
+
+  /** @domName HTMLInputElement.defaultValue */
+  String defaultValue;
+
+  /** @domName HTMLInputElement.dirName */
+  String dirName;
+
+  /** @domName HTMLInputElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLInputElement.files */
+  List<File> files;
+
+  /** @domName HTMLInputElement.form */
+  final FormElement form;
+
+  /** @domName HTMLInputElement.formAction */
+  String formAction;
+
+  /** @domName HTMLInputElement.formEnctype */
+  String formEnctype;
+
+  /** @domName HTMLInputElement.formMethod */
+  String formMethod;
+
+  /** @domName HTMLInputElement.formNoValidate */
+  bool formNoValidate;
+
+  /** @domName HTMLInputElement.formTarget */
+  String formTarget;
+
+  /** @domName HTMLInputElement.height */
+  int height;
+
+  /** @domName HTMLInputElement.incremental */
+  bool incremental;
+
+  /** @domName HTMLInputElement.indeterminate */
+  bool indeterminate;
+
+  /** @domName HTMLInputElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLInputElement.list */
+  final Element list;
+
+  /** @domName HTMLInputElement.max */
+  String max;
+
+  /** @domName HTMLInputElement.maxLength */
+  int maxLength;
+
+  /** @domName HTMLInputElement.min */
+  String min;
+
+  /** @domName HTMLInputElement.multiple */
+  bool multiple;
+
+  /** @domName HTMLInputElement.name */
+  String name;
+
+  /** @domName HTMLInputElement.pattern */
+  String pattern;
+
+  /** @domName HTMLInputElement.placeholder */
+  String placeholder;
+
+  /** @domName HTMLInputElement.readOnly */
+  bool readOnly;
+
+  /** @domName HTMLInputElement.required */
+  bool required;
+
+  /** @domName HTMLInputElement.selectionDirection */
+  String selectionDirection;
+
+  /** @domName HTMLInputElement.selectionEnd */
+  int selectionEnd;
+
+  /** @domName HTMLInputElement.selectionStart */
+  int selectionStart;
+
+  /** @domName HTMLInputElement.size */
+  int size;
+
+  /** @domName HTMLInputElement.src */
+  String src;
+
+  /** @domName HTMLInputElement.step */
+  String step;
+
+  /** @domName HTMLInputElement.type */
+  String type;
+
+  /** @domName HTMLInputElement.useMap */
+  String useMap;
+
+  /** @domName HTMLInputElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLInputElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLInputElement.value */
+  String value;
+
+  /** @domName HTMLInputElement.valueAsDate */
+  Date valueAsDate;
+
+  /** @domName HTMLInputElement.valueAsNumber */
+  num valueAsNumber;
+
+  /** @domName HTMLInputElement.webkitEntries */
+  final List<Entry> webkitEntries;
+
+  /** @domName HTMLInputElement.webkitGrammar */
+  bool webkitGrammar;
+
+  /** @domName HTMLInputElement.webkitSpeech */
+  bool webkitSpeech;
+
+  /** @domName HTMLInputElement.webkitdirectory */
+  bool webkitdirectory;
+
+  /** @domName HTMLInputElement.width */
+  int width;
+
+  /** @domName HTMLInputElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLInputElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLInputElement.select */
+  void select() native;
+
+  /** @domName HTMLInputElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+
+  /** @domName HTMLInputElement.setRangeText */
+  void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
+
+  /** @domName HTMLInputElement.setSelectionRange */
+  void setSelectionRange(int start, int end, [String direction]) native;
+
+  /** @domName HTMLInputElement.stepDown */
+  void stepDown([int n]) native;
+
+  /** @domName HTMLInputElement.stepUp */
+  void stepUp([int n]) native;
+}
+
+class InputElementEvents extends ElementEvents {
+  InputElementEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get speechChange => this['webkitSpeechChange'];
+}
+
+/// @domName Int16Array
+class Int16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int16Array" {
+
+  factory Int16Array(int length) =>
+    _TypedArrayFactoryProvider.createInt16Array(length);
+
+  factory Int16Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createInt16Array_fromList(list);
+
+  factory Int16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createInt16Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 2;
+
+  /** @domName Int16Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Int16Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Int16Array.subarray */
+  Int16Array subarray(int start, [int end]) native;
+}
+
+/// @domName Int32Array
+class Int32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int32Array" {
+
+  factory Int32Array(int length) =>
+    _TypedArrayFactoryProvider.createInt32Array(length);
+
+  factory Int32Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createInt32Array_fromList(list);
+
+  factory Int32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createInt32Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 4;
+
+  /** @domName Int32Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Int32Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Int32Array.subarray */
+  Int32Array subarray(int start, [int end]) native;
+}
+
+/// @domName Int8Array
+class Int8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Int8Array" {
+
+  factory Int8Array(int length) =>
+    _TypedArrayFactoryProvider.createInt8Array(length);
+
+  factory Int8Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createInt8Array_fromList(list);
+
+  factory Int8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createInt8Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 1;
+
+  /** @domName Int8Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Int8Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Int8Array.subarray */
+  Int8Array subarray(int start, [int end]) native;
+}
+
+/// @domName JavaScriptCallFrame
+class JavaScriptCallFrame native "*JavaScriptCallFrame" {
+
+  static const int CATCH_SCOPE = 4;
+
+  static const int CLOSURE_SCOPE = 3;
+
+  static const int GLOBAL_SCOPE = 0;
+
+  static const int LOCAL_SCOPE = 1;
+
+  static const int WITH_SCOPE = 2;
+
+  /** @domName JavaScriptCallFrame.caller */
+  final JavaScriptCallFrame caller;
+
+  /** @domName JavaScriptCallFrame.column */
+  final int column;
+
+  /** @domName JavaScriptCallFrame.functionName */
+  final String functionName;
+
+  /** @domName JavaScriptCallFrame.line */
+  final int line;
+
+  /** @domName JavaScriptCallFrame.scopeChain */
+  final List scopeChain;
+
+  /** @domName JavaScriptCallFrame.sourceID */
+  final int sourceID;
+
+  /** @domName JavaScriptCallFrame.thisObject */
+  final Object thisObject;
+
+  /** @domName JavaScriptCallFrame.type */
+  final String type;
+
+  /** @domName JavaScriptCallFrame.evaluate */
+  void evaluate(String script) native;
+
+  /** @domName JavaScriptCallFrame.restart */
+  Object restart() native;
+
+  /** @domName JavaScriptCallFrame.scopeType */
+  int scopeType(int scopeIndex) native;
+}
+
+/// @domName KeyboardEvent
+class KeyboardEvent extends UIEvent native "*KeyboardEvent" {
+
+  /** @domName KeyboardEvent.altGraphKey */
+  final bool altGraphKey;
+
+  /** @domName KeyboardEvent.altKey */
+  final bool altKey;
+
+  /** @domName KeyboardEvent.ctrlKey */
+  final bool ctrlKey;
+
+  /** @domName KeyboardEvent.keyIdentifier */
+  final String keyIdentifier;
+
+  /** @domName KeyboardEvent.keyLocation */
+  final int keyLocation;
+
+  /** @domName KeyboardEvent.metaKey */
+  final bool metaKey;
+
+  /** @domName KeyboardEvent.shiftKey */
+  final bool shiftKey;
+
+  /** @domName KeyboardEvent.initKeyboardEvent */
+  void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) native;
+}
+
+/// @domName HTMLKeygenElement
+class KeygenElement extends Element implements Element native "*HTMLKeygenElement" {
+
+  factory KeygenElement() => _Elements.createKeygenElement();
+
+  /** @domName HTMLKeygenElement.autofocus */
+  bool autofocus;
+
+  /** @domName HTMLKeygenElement.challenge */
+  String challenge;
+
+  /** @domName HTMLKeygenElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLKeygenElement.form */
+  final FormElement form;
+
+  /** @domName HTMLKeygenElement.keytype */
+  String keytype;
+
+  /** @domName HTMLKeygenElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLKeygenElement.name */
+  String name;
+
+  /** @domName HTMLKeygenElement.type */
+  final String type;
+
+  /** @domName HTMLKeygenElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLKeygenElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLKeygenElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLKeygenElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLKeygenElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+}
+
+/// @domName HTMLLIElement
+class LIElement extends Element implements Element native "*HTMLLIElement" {
+
+  factory LIElement() => _Elements.createLIElement();
+
+  /** @domName HTMLLIElement.type */
+  String type;
+
+  /** @domName HTMLLIElement.value */
+  int value;
+}
+
+/// @domName HTMLLabelElement
+class LabelElement extends Element implements Element native "*HTMLLabelElement" {
+
+  factory LabelElement() => _Elements.createLabelElement();
+
+  /** @domName HTMLLabelElement.control */
+  final Element control;
+
+  /** @domName HTMLLabelElement.form */
+  final FormElement form;
+
+  /** @domName HTMLLabelElement.htmlFor */
+  String htmlFor;
+}
+
+/// @domName HTMLLegendElement
+class LegendElement extends Element implements Element native "*HTMLLegendElement" {
+
+  factory LegendElement() => _Elements.createLegendElement();
+
+  /** @domName HTMLLegendElement.align */
+  String align;
+
+  /** @domName HTMLLegendElement.form */
+  final FormElement form;
+}
+
+/// @domName HTMLLinkElement
+class LinkElement extends Element implements Element native "*HTMLLinkElement" {
+
+  factory LinkElement() => _Elements.createLinkElement();
+
+  /** @domName HTMLLinkElement.charset */
+  String charset;
+
+  /** @domName HTMLLinkElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLLinkElement.href */
+  String href;
+
+  /** @domName HTMLLinkElement.hreflang */
+  String hreflang;
+
+  /** @domName HTMLLinkElement.media */
+  String media;
+
+  /** @domName HTMLLinkElement.rel */
+  String rel;
+
+  /** @domName HTMLLinkElement.rev */
+  String rev;
+
+  /** @domName HTMLLinkElement.sheet */
+  final StyleSheet sheet;
+
+  /** @domName HTMLLinkElement.sizes */
+  DOMSettableTokenList sizes;
+
+  /** @domName HTMLLinkElement.target */
+  String target;
+
+  /** @domName HTMLLinkElement.type */
+  String type;
+}
+
+/// @domName History
+class LocalHistory implements History native "*History" {
+
+  /** @domName History.length */
+  final int length;
+
+  /** @domName History.state */
+  final dynamic state;
+
+  /** @domName History.back */
+  void back() native;
+
+  /** @domName History.forward */
+  void forward() native;
+
+  /** @domName History.go */
+  void go(int distance) native;
+
+  /** @domName History.pushState */
+  void pushState(Object data, String title, [String url]) native;
+
+  /** @domName History.replaceState */
+  void replaceState(Object data, String title, [String url]) native;
+}
+
+/// @domName Location
+class LocalLocation implements Location native "*Location" {
+
+  /** @domName Location.ancestorOrigins */
+  final List<String> ancestorOrigins;
+
+  /** @domName Location.hash */
+  String hash;
+
+  /** @domName Location.host */
+  String host;
+
+  /** @domName Location.hostname */
+  String hostname;
+
+  /** @domName Location.href */
+  String href;
+
+  /** @domName Location.origin */
+  final String origin;
+
+  /** @domName Location.pathname */
+  String pathname;
+
+  /** @domName Location.port */
+  String port;
+
+  /** @domName Location.protocol */
+  String protocol;
+
+  /** @domName Location.search */
+  String search;
+
+  /** @domName Location.assign */
+  void assign(String url) native;
+
+  /** @domName Location.reload */
+  void reload() native;
+
+  /** @domName Location.replace */
+  void replace(String url) native;
+
+  /** @domName Location.toString */
+  String toString() native;
+}
+
+/// @domName LocalMediaStream
+class LocalMediaStream extends MediaStream implements EventTarget native "*LocalMediaStream" {
+
+  /** @domName LocalMediaStream.stop */
+  void stop() native;
+}
+// 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 LocalWindow extends EventTarget implements Window native "@*DOMWindow" {
+
+  Document get document => JS('Document', '#.document', this);
+
+  Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
+
+  Window _open3(url, name, options) =>
+      JS('Window', '#.open(#,#,#)', this, url, name, options);
+
+  Window open(String url, String name, [String options]) {
+    if (options == null) {
+      return _DOMWindowCrossFrame._createSafe(_open2(url, name));
+    } else {
+      return _DOMWindowCrossFrame._createSafe(_open3(url, name, options));
+    }
+  }
+
+  // API level getter and setter for Location.
+  // TODO: The cross domain safe wrapper can be inserted here or folded into
+  // _LocationWrapper.
+  LocalLocation get location() {
+    // Firefox work-around for Location.  The Firefox location object cannot be
+    // made to behave like a Dart object so must be wrapped.
+    var result = _location;
+    if (_isDartLocation(result)) return result;  // e.g. on Chrome.
+    if (null == _location_wrapper) {
+      _location_wrapper = new _LocationWrapper(result);
+    }
+    return _location_wrapper;
+  }
+
+  // TODO: consider forcing users to do: window.location.assign('string').
+  /**
+   * Sets the window's location, which causes the browser to navigate to the new
+   * location. [value] may be a Location object or a string.
+   */
+  void set location(value) {
+    if (value is _LocationWrapper) {
+      _location = value._ptr;
+    } else {
+      _location = value;
+    }
+  }
+
+  var _location_wrapper;  // Cached wrapped Location object.
+
+  // Native getter and setter to access raw Location object.
+  Location get _location => JS('Location', '#.location', this);
+  void set _location(Location value) {
+    JS('void', '#.location = #', this, value);
+  }
+  // Prevent compiled from thinking 'location' property is available for a Dart
+  // member.
+  _protect_location() native 'location';
+
+  static _isDartLocation(thing) {
+    // On Firefox the code that implements 'is Location' fails to find the patch
+    // stub on Object.prototype and throws an exception.
+    try {
+      return thing is Location;
+    } catch (e) {
+      return false;
+    }
+  }
+
+  /**
+   * Executes a [callback] after the next batch of browser layout measurements
+   * has completed or would have completed if any browser layout measurements
+   * had been scheduled.
+   */
+  void requestLayoutFrame(TimeoutHandler callback) {
+    _addMeasurementFrameCallback(callback);
+  }
+
+  /** @domName DOMWindow.requestAnimationFrame */
+  int requestAnimationFrame(RequestAnimationFrameCallback callback) {
+    _ensureRequestAnimationFrame();
+    return _requestAnimationFrame(callback);
+  }
+
+  void cancelAnimationFrame(id) {
+    _ensureRequestAnimationFrame();
+    _cancelAnimationFrame(id);
+  }
+
+  int _requestAnimationFrame(RequestAnimationFrameCallback callback)
+      native 'requestAnimationFrame';
+
+  void _cancelAnimationFrame(int id)
+      native 'cancelAnimationFrame';
+
+  _ensureRequestAnimationFrame() {
+    if (JS('bool',
+           '!!(#.requestAnimationFrame && #.cancelAnimationFrame)', this, this))
+      return;
+
+    JS('void',
+       r"""
+  (function($this) {
+   var vendors = ['ms', 'moz', 'webkit', 'o'];
+   for (var i = 0; i < vendors.length && !$this.requestAnimationFrame; ++i) {
+     $this.requestAnimationFrame = $this[vendors[i] + 'RequestAnimationFrame'];
+     $this.cancelAnimationFrame =
+         $this[vendors[i]+'CancelAnimationFrame'] ||
+         $this[vendors[i]+'CancelRequestAnimationFrame'];
+   }
+   if ($this.requestAnimationFrame && $this.cancelAnimationFrame) return;
+   $this.requestAnimationFrame = function(callback) {
+      return window.setTimeout(function() {
+        callback(Date.now());
+      }, 16 /* 16ms ~= 60fps */);
+   };
+   $this.cancelAnimationFrame = function(id) { clearTimeout(id); }
+  })(#)""",
+       this);
+  }
+
+  IDBFactory get indexedDB() =>
+      JS('IDBFactory',
+         '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
+         this, this, this);
+
+  /**
+   * Lookup a port by its [name].  Return null if no port is
+   * registered under [name].
+   */
+  SendPortSync lookupPort(String name) {
+    var port = JSON.parse(localStorage['dart-port:$name']);
+    return _deserialize(port);
+  }
+
+  /**
+   * Register a [port] on this window under the given [name].  This
+   * port may be retrieved by any isolate (or JavaScript script)
+   * running in this window.
+   */
+  void registerPort(String name, var port) {
+    var serialized = _serialize(port);
+    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+  }
+
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  LocalWindowEvents get on =>
+    new LocalWindowEvents(this);
+
+  static const int PERSISTENT = 1;
+
+  static const int TEMPORARY = 0;
+
+  /** @domName Window.applicationCache */
+  final DOMApplicationCache applicationCache;
+
+  /** @domName Window.clientInformation */
+  final Navigator clientInformation;
+
+  /** @domName Window.closed */
+  final bool closed;
+
+  /** @domName Window.console */
+  final Console console;
+
+  /** @domName Window.crypto */
+  final Crypto crypto;
+
+  /** @domName Window.defaultStatus */
+  String defaultStatus;
+
+  /** @domName Window.defaultstatus */
+  String defaultstatus;
+
+  /** @domName Window.devicePixelRatio */
+  final num devicePixelRatio;
+
+  /** @domName Window.event */
+  final Event event;
+
+  /** @domName Window.history */
+  final LocalHistory history;
+
+  /** @domName Window.innerHeight */
+  final int innerHeight;
+
+  /** @domName Window.innerWidth */
+  final int innerWidth;
+
+  /** @domName Window.localStorage */
+  final Storage localStorage;
+
+  /** @domName Window.locationbar */
+  final BarInfo locationbar;
+
+  /** @domName Window.menubar */
+  final BarInfo menubar;
+
+  /** @domName Window.name */
+  String name;
+
+  /** @domName Window.navigator */
+  final Navigator navigator;
+
+  /** @domName Window.offscreenBuffering */
+  final bool offscreenBuffering;
+
+  /** @domName Window.opener */
+  Window get opener => _convertNativeToDart_Window(this._opener);
+  Window get _opener => JS("Window", "#.opener", this);
+
+  /** @domName Window.outerHeight */
+  final int outerHeight;
+
+  /** @domName Window.outerWidth */
+  final int outerWidth;
+
+  /** @domName DOMWindow.pagePopupController */
+  final PagePopupController pagePopupController;
+
+  /** @domName Window.pageXOffset */
+  final int pageXOffset;
+
+  /** @domName Window.pageYOffset */
+  final int pageYOffset;
+
+  /** @domName Window.parent */
+  Window get parent => _convertNativeToDart_Window(this._parent);
+  Window get _parent => JS("Window", "#.parent", this);
+
+  /** @domName Window.performance */
+  final Performance performance;
+
+  /** @domName Window.personalbar */
+  final BarInfo personalbar;
+
+  /** @domName Window.screen */
+  final Screen screen;
+
+  /** @domName Window.screenLeft */
+  final int screenLeft;
+
+  /** @domName Window.screenTop */
+  final int screenTop;
+
+  /** @domName Window.screenX */
+  final int screenX;
+
+  /** @domName Window.screenY */
+  final int screenY;
+
+  /** @domName Window.scrollX */
+  final int scrollX;
+
+  /** @domName Window.scrollY */
+  final int scrollY;
+
+  /** @domName Window.scrollbars */
+  final BarInfo scrollbars;
+
+  /** @domName Window.self */
+  Window get self => _convertNativeToDart_Window(this._self);
+  Window get _self => JS("Window", "#.self", this);
+
+  /** @domName Window.sessionStorage */
+  final Storage sessionStorage;
+
+  /** @domName Window.status */
+  String status;
+
+  /** @domName Window.statusbar */
+  final BarInfo statusbar;
+
+  /** @domName Window.styleMedia */
+  final StyleMedia styleMedia;
+
+  /** @domName Window.toolbar */
+  final BarInfo toolbar;
+
+  /** @domName Window.top */
+  Window get top => _convertNativeToDart_Window(this._top);
+  Window get _top => JS("Window", "#.top", this);
+
+  /** @domName DOMWindow.webkitIndexedDB */
+  final IDBFactory webkitIndexedDB;
+
+  /** @domName DOMWindow.webkitNotifications */
+  final NotificationCenter webkitNotifications;
+
+  /** @domName DOMWindow.webkitStorageInfo */
+  final StorageInfo webkitStorageInfo;
+
+  /** @domName Window.window */
+  Window get window => _convertNativeToDart_Window(this._window);
+  Window get _window => JS("Window", "#.window", this);
+
+  /** @domName Window.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName Window.alert */
+  void alert(String message) native;
+
+  /** @domName Window.atob */
+  String atob(String string) native;
+
+  /** @domName Window.blur */
+  void blur() native;
+
+  /** @domName Window.btoa */
+  String btoa(String string) native;
+
+  /** @domName Window.captureEvents */
+  void captureEvents() native;
+
+  /** @domName Window.clearInterval */
+  void clearInterval(int handle) native;
+
+  /** @domName Window.clearTimeout */
+  void clearTimeout(int handle) native;
+
+  /** @domName Window.close */
+  void close() native;
+
+  /** @domName Window.confirm */
+  bool confirm(String message) native;
+
+  /** @domName Window.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName Window.find */
+  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native;
+
+  /** @domName Window.focus */
+  void focus() native;
+
+  /** @domName Window.getComputedStyle */
+  CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "getComputedStyle";
+
+  /** @domName Window.getMatchedCSSRules */
+  List<CSSRule> getMatchedCSSRules(Element element, String pseudoElement) native;
+
+  /** @domName Window.getSelection */
+  DOMSelection getSelection() native;
+
+  /** @domName Window.matchMedia */
+  MediaQueryList matchMedia(String query) native;
+
+  /** @domName Window.moveBy */
+  void moveBy(num x, num y) native;
+
+  /** @domName Window.moveTo */
+  void moveTo(num x, num y) native;
+
+  /** @domName DOMWindow.openDatabase */
+  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
+
+  /** @domName Window.postMessage */
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [messagePorts]) {
+    if (?message &&
+        !?messagePorts) {
+      var message_1 = _convertDartToNative_SerializedScriptValue(message);
+      _postMessage_1(message_1, targetOrigin);
+      return;
+    }
+    if (?message &&
+        (messagePorts is List || messagePorts == null)) {
+      var message_2 = _convertDartToNative_SerializedScriptValue(message);
+      _postMessage_2(message_2, targetOrigin, messagePorts);
+      return;
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  void _postMessage_1(message, targetOrigin) native "postMessage";
+  void _postMessage_2(message, targetOrigin, List messagePorts) native "postMessage";
+
+  /** @domName Window.print */
+  void print() native;
+
+  /** @domName Window.prompt */
+  String prompt(String message, String defaultValue) native;
+
+  /** @domName Window.releaseEvents */
+  void releaseEvents() native;
+
+  /** @domName Window.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName Window.resizeBy */
+  void resizeBy(num x, num y) native;
+
+  /** @domName Window.resizeTo */
+  void resizeTo(num width, num height) native;
+
+  /** @domName Window.scroll */
+  void scroll(int x, int y) native;
+
+  /** @domName Window.scrollBy */
+  void scrollBy(int x, int y) native;
+
+  /** @domName Window.scrollTo */
+  void scrollTo(int x, int y) native;
+
+  /** @domName Window.setInterval */
+  int setInterval(TimeoutHandler handler, int timeout) native;
+
+  /** @domName Window.setTimeout */
+  int setTimeout(TimeoutHandler handler, int timeout) native;
+
+  /** @domName Window.showModalDialog */
+  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native;
+
+  /** @domName Window.stop */
+  void stop() native;
+
+  /** @domName Window.webkitConvertPointFromNodeToPage */
+  Point webkitConvertPointFromNodeToPage(Node node, Point p) native;
+
+  /** @domName Window.webkitConvertPointFromPageToNode */
+  Point webkitConvertPointFromPageToNode(Node node, Point p) native;
+
+  /** @domName DOMWindow.webkitRequestFileSystem */
+  void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native;
+
+  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
+  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
+
+}
+
+class LocalWindowEvents extends Events {
+  LocalWindowEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get beforeUnload => this['beforeunload'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get canPlay => this['canplay'];
+
+  EventListenerList get canPlayThrough => this['canplaythrough'];
+
+  EventListenerList get change => this['change'];
+
+  EventListenerList get click => this['click'];
+
+  EventListenerList get contextMenu => this['contextmenu'];
+
+  EventListenerList get doubleClick => this['dblclick'];
+
+  EventListenerList get deviceMotion => this['devicemotion'];
+
+  EventListenerList get deviceOrientation => this['deviceorientation'];
+
+  EventListenerList get drag => this['drag'];
+
+  EventListenerList get dragEnd => this['dragend'];
+
+  EventListenerList get dragEnter => this['dragenter'];
+
+  EventListenerList get dragLeave => this['dragleave'];
+
+  EventListenerList get dragOver => this['dragover'];
+
+  EventListenerList get dragStart => this['dragstart'];
+
+  EventListenerList get drop => this['drop'];
+
+  EventListenerList get durationChange => this['durationchange'];
+
+  EventListenerList get emptied => this['emptied'];
+
+  EventListenerList get ended => this['ended'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get hashChange => this['hashchange'];
+
+  EventListenerList get input => this['input'];
+
+  EventListenerList get invalid => this['invalid'];
+
+  EventListenerList get keyDown => this['keydown'];
+
+  EventListenerList get keyPress => this['keypress'];
+
+  EventListenerList get keyUp => this['keyup'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get loadedData => this['loadeddata'];
+
+  EventListenerList get loadedMetadata => this['loadedmetadata'];
+
+  EventListenerList get loadStart => this['loadstart'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get mouseDown => this['mousedown'];
+
+  EventListenerList get mouseMove => this['mousemove'];
+
+  EventListenerList get mouseOut => this['mouseout'];
+
+  EventListenerList get mouseOver => this['mouseover'];
+
+  EventListenerList get mouseUp => this['mouseup'];
+
+  EventListenerList get mouseWheel => this['mousewheel'];
+
+  EventListenerList get offline => this['offline'];
+
+  EventListenerList get online => this['online'];
+
+  EventListenerList get pageHide => this['pagehide'];
+
+  EventListenerList get pageShow => this['pageshow'];
+
+  EventListenerList get pause => this['pause'];
+
+  EventListenerList get play => this['play'];
+
+  EventListenerList get playing => this['playing'];
+
+  EventListenerList get popState => this['popstate'];
+
+  EventListenerList get progress => this['progress'];
+
+  EventListenerList get rateChange => this['ratechange'];
+
+  EventListenerList get reset => this['reset'];
+
+  EventListenerList get resize => this['resize'];
+
+  EventListenerList get scroll => this['scroll'];
+
+  EventListenerList get search => this['search'];
+
+  EventListenerList get seeked => this['seeked'];
+
+  EventListenerList get seeking => this['seeking'];
+
+  EventListenerList get select => this['select'];
+
+  EventListenerList get stalled => this['stalled'];
+
+  EventListenerList get storage => this['storage'];
+
+  EventListenerList get submit => this['submit'];
+
+  EventListenerList get suspend => this['suspend'];
+
+  EventListenerList get timeUpdate => this['timeupdate'];
+
+  EventListenerList get touchCancel => this['touchcancel'];
+
+  EventListenerList get touchEnd => this['touchend'];
+
+  EventListenerList get touchMove => this['touchmove'];
+
+  EventListenerList get touchStart => this['touchstart'];
+
+  EventListenerList get unload => this['unload'];
+
+  EventListenerList get volumeChange => this['volumechange'];
+
+  EventListenerList get waiting => this['waiting'];
+
+  EventListenerList get animationEnd => this['webkitAnimationEnd'];
+
+  EventListenerList get animationIteration => this['webkitAnimationIteration'];
+
+  EventListenerList get animationStart => this['webkitAnimationStart'];
+
+  EventListenerList get transitionEnd => this['webkitTransitionEnd'];
+}
+
+/// @domName HTMLMapElement
+class MapElement extends Element implements Element native "*HTMLMapElement" {
+
+  factory MapElement() => _Elements.createMapElement();
+
+  /** @domName HTMLMapElement.areas */
+  final HTMLCollection areas;
+
+  /** @domName HTMLMapElement.name */
+  String name;
+}
+
+/// @domName HTMLMarqueeElement
+class MarqueeElement extends Element implements Element native "*HTMLMarqueeElement" {
+
+  /** @domName HTMLMarqueeElement.behavior */
+  String behavior;
+
+  /** @domName HTMLMarqueeElement.bgColor */
+  String bgColor;
+
+  /** @domName HTMLMarqueeElement.direction */
+  String direction;
+
+  /** @domName HTMLMarqueeElement.height */
+  String height;
+
+  /** @domName HTMLMarqueeElement.hspace */
+  int hspace;
+
+  /** @domName HTMLMarqueeElement.loop */
+  int loop;
+
+  /** @domName HTMLMarqueeElement.scrollAmount */
+  int scrollAmount;
+
+  /** @domName HTMLMarqueeElement.scrollDelay */
+  int scrollDelay;
+
+  /** @domName HTMLMarqueeElement.trueSpeed */
+  bool trueSpeed;
+
+  /** @domName HTMLMarqueeElement.vspace */
+  int vspace;
+
+  /** @domName HTMLMarqueeElement.width */
+  String width;
+
+  /** @domName HTMLMarqueeElement.start */
+  void start() native;
+
+  /** @domName HTMLMarqueeElement.stop */
+  void stop() native;
+}
+
+/// @domName MediaController
+class MediaController extends EventTarget native "*MediaController" {
+
+  factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
+
+  /** @domName MediaController.buffered */
+  final TimeRanges buffered;
+
+  /** @domName MediaController.currentTime */
+  num currentTime;
+
+  /** @domName MediaController.defaultPlaybackRate */
+  num defaultPlaybackRate;
+
+  /** @domName MediaController.duration */
+  final num duration;
+
+  /** @domName MediaController.muted */
+  bool muted;
+
+  /** @domName MediaController.paused */
+  final bool paused;
+
+  /** @domName MediaController.playbackRate */
+  num playbackRate;
+
+  /** @domName MediaController.played */
+  final TimeRanges played;
+
+  /** @domName MediaController.seekable */
+  final TimeRanges seekable;
+
+  /** @domName MediaController.volume */
+  num volume;
+
+  /** @domName MediaController.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MediaController.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName MediaController.pause */
+  void pause() native;
+
+  /** @domName MediaController.play */
+  void play() native;
+
+  /** @domName MediaController.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+/// @domName HTMLMediaElement
+class MediaElement extends Element implements Element native "*HTMLMediaElement" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MediaElementEvents get on =>
+    new MediaElementEvents(this);
+
+  static const int HAVE_CURRENT_DATA = 2;
+
+  static const int HAVE_ENOUGH_DATA = 4;
+
+  static const int HAVE_FUTURE_DATA = 3;
+
+  static const int HAVE_METADATA = 1;
+
+  static const int HAVE_NOTHING = 0;
+
+  static const int NETWORK_EMPTY = 0;
+
+  static const int NETWORK_IDLE = 1;
+
+  static const int NETWORK_LOADING = 2;
+
+  static const int NETWORK_NO_SOURCE = 3;
+
+  /** @domName HTMLMediaElement.autoplay */
+  bool autoplay;
+
+  /** @domName HTMLMediaElement.buffered */
+  final TimeRanges buffered;
+
+  /** @domName HTMLMediaElement.controller */
+  MediaController controller;
+
+  /** @domName HTMLMediaElement.controls */
+  bool controls;
+
+  /** @domName HTMLMediaElement.currentSrc */
+  final String currentSrc;
+
+  /** @domName HTMLMediaElement.currentTime */
+  num currentTime;
+
+  /** @domName HTMLMediaElement.defaultMuted */
+  bool defaultMuted;
+
+  /** @domName HTMLMediaElement.defaultPlaybackRate */
+  num defaultPlaybackRate;
+
+  /** @domName HTMLMediaElement.duration */
+  final num duration;
+
+  /** @domName HTMLMediaElement.ended */
+  final bool ended;
+
+  /** @domName HTMLMediaElement.error */
+  final MediaError error;
+
+  /** @domName HTMLMediaElement.initialTime */
+  final num initialTime;
+
+  /** @domName HTMLMediaElement.loop */
+  bool loop;
+
+  /** @domName HTMLMediaElement.mediaGroup */
+  String mediaGroup;
+
+  /** @domName HTMLMediaElement.muted */
+  bool muted;
+
+  /** @domName HTMLMediaElement.networkState */
+  final int networkState;
+
+  /** @domName HTMLMediaElement.paused */
+  final bool paused;
+
+  /** @domName HTMLMediaElement.playbackRate */
+  num playbackRate;
+
+  /** @domName HTMLMediaElement.played */
+  final TimeRanges played;
+
+  /** @domName HTMLMediaElement.preload */
+  String preload;
+
+  /** @domName HTMLMediaElement.readyState */
+  final int readyState;
+
+  /** @domName HTMLMediaElement.seekable */
+  final TimeRanges seekable;
+
+  /** @domName HTMLMediaElement.seeking */
+  final bool seeking;
+
+  /** @domName HTMLMediaElement.src */
+  String src;
+
+  /** @domName HTMLMediaElement.startTime */
+  final num startTime;
+
+  /** @domName HTMLMediaElement.textTracks */
+  final TextTrackList textTracks;
+
+  /** @domName HTMLMediaElement.volume */
+  num volume;
+
+  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
+  final int webkitAudioDecodedByteCount;
+
+  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
+  bool webkitClosedCaptionsVisible;
+
+  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
+  final bool webkitHasClosedCaptions;
+
+  /** @domName HTMLMediaElement.webkitPreservesPitch */
+  bool webkitPreservesPitch;
+
+  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
+  final int webkitVideoDecodedByteCount;
+
+  /** @domName HTMLMediaElement.addTextTrack */
+  TextTrack addTextTrack(String kind, [String label, String language]) native;
+
+  /** @domName HTMLMediaElement.canPlayType */
+  String canPlayType(String type, String keySystem) native;
+
+  /** @domName HTMLMediaElement.load */
+  void load() native;
+
+  /** @domName HTMLMediaElement.pause */
+  void pause() native;
+
+  /** @domName HTMLMediaElement.play */
+  void play() native;
+
+  /** @domName HTMLMediaElement.webkitAddKey */
+  void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]) native;
+
+  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
+  void webkitCancelKeyRequest(String keySystem, String sessionId) native;
+
+  /** @domName HTMLMediaElement.webkitGenerateKeyRequest */
+  void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]) native;
+}
+
+class MediaElementEvents extends ElementEvents {
+  MediaElementEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get canPlay => this['canplay'];
+
+  EventListenerList get canPlayThrough => this['canplaythrough'];
+
+  EventListenerList get durationChange => this['durationchange'];
+
+  EventListenerList get emptied => this['emptied'];
+
+  EventListenerList get ended => this['ended'];
+
+  EventListenerList get loadedData => this['loadeddata'];
+
+  EventListenerList get loadedMetadata => this['loadedmetadata'];
+
+  EventListenerList get loadStart => this['loadstart'];
+
+  EventListenerList get pause => this['pause'];
+
+  EventListenerList get play => this['play'];
+
+  EventListenerList get playing => this['playing'];
+
+  EventListenerList get progress => this['progress'];
+
+  EventListenerList get rateChange => this['ratechange'];
+
+  EventListenerList get seeked => this['seeked'];
+
+  EventListenerList get seeking => this['seeking'];
+
+  EventListenerList get show => this['show'];
+
+  EventListenerList get stalled => this['stalled'];
+
+  EventListenerList get suspend => this['suspend'];
+
+  EventListenerList get timeUpdate => this['timeupdate'];
+
+  EventListenerList get volumeChange => this['volumechange'];
+
+  EventListenerList get waiting => this['waiting'];
+
+  EventListenerList get keyAdded => this['webkitkeyadded'];
+
+  EventListenerList get keyError => this['webkitkeyerror'];
+
+  EventListenerList get keyMessage => this['webkitkeymessage'];
+
+  EventListenerList get needKey => this['webkitneedkey'];
+}
+
+/// @domName MediaElementAudioSourceNode
+class MediaElementAudioSourceNode extends AudioSourceNode native "*MediaElementAudioSourceNode" {
+
+  /** @domName MediaElementAudioSourceNode.mediaElement */
+  final MediaElement mediaElement;
+}
+
+/// @domName MediaError
+class MediaError native "*MediaError" {
+
+  static const int MEDIA_ERR_ABORTED = 1;
+
+  static const int MEDIA_ERR_DECODE = 3;
+
+  static const int MEDIA_ERR_ENCRYPTED = 5;
+
+  static const int MEDIA_ERR_NETWORK = 2;
+
+  static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
+
+  /** @domName MediaError.code */
+  final int code;
+}
+
+/// @domName MediaKeyError
+class MediaKeyError native "*MediaKeyError" {
+
+  static const int MEDIA_KEYERR_CLIENT = 2;
+
+  static const int MEDIA_KEYERR_DOMAIN = 6;
+
+  static const int MEDIA_KEYERR_HARDWARECHANGE = 5;
+
+  static const int MEDIA_KEYERR_OUTPUT = 4;
+
+  static const int MEDIA_KEYERR_SERVICE = 3;
+
+  static const int MEDIA_KEYERR_UNKNOWN = 1;
+
+  /** @domName MediaKeyError.code */
+  final int code;
+}
+
+/// @domName MediaKeyEvent
+class MediaKeyEvent extends Event native "*MediaKeyEvent" {
+
+  /** @domName MediaKeyEvent.defaultURL */
+  final String defaultURL;
+
+  /** @domName MediaKeyEvent.errorCode */
+  final MediaKeyError errorCode;
+
+  /** @domName MediaKeyEvent.initData */
+  final Uint8Array initData;
+
+  /** @domName MediaKeyEvent.keySystem */
+  final String keySystem;
+
+  /** @domName MediaKeyEvent.message */
+  final Uint8Array message;
+
+  /** @domName MediaKeyEvent.sessionId */
+  final String sessionId;
+
+  /** @domName MediaKeyEvent.systemCode */
+  final int systemCode;
+}
+
+/// @domName MediaList
+class MediaList native "*MediaList" {
+
+  /** @domName MediaList.length */
+  final int length;
+
+  /** @domName MediaList.mediaText */
+  String mediaText;
+
+  /** @domName MediaList.appendMedium */
+  void appendMedium(String newMedium) native;
+
+  /** @domName MediaList.deleteMedium */
+  void deleteMedium(String oldMedium) native;
+
+  /** @domName MediaList.item */
+  String item(int index) native;
+}
+
+/// @domName MediaQueryList
+class MediaQueryList native "*MediaQueryList" {
+
+  /** @domName MediaQueryList.matches */
+  final bool matches;
+
+  /** @domName MediaQueryList.media */
+  final String media;
+
+  /** @domName MediaQueryList.addListener */
+  void addListener(MediaQueryListListener listener) native;
+
+  /** @domName MediaQueryList.removeListener */
+  void removeListener(MediaQueryListListener listener) native;
+}
+/// @domName MediaQueryListListener
+abstract class MediaQueryListListener {
+
+  /** @domName MediaQueryListListener.queryChanged */
+  void queryChanged(MediaQueryList list);
+}
+
+/// @domName MediaSource
+class MediaSource extends EventTarget native "*MediaSource" {
+
+  factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
+
+  /** @domName MediaSource.activeSourceBuffers */
+  final SourceBufferList activeSourceBuffers;
+
+  /** @domName MediaSource.duration */
+  num duration;
+
+  /** @domName MediaSource.readyState */
+  final String readyState;
+
+  /** @domName MediaSource.sourceBuffers */
+  final SourceBufferList sourceBuffers;
+
+  /** @domName MediaSource.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MediaSource.addSourceBuffer */
+  SourceBuffer addSourceBuffer(String type) native;
+
+  /** @domName MediaSource.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName MediaSource.endOfStream */
+  void endOfStream(String error) native;
+
+  /** @domName MediaSource.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName MediaSource.removeSourceBuffer */
+  void removeSourceBuffer(SourceBuffer buffer) native;
+}
+
+/// @domName MediaStream
+class MediaStream extends EventTarget native "*MediaStream" {
+
+  factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => _MediaStreamFactoryProvider.createMediaStream(audioTracks, videoTracks);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MediaStreamEvents get on =>
+    new MediaStreamEvents(this);
+
+  static const int ENDED = 2;
+
+  static const int LIVE = 1;
+
+  /** @domName MediaStream.audioTracks */
+  final MediaStreamTrackList audioTracks;
+
+  /** @domName MediaStream.label */
+  final String label;
+
+  /** @domName MediaStream.readyState */
+  final int readyState;
+
+  /** @domName MediaStream.videoTracks */
+  final MediaStreamTrackList videoTracks;
+
+  /** @domName MediaStream.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MediaStream.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName MediaStream.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class MediaStreamEvents extends Events {
+  MediaStreamEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get ended => this['ended'];
+}
+
+/// @domName MediaStreamAudioSourceNode
+class MediaStreamAudioSourceNode extends AudioSourceNode native "*MediaStreamAudioSourceNode" {
+
+  /** @domName MediaStreamAudioSourceNode.mediaStream */
+  final MediaStream mediaStream;
+}
+
+/// @domName MediaStreamEvent
+class MediaStreamEvent extends Event native "*MediaStreamEvent" {
+
+  /** @domName MediaStreamEvent.stream */
+  final MediaStream stream;
+}
+
+/// @domName MediaStreamTrack
+class MediaStreamTrack extends EventTarget native "*MediaStreamTrack" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MediaStreamTrackEvents get on =>
+    new MediaStreamTrackEvents(this);
+
+  static const int ENDED = 2;
+
+  static const int LIVE = 0;
+
+  static const int MUTED = 1;
+
+  /** @domName MediaStreamTrack.enabled */
+  bool enabled;
+
+  /** @domName MediaStreamTrack.kind */
+  final String kind;
+
+  /** @domName MediaStreamTrack.label */
+  final String label;
+
+  /** @domName MediaStreamTrack.readyState */
+  final int readyState;
+
+  /** @domName MediaStreamTrack.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MediaStreamTrack.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName MediaStreamTrack.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class MediaStreamTrackEvents extends Events {
+  MediaStreamTrackEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get ended => this['ended'];
+
+  EventListenerList get mute => this['mute'];
+
+  EventListenerList get unmute => this['unmute'];
+}
+
+/// @domName MediaStreamTrackEvent
+class MediaStreamTrackEvent extends Event native "*MediaStreamTrackEvent" {
+
+  /** @domName MediaStreamTrackEvent.track */
+  final MediaStreamTrack track;
+}
+
+/// @domName MediaStreamTrackList
+class MediaStreamTrackList extends EventTarget native "*MediaStreamTrackList" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MediaStreamTrackListEvents get on =>
+    new MediaStreamTrackListEvents(this);
+
+  /** @domName MediaStreamTrackList.length */
+  final int length;
+
+  /** @domName MediaStreamTrackList.add */
+  void add(MediaStreamTrack track) native;
+
+  /** @domName MediaStreamTrackList.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MediaStreamTrackList.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName MediaStreamTrackList.item */
+  MediaStreamTrack item(int index) native;
+
+  /** @domName MediaStreamTrackList.remove */
+  void remove(MediaStreamTrack track) native;
+
+  /** @domName MediaStreamTrackList.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class MediaStreamTrackListEvents extends Events {
+  MediaStreamTrackListEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get addTrack => this['addtrack'];
+
+  EventListenerList get removeTrack => this['removetrack'];
+}
+
+/// @domName MemoryInfo
+class MemoryInfo native "*MemoryInfo" {
+
+  /** @domName MemoryInfo.jsHeapSizeLimit */
+  final int jsHeapSizeLimit;
+
+  /** @domName MemoryInfo.totalJSHeapSize */
+  final int totalJSHeapSize;
+
+  /** @domName MemoryInfo.usedJSHeapSize */
+  final int usedJSHeapSize;
+}
+
+/// @domName HTMLMenuElement
+class MenuElement extends Element implements Element native "*HTMLMenuElement" {
+
+  factory MenuElement() => _Elements.createMenuElement();
+
+  /** @domName HTMLMenuElement.compact */
+  bool compact;
+}
+
+/// @domName MessageChannel
+class MessageChannel native "*MessageChannel" {
+
+  factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
+
+  /** @domName MessageChannel.port1 */
+  final MessagePort port1;
+
+  /** @domName MessageChannel.port2 */
+  final MessagePort port2;
+}
+
+/// @domName MessageEvent
+class MessageEvent extends Event native "*MessageEvent" {
+
+  /** @domName MessageEvent.data */
+  dynamic get data => _convertNativeToDart_SerializedScriptValue(this._data);
+  dynamic get _data => JS("dynamic", "#.data", this);
+
+  /** @domName MessageEvent.lastEventId */
+  final String lastEventId;
+
+  /** @domName MessageEvent.origin */
+  final String origin;
+
+  /** @domName MessageEvent.ports */
+  final List ports;
+
+  /** @domName MessageEvent.source */
+  Window get source => _convertNativeToDart_Window(this._source);
+  Window get _source => JS("Window", "#.source", this);
+
+  /** @domName MessageEvent.initMessageEvent */
+  void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts) native;
+
+  /** @domName MessageEvent.webkitInitMessageEvent */
+  void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List transferables) native;
+}
+
+/// @domName MessagePort
+class MessagePort extends EventTarget native "*MessagePort" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MessagePortEvents get on =>
+    new MessagePortEvents(this);
+
+  /** @domName MessagePort.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName MessagePort.close */
+  void close() native;
+
+  /** @domName MessagePort.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName MessagePort.postMessage */
+  void postMessage(/*any*/ message, [messagePorts]) {
+    if (?messagePorts) {
+      var message_1 = _convertDartToNative_SerializedScriptValue(message);
+      _postMessage_1(message_1, messagePorts);
+      return;
+    }
+    var message_2 = _convertDartToNative_SerializedScriptValue(message);
+    _postMessage_2(message_2);
+    return;
+  }
+  void _postMessage_1(message, List messagePorts) native "postMessage";
+  void _postMessage_2(message) native "postMessage";
+
+  /** @domName MessagePort.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName MessagePort.start */
+  void start() native;
+}
+
+class MessagePortEvents extends Events {
+  MessagePortEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get message => this['message'];
+}
+
+/// @domName HTMLMetaElement
+class MetaElement extends Element implements Element native "*HTMLMetaElement" {
+
+  /** @domName HTMLMetaElement.content */
+  String content;
+
+  /** @domName HTMLMetaElement.httpEquiv */
+  String httpEquiv;
+
+  /** @domName HTMLMetaElement.name */
+  String name;
+
+  /** @domName HTMLMetaElement.scheme */
+  String scheme;
+}
+
+/// @domName Metadata
+class Metadata native "*Metadata" {
+
+  /** @domName Metadata.modificationTime */
+  final Date modificationTime;
+
+  /** @domName Metadata.size */
+  final int size;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void MetadataCallback(Metadata metadata);
+
+/// @domName HTMLMeterElement
+class MeterElement extends Element implements Element native "*HTMLMeterElement" {
+
+  factory MeterElement() => _Elements.createMeterElement();
+
+  /** @domName HTMLMeterElement.high */
+  num high;
+
+  /** @domName HTMLMeterElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLMeterElement.low */
+  num low;
+
+  /** @domName HTMLMeterElement.max */
+  num max;
+
+  /** @domName HTMLMeterElement.min */
+  num min;
+
+  /** @domName HTMLMeterElement.optimum */
+  num optimum;
+
+  /** @domName HTMLMeterElement.value */
+  num value;
+}
+
+/// @domName HTMLModElement
+class ModElement extends Element implements Element native "*HTMLModElement" {
+
+  /** @domName HTMLModElement.cite */
+  String cite;
+
+  /** @domName HTMLModElement.dateTime */
+  String dateTime;
+}
+// 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 MouseEvent extends UIEvent native "*MouseEvent" {
+  factory MouseEvent(String type, Window view, int detail, int screenX,
+      int screenY, int clientX, int clientY, int button, [bool canBubble = true,
+      bool cancelable = true, bool ctrlKey = false, bool altKey = false,
+      bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) =>
+      _MouseEventFactoryProvider.createMouseEvent(
+          type, view, detail, screenX, screenY,
+          clientX, clientY, button, canBubble, cancelable,
+          ctrlKey, altKey, shiftKey, metaKey,
+          relatedTarget);
+
+  /** @domName MouseEvent.altKey */
+  final bool altKey;
+
+  /** @domName MouseEvent.button */
+  final int button;
+
+  /** @domName MouseEvent.clientX */
+  final int clientX;
+
+  /** @domName MouseEvent.clientY */
+  final int clientY;
+
+  /** @domName MouseEvent.ctrlKey */
+  final bool ctrlKey;
+
+  /** @domName MouseEvent.dataTransfer */
+  final Clipboard dataTransfer;
+
+  /** @domName MouseEvent.fromElement */
+  final Node fromElement;
+
+  /** @domName MouseEvent.metaKey */
+  final bool metaKey;
+
+  /** @domName MouseEvent.relatedTarget */
+  EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
+  EventTarget get _relatedTarget => JS("EventTarget", "#.relatedTarget", this);
+
+  /** @domName MouseEvent.screenX */
+  final int screenX;
+
+  /** @domName MouseEvent.screenY */
+  final int screenY;
+
+  /** @domName MouseEvent.shiftKey */
+  final bool shiftKey;
+
+  /** @domName MouseEvent.toElement */
+  final Node toElement;
+
+  /** @domName MouseEvent.webkitMovementX */
+  final int webkitMovementX;
+
+  /** @domName MouseEvent.webkitMovementY */
+  final int webkitMovementY;
+
+  /** @domName MouseEvent.x */
+  final int x;
+
+  /** @domName MouseEvent.y */
+  final int y;
+
+  /** @domName MouseEvent.initMouseEvent */
+  void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) {
+    EventTarget relatedTarget_1 = _convertDartToNative_EventTarget(relatedTarget);
+    _$dom_initMouseEvent_1(type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget_1);
+    return;
+  }
+  void _$dom_initMouseEvent_1(type, canBubble, cancelable, LocalWindow view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, EventTarget relatedTarget) native "initMouseEvent";
+
+
+  int get offsetX {
+  if (JS('bool', '!!#.offsetX', this)) {
+      return JS('int', '#.offsetX', this);
+    } else {
+      // Firefox does not support offsetX.
+      var target = this.target;
+      if (!(target is Element)) {
+        throw new UnsupportedError(
+            'offsetX is only supported on elements');
+      }
+      return this.clientX - this.target.getBoundingClientRect().left;
+    }
+  }
+
+  int get offsetY {
+    if (JS('bool', '!!#.offsetY', this)) {
+      return JS('int', '#.offsetY', this);
+    } else {
+      // Firefox does not support offsetY.
+      var target = this.target;
+      if (!(target is Element)) {
+        throw new UnsupportedError(
+            'offsetY is only supported on elements');
+      }
+      return this.clientY - this.target.getBoundingClientRect().top;
+    }
+  }
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void MutationCallback(List<MutationRecord> mutations, MutationObserver observer);
+
+/// @domName MutationEvent
+class MutationEvent extends Event native "*MutationEvent" {
+
+  static const int ADDITION = 2;
+
+  static const int MODIFICATION = 1;
+
+  static const int REMOVAL = 3;
+
+  /** @domName MutationEvent.attrChange */
+  final int attrChange;
+
+  /** @domName MutationEvent.attrName */
+  final String attrName;
+
+  /** @domName MutationEvent.newValue */
+  final String newValue;
+
+  /** @domName MutationEvent.prevValue */
+  final String prevValue;
+
+  /** @domName MutationEvent.relatedNode */
+  final Node relatedNode;
+
+  /** @domName MutationEvent.initMutationEvent */
+  void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange) native;
+}
+// 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 MutationObserver native "*MutationObserver" {
+
+  factory MutationObserver(MutationCallback callback) => _MutationObserverFactoryProvider.createMutationObserver(callback);
+
+  /** @domName MutationObserver.disconnect */
+  void disconnect() native;
+
+  /** @domName MutationObserver._observe */
+  void _observe(Node target, Map options) {
+    var options_1 = _convertDartToNative_Dictionary(options);
+    __observe_1(target, options_1);
+    return;
+  }
+  void __observe_1(Node target, options) native "observe";
+
+  /** @domName MutationObserver.takeRecords */
+  List<MutationRecord> takeRecords() native;
+
+  void observe(Node target,
+               {Map options,
+                bool childList,
+                bool attributes,
+                bool characterData,
+                bool subtree,
+                bool attributeOldValue,
+                bool characterDataOldValue,
+                List<String> attributeFilter}) {
+
+    // Parse options into map of known type.
+    var parsedOptions = _createDict();
+
+    if (options != null) {
+      options.forEach((k, v) {
+          if (_boolKeys.containsKey(k)) {
+            _add(parsedOptions, k, true == v);
+          } else if (k == 'attributeFilter') {
+            _add(parsedOptions, k, _fixupList(v));
+          } else {
+            throw new ArgumentError(
+                "Illegal MutationObserver.observe option '$k'");
+          }
+        });
+    }
+
+    // Override options passed in the map with named optional arguments.
+    override(key, value) {
+      if (value != null) _add(parsedOptions, key, value);
+    }
+
+    override('childList', childList);
+    override('attributes', attributes);
+    override('characterData', characterData);
+    override('subtree', subtree);
+    override('attributeOldValue', attributeOldValue);
+    override('characterDataOldValue', characterDataOldValue);
+    if (attributeFilter != null) {
+      override('attributeFilter', _fixupList(attributeFilter));
+    }
+
+    _call(target, parsedOptions);
+  }
+
+   // TODO: Change to a set when const Sets are available.
+  static final _boolKeys =
+    const {'childList': true,
+           'attributes': true,
+           'characterData': true,
+           'subtree': true,
+           'attributeOldValue': true,
+           'characterDataOldValue': true };
+
+
+  static _createDict() => JS('var', '{}');
+  static _add(m, String key, value) { JS('void', '#[#] = #', m, key, value); }
+  static _fixupList(list) => list;  // TODO: Ensure is a JavaScript Array.
+
+  // Call native function with no conversions.
+  void _call(target, options) native 'observe';
+}
+
+/// @domName MutationRecord
+class MutationRecord native "*MutationRecord" {
+
+  /** @domName MutationRecord.addedNodes */
+  final List<Node> addedNodes;
+
+  /** @domName MutationRecord.attributeName */
+  final String attributeName;
+
+  /** @domName MutationRecord.attributeNamespace */
+  final String attributeNamespace;
+
+  /** @domName MutationRecord.nextSibling */
+  final Node nextSibling;
+
+  /** @domName MutationRecord.oldValue */
+  final String oldValue;
+
+  /** @domName MutationRecord.previousSibling */
+  final Node previousSibling;
+
+  /** @domName MutationRecord.removedNodes */
+  final List<Node> removedNodes;
+
+  /** @domName MutationRecord.target */
+  final Node target;
+
+  /** @domName MutationRecord.type */
+  final String type;
+}
+
+/// @domName NamedNodeMap
+class NamedNodeMap implements JavaScriptIndexingBehavior, List<Node> native "*NamedNodeMap" {
+
+  /** @domName NamedNodeMap.length */
+  final int length;
+
+  Node operator[](int index) => JS("Node", "#[#]", this, index);
+
+  void operator[]=(int index, Node value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Node value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Node> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     _Collections.filter(this, <Node>[], f);
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Node get last => this[length - 1];
+
+  Node removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Node> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Node>[]);
+
+  // -- end List<Node> mixins.
+
+  /** @domName NamedNodeMap.getNamedItem */
+  Node getNamedItem(String name) native;
+
+  /** @domName NamedNodeMap.getNamedItemNS */
+  Node getNamedItemNS(String namespaceURI, String localName) native;
+
+  /** @domName NamedNodeMap.item */
+  Node item(int index) native;
+
+  /** @domName NamedNodeMap.removeNamedItem */
+  Node removeNamedItem(String name) native;
+
+  /** @domName NamedNodeMap.removeNamedItemNS */
+  Node removeNamedItemNS(String namespaceURI, String localName) native;
+
+  /** @domName NamedNodeMap.setNamedItem */
+  Node setNamedItem(Node node) native;
+
+  /** @domName NamedNodeMap.setNamedItemNS */
+  Node setNamedItemNS(Node node) native;
+}
+
+/// @domName Navigator
+class Navigator native "*Navigator" {
+
+  /** @domName Navigator.appCodeName */
+  final String appCodeName;
+
+  /** @domName Navigator.appName */
+  final String appName;
+
+  /** @domName Navigator.appVersion */
+  final String appVersion;
+
+  /** @domName Navigator.cookieEnabled */
+  final bool cookieEnabled;
+
+  /** @domName Navigator.geolocation */
+  final Geolocation geolocation;
+
+  /** @domName Navigator.language */
+  final String language;
+
+  /** @domName Navigator.mimeTypes */
+  final DOMMimeTypeArray mimeTypes;
+
+  /** @domName Navigator.onLine */
+  final bool onLine;
+
+  /** @domName Navigator.platform */
+  final String platform;
+
+  /** @domName Navigator.plugins */
+  final DOMPluginArray plugins;
+
+  /** @domName Navigator.product */
+  final String product;
+
+  /** @domName Navigator.productSub */
+  final String productSub;
+
+  /** @domName Navigator.userAgent */
+  final String userAgent;
+
+  /** @domName Navigator.vendor */
+  final String vendor;
+
+  /** @domName Navigator.vendorSub */
+  final String vendorSub;
+
+  /** @domName Navigator.webkitBattery */
+  final BatteryManager webkitBattery;
+
+  /** @domName Navigator.getStorageUpdates */
+  void getStorageUpdates() native;
+
+  /** @domName Navigator.javaEnabled */
+  bool javaEnabled() native;
+
+  /** @domName Navigator.webkitGetGamepads */
+  List<Gamepad> webkitGetGamepads() native;
+
+  /** @domName Navigator.webkitGetUserMedia */
+  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [errorCallback]) {
+    if (?errorCallback) {
+      var options_1 = _convertDartToNative_Dictionary(options);
+      _webkitGetUserMedia_1(options_1, successCallback, errorCallback);
+      return;
+    }
+    var options_2 = _convertDartToNative_Dictionary(options);
+    _webkitGetUserMedia_2(options_2, successCallback);
+    return;
+  }
+  void _webkitGetUserMedia_1(options, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback) native "webkitGetUserMedia";
+  void _webkitGetUserMedia_2(options, NavigatorUserMediaSuccessCallback successCallback) native "webkitGetUserMedia";
+}
+
+/// @domName NavigatorUserMediaError
+class NavigatorUserMediaError native "*NavigatorUserMediaError" {
+
+  static const int PERMISSION_DENIED = 1;
+
+  /** @domName NavigatorUserMediaError.code */
+  final int code;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void NavigatorUserMediaErrorCallback(NavigatorUserMediaError error);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
+// 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.
+
+/**
+ * Lazy implementation of the child nodes of an element that does not request
+ * the actual child nodes of an element until strictly necessary greatly
+ * improving performance for the typical cases where it is not required.
+ */
+class _ChildNodeListLazy implements List {
+  final Node _this;
+
+  _ChildNodeListLazy(this._this);
+
+
+  Node get first => JS('Node', '#.firstChild', _this);
+  Node get last => JS('Node', '#.lastChild', _this);
+
+  void add(Node value) {
+    _this.$dom_appendChild(value);
+  }
+
+  void addLast(Node value) {
+    _this.$dom_appendChild(value);
+  }
+
+
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
+      _this.$dom_appendChild(node);
+    }
+  }
+
+  Node removeLast() {
+    final result = last;
+    if (result != null) {
+      _this.$dom_removeChild(result);
+    }
+    return result;
+  }
+
+  void clear() {
+    _this.text = '';
+  }
+
+  void operator []=(int index, Node value) {
+    _this.$dom_replaceChild(value, this[index]);
+  }
+
+  Iterator<Node> iterator() => _this.$dom_childNodes.iterator();
+
+  // TODO(jacobr): We can implement these methods much more efficiently by
+  // looking up the nodeList only once instead of once per iteration.
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  // TODO(jacobr): this could be implemented for child node lists.
+  // The exception we throw here is misleading.
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start = 0]) =>
+      _Lists.lastIndexOf(this, element, start);
+
+  // FIXME: implement these.
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError(
+        "Cannot setRange on immutable List.");
+  }
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError(
+        "Cannot removeRange on immutable List.");
+  }
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError(
+        "Cannot insertRange on immutable List.");
+  }
+  List<Node> getRange(int start, int rangeLength) =>
+    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
+
+  // -- end List<Node> mixins.
+
+  // TODO(jacobr): benchmark whether this is more efficient or whether caching
+  // a local copy of $dom_childNodes is more efficient.
+  int get length => _this.$dom_childNodes.length;
+
+  Node operator[](int index) => _this.$dom_childNodes[index];
+}
+
+class Node extends EventTarget native "*Node" {
+  _ChildNodeListLazy get nodes {
+    return new _ChildNodeListLazy(this);
+  }
+
+  void set nodes(Collection<Node> value) {
+    // Copy list first since we don't want liveness during iteration.
+    // TODO(jacobr): there is a better way to do this.
+    List copy = new List.from(value);
+    text = '';
+    for (Node node in copy) {
+      $dom_appendChild(node);
+    }
+  }
+
+  /**
+   * Removes this node from the DOM.
+   * @domName Node.removeChild
+   */
+  void remove() {
+    // TODO(jacobr): should we throw an exception if parent is already null?
+    // TODO(vsm): Use the native remove when available.
+    if (this.parent != null) {
+      final Node parent = this.parent;
+      parent.$dom_removeChild(this);
+    }
+  }
+
+  /**
+   * Replaces this node with another node.
+   * @domName Node.replaceChild
+   */
+  Node replaceWith(Node otherNode) {
+    try {
+      final Node parent = this.parent;
+      parent.$dom_replaceChild(otherNode, this);
+    } catch (e) {
+
+    };
+    return this;
+  }
+
+
+  static const int ATTRIBUTE_NODE = 2;
+
+  static const int CDATA_SECTION_NODE = 4;
+
+  static const int COMMENT_NODE = 8;
+
+  static const int DOCUMENT_FRAGMENT_NODE = 11;
+
+  static const int DOCUMENT_NODE = 9;
+
+  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+
+  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
+
+  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
+
+  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
+
+  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+
+  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
+
+  static const int DOCUMENT_TYPE_NODE = 10;
+
+  static const int ELEMENT_NODE = 1;
+
+  static const int ENTITY_NODE = 6;
+
+  static const int ENTITY_REFERENCE_NODE = 5;
+
+  static const int NOTATION_NODE = 12;
+
+  static const int PROCESSING_INSTRUCTION_NODE = 7;
+
+  static const int TEXT_NODE = 3;
+
+  /** @domName Node.attributes */
+  NamedNodeMap get $dom_attributes => JS("NamedNodeMap", "#.attributes", this);
+
+  /** @domName Node.childNodes */
+  List<Node> get $dom_childNodes => JS("List<Node>", "#.childNodes", this);
+
+  /** @domName Node.firstChild */
+  Node get $dom_firstChild => JS("Node", "#.firstChild", this);
+
+  /** @domName Node.lastChild */
+  Node get $dom_lastChild => JS("Node", "#.lastChild", this);
+
+  /** @domName Node.nextSibling */
+  Node get nextNode => JS("Node", "#.nextSibling", this);
+
+  /** @domName Node.nodeType */
+  int get $dom_nodeType => JS("int", "#.nodeType", this);
+
+  /** @domName Node.ownerDocument */
+  Document get document => JS("Document", "#.ownerDocument", this);
+
+  /** @domName Node.parentNode */
+  Node get parent => JS("Node", "#.parentNode", this);
+
+  /** @domName Node.previousSibling */
+  Node get previousNode => JS("Node", "#.previousSibling", this);
+
+  /** @domName Node.textContent */
+  String get text => JS("String", "#.textContent", this);
+
+  /** @domName Node.textContent */
+  void set text(String value) {
+    JS("void", "#.textContent = #", this, value);
+  }
+
+  /** @domName Node.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName Node.appendChild */
+  Node $dom_appendChild(Node newChild) native "appendChild";
+
+  /** @domName Node.cloneNode */
+  Node clone(bool deep) native "cloneNode";
+
+  /** @domName Node.contains */
+  bool contains(Node other) native;
+
+  /** @domName Node.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName Node.hasChildNodes */
+  bool hasChildNodes() native;
+
+  /** @domName Node.insertBefore */
+  Node insertBefore(Node newChild, Node refChild) native;
+
+  /** @domName Node.removeChild */
+  Node $dom_removeChild(Node oldChild) native "removeChild";
+
+  /** @domName Node.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName Node.replaceChild */
+  Node $dom_replaceChild(Node newChild, Node oldChild) native "replaceChild";
+
+}
+
+/// @domName NodeFilter
+class NodeFilter native "*NodeFilter" {
+
+  static const int FILTER_ACCEPT = 1;
+
+  static const int FILTER_REJECT = 2;
+
+  static const int FILTER_SKIP = 3;
+
+  static const int SHOW_ALL = 0xFFFFFFFF;
+
+  static const int SHOW_ATTRIBUTE = 0x00000002;
+
+  static const int SHOW_CDATA_SECTION = 0x00000008;
+
+  static const int SHOW_COMMENT = 0x00000080;
+
+  static const int SHOW_DOCUMENT = 0x00000100;
+
+  static const int SHOW_DOCUMENT_FRAGMENT = 0x00000400;
+
+  static const int SHOW_DOCUMENT_TYPE = 0x00000200;
+
+  static const int SHOW_ELEMENT = 0x00000001;
+
+  static const int SHOW_ENTITY = 0x00000020;
+
+  static const int SHOW_ENTITY_REFERENCE = 0x00000010;
+
+  static const int SHOW_NOTATION = 0x00000800;
+
+  static const int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
+
+  static const int SHOW_TEXT = 0x00000004;
+
+  /** @domName NodeFilter.acceptNode */
+  int acceptNode(Node n) native;
+}
+
+/// @domName NodeIterator
+class NodeIterator native "*NodeIterator" {
+
+  /** @domName NodeIterator.expandEntityReferences */
+  final bool expandEntityReferences;
+
+  /** @domName NodeIterator.filter */
+  final NodeFilter filter;
+
+  /** @domName NodeIterator.pointerBeforeReferenceNode */
+  final bool pointerBeforeReferenceNode;
+
+  /** @domName NodeIterator.referenceNode */
+  final Node referenceNode;
+
+  /** @domName NodeIterator.root */
+  final Node root;
+
+  /** @domName NodeIterator.whatToShow */
+  final int whatToShow;
+
+  /** @domName NodeIterator.detach */
+  void detach() native;
+
+  /** @domName NodeIterator.nextNode */
+  Node nextNode() native;
+
+  /** @domName NodeIterator.previousNode */
+  Node previousNode() native;
+}
+// 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.
+
+// TODO(nweiz): when all implementations we target have the same name for the
+// coreimpl implementation of List<E>, extend that rather than wrapping.
+class _ListWrapper<E> implements List<E> {
+  List _list;
+
+  _ListWrapper(List this._list);
+
+  Iterator<E> iterator() => _list.iterator();
+
+  bool contains(E element) => _list.contains(element);
+
+  void forEach(void f(E element)) => _list.forEach(f);
+
+  Collection map(f(E element)) => _list.map(f);
+
+  List<E> filter(bool f(E element)) => _list.filter(f);
+
+  bool every(bool f(E element)) => _list.every(f);
+
+  bool some(bool f(E element)) => _list.some(f);
+
+  bool get isEmpty => _list.isEmpty;
+
+  int get length => _list.length;
+
+  E operator [](int index) => _list[index];
+
+  void operator []=(int index, E value) { _list[index] = value; }
+
+  void set length(int newLength) { _list.length = newLength; }
+
+  void add(E value) => _list.add(value);
+
+  void addLast(E value) => _list.addLast(value);
+
+  void addAll(Collection<E> collection) => _list.addAll(collection);
+
+  void sort([Comparator<E> compare = Comparable.compare]) => _list.sort(compare);
+
+  int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
+
+  int lastIndexOf(E element, [int start = 0]) =>
+    _list.lastIndexOf(element, start);
+
+  void clear() => _list.clear();
+
+  E removeLast() => _list.removeLast();
+
+  E get last => _list.last;
+
+  List<E> getRange(int start, int rangeLength) =>
+    _list.getRange(start, rangeLength);
+
+  void setRange(int start, int rangeLength, List<E> from, [int startFrom = 0])
+      => _list.setRange(start, rangeLength, from, startFrom);
+
+  void removeRange(int start, int rangeLength) =>
+    _list.removeRange(start, rangeLength);
+
+  void insertRange(int start, int rangeLength, [E initialValue = null]) =>
+    _list.insertRange(start, rangeLength, initialValue);
+
+  E get first => _list[0];
+}
+
+/**
+ * This class is used to insure the results of list operations are NodeLists
+ * instead of lists.
+ */
+class _NodeListWrapper extends _ListWrapper<Node> implements List {
+  _NodeListWrapper(List list) : super(list);
+
+  List<Node> filter(bool f(Node element)) =>
+    new _NodeListWrapper(_list.filter(f));
+
+  List<Node> getRange(int start, int rangeLength) =>
+    new _NodeListWrapper(_list.getRange(start, rangeLength));
+}
+
+class NodeList implements JavaScriptIndexingBehavior, List<Node> native "*NodeList" {
+  Node _parent;
+
+  // -- start List<Node> mixins.
+  // Node is the element type.
+
+  // From Iterable<Node>:
+
+  Iterator<Node> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Node>(this);
+  }
+
+  // From Collection<Node>:
+
+  void add(Node value) {
+    _parent.$dom_appendChild(value);
+  }
+
+  void addLast(Node value) {
+    _parent.$dom_appendChild(value);
+  }
+
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
+      _parent.$dom_appendChild(node);
+    }
+  }
+
+  Node removeLast() {
+    final result = this.last;
+    if (result != null) {
+      _parent.$dom_removeChild(result);
+    }
+    return result;
+  }
+
+  void clear() {
+    _parent.text = '';
+  }
+
+  void operator []=(int index, Node value) {
+    _parent.$dom_replaceChild(value, this[index]);
+  }
+
+  bool contains(Node element) => _Collections.contains(this, element);
+
+  void forEach(void f(Node element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Node element)) => _Collections.map(this, [], f);
+
+  Collection<Node> filter(bool f(Node element)) =>
+     new _NodeListWrapper(_Collections.filter(this, <Node>[], f));
+
+  bool every(bool f(Node element)) => _Collections.every(this, f);
+
+  bool some(bool f(Node element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Node>:
+
+  void sort([Comparator<Node> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Node element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Node element, [int start = 0]) =>
+      _Lists.lastIndexOf(this, element, start);
+
+  Node get last => this[length - 1];
+  Node get first => this[0];
+
+  // FIXME: implement thesee.
+  void setRange(int start, int rangeLength, List<Node> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+  void insertRange(int start, int rangeLength, [Node initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+  List<Node> getRange(int start, int rangeLength) =>
+    new _NodeListWrapper(_Lists.getRange(this, start, rangeLength, <Node>[]));
+
+  // -- end List<Node> mixins.
+
+
+  /** @domName NodeList.length */
+  final int length;
+
+  Node operator[](int index) => JS("Node", "#[#]", this, index);
+
+  /** @domName NodeList.item */
+  Node _item(int index) native "item";
+
+}
+
+/// @domName Notation
+class Notation extends Node native "*Notation" {
+
+  /** @domName Notation.publicId */
+  final String publicId;
+
+  /** @domName Notation.systemId */
+  final String systemId;
+}
+
+/// @domName Notification
+class Notification extends EventTarget native "*Notification" {
+
+  factory Notification(String title, [Map options]) {
+    if (!?options) {
+      return _NotificationFactoryProvider.createNotification(title);
+    }
+    return _NotificationFactoryProvider.createNotification(title, options);
+  }
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  NotificationEvents get on =>
+    new NotificationEvents(this);
+
+  /** @domName Notification.dir */
+  String dir;
+
+  /** @domName Notification.permission */
+  final String permission;
+
+  /** @domName Notification.replaceId */
+  String replaceId;
+
+  /** @domName Notification.tag */
+  String tag;
+
+  /** @domName Notification.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName Notification.cancel */
+  void cancel() native;
+
+  /** @domName Notification.close */
+  void close() native;
+
+  /** @domName Notification.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName Notification.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName Notification.requestPermission */
+  static void requestPermission(NotificationPermissionCallback callback) native;
+
+  /** @domName Notification.show */
+  void show() native;
+}
+
+class NotificationEvents extends Events {
+  NotificationEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get click => this['click'];
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get display => this['display'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get show => this['show'];
+}
+
+/// @domName NotificationCenter
+class NotificationCenter native "*NotificationCenter" {
+
+  /** @domName NotificationCenter.checkPermission */
+  int checkPermission() native;
+
+  /** @domName NotificationCenter.createHTMLNotification */
+  Notification createHTMLNotification(String url) native;
+
+  /** @domName NotificationCenter.createNotification */
+  Notification createNotification(String iconUrl, String title, String body) native;
+
+  /** @domName NotificationCenter.requestPermission */
+  void requestPermission(VoidCallback callback) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void NotificationPermissionCallback(String permission);
+
+/// @domName OESElementIndexUint
+class OESElementIndexUint native "*OESElementIndexUint" {
+}
+
+/// @domName OESStandardDerivatives
+class OESStandardDerivatives native "*OESStandardDerivatives" {
+
+  static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
+}
+
+/// @domName OESTextureFloat
+class OESTextureFloat native "*OESTextureFloat" {
+}
+
+/// @domName OESVertexArrayObject
+class OESVertexArrayObject native "*OESVertexArrayObject" {
+
+  static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
+
+  /** @domName OESVertexArrayObject.bindVertexArrayOES */
+  void bindVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
+
+  /** @domName OESVertexArrayObject.createVertexArrayOES */
+  WebGLVertexArrayObjectOES createVertexArrayOES() native;
+
+  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
+  void deleteVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
+
+  /** @domName OESVertexArrayObject.isVertexArrayOES */
+  bool isVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native;
+}
+
+/// @domName HTMLOListElement
+class OListElement extends Element implements Element native "*HTMLOListElement" {
+
+  factory OListElement() => _Elements.createOListElement();
+
+  /** @domName HTMLOListElement.compact */
+  bool compact;
+
+  /** @domName HTMLOListElement.reversed */
+  bool reversed;
+
+  /** @domName HTMLOListElement.start */
+  int start;
+
+  /** @domName HTMLOListElement.type */
+  String type;
+}
+
+/// @domName HTMLObjectElement
+class ObjectElement extends Element implements Element native "*HTMLObjectElement" {
+
+  factory ObjectElement() => _Elements.createObjectElement();
+
+  /** @domName HTMLObjectElement.align */
+  String align;
+
+  /** @domName HTMLObjectElement.archive */
+  String archive;
+
+  /** @domName HTMLObjectElement.border */
+  String border;
+
+  /** @domName HTMLObjectElement.code */
+  String code;
+
+  /** @domName HTMLObjectElement.codeBase */
+  String codeBase;
+
+  /** @domName HTMLObjectElement.codeType */
+  String codeType;
+
+  /** @domName HTMLObjectElement.data */
+  String data;
+
+  /** @domName HTMLObjectElement.declare */
+  bool declare;
+
+  /** @domName HTMLObjectElement.form */
+  final FormElement form;
+
+  /** @domName HTMLObjectElement.height */
+  String height;
+
+  /** @domName HTMLObjectElement.hspace */
+  int hspace;
+
+  /** @domName HTMLObjectElement.name */
+  String name;
+
+  /** @domName HTMLObjectElement.standby */
+  String standby;
+
+  /** @domName HTMLObjectElement.type */
+  String type;
+
+  /** @domName HTMLObjectElement.useMap */
+  String useMap;
+
+  /** @domName HTMLObjectElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLObjectElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLObjectElement.vspace */
+  int vspace;
+
+  /** @domName HTMLObjectElement.width */
+  String width;
+
+  /** @domName HTMLObjectElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLObjectElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLObjectElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+}
+
+/// @domName OfflineAudioCompletionEvent
+class OfflineAudioCompletionEvent extends Event native "*OfflineAudioCompletionEvent" {
+
+  /** @domName OfflineAudioCompletionEvent.renderedBuffer */
+  final AudioBuffer renderedBuffer;
+}
+
+/// @domName HTMLOptGroupElement
+class OptGroupElement extends Element implements Element native "*HTMLOptGroupElement" {
+
+  factory OptGroupElement() => _Elements.createOptGroupElement();
+
+  /** @domName HTMLOptGroupElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLOptGroupElement.label */
+  String label;
+}
+
+/// @domName HTMLOptionElement
+class OptionElement extends Element implements Element native "*HTMLOptionElement" {
+
+  factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
+    if (!?data) {
+      return _OptionElementFactoryProvider.createOptionElement();
+    }
+    if (!?value) {
+      return _OptionElementFactoryProvider.createOptionElement(data);
+    }
+    if (!?defaultSelected) {
+      return _OptionElementFactoryProvider.createOptionElement(data, value);
+    }
+    if (!?selected) {
+      return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected);
+    }
+    return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected, selected);
+  }
+
+  /** @domName HTMLOptionElement.defaultSelected */
+  bool defaultSelected;
+
+  /** @domName HTMLOptionElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLOptionElement.form */
+  final FormElement form;
+
+  /** @domName HTMLOptionElement.index */
+  final int index;
+
+  /** @domName HTMLOptionElement.label */
+  String label;
+
+  /** @domName HTMLOptionElement.selected */
+  bool selected;
+
+  /** @domName HTMLOptionElement.value */
+  String value;
+}
+
+/// @domName OscillatorNode
+class OscillatorNode extends AudioSourceNode native "*OscillatorNode" {
+
+  static const int CUSTOM = 4;
+
+  static const int FINISHED_STATE = 3;
+
+  static const int PLAYING_STATE = 2;
+
+  static const int SAWTOOTH = 2;
+
+  static const int SCHEDULED_STATE = 1;
+
+  static const int SINE = 0;
+
+  static const int SQUARE = 1;
+
+  static const int TRIANGLE = 3;
+
+  static const int UNSCHEDULED_STATE = 0;
+
+  /** @domName OscillatorNode.detune */
+  final AudioParam detune;
+
+  /** @domName OscillatorNode.frequency */
+  final AudioParam frequency;
+
+  /** @domName OscillatorNode.playbackState */
+  final int playbackState;
+
+  /** @domName OscillatorNode.type */
+  int type;
+
+  /** @domName OscillatorNode.setWaveTable */
+  void setWaveTable(WaveTable waveTable) native;
+
+  /** @domName OscillatorNode.start */
+  void start(num when) native;
+
+  /** @domName OscillatorNode.stop */
+  void stop(num when) native;
+}
+
+/// @domName HTMLOutputElement
+class OutputElement extends Element implements Element native "*HTMLOutputElement" {
+
+  factory OutputElement() => _Elements.createOutputElement();
+
+  /** @domName HTMLOutputElement.defaultValue */
+  String defaultValue;
+
+  /** @domName HTMLOutputElement.form */
+  final FormElement form;
+
+  /** @domName HTMLOutputElement.htmlFor */
+  DOMSettableTokenList htmlFor;
+
+  /** @domName HTMLOutputElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLOutputElement.name */
+  String name;
+
+  /** @domName HTMLOutputElement.type */
+  final String type;
+
+  /** @domName HTMLOutputElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLOutputElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLOutputElement.value */
+  String value;
+
+  /** @domName HTMLOutputElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLOutputElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLOutputElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+}
+
+/// @domName OverflowEvent
+class OverflowEvent extends Event native "*OverflowEvent" {
+
+  static const int BOTH = 2;
+
+  static const int HORIZONTAL = 0;
+
+  static const int VERTICAL = 1;
+
+  /** @domName OverflowEvent.horizontalOverflow */
+  final bool horizontalOverflow;
+
+  /** @domName OverflowEvent.orient */
+  final int orient;
+
+  /** @domName OverflowEvent.verticalOverflow */
+  final bool verticalOverflow;
+}
+
+/// @domName PagePopupController
+class PagePopupController native "*PagePopupController" {
+
+  /** @domName PagePopupController.localizeNumberString */
+  String localizeNumberString(String numberString) native;
+
+  /** @domName PagePopupController.setValueAndClosePopup */
+  void setValueAndClosePopup(int numberValue, String stringValue) native;
+}
+
+/// @domName PageTransitionEvent
+class PageTransitionEvent extends Event native "*PageTransitionEvent" {
+
+  /** @domName PageTransitionEvent.persisted */
+  final bool persisted;
+}
+
+/// @domName PannerNode
+class PannerNode extends AudioNode native "*PannerNode" {
+
+  static const int EQUALPOWER = 0;
+
+  static const int EXPONENTIAL_DISTANCE = 2;
+
+  static const int HRTF = 1;
+
+  static const int INVERSE_DISTANCE = 1;
+
+  static const int LINEAR_DISTANCE = 0;
+
+  static const int SOUNDFIELD = 2;
+
+  /** @domName PannerNode.coneGain */
+  final AudioGain coneGain;
+
+  /** @domName PannerNode.coneInnerAngle */
+  num coneInnerAngle;
+
+  /** @domName PannerNode.coneOuterAngle */
+  num coneOuterAngle;
+
+  /** @domName PannerNode.coneOuterGain */
+  num coneOuterGain;
+
+  /** @domName PannerNode.distanceGain */
+  final AudioGain distanceGain;
+
+  /** @domName PannerNode.distanceModel */
+  int distanceModel;
+
+  /** @domName PannerNode.maxDistance */
+  num maxDistance;
+
+  /** @domName PannerNode.panningModel */
+  int panningModel;
+
+  /** @domName PannerNode.refDistance */
+  num refDistance;
+
+  /** @domName PannerNode.rolloffFactor */
+  num rolloffFactor;
+
+  /** @domName PannerNode.setOrientation */
+  void setOrientation(num x, num y, num z) native;
+
+  /** @domName PannerNode.setPosition */
+  void setPosition(num x, num y, num z) native;
+
+  /** @domName PannerNode.setVelocity */
+  void setVelocity(num x, num y, num z) native;
+}
+
+/// @domName HTMLParagraphElement
+class ParagraphElement extends Element implements Element native "*HTMLParagraphElement" {
+
+  factory ParagraphElement() => _Elements.createParagraphElement();
+
+  /** @domName HTMLParagraphElement.align */
+  String align;
+}
+
+/// @domName HTMLParamElement
+class ParamElement extends Element implements Element native "*HTMLParamElement" {
+
+  factory ParamElement() => _Elements.createParamElement();
+
+  /** @domName HTMLParamElement.name */
+  String name;
+
+  /** @domName HTMLParamElement.type */
+  String type;
+
+  /** @domName HTMLParamElement.value */
+  String value;
+
+  /** @domName HTMLParamElement.valueType */
+  String valueType;
+}
+
+/// @domName PeerConnection00
+class PeerConnection00 extends EventTarget native "*PeerConnection00" {
+
+  factory PeerConnection00(String serverConfiguration, IceCallback iceCallback) => _PeerConnection00FactoryProvider.createPeerConnection00(serverConfiguration, iceCallback);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  PeerConnection00Events get on =>
+    new PeerConnection00Events(this);
+
+  static const int ACTIVE = 2;
+
+  static const int CLOSED = 3;
+
+  static const int ICE_CHECKING = 0x300;
+
+  static const int ICE_CLOSED = 0x700;
+
+  static const int ICE_COMPLETED = 0x500;
+
+  static const int ICE_CONNECTED = 0x400;
+
+  static const int ICE_FAILED = 0x600;
+
+  static const int ICE_GATHERING = 0x100;
+
+  static const int ICE_WAITING = 0x200;
+
+  static const int NEW = 0;
+
+  static const int OPENING = 1;
+
+  static const int SDP_ANSWER = 0x300;
+
+  static const int SDP_OFFER = 0x100;
+
+  static const int SDP_PRANSWER = 0x200;
+
+  /** @domName PeerConnection00.iceState */
+  final int iceState;
+
+  /** @domName PeerConnection00.localDescription */
+  final SessionDescription localDescription;
+
+  /** @domName PeerConnection00.localStreams */
+  final List<MediaStream> localStreams;
+
+  /** @domName PeerConnection00.readyState */
+  final int readyState;
+
+  /** @domName PeerConnection00.remoteDescription */
+  final SessionDescription remoteDescription;
+
+  /** @domName PeerConnection00.remoteStreams */
+  final List<MediaStream> remoteStreams;
+
+  /** @domName PeerConnection00.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName PeerConnection00.addStream */
+  void addStream(MediaStream stream, [mediaStreamHints]) {
+    if (?mediaStreamHints) {
+      var mediaStreamHints_1 = _convertDartToNative_Dictionary(mediaStreamHints);
+      _addStream_1(stream, mediaStreamHints_1);
+      return;
+    }
+    _addStream_2(stream);
+    return;
+  }
+  void _addStream_1(MediaStream stream, mediaStreamHints) native "addStream";
+  void _addStream_2(MediaStream stream) native "addStream";
+
+  /** @domName PeerConnection00.close */
+  void close() native;
+
+  /** @domName PeerConnection00.createAnswer */
+  SessionDescription createAnswer(String offer, [mediaHints]) {
+    if (?mediaHints) {
+      var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
+      return _createAnswer_1(offer, mediaHints_1);
+    }
+    return _createAnswer_2(offer);
+  }
+  SessionDescription _createAnswer_1(offer, mediaHints) native "createAnswer";
+  SessionDescription _createAnswer_2(offer) native "createAnswer";
+
+  /** @domName PeerConnection00.createOffer */
+  SessionDescription createOffer([mediaHints]) {
+    if (?mediaHints) {
+      var mediaHints_1 = _convertDartToNative_Dictionary(mediaHints);
+      return _createOffer_1(mediaHints_1);
+    }
+    return _createOffer_2();
+  }
+  SessionDescription _createOffer_1(mediaHints) native "createOffer";
+  SessionDescription _createOffer_2() native "createOffer";
+
+  /** @domName PeerConnection00.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName PeerConnection00.processIceMessage */
+  void processIceMessage(IceCandidate candidate) native;
+
+  /** @domName PeerConnection00.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName PeerConnection00.removeStream */
+  void removeStream(MediaStream stream) native;
+
+  /** @domName PeerConnection00.setLocalDescription */
+  void setLocalDescription(int action, SessionDescription desc) native;
+
+  /** @domName PeerConnection00.setRemoteDescription */
+  void setRemoteDescription(int action, SessionDescription desc) native;
+
+  /** @domName PeerConnection00.startIce */
+  void startIce([iceOptions]) {
+    if (?iceOptions) {
+      var iceOptions_1 = _convertDartToNative_Dictionary(iceOptions);
+      _startIce_1(iceOptions_1);
+      return;
+    }
+    _startIce_2();
+    return;
+  }
+  void _startIce_1(iceOptions) native "startIce";
+  void _startIce_2() native "startIce";
+}
+
+class PeerConnection00Events extends Events {
+  PeerConnection00Events(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get addStream => this['addstream'];
+
+  EventListenerList get connecting => this['connecting'];
+
+  EventListenerList get open => this['open'];
+
+  EventListenerList get removeStream => this['removestream'];
+
+  EventListenerList get stateChange => this['statechange'];
+}
+
+/// @domName Performance
+class Performance extends EventTarget native "*Performance" {
+
+  /** @domName Performance.memory */
+  final MemoryInfo memory;
+
+  /** @domName Performance.navigation */
+  final PerformanceNavigation navigation;
+
+  /** @domName Performance.timing */
+  final PerformanceTiming timing;
+
+  /** @domName Performance.now */
+  num now() native;
+}
+
+/// @domName PerformanceNavigation
+class PerformanceNavigation native "*PerformanceNavigation" {
+
+  static const int TYPE_BACK_FORWARD = 2;
+
+  static const int TYPE_NAVIGATE = 0;
+
+  static const int TYPE_RELOAD = 1;
+
+  static const int TYPE_RESERVED = 255;
+
+  /** @domName PerformanceNavigation.redirectCount */
+  final int redirectCount;
+
+  /** @domName PerformanceNavigation.type */
+  final int type;
+}
+
+/// @domName PerformanceTiming
+class PerformanceTiming native "*PerformanceTiming" {
+
+  /** @domName PerformanceTiming.connectEnd */
+  final int connectEnd;
+
+  /** @domName PerformanceTiming.connectStart */
+  final int connectStart;
+
+  /** @domName PerformanceTiming.domComplete */
+  final int domComplete;
+
+  /** @domName PerformanceTiming.domContentLoadedEventEnd */
+  final int domContentLoadedEventEnd;
+
+  /** @domName PerformanceTiming.domContentLoadedEventStart */
+  final int domContentLoadedEventStart;
+
+  /** @domName PerformanceTiming.domInteractive */
+  final int domInteractive;
+
+  /** @domName PerformanceTiming.domLoading */
+  final int domLoading;
+
+  /** @domName PerformanceTiming.domainLookupEnd */
+  final int domainLookupEnd;
+
+  /** @domName PerformanceTiming.domainLookupStart */
+  final int domainLookupStart;
+
+  /** @domName PerformanceTiming.fetchStart */
+  final int fetchStart;
+
+  /** @domName PerformanceTiming.loadEventEnd */
+  final int loadEventEnd;
+
+  /** @domName PerformanceTiming.loadEventStart */
+  final int loadEventStart;
+
+  /** @domName PerformanceTiming.navigationStart */
+  final int navigationStart;
+
+  /** @domName PerformanceTiming.redirectEnd */
+  final int redirectEnd;
+
+  /** @domName PerformanceTiming.redirectStart */
+  final int redirectStart;
+
+  /** @domName PerformanceTiming.requestStart */
+  final int requestStart;
+
+  /** @domName PerformanceTiming.responseEnd */
+  final int responseEnd;
+
+  /** @domName PerformanceTiming.responseStart */
+  final int responseStart;
+
+  /** @domName PerformanceTiming.secureConnectionStart */
+  final int secureConnectionStart;
+
+  /** @domName PerformanceTiming.unloadEventEnd */
+  final int unloadEventEnd;
+
+  /** @domName PerformanceTiming.unloadEventStart */
+  final int unloadEventStart;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class Point native "*WebKitPoint" {
+  factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
+
+  /** @domName WebKitPoint.x */
+  num x;
+
+  /** @domName WebKitPoint.y */
+  num y;
+
+}
+
+/// @domName PopStateEvent
+class PopStateEvent extends Event native "*PopStateEvent" {
+
+  /** @domName PopStateEvent.state */
+  dynamic get state => _convertNativeToDart_SerializedScriptValue(this._state);
+  dynamic get _state => JS("dynamic", "#.state", this);
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void PositionCallback(Geoposition position);
+
+/// @domName PositionError
+class PositionError native "*PositionError" {
+
+  static const int PERMISSION_DENIED = 1;
+
+  static const int POSITION_UNAVAILABLE = 2;
+
+  static const int TIMEOUT = 3;
+
+  /** @domName PositionError.code */
+  final int code;
+
+  /** @domName PositionError.message */
+  final String message;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void PositionErrorCallback(PositionError error);
+
+/// @domName HTMLPreElement
+class PreElement extends Element implements Element native "*HTMLPreElement" {
+
+  factory PreElement() => _Elements.createPreElement();
+
+  /** @domName HTMLPreElement.width */
+  int width;
+
+  /** @domName HTMLPreElement.wrap */
+  bool wrap;
+}
+
+/// @domName ProcessingInstruction
+class ProcessingInstruction extends Node native "*ProcessingInstruction" {
+
+  /** @domName ProcessingInstruction.data */
+  String data;
+
+  /** @domName ProcessingInstruction.sheet */
+  final StyleSheet sheet;
+
+  /** @domName ProcessingInstruction.target */
+  final String target;
+}
+
+/// @domName HTMLProgressElement
+class ProgressElement extends Element implements Element native "*HTMLProgressElement" {
+
+  factory ProgressElement() => _Elements.createProgressElement();
+
+  /** @domName HTMLProgressElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLProgressElement.max */
+  num max;
+
+  /** @domName HTMLProgressElement.position */
+  final num position;
+
+  /** @domName HTMLProgressElement.value */
+  num value;
+}
+
+/// @domName ProgressEvent
+class ProgressEvent extends Event native "*ProgressEvent" {
+
+  /** @domName ProgressEvent.lengthComputable */
+  final bool lengthComputable;
+
+  /** @domName ProgressEvent.loaded */
+  final int loaded;
+
+  /** @domName ProgressEvent.total */
+  final int total;
+}
+
+/// @domName HTMLQuoteElement
+class QuoteElement extends Element implements Element native "*HTMLQuoteElement" {
+
+  /** @domName HTMLQuoteElement.cite */
+  String cite;
+}
+
+/// @domName RGBColor
+class RGBColor native "*RGBColor" {
+
+  /** @domName RGBColor.blue */
+  final CSSPrimitiveValue blue;
+
+  /** @domName RGBColor.green */
+  final CSSPrimitiveValue green;
+
+  /** @domName RGBColor.red */
+  final CSSPrimitiveValue red;
+}
+
+/// @domName RTCDataChannel
+class RTCDataChannel extends EventTarget native "*RTCDataChannel" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  RTCDataChannelEvents get on =>
+    new RTCDataChannelEvents(this);
+
+  /** @domName RTCDataChannel.binaryType */
+  String binaryType;
+
+  /** @domName RTCDataChannel.bufferedAmount */
+  final int bufferedAmount;
+
+  /** @domName RTCDataChannel.label */
+  final String label;
+
+  /** @domName RTCDataChannel.readyState */
+  final String readyState;
+
+  /** @domName RTCDataChannel.reliable */
+  final bool reliable;
+
+  /** @domName RTCDataChannel.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName RTCDataChannel.close */
+  void close() native;
+
+  /** @domName RTCDataChannel.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName RTCDataChannel.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName RTCDataChannel.send */
+  void send(data) native;
+}
+
+class RTCDataChannelEvents extends Events {
+  RTCDataChannelEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+
+/// @domName RTCDataChannelEvent
+class RTCDataChannelEvent extends Event native "*RTCDataChannelEvent" {
+
+  /** @domName RTCDataChannelEvent.channel */
+  final RTCDataChannel channel;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void RTCErrorCallback(String errorInformation);
+
+/// @domName RTCIceCandidate
+class RTCIceCandidate native "*RTCIceCandidate" {
+
+  factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
+
+  /** @domName RTCIceCandidate.candidate */
+  final String candidate;
+
+  /** @domName RTCIceCandidate.sdpMLineIndex */
+  final int sdpMLineIndex;
+
+  /** @domName RTCIceCandidate.sdpMid */
+  final String sdpMid;
+}
+
+/// @domName RTCIceCandidateEvent
+class RTCIceCandidateEvent extends Event native "*RTCIceCandidateEvent" {
+
+  /** @domName RTCIceCandidateEvent.candidate */
+  final RTCIceCandidate candidate;
+}
+
+/// @domName RTCPeerConnection
+class RTCPeerConnection extends EventTarget native "*RTCPeerConnection" {
+
+  factory RTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
+    if (!?mediaConstraints) {
+      return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers);
+    }
+    return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers, mediaConstraints);
+  }
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  RTCPeerConnectionEvents get on =>
+    new RTCPeerConnectionEvents(this);
+
+  /** @domName RTCPeerConnection.iceState */
+  final String iceState;
+
+  /** @domName RTCPeerConnection.localDescription */
+  final RTCSessionDescription localDescription;
+
+  /** @domName RTCPeerConnection.localStreams */
+  final List<MediaStream> localStreams;
+
+  /** @domName RTCPeerConnection.readyState */
+  final String readyState;
+
+  /** @domName RTCPeerConnection.remoteDescription */
+  final RTCSessionDescription remoteDescription;
+
+  /** @domName RTCPeerConnection.remoteStreams */
+  final List<MediaStream> remoteStreams;
+
+  /** @domName RTCPeerConnection.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName RTCPeerConnection.addIceCandidate */
+  void addIceCandidate(RTCIceCandidate candidate) native;
+
+  /** @domName RTCPeerConnection.addStream */
+  void addStream(MediaStream stream, [mediaConstraints]) {
+    if (?mediaConstraints) {
+      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
+      _addStream_1(stream, mediaConstraints_1);
+      return;
+    }
+    _addStream_2(stream);
+    return;
+  }
+  void _addStream_1(MediaStream stream, mediaConstraints) native "addStream";
+  void _addStream_2(MediaStream stream) native "addStream";
+
+  /** @domName RTCPeerConnection.close */
+  void close() native;
+
+  /** @domName RTCPeerConnection.createAnswer */
+  void createAnswer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
+    if (?mediaConstraints) {
+      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
+      _createAnswer_1(successCallback, failureCallback, mediaConstraints_1);
+      return;
+    }
+    _createAnswer_2(successCallback, failureCallback);
+    return;
+  }
+  void _createAnswer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createAnswer";
+  void _createAnswer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createAnswer";
+
+  /** @domName RTCPeerConnection.createDataChannel */
+  RTCDataChannel createDataChannel(String label, [options]) {
+    if (?options) {
+      var options_1 = _convertDartToNative_Dictionary(options);
+      return _createDataChannel_1(label, options_1);
+    }
+    return _createDataChannel_2(label);
+  }
+  RTCDataChannel _createDataChannel_1(label, options) native "createDataChannel";
+  RTCDataChannel _createDataChannel_2(label) native "createDataChannel";
+
+  /** @domName RTCPeerConnection.createOffer */
+  void createOffer(RTCSessionDescriptionCallback successCallback, [failureCallback, mediaConstraints]) {
+    if (?mediaConstraints) {
+      var mediaConstraints_1 = _convertDartToNative_Dictionary(mediaConstraints);
+      _createOffer_1(successCallback, failureCallback, mediaConstraints_1);
+      return;
+    }
+    _createOffer_2(successCallback, failureCallback);
+    return;
+  }
+  void _createOffer_1(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback, mediaConstraints) native "createOffer";
+  void _createOffer_2(RTCSessionDescriptionCallback successCallback, RTCErrorCallback failureCallback) native "createOffer";
+
+  /** @domName RTCPeerConnection.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName RTCPeerConnection.getStats */
+  void getStats(RTCStatsCallback successCallback, MediaStreamTrack selector) native;
+
+  /** @domName RTCPeerConnection.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName RTCPeerConnection.removeStream */
+  void removeStream(MediaStream stream) native;
+
+  /** @domName RTCPeerConnection.setLocalDescription */
+  void setLocalDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
+
+  /** @domName RTCPeerConnection.setRemoteDescription */
+  void setRemoteDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native;
+
+  /** @domName RTCPeerConnection.updateIce */
+  void updateIce([configuration, mediaConstraints]) {
+    if (?mediaConstraints) {
+      var configuration_1 = _convertDartToNative_Dictionary(configuration);
+      var mediaConstraints_2 = _convertDartToNative_Dictionary(mediaConstraints);
+      _updateIce_1(configuration_1, mediaConstraints_2);
+      return;
+    }
+    if (?configuration) {
+      var configuration_3 = _convertDartToNative_Dictionary(configuration);
+      _updateIce_2(configuration_3);
+      return;
+    }
+    _updateIce_3();
+    return;
+  }
+  void _updateIce_1(configuration, mediaConstraints) native "updateIce";
+  void _updateIce_2(configuration) native "updateIce";
+  void _updateIce_3() native "updateIce";
+}
+
+class RTCPeerConnectionEvents extends Events {
+  RTCPeerConnectionEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get addStream => this['addstream'];
+
+  EventListenerList get iceCandidate => this['icecandidate'];
+
+  EventListenerList get iceChange => this['icechange'];
+
+  EventListenerList get negotiationNeeded => this['negotiationneeded'];
+
+  EventListenerList get open => this['open'];
+
+  EventListenerList get removeStream => this['removestream'];
+
+  EventListenerList get stateChange => this['statechange'];
+}
+
+/// @domName RTCSessionDescription
+class RTCSessionDescription native "*RTCSessionDescription" {
+
+  factory RTCSessionDescription(Map dictionary) => _RTCSessionDescriptionFactoryProvider.createRTCSessionDescription(dictionary);
+
+  /** @domName RTCSessionDescription.sdp */
+  String sdp;
+
+  /** @domName RTCSessionDescription.type */
+  String type;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void RTCSessionDescriptionCallback(RTCSessionDescription sdp);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void RTCStatsCallback(RTCStatsResponse response);
+
+/// @domName RTCStatsElement
+class RTCStatsElement native "*RTCStatsElement" {
+
+  /** @domName RTCStatsElement.timestamp */
+  final Date timestamp;
+
+  /** @domName RTCStatsElement.stat */
+  String stat(String name) native;
+}
+
+/// @domName RTCStatsReport
+class RTCStatsReport native "*RTCStatsReport" {
+
+  /** @domName RTCStatsReport.local */
+  final RTCStatsElement local;
+
+  /** @domName RTCStatsReport.remote */
+  final RTCStatsElement remote;
+}
+
+/// @domName RTCStatsResponse
+class RTCStatsResponse native "*RTCStatsResponse" {
+
+  /** @domName RTCStatsResponse.result */
+  List<RTCStatsReport> result() native;
+}
+
+/// @domName RadioNodeList
+class RadioNodeList extends NodeList native "*RadioNodeList" {
+
+  /** @domName RadioNodeList.value */
+  String value;
+}
+
+/// @domName Range
+class Range native "*Range" {
+
+  static const int END_TO_END = 2;
+
+  static const int END_TO_START = 3;
+
+  static const int NODE_AFTER = 1;
+
+  static const int NODE_BEFORE = 0;
+
+  static const int NODE_BEFORE_AND_AFTER = 2;
+
+  static const int NODE_INSIDE = 3;
+
+  static const int START_TO_END = 1;
+
+  static const int START_TO_START = 0;
+
+  /** @domName Range.collapsed */
+  final bool collapsed;
+
+  /** @domName Range.commonAncestorContainer */
+  final Node commonAncestorContainer;
+
+  /** @domName Range.endContainer */
+  final Node endContainer;
+
+  /** @domName Range.endOffset */
+  final int endOffset;
+
+  /** @domName Range.startContainer */
+  final Node startContainer;
+
+  /** @domName Range.startOffset */
+  final int startOffset;
+
+  /** @domName Range.cloneContents */
+  DocumentFragment cloneContents() native;
+
+  /** @domName Range.cloneRange */
+  Range cloneRange() native;
+
+  /** @domName Range.collapse */
+  void collapse(bool toStart) native;
+
+  /** @domName Range.compareNode */
+  int compareNode(Node refNode) native;
+
+  /** @domName Range.comparePoint */
+  int comparePoint(Node refNode, int offset) native;
+
+  /** @domName Range.createContextualFragment */
+  DocumentFragment createContextualFragment(String html) native;
+
+  /** @domName Range.deleteContents */
+  void deleteContents() native;
+
+  /** @domName Range.detach */
+  void detach() native;
+
+  /** @domName Range.expand */
+  void expand(String unit) native;
+
+  /** @domName Range.extractContents */
+  DocumentFragment extractContents() native;
+
+  /** @domName Range.getBoundingClientRect */
+  ClientRect getBoundingClientRect() native;
+
+  /** @domName Range.getClientRects */
+  List<ClientRect> getClientRects() native;
+
+  /** @domName Range.insertNode */
+  void insertNode(Node newNode) native;
+
+  /** @domName Range.intersectsNode */
+  bool intersectsNode(Node refNode) native;
+
+  /** @domName Range.isPointInRange */
+  bool isPointInRange(Node refNode, int offset) native;
+
+  /** @domName Range.selectNode */
+  void selectNode(Node refNode) native;
+
+  /** @domName Range.selectNodeContents */
+  void selectNodeContents(Node refNode) native;
+
+  /** @domName Range.setEnd */
+  void setEnd(Node refNode, int offset) native;
+
+  /** @domName Range.setEndAfter */
+  void setEndAfter(Node refNode) native;
+
+  /** @domName Range.setEndBefore */
+  void setEndBefore(Node refNode) native;
+
+  /** @domName Range.setStart */
+  void setStart(Node refNode, int offset) native;
+
+  /** @domName Range.setStartAfter */
+  void setStartAfter(Node refNode) native;
+
+  /** @domName Range.setStartBefore */
+  void setStartBefore(Node refNode) native;
+
+  /** @domName Range.surroundContents */
+  void surroundContents(Node newParent) native;
+
+  /** @domName Range.toString */
+  String toString() native;
+}
+
+/// @domName RangeException
+class RangeException native "*RangeException" {
+
+  static const int BAD_BOUNDARYPOINTS_ERR = 1;
+
+  static const int INVALID_NODE_TYPE_ERR = 2;
+
+  /** @domName RangeException.code */
+  final int code;
+
+  /** @domName RangeException.message */
+  final String message;
+
+  /** @domName RangeException.name */
+  final String name;
+
+  /** @domName RangeException.toString */
+  String toString() native;
+}
+
+/// @domName Rect
+class Rect native "*Rect" {
+
+  /** @domName Rect.bottom */
+  final CSSPrimitiveValue bottom;
+
+  /** @domName Rect.left */
+  final CSSPrimitiveValue left;
+
+  /** @domName Rect.right */
+  final CSSPrimitiveValue right;
+
+  /** @domName Rect.top */
+  final CSSPrimitiveValue top;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void RequestAnimationFrameCallback(num highResTime);
+
+/// @domName SQLError
+class SQLError native "*SQLError" {
+
+  static const int CONSTRAINT_ERR = 6;
+
+  static const int DATABASE_ERR = 1;
+
+  static const int QUOTA_ERR = 4;
+
+  static const int SYNTAX_ERR = 5;
+
+  static const int TIMEOUT_ERR = 7;
+
+  static const int TOO_LARGE_ERR = 3;
+
+  static const int UNKNOWN_ERR = 0;
+
+  static const int VERSION_ERR = 2;
+
+  /** @domName SQLError.code */
+  final int code;
+
+  /** @domName SQLError.message */
+  final String message;
+}
+
+/// @domName SQLException
+class SQLException native "*SQLException" {
+
+  static const int CONSTRAINT_ERR = 6;
+
+  static const int DATABASE_ERR = 1;
+
+  static const int QUOTA_ERR = 4;
+
+  static const int SYNTAX_ERR = 5;
+
+  static const int TIMEOUT_ERR = 7;
+
+  static const int TOO_LARGE_ERR = 3;
+
+  static const int UNKNOWN_ERR = 0;
+
+  static const int VERSION_ERR = 2;
+
+  /** @domName SQLException.code */
+  final int code;
+
+  /** @domName SQLException.message */
+  final String message;
+}
+
+/// @domName SQLResultSet
+class SQLResultSet native "*SQLResultSet" {
+
+  /** @domName SQLResultSet.insertId */
+  final int insertId;
+
+  /** @domName SQLResultSet.rows */
+  final SQLResultSetRowList rows;
+
+  /** @domName SQLResultSet.rowsAffected */
+  final int rowsAffected;
+}
+
+/// @domName SQLResultSetRowList
+class SQLResultSetRowList implements JavaScriptIndexingBehavior, List<Map> native "*SQLResultSetRowList" {
+
+  /** @domName SQLResultSetRowList.length */
+  final int length;
+
+  Map operator[](int index) => JS("Map", "#[#]", this, index);
+
+  void operator[]=(int index, Map value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Map> mixins.
+  // Map is the element type.
+
+  // From Iterable<Map>:
+
+  Iterator<Map> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Map>(this);
+  }
+
+  // From Collection<Map>:
+
+  void add(Map value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Map value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Map> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Map element) => _Collections.contains(this, element);
+
+  void forEach(void f(Map element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Map element)) => _Collections.map(this, [], f);
+
+  Collection<Map> filter(bool f(Map element)) =>
+     _Collections.filter(this, <Map>[], f);
+
+  bool every(bool f(Map element)) => _Collections.every(this, f);
+
+  bool some(bool f(Map element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Map>:
+
+  void sort([Comparator<Map> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Map element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Map element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Map get last => this[length - 1];
+
+  Map removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Map> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Map initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Map> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Map>[]);
+
+  // -- end List<Map> mixins.
+
+  /** @domName SQLResultSetRowList.item */
+  Map item(int index) {
+    return _convertNativeToDart_Dictionary(_item_1(index));
+  }
+  _item_1(index) native "item";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void SQLStatementCallback(SQLTransaction transaction, SQLResultSet resultSet);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void SQLStatementErrorCallback(SQLTransaction transaction, SQLError error);
+
+/// @domName SQLTransaction
+class SQLTransaction native "*SQLTransaction" {
+
+  /** @domName SQLTransaction.executeSql */
+  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void SQLTransactionCallback(SQLTransaction transaction);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void SQLTransactionErrorCallback(SQLError error);
+
+/// @domName SQLTransactionSync
+class SQLTransactionSync native "*SQLTransactionSync" {
+
+  /** @domName SQLTransactionSync.executeSql */
+  SQLResultSet executeSql(String sqlStatement, List arguments) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void SQLTransactionSyncCallback(SQLTransactionSync transaction);
+
+/// @domName SVGAElement
+class SVGAElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGAElement" {
+
+  /** @domName SVGAElement.target */
+  final SVGAnimatedString target;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGAltGlyphDefElement
+class SVGAltGlyphDefElement extends SVGElement native "*SVGAltGlyphDefElement" {
+}
+
+/// @domName SVGAltGlyphElement
+class SVGAltGlyphElement extends SVGTextPositioningElement implements SVGURIReference native "*SVGAltGlyphElement" {
+
+  /** @domName SVGAltGlyphElement.format */
+  String format;
+
+  /** @domName SVGAltGlyphElement.glyphRef */
+  String glyphRef;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGAltGlyphItemElement
+class SVGAltGlyphItemElement extends SVGElement native "*SVGAltGlyphItemElement" {
+}
+
+/// @domName SVGAngle
+class SVGAngle native "*SVGAngle" {
+
+  static const int SVG_ANGLETYPE_DEG = 2;
+
+  static const int SVG_ANGLETYPE_GRAD = 4;
+
+  static const int SVG_ANGLETYPE_RAD = 3;
+
+  static const int SVG_ANGLETYPE_UNKNOWN = 0;
+
+  static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
+
+  /** @domName SVGAngle.unitType */
+  final int unitType;
+
+  /** @domName SVGAngle.value */
+  num value;
+
+  /** @domName SVGAngle.valueAsString */
+  String valueAsString;
+
+  /** @domName SVGAngle.valueInSpecifiedUnits */
+  num valueInSpecifiedUnits;
+
+  /** @domName SVGAngle.convertToSpecifiedUnits */
+  void convertToSpecifiedUnits(int unitType) native;
+
+  /** @domName SVGAngle.newValueSpecifiedUnits */
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
+}
+
+/// @domName SVGAnimateColorElement
+class SVGAnimateColorElement extends SVGAnimationElement native "*SVGAnimateColorElement" {
+}
+
+/// @domName SVGAnimateElement
+class SVGAnimateElement extends SVGAnimationElement native "*SVGAnimateElement" {
+}
+
+/// @domName SVGAnimateMotionElement
+class SVGAnimateMotionElement extends SVGAnimationElement native "*SVGAnimateMotionElement" {
+}
+
+/// @domName SVGAnimateTransformElement
+class SVGAnimateTransformElement extends SVGAnimationElement native "*SVGAnimateTransformElement" {
+}
+
+/// @domName SVGAnimatedAngle
+class SVGAnimatedAngle native "*SVGAnimatedAngle" {
+
+  /** @domName SVGAnimatedAngle.animVal */
+  final SVGAngle animVal;
+
+  /** @domName SVGAnimatedAngle.baseVal */
+  final SVGAngle baseVal;
+}
+
+/// @domName SVGAnimatedBoolean
+class SVGAnimatedBoolean native "*SVGAnimatedBoolean" {
+
+  /** @domName SVGAnimatedBoolean.animVal */
+  final bool animVal;
+
+  /** @domName SVGAnimatedBoolean.baseVal */
+  bool baseVal;
+}
+
+/// @domName SVGAnimatedEnumeration
+class SVGAnimatedEnumeration native "*SVGAnimatedEnumeration" {
+
+  /** @domName SVGAnimatedEnumeration.animVal */
+  final int animVal;
+
+  /** @domName SVGAnimatedEnumeration.baseVal */
+  int baseVal;
+}
+
+/// @domName SVGAnimatedInteger
+class SVGAnimatedInteger native "*SVGAnimatedInteger" {
+
+  /** @domName SVGAnimatedInteger.animVal */
+  final int animVal;
+
+  /** @domName SVGAnimatedInteger.baseVal */
+  int baseVal;
+}
+
+/// @domName SVGAnimatedLength
+class SVGAnimatedLength native "*SVGAnimatedLength" {
+
+  /** @domName SVGAnimatedLength.animVal */
+  final SVGLength animVal;
+
+  /** @domName SVGAnimatedLength.baseVal */
+  final SVGLength baseVal;
+}
+
+/// @domName SVGAnimatedLengthList
+class SVGAnimatedLengthList implements JavaScriptIndexingBehavior, List<SVGAnimatedLength> native "*SVGAnimatedLengthList" {
+
+  /** @domName SVGAnimatedLengthList.animVal */
+  final SVGLengthList animVal;
+
+  /** @domName SVGAnimatedLengthList.baseVal */
+  final SVGLengthList baseVal;
+
+  SVGAnimatedLength operator[](int index) => JS("SVGAnimatedLength", "#[#]", this, index);
+
+  void operator[]=(int index, SVGAnimatedLength value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGAnimatedLength> mixins.
+  // SVGAnimatedLength is the element type.
+
+  // From Iterable<SVGAnimatedLength>:
+
+  Iterator<SVGAnimatedLength> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGAnimatedLength>(this);
+  }
+
+  // From Collection<SVGAnimatedLength>:
+
+  void add(SVGAnimatedLength value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGAnimatedLength value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGAnimatedLength> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGAnimatedLength element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGAnimatedLength element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGAnimatedLength element)) => _Collections.map(this, [], f);
+
+  Collection<SVGAnimatedLength> filter(bool f(SVGAnimatedLength element)) =>
+     _Collections.filter(this, <SVGAnimatedLength>[], f);
+
+  bool every(bool f(SVGAnimatedLength element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGAnimatedLength element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGAnimatedLength>:
+
+  void sort([Comparator<SVGAnimatedLength> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGAnimatedLength element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGAnimatedLength element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGAnimatedLength get last => this[length - 1];
+
+  SVGAnimatedLength removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGAnimatedLength> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGAnimatedLength initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGAnimatedLength> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGAnimatedLength>[]);
+
+  // -- end List<SVGAnimatedLength> mixins.
+}
+
+/// @domName SVGAnimatedNumber
+class SVGAnimatedNumber native "*SVGAnimatedNumber" {
+
+  /** @domName SVGAnimatedNumber.animVal */
+  final num animVal;
+
+  /** @domName SVGAnimatedNumber.baseVal */
+  num baseVal;
+}
+
+/// @domName SVGAnimatedNumberList
+class SVGAnimatedNumberList implements JavaScriptIndexingBehavior, List<SVGAnimatedNumber> native "*SVGAnimatedNumberList" {
+
+  /** @domName SVGAnimatedNumberList.animVal */
+  final SVGNumberList animVal;
+
+  /** @domName SVGAnimatedNumberList.baseVal */
+  final SVGNumberList baseVal;
+
+  SVGAnimatedNumber operator[](int index) => JS("SVGAnimatedNumber", "#[#]", this, index);
+
+  void operator[]=(int index, SVGAnimatedNumber value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGAnimatedNumber> mixins.
+  // SVGAnimatedNumber is the element type.
+
+  // From Iterable<SVGAnimatedNumber>:
+
+  Iterator<SVGAnimatedNumber> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGAnimatedNumber>(this);
+  }
+
+  // From Collection<SVGAnimatedNumber>:
+
+  void add(SVGAnimatedNumber value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGAnimatedNumber value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGAnimatedNumber> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGAnimatedNumber element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGAnimatedNumber element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGAnimatedNumber element)) => _Collections.map(this, [], f);
+
+  Collection<SVGAnimatedNumber> filter(bool f(SVGAnimatedNumber element)) =>
+     _Collections.filter(this, <SVGAnimatedNumber>[], f);
+
+  bool every(bool f(SVGAnimatedNumber element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGAnimatedNumber element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGAnimatedNumber>:
+
+  void sort([Comparator<SVGAnimatedNumber> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGAnimatedNumber element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGAnimatedNumber element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGAnimatedNumber get last => this[length - 1];
+
+  SVGAnimatedNumber removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGAnimatedNumber> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGAnimatedNumber initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGAnimatedNumber> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGAnimatedNumber>[]);
+
+  // -- end List<SVGAnimatedNumber> mixins.
+}
+
+/// @domName SVGAnimatedPreserveAspectRatio
+class SVGAnimatedPreserveAspectRatio native "*SVGAnimatedPreserveAspectRatio" {
+
+  /** @domName SVGAnimatedPreserveAspectRatio.animVal */
+  final SVGPreserveAspectRatio animVal;
+
+  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
+  final SVGPreserveAspectRatio baseVal;
+}
+
+/// @domName SVGAnimatedRect
+class SVGAnimatedRect native "*SVGAnimatedRect" {
+
+  /** @domName SVGAnimatedRect.animVal */
+  final SVGRect animVal;
+
+  /** @domName SVGAnimatedRect.baseVal */
+  final SVGRect baseVal;
+}
+
+/// @domName SVGAnimatedString
+class SVGAnimatedString native "*SVGAnimatedString" {
+
+  /** @domName SVGAnimatedString.animVal */
+  final String animVal;
+
+  /** @domName SVGAnimatedString.baseVal */
+  String baseVal;
+}
+
+/// @domName SVGAnimatedTransformList
+class SVGAnimatedTransformList implements JavaScriptIndexingBehavior, List<SVGAnimateTransformElement> native "*SVGAnimatedTransformList" {
+
+  /** @domName SVGAnimatedTransformList.animVal */
+  final SVGTransformList animVal;
+
+  /** @domName SVGAnimatedTransformList.baseVal */
+  final SVGTransformList baseVal;
+
+  SVGAnimateTransformElement operator[](int index) => JS("SVGAnimateTransformElement", "#[#]", this, index);
+
+  void operator[]=(int index, SVGAnimateTransformElement value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGAnimateTransformElement> mixins.
+  // SVGAnimateTransformElement is the element type.
+
+  // From Iterable<SVGAnimateTransformElement>:
+
+  Iterator<SVGAnimateTransformElement> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGAnimateTransformElement>(this);
+  }
+
+  // From Collection<SVGAnimateTransformElement>:
+
+  void add(SVGAnimateTransformElement value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGAnimateTransformElement value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGAnimateTransformElement> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGAnimateTransformElement element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGAnimateTransformElement element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGAnimateTransformElement element)) => _Collections.map(this, [], f);
+
+  Collection<SVGAnimateTransformElement> filter(bool f(SVGAnimateTransformElement element)) =>
+     _Collections.filter(this, <SVGAnimateTransformElement>[], f);
+
+  bool every(bool f(SVGAnimateTransformElement element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGAnimateTransformElement element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGAnimateTransformElement>:
+
+  void sort([Comparator<SVGAnimateTransformElement> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGAnimateTransformElement element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGAnimateTransformElement element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGAnimateTransformElement get last => this[length - 1];
+
+  SVGAnimateTransformElement removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGAnimateTransformElement> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGAnimateTransformElement initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGAnimateTransformElement> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGAnimateTransformElement>[]);
+
+  // -- end List<SVGAnimateTransformElement> mixins.
+}
+
+/// @domName SVGAnimationElement
+class SVGAnimationElement extends SVGElement implements ElementTimeControl, SVGTests, SVGExternalResourcesRequired native "*SVGAnimationElement" {
+
+  /** @domName SVGAnimationElement.targetElement */
+  final SVGElement targetElement;
+
+  /** @domName SVGAnimationElement.getCurrentTime */
+  num getCurrentTime() native;
+
+  /** @domName SVGAnimationElement.getSimpleDuration */
+  num getSimpleDuration() native;
+
+  /** @domName SVGAnimationElement.getStartTime */
+  num getStartTime() native;
+
+  // From ElementTimeControl
+
+  /** @domName ElementTimeControl.beginElement */
+  void beginElement() native;
+
+  /** @domName ElementTimeControl.beginElementAt */
+  void beginElementAt(num offset) native;
+
+  /** @domName ElementTimeControl.endElement */
+  void endElement() native;
+
+  /** @domName ElementTimeControl.endElementAt */
+  void endElementAt(num offset) native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+}
+
+/// @domName SVGCircleElement
+class SVGCircleElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGCircleElement" {
+
+  /** @domName SVGCircleElement.cx */
+  final SVGAnimatedLength cx;
+
+  /** @domName SVGCircleElement.cy */
+  final SVGAnimatedLength cy;
+
+  /** @domName SVGCircleElement.r */
+  final SVGAnimatedLength r;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGClipPathElement
+class SVGClipPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGClipPathElement" {
+
+  /** @domName SVGClipPathElement.clipPathUnits */
+  final SVGAnimatedEnumeration clipPathUnits;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGColor
+class SVGColor extends CSSValue native "*SVGColor" {
+
+  static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
+
+  static const int SVG_COLORTYPE_RGBCOLOR = 1;
+
+  static const int SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2;
+
+  static const int SVG_COLORTYPE_UNKNOWN = 0;
+
+  /** @domName SVGColor.colorType */
+  final int colorType;
+
+  /** @domName SVGColor.rgbColor */
+  final RGBColor rgbColor;
+
+  /** @domName SVGColor.setColor */
+  void setColor(int colorType, String rgbColor, String iccColor) native;
+
+  /** @domName SVGColor.setRGBColor */
+  void setRGBColor(String rgbColor) native;
+
+  /** @domName SVGColor.setRGBColorICCColor */
+  void setRGBColorICCColor(String rgbColor, String iccColor) native;
+}
+
+/// @domName SVGComponentTransferFunctionElement
+class SVGComponentTransferFunctionElement extends SVGElement native "*SVGComponentTransferFunctionElement" {
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5;
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_LINEAR = 4;
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_TABLE = 2;
+
+  static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
+
+  /** @domName SVGComponentTransferFunctionElement.amplitude */
+  final SVGAnimatedNumber amplitude;
+
+  /** @domName SVGComponentTransferFunctionElement.exponent */
+  final SVGAnimatedNumber exponent;
+
+  /** @domName SVGComponentTransferFunctionElement.intercept */
+  final SVGAnimatedNumber intercept;
+
+  /** @domName SVGComponentTransferFunctionElement.offset */
+  final SVGAnimatedNumber offset;
+
+  /** @domName SVGComponentTransferFunctionElement.slope */
+  final SVGAnimatedNumber slope;
+
+  /** @domName SVGComponentTransferFunctionElement.tableValues */
+  final SVGAnimatedNumberList tableValues;
+
+  /** @domName SVGComponentTransferFunctionElement.type */
+  final SVGAnimatedEnumeration type;
+}
+
+/// @domName SVGCursorElement
+class SVGCursorElement extends SVGElement implements SVGURIReference, SVGTests, SVGExternalResourcesRequired native "*SVGCursorElement" {
+
+  /** @domName SVGCursorElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGCursorElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGDefsElement
+class SVGDefsElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGDefsElement" {
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGDescElement
+class SVGDescElement extends SVGElement implements SVGLangSpace, SVGStylable native "*SVGDescElement" {
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGDocument
+class SVGDocument extends Document native "*SVGDocument" {
+
+  /** @domName SVGDocument.rootElement */
+  final SVGSVGElement rootElement;
+
+  /** @domName SVGDocument.createEvent */
+  Event $dom_createEvent(String eventType) native "createEvent";
+}
+// 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.
+
+class _AttributeClassSet extends _CssClassSet {
+  _AttributeClassSet(element) : super(element);
+
+  String $dom_className() => _element.attributes['class'];
+
+  void _write(Set s) {
+    _element.attributes['class'] = _formatSet(s);
+  }
+}
+
+class SVGElement extends Element native "*SVGElement" {
+  factory SVGElement.tag(String tag) =>
+      _SVGElementFactoryProvider.createSVGElement_tag(tag);
+  factory SVGElement.svg(String svg) =>
+      _SVGElementFactoryProvider.createSVGElement_svg(svg);
+
+  CssClassSet get classes {
+    if (_cssClassSet == null) {
+      _cssClassSet = new _AttributeClassSet(_ptr);
+    }
+    return _cssClassSet;
+  }
+
+  List<Element> get elements => new _FilteredElementList(this);
+
+  void set elements(Collection<Element> value) {
+    final elements = this.elements;
+    elements.clear();
+    elements.addAll(value);
+  }
+
+  String get outerHTML {
+    final container = new Element.tag("div");
+    final SVGElement cloned = this.clone(true);
+    container.elements.add(cloned);
+    return container.innerHTML;
+  }
+
+  String get innerHTML {
+    final container = new Element.tag("div");
+    final SVGElement cloned = this.clone(true);
+    container.elements.addAll(cloned.elements);
+    return container.innerHTML;
+  }
+
+  void set innerHTML(String svg) {
+    final container = new Element.tag("div");
+    // Wrap the SVG string in <svg> so that SVGElements are created, rather than
+    // HTMLElements.
+    container.innerHTML = '<svg version="1.1">$svg</svg>';
+    this.elements = container.elements[0].elements;
+  }
+
+
+  // Shadowing definition.
+  /** @domName SVGElement.id */
+  String get id => JS("String", "#.id", this);
+
+  /** @domName SVGElement.id */
+  void set id(String value) {
+    JS("void", "#.id = #", this, value);
+  }
+
+  /** @domName SVGElement.ownerSVGElement */
+  final SVGSVGElement ownerSVGElement;
+
+  /** @domName SVGElement.viewportElement */
+  final SVGElement viewportElement;
+
+  /** @domName SVGElement.xmlbase */
+  String xmlbase;
+
+}
+
+/// @domName SVGElementInstance
+class SVGElementInstance extends EventTarget native "*SVGElementInstance" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  SVGElementInstanceEvents get on =>
+    new SVGElementInstanceEvents(this);
+
+  /** @domName SVGElementInstance.childNodes */
+  final List<SVGElementInstance> childNodes;
+
+  /** @domName SVGElementInstance.correspondingElement */
+  final SVGElement correspondingElement;
+
+  /** @domName SVGElementInstance.correspondingUseElement */
+  final SVGUseElement correspondingUseElement;
+
+  /** @domName SVGElementInstance.firstChild */
+  final SVGElementInstance firstChild;
+
+  /** @domName SVGElementInstance.lastChild */
+  final SVGElementInstance lastChild;
+
+  /** @domName SVGElementInstance.nextSibling */
+  final SVGElementInstance nextSibling;
+
+  /** @domName SVGElementInstance.parentNode */
+  final SVGElementInstance parentNode;
+
+  /** @domName SVGElementInstance.previousSibling */
+  final SVGElementInstance previousSibling;
+}
+
+class SVGElementInstanceEvents extends Events {
+  SVGElementInstanceEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get abort => this['abort'];
+
+  EventListenerList get beforeCopy => this['beforecopy'];
+
+  EventListenerList get beforeCut => this['beforecut'];
+
+  EventListenerList get beforePaste => this['beforepaste'];
+
+  EventListenerList get blur => this['blur'];
+
+  EventListenerList get change => this['change'];
+
+  EventListenerList get click => this['click'];
+
+  EventListenerList get contextMenu => this['contextmenu'];
+
+  EventListenerList get copy => this['copy'];
+
+  EventListenerList get cut => this['cut'];
+
+  EventListenerList get doubleClick => this['dblclick'];
+
+  EventListenerList get drag => this['drag'];
+
+  EventListenerList get dragEnd => this['dragend'];
+
+  EventListenerList get dragEnter => this['dragenter'];
+
+  EventListenerList get dragLeave => this['dragleave'];
+
+  EventListenerList get dragOver => this['dragover'];
+
+  EventListenerList get dragStart => this['dragstart'];
+
+  EventListenerList get drop => this['drop'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get focus => this['focus'];
+
+  EventListenerList get input => this['input'];
+
+  EventListenerList get keyDown => this['keydown'];
+
+  EventListenerList get keyPress => this['keypress'];
+
+  EventListenerList get keyUp => this['keyup'];
+
+  EventListenerList get load => this['load'];
+
+  EventListenerList get mouseDown => this['mousedown'];
+
+  EventListenerList get mouseMove => this['mousemove'];
+
+  EventListenerList get mouseOut => this['mouseout'];
+
+  EventListenerList get mouseOver => this['mouseover'];
+
+  EventListenerList get mouseUp => this['mouseup'];
+
+  EventListenerList get mouseWheel => this['mousewheel'];
+
+  EventListenerList get paste => this['paste'];
+
+  EventListenerList get reset => this['reset'];
+
+  EventListenerList get resize => this['resize'];
+
+  EventListenerList get scroll => this['scroll'];
+
+  EventListenerList get search => this['search'];
+
+  EventListenerList get select => this['select'];
+
+  EventListenerList get selectStart => this['selectstart'];
+
+  EventListenerList get submit => this['submit'];
+
+  EventListenerList get unload => this['unload'];
+}
+
+/// @domName SVGEllipseElement
+class SVGEllipseElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGEllipseElement" {
+
+  /** @domName SVGEllipseElement.cx */
+  final SVGAnimatedLength cx;
+
+  /** @domName SVGEllipseElement.cy */
+  final SVGAnimatedLength cy;
+
+  /** @domName SVGEllipseElement.rx */
+  final SVGAnimatedLength rx;
+
+  /** @domName SVGEllipseElement.ry */
+  final SVGAnimatedLength ry;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGException
+class SVGException native "*SVGException" {
+
+  static const int SVG_INVALID_VALUE_ERR = 1;
+
+  static const int SVG_MATRIX_NOT_INVERTABLE = 2;
+
+  static const int SVG_WRONG_TYPE_ERR = 0;
+
+  /** @domName SVGException.code */
+  final int code;
+
+  /** @domName SVGException.message */
+  final String message;
+
+  /** @domName SVGException.name */
+  final String name;
+
+  /** @domName SVGException.toString */
+  String toString() native;
+}
+/// @domName SVGExternalResourcesRequired
+abstract class SVGExternalResourcesRequired {
+
+  SVGAnimatedBoolean externalResourcesRequired;
+}
+
+/// @domName SVGFEBlendElement
+class SVGFEBlendElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEBlendElement" {
+
+  static const int SVG_FEBLEND_MODE_DARKEN = 4;
+
+  static const int SVG_FEBLEND_MODE_LIGHTEN = 5;
+
+  static const int SVG_FEBLEND_MODE_MULTIPLY = 2;
+
+  static const int SVG_FEBLEND_MODE_NORMAL = 1;
+
+  static const int SVG_FEBLEND_MODE_SCREEN = 3;
+
+  static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
+
+  /** @domName SVGFEBlendElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEBlendElement.in2 */
+  final SVGAnimatedString in2;
+
+  /** @domName SVGFEBlendElement.mode */
+  final SVGAnimatedEnumeration mode;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEColorMatrixElement
+class SVGFEColorMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEColorMatrixElement" {
+
+  static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
+
+  static const int SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
+
+  static const int SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
+
+  static const int SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
+
+  static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
+
+  /** @domName SVGFEColorMatrixElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEColorMatrixElement.type */
+  final SVGAnimatedEnumeration type;
+
+  /** @domName SVGFEColorMatrixElement.values */
+  final SVGAnimatedNumberList values;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEComponentTransferElement
+class SVGFEComponentTransferElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEComponentTransferElement" {
+
+  /** @domName SVGFEComponentTransferElement.in1 */
+  final SVGAnimatedString in1;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFECompositeElement
+class SVGFECompositeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFECompositeElement" {
+
+  static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_IN = 2;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_OUT = 3;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_OVER = 1;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
+
+  static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
+
+  /** @domName SVGFECompositeElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFECompositeElement.in2 */
+  final SVGAnimatedString in2;
+
+  /** @domName SVGFECompositeElement.k1 */
+  final SVGAnimatedNumber k1;
+
+  /** @domName SVGFECompositeElement.k2 */
+  final SVGAnimatedNumber k2;
+
+  /** @domName SVGFECompositeElement.k3 */
+  final SVGAnimatedNumber k3;
+
+  /** @domName SVGFECompositeElement.k4 */
+  final SVGAnimatedNumber k4;
+
+  /** @domName SVGFECompositeElement.operator */
+  final SVGAnimatedEnumeration operator;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEConvolveMatrixElement
+class SVGFEConvolveMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEConvolveMatrixElement" {
+
+  static const int SVG_EDGEMODE_DUPLICATE = 1;
+
+  static const int SVG_EDGEMODE_NONE = 3;
+
+  static const int SVG_EDGEMODE_UNKNOWN = 0;
+
+  static const int SVG_EDGEMODE_WRAP = 2;
+
+  /** @domName SVGFEConvolveMatrixElement.bias */
+  final SVGAnimatedNumber bias;
+
+  /** @domName SVGFEConvolveMatrixElement.divisor */
+  final SVGAnimatedNumber divisor;
+
+  /** @domName SVGFEConvolveMatrixElement.edgeMode */
+  final SVGAnimatedEnumeration edgeMode;
+
+  /** @domName SVGFEConvolveMatrixElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
+  final SVGAnimatedNumberList kernelMatrix;
+
+  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
+  final SVGAnimatedNumber kernelUnitLengthX;
+
+  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
+  final SVGAnimatedNumber kernelUnitLengthY;
+
+  /** @domName SVGFEConvolveMatrixElement.orderX */
+  final SVGAnimatedInteger orderX;
+
+  /** @domName SVGFEConvolveMatrixElement.orderY */
+  final SVGAnimatedInteger orderY;
+
+  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
+  final SVGAnimatedBoolean preserveAlpha;
+
+  /** @domName SVGFEConvolveMatrixElement.targetX */
+  final SVGAnimatedInteger targetX;
+
+  /** @domName SVGFEConvolveMatrixElement.targetY */
+  final SVGAnimatedInteger targetY;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEDiffuseLightingElement
+class SVGFEDiffuseLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDiffuseLightingElement" {
+
+  /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
+  final SVGAnimatedNumber diffuseConstant;
+
+  /** @domName SVGFEDiffuseLightingElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
+  final SVGAnimatedNumber kernelUnitLengthX;
+
+  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
+  final SVGAnimatedNumber kernelUnitLengthY;
+
+  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
+  final SVGAnimatedNumber surfaceScale;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEDisplacementMapElement
+class SVGFEDisplacementMapElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDisplacementMapElement" {
+
+  static const int SVG_CHANNEL_A = 4;
+
+  static const int SVG_CHANNEL_B = 3;
+
+  static const int SVG_CHANNEL_G = 2;
+
+  static const int SVG_CHANNEL_R = 1;
+
+  static const int SVG_CHANNEL_UNKNOWN = 0;
+
+  /** @domName SVGFEDisplacementMapElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEDisplacementMapElement.in2 */
+  final SVGAnimatedString in2;
+
+  /** @domName SVGFEDisplacementMapElement.scale */
+  final SVGAnimatedNumber scale;
+
+  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
+  final SVGAnimatedEnumeration xChannelSelector;
+
+  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
+  final SVGAnimatedEnumeration yChannelSelector;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEDistantLightElement
+class SVGFEDistantLightElement extends SVGElement native "*SVGFEDistantLightElement" {
+
+  /** @domName SVGFEDistantLightElement.azimuth */
+  final SVGAnimatedNumber azimuth;
+
+  /** @domName SVGFEDistantLightElement.elevation */
+  final SVGAnimatedNumber elevation;
+}
+
+/// @domName SVGFEDropShadowElement
+class SVGFEDropShadowElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEDropShadowElement" {
+
+  /** @domName SVGFEDropShadowElement.dx */
+  final SVGAnimatedNumber dx;
+
+  /** @domName SVGFEDropShadowElement.dy */
+  final SVGAnimatedNumber dy;
+
+  /** @domName SVGFEDropShadowElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEDropShadowElement.stdDeviationX */
+  final SVGAnimatedNumber stdDeviationX;
+
+  /** @domName SVGFEDropShadowElement.stdDeviationY */
+  final SVGAnimatedNumber stdDeviationY;
+
+  /** @domName SVGFEDropShadowElement.setStdDeviation */
+  void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEFloodElement
+class SVGFEFloodElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEFloodElement" {
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEFuncAElement
+class SVGFEFuncAElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncAElement" {
+}
+
+/// @domName SVGFEFuncBElement
+class SVGFEFuncBElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncBElement" {
+}
+
+/// @domName SVGFEFuncGElement
+class SVGFEFuncGElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncGElement" {
+}
+
+/// @domName SVGFEFuncRElement
+class SVGFEFuncRElement extends SVGComponentTransferFunctionElement native "*SVGFEFuncRElement" {
+}
+
+/// @domName SVGFEGaussianBlurElement
+class SVGFEGaussianBlurElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEGaussianBlurElement" {
+
+  /** @domName SVGFEGaussianBlurElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
+  final SVGAnimatedNumber stdDeviationX;
+
+  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
+  final SVGAnimatedNumber stdDeviationY;
+
+  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
+  void setStdDeviation(num stdDeviationX, num stdDeviationY) native;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEImageElement
+class SVGFEImageElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired native "*SVGFEImageElement" {
+
+  /** @domName SVGFEImageElement.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGFEMergeElement
+class SVGFEMergeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEMergeElement" {
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEMergeNodeElement
+class SVGFEMergeNodeElement extends SVGElement native "*SVGFEMergeNodeElement" {
+
+  /** @domName SVGFEMergeNodeElement.in1 */
+  final SVGAnimatedString in1;
+}
+
+/// @domName SVGFEMorphologyElement
+class SVGFEMorphologyElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEMorphologyElement" {
+
+  static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
+
+  static const int SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
+
+  static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
+
+  /** @domName SVGFEMorphologyElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFEMorphologyElement.operator */
+  final SVGAnimatedEnumeration operator;
+
+  /** @domName SVGFEMorphologyElement.radiusX */
+  final SVGAnimatedNumber radiusX;
+
+  /** @domName SVGFEMorphologyElement.radiusY */
+  final SVGAnimatedNumber radiusY;
+
+  /** @domName SVGFEMorphologyElement.setRadius */
+  void setRadius(num radiusX, num radiusY) native;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEOffsetElement
+class SVGFEOffsetElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFEOffsetElement" {
+
+  /** @domName SVGFEOffsetElement.dx */
+  final SVGAnimatedNumber dx;
+
+  /** @domName SVGFEOffsetElement.dy */
+  final SVGAnimatedNumber dy;
+
+  /** @domName SVGFEOffsetElement.in1 */
+  final SVGAnimatedString in1;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFEPointLightElement
+class SVGFEPointLightElement extends SVGElement native "*SVGFEPointLightElement" {
+
+  /** @domName SVGFEPointLightElement.x */
+  final SVGAnimatedNumber x;
+
+  /** @domName SVGFEPointLightElement.y */
+  final SVGAnimatedNumber y;
+
+  /** @domName SVGFEPointLightElement.z */
+  final SVGAnimatedNumber z;
+}
+
+/// @domName SVGFESpecularLightingElement
+class SVGFESpecularLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFESpecularLightingElement" {
+
+  /** @domName SVGFESpecularLightingElement.in1 */
+  final SVGAnimatedString in1;
+
+  /** @domName SVGFESpecularLightingElement.specularConstant */
+  final SVGAnimatedNumber specularConstant;
+
+  /** @domName SVGFESpecularLightingElement.specularExponent */
+  final SVGAnimatedNumber specularExponent;
+
+  /** @domName SVGFESpecularLightingElement.surfaceScale */
+  final SVGAnimatedNumber surfaceScale;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFESpotLightElement
+class SVGFESpotLightElement extends SVGElement native "*SVGFESpotLightElement" {
+
+  /** @domName SVGFESpotLightElement.limitingConeAngle */
+  final SVGAnimatedNumber limitingConeAngle;
+
+  /** @domName SVGFESpotLightElement.pointsAtX */
+  final SVGAnimatedNumber pointsAtX;
+
+  /** @domName SVGFESpotLightElement.pointsAtY */
+  final SVGAnimatedNumber pointsAtY;
+
+  /** @domName SVGFESpotLightElement.pointsAtZ */
+  final SVGAnimatedNumber pointsAtZ;
+
+  /** @domName SVGFESpotLightElement.specularExponent */
+  final SVGAnimatedNumber specularExponent;
+
+  /** @domName SVGFESpotLightElement.x */
+  final SVGAnimatedNumber x;
+
+  /** @domName SVGFESpotLightElement.y */
+  final SVGAnimatedNumber y;
+
+  /** @domName SVGFESpotLightElement.z */
+  final SVGAnimatedNumber z;
+}
+
+/// @domName SVGFETileElement
+class SVGFETileElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFETileElement" {
+
+  /** @domName SVGFETileElement.in1 */
+  final SVGAnimatedString in1;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFETurbulenceElement
+class SVGFETurbulenceElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes native "*SVGFETurbulenceElement" {
+
+  static const int SVG_STITCHTYPE_NOSTITCH = 2;
+
+  static const int SVG_STITCHTYPE_STITCH = 1;
+
+  static const int SVG_STITCHTYPE_UNKNOWN = 0;
+
+  static const int SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
+
+  static const int SVG_TURBULENCE_TYPE_TURBULENCE = 2;
+
+  static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
+
+  /** @domName SVGFETurbulenceElement.baseFrequencyX */
+  final SVGAnimatedNumber baseFrequencyX;
+
+  /** @domName SVGFETurbulenceElement.baseFrequencyY */
+  final SVGAnimatedNumber baseFrequencyY;
+
+  /** @domName SVGFETurbulenceElement.numOctaves */
+  final SVGAnimatedInteger numOctaves;
+
+  /** @domName SVGFETurbulenceElement.seed */
+  final SVGAnimatedNumber seed;
+
+  /** @domName SVGFETurbulenceElement.stitchTiles */
+  final SVGAnimatedEnumeration stitchTiles;
+
+  /** @domName SVGFETurbulenceElement.type */
+  final SVGAnimatedEnumeration type;
+
+  // From SVGFilterPrimitiveStandardAttributes
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.result */
+  final SVGAnimatedString result;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.y */
+  final SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGFilterElement
+class SVGFilterElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable native "*SVGFilterElement" {
+
+  /** @domName SVGFilterElement.filterResX */
+  final SVGAnimatedInteger filterResX;
+
+  /** @domName SVGFilterElement.filterResY */
+  final SVGAnimatedInteger filterResY;
+
+  /** @domName SVGFilterElement.filterUnits */
+  final SVGAnimatedEnumeration filterUnits;
+
+  /** @domName SVGFilterElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGFilterElement.primitiveUnits */
+  final SVGAnimatedEnumeration primitiveUnits;
+
+  /** @domName SVGFilterElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGFilterElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGFilterElement.y */
+  final SVGAnimatedLength y;
+
+  /** @domName SVGFilterElement.setFilterRes */
+  void setFilterRes(int filterResX, int filterResY) native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+/// @domName SVGFilterPrimitiveStandardAttributes
+abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
+
+  SVGAnimatedLength height;
+
+  SVGAnimatedString result;
+
+  SVGAnimatedLength width;
+
+  SVGAnimatedLength x;
+
+  SVGAnimatedLength y;
+
+  // From SVGStylable
+
+  SVGAnimatedString className;
+
+  CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name);
+}
+/// @domName SVGFitToViewBox
+abstract class SVGFitToViewBox {
+
+  SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  SVGAnimatedRect viewBox;
+}
+
+/// @domName SVGFontElement
+class SVGFontElement extends SVGElement native "*SVGFontElement" {
+}
+
+/// @domName SVGFontFaceElement
+class SVGFontFaceElement extends SVGElement native "*SVGFontFaceElement" {
+}
+
+/// @domName SVGFontFaceFormatElement
+class SVGFontFaceFormatElement extends SVGElement native "*SVGFontFaceFormatElement" {
+}
+
+/// @domName SVGFontFaceNameElement
+class SVGFontFaceNameElement extends SVGElement native "*SVGFontFaceNameElement" {
+}
+
+/// @domName SVGFontFaceSrcElement
+class SVGFontFaceSrcElement extends SVGElement native "*SVGFontFaceSrcElement" {
+}
+
+/// @domName SVGFontFaceUriElement
+class SVGFontFaceUriElement extends SVGElement native "*SVGFontFaceUriElement" {
+}
+
+/// @domName SVGForeignObjectElement
+class SVGForeignObjectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGForeignObjectElement" {
+
+  /** @domName SVGForeignObjectElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGForeignObjectElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGForeignObjectElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGForeignObjectElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGGElement
+class SVGGElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGGElement" {
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGGlyphElement
+class SVGGlyphElement extends SVGElement native "*SVGGlyphElement" {
+}
+
+/// @domName SVGGlyphRefElement
+class SVGGlyphRefElement extends SVGElement implements SVGURIReference, SVGStylable native "*SVGGlyphRefElement" {
+
+  /** @domName SVGGlyphRefElement.dx */
+  num dx;
+
+  /** @domName SVGGlyphRefElement.dy */
+  num dy;
+
+  /** @domName SVGGlyphRefElement.format */
+  String format;
+
+  /** @domName SVGGlyphRefElement.glyphRef */
+  String glyphRef;
+
+  /** @domName SVGGlyphRefElement.x */
+  num x;
+
+  /** @domName SVGGlyphRefElement.y */
+  num y;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGGradientElement
+class SVGGradientElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired, SVGStylable native "*SVGGradientElement" {
+
+  static const int SVG_SPREADMETHOD_PAD = 1;
+
+  static const int SVG_SPREADMETHOD_REFLECT = 2;
+
+  static const int SVG_SPREADMETHOD_REPEAT = 3;
+
+  static const int SVG_SPREADMETHOD_UNKNOWN = 0;
+
+  /** @domName SVGGradientElement.gradientTransform */
+  final SVGAnimatedTransformList gradientTransform;
+
+  /** @domName SVGGradientElement.gradientUnits */
+  final SVGAnimatedEnumeration gradientUnits;
+
+  /** @domName SVGGradientElement.spreadMethod */
+  final SVGAnimatedEnumeration spreadMethod;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGHKernElement
+class SVGHKernElement extends SVGElement native "*SVGHKernElement" {
+}
+
+/// @domName SVGImageElement
+class SVGImageElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGImageElement" {
+
+  /** @domName SVGImageElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGImageElement.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGImageElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGImageElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGImageElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+/// @domName SVGLangSpace
+abstract class SVGLangSpace {
+
+  String xmllang;
+
+  String xmlspace;
+}
+
+/// @domName SVGLength
+class SVGLength native "*SVGLength" {
+
+  static const int SVG_LENGTHTYPE_CM = 6;
+
+  static const int SVG_LENGTHTYPE_EMS = 3;
+
+  static const int SVG_LENGTHTYPE_EXS = 4;
+
+  static const int SVG_LENGTHTYPE_IN = 8;
+
+  static const int SVG_LENGTHTYPE_MM = 7;
+
+  static const int SVG_LENGTHTYPE_NUMBER = 1;
+
+  static const int SVG_LENGTHTYPE_PC = 10;
+
+  static const int SVG_LENGTHTYPE_PERCENTAGE = 2;
+
+  static const int SVG_LENGTHTYPE_PT = 9;
+
+  static const int SVG_LENGTHTYPE_PX = 5;
+
+  static const int SVG_LENGTHTYPE_UNKNOWN = 0;
+
+  /** @domName SVGLength.unitType */
+  final int unitType;
+
+  /** @domName SVGLength.value */
+  num value;
+
+  /** @domName SVGLength.valueAsString */
+  String valueAsString;
+
+  /** @domName SVGLength.valueInSpecifiedUnits */
+  num valueInSpecifiedUnits;
+
+  /** @domName SVGLength.convertToSpecifiedUnits */
+  void convertToSpecifiedUnits(int unitType) native;
+
+  /** @domName SVGLength.newValueSpecifiedUnits */
+  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native;
+}
+
+/// @domName SVGLengthList
+class SVGLengthList implements JavaScriptIndexingBehavior, List<SVGLength> native "*SVGLengthList" {
+
+  /** @domName SVGLengthList.numberOfItems */
+  final int numberOfItems;
+
+  SVGLength operator[](int index) => JS("SVGLength", "#[#]", this, index);
+
+  void operator[]=(int index, SVGLength value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGLength> mixins.
+  // SVGLength is the element type.
+
+  // From Iterable<SVGLength>:
+
+  Iterator<SVGLength> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGLength>(this);
+  }
+
+  // From Collection<SVGLength>:
+
+  void add(SVGLength value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGLength value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGLength> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGLength element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGLength element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGLength element)) => _Collections.map(this, [], f);
+
+  Collection<SVGLength> filter(bool f(SVGLength element)) =>
+     _Collections.filter(this, <SVGLength>[], f);
+
+  bool every(bool f(SVGLength element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGLength element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGLength>:
+
+  void sort([Comparator<SVGLength> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGLength element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGLength element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGLength get last => this[length - 1];
+
+  SVGLength removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGLength> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGLength initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGLength> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGLength>[]);
+
+  // -- end List<SVGLength> mixins.
+
+  /** @domName SVGLengthList.appendItem */
+  SVGLength appendItem(SVGLength item) native;
+
+  /** @domName SVGLengthList.clear */
+  void clear() native;
+
+  /** @domName SVGLengthList.getItem */
+  SVGLength getItem(int index) native;
+
+  /** @domName SVGLengthList.initialize */
+  SVGLength initialize(SVGLength item) native;
+
+  /** @domName SVGLengthList.insertItemBefore */
+  SVGLength insertItemBefore(SVGLength item, int index) native;
+
+  /** @domName SVGLengthList.removeItem */
+  SVGLength removeItem(int index) native;
+
+  /** @domName SVGLengthList.replaceItem */
+  SVGLength replaceItem(SVGLength item, int index) native;
+}
+
+/// @domName SVGLineElement
+class SVGLineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGLineElement" {
+
+  /** @domName SVGLineElement.x1 */
+  final SVGAnimatedLength x1;
+
+  /** @domName SVGLineElement.x2 */
+  final SVGAnimatedLength x2;
+
+  /** @domName SVGLineElement.y1 */
+  final SVGAnimatedLength y1;
+
+  /** @domName SVGLineElement.y2 */
+  final SVGAnimatedLength y2;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGLinearGradientElement
+class SVGLinearGradientElement extends SVGGradientElement native "*SVGLinearGradientElement" {
+
+  /** @domName SVGLinearGradientElement.x1 */
+  final SVGAnimatedLength x1;
+
+  /** @domName SVGLinearGradientElement.x2 */
+  final SVGAnimatedLength x2;
+
+  /** @domName SVGLinearGradientElement.y1 */
+  final SVGAnimatedLength y1;
+
+  /** @domName SVGLinearGradientElement.y2 */
+  final SVGAnimatedLength y2;
+}
+/// @domName SVGLocatable
+abstract class SVGLocatable {
+
+  SVGElement farthestViewportElement;
+
+  SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox();
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM();
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM();
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element);
+}
+
+/// @domName SVGMPathElement
+class SVGMPathElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired native "*SVGMPathElement" {
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGMarkerElement
+class SVGMarkerElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable native "*SVGMarkerElement" {
+
+  static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
+
+  static const int SVG_MARKERUNITS_UNKNOWN = 0;
+
+  static const int SVG_MARKERUNITS_USERSPACEONUSE = 1;
+
+  static const int SVG_MARKER_ORIENT_ANGLE = 2;
+
+  static const int SVG_MARKER_ORIENT_AUTO = 1;
+
+  static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
+
+  /** @domName SVGMarkerElement.markerHeight */
+  final SVGAnimatedLength markerHeight;
+
+  /** @domName SVGMarkerElement.markerUnits */
+  final SVGAnimatedEnumeration markerUnits;
+
+  /** @domName SVGMarkerElement.markerWidth */
+  final SVGAnimatedLength markerWidth;
+
+  /** @domName SVGMarkerElement.orientAngle */
+  final SVGAnimatedAngle orientAngle;
+
+  /** @domName SVGMarkerElement.orientType */
+  final SVGAnimatedEnumeration orientType;
+
+  /** @domName SVGMarkerElement.refX */
+  final SVGAnimatedLength refX;
+
+  /** @domName SVGMarkerElement.refY */
+  final SVGAnimatedLength refY;
+
+  /** @domName SVGMarkerElement.setOrientToAngle */
+  void setOrientToAngle(SVGAngle angle) native;
+
+  /** @domName SVGMarkerElement.setOrientToAuto */
+  void setOrientToAuto() native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGFitToViewBox.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGMaskElement
+class SVGMaskElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired native "*SVGMaskElement" {
+
+  /** @domName SVGMaskElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGMaskElement.maskContentUnits */
+  final SVGAnimatedEnumeration maskContentUnits;
+
+  /** @domName SVGMaskElement.maskUnits */
+  final SVGAnimatedEnumeration maskUnits;
+
+  /** @domName SVGMaskElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGMaskElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGMaskElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+}
+
+/// @domName SVGMatrix
+class SVGMatrix native "*SVGMatrix" {
+
+  /** @domName SVGMatrix.a */
+  num a;
+
+  /** @domName SVGMatrix.b */
+  num b;
+
+  /** @domName SVGMatrix.c */
+  num c;
+
+  /** @domName SVGMatrix.d */
+  num d;
+
+  /** @domName SVGMatrix.e */
+  num e;
+
+  /** @domName SVGMatrix.f */
+  num f;
+
+  /** @domName SVGMatrix.flipX */
+  SVGMatrix flipX() native;
+
+  /** @domName SVGMatrix.flipY */
+  SVGMatrix flipY() native;
+
+  /** @domName SVGMatrix.inverse */
+  SVGMatrix inverse() native;
+
+  /** @domName SVGMatrix.multiply */
+  SVGMatrix multiply(SVGMatrix secondMatrix) native;
+
+  /** @domName SVGMatrix.rotate */
+  SVGMatrix rotate(num angle) native;
+
+  /** @domName SVGMatrix.rotateFromVector */
+  SVGMatrix rotateFromVector(num x, num y) native;
+
+  /** @domName SVGMatrix.scale */
+  SVGMatrix scale(num scaleFactor) native;
+
+  /** @domName SVGMatrix.scaleNonUniform */
+  SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native;
+
+  /** @domName SVGMatrix.skewX */
+  SVGMatrix skewX(num angle) native;
+
+  /** @domName SVGMatrix.skewY */
+  SVGMatrix skewY(num angle) native;
+
+  /** @domName SVGMatrix.translate */
+  SVGMatrix translate(num x, num y) native;
+}
+
+/// @domName SVGMetadataElement
+class SVGMetadataElement extends SVGElement native "*SVGMetadataElement" {
+}
+
+/// @domName SVGMissingGlyphElement
+class SVGMissingGlyphElement extends SVGElement native "*SVGMissingGlyphElement" {
+}
+
+/// @domName SVGNumber
+class SVGNumber native "*SVGNumber" {
+
+  /** @domName SVGNumber.value */
+  num value;
+}
+
+/// @domName SVGNumberList
+class SVGNumberList implements JavaScriptIndexingBehavior, List<SVGNumber> native "*SVGNumberList" {
+
+  /** @domName SVGNumberList.numberOfItems */
+  final int numberOfItems;
+
+  SVGNumber operator[](int index) => JS("SVGNumber", "#[#]", this, index);
+
+  void operator[]=(int index, SVGNumber value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGNumber> mixins.
+  // SVGNumber is the element type.
+
+  // From Iterable<SVGNumber>:
+
+  Iterator<SVGNumber> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGNumber>(this);
+  }
+
+  // From Collection<SVGNumber>:
+
+  void add(SVGNumber value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGNumber value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGNumber> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGNumber element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGNumber element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGNumber element)) => _Collections.map(this, [], f);
+
+  Collection<SVGNumber> filter(bool f(SVGNumber element)) =>
+     _Collections.filter(this, <SVGNumber>[], f);
+
+  bool every(bool f(SVGNumber element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGNumber element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGNumber>:
+
+  void sort([Comparator<SVGNumber> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGNumber element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGNumber element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGNumber get last => this[length - 1];
+
+  SVGNumber removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGNumber> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGNumber initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGNumber> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGNumber>[]);
+
+  // -- end List<SVGNumber> mixins.
+
+  /** @domName SVGNumberList.appendItem */
+  SVGNumber appendItem(SVGNumber item) native;
+
+  /** @domName SVGNumberList.clear */
+  void clear() native;
+
+  /** @domName SVGNumberList.getItem */
+  SVGNumber getItem(int index) native;
+
+  /** @domName SVGNumberList.initialize */
+  SVGNumber initialize(SVGNumber item) native;
+
+  /** @domName SVGNumberList.insertItemBefore */
+  SVGNumber insertItemBefore(SVGNumber item, int index) native;
+
+  /** @domName SVGNumberList.removeItem */
+  SVGNumber removeItem(int index) native;
+
+  /** @domName SVGNumberList.replaceItem */
+  SVGNumber replaceItem(SVGNumber item, int index) native;
+}
+
+/// @domName SVGPaint
+class SVGPaint extends SVGColor native "*SVGPaint" {
+
+  static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
+
+  static const int SVG_PAINTTYPE_NONE = 101;
+
+  static const int SVG_PAINTTYPE_RGBCOLOR = 1;
+
+  static const int SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2;
+
+  static const int SVG_PAINTTYPE_UNKNOWN = 0;
+
+  static const int SVG_PAINTTYPE_URI = 107;
+
+  static const int SVG_PAINTTYPE_URI_CURRENTCOLOR = 104;
+
+  static const int SVG_PAINTTYPE_URI_NONE = 103;
+
+  static const int SVG_PAINTTYPE_URI_RGBCOLOR = 105;
+
+  static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
+
+  /** @domName SVGPaint.paintType */
+  final int paintType;
+
+  /** @domName SVGPaint.uri */
+  final String uri;
+
+  /** @domName SVGPaint.setPaint */
+  void setPaint(int paintType, String uri, String rgbColor, String iccColor) native;
+
+  /** @domName SVGPaint.setUri */
+  void setUri(String uri) native;
+}
+
+/// @domName SVGPathElement
+class SVGPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPathElement" {
+
+  /** @domName SVGPathElement.animatedNormalizedPathSegList */
+  final SVGPathSegList animatedNormalizedPathSegList;
+
+  /** @domName SVGPathElement.animatedPathSegList */
+  final SVGPathSegList animatedPathSegList;
+
+  /** @domName SVGPathElement.normalizedPathSegList */
+  final SVGPathSegList normalizedPathSegList;
+
+  /** @domName SVGPathElement.pathLength */
+  final SVGAnimatedNumber pathLength;
+
+  /** @domName SVGPathElement.pathSegList */
+  final SVGPathSegList pathSegList;
+
+  /** @domName SVGPathElement.createSVGPathSegArcAbs */
+  SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
+
+  /** @domName SVGPathElement.createSVGPathSegArcRel */
+  SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native;
+
+  /** @domName SVGPathElement.createSVGPathSegClosePath */
+  SVGPathSegClosePath createSVGPathSegClosePath() native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
+  SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
+  SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
+  SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
+  SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
+  SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
+  SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
+  SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
+  SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
+  SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
+  SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
+  SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
+  SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
+  SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
+  SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
+  SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native;
+
+  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
+  SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native;
+
+  /** @domName SVGPathElement.getPathSegAtLength */
+  int getPathSegAtLength(num distance) native;
+
+  /** @domName SVGPathElement.getPointAtLength */
+  SVGPoint getPointAtLength(num distance) native;
+
+  /** @domName SVGPathElement.getTotalLength */
+  num getTotalLength() native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGPathSeg
+class SVGPathSeg native "*SVGPathSeg" {
+
+  static const int PATHSEG_ARC_ABS = 10;
+
+  static const int PATHSEG_ARC_REL = 11;
+
+  static const int PATHSEG_CLOSEPATH = 1;
+
+  static const int PATHSEG_CURVETO_CUBIC_ABS = 6;
+
+  static const int PATHSEG_CURVETO_CUBIC_REL = 7;
+
+  static const int PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
+
+  static const int PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
+
+  static const int PATHSEG_CURVETO_QUADRATIC_ABS = 8;
+
+  static const int PATHSEG_CURVETO_QUADRATIC_REL = 9;
+
+  static const int PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
+
+  static const int PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
+
+  static const int PATHSEG_LINETO_ABS = 4;
+
+  static const int PATHSEG_LINETO_HORIZONTAL_ABS = 12;
+
+  static const int PATHSEG_LINETO_HORIZONTAL_REL = 13;
+
+  static const int PATHSEG_LINETO_REL = 5;
+
+  static const int PATHSEG_LINETO_VERTICAL_ABS = 14;
+
+  static const int PATHSEG_LINETO_VERTICAL_REL = 15;
+
+  static const int PATHSEG_MOVETO_ABS = 2;
+
+  static const int PATHSEG_MOVETO_REL = 3;
+
+  static const int PATHSEG_UNKNOWN = 0;
+
+  /** @domName SVGPathSeg.pathSegType */
+  final int pathSegType;
+
+  /** @domName SVGPathSeg.pathSegTypeAsLetter */
+  final String pathSegTypeAsLetter;
+}
+
+/// @domName SVGPathSegArcAbs
+class SVGPathSegArcAbs extends SVGPathSeg native "*SVGPathSegArcAbs" {
+
+  /** @domName SVGPathSegArcAbs.angle */
+  num angle;
+
+  /** @domName SVGPathSegArcAbs.largeArcFlag */
+  bool largeArcFlag;
+
+  /** @domName SVGPathSegArcAbs.r1 */
+  num r1;
+
+  /** @domName SVGPathSegArcAbs.r2 */
+  num r2;
+
+  /** @domName SVGPathSegArcAbs.sweepFlag */
+  bool sweepFlag;
+
+  /** @domName SVGPathSegArcAbs.x */
+  num x;
+
+  /** @domName SVGPathSegArcAbs.y */
+  num y;
+}
+
+/// @domName SVGPathSegArcRel
+class SVGPathSegArcRel extends SVGPathSeg native "*SVGPathSegArcRel" {
+
+  /** @domName SVGPathSegArcRel.angle */
+  num angle;
+
+  /** @domName SVGPathSegArcRel.largeArcFlag */
+  bool largeArcFlag;
+
+  /** @domName SVGPathSegArcRel.r1 */
+  num r1;
+
+  /** @domName SVGPathSegArcRel.r2 */
+  num r2;
+
+  /** @domName SVGPathSegArcRel.sweepFlag */
+  bool sweepFlag;
+
+  /** @domName SVGPathSegArcRel.x */
+  num x;
+
+  /** @domName SVGPathSegArcRel.y */
+  num y;
+}
+
+/// @domName SVGPathSegClosePath
+class SVGPathSegClosePath extends SVGPathSeg native "*SVGPathSegClosePath" {
+}
+
+/// @domName SVGPathSegCurvetoCubicAbs
+class SVGPathSegCurvetoCubicAbs extends SVGPathSeg native "*SVGPathSegCurvetoCubicAbs" {
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
+  num x1;
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
+  num x2;
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
+  num y1;
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
+  num y2;
+}
+
+/// @domName SVGPathSegCurvetoCubicRel
+class SVGPathSegCurvetoCubicRel extends SVGPathSeg native "*SVGPathSegCurvetoCubicRel" {
+
+  /** @domName SVGPathSegCurvetoCubicRel.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoCubicRel.x1 */
+  num x1;
+
+  /** @domName SVGPathSegCurvetoCubicRel.x2 */
+  num x2;
+
+  /** @domName SVGPathSegCurvetoCubicRel.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoCubicRel.y1 */
+  num y1;
+
+  /** @domName SVGPathSegCurvetoCubicRel.y2 */
+  num y2;
+}
+
+/// @domName SVGPathSegCurvetoCubicSmoothAbs
+class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg native "*SVGPathSegCurvetoCubicSmoothAbs" {
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
+  num x2;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
+  num y2;
+}
+
+/// @domName SVGPathSegCurvetoCubicSmoothRel
+class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg native "*SVGPathSegCurvetoCubicSmoothRel" {
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
+  num x2;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
+  num y2;
+}
+
+/// @domName SVGPathSegCurvetoQuadraticAbs
+class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticAbs" {
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
+  num x1;
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
+  num y1;
+}
+
+/// @domName SVGPathSegCurvetoQuadraticRel
+class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticRel" {
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
+  num x1;
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y */
+  num y;
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
+  num y1;
+}
+
+/// @domName SVGPathSegCurvetoQuadraticSmoothAbs
+class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticSmoothAbs" {
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
+  num y;
+}
+
+/// @domName SVGPathSegCurvetoQuadraticSmoothRel
+class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg native "*SVGPathSegCurvetoQuadraticSmoothRel" {
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
+  num x;
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
+  num y;
+}
+
+/// @domName SVGPathSegLinetoAbs
+class SVGPathSegLinetoAbs extends SVGPathSeg native "*SVGPathSegLinetoAbs" {
+
+  /** @domName SVGPathSegLinetoAbs.x */
+  num x;
+
+  /** @domName SVGPathSegLinetoAbs.y */
+  num y;
+}
+
+/// @domName SVGPathSegLinetoHorizontalAbs
+class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg native "*SVGPathSegLinetoHorizontalAbs" {
+
+  /** @domName SVGPathSegLinetoHorizontalAbs.x */
+  num x;
+}
+
+/// @domName SVGPathSegLinetoHorizontalRel
+class SVGPathSegLinetoHorizontalRel extends SVGPathSeg native "*SVGPathSegLinetoHorizontalRel" {
+
+  /** @domName SVGPathSegLinetoHorizontalRel.x */
+  num x;
+}
+
+/// @domName SVGPathSegLinetoRel
+class SVGPathSegLinetoRel extends SVGPathSeg native "*SVGPathSegLinetoRel" {
+
+  /** @domName SVGPathSegLinetoRel.x */
+  num x;
+
+  /** @domName SVGPathSegLinetoRel.y */
+  num y;
+}
+
+/// @domName SVGPathSegLinetoVerticalAbs
+class SVGPathSegLinetoVerticalAbs extends SVGPathSeg native "*SVGPathSegLinetoVerticalAbs" {
+
+  /** @domName SVGPathSegLinetoVerticalAbs.y */
+  num y;
+}
+
+/// @domName SVGPathSegLinetoVerticalRel
+class SVGPathSegLinetoVerticalRel extends SVGPathSeg native "*SVGPathSegLinetoVerticalRel" {
+
+  /** @domName SVGPathSegLinetoVerticalRel.y */
+  num y;
+}
+
+/// @domName SVGPathSegList
+class SVGPathSegList implements JavaScriptIndexingBehavior, List<SVGPathSeg> native "*SVGPathSegList" {
+
+  /** @domName SVGPathSegList.numberOfItems */
+  final int numberOfItems;
+
+  SVGPathSeg operator[](int index) => JS("SVGPathSeg", "#[#]", this, index);
+
+  void operator[]=(int index, SVGPathSeg value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGPathSeg> mixins.
+  // SVGPathSeg is the element type.
+
+  // From Iterable<SVGPathSeg>:
+
+  Iterator<SVGPathSeg> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGPathSeg>(this);
+  }
+
+  // From Collection<SVGPathSeg>:
+
+  void add(SVGPathSeg value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGPathSeg value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGPathSeg> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGPathSeg element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGPathSeg element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGPathSeg element)) => _Collections.map(this, [], f);
+
+  Collection<SVGPathSeg> filter(bool f(SVGPathSeg element)) =>
+     _Collections.filter(this, <SVGPathSeg>[], f);
+
+  bool every(bool f(SVGPathSeg element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGPathSeg element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGPathSeg>:
+
+  void sort([Comparator<SVGPathSeg> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGPathSeg element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGPathSeg element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGPathSeg get last => this[length - 1];
+
+  SVGPathSeg removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGPathSeg> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGPathSeg initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGPathSeg> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGPathSeg>[]);
+
+  // -- end List<SVGPathSeg> mixins.
+
+  /** @domName SVGPathSegList.appendItem */
+  SVGPathSeg appendItem(SVGPathSeg newItem) native;
+
+  /** @domName SVGPathSegList.clear */
+  void clear() native;
+
+  /** @domName SVGPathSegList.getItem */
+  SVGPathSeg getItem(int index) native;
+
+  /** @domName SVGPathSegList.initialize */
+  SVGPathSeg initialize(SVGPathSeg newItem) native;
+
+  /** @domName SVGPathSegList.insertItemBefore */
+  SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index) native;
+
+  /** @domName SVGPathSegList.removeItem */
+  SVGPathSeg removeItem(int index) native;
+
+  /** @domName SVGPathSegList.replaceItem */
+  SVGPathSeg replaceItem(SVGPathSeg newItem, int index) native;
+}
+
+/// @domName SVGPathSegMovetoAbs
+class SVGPathSegMovetoAbs extends SVGPathSeg native "*SVGPathSegMovetoAbs" {
+
+  /** @domName SVGPathSegMovetoAbs.x */
+  num x;
+
+  /** @domName SVGPathSegMovetoAbs.y */
+  num y;
+}
+
+/// @domName SVGPathSegMovetoRel
+class SVGPathSegMovetoRel extends SVGPathSeg native "*SVGPathSegMovetoRel" {
+
+  /** @domName SVGPathSegMovetoRel.x */
+  num x;
+
+  /** @domName SVGPathSegMovetoRel.y */
+  num y;
+}
+
+/// @domName SVGPatternElement
+class SVGPatternElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGFitToViewBox, SVGExternalResourcesRequired native "*SVGPatternElement" {
+
+  /** @domName SVGPatternElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGPatternElement.patternContentUnits */
+  final SVGAnimatedEnumeration patternContentUnits;
+
+  /** @domName SVGPatternElement.patternTransform */
+  final SVGAnimatedTransformList patternTransform;
+
+  /** @domName SVGPatternElement.patternUnits */
+  final SVGAnimatedEnumeration patternUnits;
+
+  /** @domName SVGPatternElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGPatternElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGPatternElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGFitToViewBox.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGPoint
+class SVGPoint native "*SVGPoint" {
+
+  /** @domName SVGPoint.x */
+  num x;
+
+  /** @domName SVGPoint.y */
+  num y;
+
+  /** @domName SVGPoint.matrixTransform */
+  SVGPoint matrixTransform(SVGMatrix matrix) native;
+}
+
+/// @domName SVGPointList
+class SVGPointList native "*SVGPointList" {
+
+  /** @domName SVGPointList.numberOfItems */
+  final int numberOfItems;
+
+  /** @domName SVGPointList.appendItem */
+  SVGPoint appendItem(SVGPoint item) native;
+
+  /** @domName SVGPointList.clear */
+  void clear() native;
+
+  /** @domName SVGPointList.getItem */
+  SVGPoint getItem(int index) native;
+
+  /** @domName SVGPointList.initialize */
+  SVGPoint initialize(SVGPoint item) native;
+
+  /** @domName SVGPointList.insertItemBefore */
+  SVGPoint insertItemBefore(SVGPoint item, int index) native;
+
+  /** @domName SVGPointList.removeItem */
+  SVGPoint removeItem(int index) native;
+
+  /** @domName SVGPointList.replaceItem */
+  SVGPoint replaceItem(SVGPoint item, int index) native;
+}
+
+/// @domName SVGPolygonElement
+class SVGPolygonElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPolygonElement" {
+
+  /** @domName SVGPolygonElement.animatedPoints */
+  final SVGPointList animatedPoints;
+
+  /** @domName SVGPolygonElement.points */
+  final SVGPointList points;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGPolylineElement
+class SVGPolylineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGPolylineElement" {
+
+  /** @domName SVGPolylineElement.animatedPoints */
+  final SVGPointList animatedPoints;
+
+  /** @domName SVGPolylineElement.points */
+  final SVGPointList points;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGPreserveAspectRatio
+class SVGPreserveAspectRatio native "*SVGPreserveAspectRatio" {
+
+  static const int SVG_MEETORSLICE_MEET = 1;
+
+  static const int SVG_MEETORSLICE_SLICE = 2;
+
+  static const int SVG_MEETORSLICE_UNKNOWN = 0;
+
+  static const int SVG_PRESERVEASPECTRATIO_NONE = 1;
+
+  static const int SVG_PRESERVEASPECTRATIO_UNKNOWN = 0;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMAXYMID = 7;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMIDYMID = 6;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMINYMAX = 8;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMINYMID = 5;
+
+  static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
+
+  /** @domName SVGPreserveAspectRatio.align */
+  int align;
+
+  /** @domName SVGPreserveAspectRatio.meetOrSlice */
+  int meetOrSlice;
+}
+
+/// @domName SVGRadialGradientElement
+class SVGRadialGradientElement extends SVGGradientElement native "*SVGRadialGradientElement" {
+
+  /** @domName SVGRadialGradientElement.cx */
+  final SVGAnimatedLength cx;
+
+  /** @domName SVGRadialGradientElement.cy */
+  final SVGAnimatedLength cy;
+
+  /** @domName SVGRadialGradientElement.fr */
+  final SVGAnimatedLength fr;
+
+  /** @domName SVGRadialGradientElement.fx */
+  final SVGAnimatedLength fx;
+
+  /** @domName SVGRadialGradientElement.fy */
+  final SVGAnimatedLength fy;
+
+  /** @domName SVGRadialGradientElement.r */
+  final SVGAnimatedLength r;
+}
+
+/// @domName SVGRect
+class SVGRect native "*SVGRect" {
+
+  /** @domName SVGRect.height */
+  num height;
+
+  /** @domName SVGRect.width */
+  num width;
+
+  /** @domName SVGRect.x */
+  num x;
+
+  /** @domName SVGRect.y */
+  num y;
+}
+
+/// @domName SVGRectElement
+class SVGRectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGRectElement" {
+
+  /** @domName SVGRectElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGRectElement.rx */
+  final SVGAnimatedLength rx;
+
+  /** @domName SVGRectElement.ry */
+  final SVGAnimatedLength ry;
+
+  /** @domName SVGRectElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGRectElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGRectElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGRenderingIntent
+class SVGRenderingIntent native "*SVGRenderingIntent" {
+
+  static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
+
+  static const int RENDERING_INTENT_AUTO = 1;
+
+  static const int RENDERING_INTENT_PERCEPTUAL = 2;
+
+  static const int RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3;
+
+  static const int RENDERING_INTENT_SATURATION = 4;
+
+  static const int RENDERING_INTENT_UNKNOWN = 0;
+}
+// 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 SVGSVGElement extends SVGElement implements SVGZoomAndPan, SVGLocatable, SVGLangSpace, SVGTests, SVGStylable, SVGFitToViewBox, SVGExternalResourcesRequired native "*SVGSVGElement" {
+  factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
+
+
+  /** @domName SVGSVGElement.contentScriptType */
+  String contentScriptType;
+
+  /** @domName SVGSVGElement.contentStyleType */
+  String contentStyleType;
+
+  /** @domName SVGSVGElement.currentScale */
+  num currentScale;
+
+  /** @domName SVGSVGElement.currentTranslate */
+  final SVGPoint currentTranslate;
+
+  /** @domName SVGSVGElement.currentView */
+  final SVGViewSpec currentView;
+
+  /** @domName SVGSVGElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
+  final num pixelUnitToMillimeterX;
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
+  final num pixelUnitToMillimeterY;
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterX */
+  final num screenPixelToMillimeterX;
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterY */
+  final num screenPixelToMillimeterY;
+
+  /** @domName SVGSVGElement.useCurrentView */
+  final bool useCurrentView;
+
+  /** @domName SVGSVGElement.viewport */
+  final SVGRect viewport;
+
+  /** @domName SVGSVGElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGSVGElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGSVGElement.y */
+  final SVGAnimatedLength y;
+
+  /** @domName SVGSVGElement.animationsPaused */
+  bool animationsPaused() native;
+
+  /** @domName SVGSVGElement.checkEnclosure */
+  bool checkEnclosure(SVGElement element, SVGRect rect) native;
+
+  /** @domName SVGSVGElement.checkIntersection */
+  bool checkIntersection(SVGElement element, SVGRect rect) native;
+
+  /** @domName SVGSVGElement.createSVGAngle */
+  SVGAngle createSVGAngle() native;
+
+  /** @domName SVGSVGElement.createSVGLength */
+  SVGLength createSVGLength() native;
+
+  /** @domName SVGSVGElement.createSVGMatrix */
+  SVGMatrix createSVGMatrix() native;
+
+  /** @domName SVGSVGElement.createSVGNumber */
+  SVGNumber createSVGNumber() native;
+
+  /** @domName SVGSVGElement.createSVGPoint */
+  SVGPoint createSVGPoint() native;
+
+  /** @domName SVGSVGElement.createSVGRect */
+  SVGRect createSVGRect() native;
+
+  /** @domName SVGSVGElement.createSVGTransform */
+  SVGTransform createSVGTransform() native;
+
+  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
+  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native;
+
+  /** @domName SVGSVGElement.deselectAll */
+  void deselectAll() native;
+
+  /** @domName SVGSVGElement.forceRedraw */
+  void forceRedraw() native;
+
+  /** @domName SVGSVGElement.getCurrentTime */
+  num getCurrentTime() native;
+
+  /** @domName SVGSVGElement.getElementById */
+  Element getElementById(String elementId) native;
+
+  /** @domName SVGSVGElement.getEnclosureList */
+  List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement) native;
+
+  /** @domName SVGSVGElement.getIntersectionList */
+  List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement) native;
+
+  /** @domName SVGSVGElement.pauseAnimations */
+  void pauseAnimations() native;
+
+  /** @domName SVGSVGElement.setCurrentTime */
+  void setCurrentTime(num seconds) native;
+
+  /** @domName SVGSVGElement.suspendRedraw */
+  int suspendRedraw(int maxWaitMilliseconds) native;
+
+  /** @domName SVGSVGElement.unpauseAnimations */
+  void unpauseAnimations() native;
+
+  /** @domName SVGSVGElement.unsuspendRedraw */
+  void unsuspendRedraw(int suspendHandleId) native;
+
+  /** @domName SVGSVGElement.unsuspendRedrawAll */
+  void unsuspendRedrawAll() native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGFitToViewBox.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGZoomAndPan
+
+  /** @domName SVGZoomAndPan.zoomAndPan */
+  int zoomAndPan;
+
+}
+
+/// @domName SVGScriptElement
+class SVGScriptElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired native "*SVGScriptElement" {
+
+  /** @domName SVGScriptElement.type */
+  String type;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGSetElement
+class SVGSetElement extends SVGAnimationElement native "*SVGSetElement" {
+}
+
+/// @domName SVGStopElement
+class SVGStopElement extends SVGElement implements SVGStylable native "*SVGStopElement" {
+
+  /** @domName SVGStopElement.offset */
+  final SVGAnimatedNumber offset;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGStringList
+class SVGStringList implements JavaScriptIndexingBehavior, List<String> native "*SVGStringList" {
+
+  /** @domName SVGStringList.numberOfItems */
+  final int numberOfItems;
+
+  String operator[](int index) => JS("String", "#[#]", this, index);
+
+  void operator[]=(int index, String value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<String> mixins.
+  // String is the element type.
+
+  // From Iterable<String>:
+
+  Iterator<String> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<String>(this);
+  }
+
+  // From Collection<String>:
+
+  void add(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<String> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(String element) => _Collections.contains(this, element);
+
+  void forEach(void f(String element)) => _Collections.forEach(this, f);
+
+  Collection map(f(String element)) => _Collections.map(this, [], f);
+
+  Collection<String> filter(bool f(String element)) =>
+     _Collections.filter(this, <String>[], f);
+
+  bool every(bool f(String element)) => _Collections.every(this, f);
+
+  bool some(bool f(String element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<String>:
+
+  void sort([Comparator<String> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(String element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(String element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  String get last => this[length - 1];
+
+  String removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [String initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<String> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <String>[]);
+
+  // -- end List<String> mixins.
+
+  /** @domName SVGStringList.appendItem */
+  String appendItem(String item) native;
+
+  /** @domName SVGStringList.clear */
+  void clear() native;
+
+  /** @domName SVGStringList.getItem */
+  String getItem(int index) native;
+
+  /** @domName SVGStringList.initialize */
+  String initialize(String item) native;
+
+  /** @domName SVGStringList.insertItemBefore */
+  String insertItemBefore(String item, int index) native;
+
+  /** @domName SVGStringList.removeItem */
+  String removeItem(int index) native;
+
+  /** @domName SVGStringList.replaceItem */
+  String replaceItem(String item, int index) native;
+}
+/// @domName SVGStylable
+abstract class SVGStylable {
+
+  SVGAnimatedString className;
+
+  CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name);
+}
+
+/// @domName SVGStyleElement
+class SVGStyleElement extends SVGElement implements SVGLangSpace native "*SVGStyleElement" {
+
+  /** @domName SVGStyleElement.disabled */
+  bool disabled;
+
+  /** @domName SVGStyleElement.media */
+  String media;
+
+  // Shadowing definition.
+  /** @domName SVGStyleElement.title */
+  String get title => JS("String", "#.title", this);
+
+  /** @domName SVGStyleElement.title */
+  void set title(String value) {
+    JS("void", "#.title = #", this, value);
+  }
+
+  /** @domName SVGStyleElement.type */
+  String type;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+}
+
+/// @domName SVGSwitchElement
+class SVGSwitchElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired native "*SVGSwitchElement" {
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGSymbolElement
+class SVGSymbolElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable native "*SVGSymbolElement" {
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGFitToViewBox.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGTRefElement
+class SVGTRefElement extends SVGTextPositioningElement implements SVGURIReference native "*SVGTRefElement" {
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGTSpanElement
+class SVGTSpanElement extends SVGTextPositioningElement native "*SVGTSpanElement" {
+}
+/// @domName SVGTests
+abstract class SVGTests {
+
+  SVGStringList requiredExtensions;
+
+  SVGStringList requiredFeatures;
+
+  SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension);
+}
+
+/// @domName SVGTextContentElement
+class SVGTextContentElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired native "*SVGTextContentElement" {
+
+  static const int LENGTHADJUST_SPACING = 1;
+
+  static const int LENGTHADJUST_SPACINGANDGLYPHS = 2;
+
+  static const int LENGTHADJUST_UNKNOWN = 0;
+
+  /** @domName SVGTextContentElement.lengthAdjust */
+  final SVGAnimatedEnumeration lengthAdjust;
+
+  /** @domName SVGTextContentElement.textLength */
+  final SVGAnimatedLength textLength;
+
+  /** @domName SVGTextContentElement.getCharNumAtPosition */
+  int getCharNumAtPosition(SVGPoint point) native;
+
+  /** @domName SVGTextContentElement.getComputedTextLength */
+  num getComputedTextLength() native;
+
+  /** @domName SVGTextContentElement.getEndPositionOfChar */
+  SVGPoint getEndPositionOfChar(int offset) native;
+
+  /** @domName SVGTextContentElement.getExtentOfChar */
+  SVGRect getExtentOfChar(int offset) native;
+
+  /** @domName SVGTextContentElement.getNumberOfChars */
+  int getNumberOfChars() native;
+
+  /** @domName SVGTextContentElement.getRotationOfChar */
+  num getRotationOfChar(int offset) native;
+
+  /** @domName SVGTextContentElement.getStartPositionOfChar */
+  SVGPoint getStartPositionOfChar(int offset) native;
+
+  /** @domName SVGTextContentElement.getSubStringLength */
+  num getSubStringLength(int offset, int length) native;
+
+  /** @domName SVGTextContentElement.selectSubString */
+  void selectSubString(int offset, int length) native;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+}
+
+/// @domName SVGTextElement
+class SVGTextElement extends SVGTextPositioningElement implements SVGTransformable native "*SVGTextElement" {
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+}
+
+/// @domName SVGTextPathElement
+class SVGTextPathElement extends SVGTextContentElement implements SVGURIReference native "*SVGTextPathElement" {
+
+  static const int TEXTPATH_METHODTYPE_ALIGN = 1;
+
+  static const int TEXTPATH_METHODTYPE_STRETCH = 2;
+
+  static const int TEXTPATH_METHODTYPE_UNKNOWN = 0;
+
+  static const int TEXTPATH_SPACINGTYPE_AUTO = 1;
+
+  static const int TEXTPATH_SPACINGTYPE_EXACT = 2;
+
+  static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
+
+  /** @domName SVGTextPathElement.method */
+  final SVGAnimatedEnumeration method;
+
+  /** @domName SVGTextPathElement.spacing */
+  final SVGAnimatedEnumeration spacing;
+
+  /** @domName SVGTextPathElement.startOffset */
+  final SVGAnimatedLength startOffset;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGTextPositioningElement
+class SVGTextPositioningElement extends SVGTextContentElement native "*SVGTextPositioningElement" {
+
+  /** @domName SVGTextPositioningElement.dx */
+  final SVGAnimatedLengthList dx;
+
+  /** @domName SVGTextPositioningElement.dy */
+  final SVGAnimatedLengthList dy;
+
+  /** @domName SVGTextPositioningElement.rotate */
+  final SVGAnimatedNumberList rotate;
+
+  /** @domName SVGTextPositioningElement.x */
+  final SVGAnimatedLengthList x;
+
+  /** @domName SVGTextPositioningElement.y */
+  final SVGAnimatedLengthList y;
+}
+
+/// @domName SVGTitleElement
+class SVGTitleElement extends SVGElement implements SVGLangSpace, SVGStylable native "*SVGTitleElement" {
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+}
+
+/// @domName SVGTransform
+class SVGTransform native "*SVGTransform" {
+
+  static const int SVG_TRANSFORM_MATRIX = 1;
+
+  static const int SVG_TRANSFORM_ROTATE = 4;
+
+  static const int SVG_TRANSFORM_SCALE = 3;
+
+  static const int SVG_TRANSFORM_SKEWX = 5;
+
+  static const int SVG_TRANSFORM_SKEWY = 6;
+
+  static const int SVG_TRANSFORM_TRANSLATE = 2;
+
+  static const int SVG_TRANSFORM_UNKNOWN = 0;
+
+  /** @domName SVGTransform.angle */
+  final num angle;
+
+  /** @domName SVGTransform.matrix */
+  final SVGMatrix matrix;
+
+  /** @domName SVGTransform.type */
+  final int type;
+
+  /** @domName SVGTransform.setMatrix */
+  void setMatrix(SVGMatrix matrix) native;
+
+  /** @domName SVGTransform.setRotate */
+  void setRotate(num angle, num cx, num cy) native;
+
+  /** @domName SVGTransform.setScale */
+  void setScale(num sx, num sy) native;
+
+  /** @domName SVGTransform.setSkewX */
+  void setSkewX(num angle) native;
+
+  /** @domName SVGTransform.setSkewY */
+  void setSkewY(num angle) native;
+
+  /** @domName SVGTransform.setTranslate */
+  void setTranslate(num tx, num ty) native;
+}
+
+/// @domName SVGTransformList
+class SVGTransformList implements JavaScriptIndexingBehavior, List<SVGTransform> native "*SVGTransformList" {
+
+  /** @domName SVGTransformList.numberOfItems */
+  final int numberOfItems;
+
+  SVGTransform operator[](int index) => JS("SVGTransform", "#[#]", this, index);
+
+  void operator[]=(int index, SVGTransform value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGTransform> mixins.
+  // SVGTransform is the element type.
+
+  // From Iterable<SVGTransform>:
+
+  Iterator<SVGTransform> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGTransform>(this);
+  }
+
+  // From Collection<SVGTransform>:
+
+  void add(SVGTransform value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGTransform value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGTransform> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGTransform element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGTransform element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGTransform element)) => _Collections.map(this, [], f);
+
+  Collection<SVGTransform> filter(bool f(SVGTransform element)) =>
+     _Collections.filter(this, <SVGTransform>[], f);
+
+  bool every(bool f(SVGTransform element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGTransform element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGTransform>:
+
+  void sort([Comparator<SVGTransform> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGTransform element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGTransform element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGTransform get last => this[length - 1];
+
+  SVGTransform removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGTransform> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGTransform initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGTransform> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGTransform>[]);
+
+  // -- end List<SVGTransform> mixins.
+
+  /** @domName SVGTransformList.appendItem */
+  SVGTransform appendItem(SVGTransform item) native;
+
+  /** @domName SVGTransformList.clear */
+  void clear() native;
+
+  /** @domName SVGTransformList.consolidate */
+  SVGTransform consolidate() native;
+
+  /** @domName SVGTransformList.createSVGTransformFromMatrix */
+  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native;
+
+  /** @domName SVGTransformList.getItem */
+  SVGTransform getItem(int index) native;
+
+  /** @domName SVGTransformList.initialize */
+  SVGTransform initialize(SVGTransform item) native;
+
+  /** @domName SVGTransformList.insertItemBefore */
+  SVGTransform insertItemBefore(SVGTransform item, int index) native;
+
+  /** @domName SVGTransformList.removeItem */
+  SVGTransform removeItem(int index) native;
+
+  /** @domName SVGTransformList.replaceItem */
+  SVGTransform replaceItem(SVGTransform item, int index) native;
+}
+/// @domName SVGTransformable
+abstract class SVGTransformable implements SVGLocatable {
+
+  SVGAnimatedTransformList transform;
+
+  // From SVGLocatable
+
+  SVGElement farthestViewportElement;
+
+  SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox();
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM();
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM();
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element);
+}
+/// @domName SVGURIReference
+abstract class SVGURIReference {
+
+  SVGAnimatedString href;
+}
+
+/// @domName SVGUnitTypes
+class SVGUnitTypes native "*SVGUnitTypes" {
+
+  static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
+
+  static const int SVG_UNIT_TYPE_UNKNOWN = 0;
+
+  static const int SVG_UNIT_TYPE_USERSPACEONUSE = 1;
+}
+
+/// @domName SVGUseElement
+class SVGUseElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable native "*SVGUseElement" {
+
+  /** @domName SVGUseElement.animatedInstanceRoot */
+  final SVGElementInstance animatedInstanceRoot;
+
+  /** @domName SVGUseElement.height */
+  final SVGAnimatedLength height;
+
+  /** @domName SVGUseElement.instanceRoot */
+  final SVGElementInstance instanceRoot;
+
+  /** @domName SVGUseElement.width */
+  final SVGAnimatedLength width;
+
+  /** @domName SVGUseElement.x */
+  final SVGAnimatedLength x;
+
+  /** @domName SVGUseElement.y */
+  final SVGAnimatedLength y;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGLangSpace
+
+  /** @domName SVGLangSpace.xmllang */
+  String xmllang;
+
+  /** @domName SVGLangSpace.xmlspace */
+  String xmlspace;
+
+  // From SVGLocatable
+
+  /** @domName SVGLocatable.farthestViewportElement */
+  final SVGElement farthestViewportElement;
+
+  /** @domName SVGLocatable.nearestViewportElement */
+  final SVGElement nearestViewportElement;
+
+  /** @domName SVGLocatable.getBBox */
+  SVGRect getBBox() native;
+
+  /** @domName SVGLocatable.getCTM */
+  SVGMatrix getCTM() native;
+
+  /** @domName SVGLocatable.getScreenCTM */
+  SVGMatrix getScreenCTM() native;
+
+  /** @domName SVGLocatable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native;
+
+  // From SVGStylable
+
+  /** @domName SVGStylable.className */
+  SVGAnimatedString get $dom_svgClassName => JS("SVGAnimatedString", "#.className", this);
+
+  // Use implementation from Element.
+  // final CSSStyleDeclaration style;
+
+  /** @domName SVGStylable.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native;
+
+  // From SVGTests
+
+  /** @domName SVGTests.requiredExtensions */
+  final SVGStringList requiredExtensions;
+
+  /** @domName SVGTests.requiredFeatures */
+  final SVGStringList requiredFeatures;
+
+  /** @domName SVGTests.systemLanguage */
+  final SVGStringList systemLanguage;
+
+  /** @domName SVGTests.hasExtension */
+  bool hasExtension(String extension) native;
+
+  // From SVGTransformable
+
+  /** @domName SVGTransformable.transform */
+  final SVGAnimatedTransformList transform;
+
+  // From SVGURIReference
+
+  /** @domName SVGURIReference.href */
+  final SVGAnimatedString href;
+}
+
+/// @domName SVGVKernElement
+class SVGVKernElement extends SVGElement native "*SVGVKernElement" {
+}
+
+/// @domName SVGViewElement
+class SVGViewElement extends SVGElement implements SVGFitToViewBox, SVGZoomAndPan, SVGExternalResourcesRequired native "*SVGViewElement" {
+
+  /** @domName SVGViewElement.viewTarget */
+  final SVGStringList viewTarget;
+
+  // From SVGExternalResourcesRequired
+
+  /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
+  final SVGAnimatedBoolean externalResourcesRequired;
+
+  // From SVGFitToViewBox
+
+  /** @domName SVGFitToViewBox.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGFitToViewBox.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  // From SVGZoomAndPan
+
+  /** @domName SVGZoomAndPan.zoomAndPan */
+  int zoomAndPan;
+}
+
+/// @domName SVGViewSpec
+class SVGViewSpec native "*SVGViewSpec" {
+
+  /** @domName SVGViewSpec.preserveAspectRatio */
+  final SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+
+  /** @domName SVGViewSpec.preserveAspectRatioString */
+  final String preserveAspectRatioString;
+
+  /** @domName SVGViewSpec.transform */
+  final SVGTransformList transform;
+
+  /** @domName SVGViewSpec.transformString */
+  final String transformString;
+
+  /** @domName SVGViewSpec.viewBox */
+  final SVGAnimatedRect viewBox;
+
+  /** @domName SVGViewSpec.viewBoxString */
+  final String viewBoxString;
+
+  /** @domName SVGViewSpec.viewTarget */
+  final SVGElement viewTarget;
+
+  /** @domName SVGViewSpec.viewTargetString */
+  final String viewTargetString;
+
+  /** @domName SVGViewSpec.zoomAndPan */
+  int zoomAndPan;
+}
+/// @domName SVGZoomAndPan
+abstract class SVGZoomAndPan {
+
+  static const int SVG_ZOOMANDPAN_DISABLE = 1;
+
+  static const int SVG_ZOOMANDPAN_MAGNIFY = 2;
+
+  static const int SVG_ZOOMANDPAN_UNKNOWN = 0;
+
+  int zoomAndPan;
+}
+
+/// @domName SVGZoomEvent
+class SVGZoomEvent extends UIEvent native "*SVGZoomEvent" {
+
+  /** @domName SVGZoomEvent.newScale */
+  final num newScale;
+
+  /** @domName SVGZoomEvent.newTranslate */
+  final SVGPoint newTranslate;
+
+  /** @domName SVGZoomEvent.previousScale */
+  final num previousScale;
+
+  /** @domName SVGZoomEvent.previousTranslate */
+  final SVGPoint previousTranslate;
+
+  /** @domName SVGZoomEvent.zoomRectScreen */
+  final SVGRect zoomRectScreen;
+}
+
+/// @domName Screen
+class Screen native "*Screen" {
+
+  /** @domName Screen.availHeight */
+  final int availHeight;
+
+  /** @domName Screen.availLeft */
+  final int availLeft;
+
+  /** @domName Screen.availTop */
+  final int availTop;
+
+  /** @domName Screen.availWidth */
+  final int availWidth;
+
+  /** @domName Screen.colorDepth */
+  final int colorDepth;
+
+  /** @domName Screen.height */
+  final int height;
+
+  /** @domName Screen.pixelDepth */
+  final int pixelDepth;
+
+  /** @domName Screen.width */
+  final int width;
+}
+
+/// @domName HTMLScriptElement
+class ScriptElement extends Element implements Element native "*HTMLScriptElement" {
+
+  factory ScriptElement() => _Elements.createScriptElement();
+
+  /** @domName HTMLScriptElement.async */
+  bool async;
+
+  /** @domName HTMLScriptElement.charset */
+  String charset;
+
+  /** @domName HTMLScriptElement.crossOrigin */
+  String crossOrigin;
+
+  /** @domName HTMLScriptElement.defer */
+  bool defer;
+
+  /** @domName HTMLScriptElement.event */
+  String event;
+
+  /** @domName HTMLScriptElement.htmlFor */
+  String htmlFor;
+
+  /** @domName HTMLScriptElement.src */
+  String src;
+
+  /** @domName HTMLScriptElement.type */
+  String type;
+}
+
+/// @domName ScriptProcessorNode
+class ScriptProcessorNode extends AudioNode implements EventTarget native "*ScriptProcessorNode" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  ScriptProcessorNodeEvents get on =>
+    new ScriptProcessorNodeEvents(this);
+
+  /** @domName ScriptProcessorNode.bufferSize */
+  final int bufferSize;
+}
+
+class ScriptProcessorNodeEvents extends Events {
+  ScriptProcessorNodeEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get audioProcess => this['audioprocess'];
+}
+
+/// @domName ScriptProfile
+class ScriptProfile native "*ScriptProfile" {
+
+  /** @domName ScriptProfile.head */
+  final ScriptProfileNode head;
+
+  /** @domName ScriptProfile.title */
+  final String title;
+
+  /** @domName ScriptProfile.uid */
+  final int uid;
+}
+
+/// @domName ScriptProfileNode
+class ScriptProfileNode native "*ScriptProfileNode" {
+
+  /** @domName ScriptProfileNode.callUID */
+  final int callUID;
+
+  /** @domName ScriptProfileNode.functionName */
+  final String functionName;
+
+  /** @domName ScriptProfileNode.lineNumber */
+  final int lineNumber;
+
+  /** @domName ScriptProfileNode.numberOfCalls */
+  final int numberOfCalls;
+
+  /** @domName ScriptProfileNode.selfTime */
+  final num selfTime;
+
+  /** @domName ScriptProfileNode.totalTime */
+  final num totalTime;
+
+  /** @domName ScriptProfileNode.url */
+  final String url;
+
+  /** @domName ScriptProfileNode.visible */
+  final bool visible;
+
+  /** @domName ScriptProfileNode.children */
+  List<ScriptProfileNode> children() native;
+}
+// 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 SelectElement extends Element implements Element native "*HTMLSelectElement" {
+
+  factory SelectElement() => _Elements.createSelectElement();
+
+  /** @domName HTMLSelectElement.autofocus */
+  bool autofocus;
+
+  /** @domName HTMLSelectElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLSelectElement.form */
+  final FormElement form;
+
+  /** @domName HTMLSelectElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLSelectElement.length */
+  int length;
+
+  /** @domName HTMLSelectElement.multiple */
+  bool multiple;
+
+  /** @domName HTMLSelectElement.name */
+  String name;
+
+  /** @domName HTMLSelectElement.required */
+  bool required;
+
+  /** @domName HTMLSelectElement.selectedIndex */
+  int selectedIndex;
+
+  /** @domName HTMLSelectElement.size */
+  int size;
+
+  /** @domName HTMLSelectElement.type */
+  final String type;
+
+  /** @domName HTMLSelectElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLSelectElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLSelectElement.value */
+  String value;
+
+  /** @domName HTMLSelectElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLSelectElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLSelectElement.item */
+  Node item(int index) native;
+
+  /** @domName HTMLSelectElement.namedItem */
+  Node namedItem(String name) native;
+
+  /** @domName HTMLSelectElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+
+
+  // Override default options, since IE returns SelectElement itself and it
+  // does not operate as a List.
+  List<OptionElement> get options {
+    return this.elements.filter((e) => e is OptionElement);
+  }
+
+  List<OptionElement> get selectedOptions {
+    // IE does not change the selected flag for single-selection items.
+    if (this.multiple) {
+      return this.options.filter((o) => o.selected);
+    } else {
+      return [this.options[this.selectedIndex]];
+    }
+  }
+}
+
+/// @domName SessionDescription
+class SessionDescription native "*SessionDescription" {
+
+  factory SessionDescription(String sdp) => _SessionDescriptionFactoryProvider.createSessionDescription(sdp);
+
+  /** @domName SessionDescription.addCandidate */
+  void addCandidate(IceCandidate candidate) native;
+
+  /** @domName SessionDescription.toSdp */
+  String toSdp() native;
+}
+
+/// @domName HTMLShadowElement
+class ShadowElement extends Element implements Element native "*HTMLShadowElement" {
+
+  /** @domName HTMLShadowElement.resetStyleInheritance */
+  bool resetStyleInheritance;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class ShadowRoot extends DocumentFragment native "*ShadowRoot" {
+
+  factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
+
+  /** @domName ShadowRoot.activeElement */
+  final Element activeElement;
+
+  /** @domName ShadowRoot.applyAuthorStyles */
+  bool applyAuthorStyles;
+
+  /** @domName ShadowRoot.innerHTML */
+  String innerHTML;
+
+  /** @domName ShadowRoot.resetStyleInheritance */
+  bool resetStyleInheritance;
+
+  /** @domName ShadowRoot.cloneNode */
+  Node clone(bool deep) native "cloneNode";
+
+  /** @domName ShadowRoot.getElementById */
+  Element $dom_getElementById(String elementId) native "getElementById";
+
+  /** @domName ShadowRoot.getElementsByClassName */
+  List<Node> $dom_getElementsByClassName(String className) native "getElementsByClassName";
+
+  /** @domName ShadowRoot.getElementsByTagName */
+  List<Node> $dom_getElementsByTagName(String tagName) native "getElementsByTagName";
+
+  /** @domName ShadowRoot.getSelection */
+  DOMSelection getSelection() native;
+
+  static bool get supported =>
+      JS('bool', '!!(window.ShadowRoot || window.WebKitShadowRoot)');
+}
+
+/// @domName SharedWorker
+class SharedWorker extends AbstractWorker native "*SharedWorker" {
+
+  factory SharedWorker(String scriptURL, [String name]) {
+    if (!?name) {
+      return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL);
+    }
+    return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL, name);
+  }
+
+  /** @domName SharedWorker.port */
+  final MessagePort port;
+}
+
+/// @domName SharedWorkerContext
+class SharedWorkerContext extends WorkerContext native "*SharedWorkerContext" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  SharedWorkerContextEvents get on =>
+    new SharedWorkerContextEvents(this);
+
+  /** @domName SharedWorkerContext.name */
+  final String name;
+}
+
+class SharedWorkerContextEvents extends WorkerContextEvents {
+  SharedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get connect => this['connect'];
+}
+
+/// @domName SourceBuffer
+class SourceBuffer native "*SourceBuffer" {
+
+  /** @domName SourceBuffer.buffered */
+  final TimeRanges buffered;
+
+  /** @domName SourceBuffer.timestampOffset */
+  num timestampOffset;
+
+  /** @domName SourceBuffer.abort */
+  void abort() native;
+
+  /** @domName SourceBuffer.append */
+  void append(Uint8Array data) native;
+}
+
+/// @domName SourceBufferList
+class SourceBufferList extends EventTarget implements JavaScriptIndexingBehavior, List<SourceBuffer> native "*SourceBufferList" {
+
+  /** @domName SourceBufferList.length */
+  final int length;
+
+  SourceBuffer operator[](int index) => JS("SourceBuffer", "#[#]", this, index);
+
+  void operator[]=(int index, SourceBuffer value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SourceBuffer> mixins.
+  // SourceBuffer is the element type.
+
+  // From Iterable<SourceBuffer>:
+
+  Iterator<SourceBuffer> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SourceBuffer>(this);
+  }
+
+  // From Collection<SourceBuffer>:
+
+  void add(SourceBuffer value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SourceBuffer value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SourceBuffer> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SourceBuffer element) => _Collections.contains(this, element);
+
+  void forEach(void f(SourceBuffer element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SourceBuffer element)) => _Collections.map(this, [], f);
+
+  Collection<SourceBuffer> filter(bool f(SourceBuffer element)) =>
+     _Collections.filter(this, <SourceBuffer>[], f);
+
+  bool every(bool f(SourceBuffer element)) => _Collections.every(this, f);
+
+  bool some(bool f(SourceBuffer element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SourceBuffer>:
+
+  void sort([Comparator<SourceBuffer> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SourceBuffer element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SourceBuffer element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SourceBuffer get last => this[length - 1];
+
+  SourceBuffer removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SourceBuffer> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SourceBuffer initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SourceBuffer> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SourceBuffer>[]);
+
+  // -- end List<SourceBuffer> mixins.
+
+  /** @domName SourceBufferList.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName SourceBufferList.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName SourceBufferList.item */
+  SourceBuffer item(int index) native;
+
+  /** @domName SourceBufferList.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+/// @domName HTMLSourceElement
+class SourceElement extends Element implements Element native "*HTMLSourceElement" {
+
+  factory SourceElement() => _Elements.createSourceElement();
+
+  /** @domName HTMLSourceElement.media */
+  String media;
+
+  /** @domName HTMLSourceElement.src */
+  String src;
+
+  /** @domName HTMLSourceElement.type */
+  String type;
+}
+
+/// @domName HTMLSpanElement
+class SpanElement extends Element implements Element native "*HTMLSpanElement" {
+
+  factory SpanElement() => _Elements.createSpanElement();
+}
+
+/// @domName SpeechGrammar
+class SpeechGrammar native "*SpeechGrammar" {
+
+  factory SpeechGrammar() => _SpeechGrammarFactoryProvider.createSpeechGrammar();
+
+  /** @domName SpeechGrammar.src */
+  String src;
+
+  /** @domName SpeechGrammar.weight */
+  num weight;
+}
+
+/// @domName SpeechGrammarList
+class SpeechGrammarList implements JavaScriptIndexingBehavior, List<SpeechGrammar> native "*SpeechGrammarList" {
+
+  factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
+
+  /** @domName SpeechGrammarList.length */
+  final int length;
+
+  SpeechGrammar operator[](int index) => JS("SpeechGrammar", "#[#]", this, index);
+
+  void operator[]=(int index, SpeechGrammar value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SpeechGrammar> mixins.
+  // SpeechGrammar is the element type.
+
+  // From Iterable<SpeechGrammar>:
+
+  Iterator<SpeechGrammar> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SpeechGrammar>(this);
+  }
+
+  // From Collection<SpeechGrammar>:
+
+  void add(SpeechGrammar value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SpeechGrammar value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SpeechGrammar> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SpeechGrammar element) => _Collections.contains(this, element);
+
+  void forEach(void f(SpeechGrammar element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SpeechGrammar element)) => _Collections.map(this, [], f);
+
+  Collection<SpeechGrammar> filter(bool f(SpeechGrammar element)) =>
+     _Collections.filter(this, <SpeechGrammar>[], f);
+
+  bool every(bool f(SpeechGrammar element)) => _Collections.every(this, f);
+
+  bool some(bool f(SpeechGrammar element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SpeechGrammar>:
+
+  void sort([Comparator<SpeechGrammar> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SpeechGrammar element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SpeechGrammar element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SpeechGrammar get last => this[length - 1];
+
+  SpeechGrammar removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SpeechGrammar> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SpeechGrammar initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SpeechGrammar> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SpeechGrammar>[]);
+
+  // -- end List<SpeechGrammar> mixins.
+
+  /** @domName SpeechGrammarList.addFromString */
+  void addFromString(String string, [num weight]) native;
+
+  /** @domName SpeechGrammarList.addFromUri */
+  void addFromUri(String src, [num weight]) native;
+
+  /** @domName SpeechGrammarList.item */
+  SpeechGrammar item(int index) native;
+}
+
+/// @domName SpeechInputEvent
+class SpeechInputEvent extends Event native "*SpeechInputEvent" {
+
+  /** @domName SpeechInputEvent.results */
+  final List<SpeechInputResult> results;
+}
+
+/// @domName SpeechInputResult
+class SpeechInputResult native "*SpeechInputResult" {
+
+  /** @domName SpeechInputResult.confidence */
+  final num confidence;
+
+  /** @domName SpeechInputResult.utterance */
+  final String utterance;
+}
+
+/// @domName SpeechRecognition
+class SpeechRecognition extends EventTarget native "*SpeechRecognition" {
+
+  factory SpeechRecognition() => _SpeechRecognitionFactoryProvider.createSpeechRecognition();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  SpeechRecognitionEvents get on =>
+    new SpeechRecognitionEvents(this);
+
+  /** @domName SpeechRecognition.continuous */
+  bool continuous;
+
+  /** @domName SpeechRecognition.grammars */
+  SpeechGrammarList grammars;
+
+  /** @domName SpeechRecognition.interimResults */
+  bool interimResults;
+
+  /** @domName SpeechRecognition.lang */
+  String lang;
+
+  /** @domName SpeechRecognition.maxAlternatives */
+  int maxAlternatives;
+
+  /** @domName SpeechRecognition.abort */
+  void abort() native;
+
+  /** @domName SpeechRecognition.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName SpeechRecognition.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName SpeechRecognition.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName SpeechRecognition.start */
+  void start() native;
+
+  /** @domName SpeechRecognition.stop */
+  void stop() native;
+}
+
+class SpeechRecognitionEvents extends Events {
+  SpeechRecognitionEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get audioEnd => this['audioend'];
+
+  EventListenerList get audioStart => this['audiostart'];
+
+  EventListenerList get end => this['end'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get noMatch => this['nomatch'];
+
+  EventListenerList get result => this['result'];
+
+  EventListenerList get soundEnd => this['soundend'];
+
+  EventListenerList get soundStart => this['soundstart'];
+
+  EventListenerList get speechEnd => this['speechend'];
+
+  EventListenerList get speechStart => this['speechstart'];
+
+  EventListenerList get start => this['start'];
+}
+
+/// @domName SpeechRecognitionAlternative
+class SpeechRecognitionAlternative native "*SpeechRecognitionAlternative" {
+
+  /** @domName SpeechRecognitionAlternative.confidence */
+  final num confidence;
+
+  /** @domName SpeechRecognitionAlternative.transcript */
+  final String transcript;
+}
+
+/// @domName SpeechRecognitionError
+class SpeechRecognitionError extends Event native "*SpeechRecognitionError" {
+
+  static const int ABORTED = 2;
+
+  static const int AUDIO_CAPTURE = 3;
+
+  static const int BAD_GRAMMAR = 7;
+
+  static const int LANGUAGE_NOT_SUPPORTED = 8;
+
+  static const int NETWORK = 4;
+
+  static const int NOT_ALLOWED = 5;
+
+  static const int NO_SPEECH = 1;
+
+  static const int OTHER = 0;
+
+  static const int SERVICE_NOT_ALLOWED = 6;
+
+  /** @domName SpeechRecognitionError.code */
+  final int code;
+
+  /** @domName SpeechRecognitionError.message */
+  final String message;
+}
+
+/// @domName SpeechRecognitionEvent
+class SpeechRecognitionEvent extends Event native "*SpeechRecognitionEvent" {
+
+  /** @domName SpeechRecognitionEvent.result */
+  final SpeechRecognitionResult result;
+
+  /** @domName SpeechRecognitionEvent.resultHistory */
+  final List<SpeechRecognitionResult> resultHistory;
+
+  /** @domName SpeechRecognitionEvent.resultIndex */
+  final int resultIndex;
+}
+
+/// @domName SpeechRecognitionResult
+class SpeechRecognitionResult native "*SpeechRecognitionResult" {
+
+  /** @domName SpeechRecognitionResult.emma */
+  final Document emma;
+
+  /** @domName SpeechRecognitionResult.finalValue */
+  bool get finalValue => JS("bool", "#.final", this);
+
+  /** @domName SpeechRecognitionResult.length */
+  final int length;
+
+  /** @domName SpeechRecognitionResult.item */
+  SpeechRecognitionAlternative item(int index) native;
+}
+// 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 Storage implements Map<String, String>  native "*Storage" {
+
+  // TODO(nweiz): update this when maps support lazy iteration
+  bool containsValue(String value) => values.some((e) => e == value);
+
+  bool containsKey(String key) => $dom_getItem(key) != null;
+
+  String operator [](String key) => $dom_getItem(key);
+
+  void operator []=(String key, String value) => $dom_setItem(key, value);
+
+  String putIfAbsent(String key, String ifAbsent()) {
+    if (!containsKey(key)) this[key] = ifAbsent();
+    return this[key];
+  }
+
+  String remove(String key) {
+    final value = this[key];
+    $dom_removeItem(key);
+    return value;
+  }
+
+  void clear() => $dom_clear();
+
+  void forEach(void f(String key, String value)) {
+    for (var i = 0; true; i++) {
+      final key = $dom_key(i);
+      if (key == null) return;
+
+      f(key, this[key]);
+    }
+  }
+
+  Collection<String> get keys {
+    final keys = [];
+    forEach((k, v) => keys.add(k));
+    return keys;
+  }
+
+  Collection<String> get values {
+    final values = [];
+    forEach((k, v) => values.add(v));
+    return values;
+  }
+
+  int get length => $dom_length;
+
+  bool get isEmpty => $dom_key(0) == null;
+
+  /** @domName Storage.length */
+  int get $dom_length => JS("int", "#.length", this);
+
+  /** @domName Storage.clear */
+  void $dom_clear() native "clear";
+
+  /** @domName Storage.getItem */
+  String $dom_getItem(String key) native "getItem";
+
+  /** @domName Storage.key */
+  String $dom_key(int index) native "key";
+
+  /** @domName Storage.removeItem */
+  void $dom_removeItem(String key) native "removeItem";
+
+  /** @domName Storage.setItem */
+  void $dom_setItem(String key, String data) native "setItem";
+
+}
+
+/// @domName StorageEvent
+class StorageEvent extends Event native "*StorageEvent" {
+
+  /** @domName StorageEvent.key */
+  final String key;
+
+  /** @domName StorageEvent.newValue */
+  final String newValue;
+
+  /** @domName StorageEvent.oldValue */
+  final String oldValue;
+
+  /** @domName StorageEvent.storageArea */
+  final Storage storageArea;
+
+  /** @domName StorageEvent.url */
+  final String url;
+
+  /** @domName StorageEvent.initStorageEvent */
+  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native;
+}
+
+/// @domName StorageInfo
+class StorageInfo native "*StorageInfo" {
+
+  static const int PERSISTENT = 1;
+
+  static const int TEMPORARY = 0;
+
+  /** @domName StorageInfo.queryUsageAndQuota */
+  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native;
+
+  /** @domName StorageInfo.requestQuota */
+  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void StorageInfoErrorCallback(DOMException error);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void StorageInfoUsageCallback(int currentUsageInBytes, int currentQuotaInBytes);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void StringCallback(String data);
+
+/// @domName HTMLStyleElement
+class StyleElement extends Element implements Element native "*HTMLStyleElement" {
+
+  factory StyleElement() => _Elements.createStyleElement();
+
+  /** @domName HTMLStyleElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLStyleElement.media */
+  String media;
+
+  /** @domName HTMLStyleElement.scoped */
+  bool scoped;
+
+  /** @domName HTMLStyleElement.sheet */
+  final StyleSheet sheet;
+
+  /** @domName HTMLStyleElement.type */
+  String type;
+}
+
+/// @domName StyleMedia
+class StyleMedia native "*StyleMedia" {
+
+  /** @domName StyleMedia.type */
+  final String type;
+
+  /** @domName StyleMedia.matchMedium */
+  bool matchMedium(String mediaquery) native;
+}
+
+/// @domName StyleSheet
+class StyleSheet native "*StyleSheet" {
+
+  /** @domName StyleSheet.disabled */
+  bool disabled;
+
+  /** @domName StyleSheet.href */
+  final String href;
+
+  /** @domName StyleSheet.media */
+  final MediaList media;
+
+  /** @domName StyleSheet.ownerNode */
+  final Node ownerNode;
+
+  /** @domName StyleSheet.parentStyleSheet */
+  final StyleSheet parentStyleSheet;
+
+  /** @domName StyleSheet.title */
+  final String title;
+
+  /** @domName StyleSheet.type */
+  final String type;
+}
+
+/// @domName HTMLTableCaptionElement
+class TableCaptionElement extends Element implements Element native "*HTMLTableCaptionElement" {
+
+  factory TableCaptionElement() => _Elements.createTableCaptionElement();
+
+  /** @domName HTMLTableCaptionElement.align */
+  String align;
+}
+
+/// @domName HTMLTableCellElement
+class TableCellElement extends Element implements Element native "*HTMLTableCellElement" {
+
+  factory TableCellElement() => _Elements.createTableCellElement();
+
+  /** @domName HTMLTableCellElement.abbr */
+  String abbr;
+
+  /** @domName HTMLTableCellElement.align */
+  String align;
+
+  /** @domName HTMLTableCellElement.axis */
+  String axis;
+
+  /** @domName HTMLTableCellElement.bgColor */
+  String bgColor;
+
+  /** @domName HTMLTableCellElement.cellIndex */
+  final int cellIndex;
+
+  /** @domName HTMLTableCellElement.ch */
+  String ch;
+
+  /** @domName HTMLTableCellElement.chOff */
+  String chOff;
+
+  /** @domName HTMLTableCellElement.colSpan */
+  int colSpan;
+
+  /** @domName HTMLTableCellElement.headers */
+  String headers;
+
+  /** @domName HTMLTableCellElement.height */
+  String height;
+
+  /** @domName HTMLTableCellElement.noWrap */
+  bool noWrap;
+
+  /** @domName HTMLTableCellElement.rowSpan */
+  int rowSpan;
+
+  /** @domName HTMLTableCellElement.scope */
+  String scope;
+
+  /** @domName HTMLTableCellElement.vAlign */
+  String vAlign;
+
+  /** @domName HTMLTableCellElement.width */
+  String width;
+}
+
+/// @domName HTMLTableColElement
+class TableColElement extends Element implements Element native "*HTMLTableColElement" {
+
+  factory TableColElement() => _Elements.createTableColElement();
+
+  /** @domName HTMLTableColElement.align */
+  String align;
+
+  /** @domName HTMLTableColElement.ch */
+  String ch;
+
+  /** @domName HTMLTableColElement.chOff */
+  String chOff;
+
+  /** @domName HTMLTableColElement.span */
+  int span;
+
+  /** @domName HTMLTableColElement.vAlign */
+  String vAlign;
+
+  /** @domName HTMLTableColElement.width */
+  String width;
+}
+// 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 TableElement extends Element implements Element native "*HTMLTableElement" {
+
+  factory TableElement() => _Elements.createTableElement();
+
+  /** @domName HTMLTableElement.align */
+  String align;
+
+  /** @domName HTMLTableElement.bgColor */
+  String bgColor;
+
+  /** @domName HTMLTableElement.border */
+  String border;
+
+  /** @domName HTMLTableElement.caption */
+  TableCaptionElement caption;
+
+  /** @domName HTMLTableElement.cellPadding */
+  String cellPadding;
+
+  /** @domName HTMLTableElement.cellSpacing */
+  String cellSpacing;
+
+  /** @domName HTMLTableElement.frame */
+  String frame;
+
+  /** @domName HTMLTableElement.rows */
+  final HTMLCollection rows;
+
+  /** @domName HTMLTableElement.rules */
+  String rules;
+
+  /** @domName HTMLTableElement.summary */
+  String summary;
+
+  /** @domName HTMLTableElement.tBodies */
+  final HTMLCollection tBodies;
+
+  /** @domName HTMLTableElement.tFoot */
+  TableSectionElement tFoot;
+
+  /** @domName HTMLTableElement.tHead */
+  TableSectionElement tHead;
+
+  /** @domName HTMLTableElement.width */
+  String width;
+
+  /** @domName HTMLTableElement.createCaption */
+  Element createCaption() native;
+
+  /** @domName HTMLTableElement.createTFoot */
+  Element createTFoot() native;
+
+  /** @domName HTMLTableElement.createTHead */
+  Element createTHead() native;
+
+  /** @domName HTMLTableElement.deleteCaption */
+  void deleteCaption() native;
+
+  /** @domName HTMLTableElement.deleteRow */
+  void deleteRow(int index) native;
+
+  /** @domName HTMLTableElement.deleteTFoot */
+  void deleteTFoot() native;
+
+  /** @domName HTMLTableElement.deleteTHead */
+  void deleteTHead() native;
+
+  /** @domName HTMLTableElement.insertRow */
+  Element insertRow(int index) native;
+
+
+  Element createTBody() {
+    if (JS('bool', '!!#.createTBody', this)) {
+      return this._createTBody();
+    }
+    var tbody = new Element.tag('tbody');
+    this.elements.add(tbody);
+    return tbody;
+  }
+
+  Element _createTBody() native 'createTBody';
+}
+
+/// @domName HTMLTableRowElement
+class TableRowElement extends Element implements Element native "*HTMLTableRowElement" {
+
+  factory TableRowElement() => _Elements.createTableRowElement();
+
+  /** @domName HTMLTableRowElement.align */
+  String align;
+
+  /** @domName HTMLTableRowElement.bgColor */
+  String bgColor;
+
+  /** @domName HTMLTableRowElement.cells */
+  final HTMLCollection cells;
+
+  /** @domName HTMLTableRowElement.ch */
+  String ch;
+
+  /** @domName HTMLTableRowElement.chOff */
+  String chOff;
+
+  /** @domName HTMLTableRowElement.rowIndex */
+  final int rowIndex;
+
+  /** @domName HTMLTableRowElement.sectionRowIndex */
+  final int sectionRowIndex;
+
+  /** @domName HTMLTableRowElement.vAlign */
+  String vAlign;
+
+  /** @domName HTMLTableRowElement.deleteCell */
+  void deleteCell(int index) native;
+
+  /** @domName HTMLTableRowElement.insertCell */
+  Element insertCell(int index) native;
+}
+
+/// @domName HTMLTableSectionElement
+class TableSectionElement extends Element implements Element native "*HTMLTableSectionElement" {
+
+  /** @domName HTMLTableSectionElement.align */
+  String align;
+
+  /** @domName HTMLTableSectionElement.ch */
+  String ch;
+
+  /** @domName HTMLTableSectionElement.chOff */
+  String chOff;
+
+  /** @domName HTMLTableSectionElement.rows */
+  final HTMLCollection rows;
+
+  /** @domName HTMLTableSectionElement.vAlign */
+  String vAlign;
+
+  /** @domName HTMLTableSectionElement.deleteRow */
+  void deleteRow(int index) native;
+
+  /** @domName HTMLTableSectionElement.insertRow */
+  Element insertRow(int index) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class Text extends CharacterData native "*Text" {
+  factory Text(String data) => _TextFactoryProvider.createText(data);
+
+  /** @domName Text.wholeText */
+  final String wholeText;
+
+  /** @domName Text.replaceWholeText */
+  Text replaceWholeText(String content) native;
+
+  /** @domName Text.splitText */
+  Text splitText(int offset) native;
+
+}
+
+/// @domName HTMLTextAreaElement
+class TextAreaElement extends Element implements Element native "*HTMLTextAreaElement" {
+
+  factory TextAreaElement() => _Elements.createTextAreaElement();
+
+  /** @domName HTMLTextAreaElement.autofocus */
+  bool autofocus;
+
+  /** @domName HTMLTextAreaElement.cols */
+  int cols;
+
+  /** @domName HTMLTextAreaElement.defaultValue */
+  String defaultValue;
+
+  /** @domName HTMLTextAreaElement.dirName */
+  String dirName;
+
+  /** @domName HTMLTextAreaElement.disabled */
+  bool disabled;
+
+  /** @domName HTMLTextAreaElement.form */
+  final FormElement form;
+
+  /** @domName HTMLTextAreaElement.labels */
+  final List<Node> labels;
+
+  /** @domName HTMLTextAreaElement.maxLength */
+  int maxLength;
+
+  /** @domName HTMLTextAreaElement.name */
+  String name;
+
+  /** @domName HTMLTextAreaElement.placeholder */
+  String placeholder;
+
+  /** @domName HTMLTextAreaElement.readOnly */
+  bool readOnly;
+
+  /** @domName HTMLTextAreaElement.required */
+  bool required;
+
+  /** @domName HTMLTextAreaElement.rows */
+  int rows;
+
+  /** @domName HTMLTextAreaElement.selectionDirection */
+  String selectionDirection;
+
+  /** @domName HTMLTextAreaElement.selectionEnd */
+  int selectionEnd;
+
+  /** @domName HTMLTextAreaElement.selectionStart */
+  int selectionStart;
+
+  /** @domName HTMLTextAreaElement.textLength */
+  final int textLength;
+
+  /** @domName HTMLTextAreaElement.type */
+  final String type;
+
+  /** @domName HTMLTextAreaElement.validationMessage */
+  final String validationMessage;
+
+  /** @domName HTMLTextAreaElement.validity */
+  final ValidityState validity;
+
+  /** @domName HTMLTextAreaElement.value */
+  String value;
+
+  /** @domName HTMLTextAreaElement.willValidate */
+  final bool willValidate;
+
+  /** @domName HTMLTextAreaElement.wrap */
+  String wrap;
+
+  /** @domName HTMLTextAreaElement.checkValidity */
+  bool checkValidity() native;
+
+  /** @domName HTMLTextAreaElement.select */
+  void select() native;
+
+  /** @domName HTMLTextAreaElement.setCustomValidity */
+  void setCustomValidity(String error) native;
+
+  /** @domName HTMLTextAreaElement.setRangeText */
+  void setRangeText(String replacement, [int start, int end, String selectionMode]) native;
+
+  /** @domName HTMLTextAreaElement.setSelectionRange */
+  void setSelectionRange(int start, int end, [String direction]) native;
+}
+
+/// @domName TextEvent
+class TextEvent extends UIEvent native "*TextEvent" {
+
+  /** @domName TextEvent.data */
+  final String data;
+
+  /** @domName TextEvent.initTextEvent */
+  void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native;
+}
+
+/// @domName TextMetrics
+class TextMetrics native "*TextMetrics" {
+
+  /** @domName TextMetrics.width */
+  final num width;
+}
+
+/// @domName TextTrack
+class TextTrack extends EventTarget native "*TextTrack" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  TextTrackEvents get on =>
+    new TextTrackEvents(this);
+
+  /** @domName TextTrack.activeCues */
+  final TextTrackCueList activeCues;
+
+  /** @domName TextTrack.cues */
+  final TextTrackCueList cues;
+
+  /** @domName TextTrack.kind */
+  final String kind;
+
+  /** @domName TextTrack.label */
+  final String label;
+
+  /** @domName TextTrack.language */
+  final String language;
+
+  /** @domName TextTrack.mode */
+  String mode;
+
+  /** @domName TextTrack.addCue */
+  void addCue(TextTrackCue cue) native;
+
+  /** @domName TextTrack.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName TextTrack.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName TextTrack.removeCue */
+  void removeCue(TextTrackCue cue) native;
+
+  /** @domName TextTrack.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class TextTrackEvents extends Events {
+  TextTrackEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get cueChange => this['cuechange'];
+}
+
+/// @domName TextTrackCue
+class TextTrackCue extends EventTarget native "*TextTrackCue" {
+
+  factory TextTrackCue(num startTime, num endTime, String text) => _TextTrackCueFactoryProvider.createTextTrackCue(startTime, endTime, text);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  TextTrackCueEvents get on =>
+    new TextTrackCueEvents(this);
+
+  /** @domName TextTrackCue.align */
+  String align;
+
+  /** @domName TextTrackCue.endTime */
+  num endTime;
+
+  /** @domName TextTrackCue.id */
+  String id;
+
+  /** @domName TextTrackCue.line */
+  int line;
+
+  /** @domName TextTrackCue.pauseOnExit */
+  bool pauseOnExit;
+
+  /** @domName TextTrackCue.position */
+  int position;
+
+  /** @domName TextTrackCue.size */
+  int size;
+
+  /** @domName TextTrackCue.snapToLines */
+  bool snapToLines;
+
+  /** @domName TextTrackCue.startTime */
+  num startTime;
+
+  /** @domName TextTrackCue.text */
+  String text;
+
+  /** @domName TextTrackCue.track */
+  final TextTrack track;
+
+  /** @domName TextTrackCue.vertical */
+  String vertical;
+
+  /** @domName TextTrackCue.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName TextTrackCue.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName TextTrackCue.getCueAsHTML */
+  DocumentFragment getCueAsHTML() native;
+
+  /** @domName TextTrackCue.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class TextTrackCueEvents extends Events {
+  TextTrackCueEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get enter => this['enter'];
+
+  EventListenerList get exit => this['exit'];
+}
+
+/// @domName TextTrackCueList
+class TextTrackCueList implements List<TextTrackCue>, JavaScriptIndexingBehavior native "*TextTrackCueList" {
+
+  /** @domName TextTrackCueList.length */
+  final int length;
+
+  TextTrackCue operator[](int index) => JS("TextTrackCue", "#[#]", this, index);
+
+  void operator[]=(int index, TextTrackCue value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<TextTrackCue> mixins.
+  // TextTrackCue is the element type.
+
+  // From Iterable<TextTrackCue>:
+
+  Iterator<TextTrackCue> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<TextTrackCue>(this);
+  }
+
+  // From Collection<TextTrackCue>:
+
+  void add(TextTrackCue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(TextTrackCue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<TextTrackCue> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(TextTrackCue element) => _Collections.contains(this, element);
+
+  void forEach(void f(TextTrackCue element)) => _Collections.forEach(this, f);
+
+  Collection map(f(TextTrackCue element)) => _Collections.map(this, [], f);
+
+  Collection<TextTrackCue> filter(bool f(TextTrackCue element)) =>
+     _Collections.filter(this, <TextTrackCue>[], f);
+
+  bool every(bool f(TextTrackCue element)) => _Collections.every(this, f);
+
+  bool some(bool f(TextTrackCue element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<TextTrackCue>:
+
+  void sort([Comparator<TextTrackCue> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(TextTrackCue element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(TextTrackCue element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  TextTrackCue get last => this[length - 1];
+
+  TextTrackCue removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<TextTrackCue> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [TextTrackCue initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<TextTrackCue> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <TextTrackCue>[]);
+
+  // -- end List<TextTrackCue> mixins.
+
+  /** @domName TextTrackCueList.getCueById */
+  TextTrackCue getCueById(String id) native;
+
+  /** @domName TextTrackCueList.item */
+  TextTrackCue item(int index) native;
+}
+
+/// @domName TextTrackList
+class TextTrackList extends EventTarget implements JavaScriptIndexingBehavior, List<TextTrack> native "*TextTrackList" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  TextTrackListEvents get on =>
+    new TextTrackListEvents(this);
+
+  /** @domName TextTrackList.length */
+  final int length;
+
+  TextTrack operator[](int index) => JS("TextTrack", "#[#]", this, index);
+
+  void operator[]=(int index, TextTrack value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<TextTrack> mixins.
+  // TextTrack is the element type.
+
+  // From Iterable<TextTrack>:
+
+  Iterator<TextTrack> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<TextTrack>(this);
+  }
+
+  // From Collection<TextTrack>:
+
+  void add(TextTrack value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(TextTrack value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<TextTrack> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(TextTrack element) => _Collections.contains(this, element);
+
+  void forEach(void f(TextTrack element)) => _Collections.forEach(this, f);
+
+  Collection map(f(TextTrack element)) => _Collections.map(this, [], f);
+
+  Collection<TextTrack> filter(bool f(TextTrack element)) =>
+     _Collections.filter(this, <TextTrack>[], f);
+
+  bool every(bool f(TextTrack element)) => _Collections.every(this, f);
+
+  bool some(bool f(TextTrack element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<TextTrack>:
+
+  void sort([Comparator<TextTrack> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(TextTrack element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(TextTrack element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  TextTrack get last => this[length - 1];
+
+  TextTrack removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<TextTrack> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [TextTrack initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<TextTrack> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <TextTrack>[]);
+
+  // -- end List<TextTrack> mixins.
+
+  /** @domName TextTrackList.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName TextTrackList.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName TextTrackList.item */
+  TextTrack item(int index) native;
+
+  /** @domName TextTrackList.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+
+class TextTrackListEvents extends Events {
+  TextTrackListEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get addTrack => this['addtrack'];
+}
+
+/// @domName TimeRanges
+class TimeRanges native "*TimeRanges" {
+
+  /** @domName TimeRanges.length */
+  final int length;
+
+  /** @domName TimeRanges.end */
+  num end(int index) native;
+
+  /** @domName TimeRanges.start */
+  num start(int index) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void TimeoutHandler();
+
+/// @domName HTMLTitleElement
+class TitleElement extends Element implements Element native "*HTMLTitleElement" {
+
+  factory TitleElement() => _Elements.createTitleElement();
+}
+
+/// @domName Touch
+class Touch native "*Touch" {
+
+  /** @domName Touch.clientX */
+  final int clientX;
+
+  /** @domName Touch.clientY */
+  final int clientY;
+
+  /** @domName Touch.identifier */
+  final int identifier;
+
+  /** @domName Touch.pageX */
+  final int pageX;
+
+  /** @domName Touch.pageY */
+  final int pageY;
+
+  /** @domName Touch.screenX */
+  final int screenX;
+
+  /** @domName Touch.screenY */
+  final int screenY;
+
+  /** @domName Touch.target */
+  EventTarget get target => _convertNativeToDart_EventTarget(this._target);
+  EventTarget get _target => JS("EventTarget", "#.target", this);
+
+  /** @domName Touch.webkitForce */
+  final num webkitForce;
+
+  /** @domName Touch.webkitRadiusX */
+  final int webkitRadiusX;
+
+  /** @domName Touch.webkitRadiusY */
+  final int webkitRadiusY;
+
+  /** @domName Touch.webkitRotationAngle */
+  final num webkitRotationAngle;
+}
+
+/// @domName TouchEvent
+class TouchEvent extends UIEvent native "*TouchEvent" {
+
+  /** @domName TouchEvent.altKey */
+  final bool altKey;
+
+  /** @domName TouchEvent.changedTouches */
+  final TouchList changedTouches;
+
+  /** @domName TouchEvent.ctrlKey */
+  final bool ctrlKey;
+
+  /** @domName TouchEvent.metaKey */
+  final bool metaKey;
+
+  /** @domName TouchEvent.shiftKey */
+  final bool shiftKey;
+
+  /** @domName TouchEvent.targetTouches */
+  final TouchList targetTouches;
+
+  /** @domName TouchEvent.touches */
+  final TouchList touches;
+
+  /** @domName TouchEvent.initTouchEvent */
+  void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
+}
+
+/// @domName TouchList
+class TouchList implements JavaScriptIndexingBehavior, List<Touch> native "*TouchList" {
+
+  /** @domName TouchList.length */
+  final int length;
+
+  Touch operator[](int index) => JS("Touch", "#[#]", this, index);
+
+  void operator[]=(int index, Touch value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Touch> mixins.
+  // Touch is the element type.
+
+  // From Iterable<Touch>:
+
+  Iterator<Touch> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Touch>(this);
+  }
+
+  // From Collection<Touch>:
+
+  void add(Touch value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Touch value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Touch> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Touch element) => _Collections.contains(this, element);
+
+  void forEach(void f(Touch element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Touch element)) => _Collections.map(this, [], f);
+
+  Collection<Touch> filter(bool f(Touch element)) =>
+     _Collections.filter(this, <Touch>[], f);
+
+  bool every(bool f(Touch element)) => _Collections.every(this, f);
+
+  bool some(bool f(Touch element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Touch>:
+
+  void sort([Comparator<Touch> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Touch element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Touch element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Touch get last => this[length - 1];
+
+  Touch removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Touch> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Touch initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Touch> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Touch>[]);
+
+  // -- end List<Touch> mixins.
+
+  /** @domName TouchList.item */
+  Touch item(int index) native;
+}
+
+/// @domName HTMLTrackElement
+class TrackElement extends Element implements Element native "*HTMLTrackElement" {
+
+  factory TrackElement() => _Elements.createTrackElement();
+
+  static const int ERROR = 3;
+
+  static const int LOADED = 2;
+
+  static const int LOADING = 1;
+
+  static const int NONE = 0;
+
+  /** @domName HTMLTrackElement.defaultValue */
+  bool get defaultValue => JS("bool", "#.default", this);
+
+  /** @domName HTMLTrackElement.defaultValue */
+  void set defaultValue(bool value) {
+    JS("void", "#.default = #", this, value);
+  }
+
+  /** @domName HTMLTrackElement.kind */
+  String kind;
+
+  /** @domName HTMLTrackElement.label */
+  String label;
+
+  /** @domName HTMLTrackElement.readyState */
+  final int readyState;
+
+  /** @domName HTMLTrackElement.src */
+  String src;
+
+  /** @domName HTMLTrackElement.srclang */
+  String srclang;
+
+  /** @domName HTMLTrackElement.track */
+  final TextTrack track;
+}
+
+/// @domName TrackEvent
+class TrackEvent extends Event native "*TrackEvent" {
+
+  /** @domName TrackEvent.track */
+  final Object track;
+}
+
+/// @domName WebKitTransitionEvent
+class TransitionEvent extends Event native "*WebKitTransitionEvent" {
+
+  /** @domName WebKitTransitionEvent.elapsedTime */
+  final num elapsedTime;
+
+  /** @domName WebKitTransitionEvent.propertyName */
+  final String propertyName;
+}
+
+/// @domName TreeWalker
+class TreeWalker native "*TreeWalker" {
+
+  /** @domName TreeWalker.currentNode */
+  Node currentNode;
+
+  /** @domName TreeWalker.expandEntityReferences */
+  final bool expandEntityReferences;
+
+  /** @domName TreeWalker.filter */
+  final NodeFilter filter;
+
+  /** @domName TreeWalker.root */
+  final Node root;
+
+  /** @domName TreeWalker.whatToShow */
+  final int whatToShow;
+
+  /** @domName TreeWalker.firstChild */
+  Node firstChild() native;
+
+  /** @domName TreeWalker.lastChild */
+  Node lastChild() native;
+
+  /** @domName TreeWalker.nextNode */
+  Node nextNode() native;
+
+  /** @domName TreeWalker.nextSibling */
+  Node nextSibling() native;
+
+  /** @domName TreeWalker.parentNode */
+  Node parentNode() native;
+
+  /** @domName TreeWalker.previousNode */
+  Node previousNode() native;
+
+  /** @domName TreeWalker.previousSibling */
+  Node previousSibling() native;
+}
+
+/// @domName UIEvent
+class UIEvent extends Event native "*UIEvent" {
+
+  /** @domName UIEvent.charCode */
+  final int charCode;
+
+  /** @domName UIEvent.detail */
+  final int detail;
+
+  /** @domName UIEvent.keyCode */
+  final int keyCode;
+
+  /** @domName UIEvent.layerX */
+  final int layerX;
+
+  /** @domName UIEvent.layerY */
+  final int layerY;
+
+  /** @domName UIEvent.pageX */
+  final int pageX;
+
+  /** @domName UIEvent.pageY */
+  final int pageY;
+
+  /** @domName UIEvent.view */
+  Window get view => _convertNativeToDart_Window(this._view);
+  Window get _view => JS("Window", "#.view", this);
+
+  /** @domName UIEvent.which */
+  final int which;
+
+  /** @domName UIEvent.initUIEvent */
+  void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail) native;
+}
+
+/// @domName HTMLUListElement
+class UListElement extends Element implements Element native "*HTMLUListElement" {
+
+  factory UListElement() => _Elements.createUListElement();
+
+  /** @domName HTMLUListElement.compact */
+  bool compact;
+
+  /** @domName HTMLUListElement.type */
+  String type;
+}
+
+/// @domName Uint16Array
+class Uint16Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint16Array" {
+
+  factory Uint16Array(int length) =>
+    _TypedArrayFactoryProvider.createUint16Array(length);
+
+  factory Uint16Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createUint16Array_fromList(list);
+
+  factory Uint16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createUint16Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 2;
+
+  /** @domName Uint16Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Uint16Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Uint16Array.subarray */
+  Uint16Array subarray(int start, [int end]) native;
+}
+
+/// @domName Uint32Array
+class Uint32Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint32Array" {
+
+  factory Uint32Array(int length) =>
+    _TypedArrayFactoryProvider.createUint32Array(length);
+
+  factory Uint32Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createUint32Array_fromList(list);
+
+  factory Uint32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createUint32Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 4;
+
+  /** @domName Uint32Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Uint32Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Uint32Array.subarray */
+  Uint32Array subarray(int start, [int end]) native;
+}
+
+/// @domName Uint8Array
+class Uint8Array extends ArrayBufferView implements JavaScriptIndexingBehavior, List<int> native "*Uint8Array" {
+
+  factory Uint8Array(int length) =>
+    _TypedArrayFactoryProvider.createUint8Array(length);
+
+  factory Uint8Array.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createUint8Array_fromList(list);
+
+  factory Uint8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createUint8Array_fromBuffer(buffer, byteOffset, length);
+
+  static const int BYTES_PER_ELEMENT = 1;
+
+  /** @domName Uint8Array.length */
+  final int length;
+
+  int operator[](int index) => JS("int", "#[#]", this, index);
+
+  void operator[]=(int index, int value) => JS("void", "#[#] = #", this, index, value);
+  // -- start List<int> mixins.
+  // int is the element type.
+
+  // From Iterable<int>:
+
+  Iterator<int> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<int>(this);
+  }
+
+  // From Collection<int>:
+
+  void add(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(int value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<int> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(int element) => _Collections.contains(this, element);
+
+  void forEach(void f(int element)) => _Collections.forEach(this, f);
+
+  Collection map(f(int element)) => _Collections.map(this, [], f);
+
+  Collection<int> filter(bool f(int element)) =>
+     _Collections.filter(this, <int>[], f);
+
+  bool every(bool f(int element)) => _Collections.every(this, f);
+
+  bool some(bool f(int element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<int>:
+
+  void sort([Comparator<int> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(int element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(int element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  int get last => this[length - 1];
+
+  int removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<int> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [int initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<int> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <int>[]);
+
+  // -- end List<int> mixins.
+
+  /** @domName Uint8Array.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Uint8Array.subarray */
+  Uint8Array subarray(int start, [int end]) native;
+}
+
+/// @domName Uint8ClampedArray
+class Uint8ClampedArray extends Uint8Array native "*Uint8ClampedArray" {
+
+  factory Uint8ClampedArray(int length) =>
+    _TypedArrayFactoryProvider.createUint8ClampedArray(length);
+
+  factory Uint8ClampedArray.fromList(List<int> list) =>
+    _TypedArrayFactoryProvider.createUint8ClampedArray_fromList(list);
+
+  factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
+    _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
+
+  // Use implementation from Uint8Array.
+  // final int length;
+
+  /** @domName Uint8ClampedArray.setElements */
+  void setElements(Object array, [int offset]) native "set";
+
+  /** @domName Uint8ClampedArray.subarray */
+  Uint8ClampedArray subarray(int start, [int end]) native;
+}
+
+/// @domName HTMLUnknownElement
+class UnknownElement extends Element implements Element native "*HTMLUnknownElement" {
+}
+// 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 Url native "*URL" {
+
+  static String createObjectUrl(blob_OR_source_OR_stream) =>
+      JS('String',
+         '(window.URL || window.webkitURL).createObjectURL(#)',
+         blob_OR_source_OR_stream);
+
+  static void revokeObjectUrl(String objectUrl) =>
+      JS('void',
+         '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl);
+
+}
+
+/// @domName ValidityState
+class ValidityState native "*ValidityState" {
+
+  /** @domName ValidityState.customError */
+  final bool customError;
+
+  /** @domName ValidityState.patternMismatch */
+  final bool patternMismatch;
+
+  /** @domName ValidityState.rangeOverflow */
+  final bool rangeOverflow;
+
+  /** @domName ValidityState.rangeUnderflow */
+  final bool rangeUnderflow;
+
+  /** @domName ValidityState.stepMismatch */
+  final bool stepMismatch;
+
+  /** @domName ValidityState.tooLong */
+  final bool tooLong;
+
+  /** @domName ValidityState.typeMismatch */
+  final bool typeMismatch;
+
+  /** @domName ValidityState.valid */
+  final bool valid;
+
+  /** @domName ValidityState.valueMissing */
+  final bool valueMissing;
+}
+
+/// @domName HTMLVideoElement
+class VideoElement extends MediaElement native "*HTMLVideoElement" {
+
+  factory VideoElement() => _Elements.createVideoElement();
+
+  /** @domName HTMLVideoElement.height */
+  int height;
+
+  /** @domName HTMLVideoElement.poster */
+  String poster;
+
+  /** @domName HTMLVideoElement.videoHeight */
+  final int videoHeight;
+
+  /** @domName HTMLVideoElement.videoWidth */
+  final int videoWidth;
+
+  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
+  final int webkitDecodedFrameCount;
+
+  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
+  final bool webkitDisplayingFullscreen;
+
+  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
+  final int webkitDroppedFrameCount;
+
+  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
+  final bool webkitSupportsFullscreen;
+
+  /** @domName HTMLVideoElement.width */
+  int width;
+
+  /** @domName HTMLVideoElement.webkitEnterFullScreen */
+  void webkitEnterFullScreen() native;
+
+  /** @domName HTMLVideoElement.webkitEnterFullscreen */
+  void webkitEnterFullscreen() native;
+
+  /** @domName HTMLVideoElement.webkitExitFullScreen */
+  void webkitExitFullScreen() native;
+
+  /** @domName HTMLVideoElement.webkitExitFullscreen */
+  void webkitExitFullscreen() native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+
+typedef void VoidCallback();
+
+/// @domName WaveShaperNode
+class WaveShaperNode extends AudioNode native "*WaveShaperNode" {
+
+  /** @domName WaveShaperNode.curve */
+  Float32Array curve;
+}
+
+/// @domName WaveTable
+class WaveTable native "*WaveTable" {
+}
+
+/// @domName WebGLActiveInfo
+class WebGLActiveInfo native "*WebGLActiveInfo" {
+
+  /** @domName WebGLActiveInfo.name */
+  final String name;
+
+  /** @domName WebGLActiveInfo.size */
+  final int size;
+
+  /** @domName WebGLActiveInfo.type */
+  final int type;
+}
+
+/// @domName WebGLBuffer
+class WebGLBuffer native "*WebGLBuffer" {
+}
+
+/// @domName WebGLCompressedTextureS3TC
+class WebGLCompressedTextureS3TC native "*WebGLCompressedTextureS3TC" {
+
+  static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
+
+  static const int COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2;
+
+  static const int COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3;
+
+  static const int COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
+}
+
+/// @domName WebGLContextAttributes
+class WebGLContextAttributes native "*WebGLContextAttributes" {
+
+  /** @domName WebGLContextAttributes.alpha */
+  bool alpha;
+
+  /** @domName WebGLContextAttributes.antialias */
+  bool antialias;
+
+  /** @domName WebGLContextAttributes.depth */
+  bool depth;
+
+  /** @domName WebGLContextAttributes.premultipliedAlpha */
+  bool premultipliedAlpha;
+
+  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
+  bool preserveDrawingBuffer;
+
+  /** @domName WebGLContextAttributes.stencil */
+  bool stencil;
+}
+
+/// @domName WebGLContextEvent
+class WebGLContextEvent extends Event native "*WebGLContextEvent" {
+
+  /** @domName WebGLContextEvent.statusMessage */
+  final String statusMessage;
+}
+
+/// @domName WebGLDebugRendererInfo
+class WebGLDebugRendererInfo native "*WebGLDebugRendererInfo" {
+
+  static const int UNMASKED_RENDERER_WEBGL = 0x9246;
+
+  static const int UNMASKED_VENDOR_WEBGL = 0x9245;
+}
+
+/// @domName WebGLDebugShaders
+class WebGLDebugShaders native "*WebGLDebugShaders" {
+
+  /** @domName WebGLDebugShaders.getTranslatedShaderSource */
+  String getTranslatedShaderSource(WebGLShader shader) native;
+}
+
+/// @domName WebGLDepthTexture
+class WebGLDepthTexture native "*WebGLDepthTexture" {
+
+  static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
+}
+
+/// @domName WebGLFramebuffer
+class WebGLFramebuffer native "*WebGLFramebuffer" {
+}
+
+/// @domName WebGLLoseContext
+class WebGLLoseContext native "*WebGLLoseContext" {
+
+  /** @domName WebGLLoseContext.loseContext */
+  void loseContext() native;
+
+  /** @domName WebGLLoseContext.restoreContext */
+  void restoreContext() native;
+}
+
+/// @domName WebGLProgram
+class WebGLProgram native "*WebGLProgram" {
+}
+
+/// @domName WebGLRenderbuffer
+class WebGLRenderbuffer native "*WebGLRenderbuffer" {
+}
+
+/// @domName WebGLRenderingContext
+class WebGLRenderingContext extends CanvasRenderingContext native "*WebGLRenderingContext" {
+
+  static const int ACTIVE_ATTRIBUTES = 0x8B89;
+
+  static const int ACTIVE_TEXTURE = 0x84E0;
+
+  static const int ACTIVE_UNIFORMS = 0x8B86;
+
+  static const int ALIASED_LINE_WIDTH_RANGE = 0x846E;
+
+  static const int ALIASED_POINT_SIZE_RANGE = 0x846D;
+
+  static const int ALPHA = 0x1906;
+
+  static const int ALPHA_BITS = 0x0D55;
+
+  static const int ALWAYS = 0x0207;
+
+  static const int ARRAY_BUFFER = 0x8892;
+
+  static const int ARRAY_BUFFER_BINDING = 0x8894;
+
+  static const int ATTACHED_SHADERS = 0x8B85;
+
+  static const int BACK = 0x0405;
+
+  static const int BLEND = 0x0BE2;
+
+  static const int BLEND_COLOR = 0x8005;
+
+  static const int BLEND_DST_ALPHA = 0x80CA;
+
+  static const int BLEND_DST_RGB = 0x80C8;
+
+  static const int BLEND_EQUATION = 0x8009;
+
+  static const int BLEND_EQUATION_ALPHA = 0x883D;
+
+  static const int BLEND_EQUATION_RGB = 0x8009;
+
+  static const int BLEND_SRC_ALPHA = 0x80CB;
+
+  static const int BLEND_SRC_RGB = 0x80C9;
+
+  static const int BLUE_BITS = 0x0D54;
+
+  static const int BOOL = 0x8B56;
+
+  static const int BOOL_VEC2 = 0x8B57;
+
+  static const int BOOL_VEC3 = 0x8B58;
+
+  static const int BOOL_VEC4 = 0x8B59;
+
+  static const int BROWSER_DEFAULT_WEBGL = 0x9244;
+
+  static const int BUFFER_SIZE = 0x8764;
+
+  static const int BUFFER_USAGE = 0x8765;
+
+  static const int BYTE = 0x1400;
+
+  static const int CCW = 0x0901;
+
+  static const int CLAMP_TO_EDGE = 0x812F;
+
+  static const int COLOR_ATTACHMENT0 = 0x8CE0;
+
+  static const int COLOR_BUFFER_BIT = 0x00004000;
+
+  static const int COLOR_CLEAR_VALUE = 0x0C22;
+
+  static const int COLOR_WRITEMASK = 0x0C23;
+
+  static const int COMPILE_STATUS = 0x8B81;
+
+  static const int COMPRESSED_TEXTURE_FORMATS = 0x86A3;
+
+  static const int CONSTANT_ALPHA = 0x8003;
+
+  static const int CONSTANT_COLOR = 0x8001;
+
+  static const int CONTEXT_LOST_WEBGL = 0x9242;
+
+  static const int CULL_FACE = 0x0B44;
+
+  static const int CULL_FACE_MODE = 0x0B45;
+
+  static const int CURRENT_PROGRAM = 0x8B8D;
+
+  static const int CURRENT_VERTEX_ATTRIB = 0x8626;
+
+  static const int CW = 0x0900;
+
+  static const int DECR = 0x1E03;
+
+  static const int DECR_WRAP = 0x8508;
+
+  static const int DELETE_STATUS = 0x8B80;
+
+  static const int DEPTH_ATTACHMENT = 0x8D00;
+
+  static const int DEPTH_BITS = 0x0D56;
+
+  static const int DEPTH_BUFFER_BIT = 0x00000100;
+
+  static const int DEPTH_CLEAR_VALUE = 0x0B73;
+
+  static const int DEPTH_COMPONENT = 0x1902;
+
+  static const int DEPTH_COMPONENT16 = 0x81A5;
+
+  static const int DEPTH_FUNC = 0x0B74;
+
+  static const int DEPTH_RANGE = 0x0B70;
+
+  static const int DEPTH_STENCIL = 0x84F9;
+
+  static const int DEPTH_STENCIL_ATTACHMENT = 0x821A;
+
+  static const int DEPTH_TEST = 0x0B71;
+
+  static const int DEPTH_WRITEMASK = 0x0B72;
+
+  static const int DITHER = 0x0BD0;
+
+  static const int DONT_CARE = 0x1100;
+
+  static const int DST_ALPHA = 0x0304;
+
+  static const int DST_COLOR = 0x0306;
+
+  static const int DYNAMIC_DRAW = 0x88E8;
+
+  static const int ELEMENT_ARRAY_BUFFER = 0x8893;
+
+  static const int ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
+
+  static const int EQUAL = 0x0202;
+
+  static const int FASTEST = 0x1101;
+
+  static const int FLOAT = 0x1406;
+
+  static const int FLOAT_MAT2 = 0x8B5A;
+
+  static const int FLOAT_MAT3 = 0x8B5B;
+
+  static const int FLOAT_MAT4 = 0x8B5C;
+
+  static const int FLOAT_VEC2 = 0x8B50;
+
+  static const int FLOAT_VEC3 = 0x8B51;
+
+  static const int FLOAT_VEC4 = 0x8B52;
+
+  static const int FRAGMENT_SHADER = 0x8B30;
+
+  static const int FRAMEBUFFER = 0x8D40;
+
+  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
+
+  static const int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
+
+  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
+
+  static const int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
+
+  static const int FRAMEBUFFER_BINDING = 0x8CA6;
+
+  static const int FRAMEBUFFER_COMPLETE = 0x8CD5;
+
+  static const int FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
+
+  static const int FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
+
+  static const int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
+
+  static const int FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
+
+  static const int FRONT = 0x0404;
+
+  static const int FRONT_AND_BACK = 0x0408;
+
+  static const int FRONT_FACE = 0x0B46;
+
+  static const int FUNC_ADD = 0x8006;
+
+  static const int FUNC_REVERSE_SUBTRACT = 0x800B;
+
+  static const int FUNC_SUBTRACT = 0x800A;
+
+  static const int GENERATE_MIPMAP_HINT = 0x8192;
+
+  static const int GEQUAL = 0x0206;
+
+  static const int GREATER = 0x0204;
+
+  static const int GREEN_BITS = 0x0D53;
+
+  static const int HIGH_FLOAT = 0x8DF2;
+
+  static const int HIGH_INT = 0x8DF5;
+
+  static const int INCR = 0x1E02;
+
+  static const int INCR_WRAP = 0x8507;
+
+  static const int INT = 0x1404;
+
+  static const int INT_VEC2 = 0x8B53;
+
+  static const int INT_VEC3 = 0x8B54;
+
+  static const int INT_VEC4 = 0x8B55;
+
+  static const int INVALID_ENUM = 0x0500;
+
+  static const int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
+
+  static const int INVALID_OPERATION = 0x0502;
+
+  static const int INVALID_VALUE = 0x0501;
+
+  static const int INVERT = 0x150A;
+
+  static const int KEEP = 0x1E00;
+
+  static const int LEQUAL = 0x0203;
+
+  static const int LESS = 0x0201;
+
+  static const int LINEAR = 0x2601;
+
+  static const int LINEAR_MIPMAP_LINEAR = 0x2703;
+
+  static const int LINEAR_MIPMAP_NEAREST = 0x2701;
+
+  static const int LINES = 0x0001;
+
+  static const int LINE_LOOP = 0x0002;
+
+  static const int LINE_STRIP = 0x0003;
+
+  static const int LINE_WIDTH = 0x0B21;
+
+  static const int LINK_STATUS = 0x8B82;
+
+  static const int LOW_FLOAT = 0x8DF0;
+
+  static const int LOW_INT = 0x8DF3;
+
+  static const int LUMINANCE = 0x1909;
+
+  static const int LUMINANCE_ALPHA = 0x190A;
+
+  static const int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
+
+  static const int MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
+
+  static const int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
+
+  static const int MAX_RENDERBUFFER_SIZE = 0x84E8;
+
+  static const int MAX_TEXTURE_IMAGE_UNITS = 0x8872;
+
+  static const int MAX_TEXTURE_SIZE = 0x0D33;
+
+  static const int MAX_VARYING_VECTORS = 0x8DFC;
+
+  static const int MAX_VERTEX_ATTRIBS = 0x8869;
+
+  static const int MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
+
+  static const int MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
+
+  static const int MAX_VIEWPORT_DIMS = 0x0D3A;
+
+  static const int MEDIUM_FLOAT = 0x8DF1;
+
+  static const int MEDIUM_INT = 0x8DF4;
+
+  static const int MIRRORED_REPEAT = 0x8370;
+
+  static const int NEAREST = 0x2600;
+
+  static const int NEAREST_MIPMAP_LINEAR = 0x2702;
+
+  static const int NEAREST_MIPMAP_NEAREST = 0x2700;
+
+  static const int NEVER = 0x0200;
+
+  static const int NICEST = 0x1102;
+
+  static const int NONE = 0;
+
+  static const int NOTEQUAL = 0x0205;
+
+  static const int NO_ERROR = 0;
+
+  static const int ONE = 1;
+
+  static const int ONE_MINUS_CONSTANT_ALPHA = 0x8004;
+
+  static const int ONE_MINUS_CONSTANT_COLOR = 0x8002;
+
+  static const int ONE_MINUS_DST_ALPHA = 0x0305;
+
+  static const int ONE_MINUS_DST_COLOR = 0x0307;
+
+  static const int ONE_MINUS_SRC_ALPHA = 0x0303;
+
+  static const int ONE_MINUS_SRC_COLOR = 0x0301;
+
+  static const int OUT_OF_MEMORY = 0x0505;
+
+  static const int PACK_ALIGNMENT = 0x0D05;
+
+  static const int POINTS = 0x0000;
+
+  static const int POLYGON_OFFSET_FACTOR = 0x8038;
+
+  static const int POLYGON_OFFSET_FILL = 0x8037;
+
+  static const int POLYGON_OFFSET_UNITS = 0x2A00;
+
+  static const int RED_BITS = 0x0D52;
+
+  static const int RENDERBUFFER = 0x8D41;
+
+  static const int RENDERBUFFER_ALPHA_SIZE = 0x8D53;
+
+  static const int RENDERBUFFER_BINDING = 0x8CA7;
+
+  static const int RENDERBUFFER_BLUE_SIZE = 0x8D52;
+
+  static const int RENDERBUFFER_DEPTH_SIZE = 0x8D54;
+
+  static const int RENDERBUFFER_GREEN_SIZE = 0x8D51;
+
+  static const int RENDERBUFFER_HEIGHT = 0x8D43;
+
+  static const int RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
+
+  static const int RENDERBUFFER_RED_SIZE = 0x8D50;
+
+  static const int RENDERBUFFER_STENCIL_SIZE = 0x8D55;
+
+  static const int RENDERBUFFER_WIDTH = 0x8D42;
+
+  static const int RENDERER = 0x1F01;
+
+  static const int REPEAT = 0x2901;
+
+  static const int REPLACE = 0x1E01;
+
+  static const int RGB = 0x1907;
+
+  static const int RGB565 = 0x8D62;
+
+  static const int RGB5_A1 = 0x8057;
+
+  static const int RGBA = 0x1908;
+
+  static const int RGBA4 = 0x8056;
+
+  static const int SAMPLER_2D = 0x8B5E;
+
+  static const int SAMPLER_CUBE = 0x8B60;
+
+  static const int SAMPLES = 0x80A9;
+
+  static const int SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
+
+  static const int SAMPLE_BUFFERS = 0x80A8;
+
+  static const int SAMPLE_COVERAGE = 0x80A0;
+
+  static const int SAMPLE_COVERAGE_INVERT = 0x80AB;
+
+  static const int SAMPLE_COVERAGE_VALUE = 0x80AA;
+
+  static const int SCISSOR_BOX = 0x0C10;
+
+  static const int SCISSOR_TEST = 0x0C11;
+
+  static const int SHADER_TYPE = 0x8B4F;
+
+  static const int SHADING_LANGUAGE_VERSION = 0x8B8C;
+
+  static const int SHORT = 0x1402;
+
+  static const int SRC_ALPHA = 0x0302;
+
+  static const int SRC_ALPHA_SATURATE = 0x0308;
+
+  static const int SRC_COLOR = 0x0300;
+
+  static const int STATIC_DRAW = 0x88E4;
+
+  static const int STENCIL_ATTACHMENT = 0x8D20;
+
+  static const int STENCIL_BACK_FAIL = 0x8801;
+
+  static const int STENCIL_BACK_FUNC = 0x8800;
+
+  static const int STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
+
+  static const int STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
+
+  static const int STENCIL_BACK_REF = 0x8CA3;
+
+  static const int STENCIL_BACK_VALUE_MASK = 0x8CA4;
+
+  static const int STENCIL_BACK_WRITEMASK = 0x8CA5;
+
+  static const int STENCIL_BITS = 0x0D57;
+
+  static const int STENCIL_BUFFER_BIT = 0x00000400;
+
+  static const int STENCIL_CLEAR_VALUE = 0x0B91;
+
+  static const int STENCIL_FAIL = 0x0B94;
+
+  static const int STENCIL_FUNC = 0x0B92;
+
+  static const int STENCIL_INDEX = 0x1901;
+
+  static const int STENCIL_INDEX8 = 0x8D48;
+
+  static const int STENCIL_PASS_DEPTH_FAIL = 0x0B95;
+
+  static const int STENCIL_PASS_DEPTH_PASS = 0x0B96;
+
+  static const int STENCIL_REF = 0x0B97;
+
+  static const int STENCIL_TEST = 0x0B90;
+
+  static const int STENCIL_VALUE_MASK = 0x0B93;
+
+  static const int STENCIL_WRITEMASK = 0x0B98;
+
+  static const int STREAM_DRAW = 0x88E0;
+
+  static const int SUBPIXEL_BITS = 0x0D50;
+
+  static const int TEXTURE = 0x1702;
+
+  static const int TEXTURE0 = 0x84C0;
+
+  static const int TEXTURE1 = 0x84C1;
+
+  static const int TEXTURE10 = 0x84CA;
+
+  static const int TEXTURE11 = 0x84CB;
+
+  static const int TEXTURE12 = 0x84CC;
+
+  static const int TEXTURE13 = 0x84CD;
+
+  static const int TEXTURE14 = 0x84CE;
+
+  static const int TEXTURE15 = 0x84CF;
+
+  static const int TEXTURE16 = 0x84D0;
+
+  static const int TEXTURE17 = 0x84D1;
+
+  static const int TEXTURE18 = 0x84D2;
+
+  static const int TEXTURE19 = 0x84D3;
+
+  static const int TEXTURE2 = 0x84C2;
+
+  static const int TEXTURE20 = 0x84D4;
+
+  static const int TEXTURE21 = 0x84D5;
+
+  static const int TEXTURE22 = 0x84D6;
+
+  static const int TEXTURE23 = 0x84D7;
+
+  static const int TEXTURE24 = 0x84D8;
+
+  static const int TEXTURE25 = 0x84D9;
+
+  static const int TEXTURE26 = 0x84DA;
+
+  static const int TEXTURE27 = 0x84DB;
+
+  static const int TEXTURE28 = 0x84DC;
+
+  static const int TEXTURE29 = 0x84DD;
+
+  static const int TEXTURE3 = 0x84C3;
+
+  static const int TEXTURE30 = 0x84DE;
+
+  static const int TEXTURE31 = 0x84DF;
+
+  static const int TEXTURE4 = 0x84C4;
+
+  static const int TEXTURE5 = 0x84C5;
+
+  static const int TEXTURE6 = 0x84C6;
+
+  static const int TEXTURE7 = 0x84C7;
+
+  static const int TEXTURE8 = 0x84C8;
+
+  static const int TEXTURE9 = 0x84C9;
+
+  static const int TEXTURE_2D = 0x0DE1;
+
+  static const int TEXTURE_BINDING_2D = 0x8069;
+
+  static const int TEXTURE_BINDING_CUBE_MAP = 0x8514;
+
+  static const int TEXTURE_CUBE_MAP = 0x8513;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
+
+  static const int TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
+
+  static const int TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
+
+  static const int TEXTURE_MAG_FILTER = 0x2800;
+
+  static const int TEXTURE_MIN_FILTER = 0x2801;
+
+  static const int TEXTURE_WRAP_S = 0x2802;
+
+  static const int TEXTURE_WRAP_T = 0x2803;
+
+  static const int TRIANGLES = 0x0004;
+
+  static const int TRIANGLE_FAN = 0x0006;
+
+  static const int TRIANGLE_STRIP = 0x0005;
+
+  static const int UNPACK_ALIGNMENT = 0x0CF5;
+
+  static const int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
+
+  static const int UNPACK_FLIP_Y_WEBGL = 0x9240;
+
+  static const int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
+
+  static const int UNSIGNED_BYTE = 0x1401;
+
+  static const int UNSIGNED_INT = 0x1405;
+
+  static const int UNSIGNED_SHORT = 0x1403;
+
+  static const int UNSIGNED_SHORT_4_4_4_4 = 0x8033;
+
+  static const int UNSIGNED_SHORT_5_5_5_1 = 0x8034;
+
+  static const int UNSIGNED_SHORT_5_6_5 = 0x8363;
+
+  static const int VALIDATE_STATUS = 0x8B83;
+
+  static const int VENDOR = 0x1F00;
+
+  static const int VERSION = 0x1F02;
+
+  static const int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
+
+  static const int VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
+
+  static const int VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
+
+  static const int VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
+
+  static const int VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
+
+  static const int VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
+
+  static const int VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
+
+  static const int VERTEX_SHADER = 0x8B31;
+
+  static const int VIEWPORT = 0x0BA2;
+
+  static const int ZERO = 0;
+
+  /** @domName WebGLRenderingContext.drawingBufferHeight */
+  final int drawingBufferHeight;
+
+  /** @domName WebGLRenderingContext.drawingBufferWidth */
+  final int drawingBufferWidth;
+
+  /** @domName WebGLRenderingContext.activeTexture */
+  void activeTexture(int texture) native;
+
+  /** @domName WebGLRenderingContext.attachShader */
+  void attachShader(WebGLProgram program, WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.bindAttribLocation */
+  void bindAttribLocation(WebGLProgram program, int index, String name) native;
+
+  /** @domName WebGLRenderingContext.bindBuffer */
+  void bindBuffer(int target, WebGLBuffer buffer) native;
+
+  /** @domName WebGLRenderingContext.bindFramebuffer */
+  void bindFramebuffer(int target, WebGLFramebuffer framebuffer) native;
+
+  /** @domName WebGLRenderingContext.bindRenderbuffer */
+  void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) native;
+
+  /** @domName WebGLRenderingContext.bindTexture */
+  void bindTexture(int target, WebGLTexture texture) native;
+
+  /** @domName WebGLRenderingContext.blendColor */
+  void blendColor(num red, num green, num blue, num alpha) native;
+
+  /** @domName WebGLRenderingContext.blendEquation */
+  void blendEquation(int mode) native;
+
+  /** @domName WebGLRenderingContext.blendEquationSeparate */
+  void blendEquationSeparate(int modeRGB, int modeAlpha) native;
+
+  /** @domName WebGLRenderingContext.blendFunc */
+  void blendFunc(int sfactor, int dfactor) native;
+
+  /** @domName WebGLRenderingContext.blendFuncSeparate */
+  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native;
+
+  /** @domName WebGLRenderingContext.bufferData */
+  void bufferData(int target, data_OR_size, int usage) native;
+
+  /** @domName WebGLRenderingContext.bufferSubData */
+  void bufferSubData(int target, int offset, data) native;
+
+  /** @domName WebGLRenderingContext.checkFramebufferStatus */
+  int checkFramebufferStatus(int target) native;
+
+  /** @domName WebGLRenderingContext.clear */
+  void clear(int mask) native;
+
+  /** @domName WebGLRenderingContext.clearColor */
+  void clearColor(num red, num green, num blue, num alpha) native;
+
+  /** @domName WebGLRenderingContext.clearDepth */
+  void clearDepth(num depth) native;
+
+  /** @domName WebGLRenderingContext.clearStencil */
+  void clearStencil(int s) native;
+
+  /** @domName WebGLRenderingContext.colorMask */
+  void colorMask(bool red, bool green, bool blue, bool alpha) native;
+
+  /** @domName WebGLRenderingContext.compileShader */
+  void compileShader(WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.compressedTexImage2D */
+  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data) native;
+
+  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
+  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data) native;
+
+  /** @domName WebGLRenderingContext.copyTexImage2D */
+  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native;
+
+  /** @domName WebGLRenderingContext.copyTexSubImage2D */
+  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native;
+
+  /** @domName WebGLRenderingContext.createBuffer */
+  WebGLBuffer createBuffer() native;
+
+  /** @domName WebGLRenderingContext.createFramebuffer */
+  WebGLFramebuffer createFramebuffer() native;
+
+  /** @domName WebGLRenderingContext.createProgram */
+  WebGLProgram createProgram() native;
+
+  /** @domName WebGLRenderingContext.createRenderbuffer */
+  WebGLRenderbuffer createRenderbuffer() native;
+
+  /** @domName WebGLRenderingContext.createShader */
+  WebGLShader createShader(int type) native;
+
+  /** @domName WebGLRenderingContext.createTexture */
+  WebGLTexture createTexture() native;
+
+  /** @domName WebGLRenderingContext.cullFace */
+  void cullFace(int mode) native;
+
+  /** @domName WebGLRenderingContext.deleteBuffer */
+  void deleteBuffer(WebGLBuffer buffer) native;
+
+  /** @domName WebGLRenderingContext.deleteFramebuffer */
+  void deleteFramebuffer(WebGLFramebuffer framebuffer) native;
+
+  /** @domName WebGLRenderingContext.deleteProgram */
+  void deleteProgram(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.deleteRenderbuffer */
+  void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) native;
+
+  /** @domName WebGLRenderingContext.deleteShader */
+  void deleteShader(WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.deleteTexture */
+  void deleteTexture(WebGLTexture texture) native;
+
+  /** @domName WebGLRenderingContext.depthFunc */
+  void depthFunc(int func) native;
+
+  /** @domName WebGLRenderingContext.depthMask */
+  void depthMask(bool flag) native;
+
+  /** @domName WebGLRenderingContext.depthRange */
+  void depthRange(num zNear, num zFar) native;
+
+  /** @domName WebGLRenderingContext.detachShader */
+  void detachShader(WebGLProgram program, WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.disable */
+  void disable(int cap) native;
+
+  /** @domName WebGLRenderingContext.disableVertexAttribArray */
+  void disableVertexAttribArray(int index) native;
+
+  /** @domName WebGLRenderingContext.drawArrays */
+  void drawArrays(int mode, int first, int count) native;
+
+  /** @domName WebGLRenderingContext.drawElements */
+  void drawElements(int mode, int count, int type, int offset) native;
+
+  /** @domName WebGLRenderingContext.enable */
+  void enable(int cap) native;
+
+  /** @domName WebGLRenderingContext.enableVertexAttribArray */
+  void enableVertexAttribArray(int index) native;
+
+  /** @domName WebGLRenderingContext.finish */
+  void finish() native;
+
+  /** @domName WebGLRenderingContext.flush */
+  void flush() native;
+
+  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
+  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) native;
+
+  /** @domName WebGLRenderingContext.framebufferTexture2D */
+  void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level) native;
+
+  /** @domName WebGLRenderingContext.frontFace */
+  void frontFace(int mode) native;
+
+  /** @domName WebGLRenderingContext.generateMipmap */
+  void generateMipmap(int target) native;
+
+  /** @domName WebGLRenderingContext.getActiveAttrib */
+  WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index) native;
+
+  /** @domName WebGLRenderingContext.getActiveUniform */
+  WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native;
+
+  /** @domName WebGLRenderingContext.getAttachedShaders */
+  void getAttachedShaders(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.getAttribLocation */
+  int getAttribLocation(WebGLProgram program, String name) native;
+
+  /** @domName WebGLRenderingContext.getBufferParameter */
+  Object getBufferParameter(int target, int pname) native;
+
+  /** @domName WebGLRenderingContext.getContextAttributes */
+  WebGLContextAttributes getContextAttributes() native;
+
+  /** @domName WebGLRenderingContext.getError */
+  int getError() native;
+
+  /** @domName WebGLRenderingContext.getExtension */
+  Object getExtension(String name) native;
+
+  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
+  Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native;
+
+  /** @domName WebGLRenderingContext.getParameter */
+  Object getParameter(int pname) native;
+
+  /** @domName WebGLRenderingContext.getProgramInfoLog */
+  String getProgramInfoLog(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.getProgramParameter */
+  Object getProgramParameter(WebGLProgram program, int pname) native;
+
+  /** @domName WebGLRenderingContext.getRenderbufferParameter */
+  Object getRenderbufferParameter(int target, int pname) native;
+
+  /** @domName WebGLRenderingContext.getShaderInfoLog */
+  String getShaderInfoLog(WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.getShaderParameter */
+  Object getShaderParameter(WebGLShader shader, int pname) native;
+
+  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
+  WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) native;
+
+  /** @domName WebGLRenderingContext.getShaderSource */
+  String getShaderSource(WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.getSupportedExtensions */
+  List<String> getSupportedExtensions() native;
+
+  /** @domName WebGLRenderingContext.getTexParameter */
+  Object getTexParameter(int target, int pname) native;
+
+  /** @domName WebGLRenderingContext.getUniform */
+  Object getUniform(WebGLProgram program, WebGLUniformLocation location) native;
+
+  /** @domName WebGLRenderingContext.getUniformLocation */
+  WebGLUniformLocation getUniformLocation(WebGLProgram program, String name) native;
+
+  /** @domName WebGLRenderingContext.getVertexAttrib */
+  Object getVertexAttrib(int index, int pname) native;
+
+  /** @domName WebGLRenderingContext.getVertexAttribOffset */
+  int getVertexAttribOffset(int index, int pname) native;
+
+  /** @domName WebGLRenderingContext.hint */
+  void hint(int target, int mode) native;
+
+  /** @domName WebGLRenderingContext.isBuffer */
+  bool isBuffer(WebGLBuffer buffer) native;
+
+  /** @domName WebGLRenderingContext.isContextLost */
+  bool isContextLost() native;
+
+  /** @domName WebGLRenderingContext.isEnabled */
+  bool isEnabled(int cap) native;
+
+  /** @domName WebGLRenderingContext.isFramebuffer */
+  bool isFramebuffer(WebGLFramebuffer framebuffer) native;
+
+  /** @domName WebGLRenderingContext.isProgram */
+  bool isProgram(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.isRenderbuffer */
+  bool isRenderbuffer(WebGLRenderbuffer renderbuffer) native;
+
+  /** @domName WebGLRenderingContext.isShader */
+  bool isShader(WebGLShader shader) native;
+
+  /** @domName WebGLRenderingContext.isTexture */
+  bool isTexture(WebGLTexture texture) native;
+
+  /** @domName WebGLRenderingContext.lineWidth */
+  void lineWidth(num width) native;
+
+  /** @domName WebGLRenderingContext.linkProgram */
+  void linkProgram(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.pixelStorei */
+  void pixelStorei(int pname, int param) native;
+
+  /** @domName WebGLRenderingContext.polygonOffset */
+  void polygonOffset(num factor, num units) native;
+
+  /** @domName WebGLRenderingContext.readPixels */
+  void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels) native;
+
+  /** @domName WebGLRenderingContext.releaseShaderCompiler */
+  void releaseShaderCompiler() native;
+
+  /** @domName WebGLRenderingContext.renderbufferStorage */
+  void renderbufferStorage(int target, int internalformat, int width, int height) native;
+
+  /** @domName WebGLRenderingContext.sampleCoverage */
+  void sampleCoverage(num value, bool invert) native;
+
+  /** @domName WebGLRenderingContext.scissor */
+  void scissor(int x, int y, int width, int height) native;
+
+  /** @domName WebGLRenderingContext.shaderSource */
+  void shaderSource(WebGLShader shader, String string) native;
+
+  /** @domName WebGLRenderingContext.stencilFunc */
+  void stencilFunc(int func, int ref, int mask) native;
+
+  /** @domName WebGLRenderingContext.stencilFuncSeparate */
+  void stencilFuncSeparate(int face, int func, int ref, int mask) native;
+
+  /** @domName WebGLRenderingContext.stencilMask */
+  void stencilMask(int mask) native;
+
+  /** @domName WebGLRenderingContext.stencilMaskSeparate */
+  void stencilMaskSeparate(int face, int mask) native;
+
+  /** @domName WebGLRenderingContext.stencilOp */
+  void stencilOp(int fail, int zfail, int zpass) native;
+
+  /** @domName WebGLRenderingContext.stencilOpSeparate */
+  void stencilOpSeparate(int face, int fail, int zfail, int zpass) native;
+
+  /** @domName WebGLRenderingContext.texImage2D */
+  void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [format, type, pixels]) {
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is int || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        (format is int || format == null) &&
+        (type is int || type == null) &&
+        (pixels is ArrayBufferView || pixels == null)) {
+      _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels);
+      return;
+    }
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        !?format &&
+        !?type &&
+        !?pixels) {
+      var pixels_1 = _convertDartToNative_ImageData(border_OR_canvas_OR_image_OR_pixels_OR_video);
+      _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, pixels_1);
+      return;
+    }
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is ImageElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        !?format &&
+        !?type &&
+        !?pixels) {
+      _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is CanvasElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        !?format &&
+        !?type &&
+        !?pixels) {
+      _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    if ((border_OR_canvas_OR_image_OR_pixels_OR_video is VideoElement || border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+        !?format &&
+        !?type &&
+        !?pixels) {
+      _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  void _texImage2D_1(target, level, internalformat, width, height, int border, int format, int type, ArrayBufferView pixels) native "texImage2D";
+  void _texImage2D_2(target, level, internalformat, format, type, pixels) native "texImage2D";
+  void _texImage2D_3(target, level, internalformat, format, type, ImageElement image) native "texImage2D";
+  void _texImage2D_4(target, level, internalformat, format, type, CanvasElement canvas) native "texImage2D";
+  void _texImage2D_5(target, level, internalformat, format, type, VideoElement video) native "texImage2D";
+
+  /** @domName WebGLRenderingContext.texParameterf */
+  void texParameterf(int target, int pname, num param) native;
+
+  /** @domName WebGLRenderingContext.texParameteri */
+  void texParameteri(int target, int pname, int param) native;
+
+  /** @domName WebGLRenderingContext.texSubImage2D */
+  void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [type, pixels]) {
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is int || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        (type is int || type == null) &&
+        (pixels is ArrayBufferView || pixels == null)) {
+      _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels);
+      return;
+    }
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        !?type &&
+        !?pixels) {
+      var pixels_1 = _convertDartToNative_ImageData(canvas_OR_format_OR_image_OR_pixels_OR_video);
+      _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, pixels_1);
+      return;
+    }
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is ImageElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        !?type &&
+        !?pixels) {
+      _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is CanvasElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        !?type &&
+        !?pixels) {
+      _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    if ((canvas_OR_format_OR_image_OR_pixels_OR_video is VideoElement || canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+        !?type &&
+        !?pixels) {
+      _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video);
+      return;
+    }
+    throw const Exception("Incorrect number or type of arguments");
+  }
+  void _texSubImage2D_1(target, level, xoffset, yoffset, width, height, int format, int type, ArrayBufferView pixels) native "texSubImage2D";
+  void _texSubImage2D_2(target, level, xoffset, yoffset, format, type, pixels) native "texSubImage2D";
+  void _texSubImage2D_3(target, level, xoffset, yoffset, format, type, ImageElement image) native "texSubImage2D";
+  void _texSubImage2D_4(target, level, xoffset, yoffset, format, type, CanvasElement canvas) native "texSubImage2D";
+  void _texSubImage2D_5(target, level, xoffset, yoffset, format, type, VideoElement video) native "texSubImage2D";
+
+  /** @domName WebGLRenderingContext.uniform1f */
+  void uniform1f(WebGLUniformLocation location, num x) native;
+
+  /** @domName WebGLRenderingContext.uniform1fv */
+  void uniform1fv(WebGLUniformLocation location, Float32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform1i */
+  void uniform1i(WebGLUniformLocation location, int x) native;
+
+  /** @domName WebGLRenderingContext.uniform1iv */
+  void uniform1iv(WebGLUniformLocation location, Int32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform2f */
+  void uniform2f(WebGLUniformLocation location, num x, num y) native;
+
+  /** @domName WebGLRenderingContext.uniform2fv */
+  void uniform2fv(WebGLUniformLocation location, Float32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform2i */
+  void uniform2i(WebGLUniformLocation location, int x, int y) native;
+
+  /** @domName WebGLRenderingContext.uniform2iv */
+  void uniform2iv(WebGLUniformLocation location, Int32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform3f */
+  void uniform3f(WebGLUniformLocation location, num x, num y, num z) native;
+
+  /** @domName WebGLRenderingContext.uniform3fv */
+  void uniform3fv(WebGLUniformLocation location, Float32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform3i */
+  void uniform3i(WebGLUniformLocation location, int x, int y, int z) native;
+
+  /** @domName WebGLRenderingContext.uniform3iv */
+  void uniform3iv(WebGLUniformLocation location, Int32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform4f */
+  void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w) native;
+
+  /** @domName WebGLRenderingContext.uniform4fv */
+  void uniform4fv(WebGLUniformLocation location, Float32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniform4i */
+  void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w) native;
+
+  /** @domName WebGLRenderingContext.uniform4iv */
+  void uniform4iv(WebGLUniformLocation location, Int32Array v) native;
+
+  /** @domName WebGLRenderingContext.uniformMatrix2fv */
+  void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
+
+  /** @domName WebGLRenderingContext.uniformMatrix3fv */
+  void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
+
+  /** @domName WebGLRenderingContext.uniformMatrix4fv */
+  void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array) native;
+
+  /** @domName WebGLRenderingContext.useProgram */
+  void useProgram(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.validateProgram */
+  void validateProgram(WebGLProgram program) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib1f */
+  void vertexAttrib1f(int indx, num x) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib1fv */
+  void vertexAttrib1fv(int indx, Float32Array values) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib2f */
+  void vertexAttrib2f(int indx, num x, num y) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib2fv */
+  void vertexAttrib2fv(int indx, Float32Array values) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib3f */
+  void vertexAttrib3f(int indx, num x, num y, num z) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib3fv */
+  void vertexAttrib3fv(int indx, Float32Array values) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib4f */
+  void vertexAttrib4f(int indx, num x, num y, num z, num w) native;
+
+  /** @domName WebGLRenderingContext.vertexAttrib4fv */
+  void vertexAttrib4fv(int indx, Float32Array values) native;
+
+  /** @domName WebGLRenderingContext.vertexAttribPointer */
+  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native;
+
+  /** @domName WebGLRenderingContext.viewport */
+  void viewport(int x, int y, int width, int height) native;
+}
+
+/// @domName WebGLShader
+class WebGLShader native "*WebGLShader" {
+}
+
+/// @domName WebGLShaderPrecisionFormat
+class WebGLShaderPrecisionFormat native "*WebGLShaderPrecisionFormat" {
+
+  /** @domName WebGLShaderPrecisionFormat.precision */
+  final int precision;
+
+  /** @domName WebGLShaderPrecisionFormat.rangeMax */
+  final int rangeMax;
+
+  /** @domName WebGLShaderPrecisionFormat.rangeMin */
+  final int rangeMin;
+}
+
+/// @domName WebGLTexture
+class WebGLTexture native "*WebGLTexture" {
+}
+
+/// @domName WebGLUniformLocation
+class WebGLUniformLocation native "*WebGLUniformLocation" {
+}
+
+/// @domName WebGLVertexArrayObjectOES
+class WebGLVertexArrayObjectOES native "*WebGLVertexArrayObjectOES" {
+}
+
+/// @domName WebKitCSSFilterValue
+class WebKitCSSFilterValue extends _CSSValueList native "*WebKitCSSFilterValue" {
+
+  static const int CSS_FILTER_BLUR = 10;
+
+  static const int CSS_FILTER_BRIGHTNESS = 8;
+
+  static const int CSS_FILTER_CONTRAST = 9;
+
+  static const int CSS_FILTER_CUSTOM = 12;
+
+  static const int CSS_FILTER_DROP_SHADOW = 11;
+
+  static const int CSS_FILTER_GRAYSCALE = 2;
+
+  static const int CSS_FILTER_HUE_ROTATE = 5;
+
+  static const int CSS_FILTER_INVERT = 6;
+
+  static const int CSS_FILTER_OPACITY = 7;
+
+  static const int CSS_FILTER_REFERENCE = 1;
+
+  static const int CSS_FILTER_SATURATE = 4;
+
+  static const int CSS_FILTER_SEPIA = 3;
+
+  /** @domName WebKitCSSFilterValue.operationType */
+  final int operationType;
+}
+
+/// @domName WebKitNamedFlow
+class WebKitNamedFlow extends EventTarget native "*WebKitNamedFlow" {
+
+  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
+  final int firstEmptyRegionIndex;
+
+  /** @domName WebKitNamedFlow.name */
+  final String name;
+
+  /** @domName WebKitNamedFlow.overset */
+  final bool overset;
+
+  /** @domName WebKitNamedFlow.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName WebKitNamedFlow.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "dispatchEvent";
+
+  /** @domName WebKitNamedFlow.getContent */
+  List<Node> getContent() native;
+
+  /** @domName WebKitNamedFlow.getRegions */
+  List<Node> getRegions() native;
+
+  /** @domName WebKitNamedFlow.getRegionsByContent */
+  List<Node> getRegionsByContent(Node contentNode) native;
+
+  /** @domName WebKitNamedFlow.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class WebSocket extends EventTarget native "*WebSocket" {
+  factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WebSocketEvents get on =>
+    new WebSocketEvents(this);
+
+  static const int CLOSED = 3;
+
+  static const int CLOSING = 2;
+
+  static const int CONNECTING = 0;
+
+  static const int OPEN = 1;
+
+  /** @domName WebSocket.URL */
+  final String URL;
+
+  /** @domName WebSocket.binaryType */
+  String binaryType;
+
+  /** @domName WebSocket.bufferedAmount */
+  final int bufferedAmount;
+
+  /** @domName WebSocket.extensions */
+  final String extensions;
+
+  /** @domName WebSocket.protocol */
+  final String protocol;
+
+  /** @domName WebSocket.readyState */
+  final int readyState;
+
+  /** @domName WebSocket.url */
+  final String url;
+
+  /** @domName WebSocket.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName WebSocket.close */
+  void close([int code, String reason]) native;
+
+  /** @domName WebSocket.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName WebSocket.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName WebSocket.send */
+  void send(data) native;
+
+}
+
+class WebSocketEvents extends Events {
+  WebSocketEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+// 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 WheelEvent extends MouseEvent native "*WheelEvent" {
+
+  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
+  final bool webkitDirectionInvertedFromDevice;
+
+  /** @domName WheelEvent.initWebKitWheelEvent */
+  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native;
+
+
+  /** @domName WheelEvent.deltaY */
+  num get deltaY {
+    if (JS('bool', '#.deltaY !== undefined', this)) {
+      // W3C WheelEvent
+      return this._deltaY;
+    } else if (JS('bool', '#.wheelDelta !== undefined', this)) {
+      // Chrome and IE
+      return this._wheelDelta;
+    } else if (JS('bool', '#.detail !== undefined', this)) {
+      // Firefox
+
+      // Handle DOMMouseScroll case where it uses detail and the axis to
+      // differentiate.
+      if (JS('bool', '#.axis == MouseScrollEvent.VERTICAL_AXIS', this)) {
+        var detail = this._detail;
+        // Firefox is normally the number of lines to scale (normally 3)
+        // so multiply it by 40 to get pixels to move, matching IE & WebKit.
+        if (detail < 100) {
+          return detail * 40;
+        }
+        return detail;
+      }
+      return 0;
+    }
+    throw new UnsupportedError(
+        'deltaY is not supported');
+  }
+
+  /** @domName WheelEvent.deltaX */
+  num get deltaX {
+    if (JS('bool', '#.deltaX !== undefined', this)) {
+      // W3C WheelEvent
+      return this._deltaX;
+    } else if (JS('bool', '#.wheelDeltaX !== undefined', this)) {
+      // Chrome
+      return this._wheelDeltaX;
+    } else if (JS('bool', '#.detail !== undefined', this)) {
+      // Firefox and IE.
+      // IE will have detail set but will not set axis.
+
+      // Handle DOMMouseScroll case where it uses detail and the axis to
+      // differentiate.
+      if (JS('bool', '#.axis !== undefined && #.axis == MouseScrollEvent.HORIZONTAL_AXIS', this, this)) {
+        var detail = this._detail;
+        // Firefox is normally the number of lines to scale (normally 3)
+        // so multiply it by 40 to get pixels to move, matching IE & WebKit.
+        if (detail < 100) {
+          return detail * 40;
+        }
+        return detail;
+      }
+      return 0;
+    }
+    throw new UnsupportedError(
+        'deltaX is not supported');
+  }
+
+  int get deltaMode {
+    if (JS('bool', '!!#.deltaMode', this)) {
+      // If not available then we're poly-filling and doing pixel scroll.
+      return 0;
+    }
+    return this._deltaMode;
+  }
+
+  num get _deltaY => JS('num', '#.deltaY', this);
+  num get _deltaX => JS('num', '#.deltaX', this);
+  num get _wheelDelta => JS('num', '#.wheelDelta', this);
+  num get _wheelDeltaX => JS('num', '#.wheelDeltaX', this);
+  num get _detail => JS('num', '#.detail', this);
+  int get _deltaMode => JS('int', '#.deltaMode', this);
+
+}
+
+/// @domName Worker
+class Worker extends AbstractWorker native "*Worker" {
+
+  factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WorkerEvents get on =>
+    new WorkerEvents(this);
+
+  /** @domName Worker.postMessage */
+  void postMessage(/*SerializedScriptValue*/ message, [messagePorts]) {
+    if (?messagePorts) {
+      var message_1 = _convertDartToNative_SerializedScriptValue(message);
+      _postMessage_1(message_1, messagePorts);
+      return;
+    }
+    var message_2 = _convertDartToNative_SerializedScriptValue(message);
+    _postMessage_2(message_2);
+    return;
+  }
+  void _postMessage_1(message, List messagePorts) native "postMessage";
+  void _postMessage_2(message) native "postMessage";
+
+  /** @domName Worker.terminate */
+  void terminate() native;
+}
+
+class WorkerEvents extends AbstractWorkerEvents {
+  WorkerEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get message => this['message'];
+}
+
+/// @domName WorkerContext
+class WorkerContext extends EventTarget native "*WorkerContext" {
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WorkerContextEvents get on =>
+    new WorkerContextEvents(this);
+
+  static const int PERSISTENT = 1;
+
+  static const int TEMPORARY = 0;
+
+  /** @domName WorkerContext.indexedDB */
+  final IDBFactory indexedDB;
+
+  /** @domName WorkerContext.location */
+  final WorkerLocation location;
+
+  /** @domName WorkerContext.navigator */
+  final WorkerNavigator navigator;
+
+  /** @domName WorkerContext.self */
+  final WorkerContext self;
+
+  /** @domName WorkerContext.webkitIndexedDB */
+  final IDBFactory webkitIndexedDB;
+
+  /** @domName WorkerContext.webkitNotifications */
+  final NotificationCenter webkitNotifications;
+
+  /** @domName WorkerContext.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "addEventListener";
+
+  /** @domName WorkerContext.clearInterval */
+  void clearInterval(int handle) native;
+
+  /** @domName WorkerContext.clearTimeout */
+  void clearTimeout(int handle) native;
+
+  /** @domName WorkerContext.close */
+  void close() native;
+
+  /** @domName WorkerContext.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "dispatchEvent";
+
+  /** @domName WorkerContext.importScripts */
+  void importScripts() native;
+
+  /** @domName WorkerContext.openDatabase */
+  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
+
+  /** @domName WorkerContext.openDatabaseSync */
+  DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native;
+
+  /** @domName WorkerContext.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "removeEventListener";
+
+  /** @domName WorkerContext.setInterval */
+  int setInterval(TimeoutHandler handler, int timeout) native;
+
+  /** @domName WorkerContext.setTimeout */
+  int setTimeout(TimeoutHandler handler, int timeout) native;
+
+  /** @domName WorkerContext.webkitRequestFileSystem */
+  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native;
+
+  /** @domName WorkerContext.webkitRequestFileSystemSync */
+  DOMFileSystemSync webkitRequestFileSystemSync(int type, int size) native;
+
+  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
+  EntrySync webkitResolveLocalFileSystemSyncURL(String url) native;
+
+  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
+  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native;
+}
+
+class WorkerContextEvents extends Events {
+  WorkerContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get error => this['error'];
+}
+
+/// @domName WorkerLocation
+class WorkerLocation native "*WorkerLocation" {
+
+  /** @domName WorkerLocation.hash */
+  final String hash;
+
+  /** @domName WorkerLocation.host */
+  final String host;
+
+  /** @domName WorkerLocation.hostname */
+  final String hostname;
+
+  /** @domName WorkerLocation.href */
+  final String href;
+
+  /** @domName WorkerLocation.pathname */
+  final String pathname;
+
+  /** @domName WorkerLocation.port */
+  final String port;
+
+  /** @domName WorkerLocation.protocol */
+  final String protocol;
+
+  /** @domName WorkerLocation.search */
+  final String search;
+
+  /** @domName WorkerLocation.toString */
+  String toString() native;
+}
+
+/// @domName WorkerNavigator
+class WorkerNavigator native "*WorkerNavigator" {
+
+  /** @domName WorkerNavigator.appName */
+  final String appName;
+
+  /** @domName WorkerNavigator.appVersion */
+  final String appVersion;
+
+  /** @domName WorkerNavigator.onLine */
+  final bool onLine;
+
+  /** @domName WorkerNavigator.platform */
+  final String platform;
+
+  /** @domName WorkerNavigator.userAgent */
+  final String userAgent;
+}
+
+/// @domName XMLSerializer
+class XMLSerializer native "*XMLSerializer" {
+
+  factory XMLSerializer() => _XMLSerializerFactoryProvider.createXMLSerializer();
+
+  /** @domName XMLSerializer.serializeToString */
+  String serializeToString(Node node) native;
+}
+
+/// @domName XPathEvaluator
+class XPathEvaluator native "*XPathEvaluator" {
+
+  factory XPathEvaluator() => _XPathEvaluatorFactoryProvider.createXPathEvaluator();
+
+  /** @domName XPathEvaluator.createExpression */
+  XPathExpression createExpression(String expression, XPathNSResolver resolver) native;
+
+  /** @domName XPathEvaluator.createNSResolver */
+  XPathNSResolver createNSResolver(Node nodeResolver) native;
+
+  /** @domName XPathEvaluator.evaluate */
+  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native;
+}
+
+/// @domName XPathException
+class XPathException native "*XPathException" {
+
+  static const int INVALID_EXPRESSION_ERR = 51;
+
+  static const int TYPE_ERR = 52;
+
+  /** @domName XPathException.code */
+  final int code;
+
+  /** @domName XPathException.message */
+  final String message;
+
+  /** @domName XPathException.name */
+  final String name;
+
+  /** @domName XPathException.toString */
+  String toString() native;
+}
+
+/// @domName XPathExpression
+class XPathExpression native "*XPathExpression" {
+
+  /** @domName XPathExpression.evaluate */
+  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native;
+}
+
+/// @domName XPathNSResolver
+class XPathNSResolver native "*XPathNSResolver" {
+
+  /** @domName XPathNSResolver.lookupNamespaceURI */
+  String lookupNamespaceURI(String prefix) native;
+}
+
+/// @domName XPathResult
+class XPathResult native "*XPathResult" {
+
+  static const int ANY_TYPE = 0;
+
+  static const int ANY_UNORDERED_NODE_TYPE = 8;
+
+  static const int BOOLEAN_TYPE = 3;
+
+  static const int FIRST_ORDERED_NODE_TYPE = 9;
+
+  static const int NUMBER_TYPE = 1;
+
+  static const int ORDERED_NODE_ITERATOR_TYPE = 5;
+
+  static const int ORDERED_NODE_SNAPSHOT_TYPE = 7;
+
+  static const int STRING_TYPE = 2;
+
+  static const int UNORDERED_NODE_ITERATOR_TYPE = 4;
+
+  static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
+
+  /** @domName XPathResult.booleanValue */
+  final bool booleanValue;
+
+  /** @domName XPathResult.invalidIteratorState */
+  final bool invalidIteratorState;
+
+  /** @domName XPathResult.numberValue */
+  final num numberValue;
+
+  /** @domName XPathResult.resultType */
+  final int resultType;
+
+  /** @domName XPathResult.singleNodeValue */
+  final Node singleNodeValue;
+
+  /** @domName XPathResult.snapshotLength */
+  final int snapshotLength;
+
+  /** @domName XPathResult.stringValue */
+  final String stringValue;
+
+  /** @domName XPathResult.iterateNext */
+  Node iterateNext() native;
+
+  /** @domName XPathResult.snapshotItem */
+  Node snapshotItem(int index) native;
+}
+
+/// @domName XSLTProcessor
+class XSLTProcessor native "*XSLTProcessor" {
+
+  factory XSLTProcessor() => _XSLTProcessorFactoryProvider.createXSLTProcessor();
+
+  /** @domName XSLTProcessor.clearParameters */
+  void clearParameters() native;
+
+  /** @domName XSLTProcessor.getParameter */
+  String getParameter(String namespaceURI, String localName) native;
+
+  /** @domName XSLTProcessor.importStylesheet */
+  void importStylesheet(Node stylesheet) native;
+
+  /** @domName XSLTProcessor.removeParameter */
+  void removeParameter(String namespaceURI, String localName) native;
+
+  /** @domName XSLTProcessor.reset */
+  void reset() native;
+
+  /** @domName XSLTProcessor.setParameter */
+  void setParameter(String namespaceURI, String localName, String value) native;
+
+  /** @domName XSLTProcessor.transformToDocument */
+  Document transformToDocument(Node source) native;
+
+  /** @domName XSLTProcessor.transformToFragment */
+  DocumentFragment transformToFragment(Node source, Document docVal) native;
+}
+// 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 _ArrayBufferFactoryProvider {
+  static ArrayBuffer createArrayBuffer(int length) =>
+      JS('ArrayBuffer', 'new ArrayBuffer(#)', length);
+}
+// 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 _AudioElementFactoryProvider {
+  static AudioElement createAudioElement([String src = null]) {
+    if (src == null) return JS('AudioElement', 'new Audio()');
+    return JS('AudioElement', 'new Audio(#)', src);
+  }
+}
+// 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 _BlobFactoryProvider {
+  static Blob createBlob([List blobParts = null, String type, String endings]) {
+    // TODO: validate that blobParts is a JS Array and convert if not.
+    // TODO: any coercions on the elements of blobParts, e.g. coerce a typed
+    // array to ArrayBuffer if it is a total view.
+    if (type == null && endings == null) {
+      return _create_1(blobParts);
+    }
+    var bag = _create_bag();
+    if (type != null) _bag_set(bag, 'type', type);
+    if (endings != null) _bag_set(bag, 'endings', endings);
+    return _create_2(blobParts, bag);
+  }
+
+  static _create_1(parts) => JS('Blob', 'new Blob(#)', parts);
+  static _create_2(parts, bag) => JS('Blob', 'new Blob(#, #)', parts, bag);
+
+  static _create_bag() => JS('var', '{}');
+  static _bag_set(bag, key, value) { JS('void', '#[#] = #', bag, key, value); }
+}
+// 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 _CSSMatrixFactoryProvider {
+  static CSSMatrix createCSSMatrix([String cssValue = '']) =>
+      JS('CSSMatrix', 'new WebKitCSSMatrix(#)', cssValue);
+}
+
+/// @domName CSSRuleList
+class _CSSRuleList implements JavaScriptIndexingBehavior, List<CSSRule> native "*CSSRuleList" {
+
+  /** @domName CSSRuleList.length */
+  final int length;
+
+  CSSRule operator[](int index) => JS("CSSRule", "#[#]", this, index);
+
+  void operator[]=(int index, CSSRule value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<CSSRule> mixins.
+  // CSSRule is the element type.
+
+  // From Iterable<CSSRule>:
+
+  Iterator<CSSRule> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<CSSRule>(this);
+  }
+
+  // From Collection<CSSRule>:
+
+  void add(CSSRule value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(CSSRule value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<CSSRule> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(CSSRule element) => _Collections.contains(this, element);
+
+  void forEach(void f(CSSRule element)) => _Collections.forEach(this, f);
+
+  Collection map(f(CSSRule element)) => _Collections.map(this, [], f);
+
+  Collection<CSSRule> filter(bool f(CSSRule element)) =>
+     _Collections.filter(this, <CSSRule>[], f);
+
+  bool every(bool f(CSSRule element)) => _Collections.every(this, f);
+
+  bool some(bool f(CSSRule element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<CSSRule>:
+
+  void sort([Comparator<CSSRule> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(CSSRule element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(CSSRule element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  CSSRule get last => this[length - 1];
+
+  CSSRule removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<CSSRule> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <CSSRule>[]);
+
+  // -- end List<CSSRule> mixins.
+
+  /** @domName CSSRuleList.item */
+  CSSRule item(int index) native;
+}
+
+/// @domName CSSValueList
+class _CSSValueList extends CSSValue implements List<CSSValue>, JavaScriptIndexingBehavior native "*CSSValueList" {
+
+  /** @domName CSSValueList.length */
+  final int length;
+
+  CSSValue operator[](int index) => JS("CSSValue", "#[#]", this, index);
+
+  void operator[]=(int index, CSSValue value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<CSSValue> mixins.
+  // CSSValue is the element type.
+
+  // From Iterable<CSSValue>:
+
+  Iterator<CSSValue> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<CSSValue>(this);
+  }
+
+  // From Collection<CSSValue>:
+
+  void add(CSSValue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(CSSValue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<CSSValue> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(CSSValue element) => _Collections.contains(this, element);
+
+  void forEach(void f(CSSValue element)) => _Collections.forEach(this, f);
+
+  Collection map(f(CSSValue element)) => _Collections.map(this, [], f);
+
+  Collection<CSSValue> filter(bool f(CSSValue element)) =>
+     _Collections.filter(this, <CSSValue>[], f);
+
+  bool every(bool f(CSSValue element)) => _Collections.every(this, f);
+
+  bool some(bool f(CSSValue element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<CSSValue>:
+
+  void sort([Comparator<CSSValue> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(CSSValue element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(CSSValue element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  CSSValue get last => this[length - 1];
+
+  CSSValue removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<CSSValue> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <CSSValue>[]);
+
+  // -- end List<CSSValue> mixins.
+
+  /** @domName CSSValueList.item */
+  CSSValue item(int index) native;
+}
+
+/// @domName ClientRectList
+class _ClientRectList implements JavaScriptIndexingBehavior, List<ClientRect> native "*ClientRectList" {
+
+  /** @domName ClientRectList.length */
+  final int length;
+
+  ClientRect operator[](int index) => JS("ClientRect", "#[#]", this, index);
+
+  void operator[]=(int index, ClientRect value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<ClientRect> mixins.
+  // ClientRect is the element type.
+
+  // From Iterable<ClientRect>:
+
+  Iterator<ClientRect> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<ClientRect>(this);
+  }
+
+  // From Collection<ClientRect>:
+
+  void add(ClientRect value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(ClientRect value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<ClientRect> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(ClientRect element) => _Collections.contains(this, element);
+
+  void forEach(void f(ClientRect element)) => _Collections.forEach(this, f);
+
+  Collection map(f(ClientRect element)) => _Collections.map(this, [], f);
+
+  Collection<ClientRect> filter(bool f(ClientRect element)) =>
+     _Collections.filter(this, <ClientRect>[], f);
+
+  bool every(bool f(ClientRect element)) => _Collections.every(this, f);
+
+  bool some(bool f(ClientRect element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<ClientRect>:
+
+  void sort([Comparator<ClientRect> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(ClientRect element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(ClientRect element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  ClientRect get last => this[length - 1];
+
+  ClientRect removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<ClientRect> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <ClientRect>[]);
+
+  // -- end List<ClientRect> mixins.
+
+  /** @domName ClientRectList.item */
+  ClientRect item(int index) native;
+}
+// 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 _DOMParserFactoryProvider {
+  static DOMParser createDOMParser() =>
+      JS('DOMParser', 'new DOMParser()' );
+}
+
+/// @domName DOMStringList
+class _DOMStringList implements JavaScriptIndexingBehavior, List<String> native "*DOMStringList" {
+
+  /** @domName DOMStringList.length */
+  final int length;
+
+  String operator[](int index) => JS("String", "#[#]", this, index);
+
+  void operator[]=(int index, String value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<String> mixins.
+  // String is the element type.
+
+  // From Iterable<String>:
+
+  Iterator<String> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<String>(this);
+  }
+
+  // From Collection<String>:
+
+  void add(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<String> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  // contains() defined by IDL.
+
+  void forEach(void f(String element)) => _Collections.forEach(this, f);
+
+  Collection map(f(String element)) => _Collections.map(this, [], f);
+
+  Collection<String> filter(bool f(String element)) =>
+     _Collections.filter(this, <String>[], f);
+
+  bool every(bool f(String element)) => _Collections.every(this, f);
+
+  bool some(bool f(String element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<String>:
+
+  void sort([Comparator<String> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(String element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(String element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  String get last => this[length - 1];
+
+  String removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [String initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<String> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <String>[]);
+
+  // -- end List<String> mixins.
+
+  /** @domName DOMStringList.contains */
+  bool contains(String string) native;
+
+  /** @domName DOMStringList.item */
+  String item(int index) native;
+}
+// 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 _DataViewFactoryProvider {
+  static DataView createDataView(
+      ArrayBuffer buffer, [int byteOffset = null, int byteLength = null]) {
+    if (byteOffset == null) {
+      return JS('DataView', 'new DataView(#)', buffer);
+    }
+    if (byteLength == null) {
+      return JS('DataView', 'new DataView(#,#)', buffer, byteOffset);
+    }
+    return JS('DataView', 'new DataView(#,#,#)', buffer, byteOffset, byteLength);
+  }
+}
+// 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 {
+
+
+  static AnchorElement createAnchorElement([String href]) {
+    AnchorElement _e = document.$dom_createElement("a");
+    if (href != null) _e.href = href;
+    return _e;
+  }
+
+  static AreaElement createAreaElement() {
+    AreaElement _e = document.$dom_createElement("area");
+    return _e;
+  }
+
+  static BRElement createBRElement() {
+    BRElement _e = document.$dom_createElement("br");
+    return _e;
+  }
+
+  static BaseElement createBaseElement() {
+    BaseElement _e = document.$dom_createElement("base");
+    return _e;
+  }
+
+  static BodyElement createBodyElement() {
+    BodyElement _e = document.$dom_createElement("body");
+    return _e;
+  }
+
+  static ButtonElement createButtonElement() {
+    ButtonElement _e = document.$dom_createElement("button");
+    return _e;
+  }
+
+  static CanvasElement createCanvasElement([int width, int height]) {
+    CanvasElement _e = document.$dom_createElement("canvas");
+    if (width != null) _e.width = width;
+    if (height != null) _e.height = height;
+    return _e;
+  }
+
+  static ContentElement createContentElement() {
+    ContentElement _e = document.$dom_createElement("content");
+    return _e;
+  }
+
+  static DListElement createDListElement() {
+    DListElement _e = document.$dom_createElement("dl");
+    return _e;
+  }
+
+  static DataListElement createDataListElement() {
+    DataListElement _e = document.$dom_createElement("datalist");
+    return _e;
+  }
+
+  static DetailsElement createDetailsElement() {
+    DetailsElement _e = document.$dom_createElement("details");
+    return _e;
+  }
+
+  static DivElement createDivElement() {
+    DivElement _e = document.$dom_createElement("div");
+    return _e;
+  }
+
+  static EmbedElement createEmbedElement() {
+    EmbedElement _e = document.$dom_createElement("embed");
+    return _e;
+  }
+
+  static FieldSetElement createFieldSetElement() {
+    FieldSetElement _e = document.$dom_createElement("fieldset");
+    return _e;
+  }
+
+  static FormElement createFormElement() {
+    FormElement _e = document.$dom_createElement("form");
+    return _e;
+  }
+
+  static HRElement createHRElement() {
+    HRElement _e = document.$dom_createElement("hr");
+    return _e;
+  }
+
+  static HeadElement createHeadElement() {
+    HeadElement _e = document.$dom_createElement("head");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h1() {
+    HeadingElement _e = document.$dom_createElement("h1");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h2() {
+    HeadingElement _e = document.$dom_createElement("h2");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h3() {
+    HeadingElement _e = document.$dom_createElement("h3");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h4() {
+    HeadingElement _e = document.$dom_createElement("h4");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h5() {
+    HeadingElement _e = document.$dom_createElement("h5");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h6() {
+    HeadingElement _e = document.$dom_createElement("h6");
+    return _e;
+  }
+
+  static HtmlElement createHtmlElement() {
+    HtmlElement _e = document.$dom_createElement("html");
+    return _e;
+  }
+
+  static IFrameElement createIFrameElement() {
+    IFrameElement _e = document.$dom_createElement("iframe");
+    return _e;
+  }
+
+  static ImageElement createImageElement([String src, int width, int height]) {
+    ImageElement _e = document.$dom_createElement("img");
+    if (src != null) _e.src = src;
+    if (width != null) _e.width = width;
+    if (height != null) _e.height = height;
+    return _e;
+  }
+
+  static InputElement createInputElement([String type]) {
+    InputElement _e = document.$dom_createElement("input");
+    if (type != null) _e.type = type;
+    return _e;
+  }
+
+  static KeygenElement createKeygenElement() {
+    KeygenElement _e = document.$dom_createElement("keygen");
+    return _e;
+  }
+
+  static LIElement createLIElement() {
+    LIElement _e = document.$dom_createElement("li");
+    return _e;
+  }
+
+  static LabelElement createLabelElement() {
+    LabelElement _e = document.$dom_createElement("label");
+    return _e;
+  }
+
+  static LegendElement createLegendElement() {
+    LegendElement _e = document.$dom_createElement("legend");
+    return _e;
+  }
+
+  static LinkElement createLinkElement() {
+    LinkElement _e = document.$dom_createElement("link");
+    return _e;
+  }
+
+  static MapElement createMapElement() {
+    MapElement _e = document.$dom_createElement("map");
+    return _e;
+  }
+
+  static MenuElement createMenuElement() {
+    MenuElement _e = document.$dom_createElement("menu");
+    return _e;
+  }
+
+  static MeterElement createMeterElement() {
+    MeterElement _e = document.$dom_createElement("meter");
+    return _e;
+  }
+
+  static OListElement createOListElement() {
+    OListElement _e = document.$dom_createElement("ol");
+    return _e;
+  }
+
+  static ObjectElement createObjectElement() {
+    ObjectElement _e = document.$dom_createElement("object");
+    return _e;
+  }
+
+  static OptGroupElement createOptGroupElement() {
+    OptGroupElement _e = document.$dom_createElement("optgroup");
+    return _e;
+  }
+
+  static OutputElement createOutputElement() {
+    OutputElement _e = document.$dom_createElement("output");
+    return _e;
+  }
+
+  static ParagraphElement createParagraphElement() {
+    ParagraphElement _e = document.$dom_createElement("p");
+    return _e;
+  }
+
+  static ParamElement createParamElement() {
+    ParamElement _e = document.$dom_createElement("param");
+    return _e;
+  }
+
+  static PreElement createPreElement() {
+    PreElement _e = document.$dom_createElement("pre");
+    return _e;
+  }
+
+  static ProgressElement createProgressElement() {
+    ProgressElement _e = document.$dom_createElement("progress");
+    return _e;
+  }
+
+  static ScriptElement createScriptElement() {
+    ScriptElement _e = document.$dom_createElement("script");
+    return _e;
+  }
+
+  static SelectElement createSelectElement() {
+    SelectElement _e = document.$dom_createElement("select");
+    return _e;
+  }
+
+  static SourceElement createSourceElement() {
+    SourceElement _e = document.$dom_createElement("source");
+    return _e;
+  }
+
+  static SpanElement createSpanElement() {
+    SpanElement _e = document.$dom_createElement("span");
+    return _e;
+  }
+
+  static StyleElement createStyleElement() {
+    StyleElement _e = document.$dom_createElement("style");
+    return _e;
+  }
+
+  static TableCaptionElement createTableCaptionElement() {
+    TableCaptionElement _e = document.$dom_createElement("caption");
+    return _e;
+  }
+
+  static TableCellElement createTableCellElement() {
+    TableCellElement _e = document.$dom_createElement("td");
+    return _e;
+  }
+
+  static TableColElement createTableColElement() {
+    TableColElement _e = document.$dom_createElement("col");
+    return _e;
+  }
+
+  static TableElement createTableElement() {
+    TableElement _e = document.$dom_createElement("table");
+    return _e;
+  }
+
+  static TableRowElement createTableRowElement() {
+    TableRowElement _e = document.$dom_createElement("tr");
+    return _e;
+  }
+
+  static TextAreaElement createTextAreaElement() {
+    TextAreaElement _e = document.$dom_createElement("textarea");
+    return _e;
+  }
+
+  static TitleElement createTitleElement() {
+    TitleElement _e = document.$dom_createElement("title");
+    return _e;
+  }
+
+  static TrackElement createTrackElement() {
+    TrackElement _e = document.$dom_createElement("track");
+    return _e;
+  }
+
+  static UListElement createUListElement() {
+    UListElement _e = document.$dom_createElement("ul");
+    return _e;
+  }
+
+  static VideoElement createVideoElement() {
+    VideoElement _e = document.$dom_createElement("video");
+    return _e;
+  }
+}
+
+/// @domName EntryArray
+class _EntryArray implements JavaScriptIndexingBehavior, List<Entry> native "*EntryArray" {
+
+  /** @domName EntryArray.length */
+  final int length;
+
+  Entry operator[](int index) => JS("Entry", "#[#]", this, index);
+
+  void operator[]=(int index, Entry value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Entry> mixins.
+  // Entry is the element type.
+
+  // From Iterable<Entry>:
+
+  Iterator<Entry> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Entry>(this);
+  }
+
+  // From Collection<Entry>:
+
+  void add(Entry value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Entry value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Entry> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Entry element) => _Collections.contains(this, element);
+
+  void forEach(void f(Entry element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Entry element)) => _Collections.map(this, [], f);
+
+  Collection<Entry> filter(bool f(Entry element)) =>
+     _Collections.filter(this, <Entry>[], f);
+
+  bool every(bool f(Entry element)) => _Collections.every(this, f);
+
+  bool some(bool f(Entry element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Entry>:
+
+  void sort([Comparator<Entry> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Entry element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Entry element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Entry get last => this[length - 1];
+
+  Entry removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Entry initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Entry> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Entry>[]);
+
+  // -- end List<Entry> mixins.
+
+  /** @domName EntryArray.item */
+  Entry item(int index) native;
+}
+
+/// @domName EntryArraySync
+class _EntryArraySync implements JavaScriptIndexingBehavior, List<EntrySync> native "*EntryArraySync" {
+
+  /** @domName EntryArraySync.length */
+  final int length;
+
+  EntrySync operator[](int index) => JS("EntrySync", "#[#]", this, index);
+
+  void operator[]=(int index, EntrySync value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<EntrySync> mixins.
+  // EntrySync is the element type.
+
+  // From Iterable<EntrySync>:
+
+  Iterator<EntrySync> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<EntrySync>(this);
+  }
+
+  // From Collection<EntrySync>:
+
+  void add(EntrySync value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(EntrySync value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<EntrySync> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(EntrySync element) => _Collections.contains(this, element);
+
+  void forEach(void f(EntrySync element)) => _Collections.forEach(this, f);
+
+  Collection map(f(EntrySync element)) => _Collections.map(this, [], f);
+
+  Collection<EntrySync> filter(bool f(EntrySync element)) =>
+     _Collections.filter(this, <EntrySync>[], f);
+
+  bool every(bool f(EntrySync element)) => _Collections.every(this, f);
+
+  bool some(bool f(EntrySync element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<EntrySync>:
+
+  void sort([Comparator<EntrySync> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(EntrySync element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(EntrySync element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  EntrySync get last => this[length - 1];
+
+  EntrySync removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<EntrySync> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <EntrySync>[]);
+
+  // -- end List<EntrySync> mixins.
+
+  /** @domName EntryArraySync.item */
+  EntrySync item(int index) native;
+}
+// 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 _EventSourceFactoryProvider {
+  static EventSource createEventSource(String scriptUrl) =>
+      JS('EventSource', 'new EventSource(#)', scriptUrl);
+}
+
+/// @domName FileList
+class _FileList implements JavaScriptIndexingBehavior, List<File> native "*FileList" {
+
+  /** @domName FileList.length */
+  final int length;
+
+  File operator[](int index) => JS("File", "#[#]", this, index);
+
+  void operator[]=(int index, File value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<File> mixins.
+  // File is the element type.
+
+  // From Iterable<File>:
+
+  Iterator<File> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<File>(this);
+  }
+
+  // From Collection<File>:
+
+  void add(File value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(File value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<File> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(File element) => _Collections.contains(this, element);
+
+  void forEach(void f(File element)) => _Collections.forEach(this, f);
+
+  Collection map(f(File element)) => _Collections.map(this, [], f);
+
+  Collection<File> filter(bool f(File element)) =>
+     _Collections.filter(this, <File>[], f);
+
+  bool every(bool f(File element)) => _Collections.every(this, f);
+
+  bool some(bool f(File element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<File>:
+
+  void sort([Comparator<File> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(File element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(File element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  File get last => this[length - 1];
+
+  File removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [File initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<File> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <File>[]);
+
+  // -- end List<File> mixins.
+
+  /** @domName FileList.item */
+  File item(int index) native;
+}
+// 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 _FileReaderFactoryProvider {
+  static FileReader createFileReader() =>
+      JS('FileReader', 'new FileReader()' );
+}
+// 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 _FileReaderSyncFactoryProvider {
+  static FileReaderSync createFileReaderSync() =>
+      JS('FileReaderSync', 'new FileReaderSync()' );
+}
+// 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 _FormDataFactoryProvider {
+  static FormData createFormData([FormElement form = null]) {
+    if (form == null) return JS('FormData', 'new FormData()');
+    return JS('FormData', 'new FormData(#)', form);
+  }
+}
+
+/// @domName GamepadList
+class _GamepadList implements JavaScriptIndexingBehavior, List<Gamepad> native "*GamepadList" {
+
+  /** @domName GamepadList.length */
+  final int length;
+
+  Gamepad operator[](int index) => JS("Gamepad", "#[#]", this, index);
+
+  void operator[]=(int index, Gamepad value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Gamepad> mixins.
+  // Gamepad is the element type.
+
+  // From Iterable<Gamepad>:
+
+  Iterator<Gamepad> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Gamepad>(this);
+  }
+
+  // From Collection<Gamepad>:
+
+  void add(Gamepad value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Gamepad value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Gamepad> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Gamepad element) => _Collections.contains(this, element);
+
+  void forEach(void f(Gamepad element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Gamepad element)) => _Collections.map(this, [], f);
+
+  Collection<Gamepad> filter(bool f(Gamepad element)) =>
+     _Collections.filter(this, <Gamepad>[], f);
+
+  bool every(bool f(Gamepad element)) => _Collections.every(this, f);
+
+  bool some(bool f(Gamepad element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Gamepad>:
+
+  void sort([Comparator<Gamepad> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Gamepad element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Gamepad element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Gamepad get last => this[length - 1];
+
+  Gamepad removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Gamepad> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Gamepad>[]);
+
+  // -- end List<Gamepad> mixins.
+
+  /** @domName GamepadList.item */
+  Gamepad item(int index) native;
+}
+// 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 _HttpRequestFactoryProvider {
+  static HttpRequest createHttpRequest() =>
+      JS('HttpRequest', 'new XMLHttpRequest()');
+
+  static HttpRequest createHttpRequest_get(String url,
+      onSuccess(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onSuccess, false);
+
+  static HttpRequest createHttpRequest_getWithCredentials(String url,
+      onSuccess(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onSuccess, true);
+}
+// 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 _IceCandidateFactoryProvider {
+  static IceCandidate createIceCandidate(String label, String candidateLine) =>
+      JS('IceCandidate', 'new IceCandidate(#,#)', label, candidateLine);
+}
+// 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 _MediaControllerFactoryProvider {
+  static MediaController createMediaController() =>
+      JS('MediaController', 'new MediaController()' );
+}
+// 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 _MediaSourceFactoryProvider {
+  static MediaSource createMediaSource() =>
+      JS('MediaSource', 'new MediaSource()' );
+}
+// 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 _MediaStreamFactoryProvider {
+  static MediaStream createMediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) =>
+      JS('MediaStream', 'new MediaStream(#,#)', audioTracks, videoTracks);
+}
+
+/// @domName MediaStreamList
+class _MediaStreamList implements JavaScriptIndexingBehavior, List<MediaStream> native "*MediaStreamList" {
+
+  /** @domName MediaStreamList.length */
+  final int length;
+
+  MediaStream operator[](int index) => JS("MediaStream", "#[#]", this, index);
+
+  void operator[]=(int index, MediaStream value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<MediaStream> mixins.
+  // MediaStream is the element type.
+
+  // From Iterable<MediaStream>:
+
+  Iterator<MediaStream> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<MediaStream>(this);
+  }
+
+  // From Collection<MediaStream>:
+
+  void add(MediaStream value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(MediaStream value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<MediaStream> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(MediaStream element) => _Collections.contains(this, element);
+
+  void forEach(void f(MediaStream element)) => _Collections.forEach(this, f);
+
+  Collection map(f(MediaStream element)) => _Collections.map(this, [], f);
+
+  Collection<MediaStream> filter(bool f(MediaStream element)) =>
+     _Collections.filter(this, <MediaStream>[], f);
+
+  bool every(bool f(MediaStream element)) => _Collections.every(this, f);
+
+  bool some(bool f(MediaStream element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<MediaStream>:
+
+  void sort([Comparator<MediaStream> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(MediaStream element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(MediaStream element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  MediaStream get last => this[length - 1];
+
+  MediaStream removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<MediaStream> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <MediaStream>[]);
+
+  // -- end List<MediaStream> mixins.
+
+  /** @domName MediaStreamList.item */
+  MediaStream item(int index) native;
+}
+// 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 _MessageChannelFactoryProvider {
+  static MessageChannel createMessageChannel() =>
+      JS('MessageChannel', 'new MessageChannel()' );
+}
+// 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 _MutationObserverFactoryProvider {
+  static MutationObserver createMutationObserver(MutationCallback callback) native '''
+    var constructor =
+        window.MutationObserver || window.WebKitMutationObserver ||
+        window.MozMutationObserver;
+    return new constructor(callback);
+  ''';
+
+  // TODO(sra): Dart2js inserts a conversion when a Dart function (i.e. an
+  // object with a call method) is passed to a native method.  This is so the
+  // native code sees a JavaScript function.
+  //
+  // This does not happen when a function is 'passed' to a JS-form so it is not
+  // possible to rewrite the above code to, e.g. (simplified):
+  //
+  // static createMutationObserver(MutationCallback callback) =>
+  //    JS('var', 'new (window.MutationObserver)(#)', callback);
+}
+// 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 _NotificationFactoryProvider {
+  static Notification createNotification(String title, [Map options]) =>
+      JS('Notification', 'new Notification(#,#)', title, options);
+}
+// 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 _OptionElementFactoryProvider {
+  static OptionElement createOptionElement(
+      [String data, String value, bool defaultSelected, bool selected]) {
+    if (data == null) {
+      return JS('OptionElement', 'new Option()');
+    }
+    if (value == null) {
+      return JS('OptionElement', 'new Option(#)', data);
+    }
+    if (defaultSelected == null) {
+      return JS('OptionElement', 'new Option(#,#)', data, value);
+    }
+    if (selected == null) {
+      return JS('OptionElement', 'new Option(#,#,#)',
+                data, value, defaultSelected);
+    }
+    return JS('OptionElement', 'new Option(#,#,#,#)',
+              data, value, defaultSelected, selected);
+  }
+}
+// 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 _PeerConnection00FactoryProvider {
+  static PeerConnection00 createPeerConnection00(String serverConfiguration, IceCallback iceCallback) =>
+      JS('PeerConnection00', 'new PeerConnection00(#,#)', serverConfiguration, iceCallback);
+}
+// 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 _RTCIceCandidateFactoryProvider {
+  static RTCIceCandidate createRTCIceCandidate(Map dictionary) =>
+      JS('RTCIceCandidate', 'new RTCIceCandidate(#)', dictionary);
+}
+// 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 _RTCPeerConnectionFactoryProvider {
+  static RTCPeerConnection createRTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) =>
+      JS('RTCPeerConnection', 'new RTCPeerConnection(#,#)', rtcIceServers, mediaConstraints);
+}
+// 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 _RTCSessionDescriptionFactoryProvider {
+  static RTCSessionDescription createRTCSessionDescription(Map dictionary) =>
+      JS('RTCSessionDescription', 'new RTCSessionDescription(#)', dictionary);
+}
+
+/// @domName SVGElementInstanceList
+class _SVGElementInstanceList implements JavaScriptIndexingBehavior, List<SVGElementInstance> native "*SVGElementInstanceList" {
+
+  /** @domName SVGElementInstanceList.length */
+  final int length;
+
+  SVGElementInstance operator[](int index) => JS("SVGElementInstance", "#[#]", this, index);
+
+  void operator[]=(int index, SVGElementInstance value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGElementInstance> mixins.
+  // SVGElementInstance is the element type.
+
+  // From Iterable<SVGElementInstance>:
+
+  Iterator<SVGElementInstance> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGElementInstance>(this);
+  }
+
+  // From Collection<SVGElementInstance>:
+
+  void add(SVGElementInstance value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGElementInstance value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGElementInstance> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
+
+  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
+     _Collections.filter(this, <SVGElementInstance>[], f);
+
+  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGElementInstance>:
+
+  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGElementInstance element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGElementInstance element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGElementInstance get last => this[length - 1];
+
+  SVGElementInstance removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGElementInstance> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
+
+  // -- end List<SVGElementInstance> mixins.
+
+  /** @domName SVGElementInstanceList.item */
+  SVGElementInstance item(int index) native;
+}
+// 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 _SessionDescriptionFactoryProvider {
+  static SessionDescription createSessionDescription(String sdp) =>
+      JS('SessionDescription', 'new SessionDescription(#)', sdp);
+}
+// 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 _ShadowRootFactoryProvider {
+  static ShadowRoot createShadowRoot(Element host) =>
+      JS('ShadowRoot',
+         'new (window.ShadowRoot || window.WebKitShadowRoot)(#)', host);
+}
+// 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 _SharedWorkerFactoryProvider {
+  static SharedWorker createSharedWorker(String scriptURL, [String name]) {
+    if (name == null) return JS('SharedWorker', 'new SharedWorker(#)', scriptURL);
+    return JS('SharedWorker', 'new SharedWorker(#,#)', scriptURL, name);
+  }
+}
+// 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 _SpeechGrammarFactoryProvider {
+  static SpeechGrammar createSpeechGrammar() =>
+      JS('SpeechGrammar', 'new SpeechGrammar()' );
+}
+// 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 _SpeechGrammarListFactoryProvider {
+  static SpeechGrammarList createSpeechGrammarList() =>
+      JS('SpeechGrammarList', 'new SpeechGrammarList()' );
+}
+
+/// @domName SpeechInputResultList
+class _SpeechInputResultList implements JavaScriptIndexingBehavior, List<SpeechInputResult> native "*SpeechInputResultList" {
+
+  /** @domName SpeechInputResultList.length */
+  final int length;
+
+  SpeechInputResult operator[](int index) => JS("SpeechInputResult", "#[#]", this, index);
+
+  void operator[]=(int index, SpeechInputResult value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SpeechInputResult> mixins.
+  // SpeechInputResult is the element type.
+
+  // From Iterable<SpeechInputResult>:
+
+  Iterator<SpeechInputResult> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SpeechInputResult>(this);
+  }
+
+  // From Collection<SpeechInputResult>:
+
+  void add(SpeechInputResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SpeechInputResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SpeechInputResult> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SpeechInputResult element) => _Collections.contains(this, element);
+
+  void forEach(void f(SpeechInputResult element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SpeechInputResult element)) => _Collections.map(this, [], f);
+
+  Collection<SpeechInputResult> filter(bool f(SpeechInputResult element)) =>
+     _Collections.filter(this, <SpeechInputResult>[], f);
+
+  bool every(bool f(SpeechInputResult element)) => _Collections.every(this, f);
+
+  bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SpeechInputResult>:
+
+  void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SpeechInputResult element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SpeechInputResult element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SpeechInputResult get last => this[length - 1];
+
+  SpeechInputResult removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SpeechInputResult> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SpeechInputResult>[]);
+
+  // -- end List<SpeechInputResult> mixins.
+
+  /** @domName SpeechInputResultList.item */
+  SpeechInputResult item(int index) native;
+}
+// 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 _SpeechRecognitionFactoryProvider {
+  static SpeechRecognition createSpeechRecognition() =>
+      JS('SpeechRecognition', 'new SpeechRecognition()' );
+}
+
+/// @domName SpeechRecognitionResultList
+class _SpeechRecognitionResultList implements JavaScriptIndexingBehavior, List<SpeechRecognitionResult> native "*SpeechRecognitionResultList" {
+
+  /** @domName SpeechRecognitionResultList.length */
+  final int length;
+
+  SpeechRecognitionResult operator[](int index) => JS("SpeechRecognitionResult", "#[#]", this, index);
+
+  void operator[]=(int index, SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SpeechRecognitionResult> mixins.
+  // SpeechRecognitionResult is the element type.
+
+  // From Iterable<SpeechRecognitionResult>:
+
+  Iterator<SpeechRecognitionResult> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SpeechRecognitionResult>(this);
+  }
+
+  // From Collection<SpeechRecognitionResult>:
+
+  void add(SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SpeechRecognitionResult> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
+
+  void forEach(void f(SpeechRecognitionResult element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SpeechRecognitionResult element)) => _Collections.map(this, [], f);
+
+  Collection<SpeechRecognitionResult> filter(bool f(SpeechRecognitionResult element)) =>
+     _Collections.filter(this, <SpeechRecognitionResult>[], f);
+
+  bool every(bool f(SpeechRecognitionResult element)) => _Collections.every(this, f);
+
+  bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SpeechRecognitionResult>:
+
+  void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SpeechRecognitionResult element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SpeechRecognitionResult get last => this[length - 1];
+
+  SpeechRecognitionResult removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SpeechRecognitionResult>[]);
+
+  // -- end List<SpeechRecognitionResult> mixins.
+
+  /** @domName SpeechRecognitionResultList.item */
+  SpeechRecognitionResult item(int index) native;
+}
+
+/// @domName StyleSheetList
+class _StyleSheetList implements JavaScriptIndexingBehavior, List<StyleSheet> native "*StyleSheetList" {
+
+  /** @domName StyleSheetList.length */
+  final int length;
+
+  StyleSheet operator[](int index) => JS("StyleSheet", "#[#]", this, index);
+
+  void operator[]=(int index, StyleSheet value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<StyleSheet> mixins.
+  // StyleSheet is the element type.
+
+  // From Iterable<StyleSheet>:
+
+  Iterator<StyleSheet> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<StyleSheet>(this);
+  }
+
+  // From Collection<StyleSheet>:
+
+  void add(StyleSheet value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(StyleSheet value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<StyleSheet> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(StyleSheet element) => _Collections.contains(this, element);
+
+  void forEach(void f(StyleSheet element)) => _Collections.forEach(this, f);
+
+  Collection map(f(StyleSheet element)) => _Collections.map(this, [], f);
+
+  Collection<StyleSheet> filter(bool f(StyleSheet element)) =>
+     _Collections.filter(this, <StyleSheet>[], f);
+
+  bool every(bool f(StyleSheet element)) => _Collections.every(this, f);
+
+  bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<StyleSheet>:
+
+  void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(StyleSheet element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(StyleSheet element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  StyleSheet get last => this[length - 1];
+
+  StyleSheet removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<StyleSheet> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <StyleSheet>[]);
+
+  // -- end List<StyleSheet> mixins.
+
+  /** @domName StyleSheetList.item */
+  StyleSheet item(int index) native;
+}
+// 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 _TextTrackCueFactoryProvider {
+  static TextTrackCue createTextTrackCue(
+      String id, num startTime, num endTime, String text,
+      [String settings, bool pauseOnExit]) {
+        if (settings == null) {
+          return JS('TextTrackCue',
+                    'new TextTrackCue(#,#,#,#)',
+                    id, startTime, endTime, text);
+        }
+        if (pauseOnExit == null) {
+          return JS('TextTrackCue',
+                    'new TextTrackCue(#,#,#,#,#)',
+                    id, startTime, endTime, text, settings);
+        }
+        return JS('TextTrackCue',
+                  'new TextTrackCue(#,#,#,#,#,#)',
+                  id, startTime, endTime, text, settings, pauseOnExit);
+  }
+}
+
+/// @domName WebKitAnimationList
+class _WebKitAnimationList implements JavaScriptIndexingBehavior, List<Animation> native "*WebKitAnimationList" {
+
+  /** @domName WebKitAnimationList.length */
+  final int length;
+
+  Animation operator[](int index) => JS("Animation", "#[#]", this, index);
+
+  void operator[]=(int index, Animation value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Animation> mixins.
+  // Animation is the element type.
+
+  // From Iterable<Animation>:
+
+  Iterator<Animation> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Animation>(this);
+  }
+
+  // From Collection<Animation>:
+
+  void add(Animation value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Animation value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Animation> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Animation element) => _Collections.contains(this, element);
+
+  void forEach(void f(Animation element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Animation element)) => _Collections.map(this, [], f);
+
+  Collection<Animation> filter(bool f(Animation element)) =>
+     _Collections.filter(this, <Animation>[], f);
+
+  bool every(bool f(Animation element)) => _Collections.every(this, f);
+
+  bool some(bool f(Animation element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Animation>:
+
+  void sort([Comparator<Animation> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Animation element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Animation element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Animation get last => this[length - 1];
+
+  Animation removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Animation> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Animation initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Animation> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Animation>[]);
+
+  // -- end List<Animation> mixins.
+
+  /** @domName WebKitAnimationList.item */
+  Animation item(int index) native;
+}
+// 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 _WorkerFactoryProvider {
+  static Worker createWorker(String scriptUrl) =>
+      JS('Worker', 'new Worker(#)', scriptUrl);
+}
+// 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 _XMLSerializerFactoryProvider {
+  static XMLSerializer createXMLSerializer() =>
+      JS('XMLSerializer', 'new XMLSerializer()' );
+}
+// 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 _XPathEvaluatorFactoryProvider {
+  static XPathEvaluator createXPathEvaluator() =>
+      JS('XPathEvaluator', 'new XPathEvaluator()' );
+}
+// 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 _XSLTProcessorFactoryProvider {
+  static XSLTProcessor createXSLTProcessor() =>
+      JS('XSLTProcessor', 'new XSLTProcessor()' );
+}
+// 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.
+
+abstract class Window {
+  // Fields.
+  Location get location;
+  History get history;
+
+  bool get closed;
+  Window get opener;
+  Window get parent;
+  Window get top;
+
+  // Methods.
+  void focus();
+  void blur();
+  void close();
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]);
+}
+
+abstract class Location {
+  void set href(String val);
+}
+
+abstract class History {
+  void back();
+  void forward();
+  void go(int distance);
+}
+// 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.
+
+typedef void EventListener(Event event);
+// 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.
+
+/**
+ * Defines the keycode values for keys that are returned by 
+ * KeyboardEvent.keyCode.
+ * 
+ * Important note: There is substantial divergence in how different browsers
+ * handle keycodes and their variants in different locales/keyboard layouts. We
+ * provide these constants to help make code processing keys more readable.
+ */
+abstract class KeyCode {
+  // These constant names were borrowed from Closure's Keycode enumeration
+  // class.
+  // http://closure-library.googlecode.com/svn/docs/closure_goog_events_keycodes.js.source.html  
+  static final int WIN_KEY_FF_LINUX = 0;
+  static final int MAC_ENTER = 3;
+  static final int BACKSPACE = 8;
+  static final int TAB = 9;
+  /** NUM_CENTER is also NUMLOCK for FF and Safari on Mac. */
+  static final int NUM_CENTER = 12;
+  static final int ENTER = 13;
+  static final int SHIFT = 16;
+  static final int CTRL = 17;
+  static final int ALT = 18;
+  static final int PAUSE = 19;
+  static final int CAPS_LOCK = 20;
+  static final int ESC = 27;
+  static final int SPACE = 32;
+  static final int PAGE_UP = 33;
+  static final int PAGE_DOWN = 34;
+  static final int END = 35;
+  static final int HOME = 36;
+  static final int LEFT = 37;
+  static final int UP = 38;
+  static final int RIGHT = 39;
+  static final int DOWN = 40;
+  static final int NUM_NORTH_EAST = 33;
+  static final int NUM_SOUTH_EAST = 34;
+  static final int NUM_SOUTH_WEST = 35;
+  static final int NUM_NORTH_WEST = 36;
+  static final int NUM_WEST = 37;
+  static final int NUM_NORTH = 38;
+  static final int NUM_EAST = 39;
+  static final int NUM_SOUTH = 40;
+  static final int PRINT_SCREEN = 44;
+  static final int INSERT = 45;
+  static final int NUM_INSERT = 45;
+  static final int DELETE = 46;
+  static final int NUM_DELETE = 46;
+  static final int ZERO = 48;
+  static final int ONE = 49;
+  static final int TWO = 50;
+  static final int THREE = 51;
+  static final int FOUR = 52;
+  static final int FIVE = 53;
+  static final int SIX = 54;
+  static final int SEVEN = 55;
+  static final int EIGHT = 56;
+  static final int NINE = 57;
+  static final int FF_SEMICOLON = 59;
+  static final int FF_EQUALS = 61;
+  /**
+   * CAUTION: The question mark is for US-keyboard layouts. It varies
+   * for other locales and keyboard layouts.
+   */
+  static final int QUESTION_MARK = 63;
+  static final int A = 65;
+  static final int B = 66;
+  static final int C = 67;
+  static final int D = 68;
+  static final int E = 69;
+  static final int F = 70;
+  static final int G = 71;
+  static final int H = 72;
+  static final int I = 73;
+  static final int J = 74;
+  static final int K = 75;
+  static final int L = 76;
+  static final int M = 77;
+  static final int N = 78;
+  static final int O = 79;
+  static final int P = 80;
+  static final int Q = 81;
+  static final int R = 82;
+  static final int S = 83;
+  static final int T = 84;
+  static final int U = 85;
+  static final int V = 86;
+  static final int W = 87;
+  static final int X = 88;
+  static final int Y = 89;
+  static final int Z = 90;
+  static final int META = 91;
+  static final int WIN_KEY_LEFT = 91;
+  static final int WIN_KEY_RIGHT = 92;
+  static final int CONTEXT_MENU = 93;
+  static final int NUM_ZERO = 96;
+  static final int NUM_ONE = 97;
+  static final int NUM_TWO = 98;
+  static final int NUM_THREE = 99;
+  static final int NUM_FOUR = 100;
+  static final int NUM_FIVE = 101;
+  static final int NUM_SIX = 102;
+  static final int NUM_SEVEN = 103;
+  static final int NUM_EIGHT = 104;
+  static final int NUM_NINE = 105;
+  static final int NUM_MULTIPLY = 106;
+  static final int NUM_PLUS = 107;
+  static final int NUM_MINUS = 109;
+  static final int NUM_PERIOD = 110;
+  static final int NUM_DIVISION = 111;
+  static final int F1 = 112;
+  static final int F2 = 113;
+  static final int F3 = 114;
+  static final int F4 = 115;
+  static final int F5 = 116;
+  static final int F6 = 117;
+  static final int F7 = 118;
+  static final int F8 = 119;
+  static final int F9 = 120;
+  static final int F10 = 121;
+  static final int F11 = 122;
+  static final int F12 = 123;
+  static final int NUMLOCK = 144;
+  static final int SCROLL_LOCK = 145;
+
+  // OS-specific media keys like volume controls and browser controls.
+  static final int FIRST_MEDIA_KEY = 166;
+  static final int LAST_MEDIA_KEY = 183;
+
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SEMICOLON = 186;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int DASH = 189;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int EQUALS = 187;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int COMMA = 188;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int PERIOD = 190;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SLASH = 191;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int APOSTROPHE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int TILDE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SINGLE_QUOTE = 222;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int OPEN_SQUARE_BRACKET = 219;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int BACKSLASH = 220;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int CLOSE_SQUARE_BRACKET = 221;
+  static final int WIN_KEY = 224;
+  static final int MAC_FF_META = 224;
+  static final int WIN_IME = 229;
+}
+// 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.
+
+/**
+ * Defines the standard key locations returned by
+ * KeyboardEvent.getKeyLocation.
+ */
+abstract class KeyLocation {
+
+  /**
+   * The event key is not distinguished as the left or right version
+   * of the key, and did not originate from the numeric keypad (or did not
+   * originate with a virtual key corresponding to the numeric keypad).
+   */
+  static const int STANDARD = 0;
+
+  /**
+   * The event key is in the left key location.
+   */
+  static const int LEFT = 1;
+
+  /**
+   * The event key is in the right key location.
+   */
+  static const int RIGHT = 2;
+
+  /**
+   * The event key originated on the numeric keypad or with a virtual key
+   * corresponding to the numeric keypad.
+   */
+  static const int NUMPAD = 3;
+
+  /**
+   * The event key originated on a mobile device, either on a physical
+   * keypad or a virtual keyboard.
+   */
+  static const int MOBILE = 4;
+
+  /**
+   * The event key originated on a game controller or a joystick on a mobile
+   * device.
+   */
+  static const int JOYSTICK = 5;
+}
+// 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.
+
+/**
+ * Defines the standard keyboard identifier names for keys that are returned
+ * by KeyEvent.getKeyboardIdentifier when the key does not have a direct
+ * unicode mapping.
+ */
+abstract class KeyName {
+
+  /** The Accept (Commit, OK) key */
+  static const String ACCEPT = "Accept";
+
+  /** The Add key */
+  static const String ADD = "Add";
+
+  /** The Again key */
+  static const String AGAIN = "Again";
+
+  /** The All Candidates key */
+  static const String ALL_CANDIDATES = "AllCandidates";
+
+  /** The Alphanumeric key */
+  static const String ALPHANUMERIC = "Alphanumeric";
+
+  /** The Alt (Menu) key */
+  static const String ALT = "Alt";
+
+  /** The Alt-Graph key */
+  static const String ALT_GRAPH = "AltGraph";
+
+  /** The Application key */
+  static const String APPS = "Apps";
+
+  /** The ATTN key */
+  static const String ATTN = "Attn";
+
+  /** The Browser Back key */
+  static const String BROWSER_BACK = "BrowserBack";
+
+  /** The Browser Favorites key */
+  static const String BROWSER_FAVORTIES = "BrowserFavorites";
+
+  /** The Browser Forward key */
+  static const String BROWSER_FORWARD = "BrowserForward";
+
+  /** The Browser Home key */
+  static const String BROWSER_NAME = "BrowserHome";
+
+  /** The Browser Refresh key */
+  static const String BROWSER_REFRESH = "BrowserRefresh";
+
+  /** The Browser Search key */
+  static const String BROWSER_SEARCH = "BrowserSearch";
+
+  /** The Browser Stop key */
+  static const String BROWSER_STOP = "BrowserStop";
+
+  /** The Camera key */
+  static const String CAMERA = "Camera";
+
+  /** The Caps Lock (Capital) key */
+  static const String CAPS_LOCK = "CapsLock";
+
+  /** The Clear key */
+  static const String CLEAR = "Clear";
+
+  /** The Code Input key */
+  static const String CODE_INPUT = "CodeInput";
+
+  /** The Compose key */
+  static const String COMPOSE = "Compose";
+
+  /** The Control (Ctrl) key */
+  static const String CONTROL = "Control";
+
+  /** The Crsel key */
+  static const String CRSEL = "Crsel";
+
+  /** The Convert key */
+  static const String CONVERT = "Convert";
+
+  /** The Copy key */
+  static const String COPY = "Copy";
+
+  /** The Cut key */
+  static const String CUT = "Cut";
+
+  /** The Decimal key */
+  static const String DECIMAL = "Decimal";
+
+  /** The Divide key */
+  static const String DIVIDE = "Divide";
+
+  /** The Down Arrow key */
+  static const String DOWN = "Down";
+
+  /** The diagonal Down-Left Arrow key */
+  static const String DOWN_LEFT = "DownLeft";
+
+  /** The diagonal Down-Right Arrow key */
+  static const String DOWN_RIGHT = "DownRight";
+
+  /** The Eject key */
+  static const String EJECT = "Eject";
+
+  /** The End key */
+  static const String END = "End";
+
+  /**
+   * The Enter key. Note: This key value must also be used for the Return
+   *  (Macintosh numpad) key
+   */
+  static const String ENTER = "Enter";
+
+  /** The Erase EOF key */
+  static const String ERASE_EOF= "EraseEof";
+
+  /** The Execute key */
+  static const String EXECUTE = "Execute";
+
+  /** The Exsel key */
+  static const String EXSEL = "Exsel";
+
+  /** The Function switch key */
+  static const String FN = "Fn";
+
+  /** The F1 key */
+  static const String F1 = "F1";
+
+  /** The F2 key */
+  static const String F2 = "F2";
+
+  /** The F3 key */
+  static const String F3 = "F3";
+
+  /** The F4 key */
+  static const String F4 = "F4";
+
+  /** The F5 key */
+  static const String F5 = "F5";
+
+  /** The F6 key */
+  static const String F6 = "F6";
+
+  /** The F7 key */
+  static const String F7 = "F7";
+
+  /** The F8 key */
+  static const String F8 = "F8";
+
+  /** The F9 key */
+  static const String F9 = "F9";
+
+  /** The F10 key */
+  static const String F10 = "F10";
+
+  /** The F11 key */
+  static const String F11 = "F11";
+
+  /** The F12 key */
+  static const String F12 = "F12";
+
+  /** The F13 key */
+  static const String F13 = "F13";
+
+  /** The F14 key */
+  static const String F14 = "F14";
+
+  /** The F15 key */
+  static const String F15 = "F15";
+
+  /** The F16 key */
+  static const String F16 = "F16";
+
+  /** The F17 key */
+  static const String F17 = "F17";
+
+  /** The F18 key */
+  static const String F18 = "F18";
+
+  /** The F19 key */
+  static const String F19 = "F19";
+
+  /** The F20 key */
+  static const String F20 = "F20";
+
+  /** The F21 key */
+  static const String F21 = "F21";
+
+  /** The F22 key */
+  static const String F22 = "F22";
+
+  /** The F23 key */
+  static const String F23 = "F23";
+
+  /** The F24 key */
+  static const String F24 = "F24";
+
+  /** The Final Mode (Final) key used on some asian keyboards */
+  static const String FINAL_MODE = "FinalMode";
+
+  /** The Find key */
+  static const String FIND = "Find";
+
+  /** The Full-Width Characters key */
+  static const String FULL_WIDTH = "FullWidth";
+
+  /** The Half-Width Characters key */
+  static const String HALF_WIDTH = "HalfWidth";
+
+  /** The Hangul (Korean characters) Mode key */
+  static const String HANGUL_MODE = "HangulMode";
+
+  /** The Hanja (Korean characters) Mode key */
+  static const String HANJA_MODE = "HanjaMode";
+
+  /** The Help key */
+  static const String HELP = "Help";
+
+  /** The Hiragana (Japanese Kana characters) key */
+  static const String HIRAGANA = "Hiragana";
+
+  /** The Home key */
+  static const String HOME = "Home";
+
+  /** The Insert (Ins) key */
+  static const String INSERT = "Insert";
+
+  /** The Japanese-Hiragana key */
+  static const String JAPANESE_HIRAGANA = "JapaneseHiragana";
+
+  /** The Japanese-Katakana key */
+  static const String JAPANESE_KATAKANA = "JapaneseKatakana";
+
+  /** The Japanese-Romaji key */
+  static const String JAPANESE_ROMAJI = "JapaneseRomaji";
+
+  /** The Junja Mode key */
+  static const String JUNJA_MODE = "JunjaMode";
+
+  /** The Kana Mode (Kana Lock) key */
+  static const String KANA_MODE = "KanaMode";
+
+  /**
+   * The Kanji (Japanese name for ideographic characters of Chinese origin)
+   * Mode key
+   */
+  static const String KANJI_MODE = "KanjiMode";
+
+  /** The Katakana (Japanese Kana characters) key */
+  static const String KATAKANA = "Katakana";
+
+  /** The Start Application One key */
+  static const String LAUNCH_APPLICATION_1 = "LaunchApplication1";
+
+  /** The Start Application Two key */
+  static const String LAUNCH_APPLICATION_2 = "LaunchApplication2";
+
+  /** The Start Mail key */
+  static const String LAUNCH_MAIL = "LaunchMail";
+
+  /** The Left Arrow key */
+  static const String LEFT = "Left";
+
+  /** The Menu key */
+  static const String MENU = "Menu";
+
+  /**
+   * The Meta key. Note: This key value shall be also used for the Apple
+   * Command key
+   */
+  static const String META = "Meta";
+
+  /** The Media Next Track key */
+  static const String MEDIA_NEXT_TRACK = "MediaNextTrack";
+
+  /** The Media Play Pause key */
+  static const String MEDIA_PAUSE_PLAY = "MediaPlayPause";
+
+  /** The Media Previous Track key */
+  static const String MEDIA_PREVIOUS_TRACK = "MediaPreviousTrack";
+
+  /** The Media Stop key */
+  static const String MEDIA_STOP = "MediaStop";
+
+  /** The Mode Change key */
+  static const String MODE_CHANGE = "ModeChange";
+
+  /** The Next Candidate function key */
+  static const String NEXT_CANDIDATE = "NextCandidate";
+
+  /** The Nonconvert (Don't Convert) key */
+  static const String NON_CONVERT = "Nonconvert";
+
+  /** The Number Lock key */
+  static const String NUM_LOCK = "NumLock";
+
+  /** The Page Down (Next) key */
+  static const String PAGE_DOWN = "PageDown";
+
+  /** The Page Up key */
+  static const String PAGE_UP = "PageUp";
+
+  /** The Paste key */
+  static const String PASTE = "Paste";
+
+  /** The Pause key */
+  static const String PAUSE = "Pause";
+
+  /** The Play key */
+  static const String PLAY = "Play";
+
+  /**
+   * The Power key. Note: Some devices may not expose this key to the
+   * operating environment
+   */
+  static const String POWER = "Power";
+
+  /** The Previous Candidate function key */
+  static const String PREVIOUS_CANDIDATE = "PreviousCandidate";
+
+  /** The Print Screen (PrintScrn, SnapShot) key */
+  static const String PRINT_SCREEN = "PrintScreen";
+
+  /** The Process key */
+  static const String PROCESS = "Process";
+
+  /** The Props key */
+  static const String PROPS = "Props";
+
+  /** The Right Arrow key */
+  static const String RIGHT = "Right";
+
+  /** The Roman Characters function key */
+  static const String ROMAN_CHARACTERS = "RomanCharacters";
+
+  /** The Scroll Lock key */
+  static const String SCROLL = "Scroll";
+
+  /** The Select key */
+  static const String SELECT = "Select";
+
+  /** The Select Media key */
+  static const String SELECT_MEDIA = "SelectMedia";
+
+  /** The Separator key */
+  static const String SEPARATOR = "Separator";
+
+  /** The Shift key */
+  static const String SHIFT = "Shift";
+
+  /** The Soft1 key */
+  static const String SOFT_1 = "Soft1";
+
+  /** The Soft2 key */
+  static const String SOFT_2 = "Soft2";
+
+  /** The Soft3 key */
+  static const String SOFT_3 = "Soft3";
+
+  /** The Soft4 key */
+  static const String SOFT_4 = "Soft4";
+
+  /** The Stop key */
+  static const String STOP = "Stop";
+
+  /** The Subtract key */
+  static const String SUBTRACT = "Subtract";
+
+  /** The Symbol Lock key */
+  static const String SYMBOL_LOCK = "SymbolLock";
+
+  /** The Up Arrow key */
+  static const String UP = "Up";
+
+  /** The diagonal Up-Left Arrow key */
+  static const String UP_LEFT = "UpLeft";
+
+  /** The diagonal Up-Right Arrow key */
+  static const String UP_RIGHT = "UpRight";
+
+  /** The Undo key */
+  static const String UNDO = "Undo";
+
+  /** The Volume Down key */
+  static const String VOLUME_DOWN = "VolumeDown";
+
+  /** The Volume Mute key */
+  static const String VOLUMN_MUTE = "VolumeMute";
+
+  /** The Volume Up key */
+  static const String VOLUMN_UP = "VolumeUp";
+
+  /** The Windows Logo key */
+  static const String WIN = "Win";
+
+  /** The Zoom key */
+  static const String ZOOM = "Zoom";
+
+  /**
+   * The Backspace (Back) key. Note: This key value shall be also used for the
+   * key labeled 'delete' MacOS keyboards when not modified by the 'Fn' key
+   */
+  static const String BACKSPACE = "Backspace";
+
+  /** The Horizontal Tabulation (Tab) key */
+  static const String TAB = "Tab";
+
+  /** The Cancel key */
+  static const String CANCEL = "Cancel";
+
+  /** The Escape (Esc) key */
+  static const String ESC = "Esc";
+
+  /** The Space (Spacebar) key:   */
+  static const String SPACEBAR = "Spacebar";
+
+  /**
+   * The Delete (Del) Key. Note: This key value shall be also used for the key
+   * labeled 'delete' MacOS keyboards when modified by the 'Fn' key
+   */
+  static const String DEL = "Del";
+
+  /** The Combining Grave Accent (Greek Varia, Dead Grave) key */
+  static const String DEAD_GRAVE = "DeadGrave";
+
+  /**
+   * The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute)
+   * key
+   */
+  static const String DEAD_EACUTE = "DeadEacute";
+
+  /** The Combining Circumflex Accent (Hat, Dead Circumflex) key */
+  static const String DEAD_CIRCUMFLEX = "DeadCircumflex";
+
+  /** The Combining Tilde (Dead Tilde) key */
+  static const String DEAD_TILDE = "DeadTilde";
+
+  /** The Combining Macron (Long, Dead Macron) key */
+  static const String DEAD_MACRON = "DeadMacron";
+
+  /** The Combining Breve (Short, Dead Breve) key */
+  static const String DEAD_BREVE = "DeadBreve";
+
+  /** The Combining Dot Above (Derivative, Dead Above Dot) key */
+  static const String DEAD_ABOVE_DOT = "DeadAboveDot";
+
+  /**
+   * The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika,
+   * Double Derivative, Dead Diaeresis) key
+   */
+  static const String DEAD_UMLAUT = "DeadUmlaut";
+
+  /** The Combining Ring Above (Dead Above Ring) key */
+  static const String DEAD_ABOVE_RING = "DeadAboveRing";
+
+  /** The Combining Double Acute Accent (Dead Doubleacute) key */
+  static const String DEAD_DOUBLEACUTE = "DeadDoubleacute";
+
+  /** The Combining Caron (Hacek, V Above, Dead Caron) key */
+  static const String DEAD_CARON = "DeadCaron";
+
+  /** The Combining Cedilla (Dead Cedilla) key */
+  static const String DEAD_CEDILLA = "DeadCedilla";
+
+  /** The Combining Ogonek (Nasal Hook, Dead Ogonek) key */
+  static const String DEAD_OGONEK = "DeadOgonek";
+
+  /**
+   * The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota
+   * Subscript, Dead Iota) key
+   */
+  static const String DEAD_IOTA = "DeadIota";
+
+  /**
+   * The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key
+   */
+  static const String DEAD_VOICED_SOUND = "DeadVoicedSound";
+
+  /**
+   * The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced
+   * Sound) key
+   */
+  static const String DEC_SEMIVOICED_SOUND= "DeadSemivoicedSound";
+
+  /**
+   * Key value used when an implementation is unable to identify another key
+   * value, due to either hardware, platform, or software constraints
+   */
+  static const String UNIDENTIFIED = "Unidentified";
+}
+// 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.
+
+/**
+ * Contains the set of standard values returned by HTMLDocument.getReadyState.
+ */
+abstract class ReadyState {
+  /**
+   * Indicates the document is still loading and parsing.
+   */
+  static const String LOADING = "loading";
+
+  /**
+   * Indicates the document is finished parsing but is still loading
+   * subresources.
+   */
+  static const String INTERACTIVE = "interactive";
+
+  /**
+   * Indicates the document and all subresources have been loaded.
+   */
+  static const String COMPLETE = "complete";
+}
+// 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.
+
+// TODO(antonm): support not DOM isolates too.
+class _Timer implements Timer {
+  final canceller;
+
+  _Timer(this.canceller);
+
+  void cancel() { canceller(); }
+}
+
+get _timerFactoryClosure => (int milliSeconds, void callback(Timer timer), bool repeating) {
+  var maker;
+  var canceller;
+  if (repeating) {
+    maker = window.setInterval;
+    canceller = window.clearInterval;
+  } else {
+    maker = window.setTimeout;
+    canceller = window.clearTimeout;
+  }
+  Timer timer;
+  final int id = maker(() { callback(timer); }, milliSeconds);
+  timer = new _Timer(() { canceller(id); });
+  return timer;
+};
+// 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.
+
+/**
+ * The [Collections] class implements static methods useful when
+ * writing a class that implements [Collection] and the [iterator]
+ * method.
+ */
+class _Collections {
+  static bool contains(Iterable<Object> iterable, Object element) {
+    for (final e in iterable) {
+      if (e == element) return true;
+    }
+    return false;
+  }
+
+  static void forEach(Iterable<Object> iterable, void f(Object o)) {
+    for (final e in iterable) {
+      f(e);
+    }
+  }
+
+  static List map(Iterable<Object> source,
+                  List<Object> destination,
+                  f(o)) {
+    for (final e in source) {
+      destination.add(f(e));
+    }
+    return destination;
+  }
+
+  static bool some(Iterable<Object> iterable, bool f(Object o)) {
+    for (final e in iterable) {
+      if (f(e)) return true;
+    }
+    return false;
+  }
+
+  static bool every(Iterable<Object> iterable, bool f(Object o)) {
+    for (final e in iterable) {
+      if (!f(e)) return false;
+    }
+    return true;
+  }
+
+  static List filter(Iterable<Object> source,
+                     List<Object> destination,
+                     bool f(o)) {
+    for (final e in source) {
+      if (f(e)) destination.add(e);
+    }
+    return destination;
+  }
+
+  static bool isEmpty(Iterable<Object> iterable) {
+    return !iterable.iterator().hasNext;
+  }
+}
+// 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 _HttpRequestUtils {
+
+  // Helper for factory HttpRequest.get
+  static HttpRequest get(String url,
+                            onSuccess(HttpRequest request),
+                            bool withCredentials) {
+    final request = new HttpRequest();
+    request.open('GET', url, true);
+
+    request.withCredentials = withCredentials;
+
+    // Status 0 is for local XHR request.
+    request.on.readyStateChange.add((e) {
+      if (request.readyState == HttpRequest.DONE &&
+          (request.status == 200 || request.status == 0)) {
+        onSuccess(request);
+      }
+    });
+
+    request.send();
+
+    return request;
+  }
+}
+// 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.
+
+_serialize(var message) {
+  return new _JsSerializer().traverse(message);
+}
+
+class _JsSerializer extends _Serializer {
+
+  visitSendPortSync(SendPortSync x) {
+    if (x is _JsSendPortSync) return visitJsSendPortSync(x);
+    if (x is _LocalSendPortSync) return visitLocalSendPortSync(x);
+    if (x is _RemoteSendPortSync) return visitRemoteSendPortSync(x);
+    throw "Unknown port type $x";
+  }
+
+  visitJsSendPortSync(_JsSendPortSync x) {
+    return [ 'sendport', 'nativejs', x._id ];
+  }
+
+  visitLocalSendPortSync(_LocalSendPortSync x) {
+    return [ 'sendport', 'dart',
+             ReceivePortSync._isolateId, x._receivePort._portId ];
+  }
+
+  visitRemoteSendPortSync(_RemoteSendPortSync x) {
+    return [ 'sendport', 'dart',
+             x._receivePort._isolateId, x._receivePort._portId ];
+  }
+}
+
+_deserialize(var message) {
+  return new _JsDeserializer().deserialize(message);
+}
+
+
+class _JsDeserializer extends _Deserializer {
+
+  static const _UNSPECIFIED = const Object();
+
+  deserializeSendPort(List x) {
+    String tag = x[1];
+    switch (tag) {
+      case 'nativejs':
+        num id = x[2];
+        return new _JsSendPortSync(id);
+      case 'dart':
+        num isolateId = x[2];
+        num portId = x[3];
+        return ReceivePortSync._lookup(isolateId, portId);
+      default:
+        throw 'Illegal SendPortSync type: $tag';
+    }
+  }
+}
+
+// The receiver is JS.
+class _JsSendPortSync implements SendPortSync {
+
+  num _id;
+  _JsSendPortSync(this._id);
+
+  callSync(var message) {
+    var serialized = _serialize(message);
+    var result = _callPortSync(_id, serialized);
+    return _deserialize(result);
+  }
+
+}
+
+// TODO(vsm): Differentiate between Dart2Js and Dartium isolates.
+// The receiver is a different Dart isolate, compiled to JS.
+class _RemoteSendPortSync implements SendPortSync {
+
+  int _isolateId;
+  int _portId;
+  _RemoteSendPortSync(this._isolateId, this._portId);
+
+  callSync(var message) {
+    var serialized = _serialize(message);
+    var result = _call(_isolateId, _portId, serialized);
+    return _deserialize(result);
+  }
+
+  static _call(int isolateId, int portId, var message) {
+    var target = 'dart-port-$isolateId-$portId'; 
+    // TODO(vsm): Make this re-entrant.
+    // TODO(vsm): Set this up set once, on the first call.
+    var source = '$target-result';
+    var result = null;
+    var listener = (Event e) {
+      result = JSON.parse(_getPortSyncEventData(e));
+    };
+    window.on[source].add(listener);
+    _dispatchEvent(target, [source, message]);
+    window.on[source].remove(listener);
+    return result;
+  }
+}
+
+// The receiver is in the same Dart isolate, compiled to JS.
+class _LocalSendPortSync implements SendPortSync {
+
+  ReceivePortSync _receivePort;
+
+  _LocalSendPortSync._internal(this._receivePort);
+
+  callSync(var message) {
+    // TODO(vsm): Do a more efficient deep copy.
+    var copy = _deserialize(_serialize(message));
+    var result = _receivePort._callback(copy);
+    return _deserialize(_serialize(result));
+  }
+}
+
+// TODO(vsm): Move this to dart:isolate.  This will take some
+// refactoring as there are dependences here on the DOM.  Users
+// interact with this class (or interface if we change it) directly -
+// new ReceivePortSync.  I think most of the DOM logic could be
+// delayed until the corresponding SendPort is registered on the
+// window.
+
+// A Dart ReceivePortSync (tagged 'dart' when serialized) is
+// identifiable / resolvable by the combination of its isolateid and
+// portid.  When a corresponding SendPort is used within the same
+// isolate, the _portMap below can be used to obtain the
+// ReceivePortSync directly.  Across isolates (or from JS), an
+// EventListener can be used to communicate with the port indirectly.
+class ReceivePortSync {
+
+  static Map<int, ReceivePortSync> _portMap;
+  static int _portIdCount;
+  static int _cachedIsolateId;
+
+  num _portId;
+  Function _callback;
+  EventListener _listener;
+
+  ReceivePortSync() {
+    if (_portIdCount == null) {
+      _portIdCount = 0;
+      _portMap = new Map<int, ReceivePortSync>();
+    }
+    _portId = _portIdCount++;
+    _portMap[_portId] = this;
+  }
+
+  static int get _isolateId {
+    // TODO(vsm): Make this coherent with existing isolate code.
+    if (_cachedIsolateId == null) {
+      _cachedIsolateId = _getNewIsolateId();      
+    }
+    return _cachedIsolateId;
+  }
+
+  static String _getListenerName(isolateId, portId) =>
+      'dart-port-$isolateId-$portId'; 
+  String get _listenerName => _getListenerName(_isolateId, _portId);
+
+  void receive(callback(var message)) {
+    _callback = callback;
+    if (_listener == null) {
+      _listener = (Event e) {
+        var data = JSON.parse(_getPortSyncEventData(e));
+        var replyTo = data[0];
+        var message = _deserialize(data[1]);
+        var result = _callback(message);
+        _dispatchEvent(replyTo, _serialize(result));
+      };
+      window.on[_listenerName].add(_listener);
+    }
+  }
+
+  void close() {
+    _portMap.remove(_portId);
+    if (_listener != null) window.on[_listenerName].remove(_listener);
+  }
+
+  SendPortSync toSendPort() {
+    return new _LocalSendPortSync._internal(this);
+  }
+
+  static SendPortSync _lookup(int isolateId, int portId) {
+    if (isolateId == _isolateId) {
+      return _portMap[portId].toSendPort();
+    } else {
+      return new _RemoteSendPortSync(isolateId, portId);
+    }
+  }
+}
+
+get _isolateId => ReceivePortSync._isolateId;
+
+void _dispatchEvent(String receiver, var message) {
+  var event = new CustomEvent(receiver, false, false, JSON.stringify(message));
+  window.$dom_dispatchEvent(event);
+}
+
+String _getPortSyncEventData(CustomEvent event) => event.detail;
+// 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.
+
+typedef Object ComputeValue();
+
+class _MeasurementRequest<T> {
+  final ComputeValue computeValue;
+  final Completer<T> completer;
+  Object value;
+  bool exception = false;
+  _MeasurementRequest(this.computeValue, this.completer);
+}
+
+typedef void _MeasurementCallback();
+
+
+/**
+ * This class attempts to invoke a callback as soon as the current event stack
+ * unwinds, but before the browser repaints.
+ */
+abstract class _MeasurementScheduler {
+  bool _nextMeasurementFrameScheduled = false;
+  _MeasurementCallback _callback;
+
+  _MeasurementScheduler(this._callback);
+
+  /**
+   * Creates the best possible measurement scheduler for the current platform.
+   */
+  factory _MeasurementScheduler.best(_MeasurementCallback callback) {
+    if (_isMutationObserverSupported()) {
+      return new _MutationObserverScheduler(callback);
+    }
+    return new _PostMessageScheduler(callback);
+  }
+
+  /**
+   * Schedules a measurement callback if one has not been scheduled already.
+   */
+  void maybeSchedule() {
+    if (this._nextMeasurementFrameScheduled) {
+      return;
+    }
+    this._nextMeasurementFrameScheduled = true;
+    this._schedule();
+  }
+
+  /**
+   * Does the actual scheduling of the callback.
+   */
+  void _schedule();
+
+  /**
+   * Handles the measurement callback and forwards it if necessary.
+   */
+  void _onCallback() {
+    // Ignore spurious messages.
+    if (!_nextMeasurementFrameScheduled) {
+      return;
+    }
+    _nextMeasurementFrameScheduled = false;
+    this._callback();
+  }
+}
+
+/**
+ * Scheduler which uses window.postMessage to schedule events.
+ */
+class _PostMessageScheduler extends _MeasurementScheduler {
+  const _MEASUREMENT_MESSAGE = "DART-MEASURE";
+
+  _PostMessageScheduler(_MeasurementCallback callback): super(callback) {
+      // Messages from other windows do not cause a security risk as
+      // all we care about is that _handleMessage is called
+      // after the current event loop is unwound and calling the function is
+      // a noop when zero requests are pending.
+      window.on.message.add(this._handleMessage);
+  }
+
+  void _schedule() {
+    window.postMessage(_MEASUREMENT_MESSAGE, "*");
+  }
+
+  _handleMessage(e) {
+    this._onCallback();
+  }
+}
+
+/**
+ * Scheduler which uses a MutationObserver to schedule events.
+ */
+class _MutationObserverScheduler extends _MeasurementScheduler {
+  MutationObserver _observer;
+  Element _dummy;
+
+  _MutationObserverScheduler(_MeasurementCallback callback): super(callback) {
+    // Mutation events get fired as soon as the current event stack is unwound
+    // so we just make a dummy event and listen for that.
+    _observer = new MutationObserver(this._handleMutation);
+    _dummy = new DivElement();
+    _observer.observe(_dummy, attributes: true);
+  }
+
+  void _schedule() {
+    // Toggle it to trigger the mutation event.
+    _dummy.hidden = !_dummy.hidden;
+  }
+
+  _handleMutation(List<MutationRecord> mutations, MutationObserver observer) {
+    this._onCallback();
+  }
+}
+
+
+List<_MeasurementRequest> _pendingRequests;
+List<TimeoutHandler> _pendingMeasurementFrameCallbacks;
+_MeasurementScheduler _measurementScheduler = null;
+
+void _maybeScheduleMeasurementFrame() {
+  if (_measurementScheduler == null) {
+    _measurementScheduler =
+      new _MeasurementScheduler.best(_completeMeasurementFutures);
+  }
+  _measurementScheduler.maybeSchedule();
+}
+
+/**
+ * Registers a [callback] which is called after the next batch of measurements
+ * completes. Even if no measurements completed, the callback is triggered
+ * when they would have completed to avoid confusing bugs if it happened that
+ * no measurements were actually requested.
+ */
+void _addMeasurementFrameCallback(TimeoutHandler callback) {
+  if (_pendingMeasurementFrameCallbacks == null) {
+    _pendingMeasurementFrameCallbacks = <TimeoutHandler>[];
+    _maybeScheduleMeasurementFrame();
+  }
+  _pendingMeasurementFrameCallbacks.add(callback);
+}
+
+/**
+ * Returns a [Future] whose value will be the result of evaluating
+ * [computeValue] during the next safe measurement interval.
+ * The next safe measurement interval is after the current event loop has
+ * unwound but before the browser has rendered the page.
+ * It is important that the [computeValue] function only queries the html
+ * layout and html in any way.
+ */
+Future _createMeasurementFuture(ComputeValue computeValue,
+                                Completer completer) {
+  if (_pendingRequests == null) {
+    _pendingRequests = <_MeasurementRequest>[];
+    _maybeScheduleMeasurementFrame();
+  }
+  _pendingRequests.add(new _MeasurementRequest(computeValue, completer));
+  return completer.future;
+}
+
+/**
+ * Complete all pending measurement futures evaluating them in a single batch
+ * so that the the browser is guaranteed to avoid multiple layouts.
+ */
+void _completeMeasurementFutures() {
+  // We must compute all new values before fulfilling the futures as
+  // the onComplete callbacks for the futures could modify the DOM making
+  // subsequent measurement calculations expensive to compute.
+  if (_pendingRequests != null) {
+    for (_MeasurementRequest request in _pendingRequests) {
+      try {
+        request.value = request.computeValue();
+      } catch (e) {
+        request.value = e;
+        request.exception = true;
+      }
+    }
+  }
+
+  final completedRequests = _pendingRequests;
+  final readyMeasurementFrameCallbacks = _pendingMeasurementFrameCallbacks;
+  _pendingRequests = null;
+  _pendingMeasurementFrameCallbacks = null;
+  if (completedRequests != null) {
+    for (_MeasurementRequest request in completedRequests) {
+      if (request.exception) {
+        request.completer.completeException(request.value);
+      } else {
+        request.completer.complete(request.value);
+      }
+    }
+  }
+
+  if (readyMeasurementFrameCallbacks != null) {
+    for (TimeoutHandler handler in readyMeasurementFrameCallbacks) {
+      // TODO(jacobr): wrap each call to a handler in a try-catch block.
+      handler();
+    }
+  }
+}
+// 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 the dart:isolate library.
+
+/********************************************************
+  Inserted from lib/isolate/serialization.dart
+ ********************************************************/
+
+class _MessageTraverserVisitedMap {
+
+  operator[](var object) => null;
+  void operator[]=(var object, var info) { }
+
+  void reset() { }
+  void cleanup() { }
+
+}
+
+/** Abstract visitor for dart objects that can be sent as isolate messages. */
+class _MessageTraverser {
+
+  _MessageTraverserVisitedMap _visited;
+  _MessageTraverser() : _visited = new _MessageTraverserVisitedMap();
+
+  /** Visitor's entry point. */
+  traverse(var x) {
+    if (isPrimitive(x)) return visitPrimitive(x);
+    _visited.reset();
+    var result;
+    try {
+      result = _dispatch(x);
+    } finally {
+      _visited.cleanup();
+    }
+    return result;
+  }
+
+  _dispatch(var x) {
+    if (isPrimitive(x)) return visitPrimitive(x);
+    if (x is List) return visitList(x);
+    if (x is Map) return visitMap(x);
+    if (x is SendPort) return visitSendPort(x);
+    if (x is SendPortSync) return visitSendPortSync(x);
+
+    // Overridable fallback.
+    return visitObject(x);
+  }
+
+  abstract visitPrimitive(x);
+  abstract visitList(List x);
+  abstract visitMap(Map x);
+  abstract visitSendPort(SendPort x);
+  abstract visitSendPortSync(SendPortSync x);
+
+  visitObject(Object x) {
+    // TODO(floitsch): make this a real exception. (which one)?
+    throw "Message serialization: Illegal value $x passed";
+  }
+
+  static bool isPrimitive(x) {
+    return (x == null) || (x is String) || (x is num) || (x is bool);
+  }
+}
+
+
+/** A visitor that recursively copies a message. */
+class _Copier extends _MessageTraverser {
+
+  visitPrimitive(x) => x;
+
+  List visitList(List list) {
+    List copy = _visited[list];
+    if (copy != null) return copy;
+
+    int len = list.length;
+
+    // TODO(floitsch): we loose the generic type of the List.
+    copy = new List(len);
+    _visited[list] = copy;
+    for (int i = 0; i < len; i++) {
+      copy[i] = _dispatch(list[i]);
+    }
+    return copy;
+  }
+
+  Map visitMap(Map map) {
+    Map copy = _visited[map];
+    if (copy != null) return copy;
+
+    // TODO(floitsch): we loose the generic type of the map.
+    copy = new Map();
+    _visited[map] = copy;
+    map.forEach((key, val) {
+      copy[_dispatch(key)] = _dispatch(val);
+    });
+    return copy;
+  }
+
+}
+
+/** Visitor that serializes a message as a JSON array. */
+class _Serializer extends _MessageTraverser {
+  int _nextFreeRefId = 0;
+
+  visitPrimitive(x) => x;
+
+  visitList(List list) {
+    int copyId = _visited[list];
+    if (copyId != null) return ['ref', copyId];
+
+    int id = _nextFreeRefId++;
+    _visited[list] = id;
+    var jsArray = _serializeList(list);
+    // TODO(floitsch): we are losing the generic type.
+    return ['list', id, jsArray];
+  }
+
+  visitMap(Map map) {
+    int copyId = _visited[map];
+    if (copyId != null) return ['ref', copyId];
+
+    int id = _nextFreeRefId++;
+    _visited[map] = id;
+    var keys = _serializeList(map.keys);
+    var values = _serializeList(map.values);
+    // TODO(floitsch): we are losing the generic type.
+    return ['map', id, keys, values];
+  }
+
+  _serializeList(List list) {
+    int len = list.length;
+    var result = new List(len);
+    for (int i = 0; i < len; i++) {
+      result[i] = _dispatch(list[i]);
+    }
+    return result;
+  }
+}
+
+/** Deserializes arrays created with [_Serializer]. */
+class _Deserializer {
+  Map<int, dynamic> _deserialized;
+
+  _Deserializer();
+
+  static bool isPrimitive(x) {
+    return (x == null) || (x is String) || (x is num) || (x is bool);
+  }
+
+  deserialize(x) {
+    if (isPrimitive(x)) return x;
+    // TODO(floitsch): this should be new HashMap<int, dynamic>()
+    _deserialized = new HashMap();
+    return _deserializeHelper(x);
+  }
+
+  _deserializeHelper(x) {
+    if (isPrimitive(x)) return x;
+    assert(x is List);
+    switch (x[0]) {
+      case 'ref': return _deserializeRef(x);
+      case 'list': return _deserializeList(x);
+      case 'map': return _deserializeMap(x);
+      case 'sendport': return deserializeSendPort(x);
+      default: return deserializeObject(x);
+    }
+  }
+
+  _deserializeRef(List x) {
+    int id = x[1];
+    var result = _deserialized[id];
+    assert(result != null);
+    return result;
+  }
+
+  List _deserializeList(List x) {
+    int id = x[1];
+    // We rely on the fact that Dart-lists are directly mapped to Js-arrays.
+    List dartList = x[2];
+    _deserialized[id] = dartList;
+    int len = dartList.length;
+    for (int i = 0; i < len; i++) {
+      dartList[i] = _deserializeHelper(dartList[i]);
+    }
+    return dartList;
+  }
+
+  Map _deserializeMap(List x) {
+    Map result = new Map();
+    int id = x[1];
+    _deserialized[id] = result;
+    List keys = x[2];
+    List values = x[3];
+    int len = keys.length;
+    assert(len == values.length);
+    for (int i = 0; i < len; i++) {
+      var key = _deserializeHelper(keys[i]);
+      var value = _deserializeHelper(values[i]);
+      result[key] = value;
+    }
+    return result;
+  }
+
+  abstract deserializeSendPort(List x);
+
+  deserializeObject(List x) {
+    // TODO(floitsch): Use real exception (which one?).
+    throw "Unexpected serialized object";
+  }
+}
+
+// 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 _CustomEventFactoryProvider {
+  static CustomEvent createCustomEvent(String type, [bool canBubble = true,
+      bool cancelable = true, Object detail = null]) {
+    final CustomEvent e = document.$dom_createEvent("CustomEvent");
+    e.$dom_initCustomEvent(type, canBubble, cancelable, detail);
+    return e;
+  }
+}
+
+class _EventFactoryProvider {
+  static Event createEvent(String type, [bool canBubble = true,
+      bool cancelable = true]) {
+    final Event e = document.$dom_createEvent("Event");
+    e.$dom_initEvent(type, canBubble, cancelable);
+    return e;
+  }
+}
+
+class _MouseEventFactoryProvider {
+  static MouseEvent createMouseEvent(String type, Window view, int detail,
+      int screenX, int screenY, int clientX, int clientY, int button,
+      [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
+      bool altKey = false, bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) {
+    final e = document.$dom_createEvent("MouseEvent");
+    e.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
+        screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
+        button, relatedTarget);
+    return e;
+  }
+}
+
+class _CSSStyleDeclarationFactoryProvider {
+  static CSSStyleDeclaration createCSSStyleDeclaration_css(String css) {
+    final style = new Element.tag('div').style;
+    style.cssText = css;
+    return style;
+  }
+
+  static CSSStyleDeclaration createCSSStyleDeclaration() {
+    return new CSSStyleDeclaration.css('');
+  }
+}
+
+class _DocumentFragmentFactoryProvider {
+  /** @domName Document.createDocumentFragment */
+  static DocumentFragment createDocumentFragment() =>
+      document.createDocumentFragment();
+
+  static DocumentFragment createDocumentFragment_html(String html) {
+    final fragment = new DocumentFragment();
+    fragment.innerHTML = html;
+    return fragment;
+  }
+
+  // TODO(nweiz): enable this when XML is ported.
+  // factory DocumentFragment.xml(String xml) {
+  //   final fragment = new DocumentFragment();
+  //   final e = new XMLElement.tag("xml");
+  //   e.innerHTML = xml;
+  //
+  //   // Copy list first since we don't want liveness during iteration.
+  //   final List nodes = new List.from(e.nodes);
+  //   fragment.nodes.addAll(nodes);
+  //   return fragment;
+  // }
+
+  static DocumentFragment createDocumentFragment_svg(String svg) {
+    final fragment = new DocumentFragment();
+    final e = new SVGSVGElement();
+    e.innerHTML = svg;
+
+    // Copy list first since we don't want liveness during iteration.
+    final List nodes = new List.from(e.nodes);
+    fragment.nodes.addAll(nodes);
+    return fragment;
+  }
+}
+
+class _SVGElementFactoryProvider {
+  static SVGElement createSVGElement_tag(String tag) {
+    final Element temp =
+      document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
+    return temp;
+  }
+
+  static SVGElement createSVGElement_svg(String svg) {
+    Element parentTag;
+    final match = _START_TAG_REGEXP.firstMatch(svg);
+    if (match != null && match.group(1).toLowerCase() == 'svg') {
+      parentTag = new Element.tag('div');
+    } else {
+      parentTag = new SVGSVGElement();
+    }
+
+    parentTag.innerHTML = svg;
+    if (parentTag.elements.length == 1) return parentTag.elements.removeLast();
+
+    throw new ArgumentError(
+        'SVG had ${parentTag.elements.length} '
+        'top-level elements but 1 expected');
+  }
+}
+
+class _SVGSVGElementFactoryProvider {
+  static SVGSVGElement createSVGSVGElement() {
+    final el = new SVGElement.tag("svg");
+    // The SVG spec requires the version attribute to match the spec version
+    el.attributes['version'] = "1.1";
+    return el;
+  }
+}
+// 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.
+
+
+// Conversions for IDBKey.
+//
+// Per http://www.w3.org/TR/IndexedDB/#key-construct
+//
+// "A value is said to be a valid key if it is one of the following types: Array
+// JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float
+// [WEBIDL]. However Arrays are only valid keys if every item in the array is
+// defined and is a valid key (i.e. sparse arrays can not be valid keys) and if
+// the Array doesn't directly or indirectly contain itself. Any non-numeric
+// properties are ignored, and thus does not affect whether the Array is a valid
+// key. Additionally, if the value is of type float, it is only a valid key if
+// it is not NaN, and if the value is of type Date it is only a valid key if its
+// [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN."
+
+// What is required is to ensure that an Lists in the key are actually
+// JavaScript arrays, and any Dates are JavaScript Dates.
+
+// Conversions for Window.  These check if the window is the local
+// window, and if it's not, wraps or unwraps it with a secure wrapper.
+// We need to test for EventTarget here as well as it's a base type.
+// We omit an unwrapper for Window as no methods take a non-local
+// window as a parameter.
+
+Window _convertNativeToDart_Window(win) {
+  return _DOMWindowCrossFrame._createSafe(win);
+}
+
+EventTarget _convertNativeToDart_EventTarget(e) {
+  // Assume it's a Window if it contains the setInterval property.  It may be
+  // from a different frame - without a patched prototype - so we cannot
+  // rely on Dart type checking.
+  if (JS('bool', r'"setInterval" in #', e))
+    return _DOMWindowCrossFrame._createSafe(e);
+  else
+    return e;
+}
+
+EventTarget _convertDartToNative_EventTarget(e) {
+  if (e is _DOMWindowCrossFrame) {
+    return e._window;
+  } else {
+    return e;
+  }
+}
+
+// Conversions for ImageData
+//
+// On Firefox, the returned ImageData is a plain object.
+
+class _TypedImageData implements ImageData {
+  final Uint8ClampedArray data;
+  final int height;
+  final int width;
+
+  _TypedImageData(this.data, this.height, this.width);
+}
+
+ImageData _convertNativeToDart_ImageData(nativeImageData) {
+  if (nativeImageData is ImageData) return nativeImageData;
+
+  // On Firefox the above test fails because imagedata is a plain object.
+  // So we create a _TypedImageData.
+
+  return new _TypedImageData(
+      JS('var', '#.data', nativeImageData),
+      JS('var', '#.height', nativeImageData),
+      JS('var', '#.width', nativeImageData));
+}
+
+// We can get rid of this conversion if _TypedImageData implements the fields
+// with native names.
+_convertDartToNative_ImageData(ImageData imageData) {
+  if (imageData is _TypedImageData) {
+    return JS('Object', '{data: #, height: #, width: #}',
+        imageData.data, imageData.height, imageData.width);
+  }
+  return imageData;
+}
+
+
+/// Converts a JavaScript object with properties into a Dart Map.
+/// Not suitable for nested objects.
+Map _convertNativeToDart_Dictionary(object) {
+  if (object == null) return null;
+  var dict = {};
+  for (final key in JS('List', 'Object.getOwnPropertyNames(#)', object)) {
+    dict[key] = JS('var', '#[#]', object, key);
+  }
+  return dict;
+}
+
+/// Converts a flat Dart map into a JavaScript object with properties.
+_convertDartToNative_Dictionary(Map dict) {
+  if (dict == null) return null;
+  var object = JS('var', '{}');
+  dict.forEach((String key, value) {
+      JS('void', '#[#] = #', object, key, value);
+    });
+  return object;
+}
+
+
+/**
+ * Ensures that the input is a JavaScript Array.
+ *
+ * Creates a new JavaScript array if necessary, otherwise returns the original.
+ */
+List _convertDartToNative_StringArray(List<String> input) {
+  // TODO(sra).  Implement this.
+  return input;
+}
+
+
+// -----------------------------------------------------------------------------
+
+/**
+ * Converts a native IDBKey into a Dart object.
+ *
+ * May return the original input.  May mutate the original input (but will be
+ * idempotent if mutation occurs).  It is assumed that this conversion happens
+ * on native IDBKeys on all paths that return IDBKeys from native DOM calls.
+ *
+ * If necessary, JavaScript Dates are converted into Dart Dates.
+ */
+_convertNativeToDart_IDBKey(nativeKey) {
+  containsDate(object) {
+    if (_isJavaScriptDate(object)) return true;
+    if (object is List) {
+      for (int i = 0; i < object.length; i++) {
+        if (containsDate(object[i])) return true;
+      }
+    }
+    return false;  // number, string.
+  }
+  if (containsDate(nativeKey)) {
+    throw new UnimplementedError('IDBKey containing Date');
+  }
+  // TODO: Cache conversion somewhere?
+  return nativeKey;
+}
+
+/**
+ * Converts a Dart object into a valid IDBKey.
+ *
+ * May return the original input.  Does not mutate input.
+ *
+ * If necessary, [dartKey] may be copied to ensure all lists are converted into
+ * JavaScript Arrays and Dart Dates into JavaScript Dates.
+ */
+_convertDartToNative_IDBKey(dartKey) {
+  // TODO: Implement.
+  return dartKey;
+}
+
+
+
+/// May modify original.  If so, action is idempotent.
+_convertNativeToDart_IDBAny(object) {
+  return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: false);
+}
+
+/// Converts a Dart value into a JavaScript SerializedScriptValue.
+_convertDartToNative_SerializedScriptValue(value) {
+  return _convertDartToNative_PrepareForStructuredClone(value);
+}
+
+/// Since the source object may be viewed via a JavaScript event listener the
+/// original may not be modified.
+_convertNativeToDart_SerializedScriptValue(object) {
+  return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: true);
+}
+
+
+/**
+ * Converts a Dart value into a JavaScript SerializedScriptValue.  Returns the
+ * original input or a functional 'copy'.  Does not mutate the original.
+ *
+ * The main transformation is the translation of Dart Maps are converted to
+ * JavaScript Objects.
+ *
+ * The algorithm is essentially a dry-run of the structured clone algorithm
+ * described at
+ * http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#structured-clone
+ * https://www.khronos.org/registry/typedarray/specs/latest/#9
+ *
+ * Since the result of this function is expected to be passed only to JavaScript
+ * operations that perform the structured clone algorithm which does not mutate
+ * its output, the result may share structure with the input [value].
+ */
+_convertDartToNative_PrepareForStructuredClone(value) {
+
+  // TODO(sra): Replace slots with identity hash table.
+  var values = [];
+  var copies = [];  // initially 'null', 'true' during initial DFS, then a copy.
+
+  int findSlot(value) {
+    int length = values.length;
+    for (int i = 0; i < length; i++) {
+      if (identical(values[i], value)) return i;
+    }
+    values.add(value);
+    copies.add(null);
+    return length;
+  }
+  readSlot(int i) => copies[i];
+  writeSlot(int i, x) { copies[i] = x; }
+  cleanupSlots() {}  // Will be needed if we mark objects with a property.
+
+  // Returns the input, or a clone of the input.
+  walk(e) {
+    if (e == null) return e;
+    if (e is bool) return e;
+    if (e is num) return e;
+    if (e is String) return e;
+    if (e is Date) {
+      // TODO(sra).
+      throw new UnimplementedError('structured clone of Date');
+    }
+    if (e is RegExp) {
+      // TODO(sra).
+      throw new UnimplementedError('structured clone of RegExp');
+    }
+
+    // The browser's internal structured cloning algorithm will copy certain
+    // types of object, but it will copy only its own implementations and not
+    // just any Dart implementations of the interface.
+
+    // TODO(sra): The JavaScript objects suitable for direct cloning by the
+    // structured clone algorithm could be tagged with an private interface.
+
+    if (e is File) return e;
+    if (e is Blob) return e;
+    if (e is _FileList) return e;
+
+    // TODO(sra): Firefox: How to convert _TypedImageData on the other end?
+    if (e is ImageData) return e;
+    if (e is ArrayBuffer) return e;
+
+    if (e is ArrayBufferView) return e;
+
+    if (e is Map) {
+      var slot = findSlot(e);
+      var copy = readSlot(slot);
+      if (copy != null) return copy;
+      copy = JS('var', '{}');
+      writeSlot(slot, copy);
+      e.forEach((key, value) {
+          JS('void', '#[#] = #', copy, key, walk(value));
+        });
+      return copy;
+    }
+
+    if (e is List) {
+      // Since a JavaScript Array is an instance of Dart List it is possible to
+      // avoid making a copy of the list if there is no need to copy anything
+      // reachable from the array.  We defer creating a new array until a cycle
+      // is detected or a subgraph was copied.
+      int length = e.length;
+      var slot = findSlot(e);
+      var copy = readSlot(slot);
+      if (copy != null) {
+        if (true == copy) {  // Cycle, so commit to making a copy.
+          copy = JS('List', 'new Array(#)', length);
+          writeSlot(slot, copy);
+        }
+        return copy;
+      }
+
+      int i = 0;
+
+      if (_isJavaScriptArray(e) &&
+          // We have to copy immutable lists, otherwise the structured clone
+          // algorithm will copy the .immutable$list marker property, making the
+          // list immutable when received!
+          !_isImmutableJavaScriptArray(e)) {
+        writeSlot(slot, true);  // Deferred copy.
+        for ( ; i < length; i++) {
+          var element = e[i];
+          var elementCopy = walk(element);
+          if (!identical(elementCopy, element)) {
+            copy = readSlot(slot);   // Cyclic reference may have created it.
+            if (true == copy) {
+              copy = JS('List', 'new Array(#)', length);
+              writeSlot(slot, copy);
+            }
+            for (int j = 0; j < i; j++) {
+              copy[j] = e[j];
+            }
+            copy[i] = elementCopy;
+            i++;
+            break;
+          }
+        }
+        if (copy == null) {
+          copy = e;
+          writeSlot(slot, copy);
+        }
+      } else {
+        // Not a JavaScript Array.  We are forced to make a copy.
+        copy = JS('List', 'new Array(#)', length);
+        writeSlot(slot, copy);
+      }
+
+      for ( ; i < length; i++) {
+        copy[i] = walk(e[i]);
+      }
+      return copy;
+    }
+
+    throw new UnimplementedError('structured clone of other type');
+  }
+
+  var copy = walk(value);
+  cleanupSlots();
+  return copy;
+}
+
+/**
+ * Converts a native value into a Dart object.
+ *
+ * If [mustCopy] is [:false:], may return the original input.  May mutate the
+ * original input (but will be idempotent if mutation occurs).  It is assumed
+ * that this conversion happens on native serializable script values such values
+ * from native DOM calls.
+ *
+ * [object] is the result of a structured clone operation.
+ *
+ * If necessary, JavaScript Dates are converted into Dart Dates.
+ *
+ * If [mustCopy] is [:true:], the entire object is copied and the original input
+ * is not mutated.  This should be the case where Dart and JavaScript code can
+ * access the value, for example, via multiple event listeners for
+ * MessageEvents.  Mutating the object to make it more 'Dart-like' would corrupt
+ * the value as seen from the JavaScript listeners.
+ */
+_convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
+
+  // TODO(sra): Replace slots with identity hash table that works on non-dart
+  // objects.
+  var values = [];
+  var copies = [];
+
+  int findSlot(value) {
+    int length = values.length;
+    for (int i = 0; i < length; i++) {
+      if (identical(values[i], value)) return i;
+    }
+    values.add(value);
+    copies.add(null);
+    return length;
+  }
+  readSlot(int i) => copies[i];
+  writeSlot(int i, x) { copies[i] = x; }
+
+  walk(e) {
+    if (e == null) return e;
+    if (e is bool) return e;
+    if (e is num) return e;
+    if (e is String) return e;
+
+    if (_isJavaScriptDate(e)) {
+      // TODO(sra).
+      throw new UnimplementedError('structured clone of Date');
+    }
+
+    if (_isJavaScriptRegExp(e)) {
+      // TODO(sra).
+      throw new UnimplementedError('structured clone of RegExp');
+    }
+
+    if (_isJavaScriptSimpleObject(e)) {
+      // TODO(sra): If mustCopy is false, swizzle the prototype for one of a Map
+      // implementation that uses the properies as storage.
+      var slot = findSlot(e);
+      var copy = readSlot(slot);
+      if (copy != null) return copy;
+      copy = {};
+
+      writeSlot(slot, copy);
+      for (final key in JS('List', 'Object.keys(#)', e)) {
+        copy[key] = walk(JS('var', '#[#]', e, key));
+      }
+      return copy;
+    }
+
+    if (_isJavaScriptArray(e)) {
+      var slot = findSlot(e);
+      var copy = readSlot(slot);
+      if (copy != null) return copy;
+
+      int length = e.length;
+      // Since a JavaScript Array is an instance of Dart List, we can modify it
+      // in-place unless we must copy.
+      copy = mustCopy ? JS('List', 'new Array(#)', length) : e;
+      writeSlot(slot, copy);
+
+      for (int i = 0; i < length; i++) {
+        copy[i] = walk(e[i]);
+      }
+      return copy;
+    }
+
+    // Assume anything else is already a valid Dart object, either by having
+    // already been processed, or e.g. a clonable native class.
+    return e;
+  }
+
+  var copy = walk(object);
+  return copy;
+}
+
+
+bool _isJavaScriptDate(value) => JS('bool', '# instanceof Date', value);
+bool _isJavaScriptRegExp(value) => JS('bool', '# instanceof RegExp', value);
+bool _isJavaScriptArray(value) => JS('bool', '# instanceof Array', value);
+bool _isJavaScriptSimpleObject(value) =>
+    JS('bool', 'Object.getPrototypeOf(#) === Object.prototype', value);
+bool _isImmutableJavaScriptArray(value) =>
+    JS('bool', r'!!(#.immutable$list)', value);
+// 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.
+
+// TODO(vsm): Unify with Dartium version.
+class _DOMWindowCrossFrame implements Window {
+  // Private window.  Note, this is a window in another frame, so it
+  // cannot be typed as "Window" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  var _window;
+
+  // Fields.
+  History get history =>
+    _HistoryCrossFrame._createSafe(JS('History', '#.history', _window));
+  Location get location =>
+    _LocationCrossFrame._createSafe(JS('Location', '#.location', _window));
+
+  // TODO(vsm): Add frames to navigate subframes.  See 2312.
+
+  bool get closed => JS('bool', '#.closed', _window);
+
+  Window get opener => _createSafe(JS('Window', '#.opener', _window));
+
+  Window get parent => _createSafe(JS('Window', '#.parent', _window));
+
+  Window get top => _createSafe(JS('Window', '#.top', _window));
+
+  // Methods.
+  void focus() => JS('void', '#.focus()', _window);
+
+  void blur() => JS('void', '#.blur()', _window);
+
+  void close() => JS('void', '#.close()', _window);
+
+  void postMessage(var message, String targetOrigin, [List messagePorts = null]) {
+    if (messagePorts == null) {
+      JS('void', '#.postMessage(#,#)', _window, message, targetOrigin);
+    } else {
+      JS('void', '#.postMessage(#,#,#)', _window, message, targetOrigin, messagePorts);
+    }
+  }
+
+  // Implementation support.
+  _DOMWindowCrossFrame(this._window);
+
+  static Window _createSafe(w) {
+    if (identical(w, window)) {
+      return w;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      return new _DOMWindowCrossFrame(w);
+    }
+  }
+}
+
+class _LocationCrossFrame implements Location {
+  // Private location.  Note, this is a location object in another frame, so it
+  // cannot be typed as "Location" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  var _location;
+
+  void set href(String val) => _setHref(_location, val);
+  static void _setHref(location, val) {
+    JS('void', '#.href = #', location, val);
+  }
+
+  // Implementation support.
+  _LocationCrossFrame(this._location);
+
+  static Location _createSafe(location) {
+    if (identical(location, window.location)) {
+      return location;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      return new _LocationCrossFrame(location);
+    }
+  }
+}
+
+class _HistoryCrossFrame implements History {
+  // Private history.  Note, this is a history object in another frame, so it
+  // cannot be typed as "History" as its prototype is not patched
+  // properly.  Its fields and methods can only be accessed via JavaScript.
+  var _history;
+
+  void back() => JS('void', '#.back()', _history);
+
+  void forward() => JS('void', '#.forward()', _history);
+
+  void go(int distance) => JS('void', '#.go(#)', _history, distance);
+
+  // Implementation support.
+  _HistoryCrossFrame(this._history);
+
+  static History _createSafe(h) {
+    if (identical(h, window.history)) {
+      return h;
+    } else {
+      // TODO(vsm): Cache or implement equality.
+      return new _HistoryCrossFrame(h);
+    }
+  }
+}
+// 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 _AudioContextFactoryProvider {
+
+  static AudioContext createAudioContext() {
+    return JS('AudioContext',
+              'new (window.AudioContext || window.webkitAudioContext)()');
+  }
+}
+
+class _PointFactoryProvider {
+  static Point createPoint(num x, num y) =>
+      JS('Point', 'new WebKitPoint(#, #)', x, y);
+}
+
+class _WebSocketFactoryProvider {
+  static WebSocket createWebSocket(String url) =>
+      JS('WebSocket', 'new WebSocket(#)', url);
+}
+
+class _TextFactoryProvider {
+  static Text createText(String data) =>
+      JS('Text', 'document.createTextNode(#)', data);
+}
+// 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 _IDBKeyRangeFactoryProvider {
+
+  static IDBKeyRange createIDBKeyRange_only(/*IDBKey*/ value) =>
+      _only(_class(), _translateKey(value));
+
+  static IDBKeyRange createIDBKeyRange_lowerBound(
+      /*IDBKey*/ bound, [bool open = false]) =>
+      _lowerBound(_class(), _translateKey(bound), open);
+
+  static IDBKeyRange createIDBKeyRange_upperBound(
+      /*IDBKey*/ bound, [bool open = false]) =>
+      _upperBound(_class(), _translateKey(bound), open);
+
+  static IDBKeyRange createIDBKeyRange_bound(/*IDBKey*/ lower, /*IDBKey*/ upper,
+      [bool lowerOpen = false, bool upperOpen = false]) =>
+      _bound(_class(), _translateKey(lower), _translateKey(upper),
+             lowerOpen, upperOpen);
+
+  static var _cachedClass;
+
+  static _class() {
+    if (_cachedClass != null) return _cachedClass;
+    return _cachedClass = _uncachedClass();
+  }
+
+  static _uncachedClass() =>
+    JS('var',
+       '''window.webkitIDBKeyRange || window.mozIDBKeyRange ||
+          window.msIDBKeyRange || window.IDBKeyRange''');
+
+  static _translateKey(idbkey) => idbkey;  // TODO: fixme.
+
+  static IDBKeyRange _only(cls, value) =>
+       JS('IDBKeyRange', '#.only(#)', cls, value);
+
+  static IDBKeyRange _lowerBound(cls, bound, open) =>
+       JS('IDBKeyRange', '#.lowerBound(#, #)', cls, bound, open);
+
+  static IDBKeyRange _upperBound(cls, bound, open) =>
+       JS('IDBKeyRange', '#.upperBound(#, #)', cls, bound, open);
+
+  static IDBKeyRange _bound(cls, lower, upper, lowerOpen, upperOpen) =>
+       JS('IDBKeyRange', '#.bound(#, #, #, #)',
+          cls, lower, upper, lowerOpen, upperOpen);
+}
+// 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.
+
+
+// On Firefox 11, the object obtained from 'window.location' is very strange.
+// It can't be monkey-patched and seems immune to putting methods on
+// Object.prototype.  We are forced to wrap the object.
+
+class _LocationWrapper implements LocalLocation {
+
+  final _ptr;  // Opaque reference to real location.
+
+  _LocationWrapper(this._ptr);
+
+  // TODO(sra): Replace all the _set and _get calls with 'JS' forms.
+
+  // final List<String> ancestorOrigins;
+  List<String> get ancestorOrigins => _get(_ptr, 'ancestorOrigins');
+
+  // String hash;
+  String get hash => _get(_ptr, 'hash');
+  void set hash(String value) => _set(_ptr, 'hash', value);
+
+  // String host;
+  String get host => _get(_ptr, 'host');
+  void set host(String value) => _set(_ptr, 'host', value);
+
+  // String hostname;
+  String get hostname => _get(_ptr, 'hostname');
+  void set hostname(String value) => _set(_ptr, 'hostname', value);
+
+  // String href;
+  String get href => _get(_ptr, 'href');
+  void set href(String value) => _set(_ptr, 'href', value);
+
+  // final String origin;
+  String get origin => _get(_ptr, 'origin');
+
+  // String pathname;
+  String get pathname => _get(_ptr, 'pathname');
+  void set pathname(String value) => _set(_ptr, 'pathname', value);
+
+  // String port;
+  String get port => _get(_ptr, 'port');
+  void set port(String value) => _set(_ptr, 'port', value);
+
+  // String protocol;
+  String get protocol => _get(_ptr, 'protocol');
+  void set protocol(String value) => _set(_ptr, 'protocol', value);
+
+  // String search;
+  String get search => _get(_ptr, 'search');
+  void set search(String value) => _set(_ptr, 'search', value);
+
+
+  void assign(String url) => JS('void', '#.assign(#)', _ptr, url);
+
+  void reload() => JS('void', '#.reload()', _ptr);
+
+  void replace(String url) => JS('void', '#.replace(#)', _ptr, url);
+
+  String toString() => JS('String', '#.toString()', _ptr);
+
+
+  static _get(p, m) => JS('var', '#[#]', p, m);
+  static _set(p, m, v) => JS('void', '#[#] = #', p, m, v);
+}
+// 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.
+
+/**
+ * Checks to see if the mutation observer API is supported on the current
+ * platform.
+ */
+bool _isMutationObserverSupported() =>
+  JS('bool', '!!(window.MutationObserver || window.WebKitMutationObserver)');
+// 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 _TypedArrayFactoryProvider {
+
+  static Float32Array createFloat32Array(int length) => _F32(length);
+  static Float32Array createFloat32Array_fromList(List<num> list) =>
+      _F32(ensureNative(list));
+  static Float32Array createFloat32Array_fromBuffer(ArrayBuffer buffer,
+                                  [int byteOffset = 0, int length]) {
+    if (length == null) return _F32_2(buffer, byteOffset);
+    return _F32_3(buffer, byteOffset, length);
+  }
+
+  static Float64Array createFloat64Array(int length) => _F64(length);
+  static Float64Array createFloat64Array_fromList(List<num> list) =>
+      _F64(ensureNative(list));
+  static Float64Array createFloat64Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _F64_2(buffer, byteOffset);
+    return _F64_3(buffer, byteOffset, length);
+  }
+
+  static Int8Array createInt8Array(int length) => _I8(length);
+  static Int8Array createInt8Array_fromList(List<num> list) =>
+      _I8(ensureNative(list));
+  static Int8Array createInt8Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I8_2(buffer, byteOffset);
+    return _I8_3(buffer, byteOffset, length);
+  }
+
+  static Int16Array createInt16Array(int length) => _I16(length);
+  static Int16Array createInt16Array_fromList(List<num> list) =>
+      _I16(ensureNative(list));
+  static Int16Array createInt16Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I16_2(buffer, byteOffset);
+    return _I16_3(buffer, byteOffset, length);
+  }
+
+  static Int32Array createInt32Array(int length) => _I32(length);
+  static Int32Array createInt32Array_fromList(List<num> list) =>
+      _I32(ensureNative(list));
+  static Int32Array createInt32Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _I32_2(buffer, byteOffset);
+    return _I32_3(buffer, byteOffset, length);
+  }
+
+  static Uint8Array createUint8Array(int length) => _U8(length);
+  static Uint8Array createUint8Array_fromList(List<num> list) =>
+      _U8(ensureNative(list));
+  static Uint8Array createUint8Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U8_2(buffer, byteOffset);
+    return _U8_3(buffer, byteOffset, length);
+  }
+
+  static Uint16Array createUint16Array(int length) => _U16(length);
+  static Uint16Array createUint16Array_fromList(List<num> list) =>
+      _U16(ensureNative(list));
+  static Uint16Array createUint16Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U16_2(buffer, byteOffset);
+    return _U16_3(buffer, byteOffset, length);
+  }
+
+  static Uint32Array createUint32Array(int length) => _U32(length);
+  static Uint32Array createUint32Array_fromList(List<num> list) =>
+      _U32(ensureNative(list));
+  static Uint32Array createUint32Array_fromBuffer(ArrayBuffer buffer,
+      [int byteOffset = 0, int length]) {
+    if (length == null) return _U32_2(buffer, byteOffset);
+    return _U32_3(buffer, byteOffset, length);
+  }
+
+  static Uint8ClampedArray createUint8ClampedArray(int length) => _U8C(length);
+  static Uint8ClampedArray createUint8ClampedArray_fromList(List<num> list) =>
+      _U8C(ensureNative(list));
+  static Uint8ClampedArray createUint8ClampedArray_fromBuffer(
+        ArrayBuffer buffer, [int byteOffset = 0, int length]) {
+    if (length == null) return _U8C_2(buffer, byteOffset);
+    return _U8C_3(buffer, byteOffset, length);
+  }
+
+  static Float32Array _F32(arg) =>
+      JS('Float32Array', 'new Float32Array(#)', arg);
+  static Float64Array _F64(arg) =>
+      JS('Float64Array', 'new Float64Array(#)', arg);
+  static Int8Array _I8(arg) =>
+      JS('Int8Array', 'new Int8Array(#)', arg);
+  static Int16Array _I16(arg) =>
+      JS('Int16Array', 'new Int16Array(#)', arg);
+  static Int32Array _I32(arg) =>
+      JS('Int32Array', 'new Int32Array(#)', arg);
+  static Uint8Array _U8(arg) =>
+      JS('Uint8Array', 'new Uint8Array(#)', arg);
+  static Uint16Array _U16(arg) =>
+      JS('Uint16Array', 'new Uint16Array(#)', arg);
+  static Uint32Array _U32(arg) =>
+      JS('Uint32Array', 'new Uint32Array(#)', arg);
+  static Uint8ClampedArray _U8C(arg) =>
+      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#)', arg);
+
+  static Float32Array _F32_2(arg1, arg2) =>
+      JS('Float32Array', 'new Float32Array(#, #)', arg1, arg2);
+  static Float64Array _F64_2(arg1, arg2) =>
+      JS('Float64Array', 'new Float64Array(#, #)', arg1, arg2);
+  static Int8Array _I8_2(arg1, arg2) =>
+      JS('Int8Array', 'new Int8Array(#, #)', arg1, arg2);
+  static Int16Array _I16_2(arg1, arg2) =>
+      JS('Int16Array', 'new Int16Array(#, #)', arg1, arg2);
+  static Int32Array _I32_2(arg1, arg2) =>
+      JS('Int32Array', 'new Int32Array(#, #)', arg1, arg2);
+  static Uint8Array _U8_2(arg1, arg2) =>
+      JS('Uint8Array', 'new Uint8Array(#, #)', arg1, arg2);
+  static Uint16Array _U16_2(arg1, arg2) =>
+      JS('Uint16Array', 'new Uint16Array(#, #)', arg1, arg2);
+  static Uint32Array _U32_2(arg1, arg2) =>
+      JS('Uint32Array', 'new Uint32Array(#, #)', arg1, arg2);
+  static Uint8ClampedArray _U8C_2(arg1, arg2) =>
+      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#, #)', arg1, arg2);
+
+  static Float32Array _F32_3(arg1, arg2, arg3) =>
+      JS('Float32Array', 'new Float32Array(#, #, #)', arg1, arg2, arg3);
+  static Float64Array _F64_3(arg1, arg2, arg3) =>
+      JS('Float64Array', 'new Float64Array(#, #, #)', arg1, arg2, arg3);
+  static Int8Array _I8_3(arg1, arg2, arg3) =>
+      JS('Int8Array', 'new Int8Array(#, #, #)', arg1, arg2, arg3);
+  static Int16Array _I16_3(arg1, arg2, arg3) =>
+      JS('Int16Array', 'new Int16Array(#, #, #)', arg1, arg2, arg3);
+  static Int32Array _I32_3(arg1, arg2, arg3) =>
+      JS('Int32Array', 'new Int32Array(#, #, #)', arg1, arg2, arg3);
+  static Uint8Array _U8_3(arg1, arg2, arg3) =>
+      JS('Uint8Array', 'new Uint8Array(#, #, #)', arg1, arg2, arg3);
+  static Uint16Array _U16_3(arg1, arg2, arg3) =>
+      JS('Uint16Array', 'new Uint16Array(#, #, #)', arg1, arg2, arg3);
+  static Uint32Array _U32_3(arg1, arg2, arg3) =>
+      JS('Uint32Array', 'new Uint32Array(#, #, #)', arg1, arg2, arg3);
+  static Uint8ClampedArray _U8C_3(arg1, arg2, arg3) =>
+      JS('Uint8ClampedArray', 'new Uint8ClampedArray(#, #, #)', arg1, arg2, arg3);
+
+
+  // Ensures that [list] is a JavaScript Array or a typed array.  If necessary,
+  // copies the list.
+  static ensureNative(List list) => list;  // TODO: make sure.
+}
+// 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.
+
+// TODO(rnystrom): add a way to supress public classes from DartDoc output.
+// TODO(jacobr): we can remove this class now that we are using the $dom_
+// convention for deprecated methods rather than truly private methods.
+/**
+ * This class is intended for testing purposes only.
+ */
+class Testing {
+  static void addEventListener(EventTarget target, String type, EventListener listener, bool useCapture) {
+    target.$dom_addEventListener(type, listener, useCapture);
+  }
+  static void removeEventListener(EventTarget target, String type, EventListener listener, bool useCapture) {
+    target.$dom_removeEventListener(type, listener, useCapture);
+  }
+
+}// 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.
+
+/**
+ * Utils for device detection.
+ */
+class _Device {
+  /**
+   * Gets the browser's user agent. Using this function allows tests to inject
+   * the user agent.
+   * Returns the user agent.
+   */
+  static String get userAgent => window.navigator.userAgent;
+
+  /**
+   * Determines if the current device is running Opera.
+   */
+  static bool get isOpera => userAgent.contains("Opera", 0);
+
+  /**
+   * Determines if the current device is running Internet Explorer.
+   */
+  static bool get isIE => !isOpera && userAgent.contains("MSIE", 0);
+
+  /**
+   * Determines if the current device is running Firefox.
+   */
+  static bool get isFirefox => userAgent.contains("Firefox", 0);
+
+  /**
+   * Determines if the current device is running WebKit.
+   */
+  static bool get isWebKit => !isOpera && userAgent.contains("WebKit", 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.
+
+// Iterator for arrays with fixed size.
+class _FixedSizeListIterator<T> extends _VariableSizeListIterator<T> {
+  _FixedSizeListIterator(List<T> array)
+      : super(array),
+        _length = array.length;
+
+  bool get hasNext => _length > _pos;
+
+  final int _length;  // Cache array length for faster access.
+}
+
+// Iterator for arrays with variable size.
+class _VariableSizeListIterator<T> implements Iterator<T> {
+  _VariableSizeListIterator(List<T> array)
+      : _array = array,
+        _pos = 0;
+
+  bool get hasNext => _array.length > _pos;
+
+  T next() {
+    if (!hasNext) {
+      throw new StateError("No more elements");
+    }
+    return _array[_pos++];
+  }
+
+  final List<T> _array;
+  int _pos;
+}
+// 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.
+
+class _Lists {
+
+  /**
+   * Returns the index in the array [a] of the given [element], starting
+   * the search at index [startIndex] to [endIndex] (exclusive).
+   * Returns -1 if [element] is not found.
+   */
+  static int indexOf(List a,
+                     Object element,
+                     int startIndex,
+                     int endIndex) {
+    if (startIndex >= a.length) {
+      return -1;
+    }
+    if (startIndex < 0) {
+      startIndex = 0;
+    }
+    for (int i = startIndex; i < endIndex; i++) {
+      if (a[i] == element) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the last index in the array [a] of the given [element], starting
+   * the search at index [startIndex] to 0.
+   * Returns -1 if [element] is not found.
+   */
+  static int lastIndexOf(List a, Object element, int startIndex) {
+    if (startIndex < 0) {
+      return -1;
+    }
+    if (startIndex >= a.length) {
+      startIndex = a.length - 1;
+    }
+    for (int i = startIndex; i >= 0; i--) {
+      if (a[i] == element) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns a sub list copy of this list, from [start] to
+   * [:start + length:].
+   * Returns an empty list if [length] is 0.
+   * Throws an [ArgumentError] if [length] is negative.
+   * Throws a [RangeError] if [start] or [:start + length:] are out of range.
+   */
+  static List getRange(List a, int start, int length, List accumulator) {
+    if (length < 0) throw new ArgumentError('length');
+    if (start < 0) throw new RangeError.value(start);
+    int end = start + length;
+    if (end > a.length) throw new RangeError.value(end);
+    for (int i = start; i < end; i++) {
+      accumulator.add(a[i]);
+    }
+    return accumulator;
+  }
+}
diff --git a/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
similarity index 72%
rename from lib/html/dartium/html_dartium.dart
rename to sdk/lib/html/dartium/html_dartium.dart
index 88f1eef..1cfc879 100644
--- a/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -16,6 +16,7 @@
 
 
 
+// FIXME (blois): Rename to _window (ditto __document).
 LocalWindow __window;
 
 LocalWindow get window {
@@ -26,22 +27,19 @@
   return __window;
 }
 
-LocalWindow get _window native "Utils_window";
-
 Document __document;
 
 Document get document {
   if (__document != null) {
     return __document;
   }
-  __document = _document;
+  __document = window.document;
   return __document;
 }
 
-Document get _document => _window.document;
 
-Element query(String selector) => _document.query(selector);
-List<Element> queryAll(String selector) => _document.queryAll(selector);
+Element query(String selector) => document.query(selector);
+List<Element> queryAll(String selector) => document.queryAll(selector);
 
 int _getNewIsolateId() => _Utils._getNewIsolateId();
 
@@ -68,48 +66,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AbstractWorker
-abstract class AbstractWorker implements EventTarget {
+class AbstractWorker extends EventTarget {
+  AbstractWorker.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  AbstractWorkerEvents get on;
+  AbstractWorkerEvents get on =>
+    new AbstractWorkerEvents(this);
+
 
   /** @domName AbstractWorker.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName AbstractWorker.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName AbstractWorker.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class AbstractWorkerEvents implements Events {
-
-  EventListenerList get error;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AbstractWorkerImpl extends _EventTargetImpl implements AbstractWorker {
-
-  _AbstractWorkerEventsImpl get on =>
-    new _AbstractWorkerEventsImpl(this);
-
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_addEventListener_Callback";
 
+
+  /** @domName AbstractWorker.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "AbstractWorker_dispatchEvent_Callback";
 
+
+  /** @domName AbstractWorker.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_removeEventListener_Callback";
 
 }
 
-class _AbstractWorkerEventsImpl extends _EventsImpl implements AbstractWorkerEvents {
-  _AbstractWorkerEventsImpl(_ptr) : super(_ptr);
+class AbstractWorkerEvents extends Events {
+  AbstractWorkerEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get error => this['error'];
 }
@@ -120,62 +101,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AnalyserNode
-abstract class AnalyserNode implements AudioNode {
+class AnalyserNode extends AudioNode {
+  AnalyserNode.internal(): super.internal();
+
 
   /** @domName AnalyserNode.fftSize */
-  int fftSize;
-
-  /** @domName AnalyserNode.frequencyBinCount */
-  int get frequencyBinCount;
-
-  /** @domName AnalyserNode.maxDecibels */
-  num maxDecibels;
-
-  /** @domName AnalyserNode.minDecibels */
-  num minDecibels;
-
-  /** @domName AnalyserNode.smoothingTimeConstant */
-  num smoothingTimeConstant;
-
-  /** @domName AnalyserNode.getByteFrequencyData */
-  void getByteFrequencyData(Uint8Array array);
-
-  /** @domName AnalyserNode.getByteTimeDomainData */
-  void getByteTimeDomainData(Uint8Array array);
-
-  /** @domName AnalyserNode.getFloatFrequencyData */
-  void getFloatFrequencyData(Float32Array array);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AnalyserNodeImpl extends _AudioNodeImpl implements AnalyserNode {
-
   int get fftSize native "AnalyserNode_fftSize_Getter";
 
+
+  /** @domName AnalyserNode.fftSize */
   void set fftSize(int value) native "AnalyserNode_fftSize_Setter";
 
+
+  /** @domName AnalyserNode.frequencyBinCount */
   int get frequencyBinCount native "AnalyserNode_frequencyBinCount_Getter";
 
+
+  /** @domName AnalyserNode.maxDecibels */
   num get maxDecibels native "AnalyserNode_maxDecibels_Getter";
 
+
+  /** @domName AnalyserNode.maxDecibels */
   void set maxDecibels(num value) native "AnalyserNode_maxDecibels_Setter";
 
+
+  /** @domName AnalyserNode.minDecibels */
   num get minDecibels native "AnalyserNode_minDecibels_Getter";
 
+
+  /** @domName AnalyserNode.minDecibels */
   void set minDecibels(num value) native "AnalyserNode_minDecibels_Setter";
 
+
+  /** @domName AnalyserNode.smoothingTimeConstant */
   num get smoothingTimeConstant native "AnalyserNode_smoothingTimeConstant_Getter";
 
+
+  /** @domName AnalyserNode.smoothingTimeConstant */
   void set smoothingTimeConstant(num value) native "AnalyserNode_smoothingTimeConstant_Setter";
 
+
+  /** @domName AnalyserNode.getByteFrequencyData */
   void getByteFrequencyData(Uint8Array array) native "AnalyserNode_getByteFrequencyData_Callback";
 
+
+  /** @domName AnalyserNode.getByteTimeDomainData */
   void getByteTimeDomainData(Uint8Array array) native "AnalyserNode_getByteTimeDomainData_Callback";
 
+
+  /** @domName AnalyserNode.getFloatFrequencyData */
   void getFloatFrequencyData(Float32Array array) native "AnalyserNode_getFloatFrequencyData_Callback";
 
 }
@@ -186,7 +160,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLAnchorElement
-abstract class AnchorElement implements Element {
+class AnchorElement extends _Element_Merged {
 
   factory AnchorElement({String href}) {
     if (!?href) {
@@ -194,156 +168,166 @@
     }
     return _Elements.createAnchorElement(href);
   }
+  AnchorElement.internal(): super.internal();
+
 
   /** @domName HTMLAnchorElement.charset */
-  String charset;
-
-  /** @domName HTMLAnchorElement.coords */
-  String coords;
-
-  /** @domName HTMLAnchorElement.download */
-  String download;
-
-  /** @domName HTMLAnchorElement.hash */
-  String hash;
-
-  /** @domName HTMLAnchorElement.host */
-  String host;
-
-  /** @domName HTMLAnchorElement.hostname */
-  String hostname;
-
-  /** @domName HTMLAnchorElement.href */
-  String href;
-
-  /** @domName HTMLAnchorElement.hreflang */
-  String hreflang;
-
-  /** @domName HTMLAnchorElement.name */
-  String name;
-
-  /** @domName HTMLAnchorElement.origin */
-  String get origin;
-
-  /** @domName HTMLAnchorElement.pathname */
-  String pathname;
-
-  /** @domName HTMLAnchorElement.ping */
-  String ping;
-
-  /** @domName HTMLAnchorElement.port */
-  String port;
-
-  /** @domName HTMLAnchorElement.protocol */
-  String protocol;
-
-  /** @domName HTMLAnchorElement.rel */
-  String rel;
-
-  /** @domName HTMLAnchorElement.rev */
-  String rev;
-
-  /** @domName HTMLAnchorElement.search */
-  String search;
-
-  /** @domName HTMLAnchorElement.shape */
-  String shape;
-
-  /** @domName HTMLAnchorElement.target */
-  String target;
-
-  /** @domName HTMLAnchorElement.type */
-  String type;
-
-  /** @domName HTMLAnchorElement.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AnchorElementImpl extends _ElementImpl_Merged implements AnchorElement {
-
   String get charset native "HTMLAnchorElement_charset_Getter";
 
+
+  /** @domName HTMLAnchorElement.charset */
   void set charset(String value) native "HTMLAnchorElement_charset_Setter";
 
+
+  /** @domName HTMLAnchorElement.coords */
   String get coords native "HTMLAnchorElement_coords_Getter";
 
+
+  /** @domName HTMLAnchorElement.coords */
   void set coords(String value) native "HTMLAnchorElement_coords_Setter";
 
+
+  /** @domName HTMLAnchorElement.download */
   String get download native "HTMLAnchorElement_download_Getter";
 
+
+  /** @domName HTMLAnchorElement.download */
   void set download(String value) native "HTMLAnchorElement_download_Setter";
 
+
+  /** @domName HTMLAnchorElement.hash */
   String get hash native "HTMLAnchorElement_hash_Getter";
 
+
+  /** @domName HTMLAnchorElement.hash */
   void set hash(String value) native "HTMLAnchorElement_hash_Setter";
 
+
+  /** @domName HTMLAnchorElement.host */
   String get host native "HTMLAnchorElement_host_Getter";
 
+
+  /** @domName HTMLAnchorElement.host */
   void set host(String value) native "HTMLAnchorElement_host_Setter";
 
+
+  /** @domName HTMLAnchorElement.hostname */
   String get hostname native "HTMLAnchorElement_hostname_Getter";
 
+
+  /** @domName HTMLAnchorElement.hostname */
   void set hostname(String value) native "HTMLAnchorElement_hostname_Setter";
 
+
+  /** @domName HTMLAnchorElement.href */
   String get href native "HTMLAnchorElement_href_Getter";
 
+
+  /** @domName HTMLAnchorElement.href */
   void set href(String value) native "HTMLAnchorElement_href_Setter";
 
+
+  /** @domName HTMLAnchorElement.hreflang */
   String get hreflang native "HTMLAnchorElement_hreflang_Getter";
 
+
+  /** @domName HTMLAnchorElement.hreflang */
   void set hreflang(String value) native "HTMLAnchorElement_hreflang_Setter";
 
+
+  /** @domName HTMLAnchorElement.name */
   String get name native "HTMLAnchorElement_name_Getter";
 
+
+  /** @domName HTMLAnchorElement.name */
   void set name(String value) native "HTMLAnchorElement_name_Setter";
 
+
+  /** @domName HTMLAnchorElement.origin */
   String get origin native "HTMLAnchorElement_origin_Getter";
 
+
+  /** @domName HTMLAnchorElement.pathname */
   String get pathname native "HTMLAnchorElement_pathname_Getter";
 
+
+  /** @domName HTMLAnchorElement.pathname */
   void set pathname(String value) native "HTMLAnchorElement_pathname_Setter";
 
+
+  /** @domName HTMLAnchorElement.ping */
   String get ping native "HTMLAnchorElement_ping_Getter";
 
+
+  /** @domName HTMLAnchorElement.ping */
   void set ping(String value) native "HTMLAnchorElement_ping_Setter";
 
+
+  /** @domName HTMLAnchorElement.port */
   String get port native "HTMLAnchorElement_port_Getter";
 
+
+  /** @domName HTMLAnchorElement.port */
   void set port(String value) native "HTMLAnchorElement_port_Setter";
 
+
+  /** @domName HTMLAnchorElement.protocol */
   String get protocol native "HTMLAnchorElement_protocol_Getter";
 
+
+  /** @domName HTMLAnchorElement.protocol */
   void set protocol(String value) native "HTMLAnchorElement_protocol_Setter";
 
+
+  /** @domName HTMLAnchorElement.rel */
   String get rel native "HTMLAnchorElement_rel_Getter";
 
+
+  /** @domName HTMLAnchorElement.rel */
   void set rel(String value) native "HTMLAnchorElement_rel_Setter";
 
+
+  /** @domName HTMLAnchorElement.rev */
   String get rev native "HTMLAnchorElement_rev_Getter";
 
+
+  /** @domName HTMLAnchorElement.rev */
   void set rev(String value) native "HTMLAnchorElement_rev_Setter";
 
+
+  /** @domName HTMLAnchorElement.search */
   String get search native "HTMLAnchorElement_search_Getter";
 
+
+  /** @domName HTMLAnchorElement.search */
   void set search(String value) native "HTMLAnchorElement_search_Setter";
 
+
+  /** @domName HTMLAnchorElement.shape */
   String get shape native "HTMLAnchorElement_shape_Getter";
 
+
+  /** @domName HTMLAnchorElement.shape */
   void set shape(String value) native "HTMLAnchorElement_shape_Setter";
 
+
+  /** @domName HTMLAnchorElement.target */
   String get target native "HTMLAnchorElement_target_Getter";
 
+
+  /** @domName HTMLAnchorElement.target */
   void set target(String value) native "HTMLAnchorElement_target_Setter";
 
+
+  /** @domName HTMLAnchorElement.type */
   String get type native "HTMLAnchorElement_type_Getter";
 
+
+  /** @domName HTMLAnchorElement.type */
   void set type(String value) native "HTMLAnchorElement_type_Setter";
 
+
+  /** @domName HTMLAnchorElement.toString */
   String toString() native "HTMLAnchorElement_toString_Callback";
 
 }
@@ -354,7 +338,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitAnimation
-abstract class Animation {
+class Animation extends NativeFieldWrapperClass1 {
+  Animation.internal();
 
   static const int DIRECTION_ALTERNATE = 1;
 
@@ -368,97 +353,52 @@
 
   static const int FILL_NONE = 0;
 
+
   /** @domName WebKitAnimation.delay */
-  num get delay;
-
-  /** @domName WebKitAnimation.direction */
-  int get direction;
-
-  /** @domName WebKitAnimation.duration */
-  num get duration;
-
-  /** @domName WebKitAnimation.elapsedTime */
-  num elapsedTime;
-
-  /** @domName WebKitAnimation.ended */
-  bool get ended;
-
-  /** @domName WebKitAnimation.fillMode */
-  int get fillMode;
-
-  /** @domName WebKitAnimation.iterationCount */
-  int get iterationCount;
-
-  /** @domName WebKitAnimation.name */
-  String get name;
-
-  /** @domName WebKitAnimation.paused */
-  bool get paused;
-
-  /** @domName WebKitAnimation.pause */
-  void pause();
-
-  /** @domName WebKitAnimation.play */
-  void play();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitAnimationEvent
-abstract class AnimationEvent implements Event {
-
-  /** @domName WebKitAnimationEvent.animationName */
-  String get animationName;
-
-  /** @domName WebKitAnimationEvent.elapsedTime */
-  num get elapsedTime;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AnimationEventImpl extends _EventImpl implements AnimationEvent {
-
-  String get animationName native "WebKitAnimationEvent_animationName_Getter";
-
-  num get elapsedTime native "WebKitAnimationEvent_elapsedTime_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AnimationImpl extends NativeFieldWrapperClass1 implements Animation {
-
   num get delay native "WebKitAnimation_delay_Getter";
 
+
+  /** @domName WebKitAnimation.direction */
   int get direction native "WebKitAnimation_direction_Getter";
 
+
+  /** @domName WebKitAnimation.duration */
   num get duration native "WebKitAnimation_duration_Getter";
 
+
+  /** @domName WebKitAnimation.elapsedTime */
   num get elapsedTime native "WebKitAnimation_elapsedTime_Getter";
 
+
+  /** @domName WebKitAnimation.elapsedTime */
   void set elapsedTime(num value) native "WebKitAnimation_elapsedTime_Setter";
 
+
+  /** @domName WebKitAnimation.ended */
   bool get ended native "WebKitAnimation_ended_Getter";
 
+
+  /** @domName WebKitAnimation.fillMode */
   int get fillMode native "WebKitAnimation_fillMode_Getter";
 
+
+  /** @domName WebKitAnimation.iterationCount */
   int get iterationCount native "WebKitAnimation_iterationCount_Getter";
 
+
+  /** @domName WebKitAnimation.name */
   String get name native "WebKitAnimation_name_Getter";
 
+
+  /** @domName WebKitAnimation.paused */
   bool get paused native "WebKitAnimation_paused_Getter";
 
+
+  /** @domName WebKitAnimation.pause */
   void pause() native "WebKitAnimation_pause_Callback";
 
+
+  /** @domName WebKitAnimation.play */
   void play() native "WebKitAnimation_play_Callback";
 
 }
@@ -468,41 +408,18 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName HTMLAppletElement
-abstract class AppletElement implements Element {
+/// @domName WebKitAnimationEvent
+class AnimationEvent extends Event {
+  AnimationEvent.internal(): super.internal();
 
-  /** @domName HTMLAppletElement.align */
-  String align;
 
-  /** @domName HTMLAppletElement.alt */
-  String alt;
+  /** @domName WebKitAnimationEvent.animationName */
+  String get animationName native "WebKitAnimationEvent_animationName_Getter";
 
-  /** @domName HTMLAppletElement.archive */
-  String archive;
 
-  /** @domName HTMLAppletElement.code */
-  String code;
+  /** @domName WebKitAnimationEvent.elapsedTime */
+  num get elapsedTime native "WebKitAnimationEvent_elapsedTime_Getter";
 
-  /** @domName HTMLAppletElement.codeBase */
-  String codeBase;
-
-  /** @domName HTMLAppletElement.height */
-  String height;
-
-  /** @domName HTMLAppletElement.hspace */
-  String hspace;
-
-  /** @domName HTMLAppletElement.name */
-  String name;
-
-  /** @domName HTMLAppletElement.object */
-  String object;
-
-  /** @domName HTMLAppletElement.vspace */
-  String vspace;
-
-  /** @domName HTMLAppletElement.width */
-  String width;
 }
 // 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
@@ -510,50 +427,96 @@
 
 // WARNING: Do not edit - generated code.
 
-class _AppletElementImpl extends _ElementImpl_Merged implements AppletElement {
+/// @domName HTMLAppletElement
+class AppletElement extends _Element_Merged {
+  AppletElement.internal(): super.internal();
 
+
+  /** @domName HTMLAppletElement.align */
   String get align native "HTMLAppletElement_align_Getter";
 
+
+  /** @domName HTMLAppletElement.align */
   void set align(String value) native "HTMLAppletElement_align_Setter";
 
+
+  /** @domName HTMLAppletElement.alt */
   String get alt native "HTMLAppletElement_alt_Getter";
 
+
+  /** @domName HTMLAppletElement.alt */
   void set alt(String value) native "HTMLAppletElement_alt_Setter";
 
+
+  /** @domName HTMLAppletElement.archive */
   String get archive native "HTMLAppletElement_archive_Getter";
 
+
+  /** @domName HTMLAppletElement.archive */
   void set archive(String value) native "HTMLAppletElement_archive_Setter";
 
+
+  /** @domName HTMLAppletElement.code */
   String get code native "HTMLAppletElement_code_Getter";
 
+
+  /** @domName HTMLAppletElement.code */
   void set code(String value) native "HTMLAppletElement_code_Setter";
 
+
+  /** @domName HTMLAppletElement.codeBase */
   String get codeBase native "HTMLAppletElement_codeBase_Getter";
 
+
+  /** @domName HTMLAppletElement.codeBase */
   void set codeBase(String value) native "HTMLAppletElement_codeBase_Setter";
 
+
+  /** @domName HTMLAppletElement.height */
   String get height native "HTMLAppletElement_height_Getter";
 
+
+  /** @domName HTMLAppletElement.height */
   void set height(String value) native "HTMLAppletElement_height_Setter";
 
+
+  /** @domName HTMLAppletElement.hspace */
   String get hspace native "HTMLAppletElement_hspace_Getter";
 
+
+  /** @domName HTMLAppletElement.hspace */
   void set hspace(String value) native "HTMLAppletElement_hspace_Setter";
 
+
+  /** @domName HTMLAppletElement.name */
   String get name native "HTMLAppletElement_name_Getter";
 
+
+  /** @domName HTMLAppletElement.name */
   void set name(String value) native "HTMLAppletElement_name_Setter";
 
+
+  /** @domName HTMLAppletElement.object */
   String get object native "HTMLAppletElement_object_Getter";
 
+
+  /** @domName HTMLAppletElement.object */
   void set object(String value) native "HTMLAppletElement_object_Setter";
 
+
+  /** @domName HTMLAppletElement.vspace */
   String get vspace native "HTMLAppletElement_vspace_Getter";
 
+
+  /** @domName HTMLAppletElement.vspace */
   void set vspace(String value) native "HTMLAppletElement_vspace_Setter";
 
+
+  /** @domName HTMLAppletElement.width */
   String get width native "HTMLAppletElement_width_Getter";
 
+
+  /** @domName HTMLAppletElement.width */
   void set width(String value) native "HTMLAppletElement_width_Setter";
 
 }
@@ -564,100 +527,93 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLAreaElement
-abstract class AreaElement implements Element {
+class AreaElement extends _Element_Merged {
 
   factory AreaElement() => _Elements.createAreaElement();
+  AreaElement.internal(): super.internal();
+
 
   /** @domName HTMLAreaElement.alt */
-  String alt;
-
-  /** @domName HTMLAreaElement.coords */
-  String coords;
-
-  /** @domName HTMLAreaElement.hash */
-  String get hash;
-
-  /** @domName HTMLAreaElement.host */
-  String get host;
-
-  /** @domName HTMLAreaElement.hostname */
-  String get hostname;
-
-  /** @domName HTMLAreaElement.href */
-  String href;
-
-  /** @domName HTMLAreaElement.noHref */
-  bool noHref;
-
-  /** @domName HTMLAreaElement.pathname */
-  String get pathname;
-
-  /** @domName HTMLAreaElement.ping */
-  String ping;
-
-  /** @domName HTMLAreaElement.port */
-  String get port;
-
-  /** @domName HTMLAreaElement.protocol */
-  String get protocol;
-
-  /** @domName HTMLAreaElement.search */
-  String get search;
-
-  /** @domName HTMLAreaElement.shape */
-  String shape;
-
-  /** @domName HTMLAreaElement.target */
-  String target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AreaElementImpl extends _ElementImpl_Merged implements AreaElement {
-
   String get alt native "HTMLAreaElement_alt_Getter";
 
+
+  /** @domName HTMLAreaElement.alt */
   void set alt(String value) native "HTMLAreaElement_alt_Setter";
 
+
+  /** @domName HTMLAreaElement.coords */
   String get coords native "HTMLAreaElement_coords_Getter";
 
+
+  /** @domName HTMLAreaElement.coords */
   void set coords(String value) native "HTMLAreaElement_coords_Setter";
 
+
+  /** @domName HTMLAreaElement.hash */
   String get hash native "HTMLAreaElement_hash_Getter";
 
+
+  /** @domName HTMLAreaElement.host */
   String get host native "HTMLAreaElement_host_Getter";
 
+
+  /** @domName HTMLAreaElement.hostname */
   String get hostname native "HTMLAreaElement_hostname_Getter";
 
+
+  /** @domName HTMLAreaElement.href */
   String get href native "HTMLAreaElement_href_Getter";
 
+
+  /** @domName HTMLAreaElement.href */
   void set href(String value) native "HTMLAreaElement_href_Setter";
 
+
+  /** @domName HTMLAreaElement.noHref */
   bool get noHref native "HTMLAreaElement_noHref_Getter";
 
+
+  /** @domName HTMLAreaElement.noHref */
   void set noHref(bool value) native "HTMLAreaElement_noHref_Setter";
 
+
+  /** @domName HTMLAreaElement.pathname */
   String get pathname native "HTMLAreaElement_pathname_Getter";
 
+
+  /** @domName HTMLAreaElement.ping */
   String get ping native "HTMLAreaElement_ping_Getter";
 
+
+  /** @domName HTMLAreaElement.ping */
   void set ping(String value) native "HTMLAreaElement_ping_Setter";
 
+
+  /** @domName HTMLAreaElement.port */
   String get port native "HTMLAreaElement_port_Getter";
 
+
+  /** @domName HTMLAreaElement.protocol */
   String get protocol native "HTMLAreaElement_protocol_Getter";
 
+
+  /** @domName HTMLAreaElement.search */
   String get search native "HTMLAreaElement_search_Getter";
 
+
+  /** @domName HTMLAreaElement.shape */
   String get shape native "HTMLAreaElement_shape_Getter";
 
+
+  /** @domName HTMLAreaElement.shape */
   void set shape(String value) native "HTMLAreaElement_shape_Setter";
 
+
+  /** @domName HTMLAreaElement.target */
   String get target native "HTMLAreaElement_target_Getter";
 
+
+  /** @domName HTMLAreaElement.target */
   void set target(String value) native "HTMLAreaElement_target_Setter";
 
 }
@@ -668,24 +624,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ArrayBuffer
-abstract class ArrayBuffer {
+class ArrayBuffer extends NativeFieldWrapperClass1 {
 
   factory ArrayBuffer(int length) => _ArrayBufferFactoryProvider.createArrayBuffer(length);
+  ArrayBuffer.internal();
+
 
   /** @domName ArrayBuffer.byteLength */
-  int get byteLength;
-
-  /** @domName ArrayBuffer.slice */
-  ArrayBuffer slice(int begin, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ArrayBufferImpl extends NativeFieldWrapperClass1 implements ArrayBuffer {
-
   int get byteLength native "ArrayBuffer_byteLength_Getter";
 
   ArrayBuffer slice(/*long*/ begin, [/*long*/ end]) {
@@ -695,8 +640,12 @@
     return _slice_2(begin);
   }
 
+
+  /** @domName ArrayBuffer.slice_1 */
   ArrayBuffer _slice_1(begin, end) native "ArrayBuffer_slice_1_Callback";
 
+
+  /** @domName ArrayBuffer.slice_2 */
   ArrayBuffer _slice_2(begin) native "ArrayBuffer_slice_2_Callback";
 
 }
@@ -707,29 +656,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ArrayBufferView
-abstract class ArrayBufferView {
+class ArrayBufferView extends NativeFieldWrapperClass1 {
+  ArrayBufferView.internal();
+
 
   /** @domName ArrayBufferView.buffer */
-  ArrayBuffer get buffer;
-
-  /** @domName ArrayBufferView.byteLength */
-  int get byteLength;
-
-  /** @domName ArrayBufferView.byteOffset */
-  int get byteOffset;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ArrayBufferViewImpl extends NativeFieldWrapperClass1 implements ArrayBufferView {
-
   ArrayBuffer get buffer native "ArrayBufferView_buffer_Getter";
 
+
+  /** @domName ArrayBufferView.byteLength */
   int get byteLength native "ArrayBufferView_byteLength_Getter";
 
+
+  /** @domName ArrayBufferView.byteOffset */
   int get byteOffset native "ArrayBufferView_byteOffset_Getter";
 
 }
@@ -740,41 +679,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Attr
-abstract class Attr implements Node {
+class Attr extends Node {
+  Attr.internal(): super.internal();
+
 
   /** @domName Attr.isId */
-  bool get isId;
-
-  /** @domName Attr.name */
-  String get name;
-
-  /** @domName Attr.ownerElement */
-  Element get ownerElement;
-
-  /** @domName Attr.specified */
-  bool get specified;
-
-  /** @domName Attr.value */
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AttrImpl extends _NodeImpl implements Attr {
-
   bool get isId native "Attr_isId_Getter";
 
+
+  /** @domName Attr.name */
   String get name native "Attr_name_Getter";
 
+
+  /** @domName Attr.ownerElement */
   Element get ownerElement native "Attr_ownerElement_Getter";
 
+
+  /** @domName Attr.specified */
   bool get specified native "Attr_specified_Getter";
 
+
+  /** @domName Attr.value */
   String get value native "Attr_value_Getter";
 
+
+  /** @domName Attr.value */
   void set value(String value) native "Attr_value_Setter";
 
 }
@@ -785,25 +714,37 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioBuffer
-abstract class AudioBuffer {
+class AudioBuffer extends NativeFieldWrapperClass1 {
+  AudioBuffer.internal();
+
 
   /** @domName AudioBuffer.duration */
-  num get duration;
+  num get duration native "AudioBuffer_duration_Getter";
+
 
   /** @domName AudioBuffer.gain */
-  num gain;
+  num get gain native "AudioBuffer_gain_Getter";
+
+
+  /** @domName AudioBuffer.gain */
+  void set gain(num value) native "AudioBuffer_gain_Setter";
+
 
   /** @domName AudioBuffer.length */
-  int get length;
+  int get length native "AudioBuffer_length_Getter";
+
 
   /** @domName AudioBuffer.numberOfChannels */
-  int get numberOfChannels;
+  int get numberOfChannels native "AudioBuffer_numberOfChannels_Getter";
+
 
   /** @domName AudioBuffer.sampleRate */
-  num get sampleRate;
+  num get sampleRate native "AudioBuffer_sampleRate_Getter";
+
 
   /** @domName AudioBuffer.getChannelData */
-  Float32Array getChannelData(int channelIndex);
+  Float32Array getChannelData(int channelIndex) native "AudioBuffer_getChannelData_Callback";
+
 }
 // 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
@@ -819,31 +760,9 @@
 
 // WARNING: Do not edit - generated code.
 
-class _AudioBufferImpl extends NativeFieldWrapperClass1 implements AudioBuffer {
-
-  num get duration native "AudioBuffer_duration_Getter";
-
-  num get gain native "AudioBuffer_gain_Getter";
-
-  void set gain(num value) native "AudioBuffer_gain_Setter";
-
-  int get length native "AudioBuffer_length_Getter";
-
-  int get numberOfChannels native "AudioBuffer_numberOfChannels_Getter";
-
-  num get sampleRate native "AudioBuffer_sampleRate_Getter";
-
-  Float32Array getChannelData(int channelIndex) native "AudioBuffer_getChannelData_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName AudioBufferSourceNode
-abstract class AudioBufferSourceNode implements AudioSourceNode {
+class AudioBufferSourceNode extends AudioSourceNode {
+  AudioBufferSourceNode.internal(): super.internal();
 
   static const int FINISHED_STATE = 3;
 
@@ -853,61 +772,48 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
+
   /** @domName AudioBufferSourceNode.buffer */
-  AudioBuffer buffer;
-
-  /** @domName AudioBufferSourceNode.gain */
-  AudioGain get gain;
-
-  /** @domName AudioBufferSourceNode.loop */
-  bool loop;
-
-  /** @domName AudioBufferSourceNode.loopEnd */
-  num loopEnd;
-
-  /** @domName AudioBufferSourceNode.loopStart */
-  num loopStart;
-
-  /** @domName AudioBufferSourceNode.playbackRate */
-  AudioParam get playbackRate;
-
-  /** @domName AudioBufferSourceNode.playbackState */
-  int get playbackState;
-
-  /** @domName AudioBufferSourceNode.start */
-  void start(num when, [num grainOffset, num grainDuration]);
-
-  /** @domName AudioBufferSourceNode.stop */
-  void stop(num when);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioBufferSourceNodeImpl extends _AudioSourceNodeImpl implements AudioBufferSourceNode {
-
   AudioBuffer get buffer native "AudioBufferSourceNode_buffer_Getter";
 
+
+  /** @domName AudioBufferSourceNode.buffer */
   void set buffer(AudioBuffer value) native "AudioBufferSourceNode_buffer_Setter";
 
+
+  /** @domName AudioBufferSourceNode.gain */
   AudioGain get gain native "AudioBufferSourceNode_gain_Getter";
 
+
+  /** @domName AudioBufferSourceNode.loop */
   bool get loop native "AudioBufferSourceNode_loop_Getter";
 
+
+  /** @domName AudioBufferSourceNode.loop */
   void set loop(bool value) native "AudioBufferSourceNode_loop_Setter";
 
+
+  /** @domName AudioBufferSourceNode.loopEnd */
   num get loopEnd native "AudioBufferSourceNode_loopEnd_Getter";
 
+
+  /** @domName AudioBufferSourceNode.loopEnd */
   void set loopEnd(num value) native "AudioBufferSourceNode_loopEnd_Setter";
 
+
+  /** @domName AudioBufferSourceNode.loopStart */
   num get loopStart native "AudioBufferSourceNode_loopStart_Getter";
 
+
+  /** @domName AudioBufferSourceNode.loopStart */
   void set loopStart(num value) native "AudioBufferSourceNode_loopStart_Setter";
 
+
+  /** @domName AudioBufferSourceNode.playbackRate */
   AudioParam get playbackRate native "AudioBufferSourceNode_playbackRate_Getter";
 
+
+  /** @domName AudioBufferSourceNode.playbackState */
   int get playbackState native "AudioBufferSourceNode_playbackState_Getter";
 
   void start(/*double*/ when, [/*double*/ grainOffset, /*double*/ grainDuration]) {
@@ -922,10 +828,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName AudioBufferSourceNode.start_1 */
   void _start_1(when) native "AudioBufferSourceNode_start_1_Callback";
 
+
+  /** @domName AudioBufferSourceNode.start_2 */
   void _start_2(when, grainOffset, grainDuration) native "AudioBufferSourceNode_start_2_Callback";
 
+
+  /** @domName AudioBufferSourceNode.stop */
   void stop(num when) native "AudioBufferSourceNode_stop_Callback";
 
 }
@@ -933,118 +845,42 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-
-/// @domName AudioContext
-abstract class AudioContext implements EventTarget {
+class AudioContext extends EventTarget {
   factory AudioContext() => _AudioContextFactoryProvider.createAudioContext();
+  AudioContext.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  AudioContextEvents get on;
+  AudioContextEvents get on =>
+    new AudioContextEvents(this);
+
 
   /** @domName AudioContext.activeSourceCount */
-  int get activeSourceCount;
-
-  /** @domName AudioContext.currentTime */
-  num get currentTime;
-
-  /** @domName AudioContext.destination */
-  AudioDestinationNode get destination;
-
-  /** @domName AudioContext.listener */
-  AudioListener get listener;
-
-  /** @domName AudioContext.sampleRate */
-  num get sampleRate;
-
-  /** @domName AudioContext.createAnalyser */
-  AnalyserNode createAnalyser();
-
-  /** @domName AudioContext.createBiquadFilter */
-  BiquadFilterNode createBiquadFilter();
-
-  /** @domName AudioContext.createBuffer */
-  AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [num sampleRate]);
-
-  /** @domName AudioContext.createBufferSource */
-  AudioBufferSourceNode createBufferSource();
-
-  /** @domName AudioContext.createChannelMerger */
-  ChannelMergerNode createChannelMerger([int numberOfInputs]);
-
-  /** @domName AudioContext.createChannelSplitter */
-  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]);
-
-  /** @domName AudioContext.createConvolver */
-  ConvolverNode createConvolver();
-
-  /** @domName AudioContext.createDelay */
-  DelayNode createDelay([num maxDelayTime]);
-
-  /** @domName AudioContext.createDynamicsCompressor */
-  DynamicsCompressorNode createDynamicsCompressor();
-
-  /** @domName AudioContext.createGain */
-  GainNode createGain();
-
-  /** @domName AudioContext.createMediaElementSource */
-  MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement);
-
-  /** @domName AudioContext.createMediaStreamSource */
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
-
-  /** @domName AudioContext.createOscillator */
-  OscillatorNode createOscillator();
-
-  /** @domName AudioContext.createPanner */
-  PannerNode createPanner();
-
-  /** @domName AudioContext.createScriptProcessor */
-  ScriptProcessorNode createScriptProcessor(int bufferSize, [int numberOfInputChannels, int numberOfOutputChannels]);
-
-  /** @domName AudioContext.createWaveShaper */
-  WaveShaperNode createWaveShaper();
-
-  /** @domName AudioContext.createWaveTable */
-  WaveTable createWaveTable(Float32Array real, Float32Array imag);
-
-  /** @domName AudioContext.decodeAudioData */
-  void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]);
-
-  /** @domName AudioContext.startRendering */
-  void startRendering();
-}
-
-abstract class AudioContextEvents implements Events {
-
-  EventListenerList get complete;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioContextImpl extends _EventTargetImpl implements AudioContext {
-
-  _AudioContextEventsImpl get on =>
-    new _AudioContextEventsImpl(this);
-
   int get activeSourceCount native "AudioContext_activeSourceCount_Getter";
 
+
+  /** @domName AudioContext.currentTime */
   num get currentTime native "AudioContext_currentTime_Getter";
 
+
+  /** @domName AudioContext.destination */
   AudioDestinationNode get destination native "AudioContext_destination_Getter";
 
+
+  /** @domName AudioContext.listener */
   AudioListener get listener native "AudioContext_listener_Getter";
 
+
+  /** @domName AudioContext.sampleRate */
   num get sampleRate native "AudioContext_sampleRate_Getter";
 
+
+  /** @domName AudioContext.createAnalyser */
   AnalyserNode createAnalyser() native "AudioContext_createAnalyser_Callback";
 
+
+  /** @domName AudioContext.createBiquadFilter */
   BiquadFilterNode createBiquadFilter() native "AudioContext_createBiquadFilter_Callback";
 
   AudioBuffer createBuffer(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, [/*float*/ sampleRate]) {
@@ -1057,10 +893,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName AudioContext.createBuffer_1 */
   AudioBuffer _createBuffer_1(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames, sampleRate) native "AudioContext_createBuffer_1_Callback";
 
+
+  /** @domName AudioContext.createBuffer_2 */
   AudioBuffer _createBuffer_2(buffer_OR_numberOfChannels, mixToMono_OR_numberOfFrames) native "AudioContext_createBuffer_2_Callback";
 
+
+  /** @domName AudioContext.createBufferSource */
   AudioBufferSourceNode createBufferSource() native "AudioContext_createBufferSource_Callback";
 
   ChannelMergerNode createChannelMerger([/*unsigned long*/ numberOfInputs]) {
@@ -1070,8 +912,12 @@
     return _createChannelMerger_2();
   }
 
+
+  /** @domName AudioContext.createChannelMerger_1 */
   ChannelMergerNode _createChannelMerger_1(numberOfInputs) native "AudioContext_createChannelMerger_1_Callback";
 
+
+  /** @domName AudioContext.createChannelMerger_2 */
   ChannelMergerNode _createChannelMerger_2() native "AudioContext_createChannelMerger_2_Callback";
 
   ChannelSplitterNode createChannelSplitter([/*unsigned long*/ numberOfOutputs]) {
@@ -1081,10 +927,16 @@
     return _createChannelSplitter_2();
   }
 
+
+  /** @domName AudioContext.createChannelSplitter_1 */
   ChannelSplitterNode _createChannelSplitter_1(numberOfOutputs) native "AudioContext_createChannelSplitter_1_Callback";
 
+
+  /** @domName AudioContext.createChannelSplitter_2 */
   ChannelSplitterNode _createChannelSplitter_2() native "AudioContext_createChannelSplitter_2_Callback";
 
+
+  /** @domName AudioContext.createConvolver */
   ConvolverNode createConvolver() native "AudioContext_createConvolver_Callback";
 
   DelayNode createDelay([/*double*/ maxDelayTime]) {
@@ -1094,20 +946,36 @@
     return _createDelay_2();
   }
 
+
+  /** @domName AudioContext.createDelay_1 */
   DelayNode _createDelay_1(maxDelayTime) native "AudioContext_createDelay_1_Callback";
 
+
+  /** @domName AudioContext.createDelay_2 */
   DelayNode _createDelay_2() native "AudioContext_createDelay_2_Callback";
 
+
+  /** @domName AudioContext.createDynamicsCompressor */
   DynamicsCompressorNode createDynamicsCompressor() native "AudioContext_createDynamicsCompressor_Callback";
 
+
+  /** @domName AudioContext.createGain */
   GainNode createGain() native "AudioContext_createGain_Callback";
 
+
+  /** @domName AudioContext.createMediaElementSource */
   MediaElementAudioSourceNode createMediaElementSource(MediaElement mediaElement) native "AudioContext_createMediaElementSource_Callback";
 
+
+  /** @domName AudioContext.createMediaStreamSource */
   MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream) native "AudioContext_createMediaStreamSource_Callback";
 
+
+  /** @domName AudioContext.createOscillator */
   OscillatorNode createOscillator() native "AudioContext_createOscillator_Callback";
 
+
+  /** @domName AudioContext.createPanner */
   PannerNode createPanner() native "AudioContext_createPanner_Callback";
 
   ScriptProcessorNode createScriptProcessor(/*unsigned long*/ bufferSize, [/*unsigned long*/ numberOfInputChannels, /*unsigned long*/ numberOfOutputChannels]) {
@@ -1120,24 +988,38 @@
     return _createScriptProcessor_3(bufferSize);
   }
 
+
+  /** @domName AudioContext.createScriptProcessor_1 */
   ScriptProcessorNode _createScriptProcessor_1(bufferSize, numberOfInputChannels, numberOfOutputChannels) native "AudioContext_createScriptProcessor_1_Callback";
 
+
+  /** @domName AudioContext.createScriptProcessor_2 */
   ScriptProcessorNode _createScriptProcessor_2(bufferSize, numberOfInputChannels) native "AudioContext_createScriptProcessor_2_Callback";
 
+
+  /** @domName AudioContext.createScriptProcessor_3 */
   ScriptProcessorNode _createScriptProcessor_3(bufferSize) native "AudioContext_createScriptProcessor_3_Callback";
 
+
+  /** @domName AudioContext.createWaveShaper */
   WaveShaperNode createWaveShaper() native "AudioContext_createWaveShaper_Callback";
 
+
+  /** @domName AudioContext.createWaveTable */
   WaveTable createWaveTable(Float32Array real, Float32Array imag) native "AudioContext_createWaveTable_Callback";
 
+
+  /** @domName AudioContext.decodeAudioData */
   void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, [AudioBufferCallback errorCallback]) native "AudioContext_decodeAudioData_Callback";
 
+
+  /** @domName AudioContext.startRendering */
   void startRendering() native "AudioContext_startRendering_Callback";
 
 }
 
-class _AudioContextEventsImpl extends _EventsImpl implements AudioContextEvents {
-  _AudioContextEventsImpl(_ptr) : super(_ptr);
+class AudioContextEvents extends Events {
+  AudioContextEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get complete => this['complete'];
 }
@@ -1148,19 +1030,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioDestinationNode
-abstract class AudioDestinationNode implements AudioNode {
+class AudioDestinationNode extends AudioNode {
+  AudioDestinationNode.internal(): super.internal();
+
 
   /** @domName AudioDestinationNode.numberOfChannels */
-  int get numberOfChannels;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioDestinationNodeImpl extends _AudioNodeImpl implements AudioDestinationNode {
-
   int get numberOfChannels native "AudioDestinationNode_numberOfChannels_Getter";
 
 }
@@ -1171,7 +1045,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLAudioElement
-abstract class AudioElement implements MediaElement {
+class AudioElement extends MediaElement {
 
   factory AudioElement([String src]) {
     if (!?src) {
@@ -1179,14 +1053,7 @@
     }
     return _AudioElementFactoryProvider.createAudioElement(src);
   }
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioElementImpl extends _MediaElementImpl implements AudioElement {
+  AudioElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1196,15 +1063,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioGain
-abstract class AudioGain implements AudioParam {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioGainImpl extends _AudioParamImpl implements AudioGain {
+class AudioGain extends AudioParam {
+  AudioGain.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1214,43 +1074,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioListener
-abstract class AudioListener {
+class AudioListener extends NativeFieldWrapperClass1 {
+  AudioListener.internal();
+
 
   /** @domName AudioListener.dopplerFactor */
-  num dopplerFactor;
-
-  /** @domName AudioListener.speedOfSound */
-  num speedOfSound;
-
-  /** @domName AudioListener.setOrientation */
-  void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp);
-
-  /** @domName AudioListener.setPosition */
-  void setPosition(num x, num y, num z);
-
-  /** @domName AudioListener.setVelocity */
-  void setVelocity(num x, num y, num z);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioListenerImpl extends NativeFieldWrapperClass1 implements AudioListener {
-
   num get dopplerFactor native "AudioListener_dopplerFactor_Getter";
 
+
+  /** @domName AudioListener.dopplerFactor */
   void set dopplerFactor(num value) native "AudioListener_dopplerFactor_Setter";
 
+
+  /** @domName AudioListener.speedOfSound */
   num get speedOfSound native "AudioListener_speedOfSound_Getter";
 
+
+  /** @domName AudioListener.speedOfSound */
   void set speedOfSound(num value) native "AudioListener_speedOfSound_Setter";
 
+
+  /** @domName AudioListener.setOrientation */
   void setOrientation(num x, num y, num z, num xUp, num yUp, num zUp) native "AudioListener_setOrientation_Callback";
 
+
+  /** @domName AudioListener.setPosition */
   void setPosition(num x, num y, num z) native "AudioListener_setPosition_Callback";
 
+
+  /** @domName AudioListener.setVelocity */
   void setVelocity(num x, num y, num z) native "AudioListener_setVelocity_Callback";
 
 }
@@ -1261,35 +1113,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioNode
-abstract class AudioNode {
+class AudioNode extends NativeFieldWrapperClass1 {
+  AudioNode.internal();
+
 
   /** @domName AudioNode.context */
-  AudioContext get context;
-
-  /** @domName AudioNode.numberOfInputs */
-  int get numberOfInputs;
-
-  /** @domName AudioNode.numberOfOutputs */
-  int get numberOfOutputs;
-
-  /** @domName AudioNode.connect */
-  void connect(destination, int output, [int input]);
-
-  /** @domName AudioNode.disconnect */
-  void disconnect(int output);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioNodeImpl extends NativeFieldWrapperClass1 implements AudioNode {
-
   AudioContext get context native "AudioNode_context_Getter";
 
+
+  /** @domName AudioNode.numberOfInputs */
   int get numberOfInputs native "AudioNode_numberOfInputs_Getter";
 
+
+  /** @domName AudioNode.numberOfOutputs */
   int get numberOfOutputs native "AudioNode_numberOfOutputs_Getter";
 
   void connect(destination, /*unsigned long*/ output, [/*unsigned long*/ input]) {
@@ -1304,10 +1140,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName AudioNode.connect_1 */
   void _connect_1(destination, output, input) native "AudioNode_connect_1_Callback";
 
+
+  /** @domName AudioNode.connect_2 */
   void _connect_2(destination, output) native "AudioNode_connect_2_Callback";
 
+
+  /** @domName AudioNode.disconnect */
   void disconnect(int output) native "AudioNode_disconnect_Callback";
 
 }
@@ -1318,76 +1160,59 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioParam
-abstract class AudioParam {
+class AudioParam extends NativeFieldWrapperClass1 {
+  AudioParam.internal();
+
 
   /** @domName AudioParam.defaultValue */
-  num get defaultValue;
-
-  /** @domName AudioParam.maxValue */
-  num get maxValue;
-
-  /** @domName AudioParam.minValue */
-  num get minValue;
-
-  /** @domName AudioParam.name */
-  String get name;
-
-  /** @domName AudioParam.units */
-  int get units;
-
-  /** @domName AudioParam.value */
-  num value;
-
-  /** @domName AudioParam.cancelScheduledValues */
-  void cancelScheduledValues(num startTime);
-
-  /** @domName AudioParam.exponentialRampToValueAtTime */
-  void exponentialRampToValueAtTime(num value, num time);
-
-  /** @domName AudioParam.linearRampToValueAtTime */
-  void linearRampToValueAtTime(num value, num time);
-
-  /** @domName AudioParam.setTargetAtTime */
-  void setTargetAtTime(num target, num time, num timeConstant);
-
-  /** @domName AudioParam.setValueAtTime */
-  void setValueAtTime(num value, num time);
-
-  /** @domName AudioParam.setValueCurveAtTime */
-  void setValueCurveAtTime(Float32Array values, num time, num duration);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioParamImpl extends NativeFieldWrapperClass1 implements AudioParam {
-
   num get defaultValue native "AudioParam_defaultValue_Getter";
 
+
+  /** @domName AudioParam.maxValue */
   num get maxValue native "AudioParam_maxValue_Getter";
 
+
+  /** @domName AudioParam.minValue */
   num get minValue native "AudioParam_minValue_Getter";
 
+
+  /** @domName AudioParam.name */
   String get name native "AudioParam_name_Getter";
 
+
+  /** @domName AudioParam.units */
   int get units native "AudioParam_units_Getter";
 
+
+  /** @domName AudioParam.value */
   num get value native "AudioParam_value_Getter";
 
+
+  /** @domName AudioParam.value */
   void set value(num value) native "AudioParam_value_Setter";
 
+
+  /** @domName AudioParam.cancelScheduledValues */
   void cancelScheduledValues(num startTime) native "AudioParam_cancelScheduledValues_Callback";
 
+
+  /** @domName AudioParam.exponentialRampToValueAtTime */
   void exponentialRampToValueAtTime(num value, num time) native "AudioParam_exponentialRampToValueAtTime_Callback";
 
+
+  /** @domName AudioParam.linearRampToValueAtTime */
   void linearRampToValueAtTime(num value, num time) native "AudioParam_linearRampToValueAtTime_Callback";
 
+
+  /** @domName AudioParam.setTargetAtTime */
   void setTargetAtTime(num target, num time, num timeConstant) native "AudioParam_setTargetAtTime_Callback";
 
+
+  /** @domName AudioParam.setValueAtTime */
   void setValueAtTime(num value, num time) native "AudioParam_setValueAtTime_Callback";
 
+
+  /** @domName AudioParam.setValueCurveAtTime */
   void setValueCurveAtTime(Float32Array values, num time, num duration) native "AudioParam_setValueCurveAtTime_Callback";
 
 }
@@ -1398,24 +1223,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioProcessingEvent
-abstract class AudioProcessingEvent implements Event {
+class AudioProcessingEvent extends Event {
+  AudioProcessingEvent.internal(): super.internal();
+
 
   /** @domName AudioProcessingEvent.inputBuffer */
-  AudioBuffer get inputBuffer;
-
-  /** @domName AudioProcessingEvent.outputBuffer */
-  AudioBuffer get outputBuffer;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioProcessingEventImpl extends _EventImpl implements AudioProcessingEvent {
-
   AudioBuffer get inputBuffer native "AudioProcessingEvent_inputBuffer_Getter";
 
+
+  /** @domName AudioProcessingEvent.outputBuffer */
   AudioBuffer get outputBuffer native "AudioProcessingEvent_outputBuffer_Getter";
 
 }
@@ -1426,15 +1242,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName AudioSourceNode
-abstract class AudioSourceNode implements AudioNode {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _AudioSourceNodeImpl extends _AudioNodeImpl implements AudioSourceNode {
+class AudioSourceNode extends AudioNode {
+  AudioSourceNode.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1444,23 +1253,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLBRElement
-abstract class BRElement implements Element {
+class BRElement extends _Element_Merged {
 
   factory BRElement() => _Elements.createBRElement();
+  BRElement.internal(): super.internal();
+
 
   /** @domName HTMLBRElement.clear */
-  String clear;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BRElementImpl extends _ElementImpl_Merged implements BRElement {
-
   String get clear native "HTMLBRElement_clear_Getter";
 
+
+  /** @domName HTMLBRElement.clear */
   void set clear(String value) native "HTMLBRElement_clear_Setter";
 
 }
@@ -1471,19 +1274,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName BarInfo
-abstract class BarInfo {
+class BarInfo extends NativeFieldWrapperClass1 {
+  BarInfo.internal();
+
 
   /** @domName BarInfo.visible */
-  bool get visible;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BarInfoImpl extends NativeFieldWrapperClass1 implements BarInfo {
-
   bool get visible native "BarInfo_visible_Getter";
 
 }
@@ -1494,30 +1289,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLBaseElement
-abstract class BaseElement implements Element {
+class BaseElement extends _Element_Merged {
 
   factory BaseElement() => _Elements.createBaseElement();
+  BaseElement.internal(): super.internal();
+
 
   /** @domName HTMLBaseElement.href */
-  String href;
-
-  /** @domName HTMLBaseElement.target */
-  String target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BaseElementImpl extends _ElementImpl_Merged implements BaseElement {
-
   String get href native "HTMLBaseElement_href_Getter";
 
+
+  /** @domName HTMLBaseElement.href */
   void set href(String value) native "HTMLBaseElement_href_Setter";
 
+
+  /** @domName HTMLBaseElement.target */
   String get target native "HTMLBaseElement_target_Getter";
 
+
+  /** @domName HTMLBaseElement.target */
   void set target(String value) native "HTMLBaseElement_target_Setter";
 
 }
@@ -1528,35 +1318,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLBaseFontElement
-abstract class BaseFontElement implements Element {
+class BaseFontElement extends _Element_Merged {
+  BaseFontElement.internal(): super.internal();
+
 
   /** @domName HTMLBaseFontElement.color */
-  String color;
-
-  /** @domName HTMLBaseFontElement.face */
-  String face;
-
-  /** @domName HTMLBaseFontElement.size */
-  int size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BaseFontElementImpl extends _ElementImpl_Merged implements BaseFontElement {
-
   String get color native "HTMLBaseFontElement_color_Getter";
 
+
+  /** @domName HTMLBaseFontElement.color */
   void set color(String value) native "HTMLBaseFontElement_color_Setter";
 
+
+  /** @domName HTMLBaseFontElement.face */
   String get face native "HTMLBaseFontElement_face_Getter";
 
+
+  /** @domName HTMLBaseFontElement.face */
   void set face(String value) native "HTMLBaseFontElement_face_Setter";
 
+
+  /** @domName HTMLBaseFontElement.size */
   int get size native "HTMLBaseFontElement_size_Getter";
 
+
+  /** @domName HTMLBaseFontElement.size */
   void set size(int value) native "HTMLBaseFontElement_size_Setter";
 
 }
@@ -1567,74 +1353,47 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName BatteryManager
-abstract class BatteryManager implements EventTarget {
+class BatteryManager extends EventTarget {
+  BatteryManager.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  BatteryManagerEvents get on;
+  BatteryManagerEvents get on =>
+    new BatteryManagerEvents(this);
+
 
   /** @domName BatteryManager.charging */
-  bool get charging;
-
-  /** @domName BatteryManager.chargingTime */
-  num get chargingTime;
-
-  /** @domName BatteryManager.dischargingTime */
-  num get dischargingTime;
-
-  /** @domName BatteryManager.level */
-  num get level;
-
-  /** @domName BatteryManager.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName BatteryManager.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName BatteryManager.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class BatteryManagerEvents implements Events {
-
-  EventListenerList get chargingChange;
-
-  EventListenerList get chargingTimeChange;
-
-  EventListenerList get dischargingTimeChange;
-
-  EventListenerList get levelChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BatteryManagerImpl extends _EventTargetImpl implements BatteryManager {
-
-  _BatteryManagerEventsImpl get on =>
-    new _BatteryManagerEventsImpl(this);
-
   bool get charging native "BatteryManager_charging_Getter";
 
+
+  /** @domName BatteryManager.chargingTime */
   num get chargingTime native "BatteryManager_chargingTime_Getter";
 
+
+  /** @domName BatteryManager.dischargingTime */
   num get dischargingTime native "BatteryManager_dischargingTime_Getter";
 
+
+  /** @domName BatteryManager.level */
   num get level native "BatteryManager_level_Getter";
 
+
+  /** @domName BatteryManager.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "BatteryManager_addEventListener_Callback";
 
+
+  /** @domName BatteryManager.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "BatteryManager_dispatchEvent_Callback";
 
+
+  /** @domName BatteryManager.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "BatteryManager_removeEventListener_Callback";
 
 }
 
-class _BatteryManagerEventsImpl extends _EventsImpl implements BatteryManagerEvents {
-  _BatteryManagerEventsImpl(_ptr) : super(_ptr);
+class BatteryManagerEvents extends Events {
+  BatteryManagerEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get chargingChange => this['chargingchange'];
 
@@ -1651,19 +1410,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName BeforeLoadEvent
-abstract class BeforeLoadEvent implements Event {
+class BeforeLoadEvent extends Event {
+  BeforeLoadEvent.internal(): super.internal();
+
 
   /** @domName BeforeLoadEvent.url */
-  String get url;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BeforeLoadEventImpl extends _EventImpl implements BeforeLoadEvent {
-
   String get url native "BeforeLoadEvent_url_Getter";
 
 }
@@ -1674,7 +1425,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName BiquadFilterNode
-abstract class BiquadFilterNode implements AudioNode {
+class BiquadFilterNode extends AudioNode {
+  BiquadFilterNode.internal(): super.internal();
 
   static const int ALLPASS = 7;
 
@@ -1692,39 +1444,28 @@
 
   static const int PEAKING = 5;
 
+
   /** @domName BiquadFilterNode.Q */
-  AudioParam get Q;
-
-  /** @domName BiquadFilterNode.frequency */
-  AudioParam get frequency;
-
-  /** @domName BiquadFilterNode.gain */
-  AudioParam get gain;
-
-  /** @domName BiquadFilterNode.type */
-  int type;
-
-  /** @domName BiquadFilterNode.getFrequencyResponse */
-  void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BiquadFilterNodeImpl extends _AudioNodeImpl implements BiquadFilterNode {
-
   AudioParam get Q native "BiquadFilterNode_Q_Getter";
 
+
+  /** @domName BiquadFilterNode.frequency */
   AudioParam get frequency native "BiquadFilterNode_frequency_Getter";
 
+
+  /** @domName BiquadFilterNode.gain */
   AudioParam get gain native "BiquadFilterNode_gain_Getter";
 
+
+  /** @domName BiquadFilterNode.type */
   int get type native "BiquadFilterNode_type_Getter";
 
+
+  /** @domName BiquadFilterNode.type */
   void set type(int value) native "BiquadFilterNode_type_Setter";
 
+
+  /** @domName BiquadFilterNode.getFrequencyResponse */
   void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse) native "BiquadFilterNode_getFrequencyResponse_Callback";
 
 }
@@ -1735,7 +1476,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Blob
-abstract class Blob {
+class Blob extends NativeFieldWrapperClass1 {
 
   factory Blob(List blobParts, [String type, String endings]) {
     if (!?type) {
@@ -1746,26 +1487,14 @@
     }
     return _BlobFactoryProvider.createBlob(blobParts, type, endings);
   }
+  Blob.internal();
+
 
   /** @domName Blob.size */
-  int get size;
-
-  /** @domName Blob.type */
-  String get type;
-
-  /** @domName Blob.slice */
-  Blob slice([int start, int end, String contentType]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BlobImpl extends NativeFieldWrapperClass1 implements Blob {
-
   int get size native "Blob_size_Getter";
 
+
+  /** @domName Blob.type */
   String get type native "Blob_type_Getter";
 
   Blob slice([/*long long*/ start, /*long long*/ end, /*DOMString*/ contentType]) {
@@ -1781,12 +1510,20 @@
     return _slice_4();
   }
 
+
+  /** @domName Blob.slice_1 */
   Blob _slice_1(start, end, contentType) native "Blob_slice_1_Callback";
 
+
+  /** @domName Blob.slice_2 */
   Blob _slice_2(start, end) native "Blob_slice_2_Callback";
 
+
+  /** @domName Blob.slice_3 */
   Blob _slice_3(start) native "Blob_slice_3_Callback";
 
+
+  /** @domName Blob.slice_4 */
   Blob _slice_4() native "Blob_slice_4_Callback";
 
 }
@@ -1797,94 +1534,61 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLBodyElement
-abstract class BodyElement implements Element {
+class BodyElement extends _Element_Merged {
 
   factory BodyElement() => _Elements.createBodyElement();
+  BodyElement.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  BodyElementEvents get on;
+  BodyElementEvents get on =>
+    new BodyElementEvents(this);
+
 
   /** @domName HTMLBodyElement.aLink */
-  String aLink;
-
-  /** @domName HTMLBodyElement.background */
-  String background;
-
-  /** @domName HTMLBodyElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLBodyElement.link */
-  String link;
-
-  /** @domName HTMLBodyElement.vLink */
-  String vLink;
-}
-
-abstract class BodyElementEvents implements ElementEvents {
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get load;
-
-  EventListenerList get message;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get popState;
-
-  EventListenerList get resize;
-
-  EventListenerList get storage;
-
-  EventListenerList get unload;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _BodyElementImpl extends _ElementImpl_Merged implements BodyElement {
-
-  _BodyElementEventsImpl get on =>
-    new _BodyElementEventsImpl(this);
-
   String get aLink native "HTMLBodyElement_aLink_Getter";
 
+
+  /** @domName HTMLBodyElement.aLink */
   void set aLink(String value) native "HTMLBodyElement_aLink_Setter";
 
+
+  /** @domName HTMLBodyElement.background */
   String get background native "HTMLBodyElement_background_Getter";
 
+
+  /** @domName HTMLBodyElement.background */
   void set background(String value) native "HTMLBodyElement_background_Setter";
 
+
+  /** @domName HTMLBodyElement.bgColor */
   String get bgColor native "HTMLBodyElement_bgColor_Getter";
 
+
+  /** @domName HTMLBodyElement.bgColor */
   void set bgColor(String value) native "HTMLBodyElement_bgColor_Setter";
 
+
+  /** @domName HTMLBodyElement.link */
   String get link native "HTMLBodyElement_link_Getter";
 
+
+  /** @domName HTMLBodyElement.link */
   void set link(String value) native "HTMLBodyElement_link_Setter";
 
+
+  /** @domName HTMLBodyElement.vLink */
   String get vLink native "HTMLBodyElement_vLink_Getter";
 
+
+  /** @domName HTMLBodyElement.vLink */
   void set vLink(String value) native "HTMLBodyElement_vLink_Setter";
 
 }
 
-class _BodyElementEventsImpl extends _ElementEventsImpl implements BodyElementEvents {
-  _BodyElementEventsImpl(_ptr) : super(_ptr);
+class BodyElementEvents extends ElementEvents {
+  BodyElementEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get beforeUnload => this['beforeunload'];
 
@@ -1919,121 +1623,117 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLButtonElement
-abstract class ButtonElement implements Element {
+class ButtonElement extends _Element_Merged {
 
   factory ButtonElement() => _Elements.createButtonElement();
+  ButtonElement.internal(): super.internal();
+
 
   /** @domName HTMLButtonElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLButtonElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLButtonElement.form */
-  FormElement get form;
-
-  /** @domName HTMLButtonElement.formAction */
-  String formAction;
-
-  /** @domName HTMLButtonElement.formEnctype */
-  String formEnctype;
-
-  /** @domName HTMLButtonElement.formMethod */
-  String formMethod;
-
-  /** @domName HTMLButtonElement.formNoValidate */
-  bool formNoValidate;
-
-  /** @domName HTMLButtonElement.formTarget */
-  String formTarget;
-
-  /** @domName HTMLButtonElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLButtonElement.name */
-  String name;
-
-  /** @domName HTMLButtonElement.type */
-  String type;
-
-  /** @domName HTMLButtonElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLButtonElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLButtonElement.value */
-  String value;
-
-  /** @domName HTMLButtonElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLButtonElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLButtonElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ButtonElementImpl extends _ElementImpl_Merged implements ButtonElement {
-
   bool get autofocus native "HTMLButtonElement_autofocus_Getter";
 
+
+  /** @domName HTMLButtonElement.autofocus */
   void set autofocus(bool value) native "HTMLButtonElement_autofocus_Setter";
 
+
+  /** @domName HTMLButtonElement.disabled */
   bool get disabled native "HTMLButtonElement_disabled_Getter";
 
+
+  /** @domName HTMLButtonElement.disabled */
   void set disabled(bool value) native "HTMLButtonElement_disabled_Setter";
 
+
+  /** @domName HTMLButtonElement.form */
   FormElement get form native "HTMLButtonElement_form_Getter";
 
+
+  /** @domName HTMLButtonElement.formAction */
   String get formAction native "HTMLButtonElement_formAction_Getter";
 
+
+  /** @domName HTMLButtonElement.formAction */
   void set formAction(String value) native "HTMLButtonElement_formAction_Setter";
 
+
+  /** @domName HTMLButtonElement.formEnctype */
   String get formEnctype native "HTMLButtonElement_formEnctype_Getter";
 
+
+  /** @domName HTMLButtonElement.formEnctype */
   void set formEnctype(String value) native "HTMLButtonElement_formEnctype_Setter";
 
+
+  /** @domName HTMLButtonElement.formMethod */
   String get formMethod native "HTMLButtonElement_formMethod_Getter";
 
+
+  /** @domName HTMLButtonElement.formMethod */
   void set formMethod(String value) native "HTMLButtonElement_formMethod_Setter";
 
+
+  /** @domName HTMLButtonElement.formNoValidate */
   bool get formNoValidate native "HTMLButtonElement_formNoValidate_Getter";
 
+
+  /** @domName HTMLButtonElement.formNoValidate */
   void set formNoValidate(bool value) native "HTMLButtonElement_formNoValidate_Setter";
 
+
+  /** @domName HTMLButtonElement.formTarget */
   String get formTarget native "HTMLButtonElement_formTarget_Getter";
 
+
+  /** @domName HTMLButtonElement.formTarget */
   void set formTarget(String value) native "HTMLButtonElement_formTarget_Setter";
 
+
+  /** @domName HTMLButtonElement.labels */
   List<Node> get labels native "HTMLButtonElement_labels_Getter";
 
+
+  /** @domName HTMLButtonElement.name */
   String get name native "HTMLButtonElement_name_Getter";
 
+
+  /** @domName HTMLButtonElement.name */
   void set name(String value) native "HTMLButtonElement_name_Setter";
 
+
+  /** @domName HTMLButtonElement.type */
   String get type native "HTMLButtonElement_type_Getter";
 
+
+  /** @domName HTMLButtonElement.type */
   void set type(String value) native "HTMLButtonElement_type_Setter";
 
+
+  /** @domName HTMLButtonElement.validationMessage */
   String get validationMessage native "HTMLButtonElement_validationMessage_Getter";
 
+
+  /** @domName HTMLButtonElement.validity */
   ValidityState get validity native "HTMLButtonElement_validity_Getter";
 
+
+  /** @domName HTMLButtonElement.value */
   String get value native "HTMLButtonElement_value_Getter";
 
+
+  /** @domName HTMLButtonElement.value */
   void set value(String value) native "HTMLButtonElement_value_Setter";
 
+
+  /** @domName HTMLButtonElement.willValidate */
   bool get willValidate native "HTMLButtonElement_willValidate_Getter";
 
+
+  /** @domName HTMLButtonElement.checkValidity */
   bool checkValidity() native "HTMLButtonElement_checkValidity_Callback";
 
+
+  /** @domName HTMLButtonElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLButtonElement_setCustomValidity_Callback";
 
 }
@@ -2044,15 +1744,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CDATASection
-abstract class CDATASection implements Text {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CDATASectionImpl extends _TextImpl implements CDATASection {
+class CDATASection extends Text {
+  CDATASection.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2062,21 +1755,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSCharsetRule
-abstract class CSSCharsetRule implements CSSRule {
+class CSSCharsetRule extends CSSRule {
+  CSSCharsetRule.internal(): super.internal();
+
 
   /** @domName CSSCharsetRule.encoding */
-  String encoding;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSCharsetRuleImpl extends _CSSRuleImpl implements CSSCharsetRule {
-
   String get encoding native "CSSCharsetRule_encoding_Getter";
 
+
+  /** @domName CSSCharsetRule.encoding */
   void set encoding(String value) native "CSSCharsetRule_encoding_Setter";
 
 }
@@ -2087,19 +1774,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSFontFaceRule
-abstract class CSSFontFaceRule implements CSSRule {
+class CSSFontFaceRule extends CSSRule {
+  CSSFontFaceRule.internal(): super.internal();
+
 
   /** @domName CSSFontFaceRule.style */
-  CSSStyleDeclaration get style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSFontFaceRuleImpl extends _CSSRuleImpl implements CSSFontFaceRule {
-
   CSSStyleDeclaration get style native "CSSFontFaceRule_style_Getter";
 
 }
@@ -2110,29 +1789,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSImportRule
-abstract class CSSImportRule implements CSSRule {
+class CSSImportRule extends CSSRule {
+  CSSImportRule.internal(): super.internal();
+
 
   /** @domName CSSImportRule.href */
-  String get href;
-
-  /** @domName CSSImportRule.media */
-  MediaList get media;
-
-  /** @domName CSSImportRule.styleSheet */
-  CSSStyleSheet get styleSheet;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSImportRuleImpl extends _CSSRuleImpl implements CSSImportRule {
-
   String get href native "CSSImportRule_href_Getter";
 
+
+  /** @domName CSSImportRule.media */
   MediaList get media native "CSSImportRule_media_Getter";
 
+
+  /** @domName CSSImportRule.styleSheet */
   CSSStyleSheet get styleSheet native "CSSImportRule_styleSheet_Getter";
 
 }
@@ -2143,26 +1812,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitCSSKeyframeRule
-abstract class CSSKeyframeRule implements CSSRule {
+class CSSKeyframeRule extends CSSRule {
+  CSSKeyframeRule.internal(): super.internal();
+
 
   /** @domName WebKitCSSKeyframeRule.keyText */
-  String keyText;
-
-  /** @domName WebKitCSSKeyframeRule.style */
-  CSSStyleDeclaration get style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSKeyframeRuleImpl extends _CSSRuleImpl implements CSSKeyframeRule {
-
   String get keyText native "WebKitCSSKeyframeRule_keyText_Getter";
 
+
+  /** @domName WebKitCSSKeyframeRule.keyText */
   void set keyText(String value) native "WebKitCSSKeyframeRule_keyText_Setter";
 
+
+  /** @domName WebKitCSSKeyframeRule.style */
   CSSStyleDeclaration get style native "WebKitCSSKeyframeRule_style_Getter";
 
 }
@@ -2173,41 +1835,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitCSSKeyframesRule
-abstract class CSSKeyframesRule implements CSSRule {
+class CSSKeyframesRule extends CSSRule {
+  CSSKeyframesRule.internal(): super.internal();
+
 
   /** @domName WebKitCSSKeyframesRule.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName WebKitCSSKeyframesRule.name */
-  String name;
-
-  /** @domName WebKitCSSKeyframesRule.deleteRule */
-  void deleteRule(String key);
-
-  /** @domName WebKitCSSKeyframesRule.findRule */
-  CSSKeyframeRule findRule(String key);
-
-  /** @domName WebKitCSSKeyframesRule.insertRule */
-  void insertRule(String rule);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSKeyframesRuleImpl extends _CSSRuleImpl implements CSSKeyframesRule {
-
   List<CSSRule> get cssRules native "WebKitCSSKeyframesRule_cssRules_Getter";
 
+
+  /** @domName WebKitCSSKeyframesRule.name */
   String get name native "WebKitCSSKeyframesRule_name_Getter";
 
+
+  /** @domName WebKitCSSKeyframesRule.name */
   void set name(String value) native "WebKitCSSKeyframesRule_name_Setter";
 
+
+  /** @domName WebKitCSSKeyframesRule.deleteRule */
   void deleteRule(String key) native "WebKitCSSKeyframesRule_deleteRule_Callback";
 
+
+  /** @domName WebKitCSSKeyframesRule.findRule */
   CSSKeyframeRule findRule(String key) native "WebKitCSSKeyframesRule_findRule_Callback";
 
+
+  /** @domName WebKitCSSKeyframesRule.insertRule */
   void insertRule(String rule) native "WebKitCSSKeyframesRule_insertRule_Callback";
 
 }
@@ -2218,7 +1870,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitCSSMatrix
-abstract class CSSMatrix {
+class CSSMatrix extends NativeFieldWrapperClass1 {
 
   factory CSSMatrix([String cssValue]) {
     if (!?cssValue) {
@@ -2226,217 +1878,222 @@
     }
     return _CSSMatrixFactoryProvider.createCSSMatrix(cssValue);
   }
+  CSSMatrix.internal();
+
 
   /** @domName WebKitCSSMatrix.a */
-  num a;
-
-  /** @domName WebKitCSSMatrix.b */
-  num b;
-
-  /** @domName WebKitCSSMatrix.c */
-  num c;
-
-  /** @domName WebKitCSSMatrix.d */
-  num d;
-
-  /** @domName WebKitCSSMatrix.e */
-  num e;
-
-  /** @domName WebKitCSSMatrix.f */
-  num f;
-
-  /** @domName WebKitCSSMatrix.m11 */
-  num m11;
-
-  /** @domName WebKitCSSMatrix.m12 */
-  num m12;
-
-  /** @domName WebKitCSSMatrix.m13 */
-  num m13;
-
-  /** @domName WebKitCSSMatrix.m14 */
-  num m14;
-
-  /** @domName WebKitCSSMatrix.m21 */
-  num m21;
-
-  /** @domName WebKitCSSMatrix.m22 */
-  num m22;
-
-  /** @domName WebKitCSSMatrix.m23 */
-  num m23;
-
-  /** @domName WebKitCSSMatrix.m24 */
-  num m24;
-
-  /** @domName WebKitCSSMatrix.m31 */
-  num m31;
-
-  /** @domName WebKitCSSMatrix.m32 */
-  num m32;
-
-  /** @domName WebKitCSSMatrix.m33 */
-  num m33;
-
-  /** @domName WebKitCSSMatrix.m34 */
-  num m34;
-
-  /** @domName WebKitCSSMatrix.m41 */
-  num m41;
-
-  /** @domName WebKitCSSMatrix.m42 */
-  num m42;
-
-  /** @domName WebKitCSSMatrix.m43 */
-  num m43;
-
-  /** @domName WebKitCSSMatrix.m44 */
-  num m44;
-
-  /** @domName WebKitCSSMatrix.inverse */
-  CSSMatrix inverse();
-
-  /** @domName WebKitCSSMatrix.multiply */
-  CSSMatrix multiply(CSSMatrix secondMatrix);
-
-  /** @domName WebKitCSSMatrix.rotate */
-  CSSMatrix rotate(num rotX, num rotY, num rotZ);
-
-  /** @domName WebKitCSSMatrix.rotateAxisAngle */
-  CSSMatrix rotateAxisAngle(num x, num y, num z, num angle);
-
-  /** @domName WebKitCSSMatrix.scale */
-  CSSMatrix scale(num scaleX, num scaleY, num scaleZ);
-
-  /** @domName WebKitCSSMatrix.setMatrixValue */
-  void setMatrixValue(String string);
-
-  /** @domName WebKitCSSMatrix.skewX */
-  CSSMatrix skewX(num angle);
-
-  /** @domName WebKitCSSMatrix.skewY */
-  CSSMatrix skewY(num angle);
-
-  /** @domName WebKitCSSMatrix.toString */
-  String toString();
-
-  /** @domName WebKitCSSMatrix.translate */
-  CSSMatrix translate(num x, num y, num z);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSMatrixImpl extends NativeFieldWrapperClass1 implements CSSMatrix {
-
   num get a native "WebKitCSSMatrix_a_Getter";
 
+
+  /** @domName WebKitCSSMatrix.a */
   void set a(num value) native "WebKitCSSMatrix_a_Setter";
 
+
+  /** @domName WebKitCSSMatrix.b */
   num get b native "WebKitCSSMatrix_b_Getter";
 
+
+  /** @domName WebKitCSSMatrix.b */
   void set b(num value) native "WebKitCSSMatrix_b_Setter";
 
+
+  /** @domName WebKitCSSMatrix.c */
   num get c native "WebKitCSSMatrix_c_Getter";
 
+
+  /** @domName WebKitCSSMatrix.c */
   void set c(num value) native "WebKitCSSMatrix_c_Setter";
 
+
+  /** @domName WebKitCSSMatrix.d */
   num get d native "WebKitCSSMatrix_d_Getter";
 
+
+  /** @domName WebKitCSSMatrix.d */
   void set d(num value) native "WebKitCSSMatrix_d_Setter";
 
+
+  /** @domName WebKitCSSMatrix.e */
   num get e native "WebKitCSSMatrix_e_Getter";
 
+
+  /** @domName WebKitCSSMatrix.e */
   void set e(num value) native "WebKitCSSMatrix_e_Setter";
 
+
+  /** @domName WebKitCSSMatrix.f */
   num get f native "WebKitCSSMatrix_f_Getter";
 
+
+  /** @domName WebKitCSSMatrix.f */
   void set f(num value) native "WebKitCSSMatrix_f_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m11 */
   num get m11 native "WebKitCSSMatrix_m11_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m11 */
   void set m11(num value) native "WebKitCSSMatrix_m11_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m12 */
   num get m12 native "WebKitCSSMatrix_m12_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m12 */
   void set m12(num value) native "WebKitCSSMatrix_m12_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m13 */
   num get m13 native "WebKitCSSMatrix_m13_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m13 */
   void set m13(num value) native "WebKitCSSMatrix_m13_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m14 */
   num get m14 native "WebKitCSSMatrix_m14_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m14 */
   void set m14(num value) native "WebKitCSSMatrix_m14_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m21 */
   num get m21 native "WebKitCSSMatrix_m21_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m21 */
   void set m21(num value) native "WebKitCSSMatrix_m21_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m22 */
   num get m22 native "WebKitCSSMatrix_m22_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m22 */
   void set m22(num value) native "WebKitCSSMatrix_m22_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m23 */
   num get m23 native "WebKitCSSMatrix_m23_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m23 */
   void set m23(num value) native "WebKitCSSMatrix_m23_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m24 */
   num get m24 native "WebKitCSSMatrix_m24_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m24 */
   void set m24(num value) native "WebKitCSSMatrix_m24_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m31 */
   num get m31 native "WebKitCSSMatrix_m31_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m31 */
   void set m31(num value) native "WebKitCSSMatrix_m31_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m32 */
   num get m32 native "WebKitCSSMatrix_m32_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m32 */
   void set m32(num value) native "WebKitCSSMatrix_m32_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m33 */
   num get m33 native "WebKitCSSMatrix_m33_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m33 */
   void set m33(num value) native "WebKitCSSMatrix_m33_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m34 */
   num get m34 native "WebKitCSSMatrix_m34_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m34 */
   void set m34(num value) native "WebKitCSSMatrix_m34_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m41 */
   num get m41 native "WebKitCSSMatrix_m41_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m41 */
   void set m41(num value) native "WebKitCSSMatrix_m41_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m42 */
   num get m42 native "WebKitCSSMatrix_m42_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m42 */
   void set m42(num value) native "WebKitCSSMatrix_m42_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m43 */
   num get m43 native "WebKitCSSMatrix_m43_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m43 */
   void set m43(num value) native "WebKitCSSMatrix_m43_Setter";
 
+
+  /** @domName WebKitCSSMatrix.m44 */
   num get m44 native "WebKitCSSMatrix_m44_Getter";
 
+
+  /** @domName WebKitCSSMatrix.m44 */
   void set m44(num value) native "WebKitCSSMatrix_m44_Setter";
 
+
+  /** @domName WebKitCSSMatrix.inverse */
   CSSMatrix inverse() native "WebKitCSSMatrix_inverse_Callback";
 
+
+  /** @domName WebKitCSSMatrix.multiply */
   CSSMatrix multiply(CSSMatrix secondMatrix) native "WebKitCSSMatrix_multiply_Callback";
 
+
+  /** @domName WebKitCSSMatrix.rotate */
   CSSMatrix rotate(num rotX, num rotY, num rotZ) native "WebKitCSSMatrix_rotate_Callback";
 
+
+  /** @domName WebKitCSSMatrix.rotateAxisAngle */
   CSSMatrix rotateAxisAngle(num x, num y, num z, num angle) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
 
+
+  /** @domName WebKitCSSMatrix.scale */
   CSSMatrix scale(num scaleX, num scaleY, num scaleZ) native "WebKitCSSMatrix_scale_Callback";
 
+
+  /** @domName WebKitCSSMatrix.setMatrixValue */
   void setMatrixValue(String string) native "WebKitCSSMatrix_setMatrixValue_Callback";
 
+
+  /** @domName WebKitCSSMatrix.skewX */
   CSSMatrix skewX(num angle) native "WebKitCSSMatrix_skewX_Callback";
 
+
+  /** @domName WebKitCSSMatrix.skewY */
   CSSMatrix skewY(num angle) native "WebKitCSSMatrix_skewY_Callback";
 
+
+  /** @domName WebKitCSSMatrix.toString */
   String toString() native "WebKitCSSMatrix_toString_Callback";
 
+
+  /** @domName WebKitCSSMatrix.translate */
   CSSMatrix translate(num x, num y, num z) native "WebKitCSSMatrix_translate_Callback";
 
 }
@@ -2447,34 +2104,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSMediaRule
-abstract class CSSMediaRule implements CSSRule {
+class CSSMediaRule extends CSSRule {
+  CSSMediaRule.internal(): super.internal();
+
 
   /** @domName CSSMediaRule.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName CSSMediaRule.media */
-  MediaList get media;
-
-  /** @domName CSSMediaRule.deleteRule */
-  void deleteRule(int index);
-
-  /** @domName CSSMediaRule.insertRule */
-  int insertRule(String rule, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSMediaRuleImpl extends _CSSRuleImpl implements CSSMediaRule {
-
   List<CSSRule> get cssRules native "CSSMediaRule_cssRules_Getter";
 
+
+  /** @domName CSSMediaRule.media */
   MediaList get media native "CSSMediaRule_media_Getter";
 
+
+  /** @domName CSSMediaRule.deleteRule */
   void deleteRule(int index) native "CSSMediaRule_deleteRule_Callback";
 
+
+  /** @domName CSSMediaRule.insertRule */
   int insertRule(String rule, int index) native "CSSMediaRule_insertRule_Callback";
 
 }
@@ -2485,26 +2131,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSPageRule
-abstract class CSSPageRule implements CSSRule {
+class CSSPageRule extends CSSRule {
+  CSSPageRule.internal(): super.internal();
+
 
   /** @domName CSSPageRule.selectorText */
-  String selectorText;
-
-  /** @domName CSSPageRule.style */
-  CSSStyleDeclaration get style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSPageRuleImpl extends _CSSRuleImpl implements CSSPageRule {
-
   String get selectorText native "CSSPageRule_selectorText_Getter";
 
+
+  /** @domName CSSPageRule.selectorText */
   void set selectorText(String value) native "CSSPageRule_selectorText_Setter";
 
+
+  /** @domName CSSPageRule.style */
   CSSStyleDeclaration get style native "CSSPageRule_style_Getter";
 
 }
@@ -2515,7 +2154,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSPrimitiveValue
-abstract class CSSPrimitiveValue implements CSSValue {
+class CSSPrimitiveValue extends CSSValue {
+  CSSPrimitiveValue.internal(): super.internal();
 
   static const int CSS_ATTR = 22;
 
@@ -2575,52 +2215,36 @@
 
   static const int CSS_VW = 26;
 
+
   /** @domName CSSPrimitiveValue.primitiveType */
-  int get primitiveType;
-
-  /** @domName CSSPrimitiveValue.getCounterValue */
-  Counter getCounterValue();
-
-  /** @domName CSSPrimitiveValue.getFloatValue */
-  num getFloatValue(int unitType);
-
-  /** @domName CSSPrimitiveValue.getRGBColorValue */
-  RGBColor getRGBColorValue();
-
-  /** @domName CSSPrimitiveValue.getRectValue */
-  Rect getRectValue();
-
-  /** @domName CSSPrimitiveValue.getStringValue */
-  String getStringValue();
-
-  /** @domName CSSPrimitiveValue.setFloatValue */
-  void setFloatValue(int unitType, num floatValue);
-
-  /** @domName CSSPrimitiveValue.setStringValue */
-  void setStringValue(int stringType, String stringValue);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSPrimitiveValueImpl extends _CSSValueImpl implements CSSPrimitiveValue {
-
   int get primitiveType native "CSSPrimitiveValue_primitiveType_Getter";
 
+
+  /** @domName CSSPrimitiveValue.getCounterValue */
   Counter getCounterValue() native "CSSPrimitiveValue_getCounterValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.getFloatValue */
   num getFloatValue(int unitType) native "CSSPrimitiveValue_getFloatValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.getRGBColorValue */
   RGBColor getRGBColorValue() native "CSSPrimitiveValue_getRGBColorValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.getRectValue */
   Rect getRectValue() native "CSSPrimitiveValue_getRectValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.getStringValue */
   String getStringValue() native "CSSPrimitiveValue_getStringValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.setFloatValue */
   void setFloatValue(int unitType, num floatValue) native "CSSPrimitiveValue_setFloatValue_Callback";
 
+
+  /** @domName CSSPrimitiveValue.setStringValue */
   void setStringValue(int stringType, String stringValue) native "CSSPrimitiveValue_setStringValue_Callback";
 
 }
@@ -2631,7 +2255,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSRule
-abstract class CSSRule {
+class CSSRule extends NativeFieldWrapperClass1 {
+  CSSRule.internal();
 
   static const int CHARSET_RULE = 2;
 
@@ -2651,34 +2276,24 @@
 
   static const int WEBKIT_KEYFRAME_RULE = 8;
 
+
   /** @domName CSSRule.cssText */
-  String cssText;
-
-  /** @domName CSSRule.parentRule */
-  CSSRule get parentRule;
-
-  /** @domName CSSRule.parentStyleSheet */
-  CSSStyleSheet get parentStyleSheet;
-
-  /** @domName CSSRule.type */
-  int get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSRuleImpl extends NativeFieldWrapperClass1 implements CSSRule {
-
   String get cssText native "CSSRule_cssText_Getter";
 
+
+  /** @domName CSSRule.cssText */
   void set cssText(String value) native "CSSRule_cssText_Setter";
 
+
+  /** @domName CSSRule.parentRule */
   CSSRule get parentRule native "CSSRule_parentRule_Getter";
 
+
+  /** @domName CSSRule.parentStyleSheet */
   CSSStyleSheet get parentStyleSheet native "CSSRule_parentStyleSheet_Getter";
 
+
+  /** @domName CSSRule.type */
   int get type native "CSSRule_type_Getter";
 
 }
@@ -2686,1991 +2301,6 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-class _CSSRuleListImpl extends NativeFieldWrapperClass1 implements List<CSSRule> {
-
-  int get length native "CSSRuleList_length_Getter";
-
-  CSSRule operator[](int index) native "CSSRuleList_item_Callback";
-
-  void operator[]=(int index, CSSRule value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<CSSRule> mixins.
-  // CSSRule is the element type.
-
-  // From Iterable<CSSRule>:
-
-  Iterator<CSSRule> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<CSSRule>(this);
-  }
-
-  // From Collection<CSSRule>:
-
-  void add(CSSRule value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(CSSRule value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<CSSRule> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(CSSRule element) => _Collections.contains(this, element);
-
-  void forEach(void f(CSSRule element)) => _Collections.forEach(this, f);
-
-  Collection map(f(CSSRule element)) => _Collections.map(this, [], f);
-
-  Collection<CSSRule> filter(bool f(CSSRule element)) =>
-     _Collections.filter(this, <CSSRule>[], f);
-
-  bool every(bool f(CSSRule element)) => _Collections.every(this, f);
-
-  bool some(bool f(CSSRule element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<CSSRule>:
-
-  void sort([Comparator<CSSRule> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(CSSRule element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(CSSRule element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  CSSRule get last => this[length - 1];
-
-  CSSRule removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<CSSRule> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <CSSRule>[]);
-
-  // -- end List<CSSRule> mixins.
-
-  CSSRule item(int index) native "CSSRuleList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName CSSStyleDeclaration
-abstract class CSSStyleDeclaration  {
-  factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
-  factory CSSStyleDeclaration.css(String css) => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration_css(css);
-
-
-  /** @domName CSSStyleDeclaration.cssText */
-  String cssText;
-
-  /** @domName CSSStyleDeclaration.length */
-  int get length;
-
-  /** @domName CSSStyleDeclaration.parentRule */
-  CSSRule get parentRule;
-
-  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
-  CSSValue getPropertyCSSValue(String propertyName);
-
-  /** @domName CSSStyleDeclaration.getPropertyPriority */
-  String getPropertyPriority(String propertyName);
-
-  /** @domName CSSStyleDeclaration.getPropertyShorthand */
-  String getPropertyShorthand(String propertyName);
-
-  /** @domName CSSStyleDeclaration.isPropertyImplicit */
-  bool isPropertyImplicit(String propertyName);
-
-  /** @domName CSSStyleDeclaration.item */
-  String item(int index);
-
-  /** @domName CSSStyleDeclaration.removeProperty */
-  String removeProperty(String propertyName);
-
-  /** @domName CSSStyleDeclaration.setProperty */
-  void setProperty(String propertyName, String value, [String priority]);
-
-
-  /** Gets the value of "animation" */
-  String get animation;
-
-  /** Sets the value of "animation" */
-  void set animation(var value);
-
-  /** Gets the value of "animation-delay" */
-  String get animationDelay;
-
-  /** Sets the value of "animation-delay" */
-  void set animationDelay(var value);
-
-  /** Gets the value of "animation-direction" */
-  String get animationDirection;
-
-  /** Sets the value of "animation-direction" */
-  void set animationDirection(var value);
-
-  /** Gets the value of "animation-duration" */
-  String get animationDuration;
-
-  /** Sets the value of "animation-duration" */
-  void set animationDuration(var value);
-
-  /** Gets the value of "animation-fill-mode" */
-  String get animationFillMode;
-
-  /** Sets the value of "animation-fill-mode" */
-  void set animationFillMode(var value);
-
-  /** Gets the value of "animation-iteration-count" */
-  String get animationIterationCount;
-
-  /** Sets the value of "animation-iteration-count" */
-  void set animationIterationCount(var value);
-
-  /** Gets the value of "animation-name" */
-  String get animationName;
-
-  /** Sets the value of "animation-name" */
-  void set animationName(var value);
-
-  /** Gets the value of "animation-play-state" */
-  String get animationPlayState;
-
-  /** Sets the value of "animation-play-state" */
-  void set animationPlayState(var value);
-
-  /** Gets the value of "animation-timing-function" */
-  String get animationTimingFunction;
-
-  /** Sets the value of "animation-timing-function" */
-  void set animationTimingFunction(var value);
-
-  /** Gets the value of "appearance" */
-  String get appearance;
-
-  /** Sets the value of "appearance" */
-  void set appearance(var value);
-
-  /** Gets the value of "backface-visibility" */
-  String get backfaceVisibility;
-
-  /** Sets the value of "backface-visibility" */
-  void set backfaceVisibility(var value);
-
-  /** Gets the value of "background" */
-  String get background;
-
-  /** Sets the value of "background" */
-  void set background(var value);
-
-  /** Gets the value of "background-attachment" */
-  String get backgroundAttachment;
-
-  /** Sets the value of "background-attachment" */
-  void set backgroundAttachment(var value);
-
-  /** Gets the value of "background-clip" */
-  String get backgroundClip;
-
-  /** Sets the value of "background-clip" */
-  void set backgroundClip(var value);
-
-  /** Gets the value of "background-color" */
-  String get backgroundColor;
-
-  /** Sets the value of "background-color" */
-  void set backgroundColor(var value);
-
-  /** Gets the value of "background-composite" */
-  String get backgroundComposite;
-
-  /** Sets the value of "background-composite" */
-  void set backgroundComposite(var value);
-
-  /** Gets the value of "background-image" */
-  String get backgroundImage;
-
-  /** Sets the value of "background-image" */
-  void set backgroundImage(var value);
-
-  /** Gets the value of "background-origin" */
-  String get backgroundOrigin;
-
-  /** Sets the value of "background-origin" */
-  void set backgroundOrigin(var value);
-
-  /** Gets the value of "background-position" */
-  String get backgroundPosition;
-
-  /** Sets the value of "background-position" */
-  void set backgroundPosition(var value);
-
-  /** Gets the value of "background-position-x" */
-  String get backgroundPositionX;
-
-  /** Sets the value of "background-position-x" */
-  void set backgroundPositionX(var value);
-
-  /** Gets the value of "background-position-y" */
-  String get backgroundPositionY;
-
-  /** Sets the value of "background-position-y" */
-  void set backgroundPositionY(var value);
-
-  /** Gets the value of "background-repeat" */
-  String get backgroundRepeat;
-
-  /** Sets the value of "background-repeat" */
-  void set backgroundRepeat(var value);
-
-  /** Gets the value of "background-repeat-x" */
-  String get backgroundRepeatX;
-
-  /** Sets the value of "background-repeat-x" */
-  void set backgroundRepeatX(var value);
-
-  /** Gets the value of "background-repeat-y" */
-  String get backgroundRepeatY;
-
-  /** Sets the value of "background-repeat-y" */
-  void set backgroundRepeatY(var value);
-
-  /** Gets the value of "background-size" */
-  String get backgroundSize;
-
-  /** Sets the value of "background-size" */
-  void set backgroundSize(var value);
-
-  /** Gets the value of "border" */
-  String get border;
-
-  /** Sets the value of "border" */
-  void set border(var value);
-
-  /** Gets the value of "border-after" */
-  String get borderAfter;
-
-  /** Sets the value of "border-after" */
-  void set borderAfter(var value);
-
-  /** Gets the value of "border-after-color" */
-  String get borderAfterColor;
-
-  /** Sets the value of "border-after-color" */
-  void set borderAfterColor(var value);
-
-  /** Gets the value of "border-after-style" */
-  String get borderAfterStyle;
-
-  /** Sets the value of "border-after-style" */
-  void set borderAfterStyle(var value);
-
-  /** Gets the value of "border-after-width" */
-  String get borderAfterWidth;
-
-  /** Sets the value of "border-after-width" */
-  void set borderAfterWidth(var value);
-
-  /** Gets the value of "border-before" */
-  String get borderBefore;
-
-  /** Sets the value of "border-before" */
-  void set borderBefore(var value);
-
-  /** Gets the value of "border-before-color" */
-  String get borderBeforeColor;
-
-  /** Sets the value of "border-before-color" */
-  void set borderBeforeColor(var value);
-
-  /** Gets the value of "border-before-style" */
-  String get borderBeforeStyle;
-
-  /** Sets the value of "border-before-style" */
-  void set borderBeforeStyle(var value);
-
-  /** Gets the value of "border-before-width" */
-  String get borderBeforeWidth;
-
-  /** Sets the value of "border-before-width" */
-  void set borderBeforeWidth(var value);
-
-  /** Gets the value of "border-bottom" */
-  String get borderBottom;
-
-  /** Sets the value of "border-bottom" */
-  void set borderBottom(var value);
-
-  /** Gets the value of "border-bottom-color" */
-  String get borderBottomColor;
-
-  /** Sets the value of "border-bottom-color" */
-  void set borderBottomColor(var value);
-
-  /** Gets the value of "border-bottom-left-radius" */
-  String get borderBottomLeftRadius;
-
-  /** Sets the value of "border-bottom-left-radius" */
-  void set borderBottomLeftRadius(var value);
-
-  /** Gets the value of "border-bottom-right-radius" */
-  String get borderBottomRightRadius;
-
-  /** Sets the value of "border-bottom-right-radius" */
-  void set borderBottomRightRadius(var value);
-
-  /** Gets the value of "border-bottom-style" */
-  String get borderBottomStyle;
-
-  /** Sets the value of "border-bottom-style" */
-  void set borderBottomStyle(var value);
-
-  /** Gets the value of "border-bottom-width" */
-  String get borderBottomWidth;
-
-  /** Sets the value of "border-bottom-width" */
-  void set borderBottomWidth(var value);
-
-  /** Gets the value of "border-collapse" */
-  String get borderCollapse;
-
-  /** Sets the value of "border-collapse" */
-  void set borderCollapse(var value);
-
-  /** Gets the value of "border-color" */
-  String get borderColor;
-
-  /** Sets the value of "border-color" */
-  void set borderColor(var value);
-
-  /** Gets the value of "border-end" */
-  String get borderEnd;
-
-  /** Sets the value of "border-end" */
-  void set borderEnd(var value);
-
-  /** Gets the value of "border-end-color" */
-  String get borderEndColor;
-
-  /** Sets the value of "border-end-color" */
-  void set borderEndColor(var value);
-
-  /** Gets the value of "border-end-style" */
-  String get borderEndStyle;
-
-  /** Sets the value of "border-end-style" */
-  void set borderEndStyle(var value);
-
-  /** Gets the value of "border-end-width" */
-  String get borderEndWidth;
-
-  /** Sets the value of "border-end-width" */
-  void set borderEndWidth(var value);
-
-  /** Gets the value of "border-fit" */
-  String get borderFit;
-
-  /** Sets the value of "border-fit" */
-  void set borderFit(var value);
-
-  /** Gets the value of "border-horizontal-spacing" */
-  String get borderHorizontalSpacing;
-
-  /** Sets the value of "border-horizontal-spacing" */
-  void set borderHorizontalSpacing(var value);
-
-  /** Gets the value of "border-image" */
-  String get borderImage;
-
-  /** Sets the value of "border-image" */
-  void set borderImage(var value);
-
-  /** Gets the value of "border-image-outset" */
-  String get borderImageOutset;
-
-  /** Sets the value of "border-image-outset" */
-  void set borderImageOutset(var value);
-
-  /** Gets the value of "border-image-repeat" */
-  String get borderImageRepeat;
-
-  /** Sets the value of "border-image-repeat" */
-  void set borderImageRepeat(var value);
-
-  /** Gets the value of "border-image-slice" */
-  String get borderImageSlice;
-
-  /** Sets the value of "border-image-slice" */
-  void set borderImageSlice(var value);
-
-  /** Gets the value of "border-image-source" */
-  String get borderImageSource;
-
-  /** Sets the value of "border-image-source" */
-  void set borderImageSource(var value);
-
-  /** Gets the value of "border-image-width" */
-  String get borderImageWidth;
-
-  /** Sets the value of "border-image-width" */
-  void set borderImageWidth(var value);
-
-  /** Gets the value of "border-left" */
-  String get borderLeft;
-
-  /** Sets the value of "border-left" */
-  void set borderLeft(var value);
-
-  /** Gets the value of "border-left-color" */
-  String get borderLeftColor;
-
-  /** Sets the value of "border-left-color" */
-  void set borderLeftColor(var value);
-
-  /** Gets the value of "border-left-style" */
-  String get borderLeftStyle;
-
-  /** Sets the value of "border-left-style" */
-  void set borderLeftStyle(var value);
-
-  /** Gets the value of "border-left-width" */
-  String get borderLeftWidth;
-
-  /** Sets the value of "border-left-width" */
-  void set borderLeftWidth(var value);
-
-  /** Gets the value of "border-radius" */
-  String get borderRadius;
-
-  /** Sets the value of "border-radius" */
-  void set borderRadius(var value);
-
-  /** Gets the value of "border-right" */
-  String get borderRight;
-
-  /** Sets the value of "border-right" */
-  void set borderRight(var value);
-
-  /** Gets the value of "border-right-color" */
-  String get borderRightColor;
-
-  /** Sets the value of "border-right-color" */
-  void set borderRightColor(var value);
-
-  /** Gets the value of "border-right-style" */
-  String get borderRightStyle;
-
-  /** Sets the value of "border-right-style" */
-  void set borderRightStyle(var value);
-
-  /** Gets the value of "border-right-width" */
-  String get borderRightWidth;
-
-  /** Sets the value of "border-right-width" */
-  void set borderRightWidth(var value);
-
-  /** Gets the value of "border-spacing" */
-  String get borderSpacing;
-
-  /** Sets the value of "border-spacing" */
-  void set borderSpacing(var value);
-
-  /** Gets the value of "border-start" */
-  String get borderStart;
-
-  /** Sets the value of "border-start" */
-  void set borderStart(var value);
-
-  /** Gets the value of "border-start-color" */
-  String get borderStartColor;
-
-  /** Sets the value of "border-start-color" */
-  void set borderStartColor(var value);
-
-  /** Gets the value of "border-start-style" */
-  String get borderStartStyle;
-
-  /** Sets the value of "border-start-style" */
-  void set borderStartStyle(var value);
-
-  /** Gets the value of "border-start-width" */
-  String get borderStartWidth;
-
-  /** Sets the value of "border-start-width" */
-  void set borderStartWidth(var value);
-
-  /** Gets the value of "border-style" */
-  String get borderStyle;
-
-  /** Sets the value of "border-style" */
-  void set borderStyle(var value);
-
-  /** Gets the value of "border-top" */
-  String get borderTop;
-
-  /** Sets the value of "border-top" */
-  void set borderTop(var value);
-
-  /** Gets the value of "border-top-color" */
-  String get borderTopColor;
-
-  /** Sets the value of "border-top-color" */
-  void set borderTopColor(var value);
-
-  /** Gets the value of "border-top-left-radius" */
-  String get borderTopLeftRadius;
-
-  /** Sets the value of "border-top-left-radius" */
-  void set borderTopLeftRadius(var value);
-
-  /** Gets the value of "border-top-right-radius" */
-  String get borderTopRightRadius;
-
-  /** Sets the value of "border-top-right-radius" */
-  void set borderTopRightRadius(var value);
-
-  /** Gets the value of "border-top-style" */
-  String get borderTopStyle;
-
-  /** Sets the value of "border-top-style" */
-  void set borderTopStyle(var value);
-
-  /** Gets the value of "border-top-width" */
-  String get borderTopWidth;
-
-  /** Sets the value of "border-top-width" */
-  void set borderTopWidth(var value);
-
-  /** Gets the value of "border-vertical-spacing" */
-  String get borderVerticalSpacing;
-
-  /** Sets the value of "border-vertical-spacing" */
-  void set borderVerticalSpacing(var value);
-
-  /** Gets the value of "border-width" */
-  String get borderWidth;
-
-  /** Sets the value of "border-width" */
-  void set borderWidth(var value);
-
-  /** Gets the value of "bottom" */
-  String get bottom;
-
-  /** Sets the value of "bottom" */
-  void set bottom(var value);
-
-  /** Gets the value of "box-align" */
-  String get boxAlign;
-
-  /** Sets the value of "box-align" */
-  void set boxAlign(var value);
-
-  /** Gets the value of "box-direction" */
-  String get boxDirection;
-
-  /** Sets the value of "box-direction" */
-  void set boxDirection(var value);
-
-  /** Gets the value of "box-flex" */
-  String get boxFlex;
-
-  /** Sets the value of "box-flex" */
-  void set boxFlex(var value);
-
-  /** Gets the value of "box-flex-group" */
-  String get boxFlexGroup;
-
-  /** Sets the value of "box-flex-group" */
-  void set boxFlexGroup(var value);
-
-  /** Gets the value of "box-lines" */
-  String get boxLines;
-
-  /** Sets the value of "box-lines" */
-  void set boxLines(var value);
-
-  /** Gets the value of "box-ordinal-group" */
-  String get boxOrdinalGroup;
-
-  /** Sets the value of "box-ordinal-group" */
-  void set boxOrdinalGroup(var value);
-
-  /** Gets the value of "box-orient" */
-  String get boxOrient;
-
-  /** Sets the value of "box-orient" */
-  void set boxOrient(var value);
-
-  /** Gets the value of "box-pack" */
-  String get boxPack;
-
-  /** Sets the value of "box-pack" */
-  void set boxPack(var value);
-
-  /** Gets the value of "box-reflect" */
-  String get boxReflect;
-
-  /** Sets the value of "box-reflect" */
-  void set boxReflect(var value);
-
-  /** Gets the value of "box-shadow" */
-  String get boxShadow;
-
-  /** Sets the value of "box-shadow" */
-  void set boxShadow(var value);
-
-  /** Gets the value of "box-sizing" */
-  String get boxSizing;
-
-  /** Sets the value of "box-sizing" */
-  void set boxSizing(var value);
-
-  /** Gets the value of "caption-side" */
-  String get captionSide;
-
-  /** Sets the value of "caption-side" */
-  void set captionSide(var value);
-
-  /** Gets the value of "clear" */
-  String get clear;
-
-  /** Sets the value of "clear" */
-  void set clear(var value);
-
-  /** Gets the value of "clip" */
-  String get clip;
-
-  /** Sets the value of "clip" */
-  void set clip(var value);
-
-  /** Gets the value of "color" */
-  String get color;
-
-  /** Sets the value of "color" */
-  void set color(var value);
-
-  /** Gets the value of "color-correction" */
-  String get colorCorrection;
-
-  /** Sets the value of "color-correction" */
-  void set colorCorrection(var value);
-
-  /** Gets the value of "column-break-after" */
-  String get columnBreakAfter;
-
-  /** Sets the value of "column-break-after" */
-  void set columnBreakAfter(var value);
-
-  /** Gets the value of "column-break-before" */
-  String get columnBreakBefore;
-
-  /** Sets the value of "column-break-before" */
-  void set columnBreakBefore(var value);
-
-  /** Gets the value of "column-break-inside" */
-  String get columnBreakInside;
-
-  /** Sets the value of "column-break-inside" */
-  void set columnBreakInside(var value);
-
-  /** Gets the value of "column-count" */
-  String get columnCount;
-
-  /** Sets the value of "column-count" */
-  void set columnCount(var value);
-
-  /** Gets the value of "column-gap" */
-  String get columnGap;
-
-  /** Sets the value of "column-gap" */
-  void set columnGap(var value);
-
-  /** Gets the value of "column-rule" */
-  String get columnRule;
-
-  /** Sets the value of "column-rule" */
-  void set columnRule(var value);
-
-  /** Gets the value of "column-rule-color" */
-  String get columnRuleColor;
-
-  /** Sets the value of "column-rule-color" */
-  void set columnRuleColor(var value);
-
-  /** Gets the value of "column-rule-style" */
-  String get columnRuleStyle;
-
-  /** Sets the value of "column-rule-style" */
-  void set columnRuleStyle(var value);
-
-  /** Gets the value of "column-rule-width" */
-  String get columnRuleWidth;
-
-  /** Sets the value of "column-rule-width" */
-  void set columnRuleWidth(var value);
-
-  /** Gets the value of "column-span" */
-  String get columnSpan;
-
-  /** Sets the value of "column-span" */
-  void set columnSpan(var value);
-
-  /** Gets the value of "column-width" */
-  String get columnWidth;
-
-  /** Sets the value of "column-width" */
-  void set columnWidth(var value);
-
-  /** Gets the value of "columns" */
-  String get columns;
-
-  /** Sets the value of "columns" */
-  void set columns(var value);
-
-  /** Gets the value of "content" */
-  String get content;
-
-  /** Sets the value of "content" */
-  void set content(var value);
-
-  /** Gets the value of "counter-increment" */
-  String get counterIncrement;
-
-  /** Sets the value of "counter-increment" */
-  void set counterIncrement(var value);
-
-  /** Gets the value of "counter-reset" */
-  String get counterReset;
-
-  /** Sets the value of "counter-reset" */
-  void set counterReset(var value);
-
-  /** Gets the value of "cursor" */
-  String get cursor;
-
-  /** Sets the value of "cursor" */
-  void set cursor(var value);
-
-  /** Gets the value of "direction" */
-  String get direction;
-
-  /** Sets the value of "direction" */
-  void set direction(var value);
-
-  /** Gets the value of "display" */
-  String get display;
-
-  /** Sets the value of "display" */
-  void set display(var value);
-
-  /** Gets the value of "empty-cells" */
-  String get emptyCells;
-
-  /** Sets the value of "empty-cells" */
-  void set emptyCells(var value);
-
-  /** Gets the value of "filter" */
-  String get filter;
-
-  /** Sets the value of "filter" */
-  void set filter(var value);
-
-  /** Gets the value of "flex-align" */
-  String get flexAlign;
-
-  /** Sets the value of "flex-align" */
-  void set flexAlign(var value);
-
-  /** Gets the value of "flex-flow" */
-  String get flexFlow;
-
-  /** Sets the value of "flex-flow" */
-  void set flexFlow(var value);
-
-  /** Gets the value of "flex-order" */
-  String get flexOrder;
-
-  /** Sets the value of "flex-order" */
-  void set flexOrder(var value);
-
-  /** Gets the value of "flex-pack" */
-  String get flexPack;
-
-  /** Sets the value of "flex-pack" */
-  void set flexPack(var value);
-
-  /** Gets the value of "float" */
-  String get float;
-
-  /** Sets the value of "float" */
-  void set float(var value);
-
-  /** Gets the value of "flow-from" */
-  String get flowFrom;
-
-  /** Sets the value of "flow-from" */
-  void set flowFrom(var value);
-
-  /** Gets the value of "flow-into" */
-  String get flowInto;
-
-  /** Sets the value of "flow-into" */
-  void set flowInto(var value);
-
-  /** Gets the value of "font" */
-  String get font;
-
-  /** Sets the value of "font" */
-  void set font(var value);
-
-  /** Gets the value of "font-family" */
-  String get fontFamily;
-
-  /** Sets the value of "font-family" */
-  void set fontFamily(var value);
-
-  /** Gets the value of "font-feature-settings" */
-  String get fontFeatureSettings;
-
-  /** Sets the value of "font-feature-settings" */
-  void set fontFeatureSettings(var value);
-
-  /** Gets the value of "font-size" */
-  String get fontSize;
-
-  /** Sets the value of "font-size" */
-  void set fontSize(var value);
-
-  /** Gets the value of "font-size-delta" */
-  String get fontSizeDelta;
-
-  /** Sets the value of "font-size-delta" */
-  void set fontSizeDelta(var value);
-
-  /** Gets the value of "font-smoothing" */
-  String get fontSmoothing;
-
-  /** Sets the value of "font-smoothing" */
-  void set fontSmoothing(var value);
-
-  /** Gets the value of "font-stretch" */
-  String get fontStretch;
-
-  /** Sets the value of "font-stretch" */
-  void set fontStretch(var value);
-
-  /** Gets the value of "font-style" */
-  String get fontStyle;
-
-  /** Sets the value of "font-style" */
-  void set fontStyle(var value);
-
-  /** Gets the value of "font-variant" */
-  String get fontVariant;
-
-  /** Sets the value of "font-variant" */
-  void set fontVariant(var value);
-
-  /** Gets the value of "font-weight" */
-  String get fontWeight;
-
-  /** Sets the value of "font-weight" */
-  void set fontWeight(var value);
-
-  /** @domName CSSStyleDeclaration.getPropertyValue. */
-  String getPropertyValue(String propertyName);
-
-  /** Gets the value of "height" */
-  String get height;
-
-  /** Sets the value of "height" */
-  void set height(var value);
-
-  /** Gets the value of "highlight" */
-  String get highlight;
-
-  /** Sets the value of "highlight" */
-  void set highlight(var value);
-
-  /** Gets the value of "hyphenate-character" */
-  String get hyphenateCharacter;
-
-  /** Sets the value of "hyphenate-character" */
-  void set hyphenateCharacter(var value);
-
-  /** Gets the value of "hyphenate-limit-after" */
-  String get hyphenateLimitAfter;
-
-  /** Sets the value of "hyphenate-limit-after" */
-  void set hyphenateLimitAfter(var value);
-
-  /** Gets the value of "hyphenate-limit-before" */
-  String get hyphenateLimitBefore;
-
-  /** Sets the value of "hyphenate-limit-before" */
-  void set hyphenateLimitBefore(var value);
-
-  /** Gets the value of "hyphenate-limit-lines" */
-  String get hyphenateLimitLines;
-
-  /** Sets the value of "hyphenate-limit-lines" */
-  void set hyphenateLimitLines(var value);
-
-  /** Gets the value of "hyphens" */
-  String get hyphens;
-
-  /** Sets the value of "hyphens" */
-  void set hyphens(var value);
-
-  /** Gets the value of "image-rendering" */
-  String get imageRendering;
-
-  /** Sets the value of "image-rendering" */
-  void set imageRendering(var value);
-
-  /** Gets the value of "left" */
-  String get left;
-
-  /** Sets the value of "left" */
-  void set left(var value);
-
-  /** Gets the value of "letter-spacing" */
-  String get letterSpacing;
-
-  /** Sets the value of "letter-spacing" */
-  void set letterSpacing(var value);
-
-  /** Gets the value of "line-box-contain" */
-  String get lineBoxContain;
-
-  /** Sets the value of "line-box-contain" */
-  void set lineBoxContain(var value);
-
-  /** Gets the value of "line-break" */
-  String get lineBreak;
-
-  /** Sets the value of "line-break" */
-  void set lineBreak(var value);
-
-  /** Gets the value of "line-clamp" */
-  String get lineClamp;
-
-  /** Sets the value of "line-clamp" */
-  void set lineClamp(var value);
-
-  /** Gets the value of "line-height" */
-  String get lineHeight;
-
-  /** Sets the value of "line-height" */
-  void set lineHeight(var value);
-
-  /** Gets the value of "list-style" */
-  String get listStyle;
-
-  /** Sets the value of "list-style" */
-  void set listStyle(var value);
-
-  /** Gets the value of "list-style-image" */
-  String get listStyleImage;
-
-  /** Sets the value of "list-style-image" */
-  void set listStyleImage(var value);
-
-  /** Gets the value of "list-style-position" */
-  String get listStylePosition;
-
-  /** Sets the value of "list-style-position" */
-  void set listStylePosition(var value);
-
-  /** Gets the value of "list-style-type" */
-  String get listStyleType;
-
-  /** Sets the value of "list-style-type" */
-  void set listStyleType(var value);
-
-  /** Gets the value of "locale" */
-  String get locale;
-
-  /** Sets the value of "locale" */
-  void set locale(var value);
-
-  /** Gets the value of "logical-height" */
-  String get logicalHeight;
-
-  /** Sets the value of "logical-height" */
-  void set logicalHeight(var value);
-
-  /** Gets the value of "logical-width" */
-  String get logicalWidth;
-
-  /** Sets the value of "logical-width" */
-  void set logicalWidth(var value);
-
-  /** Gets the value of "margin" */
-  String get margin;
-
-  /** Sets the value of "margin" */
-  void set margin(var value);
-
-  /** Gets the value of "margin-after" */
-  String get marginAfter;
-
-  /** Sets the value of "margin-after" */
-  void set marginAfter(var value);
-
-  /** Gets the value of "margin-after-collapse" */
-  String get marginAfterCollapse;
-
-  /** Sets the value of "margin-after-collapse" */
-  void set marginAfterCollapse(var value);
-
-  /** Gets the value of "margin-before" */
-  String get marginBefore;
-
-  /** Sets the value of "margin-before" */
-  void set marginBefore(var value);
-
-  /** Gets the value of "margin-before-collapse" */
-  String get marginBeforeCollapse;
-
-  /** Sets the value of "margin-before-collapse" */
-  void set marginBeforeCollapse(var value);
-
-  /** Gets the value of "margin-bottom" */
-  String get marginBottom;
-
-  /** Sets the value of "margin-bottom" */
-  void set marginBottom(var value);
-
-  /** Gets the value of "margin-bottom-collapse" */
-  String get marginBottomCollapse;
-
-  /** Sets the value of "margin-bottom-collapse" */
-  void set marginBottomCollapse(var value);
-
-  /** Gets the value of "margin-collapse" */
-  String get marginCollapse;
-
-  /** Sets the value of "margin-collapse" */
-  void set marginCollapse(var value);
-
-  /** Gets the value of "margin-end" */
-  String get marginEnd;
-
-  /** Sets the value of "margin-end" */
-  void set marginEnd(var value);
-
-  /** Gets the value of "margin-left" */
-  String get marginLeft;
-
-  /** Sets the value of "margin-left" */
-  void set marginLeft(var value);
-
-  /** Gets the value of "margin-right" */
-  String get marginRight;
-
-  /** Sets the value of "margin-right" */
-  void set marginRight(var value);
-
-  /** Gets the value of "margin-start" */
-  String get marginStart;
-
-  /** Sets the value of "margin-start" */
-  void set marginStart(var value);
-
-  /** Gets the value of "margin-top" */
-  String get marginTop;
-
-  /** Sets the value of "margin-top" */
-  void set marginTop(var value);
-
-  /** Gets the value of "margin-top-collapse" */
-  String get marginTopCollapse;
-
-  /** Sets the value of "margin-top-collapse" */
-  void set marginTopCollapse(var value);
-
-  /** Gets the value of "marquee" */
-  String get marquee;
-
-  /** Sets the value of "marquee" */
-  void set marquee(var value);
-
-  /** Gets the value of "marquee-direction" */
-  String get marqueeDirection;
-
-  /** Sets the value of "marquee-direction" */
-  void set marqueeDirection(var value);
-
-  /** Gets the value of "marquee-increment" */
-  String get marqueeIncrement;
-
-  /** Sets the value of "marquee-increment" */
-  void set marqueeIncrement(var value);
-
-  /** Gets the value of "marquee-repetition" */
-  String get marqueeRepetition;
-
-  /** Sets the value of "marquee-repetition" */
-  void set marqueeRepetition(var value);
-
-  /** Gets the value of "marquee-speed" */
-  String get marqueeSpeed;
-
-  /** Sets the value of "marquee-speed" */
-  void set marqueeSpeed(var value);
-
-  /** Gets the value of "marquee-style" */
-  String get marqueeStyle;
-
-  /** Sets the value of "marquee-style" */
-  void set marqueeStyle(var value);
-
-  /** Gets the value of "mask" */
-  String get mask;
-
-  /** Sets the value of "mask" */
-  void set mask(var value);
-
-  /** Gets the value of "mask-attachment" */
-  String get maskAttachment;
-
-  /** Sets the value of "mask-attachment" */
-  void set maskAttachment(var value);
-
-  /** Gets the value of "mask-box-image" */
-  String get maskBoxImage;
-
-  /** Sets the value of "mask-box-image" */
-  void set maskBoxImage(var value);
-
-  /** Gets the value of "mask-box-image-outset" */
-  String get maskBoxImageOutset;
-
-  /** Sets the value of "mask-box-image-outset" */
-  void set maskBoxImageOutset(var value);
-
-  /** Gets the value of "mask-box-image-repeat" */
-  String get maskBoxImageRepeat;
-
-  /** Sets the value of "mask-box-image-repeat" */
-  void set maskBoxImageRepeat(var value);
-
-  /** Gets the value of "mask-box-image-slice" */
-  String get maskBoxImageSlice;
-
-  /** Sets the value of "mask-box-image-slice" */
-  void set maskBoxImageSlice(var value);
-
-  /** Gets the value of "mask-box-image-source" */
-  String get maskBoxImageSource;
-
-  /** Sets the value of "mask-box-image-source" */
-  void set maskBoxImageSource(var value);
-
-  /** Gets the value of "mask-box-image-width" */
-  String get maskBoxImageWidth;
-
-  /** Sets the value of "mask-box-image-width" */
-  void set maskBoxImageWidth(var value);
-
-  /** Gets the value of "mask-clip" */
-  String get maskClip;
-
-  /** Sets the value of "mask-clip" */
-  void set maskClip(var value);
-
-  /** Gets the value of "mask-composite" */
-  String get maskComposite;
-
-  /** Sets the value of "mask-composite" */
-  void set maskComposite(var value);
-
-  /** Gets the value of "mask-image" */
-  String get maskImage;
-
-  /** Sets the value of "mask-image" */
-  void set maskImage(var value);
-
-  /** Gets the value of "mask-origin" */
-  String get maskOrigin;
-
-  /** Sets the value of "mask-origin" */
-  void set maskOrigin(var value);
-
-  /** Gets the value of "mask-position" */
-  String get maskPosition;
-
-  /** Sets the value of "mask-position" */
-  void set maskPosition(var value);
-
-  /** Gets the value of "mask-position-x" */
-  String get maskPositionX;
-
-  /** Sets the value of "mask-position-x" */
-  void set maskPositionX(var value);
-
-  /** Gets the value of "mask-position-y" */
-  String get maskPositionY;
-
-  /** Sets the value of "mask-position-y" */
-  void set maskPositionY(var value);
-
-  /** Gets the value of "mask-repeat" */
-  String get maskRepeat;
-
-  /** Sets the value of "mask-repeat" */
-  void set maskRepeat(var value);
-
-  /** Gets the value of "mask-repeat-x" */
-  String get maskRepeatX;
-
-  /** Sets the value of "mask-repeat-x" */
-  void set maskRepeatX(var value);
-
-  /** Gets the value of "mask-repeat-y" */
-  String get maskRepeatY;
-
-  /** Sets the value of "mask-repeat-y" */
-  void set maskRepeatY(var value);
-
-  /** Gets the value of "mask-size" */
-  String get maskSize;
-
-  /** Sets the value of "mask-size" */
-  void set maskSize(var value);
-
-  /** Gets the value of "match-nearest-mail-blockquote-color" */
-  String get matchNearestMailBlockquoteColor;
-
-  /** Sets the value of "match-nearest-mail-blockquote-color" */
-  void set matchNearestMailBlockquoteColor(var value);
-
-  /** Gets the value of "max-height" */
-  String get maxHeight;
-
-  /** Sets the value of "max-height" */
-  void set maxHeight(var value);
-
-  /** Gets the value of "max-logical-height" */
-  String get maxLogicalHeight;
-
-  /** Sets the value of "max-logical-height" */
-  void set maxLogicalHeight(var value);
-
-  /** Gets the value of "max-logical-width" */
-  String get maxLogicalWidth;
-
-  /** Sets the value of "max-logical-width" */
-  void set maxLogicalWidth(var value);
-
-  /** Gets the value of "max-width" */
-  String get maxWidth;
-
-  /** Sets the value of "max-width" */
-  void set maxWidth(var value);
-
-  /** Gets the value of "min-height" */
-  String get minHeight;
-
-  /** Sets the value of "min-height" */
-  void set minHeight(var value);
-
-  /** Gets the value of "min-logical-height" */
-  String get minLogicalHeight;
-
-  /** Sets the value of "min-logical-height" */
-  void set minLogicalHeight(var value);
-
-  /** Gets the value of "min-logical-width" */
-  String get minLogicalWidth;
-
-  /** Sets the value of "min-logical-width" */
-  void set minLogicalWidth(var value);
-
-  /** Gets the value of "min-width" */
-  String get minWidth;
-
-  /** Sets the value of "min-width" */
-  void set minWidth(var value);
-
-  /** Gets the value of "nbsp-mode" */
-  String get nbspMode;
-
-  /** Sets the value of "nbsp-mode" */
-  void set nbspMode(var value);
-
-  /** Gets the value of "opacity" */
-  String get opacity;
-
-  /** Sets the value of "opacity" */
-  void set opacity(var value);
-
-  /** Gets the value of "orphans" */
-  String get orphans;
-
-  /** Sets the value of "orphans" */
-  void set orphans(var value);
-
-  /** Gets the value of "outline" */
-  String get outline;
-
-  /** Sets the value of "outline" */
-  void set outline(var value);
-
-  /** Gets the value of "outline-color" */
-  String get outlineColor;
-
-  /** Sets the value of "outline-color" */
-  void set outlineColor(var value);
-
-  /** Gets the value of "outline-offset" */
-  String get outlineOffset;
-
-  /** Sets the value of "outline-offset" */
-  void set outlineOffset(var value);
-
-  /** Gets the value of "outline-style" */
-  String get outlineStyle;
-
-  /** Sets the value of "outline-style" */
-  void set outlineStyle(var value);
-
-  /** Gets the value of "outline-width" */
-  String get outlineWidth;
-
-  /** Sets the value of "outline-width" */
-  void set outlineWidth(var value);
-
-  /** Gets the value of "overflow" */
-  String get overflow;
-
-  /** Sets the value of "overflow" */
-  void set overflow(var value);
-
-  /** Gets the value of "overflow-x" */
-  String get overflowX;
-
-  /** Sets the value of "overflow-x" */
-  void set overflowX(var value);
-
-  /** Gets the value of "overflow-y" */
-  String get overflowY;
-
-  /** Sets the value of "overflow-y" */
-  void set overflowY(var value);
-
-  /** Gets the value of "padding" */
-  String get padding;
-
-  /** Sets the value of "padding" */
-  void set padding(var value);
-
-  /** Gets the value of "padding-after" */
-  String get paddingAfter;
-
-  /** Sets the value of "padding-after" */
-  void set paddingAfter(var value);
-
-  /** Gets the value of "padding-before" */
-  String get paddingBefore;
-
-  /** Sets the value of "padding-before" */
-  void set paddingBefore(var value);
-
-  /** Gets the value of "padding-bottom" */
-  String get paddingBottom;
-
-  /** Sets the value of "padding-bottom" */
-  void set paddingBottom(var value);
-
-  /** Gets the value of "padding-end" */
-  String get paddingEnd;
-
-  /** Sets the value of "padding-end" */
-  void set paddingEnd(var value);
-
-  /** Gets the value of "padding-left" */
-  String get paddingLeft;
-
-  /** Sets the value of "padding-left" */
-  void set paddingLeft(var value);
-
-  /** Gets the value of "padding-right" */
-  String get paddingRight;
-
-  /** Sets the value of "padding-right" */
-  void set paddingRight(var value);
-
-  /** Gets the value of "padding-start" */
-  String get paddingStart;
-
-  /** Sets the value of "padding-start" */
-  void set paddingStart(var value);
-
-  /** Gets the value of "padding-top" */
-  String get paddingTop;
-
-  /** Sets the value of "padding-top" */
-  void set paddingTop(var value);
-
-  /** Gets the value of "page" */
-  String get page;
-
-  /** Sets the value of "page" */
-  void set page(var value);
-
-  /** Gets the value of "page-break-after" */
-  String get pageBreakAfter;
-
-  /** Sets the value of "page-break-after" */
-  void set pageBreakAfter(var value);
-
-  /** Gets the value of "page-break-before" */
-  String get pageBreakBefore;
-
-  /** Sets the value of "page-break-before" */
-  void set pageBreakBefore(var value);
-
-  /** Gets the value of "page-break-inside" */
-  String get pageBreakInside;
-
-  /** Sets the value of "page-break-inside" */
-  void set pageBreakInside(var value);
-
-  /** Gets the value of "perspective" */
-  String get perspective;
-
-  /** Sets the value of "perspective" */
-  void set perspective(var value);
-
-  /** Gets the value of "perspective-origin" */
-  String get perspectiveOrigin;
-
-  /** Sets the value of "perspective-origin" */
-  void set perspectiveOrigin(var value);
-
-  /** Gets the value of "perspective-origin-x" */
-  String get perspectiveOriginX;
-
-  /** Sets the value of "perspective-origin-x" */
-  void set perspectiveOriginX(var value);
-
-  /** Gets the value of "perspective-origin-y" */
-  String get perspectiveOriginY;
-
-  /** Sets the value of "perspective-origin-y" */
-  void set perspectiveOriginY(var value);
-
-  /** Gets the value of "pointer-events" */
-  String get pointerEvents;
-
-  /** Sets the value of "pointer-events" */
-  void set pointerEvents(var value);
-
-  /** Gets the value of "position" */
-  String get position;
-
-  /** Sets the value of "position" */
-  void set position(var value);
-
-  /** Gets the value of "quotes" */
-  String get quotes;
-
-  /** Sets the value of "quotes" */
-  void set quotes(var value);
-
-  /** Gets the value of "region-break-after" */
-  String get regionBreakAfter;
-
-  /** Sets the value of "region-break-after" */
-  void set regionBreakAfter(var value);
-
-  /** Gets the value of "region-break-before" */
-  String get regionBreakBefore;
-
-  /** Sets the value of "region-break-before" */
-  void set regionBreakBefore(var value);
-
-  /** Gets the value of "region-break-inside" */
-  String get regionBreakInside;
-
-  /** Sets the value of "region-break-inside" */
-  void set regionBreakInside(var value);
-
-  /** Gets the value of "region-overflow" */
-  String get regionOverflow;
-
-  /** Sets the value of "region-overflow" */
-  void set regionOverflow(var value);
-
-  /** Gets the value of "resize" */
-  String get resize;
-
-  /** Sets the value of "resize" */
-  void set resize(var value);
-
-  /** Gets the value of "right" */
-  String get right;
-
-  /** Sets the value of "right" */
-  void set right(var value);
-
-  /** Gets the value of "rtl-ordering" */
-  String get rtlOrdering;
-
-  /** Sets the value of "rtl-ordering" */
-  void set rtlOrdering(var value);
-
-  /** Gets the value of "size" */
-  String get size;
-
-  /** Sets the value of "size" */
-  void set size(var value);
-
-  /** Gets the value of "speak" */
-  String get speak;
-
-  /** Sets the value of "speak" */
-  void set speak(var value);
-
-  /** Gets the value of "src" */
-  String get src;
-
-  /** Sets the value of "src" */
-  void set src(var value);
-
-  /** Gets the value of "table-layout" */
-  String get tableLayout;
-
-  /** Sets the value of "table-layout" */
-  void set tableLayout(var value);
-
-  /** Gets the value of "tap-highlight-color" */
-  String get tapHighlightColor;
-
-  /** Sets the value of "tap-highlight-color" */
-  void set tapHighlightColor(var value);
-
-  /** Gets the value of "text-align" */
-  String get textAlign;
-
-  /** Sets the value of "text-align" */
-  void set textAlign(var value);
-
-  /** Gets the value of "text-combine" */
-  String get textCombine;
-
-  /** Sets the value of "text-combine" */
-  void set textCombine(var value);
-
-  /** Gets the value of "text-decoration" */
-  String get textDecoration;
-
-  /** Sets the value of "text-decoration" */
-  void set textDecoration(var value);
-
-  /** Gets the value of "text-decorations-in-effect" */
-  String get textDecorationsInEffect;
-
-  /** Sets the value of "text-decorations-in-effect" */
-  void set textDecorationsInEffect(var value);
-
-  /** Gets the value of "text-emphasis" */
-  String get textEmphasis;
-
-  /** Sets the value of "text-emphasis" */
-  void set textEmphasis(var value);
-
-  /** Gets the value of "text-emphasis-color" */
-  String get textEmphasisColor;
-
-  /** Sets the value of "text-emphasis-color" */
-  void set textEmphasisColor(var value);
-
-  /** Gets the value of "text-emphasis-position" */
-  String get textEmphasisPosition;
-
-  /** Sets the value of "text-emphasis-position" */
-  void set textEmphasisPosition(var value);
-
-  /** Gets the value of "text-emphasis-style" */
-  String get textEmphasisStyle;
-
-  /** Sets the value of "text-emphasis-style" */
-  void set textEmphasisStyle(var value);
-
-  /** Gets the value of "text-fill-color" */
-  String get textFillColor;
-
-  /** Sets the value of "text-fill-color" */
-  void set textFillColor(var value);
-
-  /** Gets the value of "text-indent" */
-  String get textIndent;
-
-  /** Sets the value of "text-indent" */
-  void set textIndent(var value);
-
-  /** Gets the value of "text-line-through" */
-  String get textLineThrough;
-
-  /** Sets the value of "text-line-through" */
-  void set textLineThrough(var value);
-
-  /** Gets the value of "text-line-through-color" */
-  String get textLineThroughColor;
-
-  /** Sets the value of "text-line-through-color" */
-  void set textLineThroughColor(var value);
-
-  /** Gets the value of "text-line-through-mode" */
-  String get textLineThroughMode;
-
-  /** Sets the value of "text-line-through-mode" */
-  void set textLineThroughMode(var value);
-
-  /** Gets the value of "text-line-through-style" */
-  String get textLineThroughStyle;
-
-  /** Sets the value of "text-line-through-style" */
-  void set textLineThroughStyle(var value);
-
-  /** Gets the value of "text-line-through-width" */
-  String get textLineThroughWidth;
-
-  /** Sets the value of "text-line-through-width" */
-  void set textLineThroughWidth(var value);
-
-  /** Gets the value of "text-orientation" */
-  String get textOrientation;
-
-  /** Sets the value of "text-orientation" */
-  void set textOrientation(var value);
-
-  /** Gets the value of "text-overflow" */
-  String get textOverflow;
-
-  /** Sets the value of "text-overflow" */
-  void set textOverflow(var value);
-
-  /** Gets the value of "text-overline" */
-  String get textOverline;
-
-  /** Sets the value of "text-overline" */
-  void set textOverline(var value);
-
-  /** Gets the value of "text-overline-color" */
-  String get textOverlineColor;
-
-  /** Sets the value of "text-overline-color" */
-  void set textOverlineColor(var value);
-
-  /** Gets the value of "text-overline-mode" */
-  String get textOverlineMode;
-
-  /** Sets the value of "text-overline-mode" */
-  void set textOverlineMode(var value);
-
-  /** Gets the value of "text-overline-style" */
-  String get textOverlineStyle;
-
-  /** Sets the value of "text-overline-style" */
-  void set textOverlineStyle(var value);
-
-  /** Gets the value of "text-overline-width" */
-  String get textOverlineWidth;
-
-  /** Sets the value of "text-overline-width" */
-  void set textOverlineWidth(var value);
-
-  /** Gets the value of "text-rendering" */
-  String get textRendering;
-
-  /** Sets the value of "text-rendering" */
-  void set textRendering(var value);
-
-  /** Gets the value of "text-security" */
-  String get textSecurity;
-
-  /** Sets the value of "text-security" */
-  void set textSecurity(var value);
-
-  /** Gets the value of "text-shadow" */
-  String get textShadow;
-
-  /** Sets the value of "text-shadow" */
-  void set textShadow(var value);
-
-  /** Gets the value of "text-size-adjust" */
-  String get textSizeAdjust;
-
-  /** Sets the value of "text-size-adjust" */
-  void set textSizeAdjust(var value);
-
-  /** Gets the value of "text-stroke" */
-  String get textStroke;
-
-  /** Sets the value of "text-stroke" */
-  void set textStroke(var value);
-
-  /** Gets the value of "text-stroke-color" */
-  String get textStrokeColor;
-
-  /** Sets the value of "text-stroke-color" */
-  void set textStrokeColor(var value);
-
-  /** Gets the value of "text-stroke-width" */
-  String get textStrokeWidth;
-
-  /** Sets the value of "text-stroke-width" */
-  void set textStrokeWidth(var value);
-
-  /** Gets the value of "text-transform" */
-  String get textTransform;
-
-  /** Sets the value of "text-transform" */
-  void set textTransform(var value);
-
-  /** Gets the value of "text-underline" */
-  String get textUnderline;
-
-  /** Sets the value of "text-underline" */
-  void set textUnderline(var value);
-
-  /** Gets the value of "text-underline-color" */
-  String get textUnderlineColor;
-
-  /** Sets the value of "text-underline-color" */
-  void set textUnderlineColor(var value);
-
-  /** Gets the value of "text-underline-mode" */
-  String get textUnderlineMode;
-
-  /** Sets the value of "text-underline-mode" */
-  void set textUnderlineMode(var value);
-
-  /** Gets the value of "text-underline-style" */
-  String get textUnderlineStyle;
-
-  /** Sets the value of "text-underline-style" */
-  void set textUnderlineStyle(var value);
-
-  /** Gets the value of "text-underline-width" */
-  String get textUnderlineWidth;
-
-  /** Sets the value of "text-underline-width" */
-  void set textUnderlineWidth(var value);
-
-  /** Gets the value of "top" */
-  String get top;
-
-  /** Sets the value of "top" */
-  void set top(var value);
-
-  /** Gets the value of "transform" */
-  String get transform;
-
-  /** Sets the value of "transform" */
-  void set transform(var value);
-
-  /** Gets the value of "transform-origin" */
-  String get transformOrigin;
-
-  /** Sets the value of "transform-origin" */
-  void set transformOrigin(var value);
-
-  /** Gets the value of "transform-origin-x" */
-  String get transformOriginX;
-
-  /** Sets the value of "transform-origin-x" */
-  void set transformOriginX(var value);
-
-  /** Gets the value of "transform-origin-y" */
-  String get transformOriginY;
-
-  /** Sets the value of "transform-origin-y" */
-  void set transformOriginY(var value);
-
-  /** Gets the value of "transform-origin-z" */
-  String get transformOriginZ;
-
-  /** Sets the value of "transform-origin-z" */
-  void set transformOriginZ(var value);
-
-  /** Gets the value of "transform-style" */
-  String get transformStyle;
-
-  /** Sets the value of "transform-style" */
-  void set transformStyle(var value);
-
-  /** Gets the value of "transition" */
-  String get transition;
-
-  /** Sets the value of "transition" */
-  void set transition(var value);
-
-  /** Gets the value of "transition-delay" */
-  String get transitionDelay;
-
-  /** Sets the value of "transition-delay" */
-  void set transitionDelay(var value);
-
-  /** Gets the value of "transition-duration" */
-  String get transitionDuration;
-
-  /** Sets the value of "transition-duration" */
-  void set transitionDuration(var value);
-
-  /** Gets the value of "transition-property" */
-  String get transitionProperty;
-
-  /** Sets the value of "transition-property" */
-  void set transitionProperty(var value);
-
-  /** Gets the value of "transition-timing-function" */
-  String get transitionTimingFunction;
-
-  /** Sets the value of "transition-timing-function" */
-  void set transitionTimingFunction(var value);
-
-  /** Gets the value of "unicode-bidi" */
-  String get unicodeBidi;
-
-  /** Sets the value of "unicode-bidi" */
-  void set unicodeBidi(var value);
-
-  /** Gets the value of "unicode-range" */
-  String get unicodeRange;
-
-  /** Sets the value of "unicode-range" */
-  void set unicodeRange(var value);
-
-  /** Gets the value of "user-drag" */
-  String get userDrag;
-
-  /** Sets the value of "user-drag" */
-  void set userDrag(var value);
-
-  /** Gets the value of "user-modify" */
-  String get userModify;
-
-  /** Sets the value of "user-modify" */
-  void set userModify(var value);
-
-  /** Gets the value of "user-select" */
-  String get userSelect;
-
-  /** Sets the value of "user-select" */
-  void set userSelect(var value);
-
-  /** Gets the value of "vertical-align" */
-  String get verticalAlign;
-
-  /** Sets the value of "vertical-align" */
-  void set verticalAlign(var value);
-
-  /** Gets the value of "visibility" */
-  String get visibility;
-
-  /** Sets the value of "visibility" */
-  void set visibility(var value);
-
-  /** Gets the value of "white-space" */
-  String get whiteSpace;
-
-  /** Sets the value of "white-space" */
-  void set whiteSpace(var value);
-
-  /** Gets the value of "widows" */
-  String get widows;
-
-  /** Sets the value of "widows" */
-  void set widows(var value);
-
-  /** Gets the value of "width" */
-  String get width;
-
-  /** Sets the value of "width" */
-  void set width(var value);
-
-  /** Gets the value of "word-break" */
-  String get wordBreak;
-
-  /** Sets the value of "word-break" */
-  void set wordBreak(var value);
-
-  /** Gets the value of "word-spacing" */
-  String get wordSpacing;
-
-  /** Sets the value of "word-spacing" */
-  void set wordSpacing(var value);
-
-  /** Gets the value of "word-wrap" */
-  String get wordWrap;
-
-  /** Sets the value of "word-wrap" */
-  void set wordWrap(var value);
-
-  /** Gets the value of "wrap-shape" */
-  String get wrapShape;
-
-  /** Sets the value of "wrap-shape" */
-  void set wrapShape(var value);
-
-  /** Gets the value of "writing-mode" */
-  String get writingMode;
-
-  /** Sets the value of "writing-mode" */
-  void set writingMode(var value);
-
-  /** Gets the value of "z-index" */
-  String get zIndex;
-
-  /** Sets the value of "z-index" */
-  void set zIndex(var value);
-
-  /** Gets the value of "zoom" */
-  String get zoom;
-
-  /** Sets the value of "zoom" */
-  void set zoom(var value);
-}
-// 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.
-
 String _cachedBrowserPrefix;
 
 String get _browserPrefix {
@@ -4688,31 +2318,59 @@
   return _cachedBrowserPrefix;
 }
 
-class _CSSStyleDeclarationImpl extends NativeFieldWrapperClass1 implements CSSStyleDeclaration {
+class CSSStyleDeclaration extends NativeFieldWrapperClass1 {
+  factory CSSStyleDeclaration() => _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration();
+  factory CSSStyleDeclaration.css(String css) =>
+      _CSSStyleDeclarationFactoryProvider.createCSSStyleDeclaration_css(css);
+
+  CSSStyleDeclaration.internal();
 
 
+  /** @domName CSSStyleDeclaration.cssText */
   String get cssText native "CSSStyleDeclaration_cssText_Getter";
 
+
+  /** @domName CSSStyleDeclaration.cssText */
   void set cssText(String value) native "CSSStyleDeclaration_cssText_Setter";
 
+
+  /** @domName CSSStyleDeclaration.length */
   int get length native "CSSStyleDeclaration_length_Getter";
 
+
+  /** @domName CSSStyleDeclaration.parentRule */
   CSSRule get parentRule native "CSSStyleDeclaration_parentRule_Getter";
 
+
+  /** @domName CSSStyleDeclaration.getPropertyCSSValue */
   CSSValue getPropertyCSSValue(String propertyName) native "CSSStyleDeclaration_getPropertyCSSValue_Callback";
 
+
+  /** @domName CSSStyleDeclaration.getPropertyPriority */
   String getPropertyPriority(String propertyName) native "CSSStyleDeclaration_getPropertyPriority_Callback";
 
+
+  /** @domName CSSStyleDeclaration.getPropertyShorthand */
   String getPropertyShorthand(String propertyName) native "CSSStyleDeclaration_getPropertyShorthand_Callback";
 
+
+  /** @domName CSSStyleDeclaration._getPropertyValue */
   String _getPropertyValue(String propertyName) native "CSSStyleDeclaration__getPropertyValue_Callback";
 
+
+  /** @domName CSSStyleDeclaration.isPropertyImplicit */
   bool isPropertyImplicit(String propertyName) native "CSSStyleDeclaration_isPropertyImplicit_Callback";
 
+
+  /** @domName CSSStyleDeclaration.item */
   String item(int index) native "CSSStyleDeclaration_item_Callback";
 
+
+  /** @domName CSSStyleDeclaration.removeProperty */
   String removeProperty(String propertyName) native "CSSStyleDeclaration_removeProperty_Callback";
 
+
+  /** @domName CSSStyleDeclaration.setProperty */
   void setProperty(String propertyName, String value, [String priority]) native "CSSStyleDeclaration_setProperty_Callback";
 
 
@@ -7493,26 +5151,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSStyleRule
-abstract class CSSStyleRule implements CSSRule {
+class CSSStyleRule extends CSSRule {
+  CSSStyleRule.internal(): super.internal();
+
 
   /** @domName CSSStyleRule.selectorText */
-  String selectorText;
-
-  /** @domName CSSStyleRule.style */
-  CSSStyleDeclaration get style;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSStyleRuleImpl extends _CSSRuleImpl implements CSSStyleRule {
-
   String get selectorText native "CSSStyleRule_selectorText_Getter";
 
+
+  /** @domName CSSStyleRule.selectorText */
   void set selectorText(String value) native "CSSStyleRule_selectorText_Setter";
 
+
+  /** @domName CSSStyleRule.style */
   CSSStyleDeclaration get style native "CSSStyleRule_style_Getter";
 
 }
@@ -7523,41 +5174,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSStyleSheet
-abstract class CSSStyleSheet implements StyleSheet {
+class CSSStyleSheet extends StyleSheet {
+  CSSStyleSheet.internal(): super.internal();
+
 
   /** @domName CSSStyleSheet.cssRules */
-  List<CSSRule> get cssRules;
-
-  /** @domName CSSStyleSheet.ownerRule */
-  CSSRule get ownerRule;
-
-  /** @domName CSSStyleSheet.rules */
-  List<CSSRule> get rules;
-
-  /** @domName CSSStyleSheet.addRule */
-  int addRule(String selector, String style, [int index]);
-
-  /** @domName CSSStyleSheet.deleteRule */
-  void deleteRule(int index);
-
-  /** @domName CSSStyleSheet.insertRule */
-  int insertRule(String rule, int index);
-
-  /** @domName CSSStyleSheet.removeRule */
-  void removeRule(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSStyleSheetImpl extends _StyleSheetImpl implements CSSStyleSheet {
-
   List<CSSRule> get cssRules native "CSSStyleSheet_cssRules_Getter";
 
+
+  /** @domName CSSStyleSheet.ownerRule */
   CSSRule get ownerRule native "CSSStyleSheet_ownerRule_Getter";
 
+
+  /** @domName CSSStyleSheet.rules */
   List<CSSRule> get rules native "CSSStyleSheet_rules_Getter";
 
   int addRule(/*DOMString*/ selector, /*DOMString*/ style, [/*unsigned long*/ index]) {
@@ -7567,14 +5196,24 @@
     return _addRule_2(selector, style);
   }
 
+
+  /** @domName CSSStyleSheet.addRule_1 */
   int _addRule_1(selector, style, index) native "CSSStyleSheet_addRule_1_Callback";
 
+
+  /** @domName CSSStyleSheet.addRule_2 */
   int _addRule_2(selector, style) native "CSSStyleSheet_addRule_2_Callback";
 
+
+  /** @domName CSSStyleSheet.deleteRule */
   void deleteRule(int index) native "CSSStyleSheet_deleteRule_Callback";
 
+
+  /** @domName CSSStyleSheet.insertRule */
   int insertRule(String rule, int index) native "CSSStyleSheet_insertRule_Callback";
 
+
+  /** @domName CSSStyleSheet.removeRule */
   void removeRule(int index) native "CSSStyleSheet_removeRule_Callback";
 
 }
@@ -7585,7 +5224,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitCSSTransformValue
-abstract class CSSTransformValue implements List<CSSValue> {
+class CSSTransformValue extends _CSSValueList {
+  CSSTransformValue.internal(): super.internal();
 
   static const int CSS_MATRIX = 11;
 
@@ -7629,17 +5269,8 @@
 
   static const int CSS_TRANSLATEZ = 12;
 
+
   /** @domName WebKitCSSTransformValue.operationType */
-  int get operationType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSTransformValueImpl extends _CSSValueListImpl implements CSSTransformValue {
-
   int get operationType native "WebKitCSSTransformValue_operationType_Getter";
 
 }
@@ -7650,15 +5281,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSUnknownRule
-abstract class CSSUnknownRule implements CSSRule {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSUnknownRuleImpl extends _CSSRuleImpl implements CSSUnknownRule {
+class CSSUnknownRule extends CSSRule {
+  CSSUnknownRule.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7668,7 +5292,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CSSValue
-abstract class CSSValue {
+class CSSValue extends NativeFieldWrapperClass1 {
+  CSSValue.internal();
 
   static const int CSS_CUSTOM = 3;
 
@@ -7678,24 +5303,16 @@
 
   static const int CSS_VALUE_LIST = 2;
 
+
   /** @domName CSSValue.cssText */
-  String cssText;
-
-  /** @domName CSSValue.cssValueType */
-  int get cssValueType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CSSValueImpl extends NativeFieldWrapperClass1 implements CSSValue {
-
   String get cssText native "CSSValue_cssText_Getter";
 
+
+  /** @domName CSSValue.cssText */
   void set cssText(String value) native "CSSValue_cssText_Setter";
 
+
+  /** @domName CSSValue.cssValueType */
   int get cssValueType native "CSSValue_cssValueType_Getter";
 
 }
@@ -7703,107 +5320,7 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-class _CSSValueListImpl extends _CSSValueImpl implements List<CSSValue> {
-
-  int get length native "CSSValueList_length_Getter";
-
-  CSSValue operator[](int index) native "CSSValueList_item_Callback";
-
-  void operator[]=(int index, CSSValue value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<CSSValue> mixins.
-  // CSSValue is the element type.
-
-  // From Iterable<CSSValue>:
-
-  Iterator<CSSValue> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<CSSValue>(this);
-  }
-
-  // From Collection<CSSValue>:
-
-  void add(CSSValue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(CSSValue value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<CSSValue> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(CSSValue element) => _Collections.contains(this, element);
-
-  void forEach(void f(CSSValue element)) => _Collections.forEach(this, f);
-
-  Collection map(f(CSSValue element)) => _Collections.map(this, [], f);
-
-  Collection<CSSValue> filter(bool f(CSSValue element)) =>
-     _Collections.filter(this, <CSSValue>[], f);
-
-  bool every(bool f(CSSValue element)) => _Collections.every(this, f);
-
-  bool some(bool f(CSSValue element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<CSSValue>:
-
-  void sort([Comparator<CSSValue> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(CSSValue element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(CSSValue element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  CSSValue get last => this[length - 1];
-
-  CSSValue removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<CSSValue> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <CSSValue>[]);
-
-  // -- end List<CSSValue> mixins.
-
-  CSSValue item(int index) native "CSSValueList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName HTMLCanvasElement
-abstract class CanvasElement implements Element {
+class CanvasElement extends _Element_Merged {
 
   factory CanvasElement({int width, int height}) {
     if (!?width) {
@@ -7814,37 +5331,30 @@
     }
     return _Elements.createCanvasElement(width, height);
   }
+  CanvasElement.internal(): super.internal();
+
 
   /** @domName HTMLCanvasElement.height */
-  int height;
-
-  /** @domName HTMLCanvasElement.width */
-  int width;
-
-  /** @domName HTMLCanvasElement.getContext */
-  Object getContext(String contextId);
-
-  /** @domName HTMLCanvasElement.toDataURL */
-  String toDataURL(String type, [num quality]);
-
-  final CanvasRenderingContext2D context2d;
-}
-// 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 _CanvasElementImpl extends _ElementImpl_Merged implements CanvasElement {
-
   int get height native "HTMLCanvasElement_height_Getter";
 
+
+  /** @domName HTMLCanvasElement.height */
   void set height(int value) native "HTMLCanvasElement_height_Setter";
 
+
+  /** @domName HTMLCanvasElement.width */
   int get width native "HTMLCanvasElement_width_Getter";
 
+
+  /** @domName HTMLCanvasElement.width */
   void set width(int value) native "HTMLCanvasElement_width_Setter";
 
+
+  /** @domName HTMLCanvasElement.getContext */
   Object getContext(String contextId) native "HTMLCanvasElement_getContext_Callback";
 
+
+  /** @domName HTMLCanvasElement.toDataURL */
   String toDataURL(String type, [num quality]) native "HTMLCanvasElement_toDataURL_Callback";
 
 
@@ -7857,19 +5367,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CanvasGradient
-abstract class CanvasGradient {
+class CanvasGradient extends NativeFieldWrapperClass1 {
+  CanvasGradient.internal();
+
 
   /** @domName CanvasGradient.addColorStop */
-  void addColorStop(num offset, String color);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CanvasGradientImpl extends NativeFieldWrapperClass1 implements CanvasGradient {
-
   void addColorStop(num offset, String color) native "CanvasGradient_addColorStop_Callback";
 
 }
@@ -7880,15 +5382,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CanvasPattern
-abstract class CanvasPattern {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CanvasPatternImpl extends NativeFieldWrapperClass1 implements CanvasPattern {
+class CanvasPattern extends NativeFieldWrapperClass1 {
+  CanvasPattern.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7898,346 +5393,207 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CanvasRenderingContext
-abstract class CanvasRenderingContext {
+class CanvasRenderingContext extends NativeFieldWrapperClass1 {
+  CanvasRenderingContext.internal();
+
 
   /** @domName CanvasRenderingContext.canvas */
-  CanvasElement get canvas;
+  CanvasElement get canvas native "CanvasRenderingContext_canvas_Getter";
+
 }
 // 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.
 
-// WARNING: Do not edit - generated code.
+class CanvasRenderingContext2D extends CanvasRenderingContext {
+  CanvasRenderingContext2D.internal(): super.internal();
 
 
-/// @domName CanvasRenderingContext2D
-abstract class CanvasRenderingContext2D implements CanvasRenderingContext {
-
   /** @domName CanvasRenderingContext2D.fillStyle */
-  dynamic fillStyle;
-
-  /** @domName CanvasRenderingContext2D.font */
-  String font;
-
-  /** @domName CanvasRenderingContext2D.globalAlpha */
-  num globalAlpha;
-
-  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
-  String globalCompositeOperation;
-
-  /** @domName CanvasRenderingContext2D.lineCap */
-  String lineCap;
-
-  /** @domName CanvasRenderingContext2D.lineDashOffset */
-  num lineDashOffset;
-
-  /** @domName CanvasRenderingContext2D.lineJoin */
-  String lineJoin;
-
-  /** @domName CanvasRenderingContext2D.lineWidth */
-  num lineWidth;
-
-  /** @domName CanvasRenderingContext2D.miterLimit */
-  num miterLimit;
-
-  /** @domName CanvasRenderingContext2D.shadowBlur */
-  num shadowBlur;
-
-  /** @domName CanvasRenderingContext2D.shadowColor */
-  String shadowColor;
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetX */
-  num shadowOffsetX;
-
-  /** @domName CanvasRenderingContext2D.shadowOffsetY */
-  num shadowOffsetY;
-
-  /** @domName CanvasRenderingContext2D.strokeStyle */
-  dynamic strokeStyle;
-
-  /** @domName CanvasRenderingContext2D.textAlign */
-  String textAlign;
-
-  /** @domName CanvasRenderingContext2D.textBaseline */
-  String textBaseline;
-
-  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
-  num get webkitBackingStorePixelRatio;
-
-  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
-  bool webkitImageSmoothingEnabled;
-
-  /** @domName CanvasRenderingContext2D.webkitLineDash */
-  List webkitLineDash;
-
-  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
-  num webkitLineDashOffset;
-
-  /** @domName CanvasRenderingContext2D.arc */
-  void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise);
-
-  /** @domName CanvasRenderingContext2D.arcTo */
-  void arcTo(num x1, num y1, num x2, num y2, num radius);
-
-  /** @domName CanvasRenderingContext2D.beginPath */
-  void beginPath();
-
-  /** @domName CanvasRenderingContext2D.bezierCurveTo */
-  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y);
-
-  /** @domName CanvasRenderingContext2D.clearRect */
-  void clearRect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.clearShadow */
-  void clearShadow();
-
-  /** @domName CanvasRenderingContext2D.clip */
-  void clip();
-
-  /** @domName CanvasRenderingContext2D.closePath */
-  void closePath();
-
-  /** @domName CanvasRenderingContext2D.createImageData */
-  ImageData createImageData(imagedata_OR_sw, [num sh]);
-
-  /** @domName CanvasRenderingContext2D.createLinearGradient */
-  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1);
-
-  /** @domName CanvasRenderingContext2D.createPattern */
-  CanvasPattern createPattern(canvas_OR_image, String repetitionType);
-
-  /** @domName CanvasRenderingContext2D.createRadialGradient */
-  CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1);
-
-  /** @domName CanvasRenderingContext2D.drawImage */
-  void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh]);
-
-  /** @domName CanvasRenderingContext2D.drawImageFromRect */
-  void drawImageFromRect(ImageElement image, [num sx, num sy, num sw, num sh, num dx, num dy, num dw, num dh, String compositeOperation]);
-
-  /** @domName CanvasRenderingContext2D.fill */
-  void fill();
-
-  /** @domName CanvasRenderingContext2D.fillRect */
-  void fillRect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.fillText */
-  void fillText(String text, num x, num y, [num maxWidth]);
-
-  /** @domName CanvasRenderingContext2D.getImageData */
-  ImageData getImageData(num sx, num sy, num sw, num sh);
-
-  /** @domName CanvasRenderingContext2D.getLineDash */
-  List<num> getLineDash();
-
-  /** @domName CanvasRenderingContext2D.isPointInPath */
-  bool isPointInPath(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.lineTo */
-  void lineTo(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.measureText */
-  TextMetrics measureText(String text);
-
-  /** @domName CanvasRenderingContext2D.moveTo */
-  void moveTo(num x, num y);
-
-  /** @domName CanvasRenderingContext2D.putImageData */
-  void putImageData(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]);
-
-  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
-  void quadraticCurveTo(num cpx, num cpy, num x, num y);
-
-  /** @domName CanvasRenderingContext2D.rect */
-  void rect(num x, num y, num width, num height);
-
-  /** @domName CanvasRenderingContext2D.restore */
-  void restore();
-
-  /** @domName CanvasRenderingContext2D.rotate */
-  void rotate(num angle);
-
-  /** @domName CanvasRenderingContext2D.save */
-  void save();
-
-  /** @domName CanvasRenderingContext2D.scale */
-  void scale(num sx, num sy);
-
-  /** @domName CanvasRenderingContext2D.setAlpha */
-  void setAlpha(num alpha);
-
-  /** @domName CanvasRenderingContext2D.setCompositeOperation */
-  void setCompositeOperation(String compositeOperation);
-
-  /** @domName CanvasRenderingContext2D.setLineCap */
-  void setLineCap(String cap);
-
-  /** @domName CanvasRenderingContext2D.setLineDash */
-  void setLineDash(List<num> dash);
-
-  /** @domName CanvasRenderingContext2D.setLineJoin */
-  void setLineJoin(String join);
-
-  /** @domName CanvasRenderingContext2D.setLineWidth */
-  void setLineWidth(num width);
-
-  /** @domName CanvasRenderingContext2D.setMiterLimit */
-  void setMiterLimit(num limit);
-
-  /** @domName CanvasRenderingContext2D.setShadow */
-  void setShadow(num width, num height, num blur, [c_OR_color_OR_grayLevel_OR_r, num alpha_OR_g_OR_m, num b_OR_y, num a_OR_k, num a]);
-
-  /** @domName CanvasRenderingContext2D.setTransform */
-  void setTransform(num m11, num m12, num m21, num m22, num dx, num dy);
-
-  /** @domName CanvasRenderingContext2D.stroke */
-  void stroke();
-
-  /** @domName CanvasRenderingContext2D.strokeRect */
-  void strokeRect(num x, num y, num width, num height, [num lineWidth]);
-
-  /** @domName CanvasRenderingContext2D.strokeText */
-  void strokeText(String text, num x, num y, [num maxWidth]);
-
-  /** @domName CanvasRenderingContext2D.transform */
-  void transform(num m11, num m12, num m21, num m22, num dx, num dy);
-
-  /** @domName CanvasRenderingContext2D.translate */
-  void translate(num tx, num ty);
-
-  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
-  ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh);
-
-  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD */
-  void webkitPutImageDataHD(ImageData imagedata, num dx, num dy, [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]);
-
-
-  /**
-   * Sets the color used inside shapes.
-   * [r], [g], [b] are 0-255, [a] is 0-1.
-   */
-  void setFillColorRgb(int r, int g, int b, [num a]);
-
-  /**
-   * Sets the color used inside shapes.
-   * [h] is in degrees, 0-360.
-   * [s], [l] are in percent, 0-100.
-   * [a] is 0-1.
-   */
-  void setFillColorHsl(int h, num s, num l, [num a]);
-
-  /**
-   * Sets the color used for stroking shapes.
-   * [r], [g], [b] are 0-255, [a] is 0-1.
-   */
-  void setStrokeColorRgb(int r, int g, int b, [num a]);
-
-  /**
-   * Sets the color used for stroking shapes.
-   * [h] is in degrees, 0-360.
-   * [s], [l] are in percent, 0-100.
-   * [a] is 0-1.
-   */
-  void setStrokeColorHsl(int h, num s, num l, [num a]);
-}
-// 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 _CanvasRenderingContext2DImpl extends _CanvasRenderingContextImpl implements CanvasRenderingContext2D {
-
   dynamic get fillStyle native "CanvasRenderingContext2D_fillStyle_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.fillStyle */
   void set fillStyle(dynamic value) native "CanvasRenderingContext2D_fillStyle_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.font */
   String get font native "CanvasRenderingContext2D_font_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.font */
   void set font(String value) native "CanvasRenderingContext2D_font_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.globalAlpha */
   num get globalAlpha native "CanvasRenderingContext2D_globalAlpha_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.globalAlpha */
   void set globalAlpha(num value) native "CanvasRenderingContext2D_globalAlpha_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
   String get globalCompositeOperation native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.globalCompositeOperation */
   void set globalCompositeOperation(String value) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.lineCap */
   String get lineCap native "CanvasRenderingContext2D_lineCap_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.lineCap */
   void set lineCap(String value) native "CanvasRenderingContext2D_lineCap_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.lineDashOffset */
   num get lineDashOffset native "CanvasRenderingContext2D_lineDashOffset_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.lineDashOffset */
   void set lineDashOffset(num value) native "CanvasRenderingContext2D_lineDashOffset_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.lineJoin */
   String get lineJoin native "CanvasRenderingContext2D_lineJoin_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.lineJoin */
   void set lineJoin(String value) native "CanvasRenderingContext2D_lineJoin_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.lineWidth */
   num get lineWidth native "CanvasRenderingContext2D_lineWidth_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.lineWidth */
   void set lineWidth(num value) native "CanvasRenderingContext2D_lineWidth_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.miterLimit */
   num get miterLimit native "CanvasRenderingContext2D_miterLimit_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.miterLimit */
   void set miterLimit(num value) native "CanvasRenderingContext2D_miterLimit_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowBlur */
   num get shadowBlur native "CanvasRenderingContext2D_shadowBlur_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowBlur */
   void set shadowBlur(num value) native "CanvasRenderingContext2D_shadowBlur_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowColor */
   String get shadowColor native "CanvasRenderingContext2D_shadowColor_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowColor */
   void set shadowColor(String value) native "CanvasRenderingContext2D_shadowColor_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetX */
   num get shadowOffsetX native "CanvasRenderingContext2D_shadowOffsetX_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetX */
   void set shadowOffsetX(num value) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetY */
   num get shadowOffsetY native "CanvasRenderingContext2D_shadowOffsetY_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.shadowOffsetY */
   void set shadowOffsetY(num value) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.strokeStyle */
   dynamic get strokeStyle native "CanvasRenderingContext2D_strokeStyle_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.strokeStyle */
   void set strokeStyle(dynamic value) native "CanvasRenderingContext2D_strokeStyle_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.textAlign */
   String get textAlign native "CanvasRenderingContext2D_textAlign_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.textAlign */
   void set textAlign(String value) native "CanvasRenderingContext2D_textAlign_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.textBaseline */
   String get textBaseline native "CanvasRenderingContext2D_textBaseline_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.textBaseline */
   void set textBaseline(String value) native "CanvasRenderingContext2D_textBaseline_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitBackingStorePixelRatio */
   num get webkitBackingStorePixelRatio native "CanvasRenderingContext2D_webkitBackingStorePixelRatio_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
   bool get webkitImageSmoothingEnabled native "CanvasRenderingContext2D_webkitImageSmoothingEnabled_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitImageSmoothingEnabled */
   void set webkitImageSmoothingEnabled(bool value) native "CanvasRenderingContext2D_webkitImageSmoothingEnabled_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitLineDash */
   List get webkitLineDash native "CanvasRenderingContext2D_webkitLineDash_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitLineDash */
   void set webkitLineDash(List value) native "CanvasRenderingContext2D_webkitLineDash_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
   num get webkitLineDashOffset native "CanvasRenderingContext2D_webkitLineDashOffset_Getter";
 
+
+  /** @domName CanvasRenderingContext2D.webkitLineDashOffset */
   void set webkitLineDashOffset(num value) native "CanvasRenderingContext2D_webkitLineDashOffset_Setter";
 
+
+  /** @domName CanvasRenderingContext2D.arc */
   void arc(num x, num y, num radius, num startAngle, num endAngle, bool anticlockwise) native "CanvasRenderingContext2D_arc_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.arcTo */
   void arcTo(num x1, num y1, num x2, num y2, num radius) native "CanvasRenderingContext2D_arcTo_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.beginPath */
   void beginPath() native "CanvasRenderingContext2D_beginPath_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.bezierCurveTo */
   void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.clearRect */
   void clearRect(num x, num y, num width, num height) native "CanvasRenderingContext2D_clearRect_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.clearShadow */
   void clearShadow() native "CanvasRenderingContext2D_clearShadow_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.clip */
   void clip() native "CanvasRenderingContext2D_clip_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.closePath */
   void closePath() native "CanvasRenderingContext2D_closePath_Callback";
 
   ImageData createImageData(imagedata_OR_sw, [/*float*/ sh]) {
@@ -8250,10 +5606,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.createImageData_1 */
   ImageData _createImageData_1(imagedata_OR_sw) native "CanvasRenderingContext2D_createImageData_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.createImageData_2 */
   ImageData _createImageData_2(imagedata_OR_sw, sh) native "CanvasRenderingContext2D_createImageData_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.createLinearGradient */
   CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
 
   CanvasPattern createPattern(canvas_OR_image, /*DOMString*/ repetitionType) {
@@ -8266,10 +5628,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.createPattern_1 */
   CanvasPattern _createPattern_1(canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.createPattern_2 */
   CanvasPattern _createPattern_2(canvas_OR_image, repetitionType) native "CanvasRenderingContext2D_createPattern_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.createRadialGradient */
   CanvasGradient createRadialGradient(num x0, num y0, num r0, num x1, num y1, num r1) native "CanvasRenderingContext2D_createRadialGradient_Callback";
 
   void drawImage(canvas_OR_image_OR_video, /*float*/ sx_OR_x, /*float*/ sy_OR_y, [/*float*/ sw_OR_width, /*float*/ height_OR_sh, /*float*/ dx, /*float*/ dy, /*float*/ dw, /*float*/ dh]) {
@@ -8312,22 +5680,40 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_1 */
   void _drawImage_1(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_2 */
   void _drawImage_2(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_3 */
   void _drawImage_3(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_3_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_4 */
   void _drawImage_4(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_4_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_5 */
   void _drawImage_5(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_5_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_6 */
   void _drawImage_6(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_6_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_7 */
   void _drawImage_7(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y) native "CanvasRenderingContext2D_drawImage_7_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_8 */
   void _drawImage_8(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh) native "CanvasRenderingContext2D_drawImage_8_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImage_9 */
   void _drawImage_9(canvas_OR_image_OR_video, sx_OR_x, sy_OR_y, sw_OR_width, height_OR_sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImage_9_Callback";
 
   void drawImageFromRect(/*HTMLImageElement*/ image, [/*float*/ sx, /*float*/ sy, /*float*/ sw, /*float*/ sh, /*float*/ dx, /*float*/ dy, /*float*/ dw, /*float*/ dh, /*DOMString*/ compositeOperation]) {
@@ -8370,28 +5756,52 @@
     _drawImageFromRect_10(image);
   }
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_1 */
   void _drawImageFromRect_1(image, sx, sy, sw, sh, dx, dy, dw, dh, compositeOperation) native "CanvasRenderingContext2D_drawImageFromRect_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_2 */
   void _drawImageFromRect_2(image, sx, sy, sw, sh, dx, dy, dw, dh) native "CanvasRenderingContext2D_drawImageFromRect_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_3 */
   void _drawImageFromRect_3(image, sx, sy, sw, sh, dx, dy, dw) native "CanvasRenderingContext2D_drawImageFromRect_3_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_4 */
   void _drawImageFromRect_4(image, sx, sy, sw, sh, dx, dy) native "CanvasRenderingContext2D_drawImageFromRect_4_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_5 */
   void _drawImageFromRect_5(image, sx, sy, sw, sh, dx) native "CanvasRenderingContext2D_drawImageFromRect_5_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_6 */
   void _drawImageFromRect_6(image, sx, sy, sw, sh) native "CanvasRenderingContext2D_drawImageFromRect_6_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_7 */
   void _drawImageFromRect_7(image, sx, sy, sw) native "CanvasRenderingContext2D_drawImageFromRect_7_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_8 */
   void _drawImageFromRect_8(image, sx, sy) native "CanvasRenderingContext2D_drawImageFromRect_8_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_9 */
   void _drawImageFromRect_9(image, sx) native "CanvasRenderingContext2D_drawImageFromRect_9_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.drawImageFromRect_10 */
   void _drawImageFromRect_10(image) native "CanvasRenderingContext2D_drawImageFromRect_10_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.fill */
   void fill() native "CanvasRenderingContext2D_fill_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.fillRect */
   void fillRect(num x, num y, num width, num height) native "CanvasRenderingContext2D_fillRect_Callback";
 
   void fillText(/*DOMString*/ text, /*float*/ x, /*float*/ y, [/*float*/ maxWidth]) {
@@ -8402,20 +5812,36 @@
     _fillText_2(text, x, y);
   }
 
+
+  /** @domName CanvasRenderingContext2D.fillText_1 */
   void _fillText_1(text, x, y, maxWidth) native "CanvasRenderingContext2D_fillText_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.fillText_2 */
   void _fillText_2(text, x, y) native "CanvasRenderingContext2D_fillText_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.getImageData */
   ImageData getImageData(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_getImageData_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.getLineDash */
   List<num> getLineDash() native "CanvasRenderingContext2D_getLineDash_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.isPointInPath */
   bool isPointInPath(num x, num y) native "CanvasRenderingContext2D_isPointInPath_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.lineTo */
   void lineTo(num x, num y) native "CanvasRenderingContext2D_lineTo_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.measureText */
   TextMetrics measureText(String text) native "CanvasRenderingContext2D_measureText_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.moveTo */
   void moveTo(num x, num y) native "CanvasRenderingContext2D_moveTo_Callback";
 
   void putImageData(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
@@ -8430,34 +5856,64 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.putImageData_1 */
   void _putImageData_1(imagedata, dx, dy) native "CanvasRenderingContext2D_putImageData_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.putImageData_2 */
   void _putImageData_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_putImageData_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.quadraticCurveTo */
   void quadraticCurveTo(num cpx, num cpy, num x, num y) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.rect */
   void rect(num x, num y, num width, num height) native "CanvasRenderingContext2D_rect_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.restore */
   void restore() native "CanvasRenderingContext2D_restore_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.rotate */
   void rotate(num angle) native "CanvasRenderingContext2D_rotate_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.save */
   void save() native "CanvasRenderingContext2D_save_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.scale */
   void scale(num sx, num sy) native "CanvasRenderingContext2D_scale_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setAlpha */
   void setAlpha(num alpha) native "CanvasRenderingContext2D_setAlpha_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setCompositeOperation */
   void setCompositeOperation(String compositeOperation) native "CanvasRenderingContext2D_setCompositeOperation_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setLineCap */
   void setLineCap(String cap) native "CanvasRenderingContext2D_setLineCap_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setLineDash */
   void setLineDash(List<num> dash) native "CanvasRenderingContext2D_setLineDash_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setLineJoin */
   void setLineJoin(String join) native "CanvasRenderingContext2D_setLineJoin_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setLineWidth */
   void setLineWidth(num width) native "CanvasRenderingContext2D_setLineWidth_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setMiterLimit */
   void setMiterLimit(num limit) native "CanvasRenderingContext2D_setMiterLimit_Callback";
 
   void setShadow(/*float*/ width, /*float*/ height, /*float*/ blur, [c_OR_color_OR_grayLevel_OR_r, /*float*/ alpha_OR_g_OR_m, /*float*/ b_OR_y, /*float*/ a_OR_k, /*float*/ a]) {
@@ -8492,22 +5948,40 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_1 */
   void _setShadow_1(width, height, blur) native "CanvasRenderingContext2D_setShadow_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_2 */
   void _setShadow_2(width, height, blur, c_OR_color_OR_grayLevel_OR_r) native "CanvasRenderingContext2D_setShadow_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_3 */
   void _setShadow_3(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m) native "CanvasRenderingContext2D_setShadow_3_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_4 */
   void _setShadow_4(width, height, blur, c_OR_color_OR_grayLevel_OR_r) native "CanvasRenderingContext2D_setShadow_4_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_5 */
   void _setShadow_5(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m) native "CanvasRenderingContext2D_setShadow_5_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_6 */
   void _setShadow_6(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k) native "CanvasRenderingContext2D_setShadow_6_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setShadow_7 */
   void _setShadow_7(width, height, blur, c_OR_color_OR_grayLevel_OR_r, alpha_OR_g_OR_m, b_OR_y, a_OR_k, a) native "CanvasRenderingContext2D_setShadow_7_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.setTransform */
   void setTransform(num m11, num m12, num m21, num m22, num dx, num dy) native "CanvasRenderingContext2D_setTransform_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.stroke */
   void stroke() native "CanvasRenderingContext2D_stroke_Callback";
 
   void strokeRect(/*float*/ x, /*float*/ y, /*float*/ width, /*float*/ height, [/*float*/ lineWidth]) {
@@ -8518,8 +5992,12 @@
     _strokeRect_2(x, y, width, height);
   }
 
+
+  /** @domName CanvasRenderingContext2D.strokeRect_1 */
   void _strokeRect_1(x, y, width, height, lineWidth) native "CanvasRenderingContext2D_strokeRect_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.strokeRect_2 */
   void _strokeRect_2(x, y, width, height) native "CanvasRenderingContext2D_strokeRect_2_Callback";
 
   void strokeText(/*DOMString*/ text, /*float*/ x, /*float*/ y, [/*float*/ maxWidth]) {
@@ -8530,14 +6008,24 @@
     _strokeText_2(text, x, y);
   }
 
+
+  /** @domName CanvasRenderingContext2D.strokeText_1 */
   void _strokeText_1(text, x, y, maxWidth) native "CanvasRenderingContext2D_strokeText_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.strokeText_2 */
   void _strokeText_2(text, x, y) native "CanvasRenderingContext2D_strokeText_2_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.transform */
   void transform(num m11, num m12, num m21, num m22, num dx, num dy) native "CanvasRenderingContext2D_transform_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.translate */
   void translate(num tx, num ty) native "CanvasRenderingContext2D_translate_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.webkitGetImageDataHD */
   ImageData webkitGetImageDataHD(num sx, num sy, num sw, num sh) native "CanvasRenderingContext2D_webkitGetImageDataHD_Callback";
 
   void webkitPutImageDataHD(/*ImageData*/ imagedata, /*float*/ dx, /*float*/ dy, [/*float*/ dirtyX, /*float*/ dirtyY, /*float*/ dirtyWidth, /*float*/ dirtyHeight]) {
@@ -8552,23 +6040,47 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD_1 */
   void _webkitPutImageDataHD_1(imagedata, dx, dy) native "CanvasRenderingContext2D_webkitPutImageDataHD_1_Callback";
 
+
+  /** @domName CanvasRenderingContext2D.webkitPutImageDataHD_2 */
   void _webkitPutImageDataHD_2(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native "CanvasRenderingContext2D_webkitPutImageDataHD_2_Callback";
 
 
+  /**
+   * Sets the color used inside shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
   void setFillColorRgb(int r, int g, int b, [num a = 1]) {
     this.fillStyle = 'rgba($r, $g, $b, $a)';
   }
 
+  /**
+   * Sets the color used inside shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
   void setFillColorHsl(int h, num s, num l, [num a = 1]) {
     this.fillStyle = 'hsla($h, $s%, $l%, $a)';
   }
 
+  /**
+   * Sets the color used for stroking shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
   void setStrokeColorRgb(int r, int g, int b, [num a = 1]) {
     this.strokeStyle = 'rgba($r, $g, $b, $a)';
   }
 
+  /**
+   * Sets the color used for stroking shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
   void setStrokeColorHsl(int h, num s, num l, [num a = 1]) {
     this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
   }
@@ -8579,27 +6091,9 @@
 
 // WARNING: Do not edit - generated code.
 
-class _CanvasRenderingContextImpl extends NativeFieldWrapperClass1 implements CanvasRenderingContext {
-
-  CanvasElement get canvas native "CanvasRenderingContext_canvas_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName ChannelMergerNode
-abstract class ChannelMergerNode implements AudioNode {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ChannelMergerNodeImpl extends _AudioNodeImpl implements ChannelMergerNode {
+class ChannelMergerNode extends AudioNode {
+  ChannelMergerNode.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8609,15 +6103,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ChannelSplitterNode
-abstract class ChannelSplitterNode implements AudioNode {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ChannelSplitterNodeImpl extends _AudioNodeImpl implements ChannelSplitterNode {
+class ChannelSplitterNode extends AudioNode {
+  ChannelSplitterNode.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8627,56 +6114,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CharacterData
-abstract class CharacterData implements Node {
+class CharacterData extends Node {
+  CharacterData.internal(): super.internal();
+
 
   /** @domName CharacterData.data */
-  String data;
-
-  /** @domName CharacterData.length */
-  int get length;
-
-  /** @domName CharacterData.appendData */
-  void appendData(String data);
-
-  /** @domName CharacterData.deleteData */
-  void deleteData(int offset, int length);
-
-  /** @domName CharacterData.insertData */
-  void insertData(int offset, String data);
-
-  /** @domName CharacterData.remove */
-  void remove();
-
-  /** @domName CharacterData.replaceData */
-  void replaceData(int offset, int length, String data);
-
-  /** @domName CharacterData.substringData */
-  String substringData(int offset, int length);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CharacterDataImpl extends _NodeImpl implements CharacterData {
-
   String get data native "CharacterData_data_Getter";
 
+
+  /** @domName CharacterData.data */
   void set data(String value) native "CharacterData_data_Setter";
 
+
+  /** @domName CharacterData.length */
   int get length native "CharacterData_length_Getter";
 
+
+  /** @domName CharacterData.appendData */
   void appendData(String data) native "CharacterData_appendData_Callback";
 
+
+  /** @domName CharacterData.deleteData */
   void deleteData(int offset, int length) native "CharacterData_deleteData_Callback";
 
+
+  /** @domName CharacterData.insertData */
   void insertData(int offset, String data) native "CharacterData_insertData_Callback";
 
+
+  /** @domName CharacterData.remove */
   void remove() native "CharacterData_remove_Callback";
 
+
+  /** @domName CharacterData.replaceData */
   void replaceData(int offset, int length, String data) native "CharacterData_replaceData_Callback";
 
+
+  /** @domName CharacterData.substringData */
   String substringData(int offset, int length) native "CharacterData_substringData_Callback";
 
 }
@@ -8687,44 +6161,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ClientRect
-abstract class ClientRect {
+class ClientRect extends NativeFieldWrapperClass1 {
+  ClientRect.internal();
+
 
   /** @domName ClientRect.bottom */
-  num get bottom;
-
-  /** @domName ClientRect.height */
-  num get height;
-
-  /** @domName ClientRect.left */
-  num get left;
-
-  /** @domName ClientRect.right */
-  num get right;
-
-  /** @domName ClientRect.top */
-  num get top;
-
-  /** @domName ClientRect.width */
-  num get width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ClientRectImpl extends NativeFieldWrapperClass1 implements ClientRect {
-
   num get bottom native "ClientRect_bottom_Getter";
 
+
+  /** @domName ClientRect.height */
   num get height native "ClientRect_height_Getter";
 
+
+  /** @domName ClientRect.left */
   num get left native "ClientRect_left_Getter";
 
+
+  /** @domName ClientRect.right */
   num get right native "ClientRect_right_Getter";
 
+
+  /** @domName ClientRect.top */
   num get top native "ClientRect_top_Getter";
 
+
+  /** @domName ClientRect.width */
   num get width native "ClientRect_width_Getter";
 
 }
@@ -8734,160 +6195,52 @@
 
 // WARNING: Do not edit - generated code.
 
-class _ClientRectListImpl extends NativeFieldWrapperClass1 implements List<ClientRect> {
-
-  int get length native "ClientRectList_length_Getter";
-
-  ClientRect operator[](int index) native "ClientRectList_item_Callback";
-
-  void operator[]=(int index, ClientRect value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<ClientRect> mixins.
-  // ClientRect is the element type.
-
-  // From Iterable<ClientRect>:
-
-  Iterator<ClientRect> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<ClientRect>(this);
-  }
-
-  // From Collection<ClientRect>:
-
-  void add(ClientRect value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(ClientRect value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<ClientRect> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(ClientRect element) => _Collections.contains(this, element);
-
-  void forEach(void f(ClientRect element)) => _Collections.forEach(this, f);
-
-  Collection map(f(ClientRect element)) => _Collections.map(this, [], f);
-
-  Collection<ClientRect> filter(bool f(ClientRect element)) =>
-     _Collections.filter(this, <ClientRect>[], f);
-
-  bool every(bool f(ClientRect element)) => _Collections.every(this, f);
-
-  bool some(bool f(ClientRect element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<ClientRect>:
-
-  void sort([Comparator<ClientRect> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(ClientRect element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(ClientRect element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  ClientRect get last => this[length - 1];
-
-  ClientRect removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<ClientRect> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <ClientRect>[]);
-
-  // -- end List<ClientRect> mixins.
-
-  ClientRect item(int index) native "ClientRectList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName Clipboard
-abstract class Clipboard {
+class Clipboard extends NativeFieldWrapperClass1 {
+  Clipboard.internal();
+
 
   /** @domName Clipboard.dropEffect */
-  String dropEffect;
-
-  /** @domName Clipboard.effectAllowed */
-  String effectAllowed;
-
-  /** @domName Clipboard.files */
-  List<File> get files;
-
-  /** @domName Clipboard.items */
-  DataTransferItemList get items;
-
-  /** @domName Clipboard.types */
-  List get types;
-
-  /** @domName Clipboard.clearData */
-  void clearData([String type]);
-
-  /** @domName Clipboard.getData */
-  String getData(String type);
-
-  /** @domName Clipboard.setData */
-  bool setData(String type, String data);
-
-  /** @domName Clipboard.setDragImage */
-  void setDragImage(ImageElement image, int x, int y);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ClipboardImpl extends NativeFieldWrapperClass1 implements Clipboard {
-
   String get dropEffect native "Clipboard_dropEffect_Getter";
 
+
+  /** @domName Clipboard.dropEffect */
   void set dropEffect(String value) native "Clipboard_dropEffect_Setter";
 
+
+  /** @domName Clipboard.effectAllowed */
   String get effectAllowed native "Clipboard_effectAllowed_Getter";
 
+
+  /** @domName Clipboard.effectAllowed */
   void set effectAllowed(String value) native "Clipboard_effectAllowed_Setter";
 
+
+  /** @domName Clipboard.files */
   List<File> get files native "Clipboard_files_Getter";
 
+
+  /** @domName Clipboard.items */
   DataTransferItemList get items native "Clipboard_items_Getter";
 
+
+  /** @domName Clipboard.types */
   List get types native "Clipboard_types_Getter";
 
+
+  /** @domName Clipboard.clearData */
   void clearData([String type]) native "Clipboard_clearData_Callback";
 
+
+  /** @domName Clipboard.getData */
   String getData(String type) native "Clipboard_getData_Callback";
 
+
+  /** @domName Clipboard.setData */
   bool setData(String type, String data) native "Clipboard_setData_Callback";
 
+
+  /** @domName Clipboard.setDragImage */
   void setDragImage(ImageElement image, int x, int y) native "Clipboard_setDragImage_Callback";
 
 }
@@ -8898,29 +6251,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CloseEvent
-abstract class CloseEvent implements Event {
+class CloseEvent extends Event {
+  CloseEvent.internal(): super.internal();
+
 
   /** @domName CloseEvent.code */
-  int get code;
-
-  /** @domName CloseEvent.reason */
-  String get reason;
-
-  /** @domName CloseEvent.wasClean */
-  bool get wasClean;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CloseEventImpl extends _EventImpl implements CloseEvent {
-
   int get code native "CloseEvent_code_Getter";
 
+
+  /** @domName CloseEvent.reason */
   String get reason native "CloseEvent_reason_Getter";
 
+
+  /** @domName CloseEvent.wasClean */
   bool get wasClean native "CloseEvent_wasClean_Getter";
 
 }
@@ -8931,15 +6274,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Comment
-abstract class Comment implements CharacterData {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CommentImpl extends _CharacterDataImpl implements Comment {
+class Comment extends CharacterData {
+  Comment.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8949,24 +6285,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName CompositionEvent
-abstract class CompositionEvent implements UIEvent {
+class CompositionEvent extends UIEvent {
+  CompositionEvent.internal(): super.internal();
+
 
   /** @domName CompositionEvent.data */
-  String get data;
-
-  /** @domName CompositionEvent.initCompositionEvent */
-  void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CompositionEventImpl extends _UIEventImpl implements CompositionEvent {
-
   String get data native "CompositionEvent_data_Getter";
 
+
+  /** @domName CompositionEvent.initCompositionEvent */
   void initCompositionEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native "CompositionEvent_initCompositionEvent_Callback";
 
 }
@@ -8977,119 +6304,91 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Console
-abstract class Console {
+class Console extends NativeFieldWrapperClass1 {
+  Console.internal();
+
 
   /** @domName Console.memory */
-  MemoryInfo get memory;
-
-  /** @domName Console.profiles */
-  List<ScriptProfile> get profiles;
-
-  /** @domName Console.assertCondition */
-  void assertCondition(bool condition, Object arg);
-
-  /** @domName Console.count */
-  void count(Object arg);
-
-  /** @domName Console.debug */
-  void debug(Object arg);
-
-  /** @domName Console.dir */
-  void dir(Object arg);
-
-  /** @domName Console.dirxml */
-  void dirxml(Object arg);
-
-  /** @domName Console.error */
-  void error(Object arg);
-
-  /** @domName Console.group */
-  void group(Object arg);
-
-  /** @domName Console.groupCollapsed */
-  void groupCollapsed(Object arg);
-
-  /** @domName Console.groupEnd */
-  void groupEnd();
-
-  /** @domName Console.info */
-  void info(Object arg);
-
-  /** @domName Console.log */
-  void log(Object arg);
-
-  /** @domName Console.markTimeline */
-  void markTimeline(Object arg);
-
-  /** @domName Console.profile */
-  void profile(String title);
-
-  /** @domName Console.profileEnd */
-  void profileEnd(String title);
-
-  /** @domName Console.time */
-  void time(String title);
-
-  /** @domName Console.timeEnd */
-  void timeEnd(String title, Object arg);
-
-  /** @domName Console.timeStamp */
-  void timeStamp(Object arg);
-
-  /** @domName Console.trace */
-  void trace(Object arg);
-
-  /** @domName Console.warn */
-  void warn(Object arg);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ConsoleImpl extends NativeFieldWrapperClass1 implements Console {
-
   MemoryInfo get memory native "Console_memory_Getter";
 
+
+  /** @domName Console.profiles */
   List<ScriptProfile> get profiles native "Console_profiles_Getter";
 
+
+  /** @domName Console.assertCondition */
   void assertCondition(bool condition, Object arg) native "Console_assertCondition_Callback";
 
+
+  /** @domName Console.count */
   void count(Object arg) native "Console_count_Callback";
 
+
+  /** @domName Console.debug */
   void debug(Object arg) native "Console_debug_Callback";
 
+
+  /** @domName Console.dir */
   void dir(Object arg) native "Console_dir_Callback";
 
+
+  /** @domName Console.dirxml */
   void dirxml(Object arg) native "Console_dirxml_Callback";
 
+
+  /** @domName Console.error */
   void error(Object arg) native "Console_error_Callback";
 
+
+  /** @domName Console.group */
   void group(Object arg) native "Console_group_Callback";
 
+
+  /** @domName Console.groupCollapsed */
   void groupCollapsed(Object arg) native "Console_groupCollapsed_Callback";
 
+
+  /** @domName Console.groupEnd */
   void groupEnd() native "Console_groupEnd_Callback";
 
+
+  /** @domName Console.info */
   void info(Object arg) native "Console_info_Callback";
 
+
+  /** @domName Console.log */
   void log(Object arg) native "Console_log_Callback";
 
+
+  /** @domName Console.markTimeline */
   void markTimeline(Object arg) native "Console_markTimeline_Callback";
 
+
+  /** @domName Console.profile */
   void profile(String title) native "Console_profile_Callback";
 
+
+  /** @domName Console.profileEnd */
   void profileEnd(String title) native "Console_profileEnd_Callback";
 
+
+  /** @domName Console.time */
   void time(String title) native "Console_time_Callback";
 
+
+  /** @domName Console.timeEnd */
   void timeEnd(String title, Object arg) native "Console_timeEnd_Callback";
 
+
+  /** @domName Console.timeStamp */
   void timeStamp(Object arg) native "Console_timeStamp_Callback";
 
+
+  /** @domName Console.trace */
   void trace(Object arg) native "Console_trace_Callback";
 
+
+  /** @domName Console.warn */
   void warn(Object arg) native "Console_warn_Callback";
 
 }
@@ -9100,35 +6399,29 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLContentElement
-abstract class ContentElement implements Element {
+class ContentElement extends _Element_Merged {
 
   factory ContentElement() => _Elements.createContentElement();
+  ContentElement.internal(): super.internal();
+
 
   /** @domName HTMLContentElement.resetStyleInheritance */
-  bool resetStyleInheritance;
-
-  /** @domName HTMLContentElement.select */
-  String select;
-
-  /** @domName HTMLContentElement.getDistributedNodes */
-  List<Node> getDistributedNodes();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ContentElementImpl extends _ElementImpl_Merged implements ContentElement {
-
   bool get resetStyleInheritance native "HTMLContentElement_resetStyleInheritance_Getter";
 
+
+  /** @domName HTMLContentElement.resetStyleInheritance */
   void set resetStyleInheritance(bool value) native "HTMLContentElement_resetStyleInheritance_Setter";
 
+
+  /** @domName HTMLContentElement.select */
   String get select native "HTMLContentElement_select_Getter";
 
+
+  /** @domName HTMLContentElement.select */
   void set select(String value) native "HTMLContentElement_select_Setter";
 
+
+  /** @domName HTMLContentElement.getDistributedNodes */
   List<Node> getDistributedNodes() native "HTMLContentElement_getDistributedNodes_Callback";
 
 }
@@ -9139,28 +6432,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ConvolverNode
-abstract class ConvolverNode implements AudioNode {
+class ConvolverNode extends AudioNode {
+  ConvolverNode.internal(): super.internal();
+
 
   /** @domName ConvolverNode.buffer */
-  AudioBuffer buffer;
-
-  /** @domName ConvolverNode.normalize */
-  bool normalize;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ConvolverNodeImpl extends _AudioNodeImpl implements ConvolverNode {
-
   AudioBuffer get buffer native "ConvolverNode_buffer_Getter";
 
+
+  /** @domName ConvolverNode.buffer */
   void set buffer(AudioBuffer value) native "ConvolverNode_buffer_Setter";
 
+
+  /** @domName ConvolverNode.normalize */
   bool get normalize native "ConvolverNode_normalize_Getter";
 
+
+  /** @domName ConvolverNode.normalize */
   void set normalize(bool value) native "ConvolverNode_normalize_Setter";
 
 }
@@ -9171,49 +6459,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Coordinates
-abstract class Coordinates {
+class Coordinates extends NativeFieldWrapperClass1 {
+  Coordinates.internal();
+
 
   /** @domName Coordinates.accuracy */
-  num get accuracy;
-
-  /** @domName Coordinates.altitude */
-  num get altitude;
-
-  /** @domName Coordinates.altitudeAccuracy */
-  num get altitudeAccuracy;
-
-  /** @domName Coordinates.heading */
-  num get heading;
-
-  /** @domName Coordinates.latitude */
-  num get latitude;
-
-  /** @domName Coordinates.longitude */
-  num get longitude;
-
-  /** @domName Coordinates.speed */
-  num get speed;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CoordinatesImpl extends NativeFieldWrapperClass1 implements Coordinates {
-
   num get accuracy native "Coordinates_accuracy_Getter";
 
+
+  /** @domName Coordinates.altitude */
   num get altitude native "Coordinates_altitude_Getter";
 
+
+  /** @domName Coordinates.altitudeAccuracy */
   num get altitudeAccuracy native "Coordinates_altitudeAccuracy_Getter";
 
+
+  /** @domName Coordinates.heading */
   num get heading native "Coordinates_heading_Getter";
 
+
+  /** @domName Coordinates.latitude */
   num get latitude native "Coordinates_latitude_Getter";
 
+
+  /** @domName Coordinates.longitude */
   num get longitude native "Coordinates_longitude_Getter";
 
+
+  /** @domName Coordinates.speed */
   num get speed native "Coordinates_speed_Getter";
 
 }
@@ -9224,29 +6498,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Counter
-abstract class Counter {
+class Counter extends NativeFieldWrapperClass1 {
+  Counter.internal();
+
 
   /** @domName Counter.identifier */
-  String get identifier;
-
-  /** @domName Counter.listStyle */
-  String get listStyle;
-
-  /** @domName Counter.separator */
-  String get separator;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CounterImpl extends NativeFieldWrapperClass1 implements Counter {
-
   String get identifier native "Counter_identifier_Getter";
 
+
+  /** @domName Counter.listStyle */
   String get listStyle native "Counter_listStyle_Getter";
 
+
+  /** @domName Counter.separator */
   String get separator native "Counter_separator_Getter";
 
 }
@@ -9257,19 +6521,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Crypto
-abstract class Crypto {
+class Crypto extends NativeFieldWrapperClass1 {
+  Crypto.internal();
+
 
   /** @domName Crypto.getRandomValues */
-  void getRandomValues(ArrayBufferView array);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CryptoImpl extends NativeFieldWrapperClass1 implements Crypto {
-
   void getRandomValues(ArrayBufferView array) native "Crypto_getRandomValues_Callback";
 
 }
@@ -9279,31 +6535,18 @@
 
 // WARNING: Do not edit - generated code.
 
-
-/// @domName CustomEvent
-abstract class CustomEvent implements Event {
-
+class CustomEvent extends Event {
   factory CustomEvent(String type, [bool canBubble = true, bool cancelable = true,
-      Object detail = null]) => _CustomEventFactoryProvider.createCustomEvent(type, canBubble,
-      cancelable, detail);
+      Object detail]) => _CustomEventFactoryProvider.createCustomEvent(
+      type, canBubble, cancelable, detail);
+  CustomEvent.internal(): super.internal();
 
 
   /** @domName CustomEvent.detail */
-  Object get detail;
-
-  /** @domName CustomEvent.initCustomEvent */
-  void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _CustomEventImpl extends _EventImpl implements CustomEvent {
-
   Object get detail native "CustomEvent_detail_Getter";
 
+
+  /** @domName CustomEvent.initCustomEvent */
   void $dom_initCustomEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object detailArg) native "CustomEvent_initCustomEvent_Callback";
 
 }
@@ -9314,23 +6557,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLDListElement
-abstract class DListElement implements Element {
+class DListElement extends _Element_Merged {
 
   factory DListElement() => _Elements.createDListElement();
+  DListElement.internal(): super.internal();
+
 
   /** @domName HTMLDListElement.compact */
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DListElementImpl extends _ElementImpl_Merged implements DListElement {
-
   bool get compact native "HTMLDListElement_compact_Getter";
 
+
+  /** @domName HTMLDListElement.compact */
   void set compact(bool value) native "HTMLDListElement_compact_Setter";
 
 }
@@ -9341,12 +6578,14 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMApplicationCache
-abstract class DOMApplicationCache implements EventTarget {
+class DOMApplicationCache extends EventTarget {
+  DOMApplicationCache.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  DOMApplicationCacheEvents get on;
+  DOMApplicationCacheEvents get on =>
+    new DOMApplicationCacheEvents(this);
 
   static const int CHECKING = 2;
 
@@ -9360,75 +6599,38 @@
 
   static const int UPDATEREADY = 4;
 
+
   /** @domName DOMApplicationCache.status */
-  int get status;
-
-  /** @domName DOMApplicationCache.abort */
-  void abort();
-
-  /** @domName DOMApplicationCache.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName DOMApplicationCache.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName DOMApplicationCache.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName DOMApplicationCache.swapCache */
-  void swapCache();
-
-  /** @domName DOMApplicationCache.update */
-  void update();
-}
-
-abstract class DOMApplicationCacheEvents implements Events {
-
-  EventListenerList get cached;
-
-  EventListenerList get checking;
-
-  EventListenerList get downloading;
-
-  EventListenerList get error;
-
-  EventListenerList get noUpdate;
-
-  EventListenerList get obsolete;
-
-  EventListenerList get progress;
-
-  EventListenerList get updateReady;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMApplicationCacheImpl extends _EventTargetImpl implements DOMApplicationCache {
-
-  _DOMApplicationCacheEventsImpl get on =>
-    new _DOMApplicationCacheEventsImpl(this);
-
   int get status native "DOMApplicationCache_status_Getter";
 
+
+  /** @domName DOMApplicationCache.abort */
   void abort() native "DOMApplicationCache_abort_Callback";
 
+
+  /** @domName DOMApplicationCache.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "DOMApplicationCache_addEventListener_Callback";
 
+
+  /** @domName DOMApplicationCache.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "DOMApplicationCache_dispatchEvent_Callback";
 
+
+  /** @domName DOMApplicationCache.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMApplicationCache_removeEventListener_Callback";
 
+
+  /** @domName DOMApplicationCache.swapCache */
   void swapCache() native "DOMApplicationCache_swapCache_Callback";
 
+
+  /** @domName DOMApplicationCache.update */
   void update() native "DOMApplicationCache_update_Callback";
 
 }
 
-class _DOMApplicationCacheEventsImpl extends _EventsImpl implements DOMApplicationCacheEvents {
-  _DOMApplicationCacheEventsImpl(_ptr) : super(_ptr);
+class DOMApplicationCacheEvents extends Events {
+  DOMApplicationCacheEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get cached => this['cached'];
 
@@ -9453,19 +6655,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMError
-abstract class DOMError {
+class DOMError extends NativeFieldWrapperClass1 {
+  DOMError.internal();
+
 
   /** @domName DOMError.name */
-  String get name;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMErrorImpl extends NativeFieldWrapperClass1 implements DOMError {
-
   String get name native "DOMError_name_Getter";
 
 }
@@ -9476,7 +6670,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMException
-abstract class DOMException {
+class DOMException extends NativeFieldWrapperClass1 {
+  DOMException.internal();
 
   static const int ABORT_ERR = 20;
 
@@ -9528,32 +6723,20 @@
 
   static const int WRONG_DOCUMENT_ERR = 4;
 
-  /** @domName DOMException.code */
-  int get code;
 
-  /** @domName DOMException.message */
-  String get message;
-
-  /** @domName DOMException.name */
-  String get name;
-
-  /** @domName DOMException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMExceptionImpl extends NativeFieldWrapperClass1 implements DOMException {
-
+  /** @domName DOMCoreException.code */
   int get code native "DOMCoreException_code_Getter";
 
+
+  /** @domName DOMCoreException.message */
   String get message native "DOMCoreException_message_Getter";
 
+
+  /** @domName DOMCoreException.name */
   String get name native "DOMCoreException_name_Getter";
 
+
+  /** @domName DOMCoreException.toString */
   String toString() native "DOMCoreException_toString_Callback";
 
 }
@@ -9564,24 +6747,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMFileSystem
-abstract class DOMFileSystem {
+class DOMFileSystem extends NativeFieldWrapperClass1 {
+  DOMFileSystem.internal();
+
 
   /** @domName DOMFileSystem.name */
-  String get name;
-
-  /** @domName DOMFileSystem.root */
-  DirectoryEntry get root;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMFileSystemImpl extends NativeFieldWrapperClass1 implements DOMFileSystem {
-
   String get name native "DOMFileSystem_name_Getter";
 
+
+  /** @domName DOMFileSystem.root */
   DirectoryEntry get root native "DOMFileSystem_root_Getter";
 
 }
@@ -9592,24 +6766,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMFileSystemSync
-abstract class DOMFileSystemSync {
+class DOMFileSystemSync extends NativeFieldWrapperClass1 {
+  DOMFileSystemSync.internal();
+
 
   /** @domName DOMFileSystemSync.name */
-  String get name;
-
-  /** @domName DOMFileSystemSync.root */
-  DirectoryEntrySync get root;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMFileSystemSyncImpl extends NativeFieldWrapperClass1 implements DOMFileSystemSync {
-
   String get name native "DOMFileSystemSync_name_Getter";
 
+
+  /** @domName DOMFileSystemSync.root */
   DirectoryEntrySync get root native "DOMFileSystemSync_root_Getter";
 
 }
@@ -9620,39 +6785,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMImplementation
-abstract class DOMImplementation {
+class DOMImplementation extends NativeFieldWrapperClass1 {
+  DOMImplementation.internal();
+
 
   /** @domName DOMImplementation.createCSSStyleSheet */
-  CSSStyleSheet createCSSStyleSheet(String title, String media);
-
-  /** @domName DOMImplementation.createDocument */
-  Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype);
-
-  /** @domName DOMImplementation.createDocumentType */
-  DocumentType createDocumentType(String qualifiedName, String publicId, String systemId);
-
-  /** @domName DOMImplementation.createHTMLDocument */
-  Document createHTMLDocument(String title);
-
-  /** @domName DOMImplementation.hasFeature */
-  bool hasFeature(String feature, String version);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMImplementationImpl extends NativeFieldWrapperClass1 implements DOMImplementation {
-
   CSSStyleSheet createCSSStyleSheet(String title, String media) native "DOMImplementation_createCSSStyleSheet_Callback";
 
+
+  /** @domName DOMImplementation.createDocument */
   Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) native "DOMImplementation_createDocument_Callback";
 
+
+  /** @domName DOMImplementation.createDocumentType */
   DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) native "DOMImplementation_createDocumentType_Callback";
 
+
+  /** @domName DOMImplementation.createHTMLDocument */
   Document createHTMLDocument(String title) native "DOMImplementation_createHTMLDocument_Callback";
 
+
+  /** @domName DOMImplementation.hasFeature */
   bool hasFeature(String feature, String version) native "DOMImplementation_hasFeature_Callback";
 
 }
@@ -9663,19 +6816,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MimeType
-abstract class DOMMimeType {
+class DOMMimeType extends NativeFieldWrapperClass1 {
+  DOMMimeType.internal();
 
-  /** @domName MimeType.description */
-  String get description;
 
-  /** @domName MimeType.enabledPlugin */
-  DOMPlugin get enabledPlugin;
+  /** @domName DOMMimeType.description */
+  String get description native "DOMMimeType_description_Getter";
 
-  /** @domName MimeType.suffixes */
-  String get suffixes;
 
-  /** @domName MimeType.type */
-  String get type;
+  /** @domName DOMMimeType.enabledPlugin */
+  DOMPlugin get enabledPlugin native "DOMMimeType_enabledPlugin_Getter";
+
+
+  /** @domName DOMMimeType.suffixes */
+  String get suffixes native "DOMMimeType_suffixes_Getter";
+
+
+  /** @domName DOMMimeType.type */
+  String get type native "DOMMimeType_type_Getter";
+
 }
 // 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
@@ -9684,25 +6843,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MimeTypeArray
-abstract class DOMMimeTypeArray implements List<DOMMimeType> {
+class DOMMimeTypeArray extends NativeFieldWrapperClass1 implements List<DOMMimeType> {
+  DOMMimeTypeArray.internal();
 
-  /** @domName MimeTypeArray.length */
-  int get length;
 
-  /** @domName MimeTypeArray.item */
-  DOMMimeType item(int index);
-
-  /** @domName MimeTypeArray.namedItem */
-  DOMMimeType namedItem(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMMimeTypeArrayImpl extends NativeFieldWrapperClass1 implements DOMMimeTypeArray {
-
+  /** @domName DOMMimeTypeArray.length */
   int get length native "DOMMimeTypeArray_length_Getter";
 
   DOMMimeType operator[](int index) native "DOMMimeTypeArray_item_Callback";
@@ -9788,8 +6933,12 @@
 
   // -- end List<DOMMimeType> mixins.
 
+
+  /** @domName DOMMimeTypeArray.item */
   DOMMimeType item(int index) native "DOMMimeTypeArray_item_Callback";
 
+
+  /** @domName DOMMimeTypeArray.namedItem */
   DOMMimeType namedItem(String name) native "DOMMimeTypeArray_namedItem_Callback";
 
 }
@@ -9799,39 +6948,14 @@
 
 // WARNING: Do not edit - generated code.
 
-class _DOMMimeTypeImpl extends NativeFieldWrapperClass1 implements DOMMimeType {
-
-  String get description native "DOMMimeType_description_Getter";
-
-  DOMPlugin get enabledPlugin native "DOMMimeType_enabledPlugin_Getter";
-
-  String get suffixes native "DOMMimeType_suffixes_Getter";
-
-  String get type native "DOMMimeType_type_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName DOMParser
-abstract class DOMParser {
+class DOMParser extends NativeFieldWrapperClass1 {
 
   factory DOMParser() => _DOMParserFactoryProvider.createDOMParser();
+  DOMParser.internal();
+
 
   /** @domName DOMParser.parseFromString */
-  Document parseFromString(String str, String contentType);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMParserImpl extends NativeFieldWrapperClass1 implements DOMParser {
-
   Document parseFromString(String str, String contentType) native "DOMParser_parseFromString_Callback";
 
 }
@@ -9842,25 +6966,33 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Plugin
-abstract class DOMPlugin {
+class DOMPlugin extends NativeFieldWrapperClass1 {
+  DOMPlugin.internal();
 
-  /** @domName Plugin.description */
-  String get description;
 
-  /** @domName Plugin.filename */
-  String get filename;
+  /** @domName DOMPlugin.description */
+  String get description native "DOMPlugin_description_Getter";
 
-  /** @domName Plugin.length */
-  int get length;
 
-  /** @domName Plugin.name */
-  String get name;
+  /** @domName DOMPlugin.filename */
+  String get filename native "DOMPlugin_filename_Getter";
 
-  /** @domName Plugin.item */
-  DOMMimeType item(int index);
 
-  /** @domName Plugin.namedItem */
-  DOMMimeType namedItem(String name);
+  /** @domName DOMPlugin.length */
+  int get length native "DOMPlugin_length_Getter";
+
+
+  /** @domName DOMPlugin.name */
+  String get name native "DOMPlugin_name_Getter";
+
+
+  /** @domName DOMPlugin.item */
+  DOMMimeType item(int index) native "DOMPlugin_item_Callback";
+
+
+  /** @domName DOMPlugin.namedItem */
+  DOMMimeType namedItem(String name) native "DOMPlugin_namedItem_Callback";
+
 }
 // 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
@@ -9869,28 +7001,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PluginArray
-abstract class DOMPluginArray implements List<DOMPlugin> {
+class DOMPluginArray extends NativeFieldWrapperClass1 implements List<DOMPlugin> {
+  DOMPluginArray.internal();
 
-  /** @domName PluginArray.length */
-  int get length;
 
-  /** @domName PluginArray.item */
-  DOMPlugin item(int index);
-
-  /** @domName PluginArray.namedItem */
-  DOMPlugin namedItem(String name);
-
-  /** @domName PluginArray.refresh */
-  void refresh(bool reload);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMPluginArrayImpl extends NativeFieldWrapperClass1 implements DOMPluginArray {
-
+  /** @domName DOMPluginArray.length */
   int get length native "DOMPluginArray_length_Getter";
 
   DOMPlugin operator[](int index) native "DOMPluginArray_item_Callback";
@@ -9976,10 +7091,16 @@
 
   // -- end List<DOMPlugin> mixins.
 
+
+  /** @domName DOMPluginArray.item */
   DOMPlugin item(int index) native "DOMPluginArray_item_Callback";
 
+
+  /** @domName DOMPluginArray.namedItem */
   DOMPlugin namedItem(String name) native "DOMPluginArray_namedItem_Callback";
 
+
+  /** @domName DOMPluginArray.refresh */
   void refresh(bool reload) native "DOMPluginArray_refresh_Callback";
 
 }
@@ -9989,166 +7110,112 @@
 
 // WARNING: Do not edit - generated code.
 
-class _DOMPluginImpl extends NativeFieldWrapperClass1 implements DOMPlugin {
-
-  String get description native "DOMPlugin_description_Getter";
-
-  String get filename native "DOMPlugin_filename_Getter";
-
-  int get length native "DOMPlugin_length_Getter";
-
-  String get name native "DOMPlugin_name_Getter";
-
-  DOMMimeType item(int index) native "DOMPlugin_item_Callback";
-
-  DOMMimeType namedItem(String name) native "DOMPlugin_namedItem_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName Selection
-abstract class DOMSelection {
+class DOMSelection extends NativeFieldWrapperClass1 {
+  DOMSelection.internal();
 
-  /** @domName Selection.anchorNode */
-  Node get anchorNode;
 
-  /** @domName Selection.anchorOffset */
-  int get anchorOffset;
-
-  /** @domName Selection.baseNode */
-  Node get baseNode;
-
-  /** @domName Selection.baseOffset */
-  int get baseOffset;
-
-  /** @domName Selection.extentNode */
-  Node get extentNode;
-
-  /** @domName Selection.extentOffset */
-  int get extentOffset;
-
-  /** @domName Selection.focusNode */
-  Node get focusNode;
-
-  /** @domName Selection.focusOffset */
-  int get focusOffset;
-
-  /** @domName Selection.isCollapsed */
-  bool get isCollapsed;
-
-  /** @domName Selection.rangeCount */
-  int get rangeCount;
-
-  /** @domName Selection.type */
-  String get type;
-
-  /** @domName Selection.addRange */
-  void addRange(Range range);
-
-  /** @domName Selection.collapse */
-  void collapse(Node node, int index);
-
-  /** @domName Selection.collapseToEnd */
-  void collapseToEnd();
-
-  /** @domName Selection.collapseToStart */
-  void collapseToStart();
-
-  /** @domName Selection.containsNode */
-  bool containsNode(Node node, bool allowPartial);
-
-  /** @domName Selection.deleteFromDocument */
-  void deleteFromDocument();
-
-  /** @domName Selection.empty */
-  void empty();
-
-  /** @domName Selection.extend */
-  void extend(Node node, int offset);
-
-  /** @domName Selection.getRangeAt */
-  Range getRangeAt(int index);
-
-  /** @domName Selection.modify */
-  void modify(String alter, String direction, String granularity);
-
-  /** @domName Selection.removeAllRanges */
-  void removeAllRanges();
-
-  /** @domName Selection.selectAllChildren */
-  void selectAllChildren(Node node);
-
-  /** @domName Selection.setBaseAndExtent */
-  void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset);
-
-  /** @domName Selection.setPosition */
-  void setPosition(Node node, int offset);
-
-  /** @domName Selection.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMSelectionImpl extends NativeFieldWrapperClass1 implements DOMSelection {
-
+  /** @domName DOMSelection.anchorNode */
   Node get anchorNode native "DOMSelection_anchorNode_Getter";
 
+
+  /** @domName DOMSelection.anchorOffset */
   int get anchorOffset native "DOMSelection_anchorOffset_Getter";
 
+
+  /** @domName DOMSelection.baseNode */
   Node get baseNode native "DOMSelection_baseNode_Getter";
 
+
+  /** @domName DOMSelection.baseOffset */
   int get baseOffset native "DOMSelection_baseOffset_Getter";
 
+
+  /** @domName DOMSelection.extentNode */
   Node get extentNode native "DOMSelection_extentNode_Getter";
 
+
+  /** @domName DOMSelection.extentOffset */
   int get extentOffset native "DOMSelection_extentOffset_Getter";
 
+
+  /** @domName DOMSelection.focusNode */
   Node get focusNode native "DOMSelection_focusNode_Getter";
 
+
+  /** @domName DOMSelection.focusOffset */
   int get focusOffset native "DOMSelection_focusOffset_Getter";
 
+
+  /** @domName DOMSelection.isCollapsed */
   bool get isCollapsed native "DOMSelection_isCollapsed_Getter";
 
+
+  /** @domName DOMSelection.rangeCount */
   int get rangeCount native "DOMSelection_rangeCount_Getter";
 
+
+  /** @domName DOMSelection.type */
   String get type native "DOMSelection_type_Getter";
 
+
+  /** @domName DOMSelection.addRange */
   void addRange(Range range) native "DOMSelection_addRange_Callback";
 
+
+  /** @domName DOMSelection.collapse */
   void collapse(Node node, int index) native "DOMSelection_collapse_Callback";
 
+
+  /** @domName DOMSelection.collapseToEnd */
   void collapseToEnd() native "DOMSelection_collapseToEnd_Callback";
 
+
+  /** @domName DOMSelection.collapseToStart */
   void collapseToStart() native "DOMSelection_collapseToStart_Callback";
 
+
+  /** @domName DOMSelection.containsNode */
   bool containsNode(Node node, bool allowPartial) native "DOMSelection_containsNode_Callback";
 
+
+  /** @domName DOMSelection.deleteFromDocument */
   void deleteFromDocument() native "DOMSelection_deleteFromDocument_Callback";
 
+
+  /** @domName DOMSelection.empty */
   void empty() native "DOMSelection_empty_Callback";
 
+
+  /** @domName DOMSelection.extend */
   void extend(Node node, int offset) native "DOMSelection_extend_Callback";
 
+
+  /** @domName DOMSelection.getRangeAt */
   Range getRangeAt(int index) native "DOMSelection_getRangeAt_Callback";
 
+
+  /** @domName DOMSelection.modify */
   void modify(String alter, String direction, String granularity) native "DOMSelection_modify_Callback";
 
+
+  /** @domName DOMSelection.removeAllRanges */
   void removeAllRanges() native "DOMSelection_removeAllRanges_Callback";
 
+
+  /** @domName DOMSelection.selectAllChildren */
   void selectAllChildren(Node node) native "DOMSelection_selectAllChildren_Callback";
 
+
+  /** @domName DOMSelection.setBaseAndExtent */
   void setBaseAndExtent(Node baseNode, int baseOffset, Node extentNode, int extentOffset) native "DOMSelection_setBaseAndExtent_Callback";
 
+
+  /** @domName DOMSelection.setPosition */
   void setPosition(Node node, int offset) native "DOMSelection_setPosition_Callback";
 
+
+  /** @domName DOMSelection.toString */
   String toString() native "DOMSelection_toString_Callback";
 
 }
@@ -10159,21 +7226,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMSettableTokenList
-abstract class DOMSettableTokenList implements DOMTokenList {
+class DOMSettableTokenList extends DOMTokenList {
+  DOMSettableTokenList.internal(): super.internal();
+
 
   /** @domName DOMSettableTokenList.value */
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMSettableTokenListImpl extends _DOMTokenListImpl implements DOMSettableTokenList {
-
   String get value native "DOMSettableTokenList_value_Getter";
 
+
+  /** @domName DOMSettableTokenList.value */
   void set value(String value) native "DOMSettableTokenList_value_Setter";
 
 }
@@ -10183,106 +7244,10 @@
 
 // WARNING: Do not edit - generated code.
 
-class _DOMStringListImpl extends NativeFieldWrapperClass1 implements List<String> {
-
-  int get length native "DOMStringList_length_Getter";
-
-  String operator[](int index) native "DOMStringList_item_Callback";
-
-  void operator[]=(int index, String value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<String> mixins.
-  // String is the element type.
-
-  // From Iterable<String>:
-
-  Iterator<String> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<String>(this);
-  }
-
-  // From Collection<String>:
-
-  void add(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(String value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<String> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  // contains() defined by IDL.
-
-  void forEach(void f(String element)) => _Collections.forEach(this, f);
-
-  Collection map(f(String element)) => _Collections.map(this, [], f);
-
-  Collection<String> filter(bool f(String element)) =>
-     _Collections.filter(this, <String>[], f);
-
-  bool every(bool f(String element)) => _Collections.every(this, f);
-
-  bool some(bool f(String element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<String>:
-
-  void sort([Comparator<String> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(String element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(String element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  String get last => this[length - 1];
-
-  String removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [String initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<String> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <String>[]);
-
-  // -- end List<String> mixins.
-
-  bool contains(String string) native "DOMStringList_contains_Callback";
-
-  String item(int index) native "DOMStringList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName DOMStringMap
-abstract class DOMStringMap {
+class DOMStringMap extends NativeFieldWrapperClass1 {
+  DOMStringMap.internal();
+
 }
 // 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
@@ -10291,37 +7256,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DOMTokenList
-abstract class DOMTokenList {
+class DOMTokenList extends NativeFieldWrapperClass1 {
+  DOMTokenList.internal();
+
 
   /** @domName DOMTokenList.length */
-  int get length;
-
-  /** @domName DOMTokenList.contains */
-  bool contains(String token);
-
-  /** @domName DOMTokenList.item */
-  String item(int index);
-
-  /** @domName DOMTokenList.toString */
-  String toString();
-
-  /** @domName DOMTokenList.toggle */
-  bool toggle(String token, [bool force]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMTokenListImpl extends NativeFieldWrapperClass1 implements DOMTokenList {
-
   int get length native "DOMTokenList_length_Getter";
 
+
+  /** @domName DOMTokenList.contains */
   bool contains(String token) native "DOMTokenList_contains_Callback";
 
+
+  /** @domName DOMTokenList.item */
   String item(int index) native "DOMTokenList_item_Callback";
 
+
+  /** @domName DOMTokenList.toString */
   String toString() native "DOMTokenList_toString_Callback";
 
   bool toggle(/*DOMString*/ token, [/*boolean*/ force]) {
@@ -10331,8 +7282,12 @@
     return _toggle_2(token);
   }
 
+
+  /** @domName DOMTokenList.toggle_1 */
   bool _toggle_1(token, force) native "DOMTokenList_toggle_1_Callback";
 
+
+  /** @domName DOMTokenList.toggle_2 */
   bool _toggle_2(token) native "DOMTokenList_toggle_2_Callback";
 
 }
@@ -10342,69 +7297,14 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName URL
-abstract class DOMURL {
-
-  factory DOMURL() => _DOMURLFactoryProvider.createDOMURL();
-
-  /** @domName URL.createObjectURL */
-  static final createObjectURL = _DOMURLImpl.createObjectURL;
-
-  /** @domName URL.revokeObjectURL */
-  static final revokeObjectURL = _DOMURLImpl.revokeObjectURL;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DOMURLImpl extends NativeFieldWrapperClass1 implements DOMURL {
-
-  static String createObjectURL(blob_OR_source_OR_stream) {
-    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_1(blob_OR_source_OR_stream);
-    }
-    if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_2(blob_OR_source_OR_stream);
-    }
-    if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_3(blob_OR_source_OR_stream);
-    }
-    throw "Incorrect number or type of arguments";
-  }
-
-  static String _createObjectURL_1(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_1_Callback";
-
-  static String _createObjectURL_2(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_2_Callback";
-
-  static String _createObjectURL_3(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_3_Callback";
-
-  static void revokeObjectURL(String url) native "DOMURL_revokeObjectURL_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName HTMLDataListElement
-abstract class DataListElement implements Element {
+class DataListElement extends _Element_Merged {
 
   factory DataListElement() => _Elements.createDataListElement();
+  DataListElement.internal(): super.internal();
+
 
   /** @domName HTMLDataListElement.options */
-  HTMLCollection get options;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DataListElementImpl extends _ElementImpl_Merged implements DataListElement {
-
   HTMLCollection get options native "HTMLDataListElement_options_Getter";
 
 }
@@ -10415,39 +7315,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DataTransferItem
-abstract class DataTransferItem {
+class DataTransferItem extends NativeFieldWrapperClass1 {
+  DataTransferItem.internal();
+
 
   /** @domName DataTransferItem.kind */
-  String get kind;
-
-  /** @domName DataTransferItem.type */
-  String get type;
-
-  /** @domName DataTransferItem.getAsFile */
-  Blob getAsFile();
-
-  /** @domName DataTransferItem.getAsString */
-  void getAsString([StringCallback callback]);
-
-  /** @domName DataTransferItem.webkitGetAsEntry */
-  Entry webkitGetAsEntry();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DataTransferItemImpl extends NativeFieldWrapperClass1 implements DataTransferItem {
-
   String get kind native "DataTransferItem_kind_Getter";
 
+
+  /** @domName DataTransferItem.type */
   String get type native "DataTransferItem_type_Getter";
 
+
+  /** @domName DataTransferItem.getAsFile */
   Blob getAsFile() native "DataTransferItem_getAsFile_Callback";
 
+
+  /** @domName DataTransferItem.getAsString */
   void getAsString([StringCallback callback]) native "DataTransferItem_getAsString_Callback";
 
+
+  /** @domName DataTransferItem.webkitGetAsEntry */
   Entry webkitGetAsEntry() native "DataTransferItem_webkitGetAsEntry_Callback";
 
 }
@@ -10458,28 +7346,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DataTransferItemList
-abstract class DataTransferItemList {
+class DataTransferItemList extends NativeFieldWrapperClass1 {
+  DataTransferItemList.internal();
+
 
   /** @domName DataTransferItemList.length */
-  int get length;
-
-  /** @domName DataTransferItemList.add */
-  void add(data_OR_file, [String type]);
-
-  /** @domName DataTransferItemList.clear */
-  void clear();
-
-  /** @domName DataTransferItemList.item */
-  DataTransferItem item(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DataTransferItemListImpl extends NativeFieldWrapperClass1 implements DataTransferItemList {
-
   int get length native "DataTransferItemList_length_Getter";
 
   void add(data_OR_file, [/*DOMString*/ type]) {
@@ -10494,12 +7365,20 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName DataTransferItemList.add_1 */
   void _add_1(data_OR_file) native "DataTransferItemList_add_1_Callback";
 
+
+  /** @domName DataTransferItemList.add_2 */
   void _add_2(data_OR_file, type) native "DataTransferItemList_add_2_Callback";
 
+
+  /** @domName DataTransferItemList.clear */
   void clear() native "DataTransferItemList_clear_Callback";
 
+
+  /** @domName DataTransferItemList.item */
   DataTransferItem item(int index) native "DataTransferItemList_item_Callback";
 
 }
@@ -10510,7 +7389,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DataView
-abstract class DataView implements ArrayBufferView {
+class DataView extends ArrayBufferView {
 
   factory DataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) {
     if (!?byteOffset) {
@@ -10521,62 +7400,7 @@
     }
     return _DataViewFactoryProvider.createDataView(buffer, byteOffset, byteLength);
   }
-
-  /** @domName DataView.getFloat32 */
-  num getFloat32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getFloat64 */
-  num getFloat64(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt16 */
-  int getInt16(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt32 */
-  int getInt32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getInt8 */
-  int getInt8(int byteOffset);
-
-  /** @domName DataView.getUint16 */
-  int getUint16(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getUint32 */
-  int getUint32(int byteOffset, {bool littleEndian});
-
-  /** @domName DataView.getUint8 */
-  int getUint8(int byteOffset);
-
-  /** @domName DataView.setFloat32 */
-  void setFloat32(int byteOffset, num value, {bool littleEndian});
-
-  /** @domName DataView.setFloat64 */
-  void setFloat64(int byteOffset, num value, {bool littleEndian});
-
-  /** @domName DataView.setInt16 */
-  void setInt16(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setInt32 */
-  void setInt32(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setInt8 */
-  void setInt8(int byteOffset, int value);
-
-  /** @domName DataView.setUint16 */
-  void setUint16(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setUint32 */
-  void setUint32(int byteOffset, int value, {bool littleEndian});
-
-  /** @domName DataView.setUint8 */
-  void setUint8(int byteOffset, int value);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DataViewImpl extends _ArrayBufferViewImpl implements DataView {
+  DataView.internal(): super.internal();
 
   num getFloat32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
     if (?littleEndian) {
@@ -10585,8 +7409,12 @@
     return _getFloat32_2(byteOffset);
   }
 
+
+  /** @domName DataView.getFloat32_1 */
   num _getFloat32_1(byteOffset, littleEndian) native "DataView_getFloat32_1_Callback";
 
+
+  /** @domName DataView.getFloat32_2 */
   num _getFloat32_2(byteOffset) native "DataView_getFloat32_2_Callback";
 
   num getFloat64(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
@@ -10596,8 +7424,12 @@
     return _getFloat64_2(byteOffset);
   }
 
+
+  /** @domName DataView.getFloat64_1 */
   num _getFloat64_1(byteOffset, littleEndian) native "DataView_getFloat64_1_Callback";
 
+
+  /** @domName DataView.getFloat64_2 */
   num _getFloat64_2(byteOffset) native "DataView_getFloat64_2_Callback";
 
   int getInt16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
@@ -10607,8 +7439,12 @@
     return _getInt16_2(byteOffset);
   }
 
+
+  /** @domName DataView.getInt16_1 */
   int _getInt16_1(byteOffset, littleEndian) native "DataView_getInt16_1_Callback";
 
+
+  /** @domName DataView.getInt16_2 */
   int _getInt16_2(byteOffset) native "DataView_getInt16_2_Callback";
 
   int getInt32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
@@ -10618,10 +7454,16 @@
     return _getInt32_2(byteOffset);
   }
 
+
+  /** @domName DataView.getInt32_1 */
   int _getInt32_1(byteOffset, littleEndian) native "DataView_getInt32_1_Callback";
 
+
+  /** @domName DataView.getInt32_2 */
   int _getInt32_2(byteOffset) native "DataView_getInt32_2_Callback";
 
+
+  /** @domName DataView.getInt8 */
   int getInt8(int byteOffset) native "DataView_getInt8_Callback";
 
   int getUint16(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
@@ -10631,8 +7473,12 @@
     return _getUint16_2(byteOffset);
   }
 
+
+  /** @domName DataView.getUint16_1 */
   int _getUint16_1(byteOffset, littleEndian) native "DataView_getUint16_1_Callback";
 
+
+  /** @domName DataView.getUint16_2 */
   int _getUint16_2(byteOffset) native "DataView_getUint16_2_Callback";
 
   int getUint32(/*unsigned long*/ byteOffset, {/*boolean*/ littleEndian}) {
@@ -10642,10 +7488,16 @@
     return _getUint32_2(byteOffset);
   }
 
+
+  /** @domName DataView.getUint32_1 */
   int _getUint32_1(byteOffset, littleEndian) native "DataView_getUint32_1_Callback";
 
+
+  /** @domName DataView.getUint32_2 */
   int _getUint32_2(byteOffset) native "DataView_getUint32_2_Callback";
 
+
+  /** @domName DataView.getUint8 */
   int getUint8(int byteOffset) native "DataView_getUint8_Callback";
 
   void setFloat32(/*unsigned long*/ byteOffset, /*float*/ value, {/*boolean*/ littleEndian}) {
@@ -10656,8 +7508,12 @@
     _setFloat32_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setFloat32_1 */
   void _setFloat32_1(byteOffset, value, littleEndian) native "DataView_setFloat32_1_Callback";
 
+
+  /** @domName DataView.setFloat32_2 */
   void _setFloat32_2(byteOffset, value) native "DataView_setFloat32_2_Callback";
 
   void setFloat64(/*unsigned long*/ byteOffset, /*double*/ value, {/*boolean*/ littleEndian}) {
@@ -10668,8 +7524,12 @@
     _setFloat64_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setFloat64_1 */
   void _setFloat64_1(byteOffset, value, littleEndian) native "DataView_setFloat64_1_Callback";
 
+
+  /** @domName DataView.setFloat64_2 */
   void _setFloat64_2(byteOffset, value) native "DataView_setFloat64_2_Callback";
 
   void setInt16(/*unsigned long*/ byteOffset, /*short*/ value, {/*boolean*/ littleEndian}) {
@@ -10680,8 +7540,12 @@
     _setInt16_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setInt16_1 */
   void _setInt16_1(byteOffset, value, littleEndian) native "DataView_setInt16_1_Callback";
 
+
+  /** @domName DataView.setInt16_2 */
   void _setInt16_2(byteOffset, value) native "DataView_setInt16_2_Callback";
 
   void setInt32(/*unsigned long*/ byteOffset, /*long*/ value, {/*boolean*/ littleEndian}) {
@@ -10692,10 +7556,16 @@
     _setInt32_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setInt32_1 */
   void _setInt32_1(byteOffset, value, littleEndian) native "DataView_setInt32_1_Callback";
 
+
+  /** @domName DataView.setInt32_2 */
   void _setInt32_2(byteOffset, value) native "DataView_setInt32_2_Callback";
 
+
+  /** @domName DataView.setInt8 */
   void setInt8(int byteOffset, int value) native "DataView_setInt8_Callback";
 
   void setUint16(/*unsigned long*/ byteOffset, /*unsigned short*/ value, {/*boolean*/ littleEndian}) {
@@ -10706,8 +7576,12 @@
     _setUint16_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setUint16_1 */
   void _setUint16_1(byteOffset, value, littleEndian) native "DataView_setUint16_1_Callback";
 
+
+  /** @domName DataView.setUint16_2 */
   void _setUint16_2(byteOffset, value) native "DataView_setUint16_2_Callback";
 
   void setUint32(/*unsigned long*/ byteOffset, /*unsigned long*/ value, {/*boolean*/ littleEndian}) {
@@ -10718,10 +7592,16 @@
     _setUint32_2(byteOffset, value);
   }
 
+
+  /** @domName DataView.setUint32_1 */
   void _setUint32_1(byteOffset, value, littleEndian) native "DataView_setUint32_1_Callback";
 
+
+  /** @domName DataView.setUint32_2 */
   void _setUint32_2(byteOffset, value) native "DataView_setUint32_2_Callback";
 
+
+  /** @domName DataView.setUint8 */
   void setUint8(int byteOffset, int value) native "DataView_setUint8_Callback";
 
 }
@@ -10732,19 +7612,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Database
-abstract class Database {
+class Database extends NativeFieldWrapperClass1 {
+  Database.internal();
+
 
   /** @domName Database.version */
-  String get version;
+  String get version native "Database_version_Getter";
+
 
   /** @domName Database.changeVersion */
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
+  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_changeVersion_Callback";
+
 
   /** @domName Database.readTransaction */
-  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
+  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_readTransaction_Callback";
+
 
   /** @domName Database.transaction */
-  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]);
+  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_transaction_Callback";
+
 }
 // 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
@@ -10760,57 +7646,28 @@
 
 // WARNING: Do not edit - generated code.
 
-class _DatabaseImpl extends NativeFieldWrapperClass1 implements Database {
-
-  String get version native "Database_version_Getter";
-
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionCallback callback, SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_changeVersion_Callback";
-
-  void readTransaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_readTransaction_Callback";
-
-  void transaction(SQLTransactionCallback callback, [SQLTransactionErrorCallback errorCallback, VoidCallback successCallback]) native "Database_transaction_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName DatabaseSync
-abstract class DatabaseSync {
+class DatabaseSync extends NativeFieldWrapperClass1 {
+  DatabaseSync.internal();
+
 
   /** @domName DatabaseSync.lastErrorMessage */
-  String get lastErrorMessage;
-
-  /** @domName DatabaseSync.version */
-  String get version;
-
-  /** @domName DatabaseSync.changeVersion */
-  void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]);
-
-  /** @domName DatabaseSync.readTransaction */
-  void readTransaction(SQLTransactionSyncCallback callback);
-
-  /** @domName DatabaseSync.transaction */
-  void transaction(SQLTransactionSyncCallback callback);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DatabaseSyncImpl extends NativeFieldWrapperClass1 implements DatabaseSync {
-
   String get lastErrorMessage native "DatabaseSync_lastErrorMessage_Getter";
 
+
+  /** @domName DatabaseSync.version */
   String get version native "DatabaseSync_version_Getter";
 
+
+  /** @domName DatabaseSync.changeVersion */
   void changeVersion(String oldVersion, String newVersion, [SQLTransactionSyncCallback callback]) native "DatabaseSync_changeVersion_Callback";
 
+
+  /** @domName DatabaseSync.readTransaction */
   void readTransaction(SQLTransactionSyncCallback callback) native "DatabaseSync_readTransaction_Callback";
 
+
+  /** @domName DatabaseSync.transaction */
   void transaction(SQLTransactionSyncCallback callback) native "DatabaseSync_transaction_Callback";
 
 }
@@ -10821,38 +7678,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DedicatedWorkerContext
-abstract class DedicatedWorkerContext implements WorkerContext {
+class DedicatedWorkerContext extends WorkerContext {
+  DedicatedWorkerContext.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  DedicatedWorkerContextEvents get on;
+  DedicatedWorkerContextEvents get on =>
+    new DedicatedWorkerContextEvents(this);
+
 
   /** @domName DedicatedWorkerContext.postMessage */
-  void postMessage(Object message, [List messagePorts]);
-}
-
-abstract class DedicatedWorkerContextEvents implements WorkerContextEvents {
-
-  EventListenerList get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DedicatedWorkerContextImpl extends _WorkerContextImpl implements DedicatedWorkerContext {
-
-  _DedicatedWorkerContextEventsImpl get on =>
-    new _DedicatedWorkerContextEventsImpl(this);
-
   void postMessage(Object message, [List messagePorts]) native "DedicatedWorkerContext_postMessage_Callback";
 
 }
 
-class _DedicatedWorkerContextEventsImpl extends _WorkerContextEventsImpl implements DedicatedWorkerContextEvents {
-  _DedicatedWorkerContextEventsImpl(_ptr) : super(_ptr);
+class DedicatedWorkerContextEvents extends WorkerContextEvents {
+  DedicatedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get message => this['message'];
 }
@@ -10863,19 +7705,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DelayNode
-abstract class DelayNode implements AudioNode {
+class DelayNode extends AudioNode {
+  DelayNode.internal(): super.internal();
+
 
   /** @domName DelayNode.delayTime */
-  AudioParam get delayTime;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DelayNodeImpl extends _AudioNodeImpl implements DelayNode {
-
   AudioParam get delayTime native "DelayNode_delayTime_Getter";
 
 }
@@ -10886,23 +7720,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLDetailsElement
-abstract class DetailsElement implements Element {
+class DetailsElement extends _Element_Merged {
 
   factory DetailsElement() => _Elements.createDetailsElement();
+  DetailsElement.internal(): super.internal();
+
 
   /** @domName HTMLDetailsElement.open */
-  bool open;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DetailsElementImpl extends _ElementImpl_Merged implements DetailsElement {
-
   bool get open native "HTMLDetailsElement_open_Getter";
 
+
+  /** @domName HTMLDetailsElement.open */
   void set open(bool value) native "HTMLDetailsElement_open_Setter";
 
 }
@@ -10913,19 +7741,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DeviceMotionEvent
-abstract class DeviceMotionEvent implements Event {
+class DeviceMotionEvent extends Event {
+  DeviceMotionEvent.internal(): super.internal();
+
 
   /** @domName DeviceMotionEvent.interval */
-  num get interval;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DeviceMotionEventImpl extends _EventImpl implements DeviceMotionEvent {
-
   num get interval native "DeviceMotionEvent_interval_Getter";
 
 }
@@ -10936,39 +7756,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DeviceOrientationEvent
-abstract class DeviceOrientationEvent implements Event {
+class DeviceOrientationEvent extends Event {
+  DeviceOrientationEvent.internal(): super.internal();
+
 
   /** @domName DeviceOrientationEvent.absolute */
-  bool get absolute;
-
-  /** @domName DeviceOrientationEvent.alpha */
-  num get alpha;
-
-  /** @domName DeviceOrientationEvent.beta */
-  num get beta;
-
-  /** @domName DeviceOrientationEvent.gamma */
-  num get gamma;
-
-  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
-  void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DeviceOrientationEventImpl extends _EventImpl implements DeviceOrientationEvent {
-
   bool get absolute native "DeviceOrientationEvent_absolute_Getter";
 
+
+  /** @domName DeviceOrientationEvent.alpha */
   num get alpha native "DeviceOrientationEvent_alpha_Getter";
 
+
+  /** @domName DeviceOrientationEvent.beta */
   num get beta native "DeviceOrientationEvent_beta_Getter";
 
+
+  /** @domName DeviceOrientationEvent.gamma */
   num get gamma native "DeviceOrientationEvent_gamma_Getter";
 
+
+  /** @domName DeviceOrientationEvent.initDeviceOrientationEvent */
   void initDeviceOrientationEvent(String type, bool bubbles, bool cancelable, num alpha, num beta, num gamma, bool absolute) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
 
 }
@@ -10979,21 +7787,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLDirectoryElement
-abstract class DirectoryElement implements Element {
+class DirectoryElement extends _Element_Merged {
+  DirectoryElement.internal(): super.internal();
+
 
   /** @domName HTMLDirectoryElement.compact */
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DirectoryElementImpl extends _ElementImpl_Merged implements DirectoryElement {
-
   bool get compact native "HTMLDirectoryElement_compact_Getter";
 
+
+  /** @domName HTMLDirectoryElement.compact */
   void set compact(bool value) native "HTMLDirectoryElement_compact_Setter";
 
 }
@@ -11004,34 +7806,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DirectoryEntry
-abstract class DirectoryEntry implements Entry {
+class DirectoryEntry extends Entry {
+  DirectoryEntry.internal(): super.internal();
+
 
   /** @domName DirectoryEntry.createReader */
-  DirectoryReader createReader();
-
-  /** @domName DirectoryEntry.getDirectory */
-  void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
-
-  /** @domName DirectoryEntry.getFile */
-  void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback});
-
-  /** @domName DirectoryEntry.removeRecursively */
-  void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DirectoryEntryImpl extends _EntryImpl implements DirectoryEntry {
-
   DirectoryReader createReader() native "DirectoryEntry_createReader_Callback";
 
+
+  /** @domName DirectoryEntry.getDirectory */
   void getDirectory(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) native "DirectoryEntry_getDirectory_Callback";
 
+
+  /** @domName DirectoryEntry.getFile */
   void getFile(String path, {Map options, EntryCallback successCallback, ErrorCallback errorCallback}) native "DirectoryEntry_getFile_Callback";
 
+
+  /** @domName DirectoryEntry.removeRecursively */
   void removeRecursively(VoidCallback successCallback, [ErrorCallback errorCallback]) native "DirectoryEntry_removeRecursively_Callback";
 
 }
@@ -11042,34 +7833,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DirectoryEntrySync
-abstract class DirectoryEntrySync implements EntrySync {
+class DirectoryEntrySync extends EntrySync {
+  DirectoryEntrySync.internal(): super.internal();
+
 
   /** @domName DirectoryEntrySync.createReader */
-  DirectoryReaderSync createReader();
-
-  /** @domName DirectoryEntrySync.getDirectory */
-  DirectoryEntrySync getDirectory(String path, Map flags);
-
-  /** @domName DirectoryEntrySync.getFile */
-  FileEntrySync getFile(String path, Map flags);
-
-  /** @domName DirectoryEntrySync.removeRecursively */
-  void removeRecursively();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DirectoryEntrySyncImpl extends _EntrySyncImpl implements DirectoryEntrySync {
-
   DirectoryReaderSync createReader() native "DirectoryEntrySync_createReader_Callback";
 
+
+  /** @domName DirectoryEntrySync.getDirectory */
   DirectoryEntrySync getDirectory(String path, Map flags) native "DirectoryEntrySync_getDirectory_Callback";
 
+
+  /** @domName DirectoryEntrySync.getFile */
   FileEntrySync getFile(String path, Map flags) native "DirectoryEntrySync_getFile_Callback";
 
+
+  /** @domName DirectoryEntrySync.removeRecursively */
   void removeRecursively() native "DirectoryEntrySync_removeRecursively_Callback";
 
 }
@@ -11080,19 +7860,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DirectoryReader
-abstract class DirectoryReader {
+class DirectoryReader extends NativeFieldWrapperClass1 {
+  DirectoryReader.internal();
+
 
   /** @domName DirectoryReader.readEntries */
-  void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DirectoryReaderImpl extends NativeFieldWrapperClass1 implements DirectoryReader {
-
   void readEntries(EntriesCallback successCallback, [ErrorCallback errorCallback]) native "DirectoryReader_readEntries_Callback";
 
 }
@@ -11103,19 +7875,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DirectoryReaderSync
-abstract class DirectoryReaderSync {
+class DirectoryReaderSync extends NativeFieldWrapperClass1 {
+  DirectoryReaderSync.internal();
+
 
   /** @domName DirectoryReaderSync.readEntries */
-  List<EntrySync> readEntries();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DirectoryReaderSyncImpl extends NativeFieldWrapperClass1 implements DirectoryReaderSync {
-
   List<EntrySync> readEntries() native "DirectoryReaderSync_readEntries_Callback";
 
 }
@@ -11126,23 +7890,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLDivElement
-abstract class DivElement implements Element {
+class DivElement extends _Element_Merged {
 
   factory DivElement() => _Elements.createDivElement();
+  DivElement.internal(): super.internal();
+
 
   /** @domName HTMLDivElement.align */
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DivElementImpl extends _ElementImpl_Merged implements DivElement {
-
   String get align native "HTMLDivElement_align_Getter";
 
+
+  /** @domName HTMLDivElement.align */
   void set align(String value) native "HTMLDivElement_align_Setter";
 
 }
@@ -11150,305 +7908,375 @@
 // 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 Document extends Node
+{
 
-/// @domName Document
-abstract class Document extends HtmlElement {
-
+  Document.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  DocumentEvents get on;
+  DocumentEvents get on =>
+    new DocumentEvents(this);
+
+
+  /** @domName Document.body */
+  Element get body native "Document_body_Getter";
+
+
+  /** @domName Document.body */
+  void set body(Element value) native "Document_body_Setter";
+
+
+  /** @domName Document.charset */
+  String get charset native "Document_charset_Getter";
+
+
+  /** @domName Document.charset */
+  void set charset(String value) native "Document_charset_Setter";
+
+
+  /** @domName Document.cookie */
+  String get cookie native "Document_cookie_Getter";
+
+
+  /** @domName Document.cookie */
+  void set cookie(String value) native "Document_cookie_Setter";
+
+
+  /** @domName Document.defaultView */
+  Window get window native "Document_defaultView_Getter";
+
+
+  /** @domName Document.documentElement */
+  Element get documentElement native "Document_documentElement_Getter";
+
+
+  /** @domName Document.domain */
+  String get domain native "Document_domain_Getter";
+
+
+  /** @domName Document.head */
+  HeadElement get head native "Document_head_Getter";
+
+
+  /** @domName Document.implementation */
+  DOMImplementation get implementation native "Document_implementation_Getter";
+
+
+  /** @domName Document.lastModified */
+  String get lastModified native "Document_lastModified_Getter";
+
+
+  /** @domName Document.preferredStylesheetSet */
+  String get preferredStylesheetSet native "Document_preferredStylesheetSet_Getter";
+
+
+  /** @domName Document.readyState */
+  String get readyState native "Document_readyState_Getter";
+
+
+  /** @domName Document.referrer */
+  String get referrer native "Document_referrer_Getter";
+
+
+  /** @domName Document.selectedStylesheetSet */
+  String get selectedStylesheetSet native "Document_selectedStylesheetSet_Getter";
+
+
+  /** @domName Document.selectedStylesheetSet */
+  void set selectedStylesheetSet(String value) native "Document_selectedStylesheetSet_Setter";
+
+
+  /** @domName Document.styleSheets */
+  List<StyleSheet> get styleSheets native "Document_styleSheets_Getter";
+
+
+  /** @domName Document.title */
+  String get title native "Document_title_Getter";
+
+
+  /** @domName Document.title */
+  void set title(String value) native "Document_title_Setter";
+
+
+  /** @domName Document.webkitCurrentFullScreenElement */
+  Element get webkitCurrentFullScreenElement native "Document_webkitCurrentFullScreenElement_Getter";
+
+
+  /** @domName Document.webkitFullScreenKeyboardInputAllowed */
+  bool get webkitFullScreenKeyboardInputAllowed native "Document_webkitFullScreenKeyboardInputAllowed_Getter";
+
+
+  /** @domName Document.webkitFullscreenElement */
+  Element get webkitFullscreenElement native "Document_webkitFullscreenElement_Getter";
+
+
+  /** @domName Document.webkitFullscreenEnabled */
+  bool get webkitFullscreenEnabled native "Document_webkitFullscreenEnabled_Getter";
+
+
+  /** @domName Document.webkitHidden */
+  bool get webkitHidden native "Document_webkitHidden_Getter";
+
+
+  /** @domName Document.webkitIsFullScreen */
+  bool get webkitIsFullScreen native "Document_webkitIsFullScreen_Getter";
+
+
+  /** @domName Document.webkitPointerLockElement */
+  Element get webkitPointerLockElement native "Document_webkitPointerLockElement_Getter";
+
+
+  /** @domName Document.webkitVisibilityState */
+  String get webkitVisibilityState native "Document_webkitVisibilityState_Getter";
+
+
+  /** @domName Document.caretRangeFromPoint */
+  Range caretRangeFromPoint(int x, int y) native "Document_caretRangeFromPoint_Callback";
+
+
+  /** @domName Document.createCDATASection */
+  CDATASection createCDATASection(String data) native "Document_createCDATASection_Callback";
+
+
+  /** @domName Document.createDocumentFragment */
+  DocumentFragment createDocumentFragment() native "Document_createDocumentFragment_Callback";
+
+
+  /** @domName Document.createElement */
+  Element $dom_createElement(String tagName) native "Document_createElement_Callback";
+
+
+  /** @domName Document.createElementNS */
+  Element $dom_createElementNS(String namespaceURI, String qualifiedName) native "Document_createElementNS_Callback";
+
+
+  /** @domName Document.createEvent */
+  Event $dom_createEvent(String eventType) native "Document_createEvent_Callback";
+
+
+  /** @domName Document.createRange */
+  Range createRange() native "Document_createRange_Callback";
+
+
+  /** @domName Document.createTextNode */
+  Text $dom_createTextNode(String data) native "Document_createTextNode_Callback";
+
+
+  /** @domName Document.createTouch */
+  Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) native "Document_createTouch_Callback";
+
+
+  /** @domName Document.createTouchList */
+  TouchList $dom_createTouchList() native "Document_createTouchList_Callback";
+
+
+  /** @domName Document.elementFromPoint */
+  Element elementFromPoint(int x, int y) native "Document_elementFromPoint_Callback";
+
+
+  /** @domName Document.execCommand */
+  bool execCommand(String command, bool userInterface, String value) native "Document_execCommand_Callback";
+
+
+  /** @domName Document.getCSSCanvasContext */
+  CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height) native "Document_getCSSCanvasContext_Callback";
+
+
+  /** @domName Document.getElementById */
+  Element $dom_getElementById(String elementId) native "Document_getElementById_Callback";
+
+
+  /** @domName Document.getElementsByClassName */
+  List<Node> $dom_getElementsByClassName(String tagname) native "Document_getElementsByClassName_Callback";
+
+
+  /** @domName Document.getElementsByName */
+  List<Node> $dom_getElementsByName(String elementName) native "Document_getElementsByName_Callback";
+
+
+  /** @domName Document.getElementsByTagName */
+  List<Node> $dom_getElementsByTagName(String tagname) native "Document_getElementsByTagName_Callback";
+
+
+  /** @domName Document.queryCommandEnabled */
+  bool queryCommandEnabled(String command) native "Document_queryCommandEnabled_Callback";
+
+
+  /** @domName Document.queryCommandIndeterm */
+  bool queryCommandIndeterm(String command) native "Document_queryCommandIndeterm_Callback";
+
+
+  /** @domName Document.queryCommandState */
+  bool queryCommandState(String command) native "Document_queryCommandState_Callback";
+
+
+  /** @domName Document.queryCommandSupported */
+  bool queryCommandSupported(String command) native "Document_queryCommandSupported_Callback";
+
+
+  /** @domName Document.queryCommandValue */
+  String queryCommandValue(String command) native "Document_queryCommandValue_Callback";
+
+
+  /** @domName Document.querySelector */
+  Element $dom_querySelector(String selectors) native "Document_querySelector_Callback";
+
+
+  /** @domName Document.querySelectorAll */
+  List<Node> $dom_querySelectorAll(String selectors) native "Document_querySelectorAll_Callback";
+
+
+  /** @domName Document.webkitCancelFullScreen */
+  void webkitCancelFullScreen() native "Document_webkitCancelFullScreen_Callback";
+
+
+  /** @domName Document.webkitExitFullscreen */
+  void webkitExitFullscreen() native "Document_webkitExitFullscreen_Callback";
+
+
+  /** @domName Document.webkitExitPointerLock */
+  void webkitExitPointerLock() native "Document_webkitExitPointerLock_Callback";
 
   /** @domName HTMLDocument.activeElement */
   Element get activeElement;
 
-  /** @domName Document.body */
-  Element body;
+  // TODO(jacobr): implement all Element methods not on Document.
 
-  /** @domName Document.charset */
-  String charset;
+  Element query(String selectors) {
+    // It is fine for our RegExp to detect element id query selectors to have
+    // false negatives but not false positives.
+    if (const RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) {
+      return $dom_getElementById(selectors.substring(1));
+    }
+    return $dom_querySelector(selectors);
+  }
 
-  /** @domName Document.cookie */
-  String cookie;
-
-  /** @domName Document.defaultView */
-  Window get window;
-
-  /** @domName Document.documentElement */
-  Element get documentElement;
-
-  /** @domName Document.domain */
-  String get domain;
-
-  /** @domName Document.head */
-  HeadElement get head;
-
-  /** @domName Document.implementation */
-  DOMImplementation get implementation;
-
-  /** @domName Document.lastModified */
-  String get lastModified;
-
-  /** @domName Document.preferredStylesheetSet */
-  String get preferredStylesheetSet;
-
-  /** @domName Document.readyState */
-  String get readyState;
-
-  /** @domName Document.referrer */
-  String get referrer;
-
-  /** @domName Document.selectedStylesheetSet */
-  String selectedStylesheetSet;
-
-  /** @domName Document.styleSheets */
-  List<StyleSheet> get styleSheets;
-
-  /** @domName Document.title */
-  String title;
-
-  /** @domName Document.webkitCurrentFullScreenElement */
-  Element get webkitCurrentFullScreenElement;
-
-  /** @domName Document.webkitFullScreenKeyboardInputAllowed */
-  bool get webkitFullScreenKeyboardInputAllowed;
-
-  /** @domName Document.webkitFullscreenElement */
-  Element get webkitFullscreenElement;
-
-  /** @domName Document.webkitFullscreenEnabled */
-  bool get webkitFullscreenEnabled;
-
-  /** @domName Document.webkitHidden */
-  bool get webkitHidden;
-
-  /** @domName Document.webkitIsFullScreen */
-  bool get webkitIsFullScreen;
-
-  /** @domName Document.webkitPointerLockElement */
-  Element get webkitPointerLockElement;
-
-  /** @domName Document.webkitVisibilityState */
-  String get webkitVisibilityState;
-
-  /** @domName Document.caretRangeFromPoint */
-  Range caretRangeFromPoint(int x, int y);
-
-  /** @domName Document.createCDATASection */
-  CDATASection createCDATASection(String data);
-
-  /** @domName Document.createDocumentFragment */
-  DocumentFragment createDocumentFragment();
-
-  /** @domName Document.createElement */
-  Element $dom_createElement(String tagName);
-
-  /** @domName Document.createElementNS */
-  Element $dom_createElementNS(String namespaceURI, String qualifiedName);
-
-  /** @domName Document.createEvent */
-  Event $dom_createEvent(String eventType);
-
-  /** @domName Document.createRange */
-  Range createRange();
-
-  /** @domName Document.createTextNode */
-  Text $dom_createTextNode(String data);
-
-  /** @domName Document.createTouch */
-  Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce);
-
-  /** @domName Document.createTouchList */
-  TouchList $dom_createTouchList();
-
-  /** @domName Document.elementFromPoint */
-  Element elementFromPoint(int x, int y);
-
-  /** @domName Document.execCommand */
-  bool execCommand(String command, bool userInterface, String value);
-
-  /** @domName Document.getCSSCanvasContext */
-  CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height);
-
-  /** @domName Document.getElementById */
-  Element $dom_getElementById(String elementId);
-
-  /** @domName Document.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String tagname);
-
-  /** @domName Document.getElementsByName */
-  List<Node> $dom_getElementsByName(String elementName);
-
-  /** @domName Document.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String tagname);
-
-  /** @domName Document.queryCommandEnabled */
-  bool queryCommandEnabled(String command);
-
-  /** @domName Document.queryCommandIndeterm */
-  bool queryCommandIndeterm(String command);
-
-  /** @domName Document.queryCommandState */
-  bool queryCommandState(String command);
-
-  /** @domName Document.queryCommandSupported */
-  bool queryCommandSupported(String command);
-
-  /** @domName Document.queryCommandValue */
-  String queryCommandValue(String command);
-
-  /** @domName Document.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName Document.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-  /** @domName Document.webkitCancelFullScreen */
-  void webkitCancelFullScreen();
-
-  /** @domName Document.webkitExitFullscreen */
-  void webkitExitFullscreen();
-
-  /** @domName Document.webkitExitPointerLock */
-  void webkitExitPointerLock();
-
+  List<Element> queryAll(String selectors) {
+    if (const RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) {
+      final mutableMatches = $dom_getElementsByName(
+          selectors.substring(7,selectors.length - 2));
+      int len = mutableMatches.length;
+      final copyOfMatches = new List<Element>(len);
+      for (int i = 0; i < len; ++i) {
+        copyOfMatches[i] = mutableMatches[i];
+      }
+      return new _FrozenElementList._wrap(copyOfMatches);
+    } else if (const RegExp("^[*a-zA-Z0-9]+\$").hasMatch(selectors)) {
+      final mutableMatches = $dom_getElementsByTagName(selectors);
+      int len = mutableMatches.length;
+      final copyOfMatches = new List<Element>(len);
+      for (int i = 0; i < len; ++i) {
+        copyOfMatches[i] = mutableMatches[i];
+      }
+      return new _FrozenElementList._wrap(copyOfMatches);
+    } else {
+      return new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
+    }
+  }
 }
 
-abstract class DocumentEvents implements ElementEvents {
+class DocumentEvents extends ElementEvents {
+  DocumentEvents(EventTarget _ptr) : super(_ptr);
 
-  EventListenerList get abort;
+  EventListenerList get abort => this['abort'];
 
-  EventListenerList get beforeCopy;
+  EventListenerList get beforeCopy => this['beforecopy'];
 
-  EventListenerList get beforeCut;
+  EventListenerList get beforeCut => this['beforecut'];
 
-  EventListenerList get beforePaste;
+  EventListenerList get beforePaste => this['beforepaste'];
 
-  EventListenerList get blur;
+  EventListenerList get blur => this['blur'];
 
-  EventListenerList get change;
+  EventListenerList get change => this['change'];
 
-  EventListenerList get click;
+  EventListenerList get click => this['click'];
 
-  EventListenerList get contextMenu;
+  EventListenerList get contextMenu => this['contextmenu'];
 
-  EventListenerList get copy;
+  EventListenerList get copy => this['copy'];
 
-  EventListenerList get cut;
+  EventListenerList get cut => this['cut'];
 
-  EventListenerList get doubleClick;
+  EventListenerList get doubleClick => this['dblclick'];
 
-  EventListenerList get drag;
+  EventListenerList get drag => this['drag'];
 
-  EventListenerList get dragEnd;
+  EventListenerList get dragEnd => this['dragend'];
 
-  EventListenerList get dragEnter;
+  EventListenerList get dragEnter => this['dragenter'];
 
-  EventListenerList get dragLeave;
+  EventListenerList get dragLeave => this['dragleave'];
 
-  EventListenerList get dragOver;
+  EventListenerList get dragOver => this['dragover'];
 
-  EventListenerList get dragStart;
+  EventListenerList get dragStart => this['dragstart'];
 
-  EventListenerList get drop;
+  EventListenerList get drop => this['drop'];
 
-  EventListenerList get error;
+  EventListenerList get error => this['error'];
 
-  EventListenerList get focus;
+  EventListenerList get focus => this['focus'];
 
-  EventListenerList get input;
+  EventListenerList get input => this['input'];
 
-  EventListenerList get invalid;
+  EventListenerList get invalid => this['invalid'];
 
-  EventListenerList get keyDown;
+  EventListenerList get keyDown => this['keydown'];
 
-  EventListenerList get keyPress;
+  EventListenerList get keyPress => this['keypress'];
 
-  EventListenerList get keyUp;
+  EventListenerList get keyUp => this['keyup'];
 
-  EventListenerList get load;
+  EventListenerList get load => this['load'];
 
-  EventListenerList get mouseDown;
+  EventListenerList get mouseDown => this['mousedown'];
 
-  EventListenerList get mouseMove;
+  EventListenerList get mouseMove => this['mousemove'];
 
-  EventListenerList get mouseOut;
+  EventListenerList get mouseOut => this['mouseout'];
 
-  EventListenerList get mouseOver;
+  EventListenerList get mouseOver => this['mouseover'];
 
-  EventListenerList get mouseUp;
+  EventListenerList get mouseUp => this['mouseup'];
 
-  EventListenerList get mouseWheel;
+  EventListenerList get mouseWheel => this['mousewheel'];
 
-  EventListenerList get paste;
+  EventListenerList get paste => this['paste'];
 
-  EventListenerList get readyStateChange;
+  EventListenerList get readyStateChange => this['readystatechange'];
 
-  EventListenerList get reset;
+  EventListenerList get reset => this['reset'];
 
-  EventListenerList get scroll;
+  EventListenerList get scroll => this['scroll'];
 
-  EventListenerList get search;
+  EventListenerList get search => this['search'];
 
-  EventListenerList get select;
+  EventListenerList get select => this['select'];
 
-  EventListenerList get selectionChange;
+  EventListenerList get selectionChange => this['selectionchange'];
 
-  EventListenerList get selectStart;
+  EventListenerList get selectStart => this['selectstart'];
 
-  EventListenerList get submit;
+  EventListenerList get submit => this['submit'];
 
-  EventListenerList get touchCancel;
+  EventListenerList get touchCancel => this['touchcancel'];
 
-  EventListenerList get touchEnd;
+  EventListenerList get touchEnd => this['touchend'];
 
-  EventListenerList get touchMove;
+  EventListenerList get touchMove => this['touchmove'];
 
-  EventListenerList get touchStart;
+  EventListenerList get touchStart => this['touchstart'];
 
-  EventListenerList get fullscreenChange;
+  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
 
-  EventListenerList get fullscreenError;
+  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
 
-  EventListenerList get pointerLockChange;
+  EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
 
-  EventListenerList get pointerLockError;
-}
-// 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.
-
-
-/// @domName DocumentFragment
-abstract class DocumentFragment extends Element {
-
-  factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
-
-  factory DocumentFragment.html(String html) =>
-      _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
-
-  // TODO(nweiz): enable this when XML is ported
-  // /** WARNING: Currently this doesn't work on Dartium (issue 649). */
-  // DocumentFragment.xml(String xml);
-
-  factory DocumentFragment.svg(String svg) =>
-      new _DocumentFragmentFactoryProvider.DocumentFragment.svg(svg);
-
-  DocumentFragment clone(bool deep);
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ElementEvents get on;
-
-  /** @domName DocumentFragment.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName DocumentFragment.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
+  EventListenerList get pointerLockError => this['webkitpointerlockerror'];
 }
 // 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
@@ -11507,7 +8335,7 @@
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void removeRange(int start, int rangeLength) {
@@ -11515,7 +8343,7 @@
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void clear() {
@@ -11568,8 +8396,8 @@
   const EmptyElementRect();
 }
 
-class _FrozenCSSClassSet extends _CssClassSet {
-  _FrozenCSSClassSet() : super(null);
+class _FrozenCssClassSet extends _CssClassSet {
+  _FrozenCssClassSet() : super(null);
 
   void _write(Set s) {
     throw new UnsupportedError(
@@ -11580,7 +8408,15 @@
   bool get frozen => true;
 }
 
-class _DocumentFragmentImpl extends _NodeImpl implements DocumentFragment {
+class DocumentFragment extends Node {
+  factory DocumentFragment() => _DocumentFragmentFactoryProvider.createDocumentFragment();
+
+  factory DocumentFragment.html(String html) =>
+      _DocumentFragmentFactoryProvider.createDocumentFragment_html(html);
+
+  factory DocumentFragment.svg(String svg) =>
+      new _DocumentFragmentFactoryProvider.createDocumentFragment_svg(svg);
+
   List<Element> _elements;
 
   List<Element> get elements {
@@ -11599,7 +8435,7 @@
     elements.addAll(copy);
   }
 
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
+  Element query(String selectors) => $dom_querySelector(selectors);
 
   List<Element> queryAll(String selectors) =>
     new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
@@ -11692,7 +8528,7 @@
   Element get offsetParent => null;
   Element get parent => null;
   Map<String, String> get attributes => const {};
-  CSSClassSet get classes => new _FrozenCSSClassSet();
+  CssClassSet get classes => new _FrozenCssClassSet();
   Map<String, String> get dataAttributes => const {};
   CSSStyleDeclaration get style => new Element.tag('div').style;
   Future<CSSStyleDeclaration> get computedStyle =>
@@ -11809,12 +8645,20 @@
       "WebKit region overflow can't be set for document fragments.");
   }
 
+  DocumentFragment.internal(): super.internal();
 
-  _ElementEventsImpl get on =>
-    new _ElementEventsImpl(this);
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  ElementEvents get on =>
+    new ElementEvents(this);
 
+
+  /** @domName DocumentFragment.querySelector */
   Element $dom_querySelector(String selectors) native "DocumentFragment_querySelector_Callback";
 
+
+  /** @domName DocumentFragment.querySelectorAll */
   List<Node> $dom_querySelectorAll(String selectors) native "DocumentFragment_querySelectorAll_Callback";
 
 }
@@ -11822,320 +8666,38 @@
 // 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 _DocumentImpl extends _NodeImpl implements Document
-{
-
-
-  _DocumentEventsImpl get on =>
-    new _DocumentEventsImpl(this);
-
-  Element get body native "Document_body_Getter";
-
-  void set body(Element value) native "Document_body_Setter";
-
-  String get charset native "Document_charset_Getter";
-
-  void set charset(String value) native "Document_charset_Setter";
-
-  String get cookie native "Document_cookie_Getter";
-
-  void set cookie(String value) native "Document_cookie_Setter";
-
-  Window get window native "Document_defaultView_Getter";
-
-  Element get documentElement native "Document_documentElement_Getter";
-
-  String get domain native "Document_domain_Getter";
-
-  HeadElement get head native "Document_head_Getter";
-
-  DOMImplementation get implementation native "Document_implementation_Getter";
-
-  String get lastModified native "Document_lastModified_Getter";
-
-  String get preferredStylesheetSet native "Document_preferredStylesheetSet_Getter";
-
-  String get readyState native "Document_readyState_Getter";
-
-  String get referrer native "Document_referrer_Getter";
-
-  String get selectedStylesheetSet native "Document_selectedStylesheetSet_Getter";
-
-  void set selectedStylesheetSet(String value) native "Document_selectedStylesheetSet_Setter";
-
-  List<StyleSheet> get styleSheets native "Document_styleSheets_Getter";
-
-  String get title native "Document_title_Getter";
-
-  void set title(String value) native "Document_title_Setter";
-
-  Element get webkitCurrentFullScreenElement native "Document_webkitCurrentFullScreenElement_Getter";
-
-  bool get webkitFullScreenKeyboardInputAllowed native "Document_webkitFullScreenKeyboardInputAllowed_Getter";
-
-  Element get webkitFullscreenElement native "Document_webkitFullscreenElement_Getter";
-
-  bool get webkitFullscreenEnabled native "Document_webkitFullscreenEnabled_Getter";
-
-  bool get webkitHidden native "Document_webkitHidden_Getter";
-
-  bool get webkitIsFullScreen native "Document_webkitIsFullScreen_Getter";
-
-  Element get webkitPointerLockElement native "Document_webkitPointerLockElement_Getter";
-
-  String get webkitVisibilityState native "Document_webkitVisibilityState_Getter";
-
-  Range caretRangeFromPoint(int x, int y) native "Document_caretRangeFromPoint_Callback";
-
-  CDATASection createCDATASection(String data) native "Document_createCDATASection_Callback";
-
-  DocumentFragment createDocumentFragment() native "Document_createDocumentFragment_Callback";
-
-  Element $dom_createElement(String tagName) native "Document_createElement_Callback";
-
-  Element $dom_createElementNS(String namespaceURI, String qualifiedName) native "Document_createElementNS_Callback";
-
-  Event $dom_createEvent(String eventType) native "Document_createEvent_Callback";
-
-  Range createRange() native "Document_createRange_Callback";
-
-  Text $dom_createTextNode(String data) native "Document_createTextNode_Callback";
-
-  Touch createTouch(LocalWindow window, EventTarget target, int identifier, int pageX, int pageY, int screenX, int screenY, int webkitRadiusX, int webkitRadiusY, num webkitRotationAngle, num webkitForce) native "Document_createTouch_Callback";
-
-  TouchList $dom_createTouchList() native "Document_createTouchList_Callback";
-
-  Element elementFromPoint(int x, int y) native "Document_elementFromPoint_Callback";
-
-  bool execCommand(String command, bool userInterface, String value) native "Document_execCommand_Callback";
-
-  CanvasRenderingContext getCSSCanvasContext(String contextId, String name, int width, int height) native "Document_getCSSCanvasContext_Callback";
-
-  Element $dom_getElementById(String elementId) native "Document_getElementById_Callback";
-
-  List<Node> $dom_getElementsByClassName(String tagname) native "Document_getElementsByClassName_Callback";
-
-  List<Node> $dom_getElementsByName(String elementName) native "Document_getElementsByName_Callback";
-
-  List<Node> $dom_getElementsByTagName(String tagname) native "Document_getElementsByTagName_Callback";
-
-  bool queryCommandEnabled(String command) native "Document_queryCommandEnabled_Callback";
-
-  bool queryCommandIndeterm(String command) native "Document_queryCommandIndeterm_Callback";
-
-  bool queryCommandState(String command) native "Document_queryCommandState_Callback";
-
-  bool queryCommandSupported(String command) native "Document_queryCommandSupported_Callback";
-
-  String queryCommandValue(String command) native "Document_queryCommandValue_Callback";
-
-  Element $dom_querySelector(String selectors) native "Document_querySelector_Callback";
-
-  List<Node> $dom_querySelectorAll(String selectors) native "Document_querySelectorAll_Callback";
-
-  void webkitCancelFullScreen() native "Document_webkitCancelFullScreen_Callback";
-
-  void webkitExitFullscreen() native "Document_webkitExitFullscreen_Callback";
-
-  void webkitExitPointerLock() native "Document_webkitExitPointerLock_Callback";
-
-  // TODO(jacobr): implement all Element methods not on Document.
-
-  _ElementImpl query(String selectors) {
-    // It is fine for our RegExp to detect element id query selectors to have
-    // false negatives but not false positives.
-    if (const RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) {
-      return $dom_getElementById(selectors.substring(1));
-    }
-    return $dom_querySelector(selectors);
-  }
-
-  List<Element> queryAll(String selectors) {
-    if (const RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) {
-      final mutableMatches = $dom_getElementsByName(
-          selectors.substring(7,selectors.length - 2));
-      int len = mutableMatches.length;
-      final copyOfMatches = new List<Element>(len);
-      for (int i = 0; i < len; ++i) {
-        copyOfMatches[i] = mutableMatches[i];
-      }
-      return new _FrozenElementList._wrap(copyOfMatches);
-    } else if (const RegExp("^[*a-zA-Z0-9]+\$").hasMatch(selectors)) {
-      final mutableMatches = $dom_getElementsByTagName(selectors);
-      int len = mutableMatches.length;
-      final copyOfMatches = new List<Element>(len);
-      for (int i = 0; i < len; ++i) {
-        copyOfMatches[i] = mutableMatches[i];
-      }
-      return new _FrozenElementList._wrap(copyOfMatches);
-    } else {
-      return new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
-    }
-  }
-}
-
-class _DocumentEventsImpl extends _ElementEventsImpl implements DocumentEvents {
-  _DocumentEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get beforeCopy => this['beforecopy'];
-
-  EventListenerList get beforeCut => this['beforecut'];
-
-  EventListenerList get beforePaste => this['beforepaste'];
-
-  EventListenerList get blur => this['blur'];
-
-  EventListenerList get change => this['change'];
-
-  EventListenerList get click => this['click'];
-
-  EventListenerList get contextMenu => this['contextmenu'];
-
-  EventListenerList get copy => this['copy'];
-
-  EventListenerList get cut => this['cut'];
-
-  EventListenerList get doubleClick => this['dblclick'];
-
-  EventListenerList get drag => this['drag'];
-
-  EventListenerList get dragEnd => this['dragend'];
-
-  EventListenerList get dragEnter => this['dragenter'];
-
-  EventListenerList get dragLeave => this['dragleave'];
-
-  EventListenerList get dragOver => this['dragover'];
-
-  EventListenerList get dragStart => this['dragstart'];
-
-  EventListenerList get drop => this['drop'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get focus => this['focus'];
-
-  EventListenerList get input => this['input'];
-
-  EventListenerList get invalid => this['invalid'];
-
-  EventListenerList get keyDown => this['keydown'];
-
-  EventListenerList get keyPress => this['keypress'];
-
-  EventListenerList get keyUp => this['keyup'];
-
-  EventListenerList get load => this['load'];
-
-  EventListenerList get mouseDown => this['mousedown'];
-
-  EventListenerList get mouseMove => this['mousemove'];
-
-  EventListenerList get mouseOut => this['mouseout'];
-
-  EventListenerList get mouseOver => this['mouseover'];
-
-  EventListenerList get mouseUp => this['mouseup'];
-
-  EventListenerList get mouseWheel => this['mousewheel'];
-
-  EventListenerList get paste => this['paste'];
-
-  EventListenerList get readyStateChange => this['readystatechange'];
-
-  EventListenerList get reset => this['reset'];
-
-  EventListenerList get scroll => this['scroll'];
-
-  EventListenerList get search => this['search'];
-
-  EventListenerList get select => this['select'];
-
-  EventListenerList get selectionChange => this['selectionchange'];
-
-  EventListenerList get selectStart => this['selectstart'];
-
-  EventListenerList get submit => this['submit'];
-
-  EventListenerList get touchCancel => this['touchcancel'];
-
-  EventListenerList get touchEnd => this['touchend'];
-
-  EventListenerList get touchMove => this['touchmove'];
-
-  EventListenerList get touchStart => this['touchstart'];
-
-  EventListenerList get fullscreenChange => this['webkitfullscreenchange'];
-
-  EventListenerList get fullscreenError => this['webkitfullscreenerror'];
-
-  EventListenerList get pointerLockChange => this['webkitpointerlockchange'];
-
-  EventListenerList get pointerLockError => this['webkitpointerlockerror'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DocumentImpl_Merged extends _DocumentImpl implements Document {
-
-  Element get activeElement native "HTMLDocument_activeElement_Getter";
-
-}
-// 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.
-
 // WARNING: Do not edit - generated code.
 
 /// @domName DocumentType
-abstract class DocumentType implements Node {
+class DocumentType extends Node {
+  DocumentType.internal(): super.internal();
+
 
   /** @domName DocumentType.entities */
-  NamedNodeMap get entities;
-
-  /** @domName DocumentType.internalSubset */
-  String get internalSubset;
-
-  /** @domName DocumentType.name */
-  String get name;
-
-  /** @domName DocumentType.notations */
-  NamedNodeMap get notations;
-
-  /** @domName DocumentType.publicId */
-  String get publicId;
-
-  /** @domName DocumentType.systemId */
-  String get systemId;
-
-  /** @domName DocumentType.remove */
-  void remove();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DocumentTypeImpl extends _NodeImpl implements DocumentType {
-
   NamedNodeMap get entities native "DocumentType_entities_Getter";
 
+
+  /** @domName DocumentType.internalSubset */
   String get internalSubset native "DocumentType_internalSubset_Getter";
 
+
+  /** @domName DocumentType.name */
   String get name native "DocumentType_name_Getter";
 
+
+  /** @domName DocumentType.notations */
   NamedNodeMap get notations native "DocumentType_notations_Getter";
 
+
+  /** @domName DocumentType.publicId */
   String get publicId native "DocumentType_publicId_Getter";
 
+
+  /** @domName DocumentType.systemId */
   String get systemId native "DocumentType_systemId_Getter";
 
+
+  /** @domName DocumentType.remove */
   void remove() native "DocumentType_remove_Callback";
 
 }
@@ -12146,44 +8708,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName DynamicsCompressorNode
-abstract class DynamicsCompressorNode implements AudioNode {
+class DynamicsCompressorNode extends AudioNode {
+  DynamicsCompressorNode.internal(): super.internal();
+
 
   /** @domName DynamicsCompressorNode.attack */
-  AudioParam get attack;
-
-  /** @domName DynamicsCompressorNode.knee */
-  AudioParam get knee;
-
-  /** @domName DynamicsCompressorNode.ratio */
-  AudioParam get ratio;
-
-  /** @domName DynamicsCompressorNode.reduction */
-  AudioParam get reduction;
-
-  /** @domName DynamicsCompressorNode.release */
-  AudioParam get release;
-
-  /** @domName DynamicsCompressorNode.threshold */
-  AudioParam get threshold;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _DynamicsCompressorNodeImpl extends _AudioNodeImpl implements DynamicsCompressorNode {
-
   AudioParam get attack native "DynamicsCompressorNode_attack_Getter";
 
+
+  /** @domName DynamicsCompressorNode.knee */
   AudioParam get knee native "DynamicsCompressorNode_knee_Getter";
 
+
+  /** @domName DynamicsCompressorNode.ratio */
   AudioParam get ratio native "DynamicsCompressorNode_ratio_Getter";
 
+
+  /** @domName DynamicsCompressorNode.reduction */
   AudioParam get reduction native "DynamicsCompressorNode_reduction_Getter";
 
+
+  /** @domName DynamicsCompressorNode.release */
   AudioParam get release native "DynamicsCompressorNode_release_Getter";
 
+
+  /** @domName DynamicsCompressorNode.threshold */
   AudioParam get threshold native "DynamicsCompressorNode_threshold_Getter";
 
 }
@@ -12194,426 +8743,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName EXTTextureFilterAnisotropic
-abstract class EXTTextureFilterAnisotropic {
+class EXTTextureFilterAnisotropic extends NativeFieldWrapperClass1 {
+  EXTTextureFilterAnisotropic.internal();
 
   static const int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
 
   static const int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EXTTextureFilterAnisotropicImpl extends NativeFieldWrapperClass1 implements EXTTextureFilterAnisotropic {
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/**
- * All your attribute manipulation needs in one place.
- * Extends the regular Map interface by automatically coercing non-string
- * values to strings.
- */
-abstract class AttributeMap implements Map<String, String> {
-  void operator []=(String key, value);
-}
-
-/**
- * All your element measurement needs in one place
- */
-abstract class ElementRect {
-  // Relative to offsetParent
-  ClientRect get client;
-  ClientRect get offset;
-  ClientRect get scroll;
-  // In global coords
-  ClientRect get bounding;
-  // In global coords
-  List<ClientRect> get clientRects;
-}
-
-abstract class NodeSelector {
-  Element query(String selectors);
-  List<Element> queryAll(String selectors);
-}
-
-abstract class CSSClassSet implements Set<String> {
-  /**
-   * Adds the class [token] to the element if it is not on it, removes it if it
-   * is.
-   */
-  bool toggle(String token);
-
-  /**
-   * Returns [:true:] classes cannot be added or removed from this
-   * [:CSSClassSet:].
-   */
-  bool get frozen;
-}
-
-/// @domName Element
-abstract class Element implements Node, NodeSelector {
-  factory Element.html(String html) =>
-      _ElementFactoryProvider.createElement_html(html);
-  factory Element.tag(String tag) =>
-      _ElementFactoryProvider.createElement_tag(tag);
-
-  AttributeMap get attributes;
-  void set attributes(Map<String, String> value);
-
-  /**
-   * @domName childElementCount, firstElementChild, lastElementChild,
-   *   children, Node.nodes.add
-   */
-  List<Element> get elements;
-
-  void set elements(Collection<Element> value);
-
-  /** @domName className, classList */
-  CSSClassSet get classes;
-
-  void set classes(Collection<String> value);
-
-  AttributeMap get dataAttributes;
-  void set dataAttributes(Map<String, String> value);
-
-  /**
-   * Adds the specified text as a text node after the last child of this.
-   */
-  void addText(String text);
-
-  /**
-   * Parses the specified text as HTML and adds the resulting node after the
-   * last child of this.
-   */
-  void addHTML(String html);
-
-  /**
-   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
-   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
-   * scrollHeight, scrollWidth, scrollTop, scrollLeft
-   */
-  Future<ElementRect> get rect;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> get computedStyle;
-
-  /** @domName Window.getComputedStyle */
-  Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement);
-
-  Element clone(bool deep);
-
-  Element get parent;
-
-  /**
-   * Experimental support for [web components][wc]. This field stores a
-   * reference to the component implementation. It was inspired by Mozilla's
-   * [x-tags][] project. Please note: in the future it may be possible to
-   * `extend Element` from your class, in which case this field will be
-   * deprecated and will simply return this [Element] object.
-   *
-   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
-   * [x-tags]: http://x-tags.org/
-   */
-  var xtag;
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  ElementEvents get on;
-
-  /** @domName HTMLElement.children */
-  HTMLCollection get $dom_children;
-
-  /** @domName HTMLElement.contentEditable */
-  String contentEditable;
-
-  /** @domName HTMLElement.dir */
-  String dir;
-
-  /** @domName HTMLElement.draggable */
-  bool draggable;
-
-  /** @domName HTMLElement.hidden */
-  bool hidden;
-
-  /** @domName HTMLElement.id */
-  String id;
-
-  /** @domName HTMLElement.innerHTML */
-  String innerHTML;
-
-  /** @domName HTMLElement.isContentEditable */
-  bool get isContentEditable;
-
-  /** @domName HTMLElement.lang */
-  String lang;
-
-  /** @domName HTMLElement.outerHTML */
-  String get outerHTML;
-
-  /** @domName HTMLElement.spellcheck */
-  bool spellcheck;
-
-  /** @domName HTMLElement.tabIndex */
-  int tabIndex;
-
-  /** @domName HTMLElement.title */
-  String title;
-
-  /** @domName HTMLElement.translate */
-  bool translate;
-
-  /** @domName HTMLElement.webkitdropzone */
-  String webkitdropzone;
-
-  /** @domName HTMLElement.click */
-  void click();
-
-  /** @domName HTMLElement.insertAdjacentElement */
-  Element insertAdjacentElement(String where, Element element);
-
-  /** @domName HTMLElement.insertAdjacentHTML */
-  void insertAdjacentHTML(String where, String html);
-
-  /** @domName HTMLElement.insertAdjacentText */
-  void insertAdjacentText(String where, String text);
-
-  static const int ALLOW_KEYBOARD_INPUT = 1;
-
-  /** @domName Element.childElementCount */
-  int get $dom_childElementCount;
-
-  /** @domName Element.className */
-  String $dom_className;
-
-  /** @domName Element.clientHeight */
-  int get clientHeight;
-
-  /** @domName Element.clientLeft */
-  int get clientLeft;
-
-  /** @domName Element.clientTop */
-  int get clientTop;
-
-  /** @domName Element.clientWidth */
-  int get clientWidth;
-
-  /** @domName Element.dataset */
-  Map<String, String> get dataset;
-
-  /** @domName Element.firstElementChild */
-  Element get $dom_firstElementChild;
-
-  /** @domName Element.lastElementChild */
-  Element get $dom_lastElementChild;
-
-  /** @domName Element.nextElementSibling */
-  Element get nextElementSibling;
-
-  /** @domName Element.offsetHeight */
-  int get offsetHeight;
-
-  /** @domName Element.offsetLeft */
-  int get offsetLeft;
-
-  /** @domName Element.offsetParent */
-  Element get offsetParent;
-
-  /** @domName Element.offsetTop */
-  int get offsetTop;
-
-  /** @domName Element.offsetWidth */
-  int get offsetWidth;
-
-  /** @domName Element.previousElementSibling */
-  Element get previousElementSibling;
-
-  /** @domName Element.scrollHeight */
-  int get scrollHeight;
-
-  /** @domName Element.scrollLeft */
-  int scrollLeft;
-
-  /** @domName Element.scrollTop */
-  int scrollTop;
-
-  /** @domName Element.scrollWidth */
-  int get scrollWidth;
-
-  /** @domName Element.style */
-  CSSStyleDeclaration get style;
-
-  /** @domName Element.tagName */
-  String get tagName;
-
-  /** @domName Element.blur */
-  void blur();
-
-  /** @domName Element.focus */
-  void focus();
-
-  /** @domName Element.getAttribute */
-  String $dom_getAttribute(String name);
-
-  /** @domName Element.getBoundingClientRect */
-  ClientRect getBoundingClientRect();
-
-  /** @domName Element.getClientRects */
-  List<ClientRect> getClientRects();
-
-  /** @domName Element.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String name);
-
-  /** @domName Element.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String name);
-
-  /** @domName Element.hasAttribute */
-  bool $dom_hasAttribute(String name);
-
-  /** @domName Element.querySelector */
-  Element $dom_querySelector(String selectors);
-
-  /** @domName Element.querySelectorAll */
-  List<Node> $dom_querySelectorAll(String selectors);
-
-  /** @domName Element.remove */
-  void remove();
-
-  /** @domName Element.removeAttribute */
-  void $dom_removeAttribute(String name);
-
-  /** @domName Element.scrollByLines */
-  void scrollByLines(int lines);
-
-  /** @domName Element.scrollByPages */
-  void scrollByPages(int pages);
-
-  /** @domName Element.scrollIntoViewIfNeeded */
-  void scrollIntoView([bool centerIfNeeded]);
-
-  /** @domName Element.setAttribute */
-  void $dom_setAttribute(String name, String value);
-
-  /** @domName Element.webkitMatchesSelector */
-  bool matchesSelector(String selectors);
-
-  /** @domName Element.webkitRequestFullScreen */
-  void webkitRequestFullScreen(int flags);
-
-  /** @domName Element.webkitRequestFullscreen */
-  void webkitRequestFullscreen();
-
-  /** @domName Element.webkitRequestPointerLock */
-  void webkitRequestPointerLock();
-
-}
-
-abstract class ElementEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get reset;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchEnter;
-
-  EventListenerList get touchLeave;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get transitionEnd;
-
-  EventListenerList get fullscreenChange;
 
-  EventListenerList get fullscreenError;
 }
 // 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
@@ -12623,10 +8759,10 @@
 // functionality.
 class _ChildrenElementList implements List {
   // Raw Element.
-  final _ElementImpl _element;
-  final _HTMLCollectionImpl _childElements;
+  final Element _element;
+  final HTMLCollection _childElements;
 
-  _ChildrenElementList._wrap(_ElementImpl element)
+  _ChildrenElementList._wrap(Element element)
     : _childElements = element.$dom_children,
       _element = element;
 
@@ -12641,7 +8777,7 @@
   bool contains(Element element) => _childElements.contains(element);
 
   void forEach(void f(Element element)) {
-    for (_ElementImpl element in _childElements) {
+    for (Element element in _childElements) {
       f(element);
     }
   }
@@ -12690,11 +8826,11 @@
     return _childElements.length;
   }
 
-  _ElementImpl operator [](int index) {
+  Element operator [](int index) {
     return _childElements[index];
   }
 
-  void operator []=(int index, _ElementImpl value) {
+  void operator []=(int index, Element value) {
     _element.$dom_replaceChild(value, _childElements[index]);
   }
 
@@ -12703,17 +8839,17 @@
      throw new UnsupportedError('');
    }
 
-  Element add(_ElementImpl value) {
+  Element add(Element value) {
     _element.$dom_appendChild(value);
     return value;
   }
 
-  Element addLast(_ElementImpl value) => add(value);
+  Element addLast(Element value) => add(value);
 
   Iterator<Element> iterator() => _toList().iterator();
 
   void addAll(Collection<Element> collection) {
-    for (_ElementImpl element in collection) {
+    for (Element element in collection) {
       _element.$dom_appendChild(element);
     }
   }
@@ -12723,15 +8859,15 @@
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   List getRange(int start, int rangeLength) =>
@@ -12913,9 +9049,18 @@
   bool get hasNext => _index < _list.length;
 }
 
-class _ElementAttributeMap implements AttributeMap {
+/**
+ * All your attribute manipulation needs in one place.
+ * Extends the regular Map interface by automatically coercing non-string
+ * values to strings.
+ */
+abstract class AttributeMap implements Map<String, String> {
+  void operator []=(String key, value);
+}
 
-  final _ElementImpl _element;
+class _ElementAttributeMap extends AttributeMap {
+
+  final Element _element;
 
   _ElementAttributeMap(this._element);
 
@@ -13008,7 +9153,7 @@
  * Provides a Map abstraction on top of data-* attributes, similar to the
  * dataSet in the old DOM.
  */
-class _DataAttributeMap implements AttributeMap {
+class _DataAttributeMap extends AttributeMap {
 
   final Map<String, String> $dom_attributes;
 
@@ -13078,9 +9223,23 @@
   String _strip(String key) => key.substring(5);
 }
 
-class _CssClassSet implements CSSClassSet {
+abstract class CssClassSet implements Set<String> {
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
+  bool toggle(String token);
 
-  final _ElementImpl _element;
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
+  bool get frozen;
+}
+
+class _CssClassSet extends CssClassSet {
+
+  final Element _element;
 
   _CssClassSet(this._element);
 
@@ -13105,6 +9264,10 @@
 
   bool get isEmpty => _read().isEmpty;
 
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
   bool get frozen => false;
 
   int get length =>_read().length;
@@ -13127,6 +9290,10 @@
     return result;
   }
 
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
   bool toggle(String value) {
     Set<String> s = _read();
     bool result = false;
@@ -13237,20 +9404,21 @@
 // rects as we must perform all measurement queries at a safe point to avoid
 // triggering unneeded layouts.
 /**
- * All your element measurement needs in one place
+ * All your element measurement needs in one place.
  * @domName none
  */
-class _ElementRectImpl implements ElementRect {
+class ElementRect {
+  // Relative to offsetParent.
   final ClientRect client;
   final ClientRect offset;
   final ClientRect scroll;
 
   // TODO(jacobr): should we move these outside of ElementRect to avoid the
   // overhead of computing them every time even though they are rarely used.
-  final _ClientRectImpl _boundingClientRect;
-  final _ClientRectListImpl _clientRects;
+  final ClientRect _boundingClientRect;
+  final _ClientRectList _clientRects;
 
-  _ElementRectImpl(_ElementImpl element) :
+  ElementRect(Element element) :
     client = new _SimpleClientRect(element.clientLeft,
                                   element.clientTop,
                                   element.clientWidth,
@@ -13266,9 +9434,10 @@
     _boundingClientRect = element.getBoundingClientRect(),
     _clientRects = element.getClientRects();
 
-  _ClientRectImpl get bounding => _boundingClientRect;
+  // In global coords.
+  ClientRect get bounding => _boundingClientRect;
 
-  // TODO(jacobr): cleanup.
+  // In global coords.
   List<ClientRect> get clientRects {
     final out = new List(_clientRects.length);
     for (num i = 0; i < _clientRects.length; i++) {
@@ -13278,7 +9447,12 @@
   }
 }
 
-class _ElementImpl extends _NodeImpl implements Element {
+class Element extends Node implements ElementTraversal {
+
+  factory Element.html(String html) =>
+      _ElementFactoryProvider.createElement_html(html);
+  factory Element.tag(String tag) =>
+      _ElementFactoryProvider.createElement_tag(tag);
 
   /**
    * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
@@ -13300,17 +9474,22 @@
     elements.addAll(value);
   }
 
+  /**
+   * @domName childElementCount, firstElementChild, lastElementChild,
+   *   children, Node.nodes.add
+   */
   List<Element> get elements => new _ChildrenElementList._wrap(this);
 
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
+  Element query(String selectors) => $dom_querySelector(selectors);
 
   List<Element> queryAll(String selectors) =>
     new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
 
-  _CssClassSet get classes => new _CssClassSet(this);
+  /** @domName className, classList */
+  CssClassSet get classes => new _CssClassSet(this);
 
   void set classes(Collection<String> value) {
-    _CssClassSet classSet = classes;
+    CssClassSet classSet = classes;
     classSet.clear();
     classSet.addAll(value);
   }
@@ -13326,32 +9505,56 @@
     }
   }
 
+  /**
+   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
+   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
+   * scrollHeight, scrollWidth, scrollTop, scrollLeft
+   */
   Future<ElementRect> get rect {
     return _createMeasurementFuture(
-        () => new _ElementRectImpl(this),
+        () => new ElementRect(this),
         new Completer<ElementRect>());
   }
 
+  /** @domName Window.getComputedStyle */
   Future<CSSStyleDeclaration> get computedStyle {
      // TODO(jacobr): last param should be null, see b/5045788
      return getComputedStyle('');
   }
 
+  /** @domName Window.getComputedStyle */
   Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) {
     return _createMeasurementFuture(
-        () => _window.$dom_getComputedStyle(this, pseudoElement),
+        () => window.$dom_getComputedStyle(this, pseudoElement),
         new Completer<CSSStyleDeclaration>());
   }
 
+  /**
+   * Adds the specified text as a text node after the last child of this.
+   */
   void addText(String text) {
     this.insertAdjacentText('beforeend', text);
   }
 
+  /**
+   * Parses the specified text as HTML and adds the resulting node after the
+   * last child of this.
+   */
   void addHTML(String text) {
     this.insertAdjacentHTML('beforeend', text);
   }
 
   // Hooks to support custom WebComponents.
+  /**
+   * Experimental support for [web components][wc]. This field stores a
+   * reference to the component implementation. It was inspired by Mozilla's
+   * [x-tags][] project. Please note: in the future it may be possible to
+   * `extend Element` from your class, in which case this field will be
+   * deprecated and will simply return this [Element] object.
+   *
+   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
+   * [x-tags]: http://x-tags.org/
+   */
   var xtag;
 
   noSuchMethod(InvocationMirror invocation) {
@@ -13370,86 +9573,170 @@
   }
 
 
+  Element.internal(): super.internal();
 
-  _ElementEventsImpl get on =>
-    new _ElementEventsImpl(this);
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  ElementEvents get on =>
+    new ElementEvents(this);
 
+  static const int ALLOW_KEYBOARD_INPUT = 1;
+
+
+  /** @domName Element.childElementCount */
   int get $dom_childElementCount native "Element_childElementCount_Getter";
 
+
+  /** @domName Element.className */
   String get $dom_className native "Element_className_Getter";
 
+
+  /** @domName Element.className */
   void set $dom_className(String value) native "Element_className_Setter";
 
+
+  /** @domName Element.clientHeight */
   int get clientHeight native "Element_clientHeight_Getter";
 
+
+  /** @domName Element.clientLeft */
   int get clientLeft native "Element_clientLeft_Getter";
 
+
+  /** @domName Element.clientTop */
   int get clientTop native "Element_clientTop_Getter";
 
+
+  /** @domName Element.clientWidth */
   int get clientWidth native "Element_clientWidth_Getter";
 
+
+  /** @domName Element.dataset */
   Map<String, String> get dataset native "Element_dataset_Getter";
 
+
+  /** @domName Element.firstElementChild */
   Element get $dom_firstElementChild native "Element_firstElementChild_Getter";
 
+
+  /** @domName Element.lastElementChild */
   Element get $dom_lastElementChild native "Element_lastElementChild_Getter";
 
+
+  /** @domName Element.nextElementSibling */
   Element get nextElementSibling native "Element_nextElementSibling_Getter";
 
+
+  /** @domName Element.offsetHeight */
   int get offsetHeight native "Element_offsetHeight_Getter";
 
+
+  /** @domName Element.offsetLeft */
   int get offsetLeft native "Element_offsetLeft_Getter";
 
+
+  /** @domName Element.offsetParent */
   Element get offsetParent native "Element_offsetParent_Getter";
 
+
+  /** @domName Element.offsetTop */
   int get offsetTop native "Element_offsetTop_Getter";
 
+
+  /** @domName Element.offsetWidth */
   int get offsetWidth native "Element_offsetWidth_Getter";
 
+
+  /** @domName Element.previousElementSibling */
   Element get previousElementSibling native "Element_previousElementSibling_Getter";
 
+
+  /** @domName Element.scrollHeight */
   int get scrollHeight native "Element_scrollHeight_Getter";
 
+
+  /** @domName Element.scrollLeft */
   int get scrollLeft native "Element_scrollLeft_Getter";
 
+
+  /** @domName Element.scrollLeft */
   void set scrollLeft(int value) native "Element_scrollLeft_Setter";
 
+
+  /** @domName Element.scrollTop */
   int get scrollTop native "Element_scrollTop_Getter";
 
+
+  /** @domName Element.scrollTop */
   void set scrollTop(int value) native "Element_scrollTop_Setter";
 
+
+  /** @domName Element.scrollWidth */
   int get scrollWidth native "Element_scrollWidth_Getter";
 
+
+  /** @domName Element.style */
   CSSStyleDeclaration get style native "Element_style_Getter";
 
+
+  /** @domName Element.tagName */
   String get tagName native "Element_tagName_Getter";
 
+
+  /** @domName Element.blur */
   void blur() native "Element_blur_Callback";
 
+
+  /** @domName Element.focus */
   void focus() native "Element_focus_Callback";
 
+
+  /** @domName Element.getAttribute */
   String $dom_getAttribute(String name) native "Element_getAttribute_Callback";
 
+
+  /** @domName Element.getBoundingClientRect */
   ClientRect getBoundingClientRect() native "Element_getBoundingClientRect_Callback";
 
+
+  /** @domName Element.getClientRects */
   List<ClientRect> getClientRects() native "Element_getClientRects_Callback";
 
+
+  /** @domName Element.getElementsByClassName */
   List<Node> $dom_getElementsByClassName(String name) native "Element_getElementsByClassName_Callback";
 
+
+  /** @domName Element.getElementsByTagName */
   List<Node> $dom_getElementsByTagName(String name) native "Element_getElementsByTagName_Callback";
 
+
+  /** @domName Element.hasAttribute */
   bool $dom_hasAttribute(String name) native "Element_hasAttribute_Callback";
 
+
+  /** @domName Element.querySelector */
   Element $dom_querySelector(String selectors) native "Element_querySelector_Callback";
 
+
+  /** @domName Element.querySelectorAll */
   List<Node> $dom_querySelectorAll(String selectors) native "Element_querySelectorAll_Callback";
 
+
+  /** @domName Element.remove */
   void remove() native "Element_remove_Callback";
 
+
+  /** @domName Element.removeAttribute */
   void $dom_removeAttribute(String name) native "Element_removeAttribute_Callback";
 
+
+  /** @domName Element.scrollByLines */
   void scrollByLines(int lines) native "Element_scrollByLines_Callback";
 
+
+  /** @domName Element.scrollByPages */
   void scrollByPages(int pages) native "Element_scrollByPages_Callback";
 
   void scrollIntoView([/*boolean*/ centerIfNeeded]) {
@@ -13460,20 +9747,91 @@
     _scrollIntoViewIfNeeded_2();
   }
 
+
+  /** @domName Element.scrollIntoViewIfNeeded_1 */
   void _scrollIntoViewIfNeeded_1(centerIfNeeded) native "Element_scrollIntoViewIfNeeded_1_Callback";
 
+
+  /** @domName Element.scrollIntoViewIfNeeded_2 */
   void _scrollIntoViewIfNeeded_2() native "Element_scrollIntoViewIfNeeded_2_Callback";
 
+
+  /** @domName Element.setAttribute */
   void $dom_setAttribute(String name, String value) native "Element_setAttribute_Callback";
 
+
+  /** @domName Element.webkitMatchesSelector */
   bool matchesSelector(String selectors) native "Element_webkitMatchesSelector_Callback";
 
+
+  /** @domName Element.webkitRequestFullScreen */
   void webkitRequestFullScreen(int flags) native "Element_webkitRequestFullScreen_Callback";
 
+
+  /** @domName Element.webkitRequestFullscreen */
   void webkitRequestFullscreen() native "Element_webkitRequestFullscreen_Callback";
 
+
+  /** @domName Element.webkitRequestPointerLock */
   void webkitRequestPointerLock() native "Element_webkitRequestPointerLock_Callback";
 
+  /** @domName HTMLElement.children */
+  HTMLCollection get $dom_children;
+
+  /** @domName HTMLElement.contentEditable */
+  String contentEditable;
+
+  /** @domName HTMLElement.dir */
+  String dir;
+
+  /** @domName HTMLElement.draggable */
+  bool draggable;
+
+  /** @domName HTMLElement.hidden */
+  bool hidden;
+
+  /** @domName HTMLElement.id */
+  String id;
+
+  /** @domName HTMLElement.innerHTML */
+  String innerHTML;
+
+  /** @domName HTMLElement.isContentEditable */
+  bool get isContentEditable;
+
+  /** @domName HTMLElement.lang */
+  String lang;
+
+  /** @domName HTMLElement.outerHTML */
+  String get outerHTML;
+
+  /** @domName HTMLElement.spellcheck */
+  bool spellcheck;
+
+  /** @domName HTMLElement.tabIndex */
+  int tabIndex;
+
+  /** @domName HTMLElement.title */
+  String title;
+
+  /** @domName HTMLElement.translate */
+  bool translate;
+
+  /** @domName HTMLElement.webkitdropzone */
+  String webkitdropzone;
+
+  /** @domName HTMLElement.click */
+  void click();
+
+  /** @domName HTMLElement.insertAdjacentElement */
+  Element insertAdjacentElement(String where, Element element);
+
+  /** @domName HTMLElement.insertAdjacentHTML */
+  void insertAdjacentHTML(String where, String html);
+
+  /** @domName HTMLElement.insertAdjacentText */
+  void insertAdjacentText(String where, String text);
+
 }
 
 // Temporary dispatch hook to support WebComponents.
@@ -13512,7 +9870,7 @@
         parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
       }
     }
-    final _ElementImpl temp = new Element.tag(parentTag);
+    final Element temp = new Element.tag(parentTag);
     temp.innerHTML = html;
 
     Element element;
@@ -13533,11 +9891,11 @@
 
   /** @domName Document.createElement */
   static Element createElement_tag(String tag) =>
-      _document.$dom_createElement(tag);
+      document.$dom_createElement(tag);
 }
 
-class _ElementEventsImpl extends _EventsImpl implements ElementEvents {
-  _ElementEventsImpl(_ptr) : super(_ptr);
+class ElementEvents extends Events {
+  ElementEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -13641,91 +9999,26 @@
 
 // WARNING: Do not edit - generated code.
 
-class _ElementImpl_Merged extends _ElementImpl implements Element {
-
-  HTMLCollection get $dom_children native "HTMLElement_children_Getter";
-
-  String get contentEditable native "HTMLElement_contentEditable_Getter";
-
-  void set contentEditable(String value) native "HTMLElement_contentEditable_Setter";
-
-  String get dir native "HTMLElement_dir_Getter";
-
-  void set dir(String value) native "HTMLElement_dir_Setter";
-
-  bool get draggable native "HTMLElement_draggable_Getter";
-
-  void set draggable(bool value) native "HTMLElement_draggable_Setter";
-
-  bool get hidden native "HTMLElement_hidden_Getter";
-
-  void set hidden(bool value) native "HTMLElement_hidden_Setter";
-
-  String get id native "HTMLElement_id_Getter";
-
-  void set id(String value) native "HTMLElement_id_Setter";
-
-  String get innerHTML native "HTMLElement_innerHTML_Getter";
-
-  void set innerHTML(String value) native "HTMLElement_innerHTML_Setter";
-
-  bool get isContentEditable native "HTMLElement_isContentEditable_Getter";
-
-  String get lang native "HTMLElement_lang_Getter";
-
-  void set lang(String value) native "HTMLElement_lang_Setter";
-
-  String get outerHTML native "HTMLElement_outerHTML_Getter";
-
-  bool get spellcheck native "HTMLElement_spellcheck_Getter";
-
-  void set spellcheck(bool value) native "HTMLElement_spellcheck_Setter";
-
-  int get tabIndex native "HTMLElement_tabIndex_Getter";
-
-  void set tabIndex(int value) native "HTMLElement_tabIndex_Setter";
-
-  String get title native "HTMLElement_title_Getter";
-
-  void set title(String value) native "HTMLElement_title_Setter";
-
-  bool get translate native "HTMLElement_translate_Getter";
-
-  void set translate(bool value) native "HTMLElement_translate_Setter";
-
-  String get webkitdropzone native "HTMLElement_webkitdropzone_Getter";
-
-  void set webkitdropzone(String value) native "HTMLElement_webkitdropzone_Setter";
-
-  void click() native "HTMLElement_click_Callback";
-
-  Element insertAdjacentElement(String where, Element element) native "HTMLElement_insertAdjacentElement_Callback";
-
-  void insertAdjacentHTML(String where, String html) native "HTMLElement_insertAdjacentHTML_Callback";
-
-  void insertAdjacentText(String where, String text) native "HTMLElement_insertAdjacentText_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName ElementTimeControl
-abstract class ElementTimeControl {
+class ElementTimeControl extends NativeFieldWrapperClass1 {
+  ElementTimeControl.internal();
+
 
   /** @domName ElementTimeControl.beginElement */
-  void beginElement();
+  void beginElement() native "ElementTimeControl_beginElement_Callback";
+
 
   /** @domName ElementTimeControl.beginElementAt */
-  void beginElementAt(num offset);
+  void beginElementAt(num offset) native "ElementTimeControl_beginElementAt_Callback";
+
 
   /** @domName ElementTimeControl.endElement */
-  void endElement();
+  void endElement() native "ElementTimeControl_endElement_Callback";
+
 
   /** @domName ElementTimeControl.endElementAt */
-  void endElementAt(num offset);
+  void endElementAt(num offset) native "ElementTimeControl_endElementAt_Callback";
+
 }
 // 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
@@ -13734,22 +10027,29 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ElementTraversal
-abstract class ElementTraversal {
+class ElementTraversal extends NativeFieldWrapperClass1 {
+  ElementTraversal.internal();
+
 
   /** @domName ElementTraversal.childElementCount */
-  int get childElementCount;
+  int get childElementCount native "ElementTraversal_childElementCount_Getter";
+
 
   /** @domName ElementTraversal.firstElementChild */
-  Element get firstElementChild;
+  Element get firstElementChild native "ElementTraversal_firstElementChild_Getter";
+
 
   /** @domName ElementTraversal.lastElementChild */
-  Element get lastElementChild;
+  Element get lastElementChild native "ElementTraversal_lastElementChild_Getter";
+
 
   /** @domName ElementTraversal.nextElementSibling */
-  Element get nextElementSibling;
+  Element get nextElementSibling native "ElementTraversal_nextElementSibling_Getter";
+
 
   /** @domName ElementTraversal.previousElementSibling */
-  Element get previousElementSibling;
+  Element get previousElementSibling native "ElementTraversal_previousElementSibling_Getter";
+
 }
 // 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
@@ -13758,58 +10058,57 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLEmbedElement
-abstract class EmbedElement implements Element {
+class EmbedElement extends _Element_Merged {
 
   factory EmbedElement() => _Elements.createEmbedElement();
+  EmbedElement.internal(): super.internal();
+
 
   /** @domName HTMLEmbedElement.align */
-  String align;
-
-  /** @domName HTMLEmbedElement.height */
-  String height;
-
-  /** @domName HTMLEmbedElement.name */
-  String name;
-
-  /** @domName HTMLEmbedElement.src */
-  String src;
-
-  /** @domName HTMLEmbedElement.type */
-  String type;
-
-  /** @domName HTMLEmbedElement.width */
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EmbedElementImpl extends _ElementImpl_Merged implements EmbedElement {
-
   String get align native "HTMLEmbedElement_align_Getter";
 
+
+  /** @domName HTMLEmbedElement.align */
   void set align(String value) native "HTMLEmbedElement_align_Setter";
 
+
+  /** @domName HTMLEmbedElement.height */
   String get height native "HTMLEmbedElement_height_Getter";
 
+
+  /** @domName HTMLEmbedElement.height */
   void set height(String value) native "HTMLEmbedElement_height_Setter";
 
+
+  /** @domName HTMLEmbedElement.name */
   String get name native "HTMLEmbedElement_name_Getter";
 
+
+  /** @domName HTMLEmbedElement.name */
   void set name(String value) native "HTMLEmbedElement_name_Setter";
 
+
+  /** @domName HTMLEmbedElement.src */
   String get src native "HTMLEmbedElement_src_Getter";
 
+
+  /** @domName HTMLEmbedElement.src */
   void set src(String value) native "HTMLEmbedElement_src_Setter";
 
+
+  /** @domName HTMLEmbedElement.type */
   String get type native "HTMLEmbedElement_type_Getter";
 
+
+  /** @domName HTMLEmbedElement.type */
   void set type(String value) native "HTMLEmbedElement_type_Setter";
 
+
+  /** @domName HTMLEmbedElement.width */
   String get width native "HTMLEmbedElement_width_Getter";
 
+
+  /** @domName HTMLEmbedElement.width */
   void set width(String value) native "HTMLEmbedElement_width_Setter";
 
 }
@@ -13820,15 +10119,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName EntityReference
-abstract class EntityReference implements Node {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EntityReferenceImpl extends _NodeImpl implements EntityReference {
+class EntityReference extends Node {
+  EntityReference.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -13846,231 +10138,76 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Entry
-abstract class Entry {
+class Entry extends NativeFieldWrapperClass1 {
+  Entry.internal();
+
 
   /** @domName Entry.filesystem */
-  DOMFileSystem get filesystem;
+  DOMFileSystem get filesystem native "Entry_filesystem_Getter";
+
 
   /** @domName Entry.fullPath */
-  String get fullPath;
+  String get fullPath native "Entry_fullPath_Getter";
+
 
   /** @domName Entry.isDirectory */
-  bool get isDirectory;
+  bool get isDirectory native "Entry_isDirectory_Getter";
+
 
   /** @domName Entry.isFile */
-  bool get isFile;
+  bool get isFile native "Entry_isFile_Getter";
+
 
   /** @domName Entry.name */
-  String get name;
+  String get name native "Entry_name_Getter";
 
-  /** @domName Entry.copyTo */
-  void copyTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void copyTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+    if (?name) {
+      _copyTo_1(parent, name, successCallback, errorCallback);
+      return;
+    }
+    _copyTo_2(parent);
+  }
+
+
+  /** @domName Entry.copyTo_1 */
+  void _copyTo_1(parent, name, successCallback, errorCallback) native "Entry_copyTo_1_Callback";
+
+
+  /** @domName Entry.copyTo_2 */
+  void _copyTo_2(parent) native "Entry_copyTo_2_Callback";
+
 
   /** @domName Entry.getMetadata */
-  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]);
+  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native "Entry_getMetadata_Callback";
+
 
   /** @domName Entry.getParent */
-  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]);
+  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native "Entry_getParent_Callback";
 
-  /** @domName Entry.moveTo */
-  void moveTo(DirectoryEntry parent, [String name, EntryCallback successCallback, ErrorCallback errorCallback]);
+  void moveTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
+    if (?name) {
+      _moveTo_1(parent, name, successCallback, errorCallback);
+      return;
+    }
+    _moveTo_2(parent);
+  }
+
+
+  /** @domName Entry.moveTo_1 */
+  void _moveTo_1(parent, name, successCallback, errorCallback) native "Entry_moveTo_1_Callback";
+
+
+  /** @domName Entry.moveTo_2 */
+  void _moveTo_2(parent) native "Entry_moveTo_2_Callback";
+
 
   /** @domName Entry.remove */
-  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]);
+  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native "Entry_remove_Callback";
+
 
   /** @domName Entry.toURL */
-  String toURL();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EntryArrayImpl extends NativeFieldWrapperClass1 implements List<Entry> {
-
-  int get length native "EntryArray_length_Getter";
-
-  Entry operator[](int index) native "EntryArray_item_Callback";
-
-  void operator[]=(int index, Entry value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Entry> mixins.
-  // Entry is the element type.
-
-  // From Iterable<Entry>:
-
-  Iterator<Entry> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Entry>(this);
-  }
-
-  // From Collection<Entry>:
-
-  void add(Entry value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Entry value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Entry> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Entry element) => _Collections.contains(this, element);
-
-  void forEach(void f(Entry element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Entry element)) => _Collections.map(this, [], f);
-
-  Collection<Entry> filter(bool f(Entry element)) =>
-     _Collections.filter(this, <Entry>[], f);
-
-  bool every(bool f(Entry element)) => _Collections.every(this, f);
-
-  bool some(bool f(Entry element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Entry>:
-
-  void sort([Comparator<Entry> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Entry element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Entry element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Entry get last => this[length - 1];
-
-  Entry removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Entry initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Entry> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Entry>[]);
-
-  // -- end List<Entry> mixins.
-
-  Entry item(int index) native "EntryArray_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EntryArraySyncImpl extends NativeFieldWrapperClass1 implements List<EntrySync> {
-
-  int get length native "EntryArraySync_length_Getter";
-
-  EntrySync operator[](int index) native "EntryArraySync_item_Callback";
-
-  void operator[]=(int index, EntrySync value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<EntrySync> mixins.
-  // EntrySync is the element type.
-
-  // From Iterable<EntrySync>:
-
-  Iterator<EntrySync> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<EntrySync>(this);
-  }
-
-  // From Collection<EntrySync>:
-
-  void add(EntrySync value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(EntrySync value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<EntrySync> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(EntrySync element) => _Collections.contains(this, element);
-
-  void forEach(void f(EntrySync element)) => _Collections.forEach(this, f);
-
-  Collection map(f(EntrySync element)) => _Collections.map(this, [], f);
-
-  Collection<EntrySync> filter(bool f(EntrySync element)) =>
-     _Collections.filter(this, <EntrySync>[], f);
-
-  bool every(bool f(EntrySync element)) => _Collections.every(this, f);
-
-  bool some(bool f(EntrySync element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<EntrySync>:
-
-  void sort([Comparator<EntrySync> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(EntrySync element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(EntrySync element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  EntrySync get last => this[length - 1];
-
-  EntrySync removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<EntrySync> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <EntrySync>[]);
-
-  // -- end List<EntrySync> mixins.
-
-  EntrySync item(int index) native "EntryArraySync_item_Callback";
+  String toURL() native "Entry_toURL_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -14087,121 +10224,52 @@
 
 // WARNING: Do not edit - generated code.
 
-class _EntryImpl extends NativeFieldWrapperClass1 implements Entry {
-
-  DOMFileSystem get filesystem native "Entry_filesystem_Getter";
-
-  String get fullPath native "Entry_fullPath_Getter";
-
-  bool get isDirectory native "Entry_isDirectory_Getter";
-
-  bool get isFile native "Entry_isFile_Getter";
-
-  String get name native "Entry_name_Getter";
-
-  void copyTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
-    if (?name) {
-      _copyTo_1(parent, name, successCallback, errorCallback);
-      return;
-    }
-    _copyTo_2(parent);
-  }
-
-  void _copyTo_1(parent, name, successCallback, errorCallback) native "Entry_copyTo_1_Callback";
-
-  void _copyTo_2(parent) native "Entry_copyTo_2_Callback";
-
-  void getMetadata(MetadataCallback successCallback, [ErrorCallback errorCallback]) native "Entry_getMetadata_Callback";
-
-  void getParent([EntryCallback successCallback, ErrorCallback errorCallback]) native "Entry_getParent_Callback";
-
-  void moveTo(/*DirectoryEntry*/ parent, [/*DOMString*/ name, /*EntryCallback*/ successCallback, /*ErrorCallback*/ errorCallback]) {
-    if (?name) {
-      _moveTo_1(parent, name, successCallback, errorCallback);
-      return;
-    }
-    _moveTo_2(parent);
-  }
-
-  void _moveTo_1(parent, name, successCallback, errorCallback) native "Entry_moveTo_1_Callback";
-
-  void _moveTo_2(parent) native "Entry_moveTo_2_Callback";
-
-  void remove(VoidCallback successCallback, [ErrorCallback errorCallback]) native "Entry_remove_Callback";
-
-  String toURL() native "Entry_toURL_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName EntrySync
-abstract class EntrySync {
+class EntrySync extends NativeFieldWrapperClass1 {
+  EntrySync.internal();
+
 
   /** @domName EntrySync.filesystem */
-  DOMFileSystemSync get filesystem;
-
-  /** @domName EntrySync.fullPath */
-  String get fullPath;
-
-  /** @domName EntrySync.isDirectory */
-  bool get isDirectory;
-
-  /** @domName EntrySync.isFile */
-  bool get isFile;
-
-  /** @domName EntrySync.name */
-  String get name;
-
-  /** @domName EntrySync.copyTo */
-  EntrySync copyTo(DirectoryEntrySync parent, String name);
-
-  /** @domName EntrySync.getMetadata */
-  Metadata getMetadata();
-
-  /** @domName EntrySync.getParent */
-  EntrySync getParent();
-
-  /** @domName EntrySync.moveTo */
-  EntrySync moveTo(DirectoryEntrySync parent, String name);
-
-  /** @domName EntrySync.remove */
-  void remove();
-
-  /** @domName EntrySync.toURL */
-  String toURL();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EntrySyncImpl extends NativeFieldWrapperClass1 implements EntrySync {
-
   DOMFileSystemSync get filesystem native "EntrySync_filesystem_Getter";
 
+
+  /** @domName EntrySync.fullPath */
   String get fullPath native "EntrySync_fullPath_Getter";
 
+
+  /** @domName EntrySync.isDirectory */
   bool get isDirectory native "EntrySync_isDirectory_Getter";
 
+
+  /** @domName EntrySync.isFile */
   bool get isFile native "EntrySync_isFile_Getter";
 
+
+  /** @domName EntrySync.name */
   String get name native "EntrySync_name_Getter";
 
+
+  /** @domName EntrySync.copyTo */
   EntrySync copyTo(DirectoryEntrySync parent, String name) native "EntrySync_copyTo_Callback";
 
+
+  /** @domName EntrySync.getMetadata */
   Metadata getMetadata() native "EntrySync_getMetadata_Callback";
 
+
+  /** @domName EntrySync.getParent */
   EntrySync getParent() native "EntrySync_getParent_Callback";
 
+
+  /** @domName EntrySync.moveTo */
   EntrySync moveTo(DirectoryEntrySync parent, String name) native "EntrySync_moveTo_Callback";
 
+
+  /** @domName EntrySync.remove */
   void remove() native "EntrySync_remove_Callback";
 
+
+  /** @domName EntrySync.toURL */
   String toURL() native "EntrySync_toURL_Callback";
 
 }
@@ -14220,29 +10288,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ErrorEvent
-abstract class ErrorEvent implements Event {
+class ErrorEvent extends Event {
+  ErrorEvent.internal(): super.internal();
+
 
   /** @domName ErrorEvent.filename */
-  String get filename;
-
-  /** @domName ErrorEvent.lineno */
-  int get lineno;
-
-  /** @domName ErrorEvent.message */
-  String get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ErrorEventImpl extends _EventImpl implements ErrorEvent {
-
   String get filename native "ErrorEvent_filename_Getter";
 
+
+  /** @domName ErrorEvent.lineno */
   int get lineno native "ErrorEvent_lineno_Getter";
 
+
+  /** @domName ErrorEvent.message */
   String get message native "ErrorEvent_message_Getter";
 
 }
@@ -14252,10 +10310,7 @@
 
 // WARNING: Do not edit - generated code.
 
-
-/// @domName Event
-abstract class Event {
-
+class Event extends NativeFieldWrapperClass1 {
   // In JS, canBubble and cancelable are technically required parameters to
   // init*Event. In practice, though, if they aren't provided they simply
   // default to false (since that's Boolean(undefined)).
@@ -14264,6 +10319,7 @@
   // what people want most of the time anyway.
   factory Event(String type, [bool canBubble = true, bool cancelable = true]) =>
       _EventFactoryProvider.createEvent(type, canBubble, cancelable);
+  Event.internal();
 
   static const int AT_TARGET = 2;
 
@@ -14305,138 +10361,76 @@
 
   static const int SELECT = 16384;
 
+
   /** @domName Event.bubbles */
-  bool get bubbles;
-
-  /** @domName Event.cancelBubble */
-  bool cancelBubble;
-
-  /** @domName Event.cancelable */
-  bool get cancelable;
-
-  /** @domName Event.clipboardData */
-  Clipboard get clipboardData;
-
-  /** @domName Event.currentTarget */
-  EventTarget get currentTarget;
-
-  /** @domName Event.defaultPrevented */
-  bool get defaultPrevented;
-
-  /** @domName Event.eventPhase */
-  int get eventPhase;
-
-  /** @domName Event.returnValue */
-  bool returnValue;
-
-  /** @domName Event.srcElement */
-  EventTarget get srcElement;
-
-  /** @domName Event.target */
-  EventTarget get target;
-
-  /** @domName Event.timeStamp */
-  int get timeStamp;
-
-  /** @domName Event.type */
-  String get type;
-
-  /** @domName Event.initEvent */
-  void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg);
-
-  /** @domName Event.preventDefault */
-  void preventDefault();
-
-  /** @domName Event.stopImmediatePropagation */
-  void stopImmediatePropagation();
-
-  /** @domName Event.stopPropagation */
-  void stopPropagation();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName EventException
-abstract class EventException {
-
-  static const int DISPATCH_REQUEST_ERR = 1;
-
-  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
-
-  /** @domName EventException.code */
-  int get code;
-
-  /** @domName EventException.message */
-  String get message;
-
-  /** @domName EventException.name */
-  String get name;
-
-  /** @domName EventException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EventExceptionImpl extends NativeFieldWrapperClass1 implements EventException {
-
-  int get code native "EventException_code_Getter";
-
-  String get message native "EventException_message_Getter";
-
-  String get name native "EventException_name_Getter";
-
-  String toString() native "EventException_toString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _EventImpl extends NativeFieldWrapperClass1 implements Event {
-
   bool get bubbles native "Event_bubbles_Getter";
 
+
+  /** @domName Event.cancelBubble */
   bool get cancelBubble native "Event_cancelBubble_Getter";
 
+
+  /** @domName Event.cancelBubble */
   void set cancelBubble(bool value) native "Event_cancelBubble_Setter";
 
+
+  /** @domName Event.cancelable */
   bool get cancelable native "Event_cancelable_Getter";
 
+
+  /** @domName Event.clipboardData */
   Clipboard get clipboardData native "Event_clipboardData_Getter";
 
+
+  /** @domName Event.currentTarget */
   EventTarget get currentTarget native "Event_currentTarget_Getter";
 
+
+  /** @domName Event.defaultPrevented */
   bool get defaultPrevented native "Event_defaultPrevented_Getter";
 
+
+  /** @domName Event.eventPhase */
   int get eventPhase native "Event_eventPhase_Getter";
 
+
+  /** @domName Event.returnValue */
   bool get returnValue native "Event_returnValue_Getter";
 
+
+  /** @domName Event.returnValue */
   void set returnValue(bool value) native "Event_returnValue_Setter";
 
+
+  /** @domName Event.srcElement */
   EventTarget get srcElement native "Event_srcElement_Getter";
 
+
+  /** @domName Event.target */
   EventTarget get target native "Event_target_Getter";
 
+
+  /** @domName Event.timeStamp */
   int get timeStamp native "Event_timeStamp_Getter";
 
+
+  /** @domName Event.type */
   String get type native "Event_type_Getter";
 
+
+  /** @domName Event.initEvent */
   void $dom_initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) native "Event_initEvent_Callback";
 
+
+  /** @domName Event.preventDefault */
   void preventDefault() native "Event_preventDefault_Callback";
 
+
+  /** @domName Event.stopImmediatePropagation */
   void stopImmediatePropagation() native "Event_stopImmediatePropagation_Callback";
 
+
+  /** @domName Event.stopPropagation */
   void stopPropagation() native "Event_stopPropagation_Callback";
 
 }
@@ -14446,51 +10440,30 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName EventSource
-abstract class EventSource implements EventTarget {
+/// @domName EventException
+class EventException extends NativeFieldWrapperClass1 {
+  EventException.internal();
 
-  factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
+  static const int DISPATCH_REQUEST_ERR = 1;
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  EventSourceEvents get on;
+  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
 
-  static const int CLOSED = 2;
 
-  static const int CONNECTING = 0;
+  /** @domName EventException.code */
+  int get code native "EventException_code_Getter";
 
-  static const int OPEN = 1;
 
-  /** @domName EventSource.URL */
-  String get URL;
+  /** @domName EventException.message */
+  String get message native "EventException_message_Getter";
 
-  /** @domName EventSource.readyState */
-  int get readyState;
 
-  /** @domName EventSource.url */
-  String get url;
+  /** @domName EventException.name */
+  String get name native "EventException_name_Getter";
 
-  /** @domName EventSource.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
 
-  /** @domName EventSource.close */
-  void close();
+  /** @domName EventException.toString */
+  String toString() native "EventException_toString_Callback";
 
-  /** @domName EventSource.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName EventSource.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class EventSourceEvents implements Events {
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
 }
 // 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
@@ -14498,29 +10471,56 @@
 
 // WARNING: Do not edit - generated code.
 
-class _EventSourceImpl extends _EventTargetImpl implements EventSource {
+/// @domName EventSource
+class EventSource extends EventTarget {
 
-  _EventSourceEventsImpl get on =>
-    new _EventSourceEventsImpl(this);
+  factory EventSource(String scriptUrl) => _EventSourceFactoryProvider.createEventSource(scriptUrl);
+  EventSource.internal(): super.internal();
 
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  EventSourceEvents get on =>
+    new EventSourceEvents(this);
+
+  static const int CLOSED = 2;
+
+  static const int CONNECTING = 0;
+
+  static const int OPEN = 1;
+
+
+  /** @domName EventSource.URL */
   String get URL native "EventSource_URL_Getter";
 
+
+  /** @domName EventSource.readyState */
   int get readyState native "EventSource_readyState_Getter";
 
+
+  /** @domName EventSource.url */
   String get url native "EventSource_url_Getter";
 
+
+  /** @domName EventSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "EventSource_addEventListener_Callback";
 
+
+  /** @domName EventSource.close */
   void close() native "EventSource_close_Callback";
 
+
+  /** @domName EventSource.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "EventSource_dispatchEvent_Callback";
 
+
+  /** @domName EventSource.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "EventSource_removeEventListener_Callback";
 
 }
 
-class _EventSourceEventsImpl extends _EventsImpl implements EventSourceEvents {
-  _EventSourceEventsImpl(_ptr) : super(_ptr);
+class EventSourceEvents extends Events {
+  EventSourceEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get error => this['error'];
 
@@ -14532,71 +10532,33 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-
-abstract class EventListenerList {
-  EventListenerList add(EventListener handler, [bool useCapture]);
-
-  EventListenerList remove(EventListener handler, [bool useCapture]);
-
-  bool dispatch(Event evt);
-}
-
-abstract class Events {
-  EventListenerList operator [](String type);
-}
-
-/// @domName EventTarget
-abstract class EventTarget {
-
-  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
-  abstract Events get on;
-
-  /** @domName EventTarget.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName EventTarget.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName EventTarget.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-}
-// 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 {
+class Events {
   /* Raw event target. */
-  // TODO(jacobr): it would be nice if we could specify this as
-  // _EventTargetImpl or EventTarget
-  final _ptr;
+  final EventTarget _ptr;
 
-  _EventsImpl(this._ptr);
+  Events(this._ptr);
 
-  _EventListenerListImpl operator [](String type) {
-    return new _EventListenerListImpl(_ptr, type);
+  EventListenerList operator [](String type) {
+    return new EventListenerList(_ptr, type);
   }
 }
 
-class _EventListenerListImpl implements EventListenerList {
+class EventListenerList {
 
-  // TODO(jacobr): make this _EventTargetImpl
-  final _ptr;
+  final EventTarget _ptr;
   final String _type;
 
-  _EventListenerListImpl(this._ptr, this._type);
+  EventListenerList(this._ptr, this._type);
 
   // TODO(jacobr): implement equals.
 
-  _EventListenerListImpl add(EventListener listener,
+  EventListenerList add(EventListener listener,
       [bool useCapture = false]) {
     _add(listener, useCapture);
     return this;
   }
 
-  _EventListenerListImpl remove(EventListener listener,
+  EventListenerList remove(EventListener listener,
       [bool useCapture = false]) {
     _remove(listener, useCapture);
     return this;
@@ -14616,14 +10578,22 @@
 }
 
 
-class _EventTargetImpl extends NativeFieldWrapperClass1 implements EventTarget {
+class EventTarget extends NativeFieldWrapperClass1 {
 
-  Events get on => new _EventsImpl(this);
+  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  Events get on => new Events(this);
+  EventTarget.internal();
 
+
+  /** @domName EventTarget.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "EventTarget_addEventListener_Callback";
 
+
+  /** @domName EventTarget.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "EventTarget_dispatchEvent_Callback";
 
+
+  /** @domName EventTarget.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "EventTarget_removeEventListener_Callback";
 
 }
@@ -14634,70 +10604,57 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLFieldSetElement
-abstract class FieldSetElement implements Element {
+class FieldSetElement extends _Element_Merged {
 
   factory FieldSetElement() => _Elements.createFieldSetElement();
+  FieldSetElement.internal(): super.internal();
+
 
   /** @domName HTMLFieldSetElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLFieldSetElement.elements */
-  HTMLCollection get elements;
-
-  /** @domName HTMLFieldSetElement.form */
-  FormElement get form;
-
-  /** @domName HTMLFieldSetElement.name */
-  String name;
-
-  /** @domName HTMLFieldSetElement.type */
-  String get type;
-
-  /** @domName HTMLFieldSetElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLFieldSetElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLFieldSetElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLFieldSetElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLFieldSetElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FieldSetElementImpl extends _ElementImpl_Merged implements FieldSetElement {
-
   bool get disabled native "HTMLFieldSetElement_disabled_Getter";
 
+
+  /** @domName HTMLFieldSetElement.disabled */
   void set disabled(bool value) native "HTMLFieldSetElement_disabled_Setter";
 
+
+  /** @domName HTMLFieldSetElement.elements */
   HTMLCollection get elements native "HTMLFieldSetElement_elements_Getter";
 
+
+  /** @domName HTMLFieldSetElement.form */
   FormElement get form native "HTMLFieldSetElement_form_Getter";
 
+
+  /** @domName HTMLFieldSetElement.name */
   String get name native "HTMLFieldSetElement_name_Getter";
 
+
+  /** @domName HTMLFieldSetElement.name */
   void set name(String value) native "HTMLFieldSetElement_name_Setter";
 
+
+  /** @domName HTMLFieldSetElement.type */
   String get type native "HTMLFieldSetElement_type_Getter";
 
+
+  /** @domName HTMLFieldSetElement.validationMessage */
   String get validationMessage native "HTMLFieldSetElement_validationMessage_Getter";
 
+
+  /** @domName HTMLFieldSetElement.validity */
   ValidityState get validity native "HTMLFieldSetElement_validity_Getter";
 
+
+  /** @domName HTMLFieldSetElement.willValidate */
   bool get willValidate native "HTMLFieldSetElement_willValidate_Getter";
 
+
+  /** @domName HTMLFieldSetElement.checkValidity */
   bool checkValidity() native "HTMLFieldSetElement_checkValidity_Callback";
 
+
+  /** @domName HTMLFieldSetElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLFieldSetElement_setCustomValidity_Callback";
 
 }
@@ -14708,16 +10665,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName File
-abstract class File implements Blob {
+class File extends Blob {
+  File.internal(): super.internal();
+
 
   /** @domName File.lastModifiedDate */
-  Date get lastModifiedDate;
+  Date get lastModifiedDate native "File_lastModifiedDate_Getter";
+
 
   /** @domName File.name */
-  String get name;
+  String get name native "File_name_Getter";
+
 
   /** @domName File.webkitRelativePath */
-  String get webkitRelativePath;
+  String get webkitRelativePath native "File_webkitRelativePath_Getter";
+
 }
 // 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
@@ -14734,24 +10696,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileEntry
-abstract class FileEntry implements Entry {
+class FileEntry extends Entry {
+  FileEntry.internal(): super.internal();
+
 
   /** @domName FileEntry.createWriter */
-  void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName FileEntry.file */
-  void file(FileCallback successCallback, [ErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileEntryImpl extends _EntryImpl implements FileEntry {
-
   void createWriter(FileWriterCallback successCallback, [ErrorCallback errorCallback]) native "FileEntry_createWriter_Callback";
 
+
+  /** @domName FileEntry.file */
   void file(FileCallback successCallback, [ErrorCallback errorCallback]) native "FileEntry_file_Callback";
 
 }
@@ -14762,24 +10715,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileEntrySync
-abstract class FileEntrySync implements EntrySync {
+class FileEntrySync extends EntrySync {
+  FileEntrySync.internal(): super.internal();
+
 
   /** @domName FileEntrySync.createWriter */
-  FileWriterSync createWriter();
-
-  /** @domName FileEntrySync.file */
-  File file();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileEntrySyncImpl extends _EntrySyncImpl implements FileEntrySync {
-
   FileWriterSync createWriter() native "FileEntrySync_createWriter_Callback";
 
+
+  /** @domName FileEntrySync.file */
   File file() native "FileEntrySync_file_Callback";
 
 }
@@ -14790,7 +10734,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileError
-abstract class FileError {
+class FileError extends NativeFieldWrapperClass1 {
+  FileError.internal();
 
   static const int ABORT_ERR = 3;
 
@@ -14816,17 +10761,8 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
+
   /** @domName FileError.code */
-  int get code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileErrorImpl extends NativeFieldWrapperClass1 implements FileError {
-
   int get code native "FileError_code_Getter";
 
 }
@@ -14837,7 +10773,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileException
-abstract class FileException {
+class FileException extends NativeFieldWrapperClass1 {
+  FileException.internal();
 
   static const int ABORT_ERR = 3;
 
@@ -14863,32 +10800,20 @@
 
   static const int TYPE_MISMATCH_ERR = 11;
 
+
   /** @domName FileException.code */
-  int get code;
-
-  /** @domName FileException.message */
-  String get message;
-
-  /** @domName FileException.name */
-  String get name;
-
-  /** @domName FileException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileExceptionImpl extends NativeFieldWrapperClass1 implements FileException {
-
   int get code native "FileException_code_Getter";
 
+
+  /** @domName FileException.message */
   String get message native "FileException_message_Getter";
 
+
+  /** @domName FileException.name */
   String get name native "FileException_name_Getter";
 
+
+  /** @domName FileException.toString */
   String toString() native "FileException_toString_Callback";
 
 }
@@ -14898,126 +10823,17 @@
 
 // WARNING: Do not edit - generated code.
 
-class _FileImpl extends _BlobImpl implements File {
-
-  Date get lastModifiedDate native "File_lastModifiedDate_Getter";
-
-  String get name native "File_name_Getter";
-
-  String get webkitRelativePath native "File_webkitRelativePath_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileListImpl extends NativeFieldWrapperClass1 implements List<File> {
-
-  int get length native "FileList_length_Getter";
-
-  File operator[](int index) native "FileList_item_Callback";
-
-  void operator[]=(int index, File value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<File> mixins.
-  // File is the element type.
-
-  // From Iterable<File>:
-
-  Iterator<File> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<File>(this);
-  }
-
-  // From Collection<File>:
-
-  void add(File value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(File value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<File> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(File element) => _Collections.contains(this, element);
-
-  void forEach(void f(File element)) => _Collections.forEach(this, f);
-
-  Collection map(f(File element)) => _Collections.map(this, [], f);
-
-  Collection<File> filter(bool f(File element)) =>
-     _Collections.filter(this, <File>[], f);
-
-  bool every(bool f(File element)) => _Collections.every(this, f);
-
-  bool some(bool f(File element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<File>:
-
-  void sort([Comparator<File> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(File element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(File element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  File get last => this[length - 1];
-
-  File removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [File initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<File> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <File>[]);
-
-  // -- end List<File> mixins.
-
-  File item(int index) native "FileList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName FileReader
-abstract class FileReader implements EventTarget {
+class FileReader extends EventTarget {
 
   factory FileReader() => _FileReaderFactoryProvider.createFileReader();
+  FileReader.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  FileReaderEvents get on;
+  FileReaderEvents get on =>
+    new FileReaderEvents(this);
 
   static const int DONE = 2;
 
@@ -15025,81 +10841,40 @@
 
   static const int LOADING = 1;
 
+
   /** @domName FileReader.error */
-  FileError get error;
-
-  /** @domName FileReader.readyState */
-  int get readyState;
-
-  /** @domName FileReader.result */
-  Object get result;
-
-  /** @domName FileReader.abort */
-  void abort();
-
-  /** @domName FileReader.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileReader.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName FileReader.readAsArrayBuffer */
-  void readAsArrayBuffer(Blob blob);
-
-  /** @domName FileReader.readAsBinaryString */
-  void readAsBinaryString(Blob blob);
-
-  /** @domName FileReader.readAsDataURL */
-  void readAsDataURL(Blob blob);
-
-  /** @domName FileReader.readAsText */
-  void readAsText(Blob blob, [String encoding]);
-
-  /** @domName FileReader.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class FileReaderEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileReaderImpl extends _EventTargetImpl implements FileReader {
-
-  _FileReaderEventsImpl get on =>
-    new _FileReaderEventsImpl(this);
-
   FileError get error native "FileReader_error_Getter";
 
+
+  /** @domName FileReader.readyState */
   int get readyState native "FileReader_readyState_Getter";
 
+
+  /** @domName FileReader.result */
   Object get result native "FileReader_result_Getter";
 
+
+  /** @domName FileReader.abort */
   void abort() native "FileReader_abort_Callback";
 
+
+  /** @domName FileReader.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "FileReader_addEventListener_Callback";
 
+
+  /** @domName FileReader.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "FileReader_dispatchEvent_Callback";
 
+
+  /** @domName FileReader.readAsArrayBuffer */
   void readAsArrayBuffer(Blob blob) native "FileReader_readAsArrayBuffer_Callback";
 
+
+  /** @domName FileReader.readAsBinaryString */
   void readAsBinaryString(Blob blob) native "FileReader_readAsBinaryString_Callback";
 
+
+  /** @domName FileReader.readAsDataURL */
   void readAsDataURL(Blob blob) native "FileReader_readAsDataURL_Callback";
 
   void readAsText(/*Blob*/ blob, [/*DOMString*/ encoding]) {
@@ -15110,16 +10885,22 @@
     _readAsText_2(blob);
   }
 
+
+  /** @domName FileReader.readAsText_1 */
   void _readAsText_1(blob, encoding) native "FileReader_readAsText_1_Callback";
 
+
+  /** @domName FileReader.readAsText_2 */
   void _readAsText_2(blob) native "FileReader_readAsText_2_Callback";
 
+
+  /** @domName FileReader.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "FileReader_removeEventListener_Callback";
 
 }
 
-class _FileReaderEventsImpl extends _EventsImpl implements FileReaderEvents {
-  _FileReaderEventsImpl(_ptr) : super(_ptr);
+class FileReaderEvents extends Events {
+  FileReaderEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -15140,34 +10921,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileReaderSync
-abstract class FileReaderSync {
+class FileReaderSync extends NativeFieldWrapperClass1 {
 
   factory FileReaderSync() => _FileReaderSyncFactoryProvider.createFileReaderSync();
+  FileReaderSync.internal();
+
 
   /** @domName FileReaderSync.readAsArrayBuffer */
-  ArrayBuffer readAsArrayBuffer(Blob blob);
-
-  /** @domName FileReaderSync.readAsBinaryString */
-  String readAsBinaryString(Blob blob);
-
-  /** @domName FileReaderSync.readAsDataURL */
-  String readAsDataURL(Blob blob);
-
-  /** @domName FileReaderSync.readAsText */
-  String readAsText(Blob blob, [String encoding]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileReaderSyncImpl extends NativeFieldWrapperClass1 implements FileReaderSync {
-
   ArrayBuffer readAsArrayBuffer(Blob blob) native "FileReaderSync_readAsArrayBuffer_Callback";
 
+
+  /** @domName FileReaderSync.readAsBinaryString */
   String readAsBinaryString(Blob blob) native "FileReaderSync_readAsBinaryString_Callback";
 
+
+  /** @domName FileReaderSync.readAsDataURL */
   String readAsDataURL(Blob blob) native "FileReaderSync_readAsDataURL_Callback";
 
   String readAsText(/*Blob*/ blob, [/*DOMString*/ encoding]) {
@@ -15177,8 +10945,12 @@
     return _readAsText_2(blob);
   }
 
+
+  /** @domName FileReaderSync.readAsText_1 */
   String _readAsText_1(blob, encoding) native "FileReaderSync_readAsText_1_Callback";
 
+
+  /** @domName FileReaderSync.readAsText_2 */
   String _readAsText_2(blob) native "FileReaderSync_readAsText_2_Callback";
 
 }
@@ -15197,12 +10969,14 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FileWriter
-abstract class FileWriter implements EventTarget {
+class FileWriter extends EventTarget {
+  FileWriter.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  FileWriterEvents get on;
+  FileWriterEvents get on =>
+    new FileWriterEvents(this);
 
   static const int DONE = 2;
 
@@ -15210,99 +10984,54 @@
 
   static const int WRITING = 1;
 
+
   /** @domName FileWriter.error */
-  FileError get error;
-
-  /** @domName FileWriter.length */
-  int get length;
-
-  /** @domName FileWriter.position */
-  int get position;
-
-  /** @domName FileWriter.readyState */
-  int get readyState;
-
-  /** @domName FileWriter.abort */
-  void abort();
-
-  /** @domName FileWriter.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileWriter.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName FileWriter.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName FileWriter.seek */
-  void seek(int position);
-
-  /** @domName FileWriter.truncate */
-  void truncate(int size);
-
-  /** @domName FileWriter.write */
-  void write(Blob data);
-}
-
-abstract class FileWriterEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get progress;
-
-  EventListenerList get write;
-
-  EventListenerList get writeEnd;
-
-  EventListenerList get writeStart;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-typedef void FileWriterCallback(FileWriter fileWriter);
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FileWriterImpl extends _EventTargetImpl implements FileWriter {
-
-  _FileWriterEventsImpl get on =>
-    new _FileWriterEventsImpl(this);
-
   FileError get error native "FileWriter_error_Getter";
 
+
+  /** @domName FileWriter.length */
   int get length native "FileWriter_length_Getter";
 
+
+  /** @domName FileWriter.position */
   int get position native "FileWriter_position_Getter";
 
+
+  /** @domName FileWriter.readyState */
   int get readyState native "FileWriter_readyState_Getter";
 
+
+  /** @domName FileWriter.abort */
   void abort() native "FileWriter_abort_Callback";
 
+
+  /** @domName FileWriter.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "FileWriter_addEventListener_Callback";
 
+
+  /** @domName FileWriter.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "FileWriter_dispatchEvent_Callback";
 
+
+  /** @domName FileWriter.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "FileWriter_removeEventListener_Callback";
 
+
+  /** @domName FileWriter.seek */
   void seek(int position) native "FileWriter_seek_Callback";
 
+
+  /** @domName FileWriter.truncate */
   void truncate(int size) native "FileWriter_truncate_Callback";
 
+
+  /** @domName FileWriter.write */
   void write(Blob data) native "FileWriter_write_Callback";
 
 }
 
-class _FileWriterEventsImpl extends _EventsImpl implements FileWriterEvents {
-  _FileWriterEventsImpl(_ptr) : super(_ptr);
+class FileWriterEvents extends Events {
+  FileWriterEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -15322,40 +11051,36 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName FileWriterSync
-abstract class FileWriterSync {
 
-  /** @domName FileWriterSync.length */
-  int get length;
-
-  /** @domName FileWriterSync.position */
-  int get position;
-
-  /** @domName FileWriterSync.seek */
-  void seek(int position);
-
-  /** @domName FileWriterSync.truncate */
-  void truncate(int size);
-
-  /** @domName FileWriterSync.write */
-  void write(Blob data);
-}
+typedef void FileWriterCallback(FileWriter fileWriter);
 // 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.
 
 // WARNING: Do not edit - generated code.
 
-class _FileWriterSyncImpl extends NativeFieldWrapperClass1 implements FileWriterSync {
+/// @domName FileWriterSync
+class FileWriterSync extends NativeFieldWrapperClass1 {
+  FileWriterSync.internal();
 
+
+  /** @domName FileWriterSync.length */
   int get length native "FileWriterSync_length_Getter";
 
+
+  /** @domName FileWriterSync.position */
   int get position native "FileWriterSync_position_Getter";
 
+
+  /** @domName FileWriterSync.seek */
   void seek(int position) native "FileWriterSync_seek_Callback";
 
+
+  /** @domName FileWriterSync.truncate */
   void truncate(int size) native "FileWriterSync_truncate_Callback";
 
+
+  /** @domName FileWriterSync.write */
   void write(Blob data) native "FileWriterSync_write_Callback";
 
 }
@@ -15366,7 +11091,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Float32Array
-abstract class Float32Array implements ArrayBufferView, List<num> {
+class Float32Array extends ArrayBufferView implements List<num> {
 
   factory Float32Array(int length) =>
     _TypedArrayFactoryProvider.createFloat32Array(length);
@@ -15376,30 +11101,20 @@
 
   factory Float32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createFloat32Array_fromBuffer(buffer, byteOffset, length);
+  Float32Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 4;
 
+
   /** @domName Float32Array.length */
-  int get length;
-
-  /** @domName Float32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Float32Array.subarray */
-  Float32Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Float32ArrayImpl extends _ArrayBufferViewImpl implements Float32Array {
-
   int get length native "Float32Array_length_Getter";
 
+
+  /** @domName Float32Array.numericIndexGetter */
   num operator[](int index) native "Float32Array_numericIndexGetter_Callback";
 
+
+  /** @domName Float32Array.numericIndexSetter */
   void operator[]=(int index, num value) native "Float32Array_numericIndexSetter_Callback";
   // -- start List<num> mixins.
   // num is the element type.
@@ -15479,6 +11194,8 @@
 
   // -- end List<num> mixins.
 
+
+  /** @domName Float32Array.setElements */
   void setElements(Object array, [int offset]) native "Float32Array_setElements_Callback";
 
   Float32Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -15488,8 +11205,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Float32Array.subarray_1 */
   Float32Array _subarray_1(start, end) native "Float32Array_subarray_1_Callback";
 
+
+  /** @domName Float32Array.subarray_2 */
   Float32Array _subarray_2(start) native "Float32Array_subarray_2_Callback";
 
 }
@@ -15500,7 +11221,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Float64Array
-abstract class Float64Array implements ArrayBufferView, List<num> {
+class Float64Array extends ArrayBufferView implements List<num> {
 
   factory Float64Array(int length) =>
     _TypedArrayFactoryProvider.createFloat64Array(length);
@@ -15510,30 +11231,20 @@
 
   factory Float64Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createFloat64Array_fromBuffer(buffer, byteOffset, length);
+  Float64Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 8;
 
+
   /** @domName Float64Array.length */
-  int get length;
-
-  /** @domName Float64Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Float64Array.subarray */
-  Float64Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Float64ArrayImpl extends _ArrayBufferViewImpl implements Float64Array {
-
   int get length native "Float64Array_length_Getter";
 
+
+  /** @domName Float64Array.numericIndexGetter */
   num operator[](int index) native "Float64Array_numericIndexGetter_Callback";
 
+
+  /** @domName Float64Array.numericIndexSetter */
   void operator[]=(int index, num value) native "Float64Array_numericIndexSetter_Callback";
   // -- start List<num> mixins.
   // num is the element type.
@@ -15613,6 +11324,8 @@
 
   // -- end List<num> mixins.
 
+
+  /** @domName Float64Array.setElements */
   void setElements(Object array, [int offset]) native "Float64Array_setElements_Callback";
 
   Float64Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -15622,8 +11335,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Float64Array.subarray_1 */
   Float64Array _subarray_1(start, end) native "Float64Array_subarray_1_Callback";
 
+
+  /** @domName Float64Array.subarray_2 */
   Float64Array _subarray_2(start) native "Float64Array_subarray_2_Callback";
 
 }
@@ -15634,35 +11351,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLFontElement
-abstract class FontElement implements Element {
+class FontElement extends _Element_Merged {
+  FontElement.internal(): super.internal();
+
 
   /** @domName HTMLFontElement.color */
-  String color;
-
-  /** @domName HTMLFontElement.face */
-  String face;
-
-  /** @domName HTMLFontElement.size */
-  String size;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FontElementImpl extends _ElementImpl_Merged implements FontElement {
-
   String get color native "HTMLFontElement_color_Getter";
 
+
+  /** @domName HTMLFontElement.color */
   void set color(String value) native "HTMLFontElement_color_Setter";
 
+
+  /** @domName HTMLFontElement.face */
   String get face native "HTMLFontElement_face_Getter";
 
+
+  /** @domName HTMLFontElement.face */
   void set face(String value) native "HTMLFontElement_face_Setter";
 
+
+  /** @domName HTMLFontElement.size */
   String get size native "HTMLFontElement_size_Getter";
 
+
+  /** @domName HTMLFontElement.size */
   void set size(String value) native "HTMLFontElement_size_Setter";
 
 }
@@ -15673,7 +11386,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName FormData
-abstract class FormData {
+class FormData extends NativeFieldWrapperClass1 {
 
   factory FormData([FormElement form]) {
     if (!?form) {
@@ -15681,18 +11394,10 @@
     }
     return _FormDataFactoryProvider.createFormData(form);
   }
+  FormData.internal();
 
-  /** @domName FormData.append */
-  void append(String name, String value, String filename);
-}
-// 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.
 
-// WARNING: Do not edit - generated code.
-
-class _FormDataImpl extends NativeFieldWrapperClass1 implements FormData {
-
+  /** @domName DOMFormData.append */
   void append(String name, String value, String filename) native "DOMFormData_append_Callback";
 
 }
@@ -15703,99 +11408,97 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLFormElement
-abstract class FormElement implements Element {
+class FormElement extends _Element_Merged {
 
   factory FormElement() => _Elements.createFormElement();
+  FormElement.internal(): super.internal();
+
 
   /** @domName HTMLFormElement.acceptCharset */
-  String acceptCharset;
-
-  /** @domName HTMLFormElement.action */
-  String action;
-
-  /** @domName HTMLFormElement.autocomplete */
-  String autocomplete;
-
-  /** @domName HTMLFormElement.encoding */
-  String encoding;
-
-  /** @domName HTMLFormElement.enctype */
-  String enctype;
-
-  /** @domName HTMLFormElement.length */
-  int get length;
-
-  /** @domName HTMLFormElement.method */
-  String method;
-
-  /** @domName HTMLFormElement.name */
-  String name;
-
-  /** @domName HTMLFormElement.noValidate */
-  bool noValidate;
-
-  /** @domName HTMLFormElement.target */
-  String target;
-
-  /** @domName HTMLFormElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLFormElement.reset */
-  void reset();
-
-  /** @domName HTMLFormElement.submit */
-  void submit();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FormElementImpl extends _ElementImpl_Merged implements FormElement {
-
   String get acceptCharset native "HTMLFormElement_acceptCharset_Getter";
 
+
+  /** @domName HTMLFormElement.acceptCharset */
   void set acceptCharset(String value) native "HTMLFormElement_acceptCharset_Setter";
 
+
+  /** @domName HTMLFormElement.action */
   String get action native "HTMLFormElement_action_Getter";
 
+
+  /** @domName HTMLFormElement.action */
   void set action(String value) native "HTMLFormElement_action_Setter";
 
+
+  /** @domName HTMLFormElement.autocomplete */
   String get autocomplete native "HTMLFormElement_autocomplete_Getter";
 
+
+  /** @domName HTMLFormElement.autocomplete */
   void set autocomplete(String value) native "HTMLFormElement_autocomplete_Setter";
 
+
+  /** @domName HTMLFormElement.encoding */
   String get encoding native "HTMLFormElement_encoding_Getter";
 
+
+  /** @domName HTMLFormElement.encoding */
   void set encoding(String value) native "HTMLFormElement_encoding_Setter";
 
+
+  /** @domName HTMLFormElement.enctype */
   String get enctype native "HTMLFormElement_enctype_Getter";
 
+
+  /** @domName HTMLFormElement.enctype */
   void set enctype(String value) native "HTMLFormElement_enctype_Setter";
 
+
+  /** @domName HTMLFormElement.length */
   int get length native "HTMLFormElement_length_Getter";
 
+
+  /** @domName HTMLFormElement.method */
   String get method native "HTMLFormElement_method_Getter";
 
+
+  /** @domName HTMLFormElement.method */
   void set method(String value) native "HTMLFormElement_method_Setter";
 
+
+  /** @domName HTMLFormElement.name */
   String get name native "HTMLFormElement_name_Getter";
 
+
+  /** @domName HTMLFormElement.name */
   void set name(String value) native "HTMLFormElement_name_Setter";
 
+
+  /** @domName HTMLFormElement.noValidate */
   bool get noValidate native "HTMLFormElement_noValidate_Getter";
 
+
+  /** @domName HTMLFormElement.noValidate */
   void set noValidate(bool value) native "HTMLFormElement_noValidate_Setter";
 
+
+  /** @domName HTMLFormElement.target */
   String get target native "HTMLFormElement_target_Getter";
 
+
+  /** @domName HTMLFormElement.target */
   void set target(String value) native "HTMLFormElement_target_Setter";
 
+
+  /** @domName HTMLFormElement.checkValidity */
   bool checkValidity() native "HTMLFormElement_checkValidity_Callback";
 
+
+  /** @domName HTMLFormElement.reset */
   void reset() native "HTMLFormElement_reset_Callback";
 
+
+  /** @domName HTMLFormElement.submit */
   void submit() native "HTMLFormElement_submit_Callback";
 
 }
@@ -15806,92 +11509,91 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLFrameElement
-abstract class FrameElement implements Element {
+class FrameElement extends _Element_Merged {
+  FrameElement.internal(): super.internal();
+
 
   /** @domName HTMLFrameElement.contentWindow */
-  Window get contentWindow;
-
-  /** @domName HTMLFrameElement.frameBorder */
-  String frameBorder;
-
-  /** @domName HTMLFrameElement.height */
-  int get height;
-
-  /** @domName HTMLFrameElement.location */
-  String location;
-
-  /** @domName HTMLFrameElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLFrameElement.marginHeight */
-  String marginHeight;
-
-  /** @domName HTMLFrameElement.marginWidth */
-  String marginWidth;
-
-  /** @domName HTMLFrameElement.name */
-  String name;
-
-  /** @domName HTMLFrameElement.noResize */
-  bool noResize;
-
-  /** @domName HTMLFrameElement.scrolling */
-  String scrolling;
-
-  /** @domName HTMLFrameElement.src */
-  String src;
-
-  /** @domName HTMLFrameElement.width */
-  int get width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FrameElementImpl extends _ElementImpl_Merged implements FrameElement {
-
   Window get contentWindow native "HTMLFrameElement_contentWindow_Getter";
 
+
+  /** @domName HTMLFrameElement.frameBorder */
   String get frameBorder native "HTMLFrameElement_frameBorder_Getter";
 
+
+  /** @domName HTMLFrameElement.frameBorder */
   void set frameBorder(String value) native "HTMLFrameElement_frameBorder_Setter";
 
+
+  /** @domName HTMLFrameElement.height */
   int get height native "HTMLFrameElement_height_Getter";
 
+
+  /** @domName HTMLFrameElement.location */
   String get location native "HTMLFrameElement_location_Getter";
 
+
+  /** @domName HTMLFrameElement.location */
   void set location(String value) native "HTMLFrameElement_location_Setter";
 
+
+  /** @domName HTMLFrameElement.longDesc */
   String get longDesc native "HTMLFrameElement_longDesc_Getter";
 
+
+  /** @domName HTMLFrameElement.longDesc */
   void set longDesc(String value) native "HTMLFrameElement_longDesc_Setter";
 
+
+  /** @domName HTMLFrameElement.marginHeight */
   String get marginHeight native "HTMLFrameElement_marginHeight_Getter";
 
+
+  /** @domName HTMLFrameElement.marginHeight */
   void set marginHeight(String value) native "HTMLFrameElement_marginHeight_Setter";
 
+
+  /** @domName HTMLFrameElement.marginWidth */
   String get marginWidth native "HTMLFrameElement_marginWidth_Getter";
 
+
+  /** @domName HTMLFrameElement.marginWidth */
   void set marginWidth(String value) native "HTMLFrameElement_marginWidth_Setter";
 
+
+  /** @domName HTMLFrameElement.name */
   String get name native "HTMLFrameElement_name_Getter";
 
+
+  /** @domName HTMLFrameElement.name */
   void set name(String value) native "HTMLFrameElement_name_Setter";
 
+
+  /** @domName HTMLFrameElement.noResize */
   bool get noResize native "HTMLFrameElement_noResize_Getter";
 
+
+  /** @domName HTMLFrameElement.noResize */
   void set noResize(bool value) native "HTMLFrameElement_noResize_Setter";
 
+
+  /** @domName HTMLFrameElement.scrolling */
   String get scrolling native "HTMLFrameElement_scrolling_Getter";
 
+
+  /** @domName HTMLFrameElement.scrolling */
   void set scrolling(String value) native "HTMLFrameElement_scrolling_Setter";
 
+
+  /** @domName HTMLFrameElement.src */
   String get src native "HTMLFrameElement_src_Getter";
 
+
+  /** @domName HTMLFrameElement.src */
   void set src(String value) native "HTMLFrameElement_src_Setter";
 
+
+  /** @domName HTMLFrameElement.width */
   int get width native "HTMLFrameElement_width_Getter";
 
 }
@@ -15902,71 +11604,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLFrameSetElement
-abstract class FrameSetElement implements Element {
+class FrameSetElement extends _Element_Merged {
+  FrameSetElement.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  FrameSetElementEvents get on;
+  FrameSetElementEvents get on =>
+    new FrameSetElementEvents(this);
+
 
   /** @domName HTMLFrameSetElement.cols */
-  String cols;
-
-  /** @domName HTMLFrameSetElement.rows */
-  String rows;
-}
-
-abstract class FrameSetElementEvents implements ElementEvents {
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get load;
-
-  EventListenerList get message;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get popState;
-
-  EventListenerList get resize;
-
-  EventListenerList get storage;
-
-  EventListenerList get unload;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _FrameSetElementImpl extends _ElementImpl_Merged implements FrameSetElement {
-
-  _FrameSetElementEventsImpl get on =>
-    new _FrameSetElementEventsImpl(this);
-
   String get cols native "HTMLFrameSetElement_cols_Getter";
 
+
+  /** @domName HTMLFrameSetElement.cols */
   void set cols(String value) native "HTMLFrameSetElement_cols_Setter";
 
+
+  /** @domName HTMLFrameSetElement.rows */
   String get rows native "HTMLFrameSetElement_rows_Getter";
 
+
+  /** @domName HTMLFrameSetElement.rows */
   void set rows(String value) native "HTMLFrameSetElement_rows_Setter";
 
 }
 
-class _FrameSetElementEventsImpl extends _ElementEventsImpl implements FrameSetElementEvents {
-  _FrameSetElementEventsImpl(_ptr) : super(_ptr);
+class FrameSetElementEvents extends ElementEvents {
+  FrameSetElementEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get beforeUnload => this['beforeunload'];
 
@@ -16001,19 +11667,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName GainNode
-abstract class GainNode implements AudioNode {
+class GainNode extends AudioNode {
+  GainNode.internal(): super.internal();
+
 
   /** @domName GainNode.gain */
-  AudioGain get gain;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _GainNodeImpl extends _AudioNodeImpl implements GainNode {
-
   AudioGain get gain native "GainNode_gain_Getter";
 
 }
@@ -16024,39 +11682,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Gamepad
-abstract class Gamepad {
+class Gamepad extends NativeFieldWrapperClass1 {
+  Gamepad.internal();
+
 
   /** @domName Gamepad.axes */
-  List<num> get axes;
-
-  /** @domName Gamepad.buttons */
-  List<num> get buttons;
-
-  /** @domName Gamepad.id */
-  String get id;
-
-  /** @domName Gamepad.index */
-  int get index;
-
-  /** @domName Gamepad.timestamp */
-  int get timestamp;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _GamepadImpl extends NativeFieldWrapperClass1 implements Gamepad {
-
   List<num> get axes native "Gamepad_axes_Getter";
 
+
+  /** @domName Gamepad.buttons */
   List<num> get buttons native "Gamepad_buttons_Getter";
 
+
+  /** @domName Gamepad.id */
   String get id native "Gamepad_id_Getter";
 
+
+  /** @domName Gamepad.index */
   int get index native "Gamepad_index_Getter";
 
+
+  /** @domName Gamepad.timestamp */
   int get timestamp native "Gamepad_timestamp_Getter";
 
 }
@@ -16066,126 +11712,20 @@
 
 // WARNING: Do not edit - generated code.
 
-class _GamepadListImpl extends NativeFieldWrapperClass1 implements List<Gamepad> {
-
-  int get length native "GamepadList_length_Getter";
-
-  Gamepad operator[](int index) native "GamepadList_item_Callback";
-
-  void operator[]=(int index, Gamepad value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Gamepad> mixins.
-  // Gamepad is the element type.
-
-  // From Iterable<Gamepad>:
-
-  Iterator<Gamepad> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<Gamepad>(this);
-  }
-
-  // From Collection<Gamepad>:
-
-  void add(Gamepad value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(Gamepad value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<Gamepad> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(Gamepad element) => _Collections.contains(this, element);
-
-  void forEach(void f(Gamepad element)) => _Collections.forEach(this, f);
-
-  Collection map(f(Gamepad element)) => _Collections.map(this, [], f);
-
-  Collection<Gamepad> filter(bool f(Gamepad element)) =>
-     _Collections.filter(this, <Gamepad>[], f);
-
-  bool every(bool f(Gamepad element)) => _Collections.every(this, f);
-
-  bool some(bool f(Gamepad element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<Gamepad>:
-
-  void sort([Comparator<Gamepad> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(Gamepad element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(Gamepad element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  Gamepad get last => this[length - 1];
-
-  Gamepad removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<Gamepad> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <Gamepad>[]);
-
-  // -- end List<Gamepad> mixins.
-
-  Gamepad item(int index) native "GamepadList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName Geolocation
-abstract class Geolocation {
+class Geolocation extends NativeFieldWrapperClass1 {
+  Geolocation.internal();
+
 
   /** @domName Geolocation.clearWatch */
-  void clearWatch(int watchId);
-
-  /** @domName Geolocation.getCurrentPosition */
-  void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]);
-
-  /** @domName Geolocation.watchPosition */
-  int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _GeolocationImpl extends NativeFieldWrapperClass1 implements Geolocation {
-
   void clearWatch(int watchId) native "Geolocation_clearWatch_Callback";
 
+
+  /** @domName Geolocation.getCurrentPosition */
   void getCurrentPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native "Geolocation_getCurrentPosition_Callback";
 
+
+  /** @domName Geolocation.watchPosition */
   int watchPosition(PositionCallback successCallback, [PositionErrorCallback errorCallback, Object options]) native "Geolocation_watchPosition_Callback";
 
 }
@@ -16196,24 +11736,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Geoposition
-abstract class Geoposition {
+class Geoposition extends NativeFieldWrapperClass1 {
+  Geoposition.internal();
+
 
   /** @domName Geoposition.coords */
-  Coordinates get coords;
-
-  /** @domName Geoposition.timestamp */
-  int get timestamp;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _GeopositionImpl extends NativeFieldWrapperClass1 implements Geoposition {
-
   Coordinates get coords native "Geoposition_coords_Getter";
 
+
+  /** @domName Geoposition.timestamp */
   int get timestamp native "Geoposition_timestamp_Getter";
 
 }
@@ -16224,44 +11755,41 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLHRElement
-abstract class HRElement implements Element {
+class HRElement extends _Element_Merged {
 
   factory HRElement() => _Elements.createHRElement();
+  HRElement.internal(): super.internal();
+
 
   /** @domName HTMLHRElement.align */
-  String align;
-
-  /** @domName HTMLHRElement.noShade */
-  bool noShade;
-
-  /** @domName HTMLHRElement.size */
-  String size;
-
-  /** @domName HTMLHRElement.width */
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HRElementImpl extends _ElementImpl_Merged implements HRElement {
-
   String get align native "HTMLHRElement_align_Getter";
 
+
+  /** @domName HTMLHRElement.align */
   void set align(String value) native "HTMLHRElement_align_Setter";
 
+
+  /** @domName HTMLHRElement.noShade */
   bool get noShade native "HTMLHRElement_noShade_Getter";
 
+
+  /** @domName HTMLHRElement.noShade */
   void set noShade(bool value) native "HTMLHRElement_noShade_Setter";
 
+
+  /** @domName HTMLHRElement.size */
   String get size native "HTMLHRElement_size_Getter";
 
+
+  /** @domName HTMLHRElement.size */
   void set size(String value) native "HTMLHRElement_size_Setter";
 
+
+  /** @domName HTMLHRElement.width */
   String get width native "HTMLHRElement_width_Getter";
 
+
+  /** @domName HTMLHRElement.width */
   void set width(String value) native "HTMLHRElement_width_Setter";
 
 }
@@ -16272,28 +11800,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLAllCollection
-abstract class HTMLAllCollection implements List<Node> {
+class HTMLAllCollection extends NativeFieldWrapperClass1 implements List<Node> {
+  HTMLAllCollection.internal();
+
 
   /** @domName HTMLAllCollection.length */
-  int get length;
-
-  /** @domName HTMLAllCollection.item */
-  Node item(int index);
-
-  /** @domName HTMLAllCollection.namedItem */
-  Node namedItem(String name);
-
-  /** @domName HTMLAllCollection.tags */
-  List<Node> tags(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HTMLAllCollectionImpl extends NativeFieldWrapperClass1 implements HTMLAllCollection {
-
   int get length native "HTMLAllCollection_length_Getter";
 
   Node operator[](int index) native "HTMLAllCollection_item_Callback";
@@ -16379,10 +11890,16 @@
 
   // -- end List<Node> mixins.
 
+
+  /** @domName HTMLAllCollection.item */
   Node item(int index) native "HTMLAllCollection_item_Callback";
 
+
+  /** @domName HTMLAllCollection.namedItem */
   Node namedItem(String name) native "HTMLAllCollection_namedItem_Callback";
 
+
+  /** @domName HTMLAllCollection.tags */
   List<Node> tags(String name) native "HTMLAllCollection_tags_Callback";
 
 }
@@ -16393,25 +11910,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLCollection
-abstract class HTMLCollection implements List<Node> {
+class HTMLCollection extends NativeFieldWrapperClass1 implements List<Node> {
+  HTMLCollection.internal();
+
 
   /** @domName HTMLCollection.length */
-  int get length;
-
-  /** @domName HTMLCollection.item */
-  Node item(int index);
-
-  /** @domName HTMLCollection.namedItem */
-  Node namedItem(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HTMLCollectionImpl extends NativeFieldWrapperClass1 implements HTMLCollection {
-
   int get length native "HTMLCollection_length_Getter";
 
   Node operator[](int index) native "HTMLCollection_item_Callback";
@@ -16497,8 +12000,12 @@
 
   // -- end List<Node> mixins.
 
+
+  /** @domName HTMLCollection.item */
   Node item(int index) native "HTMLCollection_item_Callback";
 
+
+  /** @domName HTMLCollection.namedItem */
   Node namedItem(String name) native "HTMLCollection_namedItem_Callback";
 
 }
@@ -16509,35 +12016,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLOptionsCollection
-abstract class HTMLOptionsCollection implements HTMLCollection {
+class HTMLOptionsCollection extends HTMLCollection {
+  HTMLOptionsCollection.internal(): super.internal();
+
 
   /** @domName HTMLOptionsCollection.length */
-  int length;
-
-  /** @domName HTMLOptionsCollection.selectedIndex */
-  int selectedIndex;
-
-  /** @domName HTMLOptionsCollection.remove */
-  void remove(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HTMLOptionsCollectionImpl extends _HTMLCollectionImpl implements HTMLOptionsCollection {
-
   int get length native "HTMLOptionsCollection_length_Getter";
 
+
+  /** @domName HTMLOptionsCollection.length */
   void set length(int value) native "HTMLOptionsCollection_length_Setter";
 
+
+  /** @domName HTMLOptionsCollection.selectedIndex */
   int get selectedIndex native "HTMLOptionsCollection_selectedIndex_Getter";
 
+
+  /** @domName HTMLOptionsCollection.selectedIndex */
   void set selectedIndex(int value) native "HTMLOptionsCollection_selectedIndex_Setter";
 
+
+  /** @domName HTMLOptionsCollection.numericIndexSetter */
   void operator[]=(int index, Node value) native "HTMLOptionsCollection_numericIndexSetter_Callback";
 
+
+  /** @domName HTMLOptionsCollection.remove */
   void remove(int index) native "HTMLOptionsCollection_remove_Callback";
 
 }
@@ -16548,29 +12051,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HashChangeEvent
-abstract class HashChangeEvent implements Event {
+class HashChangeEvent extends Event {
+  HashChangeEvent.internal(): super.internal();
+
 
   /** @domName HashChangeEvent.newURL */
-  String get newURL;
-
-  /** @domName HashChangeEvent.oldURL */
-  String get oldURL;
-
-  /** @domName HashChangeEvent.initHashChangeEvent */
-  void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HashChangeEventImpl extends _EventImpl implements HashChangeEvent {
-
   String get newURL native "HashChangeEvent_newURL_Getter";
 
+
+  /** @domName HashChangeEvent.oldURL */
   String get oldURL native "HashChangeEvent_oldURL_Getter";
 
+
+  /** @domName HashChangeEvent.initHashChangeEvent */
   void initHashChangeEvent(String type, bool canBubble, bool cancelable, String oldURL, String newURL) native "HashChangeEvent_initHashChangeEvent_Callback";
 
 }
@@ -16581,23 +12074,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLHeadElement
-abstract class HeadElement implements Element {
+class HeadElement extends _Element_Merged {
 
   factory HeadElement() => _Elements.createHeadElement();
+  HeadElement.internal(): super.internal();
+
 
   /** @domName HTMLHeadElement.profile */
-  String profile;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HeadElementImpl extends _ElementImpl_Merged implements HeadElement {
-
   String get profile native "HTMLHeadElement_profile_Getter";
 
+
+  /** @domName HTMLHeadElement.profile */
   void set profile(String value) native "HTMLHeadElement_profile_Setter";
 
 }
@@ -16608,7 +12095,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLHeadingElement
-abstract class HeadingElement implements Element {
+class HeadingElement extends _Element_Merged {
 
   factory HeadingElement.h1() => _Elements.createHeadingElement_h1();
 
@@ -16621,20 +12108,14 @@
   factory HeadingElement.h5() => _Elements.createHeadingElement_h5();
 
   factory HeadingElement.h6() => _Elements.createHeadingElement_h6();
+  HeadingElement.internal(): super.internal();
+
 
   /** @domName HTMLHeadingElement.align */
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HeadingElementImpl extends _ElementImpl_Merged implements HeadingElement {
-
   String get align native "HTMLHeadingElement_align_Getter";
 
+
+  /** @domName HTMLHeadingElement.align */
   void set align(String value) native "HTMLHeadingElement_align_Setter";
 
 }
@@ -16645,40 +12126,32 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLHtmlElement
-abstract class HtmlElement implements Element {
+class HtmlElement extends _Element_Merged {
 
   factory HtmlElement() => _Elements.createHtmlElement();
+  HtmlElement.internal(): super.internal();
+
 }
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-class _HtmlElementImpl extends _ElementImpl_Merged implements HtmlElement {
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName XMLHttpRequest
-abstract class HttpRequest implements EventTarget {
+class HttpRequest extends EventTarget {
   factory HttpRequest.get(String url, onSuccess(HttpRequest request)) =>
       _HttpRequestFactoryProvider.createHttpRequest_get(url, onSuccess);
 
   factory HttpRequest.getWithCredentials(String url, onSuccess(HttpRequest request)) =>
-      _HttpRequestFactoryProvider.createHttpRequest_getWithCredentials(url, onSuccess);
+      _HttpRequestFactoryProvider.createHttpRequestgetWithCredentials(url, onSuccess);
+
 
   factory HttpRequest() => _HttpRequestFactoryProvider.createHttpRequest();
+  HttpRequest.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  HttpRequestEvents get on;
+  HttpRequestEvents get on =>
+    new HttpRequestEvents(this);
 
   static const int DONE = 4;
 
@@ -16690,179 +12163,94 @@
 
   static const int UNSENT = 0;
 
+
   /** @domName XMLHttpRequest.readyState */
-  int get readyState;
-
-  /** @domName XMLHttpRequest.response */
-  Object get response;
-
-  /** @domName XMLHttpRequest.responseText */
-  String get responseText;
-
-  /** @domName XMLHttpRequest.responseType */
-  String responseType;
-
-  /** @domName XMLHttpRequest.responseXML */
-  Document get responseXML;
-
-  /** @domName XMLHttpRequest.status */
-  int get status;
-
-  /** @domName XMLHttpRequest.statusText */
-  String get statusText;
-
-  /** @domName XMLHttpRequest.upload */
-  HttpRequestUpload get upload;
-
-  /** @domName XMLHttpRequest.withCredentials */
-  bool withCredentials;
-
-  /** @domName XMLHttpRequest.abort */
-  void abort();
-
-  /** @domName XMLHttpRequest.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName XMLHttpRequest.getAllResponseHeaders */
-  String getAllResponseHeaders();
-
-  /** @domName XMLHttpRequest.getResponseHeader */
-  String getResponseHeader(String header);
-
-  /** @domName XMLHttpRequest.open */
-  void open(String method, String url, [bool async, String user, String password]);
-
-  /** @domName XMLHttpRequest.overrideMimeType */
-  void overrideMimeType(String override);
-
-  /** @domName XMLHttpRequest.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequest.send */
-  void send([data]);
-
-  /** @domName XMLHttpRequest.setRequestHeader */
-  void setRequestHeader(String header, String value);
-}
-
-abstract class HttpRequestEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-
-  EventListenerList get readyStateChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLHttpRequestException
-abstract class HttpRequestException {
-
-  static const int ABORT_ERR = 102;
-
-  static const int NETWORK_ERR = 101;
-
-  /** @domName XMLHttpRequestException.code */
-  int get code;
-
-  /** @domName XMLHttpRequestException.message */
-  String get message;
-
-  /** @domName XMLHttpRequestException.name */
-  String get name;
-
-  /** @domName XMLHttpRequestException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HttpRequestExceptionImpl extends NativeFieldWrapperClass1 implements HttpRequestException {
-
-  int get code native "XMLHttpRequestException_code_Getter";
-
-  String get message native "XMLHttpRequestException_message_Getter";
-
-  String get name native "XMLHttpRequestException_name_Getter";
-
-  String toString() native "XMLHttpRequestException_toString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HttpRequestImpl extends _EventTargetImpl implements HttpRequest {
-
-  _HttpRequestEventsImpl get on =>
-    new _HttpRequestEventsImpl(this);
-
   int get readyState native "XMLHttpRequest_readyState_Getter";
 
+
+  /** @domName XMLHttpRequest.response */
   Object get response native "XMLHttpRequest_response_Getter";
 
+
+  /** @domName XMLHttpRequest.responseText */
   String get responseText native "XMLHttpRequest_responseText_Getter";
 
+
+  /** @domName XMLHttpRequest.responseType */
   String get responseType native "XMLHttpRequest_responseType_Getter";
 
+
+  /** @domName XMLHttpRequest.responseType */
   void set responseType(String value) native "XMLHttpRequest_responseType_Setter";
 
+
+  /** @domName XMLHttpRequest.responseXML */
   Document get responseXML native "XMLHttpRequest_responseXML_Getter";
 
+
+  /** @domName XMLHttpRequest.status */
   int get status native "XMLHttpRequest_status_Getter";
 
+
+  /** @domName XMLHttpRequest.statusText */
   String get statusText native "XMLHttpRequest_statusText_Getter";
 
+
+  /** @domName XMLHttpRequest.upload */
   HttpRequestUpload get upload native "XMLHttpRequest_upload_Getter";
 
+
+  /** @domName XMLHttpRequest.withCredentials */
   bool get withCredentials native "XMLHttpRequest_withCredentials_Getter";
 
+
+  /** @domName XMLHttpRequest.withCredentials */
   void set withCredentials(bool value) native "XMLHttpRequest_withCredentials_Setter";
 
+
+  /** @domName XMLHttpRequest.abort */
   void abort() native "XMLHttpRequest_abort_Callback";
 
+
+  /** @domName XMLHttpRequest.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequest_addEventListener_Callback";
 
+
+  /** @domName XMLHttpRequest.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "XMLHttpRequest_dispatchEvent_Callback";
 
+
+  /** @domName XMLHttpRequest.getAllResponseHeaders */
   String getAllResponseHeaders() native "XMLHttpRequest_getAllResponseHeaders_Callback";
 
+
+  /** @domName XMLHttpRequest.getResponseHeader */
   String getResponseHeader(String header) native "XMLHttpRequest_getResponseHeader_Callback";
 
+
+  /** @domName XMLHttpRequest.open */
   void open(String method, String url, [bool async, String user, String password]) native "XMLHttpRequest_open_Callback";
 
+
+  /** @domName XMLHttpRequest.overrideMimeType */
   void overrideMimeType(String override) native "XMLHttpRequest_overrideMimeType_Callback";
 
+
+  /** @domName XMLHttpRequest.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequest_removeEventListener_Callback";
 
+
+  /** @domName XMLHttpRequest.send */
   void send([data]) native "XMLHttpRequest_send_Callback";
 
+
+  /** @domName XMLHttpRequest.setRequestHeader */
   void setRequestHeader(String header, String value) native "XMLHttpRequest_setRequestHeader_Callback";
 
 }
 
-class _HttpRequestEventsImpl extends _EventsImpl implements HttpRequestEvents {
-  _HttpRequestEventsImpl(_ptr) : super(_ptr);
+class HttpRequestEvents extends Events {
+  HttpRequestEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -16884,14 +12272,30 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName XMLHttpRequestProgressEvent
-abstract class HttpRequestProgressEvent implements ProgressEvent {
+/// @domName XMLHttpRequestException
+class HttpRequestException extends NativeFieldWrapperClass1 {
+  HttpRequestException.internal();
 
-  /** @domName XMLHttpRequestProgressEvent.position */
-  int get position;
+  static const int ABORT_ERR = 102;
 
-  /** @domName XMLHttpRequestProgressEvent.totalSize */
-  int get totalSize;
+  static const int NETWORK_ERR = 101;
+
+
+  /** @domName XMLHttpRequestException.code */
+  int get code native "XMLHttpRequestException_code_Getter";
+
+
+  /** @domName XMLHttpRequestException.message */
+  String get message native "XMLHttpRequestException_message_Getter";
+
+
+  /** @domName XMLHttpRequestException.name */
+  String get name native "XMLHttpRequestException_name_Getter";
+
+
+  /** @domName XMLHttpRequestException.toString */
+  String toString() native "XMLHttpRequestException_toString_Callback";
+
 }
 // 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
@@ -16899,10 +12303,16 @@
 
 // WARNING: Do not edit - generated code.
 
-class _HttpRequestProgressEventImpl extends _ProgressEventImpl implements HttpRequestProgressEvent {
+/// @domName XMLHttpRequestProgressEvent
+class HttpRequestProgressEvent extends ProgressEvent {
+  HttpRequestProgressEvent.internal(): super.internal();
 
+
+  /** @domName XMLHttpRequestProgressEvent.position */
   int get position native "XMLHttpRequestProgressEvent_position_Getter";
 
+
+  /** @domName XMLHttpRequestProgressEvent.totalSize */
   int get totalSize native "XMLHttpRequestProgressEvent_totalSize_Getter";
 
 }
@@ -16913,58 +12323,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName XMLHttpRequestUpload
-abstract class HttpRequestUpload implements EventTarget {
+class HttpRequestUpload extends EventTarget {
+  HttpRequestUpload.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  HttpRequestUploadEvents get on;
+  HttpRequestUploadEvents get on =>
+    new HttpRequestUploadEvents(this);
+
 
   /** @domName XMLHttpRequestUpload.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName XMLHttpRequestUpload.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName XMLHttpRequestUpload.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class HttpRequestUploadEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get error;
-
-  EventListenerList get load;
-
-  EventListenerList get loadEnd;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get progress;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _HttpRequestUploadImpl extends _EventTargetImpl implements HttpRequestUpload {
-
-  _HttpRequestUploadEventsImpl get on =>
-    new _HttpRequestUploadEventsImpl(this);
-
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequestUpload_addEventListener_Callback";
 
+
+  /** @domName XMLHttpRequestUpload.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "XMLHttpRequestUpload_dispatchEvent_Callback";
 
+
+  /** @domName XMLHttpRequestUpload.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "XMLHttpRequestUpload_removeEventListener_Callback";
 
 }
 
-class _HttpRequestUploadEventsImpl extends _EventsImpl implements HttpRequestUploadEvents {
-  _HttpRequestUploadEventsImpl(_ptr) : super(_ptr);
+class HttpRequestUploadEvents extends Events {
+  HttpRequestUploadEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -16985,15 +12368,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBAny
-abstract class IDBAny {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBAnyImpl extends NativeFieldWrapperClass1 implements IDBAny {
+class IDBAny extends NativeFieldWrapperClass1 {
+  IDBAny.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17003,7 +12379,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBCursor
-abstract class IDBCursor {
+class IDBCursor extends NativeFieldWrapperClass1 {
+  IDBCursor.internal();
 
   static const int NEXT = 0;
 
@@ -17013,46 +12390,24 @@
 
   static const int PREV_NO_DUPLICATE = 3;
 
+
   /** @domName IDBCursor.direction */
-  String get direction;
-
-  /** @domName IDBCursor.key */
-  Object get key;
-
-  /** @domName IDBCursor.primaryKey */
-  Object get primaryKey;
-
-  /** @domName IDBCursor.source */
-  dynamic get source;
-
-  /** @domName IDBCursor.advance */
-  void advance(int count);
-
-  /** @domName IDBCursor.continueFunction */
-  void continueFunction([/*IDBKey*/ key]);
-
-  /** @domName IDBCursor.delete */
-  IDBRequest delete();
-
-  /** @domName IDBCursor.update */
-  IDBRequest update(Object value);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBCursorImpl extends NativeFieldWrapperClass1 implements IDBCursor {
-
   String get direction native "IDBCursor_direction_Getter";
 
+
+  /** @domName IDBCursor.key */
   Object get key native "IDBCursor_key_Getter";
 
+
+  /** @domName IDBCursor.primaryKey */
   Object get primaryKey native "IDBCursor_primaryKey_Getter";
 
+
+  /** @domName IDBCursor.source */
   dynamic get source native "IDBCursor_source_Getter";
 
+
+  /** @domName IDBCursor.advance */
   void advance(int count) native "IDBCursor_advance_Callback";
 
   void continueFunction([/*IDBKey*/ key]) {
@@ -17063,12 +12418,20 @@
     _continue_2();
   }
 
+
+  /** @domName IDBCursor.continue_1 */
   void _continue_1(key) native "IDBCursor_continue_1_Callback";
 
+
+  /** @domName IDBCursor.continue_2 */
   void _continue_2() native "IDBCursor_continue_2_Callback";
 
+
+  /** @domName IDBCursor.delete */
   IDBRequest delete() native "IDBCursor_delete_Callback";
 
+
+  /** @domName IDBCursor.update */
   IDBRequest update(Object value) native "IDBCursor_update_Callback";
 
 }
@@ -17079,19 +12442,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBCursorWithValue
-abstract class IDBCursorWithValue implements IDBCursor {
+class IDBCursorWithValue extends IDBCursor {
+  IDBCursorWithValue.internal(): super.internal();
+
 
   /** @domName IDBCursorWithValue.value */
-  Object get value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBCursorWithValueImpl extends _IDBCursorImpl implements IDBCursorWithValue {
-
   Object get value native "IDBCursorWithValue_value_Getter";
 
 }
@@ -17102,54 +12457,90 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBDatabase
-abstract class IDBDatabase implements EventTarget {
+class IDBDatabase extends EventTarget {
+  IDBDatabase.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  IDBDatabaseEvents get on;
+  IDBDatabaseEvents get on =>
+    new IDBDatabaseEvents(this);
+
 
   /** @domName IDBDatabase.name */
-  String get name;
+  String get name native "IDBDatabase_name_Getter";
+
 
   /** @domName IDBDatabase.objectStoreNames */
-  List<String> get objectStoreNames;
+  List<String> get objectStoreNames native "IDBDatabase_objectStoreNames_Getter";
+
 
   /** @domName IDBDatabase.version */
-  dynamic get version;
+  dynamic get version native "IDBDatabase_version_Getter";
+
 
   /** @domName IDBDatabase.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_addEventListener_Callback";
+
 
   /** @domName IDBDatabase.close */
-  void close();
+  void close() native "IDBDatabase_close_Callback";
+
 
   /** @domName IDBDatabase.createObjectStore */
-  IDBObjectStore createObjectStore(String name, [Map options]);
+  IDBObjectStore createObjectStore(String name, [Map options]) native "IDBDatabase_createObjectStore_Callback";
+
 
   /** @domName IDBDatabase.deleteObjectStore */
-  void deleteObjectStore(String name);
+  void deleteObjectStore(String name) native "IDBDatabase_deleteObjectStore_Callback";
+
 
   /** @domName IDBDatabase.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
+  bool $dom_dispatchEvent(Event evt) native "IDBDatabase_dispatchEvent_Callback";
+
 
   /** @domName IDBDatabase.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_removeEventListener_Callback";
+
 
   /** @domName IDBDatabase.setVersion */
-  IDBVersionChangeRequest setVersion(String version);
+  IDBVersionChangeRequest setVersion(String version) native "IDBDatabase_setVersion_Callback";
 
-  /** @domName IDBDatabase.transaction */
-  IDBTransaction transaction(storeName_OR_storeNames, String mode);
+  IDBTransaction transaction(storeName_OR_storeNames, /*DOMString*/ mode) {
+    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
+      return _transaction_1(storeName_OR_storeNames, mode);
+    }
+    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
+      return _transaction_2(storeName_OR_storeNames, mode);
+    }
+    if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
+      return _transaction_3(storeName_OR_storeNames, mode);
+    }
+    throw "Incorrect number or type of arguments";
+  }
+
+
+  /** @domName IDBDatabase.transaction_1 */
+  IDBTransaction _transaction_1(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_1_Callback";
+
+
+  /** @domName IDBDatabase.transaction_2 */
+  IDBTransaction _transaction_2(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_2_Callback";
+
+
+  /** @domName IDBDatabase.transaction_3 */
+  IDBTransaction _transaction_3(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_3_Callback";
+
 }
 
-abstract class IDBDatabaseEvents implements Events {
+class IDBDatabaseEvents extends Events {
+  IDBDatabaseEvents(EventTarget _ptr) : super(_ptr);
 
-  EventListenerList get abort;
+  EventListenerList get abort => this['abort'];
 
-  EventListenerList get error;
+  EventListenerList get error => this['error'];
 
-  EventListenerList get versionChange;
+  EventListenerList get versionChange => this['versionchange'];
 }
 // 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
@@ -17158,7 +12549,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBDatabaseException
-abstract class IDBDatabaseException {
+class IDBDatabaseException extends NativeFieldWrapperClass1 {
+  IDBDatabaseException.internal();
 
   static const int ABORT_ERR = 20;
 
@@ -17186,32 +12578,20 @@
 
   static const int VER_ERR = 12;
 
+
   /** @domName IDBDatabaseException.code */
-  int get code;
-
-  /** @domName IDBDatabaseException.message */
-  String get message;
-
-  /** @domName IDBDatabaseException.name */
-  String get name;
-
-  /** @domName IDBDatabaseException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBDatabaseExceptionImpl extends NativeFieldWrapperClass1 implements IDBDatabaseException {
-
   int get code native "IDBDatabaseException_code_Getter";
 
+
+  /** @domName IDBDatabaseException.message */
   String get message native "IDBDatabaseException_message_Getter";
 
+
+  /** @domName IDBDatabaseException.name */
   String get name native "IDBDatabaseException_name_Getter";
 
+
+  /** @domName IDBDatabaseException.toString */
   String toString() native "IDBDatabaseException_toString_Callback";
 
 }
@@ -17221,92 +12601,16 @@
 
 // WARNING: Do not edit - generated code.
 
-class _IDBDatabaseImpl extends _EventTargetImpl implements IDBDatabase {
-
-  _IDBDatabaseEventsImpl get on =>
-    new _IDBDatabaseEventsImpl(this);
-
-  String get name native "IDBDatabase_name_Getter";
-
-  List<String> get objectStoreNames native "IDBDatabase_objectStoreNames_Getter";
-
-  dynamic get version native "IDBDatabase_version_Getter";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_addEventListener_Callback";
-
-  void close() native "IDBDatabase_close_Callback";
-
-  IDBObjectStore createObjectStore(String name, [Map options]) native "IDBDatabase_createObjectStore_Callback";
-
-  void deleteObjectStore(String name) native "IDBDatabase_deleteObjectStore_Callback";
-
-  bool $dom_dispatchEvent(Event evt) native "IDBDatabase_dispatchEvent_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBDatabase_removeEventListener_Callback";
-
-  IDBVersionChangeRequest setVersion(String version) native "IDBDatabase_setVersion_Callback";
-
-  IDBTransaction transaction(storeName_OR_storeNames, /*DOMString*/ mode) {
-    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
-      return _transaction_1(storeName_OR_storeNames, mode);
-    }
-    if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
-      return _transaction_2(storeName_OR_storeNames, mode);
-    }
-    if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && (mode is String || mode == null)) {
-      return _transaction_3(storeName_OR_storeNames, mode);
-    }
-    throw "Incorrect number or type of arguments";
-  }
-
-  IDBTransaction _transaction_1(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_1_Callback";
-
-  IDBTransaction _transaction_2(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_2_Callback";
-
-  IDBTransaction _transaction_3(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_3_Callback";
-
-}
-
-class _IDBDatabaseEventsImpl extends _EventsImpl implements IDBDatabaseEvents {
-  _IDBDatabaseEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get abort => this['abort'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get versionChange => this['versionchange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName IDBFactory
-abstract class IDBFactory {
+class IDBFactory extends NativeFieldWrapperClass1 {
+  IDBFactory.internal();
+
 
   /** @domName IDBFactory.cmp */
-  int cmp(/*IDBKey*/ first, /*IDBKey*/ second);
-
-  /** @domName IDBFactory.deleteDatabase */
-  IDBVersionChangeRequest deleteDatabase(String name);
-
-  /** @domName IDBFactory.open */
-  IDBOpenDBRequest open(String name, [int version]);
-
-  /** @domName IDBFactory.webkitGetDatabaseNames */
-  IDBRequest webkitGetDatabaseNames();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBFactoryImpl extends NativeFieldWrapperClass1 implements IDBFactory {
-
   int cmp(/*IDBKey*/ first, /*IDBKey*/ second) native "IDBFactory_cmp_Callback";
 
+
+  /** @domName IDBFactory.deleteDatabase */
   IDBVersionChangeRequest deleteDatabase(String name) native "IDBFactory_deleteDatabase_Callback";
 
   IDBOpenDBRequest open(/*DOMString*/ name, [/*long long*/ version]) {
@@ -17316,10 +12620,16 @@
     return _open_2(name);
   }
 
+
+  /** @domName IDBFactory.open_1 */
   IDBOpenDBRequest _open_1(name, version) native "IDBFactory_open_1_Callback";
 
+
+  /** @domName IDBFactory.open_2 */
   IDBOpenDBRequest _open_2(name) native "IDBFactory_open_2_Callback";
 
+
+  /** @domName IDBFactory.webkitGetDatabaseNames */
   IDBRequest webkitGetDatabaseNames() native "IDBFactory_webkitGetDatabaseNames_Callback";
 
 }
@@ -17330,54 +12640,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBIndex
-abstract class IDBIndex {
+class IDBIndex extends NativeFieldWrapperClass1 {
+  IDBIndex.internal();
+
 
   /** @domName IDBIndex.keyPath */
-  dynamic get keyPath;
-
-  /** @domName IDBIndex.multiEntry */
-  bool get multiEntry;
-
-  /** @domName IDBIndex.name */
-  String get name;
-
-  /** @domName IDBIndex.objectStore */
-  IDBObjectStore get objectStore;
-
-  /** @domName IDBIndex.unique */
-  bool get unique;
-
-  /** @domName IDBIndex.count */
-  IDBRequest count([key_OR_range]);
-
-  /** @domName IDBIndex.get */
-  IDBRequest get(key);
-
-  /** @domName IDBIndex.getKey */
-  IDBRequest getKey(key);
-
-  /** @domName IDBIndex.openCursor */
-  IDBRequest openCursor([key_OR_range, String direction]);
-
-  /** @domName IDBIndex.openKeyCursor */
-  IDBRequest openKeyCursor([key_OR_range, String direction]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBIndexImpl extends NativeFieldWrapperClass1 implements IDBIndex {
-
   dynamic get keyPath native "IDBIndex_keyPath_Getter";
 
+
+  /** @domName IDBIndex.multiEntry */
   bool get multiEntry native "IDBIndex_multiEntry_Getter";
 
+
+  /** @domName IDBIndex.name */
   String get name native "IDBIndex_name_Getter";
 
+
+  /** @domName IDBIndex.objectStore */
   IDBObjectStore get objectStore native "IDBIndex_objectStore_Getter";
 
+
+  /** @domName IDBIndex.unique */
   bool get unique native "IDBIndex_unique_Getter";
 
   IDBRequest count([key_OR_range]) {
@@ -17391,10 +12674,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBIndex.count_1 */
   IDBRequest _count_1() native "IDBIndex_count_1_Callback";
 
+
+  /** @domName IDBIndex.count_2 */
   IDBRequest _count_2(key_OR_range) native "IDBIndex_count_2_Callback";
 
+
+  /** @domName IDBIndex.count_3 */
   IDBRequest _count_3(key_OR_range) native "IDBIndex_count_3_Callback";
 
   IDBRequest get(key) {
@@ -17405,8 +12694,12 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBIndex.get_1 */
   IDBRequest _get_1(key) native "IDBIndex_get_1_Callback";
 
+
+  /** @domName IDBIndex.get_2 */
   IDBRequest _get_2(key) native "IDBIndex_get_2_Callback";
 
   IDBRequest getKey(key) {
@@ -17417,8 +12710,12 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBIndex.getKey_1 */
   IDBRequest _getKey_1(key) native "IDBIndex_getKey_1_Callback";
 
+
+  /** @domName IDBIndex.getKey_2 */
   IDBRequest _getKey_2(key) native "IDBIndex_getKey_2_Callback";
 
   IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
@@ -17440,14 +12737,24 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBIndex.openCursor_1 */
   IDBRequest _openCursor_1() native "IDBIndex_openCursor_1_Callback";
 
+
+  /** @domName IDBIndex.openCursor_2 */
   IDBRequest _openCursor_2(key_OR_range) native "IDBIndex_openCursor_2_Callback";
 
+
+  /** @domName IDBIndex.openCursor_3 */
   IDBRequest _openCursor_3(key_OR_range, direction) native "IDBIndex_openCursor_3_Callback";
 
+
+  /** @domName IDBIndex.openCursor_4 */
   IDBRequest _openCursor_4(key_OR_range) native "IDBIndex_openCursor_4_Callback";
 
+
+  /** @domName IDBIndex.openCursor_5 */
   IDBRequest _openCursor_5(key_OR_range, direction) native "IDBIndex_openCursor_5_Callback";
 
   IDBRequest openKeyCursor([key_OR_range, /*DOMString*/ direction]) {
@@ -17469,14 +12776,24 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBIndex.openKeyCursor_1 */
   IDBRequest _openKeyCursor_1() native "IDBIndex_openKeyCursor_1_Callback";
 
+
+  /** @domName IDBIndex.openKeyCursor_2 */
   IDBRequest _openKeyCursor_2(key_OR_range) native "IDBIndex_openKeyCursor_2_Callback";
 
+
+  /** @domName IDBIndex.openKeyCursor_3 */
   IDBRequest _openKeyCursor_3(key_OR_range, direction) native "IDBIndex_openKeyCursor_3_Callback";
 
+
+  /** @domName IDBIndex.openKeyCursor_4 */
   IDBRequest _openKeyCursor_4(key_OR_range) native "IDBIndex_openKeyCursor_4_Callback";
 
+
+  /** @domName IDBIndex.openKeyCursor_5 */
   IDBRequest _openKeyCursor_5(key_OR_range, direction) native "IDBIndex_openKeyCursor_5_Callback";
 
 }
@@ -17487,27 +12804,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBKey
-abstract class IDBKey {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBKeyImpl extends NativeFieldWrapperClass1 implements IDBKey {
+class IDBKey extends NativeFieldWrapperClass1 {
+  IDBKey.internal();
 
 }
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-
-/// @domName IDBKeyRange
-abstract class IDBKeyRange {
-
+class IDBKeyRange extends NativeFieldWrapperClass1 {
   /**
    * @domName IDBKeyRange.only
    */
@@ -17534,45 +12839,22 @@
       _IDBKeyRangeFactoryProvider.createIDBKeyRange_bound(
           lower, upper, lowerOpen, upperOpen);
 
+  IDBKeyRange.internal();
+
 
   /** @domName IDBKeyRange.lower */
-  dynamic get lower;
-
-  /** @domName IDBKeyRange.lowerOpen */
-  bool get lowerOpen;
-
-  /** @domName IDBKeyRange.upper */
-  dynamic get upper;
-
-  /** @domName IDBKeyRange.upperOpen */
-  bool get upperOpen;
-
-  /** @domName IDBKeyRange.bound_ */
-  static final bound_ = _IDBKeyRangeImpl.bound_;
-
-  /** @domName IDBKeyRange.lowerBound_ */
-  static final lowerBound_ = _IDBKeyRangeImpl.lowerBound_;
-
-  /** @domName IDBKeyRange.only_ */
-  static final only_ = _IDBKeyRangeImpl.only_;
-
-  /** @domName IDBKeyRange.upperBound_ */
-  static final upperBound_ = _IDBKeyRangeImpl.upperBound_;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBKeyRangeImpl extends NativeFieldWrapperClass1 implements IDBKeyRange {
-
   dynamic get lower native "IDBKeyRange_lower_Getter";
 
+
+  /** @domName IDBKeyRange.lowerOpen */
   bool get lowerOpen native "IDBKeyRange_lowerOpen_Getter";
 
+
+  /** @domName IDBKeyRange.upper */
   dynamic get upper native "IDBKeyRange_upper_Getter";
 
+
+  /** @domName IDBKeyRange.upperOpen */
   bool get upperOpen native "IDBKeyRange_upperOpen_Getter";
 
   static IDBKeyRange bound_(/*IDBKey*/ lower, /*IDBKey*/ upper, [/*boolean*/ lowerOpen, /*boolean*/ upperOpen]) {
@@ -17585,10 +12867,16 @@
     return _bound_3(lower, upper);
   }
 
+
+  /** @domName IDBKeyRange.bound_1 */
   static IDBKeyRange _bound_1(lower, upper, lowerOpen, upperOpen) native "IDBKeyRange_bound_1_Callback";
 
+
+  /** @domName IDBKeyRange.bound_2 */
   static IDBKeyRange _bound_2(lower, upper, lowerOpen) native "IDBKeyRange_bound_2_Callback";
 
+
+  /** @domName IDBKeyRange.bound_3 */
   static IDBKeyRange _bound_3(lower, upper) native "IDBKeyRange_bound_3_Callback";
 
   static IDBKeyRange lowerBound_(/*IDBKey*/ bound, [/*boolean*/ open]) {
@@ -17598,10 +12886,16 @@
     return _lowerBound_2(bound);
   }
 
+
+  /** @domName IDBKeyRange.lowerBound_1 */
   static IDBKeyRange _lowerBound_1(bound, open) native "IDBKeyRange_lowerBound_1_Callback";
 
+
+  /** @domName IDBKeyRange.lowerBound_2 */
   static IDBKeyRange _lowerBound_2(bound) native "IDBKeyRange_lowerBound_2_Callback";
 
+
+  /** @domName IDBKeyRange.only_ */
   static IDBKeyRange only_(/*IDBKey*/ value) native "IDBKeyRange_only__Callback";
 
   static IDBKeyRange upperBound_(/*IDBKey*/ bound, [/*boolean*/ open]) {
@@ -17611,8 +12905,12 @@
     return _upperBound_2(bound);
   }
 
+
+  /** @domName IDBKeyRange.upperBound_1 */
   static IDBKeyRange _upperBound_1(bound, open) native "IDBKeyRange_upperBound_1_Callback";
 
+
+  /** @domName IDBKeyRange.upperBound_2 */
   static IDBKeyRange _upperBound_2(bound) native "IDBKeyRange_upperBound_2_Callback";
 
 }
@@ -17623,69 +12921,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBObjectStore
-abstract class IDBObjectStore {
+class IDBObjectStore extends NativeFieldWrapperClass1 {
+  IDBObjectStore.internal();
+
 
   /** @domName IDBObjectStore.autoIncrement */
-  bool get autoIncrement;
-
-  /** @domName IDBObjectStore.indexNames */
-  List<String> get indexNames;
-
-  /** @domName IDBObjectStore.keyPath */
-  dynamic get keyPath;
-
-  /** @domName IDBObjectStore.name */
-  String get name;
-
-  /** @domName IDBObjectStore.transaction */
-  IDBTransaction get transaction;
-
-  /** @domName IDBObjectStore.add */
-  IDBRequest add(Object value, [/*IDBKey*/ key]);
-
-  /** @domName IDBObjectStore.clear */
-  IDBRequest clear();
-
-  /** @domName IDBObjectStore.count */
-  IDBRequest count([key_OR_range]);
-
-  /** @domName IDBObjectStore.createIndex */
-  IDBIndex createIndex(String name, keyPath, [Map options]);
-
-  /** @domName IDBObjectStore.delete */
-  IDBRequest delete(key_OR_keyRange);
-
-  /** @domName IDBObjectStore.deleteIndex */
-  void deleteIndex(String name);
-
-  /** @domName IDBObjectStore.getObject */
-  IDBRequest getObject(key);
-
-  /** @domName IDBObjectStore.index */
-  IDBIndex index(String name);
-
-  /** @domName IDBObjectStore.openCursor */
-  IDBRequest openCursor([key_OR_range, String direction]);
-
-  /** @domName IDBObjectStore.put */
-  IDBRequest put(Object value, [/*IDBKey*/ key]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBObjectStoreImpl extends NativeFieldWrapperClass1 implements IDBObjectStore {
-
   bool get autoIncrement native "IDBObjectStore_autoIncrement_Getter";
 
+
+  /** @domName IDBObjectStore.indexNames */
   List<String> get indexNames native "IDBObjectStore_indexNames_Getter";
 
+
+  /** @domName IDBObjectStore.keyPath */
   dynamic get keyPath native "IDBObjectStore_keyPath_Getter";
 
+
+  /** @domName IDBObjectStore.name */
   String get name native "IDBObjectStore_name_Getter";
 
+
+  /** @domName IDBObjectStore.transaction */
   IDBTransaction get transaction native "IDBObjectStore_transaction_Getter";
 
   IDBRequest add(/*any*/ value, [/*IDBKey*/ key]) {
@@ -17695,10 +12951,16 @@
     return _add_2(value);
   }
 
+
+  /** @domName IDBObjectStore.add_1 */
   IDBRequest _add_1(value, key) native "IDBObjectStore_add_1_Callback";
 
+
+  /** @domName IDBObjectStore.add_2 */
   IDBRequest _add_2(value) native "IDBObjectStore_add_2_Callback";
 
+
+  /** @domName IDBObjectStore.clear */
   IDBRequest clear() native "IDBObjectStore_clear_Callback";
 
   IDBRequest count([key_OR_range]) {
@@ -17712,10 +12974,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBObjectStore.count_1 */
   IDBRequest _count_1() native "IDBObjectStore_count_1_Callback";
 
+
+  /** @domName IDBObjectStore.count_2 */
   IDBRequest _count_2(key_OR_range) native "IDBObjectStore_count_2_Callback";
 
+
+  /** @domName IDBObjectStore.count_3 */
   IDBRequest _count_3(key_OR_range) native "IDBObjectStore_count_3_Callback";
 
   IDBIndex createIndex(/*DOMString*/ name, keyPath, [/*Dictionary*/ options]) {
@@ -17728,8 +12996,12 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBObjectStore.createIndex_1 */
   IDBIndex _createIndex_1(name, keyPath, options) native "IDBObjectStore_createIndex_1_Callback";
 
+
+  /** @domName IDBObjectStore.createIndex_2 */
   IDBIndex _createIndex_2(name, keyPath, options) native "IDBObjectStore_createIndex_2_Callback";
 
   IDBRequest delete(key_OR_keyRange) {
@@ -17740,10 +13012,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBObjectStore.delete_1 */
   IDBRequest _delete_1(key_OR_keyRange) native "IDBObjectStore_delete_1_Callback";
 
+
+  /** @domName IDBObjectStore.delete_2 */
   IDBRequest _delete_2(key_OR_keyRange) native "IDBObjectStore_delete_2_Callback";
 
+
+  /** @domName IDBObjectStore.deleteIndex */
   void deleteIndex(String name) native "IDBObjectStore_deleteIndex_Callback";
 
   IDBRequest getObject(key) {
@@ -17754,10 +13032,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBObjectStore.get_1 */
   IDBRequest _get_1(key) native "IDBObjectStore_get_1_Callback";
 
+
+  /** @domName IDBObjectStore.get_2 */
   IDBRequest _get_2(key) native "IDBObjectStore_get_2_Callback";
 
+
+  /** @domName IDBObjectStore.index */
   IDBIndex index(String name) native "IDBObjectStore_index_Callback";
 
   IDBRequest openCursor([key_OR_range, /*DOMString*/ direction]) {
@@ -17779,14 +13063,24 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName IDBObjectStore.openCursor_1 */
   IDBRequest _openCursor_1() native "IDBObjectStore_openCursor_1_Callback";
 
+
+  /** @domName IDBObjectStore.openCursor_2 */
   IDBRequest _openCursor_2(key_OR_range) native "IDBObjectStore_openCursor_2_Callback";
 
+
+  /** @domName IDBObjectStore.openCursor_3 */
   IDBRequest _openCursor_3(key_OR_range, direction) native "IDBObjectStore_openCursor_3_Callback";
 
+
+  /** @domName IDBObjectStore.openCursor_4 */
   IDBRequest _openCursor_4(key_OR_range) native "IDBObjectStore_openCursor_4_Callback";
 
+
+  /** @domName IDBObjectStore.openCursor_5 */
   IDBRequest _openCursor_5(key_OR_range, direction) native "IDBObjectStore_openCursor_5_Callback";
 
   IDBRequest put(/*any*/ value, [/*IDBKey*/ key]) {
@@ -17796,8 +13090,12 @@
     return _put_2(value);
   }
 
+
+  /** @domName IDBObjectStore.put_1 */
   IDBRequest _put_1(value, key) native "IDBObjectStore_put_1_Callback";
 
+
+  /** @domName IDBObjectStore.put_2 */
   IDBRequest _put_2(value) native "IDBObjectStore_put_2_Callback";
 
 }
@@ -17808,35 +13106,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBOpenDBRequest
-abstract class IDBOpenDBRequest implements IDBRequest, EventTarget {
+class IDBOpenDBRequest extends IDBRequest implements EventTarget {
+  IDBOpenDBRequest.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  IDBOpenDBRequestEvents get on;
-}
-
-abstract class IDBOpenDBRequestEvents implements IDBRequestEvents {
-
-  EventListenerList get blocked;
-
-  EventListenerList get upgradeNeeded;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBOpenDBRequestImpl extends _IDBRequestImpl implements IDBOpenDBRequest {
-
-  _IDBOpenDBRequestEventsImpl get on =>
-    new _IDBOpenDBRequestEventsImpl(this);
+  IDBOpenDBRequestEvents get on =>
+    new IDBOpenDBRequestEvents(this);
 
 }
 
-class _IDBOpenDBRequestEventsImpl extends _IDBRequestEventsImpl implements IDBOpenDBRequestEvents {
-  _IDBOpenDBRequestEventsImpl(_ptr) : super(_ptr);
+class IDBOpenDBRequestEvents extends IDBRequestEvents {
+  IDBOpenDBRequestEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get blocked => this['blocked'];
 
@@ -17849,85 +13131,59 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBRequest
-abstract class IDBRequest implements EventTarget {
+class IDBRequest extends EventTarget {
+  IDBRequest.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  IDBRequestEvents get on;
+  IDBRequestEvents get on =>
+    new IDBRequestEvents(this);
+
 
   /** @domName IDBRequest.error */
-  DOMError get error;
-
-  /** @domName IDBRequest.errorCode */
-  int get errorCode;
-
-  /** @domName IDBRequest.readyState */
-  String get readyState;
-
-  /** @domName IDBRequest.result */
-  dynamic get result;
-
-  /** @domName IDBRequest.source */
-  dynamic get source;
-
-  /** @domName IDBRequest.transaction */
-  IDBTransaction get transaction;
-
-  /** @domName IDBRequest.webkitErrorMessage */
-  String get webkitErrorMessage;
-
-  /** @domName IDBRequest.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBRequest.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName IDBRequest.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class IDBRequestEvents implements Events {
-
-  EventListenerList get error;
-
-  EventListenerList get success;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBRequestImpl extends _EventTargetImpl implements IDBRequest {
-
-  _IDBRequestEventsImpl get on =>
-    new _IDBRequestEventsImpl(this);
-
   DOMError get error native "IDBRequest_error_Getter";
 
+
+  /** @domName IDBRequest.errorCode */
   int get errorCode native "IDBRequest_errorCode_Getter";
 
+
+  /** @domName IDBRequest.readyState */
   String get readyState native "IDBRequest_readyState_Getter";
 
+
+  /** @domName IDBRequest.result */
   dynamic get result native "IDBRequest_result_Getter";
 
+
+  /** @domName IDBRequest.source */
   dynamic get source native "IDBRequest_source_Getter";
 
+
+  /** @domName IDBRequest.transaction */
   IDBTransaction get transaction native "IDBRequest_transaction_Getter";
 
+
+  /** @domName IDBRequest.webkitErrorMessage */
   String get webkitErrorMessage native "IDBRequest_webkitErrorMessage_Getter";
 
+
+  /** @domName IDBRequest.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_addEventListener_Callback";
 
+
+  /** @domName IDBRequest.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "IDBRequest_dispatchEvent_Callback";
 
+
+  /** @domName IDBRequest.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_removeEventListener_Callback";
 
 }
 
-class _IDBRequestEventsImpl extends _EventsImpl implements IDBRequestEvents {
-  _IDBRequestEventsImpl(_ptr) : super(_ptr);
+class IDBRequestEvents extends Events {
+  IDBRequestEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get error => this['error'];
 
@@ -17940,12 +13196,14 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBTransaction
-abstract class IDBTransaction implements EventTarget {
+class IDBTransaction extends EventTarget {
+  IDBTransaction.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  IDBTransactionEvents get on;
+  IDBTransactionEvents get on =>
+    new IDBTransactionEvents(this);
 
   static const int READ_ONLY = 0;
 
@@ -17953,70 +13211,42 @@
 
   static const int VERSION_CHANGE = 2;
 
+
   /** @domName IDBTransaction.db */
-  IDBDatabase get db;
-
-  /** @domName IDBTransaction.error */
-  DOMError get error;
-
-  /** @domName IDBTransaction.mode */
-  String get mode;
-
-  /** @domName IDBTransaction.abort */
-  void abort();
-
-  /** @domName IDBTransaction.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName IDBTransaction.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName IDBTransaction.objectStore */
-  IDBObjectStore objectStore(String name);
-
-  /** @domName IDBTransaction.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class IDBTransactionEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get complete;
-
-  EventListenerList get error;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBTransactionImpl extends _EventTargetImpl implements IDBTransaction {
-
-  _IDBTransactionEventsImpl get on =>
-    new _IDBTransactionEventsImpl(this);
-
   IDBDatabase get db native "IDBTransaction_db_Getter";
 
+
+  /** @domName IDBTransaction.error */
   DOMError get error native "IDBTransaction_error_Getter";
 
+
+  /** @domName IDBTransaction.mode */
   String get mode native "IDBTransaction_mode_Getter";
 
+
+  /** @domName IDBTransaction.abort */
   void abort() native "IDBTransaction_abort_Callback";
 
+
+  /** @domName IDBTransaction.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBTransaction_addEventListener_Callback";
 
+
+  /** @domName IDBTransaction.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "IDBTransaction_dispatchEvent_Callback";
 
+
+  /** @domName IDBTransaction.objectStore */
   IDBObjectStore objectStore(String name) native "IDBTransaction_objectStore_Callback";
 
+
+  /** @domName IDBTransaction.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBTransaction_removeEventListener_Callback";
 
 }
 
-class _IDBTransactionEventsImpl extends _EventsImpl implements IDBTransactionEvents {
-  _IDBTransactionEventsImpl(_ptr) : super(_ptr);
+class IDBTransactionEvents extends Events {
+  IDBTransactionEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -18031,24 +13261,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBVersionChangeEvent
-abstract class IDBUpgradeNeededEvent implements Event {
+class IDBUpgradeNeededEvent extends Event {
+  IDBUpgradeNeededEvent.internal(): super.internal();
 
-  /** @domName IDBVersionChangeEvent.newVersion */
-  int get newVersion;
 
-  /** @domName IDBVersionChangeEvent.oldVersion */
-  int get oldVersion;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBUpgradeNeededEventImpl extends _EventImpl implements IDBUpgradeNeededEvent {
-
+  /** @domName IDBUpgradeNeededEvent.newVersion */
   int get newVersion native "IDBUpgradeNeededEvent_newVersion_Getter";
 
+
+  /** @domName IDBUpgradeNeededEvent.oldVersion */
   int get oldVersion native "IDBUpgradeNeededEvent_oldVersion_Getter";
 
 }
@@ -18059,19 +13280,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBVersionChangeEvent
-abstract class IDBVersionChangeEvent implements Event {
+class IDBVersionChangeEvent extends Event {
+  IDBVersionChangeEvent.internal(): super.internal();
+
 
   /** @domName IDBVersionChangeEvent.version */
-  String get version;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBVersionChangeEventImpl extends _EventImpl implements IDBVersionChangeEvent {
-
   String get version native "IDBVersionChangeEvent_version_Getter";
 
 }
@@ -18082,33 +13295,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IDBVersionChangeRequest
-abstract class IDBVersionChangeRequest implements IDBRequest, EventTarget {
+class IDBVersionChangeRequest extends IDBRequest implements EventTarget {
+  IDBVersionChangeRequest.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  IDBVersionChangeRequestEvents get on;
-}
-
-abstract class IDBVersionChangeRequestEvents implements IDBRequestEvents {
-
-  EventListenerList get blocked;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IDBVersionChangeRequestImpl extends _IDBRequestImpl implements IDBVersionChangeRequest {
-
-  _IDBVersionChangeRequestEventsImpl get on =>
-    new _IDBVersionChangeRequestEventsImpl(this);
+  IDBVersionChangeRequestEvents get on =>
+    new IDBVersionChangeRequestEvents(this);
 
 }
 
-class _IDBVersionChangeRequestEventsImpl extends _IDBRequestEventsImpl implements IDBVersionChangeRequestEvents {
-  _IDBVersionChangeRequestEventsImpl(_ptr) : super(_ptr);
+class IDBVersionChangeRequestEvents extends IDBRequestEvents {
+  IDBVersionChangeRequestEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get blocked => this['blocked'];
 }
@@ -18119,105 +13318,109 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLIFrameElement
-abstract class IFrameElement implements Element {
+class IFrameElement extends _Element_Merged {
 
   factory IFrameElement() => _Elements.createIFrameElement();
+  IFrameElement.internal(): super.internal();
+
 
   /** @domName HTMLIFrameElement.align */
-  String align;
-
-  /** @domName HTMLIFrameElement.contentWindow */
-  Window get contentWindow;
-
-  /** @domName HTMLIFrameElement.frameBorder */
-  String frameBorder;
-
-  /** @domName HTMLIFrameElement.height */
-  String height;
-
-  /** @domName HTMLIFrameElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLIFrameElement.marginHeight */
-  String marginHeight;
-
-  /** @domName HTMLIFrameElement.marginWidth */
-  String marginWidth;
-
-  /** @domName HTMLIFrameElement.name */
-  String name;
-
-  /** @domName HTMLIFrameElement.sandbox */
-  String sandbox;
-
-  /** @domName HTMLIFrameElement.scrolling */
-  String scrolling;
-
-  /** @domName HTMLIFrameElement.src */
-  String src;
-
-  /** @domName HTMLIFrameElement.srcdoc */
-  String srcdoc;
-
-  /** @domName HTMLIFrameElement.width */
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IFrameElementImpl extends _ElementImpl_Merged implements IFrameElement {
-
   String get align native "HTMLIFrameElement_align_Getter";
 
+
+  /** @domName HTMLIFrameElement.align */
   void set align(String value) native "HTMLIFrameElement_align_Setter";
 
+
+  /** @domName HTMLIFrameElement.contentWindow */
   Window get contentWindow native "HTMLIFrameElement_contentWindow_Getter";
 
+
+  /** @domName HTMLIFrameElement.frameBorder */
   String get frameBorder native "HTMLIFrameElement_frameBorder_Getter";
 
+
+  /** @domName HTMLIFrameElement.frameBorder */
   void set frameBorder(String value) native "HTMLIFrameElement_frameBorder_Setter";
 
+
+  /** @domName HTMLIFrameElement.height */
   String get height native "HTMLIFrameElement_height_Getter";
 
+
+  /** @domName HTMLIFrameElement.height */
   void set height(String value) native "HTMLIFrameElement_height_Setter";
 
+
+  /** @domName HTMLIFrameElement.longDesc */
   String get longDesc native "HTMLIFrameElement_longDesc_Getter";
 
+
+  /** @domName HTMLIFrameElement.longDesc */
   void set longDesc(String value) native "HTMLIFrameElement_longDesc_Setter";
 
+
+  /** @domName HTMLIFrameElement.marginHeight */
   String get marginHeight native "HTMLIFrameElement_marginHeight_Getter";
 
+
+  /** @domName HTMLIFrameElement.marginHeight */
   void set marginHeight(String value) native "HTMLIFrameElement_marginHeight_Setter";
 
+
+  /** @domName HTMLIFrameElement.marginWidth */
   String get marginWidth native "HTMLIFrameElement_marginWidth_Getter";
 
+
+  /** @domName HTMLIFrameElement.marginWidth */
   void set marginWidth(String value) native "HTMLIFrameElement_marginWidth_Setter";
 
+
+  /** @domName HTMLIFrameElement.name */
   String get name native "HTMLIFrameElement_name_Getter";
 
+
+  /** @domName HTMLIFrameElement.name */
   void set name(String value) native "HTMLIFrameElement_name_Setter";
 
+
+  /** @domName HTMLIFrameElement.sandbox */
   String get sandbox native "HTMLIFrameElement_sandbox_Getter";
 
+
+  /** @domName HTMLIFrameElement.sandbox */
   void set sandbox(String value) native "HTMLIFrameElement_sandbox_Setter";
 
+
+  /** @domName HTMLIFrameElement.scrolling */
   String get scrolling native "HTMLIFrameElement_scrolling_Getter";
 
+
+  /** @domName HTMLIFrameElement.scrolling */
   void set scrolling(String value) native "HTMLIFrameElement_scrolling_Setter";
 
+
+  /** @domName HTMLIFrameElement.src */
   String get src native "HTMLIFrameElement_src_Getter";
 
+
+  /** @domName HTMLIFrameElement.src */
   void set src(String value) native "HTMLIFrameElement_src_Setter";
 
+
+  /** @domName HTMLIFrameElement.srcdoc */
   String get srcdoc native "HTMLIFrameElement_srcdoc_Getter";
 
+
+  /** @domName HTMLIFrameElement.srcdoc */
   void set srcdoc(String value) native "HTMLIFrameElement_srcdoc_Setter";
 
+
+  /** @domName HTMLIFrameElement.width */
   String get width native "HTMLIFrameElement_width_Getter";
 
+
+  /** @domName HTMLIFrameElement.width */
   void set width(String value) native "HTMLIFrameElement_width_Setter";
 
 }
@@ -18236,26 +13439,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName IceCandidate
-abstract class IceCandidate {
+class IceCandidate extends NativeFieldWrapperClass1 {
 
   factory IceCandidate(String label, String candidateLine) => _IceCandidateFactoryProvider.createIceCandidate(label, candidateLine);
+  IceCandidate.internal();
+
 
   /** @domName IceCandidate.label */
-  String get label;
-
-  /** @domName IceCandidate.toSdp */
-  String toSdp();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _IceCandidateImpl extends NativeFieldWrapperClass1 implements IceCandidate {
-
   String get label native "IceCandidate_label_Getter";
 
+
+  /** @domName IceCandidate.toSdp */
   String toSdp() native "IceCandidate_toSdp_Callback";
 
 }
@@ -18266,29 +13460,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ImageData
-abstract class ImageData {
+class ImageData extends NativeFieldWrapperClass1 {
+  ImageData.internal();
+
 
   /** @domName ImageData.data */
-  Uint8ClampedArray get data;
-
-  /** @domName ImageData.height */
-  int get height;
-
-  /** @domName ImageData.width */
-  int get width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ImageDataImpl extends NativeFieldWrapperClass1 implements ImageData {
-
   Uint8ClampedArray get data native "ImageData_data_Getter";
 
+
+  /** @domName ImageData.height */
   int get height native "ImageData_height_Getter";
 
+
+  /** @domName ImageData.width */
   int get width native "ImageData_width_Getter";
 
 }
@@ -18299,7 +13483,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLImageElement
-abstract class ImageElement implements Element {
+class ImageElement extends _Element_Merged {
 
   factory ImageElement({String src, int width, int height}) {
     if (!?src) {
@@ -18313,136 +13497,138 @@
     }
     return _Elements.createImageElement(src, width, height);
   }
+  ImageElement.internal(): super.internal();
+
 
   /** @domName HTMLImageElement.align */
-  String align;
-
-  /** @domName HTMLImageElement.alt */
-  String alt;
-
-  /** @domName HTMLImageElement.border */
-  String border;
-
-  /** @domName HTMLImageElement.complete */
-  bool get complete;
-
-  /** @domName HTMLImageElement.crossOrigin */
-  String crossOrigin;
-
-  /** @domName HTMLImageElement.height */
-  int height;
-
-  /** @domName HTMLImageElement.hspace */
-  int hspace;
-
-  /** @domName HTMLImageElement.isMap */
-  bool isMap;
-
-  /** @domName HTMLImageElement.longDesc */
-  String longDesc;
-
-  /** @domName HTMLImageElement.lowsrc */
-  String lowsrc;
-
-  /** @domName HTMLImageElement.name */
-  String name;
-
-  /** @domName HTMLImageElement.naturalHeight */
-  int get naturalHeight;
-
-  /** @domName HTMLImageElement.naturalWidth */
-  int get naturalWidth;
-
-  /** @domName HTMLImageElement.src */
-  String src;
-
-  /** @domName HTMLImageElement.useMap */
-  String useMap;
-
-  /** @domName HTMLImageElement.vspace */
-  int vspace;
-
-  /** @domName HTMLImageElement.width */
-  int width;
-
-  /** @domName HTMLImageElement.x */
-  int get x;
-
-  /** @domName HTMLImageElement.y */
-  int get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ImageElementImpl extends _ElementImpl_Merged implements ImageElement {
-
   String get align native "HTMLImageElement_align_Getter";
 
+
+  /** @domName HTMLImageElement.align */
   void set align(String value) native "HTMLImageElement_align_Setter";
 
+
+  /** @domName HTMLImageElement.alt */
   String get alt native "HTMLImageElement_alt_Getter";
 
+
+  /** @domName HTMLImageElement.alt */
   void set alt(String value) native "HTMLImageElement_alt_Setter";
 
+
+  /** @domName HTMLImageElement.border */
   String get border native "HTMLImageElement_border_Getter";
 
+
+  /** @domName HTMLImageElement.border */
   void set border(String value) native "HTMLImageElement_border_Setter";
 
+
+  /** @domName HTMLImageElement.complete */
   bool get complete native "HTMLImageElement_complete_Getter";
 
+
+  /** @domName HTMLImageElement.crossOrigin */
   String get crossOrigin native "HTMLImageElement_crossOrigin_Getter";
 
+
+  /** @domName HTMLImageElement.crossOrigin */
   void set crossOrigin(String value) native "HTMLImageElement_crossOrigin_Setter";
 
+
+  /** @domName HTMLImageElement.height */
   int get height native "HTMLImageElement_height_Getter";
 
+
+  /** @domName HTMLImageElement.height */
   void set height(int value) native "HTMLImageElement_height_Setter";
 
+
+  /** @domName HTMLImageElement.hspace */
   int get hspace native "HTMLImageElement_hspace_Getter";
 
+
+  /** @domName HTMLImageElement.hspace */
   void set hspace(int value) native "HTMLImageElement_hspace_Setter";
 
+
+  /** @domName HTMLImageElement.isMap */
   bool get isMap native "HTMLImageElement_isMap_Getter";
 
+
+  /** @domName HTMLImageElement.isMap */
   void set isMap(bool value) native "HTMLImageElement_isMap_Setter";
 
+
+  /** @domName HTMLImageElement.longDesc */
   String get longDesc native "HTMLImageElement_longDesc_Getter";
 
+
+  /** @domName HTMLImageElement.longDesc */
   void set longDesc(String value) native "HTMLImageElement_longDesc_Setter";
 
+
+  /** @domName HTMLImageElement.lowsrc */
   String get lowsrc native "HTMLImageElement_lowsrc_Getter";
 
+
+  /** @domName HTMLImageElement.lowsrc */
   void set lowsrc(String value) native "HTMLImageElement_lowsrc_Setter";
 
+
+  /** @domName HTMLImageElement.name */
   String get name native "HTMLImageElement_name_Getter";
 
+
+  /** @domName HTMLImageElement.name */
   void set name(String value) native "HTMLImageElement_name_Setter";
 
+
+  /** @domName HTMLImageElement.naturalHeight */
   int get naturalHeight native "HTMLImageElement_naturalHeight_Getter";
 
+
+  /** @domName HTMLImageElement.naturalWidth */
   int get naturalWidth native "HTMLImageElement_naturalWidth_Getter";
 
+
+  /** @domName HTMLImageElement.src */
   String get src native "HTMLImageElement_src_Getter";
 
+
+  /** @domName HTMLImageElement.src */
   void set src(String value) native "HTMLImageElement_src_Setter";
 
+
+  /** @domName HTMLImageElement.useMap */
   String get useMap native "HTMLImageElement_useMap_Getter";
 
+
+  /** @domName HTMLImageElement.useMap */
   void set useMap(String value) native "HTMLImageElement_useMap_Setter";
 
+
+  /** @domName HTMLImageElement.vspace */
   int get vspace native "HTMLImageElement_vspace_Getter";
 
+
+  /** @domName HTMLImageElement.vspace */
   void set vspace(int value) native "HTMLImageElement_vspace_Setter";
 
+
+  /** @domName HTMLImageElement.width */
   int get width native "HTMLImageElement_width_Getter";
 
+
+  /** @domName HTMLImageElement.width */
   void set width(int value) native "HTMLImageElement_width_Setter";
 
+
+  /** @domName HTMLImageElement.x */
   int get x native "HTMLImageElement_x_Getter";
 
+
+  /** @domName HTMLImageElement.y */
   int get y native "HTMLImageElement_y_Getter";
 
 }
@@ -18453,7 +13639,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLInputElement
-abstract class InputElement implements Element {
+class InputElement extends _Element_Merged {
 
   factory InputElement({String type}) {
     if (!?type) {
@@ -18461,389 +13647,396 @@
     }
     return _Elements.createInputElement(type);
   }
+  InputElement.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  InputElementEvents get on;
+  InputElementEvents get on =>
+    new InputElementEvents(this);
+
 
   /** @domName HTMLInputElement.accept */
-  String accept;
-
-  /** @domName HTMLInputElement.align */
-  String align;
-
-  /** @domName HTMLInputElement.alt */
-  String alt;
-
-  /** @domName HTMLInputElement.autocomplete */
-  String autocomplete;
-
-  /** @domName HTMLInputElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLInputElement.checked */
-  bool checked;
-
-  /** @domName HTMLInputElement.defaultChecked */
-  bool defaultChecked;
-
-  /** @domName HTMLInputElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLInputElement.dirName */
-  String dirName;
-
-  /** @domName HTMLInputElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLInputElement.files */
-  List<File> files;
-
-  /** @domName HTMLInputElement.form */
-  FormElement get form;
-
-  /** @domName HTMLInputElement.formAction */
-  String formAction;
-
-  /** @domName HTMLInputElement.formEnctype */
-  String formEnctype;
-
-  /** @domName HTMLInputElement.formMethod */
-  String formMethod;
-
-  /** @domName HTMLInputElement.formNoValidate */
-  bool formNoValidate;
-
-  /** @domName HTMLInputElement.formTarget */
-  String formTarget;
-
-  /** @domName HTMLInputElement.height */
-  int height;
-
-  /** @domName HTMLInputElement.incremental */
-  bool incremental;
-
-  /** @domName HTMLInputElement.indeterminate */
-  bool indeterminate;
-
-  /** @domName HTMLInputElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLInputElement.list */
-  Element get list;
-
-  /** @domName HTMLInputElement.max */
-  String max;
-
-  /** @domName HTMLInputElement.maxLength */
-  int maxLength;
-
-  /** @domName HTMLInputElement.min */
-  String min;
-
-  /** @domName HTMLInputElement.multiple */
-  bool multiple;
-
-  /** @domName HTMLInputElement.name */
-  String name;
-
-  /** @domName HTMLInputElement.pattern */
-  String pattern;
-
-  /** @domName HTMLInputElement.placeholder */
-  String placeholder;
-
-  /** @domName HTMLInputElement.readOnly */
-  bool readOnly;
-
-  /** @domName HTMLInputElement.required */
-  bool required;
-
-  /** @domName HTMLInputElement.selectionDirection */
-  String selectionDirection;
-
-  /** @domName HTMLInputElement.selectionEnd */
-  int selectionEnd;
-
-  /** @domName HTMLInputElement.selectionStart */
-  int selectionStart;
-
-  /** @domName HTMLInputElement.size */
-  int size;
-
-  /** @domName HTMLInputElement.src */
-  String src;
-
-  /** @domName HTMLInputElement.step */
-  String step;
-
-  /** @domName HTMLInputElement.type */
-  String type;
-
-  /** @domName HTMLInputElement.useMap */
-  String useMap;
-
-  /** @domName HTMLInputElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLInputElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLInputElement.value */
-  String value;
-
-  /** @domName HTMLInputElement.valueAsDate */
-  Date valueAsDate;
-
-  /** @domName HTMLInputElement.valueAsNumber */
-  num valueAsNumber;
-
-  /** @domName HTMLInputElement.webkitEntries */
-  List<Entry> get webkitEntries;
-
-  /** @domName HTMLInputElement.webkitGrammar */
-  bool webkitGrammar;
-
-  /** @domName HTMLInputElement.webkitSpeech */
-  bool webkitSpeech;
-
-  /** @domName HTMLInputElement.webkitdirectory */
-  bool webkitdirectory;
-
-  /** @domName HTMLInputElement.width */
-  int width;
-
-  /** @domName HTMLInputElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLInputElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLInputElement.select */
-  void select();
-
-  /** @domName HTMLInputElement.setCustomValidity */
-  void setCustomValidity(String error);
-
-  /** @domName HTMLInputElement.setRangeText */
-  void setRangeText(String replacement, [int start, int end, String selectionMode]);
-
-  /** @domName HTMLInputElement.setSelectionRange */
-  void setSelectionRange(int start, int end, [String direction]);
-
-  /** @domName HTMLInputElement.stepDown */
-  void stepDown([int n]);
-
-  /** @domName HTMLInputElement.stepUp */
-  void stepUp([int n]);
-}
-
-abstract class InputElementEvents implements ElementEvents {
-
-  EventListenerList get speechChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _InputElementImpl extends _ElementImpl_Merged implements InputElement {
-
-  _InputElementEventsImpl get on =>
-    new _InputElementEventsImpl(this);
-
   String get accept native "HTMLInputElement_accept_Getter";
 
+
+  /** @domName HTMLInputElement.accept */
   void set accept(String value) native "HTMLInputElement_accept_Setter";
 
+
+  /** @domName HTMLInputElement.align */
   String get align native "HTMLInputElement_align_Getter";
 
+
+  /** @domName HTMLInputElement.align */
   void set align(String value) native "HTMLInputElement_align_Setter";
 
+
+  /** @domName HTMLInputElement.alt */
   String get alt native "HTMLInputElement_alt_Getter";
 
+
+  /** @domName HTMLInputElement.alt */
   void set alt(String value) native "HTMLInputElement_alt_Setter";
 
+
+  /** @domName HTMLInputElement.autocomplete */
   String get autocomplete native "HTMLInputElement_autocomplete_Getter";
 
+
+  /** @domName HTMLInputElement.autocomplete */
   void set autocomplete(String value) native "HTMLInputElement_autocomplete_Setter";
 
+
+  /** @domName HTMLInputElement.autofocus */
   bool get autofocus native "HTMLInputElement_autofocus_Getter";
 
+
+  /** @domName HTMLInputElement.autofocus */
   void set autofocus(bool value) native "HTMLInputElement_autofocus_Setter";
 
+
+  /** @domName HTMLInputElement.checked */
   bool get checked native "HTMLInputElement_checked_Getter";
 
+
+  /** @domName HTMLInputElement.checked */
   void set checked(bool value) native "HTMLInputElement_checked_Setter";
 
+
+  /** @domName HTMLInputElement.defaultChecked */
   bool get defaultChecked native "HTMLInputElement_defaultChecked_Getter";
 
+
+  /** @domName HTMLInputElement.defaultChecked */
   void set defaultChecked(bool value) native "HTMLInputElement_defaultChecked_Setter";
 
+
+  /** @domName HTMLInputElement.defaultValue */
   String get defaultValue native "HTMLInputElement_defaultValue_Getter";
 
+
+  /** @domName HTMLInputElement.defaultValue */
   void set defaultValue(String value) native "HTMLInputElement_defaultValue_Setter";
 
+
+  /** @domName HTMLInputElement.dirName */
   String get dirName native "HTMLInputElement_dirName_Getter";
 
+
+  /** @domName HTMLInputElement.dirName */
   void set dirName(String value) native "HTMLInputElement_dirName_Setter";
 
+
+  /** @domName HTMLInputElement.disabled */
   bool get disabled native "HTMLInputElement_disabled_Getter";
 
+
+  /** @domName HTMLInputElement.disabled */
   void set disabled(bool value) native "HTMLInputElement_disabled_Setter";
 
+
+  /** @domName HTMLInputElement.files */
   List<File> get files native "HTMLInputElement_files_Getter";
 
+
+  /** @domName HTMLInputElement.files */
   void set files(List<File> value) native "HTMLInputElement_files_Setter";
 
+
+  /** @domName HTMLInputElement.form */
   FormElement get form native "HTMLInputElement_form_Getter";
 
+
+  /** @domName HTMLInputElement.formAction */
   String get formAction native "HTMLInputElement_formAction_Getter";
 
+
+  /** @domName HTMLInputElement.formAction */
   void set formAction(String value) native "HTMLInputElement_formAction_Setter";
 
+
+  /** @domName HTMLInputElement.formEnctype */
   String get formEnctype native "HTMLInputElement_formEnctype_Getter";
 
+
+  /** @domName HTMLInputElement.formEnctype */
   void set formEnctype(String value) native "HTMLInputElement_formEnctype_Setter";
 
+
+  /** @domName HTMLInputElement.formMethod */
   String get formMethod native "HTMLInputElement_formMethod_Getter";
 
+
+  /** @domName HTMLInputElement.formMethod */
   void set formMethod(String value) native "HTMLInputElement_formMethod_Setter";
 
+
+  /** @domName HTMLInputElement.formNoValidate */
   bool get formNoValidate native "HTMLInputElement_formNoValidate_Getter";
 
+
+  /** @domName HTMLInputElement.formNoValidate */
   void set formNoValidate(bool value) native "HTMLInputElement_formNoValidate_Setter";
 
+
+  /** @domName HTMLInputElement.formTarget */
   String get formTarget native "HTMLInputElement_formTarget_Getter";
 
+
+  /** @domName HTMLInputElement.formTarget */
   void set formTarget(String value) native "HTMLInputElement_formTarget_Setter";
 
+
+  /** @domName HTMLInputElement.height */
   int get height native "HTMLInputElement_height_Getter";
 
+
+  /** @domName HTMLInputElement.height */
   void set height(int value) native "HTMLInputElement_height_Setter";
 
+
+  /** @domName HTMLInputElement.incremental */
   bool get incremental native "HTMLInputElement_incremental_Getter";
 
+
+  /** @domName HTMLInputElement.incremental */
   void set incremental(bool value) native "HTMLInputElement_incremental_Setter";
 
+
+  /** @domName HTMLInputElement.indeterminate */
   bool get indeterminate native "HTMLInputElement_indeterminate_Getter";
 
+
+  /** @domName HTMLInputElement.indeterminate */
   void set indeterminate(bool value) native "HTMLInputElement_indeterminate_Setter";
 
+
+  /** @domName HTMLInputElement.labels */
   List<Node> get labels native "HTMLInputElement_labels_Getter";
 
+
+  /** @domName HTMLInputElement.list */
   Element get list native "HTMLInputElement_list_Getter";
 
+
+  /** @domName HTMLInputElement.max */
   String get max native "HTMLInputElement_max_Getter";
 
+
+  /** @domName HTMLInputElement.max */
   void set max(String value) native "HTMLInputElement_max_Setter";
 
+
+  /** @domName HTMLInputElement.maxLength */
   int get maxLength native "HTMLInputElement_maxLength_Getter";
 
+
+  /** @domName HTMLInputElement.maxLength */
   void set maxLength(int value) native "HTMLInputElement_maxLength_Setter";
 
+
+  /** @domName HTMLInputElement.min */
   String get min native "HTMLInputElement_min_Getter";
 
+
+  /** @domName HTMLInputElement.min */
   void set min(String value) native "HTMLInputElement_min_Setter";
 
+
+  /** @domName HTMLInputElement.multiple */
   bool get multiple native "HTMLInputElement_multiple_Getter";
 
+
+  /** @domName HTMLInputElement.multiple */
   void set multiple(bool value) native "HTMLInputElement_multiple_Setter";
 
+
+  /** @domName HTMLInputElement.name */
   String get name native "HTMLInputElement_name_Getter";
 
+
+  /** @domName HTMLInputElement.name */
   void set name(String value) native "HTMLInputElement_name_Setter";
 
+
+  /** @domName HTMLInputElement.pattern */
   String get pattern native "HTMLInputElement_pattern_Getter";
 
+
+  /** @domName HTMLInputElement.pattern */
   void set pattern(String value) native "HTMLInputElement_pattern_Setter";
 
+
+  /** @domName HTMLInputElement.placeholder */
   String get placeholder native "HTMLInputElement_placeholder_Getter";
 
+
+  /** @domName HTMLInputElement.placeholder */
   void set placeholder(String value) native "HTMLInputElement_placeholder_Setter";
 
+
+  /** @domName HTMLInputElement.readOnly */
   bool get readOnly native "HTMLInputElement_readOnly_Getter";
 
+
+  /** @domName HTMLInputElement.readOnly */
   void set readOnly(bool value) native "HTMLInputElement_readOnly_Setter";
 
+
+  /** @domName HTMLInputElement.required */
   bool get required native "HTMLInputElement_required_Getter";
 
+
+  /** @domName HTMLInputElement.required */
   void set required(bool value) native "HTMLInputElement_required_Setter";
 
+
+  /** @domName HTMLInputElement.selectionDirection */
   String get selectionDirection native "HTMLInputElement_selectionDirection_Getter";
 
+
+  /** @domName HTMLInputElement.selectionDirection */
   void set selectionDirection(String value) native "HTMLInputElement_selectionDirection_Setter";
 
+
+  /** @domName HTMLInputElement.selectionEnd */
   int get selectionEnd native "HTMLInputElement_selectionEnd_Getter";
 
+
+  /** @domName HTMLInputElement.selectionEnd */
   void set selectionEnd(int value) native "HTMLInputElement_selectionEnd_Setter";
 
+
+  /** @domName HTMLInputElement.selectionStart */
   int get selectionStart native "HTMLInputElement_selectionStart_Getter";
 
+
+  /** @domName HTMLInputElement.selectionStart */
   void set selectionStart(int value) native "HTMLInputElement_selectionStart_Setter";
 
+
+  /** @domName HTMLInputElement.size */
   int get size native "HTMLInputElement_size_Getter";
 
+
+  /** @domName HTMLInputElement.size */
   void set size(int value) native "HTMLInputElement_size_Setter";
 
+
+  /** @domName HTMLInputElement.src */
   String get src native "HTMLInputElement_src_Getter";
 
+
+  /** @domName HTMLInputElement.src */
   void set src(String value) native "HTMLInputElement_src_Setter";
 
+
+  /** @domName HTMLInputElement.step */
   String get step native "HTMLInputElement_step_Getter";
 
+
+  /** @domName HTMLInputElement.step */
   void set step(String value) native "HTMLInputElement_step_Setter";
 
+
+  /** @domName HTMLInputElement.type */
   String get type native "HTMLInputElement_type_Getter";
 
+
+  /** @domName HTMLInputElement.type */
   void set type(String value) native "HTMLInputElement_type_Setter";
 
+
+  /** @domName HTMLInputElement.useMap */
   String get useMap native "HTMLInputElement_useMap_Getter";
 
+
+  /** @domName HTMLInputElement.useMap */
   void set useMap(String value) native "HTMLInputElement_useMap_Setter";
 
+
+  /** @domName HTMLInputElement.validationMessage */
   String get validationMessage native "HTMLInputElement_validationMessage_Getter";
 
+
+  /** @domName HTMLInputElement.validity */
   ValidityState get validity native "HTMLInputElement_validity_Getter";
 
+
+  /** @domName HTMLInputElement.value */
   String get value native "HTMLInputElement_value_Getter";
 
+
+  /** @domName HTMLInputElement.value */
   void set value(String value) native "HTMLInputElement_value_Setter";
 
+
+  /** @domName HTMLInputElement.valueAsDate */
   Date get valueAsDate native "HTMLInputElement_valueAsDate_Getter";
 
+
+  /** @domName HTMLInputElement.valueAsDate */
   void set valueAsDate(Date value) native "HTMLInputElement_valueAsDate_Setter";
 
+
+  /** @domName HTMLInputElement.valueAsNumber */
   num get valueAsNumber native "HTMLInputElement_valueAsNumber_Getter";
 
+
+  /** @domName HTMLInputElement.valueAsNumber */
   void set valueAsNumber(num value) native "HTMLInputElement_valueAsNumber_Setter";
 
+
+  /** @domName HTMLInputElement.webkitEntries */
   List<Entry> get webkitEntries native "HTMLInputElement_webkitEntries_Getter";
 
+
+  /** @domName HTMLInputElement.webkitGrammar */
   bool get webkitGrammar native "HTMLInputElement_webkitGrammar_Getter";
 
+
+  /** @domName HTMLInputElement.webkitGrammar */
   void set webkitGrammar(bool value) native "HTMLInputElement_webkitGrammar_Setter";
 
+
+  /** @domName HTMLInputElement.webkitSpeech */
   bool get webkitSpeech native "HTMLInputElement_webkitSpeech_Getter";
 
+
+  /** @domName HTMLInputElement.webkitSpeech */
   void set webkitSpeech(bool value) native "HTMLInputElement_webkitSpeech_Setter";
 
+
+  /** @domName HTMLInputElement.webkitdirectory */
   bool get webkitdirectory native "HTMLInputElement_webkitdirectory_Getter";
 
+
+  /** @domName HTMLInputElement.webkitdirectory */
   void set webkitdirectory(bool value) native "HTMLInputElement_webkitdirectory_Setter";
 
+
+  /** @domName HTMLInputElement.width */
   int get width native "HTMLInputElement_width_Getter";
 
+
+  /** @domName HTMLInputElement.width */
   void set width(int value) native "HTMLInputElement_width_Setter";
 
+
+  /** @domName HTMLInputElement.willValidate */
   bool get willValidate native "HTMLInputElement_willValidate_Getter";
 
+
+  /** @domName HTMLInputElement.checkValidity */
   bool checkValidity() native "HTMLInputElement_checkValidity_Callback";
 
+
+  /** @domName HTMLInputElement.select */
   void select() native "HTMLInputElement_select_Callback";
 
+
+  /** @domName HTMLInputElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLInputElement_setCustomValidity_Callback";
 
   void setRangeText(/*DOMString*/ replacement, [/*unsigned long*/ start, /*unsigned long*/ end, /*DOMString*/ selectionMode]) {
@@ -18858,10 +14051,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName HTMLInputElement.setRangeText_1 */
   void _setRangeText_1(replacement) native "HTMLInputElement_setRangeText_1_Callback";
 
+
+  /** @domName HTMLInputElement.setRangeText_2 */
   void _setRangeText_2(replacement, start, end, selectionMode) native "HTMLInputElement_setRangeText_2_Callback";
 
+
+  /** @domName HTMLInputElement.setSelectionRange */
   void setSelectionRange(int start, int end, [String direction]) native "HTMLInputElement_setSelectionRange_Callback";
 
   void stepDown([/*long*/ n]) {
@@ -18872,8 +14071,12 @@
     _stepDown_2();
   }
 
+
+  /** @domName HTMLInputElement.stepDown_1 */
   void _stepDown_1(n) native "HTMLInputElement_stepDown_1_Callback";
 
+
+  /** @domName HTMLInputElement.stepDown_2 */
   void _stepDown_2() native "HTMLInputElement_stepDown_2_Callback";
 
   void stepUp([/*long*/ n]) {
@@ -18884,14 +14087,18 @@
     _stepUp_2();
   }
 
+
+  /** @domName HTMLInputElement.stepUp_1 */
   void _stepUp_1(n) native "HTMLInputElement_stepUp_1_Callback";
 
+
+  /** @domName HTMLInputElement.stepUp_2 */
   void _stepUp_2() native "HTMLInputElement_stepUp_2_Callback";
 
 }
 
-class _InputElementEventsImpl extends _ElementEventsImpl implements InputElementEvents {
-  _InputElementEventsImpl(_ptr) : super(_ptr);
+class InputElementEvents extends ElementEvents {
+  InputElementEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get speechChange => this['webkitSpeechChange'];
 }
@@ -18902,7 +14109,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Int16Array
-abstract class Int16Array implements ArrayBufferView, List<int> {
+class Int16Array extends ArrayBufferView implements List<int> {
 
   factory Int16Array(int length) =>
     _TypedArrayFactoryProvider.createInt16Array(length);
@@ -18912,30 +14119,20 @@
 
   factory Int16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt16Array_fromBuffer(buffer, byteOffset, length);
+  Int16Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 2;
 
+
   /** @domName Int16Array.length */
-  int get length;
-
-  /** @domName Int16Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int16Array.subarray */
-  Int16Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Int16ArrayImpl extends _ArrayBufferViewImpl implements Int16Array {
-
   int get length native "Int16Array_length_Getter";
 
+
+  /** @domName Int16Array.numericIndexGetter */
   int operator[](int index) native "Int16Array_numericIndexGetter_Callback";
 
+
+  /** @domName Int16Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Int16Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -19015,6 +14212,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Int16Array.setElements */
   void setElements(Object array, [int offset]) native "Int16Array_setElements_Callback";
 
   Int16Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -19024,8 +14223,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Int16Array.subarray_1 */
   Int16Array _subarray_1(start, end) native "Int16Array_subarray_1_Callback";
 
+
+  /** @domName Int16Array.subarray_2 */
   Int16Array _subarray_2(start) native "Int16Array_subarray_2_Callback";
 
 }
@@ -19036,7 +14239,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Int32Array
-abstract class Int32Array implements ArrayBufferView, List<int> {
+class Int32Array extends ArrayBufferView implements List<int> {
 
   factory Int32Array(int length) =>
     _TypedArrayFactoryProvider.createInt32Array(length);
@@ -19046,30 +14249,20 @@
 
   factory Int32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt32Array_fromBuffer(buffer, byteOffset, length);
+  Int32Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 4;
 
+
   /** @domName Int32Array.length */
-  int get length;
-
-  /** @domName Int32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int32Array.subarray */
-  Int32Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Int32ArrayImpl extends _ArrayBufferViewImpl implements Int32Array {
-
   int get length native "Int32Array_length_Getter";
 
+
+  /** @domName Int32Array.numericIndexGetter */
   int operator[](int index) native "Int32Array_numericIndexGetter_Callback";
 
+
+  /** @domName Int32Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Int32Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -19149,6 +14342,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Int32Array.setElements */
   void setElements(Object array, [int offset]) native "Int32Array_setElements_Callback";
 
   Int32Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -19158,8 +14353,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Int32Array.subarray_1 */
   Int32Array _subarray_1(start, end) native "Int32Array_subarray_1_Callback";
 
+
+  /** @domName Int32Array.subarray_2 */
   Int32Array _subarray_2(start) native "Int32Array_subarray_2_Callback";
 
 }
@@ -19170,7 +14369,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Int8Array
-abstract class Int8Array implements ArrayBufferView, List<int> {
+class Int8Array extends ArrayBufferView implements List<int> {
 
   factory Int8Array(int length) =>
     _TypedArrayFactoryProvider.createInt8Array(length);
@@ -19180,30 +14379,20 @@
 
   factory Int8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createInt8Array_fromBuffer(buffer, byteOffset, length);
+  Int8Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 1;
 
+
   /** @domName Int8Array.length */
-  int get length;
-
-  /** @domName Int8Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Int8Array.subarray */
-  Int8Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Int8ArrayImpl extends _ArrayBufferViewImpl implements Int8Array {
-
   int get length native "Int8Array_length_Getter";
 
+
+  /** @domName Int8Array.numericIndexGetter */
   int operator[](int index) native "Int8Array_numericIndexGetter_Callback";
 
+
+  /** @domName Int8Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Int8Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -19283,6 +14472,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Int8Array.setElements */
   void setElements(Object array, [int offset]) native "Int8Array_setElements_Callback";
 
   Int8Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -19292,8 +14483,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Int8Array.subarray_1 */
   Int8Array _subarray_1(start, end) native "Int8Array_subarray_1_Callback";
 
+
+  /** @domName Int8Array.subarray_2 */
   Int8Array _subarray_2(start) native "Int8Array_subarray_2_Callback";
 
 }
@@ -19304,7 +14499,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName JavaScriptCallFrame
-abstract class JavaScriptCallFrame {
+class JavaScriptCallFrame extends NativeFieldWrapperClass1 {
+  JavaScriptCallFrame.internal();
 
   static const int CATCH_SCOPE = 4;
 
@@ -19316,67 +14512,48 @@
 
   static const int WITH_SCOPE = 2;
 
+
   /** @domName JavaScriptCallFrame.caller */
-  JavaScriptCallFrame get caller;
-
-  /** @domName JavaScriptCallFrame.column */
-  int get column;
-
-  /** @domName JavaScriptCallFrame.functionName */
-  String get functionName;
-
-  /** @domName JavaScriptCallFrame.line */
-  int get line;
-
-  /** @domName JavaScriptCallFrame.scopeChain */
-  List get scopeChain;
-
-  /** @domName JavaScriptCallFrame.sourceID */
-  int get sourceID;
-
-  /** @domName JavaScriptCallFrame.thisObject */
-  Object get thisObject;
-
-  /** @domName JavaScriptCallFrame.type */
-  String get type;
-
-  /** @domName JavaScriptCallFrame.evaluate */
-  void evaluate(String script);
-
-  /** @domName JavaScriptCallFrame.restart */
-  Object restart();
-
-  /** @domName JavaScriptCallFrame.scopeType */
-  int scopeType(int scopeIndex);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _JavaScriptCallFrameImpl extends NativeFieldWrapperClass1 implements JavaScriptCallFrame {
-
   JavaScriptCallFrame get caller native "JavaScriptCallFrame_caller_Getter";
 
+
+  /** @domName JavaScriptCallFrame.column */
   int get column native "JavaScriptCallFrame_column_Getter";
 
+
+  /** @domName JavaScriptCallFrame.functionName */
   String get functionName native "JavaScriptCallFrame_functionName_Getter";
 
+
+  /** @domName JavaScriptCallFrame.line */
   int get line native "JavaScriptCallFrame_line_Getter";
 
+
+  /** @domName JavaScriptCallFrame.scopeChain */
   List get scopeChain native "JavaScriptCallFrame_scopeChain_Getter";
 
+
+  /** @domName JavaScriptCallFrame.sourceID */
   int get sourceID native "JavaScriptCallFrame_sourceID_Getter";
 
+
+  /** @domName JavaScriptCallFrame.thisObject */
   Object get thisObject native "JavaScriptCallFrame_thisObject_Getter";
 
+
+  /** @domName JavaScriptCallFrame.type */
   String get type native "JavaScriptCallFrame_type_Getter";
 
+
+  /** @domName JavaScriptCallFrame.evaluate */
   void evaluate(String script) native "JavaScriptCallFrame_evaluate_Callback";
 
+
+  /** @domName JavaScriptCallFrame.restart */
   Object restart() native "JavaScriptCallFrame_restart_Callback";
 
+
+  /** @domName JavaScriptCallFrame.scopeType */
   int scopeType(int scopeIndex) native "JavaScriptCallFrame_scopeType_Callback";
 
 }
@@ -19387,54 +14564,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName KeyboardEvent
-abstract class KeyboardEvent implements UIEvent {
+class KeyboardEvent extends UIEvent {
+  KeyboardEvent.internal(): super.internal();
+
 
   /** @domName KeyboardEvent.altGraphKey */
-  bool get altGraphKey;
-
-  /** @domName KeyboardEvent.altKey */
-  bool get altKey;
-
-  /** @domName KeyboardEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName KeyboardEvent.keyIdentifier */
-  String get keyIdentifier;
-
-  /** @domName KeyboardEvent.keyLocation */
-  int get keyLocation;
-
-  /** @domName KeyboardEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName KeyboardEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName KeyboardEvent.initKeyboardEvent */
-  void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _KeyboardEventImpl extends _UIEventImpl implements KeyboardEvent {
-
   bool get altGraphKey native "KeyboardEvent_altGraphKey_Getter";
 
+
+  /** @domName KeyboardEvent.altKey */
   bool get altKey native "KeyboardEvent_altKey_Getter";
 
+
+  /** @domName KeyboardEvent.ctrlKey */
   bool get ctrlKey native "KeyboardEvent_ctrlKey_Getter";
 
+
+  /** @domName KeyboardEvent.keyIdentifier */
   String get keyIdentifier native "KeyboardEvent_keyIdentifier_Getter";
 
+
+  /** @domName KeyboardEvent.keyLocation */
   int get keyLocation native "KeyboardEvent_keyLocation_Getter";
 
+
+  /** @domName KeyboardEvent.metaKey */
   bool get metaKey native "KeyboardEvent_metaKey_Getter";
 
+
+  /** @domName KeyboardEvent.shiftKey */
   bool get shiftKey native "KeyboardEvent_shiftKey_Getter";
 
+
+  /** @domName KeyboardEvent.initKeyboardEvent */
   void initKeyboardEvent(String type, bool canBubble, bool cancelable, LocalWindow view, String keyIdentifier, int keyLocation, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey) native "KeyboardEvent_initKeyboardEvent_Callback";
 
 }
@@ -19445,91 +14607,81 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLKeygenElement
-abstract class KeygenElement implements Element {
+class KeygenElement extends _Element_Merged {
 
   factory KeygenElement() => _Elements.createKeygenElement();
+  KeygenElement.internal(): super.internal();
+
 
   /** @domName HTMLKeygenElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLKeygenElement.challenge */
-  String challenge;
-
-  /** @domName HTMLKeygenElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLKeygenElement.form */
-  FormElement get form;
-
-  /** @domName HTMLKeygenElement.keytype */
-  String keytype;
-
-  /** @domName HTMLKeygenElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLKeygenElement.name */
-  String name;
-
-  /** @domName HTMLKeygenElement.type */
-  String get type;
-
-  /** @domName HTMLKeygenElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLKeygenElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLKeygenElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLKeygenElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLKeygenElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _KeygenElementImpl extends _ElementImpl_Merged implements KeygenElement {
-
   bool get autofocus native "HTMLKeygenElement_autofocus_Getter";
 
+
+  /** @domName HTMLKeygenElement.autofocus */
   void set autofocus(bool value) native "HTMLKeygenElement_autofocus_Setter";
 
+
+  /** @domName HTMLKeygenElement.challenge */
   String get challenge native "HTMLKeygenElement_challenge_Getter";
 
+
+  /** @domName HTMLKeygenElement.challenge */
   void set challenge(String value) native "HTMLKeygenElement_challenge_Setter";
 
+
+  /** @domName HTMLKeygenElement.disabled */
   bool get disabled native "HTMLKeygenElement_disabled_Getter";
 
+
+  /** @domName HTMLKeygenElement.disabled */
   void set disabled(bool value) native "HTMLKeygenElement_disabled_Setter";
 
+
+  /** @domName HTMLKeygenElement.form */
   FormElement get form native "HTMLKeygenElement_form_Getter";
 
+
+  /** @domName HTMLKeygenElement.keytype */
   String get keytype native "HTMLKeygenElement_keytype_Getter";
 
+
+  /** @domName HTMLKeygenElement.keytype */
   void set keytype(String value) native "HTMLKeygenElement_keytype_Setter";
 
+
+  /** @domName HTMLKeygenElement.labels */
   List<Node> get labels native "HTMLKeygenElement_labels_Getter";
 
+
+  /** @domName HTMLKeygenElement.name */
   String get name native "HTMLKeygenElement_name_Getter";
 
+
+  /** @domName HTMLKeygenElement.name */
   void set name(String value) native "HTMLKeygenElement_name_Setter";
 
+
+  /** @domName HTMLKeygenElement.type */
   String get type native "HTMLKeygenElement_type_Getter";
 
+
+  /** @domName HTMLKeygenElement.validationMessage */
   String get validationMessage native "HTMLKeygenElement_validationMessage_Getter";
 
+
+  /** @domName HTMLKeygenElement.validity */
   ValidityState get validity native "HTMLKeygenElement_validity_Getter";
 
+
+  /** @domName HTMLKeygenElement.willValidate */
   bool get willValidate native "HTMLKeygenElement_willValidate_Getter";
 
+
+  /** @domName HTMLKeygenElement.checkValidity */
   bool checkValidity() native "HTMLKeygenElement_checkValidity_Callback";
 
+
+  /** @domName HTMLKeygenElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLKeygenElement_setCustomValidity_Callback";
 
 }
@@ -19540,30 +14692,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLLIElement
-abstract class LIElement implements Element {
+class LIElement extends _Element_Merged {
 
   factory LIElement() => _Elements.createLIElement();
+  LIElement.internal(): super.internal();
+
 
   /** @domName HTMLLIElement.type */
-  String type;
-
-  /** @domName HTMLLIElement.value */
-  int value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LIElementImpl extends _ElementImpl_Merged implements LIElement {
-
   String get type native "HTMLLIElement_type_Getter";
 
+
+  /** @domName HTMLLIElement.type */
   void set type(String value) native "HTMLLIElement_type_Setter";
 
+
+  /** @domName HTMLLIElement.value */
   int get value native "HTMLLIElement_value_Getter";
 
+
+  /** @domName HTMLLIElement.value */
   void set value(int value) native "HTMLLIElement_value_Setter";
 
 }
@@ -19574,33 +14721,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLLabelElement
-abstract class LabelElement implements Element {
+class LabelElement extends _Element_Merged {
 
   factory LabelElement() => _Elements.createLabelElement();
+  LabelElement.internal(): super.internal();
+
 
   /** @domName HTMLLabelElement.control */
-  Element get control;
-
-  /** @domName HTMLLabelElement.form */
-  FormElement get form;
-
-  /** @domName HTMLLabelElement.htmlFor */
-  String htmlFor;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LabelElementImpl extends _ElementImpl_Merged implements LabelElement {
-
   Element get control native "HTMLLabelElement_control_Getter";
 
+
+  /** @domName HTMLLabelElement.form */
   FormElement get form native "HTMLLabelElement_form_Getter";
 
+
+  /** @domName HTMLLabelElement.htmlFor */
   String get htmlFor native "HTMLLabelElement_htmlFor_Getter";
 
+
+  /** @domName HTMLLabelElement.htmlFor */
   void set htmlFor(String value) native "HTMLLabelElement_htmlFor_Setter";
 
 }
@@ -19611,28 +14750,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLLegendElement
-abstract class LegendElement implements Element {
+class LegendElement extends _Element_Merged {
 
   factory LegendElement() => _Elements.createLegendElement();
+  LegendElement.internal(): super.internal();
+
 
   /** @domName HTMLLegendElement.align */
-  String align;
-
-  /** @domName HTMLLegendElement.form */
-  FormElement get form;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LegendElementImpl extends _ElementImpl_Merged implements LegendElement {
-
   String get align native "HTMLLegendElement_align_Getter";
 
+
+  /** @domName HTMLLegendElement.align */
   void set align(String value) native "HTMLLegendElement_align_Setter";
 
+
+  /** @domName HTMLLegendElement.form */
   FormElement get form native "HTMLLegendElement_form_Getter";
 
 }
@@ -19643,91 +14775,93 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLLinkElement
-abstract class LinkElement implements Element {
+class LinkElement extends _Element_Merged {
 
   factory LinkElement() => _Elements.createLinkElement();
+  LinkElement.internal(): super.internal();
+
 
   /** @domName HTMLLinkElement.charset */
-  String charset;
-
-  /** @domName HTMLLinkElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLLinkElement.href */
-  String href;
-
-  /** @domName HTMLLinkElement.hreflang */
-  String hreflang;
-
-  /** @domName HTMLLinkElement.media */
-  String media;
-
-  /** @domName HTMLLinkElement.rel */
-  String rel;
-
-  /** @domName HTMLLinkElement.rev */
-  String rev;
-
-  /** @domName HTMLLinkElement.sheet */
-  StyleSheet get sheet;
-
-  /** @domName HTMLLinkElement.sizes */
-  DOMSettableTokenList sizes;
-
-  /** @domName HTMLLinkElement.target */
-  String target;
-
-  /** @domName HTMLLinkElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LinkElementImpl extends _ElementImpl_Merged implements LinkElement {
-
   String get charset native "HTMLLinkElement_charset_Getter";
 
+
+  /** @domName HTMLLinkElement.charset */
   void set charset(String value) native "HTMLLinkElement_charset_Setter";
 
+
+  /** @domName HTMLLinkElement.disabled */
   bool get disabled native "HTMLLinkElement_disabled_Getter";
 
+
+  /** @domName HTMLLinkElement.disabled */
   void set disabled(bool value) native "HTMLLinkElement_disabled_Setter";
 
+
+  /** @domName HTMLLinkElement.href */
   String get href native "HTMLLinkElement_href_Getter";
 
+
+  /** @domName HTMLLinkElement.href */
   void set href(String value) native "HTMLLinkElement_href_Setter";
 
+
+  /** @domName HTMLLinkElement.hreflang */
   String get hreflang native "HTMLLinkElement_hreflang_Getter";
 
+
+  /** @domName HTMLLinkElement.hreflang */
   void set hreflang(String value) native "HTMLLinkElement_hreflang_Setter";
 
+
+  /** @domName HTMLLinkElement.media */
   String get media native "HTMLLinkElement_media_Getter";
 
+
+  /** @domName HTMLLinkElement.media */
   void set media(String value) native "HTMLLinkElement_media_Setter";
 
+
+  /** @domName HTMLLinkElement.rel */
   String get rel native "HTMLLinkElement_rel_Getter";
 
+
+  /** @domName HTMLLinkElement.rel */
   void set rel(String value) native "HTMLLinkElement_rel_Setter";
 
+
+  /** @domName HTMLLinkElement.rev */
   String get rev native "HTMLLinkElement_rev_Getter";
 
+
+  /** @domName HTMLLinkElement.rev */
   void set rev(String value) native "HTMLLinkElement_rev_Setter";
 
+
+  /** @domName HTMLLinkElement.sheet */
   StyleSheet get sheet native "HTMLLinkElement_sheet_Getter";
 
+
+  /** @domName HTMLLinkElement.sizes */
   DOMSettableTokenList get sizes native "HTMLLinkElement_sizes_Getter";
 
+
+  /** @domName HTMLLinkElement.sizes */
   void set sizes(DOMSettableTokenList value) native "HTMLLinkElement_sizes_Setter";
 
+
+  /** @domName HTMLLinkElement.target */
   String get target native "HTMLLinkElement_target_Getter";
 
+
+  /** @domName HTMLLinkElement.target */
   void set target(String value) native "HTMLLinkElement_target_Setter";
 
+
+  /** @domName HTMLLinkElement.type */
   String get type native "HTMLLinkElement_type_Getter";
 
+
+  /** @domName HTMLLinkElement.type */
   void set type(String value) native "HTMLLinkElement_type_Setter";
 
 }
@@ -19738,49 +14872,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName History
-abstract class LocalHistory implements History {
+class LocalHistory extends NativeFieldWrapperClass1 implements History {
+  LocalHistory.internal();
+
 
   /** @domName History.length */
-  int get length;
-
-  /** @domName History.state */
-  dynamic get state;
-
-  /** @domName History.back */
-  void back();
-
-  /** @domName History.forward */
-  void forward();
-
-  /** @domName History.go */
-  void go(int distance);
-
-  /** @domName History.pushState */
-  void pushState(Object data, String title, [String url]);
-
-  /** @domName History.replaceState */
-  void replaceState(Object data, String title, [String url]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LocalHistoryImpl extends NativeFieldWrapperClass1 implements LocalHistory {
-
   int get length native "History_length_Getter";
 
+
+  /** @domName History.state */
   dynamic get state native "History_state_Getter";
 
+
+  /** @domName History.back */
   void back() native "History_back_Callback";
 
+
+  /** @domName History.forward */
   void forward() native "History_forward_Callback";
 
+
+  /** @domName History.go */
   void go(int distance) native "History_go_Callback";
 
+
+  /** @domName History.pushState */
   void pushState(Object data, String title, [String url]) native "History_pushState_Callback";
 
+
+  /** @domName History.replaceState */
   void replaceState(Object data, String title, [String url]) native "History_replaceState_Callback";
 
 }
@@ -19791,100 +14911,95 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Location
-abstract class LocalLocation implements Location {
+class LocalLocation extends NativeFieldWrapperClass1 implements Location {
+  LocalLocation.internal();
+
 
   /** @domName Location.ancestorOrigins */
-  List<String> get ancestorOrigins;
-
-  /** @domName Location.hash */
-  String hash;
-
-  /** @domName Location.host */
-  String host;
-
-  /** @domName Location.hostname */
-  String hostname;
-
-  /** @domName Location.href */
-  String href;
-
-  /** @domName Location.origin */
-  String get origin;
-
-  /** @domName Location.pathname */
-  String pathname;
-
-  /** @domName Location.port */
-  String port;
-
-  /** @domName Location.protocol */
-  String protocol;
-
-  /** @domName Location.search */
-  String search;
-
-  /** @domName Location.assign */
-  void assign(String url);
-
-  /** @domName Location.reload */
-  void reload();
-
-  /** @domName Location.replace */
-  void replace(String url);
-
-  /** @domName Location.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _LocalLocationImpl extends NativeFieldWrapperClass1 implements LocalLocation {
-
   List<String> get ancestorOrigins native "Location_ancestorOrigins_Getter";
 
+
+  /** @domName Location.hash */
   String get hash native "Location_hash_Getter";
 
+
+  /** @domName Location.hash */
   void set hash(String value) native "Location_hash_Setter";
 
+
+  /** @domName Location.host */
   String get host native "Location_host_Getter";
 
+
+  /** @domName Location.host */
   void set host(String value) native "Location_host_Setter";
 
+
+  /** @domName Location.hostname */
   String get hostname native "Location_hostname_Getter";
 
+
+  /** @domName Location.hostname */
   void set hostname(String value) native "Location_hostname_Setter";
 
+
+  /** @domName Location.href */
   String get href native "Location_href_Getter";
 
+
+  /** @domName Location.href */
   void set href(String value) native "Location_href_Setter";
 
+
+  /** @domName Location.origin */
   String get origin native "Location_origin_Getter";
 
+
+  /** @domName Location.pathname */
   String get pathname native "Location_pathname_Getter";
 
+
+  /** @domName Location.pathname */
   void set pathname(String value) native "Location_pathname_Setter";
 
+
+  /** @domName Location.port */
   String get port native "Location_port_Getter";
 
+
+  /** @domName Location.port */
   void set port(String value) native "Location_port_Setter";
 
+
+  /** @domName Location.protocol */
   String get protocol native "Location_protocol_Getter";
 
+
+  /** @domName Location.protocol */
   void set protocol(String value) native "Location_protocol_Setter";
 
+
+  /** @domName Location.search */
   String get search native "Location_search_Getter";
 
+
+  /** @domName Location.search */
   void set search(String value) native "Location_search_Setter";
 
+
+  /** @domName Location.assign */
   void assign(String url) native "Location_assign_Callback";
 
+
+  /** @domName Location.reload */
   void reload() native "Location_reload_Callback";
 
+
+  /** @domName Location.replace */
   void replace(String url) native "Location_replace_Callback";
 
+
+  /** @domName Location.toString */
   String toString() native "Location_toString_Callback";
 
 }
@@ -19895,726 +15010,452 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName LocalMediaStream
-abstract class LocalMediaStream implements MediaStream, EventTarget {
+class LocalMediaStream extends MediaStream implements EventTarget {
+  LocalMediaStream.internal(): super.internal();
+
 
   /** @domName LocalMediaStream.stop */
-  void stop();
+  void stop() native "LocalMediaStream_stop_Callback";
+
 }
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-class _LocalMediaStreamImpl extends _MediaStreamImpl implements LocalMediaStream {
-
-  void stop() native "LocalMediaStream_stop_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Window
-abstract class LocalWindow implements EventTarget, Window {
-
-  /**
-   * Register a [port] on this window under the given [name].  This
-   * port may be retrieved by any isolate (or JavaScript script)
-   * running in this window.
-   */
-  void registerPort(String name, SendPortSync port);
-
-  /**
-   * Lookup a port by its [name].  Return null if no port is
-   * registered under [name].
-   */
-  SendPortSync lookupPort(String name);
+class LocalWindow extends EventTarget implements Window {
 
   /**
    * Executes a [callback] after the next batch of browser layout measurements
    * has completed or would have completed if any browser layout measurements
    * had been scheduled.
    */
-  void requestLayoutFrame(TimeoutHandler callback);
-
-  /**
-   * Creates a new object URL for the specified object. The URL will be
-   * available until revokeObjectUrl is called.
-   * [object] can be a Blob, MediaStream or MediaSource.
-   */
-  String createObjectUrl(object);
-
-  /** @domName DOMURL.revokeObjectURL */
-  void revokeObjectUrl(String objectUrl);
-
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  LocalWindowEvents get on;
-
-  static const int PERSISTENT = 1;
-
-  static const int TEMPORARY = 0;
-
-  /** @domName Window.applicationCache */
-  DOMApplicationCache get applicationCache;
-
-  /** @domName Window.clientInformation */
-  Navigator get clientInformation;
-
-  /** @domName Window.closed */
-  bool get closed;
-
-  /** @domName Window.console */
-  Console get console;
-
-  /** @domName Window.crypto */
-  Crypto get crypto;
-
-  /** @domName Window.defaultStatus */
-  String defaultStatus;
-
-  /** @domName Window.defaultstatus */
-  String defaultstatus;
-
-  /** @domName Window.devicePixelRatio */
-  num get devicePixelRatio;
-
-  /** @domName Window.document */
-  Document get document;
-
-  /** @domName Window.event */
-  Event get event;
-
-  /** @domName Window.history */
-  LocalHistory get history;
-
-  /** @domName DOMWindow.indexedDB */
-  IDBFactory get indexedDB;
-
-  /** @domName Window.innerHeight */
-  int get innerHeight;
-
-  /** @domName Window.innerWidth */
-  int get innerWidth;
-
-  /** @domName Window.localStorage */
-  Storage get localStorage;
-
-  /** @domName Window.location */
-  LocalLocation location;
-
-  /** @domName Window.locationbar */
-  BarInfo get locationbar;
-
-  /** @domName Window.menubar */
-  BarInfo get menubar;
-
-  /** @domName Window.name */
-  String name;
-
-  /** @domName Window.navigator */
-  Navigator get navigator;
-
-  /** @domName Window.offscreenBuffering */
-  bool get offscreenBuffering;
-
-  /** @domName Window.opener */
-  Window get opener;
-
-  /** @domName Window.outerHeight */
-  int get outerHeight;
-
-  /** @domName Window.outerWidth */
-  int get outerWidth;
-
-  /** @domName DOMWindow.pagePopupController */
-  PagePopupController get pagePopupController;
-
-  /** @domName Window.pageXOffset */
-  int get pageXOffset;
-
-  /** @domName Window.pageYOffset */
-  int get pageYOffset;
-
-  /** @domName Window.parent */
-  Window get parent;
-
-  /** @domName Window.performance */
-  Performance get performance;
-
-  /** @domName Window.personalbar */
-  BarInfo get personalbar;
-
-  /** @domName Window.screen */
-  Screen get screen;
-
-  /** @domName Window.screenLeft */
-  int get screenLeft;
-
-  /** @domName Window.screenTop */
-  int get screenTop;
-
-  /** @domName Window.screenX */
-  int get screenX;
-
-  /** @domName Window.screenY */
-  int get screenY;
-
-  /** @domName Window.scrollX */
-  int get scrollX;
-
-  /** @domName Window.scrollY */
-  int get scrollY;
-
-  /** @domName Window.scrollbars */
-  BarInfo get scrollbars;
-
-  /** @domName Window.self */
-  Window get self;
-
-  /** @domName Window.sessionStorage */
-  Storage get sessionStorage;
-
-  /** @domName Window.status */
-  String status;
-
-  /** @domName Window.statusbar */
-  BarInfo get statusbar;
-
-  /** @domName Window.styleMedia */
-  StyleMedia get styleMedia;
-
-  /** @domName Window.toolbar */
-  BarInfo get toolbar;
-
-  /** @domName Window.top */
-  Window get top;
-
-  /** @domName DOMWindow.webkitIndexedDB */
-  IDBFactory get webkitIndexedDB;
-
-  /** @domName DOMWindow.webkitNotifications */
-  NotificationCenter get webkitNotifications;
-
-  /** @domName DOMWindow.webkitStorageInfo */
-  StorageInfo get webkitStorageInfo;
-
-  /** @domName Window.window */
-  Window get window;
-
-  /** @domName Window.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Window.alert */
-  void alert(String message);
-
-  /** @domName Window.atob */
-  String atob(String string);
-
-  /** @domName Window.blur */
-  void blur();
-
-  /** @domName Window.btoa */
-  String btoa(String string);
-
-  /** @domName Window.cancelAnimationFrame */
-  void cancelAnimationFrame(int id);
-
-  /** @domName Window.captureEvents */
-  void captureEvents();
-
-  /** @domName Window.clearInterval */
-  void clearInterval(int handle);
-
-  /** @domName Window.clearTimeout */
-  void clearTimeout(int handle);
-
-  /** @domName Window.close */
-  void close();
-
-  /** @domName Window.confirm */
-  bool confirm(String message);
-
-  /** @domName Window.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName Window.find */
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog);
-
-  /** @domName Window.focus */
-  void focus();
-
-  /** @domName Window.getComputedStyle */
-  CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement);
-
-  /** @domName Window.getMatchedCSSRules */
-  List<CSSRule> getMatchedCSSRules(Element element, String pseudoElement);
-
-  /** @domName Window.getSelection */
-  DOMSelection getSelection();
-
-  /** @domName Window.matchMedia */
-  MediaQueryList matchMedia(String query);
-
-  /** @domName Window.moveBy */
-  void moveBy(num x, num y);
-
-  /** @domName Window.moveTo */
-  void moveTo(num x, num y);
-
-  /** @domName Window.open */
-  Window open(String url, String name, [String options]);
-
-  /** @domName DOMWindow.openDatabase */
-  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName Window.postMessage */
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]);
-
-  /** @domName Window.print */
-  void print();
-
-  /** @domName Window.prompt */
-  String prompt(String message, String defaultValue);
-
-  /** @domName Window.releaseEvents */
-  void releaseEvents();
-
-  /** @domName Window.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Window.requestAnimationFrame */
-  int requestAnimationFrame(RequestAnimationFrameCallback callback);
-
-  /** @domName Window.resizeBy */
-  void resizeBy(num x, num y);
-
-  /** @domName Window.resizeTo */
-  void resizeTo(num width, num height);
-
-  /** @domName Window.scroll */
-  void scroll(int x, int y);
-
-  /** @domName Window.scrollBy */
-  void scrollBy(int x, int y);
-
-  /** @domName Window.scrollTo */
-  void scrollTo(int x, int y);
-
-  /** @domName Window.setInterval */
-  int setInterval(TimeoutHandler handler, int timeout);
-
-  /** @domName Window.setTimeout */
-  int setTimeout(TimeoutHandler handler, int timeout);
-
-  /** @domName Window.showModalDialog */
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]);
-
-  /** @domName Window.stop */
-  void stop();
-
-  /** @domName Window.webkitCancelAnimationFrame */
-  void webkitCancelAnimationFrame(int id);
-
-  /** @domName Window.webkitConvertPointFromNodeToPage */
-  Point webkitConvertPointFromNodeToPage(Node node, Point p);
-
-  /** @domName Window.webkitConvertPointFromPageToNode */
-  Point webkitConvertPointFromPageToNode(Node node, Point p);
-
-  /** @domName Window.webkitRequestAnimationFrame */
-  int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
-
-  /** @domName DOMWindow.webkitRequestFileSystem */
-  void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]);
-
-  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]);
-
-}
-
-abstract class LocalWindowEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeUnload;
-
-  EventListenerList get blur;
-
-  EventListenerList get canPlay;
-
-  EventListenerList get canPlayThrough;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get deviceMotion;
-
-  EventListenerList get deviceOrientation;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get durationChange;
-
-  EventListenerList get emptied;
-
-  EventListenerList get ended;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get hashChange;
-
-  EventListenerList get input;
-
-  EventListenerList get invalid;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get loadedData;
-
-  EventListenerList get loadedMetadata;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get message;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get offline;
-
-  EventListenerList get online;
-
-  EventListenerList get pageHide;
-
-  EventListenerList get pageShow;
-
-  EventListenerList get pause;
-
-  EventListenerList get play;
-
-  EventListenerList get playing;
-
-  EventListenerList get popState;
-
-  EventListenerList get progress;
-
-  EventListenerList get rateChange;
-
-  EventListenerList get reset;
-
-  EventListenerList get resize;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get seeked;
-
-  EventListenerList get seeking;
-
-  EventListenerList get select;
-
-  EventListenerList get stalled;
-
-  EventListenerList get storage;
-
-  EventListenerList get submit;
-
-  EventListenerList get suspend;
-
-  EventListenerList get timeUpdate;
-
-  EventListenerList get touchCancel;
-
-  EventListenerList get touchEnd;
-
-  EventListenerList get touchMove;
-
-  EventListenerList get touchStart;
-
-  EventListenerList get unload;
-
-  EventListenerList get volumeChange;
-
-  EventListenerList get waiting;
-
-  EventListenerList get animationEnd;
-
-  EventListenerList get animationIteration;
-
-  EventListenerList get animationStart;
-
-  EventListenerList get transitionEnd;
-}
-// 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 _LocalWindowImpl extends _EventTargetImpl implements LocalWindow {
-
   void requestLayoutFrame(TimeoutHandler callback) {
     _addMeasurementFrameCallback(callback);
   }
 
-  // TODO(kasperl): Document these.
+  /**
+   * Lookup a port by its [name].  Return null if no port is
+   * registered under [name].
+   */
   lookupPort(String name) {
     var port = JSON.parse(localStorage['dart-port:$name']);
     return _deserialize(port);
   }
 
+  /**
+   * Register a [port] on this window under the given [name].  This
+   * port may be retrieved by any isolate (or JavaScript script)
+   * running in this window.
+   */
   registerPort(String name, var port) {
     var serialized = _serialize(port);
     localStorage['dart-port:$name'] = JSON.stringify(serialized);
   }
 
-  String createObjectUrl(object) => DOMURL.createObjectURL(object);
-  void revokeObjectUrl(String url) {
-    DOMURL.revokeObjectURL(url);
-  }
+  LocalWindow.internal(): super.internal();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  LocalWindowEvents get on =>
+    new LocalWindowEvents(this);
+
+  static const int PERSISTENT = 1;
+
+  static const int TEMPORARY = 0;
 
 
-  _LocalWindowEventsImpl get on =>
-    new _LocalWindowEventsImpl(this);
-
+  /** @domName DOMWindow.applicationCache */
   DOMApplicationCache get applicationCache native "DOMWindow_applicationCache_Getter";
 
+
+  /** @domName DOMWindow.clientInformation */
   Navigator get clientInformation native "DOMWindow_clientInformation_Getter";
 
+
+  /** @domName DOMWindow.closed */
   bool get closed native "DOMWindow_closed_Getter";
 
+
+  /** @domName DOMWindow.console */
   Console get console native "DOMWindow_console_Getter";
 
+
+  /** @domName DOMWindow.crypto */
   Crypto get crypto native "DOMWindow_crypto_Getter";
 
+
+  /** @domName DOMWindow.defaultStatus */
   String get defaultStatus native "DOMWindow_defaultStatus_Getter";
 
+
+  /** @domName DOMWindow.defaultStatus */
   void set defaultStatus(String value) native "DOMWindow_defaultStatus_Setter";
 
+
+  /** @domName DOMWindow.defaultstatus */
   String get defaultstatus native "DOMWindow_defaultstatus_Getter";
 
+
+  /** @domName DOMWindow.defaultstatus */
   void set defaultstatus(String value) native "DOMWindow_defaultstatus_Setter";
 
+
+  /** @domName DOMWindow.devicePixelRatio */
   num get devicePixelRatio native "DOMWindow_devicePixelRatio_Getter";
 
+
+  /** @domName DOMWindow.document */
   Document get document native "DOMWindow_document_Getter";
 
+
+  /** @domName DOMWindow.event */
   Event get event native "DOMWindow_event_Getter";
 
+
+  /** @domName DOMWindow.history */
   LocalHistory get history native "DOMWindow_history_Getter";
 
+
+  /** @domName DOMWindow.indexedDB */
   IDBFactory get indexedDB native "DOMWindow_indexedDB_Getter";
 
+
+  /** @domName DOMWindow.innerHeight */
   int get innerHeight native "DOMWindow_innerHeight_Getter";
 
+
+  /** @domName DOMWindow.innerWidth */
   int get innerWidth native "DOMWindow_innerWidth_Getter";
 
+
+  /** @domName DOMWindow.localStorage */
   Storage get localStorage native "DOMWindow_localStorage_Getter";
 
+
+  /** @domName DOMWindow.location */
   LocalLocation get location native "DOMWindow_location_Getter";
 
+
+  /** @domName DOMWindow.location */
   void set location(LocalLocation value) native "DOMWindow_location_Setter";
 
+
+  /** @domName DOMWindow.locationbar */
   BarInfo get locationbar native "DOMWindow_locationbar_Getter";
 
+
+  /** @domName DOMWindow.menubar */
   BarInfo get menubar native "DOMWindow_menubar_Getter";
 
+
+  /** @domName DOMWindow.name */
   String get name native "DOMWindow_name_Getter";
 
+
+  /** @domName DOMWindow.name */
   void set name(String value) native "DOMWindow_name_Setter";
 
+
+  /** @domName DOMWindow.navigator */
   Navigator get navigator native "DOMWindow_navigator_Getter";
 
+
+  /** @domName DOMWindow.offscreenBuffering */
   bool get offscreenBuffering native "DOMWindow_offscreenBuffering_Getter";
 
+
+  /** @domName DOMWindow.opener */
   Window get opener native "DOMWindow_opener_Getter";
 
+
+  /** @domName DOMWindow.outerHeight */
   int get outerHeight native "DOMWindow_outerHeight_Getter";
 
+
+  /** @domName DOMWindow.outerWidth */
   int get outerWidth native "DOMWindow_outerWidth_Getter";
 
+
+  /** @domName DOMWindow.pagePopupController */
   PagePopupController get pagePopupController native "DOMWindow_pagePopupController_Getter";
 
+
+  /** @domName DOMWindow.pageXOffset */
   int get pageXOffset native "DOMWindow_pageXOffset_Getter";
 
+
+  /** @domName DOMWindow.pageYOffset */
   int get pageYOffset native "DOMWindow_pageYOffset_Getter";
 
+
+  /** @domName DOMWindow.parent */
   Window get parent native "DOMWindow_parent_Getter";
 
+
+  /** @domName DOMWindow.performance */
   Performance get performance native "DOMWindow_performance_Getter";
 
+
+  /** @domName DOMWindow.personalbar */
   BarInfo get personalbar native "DOMWindow_personalbar_Getter";
 
+
+  /** @domName DOMWindow.screen */
   Screen get screen native "DOMWindow_screen_Getter";
 
+
+  /** @domName DOMWindow.screenLeft */
   int get screenLeft native "DOMWindow_screenLeft_Getter";
 
+
+  /** @domName DOMWindow.screenTop */
   int get screenTop native "DOMWindow_screenTop_Getter";
 
+
+  /** @domName DOMWindow.screenX */
   int get screenX native "DOMWindow_screenX_Getter";
 
+
+  /** @domName DOMWindow.screenY */
   int get screenY native "DOMWindow_screenY_Getter";
 
+
+  /** @domName DOMWindow.scrollX */
   int get scrollX native "DOMWindow_scrollX_Getter";
 
+
+  /** @domName DOMWindow.scrollY */
   int get scrollY native "DOMWindow_scrollY_Getter";
 
+
+  /** @domName DOMWindow.scrollbars */
   BarInfo get scrollbars native "DOMWindow_scrollbars_Getter";
 
+
+  /** @domName DOMWindow.self */
   Window get self native "DOMWindow_self_Getter";
 
+
+  /** @domName DOMWindow.sessionStorage */
   Storage get sessionStorage native "DOMWindow_sessionStorage_Getter";
 
+
+  /** @domName DOMWindow.status */
   String get status native "DOMWindow_status_Getter";
 
+
+  /** @domName DOMWindow.status */
   void set status(String value) native "DOMWindow_status_Setter";
 
+
+  /** @domName DOMWindow.statusbar */
   BarInfo get statusbar native "DOMWindow_statusbar_Getter";
 
+
+  /** @domName DOMWindow.styleMedia */
   StyleMedia get styleMedia native "DOMWindow_styleMedia_Getter";
 
+
+  /** @domName DOMWindow.toolbar */
   BarInfo get toolbar native "DOMWindow_toolbar_Getter";
 
+
+  /** @domName DOMWindow.top */
   Window get top native "DOMWindow_top_Getter";
 
+
+  /** @domName DOMWindow.webkitIndexedDB */
   IDBFactory get webkitIndexedDB native "DOMWindow_webkitIndexedDB_Getter";
 
+
+  /** @domName DOMWindow.webkitNotifications */
   NotificationCenter get webkitNotifications native "DOMWindow_webkitNotifications_Getter";
 
+
+  /** @domName DOMWindow.webkitStorageInfo */
   StorageInfo get webkitStorageInfo native "DOMWindow_webkitStorageInfo_Getter";
 
+
+  /** @domName DOMWindow.window */
   Window get window native "DOMWindow_window_Getter";
 
+
+  /** @domName DOMWindow.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_addEventListener_Callback";
 
+
+  /** @domName DOMWindow.alert */
   void alert(String message) native "DOMWindow_alert_Callback";
 
+
+  /** @domName DOMWindow.atob */
   String atob(String string) native "DOMWindow_atob_Callback";
 
+
+  /** @domName DOMWindow.blur */
   void blur() native "DOMWindow_blur_Callback";
 
+
+  /** @domName DOMWindow.btoa */
   String btoa(String string) native "DOMWindow_btoa_Callback";
 
+
+  /** @domName DOMWindow.cancelAnimationFrame */
   void cancelAnimationFrame(int id) native "DOMWindow_cancelAnimationFrame_Callback";
 
+
+  /** @domName DOMWindow.captureEvents */
   void captureEvents() native "DOMWindow_captureEvents_Callback";
 
+
+  /** @domName DOMWindow.clearInterval */
   void clearInterval(int handle) native "DOMWindow_clearInterval_Callback";
 
+
+  /** @domName DOMWindow.clearTimeout */
   void clearTimeout(int handle) native "DOMWindow_clearTimeout_Callback";
 
+
+  /** @domName DOMWindow.close */
   void close() native "DOMWindow_close_Callback";
 
+
+  /** @domName DOMWindow.confirm */
   bool confirm(String message) native "DOMWindow_confirm_Callback";
 
+
+  /** @domName DOMWindow.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "DOMWindow_dispatchEvent_Callback";
 
+
+  /** @domName DOMWindow.find */
   bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native "DOMWindow_find_Callback";
 
+
+  /** @domName DOMWindow.focus */
   void focus() native "DOMWindow_focus_Callback";
 
+
+  /** @domName DOMWindow.getComputedStyle */
   CSSStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "DOMWindow_getComputedStyle_Callback";
 
+
+  /** @domName DOMWindow.getMatchedCSSRules */
   List<CSSRule> getMatchedCSSRules(Element element, String pseudoElement) native "DOMWindow_getMatchedCSSRules_Callback";
 
+
+  /** @domName DOMWindow.getSelection */
   DOMSelection getSelection() native "DOMWindow_getSelection_Callback";
 
+
+  /** @domName DOMWindow.matchMedia */
   MediaQueryList matchMedia(String query) native "DOMWindow_matchMedia_Callback";
 
+
+  /** @domName DOMWindow.moveBy */
   void moveBy(num x, num y) native "DOMWindow_moveBy_Callback";
 
+
+  /** @domName DOMWindow.moveTo */
   void moveTo(num x, num y) native "DOMWindow_moveTo_Callback";
 
+
+  /** @domName DOMWindow.open */
   Window open(String url, String name, [String options]) native "DOMWindow_open_Callback";
 
+
+  /** @domName DOMWindow.openDatabase */
   Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "DOMWindow_openDatabase_Callback";
 
+
+  /** @domName DOMWindow.postMessage */
   void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
 
+
+  /** @domName DOMWindow.print */
   void print() native "DOMWindow_print_Callback";
 
+
+  /** @domName DOMWindow.prompt */
   String prompt(String message, String defaultValue) native "DOMWindow_prompt_Callback";
 
+
+  /** @domName DOMWindow.releaseEvents */
   void releaseEvents() native "DOMWindow_releaseEvents_Callback";
 
+
+  /** @domName DOMWindow.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_removeEventListener_Callback";
 
+
+  /** @domName DOMWindow.requestAnimationFrame */
   int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_requestAnimationFrame_Callback";
 
+
+  /** @domName DOMWindow.resizeBy */
   void resizeBy(num x, num y) native "DOMWindow_resizeBy_Callback";
 
+
+  /** @domName DOMWindow.resizeTo */
   void resizeTo(num width, num height) native "DOMWindow_resizeTo_Callback";
 
+
+  /** @domName DOMWindow.scroll */
   void scroll(int x, int y) native "DOMWindow_scroll_Callback";
 
+
+  /** @domName DOMWindow.scrollBy */
   void scrollBy(int x, int y) native "DOMWindow_scrollBy_Callback";
 
+
+  /** @domName DOMWindow.scrollTo */
   void scrollTo(int x, int y) native "DOMWindow_scrollTo_Callback";
 
+
+  /** @domName DOMWindow.setInterval */
   int setInterval(TimeoutHandler handler, int timeout) native "DOMWindow_setInterval_Callback";
 
+
+  /** @domName DOMWindow.setTimeout */
   int setTimeout(TimeoutHandler handler, int timeout) native "DOMWindow_setTimeout_Callback";
 
+
+  /** @domName DOMWindow.showModalDialog */
   Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native "DOMWindow_showModalDialog_Callback";
 
+
+  /** @domName DOMWindow.stop */
   void stop() native "DOMWindow_stop_Callback";
 
+
+  /** @domName DOMWindow.webkitCancelAnimationFrame */
   void webkitCancelAnimationFrame(int id) native "DOMWindow_webkitCancelAnimationFrame_Callback";
 
+
+  /** @domName DOMWindow.webkitConvertPointFromNodeToPage */
   Point webkitConvertPointFromNodeToPage(Node node, Point p) native "DOMWindow_webkitConvertPointFromNodeToPage_Callback";
 
+
+  /** @domName DOMWindow.webkitConvertPointFromPageToNode */
   Point webkitConvertPointFromPageToNode(Node node, Point p) native "DOMWindow_webkitConvertPointFromPageToNode_Callback";
 
+
+  /** @domName DOMWindow.webkitRequestAnimationFrame */
   int webkitRequestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_webkitRequestAnimationFrame_Callback";
 
+
+  /** @domName DOMWindow.webkitRequestFileSystem */
   void webkitRequestFileSystem(int type, int size, FileSystemCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitRequestFileSystem_Callback";
 
+
+  /** @domName DOMWindow.webkitResolveLocalFileSystemURL */
   void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native "DOMWindow_webkitResolveLocalFileSystemURL_Callback";
 
 }
 
-class _LocalWindowEventsImpl extends _EventsImpl implements LocalWindowEvents {
-  _LocalWindowEventsImpl(_ptr) : super(_ptr);
+class LocalWindowEvents extends Events {
+  LocalWindowEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -20769,28 +15610,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLMapElement
-abstract class MapElement implements Element {
+class MapElement extends _Element_Merged {
 
   factory MapElement() => _Elements.createMapElement();
+  MapElement.internal(): super.internal();
+
 
   /** @domName HTMLMapElement.areas */
-  HTMLCollection get areas;
-
-  /** @domName HTMLMapElement.name */
-  String name;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MapElementImpl extends _ElementImpl_Merged implements MapElement {
-
   HTMLCollection get areas native "HTMLMapElement_areas_Getter";
 
+
+  /** @domName HTMLMapElement.name */
   String get name native "HTMLMapElement_name_Getter";
 
+
+  /** @domName HTMLMapElement.name */
   void set name(String value) native "HTMLMapElement_name_Setter";
 
 }
@@ -20801,101 +15635,103 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLMarqueeElement
-abstract class MarqueeElement implements Element {
+class MarqueeElement extends _Element_Merged {
+  MarqueeElement.internal(): super.internal();
+
 
   /** @domName HTMLMarqueeElement.behavior */
-  String behavior;
-
-  /** @domName HTMLMarqueeElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLMarqueeElement.direction */
-  String direction;
-
-  /** @domName HTMLMarqueeElement.height */
-  String height;
-
-  /** @domName HTMLMarqueeElement.hspace */
-  int hspace;
-
-  /** @domName HTMLMarqueeElement.loop */
-  int loop;
-
-  /** @domName HTMLMarqueeElement.scrollAmount */
-  int scrollAmount;
-
-  /** @domName HTMLMarqueeElement.scrollDelay */
-  int scrollDelay;
-
-  /** @domName HTMLMarqueeElement.trueSpeed */
-  bool trueSpeed;
-
-  /** @domName HTMLMarqueeElement.vspace */
-  int vspace;
-
-  /** @domName HTMLMarqueeElement.width */
-  String width;
-
-  /** @domName HTMLMarqueeElement.start */
-  void start();
-
-  /** @domName HTMLMarqueeElement.stop */
-  void stop();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MarqueeElementImpl extends _ElementImpl_Merged implements MarqueeElement {
-
   String get behavior native "HTMLMarqueeElement_behavior_Getter";
 
+
+  /** @domName HTMLMarqueeElement.behavior */
   void set behavior(String value) native "HTMLMarqueeElement_behavior_Setter";
 
+
+  /** @domName HTMLMarqueeElement.bgColor */
   String get bgColor native "HTMLMarqueeElement_bgColor_Getter";
 
+
+  /** @domName HTMLMarqueeElement.bgColor */
   void set bgColor(String value) native "HTMLMarqueeElement_bgColor_Setter";
 
+
+  /** @domName HTMLMarqueeElement.direction */
   String get direction native "HTMLMarqueeElement_direction_Getter";
 
+
+  /** @domName HTMLMarqueeElement.direction */
   void set direction(String value) native "HTMLMarqueeElement_direction_Setter";
 
+
+  /** @domName HTMLMarqueeElement.height */
   String get height native "HTMLMarqueeElement_height_Getter";
 
+
+  /** @domName HTMLMarqueeElement.height */
   void set height(String value) native "HTMLMarqueeElement_height_Setter";
 
+
+  /** @domName HTMLMarqueeElement.hspace */
   int get hspace native "HTMLMarqueeElement_hspace_Getter";
 
+
+  /** @domName HTMLMarqueeElement.hspace */
   void set hspace(int value) native "HTMLMarqueeElement_hspace_Setter";
 
+
+  /** @domName HTMLMarqueeElement.loop */
   int get loop native "HTMLMarqueeElement_loop_Getter";
 
+
+  /** @domName HTMLMarqueeElement.loop */
   void set loop(int value) native "HTMLMarqueeElement_loop_Setter";
 
+
+  /** @domName HTMLMarqueeElement.scrollAmount */
   int get scrollAmount native "HTMLMarqueeElement_scrollAmount_Getter";
 
+
+  /** @domName HTMLMarqueeElement.scrollAmount */
   void set scrollAmount(int value) native "HTMLMarqueeElement_scrollAmount_Setter";
 
+
+  /** @domName HTMLMarqueeElement.scrollDelay */
   int get scrollDelay native "HTMLMarqueeElement_scrollDelay_Getter";
 
+
+  /** @domName HTMLMarqueeElement.scrollDelay */
   void set scrollDelay(int value) native "HTMLMarqueeElement_scrollDelay_Setter";
 
+
+  /** @domName HTMLMarqueeElement.trueSpeed */
   bool get trueSpeed native "HTMLMarqueeElement_trueSpeed_Getter";
 
+
+  /** @domName HTMLMarqueeElement.trueSpeed */
   void set trueSpeed(bool value) native "HTMLMarqueeElement_trueSpeed_Setter";
 
+
+  /** @domName HTMLMarqueeElement.vspace */
   int get vspace native "HTMLMarqueeElement_vspace_Getter";
 
+
+  /** @domName HTMLMarqueeElement.vspace */
   void set vspace(int value) native "HTMLMarqueeElement_vspace_Setter";
 
+
+  /** @domName HTMLMarqueeElement.width */
   String get width native "HTMLMarqueeElement_width_Getter";
 
+
+  /** @domName HTMLMarqueeElement.width */
   void set width(String value) native "HTMLMarqueeElement_width_Setter";
 
+
+  /** @domName HTMLMarqueeElement.start */
   void start() native "HTMLMarqueeElement_start_Callback";
 
+
+  /** @domName HTMLMarqueeElement.stop */
   void stop() native "HTMLMarqueeElement_stop_Callback";
 
 }
@@ -20906,101 +15742,89 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaController
-abstract class MediaController implements EventTarget {
+class MediaController extends EventTarget {
 
   factory MediaController() => _MediaControllerFactoryProvider.createMediaController();
+  MediaController.internal(): super.internal();
+
 
   /** @domName MediaController.buffered */
-  TimeRanges get buffered;
-
-  /** @domName MediaController.currentTime */
-  num currentTime;
-
-  /** @domName MediaController.defaultPlaybackRate */
-  num defaultPlaybackRate;
-
-  /** @domName MediaController.duration */
-  num get duration;
-
-  /** @domName MediaController.muted */
-  bool muted;
-
-  /** @domName MediaController.paused */
-  bool get paused;
-
-  /** @domName MediaController.playbackRate */
-  num playbackRate;
-
-  /** @domName MediaController.played */
-  TimeRanges get played;
-
-  /** @domName MediaController.seekable */
-  TimeRanges get seekable;
-
-  /** @domName MediaController.volume */
-  num volume;
-
-  /** @domName MediaController.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaController.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName MediaController.pause */
-  void pause();
-
-  /** @domName MediaController.play */
-  void play();
-
-  /** @domName MediaController.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaControllerImpl extends _EventTargetImpl implements MediaController {
-
   TimeRanges get buffered native "MediaController_buffered_Getter";
 
+
+  /** @domName MediaController.currentTime */
   num get currentTime native "MediaController_currentTime_Getter";
 
+
+  /** @domName MediaController.currentTime */
   void set currentTime(num value) native "MediaController_currentTime_Setter";
 
+
+  /** @domName MediaController.defaultPlaybackRate */
   num get defaultPlaybackRate native "MediaController_defaultPlaybackRate_Getter";
 
+
+  /** @domName MediaController.defaultPlaybackRate */
   void set defaultPlaybackRate(num value) native "MediaController_defaultPlaybackRate_Setter";
 
+
+  /** @domName MediaController.duration */
   num get duration native "MediaController_duration_Getter";
 
+
+  /** @domName MediaController.muted */
   bool get muted native "MediaController_muted_Getter";
 
+
+  /** @domName MediaController.muted */
   void set muted(bool value) native "MediaController_muted_Setter";
 
+
+  /** @domName MediaController.paused */
   bool get paused native "MediaController_paused_Getter";
 
+
+  /** @domName MediaController.playbackRate */
   num get playbackRate native "MediaController_playbackRate_Getter";
 
+
+  /** @domName MediaController.playbackRate */
   void set playbackRate(num value) native "MediaController_playbackRate_Setter";
 
+
+  /** @domName MediaController.played */
   TimeRanges get played native "MediaController_played_Getter";
 
+
+  /** @domName MediaController.seekable */
   TimeRanges get seekable native "MediaController_seekable_Getter";
 
+
+  /** @domName MediaController.volume */
   num get volume native "MediaController_volume_Getter";
 
+
+  /** @domName MediaController.volume */
   void set volume(num value) native "MediaController_volume_Setter";
 
+
+  /** @domName MediaController.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaController_addEventListener_Callback";
 
+
+  /** @domName MediaController.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "MediaController_dispatchEvent_Callback";
 
+
+  /** @domName MediaController.pause */
   void pause() native "MediaController_pause_Callback";
 
+
+  /** @domName MediaController.play */
   void play() native "MediaController_play_Callback";
 
+
+  /** @domName MediaController.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaController_removeEventListener_Callback";
 
 }
@@ -21011,12 +15835,14 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLMediaElement
-abstract class MediaElement implements Element {
+class MediaElement extends _Element_Merged {
+  MediaElement.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  MediaElementEvents get on;
+  MediaElementEvents get on =>
+    new MediaElementEvents(this);
 
   static const int HAVE_CURRENT_DATA = 2;
 
@@ -21036,305 +15862,192 @@
 
   static const int NETWORK_NO_SOURCE = 3;
 
+
   /** @domName HTMLMediaElement.autoplay */
-  bool autoplay;
-
-  /** @domName HTMLMediaElement.buffered */
-  TimeRanges get buffered;
-
-  /** @domName HTMLMediaElement.controller */
-  MediaController controller;
-
-  /** @domName HTMLMediaElement.controls */
-  bool controls;
-
-  /** @domName HTMLMediaElement.currentSrc */
-  String get currentSrc;
-
-  /** @domName HTMLMediaElement.currentTime */
-  num currentTime;
-
-  /** @domName HTMLMediaElement.defaultMuted */
-  bool defaultMuted;
-
-  /** @domName HTMLMediaElement.defaultPlaybackRate */
-  num defaultPlaybackRate;
-
-  /** @domName HTMLMediaElement.duration */
-  num get duration;
-
-  /** @domName HTMLMediaElement.ended */
-  bool get ended;
-
-  /** @domName HTMLMediaElement.error */
-  MediaError get error;
-
-  /** @domName HTMLMediaElement.initialTime */
-  num get initialTime;
-
-  /** @domName HTMLMediaElement.loop */
-  bool loop;
-
-  /** @domName HTMLMediaElement.mediaGroup */
-  String mediaGroup;
-
-  /** @domName HTMLMediaElement.muted */
-  bool muted;
-
-  /** @domName HTMLMediaElement.networkState */
-  int get networkState;
-
-  /** @domName HTMLMediaElement.paused */
-  bool get paused;
-
-  /** @domName HTMLMediaElement.playbackRate */
-  num playbackRate;
-
-  /** @domName HTMLMediaElement.played */
-  TimeRanges get played;
-
-  /** @domName HTMLMediaElement.preload */
-  String preload;
-
-  /** @domName HTMLMediaElement.readyState */
-  int get readyState;
-
-  /** @domName HTMLMediaElement.seekable */
-  TimeRanges get seekable;
-
-  /** @domName HTMLMediaElement.seeking */
-  bool get seeking;
-
-  /** @domName HTMLMediaElement.src */
-  String src;
-
-  /** @domName HTMLMediaElement.startTime */
-  num get startTime;
-
-  /** @domName HTMLMediaElement.textTracks */
-  TextTrackList get textTracks;
-
-  /** @domName HTMLMediaElement.volume */
-  num volume;
-
-  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
-  int get webkitAudioDecodedByteCount;
-
-  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
-  bool webkitClosedCaptionsVisible;
-
-  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
-  bool get webkitHasClosedCaptions;
-
-  /** @domName HTMLMediaElement.webkitPreservesPitch */
-  bool webkitPreservesPitch;
-
-  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
-  int get webkitVideoDecodedByteCount;
-
-  /** @domName HTMLMediaElement.addTextTrack */
-  TextTrack addTextTrack(String kind, [String label, String language]);
-
-  /** @domName HTMLMediaElement.canPlayType */
-  String canPlayType(String type, String keySystem);
-
-  /** @domName HTMLMediaElement.load */
-  void load();
-
-  /** @domName HTMLMediaElement.pause */
-  void pause();
-
-  /** @domName HTMLMediaElement.play */
-  void play();
-
-  /** @domName HTMLMediaElement.webkitAddKey */
-  void webkitAddKey(String keySystem, Uint8Array key, [Uint8Array initData, String sessionId]);
-
-  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
-  void webkitCancelKeyRequest(String keySystem, String sessionId);
-
-  /** @domName HTMLMediaElement.webkitGenerateKeyRequest */
-  void webkitGenerateKeyRequest(String keySystem, [Uint8Array initData]);
-}
-
-abstract class MediaElementEvents implements ElementEvents {
-
-  EventListenerList get canPlay;
-
-  EventListenerList get canPlayThrough;
-
-  EventListenerList get durationChange;
-
-  EventListenerList get emptied;
-
-  EventListenerList get ended;
-
-  EventListenerList get loadedData;
-
-  EventListenerList get loadedMetadata;
-
-  EventListenerList get loadStart;
-
-  EventListenerList get pause;
-
-  EventListenerList get play;
-
-  EventListenerList get playing;
-
-  EventListenerList get progress;
-
-  EventListenerList get rateChange;
-
-  EventListenerList get seeked;
-
-  EventListenerList get seeking;
-
-  EventListenerList get show;
-
-  EventListenerList get stalled;
-
-  EventListenerList get suspend;
-
-  EventListenerList get timeUpdate;
-
-  EventListenerList get volumeChange;
-
-  EventListenerList get waiting;
-
-  EventListenerList get keyAdded;
-
-  EventListenerList get keyError;
-
-  EventListenerList get keyMessage;
-
-  EventListenerList get needKey;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaElementAudioSourceNode
-abstract class MediaElementAudioSourceNode implements AudioSourceNode {
-
-  /** @domName MediaElementAudioSourceNode.mediaElement */
-  MediaElement get mediaElement;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaElementAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaElementAudioSourceNode {
-
-  MediaElement get mediaElement native "MediaElementAudioSourceNode_mediaElement_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaElementImpl extends _ElementImpl_Merged implements MediaElement {
-
-  _MediaElementEventsImpl get on =>
-    new _MediaElementEventsImpl(this);
-
   bool get autoplay native "HTMLMediaElement_autoplay_Getter";
 
+
+  /** @domName HTMLMediaElement.autoplay */
   void set autoplay(bool value) native "HTMLMediaElement_autoplay_Setter";
 
+
+  /** @domName HTMLMediaElement.buffered */
   TimeRanges get buffered native "HTMLMediaElement_buffered_Getter";
 
+
+  /** @domName HTMLMediaElement.controller */
   MediaController get controller native "HTMLMediaElement_controller_Getter";
 
+
+  /** @domName HTMLMediaElement.controller */
   void set controller(MediaController value) native "HTMLMediaElement_controller_Setter";
 
+
+  /** @domName HTMLMediaElement.controls */
   bool get controls native "HTMLMediaElement_controls_Getter";
 
+
+  /** @domName HTMLMediaElement.controls */
   void set controls(bool value) native "HTMLMediaElement_controls_Setter";
 
+
+  /** @domName HTMLMediaElement.currentSrc */
   String get currentSrc native "HTMLMediaElement_currentSrc_Getter";
 
+
+  /** @domName HTMLMediaElement.currentTime */
   num get currentTime native "HTMLMediaElement_currentTime_Getter";
 
+
+  /** @domName HTMLMediaElement.currentTime */
   void set currentTime(num value) native "HTMLMediaElement_currentTime_Setter";
 
+
+  /** @domName HTMLMediaElement.defaultMuted */
   bool get defaultMuted native "HTMLMediaElement_defaultMuted_Getter";
 
+
+  /** @domName HTMLMediaElement.defaultMuted */
   void set defaultMuted(bool value) native "HTMLMediaElement_defaultMuted_Setter";
 
+
+  /** @domName HTMLMediaElement.defaultPlaybackRate */
   num get defaultPlaybackRate native "HTMLMediaElement_defaultPlaybackRate_Getter";
 
+
+  /** @domName HTMLMediaElement.defaultPlaybackRate */
   void set defaultPlaybackRate(num value) native "HTMLMediaElement_defaultPlaybackRate_Setter";
 
+
+  /** @domName HTMLMediaElement.duration */
   num get duration native "HTMLMediaElement_duration_Getter";
 
+
+  /** @domName HTMLMediaElement.ended */
   bool get ended native "HTMLMediaElement_ended_Getter";
 
+
+  /** @domName HTMLMediaElement.error */
   MediaError get error native "HTMLMediaElement_error_Getter";
 
+
+  /** @domName HTMLMediaElement.initialTime */
   num get initialTime native "HTMLMediaElement_initialTime_Getter";
 
+
+  /** @domName HTMLMediaElement.loop */
   bool get loop native "HTMLMediaElement_loop_Getter";
 
+
+  /** @domName HTMLMediaElement.loop */
   void set loop(bool value) native "HTMLMediaElement_loop_Setter";
 
+
+  /** @domName HTMLMediaElement.mediaGroup */
   String get mediaGroup native "HTMLMediaElement_mediaGroup_Getter";
 
+
+  /** @domName HTMLMediaElement.mediaGroup */
   void set mediaGroup(String value) native "HTMLMediaElement_mediaGroup_Setter";
 
+
+  /** @domName HTMLMediaElement.muted */
   bool get muted native "HTMLMediaElement_muted_Getter";
 
+
+  /** @domName HTMLMediaElement.muted */
   void set muted(bool value) native "HTMLMediaElement_muted_Setter";
 
+
+  /** @domName HTMLMediaElement.networkState */
   int get networkState native "HTMLMediaElement_networkState_Getter";
 
+
+  /** @domName HTMLMediaElement.paused */
   bool get paused native "HTMLMediaElement_paused_Getter";
 
+
+  /** @domName HTMLMediaElement.playbackRate */
   num get playbackRate native "HTMLMediaElement_playbackRate_Getter";
 
+
+  /** @domName HTMLMediaElement.playbackRate */
   void set playbackRate(num value) native "HTMLMediaElement_playbackRate_Setter";
 
+
+  /** @domName HTMLMediaElement.played */
   TimeRanges get played native "HTMLMediaElement_played_Getter";
 
+
+  /** @domName HTMLMediaElement.preload */
   String get preload native "HTMLMediaElement_preload_Getter";
 
+
+  /** @domName HTMLMediaElement.preload */
   void set preload(String value) native "HTMLMediaElement_preload_Setter";
 
+
+  /** @domName HTMLMediaElement.readyState */
   int get readyState native "HTMLMediaElement_readyState_Getter";
 
+
+  /** @domName HTMLMediaElement.seekable */
   TimeRanges get seekable native "HTMLMediaElement_seekable_Getter";
 
+
+  /** @domName HTMLMediaElement.seeking */
   bool get seeking native "HTMLMediaElement_seeking_Getter";
 
+
+  /** @domName HTMLMediaElement.src */
   String get src native "HTMLMediaElement_src_Getter";
 
+
+  /** @domName HTMLMediaElement.src */
   void set src(String value) native "HTMLMediaElement_src_Setter";
 
+
+  /** @domName HTMLMediaElement.startTime */
   num get startTime native "HTMLMediaElement_startTime_Getter";
 
+
+  /** @domName HTMLMediaElement.textTracks */
   TextTrackList get textTracks native "HTMLMediaElement_textTracks_Getter";
 
+
+  /** @domName HTMLMediaElement.volume */
   num get volume native "HTMLMediaElement_volume_Getter";
 
+
+  /** @domName HTMLMediaElement.volume */
   void set volume(num value) native "HTMLMediaElement_volume_Setter";
 
+
+  /** @domName HTMLMediaElement.webkitAudioDecodedByteCount */
   int get webkitAudioDecodedByteCount native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
 
+
+  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
   bool get webkitClosedCaptionsVisible native "HTMLMediaElement_webkitClosedCaptionsVisible_Getter";
 
+
+  /** @domName HTMLMediaElement.webkitClosedCaptionsVisible */
   void set webkitClosedCaptionsVisible(bool value) native "HTMLMediaElement_webkitClosedCaptionsVisible_Setter";
 
+
+  /** @domName HTMLMediaElement.webkitHasClosedCaptions */
   bool get webkitHasClosedCaptions native "HTMLMediaElement_webkitHasClosedCaptions_Getter";
 
+
+  /** @domName HTMLMediaElement.webkitPreservesPitch */
   bool get webkitPreservesPitch native "HTMLMediaElement_webkitPreservesPitch_Getter";
 
+
+  /** @domName HTMLMediaElement.webkitPreservesPitch */
   void set webkitPreservesPitch(bool value) native "HTMLMediaElement_webkitPreservesPitch_Setter";
 
+
+  /** @domName HTMLMediaElement.webkitVideoDecodedByteCount */
   int get webkitVideoDecodedByteCount native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
 
   TextTrack addTextTrack(/*DOMString*/ kind, [/*DOMString*/ label, /*DOMString*/ language]) {
@@ -21347,18 +16060,32 @@
     return _addTextTrack_3(kind);
   }
 
+
+  /** @domName HTMLMediaElement.addTextTrack_1 */
   TextTrack _addTextTrack_1(kind, label, language) native "HTMLMediaElement_addTextTrack_1_Callback";
 
+
+  /** @domName HTMLMediaElement.addTextTrack_2 */
   TextTrack _addTextTrack_2(kind, label) native "HTMLMediaElement_addTextTrack_2_Callback";
 
+
+  /** @domName HTMLMediaElement.addTextTrack_3 */
   TextTrack _addTextTrack_3(kind) native "HTMLMediaElement_addTextTrack_3_Callback";
 
+
+  /** @domName HTMLMediaElement.canPlayType */
   String canPlayType(String type, String keySystem) native "HTMLMediaElement_canPlayType_Callback";
 
+
+  /** @domName HTMLMediaElement.load */
   void load() native "HTMLMediaElement_load_Callback";
 
+
+  /** @domName HTMLMediaElement.pause */
   void pause() native "HTMLMediaElement_pause_Callback";
 
+
+  /** @domName HTMLMediaElement.play */
   void play() native "HTMLMediaElement_play_Callback";
 
   void webkitAddKey(/*DOMString*/ keySystem, /*Uint8Array*/ key, [/*Uint8Array*/ initData, /*DOMString*/ sessionId]) {
@@ -21369,10 +16096,16 @@
     _webkitAddKey_2(keySystem, key);
   }
 
+
+  /** @domName HTMLMediaElement.webkitAddKey_1 */
   void _webkitAddKey_1(keySystem, key, initData, sessionId) native "HTMLMediaElement_webkitAddKey_1_Callback";
 
+
+  /** @domName HTMLMediaElement.webkitAddKey_2 */
   void _webkitAddKey_2(keySystem, key) native "HTMLMediaElement_webkitAddKey_2_Callback";
 
+
+  /** @domName HTMLMediaElement.webkitCancelKeyRequest */
   void webkitCancelKeyRequest(String keySystem, String sessionId) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
 
   void webkitGenerateKeyRequest(/*DOMString*/ keySystem, [/*Uint8Array*/ initData]) {
@@ -21383,14 +16116,18 @@
     _webkitGenerateKeyRequest_2(keySystem);
   }
 
+
+  /** @domName HTMLMediaElement.webkitGenerateKeyRequest_1 */
   void _webkitGenerateKeyRequest_1(keySystem, initData) native "HTMLMediaElement_webkitGenerateKeyRequest_1_Callback";
 
+
+  /** @domName HTMLMediaElement.webkitGenerateKeyRequest_2 */
   void _webkitGenerateKeyRequest_2(keySystem) native "HTMLMediaElement_webkitGenerateKeyRequest_2_Callback";
 
 }
 
-class _MediaElementEventsImpl extends _ElementEventsImpl implements MediaElementEvents {
-  _MediaElementEventsImpl(_ptr) : super(_ptr);
+class MediaElementEvents extends ElementEvents {
+  MediaElementEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get canPlay => this['canplay'];
 
@@ -21448,8 +16185,24 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName MediaElementAudioSourceNode
+class MediaElementAudioSourceNode extends AudioSourceNode {
+  MediaElementAudioSourceNode.internal(): super.internal();
+
+
+  /** @domName MediaElementAudioSourceNode.mediaElement */
+  MediaElement get mediaElement native "MediaElementAudioSourceNode_mediaElement_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
 /// @domName MediaError
-abstract class MediaError {
+class MediaError extends NativeFieldWrapperClass1 {
+  MediaError.internal();
 
   static const int MEDIA_ERR_ABORTED = 1;
 
@@ -21461,17 +16214,8 @@
 
   static const int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
 
+
   /** @domName MediaError.code */
-  int get code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaErrorImpl extends NativeFieldWrapperClass1 implements MediaError {
-
   int get code native "MediaError_code_Getter";
 
 }
@@ -21482,7 +16226,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaKeyError
-abstract class MediaKeyError {
+class MediaKeyError extends NativeFieldWrapperClass1 {
+  MediaKeyError.internal();
 
   static const int MEDIA_KEYERR_CLIENT = 2;
 
@@ -21496,17 +16241,8 @@
 
   static const int MEDIA_KEYERR_UNKNOWN = 1;
 
+
   /** @domName MediaKeyError.code */
-  int get code;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaKeyErrorImpl extends NativeFieldWrapperClass1 implements MediaKeyError {
-
   int get code native "MediaKeyError_code_Getter";
 
 }
@@ -21517,49 +16253,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaKeyEvent
-abstract class MediaKeyEvent implements Event {
+class MediaKeyEvent extends Event {
+  MediaKeyEvent.internal(): super.internal();
+
 
   /** @domName MediaKeyEvent.defaultURL */
-  String get defaultURL;
-
-  /** @domName MediaKeyEvent.errorCode */
-  MediaKeyError get errorCode;
-
-  /** @domName MediaKeyEvent.initData */
-  Uint8Array get initData;
-
-  /** @domName MediaKeyEvent.keySystem */
-  String get keySystem;
-
-  /** @domName MediaKeyEvent.message */
-  Uint8Array get message;
-
-  /** @domName MediaKeyEvent.sessionId */
-  String get sessionId;
-
-  /** @domName MediaKeyEvent.systemCode */
-  int get systemCode;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaKeyEventImpl extends _EventImpl implements MediaKeyEvent {
-
   String get defaultURL native "MediaKeyEvent_defaultURL_Getter";
 
+
+  /** @domName MediaKeyEvent.errorCode */
   MediaKeyError get errorCode native "MediaKeyEvent_errorCode_Getter";
 
+
+  /** @domName MediaKeyEvent.initData */
   Uint8Array get initData native "MediaKeyEvent_initData_Getter";
 
+
+  /** @domName MediaKeyEvent.keySystem */
   String get keySystem native "MediaKeyEvent_keySystem_Getter";
 
+
+  /** @domName MediaKeyEvent.message */
   Uint8Array get message native "MediaKeyEvent_message_Getter";
 
+
+  /** @domName MediaKeyEvent.sessionId */
   String get sessionId native "MediaKeyEvent_sessionId_Getter";
 
+
+  /** @domName MediaKeyEvent.systemCode */
   int get systemCode native "MediaKeyEvent_systemCode_Getter";
 
 }
@@ -21570,41 +16292,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaList
-abstract class MediaList {
+class MediaList extends NativeFieldWrapperClass1 {
+  MediaList.internal();
+
 
   /** @domName MediaList.length */
-  int get length;
-
-  /** @domName MediaList.mediaText */
-  String mediaText;
-
-  /** @domName MediaList.appendMedium */
-  void appendMedium(String newMedium);
-
-  /** @domName MediaList.deleteMedium */
-  void deleteMedium(String oldMedium);
-
-  /** @domName MediaList.item */
-  String item(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaListImpl extends NativeFieldWrapperClass1 implements MediaList {
-
   int get length native "MediaList_length_Getter";
 
+
+  /** @domName MediaList.mediaText */
   String get mediaText native "MediaList_mediaText_Getter";
 
+
+  /** @domName MediaList.mediaText */
   void set mediaText(String value) native "MediaList_mediaText_Setter";
 
+
+  /** @domName MediaList.appendMedium */
   void appendMedium(String newMedium) native "MediaList_appendMedium_Callback";
 
+
+  /** @domName MediaList.deleteMedium */
   void deleteMedium(String oldMedium) native "MediaList_deleteMedium_Callback";
 
+
+  /** @domName MediaList.item */
   String item(int index) native "MediaList_item_Callback";
 
 }
@@ -21615,34 +16327,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaQueryList
-abstract class MediaQueryList {
+class MediaQueryList extends NativeFieldWrapperClass1 {
+  MediaQueryList.internal();
+
 
   /** @domName MediaQueryList.matches */
-  bool get matches;
-
-  /** @domName MediaQueryList.media */
-  String get media;
-
-  /** @domName MediaQueryList.addListener */
-  void addListener(MediaQueryListListener listener);
-
-  /** @domName MediaQueryList.removeListener */
-  void removeListener(MediaQueryListListener listener);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaQueryListImpl extends NativeFieldWrapperClass1 implements MediaQueryList {
-
   bool get matches native "MediaQueryList_matches_Getter";
 
+
+  /** @domName MediaQueryList.media */
   String get media native "MediaQueryList_media_Getter";
 
+
+  /** @domName MediaQueryList.addListener */
   void addListener(MediaQueryListListener listener) native "MediaQueryList_addListener_Callback";
 
+
+  /** @domName MediaQueryList.removeListener */
   void removeListener(MediaQueryListListener listener) native "MediaQueryList_removeListener_Callback";
 
 }
@@ -21653,10 +16354,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaQueryListListener
-abstract class MediaQueryListListener {
+class MediaQueryListListener extends NativeFieldWrapperClass1 {
+  MediaQueryListListener.internal();
+
 
   /** @domName MediaQueryListListener.queryChanged */
-  void queryChanged(MediaQueryList list);
+  void queryChanged(MediaQueryList list) native "MediaQueryListListener_queryChanged_Callback";
+
 }
 // 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
@@ -21665,68 +16369,53 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaSource
-abstract class MediaSource implements EventTarget {
+class MediaSource extends EventTarget {
 
   factory MediaSource() => _MediaSourceFactoryProvider.createMediaSource();
+  MediaSource.internal(): super.internal();
+
 
   /** @domName MediaSource.activeSourceBuffers */
-  SourceBufferList get activeSourceBuffers;
-
-  /** @domName MediaSource.duration */
-  num duration;
-
-  /** @domName MediaSource.readyState */
-  String get readyState;
-
-  /** @domName MediaSource.sourceBuffers */
-  SourceBufferList get sourceBuffers;
-
-  /** @domName MediaSource.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaSource.addSourceBuffer */
-  SourceBuffer addSourceBuffer(String type);
-
-  /** @domName MediaSource.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaSource.endOfStream */
-  void endOfStream(String error);
-
-  /** @domName MediaSource.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaSource.removeSourceBuffer */
-  void removeSourceBuffer(SourceBuffer buffer);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaSourceImpl extends _EventTargetImpl implements MediaSource {
-
   SourceBufferList get activeSourceBuffers native "MediaSource_activeSourceBuffers_Getter";
 
+
+  /** @domName MediaSource.duration */
   num get duration native "MediaSource_duration_Getter";
 
+
+  /** @domName MediaSource.duration */
   void set duration(num value) native "MediaSource_duration_Setter";
 
+
+  /** @domName MediaSource.readyState */
   String get readyState native "MediaSource_readyState_Getter";
 
+
+  /** @domName MediaSource.sourceBuffers */
   SourceBufferList get sourceBuffers native "MediaSource_sourceBuffers_Getter";
 
+
+  /** @domName MediaSource.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_addEventListener_Callback";
 
+
+  /** @domName MediaSource.addSourceBuffer */
   SourceBuffer addSourceBuffer(String type) native "MediaSource_addSourceBuffer_Callback";
 
+
+  /** @domName MediaSource.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "MediaSource_dispatchEvent_Callback";
 
+
+  /** @domName MediaSource.endOfStream */
   void endOfStream(String error) native "MediaSource_endOfStream_Callback";
 
+
+  /** @domName MediaSource.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_removeEventListener_Callback";
 
+
+  /** @domName MediaSource.removeSourceBuffer */
   void removeSourceBuffer(SourceBuffer buffer) native "MediaSource_removeSourceBuffer_Callback";
 
 }
@@ -21737,44 +16426,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaStream
-abstract class MediaStream implements EventTarget {
+class MediaStream extends EventTarget {
 
   factory MediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) => _MediaStreamFactoryProvider.createMediaStream(audioTracks, videoTracks);
+  MediaStream.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  MediaStreamEvents get on;
+  MediaStreamEvents get on =>
+    new MediaStreamEvents(this);
 
   static const int ENDED = 2;
 
   static const int LIVE = 1;
 
+
   /** @domName MediaStream.audioTracks */
-  MediaStreamTrackList get audioTracks;
+  MediaStreamTrackList get audioTracks native "MediaStream_audioTracks_Getter";
+
 
   /** @domName MediaStream.label */
-  String get label;
+  String get label native "MediaStream_label_Getter";
+
 
   /** @domName MediaStream.readyState */
-  int get readyState;
+  int get readyState native "MediaStream_readyState_Getter";
+
 
   /** @domName MediaStream.videoTracks */
-  MediaStreamTrackList get videoTracks;
+  MediaStreamTrackList get videoTracks native "MediaStream_videoTracks_Getter";
+
 
   /** @domName MediaStream.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_addEventListener_Callback";
+
 
   /** @domName MediaStream.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
+  bool $dom_dispatchEvent(Event event) native "MediaStream_dispatchEvent_Callback";
+
 
   /** @domName MediaStream.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_removeEventListener_Callback";
+
 }
 
-abstract class MediaStreamEvents implements Events {
+class MediaStreamEvents extends Events {
+  MediaStreamEvents(EventTarget _ptr) : super(_ptr);
 
-  EventListenerList get ended;
+  EventListenerList get ended => this['ended'];
 }
 // 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
@@ -21783,19 +16483,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaStreamAudioSourceNode
-abstract class MediaStreamAudioSourceNode implements AudioSourceNode {
+class MediaStreamAudioSourceNode extends AudioSourceNode {
+  MediaStreamAudioSourceNode.internal(): super.internal();
+
 
   /** @domName MediaStreamAudioSourceNode.mediaStream */
-  MediaStream get mediaStream;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaStreamAudioSourceNodeImpl extends _AudioSourceNodeImpl implements MediaStreamAudioSourceNode {
-
   MediaStream get mediaStream native "MediaStreamAudioSourceNode_mediaStream_Getter";
 
 }
@@ -21806,19 +16498,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MediaStreamEvent
-abstract class MediaStreamEvent implements Event {
+class MediaStreamEvent extends Event {
+  MediaStreamEvent.internal(): super.internal();
+
 
   /** @domName MediaStreamEvent.stream */
-  MediaStream get stream;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaStreamEventImpl extends _EventImpl implements MediaStreamEvent {
-
   MediaStream get stream native "MediaStreamEvent_stream_Getter";
 
 }
@@ -21828,141 +16512,15 @@
 
 // WARNING: Do not edit - generated code.
 
-class _MediaStreamImpl extends _EventTargetImpl implements MediaStream {
-
-  _MediaStreamEventsImpl get on =>
-    new _MediaStreamEventsImpl(this);
-
-  MediaStreamTrackList get audioTracks native "MediaStream_audioTracks_Getter";
-
-  String get label native "MediaStream_label_Getter";
-
-  int get readyState native "MediaStream_readyState_Getter";
-
-  MediaStreamTrackList get videoTracks native "MediaStream_videoTracks_Getter";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_addEventListener_Callback";
-
-  bool $dom_dispatchEvent(Event event) native "MediaStream_dispatchEvent_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStream_removeEventListener_Callback";
-
-}
-
-class _MediaStreamEventsImpl extends _EventsImpl implements MediaStreamEvents {
-  _MediaStreamEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get ended => this['ended'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaStreamListImpl extends NativeFieldWrapperClass1 implements List<MediaStream> {
-
-  int get length native "MediaStreamList_length_Getter";
-
-  MediaStream operator[](int index) native "MediaStreamList_item_Callback";
-
-  void operator[]=(int index, MediaStream value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<MediaStream> mixins.
-  // MediaStream is the element type.
-
-  // From Iterable<MediaStream>:
-
-  Iterator<MediaStream> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<MediaStream>(this);
-  }
-
-  // From Collection<MediaStream>:
-
-  void add(MediaStream value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(MediaStream value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<MediaStream> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(MediaStream element) => _Collections.contains(this, element);
-
-  void forEach(void f(MediaStream element)) => _Collections.forEach(this, f);
-
-  Collection map(f(MediaStream element)) => _Collections.map(this, [], f);
-
-  Collection<MediaStream> filter(bool f(MediaStream element)) =>
-     _Collections.filter(this, <MediaStream>[], f);
-
-  bool every(bool f(MediaStream element)) => _Collections.every(this, f);
-
-  bool some(bool f(MediaStream element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<MediaStream>:
-
-  void sort([Comparator<MediaStream> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(MediaStream element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(MediaStream element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  MediaStream get last => this[length - 1];
-
-  MediaStream removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<MediaStream> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <MediaStream>[]);
-
-  // -- end List<MediaStream> mixins.
-
-  MediaStream item(int index) native "MediaStreamList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName MediaStreamTrack
-abstract class MediaStreamTrack implements EventTarget {
+class MediaStreamTrack extends EventTarget {
+  MediaStreamTrack.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  MediaStreamTrackEvents get on;
+  MediaStreamTrackEvents get on =>
+    new MediaStreamTrackEvents(this);
 
   static const int ENDED = 2;
 
@@ -21970,90 +16528,42 @@
 
   static const int MUTED = 1;
 
+
   /** @domName MediaStreamTrack.enabled */
-  bool enabled;
-
-  /** @domName MediaStreamTrack.kind */
-  String get kind;
-
-  /** @domName MediaStreamTrack.label */
-  String get label;
-
-  /** @domName MediaStreamTrack.readyState */
-  int get readyState;
-
-  /** @domName MediaStreamTrack.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaStreamTrack.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaStreamTrack.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class MediaStreamTrackEvents implements Events {
-
-  EventListenerList get ended;
-
-  EventListenerList get mute;
-
-  EventListenerList get unmute;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName MediaStreamTrackEvent
-abstract class MediaStreamTrackEvent implements Event {
-
-  /** @domName MediaStreamTrackEvent.track */
-  MediaStreamTrack get track;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaStreamTrackEventImpl extends _EventImpl implements MediaStreamTrackEvent {
-
-  MediaStreamTrack get track native "MediaStreamTrackEvent_track_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MediaStreamTrackImpl extends _EventTargetImpl implements MediaStreamTrack {
-
-  _MediaStreamTrackEventsImpl get on =>
-    new _MediaStreamTrackEventsImpl(this);
-
   bool get enabled native "MediaStreamTrack_enabled_Getter";
 
+
+  /** @domName MediaStreamTrack.enabled */
   void set enabled(bool value) native "MediaStreamTrack_enabled_Setter";
 
+
+  /** @domName MediaStreamTrack.kind */
   String get kind native "MediaStreamTrack_kind_Getter";
 
+
+  /** @domName MediaStreamTrack.label */
   String get label native "MediaStreamTrack_label_Getter";
 
+
+  /** @domName MediaStreamTrack.readyState */
   int get readyState native "MediaStreamTrack_readyState_Getter";
 
+
+  /** @domName MediaStreamTrack.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrack_addEventListener_Callback";
 
+
+  /** @domName MediaStreamTrack.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "MediaStreamTrack_dispatchEvent_Callback";
 
+
+  /** @domName MediaStreamTrack.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrack_removeEventListener_Callback";
 
 }
 
-class _MediaStreamTrackEventsImpl extends _EventsImpl implements MediaStreamTrackEvents {
-  _MediaStreamTrackEventsImpl(_ptr) : super(_ptr);
+class MediaStreamTrackEvents extends Events {
+  MediaStreamTrackEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get ended => this['ended'];
 
@@ -22067,41 +16577,14 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName MediaStreamTrackList
-abstract class MediaStreamTrackList implements EventTarget {
+/// @domName MediaStreamTrackEvent
+class MediaStreamTrackEvent extends Event {
+  MediaStreamTrackEvent.internal(): super.internal();
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  MediaStreamTrackListEvents get on;
 
-  /** @domName MediaStreamTrackList.length */
-  int get length;
+  /** @domName MediaStreamTrackEvent.track */
+  MediaStreamTrack get track native "MediaStreamTrackEvent_track_Getter";
 
-  /** @domName MediaStreamTrackList.add */
-  void add(MediaStreamTrack track);
-
-  /** @domName MediaStreamTrackList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MediaStreamTrackList.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName MediaStreamTrackList.item */
-  MediaStreamTrack item(int index);
-
-  /** @domName MediaStreamTrackList.remove */
-  void remove(MediaStreamTrack track);
-
-  /** @domName MediaStreamTrackList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class MediaStreamTrackListEvents implements Events {
-
-  EventListenerList get addTrack;
-
-  EventListenerList get removeTrack;
 }
 // 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
@@ -22109,29 +16592,48 @@
 
 // WARNING: Do not edit - generated code.
 
-class _MediaStreamTrackListImpl extends _EventTargetImpl implements MediaStreamTrackList {
+/// @domName MediaStreamTrackList
+class MediaStreamTrackList extends EventTarget {
+  MediaStreamTrackList.internal(): super.internal();
 
-  _MediaStreamTrackListEventsImpl get on =>
-    new _MediaStreamTrackListEventsImpl(this);
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  MediaStreamTrackListEvents get on =>
+    new MediaStreamTrackListEvents(this);
 
+
+  /** @domName MediaStreamTrackList.length */
   int get length native "MediaStreamTrackList_length_Getter";
 
+
+  /** @domName MediaStreamTrackList.add */
   void add(MediaStreamTrack track) native "MediaStreamTrackList_add_Callback";
 
+
+  /** @domName MediaStreamTrackList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrackList_addEventListener_Callback";
 
+
+  /** @domName MediaStreamTrackList.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "MediaStreamTrackList_dispatchEvent_Callback";
 
+
+  /** @domName MediaStreamTrackList.item */
   MediaStreamTrack item(int index) native "MediaStreamTrackList_item_Callback";
 
+
+  /** @domName MediaStreamTrackList.remove */
   void remove(MediaStreamTrack track) native "MediaStreamTrackList_remove_Callback";
 
+
+  /** @domName MediaStreamTrackList.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrackList_removeEventListener_Callback";
 
 }
 
-class _MediaStreamTrackListEventsImpl extends _EventsImpl implements MediaStreamTrackListEvents {
-  _MediaStreamTrackListEventsImpl(_ptr) : super(_ptr);
+class MediaStreamTrackListEvents extends Events {
+  MediaStreamTrackListEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get addTrack => this['addtrack'];
 
@@ -22144,29 +16646,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MemoryInfo
-abstract class MemoryInfo {
+class MemoryInfo extends NativeFieldWrapperClass1 {
+  MemoryInfo.internal();
+
 
   /** @domName MemoryInfo.jsHeapSizeLimit */
-  int get jsHeapSizeLimit;
-
-  /** @domName MemoryInfo.totalJSHeapSize */
-  int get totalJSHeapSize;
-
-  /** @domName MemoryInfo.usedJSHeapSize */
-  int get usedJSHeapSize;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MemoryInfoImpl extends NativeFieldWrapperClass1 implements MemoryInfo {
-
   int get jsHeapSizeLimit native "MemoryInfo_jsHeapSizeLimit_Getter";
 
+
+  /** @domName MemoryInfo.totalJSHeapSize */
   int get totalJSHeapSize native "MemoryInfo_totalJSHeapSize_Getter";
 
+
+  /** @domName MemoryInfo.usedJSHeapSize */
   int get usedJSHeapSize native "MemoryInfo_usedJSHeapSize_Getter";
 
 }
@@ -22177,23 +16669,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLMenuElement
-abstract class MenuElement implements Element {
+class MenuElement extends _Element_Merged {
 
   factory MenuElement() => _Elements.createMenuElement();
+  MenuElement.internal(): super.internal();
+
 
   /** @domName HTMLMenuElement.compact */
-  bool compact;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MenuElementImpl extends _ElementImpl_Merged implements MenuElement {
-
   bool get compact native "HTMLMenuElement_compact_Getter";
 
+
+  /** @domName HTMLMenuElement.compact */
   void set compact(bool value) native "HTMLMenuElement_compact_Setter";
 
 }
@@ -22204,26 +16690,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MessageChannel
-abstract class MessageChannel {
+class MessageChannel extends NativeFieldWrapperClass1 {
 
   factory MessageChannel() => _MessageChannelFactoryProvider.createMessageChannel();
+  MessageChannel.internal();
+
 
   /** @domName MessageChannel.port1 */
-  MessagePort get port1;
-
-  /** @domName MessageChannel.port2 */
-  MessagePort get port2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MessageChannelImpl extends NativeFieldWrapperClass1 implements MessageChannel {
-
   MessagePort get port1 native "MessageChannel_port1_Getter";
 
+
+  /** @domName MessageChannel.port2 */
   MessagePort get port2 native "MessageChannel_port2_Getter";
 
 }
@@ -22234,49 +16711,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MessageEvent
-abstract class MessageEvent implements Event {
+class MessageEvent extends Event {
+  MessageEvent.internal(): super.internal();
+
 
   /** @domName MessageEvent.data */
-  Object get data;
-
-  /** @domName MessageEvent.lastEventId */
-  String get lastEventId;
-
-  /** @domName MessageEvent.origin */
-  String get origin;
-
-  /** @domName MessageEvent.ports */
-  List get ports;
-
-  /** @domName MessageEvent.source */
-  Window get source;
-
-  /** @domName MessageEvent.initMessageEvent */
-  void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts);
-
-  /** @domName MessageEvent.webkitInitMessageEvent */
-  void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List transferables);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MessageEventImpl extends _EventImpl implements MessageEvent {
-
   Object get data native "MessageEvent_data_Getter";
 
+
+  /** @domName MessageEvent.lastEventId */
   String get lastEventId native "MessageEvent_lastEventId_Getter";
 
+
+  /** @domName MessageEvent.origin */
   String get origin native "MessageEvent_origin_Getter";
 
+
+  /** @domName MessageEvent.ports */
   List get ports native "MessageEvent_ports_Getter";
 
+
+  /** @domName MessageEvent.source */
   Window get source native "MessageEvent_source_Getter";
 
+
+  /** @domName MessageEvent.initMessageEvent */
   void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List messagePorts) native "MessageEvent_initMessageEvent_Callback";
 
+
+  /** @domName MessageEvent.webkitInitMessageEvent */
   void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, LocalWindow sourceArg, List transferables) native "MessageEvent_webkitInitMessageEvent_Callback";
 
 }
@@ -22287,63 +16750,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MessagePort
-abstract class MessagePort implements EventTarget {
+class MessagePort extends EventTarget {
+  MessagePort.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  MessagePortEvents get on;
+  MessagePortEvents get on =>
+    new MessagePortEvents(this);
+
 
   /** @domName MessagePort.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MessagePort.close */
-  void close();
-
-  /** @domName MessagePort.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName MessagePort.postMessage */
-  void postMessage(Object message, [List messagePorts]);
-
-  /** @domName MessagePort.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName MessagePort.start */
-  void start();
-}
-
-abstract class MessagePortEvents implements Events {
-
-  EventListenerList get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MessagePortImpl extends _EventTargetImpl implements MessagePort {
-
-  _MessagePortEventsImpl get on =>
-    new _MessagePortEventsImpl(this);
-
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MessagePort_addEventListener_Callback";
 
+
+  /** @domName MessagePort.close */
   void close() native "MessagePort_close_Callback";
 
+
+  /** @domName MessagePort.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "MessagePort_dispatchEvent_Callback";
 
+
+  /** @domName MessagePort.postMessage */
   void postMessage(Object message, [List messagePorts]) native "MessagePort_postMessage_Callback";
 
+
+  /** @domName MessagePort.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MessagePort_removeEventListener_Callback";
 
+
+  /** @domName MessagePort.start */
   void start() native "MessagePort_start_Callback";
 
 }
 
-class _MessagePortEventsImpl extends _EventsImpl implements MessagePortEvents {
-  _MessagePortEventsImpl(_ptr) : super(_ptr);
+class MessagePortEvents extends Events {
+  MessagePortEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get message => this['message'];
 }
@@ -22354,42 +16797,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLMetaElement
-abstract class MetaElement implements Element {
+class MetaElement extends _Element_Merged {
+  MetaElement.internal(): super.internal();
+
 
   /** @domName HTMLMetaElement.content */
-  String content;
-
-  /** @domName HTMLMetaElement.httpEquiv */
-  String httpEquiv;
-
-  /** @domName HTMLMetaElement.name */
-  String name;
-
-  /** @domName HTMLMetaElement.scheme */
-  String scheme;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MetaElementImpl extends _ElementImpl_Merged implements MetaElement {
-
   String get content native "HTMLMetaElement_content_Getter";
 
+
+  /** @domName HTMLMetaElement.content */
   void set content(String value) native "HTMLMetaElement_content_Setter";
 
+
+  /** @domName HTMLMetaElement.httpEquiv */
   String get httpEquiv native "HTMLMetaElement_httpEquiv_Getter";
 
+
+  /** @domName HTMLMetaElement.httpEquiv */
   void set httpEquiv(String value) native "HTMLMetaElement_httpEquiv_Setter";
 
+
+  /** @domName HTMLMetaElement.name */
   String get name native "HTMLMetaElement_name_Getter";
 
+
+  /** @domName HTMLMetaElement.name */
   void set name(String value) native "HTMLMetaElement_name_Setter";
 
+
+  /** @domName HTMLMetaElement.scheme */
   String get scheme native "HTMLMetaElement_scheme_Getter";
 
+
+  /** @domName HTMLMetaElement.scheme */
   void set scheme(String value) native "HTMLMetaElement_scheme_Setter";
 
 }
@@ -22400,13 +16840,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Metadata
-abstract class Metadata {
+class Metadata extends NativeFieldWrapperClass1 {
+  Metadata.internal();
+
 
   /** @domName Metadata.modificationTime */
-  Date get modificationTime;
+  Date get modificationTime native "Metadata_modificationTime_Getter";
+
 
   /** @domName Metadata.size */
-  int get size;
+  int get size native "Metadata_size_Getter";
+
 }
 // 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
@@ -22422,77 +16866,62 @@
 
 // WARNING: Do not edit - generated code.
 
-class _MetadataImpl extends NativeFieldWrapperClass1 implements Metadata {
-
-  Date get modificationTime native "Metadata_modificationTime_Getter";
-
-  int get size native "Metadata_size_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName HTMLMeterElement
-abstract class MeterElement implements Element {
+class MeterElement extends _Element_Merged {
 
   factory MeterElement() => _Elements.createMeterElement();
+  MeterElement.internal(): super.internal();
+
 
   /** @domName HTMLMeterElement.high */
-  num high;
-
-  /** @domName HTMLMeterElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLMeterElement.low */
-  num low;
-
-  /** @domName HTMLMeterElement.max */
-  num max;
-
-  /** @domName HTMLMeterElement.min */
-  num min;
-
-  /** @domName HTMLMeterElement.optimum */
-  num optimum;
-
-  /** @domName HTMLMeterElement.value */
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MeterElementImpl extends _ElementImpl_Merged implements MeterElement {
-
   num get high native "HTMLMeterElement_high_Getter";
 
+
+  /** @domName HTMLMeterElement.high */
   void set high(num value) native "HTMLMeterElement_high_Setter";
 
+
+  /** @domName HTMLMeterElement.labels */
   List<Node> get labels native "HTMLMeterElement_labels_Getter";
 
+
+  /** @domName HTMLMeterElement.low */
   num get low native "HTMLMeterElement_low_Getter";
 
+
+  /** @domName HTMLMeterElement.low */
   void set low(num value) native "HTMLMeterElement_low_Setter";
 
+
+  /** @domName HTMLMeterElement.max */
   num get max native "HTMLMeterElement_max_Getter";
 
+
+  /** @domName HTMLMeterElement.max */
   void set max(num value) native "HTMLMeterElement_max_Setter";
 
+
+  /** @domName HTMLMeterElement.min */
   num get min native "HTMLMeterElement_min_Getter";
 
+
+  /** @domName HTMLMeterElement.min */
   void set min(num value) native "HTMLMeterElement_min_Setter";
 
+
+  /** @domName HTMLMeterElement.optimum */
   num get optimum native "HTMLMeterElement_optimum_Getter";
 
+
+  /** @domName HTMLMeterElement.optimum */
   void set optimum(num value) native "HTMLMeterElement_optimum_Setter";
 
+
+  /** @domName HTMLMeterElement.value */
   num get value native "HTMLMeterElement_value_Getter";
 
+
+  /** @domName HTMLMeterElement.value */
   void set value(num value) native "HTMLMeterElement_value_Setter";
 
 }
@@ -22503,28 +16932,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLModElement
-abstract class ModElement implements Element {
+class ModElement extends _Element_Merged {
+  ModElement.internal(): super.internal();
+
 
   /** @domName HTMLModElement.cite */
-  String cite;
-
-  /** @domName HTMLModElement.dateTime */
-  String dateTime;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ModElementImpl extends _ElementImpl_Merged implements ModElement {
-
   String get cite native "HTMLModElement_cite_Getter";
 
+
+  /** @domName HTMLModElement.cite */
   void set cite(String value) native "HTMLModElement_cite_Setter";
 
+
+  /** @domName HTMLModElement.dateTime */
   String get dateTime native "HTMLModElement_dateTime_Getter";
 
+
+  /** @domName HTMLModElement.dateTime */
   void set dateTime(String value) native "HTMLModElement_dateTime_Setter";
 
 }
@@ -22534,12 +16958,9 @@
 
 // WARNING: Do not edit - generated code.
 
-
-/// @domName MouseEvent
-abstract class MouseEvent implements UIEvent {
-
-  factory MouseEvent(String type, Window view, int detail, int screenX, int screenY,
-      int clientX, int clientY, int button, [bool canBubble = true,
+class MouseEvent extends UIEvent {
+  factory MouseEvent(String type, Window view, int detail, int screenX,
+      int screenY, int clientX, int clientY, int button, [bool canBubble = true,
       bool cancelable = true, bool ctrlKey = false, bool altKey = false,
       bool shiftKey = false, bool metaKey = false,
       EventTarget relatedTarget = null]) =>
@@ -22548,114 +16969,86 @@
           clientX, clientY, button, canBubble, cancelable,
           ctrlKey, altKey, shiftKey, metaKey,
           relatedTarget);
+  MouseEvent.internal(): super.internal();
 
 
   /** @domName MouseEvent.altKey */
-  bool get altKey;
-
-  /** @domName MouseEvent.button */
-  int get button;
-
-  /** @domName MouseEvent.clientX */
-  int get clientX;
-
-  /** @domName MouseEvent.clientY */
-  int get clientY;
-
-  /** @domName MouseEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName MouseEvent.dataTransfer */
-  Clipboard get dataTransfer;
-
-  /** @domName MouseEvent.fromElement */
-  Node get fromElement;
-
-  /** @domName MouseEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName MouseEvent.offsetX */
-  int get offsetX;
-
-  /** @domName MouseEvent.offsetY */
-  int get offsetY;
-
-  /** @domName MouseEvent.relatedTarget */
-  EventTarget get relatedTarget;
-
-  /** @domName MouseEvent.screenX */
-  int get screenX;
-
-  /** @domName MouseEvent.screenY */
-  int get screenY;
-
-  /** @domName MouseEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName MouseEvent.toElement */
-  Node get toElement;
-
-  /** @domName MouseEvent.webkitMovementX */
-  int get webkitMovementX;
-
-  /** @domName MouseEvent.webkitMovementY */
-  int get webkitMovementY;
-
-  /** @domName MouseEvent.x */
-  int get x;
-
-  /** @domName MouseEvent.y */
-  int get y;
-
-  /** @domName MouseEvent.initMouseEvent */
-  void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MouseEventImpl extends _UIEventImpl implements MouseEvent {
-
   bool get altKey native "MouseEvent_altKey_Getter";
 
+
+  /** @domName MouseEvent.button */
   int get button native "MouseEvent_button_Getter";
 
+
+  /** @domName MouseEvent.clientX */
   int get clientX native "MouseEvent_clientX_Getter";
 
+
+  /** @domName MouseEvent.clientY */
   int get clientY native "MouseEvent_clientY_Getter";
 
+
+  /** @domName MouseEvent.ctrlKey */
   bool get ctrlKey native "MouseEvent_ctrlKey_Getter";
 
+
+  /** @domName MouseEvent.dataTransfer */
   Clipboard get dataTransfer native "MouseEvent_dataTransfer_Getter";
 
+
+  /** @domName MouseEvent.fromElement */
   Node get fromElement native "MouseEvent_fromElement_Getter";
 
+
+  /** @domName MouseEvent.metaKey */
   bool get metaKey native "MouseEvent_metaKey_Getter";
 
+
+  /** @domName MouseEvent.offsetX */
   int get offsetX native "MouseEvent_offsetX_Getter";
 
+
+  /** @domName MouseEvent.offsetY */
   int get offsetY native "MouseEvent_offsetY_Getter";
 
+
+  /** @domName MouseEvent.relatedTarget */
   EventTarget get relatedTarget native "MouseEvent_relatedTarget_Getter";
 
+
+  /** @domName MouseEvent.screenX */
   int get screenX native "MouseEvent_screenX_Getter";
 
+
+  /** @domName MouseEvent.screenY */
   int get screenY native "MouseEvent_screenY_Getter";
 
+
+  /** @domName MouseEvent.shiftKey */
   bool get shiftKey native "MouseEvent_shiftKey_Getter";
 
+
+  /** @domName MouseEvent.toElement */
   Node get toElement native "MouseEvent_toElement_Getter";
 
+
+  /** @domName MouseEvent.webkitMovementX */
   int get webkitMovementX native "MouseEvent_webkitMovementX_Getter";
 
+
+  /** @domName MouseEvent.webkitMovementY */
   int get webkitMovementY native "MouseEvent_webkitMovementY_Getter";
 
+
+  /** @domName MouseEvent.x */
   int get x native "MouseEvent_x_Getter";
 
+
+  /** @domName MouseEvent.y */
   int get y native "MouseEvent_y_Getter";
 
+
+  /** @domName MouseEvent.initMouseEvent */
   void $dom_initMouseEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int button, EventTarget relatedTarget) native "MouseEvent_initMouseEvent_Callback";
 
 }
@@ -22674,7 +17067,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MutationEvent
-abstract class MutationEvent implements Event {
+class MutationEvent extends Event {
+  MutationEvent.internal(): super.internal();
 
   static const int ADDITION = 2;
 
@@ -22682,42 +17076,28 @@
 
   static const int REMOVAL = 3;
 
+
   /** @domName MutationEvent.attrChange */
-  int get attrChange;
-
-  /** @domName MutationEvent.attrName */
-  String get attrName;
-
-  /** @domName MutationEvent.newValue */
-  String get newValue;
-
-  /** @domName MutationEvent.prevValue */
-  String get prevValue;
-
-  /** @domName MutationEvent.relatedNode */
-  Node get relatedNode;
-
-  /** @domName MutationEvent.initMutationEvent */
-  void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MutationEventImpl extends _EventImpl implements MutationEvent {
-
   int get attrChange native "MutationEvent_attrChange_Getter";
 
+
+  /** @domName MutationEvent.attrName */
   String get attrName native "MutationEvent_attrName_Getter";
 
+
+  /** @domName MutationEvent.newValue */
   String get newValue native "MutationEvent_newValue_Getter";
 
+
+  /** @domName MutationEvent.prevValue */
   String get prevValue native "MutationEvent_prevValue_Getter";
 
+
+  /** @domName MutationEvent.relatedNode */
   Node get relatedNode native "MutationEvent_relatedNode_Getter";
 
+
+  /** @domName MutationEvent.initMutationEvent */
   void initMutationEvent(String type, bool canBubble, bool cancelable, Node relatedNode, String prevValue, String newValue, String attrName, int attrChange) native "MutationEvent_initMutationEvent_Callback";
 
 }
@@ -22725,40 +17105,21 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-
-/// @domName MutationObserver
-abstract class MutationObserver {
+class MutationObserver extends NativeFieldWrapperClass1 {
 
   factory MutationObserver(MutationCallback callback) => _MutationObserverFactoryProvider.createMutationObserver(callback);
+  MutationObserver.internal();
+
 
   /** @domName MutationObserver.disconnect */
-  void disconnect();
-
-  /** @domName MutationObserver.takeRecords */
-  List<MutationRecord> takeRecords();
-
-  void observe(Node target,
-               {Map options,
-                bool childList,
-                bool attributes,
-                bool characterData,
-                bool subtree,
-                bool attributeOldValue,
-                bool characterDataOldValue,
-                List<String> attributeFilter});
-}
-// 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 _MutationObserverImpl extends NativeFieldWrapperClass1 implements MutationObserver {
-
   void disconnect() native "MutationObserver_disconnect_Callback";
 
+
+  /** @domName MutationObserver._observe */
   void _observe(Node target, Map options) native "MutationObserver__observe_Callback";
 
+
+  /** @domName MutationObserver.takeRecords */
   List<MutationRecord> takeRecords() native "MutationObserver_takeRecords_Callback";
 
   void observe(Node target,
@@ -22818,7 +17179,7 @@
   static _add(m, String key, value) { m[key] = value; }
   static _fixupList(list) => list;
 
-  _call(Node target, options) {
+  void _call(Node target, options) {
     _observe(target, options);
   }
 
@@ -22830,59 +17191,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName MutationRecord
-abstract class MutationRecord {
+class MutationRecord extends NativeFieldWrapperClass1 {
+  MutationRecord.internal();
+
 
   /** @domName MutationRecord.addedNodes */
-  List<Node> get addedNodes;
-
-  /** @domName MutationRecord.attributeName */
-  String get attributeName;
-
-  /** @domName MutationRecord.attributeNamespace */
-  String get attributeNamespace;
-
-  /** @domName MutationRecord.nextSibling */
-  Node get nextSibling;
-
-  /** @domName MutationRecord.oldValue */
-  String get oldValue;
-
-  /** @domName MutationRecord.previousSibling */
-  Node get previousSibling;
-
-  /** @domName MutationRecord.removedNodes */
-  List<Node> get removedNodes;
-
-  /** @domName MutationRecord.target */
-  Node get target;
-
-  /** @domName MutationRecord.type */
-  String get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _MutationRecordImpl extends NativeFieldWrapperClass1 implements MutationRecord {
-
   List<Node> get addedNodes native "MutationRecord_addedNodes_Getter";
 
+
+  /** @domName MutationRecord.attributeName */
   String get attributeName native "MutationRecord_attributeName_Getter";
 
+
+  /** @domName MutationRecord.attributeNamespace */
   String get attributeNamespace native "MutationRecord_attributeNamespace_Getter";
 
+
+  /** @domName MutationRecord.nextSibling */
   Node get nextSibling native "MutationRecord_nextSibling_Getter";
 
+
+  /** @domName MutationRecord.oldValue */
   String get oldValue native "MutationRecord_oldValue_Getter";
 
+
+  /** @domName MutationRecord.previousSibling */
   Node get previousSibling native "MutationRecord_previousSibling_Getter";
 
+
+  /** @domName MutationRecord.removedNodes */
   List<Node> get removedNodes native "MutationRecord_removedNodes_Getter";
 
+
+  /** @domName MutationRecord.target */
   Node get target native "MutationRecord_target_Getter";
 
+
+  /** @domName MutationRecord.type */
   String get type native "MutationRecord_type_Getter";
 
 }
@@ -22893,40 +17238,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName NamedNodeMap
-abstract class NamedNodeMap implements List<Node> {
+class NamedNodeMap extends NativeFieldWrapperClass1 implements List<Node> {
+  NamedNodeMap.internal();
+
 
   /** @domName NamedNodeMap.length */
-  int get length;
-
-  /** @domName NamedNodeMap.getNamedItem */
-  Node getNamedItem(String name);
-
-  /** @domName NamedNodeMap.getNamedItemNS */
-  Node getNamedItemNS(String namespaceURI, String localName);
-
-  /** @domName NamedNodeMap.item */
-  Node item(int index);
-
-  /** @domName NamedNodeMap.removeNamedItem */
-  Node removeNamedItem(String name);
-
-  /** @domName NamedNodeMap.removeNamedItemNS */
-  Node removeNamedItemNS(String namespaceURI, String localName);
-
-  /** @domName NamedNodeMap.setNamedItem */
-  Node setNamedItem(Node node);
-
-  /** @domName NamedNodeMap.setNamedItemNS */
-  Node setNamedItemNS(Node node);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NamedNodeMapImpl extends NativeFieldWrapperClass1 implements NamedNodeMap {
-
   int get length native "NamedNodeMap_length_Getter";
 
   Node operator[](int index) native "NamedNodeMap_item_Callback";
@@ -23012,18 +17328,32 @@
 
   // -- end List<Node> mixins.
 
+
+  /** @domName NamedNodeMap.getNamedItem */
   Node getNamedItem(String name) native "NamedNodeMap_getNamedItem_Callback";
 
+
+  /** @domName NamedNodeMap.getNamedItemNS */
   Node getNamedItemNS(String namespaceURI, String localName) native "NamedNodeMap_getNamedItemNS_Callback";
 
+
+  /** @domName NamedNodeMap.item */
   Node item(int index) native "NamedNodeMap_item_Callback";
 
+
+  /** @domName NamedNodeMap.removeNamedItem */
   Node removeNamedItem(String name) native "NamedNodeMap_removeNamedItem_Callback";
 
+
+  /** @domName NamedNodeMap.removeNamedItemNS */
   Node removeNamedItemNS(String namespaceURI, String localName) native "NamedNodeMap_removeNamedItemNS_Callback";
 
+
+  /** @domName NamedNodeMap.setNamedItem */
   Node setNamedItem(Node node) native "NamedNodeMap_setNamedItem_Callback";
 
+
+  /** @domName NamedNodeMap.setNamedItemNS */
   Node setNamedItemNS(Node node) native "NamedNodeMap_setNamedItemNS_Callback";
 
 }
@@ -23034,114 +17364,87 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Navigator
-abstract class Navigator {
+class Navigator extends NativeFieldWrapperClass1 {
+  Navigator.internal();
+
 
   /** @domName Navigator.appCodeName */
-  String get appCodeName;
-
-  /** @domName Navigator.appName */
-  String get appName;
-
-  /** @domName Navigator.appVersion */
-  String get appVersion;
-
-  /** @domName Navigator.cookieEnabled */
-  bool get cookieEnabled;
-
-  /** @domName Navigator.geolocation */
-  Geolocation get geolocation;
-
-  /** @domName Navigator.language */
-  String get language;
-
-  /** @domName Navigator.mimeTypes */
-  DOMMimeTypeArray get mimeTypes;
-
-  /** @domName Navigator.onLine */
-  bool get onLine;
-
-  /** @domName Navigator.platform */
-  String get platform;
-
-  /** @domName Navigator.plugins */
-  DOMPluginArray get plugins;
-
-  /** @domName Navigator.product */
-  String get product;
-
-  /** @domName Navigator.productSub */
-  String get productSub;
-
-  /** @domName Navigator.userAgent */
-  String get userAgent;
-
-  /** @domName Navigator.vendor */
-  String get vendor;
-
-  /** @domName Navigator.vendorSub */
-  String get vendorSub;
-
-  /** @domName Navigator.webkitBattery */
-  BatteryManager get webkitBattery;
-
-  /** @domName Navigator.getStorageUpdates */
-  void getStorageUpdates();
-
-  /** @domName Navigator.javaEnabled */
-  bool javaEnabled();
-
-  /** @domName Navigator.webkitGetGamepads */
-  List<Gamepad> webkitGetGamepads();
-
-  /** @domName Navigator.webkitGetUserMedia */
-  void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NavigatorImpl extends NativeFieldWrapperClass1 implements Navigator {
-
   String get appCodeName native "Navigator_appCodeName_Getter";
 
+
+  /** @domName Navigator.appName */
   String get appName native "Navigator_appName_Getter";
 
+
+  /** @domName Navigator.appVersion */
   String get appVersion native "Navigator_appVersion_Getter";
 
+
+  /** @domName Navigator.cookieEnabled */
   bool get cookieEnabled native "Navigator_cookieEnabled_Getter";
 
+
+  /** @domName Navigator.geolocation */
   Geolocation get geolocation native "Navigator_geolocation_Getter";
 
+
+  /** @domName Navigator.language */
   String get language native "Navigator_language_Getter";
 
+
+  /** @domName Navigator.mimeTypes */
   DOMMimeTypeArray get mimeTypes native "Navigator_mimeTypes_Getter";
 
+
+  /** @domName Navigator.onLine */
   bool get onLine native "Navigator_onLine_Getter";
 
+
+  /** @domName Navigator.platform */
   String get platform native "Navigator_platform_Getter";
 
+
+  /** @domName Navigator.plugins */
   DOMPluginArray get plugins native "Navigator_plugins_Getter";
 
+
+  /** @domName Navigator.product */
   String get product native "Navigator_product_Getter";
 
+
+  /** @domName Navigator.productSub */
   String get productSub native "Navigator_productSub_Getter";
 
+
+  /** @domName Navigator.userAgent */
   String get userAgent native "Navigator_userAgent_Getter";
 
+
+  /** @domName Navigator.vendor */
   String get vendor native "Navigator_vendor_Getter";
 
+
+  /** @domName Navigator.vendorSub */
   String get vendorSub native "Navigator_vendorSub_Getter";
 
+
+  /** @domName Navigator.webkitBattery */
   BatteryManager get webkitBattery native "Navigator_webkitBattery_Getter";
 
+
+  /** @domName Navigator.getStorageUpdates */
   void getStorageUpdates() native "Navigator_getStorageUpdates_Callback";
 
+
+  /** @domName Navigator.javaEnabled */
   bool javaEnabled() native "Navigator_javaEnabled_Callback";
 
+
+  /** @domName Navigator.webkitGetGamepads */
   List<Gamepad> webkitGetGamepads() native "Navigator_webkitGetGamepads_Callback";
 
+
+  /** @domName Navigator.webkitGetUserMedia */
   void webkitGetUserMedia(Map options, NavigatorUserMediaSuccessCallback successCallback, [NavigatorUserMediaErrorCallback errorCallback]) native "Navigator_webkitGetUserMedia_Callback";
 
 }
@@ -23152,12 +17455,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName NavigatorUserMediaError
-abstract class NavigatorUserMediaError {
+class NavigatorUserMediaError extends NativeFieldWrapperClass1 {
+  NavigatorUserMediaError.internal();
 
   static const int PERMISSION_DENIED = 1;
 
+
   /** @domName NavigatorUserMediaError.code */
-  int get code;
+  int get code native "NavigatorUserMediaError_code_Getter";
+
 }
 // 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
@@ -23173,231 +17479,42 @@
 
 // WARNING: Do not edit - generated code.
 
-class _NavigatorUserMediaErrorImpl extends NativeFieldWrapperClass1 implements NavigatorUserMediaError {
-
-  int get code native "NavigatorUserMediaError_code_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 
 typedef void NavigatorUserMediaSuccessCallback(LocalMediaStream stream);
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Node
-abstract class Node implements EventTarget {
-  List<Node> get nodes;
-
-  void set nodes(Collection<Node> value);
-
-  /**
-   * Replaces this node with another node.
-   * @domName Node.replaceChild
-   */
-  Node replaceWith(Node otherNode);
-
-  /**
-   * Removes this node from the DOM.
-   * @domName Node.removeChild
-   */
-  void remove();
-
-
-  static const int ATTRIBUTE_NODE = 2;
-
-  static const int CDATA_SECTION_NODE = 4;
-
-  static const int COMMENT_NODE = 8;
-
-  static const int DOCUMENT_FRAGMENT_NODE = 11;
-
-  static const int DOCUMENT_NODE = 9;
-
-  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-
-  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
-
-  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
-
-  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
-
-  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
-
-  static const int DOCUMENT_TYPE_NODE = 10;
-
-  static const int ELEMENT_NODE = 1;
-
-  static const int ENTITY_NODE = 6;
-
-  static const int ENTITY_REFERENCE_NODE = 5;
-
-  static const int NOTATION_NODE = 12;
-
-  static const int PROCESSING_INSTRUCTION_NODE = 7;
-
-  static const int TEXT_NODE = 3;
-
-  /** @domName Node.attributes */
-  NamedNodeMap get $dom_attributes;
-
-  /** @domName Node.childNodes */
-  List<Node> get $dom_childNodes;
-
-  /** @domName Node.firstChild */
-  Node get $dom_firstChild;
-
-  /** @domName Node.lastChild */
-  Node get $dom_lastChild;
-
-  /** @domName Node.nextSibling */
-  Node get nextNode;
-
-  /** @domName Node.nodeType */
-  int get $dom_nodeType;
-
-  /** @domName Node.ownerDocument */
-  Document get document;
-
-  /** @domName Node.parentNode */
-  Node get parent;
-
-  /** @domName Node.previousSibling */
-  Node get previousNode;
-
-  /** @domName Node.textContent */
-  String text;
-
-  /** @domName Node.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.appendChild */
-  Node $dom_appendChild(Node newChild);
-
-  /** @domName Node.cloneNode */
-  Node clone(bool deep);
-
-  /** @domName Node.contains */
-  bool contains(Node other);
-
-  /** @domName Node.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName Node.hasChildNodes */
-  bool hasChildNodes();
-
-  /** @domName Node.insertBefore */
-  Node insertBefore(Node newChild, Node refChild);
-
-  /** @domName Node.removeChild */
-  Node $dom_removeChild(Node oldChild);
-
-  /** @domName Node.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Node.replaceChild */
-  Node $dom_replaceChild(Node newChild, Node oldChild);
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NodeFilter
-abstract class NodeFilter {
-
-  static const int FILTER_ACCEPT = 1;
-
-  static const int FILTER_REJECT = 2;
-
-  static const int FILTER_SKIP = 3;
-
-  static const int SHOW_ALL = 0xFFFFFFFF;
-
-  static const int SHOW_ATTRIBUTE = 0x00000002;
-
-  static const int SHOW_CDATA_SECTION = 0x00000008;
-
-  static const int SHOW_COMMENT = 0x00000080;
-
-  static const int SHOW_DOCUMENT = 0x00000100;
-
-  static const int SHOW_DOCUMENT_FRAGMENT = 0x00000400;
-
-  static const int SHOW_DOCUMENT_TYPE = 0x00000200;
-
-  static const int SHOW_ELEMENT = 0x00000001;
-
-  static const int SHOW_ENTITY = 0x00000020;
-
-  static const int SHOW_ENTITY_REFERENCE = 0x00000010;
-
-  static const int SHOW_NOTATION = 0x00000800;
-
-  static const int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
-
-  static const int SHOW_TEXT = 0x00000004;
-
-  /** @domName NodeFilter.acceptNode */
-  int acceptNode(Node n);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NodeFilterImpl extends NativeFieldWrapperClass1 implements NodeFilter {
-
-  int acceptNode(Node n) native "NodeFilter_acceptNode_Callback";
-
-}
-// 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.
-
 /**
  * Lazy implementation of the child nodes of an element that does not request
  * the actual child nodes of an element until strictly necessary greatly
  * improving performance for the typical cases where it is not required.
  */
 class _ChildNodeListLazy implements List {
-  final _NodeImpl _this;
+  final Node _this;
 
   _ChildNodeListLazy(this._this);
 
 
-  _NodeImpl get first => _this.$dom_firstChild;
-  _NodeImpl get last => _this.$dom_lastChild;
+  Node get first => _this.$dom_firstChild;
+  Node get last => _this.$dom_lastChild;
 
-  void add(_NodeImpl value) {
+  void add(Node value) {
     _this.$dom_appendChild(value);
   }
 
-  void addLast(_NodeImpl value) {
+  void addLast(Node value) {
     _this.$dom_appendChild(value);
   }
 
 
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
       _this.$dom_appendChild(node);
     }
   }
 
-  _NodeImpl removeLast() {
+  Node removeLast() {
     final result = last;
     if (result != null) {
       _this.$dom_removeChild(result);
@@ -23409,7 +17526,7 @@
     _this.text = '';
   }
 
-  void operator []=(int index, _NodeImpl value) {
+  void operator []=(int index, Node value) {
     _this.$dom_replaceChild(value, this[index]);
   }
 
@@ -23468,10 +17585,10 @@
   // a local copy of $dom_childNodes is more efficient.
   int get length => _this.$dom_childNodes.length;
 
-  _NodeImpl operator[](int index) => _this.$dom_childNodes[index];
+  Node operator[](int index) => _this.$dom_childNodes[index];
 }
 
-class _NodeImpl extends _EventTargetImpl implements Node {
+class Node extends EventTarget {
   _ChildNodeListLazy get nodes {
     return new _ChildNodeListLazy(this);
   }
@@ -23486,18 +17603,26 @@
     }
   }
 
-  // TODO(jacobr): should we throw an exception if parent is already null?
-  // TODO(vsm): Use the native remove when available.
+  /**
+   * Removes this node from the DOM.
+   * @domName Node.removeChild
+   */
   void remove() {
+    // TODO(jacobr): should we throw an exception if parent is already null?
+    // TODO(vsm): Use the native remove when available.
     if (this.parent != null) {
-      final _NodeImpl parent = this.parent;
+      final Node parent = this.parent;
       parent.$dom_removeChild(this);
     }
   }
 
-  _NodeImpl replaceWith(Node otherNode) {
+  /**
+   * Replaces this node with another node.
+   * @domName Node.replaceChild
+   */
+  Node replaceWith(Node otherNode) {
     try {
-      final _NodeImpl parent = this.parent;
+      final Node parent = this.parent;
       parent.$dom_replaceChild(otherNode, this);
     } catch (e) {
 
@@ -23505,47 +17630,126 @@
     return this;
   }
 
+  Node.internal(): super.internal();
 
+  static const int ATTRIBUTE_NODE = 2;
+
+  static const int CDATA_SECTION_NODE = 4;
+
+  static const int COMMENT_NODE = 8;
+
+  static const int DOCUMENT_FRAGMENT_NODE = 11;
+
+  static const int DOCUMENT_NODE = 9;
+
+  static const int DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+
+  static const int DOCUMENT_POSITION_CONTAINS = 0x08;
+
+  static const int DOCUMENT_POSITION_DISCONNECTED = 0x01;
+
+  static const int DOCUMENT_POSITION_FOLLOWING = 0x04;
+
+  static const int DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+
+  static const int DOCUMENT_POSITION_PRECEDING = 0x02;
+
+  static const int DOCUMENT_TYPE_NODE = 10;
+
+  static const int ELEMENT_NODE = 1;
+
+  static const int ENTITY_NODE = 6;
+
+  static const int ENTITY_REFERENCE_NODE = 5;
+
+  static const int NOTATION_NODE = 12;
+
+  static const int PROCESSING_INSTRUCTION_NODE = 7;
+
+  static const int TEXT_NODE = 3;
+
+
+  /** @domName Node.attributes */
   NamedNodeMap get $dom_attributes native "Node_attributes_Getter";
 
+
+  /** @domName Node.childNodes */
   List<Node> get $dom_childNodes native "Node_childNodes_Getter";
 
+
+  /** @domName Node.firstChild */
   Node get $dom_firstChild native "Node_firstChild_Getter";
 
+
+  /** @domName Node.lastChild */
   Node get $dom_lastChild native "Node_lastChild_Getter";
 
+
+  /** @domName Node.nextSibling */
   Node get nextNode native "Node_nextSibling_Getter";
 
+
+  /** @domName Node.nodeType */
   int get $dom_nodeType native "Node_nodeType_Getter";
 
+
+  /** @domName Node.ownerDocument */
   Document get document native "Node_ownerDocument_Getter";
 
+
+  /** @domName Node.parentNode */
   Node get parent native "Node_parentNode_Getter";
 
+
+  /** @domName Node.previousSibling */
   Node get previousNode native "Node_previousSibling_Getter";
 
+
+  /** @domName Node.textContent */
   String get text native "Node_textContent_Getter";
 
+
+  /** @domName Node.textContent */
   void set text(String value) native "Node_textContent_Setter";
 
+
+  /** @domName Node.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "Node_addEventListener_Callback";
 
+
+  /** @domName Node.appendChild */
   Node $dom_appendChild(Node newChild) native "Node_appendChild_Callback";
 
+
+  /** @domName Node.cloneNode */
   Node clone(bool deep) native "Node_cloneNode_Callback";
 
+
+  /** @domName Node.contains */
   bool contains(Node other) native "Node_contains_Callback";
 
+
+  /** @domName Node.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "Node_dispatchEvent_Callback";
 
+
+  /** @domName Node.hasChildNodes */
   bool hasChildNodes() native "Node_hasChildNodes_Callback";
 
+
+  /** @domName Node.insertBefore */
   Node insertBefore(Node newChild, Node refChild) native "Node_insertBefore_Callback";
 
+
+  /** @domName Node.removeChild */
   Node $dom_removeChild(Node oldChild) native "Node_removeChild_Callback";
 
+
+  /** @domName Node.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "Node_removeEventListener_Callback";
 
+
+  /** @domName Node.replaceChild */
   Node $dom_replaceChild(Node newChild, Node oldChild) native "Node_replaceChild_Callback";
 
 }
@@ -23555,35 +17759,46 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName NodeIterator
-abstract class NodeIterator {
+/// @domName NodeFilter
+class NodeFilter extends NativeFieldWrapperClass1 {
+  NodeFilter.internal();
 
-  /** @domName NodeIterator.expandEntityReferences */
-  bool get expandEntityReferences;
+  static const int FILTER_ACCEPT = 1;
 
-  /** @domName NodeIterator.filter */
-  NodeFilter get filter;
+  static const int FILTER_REJECT = 2;
 
-  /** @domName NodeIterator.pointerBeforeReferenceNode */
-  bool get pointerBeforeReferenceNode;
+  static const int FILTER_SKIP = 3;
 
-  /** @domName NodeIterator.referenceNode */
-  Node get referenceNode;
+  static const int SHOW_ALL = 0xFFFFFFFF;
 
-  /** @domName NodeIterator.root */
-  Node get root;
+  static const int SHOW_ATTRIBUTE = 0x00000002;
 
-  /** @domName NodeIterator.whatToShow */
-  int get whatToShow;
+  static const int SHOW_CDATA_SECTION = 0x00000008;
 
-  /** @domName NodeIterator.detach */
-  void detach();
+  static const int SHOW_COMMENT = 0x00000080;
 
-  /** @domName NodeIterator.nextNode */
-  Node nextNode();
+  static const int SHOW_DOCUMENT = 0x00000100;
 
-  /** @domName NodeIterator.previousNode */
-  Node previousNode();
+  static const int SHOW_DOCUMENT_FRAGMENT = 0x00000400;
+
+  static const int SHOW_DOCUMENT_TYPE = 0x00000200;
+
+  static const int SHOW_ELEMENT = 0x00000001;
+
+  static const int SHOW_ENTITY = 0x00000020;
+
+  static const int SHOW_ENTITY_REFERENCE = 0x00000010;
+
+  static const int SHOW_NOTATION = 0x00000800;
+
+  static const int SHOW_PROCESSING_INSTRUCTION = 0x00000040;
+
+  static const int SHOW_TEXT = 0x00000004;
+
+
+  /** @domName NodeFilter.acceptNode */
+  int acceptNode(Node n) native "NodeFilter_acceptNode_Callback";
+
 }
 // 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
@@ -23591,48 +17806,47 @@
 
 // WARNING: Do not edit - generated code.
 
-class _NodeIteratorImpl extends NativeFieldWrapperClass1 implements NodeIterator {
+/// @domName NodeIterator
+class NodeIterator extends NativeFieldWrapperClass1 {
+  NodeIterator.internal();
 
+
+  /** @domName NodeIterator.expandEntityReferences */
   bool get expandEntityReferences native "NodeIterator_expandEntityReferences_Getter";
 
+
+  /** @domName NodeIterator.filter */
   NodeFilter get filter native "NodeIterator_filter_Getter";
 
+
+  /** @domName NodeIterator.pointerBeforeReferenceNode */
   bool get pointerBeforeReferenceNode native "NodeIterator_pointerBeforeReferenceNode_Getter";
 
+
+  /** @domName NodeIterator.referenceNode */
   Node get referenceNode native "NodeIterator_referenceNode_Getter";
 
+
+  /** @domName NodeIterator.root */
   Node get root native "NodeIterator_root_Getter";
 
+
+  /** @domName NodeIterator.whatToShow */
   int get whatToShow native "NodeIterator_whatToShow_Getter";
 
+
+  /** @domName NodeIterator.detach */
   void detach() native "NodeIterator_detach_Callback";
 
+
+  /** @domName NodeIterator.nextNode */
   Node nextNode() native "NodeIterator_nextNode_Callback";
 
+
+  /** @domName NodeIterator.previousNode */
   Node previousNode() native "NodeIterator_previousNode_Callback";
 
 }
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName NodeList
-abstract class NodeList implements List<Node> {
-
-  List<Node> filter(bool f(Node element));
-
-  List<Node> getRange(int start, int length);
-
-  Node get first;
-
-
-  /** @domName NodeList.length */
-  int get length;
-
-}
 // 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.
@@ -23716,8 +17930,8 @@
     new _NodeListWrapper(_list.getRange(start, rangeLength));
 }
 
-class _NodeListImpl extends NativeFieldWrapperClass1 implements NodeList {
-  _NodeImpl _parent;
+class NodeList extends NativeFieldWrapperClass1 implements List<Node> {
+  Node _parent;
 
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -23733,21 +17947,21 @@
 
   // From Collection<Node>:
 
-  void add(_NodeImpl value) {
+  void add(Node value) {
     _parent.$dom_appendChild(value);
   }
 
-  void addLast(_NodeImpl value) {
+  void addLast(Node value) {
     _parent.$dom_appendChild(value);
   }
 
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
       _parent.$dom_appendChild(node);
     }
   }
 
-  _NodeImpl removeLast() {
+  Node removeLast() {
     final result = this.last;
     if (result != null) {
       _parent.$dom_removeChild(result);
@@ -23759,7 +17973,7 @@
     _parent.text = '';
   }
 
-  void operator []=(int index, _NodeImpl value) {
+  void operator []=(int index, Node value) {
     _parent.$dom_replaceChild(value, this[index]);
   }
 
@@ -23808,11 +18022,16 @@
 
   // -- end List<Node> mixins.
 
+  NodeList.internal();
 
+
+  /** @domName NodeList.length */
   int get length native "NodeList_length_Getter";
 
   Node operator[](int index) native "NodeList_item_Callback";
 
+
+  /** @domName NodeList.item */
   Node _item(int index) native "NodeList_item_Callback";
 
 }
@@ -23823,24 +18042,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Notation
-abstract class Notation implements Node {
+class Notation extends Node {
+  Notation.internal(): super.internal();
+
 
   /** @domName Notation.publicId */
-  String get publicId;
-
-  /** @domName Notation.systemId */
-  String get systemId;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NotationImpl extends _NodeImpl implements Notation {
-
   String get publicId native "Notation_publicId_Getter";
 
+
+  /** @domName Notation.systemId */
   String get systemId native "Notation_systemId_Getter";
 
 }
@@ -23851,7 +18061,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Notification
-abstract class Notification implements EventTarget {
+class Notification extends EventTarget {
 
   factory Notification(String title, [Map options]) {
     if (!?options) {
@@ -23859,139 +18069,74 @@
     }
     return _NotificationFactoryProvider.createNotification(title, options);
   }
+  Notification.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  NotificationEvents get on;
+  NotificationEvents get on =>
+    new NotificationEvents(this);
+
 
   /** @domName Notification.dir */
-  String dir;
-
-  /** @domName Notification.permission */
-  String get permission;
-
-  /** @domName Notification.replaceId */
-  String replaceId;
-
-  /** @domName Notification.tag */
-  String tag;
-
-  /** @domName Notification.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Notification.cancel */
-  void cancel();
-
-  /** @domName Notification.close */
-  void close();
-
-  /** @domName Notification.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName Notification.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName Notification.requestPermission */
-  static final requestPermission = _NotificationImpl.requestPermission;
-
-  /** @domName Notification.show */
-  void show();
-}
-
-abstract class NotificationEvents implements Events {
-
-  EventListenerList get click;
-
-  EventListenerList get close;
-
-  EventListenerList get display;
-
-  EventListenerList get error;
-
-  EventListenerList get show;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName NotificationCenter
-abstract class NotificationCenter {
-
-  /** @domName NotificationCenter.checkPermission */
-  int checkPermission();
-
-  /** @domName NotificationCenter.createHTMLNotification */
-  Notification createHTMLNotification(String url);
-
-  /** @domName NotificationCenter.createNotification */
-  Notification createNotification(String iconUrl, String title, String body);
-
-  /** @domName NotificationCenter.requestPermission */
-  void requestPermission(VoidCallback callback);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NotificationCenterImpl extends NativeFieldWrapperClass1 implements NotificationCenter {
-
-  int checkPermission() native "NotificationCenter_checkPermission_Callback";
-
-  Notification createHTMLNotification(String url) native "NotificationCenter_createHTMLNotification_Callback";
-
-  Notification createNotification(String iconUrl, String title, String body) native "NotificationCenter_createNotification_Callback";
-
-  void requestPermission(VoidCallback callback) native "NotificationCenter_requestPermission_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _NotificationImpl extends _EventTargetImpl implements Notification {
-
-  _NotificationEventsImpl get on =>
-    new _NotificationEventsImpl(this);
-
   String get dir native "Notification_dir_Getter";
 
+
+  /** @domName Notification.dir */
   void set dir(String value) native "Notification_dir_Setter";
 
+
+  /** @domName Notification.permission */
   String get permission native "Notification_permission_Getter";
 
+
+  /** @domName Notification.replaceId */
   String get replaceId native "Notification_replaceId_Getter";
 
+
+  /** @domName Notification.replaceId */
   void set replaceId(String value) native "Notification_replaceId_Setter";
 
+
+  /** @domName Notification.tag */
   String get tag native "Notification_tag_Getter";
 
+
+  /** @domName Notification.tag */
   void set tag(String value) native "Notification_tag_Setter";
 
+
+  /** @domName Notification.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "Notification_addEventListener_Callback";
 
+
+  /** @domName Notification.cancel */
   void cancel() native "Notification_cancel_Callback";
 
+
+  /** @domName Notification.close */
   void close() native "Notification_close_Callback";
 
+
+  /** @domName Notification.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "Notification_dispatchEvent_Callback";
 
+
+  /** @domName Notification.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "Notification_removeEventListener_Callback";
 
+
+  /** @domName Notification.requestPermission */
   static void requestPermission(NotificationPermissionCallback callback) native "Notification_requestPermission_Callback";
 
+
+  /** @domName Notification.show */
   void show() native "Notification_show_Callback";
 
 }
 
-class _NotificationEventsImpl extends _EventsImpl implements NotificationEvents {
-  _NotificationEventsImpl(_ptr) : super(_ptr);
+class NotificationEvents extends Events {
+  NotificationEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get click => this['click'];
 
@@ -24009,6 +18154,33 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName NotificationCenter
+class NotificationCenter extends NativeFieldWrapperClass1 {
+  NotificationCenter.internal();
+
+
+  /** @domName NotificationCenter.checkPermission */
+  int checkPermission() native "NotificationCenter_checkPermission_Callback";
+
+
+  /** @domName NotificationCenter.createHTMLNotification */
+  Notification createHTMLNotification(String url) native "NotificationCenter_createHTMLNotification_Callback";
+
+
+  /** @domName NotificationCenter.createNotification */
+  Notification createNotification(String iconUrl, String title, String body) native "NotificationCenter_createNotification_Callback";
+
+
+  /** @domName NotificationCenter.requestPermission */
+  void requestPermission(VoidCallback callback) native "NotificationCenter_requestPermission_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
 
 typedef void NotificationPermissionCallback(String permission);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24018,15 +18190,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OESElementIndexUint
-abstract class OESElementIndexUint {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OESElementIndexUintImpl extends NativeFieldWrapperClass1 implements OESElementIndexUint {
+class OESElementIndexUint extends NativeFieldWrapperClass1 {
+  OESElementIndexUint.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24036,17 +18201,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OESStandardDerivatives
-abstract class OESStandardDerivatives {
+class OESStandardDerivatives extends NativeFieldWrapperClass1 {
+  OESStandardDerivatives.internal();
 
   static const int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OESStandardDerivativesImpl extends NativeFieldWrapperClass1 implements OESStandardDerivatives {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24056,15 +18214,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OESTextureFloat
-abstract class OESTextureFloat {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OESTextureFloatImpl extends NativeFieldWrapperClass1 implements OESTextureFloat {
+class OESTextureFloat extends NativeFieldWrapperClass1 {
+  OESTextureFloat.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -24074,36 +18225,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OESVertexArrayObject
-abstract class OESVertexArrayObject {
+class OESVertexArrayObject extends NativeFieldWrapperClass1 {
+  OESVertexArrayObject.internal();
 
   static const int VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
+
   /** @domName OESVertexArrayObject.bindVertexArrayOES */
-  void bindVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-
-  /** @domName OESVertexArrayObject.createVertexArrayOES */
-  WebGLVertexArrayObjectOES createVertexArrayOES();
-
-  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
-  void deleteVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-
-  /** @domName OESVertexArrayObject.isVertexArrayOES */
-  bool isVertexArrayOES(WebGLVertexArrayObjectOES arrayObject);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OESVertexArrayObjectImpl extends NativeFieldWrapperClass1 implements OESVertexArrayObject {
-
   void bindVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
 
+
+  /** @domName OESVertexArrayObject.createVertexArrayOES */
   WebGLVertexArrayObjectOES createVertexArrayOES() native "OESVertexArrayObject_createVertexArrayOES_Callback";
 
+
+  /** @domName OESVertexArrayObject.deleteVertexArrayOES */
   void deleteVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
 
+
+  /** @domName OESVertexArrayObject.isVertexArrayOES */
   bool isVertexArrayOES(WebGLVertexArrayObjectOES arrayObject) native "OESVertexArrayObject_isVertexArrayOES_Callback";
 
 }
@@ -24114,44 +18254,41 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLOListElement
-abstract class OListElement implements Element {
+class OListElement extends _Element_Merged {
 
   factory OListElement() => _Elements.createOListElement();
+  OListElement.internal(): super.internal();
+
 
   /** @domName HTMLOListElement.compact */
-  bool compact;
-
-  /** @domName HTMLOListElement.reversed */
-  bool reversed;
-
-  /** @domName HTMLOListElement.start */
-  int start;
-
-  /** @domName HTMLOListElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OListElementImpl extends _ElementImpl_Merged implements OListElement {
-
   bool get compact native "HTMLOListElement_compact_Getter";
 
+
+  /** @domName HTMLOListElement.compact */
   void set compact(bool value) native "HTMLOListElement_compact_Setter";
 
+
+  /** @domName HTMLOListElement.reversed */
   bool get reversed native "HTMLOListElement_reversed_Getter";
 
+
+  /** @domName HTMLOListElement.reversed */
   void set reversed(bool value) native "HTMLOListElement_reversed_Setter";
 
+
+  /** @domName HTMLOListElement.start */
   int get start native "HTMLOListElement_start_Getter";
 
+
+  /** @domName HTMLOListElement.start */
   void set start(int value) native "HTMLOListElement_start_Setter";
 
+
+  /** @domName HTMLOListElement.type */
   String get type native "HTMLOListElement_type_Getter";
 
+
+  /** @domName HTMLOListElement.type */
   void set type(String value) native "HTMLOListElement_type_Setter";
 
 }
@@ -24162,158 +18299,161 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLObjectElement
-abstract class ObjectElement implements Element {
+class ObjectElement extends _Element_Merged {
 
   factory ObjectElement() => _Elements.createObjectElement();
+  ObjectElement.internal(): super.internal();
+
 
   /** @domName HTMLObjectElement.align */
-  String align;
-
-  /** @domName HTMLObjectElement.archive */
-  String archive;
-
-  /** @domName HTMLObjectElement.border */
-  String border;
-
-  /** @domName HTMLObjectElement.code */
-  String code;
-
-  /** @domName HTMLObjectElement.codeBase */
-  String codeBase;
-
-  /** @domName HTMLObjectElement.codeType */
-  String codeType;
-
-  /** @domName HTMLObjectElement.data */
-  String data;
-
-  /** @domName HTMLObjectElement.declare */
-  bool declare;
-
-  /** @domName HTMLObjectElement.form */
-  FormElement get form;
-
-  /** @domName HTMLObjectElement.height */
-  String height;
-
-  /** @domName HTMLObjectElement.hspace */
-  int hspace;
-
-  /** @domName HTMLObjectElement.name */
-  String name;
-
-  /** @domName HTMLObjectElement.standby */
-  String standby;
-
-  /** @domName HTMLObjectElement.type */
-  String type;
-
-  /** @domName HTMLObjectElement.useMap */
-  String useMap;
-
-  /** @domName HTMLObjectElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLObjectElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLObjectElement.vspace */
-  int vspace;
-
-  /** @domName HTMLObjectElement.width */
-  String width;
-
-  /** @domName HTMLObjectElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLObjectElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLObjectElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ObjectElementImpl extends _ElementImpl_Merged implements ObjectElement {
-
   String get align native "HTMLObjectElement_align_Getter";
 
+
+  /** @domName HTMLObjectElement.align */
   void set align(String value) native "HTMLObjectElement_align_Setter";
 
+
+  /** @domName HTMLObjectElement.archive */
   String get archive native "HTMLObjectElement_archive_Getter";
 
+
+  /** @domName HTMLObjectElement.archive */
   void set archive(String value) native "HTMLObjectElement_archive_Setter";
 
+
+  /** @domName HTMLObjectElement.border */
   String get border native "HTMLObjectElement_border_Getter";
 
+
+  /** @domName HTMLObjectElement.border */
   void set border(String value) native "HTMLObjectElement_border_Setter";
 
+
+  /** @domName HTMLObjectElement.code */
   String get code native "HTMLObjectElement_code_Getter";
 
+
+  /** @domName HTMLObjectElement.code */
   void set code(String value) native "HTMLObjectElement_code_Setter";
 
+
+  /** @domName HTMLObjectElement.codeBase */
   String get codeBase native "HTMLObjectElement_codeBase_Getter";
 
+
+  /** @domName HTMLObjectElement.codeBase */
   void set codeBase(String value) native "HTMLObjectElement_codeBase_Setter";
 
+
+  /** @domName HTMLObjectElement.codeType */
   String get codeType native "HTMLObjectElement_codeType_Getter";
 
+
+  /** @domName HTMLObjectElement.codeType */
   void set codeType(String value) native "HTMLObjectElement_codeType_Setter";
 
+
+  /** @domName HTMLObjectElement.data */
   String get data native "HTMLObjectElement_data_Getter";
 
+
+  /** @domName HTMLObjectElement.data */
   void set data(String value) native "HTMLObjectElement_data_Setter";
 
+
+  /** @domName HTMLObjectElement.declare */
   bool get declare native "HTMLObjectElement_declare_Getter";
 
+
+  /** @domName HTMLObjectElement.declare */
   void set declare(bool value) native "HTMLObjectElement_declare_Setter";
 
+
+  /** @domName HTMLObjectElement.form */
   FormElement get form native "HTMLObjectElement_form_Getter";
 
+
+  /** @domName HTMLObjectElement.height */
   String get height native "HTMLObjectElement_height_Getter";
 
+
+  /** @domName HTMLObjectElement.height */
   void set height(String value) native "HTMLObjectElement_height_Setter";
 
+
+  /** @domName HTMLObjectElement.hspace */
   int get hspace native "HTMLObjectElement_hspace_Getter";
 
+
+  /** @domName HTMLObjectElement.hspace */
   void set hspace(int value) native "HTMLObjectElement_hspace_Setter";
 
+
+  /** @domName HTMLObjectElement.name */
   String get name native "HTMLObjectElement_name_Getter";
 
+
+  /** @domName HTMLObjectElement.name */
   void set name(String value) native "HTMLObjectElement_name_Setter";
 
+
+  /** @domName HTMLObjectElement.standby */
   String get standby native "HTMLObjectElement_standby_Getter";
 
+
+  /** @domName HTMLObjectElement.standby */
   void set standby(String value) native "HTMLObjectElement_standby_Setter";
 
+
+  /** @domName HTMLObjectElement.type */
   String get type native "HTMLObjectElement_type_Getter";
 
+
+  /** @domName HTMLObjectElement.type */
   void set type(String value) native "HTMLObjectElement_type_Setter";
 
+
+  /** @domName HTMLObjectElement.useMap */
   String get useMap native "HTMLObjectElement_useMap_Getter";
 
+
+  /** @domName HTMLObjectElement.useMap */
   void set useMap(String value) native "HTMLObjectElement_useMap_Setter";
 
+
+  /** @domName HTMLObjectElement.validationMessage */
   String get validationMessage native "HTMLObjectElement_validationMessage_Getter";
 
+
+  /** @domName HTMLObjectElement.validity */
   ValidityState get validity native "HTMLObjectElement_validity_Getter";
 
+
+  /** @domName HTMLObjectElement.vspace */
   int get vspace native "HTMLObjectElement_vspace_Getter";
 
+
+  /** @domName HTMLObjectElement.vspace */
   void set vspace(int value) native "HTMLObjectElement_vspace_Setter";
 
+
+  /** @domName HTMLObjectElement.width */
   String get width native "HTMLObjectElement_width_Getter";
 
+
+  /** @domName HTMLObjectElement.width */
   void set width(String value) native "HTMLObjectElement_width_Setter";
 
+
+  /** @domName HTMLObjectElement.willValidate */
   bool get willValidate native "HTMLObjectElement_willValidate_Getter";
 
+
+  /** @domName HTMLObjectElement.checkValidity */
   bool checkValidity() native "HTMLObjectElement_checkValidity_Callback";
 
+
+  /** @domName HTMLObjectElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLObjectElement_setCustomValidity_Callback";
 
 }
@@ -24324,19 +18464,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OfflineAudioCompletionEvent
-abstract class OfflineAudioCompletionEvent implements Event {
+class OfflineAudioCompletionEvent extends Event {
+  OfflineAudioCompletionEvent.internal(): super.internal();
+
 
   /** @domName OfflineAudioCompletionEvent.renderedBuffer */
-  AudioBuffer get renderedBuffer;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OfflineAudioCompletionEventImpl extends _EventImpl implements OfflineAudioCompletionEvent {
-
   AudioBuffer get renderedBuffer native "OfflineAudioCompletionEvent_renderedBuffer_Getter";
 
 }
@@ -24347,30 +18479,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLOptGroupElement
-abstract class OptGroupElement implements Element {
+class OptGroupElement extends _Element_Merged {
 
   factory OptGroupElement() => _Elements.createOptGroupElement();
+  OptGroupElement.internal(): super.internal();
+
 
   /** @domName HTMLOptGroupElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLOptGroupElement.label */
-  String label;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OptGroupElementImpl extends _ElementImpl_Merged implements OptGroupElement {
-
   bool get disabled native "HTMLOptGroupElement_disabled_Getter";
 
+
+  /** @domName HTMLOptGroupElement.disabled */
   void set disabled(bool value) native "HTMLOptGroupElement_disabled_Setter";
 
+
+  /** @domName HTMLOptGroupElement.label */
   String get label native "HTMLOptGroupElement_label_Getter";
 
+
+  /** @domName HTMLOptGroupElement.label */
   void set label(String value) native "HTMLOptGroupElement_label_Setter";
 
 }
@@ -24381,7 +18508,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLOptionElement
-abstract class OptionElement implements Element {
+class OptionElement extends _Element_Merged {
 
   factory OptionElement([String data, String value, bool defaultSelected, bool selected]) {
     if (!?data) {
@@ -24398,58 +18525,54 @@
     }
     return _OptionElementFactoryProvider.createOptionElement(data, value, defaultSelected, selected);
   }
+  OptionElement.internal(): super.internal();
+
 
   /** @domName HTMLOptionElement.defaultSelected */
-  bool defaultSelected;
-
-  /** @domName HTMLOptionElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLOptionElement.form */
-  FormElement get form;
-
-  /** @domName HTMLOptionElement.index */
-  int get index;
-
-  /** @domName HTMLOptionElement.label */
-  String label;
-
-  /** @domName HTMLOptionElement.selected */
-  bool selected;
-
-  /** @domName HTMLOptionElement.value */
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OptionElementImpl extends _ElementImpl_Merged implements OptionElement {
-
   bool get defaultSelected native "HTMLOptionElement_defaultSelected_Getter";
 
+
+  /** @domName HTMLOptionElement.defaultSelected */
   void set defaultSelected(bool value) native "HTMLOptionElement_defaultSelected_Setter";
 
+
+  /** @domName HTMLOptionElement.disabled */
   bool get disabled native "HTMLOptionElement_disabled_Getter";
 
+
+  /** @domName HTMLOptionElement.disabled */
   void set disabled(bool value) native "HTMLOptionElement_disabled_Setter";
 
+
+  /** @domName HTMLOptionElement.form */
   FormElement get form native "HTMLOptionElement_form_Getter";
 
+
+  /** @domName HTMLOptionElement.index */
   int get index native "HTMLOptionElement_index_Getter";
 
+
+  /** @domName HTMLOptionElement.label */
   String get label native "HTMLOptionElement_label_Getter";
 
+
+  /** @domName HTMLOptionElement.label */
   void set label(String value) native "HTMLOptionElement_label_Setter";
 
+
+  /** @domName HTMLOptionElement.selected */
   bool get selected native "HTMLOptionElement_selected_Getter";
 
+
+  /** @domName HTMLOptionElement.selected */
   void set selected(bool value) native "HTMLOptionElement_selected_Setter";
 
+
+  /** @domName HTMLOptionElement.value */
   String get value native "HTMLOptionElement_value_Getter";
 
+
+  /** @domName HTMLOptionElement.value */
   void set value(String value) native "HTMLOptionElement_value_Setter";
 
 }
@@ -24460,7 +18583,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OscillatorNode
-abstract class OscillatorNode implements AudioSourceNode {
+class OscillatorNode extends AudioSourceNode {
+  OscillatorNode.internal(): super.internal();
 
   static const int CUSTOM = 4;
 
@@ -24480,49 +18604,36 @@
 
   static const int UNSCHEDULED_STATE = 0;
 
+
   /** @domName OscillatorNode.detune */
-  AudioParam get detune;
-
-  /** @domName OscillatorNode.frequency */
-  AudioParam get frequency;
-
-  /** @domName OscillatorNode.playbackState */
-  int get playbackState;
-
-  /** @domName OscillatorNode.type */
-  int type;
-
-  /** @domName OscillatorNode.setWaveTable */
-  void setWaveTable(WaveTable waveTable);
-
-  /** @domName OscillatorNode.start */
-  void start(num when);
-
-  /** @domName OscillatorNode.stop */
-  void stop(num when);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OscillatorNodeImpl extends _AudioSourceNodeImpl implements OscillatorNode {
-
   AudioParam get detune native "OscillatorNode_detune_Getter";
 
+
+  /** @domName OscillatorNode.frequency */
   AudioParam get frequency native "OscillatorNode_frequency_Getter";
 
+
+  /** @domName OscillatorNode.playbackState */
   int get playbackState native "OscillatorNode_playbackState_Getter";
 
+
+  /** @domName OscillatorNode.type */
   int get type native "OscillatorNode_type_Getter";
 
+
+  /** @domName OscillatorNode.type */
   void set type(int value) native "OscillatorNode_type_Setter";
 
+
+  /** @domName OscillatorNode.setWaveTable */
   void setWaveTable(WaveTable waveTable) native "OscillatorNode_setWaveTable_Callback";
 
+
+  /** @domName OscillatorNode.start */
   void start(num when) native "OscillatorNode_start_Callback";
 
+
+  /** @domName OscillatorNode.stop */
   void stop(num when) native "OscillatorNode_stop_Callback";
 
 }
@@ -24533,84 +18644,73 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLOutputElement
-abstract class OutputElement implements Element {
+class OutputElement extends _Element_Merged {
 
   factory OutputElement() => _Elements.createOutputElement();
+  OutputElement.internal(): super.internal();
+
 
   /** @domName HTMLOutputElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLOutputElement.form */
-  FormElement get form;
-
-  /** @domName HTMLOutputElement.htmlFor */
-  DOMSettableTokenList htmlFor;
-
-  /** @domName HTMLOutputElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLOutputElement.name */
-  String name;
-
-  /** @domName HTMLOutputElement.type */
-  String get type;
-
-  /** @domName HTMLOutputElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLOutputElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLOutputElement.value */
-  String value;
-
-  /** @domName HTMLOutputElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLOutputElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLOutputElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OutputElementImpl extends _ElementImpl_Merged implements OutputElement {
-
   String get defaultValue native "HTMLOutputElement_defaultValue_Getter";
 
+
+  /** @domName HTMLOutputElement.defaultValue */
   void set defaultValue(String value) native "HTMLOutputElement_defaultValue_Setter";
 
+
+  /** @domName HTMLOutputElement.form */
   FormElement get form native "HTMLOutputElement_form_Getter";
 
+
+  /** @domName HTMLOutputElement.htmlFor */
   DOMSettableTokenList get htmlFor native "HTMLOutputElement_htmlFor_Getter";
 
+
+  /** @domName HTMLOutputElement.htmlFor */
   void set htmlFor(DOMSettableTokenList value) native "HTMLOutputElement_htmlFor_Setter";
 
+
+  /** @domName HTMLOutputElement.labels */
   List<Node> get labels native "HTMLOutputElement_labels_Getter";
 
+
+  /** @domName HTMLOutputElement.name */
   String get name native "HTMLOutputElement_name_Getter";
 
+
+  /** @domName HTMLOutputElement.name */
   void set name(String value) native "HTMLOutputElement_name_Setter";
 
+
+  /** @domName HTMLOutputElement.type */
   String get type native "HTMLOutputElement_type_Getter";
 
+
+  /** @domName HTMLOutputElement.validationMessage */
   String get validationMessage native "HTMLOutputElement_validationMessage_Getter";
 
+
+  /** @domName HTMLOutputElement.validity */
   ValidityState get validity native "HTMLOutputElement_validity_Getter";
 
+
+  /** @domName HTMLOutputElement.value */
   String get value native "HTMLOutputElement_value_Getter";
 
+
+  /** @domName HTMLOutputElement.value */
   void set value(String value) native "HTMLOutputElement_value_Setter";
 
+
+  /** @domName HTMLOutputElement.willValidate */
   bool get willValidate native "HTMLOutputElement_willValidate_Getter";
 
+
+  /** @domName HTMLOutputElement.checkValidity */
   bool checkValidity() native "HTMLOutputElement_checkValidity_Callback";
 
+
+  /** @domName HTMLOutputElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLOutputElement_setCustomValidity_Callback";
 
 }
@@ -24621,7 +18721,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName OverflowEvent
-abstract class OverflowEvent implements Event {
+class OverflowEvent extends Event {
+  OverflowEvent.internal(): super.internal();
 
   static const int BOTH = 2;
 
@@ -24629,27 +18730,16 @@
 
   static const int VERTICAL = 1;
 
+
   /** @domName OverflowEvent.horizontalOverflow */
-  bool get horizontalOverflow;
-
-  /** @domName OverflowEvent.orient */
-  int get orient;
-
-  /** @domName OverflowEvent.verticalOverflow */
-  bool get verticalOverflow;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _OverflowEventImpl extends _EventImpl implements OverflowEvent {
-
   bool get horizontalOverflow native "OverflowEvent_horizontalOverflow_Getter";
 
+
+  /** @domName OverflowEvent.orient */
   int get orient native "OverflowEvent_orient_Getter";
 
+
+  /** @domName OverflowEvent.verticalOverflow */
   bool get verticalOverflow native "OverflowEvent_verticalOverflow_Getter";
 
 }
@@ -24660,24 +18750,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PagePopupController
-abstract class PagePopupController {
+class PagePopupController extends NativeFieldWrapperClass1 {
+  PagePopupController.internal();
+
 
   /** @domName PagePopupController.localizeNumberString */
-  String localizeNumberString(String numberString);
-
-  /** @domName PagePopupController.setValueAndClosePopup */
-  void setValueAndClosePopup(int numberValue, String stringValue);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PagePopupControllerImpl extends NativeFieldWrapperClass1 implements PagePopupController {
-
   String localizeNumberString(String numberString) native "PagePopupController_localizeNumberString_Callback";
 
+
+  /** @domName PagePopupController.setValueAndClosePopup */
   void setValueAndClosePopup(int numberValue, String stringValue) native "PagePopupController_setValueAndClosePopup_Callback";
 
 }
@@ -24688,19 +18769,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PageTransitionEvent
-abstract class PageTransitionEvent implements Event {
+class PageTransitionEvent extends Event {
+  PageTransitionEvent.internal(): super.internal();
+
 
   /** @domName PageTransitionEvent.persisted */
-  bool get persisted;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PageTransitionEventImpl extends _EventImpl implements PageTransitionEvent {
-
   bool get persisted native "PageTransitionEvent_persisted_Getter";
 
 }
@@ -24711,7 +18784,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PannerNode
-abstract class PannerNode implements AudioNode {
+class PannerNode extends AudioNode {
+  PannerNode.internal(): super.internal();
 
   static const int EQUALPOWER = 0;
 
@@ -24725,93 +18799,88 @@
 
   static const int SOUNDFIELD = 2;
 
+
   /** @domName PannerNode.coneGain */
-  AudioGain get coneGain;
-
-  /** @domName PannerNode.coneInnerAngle */
-  num coneInnerAngle;
-
-  /** @domName PannerNode.coneOuterAngle */
-  num coneOuterAngle;
-
-  /** @domName PannerNode.coneOuterGain */
-  num coneOuterGain;
-
-  /** @domName PannerNode.distanceGain */
-  AudioGain get distanceGain;
-
-  /** @domName PannerNode.distanceModel */
-  int distanceModel;
-
-  /** @domName PannerNode.maxDistance */
-  num maxDistance;
-
-  /** @domName PannerNode.panningModel */
-  int panningModel;
-
-  /** @domName PannerNode.refDistance */
-  num refDistance;
-
-  /** @domName PannerNode.rolloffFactor */
-  num rolloffFactor;
-
-  /** @domName PannerNode.setOrientation */
-  void setOrientation(num x, num y, num z);
-
-  /** @domName PannerNode.setPosition */
-  void setPosition(num x, num y, num z);
-
-  /** @domName PannerNode.setVelocity */
-  void setVelocity(num x, num y, num z);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PannerNodeImpl extends _AudioNodeImpl implements PannerNode {
-
   AudioGain get coneGain native "PannerNode_coneGain_Getter";
 
+
+  /** @domName PannerNode.coneInnerAngle */
   num get coneInnerAngle native "PannerNode_coneInnerAngle_Getter";
 
+
+  /** @domName PannerNode.coneInnerAngle */
   void set coneInnerAngle(num value) native "PannerNode_coneInnerAngle_Setter";
 
+
+  /** @domName PannerNode.coneOuterAngle */
   num get coneOuterAngle native "PannerNode_coneOuterAngle_Getter";
 
+
+  /** @domName PannerNode.coneOuterAngle */
   void set coneOuterAngle(num value) native "PannerNode_coneOuterAngle_Setter";
 
+
+  /** @domName PannerNode.coneOuterGain */
   num get coneOuterGain native "PannerNode_coneOuterGain_Getter";
 
+
+  /** @domName PannerNode.coneOuterGain */
   void set coneOuterGain(num value) native "PannerNode_coneOuterGain_Setter";
 
+
+  /** @domName PannerNode.distanceGain */
   AudioGain get distanceGain native "PannerNode_distanceGain_Getter";
 
+
+  /** @domName PannerNode.distanceModel */
   int get distanceModel native "PannerNode_distanceModel_Getter";
 
+
+  /** @domName PannerNode.distanceModel */
   void set distanceModel(int value) native "PannerNode_distanceModel_Setter";
 
+
+  /** @domName PannerNode.maxDistance */
   num get maxDistance native "PannerNode_maxDistance_Getter";
 
+
+  /** @domName PannerNode.maxDistance */
   void set maxDistance(num value) native "PannerNode_maxDistance_Setter";
 
+
+  /** @domName PannerNode.panningModel */
   int get panningModel native "PannerNode_panningModel_Getter";
 
+
+  /** @domName PannerNode.panningModel */
   void set panningModel(int value) native "PannerNode_panningModel_Setter";
 
+
+  /** @domName PannerNode.refDistance */
   num get refDistance native "PannerNode_refDistance_Getter";
 
+
+  /** @domName PannerNode.refDistance */
   void set refDistance(num value) native "PannerNode_refDistance_Setter";
 
+
+  /** @domName PannerNode.rolloffFactor */
   num get rolloffFactor native "PannerNode_rolloffFactor_Getter";
 
+
+  /** @domName PannerNode.rolloffFactor */
   void set rolloffFactor(num value) native "PannerNode_rolloffFactor_Setter";
 
+
+  /** @domName PannerNode.setOrientation */
   void setOrientation(num x, num y, num z) native "PannerNode_setOrientation_Callback";
 
+
+  /** @domName PannerNode.setPosition */
   void setPosition(num x, num y, num z) native "PannerNode_setPosition_Callback";
 
+
+  /** @domName PannerNode.setVelocity */
   void setVelocity(num x, num y, num z) native "PannerNode_setVelocity_Callback";
 
 }
@@ -24822,23 +18891,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLParagraphElement
-abstract class ParagraphElement implements Element {
+class ParagraphElement extends _Element_Merged {
 
   factory ParagraphElement() => _Elements.createParagraphElement();
+  ParagraphElement.internal(): super.internal();
+
 
   /** @domName HTMLParagraphElement.align */
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ParagraphElementImpl extends _ElementImpl_Merged implements ParagraphElement {
-
   String get align native "HTMLParagraphElement_align_Getter";
 
+
+  /** @domName HTMLParagraphElement.align */
   void set align(String value) native "HTMLParagraphElement_align_Setter";
 
 }
@@ -24849,44 +18912,41 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLParamElement
-abstract class ParamElement implements Element {
+class ParamElement extends _Element_Merged {
 
   factory ParamElement() => _Elements.createParamElement();
+  ParamElement.internal(): super.internal();
+
 
   /** @domName HTMLParamElement.name */
-  String name;
-
-  /** @domName HTMLParamElement.type */
-  String type;
-
-  /** @domName HTMLParamElement.value */
-  String value;
-
-  /** @domName HTMLParamElement.valueType */
-  String valueType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ParamElementImpl extends _ElementImpl_Merged implements ParamElement {
-
   String get name native "HTMLParamElement_name_Getter";
 
+
+  /** @domName HTMLParamElement.name */
   void set name(String value) native "HTMLParamElement_name_Setter";
 
+
+  /** @domName HTMLParamElement.type */
   String get type native "HTMLParamElement_type_Getter";
 
+
+  /** @domName HTMLParamElement.type */
   void set type(String value) native "HTMLParamElement_type_Setter";
 
+
+  /** @domName HTMLParamElement.value */
   String get value native "HTMLParamElement_value_Getter";
 
+
+  /** @domName HTMLParamElement.value */
   void set value(String value) native "HTMLParamElement_value_Setter";
 
+
+  /** @domName HTMLParamElement.valueType */
   String get valueType native "HTMLParamElement_valueType_Getter";
 
+
+  /** @domName HTMLParamElement.valueType */
   void set valueType(String value) native "HTMLParamElement_valueType_Setter";
 
 }
@@ -24897,14 +18957,16 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PeerConnection00
-abstract class PeerConnection00 implements EventTarget {
+class PeerConnection00 extends EventTarget {
 
   factory PeerConnection00(String serverConfiguration, IceCallback iceCallback) => _PeerConnection00FactoryProvider.createPeerConnection00(serverConfiguration, iceCallback);
+  PeerConnection00.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  PeerConnection00Events get on;
+  PeerConnection00Events get on =>
+    new PeerConnection00Events(this);
 
   static const int ACTIVE = 2;
 
@@ -24934,124 +18996,82 @@
 
   static const int SDP_PRANSWER = 0x200;
 
+
   /** @domName PeerConnection00.iceState */
-  int get iceState;
-
-  /** @domName PeerConnection00.localDescription */
-  SessionDescription get localDescription;
-
-  /** @domName PeerConnection00.localStreams */
-  List<MediaStream> get localStreams;
-
-  /** @domName PeerConnection00.readyState */
-  int get readyState;
-
-  /** @domName PeerConnection00.remoteDescription */
-  SessionDescription get remoteDescription;
-
-  /** @domName PeerConnection00.remoteStreams */
-  List<MediaStream> get remoteStreams;
-
-  /** @domName PeerConnection00.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName PeerConnection00.addStream */
-  void addStream(MediaStream stream, [Map mediaStreamHints]);
-
-  /** @domName PeerConnection00.close */
-  void close();
-
-  /** @domName PeerConnection00.createAnswer */
-  SessionDescription createAnswer(String offer, [Map mediaHints]);
-
-  /** @domName PeerConnection00.createOffer */
-  SessionDescription createOffer([Map mediaHints]);
-
-  /** @domName PeerConnection00.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName PeerConnection00.processIceMessage */
-  void processIceMessage(IceCandidate candidate);
-
-  /** @domName PeerConnection00.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName PeerConnection00.removeStream */
-  void removeStream(MediaStream stream);
-
-  /** @domName PeerConnection00.setLocalDescription */
-  void setLocalDescription(int action, SessionDescription desc);
-
-  /** @domName PeerConnection00.setRemoteDescription */
-  void setRemoteDescription(int action, SessionDescription desc);
-
-  /** @domName PeerConnection00.startIce */
-  void startIce([Map iceOptions]);
-}
-
-abstract class PeerConnection00Events implements Events {
-
-  EventListenerList get addStream;
-
-  EventListenerList get connecting;
-
-  EventListenerList get open;
-
-  EventListenerList get removeStream;
-
-  EventListenerList get stateChange;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PeerConnection00Impl extends _EventTargetImpl implements PeerConnection00 {
-
-  _PeerConnection00EventsImpl get on =>
-    new _PeerConnection00EventsImpl(this);
-
   int get iceState native "PeerConnection00_iceState_Getter";
 
+
+  /** @domName PeerConnection00.localDescription */
   SessionDescription get localDescription native "PeerConnection00_localDescription_Getter";
 
+
+  /** @domName PeerConnection00.localStreams */
   List<MediaStream> get localStreams native "PeerConnection00_localStreams_Getter";
 
+
+  /** @domName PeerConnection00.readyState */
   int get readyState native "PeerConnection00_readyState_Getter";
 
+
+  /** @domName PeerConnection00.remoteDescription */
   SessionDescription get remoteDescription native "PeerConnection00_remoteDescription_Getter";
 
+
+  /** @domName PeerConnection00.remoteStreams */
   List<MediaStream> get remoteStreams native "PeerConnection00_remoteStreams_Getter";
 
+
+  /** @domName PeerConnection00.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "PeerConnection00_addEventListener_Callback";
 
+
+  /** @domName PeerConnection00.addStream */
   void addStream(MediaStream stream, [Map mediaStreamHints]) native "PeerConnection00_addStream_Callback";
 
+
+  /** @domName PeerConnection00.close */
   void close() native "PeerConnection00_close_Callback";
 
+
+  /** @domName PeerConnection00.createAnswer */
   SessionDescription createAnswer(String offer, [Map mediaHints]) native "PeerConnection00_createAnswer_Callback";
 
+
+  /** @domName PeerConnection00.createOffer */
   SessionDescription createOffer([Map mediaHints]) native "PeerConnection00_createOffer_Callback";
 
+
+  /** @domName PeerConnection00.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "PeerConnection00_dispatchEvent_Callback";
 
+
+  /** @domName PeerConnection00.processIceMessage */
   void processIceMessage(IceCandidate candidate) native "PeerConnection00_processIceMessage_Callback";
 
+
+  /** @domName PeerConnection00.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "PeerConnection00_removeEventListener_Callback";
 
+
+  /** @domName PeerConnection00.removeStream */
   void removeStream(MediaStream stream) native "PeerConnection00_removeStream_Callback";
 
+
+  /** @domName PeerConnection00.setLocalDescription */
   void setLocalDescription(int action, SessionDescription desc) native "PeerConnection00_setLocalDescription_Callback";
 
+
+  /** @domName PeerConnection00.setRemoteDescription */
   void setRemoteDescription(int action, SessionDescription desc) native "PeerConnection00_setRemoteDescription_Callback";
 
+
+  /** @domName PeerConnection00.startIce */
   void startIce([Map iceOptions]) native "PeerConnection00_startIce_Callback";
 
 }
 
-class _PeerConnection00EventsImpl extends _EventsImpl implements PeerConnection00Events {
-  _PeerConnection00EventsImpl(_ptr) : super(_ptr);
+class PeerConnection00Events extends Events {
+  PeerConnection00Events(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get addStream => this['addstream'];
 
@@ -25070,34 +19090,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Performance
-abstract class Performance implements EventTarget {
+class Performance extends EventTarget {
+  Performance.internal(): super.internal();
+
 
   /** @domName Performance.memory */
-  MemoryInfo get memory;
-
-  /** @domName Performance.navigation */
-  PerformanceNavigation get navigation;
-
-  /** @domName Performance.timing */
-  PerformanceTiming get timing;
-
-  /** @domName Performance.now */
-  num now();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PerformanceImpl extends _EventTargetImpl implements Performance {
-
   MemoryInfo get memory native "Performance_memory_Getter";
 
+
+  /** @domName Performance.navigation */
   PerformanceNavigation get navigation native "Performance_navigation_Getter";
 
+
+  /** @domName Performance.timing */
   PerformanceTiming get timing native "Performance_timing_Getter";
 
+
+  /** @domName Performance.now */
   num now() native "Performance_now_Callback";
 
 }
@@ -25108,7 +19117,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PerformanceNavigation
-abstract class PerformanceNavigation {
+class PerformanceNavigation extends NativeFieldWrapperClass1 {
+  PerformanceNavigation.internal();
 
   static const int TYPE_BACK_FORWARD = 2;
 
@@ -25118,22 +19128,12 @@
 
   static const int TYPE_RESERVED = 255;
 
+
   /** @domName PerformanceNavigation.redirectCount */
-  int get redirectCount;
-
-  /** @domName PerformanceNavigation.type */
-  int get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PerformanceNavigationImpl extends NativeFieldWrapperClass1 implements PerformanceNavigation {
-
   int get redirectCount native "PerformanceNavigation_redirectCount_Getter";
 
+
+  /** @domName PerformanceNavigation.type */
   int get type native "PerformanceNavigation_type_Getter";
 
 }
@@ -25144,119 +19144,91 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PerformanceTiming
-abstract class PerformanceTiming {
+class PerformanceTiming extends NativeFieldWrapperClass1 {
+  PerformanceTiming.internal();
+
 
   /** @domName PerformanceTiming.connectEnd */
-  int get connectEnd;
-
-  /** @domName PerformanceTiming.connectStart */
-  int get connectStart;
-
-  /** @domName PerformanceTiming.domComplete */
-  int get domComplete;
-
-  /** @domName PerformanceTiming.domContentLoadedEventEnd */
-  int get domContentLoadedEventEnd;
-
-  /** @domName PerformanceTiming.domContentLoadedEventStart */
-  int get domContentLoadedEventStart;
-
-  /** @domName PerformanceTiming.domInteractive */
-  int get domInteractive;
-
-  /** @domName PerformanceTiming.domLoading */
-  int get domLoading;
-
-  /** @domName PerformanceTiming.domainLookupEnd */
-  int get domainLookupEnd;
-
-  /** @domName PerformanceTiming.domainLookupStart */
-  int get domainLookupStart;
-
-  /** @domName PerformanceTiming.fetchStart */
-  int get fetchStart;
-
-  /** @domName PerformanceTiming.loadEventEnd */
-  int get loadEventEnd;
-
-  /** @domName PerformanceTiming.loadEventStart */
-  int get loadEventStart;
-
-  /** @domName PerformanceTiming.navigationStart */
-  int get navigationStart;
-
-  /** @domName PerformanceTiming.redirectEnd */
-  int get redirectEnd;
-
-  /** @domName PerformanceTiming.redirectStart */
-  int get redirectStart;
-
-  /** @domName PerformanceTiming.requestStart */
-  int get requestStart;
-
-  /** @domName PerformanceTiming.responseEnd */
-  int get responseEnd;
-
-  /** @domName PerformanceTiming.responseStart */
-  int get responseStart;
-
-  /** @domName PerformanceTiming.secureConnectionStart */
-  int get secureConnectionStart;
-
-  /** @domName PerformanceTiming.unloadEventEnd */
-  int get unloadEventEnd;
-
-  /** @domName PerformanceTiming.unloadEventStart */
-  int get unloadEventStart;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PerformanceTimingImpl extends NativeFieldWrapperClass1 implements PerformanceTiming {
-
   int get connectEnd native "PerformanceTiming_connectEnd_Getter";
 
+
+  /** @domName PerformanceTiming.connectStart */
   int get connectStart native "PerformanceTiming_connectStart_Getter";
 
+
+  /** @domName PerformanceTiming.domComplete */
   int get domComplete native "PerformanceTiming_domComplete_Getter";
 
+
+  /** @domName PerformanceTiming.domContentLoadedEventEnd */
   int get domContentLoadedEventEnd native "PerformanceTiming_domContentLoadedEventEnd_Getter";
 
+
+  /** @domName PerformanceTiming.domContentLoadedEventStart */
   int get domContentLoadedEventStart native "PerformanceTiming_domContentLoadedEventStart_Getter";
 
+
+  /** @domName PerformanceTiming.domInteractive */
   int get domInteractive native "PerformanceTiming_domInteractive_Getter";
 
+
+  /** @domName PerformanceTiming.domLoading */
   int get domLoading native "PerformanceTiming_domLoading_Getter";
 
+
+  /** @domName PerformanceTiming.domainLookupEnd */
   int get domainLookupEnd native "PerformanceTiming_domainLookupEnd_Getter";
 
+
+  /** @domName PerformanceTiming.domainLookupStart */
   int get domainLookupStart native "PerformanceTiming_domainLookupStart_Getter";
 
+
+  /** @domName PerformanceTiming.fetchStart */
   int get fetchStart native "PerformanceTiming_fetchStart_Getter";
 
+
+  /** @domName PerformanceTiming.loadEventEnd */
   int get loadEventEnd native "PerformanceTiming_loadEventEnd_Getter";
 
+
+  /** @domName PerformanceTiming.loadEventStart */
   int get loadEventStart native "PerformanceTiming_loadEventStart_Getter";
 
+
+  /** @domName PerformanceTiming.navigationStart */
   int get navigationStart native "PerformanceTiming_navigationStart_Getter";
 
+
+  /** @domName PerformanceTiming.redirectEnd */
   int get redirectEnd native "PerformanceTiming_redirectEnd_Getter";
 
+
+  /** @domName PerformanceTiming.redirectStart */
   int get redirectStart native "PerformanceTiming_redirectStart_Getter";
 
+
+  /** @domName PerformanceTiming.requestStart */
   int get requestStart native "PerformanceTiming_requestStart_Getter";
 
+
+  /** @domName PerformanceTiming.responseEnd */
   int get responseEnd native "PerformanceTiming_responseEnd_Getter";
 
+
+  /** @domName PerformanceTiming.responseStart */
   int get responseStart native "PerformanceTiming_responseStart_Getter";
 
+
+  /** @domName PerformanceTiming.secureConnectionStart */
   int get secureConnectionStart native "PerformanceTiming_secureConnectionStart_Getter";
 
+
+  /** @domName PerformanceTiming.unloadEventEnd */
   int get unloadEventEnd native "PerformanceTiming_unloadEventEnd_Getter";
 
+
+  /** @domName PerformanceTiming.unloadEventStart */
   int get unloadEventStart native "PerformanceTiming_unloadEventStart_Getter";
 
 }
@@ -25266,32 +19238,24 @@
 
 // WARNING: Do not edit - generated code.
 
-
-/// @domName WebKitPoint
-abstract class Point {
-
+class Point extends NativeFieldWrapperClass1 {
   factory Point(num x, num y) => _PointFactoryProvider.createPoint(x, y);
+  Point.internal();
+
 
   /** @domName WebKitPoint.x */
-  num x;
-
-  /** @domName WebKitPoint.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PointImpl extends NativeFieldWrapperClass1 implements Point {
-
   num get x native "WebKitPoint_x_Getter";
 
+
+  /** @domName WebKitPoint.x */
   void set x(num value) native "WebKitPoint_x_Setter";
 
+
+  /** @domName WebKitPoint.y */
   num get y native "WebKitPoint_y_Getter";
 
+
+  /** @domName WebKitPoint.y */
   void set y(num value) native "WebKitPoint_y_Setter";
 
 }
@@ -25302,19 +19266,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PopStateEvent
-abstract class PopStateEvent implements Event {
+class PopStateEvent extends Event {
+  PopStateEvent.internal(): super.internal();
+
 
   /** @domName PopStateEvent.state */
-  Object get state;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PopStateEventImpl extends _EventImpl implements PopStateEvent {
-
   Object get state native "PopStateEvent_state_Getter";
 
 }
@@ -25333,7 +19289,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName PositionError
-abstract class PositionError {
+class PositionError extends NativeFieldWrapperClass1 {
+  PositionError.internal();
 
   static const int PERMISSION_DENIED = 1;
 
@@ -25341,11 +19298,14 @@
 
   static const int TIMEOUT = 3;
 
+
   /** @domName PositionError.code */
-  int get code;
+  int get code native "PositionError_code_Getter";
+
 
   /** @domName PositionError.message */
-  String get message;
+  String get message native "PositionError_message_Getter";
+
 }
 // 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
@@ -25361,44 +19321,26 @@
 
 // WARNING: Do not edit - generated code.
 
-class _PositionErrorImpl extends NativeFieldWrapperClass1 implements PositionError {
-
-  int get code native "PositionError_code_Getter";
-
-  String get message native "PositionError_message_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName HTMLPreElement
-abstract class PreElement implements Element {
+class PreElement extends _Element_Merged {
 
   factory PreElement() => _Elements.createPreElement();
+  PreElement.internal(): super.internal();
+
 
   /** @domName HTMLPreElement.width */
-  int width;
-
-  /** @domName HTMLPreElement.wrap */
-  bool wrap;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _PreElementImpl extends _ElementImpl_Merged implements PreElement {
-
   int get width native "HTMLPreElement_width_Getter";
 
+
+  /** @domName HTMLPreElement.width */
   void set width(int value) native "HTMLPreElement_width_Setter";
 
+
+  /** @domName HTMLPreElement.wrap */
   bool get wrap native "HTMLPreElement_wrap_Getter";
 
+
+  /** @domName HTMLPreElement.wrap */
   void set wrap(bool value) native "HTMLPreElement_wrap_Setter";
 
 }
@@ -25409,31 +19351,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ProcessingInstruction
-abstract class ProcessingInstruction implements Node {
+class ProcessingInstruction extends Node {
+  ProcessingInstruction.internal(): super.internal();
+
 
   /** @domName ProcessingInstruction.data */
-  String data;
-
-  /** @domName ProcessingInstruction.sheet */
-  StyleSheet get sheet;
-
-  /** @domName ProcessingInstruction.target */
-  String get target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ProcessingInstructionImpl extends _NodeImpl implements ProcessingInstruction {
-
   String get data native "ProcessingInstruction_data_Getter";
 
+
+  /** @domName ProcessingInstruction.data */
   void set data(String value) native "ProcessingInstruction_data_Setter";
 
+
+  /** @domName ProcessingInstruction.sheet */
   StyleSheet get sheet native "ProcessingInstruction_sheet_Getter";
 
+
+  /** @domName ProcessingInstruction.target */
   String get target native "ProcessingInstruction_target_Getter";
 
 }
@@ -25444,40 +19378,33 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLProgressElement
-abstract class ProgressElement implements Element {
+class ProgressElement extends _Element_Merged {
 
   factory ProgressElement() => _Elements.createProgressElement();
+  ProgressElement.internal(): super.internal();
+
 
   /** @domName HTMLProgressElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLProgressElement.max */
-  num max;
-
-  /** @domName HTMLProgressElement.position */
-  num get position;
-
-  /** @domName HTMLProgressElement.value */
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ProgressElementImpl extends _ElementImpl_Merged implements ProgressElement {
-
   List<Node> get labels native "HTMLProgressElement_labels_Getter";
 
+
+  /** @domName HTMLProgressElement.max */
   num get max native "HTMLProgressElement_max_Getter";
 
+
+  /** @domName HTMLProgressElement.max */
   void set max(num value) native "HTMLProgressElement_max_Setter";
 
+
+  /** @domName HTMLProgressElement.position */
   num get position native "HTMLProgressElement_position_Getter";
 
+
+  /** @domName HTMLProgressElement.value */
   num get value native "HTMLProgressElement_value_Getter";
 
+
+  /** @domName HTMLProgressElement.value */
   void set value(num value) native "HTMLProgressElement_value_Setter";
 
 }
@@ -25488,29 +19415,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ProgressEvent
-abstract class ProgressEvent implements Event {
+class ProgressEvent extends Event {
+  ProgressEvent.internal(): super.internal();
+
 
   /** @domName ProgressEvent.lengthComputable */
-  bool get lengthComputable;
-
-  /** @domName ProgressEvent.loaded */
-  int get loaded;
-
-  /** @domName ProgressEvent.total */
-  int get total;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ProgressEventImpl extends _EventImpl implements ProgressEvent {
-
   bool get lengthComputable native "ProgressEvent_lengthComputable_Getter";
 
+
+  /** @domName ProgressEvent.loaded */
   int get loaded native "ProgressEvent_loaded_Getter";
 
+
+  /** @domName ProgressEvent.total */
   int get total native "ProgressEvent_total_Getter";
 
 }
@@ -25521,21 +19438,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLQuoteElement
-abstract class QuoteElement implements Element {
+class QuoteElement extends _Element_Merged {
+  QuoteElement.internal(): super.internal();
+
 
   /** @domName HTMLQuoteElement.cite */
-  String cite;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _QuoteElementImpl extends _ElementImpl_Merged implements QuoteElement {
-
   String get cite native "HTMLQuoteElement_cite_Getter";
 
+
+  /** @domName HTMLQuoteElement.cite */
   void set cite(String value) native "HTMLQuoteElement_cite_Setter";
 
 }
@@ -25546,29 +19457,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RGBColor
-abstract class RGBColor {
+class RGBColor extends NativeFieldWrapperClass1 {
+  RGBColor.internal();
+
 
   /** @domName RGBColor.blue */
-  CSSPrimitiveValue get blue;
-
-  /** @domName RGBColor.green */
-  CSSPrimitiveValue get green;
-
-  /** @domName RGBColor.red */
-  CSSPrimitiveValue get red;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RGBColorImpl extends NativeFieldWrapperClass1 implements RGBColor {
-
   CSSPrimitiveValue get blue native "RGBColor_blue_Getter";
 
+
+  /** @domName RGBColor.green */
   CSSPrimitiveValue get green native "RGBColor_green_Getter";
 
+
+  /** @domName RGBColor.red */
   CSSPrimitiveValue get red native "RGBColor_red_Getter";
 
 }
@@ -25579,106 +19480,53 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCDataChannel
-abstract class RTCDataChannel implements EventTarget {
+class RTCDataChannel extends EventTarget {
+  RTCDataChannel.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  RTCDataChannelEvents get on;
+  RTCDataChannelEvents get on =>
+    new RTCDataChannelEvents(this);
+
 
   /** @domName RTCDataChannel.binaryType */
-  String binaryType;
-
-  /** @domName RTCDataChannel.bufferedAmount */
-  int get bufferedAmount;
-
-  /** @domName RTCDataChannel.label */
-  String get label;
-
-  /** @domName RTCDataChannel.readyState */
-  String get readyState;
-
-  /** @domName RTCDataChannel.reliable */
-  bool get reliable;
-
-  /** @domName RTCDataChannel.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCDataChannel.close */
-  void close();
-
-  /** @domName RTCDataChannel.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName RTCDataChannel.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCDataChannel.send */
-  void send(data);
-}
-
-abstract class RTCDataChannelEvents implements Events {
-
-  EventListenerList get close;
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCDataChannelEvent
-abstract class RTCDataChannelEvent implements Event {
-
-  /** @domName RTCDataChannelEvent.channel */
-  RTCDataChannel get channel;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCDataChannelEventImpl extends _EventImpl implements RTCDataChannelEvent {
-
-  RTCDataChannel get channel native "RTCDataChannelEvent_channel_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCDataChannelImpl extends _EventTargetImpl implements RTCDataChannel {
-
-  _RTCDataChannelEventsImpl get on =>
-    new _RTCDataChannelEventsImpl(this);
-
   String get binaryType native "RTCDataChannel_binaryType_Getter";
 
+
+  /** @domName RTCDataChannel.binaryType */
   void set binaryType(String value) native "RTCDataChannel_binaryType_Setter";
 
+
+  /** @domName RTCDataChannel.bufferedAmount */
   int get bufferedAmount native "RTCDataChannel_bufferedAmount_Getter";
 
+
+  /** @domName RTCDataChannel.label */
   String get label native "RTCDataChannel_label_Getter";
 
+
+  /** @domName RTCDataChannel.readyState */
   String get readyState native "RTCDataChannel_readyState_Getter";
 
+
+  /** @domName RTCDataChannel.reliable */
   bool get reliable native "RTCDataChannel_reliable_Getter";
 
+
+  /** @domName RTCDataChannel.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_addEventListener_Callback";
 
+
+  /** @domName RTCDataChannel.close */
   void close() native "RTCDataChannel_close_Callback";
 
+
+  /** @domName RTCDataChannel.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "RTCDataChannel_dispatchEvent_Callback";
 
+
+  /** @domName RTCDataChannel.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCDataChannel_removeEventListener_Callback";
 
   void send(data) {
@@ -25701,18 +19549,26 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName RTCDataChannel.send_1 */
   void _send_1(data) native "RTCDataChannel_send_1_Callback";
 
+
+  /** @domName RTCDataChannel.send_2 */
   void _send_2(data) native "RTCDataChannel_send_2_Callback";
 
+
+  /** @domName RTCDataChannel.send_3 */
   void _send_3(data) native "RTCDataChannel_send_3_Callback";
 
+
+  /** @domName RTCDataChannel.send_4 */
   void _send_4(data) native "RTCDataChannel_send_4_Callback";
 
 }
 
-class _RTCDataChannelEventsImpl extends _EventsImpl implements RTCDataChannelEvents {
-  _RTCDataChannelEventsImpl(_ptr) : super(_ptr);
+class RTCDataChannelEvents extends Events {
+  RTCDataChannelEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get close => this['close'];
 
@@ -25728,6 +19584,21 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName RTCDataChannelEvent
+class RTCDataChannelEvent extends Event {
+  RTCDataChannelEvent.internal(): super.internal();
+
+
+  /** @domName RTCDataChannelEvent.channel */
+  RTCDataChannel get channel native "RTCDataChannelEvent_channel_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
 
 typedef void RTCErrorCallback(String errorInformation);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25737,54 +19608,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCIceCandidate
-abstract class RTCIceCandidate {
+class RTCIceCandidate extends NativeFieldWrapperClass1 {
 
   factory RTCIceCandidate(Map dictionary) => _RTCIceCandidateFactoryProvider.createRTCIceCandidate(dictionary);
+  RTCIceCandidate.internal();
+
 
   /** @domName RTCIceCandidate.candidate */
-  String get candidate;
-
-  /** @domName RTCIceCandidate.sdpMLineIndex */
-  int get sdpMLineIndex;
-
-  /** @domName RTCIceCandidate.sdpMid */
-  String get sdpMid;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RTCIceCandidateEvent
-abstract class RTCIceCandidateEvent implements Event {
-
-  /** @domName RTCIceCandidateEvent.candidate */
-  RTCIceCandidate get candidate;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCIceCandidateEventImpl extends _EventImpl implements RTCIceCandidateEvent {
-
-  RTCIceCandidate get candidate native "RTCIceCandidateEvent_candidate_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCIceCandidateImpl extends NativeFieldWrapperClass1 implements RTCIceCandidate {
-
   String get candidate native "RTCIceCandidate_candidate_Getter";
 
+
+  /** @domName RTCIceCandidate.sdpMLineIndex */
   int get sdpMLineIndex native "RTCIceCandidate_sdpMLineIndex_Getter";
 
+
+  /** @domName RTCIceCandidate.sdpMid */
   String get sdpMid native "RTCIceCandidate_sdpMid_Getter";
 
 }
@@ -25794,97 +19632,14 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName RTCPeerConnection
-abstract class RTCPeerConnection implements EventTarget {
+/// @domName RTCIceCandidateEvent
+class RTCIceCandidateEvent extends Event {
+  RTCIceCandidateEvent.internal(): super.internal();
 
-  factory RTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
-    if (!?mediaConstraints) {
-      return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers);
-    }
-    return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers, mediaConstraints);
-  }
 
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  RTCPeerConnectionEvents get on;
+  /** @domName RTCIceCandidateEvent.candidate */
+  RTCIceCandidate get candidate native "RTCIceCandidateEvent_candidate_Getter";
 
-  /** @domName RTCPeerConnection.iceState */
-  String get iceState;
-
-  /** @domName RTCPeerConnection.localDescription */
-  RTCSessionDescription get localDescription;
-
-  /** @domName RTCPeerConnection.localStreams */
-  List<MediaStream> get localStreams;
-
-  /** @domName RTCPeerConnection.readyState */
-  String get readyState;
-
-  /** @domName RTCPeerConnection.remoteDescription */
-  RTCSessionDescription get remoteDescription;
-
-  /** @domName RTCPeerConnection.remoteStreams */
-  List<MediaStream> get remoteStreams;
-
-  /** @domName RTCPeerConnection.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCPeerConnection.addIceCandidate */
-  void addIceCandidate(RTCIceCandidate candidate);
-
-  /** @domName RTCPeerConnection.addStream */
-  void addStream(MediaStream stream, [Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.close */
-  void close();
-
-  /** @domName RTCPeerConnection.createAnswer */
-  void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.createDataChannel */
-  RTCDataChannel createDataChannel(String label, [Map options]);
-
-  /** @domName RTCPeerConnection.createOffer */
-  void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]);
-
-  /** @domName RTCPeerConnection.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName RTCPeerConnection.getStats */
-  void getStats(RTCStatsCallback successCallback, MediaStreamTrack selector);
-
-  /** @domName RTCPeerConnection.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName RTCPeerConnection.removeStream */
-  void removeStream(MediaStream stream);
-
-  /** @domName RTCPeerConnection.setLocalDescription */
-  void setLocalDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]);
-
-  /** @domName RTCPeerConnection.setRemoteDescription */
-  void setRemoteDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]);
-
-  /** @domName RTCPeerConnection.updateIce */
-  void updateIce([Map configuration, Map mediaConstraints]);
-}
-
-abstract class RTCPeerConnectionEvents implements Events {
-
-  EventListenerList get addStream;
-
-  EventListenerList get iceCandidate;
-
-  EventListenerList get iceChange;
-
-  EventListenerList get negotiationNeeded;
-
-  EventListenerList get open;
-
-  EventListenerList get removeStream;
-
-  EventListenerList get stateChange;
 }
 // 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
@@ -25892,55 +19647,107 @@
 
 // WARNING: Do not edit - generated code.
 
-class _RTCPeerConnectionImpl extends _EventTargetImpl implements RTCPeerConnection {
+/// @domName RTCPeerConnection
+class RTCPeerConnection extends EventTarget {
 
-  _RTCPeerConnectionEventsImpl get on =>
-    new _RTCPeerConnectionEventsImpl(this);
+  factory RTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) {
+    if (!?mediaConstraints) {
+      return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers);
+    }
+    return _RTCPeerConnectionFactoryProvider.createRTCPeerConnection(rtcIceServers, mediaConstraints);
+  }
+  RTCPeerConnection.internal(): super.internal();
 
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  RTCPeerConnectionEvents get on =>
+    new RTCPeerConnectionEvents(this);
+
+
+  /** @domName RTCPeerConnection.iceState */
   String get iceState native "RTCPeerConnection_iceState_Getter";
 
+
+  /** @domName RTCPeerConnection.localDescription */
   RTCSessionDescription get localDescription native "RTCPeerConnection_localDescription_Getter";
 
+
+  /** @domName RTCPeerConnection.localStreams */
   List<MediaStream> get localStreams native "RTCPeerConnection_localStreams_Getter";
 
+
+  /** @domName RTCPeerConnection.readyState */
   String get readyState native "RTCPeerConnection_readyState_Getter";
 
+
+  /** @domName RTCPeerConnection.remoteDescription */
   RTCSessionDescription get remoteDescription native "RTCPeerConnection_remoteDescription_Getter";
 
+
+  /** @domName RTCPeerConnection.remoteStreams */
   List<MediaStream> get remoteStreams native "RTCPeerConnection_remoteStreams_Getter";
 
+
+  /** @domName RTCPeerConnection.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "RTCPeerConnection_addEventListener_Callback";
 
+
+  /** @domName RTCPeerConnection.addIceCandidate */
   void addIceCandidate(RTCIceCandidate candidate) native "RTCPeerConnection_addIceCandidate_Callback";
 
+
+  /** @domName RTCPeerConnection.addStream */
   void addStream(MediaStream stream, [Map mediaConstraints]) native "RTCPeerConnection_addStream_Callback";
 
+
+  /** @domName RTCPeerConnection.close */
   void close() native "RTCPeerConnection_close_Callback";
 
+
+  /** @domName RTCPeerConnection.createAnswer */
   void createAnswer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createAnswer_Callback";
 
+
+  /** @domName RTCPeerConnection.createDataChannel */
   RTCDataChannel createDataChannel(String label, [Map options]) native "RTCPeerConnection_createDataChannel_Callback";
 
+
+  /** @domName RTCPeerConnection.createOffer */
   void createOffer(RTCSessionDescriptionCallback successCallback, [RTCErrorCallback failureCallback, Map mediaConstraints]) native "RTCPeerConnection_createOffer_Callback";
 
+
+  /** @domName RTCPeerConnection.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "RTCPeerConnection_dispatchEvent_Callback";
 
+
+  /** @domName RTCPeerConnection.getStats */
   void getStats(RTCStatsCallback successCallback, MediaStreamTrack selector) native "RTCPeerConnection_getStats_Callback";
 
+
+  /** @domName RTCPeerConnection.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "RTCPeerConnection_removeEventListener_Callback";
 
+
+  /** @domName RTCPeerConnection.removeStream */
   void removeStream(MediaStream stream) native "RTCPeerConnection_removeStream_Callback";
 
+
+  /** @domName RTCPeerConnection.setLocalDescription */
   void setLocalDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native "RTCPeerConnection_setLocalDescription_Callback";
 
+
+  /** @domName RTCPeerConnection.setRemoteDescription */
   void setRemoteDescription(RTCSessionDescription description, [VoidCallback successCallback, RTCErrorCallback failureCallback]) native "RTCPeerConnection_setRemoteDescription_Callback";
 
+
+  /** @domName RTCPeerConnection.updateIce */
   void updateIce([Map configuration, Map mediaConstraints]) native "RTCPeerConnection_updateIce_Callback";
 
 }
 
-class _RTCPeerConnectionEventsImpl extends _EventsImpl implements RTCPeerConnectionEvents {
-  _RTCPeerConnectionEventsImpl(_ptr) : super(_ptr);
+class RTCPeerConnectionEvents extends Events {
+  RTCPeerConnectionEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get addStream => this['addstream'];
 
@@ -25963,15 +19770,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCSessionDescription
-abstract class RTCSessionDescription {
+class RTCSessionDescription extends NativeFieldWrapperClass1 {
 
   factory RTCSessionDescription(Map dictionary) => _RTCSessionDescriptionFactoryProvider.createRTCSessionDescription(dictionary);
+  RTCSessionDescription.internal();
+
 
   /** @domName RTCSessionDescription.sdp */
-  String sdp;
+  String get sdp native "RTCSessionDescription_sdp_Getter";
+
+
+  /** @domName RTCSessionDescription.sdp */
+  void set sdp(String value) native "RTCSessionDescription_sdp_Setter";
+
 
   /** @domName RTCSessionDescription.type */
-  String type;
+  String get type native "RTCSessionDescription_type_Getter";
+
+
+  /** @domName RTCSessionDescription.type */
+  void set type(String value) native "RTCSessionDescription_type_Setter";
+
 }
 // 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
@@ -25987,23 +19806,6 @@
 
 // WARNING: Do not edit - generated code.
 
-class _RTCSessionDescriptionImpl extends NativeFieldWrapperClass1 implements RTCSessionDescription {
-
-  String get sdp native "RTCSessionDescription_sdp_Getter";
-
-  void set sdp(String value) native "RTCSessionDescription_sdp_Setter";
-
-  String get type native "RTCSessionDescription_type_Getter";
-
-  void set type(String value) native "RTCSessionDescription_type_Setter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 
 typedef void RTCStatsCallback(RTCStatsResponse response);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26013,24 +19815,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCStatsElement
-abstract class RTCStatsElement {
+class RTCStatsElement extends NativeFieldWrapperClass1 {
+  RTCStatsElement.internal();
+
 
   /** @domName RTCStatsElement.timestamp */
-  Date get timestamp;
-
-  /** @domName RTCStatsElement.stat */
-  String stat(String name);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCStatsElementImpl extends NativeFieldWrapperClass1 implements RTCStatsElement {
-
   Date get timestamp native "RTCStatsElement_timestamp_Getter";
 
+
+  /** @domName RTCStatsElement.stat */
   String stat(String name) native "RTCStatsElement_stat_Callback";
 
 }
@@ -26041,24 +19834,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCStatsReport
-abstract class RTCStatsReport {
+class RTCStatsReport extends NativeFieldWrapperClass1 {
+  RTCStatsReport.internal();
+
 
   /** @domName RTCStatsReport.local */
-  RTCStatsElement get local;
-
-  /** @domName RTCStatsReport.remote */
-  RTCStatsElement get remote;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCStatsReportImpl extends NativeFieldWrapperClass1 implements RTCStatsReport {
-
   RTCStatsElement get local native "RTCStatsReport_local_Getter";
 
+
+  /** @domName RTCStatsReport.remote */
   RTCStatsElement get remote native "RTCStatsReport_remote_Getter";
 
 }
@@ -26069,19 +19853,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RTCStatsResponse
-abstract class RTCStatsResponse {
+class RTCStatsResponse extends NativeFieldWrapperClass1 {
+  RTCStatsResponse.internal();
+
 
   /** @domName RTCStatsResponse.result */
-  List<RTCStatsReport> result();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RTCStatsResponseImpl extends NativeFieldWrapperClass1 implements RTCStatsResponse {
-
   List<RTCStatsReport> result() native "RTCStatsResponse_result_Callback";
 
 }
@@ -26092,21 +19868,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName RadioNodeList
-abstract class RadioNodeList implements NodeList {
+class RadioNodeList extends NodeList {
+  RadioNodeList.internal(): super.internal();
+
 
   /** @domName RadioNodeList.value */
-  String value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RadioNodeListImpl extends _NodeListImpl implements RadioNodeList {
-
   String get value native "RadioNodeList_value_Getter";
 
+
+  /** @domName RadioNodeList.value */
   void set value(String value) native "RadioNodeList_value_Setter";
 
 }
@@ -26117,7 +19887,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Range
-abstract class Range {
+class Range extends NativeFieldWrapperClass1 {
+  Range.internal();
 
   static const int END_TO_END = 2;
 
@@ -26135,209 +19906,128 @@
 
   static const int START_TO_START = 0;
 
+
   /** @domName Range.collapsed */
-  bool get collapsed;
-
-  /** @domName Range.commonAncestorContainer */
-  Node get commonAncestorContainer;
-
-  /** @domName Range.endContainer */
-  Node get endContainer;
-
-  /** @domName Range.endOffset */
-  int get endOffset;
-
-  /** @domName Range.startContainer */
-  Node get startContainer;
-
-  /** @domName Range.startOffset */
-  int get startOffset;
-
-  /** @domName Range.cloneContents */
-  DocumentFragment cloneContents();
-
-  /** @domName Range.cloneRange */
-  Range cloneRange();
-
-  /** @domName Range.collapse */
-  void collapse(bool toStart);
-
-  /** @domName Range.compareNode */
-  int compareNode(Node refNode);
-
-  /** @domName Range.comparePoint */
-  int comparePoint(Node refNode, int offset);
-
-  /** @domName Range.createContextualFragment */
-  DocumentFragment createContextualFragment(String html);
-
-  /** @domName Range.deleteContents */
-  void deleteContents();
-
-  /** @domName Range.detach */
-  void detach();
-
-  /** @domName Range.expand */
-  void expand(String unit);
-
-  /** @domName Range.extractContents */
-  DocumentFragment extractContents();
-
-  /** @domName Range.getBoundingClientRect */
-  ClientRect getBoundingClientRect();
-
-  /** @domName Range.getClientRects */
-  List<ClientRect> getClientRects();
-
-  /** @domName Range.insertNode */
-  void insertNode(Node newNode);
-
-  /** @domName Range.intersectsNode */
-  bool intersectsNode(Node refNode);
-
-  /** @domName Range.isPointInRange */
-  bool isPointInRange(Node refNode, int offset);
-
-  /** @domName Range.selectNode */
-  void selectNode(Node refNode);
-
-  /** @domName Range.selectNodeContents */
-  void selectNodeContents(Node refNode);
-
-  /** @domName Range.setEnd */
-  void setEnd(Node refNode, int offset);
-
-  /** @domName Range.setEndAfter */
-  void setEndAfter(Node refNode);
-
-  /** @domName Range.setEndBefore */
-  void setEndBefore(Node refNode);
-
-  /** @domName Range.setStart */
-  void setStart(Node refNode, int offset);
-
-  /** @domName Range.setStartAfter */
-  void setStartAfter(Node refNode);
-
-  /** @domName Range.setStartBefore */
-  void setStartBefore(Node refNode);
-
-  /** @domName Range.surroundContents */
-  void surroundContents(Node newParent);
-
-  /** @domName Range.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName RangeException
-abstract class RangeException {
-
-  static const int BAD_BOUNDARYPOINTS_ERR = 1;
-
-  static const int INVALID_NODE_TYPE_ERR = 2;
-
-  /** @domName RangeException.code */
-  int get code;
-
-  /** @domName RangeException.message */
-  String get message;
-
-  /** @domName RangeException.name */
-  String get name;
-
-  /** @domName RangeException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RangeExceptionImpl extends NativeFieldWrapperClass1 implements RangeException {
-
-  int get code native "RangeException_code_Getter";
-
-  String get message native "RangeException_message_Getter";
-
-  String get name native "RangeException_name_Getter";
-
-  String toString() native "RangeException_toString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _RangeImpl extends NativeFieldWrapperClass1 implements Range {
-
   bool get collapsed native "Range_collapsed_Getter";
 
+
+  /** @domName Range.commonAncestorContainer */
   Node get commonAncestorContainer native "Range_commonAncestorContainer_Getter";
 
+
+  /** @domName Range.endContainer */
   Node get endContainer native "Range_endContainer_Getter";
 
+
+  /** @domName Range.endOffset */
   int get endOffset native "Range_endOffset_Getter";
 
+
+  /** @domName Range.startContainer */
   Node get startContainer native "Range_startContainer_Getter";
 
+
+  /** @domName Range.startOffset */
   int get startOffset native "Range_startOffset_Getter";
 
+
+  /** @domName Range.cloneContents */
   DocumentFragment cloneContents() native "Range_cloneContents_Callback";
 
+
+  /** @domName Range.cloneRange */
   Range cloneRange() native "Range_cloneRange_Callback";
 
+
+  /** @domName Range.collapse */
   void collapse(bool toStart) native "Range_collapse_Callback";
 
+
+  /** @domName Range.compareNode */
   int compareNode(Node refNode) native "Range_compareNode_Callback";
 
+
+  /** @domName Range.comparePoint */
   int comparePoint(Node refNode, int offset) native "Range_comparePoint_Callback";
 
+
+  /** @domName Range.createContextualFragment */
   DocumentFragment createContextualFragment(String html) native "Range_createContextualFragment_Callback";
 
+
+  /** @domName Range.deleteContents */
   void deleteContents() native "Range_deleteContents_Callback";
 
+
+  /** @domName Range.detach */
   void detach() native "Range_detach_Callback";
 
+
+  /** @domName Range.expand */
   void expand(String unit) native "Range_expand_Callback";
 
+
+  /** @domName Range.extractContents */
   DocumentFragment extractContents() native "Range_extractContents_Callback";
 
+
+  /** @domName Range.getBoundingClientRect */
   ClientRect getBoundingClientRect() native "Range_getBoundingClientRect_Callback";
 
+
+  /** @domName Range.getClientRects */
   List<ClientRect> getClientRects() native "Range_getClientRects_Callback";
 
+
+  /** @domName Range.insertNode */
   void insertNode(Node newNode) native "Range_insertNode_Callback";
 
+
+  /** @domName Range.intersectsNode */
   bool intersectsNode(Node refNode) native "Range_intersectsNode_Callback";
 
+
+  /** @domName Range.isPointInRange */
   bool isPointInRange(Node refNode, int offset) native "Range_isPointInRange_Callback";
 
+
+  /** @domName Range.selectNode */
   void selectNode(Node refNode) native "Range_selectNode_Callback";
 
+
+  /** @domName Range.selectNodeContents */
   void selectNodeContents(Node refNode) native "Range_selectNodeContents_Callback";
 
+
+  /** @domName Range.setEnd */
   void setEnd(Node refNode, int offset) native "Range_setEnd_Callback";
 
+
+  /** @domName Range.setEndAfter */
   void setEndAfter(Node refNode) native "Range_setEndAfter_Callback";
 
+
+  /** @domName Range.setEndBefore */
   void setEndBefore(Node refNode) native "Range_setEndBefore_Callback";
 
+
+  /** @domName Range.setStart */
   void setStart(Node refNode, int offset) native "Range_setStart_Callback";
 
+
+  /** @domName Range.setStartAfter */
   void setStartAfter(Node refNode) native "Range_setStartAfter_Callback";
 
+
+  /** @domName Range.setStartBefore */
   void setStartBefore(Node refNode) native "Range_setStartBefore_Callback";
 
+
+  /** @domName Range.surroundContents */
   void surroundContents(Node newParent) native "Range_surroundContents_Callback";
 
+
+  /** @domName Range.toString */
   String toString() native "Range_toString_Callback";
 
 }
@@ -26347,20 +20037,30 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName Rect
-abstract class Rect {
+/// @domName RangeException
+class RangeException extends NativeFieldWrapperClass1 {
+  RangeException.internal();
 
-  /** @domName Rect.bottom */
-  CSSPrimitiveValue get bottom;
+  static const int BAD_BOUNDARYPOINTS_ERR = 1;
 
-  /** @domName Rect.left */
-  CSSPrimitiveValue get left;
+  static const int INVALID_NODE_TYPE_ERR = 2;
 
-  /** @domName Rect.right */
-  CSSPrimitiveValue get right;
 
-  /** @domName Rect.top */
-  CSSPrimitiveValue get top;
+  /** @domName RangeException.code */
+  int get code native "RangeException_code_Getter";
+
+
+  /** @domName RangeException.message */
+  String get message native "RangeException_message_Getter";
+
+
+  /** @domName RangeException.name */
+  String get name native "RangeException_name_Getter";
+
+
+  /** @domName RangeException.toString */
+  String toString() native "RangeException_toString_Callback";
+
 }
 // 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
@@ -26368,14 +20068,24 @@
 
 // WARNING: Do not edit - generated code.
 
-class _RectImpl extends NativeFieldWrapperClass1 implements Rect {
+/// @domName Rect
+class Rect extends NativeFieldWrapperClass1 {
+  Rect.internal();
 
+
+  /** @domName Rect.bottom */
   CSSPrimitiveValue get bottom native "Rect_bottom_Getter";
 
+
+  /** @domName Rect.left */
   CSSPrimitiveValue get left native "Rect_left_Getter";
 
+
+  /** @domName Rect.right */
   CSSPrimitiveValue get right native "Rect_right_Getter";
 
+
+  /** @domName Rect.top */
   CSSPrimitiveValue get top native "Rect_top_Getter";
 
 }
@@ -26394,7 +20104,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SQLError
-abstract class SQLError {
+class SQLError extends NativeFieldWrapperClass1 {
+  SQLError.internal();
 
   static const int CONSTRAINT_ERR = 6;
 
@@ -26412,22 +20123,12 @@
 
   static const int VERSION_ERR = 2;
 
+
   /** @domName SQLError.code */
-  int get code;
-
-  /** @domName SQLError.message */
-  String get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SQLErrorImpl extends NativeFieldWrapperClass1 implements SQLError {
-
   int get code native "SQLError_code_Getter";
 
+
+  /** @domName SQLError.message */
   String get message native "SQLError_message_Getter";
 
 }
@@ -26438,7 +20139,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SQLException
-abstract class SQLException {
+class SQLException extends NativeFieldWrapperClass1 {
+  SQLException.internal();
 
   static const int CONSTRAINT_ERR = 6;
 
@@ -26456,22 +20158,12 @@
 
   static const int VERSION_ERR = 2;
 
+
   /** @domName SQLException.code */
-  int get code;
-
-  /** @domName SQLException.message */
-  String get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SQLExceptionImpl extends NativeFieldWrapperClass1 implements SQLException {
-
   int get code native "SQLException_code_Getter";
 
+
+  /** @domName SQLException.message */
   String get message native "SQLException_message_Getter";
 
 }
@@ -26482,29 +20174,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SQLResultSet
-abstract class SQLResultSet {
+class SQLResultSet extends NativeFieldWrapperClass1 {
+  SQLResultSet.internal();
+
 
   /** @domName SQLResultSet.insertId */
-  int get insertId;
-
-  /** @domName SQLResultSet.rows */
-  SQLResultSetRowList get rows;
-
-  /** @domName SQLResultSet.rowsAffected */
-  int get rowsAffected;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SQLResultSetImpl extends NativeFieldWrapperClass1 implements SQLResultSet {
-
   int get insertId native "SQLResultSet_insertId_Getter";
 
+
+  /** @domName SQLResultSet.rows */
   SQLResultSetRowList get rows native "SQLResultSet_rows_Getter";
 
+
+  /** @domName SQLResultSet.rowsAffected */
   int get rowsAffected native "SQLResultSet_rowsAffected_Getter";
 
 }
@@ -26515,22 +20197,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SQLResultSetRowList
-abstract class SQLResultSetRowList implements List<Map> {
+class SQLResultSetRowList extends NativeFieldWrapperClass1 implements List<Map> {
+  SQLResultSetRowList.internal();
+
 
   /** @domName SQLResultSetRowList.length */
-  int get length;
-
-  /** @domName SQLResultSetRowList.item */
-  Map item(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SQLResultSetRowListImpl extends NativeFieldWrapperClass1 implements SQLResultSetRowList {
-
   int get length native "SQLResultSetRowList_length_Getter";
 
   Map operator[](int index) native "SQLResultSetRowList_item_Callback";
@@ -26616,6 +20287,8 @@
 
   // -- end List<Map> mixins.
 
+
+  /** @domName SQLResultSetRowList.item */
   Map item(int index) native "SQLResultSetRowList_item_Callback";
 
 }
@@ -26642,10 +20315,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SQLTransaction
-abstract class SQLTransaction {
+class SQLTransaction extends NativeFieldWrapperClass1 {
+  SQLTransaction.internal();
+
 
   /** @domName SQLTransaction.executeSql */
-  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]);
+  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]) native "SQLTransaction_executeSql_Callback";
+
 }
 // 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
@@ -26669,22 +20345,14 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SQLTransactionImpl extends NativeFieldWrapperClass1 implements SQLTransaction {
-
-  void executeSql(String sqlStatement, List arguments, [SQLStatementCallback callback, SQLStatementErrorCallback errorCallback]) native "SQLTransaction_executeSql_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName SQLTransactionSync
-abstract class SQLTransactionSync {
+class SQLTransactionSync extends NativeFieldWrapperClass1 {
+  SQLTransactionSync.internal();
+
 
   /** @domName SQLTransactionSync.executeSql */
-  SQLResultSet executeSql(String sqlStatement, List arguments);
+  SQLResultSet executeSql(String sqlStatement, List arguments) native "SQLTransactionSync_executeSql_Callback";
+
 }
 // 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
@@ -26700,71 +20368,92 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SQLTransactionSyncImpl extends NativeFieldWrapperClass1 implements SQLTransactionSync {
-
-  SQLResultSet executeSql(String sqlStatement, List arguments) native "SQLTransactionSync_executeSql_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName SVGAElement
-abstract class SVGAElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGAElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
+  SVGAElement.internal(): super.internal();
+
 
   /** @domName SVGAElement.target */
-  SVGAnimatedString get target;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAElementImpl extends _SVGElementImpl implements SVGAElement {
-
   SVGAnimatedString get target native "SVGAElement_target_Getter";
 
+
+  /** @domName SVGAElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGAElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGAElement.xmllang */
   String get xmllang native "SVGAElement_xmllang_Getter";
 
+
+  /** @domName SVGAElement.xmllang */
   void set xmllang(String value) native "SVGAElement_xmllang_Setter";
 
+
+  /** @domName SVGAElement.xmlspace */
   String get xmlspace native "SVGAElement_xmlspace_Getter";
 
+
+  /** @domName SVGAElement.xmlspace */
   void set xmlspace(String value) native "SVGAElement_xmlspace_Setter";
 
+
+  /** @domName SVGAElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGAElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGAElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGAElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGAElement.getBBox */
   SVGRect getBBox() native "SVGAElement_getBBox_Callback";
 
+
+  /** @domName SVGAElement.getCTM */
   SVGMatrix getCTM() native "SVGAElement_getCTM_Callback";
 
+
+  /** @domName SVGAElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGAElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGAElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGAElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGAElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGAElement_className_Getter";
 
+
+  /** @domName SVGAElement.style */
   CSSStyleDeclaration get style native "SVGAElement_style_Getter";
 
+
+  /** @domName SVGAElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGAElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGAElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGAElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGAElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGAElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGAElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGAElement_systemLanguage_Getter";
 
+
+  /** @domName SVGAElement.hasExtension */
   bool hasExtension(String extension) native "SVGAElement_hasExtension_Callback";
 
+
+  /** @domName SVGAElement.transform */
   SVGAnimatedTransformList get transform native "SVGAElement_transform_Getter";
 
+
+  /** @domName SVGAElement.href */
   SVGAnimatedString get href native "SVGAElement_href_Getter";
 
 }
@@ -26775,15 +20464,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAltGlyphDefElement
-abstract class SVGAltGlyphDefElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAltGlyphDefElementImpl extends _SVGElementImpl implements SVGAltGlyphDefElement {
+class SVGAltGlyphDefElement extends SVGElement {
+  SVGAltGlyphDefElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26793,30 +20475,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAltGlyphElement
-abstract class SVGAltGlyphElement implements SVGTextPositioningElement, SVGURIReference {
+class SVGAltGlyphElement extends SVGTextPositioningElement implements SVGURIReference {
+  SVGAltGlyphElement.internal(): super.internal();
+
 
   /** @domName SVGAltGlyphElement.format */
-  String format;
-
-  /** @domName SVGAltGlyphElement.glyphRef */
-  String glyphRef;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAltGlyphElementImpl extends _SVGTextPositioningElementImpl implements SVGAltGlyphElement {
-
   String get format native "SVGAltGlyphElement_format_Getter";
 
+
+  /** @domName SVGAltGlyphElement.format */
   void set format(String value) native "SVGAltGlyphElement_format_Setter";
 
+
+  /** @domName SVGAltGlyphElement.glyphRef */
   String get glyphRef native "SVGAltGlyphElement_glyphRef_Getter";
 
+
+  /** @domName SVGAltGlyphElement.glyphRef */
   void set glyphRef(String value) native "SVGAltGlyphElement_glyphRef_Setter";
 
+
+  /** @domName SVGAltGlyphElement.href */
   SVGAnimatedString get href native "SVGAltGlyphElement_href_Getter";
 
 }
@@ -26827,15 +20506,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAltGlyphItemElement
-abstract class SVGAltGlyphItemElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAltGlyphItemElementImpl extends _SVGElementImpl implements SVGAltGlyphItemElement {
+class SVGAltGlyphItemElement extends SVGElement {
+  SVGAltGlyphItemElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26845,7 +20517,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAngle
-abstract class SVGAngle {
+class SVGAngle extends NativeFieldWrapperClass1 {
+  SVGAngle.internal();
 
   static const int SVG_ANGLETYPE_DEG = 2;
 
@@ -26857,48 +20530,40 @@
 
   static const int SVG_ANGLETYPE_UNSPECIFIED = 1;
 
+
   /** @domName SVGAngle.unitType */
-  int get unitType;
-
-  /** @domName SVGAngle.value */
-  num value;
-
-  /** @domName SVGAngle.valueAsString */
-  String valueAsString;
-
-  /** @domName SVGAngle.valueInSpecifiedUnits */
-  num valueInSpecifiedUnits;
-
-  /** @domName SVGAngle.convertToSpecifiedUnits */
-  void convertToSpecifiedUnits(int unitType);
-
-  /** @domName SVGAngle.newValueSpecifiedUnits */
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAngleImpl extends NativeFieldWrapperClass1 implements SVGAngle {
-
   int get unitType native "SVGAngle_unitType_Getter";
 
+
+  /** @domName SVGAngle.value */
   num get value native "SVGAngle_value_Getter";
 
+
+  /** @domName SVGAngle.value */
   void set value(num value) native "SVGAngle_value_Setter";
 
+
+  /** @domName SVGAngle.valueAsString */
   String get valueAsString native "SVGAngle_valueAsString_Getter";
 
+
+  /** @domName SVGAngle.valueAsString */
   void set valueAsString(String value) native "SVGAngle_valueAsString_Setter";
 
+
+  /** @domName SVGAngle.valueInSpecifiedUnits */
   num get valueInSpecifiedUnits native "SVGAngle_valueInSpecifiedUnits_Getter";
 
+
+  /** @domName SVGAngle.valueInSpecifiedUnits */
   void set valueInSpecifiedUnits(num value) native "SVGAngle_valueInSpecifiedUnits_Setter";
 
+
+  /** @domName SVGAngle.convertToSpecifiedUnits */
   void convertToSpecifiedUnits(int unitType) native "SVGAngle_convertToSpecifiedUnits_Callback";
 
+
+  /** @domName SVGAngle.newValueSpecifiedUnits */
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native "SVGAngle_newValueSpecifiedUnits_Callback";
 
 }
@@ -26909,15 +20574,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimateColorElement
-abstract class SVGAnimateColorElement implements SVGAnimationElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimateColorElementImpl extends _SVGAnimationElementImpl implements SVGAnimateColorElement {
+class SVGAnimateColorElement extends SVGAnimationElement {
+  SVGAnimateColorElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26927,15 +20585,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimateElement
-abstract class SVGAnimateElement implements SVGAnimationElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimateElementImpl extends _SVGAnimationElementImpl implements SVGAnimateElement {
+class SVGAnimateElement extends SVGAnimationElement {
+  SVGAnimateElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26945,15 +20596,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimateMotionElement
-abstract class SVGAnimateMotionElement implements SVGAnimationElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimateMotionElementImpl extends _SVGAnimationElementImpl implements SVGAnimateMotionElement {
+class SVGAnimateMotionElement extends SVGAnimationElement {
+  SVGAnimateMotionElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26963,15 +20607,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimateTransformElement
-abstract class SVGAnimateTransformElement implements SVGAnimationElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimateTransformElementImpl extends _SVGAnimationElementImpl implements SVGAnimateTransformElement {
+class SVGAnimateTransformElement extends SVGAnimationElement {
+  SVGAnimateTransformElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -26981,24 +20618,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedAngle
-abstract class SVGAnimatedAngle {
+class SVGAnimatedAngle extends NativeFieldWrapperClass1 {
+  SVGAnimatedAngle.internal();
+
 
   /** @domName SVGAnimatedAngle.animVal */
-  SVGAngle get animVal;
-
-  /** @domName SVGAnimatedAngle.baseVal */
-  SVGAngle get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedAngleImpl extends NativeFieldWrapperClass1 implements SVGAnimatedAngle {
-
   SVGAngle get animVal native "SVGAnimatedAngle_animVal_Getter";
 
+
+  /** @domName SVGAnimatedAngle.baseVal */
   SVGAngle get baseVal native "SVGAnimatedAngle_baseVal_Getter";
 
 }
@@ -27009,26 +20637,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedBoolean
-abstract class SVGAnimatedBoolean {
+class SVGAnimatedBoolean extends NativeFieldWrapperClass1 {
+  SVGAnimatedBoolean.internal();
+
 
   /** @domName SVGAnimatedBoolean.animVal */
-  bool get animVal;
-
-  /** @domName SVGAnimatedBoolean.baseVal */
-  bool baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedBooleanImpl extends NativeFieldWrapperClass1 implements SVGAnimatedBoolean {
-
   bool get animVal native "SVGAnimatedBoolean_animVal_Getter";
 
+
+  /** @domName SVGAnimatedBoolean.baseVal */
   bool get baseVal native "SVGAnimatedBoolean_baseVal_Getter";
 
+
+  /** @domName SVGAnimatedBoolean.baseVal */
   void set baseVal(bool value) native "SVGAnimatedBoolean_baseVal_Setter";
 
 }
@@ -27039,26 +20660,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedEnumeration
-abstract class SVGAnimatedEnumeration {
+class SVGAnimatedEnumeration extends NativeFieldWrapperClass1 {
+  SVGAnimatedEnumeration.internal();
+
 
   /** @domName SVGAnimatedEnumeration.animVal */
-  int get animVal;
-
-  /** @domName SVGAnimatedEnumeration.baseVal */
-  int baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedEnumerationImpl extends NativeFieldWrapperClass1 implements SVGAnimatedEnumeration {
-
   int get animVal native "SVGAnimatedEnumeration_animVal_Getter";
 
+
+  /** @domName SVGAnimatedEnumeration.baseVal */
   int get baseVal native "SVGAnimatedEnumeration_baseVal_Getter";
 
+
+  /** @domName SVGAnimatedEnumeration.baseVal */
   void set baseVal(int value) native "SVGAnimatedEnumeration_baseVal_Setter";
 
 }
@@ -27069,26 +20683,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedInteger
-abstract class SVGAnimatedInteger {
+class SVGAnimatedInteger extends NativeFieldWrapperClass1 {
+  SVGAnimatedInteger.internal();
+
 
   /** @domName SVGAnimatedInteger.animVal */
-  int get animVal;
-
-  /** @domName SVGAnimatedInteger.baseVal */
-  int baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedIntegerImpl extends NativeFieldWrapperClass1 implements SVGAnimatedInteger {
-
   int get animVal native "SVGAnimatedInteger_animVal_Getter";
 
+
+  /** @domName SVGAnimatedInteger.baseVal */
   int get baseVal native "SVGAnimatedInteger_baseVal_Getter";
 
+
+  /** @domName SVGAnimatedInteger.baseVal */
   void set baseVal(int value) native "SVGAnimatedInteger_baseVal_Setter";
 
 }
@@ -27099,24 +20706,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedLength
-abstract class SVGAnimatedLength {
+class SVGAnimatedLength extends NativeFieldWrapperClass1 {
+  SVGAnimatedLength.internal();
+
 
   /** @domName SVGAnimatedLength.animVal */
-  SVGLength get animVal;
-
-  /** @domName SVGAnimatedLength.baseVal */
-  SVGLength get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedLengthImpl extends NativeFieldWrapperClass1 implements SVGAnimatedLength {
-
   SVGLength get animVal native "SVGAnimatedLength_animVal_Getter";
 
+
+  /** @domName SVGAnimatedLength.baseVal */
   SVGLength get baseVal native "SVGAnimatedLength_baseVal_Getter";
 
 }
@@ -27127,24 +20725,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedLengthList
-abstract class SVGAnimatedLengthList implements List<SVGAnimatedLength> {
+class SVGAnimatedLengthList extends NativeFieldWrapperClass1 implements List<SVGAnimatedLength> {
+  SVGAnimatedLengthList.internal();
+
 
   /** @domName SVGAnimatedLengthList.animVal */
-  SVGLengthList get animVal;
-
-  /** @domName SVGAnimatedLengthList.baseVal */
-  SVGLengthList get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedLengthListImpl extends NativeFieldWrapperClass1 implements SVGAnimatedLengthList {
-
   SVGLengthList get animVal native "SVGAnimatedLengthList_animVal_Getter";
 
+
+  /** @domName SVGAnimatedLengthList.baseVal */
   SVGLengthList get baseVal native "SVGAnimatedLengthList_baseVal_Getter";
 
   SVGAnimatedLength operator[](int index) native "SVGAnimatedLengthList_item_Callback";
@@ -27238,26 +20827,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedNumber
-abstract class SVGAnimatedNumber {
+class SVGAnimatedNumber extends NativeFieldWrapperClass1 {
+  SVGAnimatedNumber.internal();
+
 
   /** @domName SVGAnimatedNumber.animVal */
-  num get animVal;
-
-  /** @domName SVGAnimatedNumber.baseVal */
-  num baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedNumberImpl extends NativeFieldWrapperClass1 implements SVGAnimatedNumber {
-
   num get animVal native "SVGAnimatedNumber_animVal_Getter";
 
+
+  /** @domName SVGAnimatedNumber.baseVal */
   num get baseVal native "SVGAnimatedNumber_baseVal_Getter";
 
+
+  /** @domName SVGAnimatedNumber.baseVal */
   void set baseVal(num value) native "SVGAnimatedNumber_baseVal_Setter";
 
 }
@@ -27268,24 +20850,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedNumberList
-abstract class SVGAnimatedNumberList implements List<SVGAnimatedNumber> {
+class SVGAnimatedNumberList extends NativeFieldWrapperClass1 implements List<SVGAnimatedNumber> {
+  SVGAnimatedNumberList.internal();
+
 
   /** @domName SVGAnimatedNumberList.animVal */
-  SVGNumberList get animVal;
-
-  /** @domName SVGAnimatedNumberList.baseVal */
-  SVGNumberList get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedNumberListImpl extends NativeFieldWrapperClass1 implements SVGAnimatedNumberList {
-
   SVGNumberList get animVal native "SVGAnimatedNumberList_animVal_Getter";
 
+
+  /** @domName SVGAnimatedNumberList.baseVal */
   SVGNumberList get baseVal native "SVGAnimatedNumberList_baseVal_Getter";
 
   SVGAnimatedNumber operator[](int index) native "SVGAnimatedNumberList_item_Callback";
@@ -27379,24 +20952,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedPreserveAspectRatio
-abstract class SVGAnimatedPreserveAspectRatio {
+class SVGAnimatedPreserveAspectRatio extends NativeFieldWrapperClass1 {
+  SVGAnimatedPreserveAspectRatio.internal();
+
 
   /** @domName SVGAnimatedPreserveAspectRatio.animVal */
-  SVGPreserveAspectRatio get animVal;
-
-  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
-  SVGPreserveAspectRatio get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedPreserveAspectRatioImpl extends NativeFieldWrapperClass1 implements SVGAnimatedPreserveAspectRatio {
-
   SVGPreserveAspectRatio get animVal native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
 
+
+  /** @domName SVGAnimatedPreserveAspectRatio.baseVal */
   SVGPreserveAspectRatio get baseVal native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
 
 }
@@ -27407,24 +20971,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedRect
-abstract class SVGAnimatedRect {
+class SVGAnimatedRect extends NativeFieldWrapperClass1 {
+  SVGAnimatedRect.internal();
+
 
   /** @domName SVGAnimatedRect.animVal */
-  SVGRect get animVal;
-
-  /** @domName SVGAnimatedRect.baseVal */
-  SVGRect get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedRectImpl extends NativeFieldWrapperClass1 implements SVGAnimatedRect {
-
   SVGRect get animVal native "SVGAnimatedRect_animVal_Getter";
 
+
+  /** @domName SVGAnimatedRect.baseVal */
   SVGRect get baseVal native "SVGAnimatedRect_baseVal_Getter";
 
 }
@@ -27435,26 +20990,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedString
-abstract class SVGAnimatedString {
+class SVGAnimatedString extends NativeFieldWrapperClass1 {
+  SVGAnimatedString.internal();
+
 
   /** @domName SVGAnimatedString.animVal */
-  String get animVal;
-
-  /** @domName SVGAnimatedString.baseVal */
-  String baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedStringImpl extends NativeFieldWrapperClass1 implements SVGAnimatedString {
-
   String get animVal native "SVGAnimatedString_animVal_Getter";
 
+
+  /** @domName SVGAnimatedString.baseVal */
   String get baseVal native "SVGAnimatedString_baseVal_Getter";
 
+
+  /** @domName SVGAnimatedString.baseVal */
   void set baseVal(String value) native "SVGAnimatedString_baseVal_Setter";
 
 }
@@ -27465,24 +21013,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimatedTransformList
-abstract class SVGAnimatedTransformList implements List<SVGAnimateTransformElement> {
+class SVGAnimatedTransformList extends NativeFieldWrapperClass1 implements List<SVGAnimateTransformElement> {
+  SVGAnimatedTransformList.internal();
+
 
   /** @domName SVGAnimatedTransformList.animVal */
-  SVGTransformList get animVal;
-
-  /** @domName SVGAnimatedTransformList.baseVal */
-  SVGTransformList get baseVal;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimatedTransformListImpl extends NativeFieldWrapperClass1 implements SVGAnimatedTransformList {
-
   SVGTransformList get animVal native "SVGAnimatedTransformList_animVal_Getter";
 
+
+  /** @domName SVGAnimatedTransformList.baseVal */
   SVGTransformList get baseVal native "SVGAnimatedTransformList_baseVal_Getter";
 
   SVGAnimateTransformElement operator[](int index) native "SVGAnimatedTransformList_item_Callback";
@@ -27576,52 +21115,59 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGAnimationElement
-abstract class SVGAnimationElement implements SVGElement, SVGTests, SVGExternalResourcesRequired, ElementTimeControl {
+class SVGAnimationElement extends SVGElement implements ElementTimeControl, SVGTests, SVGExternalResourcesRequired {
+  SVGAnimationElement.internal(): super.internal();
+
 
   /** @domName SVGAnimationElement.targetElement */
-  SVGElement get targetElement;
-
-  /** @domName SVGAnimationElement.getCurrentTime */
-  num getCurrentTime();
-
-  /** @domName SVGAnimationElement.getSimpleDuration */
-  num getSimpleDuration();
-
-  /** @domName SVGAnimationElement.getStartTime */
-  num getStartTime();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGAnimationElementImpl extends _SVGElementImpl implements SVGAnimationElement {
-
   SVGElement get targetElement native "SVGAnimationElement_targetElement_Getter";
 
+
+  /** @domName SVGAnimationElement.getCurrentTime */
   num getCurrentTime() native "SVGAnimationElement_getCurrentTime_Callback";
 
+
+  /** @domName SVGAnimationElement.getSimpleDuration */
   num getSimpleDuration() native "SVGAnimationElement_getSimpleDuration_Callback";
 
+
+  /** @domName SVGAnimationElement.getStartTime */
   num getStartTime() native "SVGAnimationElement_getStartTime_Callback";
 
+
+  /** @domName SVGAnimationElement.beginElement */
   void beginElement() native "SVGAnimationElement_beginElement_Callback";
 
+
+  /** @domName SVGAnimationElement.beginElementAt */
   void beginElementAt(num offset) native "SVGAnimationElement_beginElementAt_Callback";
 
+
+  /** @domName SVGAnimationElement.endElement */
   void endElement() native "SVGAnimationElement_endElement_Callback";
 
+
+  /** @domName SVGAnimationElement.endElementAt */
   void endElementAt(num offset) native "SVGAnimationElement_endElementAt_Callback";
 
+
+  /** @domName SVGAnimationElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGAnimationElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGAnimationElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGAnimationElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGAnimationElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGAnimationElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGAnimationElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGAnimationElement_systemLanguage_Getter";
 
+
+  /** @domName SVGAnimationElement.hasExtension */
   bool hasExtension(String extension) native "SVGAnimationElement_hasExtension_Callback";
 
 }
@@ -27632,67 +21178,95 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGCircleElement
-abstract class SVGCircleElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGCircleElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGCircleElement.internal(): super.internal();
+
 
   /** @domName SVGCircleElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGCircleElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGCircleElement.r */
-  SVGAnimatedLength get r;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGCircleElementImpl extends _SVGElementImpl implements SVGCircleElement {
-
   SVGAnimatedLength get cx native "SVGCircleElement_cx_Getter";
 
+
+  /** @domName SVGCircleElement.cy */
   SVGAnimatedLength get cy native "SVGCircleElement_cy_Getter";
 
+
+  /** @domName SVGCircleElement.r */
   SVGAnimatedLength get r native "SVGCircleElement_r_Getter";
 
+
+  /** @domName SVGCircleElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGCircleElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGCircleElement.xmllang */
   String get xmllang native "SVGCircleElement_xmllang_Getter";
 
+
+  /** @domName SVGCircleElement.xmllang */
   void set xmllang(String value) native "SVGCircleElement_xmllang_Setter";
 
+
+  /** @domName SVGCircleElement.xmlspace */
   String get xmlspace native "SVGCircleElement_xmlspace_Getter";
 
+
+  /** @domName SVGCircleElement.xmlspace */
   void set xmlspace(String value) native "SVGCircleElement_xmlspace_Setter";
 
+
+  /** @domName SVGCircleElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGCircleElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGCircleElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGCircleElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGCircleElement.getBBox */
   SVGRect getBBox() native "SVGCircleElement_getBBox_Callback";
 
+
+  /** @domName SVGCircleElement.getCTM */
   SVGMatrix getCTM() native "SVGCircleElement_getCTM_Callback";
 
+
+  /** @domName SVGCircleElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGCircleElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGCircleElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGCircleElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGCircleElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGCircleElement_className_Getter";
 
+
+  /** @domName SVGCircleElement.style */
   CSSStyleDeclaration get style native "SVGCircleElement_style_Getter";
 
+
+  /** @domName SVGCircleElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGCircleElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGCircleElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGCircleElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGCircleElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGCircleElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGCircleElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGCircleElement_systemLanguage_Getter";
 
+
+  /** @domName SVGCircleElement.hasExtension */
   bool hasExtension(String extension) native "SVGCircleElement_hasExtension_Callback";
 
+
+  /** @domName SVGCircleElement.transform */
   SVGAnimatedTransformList get transform native "SVGCircleElement_transform_Getter";
 
 }
@@ -27703,57 +21277,87 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGClipPathElement
-abstract class SVGClipPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGClipPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGClipPathElement.internal(): super.internal();
+
 
   /** @domName SVGClipPathElement.clipPathUnits */
-  SVGAnimatedEnumeration get clipPathUnits;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGClipPathElementImpl extends _SVGElementImpl implements SVGClipPathElement {
-
   SVGAnimatedEnumeration get clipPathUnits native "SVGClipPathElement_clipPathUnits_Getter";
 
+
+  /** @domName SVGClipPathElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGClipPathElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGClipPathElement.xmllang */
   String get xmllang native "SVGClipPathElement_xmllang_Getter";
 
+
+  /** @domName SVGClipPathElement.xmllang */
   void set xmllang(String value) native "SVGClipPathElement_xmllang_Setter";
 
+
+  /** @domName SVGClipPathElement.xmlspace */
   String get xmlspace native "SVGClipPathElement_xmlspace_Getter";
 
+
+  /** @domName SVGClipPathElement.xmlspace */
   void set xmlspace(String value) native "SVGClipPathElement_xmlspace_Setter";
 
+
+  /** @domName SVGClipPathElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGClipPathElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGClipPathElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGClipPathElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGClipPathElement.getBBox */
   SVGRect getBBox() native "SVGClipPathElement_getBBox_Callback";
 
+
+  /** @domName SVGClipPathElement.getCTM */
   SVGMatrix getCTM() native "SVGClipPathElement_getCTM_Callback";
 
+
+  /** @domName SVGClipPathElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGClipPathElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGClipPathElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGClipPathElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGClipPathElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGClipPathElement_className_Getter";
 
+
+  /** @domName SVGClipPathElement.style */
   CSSStyleDeclaration get style native "SVGClipPathElement_style_Getter";
 
+
+  /** @domName SVGClipPathElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGClipPathElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGClipPathElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGClipPathElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGClipPathElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGClipPathElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGClipPathElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGClipPathElement_systemLanguage_Getter";
 
+
+  /** @domName SVGClipPathElement.hasExtension */
   bool hasExtension(String extension) native "SVGClipPathElement_hasExtension_Callback";
 
+
+  /** @domName SVGClipPathElement.transform */
   SVGAnimatedTransformList get transform native "SVGClipPathElement_transform_Getter";
 
 }
@@ -27764,7 +21368,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGColor
-abstract class SVGColor implements CSSValue {
+class SVGColor extends CSSValue {
+  SVGColor.internal(): super.internal();
 
   static const int SVG_COLORTYPE_CURRENTCOLOR = 3;
 
@@ -27774,37 +21379,24 @@
 
   static const int SVG_COLORTYPE_UNKNOWN = 0;
 
+
   /** @domName SVGColor.colorType */
-  int get colorType;
-
-  /** @domName SVGColor.rgbColor */
-  RGBColor get rgbColor;
-
-  /** @domName SVGColor.setColor */
-  void setColor(int colorType, String rgbColor, String iccColor);
-
-  /** @domName SVGColor.setRGBColor */
-  void setRGBColor(String rgbColor);
-
-  /** @domName SVGColor.setRGBColorICCColor */
-  void setRGBColorICCColor(String rgbColor, String iccColor);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGColorImpl extends _CSSValueImpl implements SVGColor {
-
   int get colorType native "SVGColor_colorType_Getter";
 
+
+  /** @domName SVGColor.rgbColor */
   RGBColor get rgbColor native "SVGColor_rgbColor_Getter";
 
+
+  /** @domName SVGColor.setColor */
   void setColor(int colorType, String rgbColor, String iccColor) native "SVGColor_setColor_Callback";
 
+
+  /** @domName SVGColor.setRGBColor */
   void setRGBColor(String rgbColor) native "SVGColor_setRGBColor_Callback";
 
+
+  /** @domName SVGColor.setRGBColorICCColor */
   void setRGBColorICCColor(String rgbColor, String iccColor) native "SVGColor_setRGBColorICCColor_Callback";
 
 }
@@ -27815,7 +21407,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGComponentTransferFunctionElement
-abstract class SVGComponentTransferFunctionElement implements SVGElement {
+class SVGComponentTransferFunctionElement extends SVGElement {
+  SVGComponentTransferFunctionElement.internal(): super.internal();
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
 
@@ -27829,47 +21422,32 @@
 
   static const int SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN = 0;
 
+
   /** @domName SVGComponentTransferFunctionElement.amplitude */
-  SVGAnimatedNumber get amplitude;
-
-  /** @domName SVGComponentTransferFunctionElement.exponent */
-  SVGAnimatedNumber get exponent;
-
-  /** @domName SVGComponentTransferFunctionElement.intercept */
-  SVGAnimatedNumber get intercept;
-
-  /** @domName SVGComponentTransferFunctionElement.offset */
-  SVGAnimatedNumber get offset;
-
-  /** @domName SVGComponentTransferFunctionElement.slope */
-  SVGAnimatedNumber get slope;
-
-  /** @domName SVGComponentTransferFunctionElement.tableValues */
-  SVGAnimatedNumberList get tableValues;
-
-  /** @domName SVGComponentTransferFunctionElement.type */
-  SVGAnimatedEnumeration get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGComponentTransferFunctionElementImpl extends _SVGElementImpl implements SVGComponentTransferFunctionElement {
-
   SVGAnimatedNumber get amplitude native "SVGComponentTransferFunctionElement_amplitude_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.exponent */
   SVGAnimatedNumber get exponent native "SVGComponentTransferFunctionElement_exponent_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.intercept */
   SVGAnimatedNumber get intercept native "SVGComponentTransferFunctionElement_intercept_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.offset */
   SVGAnimatedNumber get offset native "SVGComponentTransferFunctionElement_offset_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.slope */
   SVGAnimatedNumber get slope native "SVGComponentTransferFunctionElement_slope_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.tableValues */
   SVGAnimatedNumberList get tableValues native "SVGComponentTransferFunctionElement_tableValues_Getter";
 
+
+  /** @domName SVGComponentTransferFunctionElement.type */
   SVGAnimatedEnumeration get type native "SVGComponentTransferFunctionElement_type_Getter";
 
 }
@@ -27880,36 +21458,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGCursorElement
-abstract class SVGCursorElement implements SVGElement, SVGURIReference, SVGTests, SVGExternalResourcesRequired {
+class SVGCursorElement extends SVGElement implements SVGURIReference, SVGTests, SVGExternalResourcesRequired {
+  SVGCursorElement.internal(): super.internal();
+
 
   /** @domName SVGCursorElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGCursorElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGCursorElementImpl extends _SVGElementImpl implements SVGCursorElement {
-
   SVGAnimatedLength get x native "SVGCursorElement_x_Getter";
 
+
+  /** @domName SVGCursorElement.y */
   SVGAnimatedLength get y native "SVGCursorElement_y_Getter";
 
+
+  /** @domName SVGCursorElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGCursorElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGCursorElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGCursorElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGCursorElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGCursorElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGCursorElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGCursorElement_systemLanguage_Getter";
 
+
+  /** @domName SVGCursorElement.hasExtension */
   bool hasExtension(String extension) native "SVGCursorElement_hasExtension_Callback";
 
+
+  /** @domName SVGCursorElement.href */
   SVGAnimatedString get href native "SVGCursorElement_href_Getter";
 
 }
@@ -27920,52 +21501,83 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGDefsElement
-abstract class SVGDefsElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-// 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 SVGDefsElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGDefsElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGDefsElementImpl extends _SVGElementImpl implements SVGDefsElement {
-
+  /** @domName SVGDefsElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGDefsElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGDefsElement.xmllang */
   String get xmllang native "SVGDefsElement_xmllang_Getter";
 
+
+  /** @domName SVGDefsElement.xmllang */
   void set xmllang(String value) native "SVGDefsElement_xmllang_Setter";
 
+
+  /** @domName SVGDefsElement.xmlspace */
   String get xmlspace native "SVGDefsElement_xmlspace_Getter";
 
+
+  /** @domName SVGDefsElement.xmlspace */
   void set xmlspace(String value) native "SVGDefsElement_xmlspace_Setter";
 
+
+  /** @domName SVGDefsElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGDefsElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGDefsElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGDefsElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGDefsElement.getBBox */
   SVGRect getBBox() native "SVGDefsElement_getBBox_Callback";
 
+
+  /** @domName SVGDefsElement.getCTM */
   SVGMatrix getCTM() native "SVGDefsElement_getCTM_Callback";
 
+
+  /** @domName SVGDefsElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGDefsElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGDefsElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGDefsElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGDefsElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGDefsElement_className_Getter";
 
+
+  /** @domName SVGDefsElement.style */
   CSSStyleDeclaration get style native "SVGDefsElement_style_Getter";
 
+
+  /** @domName SVGDefsElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGDefsElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGDefsElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGDefsElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGDefsElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGDefsElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGDefsElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGDefsElement_systemLanguage_Getter";
 
+
+  /** @domName SVGDefsElement.hasExtension */
   bool hasExtension(String extension) native "SVGDefsElement_hasExtension_Callback";
 
+
+  /** @domName SVGDefsElement.transform */
   SVGAnimatedTransformList get transform native "SVGDefsElement_transform_Getter";
 
 }
@@ -27976,28 +21588,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGDescElement
-abstract class SVGDescElement implements SVGElement, SVGLangSpace, SVGStylable {
-}
-// 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 SVGDescElement extends SVGElement implements SVGLangSpace, SVGStylable {
+  SVGDescElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGDescElementImpl extends _SVGElementImpl implements SVGDescElement {
-
+  /** @domName SVGDescElement.xmllang */
   String get xmllang native "SVGDescElement_xmllang_Getter";
 
+
+  /** @domName SVGDescElement.xmllang */
   void set xmllang(String value) native "SVGDescElement_xmllang_Setter";
 
+
+  /** @domName SVGDescElement.xmlspace */
   String get xmlspace native "SVGDescElement_xmlspace_Getter";
 
+
+  /** @domName SVGDescElement.xmlspace */
   void set xmlspace(String value) native "SVGDescElement_xmlspace_Setter";
 
+
+  /** @domName SVGDescElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGDescElement_className_Getter";
 
+
+  /** @domName SVGDescElement.style */
   CSSStyleDeclaration get style native "SVGDescElement_style_Getter";
 
+
+  /** @domName SVGDescElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGDescElement_getPresentationAttribute_Callback";
 
 }
@@ -28008,56 +21627,18 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGDocument
-abstract class SVGDocument implements Document {
+class SVGDocument extends Document {
+  SVGDocument.internal(): super.internal();
+
 
   /** @domName SVGDocument.rootElement */
-  SVGSVGElement get rootElement;
-
-  /** @domName SVGDocument.createEvent */
-  Event $dom_createEvent(String eventType);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGDocumentImpl extends _DocumentImpl implements SVGDocument {
-
   SVGSVGElement get rootElement native "SVGDocument_rootElement_Getter";
 
+
+  /** @domName SVGDocument.createEvent */
   Event $dom_createEvent(String eventType) native "SVGDocument_createEvent_Callback";
 
 }
-// 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.
-
-
-/// @domName SVGElement
-abstract class SVGElement implements Element {
-
-  factory SVGElement.tag(String tag) =>
-      _SVGElementFactoryProvider.createSVGElement_tag(tag);
-  factory SVGElement.svg(String svg) =>
-      _SVGElementFactoryProvider.createSVGElement_svg(svg);
-
-  SVGElement clone(bool deep);
-
-
-  /** @domName SVGElement.id */
-  String id;
-
-  /** @domName SVGElement.ownerSVGElement */
-  SVGSVGElement get ownerSVGElement;
-
-  /** @domName SVGElement.viewportElement */
-  SVGElement get viewportElement;
-
-  /** @domName SVGElement.xmlbase */
-  String xmlbase;
-
-}
 // 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.
@@ -28072,8 +21653,13 @@
   }
 }
 
-class _SVGElementImpl extends _ElementImpl implements SVGElement {
-  CSSClassSet get classes {
+class SVGElement extends Element {
+  factory SVGElement.tag(String tag) =>
+      _SVGElementFactoryProvider.createSVGElement_tag(tag);
+  factory SVGElement.svg(String svg) =>
+      _SVGElementFactoryProvider.createSVGElement_svg(svg);
+
+  CssClassSet get classes {
     if (_cssClassSet == null) {
       _cssClassSet = new _AttributeClassSet(_ptr);
     }
@@ -28110,17 +21696,30 @@
     this.elements = container.elements[0].elements;
   }
 
+  SVGElement.internal(): super.internal();
 
+
+  /** @domName SVGElement.id */
   String get id native "SVGElement_id_Getter";
 
+
+  /** @domName SVGElement.id */
   void set id(String value) native "SVGElement_id_Setter";
 
+
+  /** @domName SVGElement.ownerSVGElement */
   SVGSVGElement get ownerSVGElement native "SVGElement_ownerSVGElement_Getter";
 
+
+  /** @domName SVGElement.viewportElement */
   SVGElement get viewportElement native "SVGElement_viewportElement_Getter";
 
+
+  /** @domName SVGElement.xmlbase */
   String get xmlbase native "SVGElement_xmlbase_Getter";
 
+
+  /** @domName SVGElement.xmlbase */
   void set xmlbase(String value) native "SVGElement_xmlbase_Setter";
 
 }
@@ -28131,151 +21730,51 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGElementInstance
-abstract class SVGElementInstance implements EventTarget {
+class SVGElementInstance extends EventTarget {
+  SVGElementInstance.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  SVGElementInstanceEvents get on;
+  SVGElementInstanceEvents get on =>
+    new SVGElementInstanceEvents(this);
+
 
   /** @domName SVGElementInstance.childNodes */
-  List<SVGElementInstance> get childNodes;
-
-  /** @domName SVGElementInstance.correspondingElement */
-  SVGElement get correspondingElement;
-
-  /** @domName SVGElementInstance.correspondingUseElement */
-  SVGUseElement get correspondingUseElement;
-
-  /** @domName SVGElementInstance.firstChild */
-  SVGElementInstance get firstChild;
-
-  /** @domName SVGElementInstance.lastChild */
-  SVGElementInstance get lastChild;
-
-  /** @domName SVGElementInstance.nextSibling */
-  SVGElementInstance get nextSibling;
-
-  /** @domName SVGElementInstance.parentNode */
-  SVGElementInstance get parentNode;
-
-  /** @domName SVGElementInstance.previousSibling */
-  SVGElementInstance get previousSibling;
-}
-
-abstract class SVGElementInstanceEvents implements Events {
-
-  EventListenerList get abort;
-
-  EventListenerList get beforeCopy;
-
-  EventListenerList get beforeCut;
-
-  EventListenerList get beforePaste;
-
-  EventListenerList get blur;
-
-  EventListenerList get change;
-
-  EventListenerList get click;
-
-  EventListenerList get contextMenu;
-
-  EventListenerList get copy;
-
-  EventListenerList get cut;
-
-  EventListenerList get doubleClick;
-
-  EventListenerList get drag;
-
-  EventListenerList get dragEnd;
-
-  EventListenerList get dragEnter;
-
-  EventListenerList get dragLeave;
-
-  EventListenerList get dragOver;
-
-  EventListenerList get dragStart;
-
-  EventListenerList get drop;
-
-  EventListenerList get error;
-
-  EventListenerList get focus;
-
-  EventListenerList get input;
-
-  EventListenerList get keyDown;
-
-  EventListenerList get keyPress;
-
-  EventListenerList get keyUp;
-
-  EventListenerList get load;
-
-  EventListenerList get mouseDown;
-
-  EventListenerList get mouseMove;
-
-  EventListenerList get mouseOut;
-
-  EventListenerList get mouseOver;
-
-  EventListenerList get mouseUp;
-
-  EventListenerList get mouseWheel;
-
-  EventListenerList get paste;
-
-  EventListenerList get reset;
-
-  EventListenerList get resize;
-
-  EventListenerList get scroll;
-
-  EventListenerList get search;
-
-  EventListenerList get select;
-
-  EventListenerList get selectStart;
-
-  EventListenerList get submit;
-
-  EventListenerList get unload;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGElementInstanceImpl extends _EventTargetImpl implements SVGElementInstance {
-
-  _SVGElementInstanceEventsImpl get on =>
-    new _SVGElementInstanceEventsImpl(this);
-
   List<SVGElementInstance> get childNodes native "SVGElementInstance_childNodes_Getter";
 
+
+  /** @domName SVGElementInstance.correspondingElement */
   SVGElement get correspondingElement native "SVGElementInstance_correspondingElement_Getter";
 
+
+  /** @domName SVGElementInstance.correspondingUseElement */
   SVGUseElement get correspondingUseElement native "SVGElementInstance_correspondingUseElement_Getter";
 
+
+  /** @domName SVGElementInstance.firstChild */
   SVGElementInstance get firstChild native "SVGElementInstance_firstChild_Getter";
 
+
+  /** @domName SVGElementInstance.lastChild */
   SVGElementInstance get lastChild native "SVGElementInstance_lastChild_Getter";
 
+
+  /** @domName SVGElementInstance.nextSibling */
   SVGElementInstance get nextSibling native "SVGElementInstance_nextSibling_Getter";
 
+
+  /** @domName SVGElementInstance.parentNode */
   SVGElementInstance get parentNode native "SVGElementInstance_parentNode_Getter";
 
+
+  /** @domName SVGElementInstance.previousSibling */
   SVGElementInstance get previousSibling native "SVGElementInstance_previousSibling_Getter";
 
 }
 
-class _SVGElementInstanceEventsImpl extends _EventsImpl implements SVGElementInstanceEvents {
-  _SVGElementInstanceEventsImpl(_ptr) : super(_ptr);
+class SVGElementInstanceEvents extends Events {
+  SVGElementInstanceEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get abort => this['abort'];
 
@@ -28363,169 +21862,100 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SVGElementInstanceListImpl extends NativeFieldWrapperClass1 implements List<SVGElementInstance> {
-
-  int get length native "SVGElementInstanceList_length_Getter";
-
-  SVGElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
-
-  void operator[]=(int index, SVGElementInstance value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SVGElementInstance> mixins.
-  // SVGElementInstance is the element type.
-
-  // From Iterable<SVGElementInstance>:
-
-  Iterator<SVGElementInstance> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SVGElementInstance>(this);
-  }
-
-  // From Collection<SVGElementInstance>:
-
-  void add(SVGElementInstance value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SVGElementInstance value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SVGElementInstance> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
-
-  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
-
-  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
-     _Collections.filter(this, <SVGElementInstance>[], f);
-
-  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
-
-  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SVGElementInstance>:
-
-  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SVGElementInstance element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SVGElementInstance element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SVGElementInstance get last => this[length - 1];
-
-  SVGElementInstance removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SVGElementInstance> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
-
-  // -- end List<SVGElementInstance> mixins.
-
-  SVGElementInstance item(int index) native "SVGElementInstanceList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName SVGEllipseElement
-abstract class SVGEllipseElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGEllipseElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGEllipseElement.internal(): super.internal();
+
 
   /** @domName SVGEllipseElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGEllipseElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGEllipseElement.rx */
-  SVGAnimatedLength get rx;
-
-  /** @domName SVGEllipseElement.ry */
-  SVGAnimatedLength get ry;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGEllipseElementImpl extends _SVGElementImpl implements SVGEllipseElement {
-
   SVGAnimatedLength get cx native "SVGEllipseElement_cx_Getter";
 
+
+  /** @domName SVGEllipseElement.cy */
   SVGAnimatedLength get cy native "SVGEllipseElement_cy_Getter";
 
+
+  /** @domName SVGEllipseElement.rx */
   SVGAnimatedLength get rx native "SVGEllipseElement_rx_Getter";
 
+
+  /** @domName SVGEllipseElement.ry */
   SVGAnimatedLength get ry native "SVGEllipseElement_ry_Getter";
 
+
+  /** @domName SVGEllipseElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGEllipseElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGEllipseElement.xmllang */
   String get xmllang native "SVGEllipseElement_xmllang_Getter";
 
+
+  /** @domName SVGEllipseElement.xmllang */
   void set xmllang(String value) native "SVGEllipseElement_xmllang_Setter";
 
+
+  /** @domName SVGEllipseElement.xmlspace */
   String get xmlspace native "SVGEllipseElement_xmlspace_Getter";
 
+
+  /** @domName SVGEllipseElement.xmlspace */
   void set xmlspace(String value) native "SVGEllipseElement_xmlspace_Setter";
 
+
+  /** @domName SVGEllipseElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGEllipseElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGEllipseElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGEllipseElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGEllipseElement.getBBox */
   SVGRect getBBox() native "SVGEllipseElement_getBBox_Callback";
 
+
+  /** @domName SVGEllipseElement.getCTM */
   SVGMatrix getCTM() native "SVGEllipseElement_getCTM_Callback";
 
+
+  /** @domName SVGEllipseElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGEllipseElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGEllipseElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGEllipseElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGEllipseElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGEllipseElement_className_Getter";
 
+
+  /** @domName SVGEllipseElement.style */
   CSSStyleDeclaration get style native "SVGEllipseElement_style_Getter";
 
+
+  /** @domName SVGEllipseElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGEllipseElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGEllipseElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGEllipseElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGEllipseElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGEllipseElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGEllipseElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGEllipseElement_systemLanguage_Getter";
 
+
+  /** @domName SVGEllipseElement.hasExtension */
   bool hasExtension(String extension) native "SVGEllipseElement_hasExtension_Callback";
 
+
+  /** @domName SVGEllipseElement.transform */
   SVGAnimatedTransformList get transform native "SVGEllipseElement_transform_Getter";
 
 }
@@ -28536,7 +21966,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGException
-abstract class SVGException {
+class SVGException extends NativeFieldWrapperClass1 {
+  SVGException.internal();
 
   static const int SVG_INVALID_VALUE_ERR = 1;
 
@@ -28544,32 +21975,20 @@
 
   static const int SVG_WRONG_TYPE_ERR = 0;
 
+
   /** @domName SVGException.code */
-  int get code;
-
-  /** @domName SVGException.message */
-  String get message;
-
-  /** @domName SVGException.name */
-  String get name;
-
-  /** @domName SVGException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGExceptionImpl extends NativeFieldWrapperClass1 implements SVGException {
-
   int get code native "SVGException_code_Getter";
 
+
+  /** @domName SVGException.message */
   String get message native "SVGException_message_Getter";
 
+
+  /** @domName SVGException.name */
   String get name native "SVGException_name_Getter";
 
+
+  /** @domName SVGException.toString */
   String toString() native "SVGException_toString_Callback";
 
 }
@@ -28580,10 +21999,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGExternalResourcesRequired
-abstract class SVGExternalResourcesRequired {
+class SVGExternalResourcesRequired extends NativeFieldWrapperClass1 {
+  SVGExternalResourcesRequired.internal();
+
 
   /** @domName SVGExternalResourcesRequired.externalResourcesRequired */
-  SVGAnimatedBoolean get externalResourcesRequired;
+  SVGAnimatedBoolean get externalResourcesRequired native "SVGExternalResourcesRequired_externalResourcesRequired_Getter";
+
 }
 // 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
@@ -28592,7 +22014,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEBlendElement
-abstract class SVGFEBlendElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEBlendElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEBlendElement.internal(): super.internal();
 
   static const int SVG_FEBLEND_MODE_DARKEN = 4;
 
@@ -28606,43 +22029,48 @@
 
   static const int SVG_FEBLEND_MODE_UNKNOWN = 0;
 
+
   /** @domName SVGFEBlendElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEBlendElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFEBlendElement.mode */
-  SVGAnimatedEnumeration get mode;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEBlendElementImpl extends _SVGElementImpl implements SVGFEBlendElement {
-
   SVGAnimatedString get in1 native "SVGFEBlendElement_in1_Getter";
 
+
+  /** @domName SVGFEBlendElement.in2 */
   SVGAnimatedString get in2 native "SVGFEBlendElement_in2_Getter";
 
+
+  /** @domName SVGFEBlendElement.mode */
   SVGAnimatedEnumeration get mode native "SVGFEBlendElement_mode_Getter";
 
+
+  /** @domName SVGFEBlendElement.height */
   SVGAnimatedLength get height native "SVGFEBlendElement_height_Getter";
 
+
+  /** @domName SVGFEBlendElement.result */
   SVGAnimatedString get result native "SVGFEBlendElement_result_Getter";
 
+
+  /** @domName SVGFEBlendElement.width */
   SVGAnimatedLength get width native "SVGFEBlendElement_width_Getter";
 
+
+  /** @domName SVGFEBlendElement.x */
   SVGAnimatedLength get x native "SVGFEBlendElement_x_Getter";
 
+
+  /** @domName SVGFEBlendElement.y */
   SVGAnimatedLength get y native "SVGFEBlendElement_y_Getter";
 
+
+  /** @domName SVGFEBlendElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEBlendElement_className_Getter";
 
+
+  /** @domName SVGFEBlendElement.style */
   CSSStyleDeclaration get style native "SVGFEBlendElement_style_Getter";
 
+
+  /** @domName SVGFEBlendElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEBlendElement_getPresentationAttribute_Callback";
 
 }
@@ -28653,7 +22081,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEColorMatrixElement
-abstract class SVGFEColorMatrixElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEColorMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEColorMatrixElement.internal(): super.internal();
 
   static const int SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
 
@@ -28665,43 +22094,48 @@
 
   static const int SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
 
+
   /** @domName SVGFEColorMatrixElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEColorMatrixElement.type */
-  SVGAnimatedEnumeration get type;
-
-  /** @domName SVGFEColorMatrixElement.values */
-  SVGAnimatedNumberList get values;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEColorMatrixElementImpl extends _SVGElementImpl implements SVGFEColorMatrixElement {
-
   SVGAnimatedString get in1 native "SVGFEColorMatrixElement_in1_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.type */
   SVGAnimatedEnumeration get type native "SVGFEColorMatrixElement_type_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.values */
   SVGAnimatedNumberList get values native "SVGFEColorMatrixElement_values_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.height */
   SVGAnimatedLength get height native "SVGFEColorMatrixElement_height_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.result */
   SVGAnimatedString get result native "SVGFEColorMatrixElement_result_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.width */
   SVGAnimatedLength get width native "SVGFEColorMatrixElement_width_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.x */
   SVGAnimatedLength get x native "SVGFEColorMatrixElement_x_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.y */
   SVGAnimatedLength get y native "SVGFEColorMatrixElement_y_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEColorMatrixElement_className_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.style */
   CSSStyleDeclaration get style native "SVGFEColorMatrixElement_style_Getter";
 
+
+  /** @domName SVGFEColorMatrixElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEColorMatrixElement_getPresentationAttribute_Callback";
 
 }
@@ -28712,35 +22146,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEComponentTransferElement
-abstract class SVGFEComponentTransferElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEComponentTransferElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEComponentTransferElement.internal(): super.internal();
+
 
   /** @domName SVGFEComponentTransferElement.in1 */
-  SVGAnimatedString get in1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEComponentTransferElementImpl extends _SVGElementImpl implements SVGFEComponentTransferElement {
-
   SVGAnimatedString get in1 native "SVGFEComponentTransferElement_in1_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.height */
   SVGAnimatedLength get height native "SVGFEComponentTransferElement_height_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.result */
   SVGAnimatedString get result native "SVGFEComponentTransferElement_result_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.width */
   SVGAnimatedLength get width native "SVGFEComponentTransferElement_width_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.x */
   SVGAnimatedLength get x native "SVGFEComponentTransferElement_x_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.y */
   SVGAnimatedLength get y native "SVGFEComponentTransferElement_y_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEComponentTransferElement_className_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.style */
   CSSStyleDeclaration get style native "SVGFEComponentTransferElement_style_Getter";
 
+
+  /** @domName SVGFEComponentTransferElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEComponentTransferElement_getPresentationAttribute_Callback";
 
 }
@@ -28751,7 +22193,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFECompositeElement
-abstract class SVGFECompositeElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFECompositeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFECompositeElement.internal(): super.internal();
 
   static const int SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
 
@@ -28767,63 +22210,64 @@
 
   static const int SVG_FECOMPOSITE_OPERATOR_XOR = 5;
 
+
   /** @domName SVGFECompositeElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFECompositeElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFECompositeElement.k1 */
-  SVGAnimatedNumber get k1;
-
-  /** @domName SVGFECompositeElement.k2 */
-  SVGAnimatedNumber get k2;
-
-  /** @domName SVGFECompositeElement.k3 */
-  SVGAnimatedNumber get k3;
-
-  /** @domName SVGFECompositeElement.k4 */
-  SVGAnimatedNumber get k4;
-
-  /** @domName SVGFECompositeElement.operator */
-  SVGAnimatedEnumeration get operator;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFECompositeElementImpl extends _SVGElementImpl implements SVGFECompositeElement {
-
   SVGAnimatedString get in1 native "SVGFECompositeElement_in1_Getter";
 
+
+  /** @domName SVGFECompositeElement.in2 */
   SVGAnimatedString get in2 native "SVGFECompositeElement_in2_Getter";
 
+
+  /** @domName SVGFECompositeElement.k1 */
   SVGAnimatedNumber get k1 native "SVGFECompositeElement_k1_Getter";
 
+
+  /** @domName SVGFECompositeElement.k2 */
   SVGAnimatedNumber get k2 native "SVGFECompositeElement_k2_Getter";
 
+
+  /** @domName SVGFECompositeElement.k3 */
   SVGAnimatedNumber get k3 native "SVGFECompositeElement_k3_Getter";
 
+
+  /** @domName SVGFECompositeElement.k4 */
   SVGAnimatedNumber get k4 native "SVGFECompositeElement_k4_Getter";
 
+
+  /** @domName SVGFECompositeElement.operator */
   SVGAnimatedEnumeration get operator native "SVGFECompositeElement_operator_Getter";
 
+
+  /** @domName SVGFECompositeElement.height */
   SVGAnimatedLength get height native "SVGFECompositeElement_height_Getter";
 
+
+  /** @domName SVGFECompositeElement.result */
   SVGAnimatedString get result native "SVGFECompositeElement_result_Getter";
 
+
+  /** @domName SVGFECompositeElement.width */
   SVGAnimatedLength get width native "SVGFECompositeElement_width_Getter";
 
+
+  /** @domName SVGFECompositeElement.x */
   SVGAnimatedLength get x native "SVGFECompositeElement_x_Getter";
 
+
+  /** @domName SVGFECompositeElement.y */
   SVGAnimatedLength get y native "SVGFECompositeElement_y_Getter";
 
+
+  /** @domName SVGFECompositeElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFECompositeElement_className_Getter";
 
+
+  /** @domName SVGFECompositeElement.style */
   CSSStyleDeclaration get style native "SVGFECompositeElement_style_Getter";
 
+
+  /** @domName SVGFECompositeElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFECompositeElement_getPresentationAttribute_Callback";
 
 }
@@ -28834,7 +22278,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEConvolveMatrixElement
-abstract class SVGFEConvolveMatrixElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEConvolveMatrixElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEConvolveMatrixElement.internal(): super.internal();
 
   static const int SVG_EDGEMODE_DUPLICATE = 1;
 
@@ -28844,88 +22289,84 @@
 
   static const int SVG_EDGEMODE_WRAP = 2;
 
+
   /** @domName SVGFEConvolveMatrixElement.bias */
-  SVGAnimatedNumber get bias;
-
-  /** @domName SVGFEConvolveMatrixElement.divisor */
-  SVGAnimatedNumber get divisor;
-
-  /** @domName SVGFEConvolveMatrixElement.edgeMode */
-  SVGAnimatedEnumeration get edgeMode;
-
-  /** @domName SVGFEConvolveMatrixElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
-  SVGAnimatedNumberList get kernelMatrix;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX;
-
-  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY;
-
-  /** @domName SVGFEConvolveMatrixElement.orderX */
-  SVGAnimatedInteger get orderX;
-
-  /** @domName SVGFEConvolveMatrixElement.orderY */
-  SVGAnimatedInteger get orderY;
-
-  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
-  SVGAnimatedBoolean get preserveAlpha;
-
-  /** @domName SVGFEConvolveMatrixElement.targetX */
-  SVGAnimatedInteger get targetX;
-
-  /** @domName SVGFEConvolveMatrixElement.targetY */
-  SVGAnimatedInteger get targetY;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEConvolveMatrixElementImpl extends _SVGElementImpl implements SVGFEConvolveMatrixElement {
-
   SVGAnimatedNumber get bias native "SVGFEConvolveMatrixElement_bias_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.divisor */
   SVGAnimatedNumber get divisor native "SVGFEConvolveMatrixElement_divisor_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.edgeMode */
   SVGAnimatedEnumeration get edgeMode native "SVGFEConvolveMatrixElement_edgeMode_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.in1 */
   SVGAnimatedString get in1 native "SVGFEConvolveMatrixElement_in1_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.kernelMatrix */
   SVGAnimatedNumberList get kernelMatrix native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthX */
   SVGAnimatedNumber get kernelUnitLengthX native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.kernelUnitLengthY */
   SVGAnimatedNumber get kernelUnitLengthY native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.orderX */
   SVGAnimatedInteger get orderX native "SVGFEConvolveMatrixElement_orderX_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.orderY */
   SVGAnimatedInteger get orderY native "SVGFEConvolveMatrixElement_orderY_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.preserveAlpha */
   SVGAnimatedBoolean get preserveAlpha native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.targetX */
   SVGAnimatedInteger get targetX native "SVGFEConvolveMatrixElement_targetX_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.targetY */
   SVGAnimatedInteger get targetY native "SVGFEConvolveMatrixElement_targetY_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.height */
   SVGAnimatedLength get height native "SVGFEConvolveMatrixElement_height_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.result */
   SVGAnimatedString get result native "SVGFEConvolveMatrixElement_result_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.width */
   SVGAnimatedLength get width native "SVGFEConvolveMatrixElement_width_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.x */
   SVGAnimatedLength get x native "SVGFEConvolveMatrixElement_x_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.y */
   SVGAnimatedLength get y native "SVGFEConvolveMatrixElement_y_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEConvolveMatrixElement_className_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.style */
   CSSStyleDeclaration get style native "SVGFEConvolveMatrixElement_style_Getter";
 
+
+  /** @domName SVGFEConvolveMatrixElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEConvolveMatrixElement_getPresentationAttribute_Callback";
 
 }
@@ -28936,55 +22377,59 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEDiffuseLightingElement
-abstract class SVGFEDiffuseLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEDiffuseLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEDiffuseLightingElement.internal(): super.internal();
+
 
   /** @domName SVGFEDiffuseLightingElement.diffuseConstant */
-  SVGAnimatedNumber get diffuseConstant;
-
-  /** @domName SVGFEDiffuseLightingElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
-  SVGAnimatedNumber get kernelUnitLengthX;
-
-  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
-  SVGAnimatedNumber get kernelUnitLengthY;
-
-  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEDiffuseLightingElementImpl extends _SVGElementImpl implements SVGFEDiffuseLightingElement {
-
   SVGAnimatedNumber get diffuseConstant native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.in1 */
   SVGAnimatedString get in1 native "SVGFEDiffuseLightingElement_in1_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthX */
   SVGAnimatedNumber get kernelUnitLengthX native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.kernelUnitLengthY */
   SVGAnimatedNumber get kernelUnitLengthY native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.surfaceScale */
   SVGAnimatedNumber get surfaceScale native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.height */
   SVGAnimatedLength get height native "SVGFEDiffuseLightingElement_height_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.result */
   SVGAnimatedString get result native "SVGFEDiffuseLightingElement_result_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.width */
   SVGAnimatedLength get width native "SVGFEDiffuseLightingElement_width_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.x */
   SVGAnimatedLength get x native "SVGFEDiffuseLightingElement_x_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.y */
   SVGAnimatedLength get y native "SVGFEDiffuseLightingElement_y_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEDiffuseLightingElement_className_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.style */
   CSSStyleDeclaration get style native "SVGFEDiffuseLightingElement_style_Getter";
 
+
+  /** @domName SVGFEDiffuseLightingElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEDiffuseLightingElement_getPresentationAttribute_Callback";
 
 }
@@ -28995,7 +22440,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEDisplacementMapElement
-abstract class SVGFEDisplacementMapElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEDisplacementMapElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEDisplacementMapElement.internal(): super.internal();
 
   static const int SVG_CHANNEL_A = 4;
 
@@ -29007,53 +22453,56 @@
 
   static const int SVG_CHANNEL_UNKNOWN = 0;
 
+
   /** @domName SVGFEDisplacementMapElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDisplacementMapElement.in2 */
-  SVGAnimatedString get in2;
-
-  /** @domName SVGFEDisplacementMapElement.scale */
-  SVGAnimatedNumber get scale;
-
-  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
-  SVGAnimatedEnumeration get xChannelSelector;
-
-  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
-  SVGAnimatedEnumeration get yChannelSelector;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEDisplacementMapElementImpl extends _SVGElementImpl implements SVGFEDisplacementMapElement {
-
   SVGAnimatedString get in1 native "SVGFEDisplacementMapElement_in1_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.in2 */
   SVGAnimatedString get in2 native "SVGFEDisplacementMapElement_in2_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.scale */
   SVGAnimatedNumber get scale native "SVGFEDisplacementMapElement_scale_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.xChannelSelector */
   SVGAnimatedEnumeration get xChannelSelector native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.yChannelSelector */
   SVGAnimatedEnumeration get yChannelSelector native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.height */
   SVGAnimatedLength get height native "SVGFEDisplacementMapElement_height_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.result */
   SVGAnimatedString get result native "SVGFEDisplacementMapElement_result_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.width */
   SVGAnimatedLength get width native "SVGFEDisplacementMapElement_width_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.x */
   SVGAnimatedLength get x native "SVGFEDisplacementMapElement_x_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.y */
   SVGAnimatedLength get y native "SVGFEDisplacementMapElement_y_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEDisplacementMapElement_className_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.style */
   CSSStyleDeclaration get style native "SVGFEDisplacementMapElement_style_Getter";
 
+
+  /** @domName SVGFEDisplacementMapElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEDisplacementMapElement_getPresentationAttribute_Callback";
 
 }
@@ -29064,24 +22513,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEDistantLightElement
-abstract class SVGFEDistantLightElement implements SVGElement {
+class SVGFEDistantLightElement extends SVGElement {
+  SVGFEDistantLightElement.internal(): super.internal();
+
 
   /** @domName SVGFEDistantLightElement.azimuth */
-  SVGAnimatedNumber get azimuth;
-
-  /** @domName SVGFEDistantLightElement.elevation */
-  SVGAnimatedNumber get elevation;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEDistantLightElementImpl extends _SVGElementImpl implements SVGFEDistantLightElement {
-
   SVGAnimatedNumber get azimuth native "SVGFEDistantLightElement_azimuth_Getter";
 
+
+  /** @domName SVGFEDistantLightElement.elevation */
   SVGAnimatedNumber get elevation native "SVGFEDistantLightElement_elevation_Getter";
 
 }
@@ -29092,60 +22532,63 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEDropShadowElement
-abstract class SVGFEDropShadowElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEDropShadowElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEDropShadowElement.internal(): super.internal();
+
 
   /** @domName SVGFEDropShadowElement.dx */
-  SVGAnimatedNumber get dx;
-
-  /** @domName SVGFEDropShadowElement.dy */
-  SVGAnimatedNumber get dy;
-
-  /** @domName SVGFEDropShadowElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEDropShadowElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX;
-
-  /** @domName SVGFEDropShadowElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY;
-
-  /** @domName SVGFEDropShadowElement.setStdDeviation */
-  void setStdDeviation(num stdDeviationX, num stdDeviationY);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEDropShadowElementImpl extends _SVGElementImpl implements SVGFEDropShadowElement {
-
   SVGAnimatedNumber get dx native "SVGFEDropShadowElement_dx_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.dy */
   SVGAnimatedNumber get dy native "SVGFEDropShadowElement_dy_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.in1 */
   SVGAnimatedString get in1 native "SVGFEDropShadowElement_in1_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.stdDeviationX */
   SVGAnimatedNumber get stdDeviationX native "SVGFEDropShadowElement_stdDeviationX_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.stdDeviationY */
   SVGAnimatedNumber get stdDeviationY native "SVGFEDropShadowElement_stdDeviationY_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native "SVGFEDropShadowElement_setStdDeviation_Callback";
 
+
+  /** @domName SVGFEDropShadowElement.height */
   SVGAnimatedLength get height native "SVGFEDropShadowElement_height_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.result */
   SVGAnimatedString get result native "SVGFEDropShadowElement_result_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.width */
   SVGAnimatedLength get width native "SVGFEDropShadowElement_width_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.x */
   SVGAnimatedLength get x native "SVGFEDropShadowElement_x_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.y */
   SVGAnimatedLength get y native "SVGFEDropShadowElement_y_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEDropShadowElement_className_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.style */
   CSSStyleDeclaration get style native "SVGFEDropShadowElement_style_Getter";
 
+
+  /** @domName SVGFEDropShadowElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEDropShadowElement_getPresentationAttribute_Callback";
 
 }
@@ -29156,30 +22599,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEFloodElement
-abstract class SVGFEFloodElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-}
-// 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 SVGFEFloodElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEFloodElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGFEFloodElementImpl extends _SVGElementImpl implements SVGFEFloodElement {
-
+  /** @domName SVGFEFloodElement.height */
   SVGAnimatedLength get height native "SVGFEFloodElement_height_Getter";
 
+
+  /** @domName SVGFEFloodElement.result */
   SVGAnimatedString get result native "SVGFEFloodElement_result_Getter";
 
+
+  /** @domName SVGFEFloodElement.width */
   SVGAnimatedLength get width native "SVGFEFloodElement_width_Getter";
 
+
+  /** @domName SVGFEFloodElement.x */
   SVGAnimatedLength get x native "SVGFEFloodElement_x_Getter";
 
+
+  /** @domName SVGFEFloodElement.y */
   SVGAnimatedLength get y native "SVGFEFloodElement_y_Getter";
 
+
+  /** @domName SVGFEFloodElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEFloodElement_className_Getter";
 
+
+  /** @domName SVGFEFloodElement.style */
   CSSStyleDeclaration get style native "SVGFEFloodElement_style_Getter";
 
+
+  /** @domName SVGFEFloodElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEFloodElement_getPresentationAttribute_Callback";
 
 }
@@ -29190,15 +22642,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEFuncAElement
-abstract class SVGFEFuncAElement implements SVGComponentTransferFunctionElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEFuncAElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncAElement {
+class SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
+  SVGFEFuncAElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29208,15 +22653,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEFuncBElement
-abstract class SVGFEFuncBElement implements SVGComponentTransferFunctionElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEFuncBElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncBElement {
+class SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
+  SVGFEFuncBElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29226,15 +22664,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEFuncGElement
-abstract class SVGFEFuncGElement implements SVGComponentTransferFunctionElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEFuncGElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncGElement {
+class SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
+  SVGFEFuncGElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29244,15 +22675,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEFuncRElement
-abstract class SVGFEFuncRElement implements SVGComponentTransferFunctionElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEFuncRElementImpl extends _SVGComponentTransferFunctionElementImpl implements SVGFEFuncRElement {
+class SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
+  SVGFEFuncRElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29262,50 +22686,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEGaussianBlurElement
-abstract class SVGFEGaussianBlurElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEGaussianBlurElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEGaussianBlurElement.internal(): super.internal();
+
 
   /** @domName SVGFEGaussianBlurElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
-  SVGAnimatedNumber get stdDeviationX;
-
-  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
-  SVGAnimatedNumber get stdDeviationY;
-
-  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
-  void setStdDeviation(num stdDeviationX, num stdDeviationY);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEGaussianBlurElementImpl extends _SVGElementImpl implements SVGFEGaussianBlurElement {
-
   SVGAnimatedString get in1 native "SVGFEGaussianBlurElement_in1_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.stdDeviationX */
   SVGAnimatedNumber get stdDeviationX native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.stdDeviationY */
   SVGAnimatedNumber get stdDeviationY native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.setStdDeviation */
   void setStdDeviation(num stdDeviationX, num stdDeviationY) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
 
+
+  /** @domName SVGFEGaussianBlurElement.height */
   SVGAnimatedLength get height native "SVGFEGaussianBlurElement_height_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.result */
   SVGAnimatedString get result native "SVGFEGaussianBlurElement_result_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.width */
   SVGAnimatedLength get width native "SVGFEGaussianBlurElement_width_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.x */
   SVGAnimatedLength get x native "SVGFEGaussianBlurElement_x_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.y */
   SVGAnimatedLength get y native "SVGFEGaussianBlurElement_y_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEGaussianBlurElement_className_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.style */
   CSSStyleDeclaration get style native "SVGFEGaussianBlurElement_style_Getter";
 
+
+  /** @domName SVGFEGaussianBlurElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEGaussianBlurElement_getPresentationAttribute_Callback";
 
 }
@@ -29316,47 +22745,67 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEImageElement
-abstract class SVGFEImageElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGFilterPrimitiveStandardAttributes {
+class SVGFEImageElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGExternalResourcesRequired {
+  SVGFEImageElement.internal(): super.internal();
+
 
   /** @domName SVGFEImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEImageElementImpl extends _SVGElementImpl implements SVGFEImageElement {
-
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFEImageElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGFEImageElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGFEImageElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGFEImageElement.height */
   SVGAnimatedLength get height native "SVGFEImageElement_height_Getter";
 
+
+  /** @domName SVGFEImageElement.result */
   SVGAnimatedString get result native "SVGFEImageElement_result_Getter";
 
+
+  /** @domName SVGFEImageElement.width */
   SVGAnimatedLength get width native "SVGFEImageElement_width_Getter";
 
+
+  /** @domName SVGFEImageElement.x */
   SVGAnimatedLength get x native "SVGFEImageElement_x_Getter";
 
+
+  /** @domName SVGFEImageElement.y */
   SVGAnimatedLength get y native "SVGFEImageElement_y_Getter";
 
+
+  /** @domName SVGFEImageElement.xmllang */
   String get xmllang native "SVGFEImageElement_xmllang_Getter";
 
+
+  /** @domName SVGFEImageElement.xmllang */
   void set xmllang(String value) native "SVGFEImageElement_xmllang_Setter";
 
+
+  /** @domName SVGFEImageElement.xmlspace */
   String get xmlspace native "SVGFEImageElement_xmlspace_Getter";
 
+
+  /** @domName SVGFEImageElement.xmlspace */
   void set xmlspace(String value) native "SVGFEImageElement_xmlspace_Setter";
 
+
+  /** @domName SVGFEImageElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEImageElement_className_Getter";
 
+
+  /** @domName SVGFEImageElement.style */
   CSSStyleDeclaration get style native "SVGFEImageElement_style_Getter";
 
+
+  /** @domName SVGFEImageElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEImageElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGFEImageElement.href */
   SVGAnimatedString get href native "SVGFEImageElement_href_Getter";
 
 }
@@ -29367,30 +22816,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEMergeElement
-abstract class SVGFEMergeElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
-}
-// 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 SVGFEMergeElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEMergeElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGFEMergeElementImpl extends _SVGElementImpl implements SVGFEMergeElement {
-
+  /** @domName SVGFEMergeElement.height */
   SVGAnimatedLength get height native "SVGFEMergeElement_height_Getter";
 
+
+  /** @domName SVGFEMergeElement.result */
   SVGAnimatedString get result native "SVGFEMergeElement_result_Getter";
 
+
+  /** @domName SVGFEMergeElement.width */
   SVGAnimatedLength get width native "SVGFEMergeElement_width_Getter";
 
+
+  /** @domName SVGFEMergeElement.x */
   SVGAnimatedLength get x native "SVGFEMergeElement_x_Getter";
 
+
+  /** @domName SVGFEMergeElement.y */
   SVGAnimatedLength get y native "SVGFEMergeElement_y_Getter";
 
+
+  /** @domName SVGFEMergeElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEMergeElement_className_Getter";
 
+
+  /** @domName SVGFEMergeElement.style */
   CSSStyleDeclaration get style native "SVGFEMergeElement_style_Getter";
 
+
+  /** @domName SVGFEMergeElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEMergeElement_getPresentationAttribute_Callback";
 
 }
@@ -29401,19 +22859,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEMergeNodeElement
-abstract class SVGFEMergeNodeElement implements SVGElement {
+class SVGFEMergeNodeElement extends SVGElement {
+  SVGFEMergeNodeElement.internal(): super.internal();
+
 
   /** @domName SVGFEMergeNodeElement.in1 */
-  SVGAnimatedString get in1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEMergeNodeElementImpl extends _SVGElementImpl implements SVGFEMergeNodeElement {
-
   SVGAnimatedString get in1 native "SVGFEMergeNodeElement_in1_Getter";
 
 }
@@ -29424,7 +22874,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEMorphologyElement
-abstract class SVGFEMorphologyElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEMorphologyElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEMorphologyElement.internal(): super.internal();
 
   static const int SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
 
@@ -29432,53 +22883,56 @@
 
   static const int SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
 
+
   /** @domName SVGFEMorphologyElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFEMorphologyElement.operator */
-  SVGAnimatedEnumeration get operator;
-
-  /** @domName SVGFEMorphologyElement.radiusX */
-  SVGAnimatedNumber get radiusX;
-
-  /** @domName SVGFEMorphologyElement.radiusY */
-  SVGAnimatedNumber get radiusY;
-
-  /** @domName SVGFEMorphologyElement.setRadius */
-  void setRadius(num radiusX, num radiusY);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEMorphologyElementImpl extends _SVGElementImpl implements SVGFEMorphologyElement {
-
   SVGAnimatedString get in1 native "SVGFEMorphologyElement_in1_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.operator */
   SVGAnimatedEnumeration get operator native "SVGFEMorphologyElement_operator_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.radiusX */
   SVGAnimatedNumber get radiusX native "SVGFEMorphologyElement_radiusX_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.radiusY */
   SVGAnimatedNumber get radiusY native "SVGFEMorphologyElement_radiusY_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.setRadius */
   void setRadius(num radiusX, num radiusY) native "SVGFEMorphologyElement_setRadius_Callback";
 
+
+  /** @domName SVGFEMorphologyElement.height */
   SVGAnimatedLength get height native "SVGFEMorphologyElement_height_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.result */
   SVGAnimatedString get result native "SVGFEMorphologyElement_result_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.width */
   SVGAnimatedLength get width native "SVGFEMorphologyElement_width_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.x */
   SVGAnimatedLength get x native "SVGFEMorphologyElement_x_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.y */
   SVGAnimatedLength get y native "SVGFEMorphologyElement_y_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEMorphologyElement_className_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.style */
   CSSStyleDeclaration get style native "SVGFEMorphologyElement_style_Getter";
 
+
+  /** @domName SVGFEMorphologyElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEMorphologyElement_getPresentationAttribute_Callback";
 
 }
@@ -29489,45 +22943,51 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEOffsetElement
-abstract class SVGFEOffsetElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFEOffsetElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFEOffsetElement.internal(): super.internal();
+
 
   /** @domName SVGFEOffsetElement.dx */
-  SVGAnimatedNumber get dx;
-
-  /** @domName SVGFEOffsetElement.dy */
-  SVGAnimatedNumber get dy;
-
-  /** @domName SVGFEOffsetElement.in1 */
-  SVGAnimatedString get in1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEOffsetElementImpl extends _SVGElementImpl implements SVGFEOffsetElement {
-
   SVGAnimatedNumber get dx native "SVGFEOffsetElement_dx_Getter";
 
+
+  /** @domName SVGFEOffsetElement.dy */
   SVGAnimatedNumber get dy native "SVGFEOffsetElement_dy_Getter";
 
+
+  /** @domName SVGFEOffsetElement.in1 */
   SVGAnimatedString get in1 native "SVGFEOffsetElement_in1_Getter";
 
+
+  /** @domName SVGFEOffsetElement.height */
   SVGAnimatedLength get height native "SVGFEOffsetElement_height_Getter";
 
+
+  /** @domName SVGFEOffsetElement.result */
   SVGAnimatedString get result native "SVGFEOffsetElement_result_Getter";
 
+
+  /** @domName SVGFEOffsetElement.width */
   SVGAnimatedLength get width native "SVGFEOffsetElement_width_Getter";
 
+
+  /** @domName SVGFEOffsetElement.x */
   SVGAnimatedLength get x native "SVGFEOffsetElement_x_Getter";
 
+
+  /** @domName SVGFEOffsetElement.y */
   SVGAnimatedLength get y native "SVGFEOffsetElement_y_Getter";
 
+
+  /** @domName SVGFEOffsetElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFEOffsetElement_className_Getter";
 
+
+  /** @domName SVGFEOffsetElement.style */
   CSSStyleDeclaration get style native "SVGFEOffsetElement_style_Getter";
 
+
+  /** @domName SVGFEOffsetElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFEOffsetElement_getPresentationAttribute_Callback";
 
 }
@@ -29538,29 +22998,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFEPointLightElement
-abstract class SVGFEPointLightElement implements SVGElement {
+class SVGFEPointLightElement extends SVGElement {
+  SVGFEPointLightElement.internal(): super.internal();
+
 
   /** @domName SVGFEPointLightElement.x */
-  SVGAnimatedNumber get x;
-
-  /** @domName SVGFEPointLightElement.y */
-  SVGAnimatedNumber get y;
-
-  /** @domName SVGFEPointLightElement.z */
-  SVGAnimatedNumber get z;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFEPointLightElementImpl extends _SVGElementImpl implements SVGFEPointLightElement {
-
   SVGAnimatedNumber get x native "SVGFEPointLightElement_x_Getter";
 
+
+  /** @domName SVGFEPointLightElement.y */
   SVGAnimatedNumber get y native "SVGFEPointLightElement_y_Getter";
 
+
+  /** @domName SVGFEPointLightElement.z */
   SVGAnimatedNumber get z native "SVGFEPointLightElement_z_Getter";
 
 }
@@ -29571,50 +23021,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFESpecularLightingElement
-abstract class SVGFESpecularLightingElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFESpecularLightingElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFESpecularLightingElement.internal(): super.internal();
+
 
   /** @domName SVGFESpecularLightingElement.in1 */
-  SVGAnimatedString get in1;
-
-  /** @domName SVGFESpecularLightingElement.specularConstant */
-  SVGAnimatedNumber get specularConstant;
-
-  /** @domName SVGFESpecularLightingElement.specularExponent */
-  SVGAnimatedNumber get specularExponent;
-
-  /** @domName SVGFESpecularLightingElement.surfaceScale */
-  SVGAnimatedNumber get surfaceScale;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFESpecularLightingElementImpl extends _SVGElementImpl implements SVGFESpecularLightingElement {
-
   SVGAnimatedString get in1 native "SVGFESpecularLightingElement_in1_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.specularConstant */
   SVGAnimatedNumber get specularConstant native "SVGFESpecularLightingElement_specularConstant_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.specularExponent */
   SVGAnimatedNumber get specularExponent native "SVGFESpecularLightingElement_specularExponent_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.surfaceScale */
   SVGAnimatedNumber get surfaceScale native "SVGFESpecularLightingElement_surfaceScale_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.height */
   SVGAnimatedLength get height native "SVGFESpecularLightingElement_height_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.result */
   SVGAnimatedString get result native "SVGFESpecularLightingElement_result_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.width */
   SVGAnimatedLength get width native "SVGFESpecularLightingElement_width_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.x */
   SVGAnimatedLength get x native "SVGFESpecularLightingElement_x_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.y */
   SVGAnimatedLength get y native "SVGFESpecularLightingElement_y_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFESpecularLightingElement_className_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.style */
   CSSStyleDeclaration get style native "SVGFESpecularLightingElement_style_Getter";
 
+
+  /** @domName SVGFESpecularLightingElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFESpecularLightingElement_getPresentationAttribute_Callback";
 
 }
@@ -29625,54 +23080,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFESpotLightElement
-abstract class SVGFESpotLightElement implements SVGElement {
+class SVGFESpotLightElement extends SVGElement {
+  SVGFESpotLightElement.internal(): super.internal();
+
 
   /** @domName SVGFESpotLightElement.limitingConeAngle */
-  SVGAnimatedNumber get limitingConeAngle;
-
-  /** @domName SVGFESpotLightElement.pointsAtX */
-  SVGAnimatedNumber get pointsAtX;
-
-  /** @domName SVGFESpotLightElement.pointsAtY */
-  SVGAnimatedNumber get pointsAtY;
-
-  /** @domName SVGFESpotLightElement.pointsAtZ */
-  SVGAnimatedNumber get pointsAtZ;
-
-  /** @domName SVGFESpotLightElement.specularExponent */
-  SVGAnimatedNumber get specularExponent;
-
-  /** @domName SVGFESpotLightElement.x */
-  SVGAnimatedNumber get x;
-
-  /** @domName SVGFESpotLightElement.y */
-  SVGAnimatedNumber get y;
-
-  /** @domName SVGFESpotLightElement.z */
-  SVGAnimatedNumber get z;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFESpotLightElementImpl extends _SVGElementImpl implements SVGFESpotLightElement {
-
   SVGAnimatedNumber get limitingConeAngle native "SVGFESpotLightElement_limitingConeAngle_Getter";
 
+
+  /** @domName SVGFESpotLightElement.pointsAtX */
   SVGAnimatedNumber get pointsAtX native "SVGFESpotLightElement_pointsAtX_Getter";
 
+
+  /** @domName SVGFESpotLightElement.pointsAtY */
   SVGAnimatedNumber get pointsAtY native "SVGFESpotLightElement_pointsAtY_Getter";
 
+
+  /** @domName SVGFESpotLightElement.pointsAtZ */
   SVGAnimatedNumber get pointsAtZ native "SVGFESpotLightElement_pointsAtZ_Getter";
 
+
+  /** @domName SVGFESpotLightElement.specularExponent */
   SVGAnimatedNumber get specularExponent native "SVGFESpotLightElement_specularExponent_Getter";
 
+
+  /** @domName SVGFESpotLightElement.x */
   SVGAnimatedNumber get x native "SVGFESpotLightElement_x_Getter";
 
+
+  /** @domName SVGFESpotLightElement.y */
   SVGAnimatedNumber get y native "SVGFESpotLightElement_y_Getter";
 
+
+  /** @domName SVGFESpotLightElement.z */
   SVGAnimatedNumber get z native "SVGFESpotLightElement_z_Getter";
 
 }
@@ -29683,35 +23123,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFETileElement
-abstract class SVGFETileElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFETileElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFETileElement.internal(): super.internal();
+
 
   /** @domName SVGFETileElement.in1 */
-  SVGAnimatedString get in1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFETileElementImpl extends _SVGElementImpl implements SVGFETileElement {
-
   SVGAnimatedString get in1 native "SVGFETileElement_in1_Getter";
 
+
+  /** @domName SVGFETileElement.height */
   SVGAnimatedLength get height native "SVGFETileElement_height_Getter";
 
+
+  /** @domName SVGFETileElement.result */
   SVGAnimatedString get result native "SVGFETileElement_result_Getter";
 
+
+  /** @domName SVGFETileElement.width */
   SVGAnimatedLength get width native "SVGFETileElement_width_Getter";
 
+
+  /** @domName SVGFETileElement.x */
   SVGAnimatedLength get x native "SVGFETileElement_x_Getter";
 
+
+  /** @domName SVGFETileElement.y */
   SVGAnimatedLength get y native "SVGFETileElement_y_Getter";
 
+
+  /** @domName SVGFETileElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFETileElement_className_Getter";
 
+
+  /** @domName SVGFETileElement.style */
   CSSStyleDeclaration get style native "SVGFETileElement_style_Getter";
 
+
+  /** @domName SVGFETileElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFETileElement_getPresentationAttribute_Callback";
 
 }
@@ -29722,7 +23170,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFETurbulenceElement
-abstract class SVGFETurbulenceElement implements SVGElement, SVGFilterPrimitiveStandardAttributes {
+class SVGFETurbulenceElement extends SVGElement implements SVGFilterPrimitiveStandardAttributes {
+  SVGFETurbulenceElement.internal(): super.internal();
 
   static const int SVG_STITCHTYPE_NOSTITCH = 2;
 
@@ -29736,58 +23185,60 @@
 
   static const int SVG_TURBULENCE_TYPE_UNKNOWN = 0;
 
+
   /** @domName SVGFETurbulenceElement.baseFrequencyX */
-  SVGAnimatedNumber get baseFrequencyX;
-
-  /** @domName SVGFETurbulenceElement.baseFrequencyY */
-  SVGAnimatedNumber get baseFrequencyY;
-
-  /** @domName SVGFETurbulenceElement.numOctaves */
-  SVGAnimatedInteger get numOctaves;
-
-  /** @domName SVGFETurbulenceElement.seed */
-  SVGAnimatedNumber get seed;
-
-  /** @domName SVGFETurbulenceElement.stitchTiles */
-  SVGAnimatedEnumeration get stitchTiles;
-
-  /** @domName SVGFETurbulenceElement.type */
-  SVGAnimatedEnumeration get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFETurbulenceElementImpl extends _SVGElementImpl implements SVGFETurbulenceElement {
-
   SVGAnimatedNumber get baseFrequencyX native "SVGFETurbulenceElement_baseFrequencyX_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.baseFrequencyY */
   SVGAnimatedNumber get baseFrequencyY native "SVGFETurbulenceElement_baseFrequencyY_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.numOctaves */
   SVGAnimatedInteger get numOctaves native "SVGFETurbulenceElement_numOctaves_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.seed */
   SVGAnimatedNumber get seed native "SVGFETurbulenceElement_seed_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.stitchTiles */
   SVGAnimatedEnumeration get stitchTiles native "SVGFETurbulenceElement_stitchTiles_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.type */
   SVGAnimatedEnumeration get type native "SVGFETurbulenceElement_type_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.height */
   SVGAnimatedLength get height native "SVGFETurbulenceElement_height_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.result */
   SVGAnimatedString get result native "SVGFETurbulenceElement_result_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.width */
   SVGAnimatedLength get width native "SVGFETurbulenceElement_width_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.x */
   SVGAnimatedLength get x native "SVGFETurbulenceElement_x_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.y */
   SVGAnimatedLength get y native "SVGFETurbulenceElement_y_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFETurbulenceElement_className_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.style */
   CSSStyleDeclaration get style native "SVGFETurbulenceElement_style_Getter";
 
+
+  /** @domName SVGFETurbulenceElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFETurbulenceElement_getPresentationAttribute_Callback";
 
 }
@@ -29798,77 +23249,79 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFilterElement
-abstract class SVGFilterElement implements SVGElement, SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
+class SVGFilterElement extends SVGElement implements SVGURIReference, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
+  SVGFilterElement.internal(): super.internal();
+
 
   /** @domName SVGFilterElement.filterResX */
-  SVGAnimatedInteger get filterResX;
-
-  /** @domName SVGFilterElement.filterResY */
-  SVGAnimatedInteger get filterResY;
-
-  /** @domName SVGFilterElement.filterUnits */
-  SVGAnimatedEnumeration get filterUnits;
-
-  /** @domName SVGFilterElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGFilterElement.primitiveUnits */
-  SVGAnimatedEnumeration get primitiveUnits;
-
-  /** @domName SVGFilterElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGFilterElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGFilterElement.y */
-  SVGAnimatedLength get y;
-
-  /** @domName SVGFilterElement.setFilterRes */
-  void setFilterRes(int filterResX, int filterResY);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFilterElementImpl extends _SVGElementImpl implements SVGFilterElement {
-
   SVGAnimatedInteger get filterResX native "SVGFilterElement_filterResX_Getter";
 
+
+  /** @domName SVGFilterElement.filterResY */
   SVGAnimatedInteger get filterResY native "SVGFilterElement_filterResY_Getter";
 
+
+  /** @domName SVGFilterElement.filterUnits */
   SVGAnimatedEnumeration get filterUnits native "SVGFilterElement_filterUnits_Getter";
 
+
+  /** @domName SVGFilterElement.height */
   SVGAnimatedLength get height native "SVGFilterElement_height_Getter";
 
+
+  /** @domName SVGFilterElement.primitiveUnits */
   SVGAnimatedEnumeration get primitiveUnits native "SVGFilterElement_primitiveUnits_Getter";
 
+
+  /** @domName SVGFilterElement.width */
   SVGAnimatedLength get width native "SVGFilterElement_width_Getter";
 
+
+  /** @domName SVGFilterElement.x */
   SVGAnimatedLength get x native "SVGFilterElement_x_Getter";
 
+
+  /** @domName SVGFilterElement.y */
   SVGAnimatedLength get y native "SVGFilterElement_y_Getter";
 
+
+  /** @domName SVGFilterElement.setFilterRes */
   void setFilterRes(int filterResX, int filterResY) native "SVGFilterElement_setFilterRes_Callback";
 
+
+  /** @domName SVGFilterElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGFilterElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGFilterElement.xmllang */
   String get xmllang native "SVGFilterElement_xmllang_Getter";
 
+
+  /** @domName SVGFilterElement.xmllang */
   void set xmllang(String value) native "SVGFilterElement_xmllang_Setter";
 
+
+  /** @domName SVGFilterElement.xmlspace */
   String get xmlspace native "SVGFilterElement_xmlspace_Getter";
 
+
+  /** @domName SVGFilterElement.xmlspace */
   void set xmlspace(String value) native "SVGFilterElement_xmlspace_Setter";
 
+
+  /** @domName SVGFilterElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGFilterElement_className_Getter";
 
+
+  /** @domName SVGFilterElement.style */
   CSSStyleDeclaration get style native "SVGFilterElement_style_Getter";
 
+
+  /** @domName SVGFilterElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGFilterElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGFilterElement.href */
   SVGAnimatedString get href native "SVGFilterElement_href_Getter";
 
 }
@@ -29879,22 +23332,41 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFilterPrimitiveStandardAttributes
-abstract class SVGFilterPrimitiveStandardAttributes implements SVGStylable {
+class SVGFilterPrimitiveStandardAttributes extends NativeFieldWrapperClass1 implements SVGStylable {
+  SVGFilterPrimitiveStandardAttributes.internal();
+
 
   /** @domName SVGFilterPrimitiveStandardAttributes.height */
-  SVGAnimatedLength get height;
+  SVGAnimatedLength get height native "SVGFilterPrimitiveStandardAttributes_height_Getter";
+
 
   /** @domName SVGFilterPrimitiveStandardAttributes.result */
-  SVGAnimatedString get result;
+  SVGAnimatedString get result native "SVGFilterPrimitiveStandardAttributes_result_Getter";
+
 
   /** @domName SVGFilterPrimitiveStandardAttributes.width */
-  SVGAnimatedLength get width;
+  SVGAnimatedLength get width native "SVGFilterPrimitiveStandardAttributes_width_Getter";
+
 
   /** @domName SVGFilterPrimitiveStandardAttributes.x */
-  SVGAnimatedLength get x;
+  SVGAnimatedLength get x native "SVGFilterPrimitiveStandardAttributes_x_Getter";
+
 
   /** @domName SVGFilterPrimitiveStandardAttributes.y */
-  SVGAnimatedLength get y;
+  SVGAnimatedLength get y native "SVGFilterPrimitiveStandardAttributes_y_Getter";
+
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.className */
+  SVGAnimatedString get $dom_svgClassName native "SVGFilterPrimitiveStandardAttributes_className_Getter";
+
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.style */
+  CSSStyleDeclaration get style native "SVGFilterPrimitiveStandardAttributes_style_Getter";
+
+
+  /** @domName SVGFilterPrimitiveStandardAttributes.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native "SVGFilterPrimitiveStandardAttributes_getPresentationAttribute_Callback";
+
 }
 // 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
@@ -29903,13 +23375,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFitToViewBox
-abstract class SVGFitToViewBox {
+class SVGFitToViewBox extends NativeFieldWrapperClass1 {
+  SVGFitToViewBox.internal();
+
 
   /** @domName SVGFitToViewBox.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
+  SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGFitToViewBox_preserveAspectRatio_Getter";
+
 
   /** @domName SVGFitToViewBox.viewBox */
-  SVGAnimatedRect get viewBox;
+  SVGAnimatedRect get viewBox native "SVGFitToViewBox_viewBox_Getter";
+
 }
 // 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
@@ -29918,15 +23394,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontElement
-abstract class SVGFontElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontElementImpl extends _SVGElementImpl implements SVGFontElement {
+class SVGFontElement extends SVGElement {
+  SVGFontElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29936,15 +23405,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontFaceElement
-abstract class SVGFontFaceElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontFaceElementImpl extends _SVGElementImpl implements SVGFontFaceElement {
+class SVGFontFaceElement extends SVGElement {
+  SVGFontFaceElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29954,15 +23416,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontFaceFormatElement
-abstract class SVGFontFaceFormatElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontFaceFormatElementImpl extends _SVGElementImpl implements SVGFontFaceFormatElement {
+class SVGFontFaceFormatElement extends SVGElement {
+  SVGFontFaceFormatElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29972,15 +23427,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontFaceNameElement
-abstract class SVGFontFaceNameElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontFaceNameElementImpl extends _SVGElementImpl implements SVGFontFaceNameElement {
+class SVGFontFaceNameElement extends SVGElement {
+  SVGFontFaceNameElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -29990,15 +23438,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontFaceSrcElement
-abstract class SVGFontFaceSrcElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontFaceSrcElementImpl extends _SVGElementImpl implements SVGFontFaceSrcElement {
+class SVGFontFaceSrcElement extends SVGElement {
+  SVGFontFaceSrcElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30008,15 +23449,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGFontFaceUriElement
-abstract class SVGFontFaceUriElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGFontFaceUriElementImpl extends _SVGElementImpl implements SVGFontFaceUriElement {
+class SVGFontFaceUriElement extends SVGElement {
+  SVGFontFaceUriElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30026,72 +23460,99 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGForeignObjectElement
-abstract class SVGForeignObjectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGForeignObjectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGForeignObjectElement.internal(): super.internal();
+
 
   /** @domName SVGForeignObjectElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGForeignObjectElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGForeignObjectElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGForeignObjectElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGForeignObjectElementImpl extends _SVGElementImpl implements SVGForeignObjectElement {
-
   SVGAnimatedLength get height native "SVGForeignObjectElement_height_Getter";
 
+
+  /** @domName SVGForeignObjectElement.width */
   SVGAnimatedLength get width native "SVGForeignObjectElement_width_Getter";
 
+
+  /** @domName SVGForeignObjectElement.x */
   SVGAnimatedLength get x native "SVGForeignObjectElement_x_Getter";
 
+
+  /** @domName SVGForeignObjectElement.y */
   SVGAnimatedLength get y native "SVGForeignObjectElement_y_Getter";
 
+
+  /** @domName SVGForeignObjectElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGForeignObjectElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGForeignObjectElement.xmllang */
   String get xmllang native "SVGForeignObjectElement_xmllang_Getter";
 
+
+  /** @domName SVGForeignObjectElement.xmllang */
   void set xmllang(String value) native "SVGForeignObjectElement_xmllang_Setter";
 
+
+  /** @domName SVGForeignObjectElement.xmlspace */
   String get xmlspace native "SVGForeignObjectElement_xmlspace_Getter";
 
+
+  /** @domName SVGForeignObjectElement.xmlspace */
   void set xmlspace(String value) native "SVGForeignObjectElement_xmlspace_Setter";
 
+
+  /** @domName SVGForeignObjectElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGForeignObjectElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGForeignObjectElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGForeignObjectElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGForeignObjectElement.getBBox */
   SVGRect getBBox() native "SVGForeignObjectElement_getBBox_Callback";
 
+
+  /** @domName SVGForeignObjectElement.getCTM */
   SVGMatrix getCTM() native "SVGForeignObjectElement_getCTM_Callback";
 
+
+  /** @domName SVGForeignObjectElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGForeignObjectElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGForeignObjectElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGForeignObjectElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGForeignObjectElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGForeignObjectElement_className_Getter";
 
+
+  /** @domName SVGForeignObjectElement.style */
   CSSStyleDeclaration get style native "SVGForeignObjectElement_style_Getter";
 
+
+  /** @domName SVGForeignObjectElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGForeignObjectElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGForeignObjectElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGForeignObjectElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGForeignObjectElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGForeignObjectElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGForeignObjectElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGForeignObjectElement_systemLanguage_Getter";
 
+
+  /** @domName SVGForeignObjectElement.hasExtension */
   bool hasExtension(String extension) native "SVGForeignObjectElement_hasExtension_Callback";
 
+
+  /** @domName SVGForeignObjectElement.transform */
   SVGAnimatedTransformList get transform native "SVGForeignObjectElement_transform_Getter";
 
 }
@@ -30102,52 +23563,83 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGGElement
-abstract class SVGGElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-// 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 SVGGElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGGElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGGElementImpl extends _SVGElementImpl implements SVGGElement {
-
+  /** @domName SVGGElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGGElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGGElement.xmllang */
   String get xmllang native "SVGGElement_xmllang_Getter";
 
+
+  /** @domName SVGGElement.xmllang */
   void set xmllang(String value) native "SVGGElement_xmllang_Setter";
 
+
+  /** @domName SVGGElement.xmlspace */
   String get xmlspace native "SVGGElement_xmlspace_Getter";
 
+
+  /** @domName SVGGElement.xmlspace */
   void set xmlspace(String value) native "SVGGElement_xmlspace_Setter";
 
+
+  /** @domName SVGGElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGGElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGGElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGGElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGGElement.getBBox */
   SVGRect getBBox() native "SVGGElement_getBBox_Callback";
 
+
+  /** @domName SVGGElement.getCTM */
   SVGMatrix getCTM() native "SVGGElement_getCTM_Callback";
 
+
+  /** @domName SVGGElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGGElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGGElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGGElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGGElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGGElement_className_Getter";
 
+
+  /** @domName SVGGElement.style */
   CSSStyleDeclaration get style native "SVGGElement_style_Getter";
 
+
+  /** @domName SVGGElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGGElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGGElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGGElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGGElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGGElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGGElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGGElement_systemLanguage_Getter";
 
+
+  /** @domName SVGGElement.hasExtension */
   bool hasExtension(String extension) native "SVGGElement_hasExtension_Callback";
 
+
+  /** @domName SVGGElement.transform */
   SVGAnimatedTransformList get transform native "SVGGElement_transform_Getter";
 
 }
@@ -30158,15 +23650,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGGlyphElement
-abstract class SVGGlyphElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGGlyphElementImpl extends _SVGElementImpl implements SVGGlyphElement {
+class SVGGlyphElement extends SVGElement {
+  SVGGlyphElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30176,64 +23661,71 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGGlyphRefElement
-abstract class SVGGlyphRefElement implements SVGElement, SVGURIReference, SVGStylable {
+class SVGGlyphRefElement extends SVGElement implements SVGURIReference, SVGStylable {
+  SVGGlyphRefElement.internal(): super.internal();
+
 
   /** @domName SVGGlyphRefElement.dx */
-  num dx;
-
-  /** @domName SVGGlyphRefElement.dy */
-  num dy;
-
-  /** @domName SVGGlyphRefElement.format */
-  String format;
-
-  /** @domName SVGGlyphRefElement.glyphRef */
-  String glyphRef;
-
-  /** @domName SVGGlyphRefElement.x */
-  num x;
-
-  /** @domName SVGGlyphRefElement.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGGlyphRefElementImpl extends _SVGElementImpl implements SVGGlyphRefElement {
-
   num get dx native "SVGGlyphRefElement_dx_Getter";
 
+
+  /** @domName SVGGlyphRefElement.dx */
   void set dx(num value) native "SVGGlyphRefElement_dx_Setter";
 
+
+  /** @domName SVGGlyphRefElement.dy */
   num get dy native "SVGGlyphRefElement_dy_Getter";
 
+
+  /** @domName SVGGlyphRefElement.dy */
   void set dy(num value) native "SVGGlyphRefElement_dy_Setter";
 
+
+  /** @domName SVGGlyphRefElement.format */
   String get format native "SVGGlyphRefElement_format_Getter";
 
+
+  /** @domName SVGGlyphRefElement.format */
   void set format(String value) native "SVGGlyphRefElement_format_Setter";
 
+
+  /** @domName SVGGlyphRefElement.glyphRef */
   String get glyphRef native "SVGGlyphRefElement_glyphRef_Getter";
 
+
+  /** @domName SVGGlyphRefElement.glyphRef */
   void set glyphRef(String value) native "SVGGlyphRefElement_glyphRef_Setter";
 
+
+  /** @domName SVGGlyphRefElement.x */
   num get x native "SVGGlyphRefElement_x_Getter";
 
+
+  /** @domName SVGGlyphRefElement.x */
   void set x(num value) native "SVGGlyphRefElement_x_Setter";
 
+
+  /** @domName SVGGlyphRefElement.y */
   num get y native "SVGGlyphRefElement_y_Getter";
 
+
+  /** @domName SVGGlyphRefElement.y */
   void set y(num value) native "SVGGlyphRefElement_y_Setter";
 
+
+  /** @domName SVGGlyphRefElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGGlyphRefElement_className_Getter";
 
+
+  /** @domName SVGGlyphRefElement.style */
   CSSStyleDeclaration get style native "SVGGlyphRefElement_style_Getter";
 
+
+  /** @domName SVGGlyphRefElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGGlyphRefElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGGlyphRefElement.href */
   SVGAnimatedString get href native "SVGGlyphRefElement_href_Getter";
 
 }
@@ -30244,7 +23736,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGGradientElement
-abstract class SVGGradientElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired, SVGStylable {
+class SVGGradientElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired, SVGStylable {
+  SVGGradientElement.internal(): super.internal();
 
   static const int SVG_SPREADMETHOD_PAD = 1;
 
@@ -30254,37 +23747,36 @@
 
   static const int SVG_SPREADMETHOD_UNKNOWN = 0;
 
+
   /** @domName SVGGradientElement.gradientTransform */
-  SVGAnimatedTransformList get gradientTransform;
-
-  /** @domName SVGGradientElement.gradientUnits */
-  SVGAnimatedEnumeration get gradientUnits;
-
-  /** @domName SVGGradientElement.spreadMethod */
-  SVGAnimatedEnumeration get spreadMethod;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGGradientElementImpl extends _SVGElementImpl implements SVGGradientElement {
-
   SVGAnimatedTransformList get gradientTransform native "SVGGradientElement_gradientTransform_Getter";
 
+
+  /** @domName SVGGradientElement.gradientUnits */
   SVGAnimatedEnumeration get gradientUnits native "SVGGradientElement_gradientUnits_Getter";
 
+
+  /** @domName SVGGradientElement.spreadMethod */
   SVGAnimatedEnumeration get spreadMethod native "SVGGradientElement_spreadMethod_Getter";
 
+
+  /** @domName SVGGradientElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGGradientElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGGradientElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGGradientElement_className_Getter";
 
+
+  /** @domName SVGGradientElement.style */
   CSSStyleDeclaration get style native "SVGGradientElement_style_Getter";
 
+
+  /** @domName SVGGradientElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGGradientElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGGradientElement.href */
   SVGAnimatedString get href native "SVGGradientElement_href_Getter";
 
 }
@@ -30295,15 +23787,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGHKernElement
-abstract class SVGHKernElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGHKernElementImpl extends _SVGElementImpl implements SVGHKernElement {
+class SVGHKernElement extends SVGElement {
+  SVGHKernElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -30313,79 +23798,107 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGImageElement
-abstract class SVGImageElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGImageElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
+  SVGImageElement.internal(): super.internal();
+
 
   /** @domName SVGImageElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGImageElement.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-
-  /** @domName SVGImageElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGImageElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGImageElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGImageElementImpl extends _SVGElementImpl implements SVGImageElement {
-
   SVGAnimatedLength get height native "SVGImageElement_height_Getter";
 
+
+  /** @domName SVGImageElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGImageElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGImageElement.width */
   SVGAnimatedLength get width native "SVGImageElement_width_Getter";
 
+
+  /** @domName SVGImageElement.x */
   SVGAnimatedLength get x native "SVGImageElement_x_Getter";
 
+
+  /** @domName SVGImageElement.y */
   SVGAnimatedLength get y native "SVGImageElement_y_Getter";
 
+
+  /** @domName SVGImageElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGImageElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGImageElement.xmllang */
   String get xmllang native "SVGImageElement_xmllang_Getter";
 
+
+  /** @domName SVGImageElement.xmllang */
   void set xmllang(String value) native "SVGImageElement_xmllang_Setter";
 
+
+  /** @domName SVGImageElement.xmlspace */
   String get xmlspace native "SVGImageElement_xmlspace_Getter";
 
+
+  /** @domName SVGImageElement.xmlspace */
   void set xmlspace(String value) native "SVGImageElement_xmlspace_Setter";
 
+
+  /** @domName SVGImageElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGImageElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGImageElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGImageElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGImageElement.getBBox */
   SVGRect getBBox() native "SVGImageElement_getBBox_Callback";
 
+
+  /** @domName SVGImageElement.getCTM */
   SVGMatrix getCTM() native "SVGImageElement_getCTM_Callback";
 
+
+  /** @domName SVGImageElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGImageElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGImageElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGImageElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGImageElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGImageElement_className_Getter";
 
+
+  /** @domName SVGImageElement.style */
   CSSStyleDeclaration get style native "SVGImageElement_style_Getter";
 
+
+  /** @domName SVGImageElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGImageElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGImageElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGImageElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGImageElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGImageElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGImageElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGImageElement_systemLanguage_Getter";
 
+
+  /** @domName SVGImageElement.hasExtension */
   bool hasExtension(String extension) native "SVGImageElement_hasExtension_Callback";
 
+
+  /** @domName SVGImageElement.transform */
   SVGAnimatedTransformList get transform native "SVGImageElement_transform_Getter";
 
+
+  /** @domName SVGImageElement.href */
   SVGAnimatedString get href native "SVGImageElement_href_Getter";
 
 }
@@ -30396,13 +23909,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLangSpace
-abstract class SVGLangSpace {
+class SVGLangSpace extends NativeFieldWrapperClass1 {
+  SVGLangSpace.internal();
+
 
   /** @domName SVGLangSpace.xmllang */
-  String xmllang;
+  String get xmllang native "SVGLangSpace_xmllang_Getter";
+
+
+  /** @domName SVGLangSpace.xmllang */
+  void set xmllang(String value) native "SVGLangSpace_xmllang_Setter";
+
 
   /** @domName SVGLangSpace.xmlspace */
-  String xmlspace;
+  String get xmlspace native "SVGLangSpace_xmlspace_Getter";
+
+
+  /** @domName SVGLangSpace.xmlspace */
+  void set xmlspace(String value) native "SVGLangSpace_xmlspace_Setter";
+
 }
 // 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
@@ -30411,7 +23936,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLength
-abstract class SVGLength {
+class SVGLength extends NativeFieldWrapperClass1 {
+  SVGLength.internal();
 
   static const int SVG_LENGTHTYPE_CM = 6;
 
@@ -30435,48 +23961,40 @@
 
   static const int SVG_LENGTHTYPE_UNKNOWN = 0;
 
+
   /** @domName SVGLength.unitType */
-  int get unitType;
-
-  /** @domName SVGLength.value */
-  num value;
-
-  /** @domName SVGLength.valueAsString */
-  String valueAsString;
-
-  /** @domName SVGLength.valueInSpecifiedUnits */
-  num valueInSpecifiedUnits;
-
-  /** @domName SVGLength.convertToSpecifiedUnits */
-  void convertToSpecifiedUnits(int unitType);
-
-  /** @domName SVGLength.newValueSpecifiedUnits */
-  void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGLengthImpl extends NativeFieldWrapperClass1 implements SVGLength {
-
   int get unitType native "SVGLength_unitType_Getter";
 
+
+  /** @domName SVGLength.value */
   num get value native "SVGLength_value_Getter";
 
+
+  /** @domName SVGLength.value */
   void set value(num value) native "SVGLength_value_Setter";
 
+
+  /** @domName SVGLength.valueAsString */
   String get valueAsString native "SVGLength_valueAsString_Getter";
 
+
+  /** @domName SVGLength.valueAsString */
   void set valueAsString(String value) native "SVGLength_valueAsString_Setter";
 
+
+  /** @domName SVGLength.valueInSpecifiedUnits */
   num get valueInSpecifiedUnits native "SVGLength_valueInSpecifiedUnits_Getter";
 
+
+  /** @domName SVGLength.valueInSpecifiedUnits */
   void set valueInSpecifiedUnits(num value) native "SVGLength_valueInSpecifiedUnits_Setter";
 
+
+  /** @domName SVGLength.convertToSpecifiedUnits */
   void convertToSpecifiedUnits(int unitType) native "SVGLength_convertToSpecifiedUnits_Callback";
 
+
+  /** @domName SVGLength.newValueSpecifiedUnits */
   void newValueSpecifiedUnits(int unitType, num valueInSpecifiedUnits) native "SVGLength_newValueSpecifiedUnits_Callback";
 
 }
@@ -30487,40 +24005,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLengthList
-abstract class SVGLengthList implements List<SVGLength> {
+class SVGLengthList extends NativeFieldWrapperClass1 implements List<SVGLength> {
+  SVGLengthList.internal();
+
 
   /** @domName SVGLengthList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGLengthList.appendItem */
-  SVGLength appendItem(SVGLength item);
-
-  /** @domName SVGLengthList.clear */
-  void clear();
-
-  /** @domName SVGLengthList.getItem */
-  SVGLength getItem(int index);
-
-  /** @domName SVGLengthList.initialize */
-  SVGLength initialize(SVGLength item);
-
-  /** @domName SVGLengthList.insertItemBefore */
-  SVGLength insertItemBefore(SVGLength item, int index);
-
-  /** @domName SVGLengthList.removeItem */
-  SVGLength removeItem(int index);
-
-  /** @domName SVGLengthList.replaceItem */
-  SVGLength replaceItem(SVGLength item, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGLengthListImpl extends NativeFieldWrapperClass1 implements SVGLengthList {
-
   int get numberOfItems native "SVGLengthList_numberOfItems_Getter";
 
   SVGLength operator[](int index) native "SVGLengthList_item_Callback";
@@ -30606,18 +24095,32 @@
 
   // -- end List<SVGLength> mixins.
 
+
+  /** @domName SVGLengthList.appendItem */
   SVGLength appendItem(SVGLength item) native "SVGLengthList_appendItem_Callback";
 
+
+  /** @domName SVGLengthList.clear */
   void clear() native "SVGLengthList_clear_Callback";
 
+
+  /** @domName SVGLengthList.getItem */
   SVGLength getItem(int index) native "SVGLengthList_getItem_Callback";
 
+
+  /** @domName SVGLengthList.initialize */
   SVGLength initialize(SVGLength item) native "SVGLengthList_initialize_Callback";
 
+
+  /** @domName SVGLengthList.insertItemBefore */
   SVGLength insertItemBefore(SVGLength item, int index) native "SVGLengthList_insertItemBefore_Callback";
 
+
+  /** @domName SVGLengthList.removeItem */
   SVGLength removeItem(int index) native "SVGLengthList_removeItem_Callback";
 
+
+  /** @domName SVGLengthList.replaceItem */
   SVGLength replaceItem(SVGLength item, int index) native "SVGLengthList_replaceItem_Callback";
 
 }
@@ -30628,72 +24131,99 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLineElement
-abstract class SVGLineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGLineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGLineElement.internal(): super.internal();
+
 
   /** @domName SVGLineElement.x1 */
-  SVGAnimatedLength get x1;
-
-  /** @domName SVGLineElement.x2 */
-  SVGAnimatedLength get x2;
-
-  /** @domName SVGLineElement.y1 */
-  SVGAnimatedLength get y1;
-
-  /** @domName SVGLineElement.y2 */
-  SVGAnimatedLength get y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGLineElementImpl extends _SVGElementImpl implements SVGLineElement {
-
   SVGAnimatedLength get x1 native "SVGLineElement_x1_Getter";
 
+
+  /** @domName SVGLineElement.x2 */
   SVGAnimatedLength get x2 native "SVGLineElement_x2_Getter";
 
+
+  /** @domName SVGLineElement.y1 */
   SVGAnimatedLength get y1 native "SVGLineElement_y1_Getter";
 
+
+  /** @domName SVGLineElement.y2 */
   SVGAnimatedLength get y2 native "SVGLineElement_y2_Getter";
 
+
+  /** @domName SVGLineElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGLineElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGLineElement.xmllang */
   String get xmllang native "SVGLineElement_xmllang_Getter";
 
+
+  /** @domName SVGLineElement.xmllang */
   void set xmllang(String value) native "SVGLineElement_xmllang_Setter";
 
+
+  /** @domName SVGLineElement.xmlspace */
   String get xmlspace native "SVGLineElement_xmlspace_Getter";
 
+
+  /** @domName SVGLineElement.xmlspace */
   void set xmlspace(String value) native "SVGLineElement_xmlspace_Setter";
 
+
+  /** @domName SVGLineElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGLineElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGLineElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGLineElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGLineElement.getBBox */
   SVGRect getBBox() native "SVGLineElement_getBBox_Callback";
 
+
+  /** @domName SVGLineElement.getCTM */
   SVGMatrix getCTM() native "SVGLineElement_getCTM_Callback";
 
+
+  /** @domName SVGLineElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGLineElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGLineElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGLineElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGLineElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGLineElement_className_Getter";
 
+
+  /** @domName SVGLineElement.style */
   CSSStyleDeclaration get style native "SVGLineElement_style_Getter";
 
+
+  /** @domName SVGLineElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGLineElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGLineElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGLineElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGLineElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGLineElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGLineElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGLineElement_systemLanguage_Getter";
 
+
+  /** @domName SVGLineElement.hasExtension */
   bool hasExtension(String extension) native "SVGLineElement_hasExtension_Callback";
 
+
+  /** @domName SVGLineElement.transform */
   SVGAnimatedTransformList get transform native "SVGLineElement_transform_Getter";
 
 }
@@ -30704,34 +24234,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLinearGradientElement
-abstract class SVGLinearGradientElement implements SVGGradientElement {
+class SVGLinearGradientElement extends SVGGradientElement {
+  SVGLinearGradientElement.internal(): super.internal();
+
 
   /** @domName SVGLinearGradientElement.x1 */
-  SVGAnimatedLength get x1;
-
-  /** @domName SVGLinearGradientElement.x2 */
-  SVGAnimatedLength get x2;
-
-  /** @domName SVGLinearGradientElement.y1 */
-  SVGAnimatedLength get y1;
-
-  /** @domName SVGLinearGradientElement.y2 */
-  SVGAnimatedLength get y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGLinearGradientElementImpl extends _SVGGradientElementImpl implements SVGLinearGradientElement {
-
   SVGAnimatedLength get x1 native "SVGLinearGradientElement_x1_Getter";
 
+
+  /** @domName SVGLinearGradientElement.x2 */
   SVGAnimatedLength get x2 native "SVGLinearGradientElement_x2_Getter";
 
+
+  /** @domName SVGLinearGradientElement.y1 */
   SVGAnimatedLength get y1 native "SVGLinearGradientElement_y1_Getter";
 
+
+  /** @domName SVGLinearGradientElement.y2 */
   SVGAnimatedLength get y2 native "SVGLinearGradientElement_y2_Getter";
 
 }
@@ -30742,25 +24261,33 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGLocatable
-abstract class SVGLocatable {
+class SVGLocatable extends NativeFieldWrapperClass1 {
+  SVGLocatable.internal();
+
 
   /** @domName SVGLocatable.farthestViewportElement */
-  SVGElement get farthestViewportElement;
+  SVGElement get farthestViewportElement native "SVGLocatable_farthestViewportElement_Getter";
+
 
   /** @domName SVGLocatable.nearestViewportElement */
-  SVGElement get nearestViewportElement;
+  SVGElement get nearestViewportElement native "SVGLocatable_nearestViewportElement_Getter";
+
 
   /** @domName SVGLocatable.getBBox */
-  SVGRect getBBox();
+  SVGRect getBBox() native "SVGLocatable_getBBox_Callback";
+
 
   /** @domName SVGLocatable.getCTM */
-  SVGMatrix getCTM();
+  SVGMatrix getCTM() native "SVGLocatable_getCTM_Callback";
+
 
   /** @domName SVGLocatable.getScreenCTM */
-  SVGMatrix getScreenCTM();
+  SVGMatrix getScreenCTM() native "SVGLocatable_getScreenCTM_Callback";
+
 
   /** @domName SVGLocatable.getTransformToElement */
-  SVGMatrix getTransformToElement(SVGElement element);
+  SVGMatrix getTransformToElement(SVGElement element) native "SVGLocatable_getTransformToElement_Callback";
+
 }
 // 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
@@ -30769,18 +24296,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMPathElement
-abstract class SVGMPathElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired {
-}
-// 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 SVGMPathElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired {
+  SVGMPathElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGMPathElementImpl extends _SVGElementImpl implements SVGMPathElement {
-
+  /** @domName SVGMPathElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGMPathElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGMPathElement.href */
   SVGAnimatedString get href native "SVGMPathElement_href_Getter";
 
 }
@@ -30791,7 +24315,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMarkerElement
-abstract class SVGMarkerElement implements SVGElement, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
+class SVGMarkerElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable {
+  SVGMarkerElement.internal(): super.internal();
 
   static const int SVG_MARKERUNITS_STROKEWIDTH = 2;
 
@@ -30805,77 +24330,80 @@
 
   static const int SVG_MARKER_ORIENT_UNKNOWN = 0;
 
+
   /** @domName SVGMarkerElement.markerHeight */
-  SVGAnimatedLength get markerHeight;
-
-  /** @domName SVGMarkerElement.markerUnits */
-  SVGAnimatedEnumeration get markerUnits;
-
-  /** @domName SVGMarkerElement.markerWidth */
-  SVGAnimatedLength get markerWidth;
-
-  /** @domName SVGMarkerElement.orientAngle */
-  SVGAnimatedAngle get orientAngle;
-
-  /** @domName SVGMarkerElement.orientType */
-  SVGAnimatedEnumeration get orientType;
-
-  /** @domName SVGMarkerElement.refX */
-  SVGAnimatedLength get refX;
-
-  /** @domName SVGMarkerElement.refY */
-  SVGAnimatedLength get refY;
-
-  /** @domName SVGMarkerElement.setOrientToAngle */
-  void setOrientToAngle(SVGAngle angle);
-
-  /** @domName SVGMarkerElement.setOrientToAuto */
-  void setOrientToAuto();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGMarkerElementImpl extends _SVGElementImpl implements SVGMarkerElement {
-
   SVGAnimatedLength get markerHeight native "SVGMarkerElement_markerHeight_Getter";
 
+
+  /** @domName SVGMarkerElement.markerUnits */
   SVGAnimatedEnumeration get markerUnits native "SVGMarkerElement_markerUnits_Getter";
 
+
+  /** @domName SVGMarkerElement.markerWidth */
   SVGAnimatedLength get markerWidth native "SVGMarkerElement_markerWidth_Getter";
 
+
+  /** @domName SVGMarkerElement.orientAngle */
   SVGAnimatedAngle get orientAngle native "SVGMarkerElement_orientAngle_Getter";
 
+
+  /** @domName SVGMarkerElement.orientType */
   SVGAnimatedEnumeration get orientType native "SVGMarkerElement_orientType_Getter";
 
+
+  /** @domName SVGMarkerElement.refX */
   SVGAnimatedLength get refX native "SVGMarkerElement_refX_Getter";
 
+
+  /** @domName SVGMarkerElement.refY */
   SVGAnimatedLength get refY native "SVGMarkerElement_refY_Getter";
 
+
+  /** @domName SVGMarkerElement.setOrientToAngle */
   void setOrientToAngle(SVGAngle angle) native "SVGMarkerElement_setOrientToAngle_Callback";
 
+
+  /** @domName SVGMarkerElement.setOrientToAuto */
   void setOrientToAuto() native "SVGMarkerElement_setOrientToAuto_Callback";
 
+
+  /** @domName SVGMarkerElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGMarkerElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGMarkerElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGMarkerElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGMarkerElement.viewBox */
   SVGAnimatedRect get viewBox native "SVGMarkerElement_viewBox_Getter";
 
+
+  /** @domName SVGMarkerElement.xmllang */
   String get xmllang native "SVGMarkerElement_xmllang_Getter";
 
+
+  /** @domName SVGMarkerElement.xmllang */
   void set xmllang(String value) native "SVGMarkerElement_xmllang_Setter";
 
+
+  /** @domName SVGMarkerElement.xmlspace */
   String get xmlspace native "SVGMarkerElement_xmlspace_Getter";
 
+
+  /** @domName SVGMarkerElement.xmlspace */
   void set xmlspace(String value) native "SVGMarkerElement_xmlspace_Setter";
 
+
+  /** @domName SVGMarkerElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGMarkerElement_className_Getter";
 
+
+  /** @domName SVGMarkerElement.style */
   CSSStyleDeclaration get style native "SVGMarkerElement_style_Getter";
 
+
+  /** @domName SVGMarkerElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGMarkerElement_getPresentationAttribute_Callback";
 
 }
@@ -30886,68 +24414,79 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMaskElement
-abstract class SVGMaskElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
+class SVGMaskElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired {
+  SVGMaskElement.internal(): super.internal();
+
 
   /** @domName SVGMaskElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGMaskElement.maskContentUnits */
-  SVGAnimatedEnumeration get maskContentUnits;
-
-  /** @domName SVGMaskElement.maskUnits */
-  SVGAnimatedEnumeration get maskUnits;
-
-  /** @domName SVGMaskElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGMaskElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGMaskElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGMaskElementImpl extends _SVGElementImpl implements SVGMaskElement {
-
   SVGAnimatedLength get height native "SVGMaskElement_height_Getter";
 
+
+  /** @domName SVGMaskElement.maskContentUnits */
   SVGAnimatedEnumeration get maskContentUnits native "SVGMaskElement_maskContentUnits_Getter";
 
+
+  /** @domName SVGMaskElement.maskUnits */
   SVGAnimatedEnumeration get maskUnits native "SVGMaskElement_maskUnits_Getter";
 
+
+  /** @domName SVGMaskElement.width */
   SVGAnimatedLength get width native "SVGMaskElement_width_Getter";
 
+
+  /** @domName SVGMaskElement.x */
   SVGAnimatedLength get x native "SVGMaskElement_x_Getter";
 
+
+  /** @domName SVGMaskElement.y */
   SVGAnimatedLength get y native "SVGMaskElement_y_Getter";
 
+
+  /** @domName SVGMaskElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGMaskElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGMaskElement.xmllang */
   String get xmllang native "SVGMaskElement_xmllang_Getter";
 
+
+  /** @domName SVGMaskElement.xmllang */
   void set xmllang(String value) native "SVGMaskElement_xmllang_Setter";
 
+
+  /** @domName SVGMaskElement.xmlspace */
   String get xmlspace native "SVGMaskElement_xmlspace_Getter";
 
+
+  /** @domName SVGMaskElement.xmlspace */
   void set xmlspace(String value) native "SVGMaskElement_xmlspace_Setter";
 
+
+  /** @domName SVGMaskElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGMaskElement_className_Getter";
 
+
+  /** @domName SVGMaskElement.style */
   CSSStyleDeclaration get style native "SVGMaskElement_style_Getter";
 
+
+  /** @domName SVGMaskElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGMaskElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGMaskElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGMaskElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGMaskElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGMaskElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGMaskElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGMaskElement_systemLanguage_Getter";
 
+
+  /** @domName SVGMaskElement.hasExtension */
   bool hasExtension(String extension) native "SVGMaskElement_hasExtension_Callback";
 
 }
@@ -30958,111 +24497,99 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMatrix
-abstract class SVGMatrix {
+class SVGMatrix extends NativeFieldWrapperClass1 {
+  SVGMatrix.internal();
+
 
   /** @domName SVGMatrix.a */
-  num a;
-
-  /** @domName SVGMatrix.b */
-  num b;
-
-  /** @domName SVGMatrix.c */
-  num c;
-
-  /** @domName SVGMatrix.d */
-  num d;
-
-  /** @domName SVGMatrix.e */
-  num e;
-
-  /** @domName SVGMatrix.f */
-  num f;
-
-  /** @domName SVGMatrix.flipX */
-  SVGMatrix flipX();
-
-  /** @domName SVGMatrix.flipY */
-  SVGMatrix flipY();
-
-  /** @domName SVGMatrix.inverse */
-  SVGMatrix inverse();
-
-  /** @domName SVGMatrix.multiply */
-  SVGMatrix multiply(SVGMatrix secondMatrix);
-
-  /** @domName SVGMatrix.rotate */
-  SVGMatrix rotate(num angle);
-
-  /** @domName SVGMatrix.rotateFromVector */
-  SVGMatrix rotateFromVector(num x, num y);
-
-  /** @domName SVGMatrix.scale */
-  SVGMatrix scale(num scaleFactor);
-
-  /** @domName SVGMatrix.scaleNonUniform */
-  SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY);
-
-  /** @domName SVGMatrix.skewX */
-  SVGMatrix skewX(num angle);
-
-  /** @domName SVGMatrix.skewY */
-  SVGMatrix skewY(num angle);
-
-  /** @domName SVGMatrix.translate */
-  SVGMatrix translate(num x, num y);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGMatrixImpl extends NativeFieldWrapperClass1 implements SVGMatrix {
-
   num get a native "SVGMatrix_a_Getter";
 
+
+  /** @domName SVGMatrix.a */
   void set a(num value) native "SVGMatrix_a_Setter";
 
+
+  /** @domName SVGMatrix.b */
   num get b native "SVGMatrix_b_Getter";
 
+
+  /** @domName SVGMatrix.b */
   void set b(num value) native "SVGMatrix_b_Setter";
 
+
+  /** @domName SVGMatrix.c */
   num get c native "SVGMatrix_c_Getter";
 
+
+  /** @domName SVGMatrix.c */
   void set c(num value) native "SVGMatrix_c_Setter";
 
+
+  /** @domName SVGMatrix.d */
   num get d native "SVGMatrix_d_Getter";
 
+
+  /** @domName SVGMatrix.d */
   void set d(num value) native "SVGMatrix_d_Setter";
 
+
+  /** @domName SVGMatrix.e */
   num get e native "SVGMatrix_e_Getter";
 
+
+  /** @domName SVGMatrix.e */
   void set e(num value) native "SVGMatrix_e_Setter";
 
+
+  /** @domName SVGMatrix.f */
   num get f native "SVGMatrix_f_Getter";
 
+
+  /** @domName SVGMatrix.f */
   void set f(num value) native "SVGMatrix_f_Setter";
 
+
+  /** @domName SVGMatrix.flipX */
   SVGMatrix flipX() native "SVGMatrix_flipX_Callback";
 
+
+  /** @domName SVGMatrix.flipY */
   SVGMatrix flipY() native "SVGMatrix_flipY_Callback";
 
+
+  /** @domName SVGMatrix.inverse */
   SVGMatrix inverse() native "SVGMatrix_inverse_Callback";
 
+
+  /** @domName SVGMatrix.multiply */
   SVGMatrix multiply(SVGMatrix secondMatrix) native "SVGMatrix_multiply_Callback";
 
+
+  /** @domName SVGMatrix.rotate */
   SVGMatrix rotate(num angle) native "SVGMatrix_rotate_Callback";
 
+
+  /** @domName SVGMatrix.rotateFromVector */
   SVGMatrix rotateFromVector(num x, num y) native "SVGMatrix_rotateFromVector_Callback";
 
+
+  /** @domName SVGMatrix.scale */
   SVGMatrix scale(num scaleFactor) native "SVGMatrix_scale_Callback";
 
+
+  /** @domName SVGMatrix.scaleNonUniform */
   SVGMatrix scaleNonUniform(num scaleFactorX, num scaleFactorY) native "SVGMatrix_scaleNonUniform_Callback";
 
+
+  /** @domName SVGMatrix.skewX */
   SVGMatrix skewX(num angle) native "SVGMatrix_skewX_Callback";
 
+
+  /** @domName SVGMatrix.skewY */
   SVGMatrix skewY(num angle) native "SVGMatrix_skewY_Callback";
 
+
+  /** @domName SVGMatrix.translate */
   SVGMatrix translate(num x, num y) native "SVGMatrix_translate_Callback";
 
 }
@@ -31073,15 +24600,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMetadataElement
-abstract class SVGMetadataElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGMetadataElementImpl extends _SVGElementImpl implements SVGMetadataElement {
+class SVGMetadataElement extends SVGElement {
+  SVGMetadataElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31091,15 +24611,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGMissingGlyphElement
-abstract class SVGMissingGlyphElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGMissingGlyphElementImpl extends _SVGElementImpl implements SVGMissingGlyphElement {
+class SVGMissingGlyphElement extends SVGElement {
+  SVGMissingGlyphElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31109,21 +24622,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGNumber
-abstract class SVGNumber {
+class SVGNumber extends NativeFieldWrapperClass1 {
+  SVGNumber.internal();
+
 
   /** @domName SVGNumber.value */
-  num value;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGNumberImpl extends NativeFieldWrapperClass1 implements SVGNumber {
-
   num get value native "SVGNumber_value_Getter";
 
+
+  /** @domName SVGNumber.value */
   void set value(num value) native "SVGNumber_value_Setter";
 
 }
@@ -31134,40 +24641,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGNumberList
-abstract class SVGNumberList implements List<SVGNumber> {
+class SVGNumberList extends NativeFieldWrapperClass1 implements List<SVGNumber> {
+  SVGNumberList.internal();
+
 
   /** @domName SVGNumberList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGNumberList.appendItem */
-  SVGNumber appendItem(SVGNumber item);
-
-  /** @domName SVGNumberList.clear */
-  void clear();
-
-  /** @domName SVGNumberList.getItem */
-  SVGNumber getItem(int index);
-
-  /** @domName SVGNumberList.initialize */
-  SVGNumber initialize(SVGNumber item);
-
-  /** @domName SVGNumberList.insertItemBefore */
-  SVGNumber insertItemBefore(SVGNumber item, int index);
-
-  /** @domName SVGNumberList.removeItem */
-  SVGNumber removeItem(int index);
-
-  /** @domName SVGNumberList.replaceItem */
-  SVGNumber replaceItem(SVGNumber item, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGNumberListImpl extends NativeFieldWrapperClass1 implements SVGNumberList {
-
   int get numberOfItems native "SVGNumberList_numberOfItems_Getter";
 
   SVGNumber operator[](int index) native "SVGNumberList_item_Callback";
@@ -31253,18 +24731,32 @@
 
   // -- end List<SVGNumber> mixins.
 
+
+  /** @domName SVGNumberList.appendItem */
   SVGNumber appendItem(SVGNumber item) native "SVGNumberList_appendItem_Callback";
 
+
+  /** @domName SVGNumberList.clear */
   void clear() native "SVGNumberList_clear_Callback";
 
+
+  /** @domName SVGNumberList.getItem */
   SVGNumber getItem(int index) native "SVGNumberList_getItem_Callback";
 
+
+  /** @domName SVGNumberList.initialize */
   SVGNumber initialize(SVGNumber item) native "SVGNumberList_initialize_Callback";
 
+
+  /** @domName SVGNumberList.insertItemBefore */
   SVGNumber insertItemBefore(SVGNumber item, int index) native "SVGNumberList_insertItemBefore_Callback";
 
+
+  /** @domName SVGNumberList.removeItem */
   SVGNumber removeItem(int index) native "SVGNumberList_removeItem_Callback";
 
+
+  /** @domName SVGNumberList.replaceItem */
   SVGNumber replaceItem(SVGNumber item, int index) native "SVGNumberList_replaceItem_Callback";
 
 }
@@ -31275,7 +24767,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPaint
-abstract class SVGPaint implements SVGColor {
+class SVGPaint extends SVGColor {
+  SVGPaint.internal(): super.internal();
 
   static const int SVG_PAINTTYPE_CURRENTCOLOR = 102;
 
@@ -31297,32 +24790,20 @@
 
   static const int SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
 
+
   /** @domName SVGPaint.paintType */
-  int get paintType;
-
-  /** @domName SVGPaint.uri */
-  String get uri;
-
-  /** @domName SVGPaint.setPaint */
-  void setPaint(int paintType, String uri, String rgbColor, String iccColor);
-
-  /** @domName SVGPaint.setUri */
-  void setUri(String uri);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPaintImpl extends _SVGColorImpl implements SVGPaint {
-
   int get paintType native "SVGPaint_paintType_Getter";
 
+
+  /** @domName SVGPaint.uri */
   String get uri native "SVGPaint_uri_Getter";
 
+
+  /** @domName SVGPaint.setPaint */
   void setPaint(int paintType, String uri, String rgbColor, String iccColor) native "SVGPaint_setPaint_Callback";
 
+
+  /** @domName SVGPaint.setUri */
   void setUri(String uri) native "SVGPaint_setUri_Callback";
 
 }
@@ -31333,187 +24814,191 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathElement
-abstract class SVGPathElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGPathElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGPathElement.internal(): super.internal();
+
 
   /** @domName SVGPathElement.animatedNormalizedPathSegList */
-  SVGPathSegList get animatedNormalizedPathSegList;
-
-  /** @domName SVGPathElement.animatedPathSegList */
-  SVGPathSegList get animatedPathSegList;
-
-  /** @domName SVGPathElement.normalizedPathSegList */
-  SVGPathSegList get normalizedPathSegList;
-
-  /** @domName SVGPathElement.pathLength */
-  SVGAnimatedNumber get pathLength;
-
-  /** @domName SVGPathElement.pathSegList */
-  SVGPathSegList get pathSegList;
-
-  /** @domName SVGPathElement.createSVGPathSegArcAbs */
-  SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
-
-  /** @domName SVGPathElement.createSVGPathSegArcRel */
-  SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag);
-
-  /** @domName SVGPathElement.createSVGPathSegClosePath */
-  SVGPathSegClosePath createSVGPathSegClosePath();
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
-  SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
-  SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
-  SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
-  SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
-  SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
-  SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
-  SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
-  SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
-  SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
-  SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
-  SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
-  SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
-  SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y);
-
-  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
-  SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y);
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
-  SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y);
-
-  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
-  SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y);
-
-  /** @domName SVGPathElement.getPathSegAtLength */
-  int getPathSegAtLength(num distance);
-
-  /** @domName SVGPathElement.getPointAtLength */
-  SVGPoint getPointAtLength(num distance);
-
-  /** @domName SVGPathElement.getTotalLength */
-  num getTotalLength();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathElementImpl extends _SVGElementImpl implements SVGPathElement {
-
   SVGPathSegList get animatedNormalizedPathSegList native "SVGPathElement_animatedNormalizedPathSegList_Getter";
 
+
+  /** @domName SVGPathElement.animatedPathSegList */
   SVGPathSegList get animatedPathSegList native "SVGPathElement_animatedPathSegList_Getter";
 
+
+  /** @domName SVGPathElement.normalizedPathSegList */
   SVGPathSegList get normalizedPathSegList native "SVGPathElement_normalizedPathSegList_Getter";
 
+
+  /** @domName SVGPathElement.pathLength */
   SVGAnimatedNumber get pathLength native "SVGPathElement_pathLength_Getter";
 
+
+  /** @domName SVGPathElement.pathSegList */
   SVGPathSegList get pathSegList native "SVGPathElement_pathSegList_Getter";
 
+
+  /** @domName SVGPathElement.createSVGPathSegArcAbs */
   SVGPathSegArcAbs createSVGPathSegArcAbs(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegArcRel */
   SVGPathSegArcRel createSVGPathSegArcRel(num x, num y, num r1, num r2, num angle, bool largeArcFlag, bool sweepFlag) native "SVGPathElement_createSVGPathSegArcRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegClosePath */
   SVGPathSegClosePath createSVGPathSegClosePath() native "SVGPathElement_createSVGPathSegClosePath_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicAbs */
   SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicRel */
   SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(num x, num y, num x1, num y1, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs */
   SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel */
   SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(num x, num y, num x2, num y2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticAbs */
   SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticRel */
   SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(num x, num y, num x1, num y1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs */
   SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel */
   SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(num x, num y) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoAbs */
   SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalAbs */
   SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoHorizontalRel */
   SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(num x) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoRel */
   SVGPathSegLinetoRel createSVGPathSegLinetoRel(num x, num y) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalAbs */
   SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegLinetoVerticalRel */
   SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(num y) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegMovetoAbs */
   SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(num x, num y) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
 
+
+  /** @domName SVGPathElement.createSVGPathSegMovetoRel */
   SVGPathSegMovetoRel createSVGPathSegMovetoRel(num x, num y) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
 
+
+  /** @domName SVGPathElement.getPathSegAtLength */
   int getPathSegAtLength(num distance) native "SVGPathElement_getPathSegAtLength_Callback";
 
+
+  /** @domName SVGPathElement.getPointAtLength */
   SVGPoint getPointAtLength(num distance) native "SVGPathElement_getPointAtLength_Callback";
 
+
+  /** @domName SVGPathElement.getTotalLength */
   num getTotalLength() native "SVGPathElement_getTotalLength_Callback";
 
+
+  /** @domName SVGPathElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGPathElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGPathElement.xmllang */
   String get xmllang native "SVGPathElement_xmllang_Getter";
 
+
+  /** @domName SVGPathElement.xmllang */
   void set xmllang(String value) native "SVGPathElement_xmllang_Setter";
 
+
+  /** @domName SVGPathElement.xmlspace */
   String get xmlspace native "SVGPathElement_xmlspace_Getter";
 
+
+  /** @domName SVGPathElement.xmlspace */
   void set xmlspace(String value) native "SVGPathElement_xmlspace_Setter";
 
+
+  /** @domName SVGPathElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGPathElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGPathElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGPathElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGPathElement.getBBox */
   SVGRect getBBox() native "SVGPathElement_getBBox_Callback";
 
+
+  /** @domName SVGPathElement.getCTM */
   SVGMatrix getCTM() native "SVGPathElement_getCTM_Callback";
 
+
+  /** @domName SVGPathElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGPathElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGPathElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGPathElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGPathElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGPathElement_className_Getter";
 
+
+  /** @domName SVGPathElement.style */
   CSSStyleDeclaration get style native "SVGPathElement_style_Getter";
 
+
+  /** @domName SVGPathElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGPathElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGPathElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGPathElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGPathElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGPathElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGPathElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGPathElement_systemLanguage_Getter";
 
+
+  /** @domName SVGPathElement.hasExtension */
   bool hasExtension(String extension) native "SVGPathElement_hasExtension_Callback";
 
+
+  /** @domName SVGPathElement.transform */
   SVGAnimatedTransformList get transform native "SVGPathElement_transform_Getter";
 
 }
@@ -31524,7 +25009,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSeg
-abstract class SVGPathSeg {
+class SVGPathSeg extends NativeFieldWrapperClass1 {
+  SVGPathSeg.internal();
 
   static const int PATHSEG_ARC_ABS = 10;
 
@@ -31566,11 +25052,14 @@
 
   static const int PATHSEG_UNKNOWN = 0;
 
+
   /** @domName SVGPathSeg.pathSegType */
-  int get pathSegType;
+  int get pathSegType native "SVGPathSeg_pathSegType_Getter";
+
 
   /** @domName SVGPathSeg.pathSegTypeAsLetter */
-  String get pathSegTypeAsLetter;
+  String get pathSegTypeAsLetter native "SVGPathSeg_pathSegTypeAsLetter_Getter";
+
 }
 // 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
@@ -31579,63 +25068,63 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegArcAbs
-abstract class SVGPathSegArcAbs implements SVGPathSeg {
+class SVGPathSegArcAbs extends SVGPathSeg {
+  SVGPathSegArcAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegArcAbs.angle */
-  num angle;
-
-  /** @domName SVGPathSegArcAbs.largeArcFlag */
-  bool largeArcFlag;
-
-  /** @domName SVGPathSegArcAbs.r1 */
-  num r1;
-
-  /** @domName SVGPathSegArcAbs.r2 */
-  num r2;
-
-  /** @domName SVGPathSegArcAbs.sweepFlag */
-  bool sweepFlag;
-
-  /** @domName SVGPathSegArcAbs.x */
-  num x;
-
-  /** @domName SVGPathSegArcAbs.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegArcAbsImpl extends _SVGPathSegImpl implements SVGPathSegArcAbs {
-
   num get angle native "SVGPathSegArcAbs_angle_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.angle */
   void set angle(num value) native "SVGPathSegArcAbs_angle_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.largeArcFlag */
   bool get largeArcFlag native "SVGPathSegArcAbs_largeArcFlag_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.largeArcFlag */
   void set largeArcFlag(bool value) native "SVGPathSegArcAbs_largeArcFlag_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.r1 */
   num get r1 native "SVGPathSegArcAbs_r1_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.r1 */
   void set r1(num value) native "SVGPathSegArcAbs_r1_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.r2 */
   num get r2 native "SVGPathSegArcAbs_r2_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.r2 */
   void set r2(num value) native "SVGPathSegArcAbs_r2_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.sweepFlag */
   bool get sweepFlag native "SVGPathSegArcAbs_sweepFlag_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.sweepFlag */
   void set sweepFlag(bool value) native "SVGPathSegArcAbs_sweepFlag_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.x */
   num get x native "SVGPathSegArcAbs_x_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.x */
   void set x(num value) native "SVGPathSegArcAbs_x_Setter";
 
+
+  /** @domName SVGPathSegArcAbs.y */
   num get y native "SVGPathSegArcAbs_y_Getter";
 
+
+  /** @domName SVGPathSegArcAbs.y */
   void set y(num value) native "SVGPathSegArcAbs_y_Setter";
 
 }
@@ -31646,63 +25135,63 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegArcRel
-abstract class SVGPathSegArcRel implements SVGPathSeg {
+class SVGPathSegArcRel extends SVGPathSeg {
+  SVGPathSegArcRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegArcRel.angle */
-  num angle;
-
-  /** @domName SVGPathSegArcRel.largeArcFlag */
-  bool largeArcFlag;
-
-  /** @domName SVGPathSegArcRel.r1 */
-  num r1;
-
-  /** @domName SVGPathSegArcRel.r2 */
-  num r2;
-
-  /** @domName SVGPathSegArcRel.sweepFlag */
-  bool sweepFlag;
-
-  /** @domName SVGPathSegArcRel.x */
-  num x;
-
-  /** @domName SVGPathSegArcRel.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegArcRelImpl extends _SVGPathSegImpl implements SVGPathSegArcRel {
-
   num get angle native "SVGPathSegArcRel_angle_Getter";
 
+
+  /** @domName SVGPathSegArcRel.angle */
   void set angle(num value) native "SVGPathSegArcRel_angle_Setter";
 
+
+  /** @domName SVGPathSegArcRel.largeArcFlag */
   bool get largeArcFlag native "SVGPathSegArcRel_largeArcFlag_Getter";
 
+
+  /** @domName SVGPathSegArcRel.largeArcFlag */
   void set largeArcFlag(bool value) native "SVGPathSegArcRel_largeArcFlag_Setter";
 
+
+  /** @domName SVGPathSegArcRel.r1 */
   num get r1 native "SVGPathSegArcRel_r1_Getter";
 
+
+  /** @domName SVGPathSegArcRel.r1 */
   void set r1(num value) native "SVGPathSegArcRel_r1_Setter";
 
+
+  /** @domName SVGPathSegArcRel.r2 */
   num get r2 native "SVGPathSegArcRel_r2_Getter";
 
+
+  /** @domName SVGPathSegArcRel.r2 */
   void set r2(num value) native "SVGPathSegArcRel_r2_Setter";
 
+
+  /** @domName SVGPathSegArcRel.sweepFlag */
   bool get sweepFlag native "SVGPathSegArcRel_sweepFlag_Getter";
 
+
+  /** @domName SVGPathSegArcRel.sweepFlag */
   void set sweepFlag(bool value) native "SVGPathSegArcRel_sweepFlag_Setter";
 
+
+  /** @domName SVGPathSegArcRel.x */
   num get x native "SVGPathSegArcRel_x_Getter";
 
+
+  /** @domName SVGPathSegArcRel.x */
   void set x(num value) native "SVGPathSegArcRel_x_Setter";
 
+
+  /** @domName SVGPathSegArcRel.y */
   num get y native "SVGPathSegArcRel_y_Getter";
 
+
+  /** @domName SVGPathSegArcRel.y */
   void set y(num value) native "SVGPathSegArcRel_y_Setter";
 
 }
@@ -31713,15 +25202,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegClosePath
-abstract class SVGPathSegClosePath implements SVGPathSeg {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegClosePathImpl extends _SVGPathSegImpl implements SVGPathSegClosePath {
+class SVGPathSegClosePath extends SVGPathSeg {
+  SVGPathSegClosePath.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31731,56 +25213,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoCubicAbs
-abstract class SVGPathSegCurvetoCubicAbs implements SVGPathSeg {
+class SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
+  SVGPathSegCurvetoCubicAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoCubicAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
-  num y1;
-
-  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoCubicAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicAbs {
-
   num get x native "SVGPathSegCurvetoCubicAbs_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x */
   void set x(num value) native "SVGPathSegCurvetoCubicAbs_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
   num get x1 native "SVGPathSegCurvetoCubicAbs_x1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x1 */
   void set x1(num value) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
   num get x2 native "SVGPathSegCurvetoCubicAbs_x2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.x2 */
   void set x2(num value) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y */
   num get y native "SVGPathSegCurvetoCubicAbs_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y */
   void set y(num value) native "SVGPathSegCurvetoCubicAbs_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
   num get y1 native "SVGPathSegCurvetoCubicAbs_y1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y1 */
   void set y1(num value) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
   num get y2 native "SVGPathSegCurvetoCubicAbs_y2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicAbs.y2 */
   void set y2(num value) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
 
 }
@@ -31791,56 +25272,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoCubicRel
-abstract class SVGPathSegCurvetoCubicRel implements SVGPathSeg {
+class SVGPathSegCurvetoCubicRel extends SVGPathSeg {
+  SVGPathSegCurvetoCubicRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoCubicRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicRel.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoCubicRel.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y1 */
-  num y1;
-
-  /** @domName SVGPathSegCurvetoCubicRel.y2 */
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoCubicRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicRel {
-
   num get x native "SVGPathSegCurvetoCubicRel_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.x */
   void set x(num value) native "SVGPathSegCurvetoCubicRel_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.x1 */
   num get x1 native "SVGPathSegCurvetoCubicRel_x1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.x1 */
   void set x1(num value) native "SVGPathSegCurvetoCubicRel_x1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.x2 */
   num get x2 native "SVGPathSegCurvetoCubicRel_x2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.x2 */
   void set x2(num value) native "SVGPathSegCurvetoCubicRel_x2_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y */
   num get y native "SVGPathSegCurvetoCubicRel_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y */
   void set y(num value) native "SVGPathSegCurvetoCubicRel_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y1 */
   num get y1 native "SVGPathSegCurvetoCubicRel_y1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y1 */
   void set y1(num value) native "SVGPathSegCurvetoCubicRel_y1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y2 */
   num get y2 native "SVGPathSegCurvetoCubicRel_y2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicRel.y2 */
   void set y2(num value) native "SVGPathSegCurvetoCubicRel_y2_Setter";
 
 }
@@ -31851,42 +25331,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoCubicSmoothAbs
-abstract class SVGPathSegCurvetoCubicSmoothAbs implements SVGPathSeg {
+class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
+  SVGPathSegCurvetoCubicSmoothAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoCubicSmoothAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicSmoothAbs {
-
   num get x native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x */
   void set x(num value) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
   num get x2 native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.x2 */
   void set x2(num value) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
   num get y native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y */
   void set y(num value) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
   num get y2 native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothAbs.y2 */
   void set y2(num value) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
 
 }
@@ -31897,42 +25374,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoCubicSmoothRel
-abstract class SVGPathSegCurvetoCubicSmoothRel implements SVGPathSeg {
+class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
+  SVGPathSegCurvetoCubicSmoothRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
-  num x2;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
-  num y2;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoCubicSmoothRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoCubicSmoothRel {
-
   num get x native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.x */
   void set x(num value) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
   num get x2 native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.x2 */
   void set x2(num value) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
   num get y native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y */
   void set y(num value) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
   num get y2 native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
 
+
+  /** @domName SVGPathSegCurvetoCubicSmoothRel.y2 */
   void set y2(num value) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
 
 }
@@ -31943,42 +25417,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoQuadraticAbs
-abstract class SVGPathSegCurvetoQuadraticAbs implements SVGPathSeg {
+class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
+  SVGPathSegCurvetoQuadraticAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoQuadraticAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
-  num y1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoQuadraticAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticAbs {
-
   num get x native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.x */
   void set x(num value) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
   num get x1 native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.x1 */
   void set x1(num value) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
   num get y native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y */
   void set y(num value) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
   num get y1 native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticAbs.y1 */
   void set y1(num value) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
 
 }
@@ -31989,42 +25460,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoQuadraticRel
-abstract class SVGPathSegCurvetoQuadraticRel implements SVGPathSeg {
+class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
+  SVGPathSegCurvetoQuadraticRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoQuadraticRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
-  num x1;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y */
-  num y;
-
-  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
-  num y1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoQuadraticRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticRel {
-
   num get x native "SVGPathSegCurvetoQuadraticRel_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.x */
   void set x(num value) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
   num get x1 native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.x1 */
   void set x1(num value) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y */
   num get y native "SVGPathSegCurvetoQuadraticRel_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y */
   void set y(num value) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
   num get y1 native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticRel.y1 */
   void set y1(num value) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
 
 }
@@ -32035,28 +25503,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoQuadraticSmoothAbs
-abstract class SVGPathSegCurvetoQuadraticSmoothAbs implements SVGPathSeg {
+class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
+  SVGPathSegCurvetoQuadraticSmoothAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoQuadraticSmoothAbsImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticSmoothAbs {
-
   num get x native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.x */
   void set x(num value) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
   num get y native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothAbs.y */
   void set y(num value) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
 
 }
@@ -32067,28 +25530,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegCurvetoQuadraticSmoothRel
-abstract class SVGPathSegCurvetoQuadraticSmoothRel implements SVGPathSeg {
+class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
+  SVGPathSegCurvetoQuadraticSmoothRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
-  num x;
-
-  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegCurvetoQuadraticSmoothRelImpl extends _SVGPathSegImpl implements SVGPathSegCurvetoQuadraticSmoothRel {
-
   num get x native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.x */
   void set x(num value) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
   num get y native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
 
+
+  /** @domName SVGPathSegCurvetoQuadraticSmoothRel.y */
   void set y(num value) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
 
 }
@@ -32098,42 +25556,24 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SVGPathSegImpl extends NativeFieldWrapperClass1 implements SVGPathSeg {
-
-  int get pathSegType native "SVGPathSeg_pathSegType_Getter";
-
-  String get pathSegTypeAsLetter native "SVGPathSeg_pathSegTypeAsLetter_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName SVGPathSegLinetoAbs
-abstract class SVGPathSegLinetoAbs implements SVGPathSeg {
+class SVGPathSegLinetoAbs extends SVGPathSeg {
+  SVGPathSegLinetoAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoAbs.x */
-  num x;
-
-  /** @domName SVGPathSegLinetoAbs.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoAbs {
-
   num get x native "SVGPathSegLinetoAbs_x_Getter";
 
+
+  /** @domName SVGPathSegLinetoAbs.x */
   void set x(num value) native "SVGPathSegLinetoAbs_x_Setter";
 
+
+  /** @domName SVGPathSegLinetoAbs.y */
   num get y native "SVGPathSegLinetoAbs_y_Getter";
 
+
+  /** @domName SVGPathSegLinetoAbs.y */
   void set y(num value) native "SVGPathSegLinetoAbs_y_Setter";
 
 }
@@ -32144,21 +25584,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegLinetoHorizontalAbs
-abstract class SVGPathSegLinetoHorizontalAbs implements SVGPathSeg {
+class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
+  SVGPathSegLinetoHorizontalAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoHorizontalAbs.x */
-  num x;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoHorizontalAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoHorizontalAbs {
-
   num get x native "SVGPathSegLinetoHorizontalAbs_x_Getter";
 
+
+  /** @domName SVGPathSegLinetoHorizontalAbs.x */
   void set x(num value) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
 
 }
@@ -32169,21 +25603,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegLinetoHorizontalRel
-abstract class SVGPathSegLinetoHorizontalRel implements SVGPathSeg {
+class SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
+  SVGPathSegLinetoHorizontalRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoHorizontalRel.x */
-  num x;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoHorizontalRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoHorizontalRel {
-
   num get x native "SVGPathSegLinetoHorizontalRel_x_Getter";
 
+
+  /** @domName SVGPathSegLinetoHorizontalRel.x */
   void set x(num value) native "SVGPathSegLinetoHorizontalRel_x_Setter";
 
 }
@@ -32194,28 +25622,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegLinetoRel
-abstract class SVGPathSegLinetoRel implements SVGPathSeg {
+class SVGPathSegLinetoRel extends SVGPathSeg {
+  SVGPathSegLinetoRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoRel.x */
-  num x;
-
-  /** @domName SVGPathSegLinetoRel.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoRel {
-
   num get x native "SVGPathSegLinetoRel_x_Getter";
 
+
+  /** @domName SVGPathSegLinetoRel.x */
   void set x(num value) native "SVGPathSegLinetoRel_x_Setter";
 
+
+  /** @domName SVGPathSegLinetoRel.y */
   num get y native "SVGPathSegLinetoRel_y_Getter";
 
+
+  /** @domName SVGPathSegLinetoRel.y */
   void set y(num value) native "SVGPathSegLinetoRel_y_Setter";
 
 }
@@ -32226,21 +25649,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegLinetoVerticalAbs
-abstract class SVGPathSegLinetoVerticalAbs implements SVGPathSeg {
+class SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
+  SVGPathSegLinetoVerticalAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoVerticalAbs.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoVerticalAbsImpl extends _SVGPathSegImpl implements SVGPathSegLinetoVerticalAbs {
-
   num get y native "SVGPathSegLinetoVerticalAbs_y_Getter";
 
+
+  /** @domName SVGPathSegLinetoVerticalAbs.y */
   void set y(num value) native "SVGPathSegLinetoVerticalAbs_y_Setter";
 
 }
@@ -32251,21 +25668,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegLinetoVerticalRel
-abstract class SVGPathSegLinetoVerticalRel implements SVGPathSeg {
+class SVGPathSegLinetoVerticalRel extends SVGPathSeg {
+  SVGPathSegLinetoVerticalRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegLinetoVerticalRel.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegLinetoVerticalRelImpl extends _SVGPathSegImpl implements SVGPathSegLinetoVerticalRel {
-
   num get y native "SVGPathSegLinetoVerticalRel_y_Getter";
 
+
+  /** @domName SVGPathSegLinetoVerticalRel.y */
   void set y(num value) native "SVGPathSegLinetoVerticalRel_y_Setter";
 
 }
@@ -32276,40 +25687,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegList
-abstract class SVGPathSegList implements List<SVGPathSeg> {
+class SVGPathSegList extends NativeFieldWrapperClass1 implements List<SVGPathSeg> {
+  SVGPathSegList.internal();
+
 
   /** @domName SVGPathSegList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGPathSegList.appendItem */
-  SVGPathSeg appendItem(SVGPathSeg newItem);
-
-  /** @domName SVGPathSegList.clear */
-  void clear();
-
-  /** @domName SVGPathSegList.getItem */
-  SVGPathSeg getItem(int index);
-
-  /** @domName SVGPathSegList.initialize */
-  SVGPathSeg initialize(SVGPathSeg newItem);
-
-  /** @domName SVGPathSegList.insertItemBefore */
-  SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index);
-
-  /** @domName SVGPathSegList.removeItem */
-  SVGPathSeg removeItem(int index);
-
-  /** @domName SVGPathSegList.replaceItem */
-  SVGPathSeg replaceItem(SVGPathSeg newItem, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegListImpl extends NativeFieldWrapperClass1 implements SVGPathSegList {
-
   int get numberOfItems native "SVGPathSegList_numberOfItems_Getter";
 
   SVGPathSeg operator[](int index) native "SVGPathSegList_item_Callback";
@@ -32395,18 +25777,32 @@
 
   // -- end List<SVGPathSeg> mixins.
 
+
+  /** @domName SVGPathSegList.appendItem */
   SVGPathSeg appendItem(SVGPathSeg newItem) native "SVGPathSegList_appendItem_Callback";
 
+
+  /** @domName SVGPathSegList.clear */
   void clear() native "SVGPathSegList_clear_Callback";
 
+
+  /** @domName SVGPathSegList.getItem */
   SVGPathSeg getItem(int index) native "SVGPathSegList_getItem_Callback";
 
+
+  /** @domName SVGPathSegList.initialize */
   SVGPathSeg initialize(SVGPathSeg newItem) native "SVGPathSegList_initialize_Callback";
 
+
+  /** @domName SVGPathSegList.insertItemBefore */
   SVGPathSeg insertItemBefore(SVGPathSeg newItem, int index) native "SVGPathSegList_insertItemBefore_Callback";
 
+
+  /** @domName SVGPathSegList.removeItem */
   SVGPathSeg removeItem(int index) native "SVGPathSegList_removeItem_Callback";
 
+
+  /** @domName SVGPathSegList.replaceItem */
   SVGPathSeg replaceItem(SVGPathSeg newItem, int index) native "SVGPathSegList_replaceItem_Callback";
 
 }
@@ -32417,28 +25813,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegMovetoAbs
-abstract class SVGPathSegMovetoAbs implements SVGPathSeg {
+class SVGPathSegMovetoAbs extends SVGPathSeg {
+  SVGPathSegMovetoAbs.internal(): super.internal();
+
 
   /** @domName SVGPathSegMovetoAbs.x */
-  num x;
-
-  /** @domName SVGPathSegMovetoAbs.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegMovetoAbsImpl extends _SVGPathSegImpl implements SVGPathSegMovetoAbs {
-
   num get x native "SVGPathSegMovetoAbs_x_Getter";
 
+
+  /** @domName SVGPathSegMovetoAbs.x */
   void set x(num value) native "SVGPathSegMovetoAbs_x_Setter";
 
+
+  /** @domName SVGPathSegMovetoAbs.y */
   num get y native "SVGPathSegMovetoAbs_y_Getter";
 
+
+  /** @domName SVGPathSegMovetoAbs.y */
   void set y(num value) native "SVGPathSegMovetoAbs_y_Setter";
 
 }
@@ -32449,28 +25840,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPathSegMovetoRel
-abstract class SVGPathSegMovetoRel implements SVGPathSeg {
+class SVGPathSegMovetoRel extends SVGPathSeg {
+  SVGPathSegMovetoRel.internal(): super.internal();
+
 
   /** @domName SVGPathSegMovetoRel.x */
-  num x;
-
-  /** @domName SVGPathSegMovetoRel.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPathSegMovetoRelImpl extends _SVGPathSegImpl implements SVGPathSegMovetoRel {
-
   num get x native "SVGPathSegMovetoRel_x_Getter";
 
+
+  /** @domName SVGPathSegMovetoRel.x */
   void set x(num value) native "SVGPathSegMovetoRel_x_Setter";
 
+
+  /** @domName SVGPathSegMovetoRel.y */
   num get y native "SVGPathSegMovetoRel_y_Getter";
 
+
+  /** @domName SVGPathSegMovetoRel.y */
   void set y(num value) native "SVGPathSegMovetoRel_y_Setter";
 
 }
@@ -32481,79 +25867,95 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPatternElement
-abstract class SVGPatternElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
+class SVGPatternElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGFitToViewBox, SVGExternalResourcesRequired {
+  SVGPatternElement.internal(): super.internal();
+
 
   /** @domName SVGPatternElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGPatternElement.patternContentUnits */
-  SVGAnimatedEnumeration get patternContentUnits;
-
-  /** @domName SVGPatternElement.patternTransform */
-  SVGAnimatedTransformList get patternTransform;
-
-  /** @domName SVGPatternElement.patternUnits */
-  SVGAnimatedEnumeration get patternUnits;
-
-  /** @domName SVGPatternElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGPatternElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGPatternElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPatternElementImpl extends _SVGElementImpl implements SVGPatternElement {
-
   SVGAnimatedLength get height native "SVGPatternElement_height_Getter";
 
+
+  /** @domName SVGPatternElement.patternContentUnits */
   SVGAnimatedEnumeration get patternContentUnits native "SVGPatternElement_patternContentUnits_Getter";
 
+
+  /** @domName SVGPatternElement.patternTransform */
   SVGAnimatedTransformList get patternTransform native "SVGPatternElement_patternTransform_Getter";
 
+
+  /** @domName SVGPatternElement.patternUnits */
   SVGAnimatedEnumeration get patternUnits native "SVGPatternElement_patternUnits_Getter";
 
+
+  /** @domName SVGPatternElement.width */
   SVGAnimatedLength get width native "SVGPatternElement_width_Getter";
 
+
+  /** @domName SVGPatternElement.x */
   SVGAnimatedLength get x native "SVGPatternElement_x_Getter";
 
+
+  /** @domName SVGPatternElement.y */
   SVGAnimatedLength get y native "SVGPatternElement_y_Getter";
 
+
+  /** @domName SVGPatternElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGPatternElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGPatternElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGPatternElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGPatternElement.viewBox */
   SVGAnimatedRect get viewBox native "SVGPatternElement_viewBox_Getter";
 
+
+  /** @domName SVGPatternElement.xmllang */
   String get xmllang native "SVGPatternElement_xmllang_Getter";
 
+
+  /** @domName SVGPatternElement.xmllang */
   void set xmllang(String value) native "SVGPatternElement_xmllang_Setter";
 
+
+  /** @domName SVGPatternElement.xmlspace */
   String get xmlspace native "SVGPatternElement_xmlspace_Getter";
 
+
+  /** @domName SVGPatternElement.xmlspace */
   void set xmlspace(String value) native "SVGPatternElement_xmlspace_Setter";
 
+
+  /** @domName SVGPatternElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGPatternElement_className_Getter";
 
+
+  /** @domName SVGPatternElement.style */
   CSSStyleDeclaration get style native "SVGPatternElement_style_Getter";
 
+
+  /** @domName SVGPatternElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGPatternElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGPatternElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGPatternElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGPatternElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGPatternElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGPatternElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGPatternElement_systemLanguage_Getter";
 
+
+  /** @domName SVGPatternElement.hasExtension */
   bool hasExtension(String extension) native "SVGPatternElement_hasExtension_Callback";
 
+
+  /** @domName SVGPatternElement.href */
   SVGAnimatedString get href native "SVGPatternElement_href_Getter";
 
 }
@@ -32564,33 +25966,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPoint
-abstract class SVGPoint {
+class SVGPoint extends NativeFieldWrapperClass1 {
+  SVGPoint.internal();
+
 
   /** @domName SVGPoint.x */
-  num x;
-
-  /** @domName SVGPoint.y */
-  num y;
-
-  /** @domName SVGPoint.matrixTransform */
-  SVGPoint matrixTransform(SVGMatrix matrix);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPointImpl extends NativeFieldWrapperClass1 implements SVGPoint {
-
   num get x native "SVGPoint_x_Getter";
 
+
+  /** @domName SVGPoint.x */
   void set x(num value) native "SVGPoint_x_Setter";
 
+
+  /** @domName SVGPoint.y */
   num get y native "SVGPoint_y_Getter";
 
+
+  /** @domName SVGPoint.y */
   void set y(num value) native "SVGPoint_y_Setter";
 
+
+  /** @domName SVGPoint.matrixTransform */
   SVGPoint matrixTransform(SVGMatrix matrix) native "SVGPoint_matrixTransform_Callback";
 
 }
@@ -32601,54 +25997,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPointList
-abstract class SVGPointList {
+class SVGPointList extends NativeFieldWrapperClass1 {
+  SVGPointList.internal();
+
 
   /** @domName SVGPointList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGPointList.appendItem */
-  SVGPoint appendItem(SVGPoint item);
-
-  /** @domName SVGPointList.clear */
-  void clear();
-
-  /** @domName SVGPointList.getItem */
-  SVGPoint getItem(int index);
-
-  /** @domName SVGPointList.initialize */
-  SVGPoint initialize(SVGPoint item);
-
-  /** @domName SVGPointList.insertItemBefore */
-  SVGPoint insertItemBefore(SVGPoint item, int index);
-
-  /** @domName SVGPointList.removeItem */
-  SVGPoint removeItem(int index);
-
-  /** @domName SVGPointList.replaceItem */
-  SVGPoint replaceItem(SVGPoint item, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPointListImpl extends NativeFieldWrapperClass1 implements SVGPointList {
-
   int get numberOfItems native "SVGPointList_numberOfItems_Getter";
 
+
+  /** @domName SVGPointList.appendItem */
   SVGPoint appendItem(SVGPoint item) native "SVGPointList_appendItem_Callback";
 
+
+  /** @domName SVGPointList.clear */
   void clear() native "SVGPointList_clear_Callback";
 
+
+  /** @domName SVGPointList.getItem */
   SVGPoint getItem(int index) native "SVGPointList_getItem_Callback";
 
+
+  /** @domName SVGPointList.initialize */
   SVGPoint initialize(SVGPoint item) native "SVGPointList_initialize_Callback";
 
+
+  /** @domName SVGPointList.insertItemBefore */
   SVGPoint insertItemBefore(SVGPoint item, int index) native "SVGPointList_insertItemBefore_Callback";
 
+
+  /** @domName SVGPointList.removeItem */
   SVGPoint removeItem(int index) native "SVGPointList_removeItem_Callback";
 
+
+  /** @domName SVGPointList.replaceItem */
   SVGPoint replaceItem(SVGPoint item, int index) native "SVGPointList_replaceItem_Callback";
 
 }
@@ -32659,62 +26040,91 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPolygonElement
-abstract class SVGPolygonElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGPolygonElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGPolygonElement.internal(): super.internal();
+
 
   /** @domName SVGPolygonElement.animatedPoints */
-  SVGPointList get animatedPoints;
-
-  /** @domName SVGPolygonElement.points */
-  SVGPointList get points;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPolygonElementImpl extends _SVGElementImpl implements SVGPolygonElement {
-
   SVGPointList get animatedPoints native "SVGPolygonElement_animatedPoints_Getter";
 
+
+  /** @domName SVGPolygonElement.points */
   SVGPointList get points native "SVGPolygonElement_points_Getter";
 
+
+  /** @domName SVGPolygonElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGPolygonElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGPolygonElement.xmllang */
   String get xmllang native "SVGPolygonElement_xmllang_Getter";
 
+
+  /** @domName SVGPolygonElement.xmllang */
   void set xmllang(String value) native "SVGPolygonElement_xmllang_Setter";
 
+
+  /** @domName SVGPolygonElement.xmlspace */
   String get xmlspace native "SVGPolygonElement_xmlspace_Getter";
 
+
+  /** @domName SVGPolygonElement.xmlspace */
   void set xmlspace(String value) native "SVGPolygonElement_xmlspace_Setter";
 
+
+  /** @domName SVGPolygonElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGPolygonElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGPolygonElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGPolygonElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGPolygonElement.getBBox */
   SVGRect getBBox() native "SVGPolygonElement_getBBox_Callback";
 
+
+  /** @domName SVGPolygonElement.getCTM */
   SVGMatrix getCTM() native "SVGPolygonElement_getCTM_Callback";
 
+
+  /** @domName SVGPolygonElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGPolygonElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGPolygonElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGPolygonElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGPolygonElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGPolygonElement_className_Getter";
 
+
+  /** @domName SVGPolygonElement.style */
   CSSStyleDeclaration get style native "SVGPolygonElement_style_Getter";
 
+
+  /** @domName SVGPolygonElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGPolygonElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGPolygonElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGPolygonElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGPolygonElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGPolygonElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGPolygonElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGPolygonElement_systemLanguage_Getter";
 
+
+  /** @domName SVGPolygonElement.hasExtension */
   bool hasExtension(String extension) native "SVGPolygonElement_hasExtension_Callback";
 
+
+  /** @domName SVGPolygonElement.transform */
   SVGAnimatedTransformList get transform native "SVGPolygonElement_transform_Getter";
 
 }
@@ -32725,62 +26135,91 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPolylineElement
-abstract class SVGPolylineElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGPolylineElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGPolylineElement.internal(): super.internal();
+
 
   /** @domName SVGPolylineElement.animatedPoints */
-  SVGPointList get animatedPoints;
-
-  /** @domName SVGPolylineElement.points */
-  SVGPointList get points;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPolylineElementImpl extends _SVGElementImpl implements SVGPolylineElement {
-
   SVGPointList get animatedPoints native "SVGPolylineElement_animatedPoints_Getter";
 
+
+  /** @domName SVGPolylineElement.points */
   SVGPointList get points native "SVGPolylineElement_points_Getter";
 
+
+  /** @domName SVGPolylineElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGPolylineElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGPolylineElement.xmllang */
   String get xmllang native "SVGPolylineElement_xmllang_Getter";
 
+
+  /** @domName SVGPolylineElement.xmllang */
   void set xmllang(String value) native "SVGPolylineElement_xmllang_Setter";
 
+
+  /** @domName SVGPolylineElement.xmlspace */
   String get xmlspace native "SVGPolylineElement_xmlspace_Getter";
 
+
+  /** @domName SVGPolylineElement.xmlspace */
   void set xmlspace(String value) native "SVGPolylineElement_xmlspace_Setter";
 
+
+  /** @domName SVGPolylineElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGPolylineElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGPolylineElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGPolylineElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGPolylineElement.getBBox */
   SVGRect getBBox() native "SVGPolylineElement_getBBox_Callback";
 
+
+  /** @domName SVGPolylineElement.getCTM */
   SVGMatrix getCTM() native "SVGPolylineElement_getCTM_Callback";
 
+
+  /** @domName SVGPolylineElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGPolylineElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGPolylineElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGPolylineElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGPolylineElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGPolylineElement_className_Getter";
 
+
+  /** @domName SVGPolylineElement.style */
   CSSStyleDeclaration get style native "SVGPolylineElement_style_Getter";
 
+
+  /** @domName SVGPolylineElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGPolylineElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGPolylineElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGPolylineElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGPolylineElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGPolylineElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGPolylineElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGPolylineElement_systemLanguage_Getter";
 
+
+  /** @domName SVGPolylineElement.hasExtension */
   bool hasExtension(String extension) native "SVGPolylineElement_hasExtension_Callback";
 
+
+  /** @domName SVGPolylineElement.transform */
   SVGAnimatedTransformList get transform native "SVGPolylineElement_transform_Getter";
 
 }
@@ -32791,7 +26230,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGPreserveAspectRatio
-abstract class SVGPreserveAspectRatio {
+class SVGPreserveAspectRatio extends NativeFieldWrapperClass1 {
+  SVGPreserveAspectRatio.internal();
 
   static const int SVG_MEETORSLICE_MEET = 1;
 
@@ -32821,26 +26261,20 @@
 
   static const int SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
 
+
   /** @domName SVGPreserveAspectRatio.align */
-  int align;
-
-  /** @domName SVGPreserveAspectRatio.meetOrSlice */
-  int meetOrSlice;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGPreserveAspectRatioImpl extends NativeFieldWrapperClass1 implements SVGPreserveAspectRatio {
-
   int get align native "SVGPreserveAspectRatio_align_Getter";
 
+
+  /** @domName SVGPreserveAspectRatio.align */
   void set align(int value) native "SVGPreserveAspectRatio_align_Setter";
 
+
+  /** @domName SVGPreserveAspectRatio.meetOrSlice */
   int get meetOrSlice native "SVGPreserveAspectRatio_meetOrSlice_Getter";
 
+
+  /** @domName SVGPreserveAspectRatio.meetOrSlice */
   void set meetOrSlice(int value) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
 
 }
@@ -32851,44 +26285,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGRadialGradientElement
-abstract class SVGRadialGradientElement implements SVGGradientElement {
+class SVGRadialGradientElement extends SVGGradientElement {
+  SVGRadialGradientElement.internal(): super.internal();
+
 
   /** @domName SVGRadialGradientElement.cx */
-  SVGAnimatedLength get cx;
-
-  /** @domName SVGRadialGradientElement.cy */
-  SVGAnimatedLength get cy;
-
-  /** @domName SVGRadialGradientElement.fr */
-  SVGAnimatedLength get fr;
-
-  /** @domName SVGRadialGradientElement.fx */
-  SVGAnimatedLength get fx;
-
-  /** @domName SVGRadialGradientElement.fy */
-  SVGAnimatedLength get fy;
-
-  /** @domName SVGRadialGradientElement.r */
-  SVGAnimatedLength get r;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGRadialGradientElementImpl extends _SVGGradientElementImpl implements SVGRadialGradientElement {
-
   SVGAnimatedLength get cx native "SVGRadialGradientElement_cx_Getter";
 
+
+  /** @domName SVGRadialGradientElement.cy */
   SVGAnimatedLength get cy native "SVGRadialGradientElement_cy_Getter";
 
+
+  /** @domName SVGRadialGradientElement.fr */
   SVGAnimatedLength get fr native "SVGRadialGradientElement_fr_Getter";
 
+
+  /** @domName SVGRadialGradientElement.fx */
   SVGAnimatedLength get fx native "SVGRadialGradientElement_fx_Getter";
 
+
+  /** @domName SVGRadialGradientElement.fy */
   SVGAnimatedLength get fy native "SVGRadialGradientElement_fy_Getter";
 
+
+  /** @domName SVGRadialGradientElement.r */
   SVGAnimatedLength get r native "SVGRadialGradientElement_r_Getter";
 
 }
@@ -32899,128 +26320,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGRect
-abstract class SVGRect {
+class SVGRect extends NativeFieldWrapperClass1 {
+  SVGRect.internal();
+
 
   /** @domName SVGRect.height */
-  num height;
-
-  /** @domName SVGRect.width */
-  num width;
-
-  /** @domName SVGRect.x */
-  num x;
-
-  /** @domName SVGRect.y */
-  num y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SVGRectElement
-abstract class SVGRectElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-
-  /** @domName SVGRectElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGRectElement.rx */
-  SVGAnimatedLength get rx;
-
-  /** @domName SVGRectElement.ry */
-  SVGAnimatedLength get ry;
-
-  /** @domName SVGRectElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGRectElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGRectElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGRectElementImpl extends _SVGElementImpl implements SVGRectElement {
-
-  SVGAnimatedLength get height native "SVGRectElement_height_Getter";
-
-  SVGAnimatedLength get rx native "SVGRectElement_rx_Getter";
-
-  SVGAnimatedLength get ry native "SVGRectElement_ry_Getter";
-
-  SVGAnimatedLength get width native "SVGRectElement_width_Getter";
-
-  SVGAnimatedLength get x native "SVGRectElement_x_Getter";
-
-  SVGAnimatedLength get y native "SVGRectElement_y_Getter";
-
-  SVGAnimatedBoolean get externalResourcesRequired native "SVGRectElement_externalResourcesRequired_Getter";
-
-  String get xmllang native "SVGRectElement_xmllang_Getter";
-
-  void set xmllang(String value) native "SVGRectElement_xmllang_Setter";
-
-  String get xmlspace native "SVGRectElement_xmlspace_Getter";
-
-  void set xmlspace(String value) native "SVGRectElement_xmlspace_Setter";
-
-  SVGElement get farthestViewportElement native "SVGRectElement_farthestViewportElement_Getter";
-
-  SVGElement get nearestViewportElement native "SVGRectElement_nearestViewportElement_Getter";
-
-  SVGRect getBBox() native "SVGRectElement_getBBox_Callback";
-
-  SVGMatrix getCTM() native "SVGRectElement_getCTM_Callback";
-
-  SVGMatrix getScreenCTM() native "SVGRectElement_getScreenCTM_Callback";
-
-  SVGMatrix getTransformToElement(SVGElement element) native "SVGRectElement_getTransformToElement_Callback";
-
-  SVGAnimatedString get $dom_svgClassName native "SVGRectElement_className_Getter";
-
-  CSSStyleDeclaration get style native "SVGRectElement_style_Getter";
-
-  CSSValue getPresentationAttribute(String name) native "SVGRectElement_getPresentationAttribute_Callback";
-
-  SVGStringList get requiredExtensions native "SVGRectElement_requiredExtensions_Getter";
-
-  SVGStringList get requiredFeatures native "SVGRectElement_requiredFeatures_Getter";
-
-  SVGStringList get systemLanguage native "SVGRectElement_systemLanguage_Getter";
-
-  bool hasExtension(String extension) native "SVGRectElement_hasExtension_Callback";
-
-  SVGAnimatedTransformList get transform native "SVGRectElement_transform_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGRectImpl extends NativeFieldWrapperClass1 implements SVGRect {
-
   num get height native "SVGRect_height_Getter";
 
+
+  /** @domName SVGRect.height */
   void set height(num value) native "SVGRect_height_Setter";
 
+
+  /** @domName SVGRect.width */
   num get width native "SVGRect_width_Getter";
 
+
+  /** @domName SVGRect.width */
   void set width(num value) native "SVGRect_width_Setter";
 
+
+  /** @domName SVGRect.x */
   num get x native "SVGRect_x_Getter";
 
+
+  /** @domName SVGRect.x */
   void set x(num value) native "SVGRect_x_Setter";
 
+
+  /** @domName SVGRect.y */
   num get y native "SVGRect_y_Getter";
 
+
+  /** @domName SVGRect.y */
   void set y(num value) native "SVGRect_y_Setter";
 
 }
@@ -33030,8 +26362,120 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName SVGRectElement
+class SVGRectElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGRectElement.internal(): super.internal();
+
+
+  /** @domName SVGRectElement.height */
+  SVGAnimatedLength get height native "SVGRectElement_height_Getter";
+
+
+  /** @domName SVGRectElement.rx */
+  SVGAnimatedLength get rx native "SVGRectElement_rx_Getter";
+
+
+  /** @domName SVGRectElement.ry */
+  SVGAnimatedLength get ry native "SVGRectElement_ry_Getter";
+
+
+  /** @domName SVGRectElement.width */
+  SVGAnimatedLength get width native "SVGRectElement_width_Getter";
+
+
+  /** @domName SVGRectElement.x */
+  SVGAnimatedLength get x native "SVGRectElement_x_Getter";
+
+
+  /** @domName SVGRectElement.y */
+  SVGAnimatedLength get y native "SVGRectElement_y_Getter";
+
+
+  /** @domName SVGRectElement.externalResourcesRequired */
+  SVGAnimatedBoolean get externalResourcesRequired native "SVGRectElement_externalResourcesRequired_Getter";
+
+
+  /** @domName SVGRectElement.xmllang */
+  String get xmllang native "SVGRectElement_xmllang_Getter";
+
+
+  /** @domName SVGRectElement.xmllang */
+  void set xmllang(String value) native "SVGRectElement_xmllang_Setter";
+
+
+  /** @domName SVGRectElement.xmlspace */
+  String get xmlspace native "SVGRectElement_xmlspace_Getter";
+
+
+  /** @domName SVGRectElement.xmlspace */
+  void set xmlspace(String value) native "SVGRectElement_xmlspace_Setter";
+
+
+  /** @domName SVGRectElement.farthestViewportElement */
+  SVGElement get farthestViewportElement native "SVGRectElement_farthestViewportElement_Getter";
+
+
+  /** @domName SVGRectElement.nearestViewportElement */
+  SVGElement get nearestViewportElement native "SVGRectElement_nearestViewportElement_Getter";
+
+
+  /** @domName SVGRectElement.getBBox */
+  SVGRect getBBox() native "SVGRectElement_getBBox_Callback";
+
+
+  /** @domName SVGRectElement.getCTM */
+  SVGMatrix getCTM() native "SVGRectElement_getCTM_Callback";
+
+
+  /** @domName SVGRectElement.getScreenCTM */
+  SVGMatrix getScreenCTM() native "SVGRectElement_getScreenCTM_Callback";
+
+
+  /** @domName SVGRectElement.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native "SVGRectElement_getTransformToElement_Callback";
+
+
+  /** @domName SVGRectElement.className */
+  SVGAnimatedString get $dom_svgClassName native "SVGRectElement_className_Getter";
+
+
+  /** @domName SVGRectElement.style */
+  CSSStyleDeclaration get style native "SVGRectElement_style_Getter";
+
+
+  /** @domName SVGRectElement.getPresentationAttribute */
+  CSSValue getPresentationAttribute(String name) native "SVGRectElement_getPresentationAttribute_Callback";
+
+
+  /** @domName SVGRectElement.requiredExtensions */
+  SVGStringList get requiredExtensions native "SVGRectElement_requiredExtensions_Getter";
+
+
+  /** @domName SVGRectElement.requiredFeatures */
+  SVGStringList get requiredFeatures native "SVGRectElement_requiredFeatures_Getter";
+
+
+  /** @domName SVGRectElement.systemLanguage */
+  SVGStringList get systemLanguage native "SVGRectElement_systemLanguage_Getter";
+
+
+  /** @domName SVGRectElement.hasExtension */
+  bool hasExtension(String extension) native "SVGRectElement_hasExtension_Callback";
+
+
+  /** @domName SVGRectElement.transform */
+  SVGAnimatedTransformList get transform native "SVGRectElement_transform_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
 /// @domName SVGRenderingIntent
-abstract class SVGRenderingIntent {
+class SVGRenderingIntent extends NativeFieldWrapperClass1 {
+  SVGRenderingIntent.internal();
 
   static const int RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
 
@@ -33044,273 +26488,267 @@
   static const int RENDERING_INTENT_SATURATION = 4;
 
   static const int RENDERING_INTENT_UNKNOWN = 0;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGRenderingIntentImpl extends NativeFieldWrapperClass1 implements SVGRenderingIntent {
 
 }
 // 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.
 
-
-/// @domName SVGSVGElement
-abstract class SVGSVGElement extends SVGElement implements SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGLocatable, SVGFitToViewBox, SVGZoomAndPan {
+class SVGSVGElement extends SVGElement implements SVGZoomAndPan, SVGLocatable, SVGLangSpace, SVGTests, SVGStylable, SVGFitToViewBox, SVGExternalResourcesRequired {
   factory SVGSVGElement() => _SVGSVGElementFactoryProvider.createSVGSVGElement();
 
+  SVGSVGElement.internal(): super.internal();
+
 
   /** @domName SVGSVGElement.contentScriptType */
-  String contentScriptType;
-
-  /** @domName SVGSVGElement.contentStyleType */
-  String contentStyleType;
-
-  /** @domName SVGSVGElement.currentScale */
-  num currentScale;
-
-  /** @domName SVGSVGElement.currentTranslate */
-  SVGPoint get currentTranslate;
-
-  /** @domName SVGSVGElement.currentView */
-  SVGViewSpec get currentView;
-
-  /** @domName SVGSVGElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
-  num get pixelUnitToMillimeterX;
-
-  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
-  num get pixelUnitToMillimeterY;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterX */
-  num get screenPixelToMillimeterX;
-
-  /** @domName SVGSVGElement.screenPixelToMillimeterY */
-  num get screenPixelToMillimeterY;
-
-  /** @domName SVGSVGElement.useCurrentView */
-  bool get useCurrentView;
-
-  /** @domName SVGSVGElement.viewport */
-  SVGRect get viewport;
-
-  /** @domName SVGSVGElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGSVGElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGSVGElement.y */
-  SVGAnimatedLength get y;
-
-  /** @domName SVGSVGElement.animationsPaused */
-  bool animationsPaused();
-
-  /** @domName SVGSVGElement.checkEnclosure */
-  bool checkEnclosure(SVGElement element, SVGRect rect);
-
-  /** @domName SVGSVGElement.checkIntersection */
-  bool checkIntersection(SVGElement element, SVGRect rect);
-
-  /** @domName SVGSVGElement.createSVGAngle */
-  SVGAngle createSVGAngle();
-
-  /** @domName SVGSVGElement.createSVGLength */
-  SVGLength createSVGLength();
-
-  /** @domName SVGSVGElement.createSVGMatrix */
-  SVGMatrix createSVGMatrix();
-
-  /** @domName SVGSVGElement.createSVGNumber */
-  SVGNumber createSVGNumber();
-
-  /** @domName SVGSVGElement.createSVGPoint */
-  SVGPoint createSVGPoint();
-
-  /** @domName SVGSVGElement.createSVGRect */
-  SVGRect createSVGRect();
-
-  /** @domName SVGSVGElement.createSVGTransform */
-  SVGTransform createSVGTransform();
-
-  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
-
-  /** @domName SVGSVGElement.deselectAll */
-  void deselectAll();
-
-  /** @domName SVGSVGElement.forceRedraw */
-  void forceRedraw();
-
-  /** @domName SVGSVGElement.getCurrentTime */
-  num getCurrentTime();
-
-  /** @domName SVGSVGElement.getElementById */
-  Element getElementById(String elementId);
-
-  /** @domName SVGSVGElement.getEnclosureList */
-  List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement);
-
-  /** @domName SVGSVGElement.getIntersectionList */
-  List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement);
-
-  /** @domName SVGSVGElement.pauseAnimations */
-  void pauseAnimations();
-
-  /** @domName SVGSVGElement.setCurrentTime */
-  void setCurrentTime(num seconds);
-
-  /** @domName SVGSVGElement.suspendRedraw */
-  int suspendRedraw(int maxWaitMilliseconds);
-
-  /** @domName SVGSVGElement.unpauseAnimations */
-  void unpauseAnimations();
-
-  /** @domName SVGSVGElement.unsuspendRedraw */
-  void unsuspendRedraw(int suspendHandleId);
-
-  /** @domName SVGSVGElement.unsuspendRedrawAll */
-  void unsuspendRedrawAll();
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGSVGElementImpl extends _SVGElementImpl implements SVGSVGElement {
-
   String get contentScriptType native "SVGSVGElement_contentScriptType_Getter";
 
+
+  /** @domName SVGSVGElement.contentScriptType */
   void set contentScriptType(String value) native "SVGSVGElement_contentScriptType_Setter";
 
+
+  /** @domName SVGSVGElement.contentStyleType */
   String get contentStyleType native "SVGSVGElement_contentStyleType_Getter";
 
+
+  /** @domName SVGSVGElement.contentStyleType */
   void set contentStyleType(String value) native "SVGSVGElement_contentStyleType_Setter";
 
+
+  /** @domName SVGSVGElement.currentScale */
   num get currentScale native "SVGSVGElement_currentScale_Getter";
 
+
+  /** @domName SVGSVGElement.currentScale */
   void set currentScale(num value) native "SVGSVGElement_currentScale_Setter";
 
+
+  /** @domName SVGSVGElement.currentTranslate */
   SVGPoint get currentTranslate native "SVGSVGElement_currentTranslate_Getter";
 
+
+  /** @domName SVGSVGElement.currentView */
   SVGViewSpec get currentView native "SVGSVGElement_currentView_Getter";
 
+
+  /** @domName SVGSVGElement.height */
   SVGAnimatedLength get height native "SVGSVGElement_height_Getter";
 
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterX */
   num get pixelUnitToMillimeterX native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
 
+
+  /** @domName SVGSVGElement.pixelUnitToMillimeterY */
   num get pixelUnitToMillimeterY native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
 
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterX */
   num get screenPixelToMillimeterX native "SVGSVGElement_screenPixelToMillimeterX_Getter";
 
+
+  /** @domName SVGSVGElement.screenPixelToMillimeterY */
   num get screenPixelToMillimeterY native "SVGSVGElement_screenPixelToMillimeterY_Getter";
 
+
+  /** @domName SVGSVGElement.useCurrentView */
   bool get useCurrentView native "SVGSVGElement_useCurrentView_Getter";
 
+
+  /** @domName SVGSVGElement.viewport */
   SVGRect get viewport native "SVGSVGElement_viewport_Getter";
 
+
+  /** @domName SVGSVGElement.width */
   SVGAnimatedLength get width native "SVGSVGElement_width_Getter";
 
+
+  /** @domName SVGSVGElement.x */
   SVGAnimatedLength get x native "SVGSVGElement_x_Getter";
 
+
+  /** @domName SVGSVGElement.y */
   SVGAnimatedLength get y native "SVGSVGElement_y_Getter";
 
+
+  /** @domName SVGSVGElement.animationsPaused */
   bool animationsPaused() native "SVGSVGElement_animationsPaused_Callback";
 
+
+  /** @domName SVGSVGElement.checkEnclosure */
   bool checkEnclosure(SVGElement element, SVGRect rect) native "SVGSVGElement_checkEnclosure_Callback";
 
+
+  /** @domName SVGSVGElement.checkIntersection */
   bool checkIntersection(SVGElement element, SVGRect rect) native "SVGSVGElement_checkIntersection_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGAngle */
   SVGAngle createSVGAngle() native "SVGSVGElement_createSVGAngle_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGLength */
   SVGLength createSVGLength() native "SVGSVGElement_createSVGLength_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGMatrix */
   SVGMatrix createSVGMatrix() native "SVGSVGElement_createSVGMatrix_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGNumber */
   SVGNumber createSVGNumber() native "SVGSVGElement_createSVGNumber_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGPoint */
   SVGPoint createSVGPoint() native "SVGSVGElement_createSVGPoint_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGRect */
   SVGRect createSVGRect() native "SVGSVGElement_createSVGRect_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGTransform */
   SVGTransform createSVGTransform() native "SVGSVGElement_createSVGTransform_Callback";
 
+
+  /** @domName SVGSVGElement.createSVGTransformFromMatrix */
   SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
 
+
+  /** @domName SVGSVGElement.deselectAll */
   void deselectAll() native "SVGSVGElement_deselectAll_Callback";
 
+
+  /** @domName SVGSVGElement.forceRedraw */
   void forceRedraw() native "SVGSVGElement_forceRedraw_Callback";
 
+
+  /** @domName SVGSVGElement.getCurrentTime */
   num getCurrentTime() native "SVGSVGElement_getCurrentTime_Callback";
 
+
+  /** @domName SVGSVGElement.getElementById */
   Element getElementById(String elementId) native "SVGSVGElement_getElementById_Callback";
 
+
+  /** @domName SVGSVGElement.getEnclosureList */
   List<Node> getEnclosureList(SVGRect rect, SVGElement referenceElement) native "SVGSVGElement_getEnclosureList_Callback";
 
+
+  /** @domName SVGSVGElement.getIntersectionList */
   List<Node> getIntersectionList(SVGRect rect, SVGElement referenceElement) native "SVGSVGElement_getIntersectionList_Callback";
 
+
+  /** @domName SVGSVGElement.pauseAnimations */
   void pauseAnimations() native "SVGSVGElement_pauseAnimations_Callback";
 
+
+  /** @domName SVGSVGElement.setCurrentTime */
   void setCurrentTime(num seconds) native "SVGSVGElement_setCurrentTime_Callback";
 
+
+  /** @domName SVGSVGElement.suspendRedraw */
   int suspendRedraw(int maxWaitMilliseconds) native "SVGSVGElement_suspendRedraw_Callback";
 
+
+  /** @domName SVGSVGElement.unpauseAnimations */
   void unpauseAnimations() native "SVGSVGElement_unpauseAnimations_Callback";
 
+
+  /** @domName SVGSVGElement.unsuspendRedraw */
   void unsuspendRedraw(int suspendHandleId) native "SVGSVGElement_unsuspendRedraw_Callback";
 
+
+  /** @domName SVGSVGElement.unsuspendRedrawAll */
   void unsuspendRedrawAll() native "SVGSVGElement_unsuspendRedrawAll_Callback";
 
+
+  /** @domName SVGSVGElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGSVGElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGSVGElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSVGElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGSVGElement.viewBox */
   SVGAnimatedRect get viewBox native "SVGSVGElement_viewBox_Getter";
 
+
+  /** @domName SVGSVGElement.xmllang */
   String get xmllang native "SVGSVGElement_xmllang_Getter";
 
+
+  /** @domName SVGSVGElement.xmllang */
   void set xmllang(String value) native "SVGSVGElement_xmllang_Setter";
 
+
+  /** @domName SVGSVGElement.xmlspace */
   String get xmlspace native "SVGSVGElement_xmlspace_Getter";
 
+
+  /** @domName SVGSVGElement.xmlspace */
   void set xmlspace(String value) native "SVGSVGElement_xmlspace_Setter";
 
+
+  /** @domName SVGSVGElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGSVGElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGSVGElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGSVGElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGSVGElement.getBBox */
   SVGRect getBBox() native "SVGSVGElement_getBBox_Callback";
 
+
+  /** @domName SVGSVGElement.getCTM */
   SVGMatrix getCTM() native "SVGSVGElement_getCTM_Callback";
 
+
+  /** @domName SVGSVGElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGSVGElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGSVGElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGSVGElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGSVGElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGSVGElement_className_Getter";
 
+
+  /** @domName SVGSVGElement.style */
   CSSStyleDeclaration get style native "SVGSVGElement_style_Getter";
 
+
+  /** @domName SVGSVGElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGSVGElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGSVGElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGSVGElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGSVGElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGSVGElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGSVGElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGSVGElement_systemLanguage_Getter";
 
+
+  /** @domName SVGSVGElement.hasExtension */
   bool hasExtension(String extension) native "SVGSVGElement_hasExtension_Callback";
 
+
+  /** @domName SVGSVGElement.zoomAndPan */
   int get zoomAndPan native "SVGSVGElement_zoomAndPan_Getter";
 
+
+  /** @domName SVGSVGElement.zoomAndPan */
   void set zoomAndPan(int value) native "SVGSVGElement_zoomAndPan_Setter";
 
 }
@@ -33321,25 +26759,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGScriptElement
-abstract class SVGScriptElement implements SVGElement, SVGURIReference, SVGExternalResourcesRequired {
+class SVGScriptElement extends SVGElement implements SVGURIReference, SVGExternalResourcesRequired {
+  SVGScriptElement.internal(): super.internal();
+
 
   /** @domName SVGScriptElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGScriptElementImpl extends _SVGElementImpl implements SVGScriptElement {
-
   String get type native "SVGScriptElement_type_Getter";
 
+
+  /** @domName SVGScriptElement.type */
   void set type(String value) native "SVGScriptElement_type_Setter";
 
+
+  /** @domName SVGScriptElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGScriptElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGScriptElement.href */
   SVGAnimatedString get href native "SVGScriptElement_href_Getter";
 
 }
@@ -33350,15 +26786,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGSetElement
-abstract class SVGSetElement implements SVGAnimationElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGSetElementImpl extends _SVGAnimationElementImpl implements SVGSetElement {
+class SVGSetElement extends SVGAnimationElement {
+  SVGSetElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33368,25 +26797,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGStopElement
-abstract class SVGStopElement implements SVGElement, SVGStylable {
+class SVGStopElement extends SVGElement implements SVGStylable {
+  SVGStopElement.internal(): super.internal();
+
 
   /** @domName SVGStopElement.offset */
-  SVGAnimatedNumber get offset;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGStopElementImpl extends _SVGElementImpl implements SVGStopElement {
-
   SVGAnimatedNumber get offset native "SVGStopElement_offset_Getter";
 
+
+  /** @domName SVGStopElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGStopElement_className_Getter";
 
+
+  /** @domName SVGStopElement.style */
   CSSStyleDeclaration get style native "SVGStopElement_style_Getter";
 
+
+  /** @domName SVGStopElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGStopElement_getPresentationAttribute_Callback";
 
 }
@@ -33397,40 +26824,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGStringList
-abstract class SVGStringList implements List<String> {
+class SVGStringList extends NativeFieldWrapperClass1 implements List<String> {
+  SVGStringList.internal();
+
 
   /** @domName SVGStringList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGStringList.appendItem */
-  String appendItem(String item);
-
-  /** @domName SVGStringList.clear */
-  void clear();
-
-  /** @domName SVGStringList.getItem */
-  String getItem(int index);
-
-  /** @domName SVGStringList.initialize */
-  String initialize(String item);
-
-  /** @domName SVGStringList.insertItemBefore */
-  String insertItemBefore(String item, int index);
-
-  /** @domName SVGStringList.removeItem */
-  String removeItem(int index);
-
-  /** @domName SVGStringList.replaceItem */
-  String replaceItem(String item, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGStringListImpl extends NativeFieldWrapperClass1 implements SVGStringList {
-
   int get numberOfItems native "SVGStringList_numberOfItems_Getter";
 
   String operator[](int index) native "SVGStringList_item_Callback";
@@ -33516,18 +26914,32 @@
 
   // -- end List<String> mixins.
 
+
+  /** @domName SVGStringList.appendItem */
   String appendItem(String item) native "SVGStringList_appendItem_Callback";
 
+
+  /** @domName SVGStringList.clear */
   void clear() native "SVGStringList_clear_Callback";
 
+
+  /** @domName SVGStringList.getItem */
   String getItem(int index) native "SVGStringList_getItem_Callback";
 
+
+  /** @domName SVGStringList.initialize */
   String initialize(String item) native "SVGStringList_initialize_Callback";
 
+
+  /** @domName SVGStringList.insertItemBefore */
   String insertItemBefore(String item, int index) native "SVGStringList_insertItemBefore_Callback";
 
+
+  /** @domName SVGStringList.removeItem */
   String removeItem(int index) native "SVGStringList_removeItem_Callback";
 
+
+  /** @domName SVGStringList.replaceItem */
   String replaceItem(String item, int index) native "SVGStringList_replaceItem_Callback";
 
 }
@@ -33538,16 +26950,21 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGStylable
-abstract class SVGStylable {
+class SVGStylable extends NativeFieldWrapperClass1 {
+  SVGStylable.internal();
+
 
   /** @domName SVGStylable.className */
-  SVGAnimatedString get $dom_svgClassName;
+  SVGAnimatedString get $dom_svgClassName native "SVGStylable_className_Getter";
+
 
   /** @domName SVGStylable.style */
-  CSSStyleDeclaration get style;
+  CSSStyleDeclaration get style native "SVGStylable_style_Getter";
+
 
   /** @domName SVGStylable.getPresentationAttribute */
-  CSSValue getPresentationAttribute(String name);
+  CSSValue getPresentationAttribute(String name) native "SVGStylable_getPresentationAttribute_Callback";
+
 }
 // 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
@@ -33556,50 +26973,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGStyleElement
-abstract class SVGStyleElement implements SVGElement, SVGLangSpace {
+class SVGStyleElement extends SVGElement implements SVGLangSpace {
+  SVGStyleElement.internal(): super.internal();
+
 
   /** @domName SVGStyleElement.disabled */
-  bool disabled;
-
-  /** @domName SVGStyleElement.media */
-  String media;
-
-  /** @domName SVGStyleElement.title */
-  String title;
-
-  /** @domName SVGStyleElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGStyleElementImpl extends _SVGElementImpl implements SVGStyleElement {
-
   bool get disabled native "SVGStyleElement_disabled_Getter";
 
+
+  /** @domName SVGStyleElement.disabled */
   void set disabled(bool value) native "SVGStyleElement_disabled_Setter";
 
+
+  /** @domName SVGStyleElement.media */
   String get media native "SVGStyleElement_media_Getter";
 
+
+  /** @domName SVGStyleElement.media */
   void set media(String value) native "SVGStyleElement_media_Setter";
 
+
+  /** @domName SVGStyleElement.title */
   String get title native "SVGStyleElement_title_Getter";
 
+
+  /** @domName SVGStyleElement.title */
   void set title(String value) native "SVGStyleElement_title_Setter";
 
+
+  /** @domName SVGStyleElement.type */
   String get type native "SVGStyleElement_type_Getter";
 
+
+  /** @domName SVGStyleElement.type */
   void set type(String value) native "SVGStyleElement_type_Setter";
 
+
+  /** @domName SVGStyleElement.xmllang */
   String get xmllang native "SVGStyleElement_xmllang_Getter";
 
+
+  /** @domName SVGStyleElement.xmllang */
   void set xmllang(String value) native "SVGStyleElement_xmllang_Setter";
 
+
+  /** @domName SVGStyleElement.xmlspace */
   String get xmlspace native "SVGStyleElement_xmlspace_Getter";
 
+
+  /** @domName SVGStyleElement.xmlspace */
   void set xmlspace(String value) native "SVGStyleElement_xmlspace_Setter";
 
 }
@@ -33610,52 +27032,83 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGSwitchElement
-abstract class SVGSwitchElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
-}
-// 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 SVGSwitchElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGTransformable, SVGExternalResourcesRequired {
+  SVGSwitchElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGSwitchElementImpl extends _SVGElementImpl implements SVGSwitchElement {
-
+  /** @domName SVGSwitchElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGSwitchElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGSwitchElement.xmllang */
   String get xmllang native "SVGSwitchElement_xmllang_Getter";
 
+
+  /** @domName SVGSwitchElement.xmllang */
   void set xmllang(String value) native "SVGSwitchElement_xmllang_Setter";
 
+
+  /** @domName SVGSwitchElement.xmlspace */
   String get xmlspace native "SVGSwitchElement_xmlspace_Getter";
 
+
+  /** @domName SVGSwitchElement.xmlspace */
   void set xmlspace(String value) native "SVGSwitchElement_xmlspace_Setter";
 
+
+  /** @domName SVGSwitchElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGSwitchElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGSwitchElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGSwitchElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGSwitchElement.getBBox */
   SVGRect getBBox() native "SVGSwitchElement_getBBox_Callback";
 
+
+  /** @domName SVGSwitchElement.getCTM */
   SVGMatrix getCTM() native "SVGSwitchElement_getCTM_Callback";
 
+
+  /** @domName SVGSwitchElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGSwitchElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGSwitchElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGSwitchElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGSwitchElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGSwitchElement_className_Getter";
 
+
+  /** @domName SVGSwitchElement.style */
   CSSStyleDeclaration get style native "SVGSwitchElement_style_Getter";
 
+
+  /** @domName SVGSwitchElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGSwitchElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGSwitchElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGSwitchElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGSwitchElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGSwitchElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGSwitchElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGSwitchElement_systemLanguage_Getter";
 
+
+  /** @domName SVGSwitchElement.hasExtension */
   bool hasExtension(String extension) native "SVGSwitchElement_hasExtension_Callback";
 
+
+  /** @domName SVGSwitchElement.transform */
   SVGAnimatedTransformList get transform native "SVGSwitchElement_transform_Getter";
 
 }
@@ -33666,34 +27119,47 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGSymbolElement
-abstract class SVGSymbolElement implements SVGElement, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGFitToViewBox {
-}
-// 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 SVGSymbolElement extends SVGElement implements SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired, SVGStylable {
+  SVGSymbolElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGSymbolElementImpl extends _SVGElementImpl implements SVGSymbolElement {
-
+  /** @domName SVGSymbolElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGSymbolElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGSymbolElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGSymbolElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGSymbolElement.viewBox */
   SVGAnimatedRect get viewBox native "SVGSymbolElement_viewBox_Getter";
 
+
+  /** @domName SVGSymbolElement.xmllang */
   String get xmllang native "SVGSymbolElement_xmllang_Getter";
 
+
+  /** @domName SVGSymbolElement.xmllang */
   void set xmllang(String value) native "SVGSymbolElement_xmllang_Setter";
 
+
+  /** @domName SVGSymbolElement.xmlspace */
   String get xmlspace native "SVGSymbolElement_xmlspace_Getter";
 
+
+  /** @domName SVGSymbolElement.xmlspace */
   void set xmlspace(String value) native "SVGSymbolElement_xmlspace_Setter";
 
+
+  /** @domName SVGSymbolElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGSymbolElement_className_Getter";
 
+
+  /** @domName SVGSymbolElement.style */
   CSSStyleDeclaration get style native "SVGSymbolElement_style_Getter";
 
+
+  /** @domName SVGSymbolElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGSymbolElement_getPresentationAttribute_Callback";
 
 }
@@ -33704,16 +27170,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTRefElement
-abstract class SVGTRefElement implements SVGTextPositioningElement, SVGURIReference {
-}
-// 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 SVGTRefElement extends SVGTextPositioningElement implements SVGURIReference {
+  SVGTRefElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGTRefElementImpl extends _SVGTextPositioningElementImpl implements SVGTRefElement {
-
+  /** @domName SVGTRefElement.href */
   SVGAnimatedString get href native "SVGTRefElement_href_Getter";
 
 }
@@ -33724,15 +27185,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTSpanElement
-abstract class SVGTSpanElement implements SVGTextPositioningElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTSpanElementImpl extends _SVGTextPositioningElementImpl implements SVGTSpanElement {
+class SVGTSpanElement extends SVGTextPositioningElement {
+  SVGTSpanElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -33742,19 +27196,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTests
-abstract class SVGTests {
+class SVGTests extends NativeFieldWrapperClass1 {
+  SVGTests.internal();
+
 
   /** @domName SVGTests.requiredExtensions */
-  SVGStringList get requiredExtensions;
+  SVGStringList get requiredExtensions native "SVGTests_requiredExtensions_Getter";
+
 
   /** @domName SVGTests.requiredFeatures */
-  SVGStringList get requiredFeatures;
+  SVGStringList get requiredFeatures native "SVGTests_requiredFeatures_Getter";
+
 
   /** @domName SVGTests.systemLanguage */
-  SVGStringList get systemLanguage;
+  SVGStringList get systemLanguage native "SVGTests_systemLanguage_Getter";
+
 
   /** @domName SVGTests.hasExtension */
-  bool hasExtension(String extension);
+  bool hasExtension(String extension) native "SVGTests_hasExtension_Callback";
+
 }
 // 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
@@ -33763,7 +27223,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTextContentElement
-abstract class SVGTextContentElement implements SVGElement, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable {
+class SVGTextContentElement extends SVGElement implements SVGLangSpace, SVGStylable, SVGTests, SVGExternalResourcesRequired {
+  SVGTextContentElement.internal(): super.internal();
 
   static const int LENGTHADJUST_SPACING = 1;
 
@@ -33771,91 +27232,96 @@
 
   static const int LENGTHADJUST_UNKNOWN = 0;
 
+
   /** @domName SVGTextContentElement.lengthAdjust */
-  SVGAnimatedEnumeration get lengthAdjust;
-
-  /** @domName SVGTextContentElement.textLength */
-  SVGAnimatedLength get textLength;
-
-  /** @domName SVGTextContentElement.getCharNumAtPosition */
-  int getCharNumAtPosition(SVGPoint point);
-
-  /** @domName SVGTextContentElement.getComputedTextLength */
-  num getComputedTextLength();
-
-  /** @domName SVGTextContentElement.getEndPositionOfChar */
-  SVGPoint getEndPositionOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getExtentOfChar */
-  SVGRect getExtentOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getNumberOfChars */
-  int getNumberOfChars();
-
-  /** @domName SVGTextContentElement.getRotationOfChar */
-  num getRotationOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getStartPositionOfChar */
-  SVGPoint getStartPositionOfChar(int offset);
-
-  /** @domName SVGTextContentElement.getSubStringLength */
-  num getSubStringLength(int offset, int length);
-
-  /** @domName SVGTextContentElement.selectSubString */
-  void selectSubString(int offset, int length);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTextContentElementImpl extends _SVGElementImpl implements SVGTextContentElement {
-
   SVGAnimatedEnumeration get lengthAdjust native "SVGTextContentElement_lengthAdjust_Getter";
 
+
+  /** @domName SVGTextContentElement.textLength */
   SVGAnimatedLength get textLength native "SVGTextContentElement_textLength_Getter";
 
+
+  /** @domName SVGTextContentElement.getCharNumAtPosition */
   int getCharNumAtPosition(SVGPoint point) native "SVGTextContentElement_getCharNumAtPosition_Callback";
 
+
+  /** @domName SVGTextContentElement.getComputedTextLength */
   num getComputedTextLength() native "SVGTextContentElement_getComputedTextLength_Callback";
 
+
+  /** @domName SVGTextContentElement.getEndPositionOfChar */
   SVGPoint getEndPositionOfChar(int offset) native "SVGTextContentElement_getEndPositionOfChar_Callback";
 
+
+  /** @domName SVGTextContentElement.getExtentOfChar */
   SVGRect getExtentOfChar(int offset) native "SVGTextContentElement_getExtentOfChar_Callback";
 
+
+  /** @domName SVGTextContentElement.getNumberOfChars */
   int getNumberOfChars() native "SVGTextContentElement_getNumberOfChars_Callback";
 
+
+  /** @domName SVGTextContentElement.getRotationOfChar */
   num getRotationOfChar(int offset) native "SVGTextContentElement_getRotationOfChar_Callback";
 
+
+  /** @domName SVGTextContentElement.getStartPositionOfChar */
   SVGPoint getStartPositionOfChar(int offset) native "SVGTextContentElement_getStartPositionOfChar_Callback";
 
+
+  /** @domName SVGTextContentElement.getSubStringLength */
   num getSubStringLength(int offset, int length) native "SVGTextContentElement_getSubStringLength_Callback";
 
+
+  /** @domName SVGTextContentElement.selectSubString */
   void selectSubString(int offset, int length) native "SVGTextContentElement_selectSubString_Callback";
 
+
+  /** @domName SVGTextContentElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGTextContentElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGTextContentElement.xmllang */
   String get xmllang native "SVGTextContentElement_xmllang_Getter";
 
+
+  /** @domName SVGTextContentElement.xmllang */
   void set xmllang(String value) native "SVGTextContentElement_xmllang_Setter";
 
+
+  /** @domName SVGTextContentElement.xmlspace */
   String get xmlspace native "SVGTextContentElement_xmlspace_Getter";
 
+
+  /** @domName SVGTextContentElement.xmlspace */
   void set xmlspace(String value) native "SVGTextContentElement_xmlspace_Setter";
 
+
+  /** @domName SVGTextContentElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGTextContentElement_className_Getter";
 
+
+  /** @domName SVGTextContentElement.style */
   CSSStyleDeclaration get style native "SVGTextContentElement_style_Getter";
 
+
+  /** @domName SVGTextContentElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGTextContentElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGTextContentElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGTextContentElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGTextContentElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGTextContentElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGTextContentElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGTextContentElement_systemLanguage_Getter";
 
+
+  /** @domName SVGTextContentElement.hasExtension */
   bool hasExtension(String extension) native "SVGTextContentElement_hasExtension_Callback";
 
 }
@@ -33866,28 +27332,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTextElement
-abstract class SVGTextElement implements SVGTextPositioningElement, SVGTransformable {
-}
-// 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 SVGTextElement extends SVGTextPositioningElement implements SVGTransformable {
+  SVGTextElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGTextElementImpl extends _SVGTextPositioningElementImpl implements SVGTextElement {
-
+  /** @domName SVGTextElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGTextElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGTextElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGTextElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGTextElement.getBBox */
   SVGRect getBBox() native "SVGTextElement_getBBox_Callback";
 
+
+  /** @domName SVGTextElement.getCTM */
   SVGMatrix getCTM() native "SVGTextElement_getCTM_Callback";
 
+
+  /** @domName SVGTextElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGTextElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGTextElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGTextElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGTextElement.transform */
   SVGAnimatedTransformList get transform native "SVGTextElement_transform_Getter";
 
 }
@@ -33898,7 +27371,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTextPathElement
-abstract class SVGTextPathElement implements SVGTextContentElement, SVGURIReference {
+class SVGTextPathElement extends SVGTextContentElement implements SVGURIReference {
+  SVGTextPathElement.internal(): super.internal();
 
   static const int TEXTPATH_METHODTYPE_ALIGN = 1;
 
@@ -33912,29 +27386,20 @@
 
   static const int TEXTPATH_SPACINGTYPE_UNKNOWN = 0;
 
+
   /** @domName SVGTextPathElement.method */
-  SVGAnimatedEnumeration get method;
-
-  /** @domName SVGTextPathElement.spacing */
-  SVGAnimatedEnumeration get spacing;
-
-  /** @domName SVGTextPathElement.startOffset */
-  SVGAnimatedLength get startOffset;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTextPathElementImpl extends _SVGTextContentElementImpl implements SVGTextPathElement {
-
   SVGAnimatedEnumeration get method native "SVGTextPathElement_method_Getter";
 
+
+  /** @domName SVGTextPathElement.spacing */
   SVGAnimatedEnumeration get spacing native "SVGTextPathElement_spacing_Getter";
 
+
+  /** @domName SVGTextPathElement.startOffset */
   SVGAnimatedLength get startOffset native "SVGTextPathElement_startOffset_Getter";
 
+
+  /** @domName SVGTextPathElement.href */
   SVGAnimatedString get href native "SVGTextPathElement_href_Getter";
 
 }
@@ -33945,39 +27410,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTextPositioningElement
-abstract class SVGTextPositioningElement implements SVGTextContentElement {
+class SVGTextPositioningElement extends SVGTextContentElement {
+  SVGTextPositioningElement.internal(): super.internal();
+
 
   /** @domName SVGTextPositioningElement.dx */
-  SVGAnimatedLengthList get dx;
-
-  /** @domName SVGTextPositioningElement.dy */
-  SVGAnimatedLengthList get dy;
-
-  /** @domName SVGTextPositioningElement.rotate */
-  SVGAnimatedNumberList get rotate;
-
-  /** @domName SVGTextPositioningElement.x */
-  SVGAnimatedLengthList get x;
-
-  /** @domName SVGTextPositioningElement.y */
-  SVGAnimatedLengthList get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTextPositioningElementImpl extends _SVGTextContentElementImpl implements SVGTextPositioningElement {
-
   SVGAnimatedLengthList get dx native "SVGTextPositioningElement_dx_Getter";
 
+
+  /** @domName SVGTextPositioningElement.dy */
   SVGAnimatedLengthList get dy native "SVGTextPositioningElement_dy_Getter";
 
+
+  /** @domName SVGTextPositioningElement.rotate */
   SVGAnimatedNumberList get rotate native "SVGTextPositioningElement_rotate_Getter";
 
+
+  /** @domName SVGTextPositioningElement.x */
   SVGAnimatedLengthList get x native "SVGTextPositioningElement_x_Getter";
 
+
+  /** @domName SVGTextPositioningElement.y */
   SVGAnimatedLengthList get y native "SVGTextPositioningElement_y_Getter";
 
 }
@@ -33988,28 +27441,35 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTitleElement
-abstract class SVGTitleElement implements SVGElement, SVGLangSpace, SVGStylable {
-}
-// 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 SVGTitleElement extends SVGElement implements SVGLangSpace, SVGStylable {
+  SVGTitleElement.internal(): super.internal();
 
-// WARNING: Do not edit - generated code.
 
-class _SVGTitleElementImpl extends _SVGElementImpl implements SVGTitleElement {
-
+  /** @domName SVGTitleElement.xmllang */
   String get xmllang native "SVGTitleElement_xmllang_Getter";
 
+
+  /** @domName SVGTitleElement.xmllang */
   void set xmllang(String value) native "SVGTitleElement_xmllang_Setter";
 
+
+  /** @domName SVGTitleElement.xmlspace */
   String get xmlspace native "SVGTitleElement_xmlspace_Getter";
 
+
+  /** @domName SVGTitleElement.xmlspace */
   void set xmlspace(String value) native "SVGTitleElement_xmlspace_Setter";
 
+
+  /** @domName SVGTitleElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGTitleElement_className_Getter";
 
+
+  /** @domName SVGTitleElement.style */
   CSSStyleDeclaration get style native "SVGTitleElement_style_Getter";
 
+
+  /** @domName SVGTitleElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGTitleElement_getPresentationAttribute_Callback";
 
 }
@@ -34020,7 +27480,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTransform
-abstract class SVGTransform {
+class SVGTransform extends NativeFieldWrapperClass1 {
+  SVGTransform.internal();
 
   static const int SVG_TRANSFORM_MATRIX = 1;
 
@@ -34036,57 +27497,40 @@
 
   static const int SVG_TRANSFORM_UNKNOWN = 0;
 
+
   /** @domName SVGTransform.angle */
-  num get angle;
-
-  /** @domName SVGTransform.matrix */
-  SVGMatrix get matrix;
-
-  /** @domName SVGTransform.type */
-  int get type;
-
-  /** @domName SVGTransform.setMatrix */
-  void setMatrix(SVGMatrix matrix);
-
-  /** @domName SVGTransform.setRotate */
-  void setRotate(num angle, num cx, num cy);
-
-  /** @domName SVGTransform.setScale */
-  void setScale(num sx, num sy);
-
-  /** @domName SVGTransform.setSkewX */
-  void setSkewX(num angle);
-
-  /** @domName SVGTransform.setSkewY */
-  void setSkewY(num angle);
-
-  /** @domName SVGTransform.setTranslate */
-  void setTranslate(num tx, num ty);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTransformImpl extends NativeFieldWrapperClass1 implements SVGTransform {
-
   num get angle native "SVGTransform_angle_Getter";
 
+
+  /** @domName SVGTransform.matrix */
   SVGMatrix get matrix native "SVGTransform_matrix_Getter";
 
+
+  /** @domName SVGTransform.type */
   int get type native "SVGTransform_type_Getter";
 
+
+  /** @domName SVGTransform.setMatrix */
   void setMatrix(SVGMatrix matrix) native "SVGTransform_setMatrix_Callback";
 
+
+  /** @domName SVGTransform.setRotate */
   void setRotate(num angle, num cx, num cy) native "SVGTransform_setRotate_Callback";
 
+
+  /** @domName SVGTransform.setScale */
   void setScale(num sx, num sy) native "SVGTransform_setScale_Callback";
 
+
+  /** @domName SVGTransform.setSkewX */
   void setSkewX(num angle) native "SVGTransform_setSkewX_Callback";
 
+
+  /** @domName SVGTransform.setSkewY */
   void setSkewY(num angle) native "SVGTransform_setSkewY_Callback";
 
+
+  /** @domName SVGTransform.setTranslate */
   void setTranslate(num tx, num ty) native "SVGTransform_setTranslate_Callback";
 
 }
@@ -34097,46 +27541,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTransformList
-abstract class SVGTransformList implements List<SVGTransform> {
+class SVGTransformList extends NativeFieldWrapperClass1 implements List<SVGTransform> {
+  SVGTransformList.internal();
+
 
   /** @domName SVGTransformList.numberOfItems */
-  int get numberOfItems;
-
-  /** @domName SVGTransformList.appendItem */
-  SVGTransform appendItem(SVGTransform item);
-
-  /** @domName SVGTransformList.clear */
-  void clear();
-
-  /** @domName SVGTransformList.consolidate */
-  SVGTransform consolidate();
-
-  /** @domName SVGTransformList.createSVGTransformFromMatrix */
-  SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
-
-  /** @domName SVGTransformList.getItem */
-  SVGTransform getItem(int index);
-
-  /** @domName SVGTransformList.initialize */
-  SVGTransform initialize(SVGTransform item);
-
-  /** @domName SVGTransformList.insertItemBefore */
-  SVGTransform insertItemBefore(SVGTransform item, int index);
-
-  /** @domName SVGTransformList.removeItem */
-  SVGTransform removeItem(int index);
-
-  /** @domName SVGTransformList.replaceItem */
-  SVGTransform replaceItem(SVGTransform item, int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGTransformListImpl extends NativeFieldWrapperClass1 implements SVGTransformList {
-
   int get numberOfItems native "SVGTransformList_numberOfItems_Getter";
 
   SVGTransform operator[](int index) native "SVGTransformList_item_Callback";
@@ -34222,22 +27631,40 @@
 
   // -- end List<SVGTransform> mixins.
 
+
+  /** @domName SVGTransformList.appendItem */
   SVGTransform appendItem(SVGTransform item) native "SVGTransformList_appendItem_Callback";
 
+
+  /** @domName SVGTransformList.clear */
   void clear() native "SVGTransformList_clear_Callback";
 
+
+  /** @domName SVGTransformList.consolidate */
   SVGTransform consolidate() native "SVGTransformList_consolidate_Callback";
 
+
+  /** @domName SVGTransformList.createSVGTransformFromMatrix */
   SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
 
+
+  /** @domName SVGTransformList.getItem */
   SVGTransform getItem(int index) native "SVGTransformList_getItem_Callback";
 
+
+  /** @domName SVGTransformList.initialize */
   SVGTransform initialize(SVGTransform item) native "SVGTransformList_initialize_Callback";
 
+
+  /** @domName SVGTransformList.insertItemBefore */
   SVGTransform insertItemBefore(SVGTransform item, int index) native "SVGTransformList_insertItemBefore_Callback";
 
+
+  /** @domName SVGTransformList.removeItem */
   SVGTransform removeItem(int index) native "SVGTransformList_removeItem_Callback";
 
+
+  /** @domName SVGTransformList.replaceItem */
   SVGTransform replaceItem(SVGTransform item, int index) native "SVGTransformList_replaceItem_Callback";
 
 }
@@ -34248,10 +27675,37 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGTransformable
-abstract class SVGTransformable implements SVGLocatable {
+class SVGTransformable extends NativeFieldWrapperClass1 implements SVGLocatable {
+  SVGTransformable.internal();
+
 
   /** @domName SVGTransformable.transform */
-  SVGAnimatedTransformList get transform;
+  SVGAnimatedTransformList get transform native "SVGTransformable_transform_Getter";
+
+
+  /** @domName SVGTransformable.farthestViewportElement */
+  SVGElement get farthestViewportElement native "SVGTransformable_farthestViewportElement_Getter";
+
+
+  /** @domName SVGTransformable.nearestViewportElement */
+  SVGElement get nearestViewportElement native "SVGTransformable_nearestViewportElement_Getter";
+
+
+  /** @domName SVGTransformable.getBBox */
+  SVGRect getBBox() native "SVGTransformable_getBBox_Callback";
+
+
+  /** @domName SVGTransformable.getCTM */
+  SVGMatrix getCTM() native "SVGTransformable_getCTM_Callback";
+
+
+  /** @domName SVGTransformable.getScreenCTM */
+  SVGMatrix getScreenCTM() native "SVGTransformable_getScreenCTM_Callback";
+
+
+  /** @domName SVGTransformable.getTransformToElement */
+  SVGMatrix getTransformToElement(SVGElement element) native "SVGTransformable_getTransformToElement_Callback";
+
 }
 // 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
@@ -34260,10 +27714,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGURIReference
-abstract class SVGURIReference {
+class SVGURIReference extends NativeFieldWrapperClass1 {
+  SVGURIReference.internal();
+
 
   /** @domName SVGURIReference.href */
-  SVGAnimatedString get href;
+  SVGAnimatedString get href native "SVGURIReference_href_Getter";
+
 }
 // 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
@@ -34272,21 +27729,14 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGUnitTypes
-abstract class SVGUnitTypes {
+class SVGUnitTypes extends NativeFieldWrapperClass1 {
+  SVGUnitTypes.internal();
 
   static const int SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
 
   static const int SVG_UNIT_TYPE_UNKNOWN = 0;
 
   static const int SVG_UNIT_TYPE_USERSPACEONUSE = 1;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGUnitTypesImpl extends NativeFieldWrapperClass1 implements SVGUnitTypes {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34296,84 +27746,111 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGUseElement
-abstract class SVGUseElement implements SVGElement, SVGURIReference, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGStylable, SVGTransformable {
+class SVGUseElement extends SVGElement implements SVGLangSpace, SVGTests, SVGStylable, SVGURIReference, SVGExternalResourcesRequired, SVGTransformable {
+  SVGUseElement.internal(): super.internal();
+
 
   /** @domName SVGUseElement.animatedInstanceRoot */
-  SVGElementInstance get animatedInstanceRoot;
-
-  /** @domName SVGUseElement.height */
-  SVGAnimatedLength get height;
-
-  /** @domName SVGUseElement.instanceRoot */
-  SVGElementInstance get instanceRoot;
-
-  /** @domName SVGUseElement.width */
-  SVGAnimatedLength get width;
-
-  /** @domName SVGUseElement.x */
-  SVGAnimatedLength get x;
-
-  /** @domName SVGUseElement.y */
-  SVGAnimatedLength get y;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGUseElementImpl extends _SVGElementImpl implements SVGUseElement {
-
   SVGElementInstance get animatedInstanceRoot native "SVGUseElement_animatedInstanceRoot_Getter";
 
+
+  /** @domName SVGUseElement.height */
   SVGAnimatedLength get height native "SVGUseElement_height_Getter";
 
+
+  /** @domName SVGUseElement.instanceRoot */
   SVGElementInstance get instanceRoot native "SVGUseElement_instanceRoot_Getter";
 
+
+  /** @domName SVGUseElement.width */
   SVGAnimatedLength get width native "SVGUseElement_width_Getter";
 
+
+  /** @domName SVGUseElement.x */
   SVGAnimatedLength get x native "SVGUseElement_x_Getter";
 
+
+  /** @domName SVGUseElement.y */
   SVGAnimatedLength get y native "SVGUseElement_y_Getter";
 
+
+  /** @domName SVGUseElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGUseElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGUseElement.xmllang */
   String get xmllang native "SVGUseElement_xmllang_Getter";
 
+
+  /** @domName SVGUseElement.xmllang */
   void set xmllang(String value) native "SVGUseElement_xmllang_Setter";
 
+
+  /** @domName SVGUseElement.xmlspace */
   String get xmlspace native "SVGUseElement_xmlspace_Getter";
 
+
+  /** @domName SVGUseElement.xmlspace */
   void set xmlspace(String value) native "SVGUseElement_xmlspace_Setter";
 
+
+  /** @domName SVGUseElement.farthestViewportElement */
   SVGElement get farthestViewportElement native "SVGUseElement_farthestViewportElement_Getter";
 
+
+  /** @domName SVGUseElement.nearestViewportElement */
   SVGElement get nearestViewportElement native "SVGUseElement_nearestViewportElement_Getter";
 
+
+  /** @domName SVGUseElement.getBBox */
   SVGRect getBBox() native "SVGUseElement_getBBox_Callback";
 
+
+  /** @domName SVGUseElement.getCTM */
   SVGMatrix getCTM() native "SVGUseElement_getCTM_Callback";
 
+
+  /** @domName SVGUseElement.getScreenCTM */
   SVGMatrix getScreenCTM() native "SVGUseElement_getScreenCTM_Callback";
 
+
+  /** @domName SVGUseElement.getTransformToElement */
   SVGMatrix getTransformToElement(SVGElement element) native "SVGUseElement_getTransformToElement_Callback";
 
+
+  /** @domName SVGUseElement.className */
   SVGAnimatedString get $dom_svgClassName native "SVGUseElement_className_Getter";
 
+
+  /** @domName SVGUseElement.style */
   CSSStyleDeclaration get style native "SVGUseElement_style_Getter";
 
+
+  /** @domName SVGUseElement.getPresentationAttribute */
   CSSValue getPresentationAttribute(String name) native "SVGUseElement_getPresentationAttribute_Callback";
 
+
+  /** @domName SVGUseElement.requiredExtensions */
   SVGStringList get requiredExtensions native "SVGUseElement_requiredExtensions_Getter";
 
+
+  /** @domName SVGUseElement.requiredFeatures */
   SVGStringList get requiredFeatures native "SVGUseElement_requiredFeatures_Getter";
 
+
+  /** @domName SVGUseElement.systemLanguage */
   SVGStringList get systemLanguage native "SVGUseElement_systemLanguage_Getter";
 
+
+  /** @domName SVGUseElement.hasExtension */
   bool hasExtension(String extension) native "SVGUseElement_hasExtension_Callback";
 
+
+  /** @domName SVGUseElement.transform */
   SVGAnimatedTransformList get transform native "SVGUseElement_transform_Getter";
 
+
+  /** @domName SVGUseElement.href */
   SVGAnimatedString get href native "SVGUseElement_href_Getter";
 
 }
@@ -34384,15 +27861,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGVKernElement
-abstract class SVGVKernElement implements SVGElement {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGVKernElementImpl extends _SVGElementImpl implements SVGVKernElement {
+class SVGVKernElement extends SVGElement {
+  SVGVKernElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -34402,29 +27872,31 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGViewElement
-abstract class SVGViewElement implements SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
+class SVGViewElement extends SVGElement implements SVGFitToViewBox, SVGZoomAndPan, SVGExternalResourcesRequired {
+  SVGViewElement.internal(): super.internal();
+
 
   /** @domName SVGViewElement.viewTarget */
-  SVGStringList get viewTarget;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGViewElementImpl extends _SVGElementImpl implements SVGViewElement {
-
   SVGStringList get viewTarget native "SVGViewElement_viewTarget_Getter";
 
+
+  /** @domName SVGViewElement.externalResourcesRequired */
   SVGAnimatedBoolean get externalResourcesRequired native "SVGViewElement_externalResourcesRequired_Getter";
 
+
+  /** @domName SVGViewElement.preserveAspectRatio */
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewElement_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGViewElement.viewBox */
   SVGAnimatedRect get viewBox native "SVGViewElement_viewBox_Getter";
 
+
+  /** @domName SVGViewElement.zoomAndPan */
   int get zoomAndPan native "SVGViewElement_zoomAndPan_Getter";
 
+
+  /** @domName SVGViewElement.zoomAndPan */
   void set zoomAndPan(int value) native "SVGViewElement_zoomAndPan_Setter";
 
 }
@@ -34435,61 +27907,47 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGViewSpec
-abstract class SVGViewSpec {
+class SVGViewSpec extends NativeFieldWrapperClass1 {
+  SVGViewSpec.internal();
+
 
   /** @domName SVGViewSpec.preserveAspectRatio */
-  SVGAnimatedPreserveAspectRatio get preserveAspectRatio;
-
-  /** @domName SVGViewSpec.preserveAspectRatioString */
-  String get preserveAspectRatioString;
-
-  /** @domName SVGViewSpec.transform */
-  SVGTransformList get transform;
-
-  /** @domName SVGViewSpec.transformString */
-  String get transformString;
-
-  /** @domName SVGViewSpec.viewBox */
-  SVGAnimatedRect get viewBox;
-
-  /** @domName SVGViewSpec.viewBoxString */
-  String get viewBoxString;
-
-  /** @domName SVGViewSpec.viewTarget */
-  SVGElement get viewTarget;
-
-  /** @domName SVGViewSpec.viewTargetString */
-  String get viewTargetString;
-
-  /** @domName SVGViewSpec.zoomAndPan */
-  int zoomAndPan;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGViewSpecImpl extends NativeFieldWrapperClass1 implements SVGViewSpec {
-
   SVGAnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
 
+
+  /** @domName SVGViewSpec.preserveAspectRatioString */
   String get preserveAspectRatioString native "SVGViewSpec_preserveAspectRatioString_Getter";
 
+
+  /** @domName SVGViewSpec.transform */
   SVGTransformList get transform native "SVGViewSpec_transform_Getter";
 
+
+  /** @domName SVGViewSpec.transformString */
   String get transformString native "SVGViewSpec_transformString_Getter";
 
+
+  /** @domName SVGViewSpec.viewBox */
   SVGAnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
 
+
+  /** @domName SVGViewSpec.viewBoxString */
   String get viewBoxString native "SVGViewSpec_viewBoxString_Getter";
 
+
+  /** @domName SVGViewSpec.viewTarget */
   SVGElement get viewTarget native "SVGViewSpec_viewTarget_Getter";
 
+
+  /** @domName SVGViewSpec.viewTargetString */
   String get viewTargetString native "SVGViewSpec_viewTargetString_Getter";
 
+
+  /** @domName SVGViewSpec.zoomAndPan */
   int get zoomAndPan native "SVGViewSpec_zoomAndPan_Getter";
 
+
+  /** @domName SVGViewSpec.zoomAndPan */
   void set zoomAndPan(int value) native "SVGViewSpec_zoomAndPan_Setter";
 
 }
@@ -34500,7 +27958,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGZoomAndPan
-abstract class SVGZoomAndPan {
+class SVGZoomAndPan extends NativeFieldWrapperClass1 {
+  SVGZoomAndPan.internal();
 
   static const int SVG_ZOOMANDPAN_DISABLE = 1;
 
@@ -34508,8 +27967,14 @@
 
   static const int SVG_ZOOMANDPAN_UNKNOWN = 0;
 
+
   /** @domName SVGZoomAndPan.zoomAndPan */
-  int zoomAndPan;
+  int get zoomAndPan native "SVGZoomAndPan_zoomAndPan_Getter";
+
+
+  /** @domName SVGZoomAndPan.zoomAndPan */
+  void set zoomAndPan(int value) native "SVGZoomAndPan_zoomAndPan_Setter";
+
 }
 // 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
@@ -34518,39 +27983,27 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SVGZoomEvent
-abstract class SVGZoomEvent implements UIEvent {
+class SVGZoomEvent extends UIEvent {
+  SVGZoomEvent.internal(): super.internal();
+
 
   /** @domName SVGZoomEvent.newScale */
-  num get newScale;
-
-  /** @domName SVGZoomEvent.newTranslate */
-  SVGPoint get newTranslate;
-
-  /** @domName SVGZoomEvent.previousScale */
-  num get previousScale;
-
-  /** @domName SVGZoomEvent.previousTranslate */
-  SVGPoint get previousTranslate;
-
-  /** @domName SVGZoomEvent.zoomRectScreen */
-  SVGRect get zoomRectScreen;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SVGZoomEventImpl extends _UIEventImpl implements SVGZoomEvent {
-
   num get newScale native "SVGZoomEvent_newScale_Getter";
 
+
+  /** @domName SVGZoomEvent.newTranslate */
   SVGPoint get newTranslate native "SVGZoomEvent_newTranslate_Getter";
 
+
+  /** @domName SVGZoomEvent.previousScale */
   num get previousScale native "SVGZoomEvent_previousScale_Getter";
 
+
+  /** @domName SVGZoomEvent.previousTranslate */
   SVGPoint get previousTranslate native "SVGZoomEvent_previousTranslate_Getter";
 
+
+  /** @domName SVGZoomEvent.zoomRectScreen */
   SVGRect get zoomRectScreen native "SVGZoomEvent_zoomRectScreen_Getter";
 
 }
@@ -34561,54 +28014,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Screen
-abstract class Screen {
+class Screen extends NativeFieldWrapperClass1 {
+  Screen.internal();
+
 
   /** @domName Screen.availHeight */
-  int get availHeight;
-
-  /** @domName Screen.availLeft */
-  int get availLeft;
-
-  /** @domName Screen.availTop */
-  int get availTop;
-
-  /** @domName Screen.availWidth */
-  int get availWidth;
-
-  /** @domName Screen.colorDepth */
-  int get colorDepth;
-
-  /** @domName Screen.height */
-  int get height;
-
-  /** @domName Screen.pixelDepth */
-  int get pixelDepth;
-
-  /** @domName Screen.width */
-  int get width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ScreenImpl extends NativeFieldWrapperClass1 implements Screen {
-
   int get availHeight native "Screen_availHeight_Getter";
 
+
+  /** @domName Screen.availLeft */
   int get availLeft native "Screen_availLeft_Getter";
 
+
+  /** @domName Screen.availTop */
   int get availTop native "Screen_availTop_Getter";
 
+
+  /** @domName Screen.availWidth */
   int get availWidth native "Screen_availWidth_Getter";
 
+
+  /** @domName Screen.colorDepth */
   int get colorDepth native "Screen_colorDepth_Getter";
 
+
+  /** @domName Screen.height */
   int get height native "Screen_height_Getter";
 
+
+  /** @domName Screen.pixelDepth */
   int get pixelDepth native "Screen_pixelDepth_Getter";
 
+
+  /** @domName Screen.width */
   int get width native "Screen_width_Getter";
 
 }
@@ -34619,72 +28057,73 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLScriptElement
-abstract class ScriptElement implements Element {
+class ScriptElement extends _Element_Merged {
 
   factory ScriptElement() => _Elements.createScriptElement();
+  ScriptElement.internal(): super.internal();
+
 
   /** @domName HTMLScriptElement.async */
-  bool async;
-
-  /** @domName HTMLScriptElement.charset */
-  String charset;
-
-  /** @domName HTMLScriptElement.crossOrigin */
-  String crossOrigin;
-
-  /** @domName HTMLScriptElement.defer */
-  bool defer;
-
-  /** @domName HTMLScriptElement.event */
-  String event;
-
-  /** @domName HTMLScriptElement.htmlFor */
-  String htmlFor;
-
-  /** @domName HTMLScriptElement.src */
-  String src;
-
-  /** @domName HTMLScriptElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ScriptElementImpl extends _ElementImpl_Merged implements ScriptElement {
-
   bool get async native "HTMLScriptElement_async_Getter";
 
+
+  /** @domName HTMLScriptElement.async */
   void set async(bool value) native "HTMLScriptElement_async_Setter";
 
+
+  /** @domName HTMLScriptElement.charset */
   String get charset native "HTMLScriptElement_charset_Getter";
 
+
+  /** @domName HTMLScriptElement.charset */
   void set charset(String value) native "HTMLScriptElement_charset_Setter";
 
+
+  /** @domName HTMLScriptElement.crossOrigin */
   String get crossOrigin native "HTMLScriptElement_crossOrigin_Getter";
 
+
+  /** @domName HTMLScriptElement.crossOrigin */
   void set crossOrigin(String value) native "HTMLScriptElement_crossOrigin_Setter";
 
+
+  /** @domName HTMLScriptElement.defer */
   bool get defer native "HTMLScriptElement_defer_Getter";
 
+
+  /** @domName HTMLScriptElement.defer */
   void set defer(bool value) native "HTMLScriptElement_defer_Setter";
 
+
+  /** @domName HTMLScriptElement.event */
   String get event native "HTMLScriptElement_event_Getter";
 
+
+  /** @domName HTMLScriptElement.event */
   void set event(String value) native "HTMLScriptElement_event_Setter";
 
+
+  /** @domName HTMLScriptElement.htmlFor */
   String get htmlFor native "HTMLScriptElement_htmlFor_Getter";
 
+
+  /** @domName HTMLScriptElement.htmlFor */
   void set htmlFor(String value) native "HTMLScriptElement_htmlFor_Setter";
 
+
+  /** @domName HTMLScriptElement.src */
   String get src native "HTMLScriptElement_src_Getter";
 
+
+  /** @domName HTMLScriptElement.src */
   void set src(String value) native "HTMLScriptElement_src_Setter";
 
+
+  /** @domName HTMLScriptElement.type */
   String get type native "HTMLScriptElement_type_Getter";
 
+
+  /** @domName HTMLScriptElement.type */
   void set type(String value) native "HTMLScriptElement_type_Setter";
 
 }
@@ -34695,38 +28134,23 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ScriptProcessorNode
-abstract class ScriptProcessorNode implements AudioNode, EventTarget {
+class ScriptProcessorNode extends AudioNode implements EventTarget {
+  ScriptProcessorNode.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  ScriptProcessorNodeEvents get on;
+  ScriptProcessorNodeEvents get on =>
+    new ScriptProcessorNodeEvents(this);
+
 
   /** @domName ScriptProcessorNode.bufferSize */
-  int get bufferSize;
-}
-
-abstract class ScriptProcessorNodeEvents implements Events {
-
-  EventListenerList get audioProcess;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ScriptProcessorNodeImpl extends _AudioNodeImpl implements ScriptProcessorNode {
-
-  _ScriptProcessorNodeEventsImpl get on =>
-    new _ScriptProcessorNodeEventsImpl(this);
-
   int get bufferSize native "ScriptProcessorNode_bufferSize_Getter";
 
 }
 
-class _ScriptProcessorNodeEventsImpl extends _EventsImpl implements ScriptProcessorNodeEvents {
-  _ScriptProcessorNodeEventsImpl(_ptr) : super(_ptr);
+class ScriptProcessorNodeEvents extends Events {
+  ScriptProcessorNodeEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get audioProcess => this['audioprocess'];
 }
@@ -34737,29 +28161,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ScriptProfile
-abstract class ScriptProfile {
+class ScriptProfile extends NativeFieldWrapperClass1 {
+  ScriptProfile.internal();
+
 
   /** @domName ScriptProfile.head */
-  ScriptProfileNode get head;
-
-  /** @domName ScriptProfile.title */
-  String get title;
-
-  /** @domName ScriptProfile.uid */
-  int get uid;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ScriptProfileImpl extends NativeFieldWrapperClass1 implements ScriptProfile {
-
   ScriptProfileNode get head native "ScriptProfile_head_Getter";
 
+
+  /** @domName ScriptProfile.title */
   String get title native "ScriptProfile_title_Getter";
 
+
+  /** @domName ScriptProfile.uid */
   int get uid native "ScriptProfile_uid_Getter";
 
 }
@@ -34770,59 +28184,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ScriptProfileNode
-abstract class ScriptProfileNode {
+class ScriptProfileNode extends NativeFieldWrapperClass1 {
+  ScriptProfileNode.internal();
+
 
   /** @domName ScriptProfileNode.callUID */
-  int get callUID;
-
-  /** @domName ScriptProfileNode.functionName */
-  String get functionName;
-
-  /** @domName ScriptProfileNode.lineNumber */
-  int get lineNumber;
-
-  /** @domName ScriptProfileNode.numberOfCalls */
-  int get numberOfCalls;
-
-  /** @domName ScriptProfileNode.selfTime */
-  num get selfTime;
-
-  /** @domName ScriptProfileNode.totalTime */
-  num get totalTime;
-
-  /** @domName ScriptProfileNode.url */
-  String get url;
-
-  /** @domName ScriptProfileNode.visible */
-  bool get visible;
-
-  /** @domName ScriptProfileNode.children */
-  List<ScriptProfileNode> children();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ScriptProfileNodeImpl extends NativeFieldWrapperClass1 implements ScriptProfileNode {
-
   int get callUID native "ScriptProfileNode_callUID_Getter";
 
+
+  /** @domName ScriptProfileNode.functionName */
   String get functionName native "ScriptProfileNode_functionName_Getter";
 
+
+  /** @domName ScriptProfileNode.lineNumber */
   int get lineNumber native "ScriptProfileNode_lineNumber_Getter";
 
+
+  /** @domName ScriptProfileNode.numberOfCalls */
   int get numberOfCalls native "ScriptProfileNode_numberOfCalls_Getter";
 
+
+  /** @domName ScriptProfileNode.selfTime */
   num get selfTime native "ScriptProfileNode_selfTime_Getter";
 
+
+  /** @domName ScriptProfileNode.totalTime */
   num get totalTime native "ScriptProfileNode_totalTime_Getter";
 
+
+  /** @domName ScriptProfileNode.url */
   String get url native "ScriptProfileNode_url_Getter";
 
+
+  /** @domName ScriptProfileNode.visible */
   bool get visible native "ScriptProfileNode_visible_Getter";
 
+
+  /** @domName ScriptProfileNode.children */
   List<ScriptProfileNode> children() native "ScriptProfileNode_children_Callback";
 
 }
@@ -34833,139 +28231,129 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLSelectElement
-abstract class SelectElement implements Element {
+class SelectElement extends _Element_Merged {
 
   factory SelectElement() => _Elements.createSelectElement();
+  SelectElement.internal(): super.internal();
+
 
   /** @domName HTMLSelectElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLSelectElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLSelectElement.form */
-  FormElement get form;
-
-  /** @domName HTMLSelectElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLSelectElement.length */
-  int length;
-
-  /** @domName HTMLSelectElement.multiple */
-  bool multiple;
-
-  /** @domName HTMLSelectElement.name */
-  String name;
-
-  /** @domName HTMLSelectElement.options */
-  HTMLOptionsCollection get options;
-
-  /** @domName HTMLSelectElement.required */
-  bool required;
-
-  /** @domName HTMLSelectElement.selectedIndex */
-  int selectedIndex;
-
-  /** @domName HTMLSelectElement.selectedOptions */
-  HTMLCollection get selectedOptions;
-
-  /** @domName HTMLSelectElement.size */
-  int size;
-
-  /** @domName HTMLSelectElement.type */
-  String get type;
-
-  /** @domName HTMLSelectElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLSelectElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLSelectElement.value */
-  String value;
-
-  /** @domName HTMLSelectElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLSelectElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLSelectElement.item */
-  Node item(int index);
-
-  /** @domName HTMLSelectElement.namedItem */
-  Node namedItem(String name);
-
-  /** @domName HTMLSelectElement.setCustomValidity */
-  void setCustomValidity(String error);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SelectElementImpl extends _ElementImpl_Merged implements SelectElement {
-
   bool get autofocus native "HTMLSelectElement_autofocus_Getter";
 
+
+  /** @domName HTMLSelectElement.autofocus */
   void set autofocus(bool value) native "HTMLSelectElement_autofocus_Setter";
 
+
+  /** @domName HTMLSelectElement.disabled */
   bool get disabled native "HTMLSelectElement_disabled_Getter";
 
+
+  /** @domName HTMLSelectElement.disabled */
   void set disabled(bool value) native "HTMLSelectElement_disabled_Setter";
 
+
+  /** @domName HTMLSelectElement.form */
   FormElement get form native "HTMLSelectElement_form_Getter";
 
+
+  /** @domName HTMLSelectElement.labels */
   List<Node> get labels native "HTMLSelectElement_labels_Getter";
 
+
+  /** @domName HTMLSelectElement.length */
   int get length native "HTMLSelectElement_length_Getter";
 
+
+  /** @domName HTMLSelectElement.length */
   void set length(int value) native "HTMLSelectElement_length_Setter";
 
+
+  /** @domName HTMLSelectElement.multiple */
   bool get multiple native "HTMLSelectElement_multiple_Getter";
 
+
+  /** @domName HTMLSelectElement.multiple */
   void set multiple(bool value) native "HTMLSelectElement_multiple_Setter";
 
+
+  /** @domName HTMLSelectElement.name */
   String get name native "HTMLSelectElement_name_Getter";
 
+
+  /** @domName HTMLSelectElement.name */
   void set name(String value) native "HTMLSelectElement_name_Setter";
 
+
+  /** @domName HTMLSelectElement.options */
   HTMLOptionsCollection get options native "HTMLSelectElement_options_Getter";
 
+
+  /** @domName HTMLSelectElement.required */
   bool get required native "HTMLSelectElement_required_Getter";
 
+
+  /** @domName HTMLSelectElement.required */
   void set required(bool value) native "HTMLSelectElement_required_Setter";
 
+
+  /** @domName HTMLSelectElement.selectedIndex */
   int get selectedIndex native "HTMLSelectElement_selectedIndex_Getter";
 
+
+  /** @domName HTMLSelectElement.selectedIndex */
   void set selectedIndex(int value) native "HTMLSelectElement_selectedIndex_Setter";
 
+
+  /** @domName HTMLSelectElement.selectedOptions */
   HTMLCollection get selectedOptions native "HTMLSelectElement_selectedOptions_Getter";
 
+
+  /** @domName HTMLSelectElement.size */
   int get size native "HTMLSelectElement_size_Getter";
 
+
+  /** @domName HTMLSelectElement.size */
   void set size(int value) native "HTMLSelectElement_size_Setter";
 
+
+  /** @domName HTMLSelectElement.type */
   String get type native "HTMLSelectElement_type_Getter";
 
+
+  /** @domName HTMLSelectElement.validationMessage */
   String get validationMessage native "HTMLSelectElement_validationMessage_Getter";
 
+
+  /** @domName HTMLSelectElement.validity */
   ValidityState get validity native "HTMLSelectElement_validity_Getter";
 
+
+  /** @domName HTMLSelectElement.value */
   String get value native "HTMLSelectElement_value_Getter";
 
+
+  /** @domName HTMLSelectElement.value */
   void set value(String value) native "HTMLSelectElement_value_Setter";
 
+
+  /** @domName HTMLSelectElement.willValidate */
   bool get willValidate native "HTMLSelectElement_willValidate_Getter";
 
+
+  /** @domName HTMLSelectElement.checkValidity */
   bool checkValidity() native "HTMLSelectElement_checkValidity_Callback";
 
+
+  /** @domName HTMLSelectElement.item */
   Node item(int index) native "HTMLSelectElement_item_Callback";
 
+
+  /** @domName HTMLSelectElement.namedItem */
   Node namedItem(String name) native "HTMLSelectElement_namedItem_Callback";
 
+
+  /** @domName HTMLSelectElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLSelectElement_setCustomValidity_Callback";
 
 }
@@ -34976,26 +28364,17 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SessionDescription
-abstract class SessionDescription {
+class SessionDescription extends NativeFieldWrapperClass1 {
 
   factory SessionDescription(String sdp) => _SessionDescriptionFactoryProvider.createSessionDescription(sdp);
+  SessionDescription.internal();
+
 
   /** @domName SessionDescription.addCandidate */
-  void addCandidate(IceCandidate candidate);
-
-  /** @domName SessionDescription.toSdp */
-  String toSdp();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SessionDescriptionImpl extends NativeFieldWrapperClass1 implements SessionDescription {
-
   void addCandidate(IceCandidate candidate) native "SessionDescription_addCandidate_Callback";
 
+
+  /** @domName SessionDescription.toSdp */
   String toSdp() native "SessionDescription_toSdp_Callback";
 
 }
@@ -35006,21 +28385,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLShadowElement
-abstract class ShadowElement implements Element {
+class ShadowElement extends _Element_Merged {
+  ShadowElement.internal(): super.internal();
+
 
   /** @domName HTMLShadowElement.resetStyleInheritance */
-  bool resetStyleInheritance;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ShadowElementImpl extends _ElementImpl_Merged implements ShadowElement {
-
   bool get resetStyleInheritance native "HTMLShadowElement_resetStyleInheritance_Getter";
 
+
+  /** @domName HTMLShadowElement.resetStyleInheritance */
   void set resetStyleInheritance(bool value) native "HTMLShadowElement_resetStyleInheritance_Setter";
 
 }
@@ -35030,71 +28403,57 @@
 
 // WARNING: Do not edit - generated code.
 
-
-/// @domName ShadowRoot
-abstract class ShadowRoot implements DocumentFragment {
+class ShadowRoot extends DocumentFragment {
 
   factory ShadowRoot(Element host) => _ShadowRootFactoryProvider.createShadowRoot(host);
+  ShadowRoot.internal(): super.internal();
+
 
   /** @domName ShadowRoot.activeElement */
-  Element get activeElement;
-
-  /** @domName ShadowRoot.applyAuthorStyles */
-  bool applyAuthorStyles;
-
-  /** @domName ShadowRoot.innerHTML */
-  String innerHTML;
-
-  /** @domName ShadowRoot.resetStyleInheritance */
-  bool resetStyleInheritance;
-
-  /** @domName ShadowRoot.cloneNode */
-  Node clone(bool deep);
-
-  /** @domName ShadowRoot.getElementById */
-  Element $dom_getElementById(String elementId);
-
-  /** @domName ShadowRoot.getElementsByClassName */
-  List<Node> $dom_getElementsByClassName(String className);
-
-  /** @domName ShadowRoot.getElementsByTagName */
-  List<Node> $dom_getElementsByTagName(String tagName);
-
-  /** @domName ShadowRoot.getSelection */
-  DOMSelection getSelection();
-
-  static bool get supported => _ShadowRootImpl.supported;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ShadowRootImpl extends _DocumentFragmentImpl implements ShadowRoot {
-
   Element get activeElement native "ShadowRoot_activeElement_Getter";
 
+
+  /** @domName ShadowRoot.applyAuthorStyles */
   bool get applyAuthorStyles native "ShadowRoot_applyAuthorStyles_Getter";
 
+
+  /** @domName ShadowRoot.applyAuthorStyles */
   void set applyAuthorStyles(bool value) native "ShadowRoot_applyAuthorStyles_Setter";
 
+
+  /** @domName ShadowRoot.innerHTML */
   String get innerHTML native "ShadowRoot_innerHTML_Getter";
 
+
+  /** @domName ShadowRoot.innerHTML */
   void set innerHTML(String value) native "ShadowRoot_innerHTML_Setter";
 
+
+  /** @domName ShadowRoot.resetStyleInheritance */
   bool get resetStyleInheritance native "ShadowRoot_resetStyleInheritance_Getter";
 
+
+  /** @domName ShadowRoot.resetStyleInheritance */
   void set resetStyleInheritance(bool value) native "ShadowRoot_resetStyleInheritance_Setter";
 
+
+  /** @domName ShadowRoot.cloneNode */
   Node clone(bool deep) native "ShadowRoot_cloneNode_Callback";
 
+
+  /** @domName ShadowRoot.getElementById */
   Element $dom_getElementById(String elementId) native "ShadowRoot_getElementById_Callback";
 
+
+  /** @domName ShadowRoot.getElementsByClassName */
   List<Node> $dom_getElementsByClassName(String className) native "ShadowRoot_getElementsByClassName_Callback";
 
+
+  /** @domName ShadowRoot.getElementsByTagName */
   List<Node> $dom_getElementsByTagName(String tagName) native "ShadowRoot_getElementsByTagName_Callback";
 
+
+  /** @domName ShadowRoot.getSelection */
   DOMSelection getSelection() native "ShadowRoot_getSelection_Callback";
 
   static bool get supported => _Utils.shadowRootSupported(window.document);
@@ -35106,7 +28465,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SharedWorker
-abstract class SharedWorker implements AbstractWorker {
+class SharedWorker extends AbstractWorker {
 
   factory SharedWorker(String scriptURL, [String name]) {
     if (!?name) {
@@ -35114,60 +28473,10 @@
     }
     return _SharedWorkerFactoryProvider.createSharedWorker(scriptURL, name);
   }
+  SharedWorker.internal(): super.internal();
+
 
   /** @domName SharedWorker.port */
-  MessagePort get port;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SharedWorkerContext
-abstract class SharedWorkerContext implements WorkerContext {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  SharedWorkerContextEvents get on;
-
-  /** @domName SharedWorkerContext.name */
-  String get name;
-}
-
-abstract class SharedWorkerContextEvents implements WorkerContextEvents {
-
-  EventListenerList get connect;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SharedWorkerContextImpl extends _WorkerContextImpl implements SharedWorkerContext {
-
-  _SharedWorkerContextEventsImpl get on =>
-    new _SharedWorkerContextEventsImpl(this);
-
-  String get name native "SharedWorkerContext_name_Getter";
-
-}
-
-class _SharedWorkerContextEventsImpl extends _WorkerContextEventsImpl implements SharedWorkerContextEvents {
-  _SharedWorkerContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get connect => this['connect'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SharedWorkerImpl extends _AbstractWorkerImpl implements SharedWorker {
-
   MessagePort get port native "SharedWorker_port_Getter";
 
 }
@@ -35177,20 +28486,26 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName SourceBuffer
-abstract class SourceBuffer {
+/// @domName SharedWorkerContext
+class SharedWorkerContext extends WorkerContext {
+  SharedWorkerContext.internal(): super.internal();
 
-  /** @domName SourceBuffer.buffered */
-  TimeRanges get buffered;
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  SharedWorkerContextEvents get on =>
+    new SharedWorkerContextEvents(this);
 
-  /** @domName SourceBuffer.timestampOffset */
-  num timestampOffset;
 
-  /** @domName SourceBuffer.abort */
-  void abort();
+  /** @domName SharedWorkerContext.name */
+  String get name native "SharedWorkerContext_name_Getter";
 
-  /** @domName SourceBuffer.append */
-  void append(Uint8Array data);
+}
+
+class SharedWorkerContextEvents extends WorkerContextEvents {
+  SharedWorkerContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get connect => this['connect'];
 }
 // 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
@@ -35198,16 +28513,28 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SourceBufferImpl extends NativeFieldWrapperClass1 implements SourceBuffer {
+/// @domName SourceBuffer
+class SourceBuffer extends NativeFieldWrapperClass1 {
+  SourceBuffer.internal();
 
+
+  /** @domName SourceBuffer.buffered */
   TimeRanges get buffered native "SourceBuffer_buffered_Getter";
 
+
+  /** @domName SourceBuffer.timestampOffset */
   num get timestampOffset native "SourceBuffer_timestampOffset_Getter";
 
+
+  /** @domName SourceBuffer.timestampOffset */
   void set timestampOffset(num value) native "SourceBuffer_timestampOffset_Setter";
 
+
+  /** @domName SourceBuffer.abort */
   void abort() native "SourceBuffer_abort_Callback";
 
+
+  /** @domName SourceBuffer.append */
   void append(Uint8Array data) native "SourceBuffer_append_Callback";
 
 }
@@ -35218,31 +28545,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SourceBufferList
-abstract class SourceBufferList implements EventTarget, List<SourceBuffer> {
+class SourceBufferList extends EventTarget implements List<SourceBuffer> {
+  SourceBufferList.internal(): super.internal();
+
 
   /** @domName SourceBufferList.length */
-  int get length;
-
-  /** @domName SourceBufferList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SourceBufferList.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName SourceBufferList.item */
-  SourceBuffer item(int index);
-
-  /** @domName SourceBufferList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SourceBufferListImpl extends _EventTargetImpl implements SourceBufferList {
-
   int get length native "SourceBufferList_length_Getter";
 
   SourceBuffer operator[](int index) native "SourceBufferList_item_Callback";
@@ -35328,12 +28635,20 @@
 
   // -- end List<SourceBuffer> mixins.
 
+
+  /** @domName SourceBufferList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_addEventListener_Callback";
 
+
+  /** @domName SourceBufferList.dispatchEvent */
   bool $dom_dispatchEvent(Event event) native "SourceBufferList_dispatchEvent_Callback";
 
+
+  /** @domName SourceBufferList.item */
   SourceBuffer item(int index) native "SourceBufferList_item_Callback";
 
+
+  /** @domName SourceBufferList.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_removeEventListener_Callback";
 
 }
@@ -35344,37 +28659,33 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLSourceElement
-abstract class SourceElement implements Element {
+class SourceElement extends _Element_Merged {
 
   factory SourceElement() => _Elements.createSourceElement();
+  SourceElement.internal(): super.internal();
+
 
   /** @domName HTMLSourceElement.media */
-  String media;
-
-  /** @domName HTMLSourceElement.src */
-  String src;
-
-  /** @domName HTMLSourceElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SourceElementImpl extends _ElementImpl_Merged implements SourceElement {
-
   String get media native "HTMLSourceElement_media_Getter";
 
+
+  /** @domName HTMLSourceElement.media */
   void set media(String value) native "HTMLSourceElement_media_Setter";
 
+
+  /** @domName HTMLSourceElement.src */
   String get src native "HTMLSourceElement_src_Getter";
 
+
+  /** @domName HTMLSourceElement.src */
   void set src(String value) native "HTMLSourceElement_src_Setter";
 
+
+  /** @domName HTMLSourceElement.type */
   String get type native "HTMLSourceElement_type_Getter";
 
+
+  /** @domName HTMLSourceElement.type */
   void set type(String value) native "HTMLSourceElement_type_Setter";
 
 }
@@ -35385,17 +28696,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLSpanElement
-abstract class SpanElement implements Element {
+class SpanElement extends _Element_Merged {
 
   factory SpanElement() => _Elements.createSpanElement();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpanElementImpl extends _ElementImpl_Merged implements SpanElement {
+  SpanElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -35405,30 +28709,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SpeechGrammar
-abstract class SpeechGrammar {
+class SpeechGrammar extends NativeFieldWrapperClass1 {
 
   factory SpeechGrammar() => _SpeechGrammarFactoryProvider.createSpeechGrammar();
+  SpeechGrammar.internal();
+
 
   /** @domName SpeechGrammar.src */
-  String src;
-
-  /** @domName SpeechGrammar.weight */
-  num weight;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechGrammarImpl extends NativeFieldWrapperClass1 implements SpeechGrammar {
-
   String get src native "SpeechGrammar_src_Getter";
 
+
+  /** @domName SpeechGrammar.src */
   void set src(String value) native "SpeechGrammar_src_Setter";
 
+
+  /** @domName SpeechGrammar.weight */
   num get weight native "SpeechGrammar_weight_Getter";
 
+
+  /** @domName SpeechGrammar.weight */
   void set weight(num value) native "SpeechGrammar_weight_Setter";
 
 }
@@ -35439,30 +28738,13 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SpeechGrammarList
-abstract class SpeechGrammarList implements List<SpeechGrammar> {
+class SpeechGrammarList extends NativeFieldWrapperClass1 implements List<SpeechGrammar> {
 
   factory SpeechGrammarList() => _SpeechGrammarListFactoryProvider.createSpeechGrammarList();
+  SpeechGrammarList.internal();
+
 
   /** @domName SpeechGrammarList.length */
-  int get length;
-
-  /** @domName SpeechGrammarList.addFromString */
-  void addFromString(String string, [num weight]);
-
-  /** @domName SpeechGrammarList.addFromUri */
-  void addFromUri(String src, [num weight]);
-
-  /** @domName SpeechGrammarList.item */
-  SpeechGrammar item(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechGrammarListImpl extends NativeFieldWrapperClass1 implements SpeechGrammarList {
-
   int get length native "SpeechGrammarList_length_Getter";
 
   SpeechGrammar operator[](int index) native "SpeechGrammarList_item_Callback";
@@ -35556,8 +28838,12 @@
     _addFromString_2(string);
   }
 
+
+  /** @domName SpeechGrammarList.addFromString_1 */
   void _addFromString_1(string, weight) native "SpeechGrammarList_addFromString_1_Callback";
 
+
+  /** @domName SpeechGrammarList.addFromString_2 */
   void _addFromString_2(string) native "SpeechGrammarList_addFromString_2_Callback";
 
   void addFromUri(/*DOMString*/ src, [/*float*/ weight]) {
@@ -35568,10 +28854,16 @@
     _addFromUri_2(src);
   }
 
+
+  /** @domName SpeechGrammarList.addFromUri_1 */
   void _addFromUri_1(src, weight) native "SpeechGrammarList_addFromUri_1_Callback";
 
+
+  /** @domName SpeechGrammarList.addFromUri_2 */
   void _addFromUri_2(src) native "SpeechGrammarList_addFromUri_2_Callback";
 
+
+  /** @domName SpeechGrammarList.item */
   SpeechGrammar item(int index) native "SpeechGrammarList_item_Callback";
 
 }
@@ -35582,19 +28874,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SpeechInputEvent
-abstract class SpeechInputEvent implements Event {
+class SpeechInputEvent extends Event {
+  SpeechInputEvent.internal(): super.internal();
+
 
   /** @domName SpeechInputEvent.results */
-  List<SpeechInputResult> get results;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechInputEventImpl extends _EventImpl implements SpeechInputEvent {
-
   List<SpeechInputResult> get results native "SpeechInputEvent_results_Getter";
 
 }
@@ -35605,24 +28889,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName SpeechInputResult
-abstract class SpeechInputResult {
+class SpeechInputResult extends NativeFieldWrapperClass1 {
+  SpeechInputResult.internal();
+
 
   /** @domName SpeechInputResult.confidence */
-  num get confidence;
-
-  /** @domName SpeechInputResult.utterance */
-  String get utterance;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechInputResultImpl extends NativeFieldWrapperClass1 implements SpeechInputResult {
-
   num get confidence native "SpeechInputResult_confidence_Getter";
 
+
+  /** @domName SpeechInputResult.utterance */
   String get utterance native "SpeechInputResult_utterance_Getter";
 
 }
@@ -35632,324 +28907,86 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SpeechInputResultListImpl extends NativeFieldWrapperClass1 implements List<SpeechInputResult> {
-
-  int get length native "SpeechInputResultList_length_Getter";
-
-  SpeechInputResult operator[](int index) native "SpeechInputResultList_item_Callback";
-
-  void operator[]=(int index, SpeechInputResult value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SpeechInputResult> mixins.
-  // SpeechInputResult is the element type.
-
-  // From Iterable<SpeechInputResult>:
-
-  Iterator<SpeechInputResult> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SpeechInputResult>(this);
-  }
-
-  // From Collection<SpeechInputResult>:
-
-  void add(SpeechInputResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SpeechInputResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SpeechInputResult> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SpeechInputResult element) => _Collections.contains(this, element);
-
-  void forEach(void f(SpeechInputResult element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SpeechInputResult element)) => _Collections.map(this, [], f);
-
-  Collection<SpeechInputResult> filter(bool f(SpeechInputResult element)) =>
-     _Collections.filter(this, <SpeechInputResult>[], f);
-
-  bool every(bool f(SpeechInputResult element)) => _Collections.every(this, f);
-
-  bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SpeechInputResult>:
-
-  void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SpeechInputResult element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SpeechInputResult element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SpeechInputResult get last => this[length - 1];
-
-  SpeechInputResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SpeechInputResult> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SpeechInputResult>[]);
-
-  // -- end List<SpeechInputResult> mixins.
-
-  SpeechInputResult item(int index) native "SpeechInputResultList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName SpeechRecognition
-abstract class SpeechRecognition implements EventTarget {
+class SpeechRecognition extends EventTarget {
 
   factory SpeechRecognition() => _SpeechRecognitionFactoryProvider.createSpeechRecognition();
+  SpeechRecognition.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  SpeechRecognitionEvents get on;
+  SpeechRecognitionEvents get on =>
+    new SpeechRecognitionEvents(this);
+
 
   /** @domName SpeechRecognition.continuous */
-  bool continuous;
-
-  /** @domName SpeechRecognition.grammars */
-  SpeechGrammarList grammars;
-
-  /** @domName SpeechRecognition.interimResults */
-  bool interimResults;
-
-  /** @domName SpeechRecognition.lang */
-  String lang;
-
-  /** @domName SpeechRecognition.maxAlternatives */
-  int maxAlternatives;
-
-  /** @domName SpeechRecognition.abort */
-  void abort();
-
-  /** @domName SpeechRecognition.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SpeechRecognition.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName SpeechRecognition.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName SpeechRecognition.start */
-  void start();
-
-  /** @domName SpeechRecognition.stop */
-  void stop();
-}
-
-abstract class SpeechRecognitionEvents implements Events {
-
-  EventListenerList get audioEnd;
-
-  EventListenerList get audioStart;
-
-  EventListenerList get end;
-
-  EventListenerList get error;
-
-  EventListenerList get noMatch;
-
-  EventListenerList get result;
-
-  EventListenerList get soundEnd;
-
-  EventListenerList get soundStart;
-
-  EventListenerList get speechEnd;
-
-  EventListenerList get speechStart;
-
-  EventListenerList get start;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionAlternative
-abstract class SpeechRecognitionAlternative {
-
-  /** @domName SpeechRecognitionAlternative.confidence */
-  num get confidence;
-
-  /** @domName SpeechRecognitionAlternative.transcript */
-  String get transcript;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechRecognitionAlternativeImpl extends NativeFieldWrapperClass1 implements SpeechRecognitionAlternative {
-
-  num get confidence native "SpeechRecognitionAlternative_confidence_Getter";
-
-  String get transcript native "SpeechRecognitionAlternative_transcript_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionError
-abstract class SpeechRecognitionError implements Event {
-
-  static const int ABORTED = 2;
-
-  static const int AUDIO_CAPTURE = 3;
-
-  static const int BAD_GRAMMAR = 7;
-
-  static const int LANGUAGE_NOT_SUPPORTED = 8;
-
-  static const int NETWORK = 4;
-
-  static const int NOT_ALLOWED = 5;
-
-  static const int NO_SPEECH = 1;
-
-  static const int OTHER = 0;
-
-  static const int SERVICE_NOT_ALLOWED = 6;
-
-  /** @domName SpeechRecognitionError.code */
-  int get code;
-
-  /** @domName SpeechRecognitionError.message */
-  String get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechRecognitionErrorImpl extends _EventImpl implements SpeechRecognitionError {
-
-  int get code native "SpeechRecognitionError_code_Getter";
-
-  String get message native "SpeechRecognitionError_message_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName SpeechRecognitionEvent
-abstract class SpeechRecognitionEvent implements Event {
-
-  /** @domName SpeechRecognitionEvent.result */
-  SpeechRecognitionResult get result;
-
-  /** @domName SpeechRecognitionEvent.resultHistory */
-  List<SpeechRecognitionResult> get resultHistory;
-
-  /** @domName SpeechRecognitionEvent.resultIndex */
-  int get resultIndex;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechRecognitionEventImpl extends _EventImpl implements SpeechRecognitionEvent {
-
-  SpeechRecognitionResult get result native "SpeechRecognitionEvent_result_Getter";
-
-  List<SpeechRecognitionResult> get resultHistory native "SpeechRecognitionEvent_resultHistory_Getter";
-
-  int get resultIndex native "SpeechRecognitionEvent_resultIndex_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _SpeechRecognitionImpl extends _EventTargetImpl implements SpeechRecognition {
-
-  _SpeechRecognitionEventsImpl get on =>
-    new _SpeechRecognitionEventsImpl(this);
-
   bool get continuous native "SpeechRecognition_continuous_Getter";
 
+
+  /** @domName SpeechRecognition.continuous */
   void set continuous(bool value) native "SpeechRecognition_continuous_Setter";
 
+
+  /** @domName SpeechRecognition.grammars */
   SpeechGrammarList get grammars native "SpeechRecognition_grammars_Getter";
 
+
+  /** @domName SpeechRecognition.grammars */
   void set grammars(SpeechGrammarList value) native "SpeechRecognition_grammars_Setter";
 
+
+  /** @domName SpeechRecognition.interimResults */
   bool get interimResults native "SpeechRecognition_interimResults_Getter";
 
+
+  /** @domName SpeechRecognition.interimResults */
   void set interimResults(bool value) native "SpeechRecognition_interimResults_Setter";
 
+
+  /** @domName SpeechRecognition.lang */
   String get lang native "SpeechRecognition_lang_Getter";
 
+
+  /** @domName SpeechRecognition.lang */
   void set lang(String value) native "SpeechRecognition_lang_Setter";
 
+
+  /** @domName SpeechRecognition.maxAlternatives */
   int get maxAlternatives native "SpeechRecognition_maxAlternatives_Getter";
 
+
+  /** @domName SpeechRecognition.maxAlternatives */
   void set maxAlternatives(int value) native "SpeechRecognition_maxAlternatives_Setter";
 
+
+  /** @domName SpeechRecognition.abort */
   void abort() native "SpeechRecognition_abort_Callback";
 
+
+  /** @domName SpeechRecognition.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SpeechRecognition_addEventListener_Callback";
 
+
+  /** @domName SpeechRecognition.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "SpeechRecognition_dispatchEvent_Callback";
 
+
+  /** @domName SpeechRecognition.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SpeechRecognition_removeEventListener_Callback";
 
+
+  /** @domName SpeechRecognition.start */
   void start() native "SpeechRecognition_start_Callback";
 
+
+  /** @domName SpeechRecognition.stop */
   void stop() native "SpeechRecognition_stop_Callback";
 
 }
 
-class _SpeechRecognitionEventsImpl extends _EventsImpl implements SpeechRecognitionEvents {
-  _SpeechRecognitionEventsImpl(_ptr) : super(_ptr);
+class SpeechRecognitionEvents extends Events {
+  SpeechRecognitionEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get audioEnd => this['audioend'];
 
@@ -35979,20 +29016,18 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName SpeechRecognitionResult
-abstract class SpeechRecognitionResult {
+/// @domName SpeechRecognitionAlternative
+class SpeechRecognitionAlternative extends NativeFieldWrapperClass1 {
+  SpeechRecognitionAlternative.internal();
 
-  /** @domName SpeechRecognitionResult.emma */
-  Document get emma;
 
-  /** @domName SpeechRecognitionResult.finalValue */
-  bool get finalValue;
+  /** @domName SpeechRecognitionAlternative.confidence */
+  num get confidence native "SpeechRecognitionAlternative_confidence_Getter";
 
-  /** @domName SpeechRecognitionResult.length */
-  int get length;
 
-  /** @domName SpeechRecognitionResult.item */
-  SpeechRecognitionAlternative item(int index);
+  /** @domName SpeechRecognitionAlternative.transcript */
+  String get transcript native "SpeechRecognitionAlternative_transcript_Getter";
+
 }
 // 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
@@ -36000,14 +29035,84 @@
 
 // WARNING: Do not edit - generated code.
 
-class _SpeechRecognitionResultImpl extends NativeFieldWrapperClass1 implements SpeechRecognitionResult {
+/// @domName SpeechRecognitionError
+class SpeechRecognitionError extends Event {
+  SpeechRecognitionError.internal(): super.internal();
 
+  static const int ABORTED = 2;
+
+  static const int AUDIO_CAPTURE = 3;
+
+  static const int BAD_GRAMMAR = 7;
+
+  static const int LANGUAGE_NOT_SUPPORTED = 8;
+
+  static const int NETWORK = 4;
+
+  static const int NOT_ALLOWED = 5;
+
+  static const int NO_SPEECH = 1;
+
+  static const int OTHER = 0;
+
+  static const int SERVICE_NOT_ALLOWED = 6;
+
+
+  /** @domName SpeechRecognitionError.code */
+  int get code native "SpeechRecognitionError_code_Getter";
+
+
+  /** @domName SpeechRecognitionError.message */
+  String get message native "SpeechRecognitionError_message_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName SpeechRecognitionEvent
+class SpeechRecognitionEvent extends Event {
+  SpeechRecognitionEvent.internal(): super.internal();
+
+
+  /** @domName SpeechRecognitionEvent.result */
+  SpeechRecognitionResult get result native "SpeechRecognitionEvent_result_Getter";
+
+
+  /** @domName SpeechRecognitionEvent.resultHistory */
+  List<SpeechRecognitionResult> get resultHistory native "SpeechRecognitionEvent_resultHistory_Getter";
+
+
+  /** @domName SpeechRecognitionEvent.resultIndex */
+  int get resultIndex native "SpeechRecognitionEvent_resultIndex_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName SpeechRecognitionResult
+class SpeechRecognitionResult extends NativeFieldWrapperClass1 {
+  SpeechRecognitionResult.internal();
+
+
+  /** @domName SpeechRecognitionResult.emma */
   Document get emma native "SpeechRecognitionResult_emma_Getter";
 
+
+  /** @domName SpeechRecognitionResult.final */
   bool get finalValue native "SpeechRecognitionResult_final_Getter";
 
+
+  /** @domName SpeechRecognitionResult.length */
   int get length native "SpeechRecognitionResult_length_Getter";
 
+
+  /** @domName SpeechRecognitionResult.item */
   SpeechRecognitionAlternative item(int index) native "SpeechRecognitionResult_item_Callback";
 
 }
@@ -36015,178 +29120,7 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-class _SpeechRecognitionResultListImpl extends NativeFieldWrapperClass1 implements List<SpeechRecognitionResult> {
-
-  int get length native "SpeechRecognitionResultList_length_Getter";
-
-  SpeechRecognitionResult operator[](int index) native "SpeechRecognitionResultList_item_Callback";
-
-  void operator[]=(int index, SpeechRecognitionResult value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<SpeechRecognitionResult> mixins.
-  // SpeechRecognitionResult is the element type.
-
-  // From Iterable<SpeechRecognitionResult>:
-
-  Iterator<SpeechRecognitionResult> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<SpeechRecognitionResult>(this);
-  }
-
-  // From Collection<SpeechRecognitionResult>:
-
-  void add(SpeechRecognitionResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(SpeechRecognitionResult value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<SpeechRecognitionResult> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
-
-  void forEach(void f(SpeechRecognitionResult element)) => _Collections.forEach(this, f);
-
-  Collection map(f(SpeechRecognitionResult element)) => _Collections.map(this, [], f);
-
-  Collection<SpeechRecognitionResult> filter(bool f(SpeechRecognitionResult element)) =>
-     _Collections.filter(this, <SpeechRecognitionResult>[], f);
-
-  bool every(bool f(SpeechRecognitionResult element)) => _Collections.every(this, f);
-
-  bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<SpeechRecognitionResult>:
-
-  void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(SpeechRecognitionResult element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  SpeechRecognitionResult get last => this[length - 1];
-
-  SpeechRecognitionResult removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <SpeechRecognitionResult>[]);
-
-  // -- end List<SpeechRecognitionResult> mixins.
-
-  SpeechRecognitionResult item(int index) native "SpeechRecognitionResultList_item_Callback";
-
-}
-// 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.
-
-
-/// @domName Storage
-abstract class Storage implements Map<String, String> {
-
-  /** @domName Storage.length */
-  int get $dom_length;
-
-  /** @domName Storage.clear */
-  void $dom_clear();
-
-  /** @domName Storage.getItem */
-  String $dom_getItem(String key);
-
-  /** @domName Storage.key */
-  String $dom_key(int index);
-
-  /** @domName Storage.removeItem */
-  void $dom_removeItem(String key);
-
-  /** @domName Storage.setItem */
-  void $dom_setItem(String key, String data);
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName StorageEvent
-abstract class StorageEvent implements Event {
-
-  /** @domName StorageEvent.key */
-  String get key;
-
-  /** @domName StorageEvent.newValue */
-  String get newValue;
-
-  /** @domName StorageEvent.oldValue */
-  String get oldValue;
-
-  /** @domName StorageEvent.storageArea */
-  Storage get storageArea;
-
-  /** @domName StorageEvent.url */
-  String get url;
-
-  /** @domName StorageEvent.initStorageEvent */
-  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _StorageEventImpl extends _EventImpl implements StorageEvent {
-
-  String get key native "StorageEvent_key_Getter";
-
-  String get newValue native "StorageEvent_newValue_Getter";
-
-  String get oldValue native "StorageEvent_oldValue_Getter";
-
-  Storage get storageArea native "StorageEvent_storageArea_Getter";
-
-  String get url native "StorageEvent_url_Getter";
-
-  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native "StorageEvent_initStorageEvent_Callback";
-
-}
-// 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 _StorageImpl extends NativeFieldWrapperClass1 implements Storage {
+class Storage extends NativeFieldWrapperClass1 implements Map<String, String>  {
 
   // TODO(nweiz): update this when maps support lazy iteration
   bool containsValue(String value) => values.some((e) => e == value);
@@ -36234,17 +29168,30 @@
   int get length => $dom_length;
 
   bool get isEmpty => $dom_key(0) == null;
+  Storage.internal();
 
+
+  /** @domName Storage.length */
   int get $dom_length native "Storage_length_Getter";
 
+
+  /** @domName Storage.clear */
   void $dom_clear() native "Storage_clear_Callback";
 
+
+  /** @domName Storage.getItem */
   String $dom_getItem(String key) native "Storage_getItem_Callback";
 
+
+  /** @domName Storage.key */
   String $dom_key(int index) native "Storage_key_Callback";
 
+
+  /** @domName Storage.removeItem */
   void $dom_removeItem(String key) native "Storage_removeItem_Callback";
 
+
+  /** @domName Storage.setItem */
   void $dom_setItem(String key, String data) native "Storage_setItem_Callback";
 
 }
@@ -36254,18 +29201,57 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName StorageEvent
+class StorageEvent extends Event {
+  StorageEvent.internal(): super.internal();
+
+
+  /** @domName StorageEvent.key */
+  String get key native "StorageEvent_key_Getter";
+
+
+  /** @domName StorageEvent.newValue */
+  String get newValue native "StorageEvent_newValue_Getter";
+
+
+  /** @domName StorageEvent.oldValue */
+  String get oldValue native "StorageEvent_oldValue_Getter";
+
+
+  /** @domName StorageEvent.storageArea */
+  Storage get storageArea native "StorageEvent_storageArea_Getter";
+
+
+  /** @domName StorageEvent.url */
+  String get url native "StorageEvent_url_Getter";
+
+
+  /** @domName StorageEvent.initStorageEvent */
+  void initStorageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, String keyArg, String oldValueArg, String newValueArg, String urlArg, Storage storageAreaArg) native "StorageEvent_initStorageEvent_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
 /// @domName StorageInfo
-abstract class StorageInfo {
+class StorageInfo extends NativeFieldWrapperClass1 {
+  StorageInfo.internal();
 
   static const int PERSISTENT = 1;
 
   static const int TEMPORARY = 0;
 
+
   /** @domName StorageInfo.queryUsageAndQuota */
-  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]);
+  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_queryUsageAndQuota_Callback";
+
 
   /** @domName StorageInfo.requestQuota */
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]);
+  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_requestQuota_Callback";
+
 }
 // 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
@@ -36281,19 +29267,6 @@
 
 // WARNING: Do not edit - generated code.
 
-class _StorageInfoImpl extends NativeFieldWrapperClass1 implements StorageInfo {
-
-  void queryUsageAndQuota(int storageType, [StorageInfoUsageCallback usageCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_queryUsageAndQuota_Callback";
-
-  void requestQuota(int storageType, int newQuotaInBytes, [StorageInfoQuotaCallback quotaCallback, StorageInfoErrorCallback errorCallback]) native "StorageInfo_requestQuota_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 
 typedef void StorageInfoQuotaCallback(int grantedQuotaInBytes);
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -36319,49 +29292,45 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLStyleElement
-abstract class StyleElement implements Element {
+class StyleElement extends _Element_Merged {
 
   factory StyleElement() => _Elements.createStyleElement();
+  StyleElement.internal(): super.internal();
+
 
   /** @domName HTMLStyleElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLStyleElement.media */
-  String media;
-
-  /** @domName HTMLStyleElement.scoped */
-  bool scoped;
-
-  /** @domName HTMLStyleElement.sheet */
-  StyleSheet get sheet;
-
-  /** @domName HTMLStyleElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _StyleElementImpl extends _ElementImpl_Merged implements StyleElement {
-
   bool get disabled native "HTMLStyleElement_disabled_Getter";
 
+
+  /** @domName HTMLStyleElement.disabled */
   void set disabled(bool value) native "HTMLStyleElement_disabled_Setter";
 
+
+  /** @domName HTMLStyleElement.media */
   String get media native "HTMLStyleElement_media_Getter";
 
+
+  /** @domName HTMLStyleElement.media */
   void set media(String value) native "HTMLStyleElement_media_Setter";
 
+
+  /** @domName HTMLStyleElement.scoped */
   bool get scoped native "HTMLStyleElement_scoped_Getter";
 
+
+  /** @domName HTMLStyleElement.scoped */
   void set scoped(bool value) native "HTMLStyleElement_scoped_Setter";
 
+
+  /** @domName HTMLStyleElement.sheet */
   StyleSheet get sheet native "HTMLStyleElement_sheet_Getter";
 
+
+  /** @domName HTMLStyleElement.type */
   String get type native "HTMLStyleElement_type_Getter";
 
+
+  /** @domName HTMLStyleElement.type */
   void set type(String value) native "HTMLStyleElement_type_Setter";
 
 }
@@ -36372,24 +29341,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName StyleMedia
-abstract class StyleMedia {
+class StyleMedia extends NativeFieldWrapperClass1 {
+  StyleMedia.internal();
+
 
   /** @domName StyleMedia.type */
-  String get type;
-
-  /** @domName StyleMedia.matchMedium */
-  bool matchMedium(String mediaquery);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _StyleMediaImpl extends NativeFieldWrapperClass1 implements StyleMedia {
-
   String get type native "StyleMedia_type_Getter";
 
+
+  /** @domName StyleMedia.matchMedium */
   bool matchMedium(String mediaquery) native "StyleMedia_matchMedium_Callback";
 
 }
@@ -36400,51 +29360,39 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName StyleSheet
-abstract class StyleSheet {
+class StyleSheet extends NativeFieldWrapperClass1 {
+  StyleSheet.internal();
+
 
   /** @domName StyleSheet.disabled */
-  bool disabled;
-
-  /** @domName StyleSheet.href */
-  String get href;
-
-  /** @domName StyleSheet.media */
-  MediaList get media;
-
-  /** @domName StyleSheet.ownerNode */
-  Node get ownerNode;
-
-  /** @domName StyleSheet.parentStyleSheet */
-  StyleSheet get parentStyleSheet;
-
-  /** @domName StyleSheet.title */
-  String get title;
-
-  /** @domName StyleSheet.type */
-  String get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _StyleSheetImpl extends NativeFieldWrapperClass1 implements StyleSheet {
-
   bool get disabled native "StyleSheet_disabled_Getter";
 
+
+  /** @domName StyleSheet.disabled */
   void set disabled(bool value) native "StyleSheet_disabled_Setter";
 
+
+  /** @domName StyleSheet.href */
   String get href native "StyleSheet_href_Getter";
 
+
+  /** @domName StyleSheet.media */
   MediaList get media native "StyleSheet_media_Getter";
 
+
+  /** @domName StyleSheet.ownerNode */
   Node get ownerNode native "StyleSheet_ownerNode_Getter";
 
+
+  /** @domName StyleSheet.parentStyleSheet */
   StyleSheet get parentStyleSheet native "StyleSheet_parentStyleSheet_Getter";
 
+
+  /** @domName StyleSheet.title */
   String get title native "StyleSheet_title_Getter";
 
+
+  /** @domName StyleSheet.type */
   String get type native "StyleSheet_type_Getter";
 
 }
@@ -36454,120 +29402,18 @@
 
 // WARNING: Do not edit - generated code.
 
-class _StyleSheetListImpl extends NativeFieldWrapperClass1 implements List<StyleSheet> {
-
-  int get length native "StyleSheetList_length_Getter";
-
-  StyleSheet operator[](int index) native "StyleSheetList_item_Callback";
-
-  void operator[]=(int index, StyleSheet value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<StyleSheet> mixins.
-  // StyleSheet is the element type.
-
-  // From Iterable<StyleSheet>:
-
-  Iterator<StyleSheet> iterator() {
-    // Note: NodeLists are not fixed size. And most probably length shouldn't
-    // be cached in both iterator _and_ forEach method. For now caching it
-    // for consistency.
-    return new _FixedSizeListIterator<StyleSheet>(this);
-  }
-
-  // From Collection<StyleSheet>:
-
-  void add(StyleSheet value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addLast(StyleSheet value) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  void addAll(Collection<StyleSheet> collection) {
-    throw new UnsupportedError("Cannot add to immutable List.");
-  }
-
-  bool contains(StyleSheet element) => _Collections.contains(this, element);
-
-  void forEach(void f(StyleSheet element)) => _Collections.forEach(this, f);
-
-  Collection map(f(StyleSheet element)) => _Collections.map(this, [], f);
-
-  Collection<StyleSheet> filter(bool f(StyleSheet element)) =>
-     _Collections.filter(this, <StyleSheet>[], f);
-
-  bool every(bool f(StyleSheet element)) => _Collections.every(this, f);
-
-  bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
-
-  bool get isEmpty => this.length == 0;
-
-  // From List<StyleSheet>:
-
-  void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
-    throw new UnsupportedError("Cannot sort immutable List.");
-  }
-
-  int indexOf(StyleSheet element, [int start = 0]) =>
-      _Lists.indexOf(this, element, start, this.length);
-
-  int lastIndexOf(StyleSheet element, [int start]) {
-    if (start == null) start = length - 1;
-    return _Lists.lastIndexOf(this, element, start);
-  }
-
-  StyleSheet get last => this[length - 1];
-
-  StyleSheet removeLast() {
-    throw new UnsupportedError("Cannot removeLast on immutable List.");
-  }
-
-  void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
-    throw new UnsupportedError("Cannot setRange on immutable List.");
-  }
-
-  void removeRange(int start, int rangeLength) {
-    throw new UnsupportedError("Cannot removeRange on immutable List.");
-  }
-
-  void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
-    throw new UnsupportedError("Cannot insertRange on immutable List.");
-  }
-
-  List<StyleSheet> getRange(int start, int rangeLength) =>
-      _Lists.getRange(this, start, rangeLength, <StyleSheet>[]);
-
-  // -- end List<StyleSheet> mixins.
-
-  StyleSheet item(int index) native "StyleSheetList_item_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName HTMLTableCaptionElement
-abstract class TableCaptionElement implements Element {
+class TableCaptionElement extends _Element_Merged {
 
   factory TableCaptionElement() => _Elements.createTableCaptionElement();
+  TableCaptionElement.internal(): super.internal();
+
 
   /** @domName HTMLTableCaptionElement.align */
-  String align;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TableCaptionElementImpl extends _ElementImpl_Merged implements TableCaptionElement {
-
   String get align native "HTMLTableCaptionElement_align_Getter";
 
+
+  /** @domName HTMLTableCaptionElement.align */
   void set align(String value) native "HTMLTableCaptionElement_align_Setter";
 
 }
@@ -36578,119 +29424,125 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTableCellElement
-abstract class TableCellElement implements Element {
+class TableCellElement extends _Element_Merged {
 
   factory TableCellElement() => _Elements.createTableCellElement();
+  TableCellElement.internal(): super.internal();
+
 
   /** @domName HTMLTableCellElement.abbr */
-  String abbr;
-
-  /** @domName HTMLTableCellElement.align */
-  String align;
-
-  /** @domName HTMLTableCellElement.axis */
-  String axis;
-
-  /** @domName HTMLTableCellElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableCellElement.cellIndex */
-  int get cellIndex;
-
-  /** @domName HTMLTableCellElement.ch */
-  String ch;
-
-  /** @domName HTMLTableCellElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableCellElement.colSpan */
-  int colSpan;
-
-  /** @domName HTMLTableCellElement.headers */
-  String headers;
-
-  /** @domName HTMLTableCellElement.height */
-  String height;
-
-  /** @domName HTMLTableCellElement.noWrap */
-  bool noWrap;
-
-  /** @domName HTMLTableCellElement.rowSpan */
-  int rowSpan;
-
-  /** @domName HTMLTableCellElement.scope */
-  String scope;
-
-  /** @domName HTMLTableCellElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableCellElement.width */
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TableCellElementImpl extends _ElementImpl_Merged implements TableCellElement {
-
   String get abbr native "HTMLTableCellElement_abbr_Getter";
 
+
+  /** @domName HTMLTableCellElement.abbr */
   void set abbr(String value) native "HTMLTableCellElement_abbr_Setter";
 
+
+  /** @domName HTMLTableCellElement.align */
   String get align native "HTMLTableCellElement_align_Getter";
 
+
+  /** @domName HTMLTableCellElement.align */
   void set align(String value) native "HTMLTableCellElement_align_Setter";
 
+
+  /** @domName HTMLTableCellElement.axis */
   String get axis native "HTMLTableCellElement_axis_Getter";
 
+
+  /** @domName HTMLTableCellElement.axis */
   void set axis(String value) native "HTMLTableCellElement_axis_Setter";
 
+
+  /** @domName HTMLTableCellElement.bgColor */
   String get bgColor native "HTMLTableCellElement_bgColor_Getter";
 
+
+  /** @domName HTMLTableCellElement.bgColor */
   void set bgColor(String value) native "HTMLTableCellElement_bgColor_Setter";
 
+
+  /** @domName HTMLTableCellElement.cellIndex */
   int get cellIndex native "HTMLTableCellElement_cellIndex_Getter";
 
+
+  /** @domName HTMLTableCellElement.ch */
   String get ch native "HTMLTableCellElement_ch_Getter";
 
+
+  /** @domName HTMLTableCellElement.ch */
   void set ch(String value) native "HTMLTableCellElement_ch_Setter";
 
+
+  /** @domName HTMLTableCellElement.chOff */
   String get chOff native "HTMLTableCellElement_chOff_Getter";
 
+
+  /** @domName HTMLTableCellElement.chOff */
   void set chOff(String value) native "HTMLTableCellElement_chOff_Setter";
 
+
+  /** @domName HTMLTableCellElement.colSpan */
   int get colSpan native "HTMLTableCellElement_colSpan_Getter";
 
+
+  /** @domName HTMLTableCellElement.colSpan */
   void set colSpan(int value) native "HTMLTableCellElement_colSpan_Setter";
 
+
+  /** @domName HTMLTableCellElement.headers */
   String get headers native "HTMLTableCellElement_headers_Getter";
 
+
+  /** @domName HTMLTableCellElement.headers */
   void set headers(String value) native "HTMLTableCellElement_headers_Setter";
 
+
+  /** @domName HTMLTableCellElement.height */
   String get height native "HTMLTableCellElement_height_Getter";
 
+
+  /** @domName HTMLTableCellElement.height */
   void set height(String value) native "HTMLTableCellElement_height_Setter";
 
+
+  /** @domName HTMLTableCellElement.noWrap */
   bool get noWrap native "HTMLTableCellElement_noWrap_Getter";
 
+
+  /** @domName HTMLTableCellElement.noWrap */
   void set noWrap(bool value) native "HTMLTableCellElement_noWrap_Setter";
 
+
+  /** @domName HTMLTableCellElement.rowSpan */
   int get rowSpan native "HTMLTableCellElement_rowSpan_Getter";
 
+
+  /** @domName HTMLTableCellElement.rowSpan */
   void set rowSpan(int value) native "HTMLTableCellElement_rowSpan_Setter";
 
+
+  /** @domName HTMLTableCellElement.scope */
   String get scope native "HTMLTableCellElement_scope_Getter";
 
+
+  /** @domName HTMLTableCellElement.scope */
   void set scope(String value) native "HTMLTableCellElement_scope_Setter";
 
+
+  /** @domName HTMLTableCellElement.vAlign */
   String get vAlign native "HTMLTableCellElement_vAlign_Getter";
 
+
+  /** @domName HTMLTableCellElement.vAlign */
   void set vAlign(String value) native "HTMLTableCellElement_vAlign_Setter";
 
+
+  /** @domName HTMLTableCellElement.width */
   String get width native "HTMLTableCellElement_width_Getter";
 
+
+  /** @domName HTMLTableCellElement.width */
   void set width(String value) native "HTMLTableCellElement_width_Setter";
 
 }
@@ -36701,58 +29553,57 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTableColElement
-abstract class TableColElement implements Element {
+class TableColElement extends _Element_Merged {
 
   factory TableColElement() => _Elements.createTableColElement();
+  TableColElement.internal(): super.internal();
+
 
   /** @domName HTMLTableColElement.align */
-  String align;
-
-  /** @domName HTMLTableColElement.ch */
-  String ch;
-
-  /** @domName HTMLTableColElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableColElement.span */
-  int span;
-
-  /** @domName HTMLTableColElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableColElement.width */
-  String width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TableColElementImpl extends _ElementImpl_Merged implements TableColElement {
-
   String get align native "HTMLTableColElement_align_Getter";
 
+
+  /** @domName HTMLTableColElement.align */
   void set align(String value) native "HTMLTableColElement_align_Setter";
 
+
+  /** @domName HTMLTableColElement.ch */
   String get ch native "HTMLTableColElement_ch_Getter";
 
+
+  /** @domName HTMLTableColElement.ch */
   void set ch(String value) native "HTMLTableColElement_ch_Setter";
 
+
+  /** @domName HTMLTableColElement.chOff */
   String get chOff native "HTMLTableColElement_chOff_Getter";
 
+
+  /** @domName HTMLTableColElement.chOff */
   void set chOff(String value) native "HTMLTableColElement_chOff_Setter";
 
+
+  /** @domName HTMLTableColElement.span */
   int get span native "HTMLTableColElement_span_Getter";
 
+
+  /** @domName HTMLTableColElement.span */
   void set span(int value) native "HTMLTableColElement_span_Setter";
 
+
+  /** @domName HTMLTableColElement.vAlign */
   String get vAlign native "HTMLTableColElement_vAlign_Getter";
 
+
+  /** @domName HTMLTableColElement.vAlign */
   void set vAlign(String value) native "HTMLTableColElement_vAlign_Setter";
 
+
+  /** @domName HTMLTableColElement.width */
   String get width native "HTMLTableColElement_width_Getter";
 
+
+  /** @domName HTMLTableColElement.width */
   void set width(String value) native "HTMLTableColElement_width_Setter";
 
 }
@@ -36763,155 +29614,149 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTableElement
-abstract class TableElement implements Element {
+class TableElement extends _Element_Merged {
 
   factory TableElement() => _Elements.createTableElement();
+  TableElement.internal(): super.internal();
+
 
   /** @domName HTMLTableElement.align */
-  String align;
-
-  /** @domName HTMLTableElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableElement.border */
-  String border;
-
-  /** @domName HTMLTableElement.caption */
-  TableCaptionElement caption;
-
-  /** @domName HTMLTableElement.cellPadding */
-  String cellPadding;
-
-  /** @domName HTMLTableElement.cellSpacing */
-  String cellSpacing;
-
-  /** @domName HTMLTableElement.frame */
-  String frame;
-
-  /** @domName HTMLTableElement.rows */
-  HTMLCollection get rows;
-
-  /** @domName HTMLTableElement.rules */
-  String rules;
-
-  /** @domName HTMLTableElement.summary */
-  String summary;
-
-  /** @domName HTMLTableElement.tBodies */
-  HTMLCollection get tBodies;
-
-  /** @domName HTMLTableElement.tFoot */
-  TableSectionElement tFoot;
-
-  /** @domName HTMLTableElement.tHead */
-  TableSectionElement tHead;
-
-  /** @domName HTMLTableElement.width */
-  String width;
-
-  /** @domName HTMLTableElement.createCaption */
-  Element createCaption();
-
-  /** @domName HTMLTableElement.createTBody */
-  Element createTBody();
-
-  /** @domName HTMLTableElement.createTFoot */
-  Element createTFoot();
-
-  /** @domName HTMLTableElement.createTHead */
-  Element createTHead();
-
-  /** @domName HTMLTableElement.deleteCaption */
-  void deleteCaption();
-
-  /** @domName HTMLTableElement.deleteRow */
-  void deleteRow(int index);
-
-  /** @domName HTMLTableElement.deleteTFoot */
-  void deleteTFoot();
-
-  /** @domName HTMLTableElement.deleteTHead */
-  void deleteTHead();
-
-  /** @domName HTMLTableElement.insertRow */
-  Element insertRow(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TableElementImpl extends _ElementImpl_Merged implements TableElement {
-
   String get align native "HTMLTableElement_align_Getter";
 
+
+  /** @domName HTMLTableElement.align */
   void set align(String value) native "HTMLTableElement_align_Setter";
 
+
+  /** @domName HTMLTableElement.bgColor */
   String get bgColor native "HTMLTableElement_bgColor_Getter";
 
+
+  /** @domName HTMLTableElement.bgColor */
   void set bgColor(String value) native "HTMLTableElement_bgColor_Setter";
 
+
+  /** @domName HTMLTableElement.border */
   String get border native "HTMLTableElement_border_Getter";
 
+
+  /** @domName HTMLTableElement.border */
   void set border(String value) native "HTMLTableElement_border_Setter";
 
+
+  /** @domName HTMLTableElement.caption */
   TableCaptionElement get caption native "HTMLTableElement_caption_Getter";
 
+
+  /** @domName HTMLTableElement.caption */
   void set caption(TableCaptionElement value) native "HTMLTableElement_caption_Setter";
 
+
+  /** @domName HTMLTableElement.cellPadding */
   String get cellPadding native "HTMLTableElement_cellPadding_Getter";
 
+
+  /** @domName HTMLTableElement.cellPadding */
   void set cellPadding(String value) native "HTMLTableElement_cellPadding_Setter";
 
+
+  /** @domName HTMLTableElement.cellSpacing */
   String get cellSpacing native "HTMLTableElement_cellSpacing_Getter";
 
+
+  /** @domName HTMLTableElement.cellSpacing */
   void set cellSpacing(String value) native "HTMLTableElement_cellSpacing_Setter";
 
+
+  /** @domName HTMLTableElement.frame */
   String get frame native "HTMLTableElement_frame_Getter";
 
+
+  /** @domName HTMLTableElement.frame */
   void set frame(String value) native "HTMLTableElement_frame_Setter";
 
+
+  /** @domName HTMLTableElement.rows */
   HTMLCollection get rows native "HTMLTableElement_rows_Getter";
 
+
+  /** @domName HTMLTableElement.rules */
   String get rules native "HTMLTableElement_rules_Getter";
 
+
+  /** @domName HTMLTableElement.rules */
   void set rules(String value) native "HTMLTableElement_rules_Setter";
 
+
+  /** @domName HTMLTableElement.summary */
   String get summary native "HTMLTableElement_summary_Getter";
 
+
+  /** @domName HTMLTableElement.summary */
   void set summary(String value) native "HTMLTableElement_summary_Setter";
 
+
+  /** @domName HTMLTableElement.tBodies */
   HTMLCollection get tBodies native "HTMLTableElement_tBodies_Getter";
 
+
+  /** @domName HTMLTableElement.tFoot */
   TableSectionElement get tFoot native "HTMLTableElement_tFoot_Getter";
 
+
+  /** @domName HTMLTableElement.tFoot */
   void set tFoot(TableSectionElement value) native "HTMLTableElement_tFoot_Setter";
 
+
+  /** @domName HTMLTableElement.tHead */
   TableSectionElement get tHead native "HTMLTableElement_tHead_Getter";
 
+
+  /** @domName HTMLTableElement.tHead */
   void set tHead(TableSectionElement value) native "HTMLTableElement_tHead_Setter";
 
+
+  /** @domName HTMLTableElement.width */
   String get width native "HTMLTableElement_width_Getter";
 
+
+  /** @domName HTMLTableElement.width */
   void set width(String value) native "HTMLTableElement_width_Setter";
 
+
+  /** @domName HTMLTableElement.createCaption */
   Element createCaption() native "HTMLTableElement_createCaption_Callback";
 
+
+  /** @domName HTMLTableElement.createTBody */
   Element createTBody() native "HTMLTableElement_createTBody_Callback";
 
+
+  /** @domName HTMLTableElement.createTFoot */
   Element createTFoot() native "HTMLTableElement_createTFoot_Callback";
 
+
+  /** @domName HTMLTableElement.createTHead */
   Element createTHead() native "HTMLTableElement_createTHead_Callback";
 
+
+  /** @domName HTMLTableElement.deleteCaption */
   void deleteCaption() native "HTMLTableElement_deleteCaption_Callback";
 
+
+  /** @domName HTMLTableElement.deleteRow */
   void deleteRow(int index) native "HTMLTableElement_deleteRow_Callback";
 
+
+  /** @domName HTMLTableElement.deleteTFoot */
   void deleteTFoot() native "HTMLTableElement_deleteTFoot_Callback";
 
+
+  /** @domName HTMLTableElement.deleteTHead */
   void deleteTHead() native "HTMLTableElement_deleteTHead_Callback";
 
+
+  /** @domName HTMLTableElement.insertRow */
   Element insertRow(int index) native "HTMLTableElement_insertRow_Callback";
 
 }
@@ -36922,76 +29767,69 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTableRowElement
-abstract class TableRowElement implements Element {
+class TableRowElement extends _Element_Merged {
 
   factory TableRowElement() => _Elements.createTableRowElement();
+  TableRowElement.internal(): super.internal();
+
 
   /** @domName HTMLTableRowElement.align */
-  String align;
-
-  /** @domName HTMLTableRowElement.bgColor */
-  String bgColor;
-
-  /** @domName HTMLTableRowElement.cells */
-  HTMLCollection get cells;
-
-  /** @domName HTMLTableRowElement.ch */
-  String ch;
-
-  /** @domName HTMLTableRowElement.chOff */
-  String chOff;
-
-  /** @domName HTMLTableRowElement.rowIndex */
-  int get rowIndex;
-
-  /** @domName HTMLTableRowElement.sectionRowIndex */
-  int get sectionRowIndex;
-
-  /** @domName HTMLTableRowElement.vAlign */
-  String vAlign;
-
-  /** @domName HTMLTableRowElement.deleteCell */
-  void deleteCell(int index);
-
-  /** @domName HTMLTableRowElement.insertCell */
-  Element insertCell(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TableRowElementImpl extends _ElementImpl_Merged implements TableRowElement {
-
   String get align native "HTMLTableRowElement_align_Getter";
 
+
+  /** @domName HTMLTableRowElement.align */
   void set align(String value) native "HTMLTableRowElement_align_Setter";
 
+
+  /** @domName HTMLTableRowElement.bgColor */
   String get bgColor native "HTMLTableRowElement_bgColor_Getter";
 
+
+  /** @domName HTMLTableRowElement.bgColor */
   void set bgColor(String value) native "HTMLTableRowElement_bgColor_Setter";
 
+
+  /** @domName HTMLTableRowElement.cells */
   HTMLCollection get cells native "HTMLTableRowElement_cells_Getter";
 
+
+  /** @domName HTMLTableRowElement.ch */
   String get ch native "HTMLTableRowElement_ch_Getter";
 
+
+  /** @domName HTMLTableRowElement.ch */
   void set ch(String value) native "HTMLTableRowElement_ch_Setter";
 
+
+  /** @domName HTMLTableRowElement.chOff */
   String get chOff native "HTMLTableRowElement_chOff_Getter";
 
+
+  /** @domName HTMLTableRowElement.chOff */
   void set chOff(String value) native "HTMLTableRowElement_chOff_Setter";
 
+
+  /** @domName HTMLTableRowElement.rowIndex */
   int get rowIndex native "HTMLTableRowElement_rowIndex_Getter";
 
+
+  /** @domName HTMLTableRowElement.sectionRowIndex */
   int get sectionRowIndex native "HTMLTableRowElement_sectionRowIndex_Getter";
 
+
+  /** @domName HTMLTableRowElement.vAlign */
   String get vAlign native "HTMLTableRowElement_vAlign_Getter";
 
+
+  /** @domName HTMLTableRowElement.vAlign */
   void set vAlign(String value) native "HTMLTableRowElement_vAlign_Setter";
 
+
+  /** @domName HTMLTableRowElement.deleteCell */
   void deleteCell(int index) native "HTMLTableRowElement_deleteCell_Callback";
 
+
+  /** @domName HTMLTableRowElement.insertCell */
   Element insertCell(int index) native "HTMLTableRowElement_insertCell_Callback";
 
 }
@@ -37002,28 +29840,53 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTableSectionElement
-abstract class TableSectionElement implements Element {
+class TableSectionElement extends _Element_Merged {
+  TableSectionElement.internal(): super.internal();
+
 
   /** @domName HTMLTableSectionElement.align */
-  String align;
+  String get align native "HTMLTableSectionElement_align_Getter";
+
+
+  /** @domName HTMLTableSectionElement.align */
+  void set align(String value) native "HTMLTableSectionElement_align_Setter";
+
 
   /** @domName HTMLTableSectionElement.ch */
-  String ch;
+  String get ch native "HTMLTableSectionElement_ch_Getter";
+
+
+  /** @domName HTMLTableSectionElement.ch */
+  void set ch(String value) native "HTMLTableSectionElement_ch_Setter";
+
 
   /** @domName HTMLTableSectionElement.chOff */
-  String chOff;
+  String get chOff native "HTMLTableSectionElement_chOff_Getter";
+
+
+  /** @domName HTMLTableSectionElement.chOff */
+  void set chOff(String value) native "HTMLTableSectionElement_chOff_Setter";
+
 
   /** @domName HTMLTableSectionElement.rows */
-  HTMLCollection get rows;
+  HTMLCollection get rows native "HTMLTableSectionElement_rows_Getter";
+
 
   /** @domName HTMLTableSectionElement.vAlign */
-  String vAlign;
+  String get vAlign native "HTMLTableSectionElement_vAlign_Getter";
+
+
+  /** @domName HTMLTableSectionElement.vAlign */
+  void set vAlign(String value) native "HTMLTableSectionElement_vAlign_Setter";
+
 
   /** @domName HTMLTableSectionElement.deleteRow */
-  void deleteRow(int index);
+  void deleteRow(int index) native "HTMLTableSectionElement_deleteRow_Callback";
+
 
   /** @domName HTMLTableSectionElement.insertRow */
-  Element insertRow(int index);
+  Element insertRow(int index) native "HTMLTableSectionElement_insertRow_Callback";
+
 }
 // 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
@@ -37031,51 +29894,22 @@
 
 // WARNING: Do not edit - generated code.
 
-class _TableSectionElementImpl extends _ElementImpl_Merged implements TableSectionElement {
-
-  String get align native "HTMLTableSectionElement_align_Getter";
-
-  void set align(String value) native "HTMLTableSectionElement_align_Setter";
-
-  String get ch native "HTMLTableSectionElement_ch_Getter";
-
-  void set ch(String value) native "HTMLTableSectionElement_ch_Setter";
-
-  String get chOff native "HTMLTableSectionElement_chOff_Getter";
-
-  void set chOff(String value) native "HTMLTableSectionElement_chOff_Setter";
-
-  HTMLCollection get rows native "HTMLTableSectionElement_rows_Getter";
-
-  String get vAlign native "HTMLTableSectionElement_vAlign_Getter";
-
-  void set vAlign(String value) native "HTMLTableSectionElement_vAlign_Setter";
-
-  void deleteRow(int index) native "HTMLTableSectionElement_deleteRow_Callback";
-
-  Element insertRow(int index) native "HTMLTableSectionElement_insertRow_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName Text
-abstract class Text implements CharacterData {
-
+class Text extends CharacterData {
   factory Text(String data) => _TextFactoryProvider.createText(data);
+  Text.internal(): super.internal();
+
 
   /** @domName Text.wholeText */
-  String get wholeText;
+  String get wholeText native "Text_wholeText_Getter";
+
 
   /** @domName Text.replaceWholeText */
-  Text replaceWholeText(String content);
+  Text replaceWholeText(String content) native "Text_replaceWholeText_Callback";
+
 
   /** @domName Text.splitText */
-  Text splitText(int offset);
+  Text splitText(int offset) native "Text_splitText_Callback";
+
 }
 // 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
@@ -37084,184 +29918,177 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTextAreaElement
-abstract class TextAreaElement implements Element {
+class TextAreaElement extends _Element_Merged {
 
   factory TextAreaElement() => _Elements.createTextAreaElement();
+  TextAreaElement.internal(): super.internal();
+
 
   /** @domName HTMLTextAreaElement.autofocus */
-  bool autofocus;
-
-  /** @domName HTMLTextAreaElement.cols */
-  int cols;
-
-  /** @domName HTMLTextAreaElement.defaultValue */
-  String defaultValue;
-
-  /** @domName HTMLTextAreaElement.dirName */
-  String dirName;
-
-  /** @domName HTMLTextAreaElement.disabled */
-  bool disabled;
-
-  /** @domName HTMLTextAreaElement.form */
-  FormElement get form;
-
-  /** @domName HTMLTextAreaElement.labels */
-  List<Node> get labels;
-
-  /** @domName HTMLTextAreaElement.maxLength */
-  int maxLength;
-
-  /** @domName HTMLTextAreaElement.name */
-  String name;
-
-  /** @domName HTMLTextAreaElement.placeholder */
-  String placeholder;
-
-  /** @domName HTMLTextAreaElement.readOnly */
-  bool readOnly;
-
-  /** @domName HTMLTextAreaElement.required */
-  bool required;
-
-  /** @domName HTMLTextAreaElement.rows */
-  int rows;
-
-  /** @domName HTMLTextAreaElement.selectionDirection */
-  String selectionDirection;
-
-  /** @domName HTMLTextAreaElement.selectionEnd */
-  int selectionEnd;
-
-  /** @domName HTMLTextAreaElement.selectionStart */
-  int selectionStart;
-
-  /** @domName HTMLTextAreaElement.textLength */
-  int get textLength;
-
-  /** @domName HTMLTextAreaElement.type */
-  String get type;
-
-  /** @domName HTMLTextAreaElement.validationMessage */
-  String get validationMessage;
-
-  /** @domName HTMLTextAreaElement.validity */
-  ValidityState get validity;
-
-  /** @domName HTMLTextAreaElement.value */
-  String value;
-
-  /** @domName HTMLTextAreaElement.willValidate */
-  bool get willValidate;
-
-  /** @domName HTMLTextAreaElement.wrap */
-  String wrap;
-
-  /** @domName HTMLTextAreaElement.checkValidity */
-  bool checkValidity();
-
-  /** @domName HTMLTextAreaElement.select */
-  void select();
-
-  /** @domName HTMLTextAreaElement.setCustomValidity */
-  void setCustomValidity(String error);
-
-  /** @domName HTMLTextAreaElement.setRangeText */
-  void setRangeText(String replacement, [int start, int end, String selectionMode]);
-
-  /** @domName HTMLTextAreaElement.setSelectionRange */
-  void setSelectionRange(int start, int end, [String direction]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextAreaElementImpl extends _ElementImpl_Merged implements TextAreaElement {
-
   bool get autofocus native "HTMLTextAreaElement_autofocus_Getter";
 
+
+  /** @domName HTMLTextAreaElement.autofocus */
   void set autofocus(bool value) native "HTMLTextAreaElement_autofocus_Setter";
 
+
+  /** @domName HTMLTextAreaElement.cols */
   int get cols native "HTMLTextAreaElement_cols_Getter";
 
+
+  /** @domName HTMLTextAreaElement.cols */
   void set cols(int value) native "HTMLTextAreaElement_cols_Setter";
 
+
+  /** @domName HTMLTextAreaElement.defaultValue */
   String get defaultValue native "HTMLTextAreaElement_defaultValue_Getter";
 
+
+  /** @domName HTMLTextAreaElement.defaultValue */
   void set defaultValue(String value) native "HTMLTextAreaElement_defaultValue_Setter";
 
+
+  /** @domName HTMLTextAreaElement.dirName */
   String get dirName native "HTMLTextAreaElement_dirName_Getter";
 
+
+  /** @domName HTMLTextAreaElement.dirName */
   void set dirName(String value) native "HTMLTextAreaElement_dirName_Setter";
 
+
+  /** @domName HTMLTextAreaElement.disabled */
   bool get disabled native "HTMLTextAreaElement_disabled_Getter";
 
+
+  /** @domName HTMLTextAreaElement.disabled */
   void set disabled(bool value) native "HTMLTextAreaElement_disabled_Setter";
 
+
+  /** @domName HTMLTextAreaElement.form */
   FormElement get form native "HTMLTextAreaElement_form_Getter";
 
+
+  /** @domName HTMLTextAreaElement.labels */
   List<Node> get labels native "HTMLTextAreaElement_labels_Getter";
 
+
+  /** @domName HTMLTextAreaElement.maxLength */
   int get maxLength native "HTMLTextAreaElement_maxLength_Getter";
 
+
+  /** @domName HTMLTextAreaElement.maxLength */
   void set maxLength(int value) native "HTMLTextAreaElement_maxLength_Setter";
 
+
+  /** @domName HTMLTextAreaElement.name */
   String get name native "HTMLTextAreaElement_name_Getter";
 
+
+  /** @domName HTMLTextAreaElement.name */
   void set name(String value) native "HTMLTextAreaElement_name_Setter";
 
+
+  /** @domName HTMLTextAreaElement.placeholder */
   String get placeholder native "HTMLTextAreaElement_placeholder_Getter";
 
+
+  /** @domName HTMLTextAreaElement.placeholder */
   void set placeholder(String value) native "HTMLTextAreaElement_placeholder_Setter";
 
+
+  /** @domName HTMLTextAreaElement.readOnly */
   bool get readOnly native "HTMLTextAreaElement_readOnly_Getter";
 
+
+  /** @domName HTMLTextAreaElement.readOnly */
   void set readOnly(bool value) native "HTMLTextAreaElement_readOnly_Setter";
 
+
+  /** @domName HTMLTextAreaElement.required */
   bool get required native "HTMLTextAreaElement_required_Getter";
 
+
+  /** @domName HTMLTextAreaElement.required */
   void set required(bool value) native "HTMLTextAreaElement_required_Setter";
 
+
+  /** @domName HTMLTextAreaElement.rows */
   int get rows native "HTMLTextAreaElement_rows_Getter";
 
+
+  /** @domName HTMLTextAreaElement.rows */
   void set rows(int value) native "HTMLTextAreaElement_rows_Setter";
 
+
+  /** @domName HTMLTextAreaElement.selectionDirection */
   String get selectionDirection native "HTMLTextAreaElement_selectionDirection_Getter";
 
+
+  /** @domName HTMLTextAreaElement.selectionDirection */
   void set selectionDirection(String value) native "HTMLTextAreaElement_selectionDirection_Setter";
 
+
+  /** @domName HTMLTextAreaElement.selectionEnd */
   int get selectionEnd native "HTMLTextAreaElement_selectionEnd_Getter";
 
+
+  /** @domName HTMLTextAreaElement.selectionEnd */
   void set selectionEnd(int value) native "HTMLTextAreaElement_selectionEnd_Setter";
 
+
+  /** @domName HTMLTextAreaElement.selectionStart */
   int get selectionStart native "HTMLTextAreaElement_selectionStart_Getter";
 
+
+  /** @domName HTMLTextAreaElement.selectionStart */
   void set selectionStart(int value) native "HTMLTextAreaElement_selectionStart_Setter";
 
+
+  /** @domName HTMLTextAreaElement.textLength */
   int get textLength native "HTMLTextAreaElement_textLength_Getter";
 
+
+  /** @domName HTMLTextAreaElement.type */
   String get type native "HTMLTextAreaElement_type_Getter";
 
+
+  /** @domName HTMLTextAreaElement.validationMessage */
   String get validationMessage native "HTMLTextAreaElement_validationMessage_Getter";
 
+
+  /** @domName HTMLTextAreaElement.validity */
   ValidityState get validity native "HTMLTextAreaElement_validity_Getter";
 
+
+  /** @domName HTMLTextAreaElement.value */
   String get value native "HTMLTextAreaElement_value_Getter";
 
+
+  /** @domName HTMLTextAreaElement.value */
   void set value(String value) native "HTMLTextAreaElement_value_Setter";
 
+
+  /** @domName HTMLTextAreaElement.willValidate */
   bool get willValidate native "HTMLTextAreaElement_willValidate_Getter";
 
+
+  /** @domName HTMLTextAreaElement.wrap */
   String get wrap native "HTMLTextAreaElement_wrap_Getter";
 
+
+  /** @domName HTMLTextAreaElement.wrap */
   void set wrap(String value) native "HTMLTextAreaElement_wrap_Setter";
 
+
+  /** @domName HTMLTextAreaElement.checkValidity */
   bool checkValidity() native "HTMLTextAreaElement_checkValidity_Callback";
 
+
+  /** @domName HTMLTextAreaElement.select */
   void select() native "HTMLTextAreaElement_select_Callback";
 
+
+  /** @domName HTMLTextAreaElement.setCustomValidity */
   void setCustomValidity(String error) native "HTMLTextAreaElement_setCustomValidity_Callback";
 
   void setRangeText(/*DOMString*/ replacement, [/*unsigned long*/ start, /*unsigned long*/ end, /*DOMString*/ selectionMode]) {
@@ -37276,8 +30103,12 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName HTMLTextAreaElement.setRangeText_1 */
   void _setRangeText_1(replacement) native "HTMLTextAreaElement_setRangeText_1_Callback";
 
+
+  /** @domName HTMLTextAreaElement.setRangeText_2 */
   void _setRangeText_2(replacement, start, end, selectionMode) native "HTMLTextAreaElement_setRangeText_2_Callback";
 
   void setSelectionRange(/*long*/ start, /*long*/ end, [/*DOMString*/ direction]) {
@@ -37288,8 +30119,12 @@
     _setSelectionRange_2(start, end);
   }
 
+
+  /** @domName HTMLTextAreaElement.setSelectionRange_1 */
   void _setSelectionRange_1(start, end, direction) native "HTMLTextAreaElement_setSelectionRange_1_Callback";
 
+
+  /** @domName HTMLTextAreaElement.setSelectionRange_2 */
   void _setSelectionRange_2(start, end) native "HTMLTextAreaElement_setSelectionRange_2_Callback";
 
 }
@@ -37300,24 +30135,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextEvent
-abstract class TextEvent implements UIEvent {
+class TextEvent extends UIEvent {
+  TextEvent.internal(): super.internal();
+
 
   /** @domName TextEvent.data */
-  String get data;
-
-  /** @domName TextEvent.initTextEvent */
-  void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextEventImpl extends _UIEventImpl implements TextEvent {
-
   String get data native "TextEvent_data_Getter";
 
+
+  /** @domName TextEvent.initTextEvent */
   void initTextEvent(String typeArg, bool canBubbleArg, bool cancelableArg, LocalWindow viewArg, String dataArg) native "TextEvent_initTextEvent_Callback";
 
 }
@@ -37327,35 +30153,12 @@
 
 // WARNING: Do not edit - generated code.
 
-class _TextImpl extends _CharacterDataImpl implements Text {
-
-  String get wholeText native "Text_wholeText_Getter";
-
-  Text replaceWholeText(String content) native "Text_replaceWholeText_Callback";
-
-  Text splitText(int offset) native "Text_splitText_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName TextMetrics
-abstract class TextMetrics {
+class TextMetrics extends NativeFieldWrapperClass1 {
+  TextMetrics.internal();
+
 
   /** @domName TextMetrics.width */
-  num get width;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextMetricsImpl extends NativeFieldWrapperClass1 implements TextMetrics {
-
   num get width native "TextMetrics_width_Getter";
 
 }
@@ -37366,50 +30169,69 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextTrack
-abstract class TextTrack implements EventTarget {
+class TextTrack extends EventTarget {
+  TextTrack.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  TextTrackEvents get on;
+  TextTrackEvents get on =>
+    new TextTrackEvents(this);
+
 
   /** @domName TextTrack.activeCues */
-  TextTrackCueList get activeCues;
+  TextTrackCueList get activeCues native "TextTrack_activeCues_Getter";
+
 
   /** @domName TextTrack.cues */
-  TextTrackCueList get cues;
+  TextTrackCueList get cues native "TextTrack_cues_Getter";
+
 
   /** @domName TextTrack.kind */
-  String get kind;
+  String get kind native "TextTrack_kind_Getter";
+
 
   /** @domName TextTrack.label */
-  String get label;
+  String get label native "TextTrack_label_Getter";
+
 
   /** @domName TextTrack.language */
-  String get language;
+  String get language native "TextTrack_language_Getter";
+
 
   /** @domName TextTrack.mode */
-  String mode;
+  String get mode native "TextTrack_mode_Getter";
+
+
+  /** @domName TextTrack.mode */
+  void set mode(String value) native "TextTrack_mode_Setter";
+
 
   /** @domName TextTrack.addCue */
-  void addCue(TextTrackCue cue);
+  void addCue(TextTrackCue cue) native "TextTrack_addCue_Callback";
+
 
   /** @domName TextTrack.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_addEventListener_Callback";
+
 
   /** @domName TextTrack.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
+  bool $dom_dispatchEvent(Event evt) native "TextTrack_dispatchEvent_Callback";
+
 
   /** @domName TextTrack.removeCue */
-  void removeCue(TextTrackCue cue);
+  void removeCue(TextTrackCue cue) native "TextTrack_removeCue_Callback";
+
 
   /** @domName TextTrack.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_removeEventListener_Callback";
+
 }
 
-abstract class TextTrackEvents implements Events {
+class TextTrackEvents extends Events {
+  TextTrackEvents(EventTarget _ptr) : super(_ptr);
 
-  EventListenerList get cueChange;
+  EventListenerList get cueChange => this['cuechange'];
 }
 // 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
@@ -37418,139 +30240,129 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextTrackCue
-abstract class TextTrackCue implements EventTarget {
+class TextTrackCue extends EventTarget {
 
   factory TextTrackCue(num startTime, num endTime, String text) => _TextTrackCueFactoryProvider.createTextTrackCue(startTime, endTime, text);
+  TextTrackCue.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  TextTrackCueEvents get on;
+  TextTrackCueEvents get on =>
+    new TextTrackCueEvents(this);
+
 
   /** @domName TextTrackCue.align */
-  String align;
-
-  /** @domName TextTrackCue.endTime */
-  num endTime;
-
-  /** @domName TextTrackCue.id */
-  String id;
-
-  /** @domName TextTrackCue.line */
-  int line;
-
-  /** @domName TextTrackCue.pauseOnExit */
-  bool pauseOnExit;
-
-  /** @domName TextTrackCue.position */
-  int position;
-
-  /** @domName TextTrackCue.size */
-  int size;
-
-  /** @domName TextTrackCue.snapToLines */
-  bool snapToLines;
-
-  /** @domName TextTrackCue.startTime */
-  num startTime;
-
-  /** @domName TextTrackCue.text */
-  String text;
-
-  /** @domName TextTrackCue.track */
-  TextTrack get track;
-
-  /** @domName TextTrackCue.vertical */
-  String vertical;
-
-  /** @domName TextTrackCue.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName TextTrackCue.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName TextTrackCue.getCueAsHTML */
-  DocumentFragment getCueAsHTML();
-
-  /** @domName TextTrackCue.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class TextTrackCueEvents implements Events {
-
-  EventListenerList get enter;
-
-  EventListenerList get exit;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextTrackCueImpl extends _EventTargetImpl implements TextTrackCue {
-
-  _TextTrackCueEventsImpl get on =>
-    new _TextTrackCueEventsImpl(this);
-
   String get align native "TextTrackCue_align_Getter";
 
+
+  /** @domName TextTrackCue.align */
   void set align(String value) native "TextTrackCue_align_Setter";
 
+
+  /** @domName TextTrackCue.endTime */
   num get endTime native "TextTrackCue_endTime_Getter";
 
+
+  /** @domName TextTrackCue.endTime */
   void set endTime(num value) native "TextTrackCue_endTime_Setter";
 
+
+  /** @domName TextTrackCue.id */
   String get id native "TextTrackCue_id_Getter";
 
+
+  /** @domName TextTrackCue.id */
   void set id(String value) native "TextTrackCue_id_Setter";
 
+
+  /** @domName TextTrackCue.line */
   int get line native "TextTrackCue_line_Getter";
 
+
+  /** @domName TextTrackCue.line */
   void set line(int value) native "TextTrackCue_line_Setter";
 
+
+  /** @domName TextTrackCue.pauseOnExit */
   bool get pauseOnExit native "TextTrackCue_pauseOnExit_Getter";
 
+
+  /** @domName TextTrackCue.pauseOnExit */
   void set pauseOnExit(bool value) native "TextTrackCue_pauseOnExit_Setter";
 
+
+  /** @domName TextTrackCue.position */
   int get position native "TextTrackCue_position_Getter";
 
+
+  /** @domName TextTrackCue.position */
   void set position(int value) native "TextTrackCue_position_Setter";
 
+
+  /** @domName TextTrackCue.size */
   int get size native "TextTrackCue_size_Getter";
 
+
+  /** @domName TextTrackCue.size */
   void set size(int value) native "TextTrackCue_size_Setter";
 
+
+  /** @domName TextTrackCue.snapToLines */
   bool get snapToLines native "TextTrackCue_snapToLines_Getter";
 
+
+  /** @domName TextTrackCue.snapToLines */
   void set snapToLines(bool value) native "TextTrackCue_snapToLines_Setter";
 
+
+  /** @domName TextTrackCue.startTime */
   num get startTime native "TextTrackCue_startTime_Getter";
 
+
+  /** @domName TextTrackCue.startTime */
   void set startTime(num value) native "TextTrackCue_startTime_Setter";
 
+
+  /** @domName TextTrackCue.text */
   String get text native "TextTrackCue_text_Getter";
 
+
+  /** @domName TextTrackCue.text */
   void set text(String value) native "TextTrackCue_text_Setter";
 
+
+  /** @domName TextTrackCue.track */
   TextTrack get track native "TextTrackCue_track_Getter";
 
+
+  /** @domName TextTrackCue.vertical */
   String get vertical native "TextTrackCue_vertical_Getter";
 
+
+  /** @domName TextTrackCue.vertical */
   void set vertical(String value) native "TextTrackCue_vertical_Setter";
 
+
+  /** @domName TextTrackCue.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackCue_addEventListener_Callback";
 
+
+  /** @domName TextTrackCue.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "TextTrackCue_dispatchEvent_Callback";
 
+
+  /** @domName TextTrackCue.getCueAsHTML */
   DocumentFragment getCueAsHTML() native "TextTrackCue_getCueAsHTML_Callback";
 
+
+  /** @domName TextTrackCue.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackCue_removeEventListener_Callback";
 
 }
 
-class _TextTrackCueEventsImpl extends _EventsImpl implements TextTrackCueEvents {
-  _TextTrackCueEventsImpl(_ptr) : super(_ptr);
+class TextTrackCueEvents extends Events {
+  TextTrackCueEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get enter => this['enter'];
 
@@ -37563,25 +30375,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TextTrackCueList
-abstract class TextTrackCueList implements List<TextTrackCue> {
+class TextTrackCueList extends NativeFieldWrapperClass1 implements List<TextTrackCue> {
+  TextTrackCueList.internal();
+
 
   /** @domName TextTrackCueList.length */
-  int get length;
-
-  /** @domName TextTrackCueList.getCueById */
-  TextTrackCue getCueById(String id);
-
-  /** @domName TextTrackCueList.item */
-  TextTrackCue item(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextTrackCueListImpl extends NativeFieldWrapperClass1 implements TextTrackCueList {
-
   int get length native "TextTrackCueList_length_Getter";
 
   TextTrackCue operator[](int index) native "TextTrackCueList_item_Callback";
@@ -37667,8 +30465,12 @@
 
   // -- end List<TextTrackCue> mixins.
 
+
+  /** @domName TextTrackCueList.getCueById */
   TextTrackCue getCueById(String id) native "TextTrackCueList_getCueById_Callback";
 
+
+  /** @domName TextTrackCueList.item */
   TextTrackCue item(int index) native "TextTrackCueList_item_Callback";
 
 }
@@ -37678,87 +30480,18 @@
 
 // WARNING: Do not edit - generated code.
 
-class _TextTrackImpl extends _EventTargetImpl implements TextTrack {
-
-  _TextTrackEventsImpl get on =>
-    new _TextTrackEventsImpl(this);
-
-  TextTrackCueList get activeCues native "TextTrack_activeCues_Getter";
-
-  TextTrackCueList get cues native "TextTrack_cues_Getter";
-
-  String get kind native "TextTrack_kind_Getter";
-
-  String get label native "TextTrack_label_Getter";
-
-  String get language native "TextTrack_language_Getter";
-
-  String get mode native "TextTrack_mode_Getter";
-
-  void set mode(String value) native "TextTrack_mode_Setter";
-
-  void addCue(TextTrackCue cue) native "TextTrack_addCue_Callback";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_addEventListener_Callback";
-
-  bool $dom_dispatchEvent(Event evt) native "TextTrack_dispatchEvent_Callback";
-
-  void removeCue(TextTrackCue cue) native "TextTrack_removeCue_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrack_removeEventListener_Callback";
-
-}
-
-class _TextTrackEventsImpl extends _EventsImpl implements TextTrackEvents {
-  _TextTrackEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get cueChange => this['cuechange'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
 /// @domName TextTrackList
-abstract class TextTrackList implements EventTarget, List<TextTrack> {
+class TextTrackList extends EventTarget implements List<TextTrack> {
+  TextTrackList.internal(): super.internal();
 
   /**
    * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
    */
-  TextTrackListEvents get on;
+  TextTrackListEvents get on =>
+    new TextTrackListEvents(this);
+
 
   /** @domName TextTrackList.length */
-  int get length;
-
-  /** @domName TextTrackList.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName TextTrackList.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName TextTrackList.item */
-  TextTrack item(int index);
-
-  /** @domName TextTrackList.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-
-abstract class TextTrackListEvents implements Events {
-
-  EventListenerList get addTrack;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TextTrackListImpl extends _EventTargetImpl implements TextTrackList {
-
-  _TextTrackListEventsImpl get on =>
-    new _TextTrackListEventsImpl(this);
-
   int get length native "TextTrackList_length_Getter";
 
   TextTrack operator[](int index) native "TextTrackList_item_Callback";
@@ -37844,18 +30577,26 @@
 
   // -- end List<TextTrack> mixins.
 
+
+  /** @domName TextTrackList.addEventListener */
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackList_addEventListener_Callback";
 
+
+  /** @domName TextTrackList.dispatchEvent */
   bool $dom_dispatchEvent(Event evt) native "TextTrackList_dispatchEvent_Callback";
 
+
+  /** @domName TextTrackList.item */
   TextTrack item(int index) native "TextTrackList_item_Callback";
 
+
+  /** @domName TextTrackList.removeEventListener */
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "TextTrackList_removeEventListener_Callback";
 
 }
 
-class _TextTrackListEventsImpl extends _EventsImpl implements TextTrackListEvents {
-  _TextTrackListEventsImpl(_ptr) : super(_ptr);
+class TextTrackListEvents extends Events {
+  TextTrackListEvents(EventTarget _ptr) : super(_ptr);
 
   EventListenerList get addTrack => this['addtrack'];
 }
@@ -37866,29 +30607,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TimeRanges
-abstract class TimeRanges {
+class TimeRanges extends NativeFieldWrapperClass1 {
+  TimeRanges.internal();
+
 
   /** @domName TimeRanges.length */
-  int get length;
-
-  /** @domName TimeRanges.end */
-  num end(int index);
-
-  /** @domName TimeRanges.start */
-  num start(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TimeRangesImpl extends NativeFieldWrapperClass1 implements TimeRanges {
-
   int get length native "TimeRanges_length_Getter";
 
+
+  /** @domName TimeRanges.end */
   num end(int index) native "TimeRanges_end_Callback";
 
+
+  /** @domName TimeRanges.start */
   num start(int index) native "TimeRanges_start_Callback";
 
 }
@@ -37907,17 +30638,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTitleElement
-abstract class TitleElement implements Element {
+class TitleElement extends _Element_Merged {
 
   factory TitleElement() => _Elements.createTitleElement();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TitleElementImpl extends _ElementImpl_Merged implements TitleElement {
+  TitleElement.internal(): super.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -37927,132 +30651,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Touch
-abstract class Touch {
+class Touch extends NativeFieldWrapperClass1 {
+  Touch.internal();
+
 
   /** @domName Touch.clientX */
-  int get clientX;
-
-  /** @domName Touch.clientY */
-  int get clientY;
-
-  /** @domName Touch.identifier */
-  int get identifier;
-
-  /** @domName Touch.pageX */
-  int get pageX;
-
-  /** @domName Touch.pageY */
-  int get pageY;
-
-  /** @domName Touch.screenX */
-  int get screenX;
-
-  /** @domName Touch.screenY */
-  int get screenY;
-
-  /** @domName Touch.target */
-  EventTarget get target;
-
-  /** @domName Touch.webkitForce */
-  num get webkitForce;
-
-  /** @domName Touch.webkitRadiusX */
-  int get webkitRadiusX;
-
-  /** @domName Touch.webkitRadiusY */
-  int get webkitRadiusY;
-
-  /** @domName Touch.webkitRotationAngle */
-  num get webkitRotationAngle;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName TouchEvent
-abstract class TouchEvent implements UIEvent {
-
-  /** @domName TouchEvent.altKey */
-  bool get altKey;
-
-  /** @domName TouchEvent.changedTouches */
-  TouchList get changedTouches;
-
-  /** @domName TouchEvent.ctrlKey */
-  bool get ctrlKey;
-
-  /** @domName TouchEvent.metaKey */
-  bool get metaKey;
-
-  /** @domName TouchEvent.shiftKey */
-  bool get shiftKey;
-
-  /** @domName TouchEvent.targetTouches */
-  TouchList get targetTouches;
-
-  /** @domName TouchEvent.touches */
-  TouchList get touches;
-
-  /** @domName TouchEvent.initTouchEvent */
-  void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TouchEventImpl extends _UIEventImpl implements TouchEvent {
-
-  bool get altKey native "TouchEvent_altKey_Getter";
-
-  TouchList get changedTouches native "TouchEvent_changedTouches_Getter";
-
-  bool get ctrlKey native "TouchEvent_ctrlKey_Getter";
-
-  bool get metaKey native "TouchEvent_metaKey_Getter";
-
-  bool get shiftKey native "TouchEvent_shiftKey_Getter";
-
-  TouchList get targetTouches native "TouchEvent_targetTouches_Getter";
-
-  TouchList get touches native "TouchEvent_touches_Getter";
-
-  void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "TouchEvent_initTouchEvent_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TouchImpl extends NativeFieldWrapperClass1 implements Touch {
-
   int get clientX native "Touch_clientX_Getter";
 
+
+  /** @domName Touch.clientY */
   int get clientY native "Touch_clientY_Getter";
 
+
+  /** @domName Touch.identifier */
   int get identifier native "Touch_identifier_Getter";
 
+
+  /** @domName Touch.pageX */
   int get pageX native "Touch_pageX_Getter";
 
+
+  /** @domName Touch.pageY */
   int get pageY native "Touch_pageY_Getter";
 
+
+  /** @domName Touch.screenX */
   int get screenX native "Touch_screenX_Getter";
 
+
+  /** @domName Touch.screenY */
   int get screenY native "Touch_screenY_Getter";
 
+
+  /** @domName Touch.target */
   EventTarget get target native "Touch_target_Getter";
 
+
+  /** @domName Touch.webkitForce */
   num get webkitForce native "Touch_webkitForce_Getter";
 
+
+  /** @domName Touch.webkitRadiusX */
   int get webkitRadiusX native "Touch_webkitRadiusX_Getter";
 
+
+  /** @domName Touch.webkitRadiusY */
   int get webkitRadiusY native "Touch_webkitRadiusY_Getter";
 
+
+  /** @domName Touch.webkitRotationAngle */
   num get webkitRotationAngle native "Touch_webkitRotationAngle_Getter";
 
 }
@@ -38062,14 +30709,42 @@
 
 // WARNING: Do not edit - generated code.
 
-/// @domName TouchList
-abstract class TouchList implements List<Touch> {
+/// @domName TouchEvent
+class TouchEvent extends UIEvent {
+  TouchEvent.internal(): super.internal();
 
-  /** @domName TouchList.length */
-  int get length;
 
-  /** @domName TouchList.item */
-  Touch item(int index);
+  /** @domName TouchEvent.altKey */
+  bool get altKey native "TouchEvent_altKey_Getter";
+
+
+  /** @domName TouchEvent.changedTouches */
+  TouchList get changedTouches native "TouchEvent_changedTouches_Getter";
+
+
+  /** @domName TouchEvent.ctrlKey */
+  bool get ctrlKey native "TouchEvent_ctrlKey_Getter";
+
+
+  /** @domName TouchEvent.metaKey */
+  bool get metaKey native "TouchEvent_metaKey_Getter";
+
+
+  /** @domName TouchEvent.shiftKey */
+  bool get shiftKey native "TouchEvent_shiftKey_Getter";
+
+
+  /** @domName TouchEvent.targetTouches */
+  TouchList get targetTouches native "TouchEvent_targetTouches_Getter";
+
+
+  /** @domName TouchEvent.touches */
+  TouchList get touches native "TouchEvent_touches_Getter";
+
+
+  /** @domName TouchEvent.initTouchEvent */
+  void initTouchEvent(TouchList touches, TouchList targetTouches, TouchList changedTouches, String type, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "TouchEvent_initTouchEvent_Callback";
+
 }
 // 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
@@ -38077,8 +30752,12 @@
 
 // WARNING: Do not edit - generated code.
 
-class _TouchListImpl extends NativeFieldWrapperClass1 implements TouchList {
+/// @domName TouchList
+class TouchList extends NativeFieldWrapperClass1 implements List<Touch> {
+  TouchList.internal();
 
+
+  /** @domName TouchList.length */
   int get length native "TouchList_length_Getter";
 
   Touch operator[](int index) native "TouchList_item_Callback";
@@ -38164,6 +30843,8 @@
 
   // -- end List<Touch> mixins.
 
+
+  /** @domName TouchList.item */
   Touch item(int index) native "TouchList_item_Callback";
 
 }
@@ -38174,9 +30855,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLTrackElement
-abstract class TrackElement implements Element {
+class TrackElement extends _Element_Merged {
 
   factory TrackElement() => _Elements.createTrackElement();
+  TrackElement.internal(): super.internal();
 
   static const int ERROR = 3;
 
@@ -38186,57 +30868,52 @@
 
   static const int NONE = 0;
 
-  /** @domName HTMLTrackElement.defaultValue */
-  bool defaultValue;
 
-  /** @domName HTMLTrackElement.kind */
-  String kind;
-
-  /** @domName HTMLTrackElement.label */
-  String label;
-
-  /** @domName HTMLTrackElement.readyState */
-  int get readyState;
-
-  /** @domName HTMLTrackElement.src */
-  String src;
-
-  /** @domName HTMLTrackElement.srclang */
-  String srclang;
-
-  /** @domName HTMLTrackElement.track */
-  TextTrack get track;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TrackElementImpl extends _ElementImpl_Merged implements TrackElement {
-
+  /** @domName HTMLTrackElement.default */
   bool get defaultValue native "HTMLTrackElement_default_Getter";
 
+
+  /** @domName HTMLTrackElement.default */
   void set defaultValue(bool value) native "HTMLTrackElement_default_Setter";
 
+
+  /** @domName HTMLTrackElement.kind */
   String get kind native "HTMLTrackElement_kind_Getter";
 
+
+  /** @domName HTMLTrackElement.kind */
   void set kind(String value) native "HTMLTrackElement_kind_Setter";
 
+
+  /** @domName HTMLTrackElement.label */
   String get label native "HTMLTrackElement_label_Getter";
 
+
+  /** @domName HTMLTrackElement.label */
   void set label(String value) native "HTMLTrackElement_label_Setter";
 
+
+  /** @domName HTMLTrackElement.readyState */
   int get readyState native "HTMLTrackElement_readyState_Getter";
 
+
+  /** @domName HTMLTrackElement.src */
   String get src native "HTMLTrackElement_src_Getter";
 
+
+  /** @domName HTMLTrackElement.src */
   void set src(String value) native "HTMLTrackElement_src_Setter";
 
+
+  /** @domName HTMLTrackElement.srclang */
   String get srclang native "HTMLTrackElement_srclang_Getter";
 
+
+  /** @domName HTMLTrackElement.srclang */
   void set srclang(String value) native "HTMLTrackElement_srclang_Setter";
 
+
+  /** @domName HTMLTrackElement.track */
   TextTrack get track native "HTMLTrackElement_track_Getter";
 
 }
@@ -38247,19 +30924,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TrackEvent
-abstract class TrackEvent implements Event {
+class TrackEvent extends Event {
+  TrackEvent.internal(): super.internal();
+
 
   /** @domName TrackEvent.track */
-  Object get track;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TrackEventImpl extends _EventImpl implements TrackEvent {
-
   Object get track native "TrackEvent_track_Getter";
 
 }
@@ -38270,24 +30939,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebKitTransitionEvent
-abstract class TransitionEvent implements Event {
+class TransitionEvent extends Event {
+  TransitionEvent.internal(): super.internal();
+
 
   /** @domName WebKitTransitionEvent.elapsedTime */
-  num get elapsedTime;
-
-  /** @domName WebKitTransitionEvent.propertyName */
-  String get propertyName;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TransitionEventImpl extends _EventImpl implements TransitionEvent {
-
   num get elapsedTime native "WebKitTransitionEvent_elapsedTime_Getter";
 
+
+  /** @domName WebKitTransitionEvent.propertyName */
   String get propertyName native "WebKitTransitionEvent_propertyName_Getter";
 
 }
@@ -38298,76 +30958,59 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName TreeWalker
-abstract class TreeWalker {
+class TreeWalker extends NativeFieldWrapperClass1 {
+  TreeWalker.internal();
+
 
   /** @domName TreeWalker.currentNode */
-  Node currentNode;
-
-  /** @domName TreeWalker.expandEntityReferences */
-  bool get expandEntityReferences;
-
-  /** @domName TreeWalker.filter */
-  NodeFilter get filter;
-
-  /** @domName TreeWalker.root */
-  Node get root;
-
-  /** @domName TreeWalker.whatToShow */
-  int get whatToShow;
-
-  /** @domName TreeWalker.firstChild */
-  Node firstChild();
-
-  /** @domName TreeWalker.lastChild */
-  Node lastChild();
-
-  /** @domName TreeWalker.nextNode */
-  Node nextNode();
-
-  /** @domName TreeWalker.nextSibling */
-  Node nextSibling();
-
-  /** @domName TreeWalker.parentNode */
-  Node parentNode();
-
-  /** @domName TreeWalker.previousNode */
-  Node previousNode();
-
-  /** @domName TreeWalker.previousSibling */
-  Node previousSibling();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _TreeWalkerImpl extends NativeFieldWrapperClass1 implements TreeWalker {
-
   Node get currentNode native "TreeWalker_currentNode_Getter";
 
+
+  /** @domName TreeWalker.currentNode */
   void set currentNode(Node value) native "TreeWalker_currentNode_Setter";
 
+
+  /** @domName TreeWalker.expandEntityReferences */
   bool get expandEntityReferences native "TreeWalker_expandEntityReferences_Getter";
 
+
+  /** @domName TreeWalker.filter */
   NodeFilter get filter native "TreeWalker_filter_Getter";
 
+
+  /** @domName TreeWalker.root */
   Node get root native "TreeWalker_root_Getter";
 
+
+  /** @domName TreeWalker.whatToShow */
   int get whatToShow native "TreeWalker_whatToShow_Getter";
 
+
+  /** @domName TreeWalker.firstChild */
   Node firstChild() native "TreeWalker_firstChild_Callback";
 
+
+  /** @domName TreeWalker.lastChild */
   Node lastChild() native "TreeWalker_lastChild_Callback";
 
+
+  /** @domName TreeWalker.nextNode */
   Node nextNode() native "TreeWalker_nextNode_Callback";
 
+
+  /** @domName TreeWalker.nextSibling */
   Node nextSibling() native "TreeWalker_nextSibling_Callback";
 
+
+  /** @domName TreeWalker.parentNode */
   Node parentNode() native "TreeWalker_parentNode_Callback";
 
+
+  /** @domName TreeWalker.previousNode */
   Node previousNode() native "TreeWalker_previousNode_Callback";
 
+
+  /** @domName TreeWalker.previousSibling */
   Node previousSibling() native "TreeWalker_previousSibling_Callback";
 
 }
@@ -38378,64 +31021,47 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName UIEvent
-abstract class UIEvent implements Event {
+class UIEvent extends Event {
+  UIEvent.internal(): super.internal();
+
 
   /** @domName UIEvent.charCode */
-  int get charCode;
-
-  /** @domName UIEvent.detail */
-  int get detail;
-
-  /** @domName UIEvent.keyCode */
-  int get keyCode;
-
-  /** @domName UIEvent.layerX */
-  int get layerX;
-
-  /** @domName UIEvent.layerY */
-  int get layerY;
-
-  /** @domName UIEvent.pageX */
-  int get pageX;
-
-  /** @domName UIEvent.pageY */
-  int get pageY;
-
-  /** @domName UIEvent.view */
-  Window get view;
-
-  /** @domName UIEvent.which */
-  int get which;
-
-  /** @domName UIEvent.initUIEvent */
-  void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _UIEventImpl extends _EventImpl implements UIEvent {
-
   int get charCode native "UIEvent_charCode_Getter";
 
+
+  /** @domName UIEvent.detail */
   int get detail native "UIEvent_detail_Getter";
 
+
+  /** @domName UIEvent.keyCode */
   int get keyCode native "UIEvent_keyCode_Getter";
 
+
+  /** @domName UIEvent.layerX */
   int get layerX native "UIEvent_layerX_Getter";
 
+
+  /** @domName UIEvent.layerY */
   int get layerY native "UIEvent_layerY_Getter";
 
+
+  /** @domName UIEvent.pageX */
   int get pageX native "UIEvent_pageX_Getter";
 
+
+  /** @domName UIEvent.pageY */
   int get pageY native "UIEvent_pageY_Getter";
 
+
+  /** @domName UIEvent.view */
   Window get view native "UIEvent_view_Getter";
 
+
+  /** @domName UIEvent.which */
   int get which native "UIEvent_which_Getter";
 
+
+  /** @domName UIEvent.initUIEvent */
   void initUIEvent(String type, bool canBubble, bool cancelable, LocalWindow view, int detail) native "UIEvent_initUIEvent_Callback";
 
 }
@@ -38446,30 +31072,25 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLUListElement
-abstract class UListElement implements Element {
+class UListElement extends _Element_Merged {
 
   factory UListElement() => _Elements.createUListElement();
+  UListElement.internal(): super.internal();
+
 
   /** @domName HTMLUListElement.compact */
-  bool compact;
-
-  /** @domName HTMLUListElement.type */
-  String type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _UListElementImpl extends _ElementImpl_Merged implements UListElement {
-
   bool get compact native "HTMLUListElement_compact_Getter";
 
+
+  /** @domName HTMLUListElement.compact */
   void set compact(bool value) native "HTMLUListElement_compact_Setter";
 
+
+  /** @domName HTMLUListElement.type */
   String get type native "HTMLUListElement_type_Getter";
 
+
+  /** @domName HTMLUListElement.type */
   void set type(String value) native "HTMLUListElement_type_Setter";
 
 }
@@ -38480,7 +31101,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Uint16Array
-abstract class Uint16Array implements ArrayBufferView, List<int> {
+class Uint16Array extends ArrayBufferView implements List<int> {
 
   factory Uint16Array(int length) =>
     _TypedArrayFactoryProvider.createUint16Array(length);
@@ -38490,30 +31111,20 @@
 
   factory Uint16Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint16Array_fromBuffer(buffer, byteOffset, length);
+  Uint16Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 2;
 
+
   /** @domName Uint16Array.length */
-  int get length;
-
-  /** @domName Uint16Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint16Array.subarray */
-  Uint16Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Uint16ArrayImpl extends _ArrayBufferViewImpl implements Uint16Array {
-
   int get length native "Uint16Array_length_Getter";
 
+
+  /** @domName Uint16Array.numericIndexGetter */
   int operator[](int index) native "Uint16Array_numericIndexGetter_Callback";
 
+
+  /** @domName Uint16Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Uint16Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -38593,6 +31204,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Uint16Array.setElements */
   void setElements(Object array, [int offset]) native "Uint16Array_setElements_Callback";
 
   Uint16Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -38602,8 +31215,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Uint16Array.subarray_1 */
   Uint16Array _subarray_1(start, end) native "Uint16Array_subarray_1_Callback";
 
+
+  /** @domName Uint16Array.subarray_2 */
   Uint16Array _subarray_2(start) native "Uint16Array_subarray_2_Callback";
 
 }
@@ -38614,7 +31231,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Uint32Array
-abstract class Uint32Array implements ArrayBufferView, List<int> {
+class Uint32Array extends ArrayBufferView implements List<int> {
 
   factory Uint32Array(int length) =>
     _TypedArrayFactoryProvider.createUint32Array(length);
@@ -38624,30 +31241,20 @@
 
   factory Uint32Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint32Array_fromBuffer(buffer, byteOffset, length);
+  Uint32Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 4;
 
+
   /** @domName Uint32Array.length */
-  int get length;
-
-  /** @domName Uint32Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint32Array.subarray */
-  Uint32Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Uint32ArrayImpl extends _ArrayBufferViewImpl implements Uint32Array {
-
   int get length native "Uint32Array_length_Getter";
 
+
+  /** @domName Uint32Array.numericIndexGetter */
   int operator[](int index) native "Uint32Array_numericIndexGetter_Callback";
 
+
+  /** @domName Uint32Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Uint32Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -38727,6 +31334,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Uint32Array.setElements */
   void setElements(Object array, [int offset]) native "Uint32Array_setElements_Callback";
 
   Uint32Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -38736,8 +31345,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Uint32Array.subarray_1 */
   Uint32Array _subarray_1(start, end) native "Uint32Array_subarray_1_Callback";
 
+
+  /** @domName Uint32Array.subarray_2 */
   Uint32Array _subarray_2(start) native "Uint32Array_subarray_2_Callback";
 
 }
@@ -38748,7 +31361,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Uint8Array
-abstract class Uint8Array implements ArrayBufferView, List<int> {
+class Uint8Array extends ArrayBufferView implements List<int> {
 
   factory Uint8Array(int length) =>
     _TypedArrayFactoryProvider.createUint8Array(length);
@@ -38758,30 +31371,20 @@
 
   factory Uint8Array.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint8Array_fromBuffer(buffer, byteOffset, length);
+  Uint8Array.internal(): super.internal();
 
   static const int BYTES_PER_ELEMENT = 1;
 
+
   /** @domName Uint8Array.length */
-  int get length;
-
-  /** @domName Uint8Array.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint8Array.subarray */
-  Uint8Array subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Uint8ArrayImpl extends _ArrayBufferViewImpl implements Uint8Array {
-
   int get length native "Uint8Array_length_Getter";
 
+
+  /** @domName Uint8Array.numericIndexGetter */
   int operator[](int index) native "Uint8Array_numericIndexGetter_Callback";
 
+
+  /** @domName Uint8Array.numericIndexSetter */
   void operator[]=(int index, int value) native "Uint8Array_numericIndexSetter_Callback";
   // -- start List<int> mixins.
   // int is the element type.
@@ -38861,6 +31464,8 @@
 
   // -- end List<int> mixins.
 
+
+  /** @domName Uint8Array.setElements */
   void setElements(Object array, [int offset]) native "Uint8Array_setElements_Callback";
 
   Uint8Array subarray(/*long*/ start, [/*long*/ end]) {
@@ -38870,8 +31475,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Uint8Array.subarray_1 */
   Uint8Array _subarray_1(start, end) native "Uint8Array_subarray_1_Callback";
 
+
+  /** @domName Uint8Array.subarray_2 */
   Uint8Array _subarray_2(start) native "Uint8Array_subarray_2_Callback";
 
 }
@@ -38882,7 +31491,7 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName Uint8ClampedArray
-abstract class Uint8ClampedArray implements Uint8Array {
+class Uint8ClampedArray extends Uint8Array {
 
   factory Uint8ClampedArray(int length) =>
     _TypedArrayFactoryProvider.createUint8ClampedArray(length);
@@ -38892,30 +31501,22 @@
 
   factory Uint8ClampedArray.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => 
     _TypedArrayFactoryProvider.createUint8ClampedArray_fromBuffer(buffer, byteOffset, length);
+  Uint8ClampedArray.internal(): super.internal();
+
 
   /** @domName Uint8ClampedArray.length */
-  int get length;
-
-  /** @domName Uint8ClampedArray.setElements */
-  void setElements(Object array, [int offset]);
-
-  /** @domName Uint8ClampedArray.subarray */
-  Uint8ClampedArray subarray(int start, [int end]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _Uint8ClampedArrayImpl extends _Uint8ArrayImpl implements Uint8ClampedArray {
-
   int get length native "Uint8ClampedArray_length_Getter";
 
+
+  /** @domName Uint8ClampedArray.numericIndexGetter */
   int operator[](int index) native "Uint8ClampedArray_numericIndexGetter_Callback";
 
+
+  /** @domName Uint8ClampedArray.numericIndexSetter */
   void operator[]=(int index, int value) native "Uint8ClampedArray_numericIndexSetter_Callback";
 
+
+  /** @domName Uint8ClampedArray.setElements */
   void setElements(Object array, [int offset]) native "Uint8ClampedArray_setElements_Callback";
 
   Uint8ClampedArray subarray(/*long*/ start, [/*long*/ end]) {
@@ -38925,8 +31526,12 @@
     return _subarray_2(start);
   }
 
+
+  /** @domName Uint8ClampedArray.subarray_1 */
   Uint8ClampedArray _subarray_1(start, end) native "Uint8ClampedArray_subarray_1_Callback";
 
+
+  /** @domName Uint8ClampedArray.subarray_2 */
   Uint8ClampedArray _subarray_2(start) native "Uint8ClampedArray_subarray_2_Callback";
 
 }
@@ -38937,7 +31542,9 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLUnknownElement
-abstract class UnknownElement implements Element {
+class UnknownElement extends _Element_Merged {
+  UnknownElement.internal(): super.internal();
+
 }
 // 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
@@ -38945,7 +31552,38 @@
 
 // WARNING: Do not edit - generated code.
 
-class _UnknownElementImpl extends _ElementImpl_Merged implements UnknownElement {
+/// @domName URL
+class Url extends NativeFieldWrapperClass1 {
+  Url.internal();
+
+  static String createObjectUrl(blob_OR_source_OR_stream) {
+    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
+      return _createObjectURL_1(blob_OR_source_OR_stream);
+    }
+    if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
+      return _createObjectURL_2(blob_OR_source_OR_stream);
+    }
+    if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
+      return _createObjectURL_3(blob_OR_source_OR_stream);
+    }
+    throw "Incorrect number or type of arguments";
+  }
+
+
+  /** @domName DOMURL.createObjectURL_1 */
+  static String _createObjectURL_1(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_1_Callback";
+
+
+  /** @domName DOMURL.createObjectURL_2 */
+  static String _createObjectURL_2(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_2_Callback";
+
+
+  /** @domName DOMURL.createObjectURL_3 */
+  static String _createObjectURL_3(blob_OR_source_OR_stream) native "DOMURL_createObjectURL_3_Callback";
+
+
+  /** @domName DOMURL.revokeObjectURL */
+  static void revokeObjectUrl(String url) native "DOMURL_revokeObjectURL_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -38955,59 +31593,43 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName ValidityState
-abstract class ValidityState {
+class ValidityState extends NativeFieldWrapperClass1 {
+  ValidityState.internal();
+
 
   /** @domName ValidityState.customError */
-  bool get customError;
-
-  /** @domName ValidityState.patternMismatch */
-  bool get patternMismatch;
-
-  /** @domName ValidityState.rangeOverflow */
-  bool get rangeOverflow;
-
-  /** @domName ValidityState.rangeUnderflow */
-  bool get rangeUnderflow;
-
-  /** @domName ValidityState.stepMismatch */
-  bool get stepMismatch;
-
-  /** @domName ValidityState.tooLong */
-  bool get tooLong;
-
-  /** @domName ValidityState.typeMismatch */
-  bool get typeMismatch;
-
-  /** @domName ValidityState.valid */
-  bool get valid;
-
-  /** @domName ValidityState.valueMissing */
-  bool get valueMissing;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _ValidityStateImpl extends NativeFieldWrapperClass1 implements ValidityState {
-
   bool get customError native "ValidityState_customError_Getter";
 
+
+  /** @domName ValidityState.patternMismatch */
   bool get patternMismatch native "ValidityState_patternMismatch_Getter";
 
+
+  /** @domName ValidityState.rangeOverflow */
   bool get rangeOverflow native "ValidityState_rangeOverflow_Getter";
 
+
+  /** @domName ValidityState.rangeUnderflow */
   bool get rangeUnderflow native "ValidityState_rangeUnderflow_Getter";
 
+
+  /** @domName ValidityState.stepMismatch */
   bool get stepMismatch native "ValidityState_stepMismatch_Getter";
 
+
+  /** @domName ValidityState.tooLong */
   bool get tooLong native "ValidityState_tooLong_Getter";
 
+
+  /** @domName ValidityState.typeMismatch */
   bool get typeMismatch native "ValidityState_typeMismatch_Getter";
 
+
+  /** @domName ValidityState.valid */
   bool get valid native "ValidityState_valid_Getter";
 
+
+  /** @domName ValidityState.valueMissing */
   bool get valueMissing native "ValidityState_valueMissing_Getter";
 
 }
@@ -39018,87 +31640,73 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName HTMLVideoElement
-abstract class VideoElement implements MediaElement {
+class VideoElement extends MediaElement {
 
   factory VideoElement() => _Elements.createVideoElement();
+  VideoElement.internal(): super.internal();
+
 
   /** @domName HTMLVideoElement.height */
-  int height;
-
-  /** @domName HTMLVideoElement.poster */
-  String poster;
-
-  /** @domName HTMLVideoElement.videoHeight */
-  int get videoHeight;
-
-  /** @domName HTMLVideoElement.videoWidth */
-  int get videoWidth;
-
-  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
-  int get webkitDecodedFrameCount;
-
-  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
-  bool get webkitDisplayingFullscreen;
-
-  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
-  int get webkitDroppedFrameCount;
-
-  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
-  bool get webkitSupportsFullscreen;
-
-  /** @domName HTMLVideoElement.width */
-  int width;
-
-  /** @domName HTMLVideoElement.webkitEnterFullScreen */
-  void webkitEnterFullScreen();
-
-  /** @domName HTMLVideoElement.webkitEnterFullscreen */
-  void webkitEnterFullscreen();
-
-  /** @domName HTMLVideoElement.webkitExitFullScreen */
-  void webkitExitFullScreen();
-
-  /** @domName HTMLVideoElement.webkitExitFullscreen */
-  void webkitExitFullscreen();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _VideoElementImpl extends _MediaElementImpl implements VideoElement {
-
   int get height native "HTMLVideoElement_height_Getter";
 
+
+  /** @domName HTMLVideoElement.height */
   void set height(int value) native "HTMLVideoElement_height_Setter";
 
+
+  /** @domName HTMLVideoElement.poster */
   String get poster native "HTMLVideoElement_poster_Getter";
 
+
+  /** @domName HTMLVideoElement.poster */
   void set poster(String value) native "HTMLVideoElement_poster_Setter";
 
+
+  /** @domName HTMLVideoElement.videoHeight */
   int get videoHeight native "HTMLVideoElement_videoHeight_Getter";
 
+
+  /** @domName HTMLVideoElement.videoWidth */
   int get videoWidth native "HTMLVideoElement_videoWidth_Getter";
 
+
+  /** @domName HTMLVideoElement.webkitDecodedFrameCount */
   int get webkitDecodedFrameCount native "HTMLVideoElement_webkitDecodedFrameCount_Getter";
 
+
+  /** @domName HTMLVideoElement.webkitDisplayingFullscreen */
   bool get webkitDisplayingFullscreen native "HTMLVideoElement_webkitDisplayingFullscreen_Getter";
 
+
+  /** @domName HTMLVideoElement.webkitDroppedFrameCount */
   int get webkitDroppedFrameCount native "HTMLVideoElement_webkitDroppedFrameCount_Getter";
 
+
+  /** @domName HTMLVideoElement.webkitSupportsFullscreen */
   bool get webkitSupportsFullscreen native "HTMLVideoElement_webkitSupportsFullscreen_Getter";
 
+
+  /** @domName HTMLVideoElement.width */
   int get width native "HTMLVideoElement_width_Getter";
 
+
+  /** @domName HTMLVideoElement.width */
   void set width(int value) native "HTMLVideoElement_width_Setter";
 
+
+  /** @domName HTMLVideoElement.webkitEnterFullScreen */
   void webkitEnterFullScreen() native "HTMLVideoElement_webkitEnterFullScreen_Callback";
 
+
+  /** @domName HTMLVideoElement.webkitEnterFullscreen */
   void webkitEnterFullscreen() native "HTMLVideoElement_webkitEnterFullscreen_Callback";
 
+
+  /** @domName HTMLVideoElement.webkitExitFullScreen */
   void webkitExitFullScreen() native "HTMLVideoElement_webkitExitFullScreen_Callback";
 
+
+  /** @domName HTMLVideoElement.webkitExitFullscreen */
   void webkitExitFullscreen() native "HTMLVideoElement_webkitExitFullscreen_Callback";
 
 }
@@ -39117,21 +31725,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WaveShaperNode
-abstract class WaveShaperNode implements AudioNode {
+class WaveShaperNode extends AudioNode {
+  WaveShaperNode.internal(): super.internal();
+
 
   /** @domName WaveShaperNode.curve */
-  Float32Array curve;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WaveShaperNodeImpl extends _AudioNodeImpl implements WaveShaperNode {
-
   Float32Array get curve native "WaveShaperNode_curve_Getter";
 
+
+  /** @domName WaveShaperNode.curve */
   void set curve(Float32Array value) native "WaveShaperNode_curve_Setter";
 
 }
@@ -39142,15 +31744,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WaveTable
-abstract class WaveTable {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WaveTableImpl extends NativeFieldWrapperClass1 implements WaveTable {
+class WaveTable extends NativeFieldWrapperClass1 {
+  WaveTable.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39160,29 +31755,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLActiveInfo
-abstract class WebGLActiveInfo {
+class WebGLActiveInfo extends NativeFieldWrapperClass1 {
+  WebGLActiveInfo.internal();
+
 
   /** @domName WebGLActiveInfo.name */
-  String get name;
-
-  /** @domName WebGLActiveInfo.size */
-  int get size;
-
-  /** @domName WebGLActiveInfo.type */
-  int get type;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLActiveInfoImpl extends NativeFieldWrapperClass1 implements WebGLActiveInfo {
-
   String get name native "WebGLActiveInfo_name_Getter";
 
+
+  /** @domName WebGLActiveInfo.size */
   int get size native "WebGLActiveInfo_size_Getter";
 
+
+  /** @domName WebGLActiveInfo.type */
   int get type native "WebGLActiveInfo_type_Getter";
 
 }
@@ -39193,15 +31778,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLBuffer
-abstract class WebGLBuffer {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLBufferImpl extends NativeFieldWrapperClass1 implements WebGLBuffer {
+class WebGLBuffer extends NativeFieldWrapperClass1 {
+  WebGLBuffer.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39211,7 +31789,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLCompressedTextureS3TC
-abstract class WebGLCompressedTextureS3TC {
+class WebGLCompressedTextureS3TC extends NativeFieldWrapperClass1 {
+  WebGLCompressedTextureS3TC.internal();
 
   static const int COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1;
 
@@ -39220,14 +31799,6 @@
   static const int COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3;
 
   static const int COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLCompressedTextureS3TCImpl extends NativeFieldWrapperClass1 implements WebGLCompressedTextureS3TC {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39237,56 +31808,55 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLContextAttributes
-abstract class WebGLContextAttributes {
+class WebGLContextAttributes extends NativeFieldWrapperClass1 {
+  WebGLContextAttributes.internal();
+
 
   /** @domName WebGLContextAttributes.alpha */
-  bool alpha;
-
-  /** @domName WebGLContextAttributes.antialias */
-  bool antialias;
-
-  /** @domName WebGLContextAttributes.depth */
-  bool depth;
-
-  /** @domName WebGLContextAttributes.premultipliedAlpha */
-  bool premultipliedAlpha;
-
-  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
-  bool preserveDrawingBuffer;
-
-  /** @domName WebGLContextAttributes.stencil */
-  bool stencil;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLContextAttributesImpl extends NativeFieldWrapperClass1 implements WebGLContextAttributes {
-
   bool get alpha native "WebGLContextAttributes_alpha_Getter";
 
+
+  /** @domName WebGLContextAttributes.alpha */
   void set alpha(bool value) native "WebGLContextAttributes_alpha_Setter";
 
+
+  /** @domName WebGLContextAttributes.antialias */
   bool get antialias native "WebGLContextAttributes_antialias_Getter";
 
+
+  /** @domName WebGLContextAttributes.antialias */
   void set antialias(bool value) native "WebGLContextAttributes_antialias_Setter";
 
+
+  /** @domName WebGLContextAttributes.depth */
   bool get depth native "WebGLContextAttributes_depth_Getter";
 
+
+  /** @domName WebGLContextAttributes.depth */
   void set depth(bool value) native "WebGLContextAttributes_depth_Setter";
 
+
+  /** @domName WebGLContextAttributes.premultipliedAlpha */
   bool get premultipliedAlpha native "WebGLContextAttributes_premultipliedAlpha_Getter";
 
+
+  /** @domName WebGLContextAttributes.premultipliedAlpha */
   void set premultipliedAlpha(bool value) native "WebGLContextAttributes_premultipliedAlpha_Setter";
 
+
+  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
   bool get preserveDrawingBuffer native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
 
+
+  /** @domName WebGLContextAttributes.preserveDrawingBuffer */
   void set preserveDrawingBuffer(bool value) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
 
+
+  /** @domName WebGLContextAttributes.stencil */
   bool get stencil native "WebGLContextAttributes_stencil_Getter";
 
+
+  /** @domName WebGLContextAttributes.stencil */
   void set stencil(bool value) native "WebGLContextAttributes_stencil_Setter";
 
 }
@@ -39297,19 +31867,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLContextEvent
-abstract class WebGLContextEvent implements Event {
+class WebGLContextEvent extends Event {
+  WebGLContextEvent.internal(): super.internal();
+
 
   /** @domName WebGLContextEvent.statusMessage */
-  String get statusMessage;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLContextEventImpl extends _EventImpl implements WebGLContextEvent {
-
   String get statusMessage native "WebGLContextEvent_statusMessage_Getter";
 
 }
@@ -39320,19 +31882,12 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLDebugRendererInfo
-abstract class WebGLDebugRendererInfo {
+class WebGLDebugRendererInfo extends NativeFieldWrapperClass1 {
+  WebGLDebugRendererInfo.internal();
 
   static const int UNMASKED_RENDERER_WEBGL = 0x9246;
 
   static const int UNMASKED_VENDOR_WEBGL = 0x9245;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLDebugRendererInfoImpl extends NativeFieldWrapperClass1 implements WebGLDebugRendererInfo {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39342,19 +31897,11 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLDebugShaders
-abstract class WebGLDebugShaders {
+class WebGLDebugShaders extends NativeFieldWrapperClass1 {
+  WebGLDebugShaders.internal();
+
 
   /** @domName WebGLDebugShaders.getTranslatedShaderSource */
-  String getTranslatedShaderSource(WebGLShader shader);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLDebugShadersImpl extends NativeFieldWrapperClass1 implements WebGLDebugShaders {
-
   String getTranslatedShaderSource(WebGLShader shader) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
 
 }
@@ -39365,17 +31912,10 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLDepthTexture
-abstract class WebGLDepthTexture {
+class WebGLDepthTexture extends NativeFieldWrapperClass1 {
+  WebGLDepthTexture.internal();
 
   static const int UNSIGNED_INT_24_8_WEBGL = 0x84FA;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLDepthTextureImpl extends NativeFieldWrapperClass1 implements WebGLDepthTexture {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39385,15 +31925,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLFramebuffer
-abstract class WebGLFramebuffer {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLFramebufferImpl extends NativeFieldWrapperClass1 implements WebGLFramebuffer {
+class WebGLFramebuffer extends NativeFieldWrapperClass1 {
+  WebGLFramebuffer.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39403,24 +31936,15 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLLoseContext
-abstract class WebGLLoseContext {
+class WebGLLoseContext extends NativeFieldWrapperClass1 {
+  WebGLLoseContext.internal();
+
 
   /** @domName WebGLLoseContext.loseContext */
-  void loseContext();
-
-  /** @domName WebGLLoseContext.restoreContext */
-  void restoreContext();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLLoseContextImpl extends NativeFieldWrapperClass1 implements WebGLLoseContext {
-
   void loseContext() native "WebGLLoseContext_loseContext_Callback";
 
+
+  /** @domName WebGLLoseContext.restoreContext */
   void restoreContext() native "WebGLLoseContext_restoreContext_Callback";
 
 }
@@ -39431,15 +31955,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLProgram
-abstract class WebGLProgram {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLProgramImpl extends NativeFieldWrapperClass1 implements WebGLProgram {
+class WebGLProgram extends NativeFieldWrapperClass1 {
+  WebGLProgram.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39449,15 +31966,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLRenderbuffer
-abstract class WebGLRenderbuffer {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLRenderbufferImpl extends NativeFieldWrapperClass1 implements WebGLRenderbuffer {
+class WebGLRenderbuffer extends NativeFieldWrapperClass1 {
+  WebGLRenderbuffer.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -39467,7 +31977,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLRenderingContext
-abstract class WebGLRenderingContext implements CanvasRenderingContext {
+class WebGLRenderingContext extends CanvasRenderingContext {
+  WebGLRenderingContext.internal(): super.internal();
 
   static const int ACTIVE_ATTRIBUTES = 0x8B89;
 
@@ -40059,457 +32570,60 @@
 
   static const int ZERO = 0;
 
+
   /** @domName WebGLRenderingContext.drawingBufferHeight */
-  int get drawingBufferHeight;
-
-  /** @domName WebGLRenderingContext.drawingBufferWidth */
-  int get drawingBufferWidth;
-
-  /** @domName WebGLRenderingContext.activeTexture */
-  void activeTexture(int texture);
-
-  /** @domName WebGLRenderingContext.attachShader */
-  void attachShader(WebGLProgram program, WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.bindAttribLocation */
-  void bindAttribLocation(WebGLProgram program, int index, String name);
-
-  /** @domName WebGLRenderingContext.bindBuffer */
-  void bindBuffer(int target, WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.bindFramebuffer */
-  void bindFramebuffer(int target, WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.bindRenderbuffer */
-  void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.bindTexture */
-  void bindTexture(int target, WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.blendColor */
-  void blendColor(num red, num green, num blue, num alpha);
-
-  /** @domName WebGLRenderingContext.blendEquation */
-  void blendEquation(int mode);
-
-  /** @domName WebGLRenderingContext.blendEquationSeparate */
-  void blendEquationSeparate(int modeRGB, int modeAlpha);
-
-  /** @domName WebGLRenderingContext.blendFunc */
-  void blendFunc(int sfactor, int dfactor);
-
-  /** @domName WebGLRenderingContext.blendFuncSeparate */
-  void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha);
-
-  /** @domName WebGLRenderingContext.bufferData */
-  void bufferData(int target, data_OR_size, int usage);
-
-  /** @domName WebGLRenderingContext.bufferSubData */
-  void bufferSubData(int target, int offset, data);
-
-  /** @domName WebGLRenderingContext.checkFramebufferStatus */
-  int checkFramebufferStatus(int target);
-
-  /** @domName WebGLRenderingContext.clear */
-  void clear(int mask);
-
-  /** @domName WebGLRenderingContext.clearColor */
-  void clearColor(num red, num green, num blue, num alpha);
-
-  /** @domName WebGLRenderingContext.clearDepth */
-  void clearDepth(num depth);
-
-  /** @domName WebGLRenderingContext.clearStencil */
-  void clearStencil(int s);
-
-  /** @domName WebGLRenderingContext.colorMask */
-  void colorMask(bool red, bool green, bool blue, bool alpha);
-
-  /** @domName WebGLRenderingContext.compileShader */
-  void compileShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.compressedTexImage2D */
-  void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data);
-
-  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
-  void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data);
-
-  /** @domName WebGLRenderingContext.copyTexImage2D */
-  void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border);
-
-  /** @domName WebGLRenderingContext.copyTexSubImage2D */
-  void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
-
-  /** @domName WebGLRenderingContext.createBuffer */
-  WebGLBuffer createBuffer();
-
-  /** @domName WebGLRenderingContext.createFramebuffer */
-  WebGLFramebuffer createFramebuffer();
-
-  /** @domName WebGLRenderingContext.createProgram */
-  WebGLProgram createProgram();
-
-  /** @domName WebGLRenderingContext.createRenderbuffer */
-  WebGLRenderbuffer createRenderbuffer();
-
-  /** @domName WebGLRenderingContext.createShader */
-  WebGLShader createShader(int type);
-
-  /** @domName WebGLRenderingContext.createTexture */
-  WebGLTexture createTexture();
-
-  /** @domName WebGLRenderingContext.cullFace */
-  void cullFace(int mode);
-
-  /** @domName WebGLRenderingContext.deleteBuffer */
-  void deleteBuffer(WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.deleteFramebuffer */
-  void deleteFramebuffer(WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.deleteProgram */
-  void deleteProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.deleteRenderbuffer */
-  void deleteRenderbuffer(WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.deleteShader */
-  void deleteShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.deleteTexture */
-  void deleteTexture(WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.depthFunc */
-  void depthFunc(int func);
-
-  /** @domName WebGLRenderingContext.depthMask */
-  void depthMask(bool flag);
-
-  /** @domName WebGLRenderingContext.depthRange */
-  void depthRange(num zNear, num zFar);
-
-  /** @domName WebGLRenderingContext.detachShader */
-  void detachShader(WebGLProgram program, WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.disable */
-  void disable(int cap);
-
-  /** @domName WebGLRenderingContext.disableVertexAttribArray */
-  void disableVertexAttribArray(int index);
-
-  /** @domName WebGLRenderingContext.drawArrays */
-  void drawArrays(int mode, int first, int count);
-
-  /** @domName WebGLRenderingContext.drawElements */
-  void drawElements(int mode, int count, int type, int offset);
-
-  /** @domName WebGLRenderingContext.enable */
-  void enable(int cap);
-
-  /** @domName WebGLRenderingContext.enableVertexAttribArray */
-  void enableVertexAttribArray(int index);
-
-  /** @domName WebGLRenderingContext.finish */
-  void finish();
-
-  /** @domName WebGLRenderingContext.flush */
-  void flush();
-
-  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
-  void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.framebufferTexture2D */
-  void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level);
-
-  /** @domName WebGLRenderingContext.frontFace */
-  void frontFace(int mode);
-
-  /** @domName WebGLRenderingContext.generateMipmap */
-  void generateMipmap(int target);
-
-  /** @domName WebGLRenderingContext.getActiveAttrib */
-  WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index);
-
-  /** @domName WebGLRenderingContext.getActiveUniform */
-  WebGLActiveInfo getActiveUniform(WebGLProgram program, int index);
-
-  /** @domName WebGLRenderingContext.getAttachedShaders */
-  void getAttachedShaders(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.getAttribLocation */
-  int getAttribLocation(WebGLProgram program, String name);
-
-  /** @domName WebGLRenderingContext.getBufferParameter */
-  Object getBufferParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getContextAttributes */
-  WebGLContextAttributes getContextAttributes();
-
-  /** @domName WebGLRenderingContext.getError */
-  int getError();
-
-  /** @domName WebGLRenderingContext.getExtension */
-  Object getExtension(String name);
-
-  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
-  Object getFramebufferAttachmentParameter(int target, int attachment, int pname);
-
-  /** @domName WebGLRenderingContext.getParameter */
-  Object getParameter(int pname);
-
-  /** @domName WebGLRenderingContext.getProgramInfoLog */
-  String getProgramInfoLog(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.getProgramParameter */
-  Object getProgramParameter(WebGLProgram program, int pname);
-
-  /** @domName WebGLRenderingContext.getRenderbufferParameter */
-  Object getRenderbufferParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getShaderInfoLog */
-  String getShaderInfoLog(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.getShaderParameter */
-  Object getShaderParameter(WebGLShader shader, int pname);
-
-  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
-  WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype);
-
-  /** @domName WebGLRenderingContext.getShaderSource */
-  String getShaderSource(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.getSupportedExtensions */
-  List<String> getSupportedExtensions();
-
-  /** @domName WebGLRenderingContext.getTexParameter */
-  Object getTexParameter(int target, int pname);
-
-  /** @domName WebGLRenderingContext.getUniform */
-  Object getUniform(WebGLProgram program, WebGLUniformLocation location);
-
-  /** @domName WebGLRenderingContext.getUniformLocation */
-  WebGLUniformLocation getUniformLocation(WebGLProgram program, String name);
-
-  /** @domName WebGLRenderingContext.getVertexAttrib */
-  Object getVertexAttrib(int index, int pname);
-
-  /** @domName WebGLRenderingContext.getVertexAttribOffset */
-  int getVertexAttribOffset(int index, int pname);
-
-  /** @domName WebGLRenderingContext.hint */
-  void hint(int target, int mode);
-
-  /** @domName WebGLRenderingContext.isBuffer */
-  bool isBuffer(WebGLBuffer buffer);
-
-  /** @domName WebGLRenderingContext.isContextLost */
-  bool isContextLost();
-
-  /** @domName WebGLRenderingContext.isEnabled */
-  bool isEnabled(int cap);
-
-  /** @domName WebGLRenderingContext.isFramebuffer */
-  bool isFramebuffer(WebGLFramebuffer framebuffer);
-
-  /** @domName WebGLRenderingContext.isProgram */
-  bool isProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.isRenderbuffer */
-  bool isRenderbuffer(WebGLRenderbuffer renderbuffer);
-
-  /** @domName WebGLRenderingContext.isShader */
-  bool isShader(WebGLShader shader);
-
-  /** @domName WebGLRenderingContext.isTexture */
-  bool isTexture(WebGLTexture texture);
-
-  /** @domName WebGLRenderingContext.lineWidth */
-  void lineWidth(num width);
-
-  /** @domName WebGLRenderingContext.linkProgram */
-  void linkProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.pixelStorei */
-  void pixelStorei(int pname, int param);
-
-  /** @domName WebGLRenderingContext.polygonOffset */
-  void polygonOffset(num factor, num units);
-
-  /** @domName WebGLRenderingContext.readPixels */
-  void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels);
-
-  /** @domName WebGLRenderingContext.releaseShaderCompiler */
-  void releaseShaderCompiler();
-
-  /** @domName WebGLRenderingContext.renderbufferStorage */
-  void renderbufferStorage(int target, int internalformat, int width, int height);
-
-  /** @domName WebGLRenderingContext.sampleCoverage */
-  void sampleCoverage(num value, bool invert);
-
-  /** @domName WebGLRenderingContext.scissor */
-  void scissor(int x, int y, int width, int height);
-
-  /** @domName WebGLRenderingContext.shaderSource */
-  void shaderSource(WebGLShader shader, String string);
-
-  /** @domName WebGLRenderingContext.stencilFunc */
-  void stencilFunc(int func, int ref, int mask);
-
-  /** @domName WebGLRenderingContext.stencilFuncSeparate */
-  void stencilFuncSeparate(int face, int func, int ref, int mask);
-
-  /** @domName WebGLRenderingContext.stencilMask */
-  void stencilMask(int mask);
-
-  /** @domName WebGLRenderingContext.stencilMaskSeparate */
-  void stencilMaskSeparate(int face, int mask);
-
-  /** @domName WebGLRenderingContext.stencilOp */
-  void stencilOp(int fail, int zfail, int zpass);
-
-  /** @domName WebGLRenderingContext.stencilOpSeparate */
-  void stencilOpSeparate(int face, int fail, int zfail, int zpass);
-
-  /** @domName WebGLRenderingContext.texImage2D */
-  void texImage2D(int target, int level, int internalformat, int format_OR_width, int height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [int format, int type, ArrayBufferView pixels]);
-
-  /** @domName WebGLRenderingContext.texParameterf */
-  void texParameterf(int target, int pname, num param);
-
-  /** @domName WebGLRenderingContext.texParameteri */
-  void texParameteri(int target, int pname, int param);
-
-  /** @domName WebGLRenderingContext.texSubImage2D */
-  void texSubImage2D(int target, int level, int xoffset, int yoffset, int format_OR_width, int height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [int type, ArrayBufferView pixels]);
-
-  /** @domName WebGLRenderingContext.uniform1f */
-  void uniform1f(WebGLUniformLocation location, num x);
-
-  /** @domName WebGLRenderingContext.uniform1fv */
-  void uniform1fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform1i */
-  void uniform1i(WebGLUniformLocation location, int x);
-
-  /** @domName WebGLRenderingContext.uniform1iv */
-  void uniform1iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform2f */
-  void uniform2f(WebGLUniformLocation location, num x, num y);
-
-  /** @domName WebGLRenderingContext.uniform2fv */
-  void uniform2fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform2i */
-  void uniform2i(WebGLUniformLocation location, int x, int y);
-
-  /** @domName WebGLRenderingContext.uniform2iv */
-  void uniform2iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform3f */
-  void uniform3f(WebGLUniformLocation location, num x, num y, num z);
-
-  /** @domName WebGLRenderingContext.uniform3fv */
-  void uniform3fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform3i */
-  void uniform3i(WebGLUniformLocation location, int x, int y, int z);
-
-  /** @domName WebGLRenderingContext.uniform3iv */
-  void uniform3iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniform4f */
-  void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w);
-
-  /** @domName WebGLRenderingContext.uniform4fv */
-  void uniform4fv(WebGLUniformLocation location, Float32Array v);
-
-  /** @domName WebGLRenderingContext.uniform4i */
-  void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w);
-
-  /** @domName WebGLRenderingContext.uniform4iv */
-  void uniform4iv(WebGLUniformLocation location, Int32Array v);
-
-  /** @domName WebGLRenderingContext.uniformMatrix2fv */
-  void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.uniformMatrix3fv */
-  void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.uniformMatrix4fv */
-  void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array);
-
-  /** @domName WebGLRenderingContext.useProgram */
-  void useProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.validateProgram */
-  void validateProgram(WebGLProgram program);
-
-  /** @domName WebGLRenderingContext.vertexAttrib1f */
-  void vertexAttrib1f(int indx, num x);
-
-  /** @domName WebGLRenderingContext.vertexAttrib1fv */
-  void vertexAttrib1fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib2f */
-  void vertexAttrib2f(int indx, num x, num y);
-
-  /** @domName WebGLRenderingContext.vertexAttrib2fv */
-  void vertexAttrib2fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib3f */
-  void vertexAttrib3f(int indx, num x, num y, num z);
-
-  /** @domName WebGLRenderingContext.vertexAttrib3fv */
-  void vertexAttrib3fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttrib4f */
-  void vertexAttrib4f(int indx, num x, num y, num z, num w);
-
-  /** @domName WebGLRenderingContext.vertexAttrib4fv */
-  void vertexAttrib4fv(int indx, Float32Array values);
-
-  /** @domName WebGLRenderingContext.vertexAttribPointer */
-  void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset);
-
-  /** @domName WebGLRenderingContext.viewport */
-  void viewport(int x, int y, int width, int height);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLRenderingContextImpl extends _CanvasRenderingContextImpl implements WebGLRenderingContext {
-
   int get drawingBufferHeight native "WebGLRenderingContext_drawingBufferHeight_Getter";
 
+
+  /** @domName WebGLRenderingContext.drawingBufferWidth */
   int get drawingBufferWidth native "WebGLRenderingContext_drawingBufferWidth_Getter";
 
+
+  /** @domName WebGLRenderingContext.activeTexture */
   void activeTexture(int texture) native "WebGLRenderingContext_activeTexture_Callback";
 
+
+  /** @domName WebGLRenderingContext.attachShader */
   void attachShader(WebGLProgram program, WebGLShader shader) native "WebGLRenderingContext_attachShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.bindAttribLocation */
   void bindAttribLocation(WebGLProgram program, int index, String name) native "WebGLRenderingContext_bindAttribLocation_Callback";
 
+
+  /** @domName WebGLRenderingContext.bindBuffer */
   void bindBuffer(int target, WebGLBuffer buffer) native "WebGLRenderingContext_bindBuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.bindFramebuffer */
   void bindFramebuffer(int target, WebGLFramebuffer framebuffer) native "WebGLRenderingContext_bindFramebuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.bindRenderbuffer */
   void bindRenderbuffer(int target, WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_bindRenderbuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.bindTexture */
   void bindTexture(int target, WebGLTexture texture) native "WebGLRenderingContext_bindTexture_Callback";
 
+
+  /** @domName WebGLRenderingContext.blendColor */
   void blendColor(num red, num green, num blue, num alpha) native "WebGLRenderingContext_blendColor_Callback";
 
+
+  /** @domName WebGLRenderingContext.blendEquation */
   void blendEquation(int mode) native "WebGLRenderingContext_blendEquation_Callback";
 
+
+  /** @domName WebGLRenderingContext.blendEquationSeparate */
   void blendEquationSeparate(int modeRGB, int modeAlpha) native "WebGLRenderingContext_blendEquationSeparate_Callback";
 
+
+  /** @domName WebGLRenderingContext.blendFunc */
   void blendFunc(int sfactor, int dfactor) native "WebGLRenderingContext_blendFunc_Callback";
 
+
+  /** @domName WebGLRenderingContext.blendFuncSeparate */
   void blendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha) native "WebGLRenderingContext_blendFuncSeparate_Callback";
 
   void bufferData(/*unsigned long*/ target, data_OR_size, /*unsigned long*/ usage) {
@@ -40528,10 +32642,16 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName WebGLRenderingContext.bufferData_1 */
   void _bufferData_1(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_1_Callback";
 
+
+  /** @domName WebGLRenderingContext.bufferData_2 */
   void _bufferData_2(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_2_Callback";
 
+
+  /** @domName WebGLRenderingContext.bufferData_3 */
   void _bufferData_3(target, data_OR_size, usage) native "WebGLRenderingContext_bufferData_3_Callback";
 
   void bufferSubData(/*unsigned long*/ target, /*long long*/ offset, data) {
@@ -40546,184 +32666,364 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName WebGLRenderingContext.bufferSubData_1 */
   void _bufferSubData_1(target, offset, data) native "WebGLRenderingContext_bufferSubData_1_Callback";
 
+
+  /** @domName WebGLRenderingContext.bufferSubData_2 */
   void _bufferSubData_2(target, offset, data) native "WebGLRenderingContext_bufferSubData_2_Callback";
 
+
+  /** @domName WebGLRenderingContext.checkFramebufferStatus */
   int checkFramebufferStatus(int target) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
 
+
+  /** @domName WebGLRenderingContext.clear */
   void clear(int mask) native "WebGLRenderingContext_clear_Callback";
 
+
+  /** @domName WebGLRenderingContext.clearColor */
   void clearColor(num red, num green, num blue, num alpha) native "WebGLRenderingContext_clearColor_Callback";
 
+
+  /** @domName WebGLRenderingContext.clearDepth */
   void clearDepth(num depth) native "WebGLRenderingContext_clearDepth_Callback";
 
+
+  /** @domName WebGLRenderingContext.clearStencil */
   void clearStencil(int s) native "WebGLRenderingContext_clearStencil_Callback";
 
+
+  /** @domName WebGLRenderingContext.colorMask */
   void colorMask(bool red, bool green, bool blue, bool alpha) native "WebGLRenderingContext_colorMask_Callback";
 
+
+  /** @domName WebGLRenderingContext.compileShader */
   void compileShader(WebGLShader shader) native "WebGLRenderingContext_compileShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.compressedTexImage2D */
   void compressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ArrayBufferView data) native "WebGLRenderingContext_compressedTexImage2D_Callback";
 
+
+  /** @domName WebGLRenderingContext.compressedTexSubImage2D */
   void compressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ArrayBufferView data) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
 
+
+  /** @domName WebGLRenderingContext.copyTexImage2D */
   void copyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border) native "WebGLRenderingContext_copyTexImage2D_Callback";
 
+
+  /** @domName WebGLRenderingContext.copyTexSubImage2D */
   void copyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
 
+
+  /** @domName WebGLRenderingContext.createBuffer */
   WebGLBuffer createBuffer() native "WebGLRenderingContext_createBuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.createFramebuffer */
   WebGLFramebuffer createFramebuffer() native "WebGLRenderingContext_createFramebuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.createProgram */
   WebGLProgram createProgram() native "WebGLRenderingContext_createProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.createRenderbuffer */
   WebGLRenderbuffer createRenderbuffer() native "WebGLRenderingContext_createRenderbuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.createShader */
   WebGLShader createShader(int type) native "WebGLRenderingContext_createShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.createTexture */
   WebGLTexture createTexture() native "WebGLRenderingContext_createTexture_Callback";
 
+
+  /** @domName WebGLRenderingContext.cullFace */
   void cullFace(int mode) native "WebGLRenderingContext_cullFace_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteBuffer */
   void deleteBuffer(WebGLBuffer buffer) native "WebGLRenderingContext_deleteBuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteFramebuffer */
   void deleteFramebuffer(WebGLFramebuffer framebuffer) native "WebGLRenderingContext_deleteFramebuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteProgram */
   void deleteProgram(WebGLProgram program) native "WebGLRenderingContext_deleteProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteRenderbuffer */
   void deleteRenderbuffer(WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteShader */
   void deleteShader(WebGLShader shader) native "WebGLRenderingContext_deleteShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.deleteTexture */
   void deleteTexture(WebGLTexture texture) native "WebGLRenderingContext_deleteTexture_Callback";
 
+
+  /** @domName WebGLRenderingContext.depthFunc */
   void depthFunc(int func) native "WebGLRenderingContext_depthFunc_Callback";
 
+
+  /** @domName WebGLRenderingContext.depthMask */
   void depthMask(bool flag) native "WebGLRenderingContext_depthMask_Callback";
 
+
+  /** @domName WebGLRenderingContext.depthRange */
   void depthRange(num zNear, num zFar) native "WebGLRenderingContext_depthRange_Callback";
 
+
+  /** @domName WebGLRenderingContext.detachShader */
   void detachShader(WebGLProgram program, WebGLShader shader) native "WebGLRenderingContext_detachShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.disable */
   void disable(int cap) native "WebGLRenderingContext_disable_Callback";
 
+
+  /** @domName WebGLRenderingContext.disableVertexAttribArray */
   void disableVertexAttribArray(int index) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
 
+
+  /** @domName WebGLRenderingContext.drawArrays */
   void drawArrays(int mode, int first, int count) native "WebGLRenderingContext_drawArrays_Callback";
 
+
+  /** @domName WebGLRenderingContext.drawElements */
   void drawElements(int mode, int count, int type, int offset) native "WebGLRenderingContext_drawElements_Callback";
 
+
+  /** @domName WebGLRenderingContext.enable */
   void enable(int cap) native "WebGLRenderingContext_enable_Callback";
 
+
+  /** @domName WebGLRenderingContext.enableVertexAttribArray */
   void enableVertexAttribArray(int index) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
 
+
+  /** @domName WebGLRenderingContext.finish */
   void finish() native "WebGLRenderingContext_finish_Callback";
 
+
+  /** @domName WebGLRenderingContext.flush */
   void flush() native "WebGLRenderingContext_flush_Callback";
 
+
+  /** @domName WebGLRenderingContext.framebufferRenderbuffer */
   void framebufferRenderbuffer(int target, int attachment, int renderbuffertarget, WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.framebufferTexture2D */
   void framebufferTexture2D(int target, int attachment, int textarget, WebGLTexture texture, int level) native "WebGLRenderingContext_framebufferTexture2D_Callback";
 
+
+  /** @domName WebGLRenderingContext.frontFace */
   void frontFace(int mode) native "WebGLRenderingContext_frontFace_Callback";
 
+
+  /** @domName WebGLRenderingContext.generateMipmap */
   void generateMipmap(int target) native "WebGLRenderingContext_generateMipmap_Callback";
 
+
+  /** @domName WebGLRenderingContext.getActiveAttrib */
   WebGLActiveInfo getActiveAttrib(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveAttrib_Callback";
 
+
+  /** @domName WebGLRenderingContext.getActiveUniform */
   WebGLActiveInfo getActiveUniform(WebGLProgram program, int index) native "WebGLRenderingContext_getActiveUniform_Callback";
 
+
+  /** @domName WebGLRenderingContext.getAttachedShaders */
   void getAttachedShaders(WebGLProgram program) native "WebGLRenderingContext_getAttachedShaders_Callback";
 
+
+  /** @domName WebGLRenderingContext.getAttribLocation */
   int getAttribLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getAttribLocation_Callback";
 
+
+  /** @domName WebGLRenderingContext.getBufferParameter */
   Object getBufferParameter(int target, int pname) native "WebGLRenderingContext_getBufferParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getContextAttributes */
   WebGLContextAttributes getContextAttributes() native "WebGLRenderingContext_getContextAttributes_Callback";
 
+
+  /** @domName WebGLRenderingContext.getError */
   int getError() native "WebGLRenderingContext_getError_Callback";
 
+
+  /** @domName WebGLRenderingContext.getExtension */
   Object getExtension(String name) native "WebGLRenderingContext_getExtension_Callback";
 
+
+  /** @domName WebGLRenderingContext.getFramebufferAttachmentParameter */
   Object getFramebufferAttachmentParameter(int target, int attachment, int pname) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getParameter */
   Object getParameter(int pname) native "WebGLRenderingContext_getParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getProgramInfoLog */
   String getProgramInfoLog(WebGLProgram program) native "WebGLRenderingContext_getProgramInfoLog_Callback";
 
+
+  /** @domName WebGLRenderingContext.getProgramParameter */
   Object getProgramParameter(WebGLProgram program, int pname) native "WebGLRenderingContext_getProgramParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getRenderbufferParameter */
   Object getRenderbufferParameter(int target, int pname) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getShaderInfoLog */
   String getShaderInfoLog(WebGLShader shader) native "WebGLRenderingContext_getShaderInfoLog_Callback";
 
+
+  /** @domName WebGLRenderingContext.getShaderParameter */
   Object getShaderParameter(WebGLShader shader, int pname) native "WebGLRenderingContext_getShaderParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getShaderPrecisionFormat */
   WebGLShaderPrecisionFormat getShaderPrecisionFormat(int shadertype, int precisiontype) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
 
+
+  /** @domName WebGLRenderingContext.getShaderSource */
   String getShaderSource(WebGLShader shader) native "WebGLRenderingContext_getShaderSource_Callback";
 
+
+  /** @domName WebGLRenderingContext.getSupportedExtensions */
   List<String> getSupportedExtensions() native "WebGLRenderingContext_getSupportedExtensions_Callback";
 
+
+  /** @domName WebGLRenderingContext.getTexParameter */
   Object getTexParameter(int target, int pname) native "WebGLRenderingContext_getTexParameter_Callback";
 
+
+  /** @domName WebGLRenderingContext.getUniform */
   Object getUniform(WebGLProgram program, WebGLUniformLocation location) native "WebGLRenderingContext_getUniform_Callback";
 
+
+  /** @domName WebGLRenderingContext.getUniformLocation */
   WebGLUniformLocation getUniformLocation(WebGLProgram program, String name) native "WebGLRenderingContext_getUniformLocation_Callback";
 
+
+  /** @domName WebGLRenderingContext.getVertexAttrib */
   Object getVertexAttrib(int index, int pname) native "WebGLRenderingContext_getVertexAttrib_Callback";
 
+
+  /** @domName WebGLRenderingContext.getVertexAttribOffset */
   int getVertexAttribOffset(int index, int pname) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
 
+
+  /** @domName WebGLRenderingContext.hint */
   void hint(int target, int mode) native "WebGLRenderingContext_hint_Callback";
 
+
+  /** @domName WebGLRenderingContext.isBuffer */
   bool isBuffer(WebGLBuffer buffer) native "WebGLRenderingContext_isBuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.isContextLost */
   bool isContextLost() native "WebGLRenderingContext_isContextLost_Callback";
 
+
+  /** @domName WebGLRenderingContext.isEnabled */
   bool isEnabled(int cap) native "WebGLRenderingContext_isEnabled_Callback";
 
+
+  /** @domName WebGLRenderingContext.isFramebuffer */
   bool isFramebuffer(WebGLFramebuffer framebuffer) native "WebGLRenderingContext_isFramebuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.isProgram */
   bool isProgram(WebGLProgram program) native "WebGLRenderingContext_isProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.isRenderbuffer */
   bool isRenderbuffer(WebGLRenderbuffer renderbuffer) native "WebGLRenderingContext_isRenderbuffer_Callback";
 
+
+  /** @domName WebGLRenderingContext.isShader */
   bool isShader(WebGLShader shader) native "WebGLRenderingContext_isShader_Callback";
 
+
+  /** @domName WebGLRenderingContext.isTexture */
   bool isTexture(WebGLTexture texture) native "WebGLRenderingContext_isTexture_Callback";
 
+
+  /** @domName WebGLRenderingContext.lineWidth */
   void lineWidth(num width) native "WebGLRenderingContext_lineWidth_Callback";
 
+
+  /** @domName WebGLRenderingContext.linkProgram */
   void linkProgram(WebGLProgram program) native "WebGLRenderingContext_linkProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.pixelStorei */
   void pixelStorei(int pname, int param) native "WebGLRenderingContext_pixelStorei_Callback";
 
+
+  /** @domName WebGLRenderingContext.polygonOffset */
   void polygonOffset(num factor, num units) native "WebGLRenderingContext_polygonOffset_Callback";
 
+
+  /** @domName WebGLRenderingContext.readPixels */
   void readPixels(int x, int y, int width, int height, int format, int type, ArrayBufferView pixels) native "WebGLRenderingContext_readPixels_Callback";
 
+
+  /** @domName WebGLRenderingContext.releaseShaderCompiler */
   void releaseShaderCompiler() native "WebGLRenderingContext_releaseShaderCompiler_Callback";
 
+
+  /** @domName WebGLRenderingContext.renderbufferStorage */
   void renderbufferStorage(int target, int internalformat, int width, int height) native "WebGLRenderingContext_renderbufferStorage_Callback";
 
+
+  /** @domName WebGLRenderingContext.sampleCoverage */
   void sampleCoverage(num value, bool invert) native "WebGLRenderingContext_sampleCoverage_Callback";
 
+
+  /** @domName WebGLRenderingContext.scissor */
   void scissor(int x, int y, int width, int height) native "WebGLRenderingContext_scissor_Callback";
 
+
+  /** @domName WebGLRenderingContext.shaderSource */
   void shaderSource(WebGLShader shader, String string) native "WebGLRenderingContext_shaderSource_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilFunc */
   void stencilFunc(int func, int ref, int mask) native "WebGLRenderingContext_stencilFunc_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilFuncSeparate */
   void stencilFuncSeparate(int face, int func, int ref, int mask) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilMask */
   void stencilMask(int mask) native "WebGLRenderingContext_stencilMask_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilMaskSeparate */
   void stencilMaskSeparate(int face, int mask) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilOp */
   void stencilOp(int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOp_Callback";
 
+
+  /** @domName WebGLRenderingContext.stencilOpSeparate */
   void stencilOpSeparate(int face, int fail, int zfail, int zpass) native "WebGLRenderingContext_stencilOpSeparate_Callback";
 
   void texImage2D(/*unsigned long*/ target, /*long*/ level, /*unsigned long*/ internalformat, /*long*/ format_OR_width, /*long*/ height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, [/*unsigned long*/ format, /*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
@@ -40750,18 +33050,32 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName WebGLRenderingContext.texImage2D_1 */
   void _texImage2D_1(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video, format, type, pixels) native "WebGLRenderingContext_texImage2D_1_Callback";
 
+
+  /** @domName WebGLRenderingContext.texImage2D_2 */
   void _texImage2D_2(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_2_Callback";
 
+
+  /** @domName WebGLRenderingContext.texImage2D_3 */
   void _texImage2D_3(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_3_Callback";
 
+
+  /** @domName WebGLRenderingContext.texImage2D_4 */
   void _texImage2D_4(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_4_Callback";
 
+
+  /** @domName WebGLRenderingContext.texImage2D_5 */
   void _texImage2D_5(target, level, internalformat, format_OR_width, height_OR_type, border_OR_canvas_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texImage2D_5_Callback";
 
+
+  /** @domName WebGLRenderingContext.texParameterf */
   void texParameterf(int target, int pname, num param) native "WebGLRenderingContext_texParameterf_Callback";
 
+
+  /** @domName WebGLRenderingContext.texParameteri */
   void texParameteri(int target, int pname, int param) native "WebGLRenderingContext_texParameteri_Callback";
 
   void texSubImage2D(/*unsigned long*/ target, /*long*/ level, /*long*/ xoffset, /*long*/ yoffset, /*long*/ format_OR_width, /*long*/ height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, [/*unsigned long*/ type, /*ArrayBufferView*/ pixels]) {
@@ -40788,76 +33102,148 @@
     throw "Incorrect number or type of arguments";
   }
 
+
+  /** @domName WebGLRenderingContext.texSubImage2D_1 */
   void _texSubImage2D_1(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video, type, pixels) native "WebGLRenderingContext_texSubImage2D_1_Callback";
 
+
+  /** @domName WebGLRenderingContext.texSubImage2D_2 */
   void _texSubImage2D_2(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_2_Callback";
 
+
+  /** @domName WebGLRenderingContext.texSubImage2D_3 */
   void _texSubImage2D_3(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_3_Callback";
 
+
+  /** @domName WebGLRenderingContext.texSubImage2D_4 */
   void _texSubImage2D_4(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_4_Callback";
 
+
+  /** @domName WebGLRenderingContext.texSubImage2D_5 */
   void _texSubImage2D_5(target, level, xoffset, yoffset, format_OR_width, height_OR_type, canvas_OR_format_OR_image_OR_pixels_OR_video) native "WebGLRenderingContext_texSubImage2D_5_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform1f */
   void uniform1f(WebGLUniformLocation location, num x) native "WebGLRenderingContext_uniform1f_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform1fv */
   void uniform1fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform1fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform1i */
   void uniform1i(WebGLUniformLocation location, int x) native "WebGLRenderingContext_uniform1i_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform1iv */
   void uniform1iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform1iv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform2f */
   void uniform2f(WebGLUniformLocation location, num x, num y) native "WebGLRenderingContext_uniform2f_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform2fv */
   void uniform2fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform2fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform2i */
   void uniform2i(WebGLUniformLocation location, int x, int y) native "WebGLRenderingContext_uniform2i_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform2iv */
   void uniform2iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform2iv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform3f */
   void uniform3f(WebGLUniformLocation location, num x, num y, num z) native "WebGLRenderingContext_uniform3f_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform3fv */
   void uniform3fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform3fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform3i */
   void uniform3i(WebGLUniformLocation location, int x, int y, int z) native "WebGLRenderingContext_uniform3i_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform3iv */
   void uniform3iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform3iv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform4f */
   void uniform4f(WebGLUniformLocation location, num x, num y, num z, num w) native "WebGLRenderingContext_uniform4f_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform4fv */
   void uniform4fv(WebGLUniformLocation location, Float32Array v) native "WebGLRenderingContext_uniform4fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform4i */
   void uniform4i(WebGLUniformLocation location, int x, int y, int z, int w) native "WebGLRenderingContext_uniform4i_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniform4iv */
   void uniform4iv(WebGLUniformLocation location, Int32Array v) native "WebGLRenderingContext_uniform4iv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniformMatrix2fv */
   void uniformMatrix2fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniformMatrix3fv */
   void uniformMatrix3fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.uniformMatrix4fv */
   void uniformMatrix4fv(WebGLUniformLocation location, bool transpose, Float32Array array) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.useProgram */
   void useProgram(WebGLProgram program) native "WebGLRenderingContext_useProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.validateProgram */
   void validateProgram(WebGLProgram program) native "WebGLRenderingContext_validateProgram_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib1f */
   void vertexAttrib1f(int indx, num x) native "WebGLRenderingContext_vertexAttrib1f_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib1fv */
   void vertexAttrib1fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib2f */
   void vertexAttrib2f(int indx, num x, num y) native "WebGLRenderingContext_vertexAttrib2f_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib2fv */
   void vertexAttrib2fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib3f */
   void vertexAttrib3f(int indx, num x, num y, num z) native "WebGLRenderingContext_vertexAttrib3f_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib3fv */
   void vertexAttrib3fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib4f */
   void vertexAttrib4f(int indx, num x, num y, num z, num w) native "WebGLRenderingContext_vertexAttrib4f_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttrib4fv */
   void vertexAttrib4fv(int indx, Float32Array values) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
 
+
+  /** @domName WebGLRenderingContext.vertexAttribPointer */
   void vertexAttribPointer(int indx, int size, int type, bool normalized, int stride, int offset) native "WebGLRenderingContext_vertexAttribPointer_Callback";
 
+
+  /** @domName WebGLRenderingContext.viewport */
   void viewport(int x, int y, int width, int height) native "WebGLRenderingContext_viewport_Callback";
 
 }
@@ -40868,15 +33254,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLShader
-abstract class WebGLShader {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLShaderImpl extends NativeFieldWrapperClass1 implements WebGLShader {
+class WebGLShader extends NativeFieldWrapperClass1 {
+  WebGLShader.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -40886,29 +33265,19 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLShaderPrecisionFormat
-abstract class WebGLShaderPrecisionFormat {
+class WebGLShaderPrecisionFormat extends NativeFieldWrapperClass1 {
+  WebGLShaderPrecisionFormat.internal();
+
 
   /** @domName WebGLShaderPrecisionFormat.precision */
-  int get precision;
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMax */
-  int get rangeMax;
-
-  /** @domName WebGLShaderPrecisionFormat.rangeMin */
-  int get rangeMin;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLShaderPrecisionFormatImpl extends NativeFieldWrapperClass1 implements WebGLShaderPrecisionFormat {
-
   int get precision native "WebGLShaderPrecisionFormat_precision_Getter";
 
+
+  /** @domName WebGLShaderPrecisionFormat.rangeMax */
   int get rangeMax native "WebGLShaderPrecisionFormat_rangeMax_Getter";
 
+
+  /** @domName WebGLShaderPrecisionFormat.rangeMin */
   int get rangeMin native "WebGLShaderPrecisionFormat_rangeMin_Getter";
 
 }
@@ -40919,15 +33288,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLTexture
-abstract class WebGLTexture {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLTextureImpl extends NativeFieldWrapperClass1 implements WebGLTexture {
+class WebGLTexture extends NativeFieldWrapperClass1 {
+  WebGLTexture.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -40937,15 +33299,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLUniformLocation
-abstract class WebGLUniformLocation {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLUniformLocationImpl extends NativeFieldWrapperClass1 implements WebGLUniformLocation {
+class WebGLUniformLocation extends NativeFieldWrapperClass1 {
+  WebGLUniformLocation.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -40955,15 +33310,8 @@
 // WARNING: Do not edit - generated code.
 
 /// @domName WebGLVertexArrayObjectOES
-abstract class WebGLVertexArrayObjectOES {
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebGLVertexArrayObjectOESImpl extends NativeFieldWrapperClass1 implements WebGLVertexArrayObjectOES {
+class WebGLVertexArrayObjectOES extends NativeFieldWrapperClass1 {
+  WebGLVertexArrayObjectOES.internal();
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -40972,8 +33320,2680 @@
 
 // WARNING: Do not edit - generated code.
 
-class _WebKitAnimationListImpl extends NativeFieldWrapperClass1 implements List<Animation> {
+/// @domName WebKitCSSFilterValue
+class WebKitCSSFilterValue extends _CSSValueList {
+  WebKitCSSFilterValue.internal(): super.internal();
 
+  static const int CSS_FILTER_BLUR = 10;
+
+  static const int CSS_FILTER_BRIGHTNESS = 8;
+
+  static const int CSS_FILTER_CONTRAST = 9;
+
+  static const int CSS_FILTER_CUSTOM = 12;
+
+  static const int CSS_FILTER_DROP_SHADOW = 11;
+
+  static const int CSS_FILTER_GRAYSCALE = 2;
+
+  static const int CSS_FILTER_HUE_ROTATE = 5;
+
+  static const int CSS_FILTER_INVERT = 6;
+
+  static const int CSS_FILTER_OPACITY = 7;
+
+  static const int CSS_FILTER_REFERENCE = 1;
+
+  static const int CSS_FILTER_SATURATE = 4;
+
+  static const int CSS_FILTER_SEPIA = 3;
+
+
+  /** @domName WebKitCSSFilterValue.operationType */
+  int get operationType native "WebKitCSSFilterValue_operationType_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName WebKitNamedFlow
+class WebKitNamedFlow extends EventTarget {
+  WebKitNamedFlow.internal(): super.internal();
+
+
+  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
+  int get firstEmptyRegionIndex native "WebKitNamedFlow_firstEmptyRegionIndex_Getter";
+
+
+  /** @domName WebKitNamedFlow.name */
+  String get name native "WebKitNamedFlow_name_Getter";
+
+
+  /** @domName WebKitNamedFlow.overset */
+  bool get overset native "WebKitNamedFlow_overset_Getter";
+
+
+  /** @domName WebKitNamedFlow.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_addEventListener_Callback";
+
+
+  /** @domName WebKitNamedFlow.dispatchEvent */
+  bool $dom_dispatchEvent(Event event) native "WebKitNamedFlow_dispatchEvent_Callback";
+
+
+  /** @domName WebKitNamedFlow.getContent */
+  List<Node> getContent() native "WebKitNamedFlow_getContent_Callback";
+
+
+  /** @domName WebKitNamedFlow.getRegions */
+  List<Node> getRegions() native "WebKitNamedFlow_getRegions_Callback";
+
+
+  /** @domName WebKitNamedFlow.getRegionsByContent */
+  List<Node> getRegionsByContent(Node contentNode) native "WebKitNamedFlow_getRegionsByContent_Callback";
+
+
+  /** @domName WebKitNamedFlow.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_removeEventListener_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class WebSocket extends EventTarget {
+  factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
+  WebSocket.internal(): super.internal();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WebSocketEvents get on =>
+    new WebSocketEvents(this);
+
+  static const int CLOSED = 3;
+
+  static const int CLOSING = 2;
+
+  static const int CONNECTING = 0;
+
+  static const int OPEN = 1;
+
+
+  /** @domName WebSocket.URL */
+  String get URL native "WebSocket_URL_Getter";
+
+
+  /** @domName WebSocket.binaryType */
+  String get binaryType native "WebSocket_binaryType_Getter";
+
+
+  /** @domName WebSocket.binaryType */
+  void set binaryType(String value) native "WebSocket_binaryType_Setter";
+
+
+  /** @domName WebSocket.bufferedAmount */
+  int get bufferedAmount native "WebSocket_bufferedAmount_Getter";
+
+
+  /** @domName WebSocket.extensions */
+  String get extensions native "WebSocket_extensions_Getter";
+
+
+  /** @domName WebSocket.protocol */
+  String get protocol native "WebSocket_protocol_Getter";
+
+
+  /** @domName WebSocket.readyState */
+  int get readyState native "WebSocket_readyState_Getter";
+
+
+  /** @domName WebSocket.url */
+  String get url native "WebSocket_url_Getter";
+
+
+  /** @domName WebSocket.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_addEventListener_Callback";
+
+  void close([/*unsigned short*/ code, /*DOMString*/ reason]) {
+    if (?reason) {
+      _close_1(code, reason);
+      return;
+    }
+    if (?code) {
+      _close_2(code);
+      return;
+    }
+    _close_3();
+  }
+
+
+  /** @domName WebSocket.close_1 */
+  void _close_1(code, reason) native "WebSocket_close_1_Callback";
+
+
+  /** @domName WebSocket.close_2 */
+  void _close_2(code) native "WebSocket_close_2_Callback";
+
+
+  /** @domName WebSocket.close_3 */
+  void _close_3() native "WebSocket_close_3_Callback";
+
+
+  /** @domName WebSocket.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "WebSocket_dispatchEvent_Callback";
+
+
+  /** @domName WebSocket.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_removeEventListener_Callback";
+
+
+  /** @domName WebSocket.send */
+  void send(data) native "WebSocket_send_Callback";
+
+}
+
+class WebSocketEvents extends Events {
+  WebSocketEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get close => this['close'];
+
+  EventListenerList get error => this['error'];
+
+  EventListenerList get message => this['message'];
+
+  EventListenerList get open => this['open'];
+}
+// 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 WheelEvent extends MouseEvent {
+  WheelEvent.internal(): super.internal();
+
+
+  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
+  bool get webkitDirectionInvertedFromDevice native "WheelEvent_webkitDirectionInvertedFromDevice_Getter";
+
+
+  /** @domName WheelEvent.wheelDeltaX */
+  int get $dom_wheelDeltaX native "WheelEvent_wheelDeltaX_Getter";
+
+
+  /** @domName WheelEvent.wheelDeltaY */
+  int get $dom_wheelDeltaY native "WheelEvent_wheelDeltaY_Getter";
+
+
+  /** @domName WheelEvent.initWebKitWheelEvent */
+  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "WheelEvent_initWebKitWheelEvent_Callback";
+
+
+  /** @domName WheelEvent.deltaX */
+  num get deltaX => $dom_wheelDeltaX;
+  /** @domName WheelEvent.deltaY */
+  num get deltaY => $dom_wheelDeltaY;
+  /** @domName WheelEvent.deltaMode */
+  int get deltaMode => 0;
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName Worker
+class Worker extends AbstractWorker {
+
+  factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
+  Worker.internal(): super.internal();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WorkerEvents get on =>
+    new WorkerEvents(this);
+
+
+  /** @domName Worker.postMessage */
+  void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]) native "Worker_postMessage_Callback";
+
+
+  /** @domName Worker.terminate */
+  void terminate() native "Worker_terminate_Callback";
+
+}
+
+class WorkerEvents extends AbstractWorkerEvents {
+  WorkerEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get message => this['message'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName WorkerContext
+class WorkerContext extends EventTarget {
+  WorkerContext.internal(): super.internal();
+
+  /**
+   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
+   */
+  WorkerContextEvents get on =>
+    new WorkerContextEvents(this);
+
+  static const int PERSISTENT = 1;
+
+  static const int TEMPORARY = 0;
+
+
+  /** @domName WorkerContext.indexedDB */
+  IDBFactory get indexedDB native "WorkerContext_indexedDB_Getter";
+
+
+  /** @domName WorkerContext.location */
+  WorkerLocation get location native "WorkerContext_location_Getter";
+
+
+  /** @domName WorkerContext.navigator */
+  WorkerNavigator get navigator native "WorkerContext_navigator_Getter";
+
+
+  /** @domName WorkerContext.self */
+  WorkerContext get self native "WorkerContext_self_Getter";
+
+
+  /** @domName WorkerContext.webkitIndexedDB */
+  IDBFactory get webkitIndexedDB native "WorkerContext_webkitIndexedDB_Getter";
+
+
+  /** @domName WorkerContext.webkitNotifications */
+  NotificationCenter get webkitNotifications native "WorkerContext_webkitNotifications_Getter";
+
+
+  /** @domName WorkerContext.addEventListener */
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_addEventListener_Callback";
+
+
+  /** @domName WorkerContext.clearInterval */
+  void clearInterval(int handle) native "WorkerContext_clearInterval_Callback";
+
+
+  /** @domName WorkerContext.clearTimeout */
+  void clearTimeout(int handle) native "WorkerContext_clearTimeout_Callback";
+
+
+  /** @domName WorkerContext.close */
+  void close() native "WorkerContext_close_Callback";
+
+
+  /** @domName WorkerContext.dispatchEvent */
+  bool $dom_dispatchEvent(Event evt) native "WorkerContext_dispatchEvent_Callback";
+
+
+  /** @domName WorkerContext.importScripts */
+  void importScripts() native "WorkerContext_importScripts_Callback";
+
+
+  /** @domName WorkerContext.openDatabase */
+  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabase_Callback";
+
+
+  /** @domName WorkerContext.openDatabaseSync */
+  DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabaseSync_Callback";
+
+
+  /** @domName WorkerContext.removeEventListener */
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_removeEventListener_Callback";
+
+
+  /** @domName WorkerContext.setInterval */
+  int setInterval(TimeoutHandler handler, int timeout) native "WorkerContext_setInterval_Callback";
+
+
+  /** @domName WorkerContext.setTimeout */
+  int setTimeout(TimeoutHandler handler, int timeout) native "WorkerContext_setTimeout_Callback";
+
+
+  /** @domName WorkerContext.webkitRequestFileSystem */
+  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native "WorkerContext_webkitRequestFileSystem_Callback";
+
+
+  /** @domName WorkerContext.webkitRequestFileSystemSync */
+  DOMFileSystemSync webkitRequestFileSystemSync(int type, int size) native "WorkerContext_webkitRequestFileSystemSync_Callback";
+
+
+  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
+  EntrySync webkitResolveLocalFileSystemSyncURL(String url) native "WorkerContext_webkitResolveLocalFileSystemSyncURL_Callback";
+
+
+  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
+  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native "WorkerContext_webkitResolveLocalFileSystemURL_Callback";
+
+}
+
+class WorkerContextEvents extends Events {
+  WorkerContextEvents(EventTarget _ptr) : super(_ptr);
+
+  EventListenerList get error => this['error'];
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName WorkerLocation
+class WorkerLocation extends NativeFieldWrapperClass1 {
+  WorkerLocation.internal();
+
+
+  /** @domName WorkerLocation.hash */
+  String get hash native "WorkerLocation_hash_Getter";
+
+
+  /** @domName WorkerLocation.host */
+  String get host native "WorkerLocation_host_Getter";
+
+
+  /** @domName WorkerLocation.hostname */
+  String get hostname native "WorkerLocation_hostname_Getter";
+
+
+  /** @domName WorkerLocation.href */
+  String get href native "WorkerLocation_href_Getter";
+
+
+  /** @domName WorkerLocation.pathname */
+  String get pathname native "WorkerLocation_pathname_Getter";
+
+
+  /** @domName WorkerLocation.port */
+  String get port native "WorkerLocation_port_Getter";
+
+
+  /** @domName WorkerLocation.protocol */
+  String get protocol native "WorkerLocation_protocol_Getter";
+
+
+  /** @domName WorkerLocation.search */
+  String get search native "WorkerLocation_search_Getter";
+
+
+  /** @domName WorkerLocation.toString */
+  String toString() native "WorkerLocation_toString_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName WorkerNavigator
+class WorkerNavigator extends NativeFieldWrapperClass1 {
+  WorkerNavigator.internal();
+
+
+  /** @domName WorkerNavigator.appName */
+  String get appName native "WorkerNavigator_appName_Getter";
+
+
+  /** @domName WorkerNavigator.appVersion */
+  String get appVersion native "WorkerNavigator_appVersion_Getter";
+
+
+  /** @domName WorkerNavigator.onLine */
+  bool get onLine native "WorkerNavigator_onLine_Getter";
+
+
+  /** @domName WorkerNavigator.platform */
+  String get platform native "WorkerNavigator_platform_Getter";
+
+
+  /** @domName WorkerNavigator.userAgent */
+  String get userAgent native "WorkerNavigator_userAgent_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XMLSerializer
+class XMLSerializer extends NativeFieldWrapperClass1 {
+
+  factory XMLSerializer() => _XMLSerializerFactoryProvider.createXMLSerializer();
+  XMLSerializer.internal();
+
+
+  /** @domName XMLSerializer.serializeToString */
+  String serializeToString(Node node) native "XMLSerializer_serializeToString_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XPathEvaluator
+class XPathEvaluator extends NativeFieldWrapperClass1 {
+
+  factory XPathEvaluator() => _XPathEvaluatorFactoryProvider.createXPathEvaluator();
+  XPathEvaluator.internal();
+
+
+  /** @domName XPathEvaluator.createExpression */
+  XPathExpression createExpression(String expression, XPathNSResolver resolver) native "XPathEvaluator_createExpression_Callback";
+
+
+  /** @domName XPathEvaluator.createNSResolver */
+  XPathNSResolver createNSResolver(Node nodeResolver) native "XPathEvaluator_createNSResolver_Callback";
+
+
+  /** @domName XPathEvaluator.evaluate */
+  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native "XPathEvaluator_evaluate_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XPathException
+class XPathException extends NativeFieldWrapperClass1 {
+  XPathException.internal();
+
+  static const int INVALID_EXPRESSION_ERR = 51;
+
+  static const int TYPE_ERR = 52;
+
+
+  /** @domName XPathException.code */
+  int get code native "XPathException_code_Getter";
+
+
+  /** @domName XPathException.message */
+  String get message native "XPathException_message_Getter";
+
+
+  /** @domName XPathException.name */
+  String get name native "XPathException_name_Getter";
+
+
+  /** @domName XPathException.toString */
+  String toString() native "XPathException_toString_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XPathExpression
+class XPathExpression extends NativeFieldWrapperClass1 {
+  XPathExpression.internal();
+
+
+  /** @domName XPathExpression.evaluate */
+  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native "XPathExpression_evaluate_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XPathNSResolver
+class XPathNSResolver extends NativeFieldWrapperClass1 {
+  XPathNSResolver.internal();
+
+
+  /** @domName XPathNSResolver.lookupNamespaceURI */
+  String lookupNamespaceURI(String prefix) native "XPathNSResolver_lookupNamespaceURI_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XPathResult
+class XPathResult extends NativeFieldWrapperClass1 {
+  XPathResult.internal();
+
+  static const int ANY_TYPE = 0;
+
+  static const int ANY_UNORDERED_NODE_TYPE = 8;
+
+  static const int BOOLEAN_TYPE = 3;
+
+  static const int FIRST_ORDERED_NODE_TYPE = 9;
+
+  static const int NUMBER_TYPE = 1;
+
+  static const int ORDERED_NODE_ITERATOR_TYPE = 5;
+
+  static const int ORDERED_NODE_SNAPSHOT_TYPE = 7;
+
+  static const int STRING_TYPE = 2;
+
+  static const int UNORDERED_NODE_ITERATOR_TYPE = 4;
+
+  static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
+
+
+  /** @domName XPathResult.booleanValue */
+  bool get booleanValue native "XPathResult_booleanValue_Getter";
+
+
+  /** @domName XPathResult.invalidIteratorState */
+  bool get invalidIteratorState native "XPathResult_invalidIteratorState_Getter";
+
+
+  /** @domName XPathResult.numberValue */
+  num get numberValue native "XPathResult_numberValue_Getter";
+
+
+  /** @domName XPathResult.resultType */
+  int get resultType native "XPathResult_resultType_Getter";
+
+
+  /** @domName XPathResult.singleNodeValue */
+  Node get singleNodeValue native "XPathResult_singleNodeValue_Getter";
+
+
+  /** @domName XPathResult.snapshotLength */
+  int get snapshotLength native "XPathResult_snapshotLength_Getter";
+
+
+  /** @domName XPathResult.stringValue */
+  String get stringValue native "XPathResult_stringValue_Getter";
+
+
+  /** @domName XPathResult.iterateNext */
+  Node iterateNext() native "XPathResult_iterateNext_Callback";
+
+
+  /** @domName XPathResult.snapshotItem */
+  Node snapshotItem(int index) native "XPathResult_snapshotItem_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName XSLTProcessor
+class XSLTProcessor extends NativeFieldWrapperClass1 {
+
+  factory XSLTProcessor() => _XSLTProcessorFactoryProvider.createXSLTProcessor();
+  XSLTProcessor.internal();
+
+
+  /** @domName XSLTProcessor.clearParameters */
+  void clearParameters() native "XSLTProcessor_clearParameters_Callback";
+
+
+  /** @domName XSLTProcessor.getParameter */
+  String getParameter(String namespaceURI, String localName) native "XSLTProcessor_getParameter_Callback";
+
+
+  /** @domName XSLTProcessor.importStylesheet */
+  void importStylesheet(Node stylesheet) native "XSLTProcessor_importStylesheet_Callback";
+
+
+  /** @domName XSLTProcessor.removeParameter */
+  void removeParameter(String namespaceURI, String localName) native "XSLTProcessor_removeParameter_Callback";
+
+
+  /** @domName XSLTProcessor.reset */
+  void reset() native "XSLTProcessor_reset_Callback";
+
+
+  /** @domName XSLTProcessor.setParameter */
+  void setParameter(String namespaceURI, String localName, String value) native "XSLTProcessor_setParameter_Callback";
+
+
+  /** @domName XSLTProcessor.transformToDocument */
+  Document transformToDocument(Node source) native "XSLTProcessor_transformToDocument_Callback";
+
+
+  /** @domName XSLTProcessor.transformToFragment */
+  DocumentFragment transformToFragment(Node source, Document docVal) native "XSLTProcessor_transformToFragment_Callback";
+
+}
+// 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 _ArrayBufferFactoryProvider {
+  static ArrayBuffer createArrayBuffer(int length) native "ArrayBuffer_constructor_Callback";
+}
+// 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 _AudioElementFactoryProvider {
+  static AudioElement createAudioElement([String src]) native "HTMLAudioElement_constructor_Callback";
+}
+// 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 _BlobFactoryProvider {
+  static Blob createBlob(List blobParts, [String type, String endings]) native "Blob_constructor_Callback";
+}
+// 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 _CSSMatrixFactoryProvider {
+  static CSSMatrix createCSSMatrix([String cssValue]) native "WebKitCSSMatrix_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName CSSRuleList
+class _CSSRuleList extends NativeFieldWrapperClass1 implements List<CSSRule> {
+  _CSSRuleList.internal();
+
+
+  /** @domName CSSRuleList.length */
+  int get length native "CSSRuleList_length_Getter";
+
+  CSSRule operator[](int index) native "CSSRuleList_item_Callback";
+
+  void operator[]=(int index, CSSRule value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<CSSRule> mixins.
+  // CSSRule is the element type.
+
+  // From Iterable<CSSRule>:
+
+  Iterator<CSSRule> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<CSSRule>(this);
+  }
+
+  // From Collection<CSSRule>:
+
+  void add(CSSRule value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(CSSRule value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<CSSRule> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(CSSRule element) => _Collections.contains(this, element);
+
+  void forEach(void f(CSSRule element)) => _Collections.forEach(this, f);
+
+  Collection map(f(CSSRule element)) => _Collections.map(this, [], f);
+
+  Collection<CSSRule> filter(bool f(CSSRule element)) =>
+     _Collections.filter(this, <CSSRule>[], f);
+
+  bool every(bool f(CSSRule element)) => _Collections.every(this, f);
+
+  bool some(bool f(CSSRule element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<CSSRule>:
+
+  void sort([Comparator<CSSRule> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(CSSRule element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(CSSRule element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  CSSRule get last => this[length - 1];
+
+  CSSRule removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<CSSRule> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [CSSRule initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<CSSRule> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <CSSRule>[]);
+
+  // -- end List<CSSRule> mixins.
+
+
+  /** @domName CSSRuleList.item */
+  CSSRule item(int index) native "CSSRuleList_item_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName CSSValueList
+class _CSSValueList extends CSSValue implements List<CSSValue> {
+  _CSSValueList.internal(): super.internal();
+
+
+  /** @domName CSSValueList.length */
+  int get length native "CSSValueList_length_Getter";
+
+  CSSValue operator[](int index) native "CSSValueList_item_Callback";
+
+  void operator[]=(int index, CSSValue value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<CSSValue> mixins.
+  // CSSValue is the element type.
+
+  // From Iterable<CSSValue>:
+
+  Iterator<CSSValue> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<CSSValue>(this);
+  }
+
+  // From Collection<CSSValue>:
+
+  void add(CSSValue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(CSSValue value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<CSSValue> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(CSSValue element) => _Collections.contains(this, element);
+
+  void forEach(void f(CSSValue element)) => _Collections.forEach(this, f);
+
+  Collection map(f(CSSValue element)) => _Collections.map(this, [], f);
+
+  Collection<CSSValue> filter(bool f(CSSValue element)) =>
+     _Collections.filter(this, <CSSValue>[], f);
+
+  bool every(bool f(CSSValue element)) => _Collections.every(this, f);
+
+  bool some(bool f(CSSValue element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<CSSValue>:
+
+  void sort([Comparator<CSSValue> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(CSSValue element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(CSSValue element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  CSSValue get last => this[length - 1];
+
+  CSSValue removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<CSSValue> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [CSSValue initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<CSSValue> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <CSSValue>[]);
+
+  // -- end List<CSSValue> mixins.
+
+
+  /** @domName CSSValueList.item */
+  CSSValue item(int index) native "CSSValueList_item_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName ClientRectList
+class _ClientRectList extends NativeFieldWrapperClass1 implements List<ClientRect> {
+  _ClientRectList.internal();
+
+
+  /** @domName ClientRectList.length */
+  int get length native "ClientRectList_length_Getter";
+
+  ClientRect operator[](int index) native "ClientRectList_item_Callback";
+
+  void operator[]=(int index, ClientRect value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<ClientRect> mixins.
+  // ClientRect is the element type.
+
+  // From Iterable<ClientRect>:
+
+  Iterator<ClientRect> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<ClientRect>(this);
+  }
+
+  // From Collection<ClientRect>:
+
+  void add(ClientRect value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(ClientRect value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<ClientRect> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(ClientRect element) => _Collections.contains(this, element);
+
+  void forEach(void f(ClientRect element)) => _Collections.forEach(this, f);
+
+  Collection map(f(ClientRect element)) => _Collections.map(this, [], f);
+
+  Collection<ClientRect> filter(bool f(ClientRect element)) =>
+     _Collections.filter(this, <ClientRect>[], f);
+
+  bool every(bool f(ClientRect element)) => _Collections.every(this, f);
+
+  bool some(bool f(ClientRect element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<ClientRect>:
+
+  void sort([Comparator<ClientRect> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(ClientRect element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(ClientRect element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  ClientRect get last => this[length - 1];
+
+  ClientRect removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<ClientRect> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [ClientRect initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<ClientRect> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <ClientRect>[]);
+
+  // -- end List<ClientRect> mixins.
+
+
+  /** @domName ClientRectList.item */
+  ClientRect item(int index) native "ClientRectList_item_Callback";
+
+}
+// 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 _DOMParserFactoryProvider {
+  static DOMParser createDOMParser() native "DOMParser_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName DOMStringList
+class _DOMStringList extends NativeFieldWrapperClass1 implements List<String> {
+  _DOMStringList.internal();
+
+
+  /** @domName DOMStringList.length */
+  int get length native "DOMStringList_length_Getter";
+
+  String operator[](int index) native "DOMStringList_item_Callback";
+
+  void operator[]=(int index, String value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<String> mixins.
+  // String is the element type.
+
+  // From Iterable<String>:
+
+  Iterator<String> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<String>(this);
+  }
+
+  // From Collection<String>:
+
+  void add(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(String value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<String> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  // contains() defined by IDL.
+
+  void forEach(void f(String element)) => _Collections.forEach(this, f);
+
+  Collection map(f(String element)) => _Collections.map(this, [], f);
+
+  Collection<String> filter(bool f(String element)) =>
+     _Collections.filter(this, <String>[], f);
+
+  bool every(bool f(String element)) => _Collections.every(this, f);
+
+  bool some(bool f(String element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<String>:
+
+  void sort([Comparator<String> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(String element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(String element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  String get last => this[length - 1];
+
+  String removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<String> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [String initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<String> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <String>[]);
+
+  // -- end List<String> mixins.
+
+
+  /** @domName DOMStringList.contains */
+  bool contains(String string) native "DOMStringList_contains_Callback";
+
+
+  /** @domName DOMStringList.item */
+  String item(int index) native "DOMStringList_item_Callback";
+
+}
+// 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 _DataViewFactoryProvider {
+  static DataView createDataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) native "DataView_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName HTMLDocument
+class _Document_Merged extends Document {
+  _Document_Merged.internal(): super.internal();
+
+
+  /** @domName HTMLDocument.activeElement */
+  Element get activeElement native "HTMLDocument_activeElement_Getter";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName HTMLElement
+class _Element_Merged extends Element {
+  _Element_Merged.internal(): super.internal();
+
+
+  /** @domName HTMLElement.children */
+  HTMLCollection get $dom_children native "HTMLElement_children_Getter";
+
+
+  /** @domName HTMLElement.contentEditable */
+  String get contentEditable native "HTMLElement_contentEditable_Getter";
+
+
+  /** @domName HTMLElement.contentEditable */
+  void set contentEditable(String value) native "HTMLElement_contentEditable_Setter";
+
+
+  /** @domName HTMLElement.dir */
+  String get dir native "HTMLElement_dir_Getter";
+
+
+  /** @domName HTMLElement.dir */
+  void set dir(String value) native "HTMLElement_dir_Setter";
+
+
+  /** @domName HTMLElement.draggable */
+  bool get draggable native "HTMLElement_draggable_Getter";
+
+
+  /** @domName HTMLElement.draggable */
+  void set draggable(bool value) native "HTMLElement_draggable_Setter";
+
+
+  /** @domName HTMLElement.hidden */
+  bool get hidden native "HTMLElement_hidden_Getter";
+
+
+  /** @domName HTMLElement.hidden */
+  void set hidden(bool value) native "HTMLElement_hidden_Setter";
+
+
+  /** @domName HTMLElement.id */
+  String get id native "HTMLElement_id_Getter";
+
+
+  /** @domName HTMLElement.id */
+  void set id(String value) native "HTMLElement_id_Setter";
+
+
+  /** @domName HTMLElement.innerHTML */
+  String get innerHTML native "HTMLElement_innerHTML_Getter";
+
+
+  /** @domName HTMLElement.innerHTML */
+  void set innerHTML(String value) native "HTMLElement_innerHTML_Setter";
+
+
+  /** @domName HTMLElement.isContentEditable */
+  bool get isContentEditable native "HTMLElement_isContentEditable_Getter";
+
+
+  /** @domName HTMLElement.lang */
+  String get lang native "HTMLElement_lang_Getter";
+
+
+  /** @domName HTMLElement.lang */
+  void set lang(String value) native "HTMLElement_lang_Setter";
+
+
+  /** @domName HTMLElement.outerHTML */
+  String get outerHTML native "HTMLElement_outerHTML_Getter";
+
+
+  /** @domName HTMLElement.spellcheck */
+  bool get spellcheck native "HTMLElement_spellcheck_Getter";
+
+
+  /** @domName HTMLElement.spellcheck */
+  void set spellcheck(bool value) native "HTMLElement_spellcheck_Setter";
+
+
+  /** @domName HTMLElement.tabIndex */
+  int get tabIndex native "HTMLElement_tabIndex_Getter";
+
+
+  /** @domName HTMLElement.tabIndex */
+  void set tabIndex(int value) native "HTMLElement_tabIndex_Setter";
+
+
+  /** @domName HTMLElement.title */
+  String get title native "HTMLElement_title_Getter";
+
+
+  /** @domName HTMLElement.title */
+  void set title(String value) native "HTMLElement_title_Setter";
+
+
+  /** @domName HTMLElement.translate */
+  bool get translate native "HTMLElement_translate_Getter";
+
+
+  /** @domName HTMLElement.translate */
+  void set translate(bool value) native "HTMLElement_translate_Setter";
+
+
+  /** @domName HTMLElement.webkitdropzone */
+  String get webkitdropzone native "HTMLElement_webkitdropzone_Getter";
+
+
+  /** @domName HTMLElement.webkitdropzone */
+  void set webkitdropzone(String value) native "HTMLElement_webkitdropzone_Setter";
+
+
+  /** @domName HTMLElement.click */
+  void click() native "HTMLElement_click_Callback";
+
+
+  /** @domName HTMLElement.insertAdjacentElement */
+  Element insertAdjacentElement(String where, Element element) native "HTMLElement_insertAdjacentElement_Callback";
+
+
+  /** @domName HTMLElement.insertAdjacentHTML */
+  void insertAdjacentHTML(String where, String html) native "HTMLElement_insertAdjacentHTML_Callback";
+
+
+  /** @domName HTMLElement.insertAdjacentText */
+  void insertAdjacentText(String where, String text) native "HTMLElement_insertAdjacentText_Callback";
+
+}
+// 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 {
+
+
+  static AnchorElement createAnchorElement([String href]) {
+    AnchorElement _e = document.$dom_createElement("a");
+    if (href != null) _e.href = href;
+    return _e;
+  }
+
+  static AreaElement createAreaElement() {
+    AreaElement _e = document.$dom_createElement("area");
+    return _e;
+  }
+
+  static BRElement createBRElement() {
+    BRElement _e = document.$dom_createElement("br");
+    return _e;
+  }
+
+  static BaseElement createBaseElement() {
+    BaseElement _e = document.$dom_createElement("base");
+    return _e;
+  }
+
+  static BodyElement createBodyElement() {
+    BodyElement _e = document.$dom_createElement("body");
+    return _e;
+  }
+
+  static ButtonElement createButtonElement() {
+    ButtonElement _e = document.$dom_createElement("button");
+    return _e;
+  }
+
+  static CanvasElement createCanvasElement([int width, int height]) {
+    CanvasElement _e = document.$dom_createElement("canvas");
+    if (width != null) _e.width = width;
+    if (height != null) _e.height = height;
+    return _e;
+  }
+
+  static ContentElement createContentElement() {
+    ContentElement _e = document.$dom_createElement("content");
+    return _e;
+  }
+
+  static DListElement createDListElement() {
+    DListElement _e = document.$dom_createElement("dl");
+    return _e;
+  }
+
+  static DataListElement createDataListElement() {
+    DataListElement _e = document.$dom_createElement("datalist");
+    return _e;
+  }
+
+  static DetailsElement createDetailsElement() {
+    DetailsElement _e = document.$dom_createElement("details");
+    return _e;
+  }
+
+  static DivElement createDivElement() {
+    DivElement _e = document.$dom_createElement("div");
+    return _e;
+  }
+
+  static EmbedElement createEmbedElement() {
+    EmbedElement _e = document.$dom_createElement("embed");
+    return _e;
+  }
+
+  static FieldSetElement createFieldSetElement() {
+    FieldSetElement _e = document.$dom_createElement("fieldset");
+    return _e;
+  }
+
+  static FormElement createFormElement() {
+    FormElement _e = document.$dom_createElement("form");
+    return _e;
+  }
+
+  static HRElement createHRElement() {
+    HRElement _e = document.$dom_createElement("hr");
+    return _e;
+  }
+
+  static HeadElement createHeadElement() {
+    HeadElement _e = document.$dom_createElement("head");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h1() {
+    HeadingElement _e = document.$dom_createElement("h1");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h2() {
+    HeadingElement _e = document.$dom_createElement("h2");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h3() {
+    HeadingElement _e = document.$dom_createElement("h3");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h4() {
+    HeadingElement _e = document.$dom_createElement("h4");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h5() {
+    HeadingElement _e = document.$dom_createElement("h5");
+    return _e;
+  }
+
+  static HeadingElement createHeadingElement_h6() {
+    HeadingElement _e = document.$dom_createElement("h6");
+    return _e;
+  }
+
+  static HtmlElement createHtmlElement() {
+    HtmlElement _e = document.$dom_createElement("html");
+    return _e;
+  }
+
+  static IFrameElement createIFrameElement() {
+    IFrameElement _e = document.$dom_createElement("iframe");
+    return _e;
+  }
+
+  static ImageElement createImageElement([String src, int width, int height]) {
+    ImageElement _e = document.$dom_createElement("img");
+    if (src != null) _e.src = src;
+    if (width != null) _e.width = width;
+    if (height != null) _e.height = height;
+    return _e;
+  }
+
+  static InputElement createInputElement([String type]) {
+    InputElement _e = document.$dom_createElement("input");
+    if (type != null) _e.type = type;
+    return _e;
+  }
+
+  static KeygenElement createKeygenElement() {
+    KeygenElement _e = document.$dom_createElement("keygen");
+    return _e;
+  }
+
+  static LIElement createLIElement() {
+    LIElement _e = document.$dom_createElement("li");
+    return _e;
+  }
+
+  static LabelElement createLabelElement() {
+    LabelElement _e = document.$dom_createElement("label");
+    return _e;
+  }
+
+  static LegendElement createLegendElement() {
+    LegendElement _e = document.$dom_createElement("legend");
+    return _e;
+  }
+
+  static LinkElement createLinkElement() {
+    LinkElement _e = document.$dom_createElement("link");
+    return _e;
+  }
+
+  static MapElement createMapElement() {
+    MapElement _e = document.$dom_createElement("map");
+    return _e;
+  }
+
+  static MenuElement createMenuElement() {
+    MenuElement _e = document.$dom_createElement("menu");
+    return _e;
+  }
+
+  static MeterElement createMeterElement() {
+    MeterElement _e = document.$dom_createElement("meter");
+    return _e;
+  }
+
+  static OListElement createOListElement() {
+    OListElement _e = document.$dom_createElement("ol");
+    return _e;
+  }
+
+  static ObjectElement createObjectElement() {
+    ObjectElement _e = document.$dom_createElement("object");
+    return _e;
+  }
+
+  static OptGroupElement createOptGroupElement() {
+    OptGroupElement _e = document.$dom_createElement("optgroup");
+    return _e;
+  }
+
+  static OutputElement createOutputElement() {
+    OutputElement _e = document.$dom_createElement("output");
+    return _e;
+  }
+
+  static ParagraphElement createParagraphElement() {
+    ParagraphElement _e = document.$dom_createElement("p");
+    return _e;
+  }
+
+  static ParamElement createParamElement() {
+    ParamElement _e = document.$dom_createElement("param");
+    return _e;
+  }
+
+  static PreElement createPreElement() {
+    PreElement _e = document.$dom_createElement("pre");
+    return _e;
+  }
+
+  static ProgressElement createProgressElement() {
+    ProgressElement _e = document.$dom_createElement("progress");
+    return _e;
+  }
+
+  static ScriptElement createScriptElement() {
+    ScriptElement _e = document.$dom_createElement("script");
+    return _e;
+  }
+
+  static SelectElement createSelectElement() {
+    SelectElement _e = document.$dom_createElement("select");
+    return _e;
+  }
+
+  static SourceElement createSourceElement() {
+    SourceElement _e = document.$dom_createElement("source");
+    return _e;
+  }
+
+  static SpanElement createSpanElement() {
+    SpanElement _e = document.$dom_createElement("span");
+    return _e;
+  }
+
+  static StyleElement createStyleElement() {
+    StyleElement _e = document.$dom_createElement("style");
+    return _e;
+  }
+
+  static TableCaptionElement createTableCaptionElement() {
+    TableCaptionElement _e = document.$dom_createElement("caption");
+    return _e;
+  }
+
+  static TableCellElement createTableCellElement() {
+    TableCellElement _e = document.$dom_createElement("td");
+    return _e;
+  }
+
+  static TableColElement createTableColElement() {
+    TableColElement _e = document.$dom_createElement("col");
+    return _e;
+  }
+
+  static TableElement createTableElement() {
+    TableElement _e = document.$dom_createElement("table");
+    return _e;
+  }
+
+  static TableRowElement createTableRowElement() {
+    TableRowElement _e = document.$dom_createElement("tr");
+    return _e;
+  }
+
+  static TextAreaElement createTextAreaElement() {
+    TextAreaElement _e = document.$dom_createElement("textarea");
+    return _e;
+  }
+
+  static TitleElement createTitleElement() {
+    TitleElement _e = document.$dom_createElement("title");
+    return _e;
+  }
+
+  static TrackElement createTrackElement() {
+    TrackElement _e = document.$dom_createElement("track");
+    return _e;
+  }
+
+  static UListElement createUListElement() {
+    UListElement _e = document.$dom_createElement("ul");
+    return _e;
+  }
+
+  static VideoElement createVideoElement() {
+    VideoElement _e = document.$dom_createElement("video");
+    return _e;
+  }
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName EntryArray
+class _EntryArray extends NativeFieldWrapperClass1 implements List<Entry> {
+  _EntryArray.internal();
+
+
+  /** @domName EntryArray.length */
+  int get length native "EntryArray_length_Getter";
+
+  Entry operator[](int index) native "EntryArray_item_Callback";
+
+  void operator[]=(int index, Entry value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Entry> mixins.
+  // Entry is the element type.
+
+  // From Iterable<Entry>:
+
+  Iterator<Entry> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Entry>(this);
+  }
+
+  // From Collection<Entry>:
+
+  void add(Entry value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Entry value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Entry> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Entry element) => _Collections.contains(this, element);
+
+  void forEach(void f(Entry element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Entry element)) => _Collections.map(this, [], f);
+
+  Collection<Entry> filter(bool f(Entry element)) =>
+     _Collections.filter(this, <Entry>[], f);
+
+  bool every(bool f(Entry element)) => _Collections.every(this, f);
+
+  bool some(bool f(Entry element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Entry>:
+
+  void sort([Comparator<Entry> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Entry element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Entry element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Entry get last => this[length - 1];
+
+  Entry removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Entry> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Entry initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Entry> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Entry>[]);
+
+  // -- end List<Entry> mixins.
+
+
+  /** @domName EntryArray.item */
+  Entry item(int index) native "EntryArray_item_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName EntryArraySync
+class _EntryArraySync extends NativeFieldWrapperClass1 implements List<EntrySync> {
+  _EntryArraySync.internal();
+
+
+  /** @domName EntryArraySync.length */
+  int get length native "EntryArraySync_length_Getter";
+
+  EntrySync operator[](int index) native "EntryArraySync_item_Callback";
+
+  void operator[]=(int index, EntrySync value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<EntrySync> mixins.
+  // EntrySync is the element type.
+
+  // From Iterable<EntrySync>:
+
+  Iterator<EntrySync> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<EntrySync>(this);
+  }
+
+  // From Collection<EntrySync>:
+
+  void add(EntrySync value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(EntrySync value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<EntrySync> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(EntrySync element) => _Collections.contains(this, element);
+
+  void forEach(void f(EntrySync element)) => _Collections.forEach(this, f);
+
+  Collection map(f(EntrySync element)) => _Collections.map(this, [], f);
+
+  Collection<EntrySync> filter(bool f(EntrySync element)) =>
+     _Collections.filter(this, <EntrySync>[], f);
+
+  bool every(bool f(EntrySync element)) => _Collections.every(this, f);
+
+  bool some(bool f(EntrySync element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<EntrySync>:
+
+  void sort([Comparator<EntrySync> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(EntrySync element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(EntrySync element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  EntrySync get last => this[length - 1];
+
+  EntrySync removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<EntrySync> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [EntrySync initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<EntrySync> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <EntrySync>[]);
+
+  // -- end List<EntrySync> mixins.
+
+
+  /** @domName EntryArraySync.item */
+  EntrySync item(int index) native "EntryArraySync_item_Callback";
+
+}
+// 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 _EventSourceFactoryProvider {
+  static EventSource createEventSource(String scriptUrl) native "EventSource_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName FileList
+class _FileList extends NativeFieldWrapperClass1 implements List<File> {
+  _FileList.internal();
+
+
+  /** @domName FileList.length */
+  int get length native "FileList_length_Getter";
+
+  File operator[](int index) native "FileList_item_Callback";
+
+  void operator[]=(int index, File value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<File> mixins.
+  // File is the element type.
+
+  // From Iterable<File>:
+
+  Iterator<File> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<File>(this);
+  }
+
+  // From Collection<File>:
+
+  void add(File value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(File value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<File> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(File element) => _Collections.contains(this, element);
+
+  void forEach(void f(File element)) => _Collections.forEach(this, f);
+
+  Collection map(f(File element)) => _Collections.map(this, [], f);
+
+  Collection<File> filter(bool f(File element)) =>
+     _Collections.filter(this, <File>[], f);
+
+  bool every(bool f(File element)) => _Collections.every(this, f);
+
+  bool some(bool f(File element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<File>:
+
+  void sort([Comparator<File> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(File element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(File element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  File get last => this[length - 1];
+
+  File removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<File> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [File initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<File> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <File>[]);
+
+  // -- end List<File> mixins.
+
+
+  /** @domName FileList.item */
+  File item(int index) native "FileList_item_Callback";
+
+}
+// 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 _FileReaderFactoryProvider {
+  static FileReader createFileReader() native "FileReader_constructor_Callback";
+}
+// 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 _FileReaderSyncFactoryProvider {
+  static FileReaderSync createFileReaderSync() native "FileReaderSync_constructor_Callback";
+}
+// 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 _FormDataFactoryProvider {
+  static FormData createFormData([FormElement form]) native "DOMFormData_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName GamepadList
+class _GamepadList extends NativeFieldWrapperClass1 implements List<Gamepad> {
+  _GamepadList.internal();
+
+
+  /** @domName GamepadList.length */
+  int get length native "GamepadList_length_Getter";
+
+  Gamepad operator[](int index) native "GamepadList_item_Callback";
+
+  void operator[]=(int index, Gamepad value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Gamepad> mixins.
+  // Gamepad is the element type.
+
+  // From Iterable<Gamepad>:
+
+  Iterator<Gamepad> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<Gamepad>(this);
+  }
+
+  // From Collection<Gamepad>:
+
+  void add(Gamepad value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(Gamepad value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<Gamepad> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(Gamepad element) => _Collections.contains(this, element);
+
+  void forEach(void f(Gamepad element)) => _Collections.forEach(this, f);
+
+  Collection map(f(Gamepad element)) => _Collections.map(this, [], f);
+
+  Collection<Gamepad> filter(bool f(Gamepad element)) =>
+     _Collections.filter(this, <Gamepad>[], f);
+
+  bool every(bool f(Gamepad element)) => _Collections.every(this, f);
+
+  bool some(bool f(Gamepad element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<Gamepad>:
+
+  void sort([Comparator<Gamepad> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(Gamepad element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(Gamepad element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  Gamepad get last => this[length - 1];
+
+  Gamepad removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<Gamepad> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [Gamepad initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<Gamepad> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <Gamepad>[]);
+
+  // -- end List<Gamepad> mixins.
+
+
+  /** @domName GamepadList.item */
+  Gamepad item(int index) native "GamepadList_item_Callback";
+
+}
+// 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 _HttpRequestFactoryProvider {
+  static HttpRequest createHttpRequest() => _createHttpRequest();
+  static HttpRequest _createHttpRequest() native "XMLHttpRequest_constructor_Callback";
+
+  static HttpRequest createHttpRequest_get(String url,
+                                     onSuccess(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onSuccess, false);
+
+  static HttpRequest createHttpRequest_getWithCredentials(String url,
+                                     onSuccess(HttpRequest request)) =>
+      _HttpRequestUtils.get(url, onSuccess, true);
+}
+// 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 _IceCandidateFactoryProvider {
+  static IceCandidate createIceCandidate(String label, String candidateLine) native "IceCandidate_constructor_Callback";
+}
+// 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 _MediaControllerFactoryProvider {
+  static MediaController createMediaController() native "MediaController_constructor_Callback";
+}
+// 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 _MediaSourceFactoryProvider {
+  static MediaSource createMediaSource() native "MediaSource_constructor_Callback";
+}
+// 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 _MediaStreamFactoryProvider {
+  static MediaStream createMediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) native "MediaStream_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName MediaStreamList
+class _MediaStreamList extends NativeFieldWrapperClass1 implements List<MediaStream> {
+  _MediaStreamList.internal();
+
+
+  /** @domName MediaStreamList.length */
+  int get length native "MediaStreamList_length_Getter";
+
+  MediaStream operator[](int index) native "MediaStreamList_item_Callback";
+
+  void operator[]=(int index, MediaStream value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<MediaStream> mixins.
+  // MediaStream is the element type.
+
+  // From Iterable<MediaStream>:
+
+  Iterator<MediaStream> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<MediaStream>(this);
+  }
+
+  // From Collection<MediaStream>:
+
+  void add(MediaStream value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(MediaStream value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<MediaStream> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(MediaStream element) => _Collections.contains(this, element);
+
+  void forEach(void f(MediaStream element)) => _Collections.forEach(this, f);
+
+  Collection map(f(MediaStream element)) => _Collections.map(this, [], f);
+
+  Collection<MediaStream> filter(bool f(MediaStream element)) =>
+     _Collections.filter(this, <MediaStream>[], f);
+
+  bool every(bool f(MediaStream element)) => _Collections.every(this, f);
+
+  bool some(bool f(MediaStream element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<MediaStream>:
+
+  void sort([Comparator<MediaStream> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(MediaStream element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(MediaStream element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  MediaStream get last => this[length - 1];
+
+  MediaStream removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<MediaStream> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [MediaStream initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<MediaStream> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <MediaStream>[]);
+
+  // -- end List<MediaStream> mixins.
+
+
+  /** @domName MediaStreamList.item */
+  MediaStream item(int index) native "MediaStreamList_item_Callback";
+
+}
+// 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 _MessageChannelFactoryProvider {
+  static MessageChannel createMessageChannel() native "MessageChannel_constructor_Callback";
+}
+// 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 _MutationObserverFactoryProvider {
+  static MutationObserver createMutationObserver(MutationCallback callback) native "MutationObserver_constructor_Callback";
+}
+// 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 _NotificationFactoryProvider {
+  static Notification createNotification(String title, [Map options]) native "Notification_constructor_Callback";
+}
+// 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 _OptionElementFactoryProvider {
+  static OptionElement createOptionElement([String data, String value, bool defaultSelected, bool selected]) native "HTMLOptionElement_constructor_Callback";
+}
+// 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 _PeerConnection00FactoryProvider {
+  static PeerConnection00 createPeerConnection00(String serverConfiguration, IceCallback iceCallback) native "PeerConnection00_constructor_Callback";
+}
+// 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 _RTCIceCandidateFactoryProvider {
+  static RTCIceCandidate createRTCIceCandidate(Map dictionary) native "RTCIceCandidate_constructor_Callback";
+}
+// 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 _RTCPeerConnectionFactoryProvider {
+  static RTCPeerConnection createRTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) native "RTCPeerConnection_constructor_Callback";
+}
+// 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 _RTCSessionDescriptionFactoryProvider {
+  static RTCSessionDescription createRTCSessionDescription(Map dictionary) native "RTCSessionDescription_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName SVGElementInstanceList
+class _SVGElementInstanceList extends NativeFieldWrapperClass1 implements List<SVGElementInstance> {
+  _SVGElementInstanceList.internal();
+
+
+  /** @domName SVGElementInstanceList.length */
+  int get length native "SVGElementInstanceList_length_Getter";
+
+  SVGElementInstance operator[](int index) native "SVGElementInstanceList_item_Callback";
+
+  void operator[]=(int index, SVGElementInstance value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SVGElementInstance> mixins.
+  // SVGElementInstance is the element type.
+
+  // From Iterable<SVGElementInstance>:
+
+  Iterator<SVGElementInstance> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SVGElementInstance>(this);
+  }
+
+  // From Collection<SVGElementInstance>:
+
+  void add(SVGElementInstance value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SVGElementInstance value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SVGElementInstance> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SVGElementInstance element) => _Collections.contains(this, element);
+
+  void forEach(void f(SVGElementInstance element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SVGElementInstance element)) => _Collections.map(this, [], f);
+
+  Collection<SVGElementInstance> filter(bool f(SVGElementInstance element)) =>
+     _Collections.filter(this, <SVGElementInstance>[], f);
+
+  bool every(bool f(SVGElementInstance element)) => _Collections.every(this, f);
+
+  bool some(bool f(SVGElementInstance element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SVGElementInstance>:
+
+  void sort([Comparator<SVGElementInstance> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SVGElementInstance element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SVGElementInstance element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SVGElementInstance get last => this[length - 1];
+
+  SVGElementInstance removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SVGElementInstance> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SVGElementInstance initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SVGElementInstance> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SVGElementInstance>[]);
+
+  // -- end List<SVGElementInstance> mixins.
+
+
+  /** @domName SVGElementInstanceList.item */
+  SVGElementInstance item(int index) native "SVGElementInstanceList_item_Callback";
+
+}
+// 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 _SessionDescriptionFactoryProvider {
+  static SessionDescription createSessionDescription(String sdp) native "SessionDescription_constructor_Callback";
+}
+// 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 _ShadowRootFactoryProvider {
+  static ShadowRoot createShadowRoot(Element host) native "ShadowRoot_constructor_Callback";
+}
+// 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 _SharedWorkerFactoryProvider {
+  static SharedWorker createSharedWorker(String scriptURL, [String name]) native "SharedWorker_constructor_Callback";
+}
+// 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 _SpeechGrammarFactoryProvider {
+  static SpeechGrammar createSpeechGrammar() native "SpeechGrammar_constructor_Callback";
+}
+// 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 _SpeechGrammarListFactoryProvider {
+  static SpeechGrammarList createSpeechGrammarList() native "SpeechGrammarList_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName SpeechInputResultList
+class _SpeechInputResultList extends NativeFieldWrapperClass1 implements List<SpeechInputResult> {
+  _SpeechInputResultList.internal();
+
+
+  /** @domName SpeechInputResultList.length */
+  int get length native "SpeechInputResultList_length_Getter";
+
+  SpeechInputResult operator[](int index) native "SpeechInputResultList_item_Callback";
+
+  void operator[]=(int index, SpeechInputResult value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SpeechInputResult> mixins.
+  // SpeechInputResult is the element type.
+
+  // From Iterable<SpeechInputResult>:
+
+  Iterator<SpeechInputResult> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SpeechInputResult>(this);
+  }
+
+  // From Collection<SpeechInputResult>:
+
+  void add(SpeechInputResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SpeechInputResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SpeechInputResult> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SpeechInputResult element) => _Collections.contains(this, element);
+
+  void forEach(void f(SpeechInputResult element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SpeechInputResult element)) => _Collections.map(this, [], f);
+
+  Collection<SpeechInputResult> filter(bool f(SpeechInputResult element)) =>
+     _Collections.filter(this, <SpeechInputResult>[], f);
+
+  bool every(bool f(SpeechInputResult element)) => _Collections.every(this, f);
+
+  bool some(bool f(SpeechInputResult element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SpeechInputResult>:
+
+  void sort([Comparator<SpeechInputResult> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SpeechInputResult element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SpeechInputResult element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SpeechInputResult get last => this[length - 1];
+
+  SpeechInputResult removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SpeechInputResult> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SpeechInputResult initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SpeechInputResult> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SpeechInputResult>[]);
+
+  // -- end List<SpeechInputResult> mixins.
+
+
+  /** @domName SpeechInputResultList.item */
+  SpeechInputResult item(int index) native "SpeechInputResultList_item_Callback";
+
+}
+// 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 _SpeechRecognitionFactoryProvider {
+  static SpeechRecognition createSpeechRecognition() native "SpeechRecognition_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName SpeechRecognitionResultList
+class _SpeechRecognitionResultList extends NativeFieldWrapperClass1 implements List<SpeechRecognitionResult> {
+  _SpeechRecognitionResultList.internal();
+
+
+  /** @domName SpeechRecognitionResultList.length */
+  int get length native "SpeechRecognitionResultList_length_Getter";
+
+  SpeechRecognitionResult operator[](int index) native "SpeechRecognitionResultList_item_Callback";
+
+  void operator[]=(int index, SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<SpeechRecognitionResult> mixins.
+  // SpeechRecognitionResult is the element type.
+
+  // From Iterable<SpeechRecognitionResult>:
+
+  Iterator<SpeechRecognitionResult> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<SpeechRecognitionResult>(this);
+  }
+
+  // From Collection<SpeechRecognitionResult>:
+
+  void add(SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(SpeechRecognitionResult value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<SpeechRecognitionResult> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(SpeechRecognitionResult element) => _Collections.contains(this, element);
+
+  void forEach(void f(SpeechRecognitionResult element)) => _Collections.forEach(this, f);
+
+  Collection map(f(SpeechRecognitionResult element)) => _Collections.map(this, [], f);
+
+  Collection<SpeechRecognitionResult> filter(bool f(SpeechRecognitionResult element)) =>
+     _Collections.filter(this, <SpeechRecognitionResult>[], f);
+
+  bool every(bool f(SpeechRecognitionResult element)) => _Collections.every(this, f);
+
+  bool some(bool f(SpeechRecognitionResult element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<SpeechRecognitionResult>:
+
+  void sort([Comparator<SpeechRecognitionResult> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(SpeechRecognitionResult element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(SpeechRecognitionResult element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  SpeechRecognitionResult get last => this[length - 1];
+
+  SpeechRecognitionResult removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<SpeechRecognitionResult> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [SpeechRecognitionResult initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<SpeechRecognitionResult> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <SpeechRecognitionResult>[]);
+
+  // -- end List<SpeechRecognitionResult> mixins.
+
+
+  /** @domName SpeechRecognitionResultList.item */
+  SpeechRecognitionResult item(int index) native "SpeechRecognitionResultList_item_Callback";
+
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName StyleSheetList
+class _StyleSheetList extends NativeFieldWrapperClass1 implements List<StyleSheet> {
+  _StyleSheetList.internal();
+
+
+  /** @domName StyleSheetList.length */
+  int get length native "StyleSheetList_length_Getter";
+
+  StyleSheet operator[](int index) native "StyleSheetList_item_Callback";
+
+  void operator[]=(int index, StyleSheet value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<StyleSheet> mixins.
+  // StyleSheet is the element type.
+
+  // From Iterable<StyleSheet>:
+
+  Iterator<StyleSheet> iterator() {
+    // Note: NodeLists are not fixed size. And most probably length shouldn't
+    // be cached in both iterator _and_ forEach method. For now caching it
+    // for consistency.
+    return new _FixedSizeListIterator<StyleSheet>(this);
+  }
+
+  // From Collection<StyleSheet>:
+
+  void add(StyleSheet value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addLast(StyleSheet value) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  void addAll(Collection<StyleSheet> collection) {
+    throw new UnsupportedError("Cannot add to immutable List.");
+  }
+
+  bool contains(StyleSheet element) => _Collections.contains(this, element);
+
+  void forEach(void f(StyleSheet element)) => _Collections.forEach(this, f);
+
+  Collection map(f(StyleSheet element)) => _Collections.map(this, [], f);
+
+  Collection<StyleSheet> filter(bool f(StyleSheet element)) =>
+     _Collections.filter(this, <StyleSheet>[], f);
+
+  bool every(bool f(StyleSheet element)) => _Collections.every(this, f);
+
+  bool some(bool f(StyleSheet element)) => _Collections.some(this, f);
+
+  bool get isEmpty => this.length == 0;
+
+  // From List<StyleSheet>:
+
+  void sort([Comparator<StyleSheet> compare = Comparable.compare]) {
+    throw new UnsupportedError("Cannot sort immutable List.");
+  }
+
+  int indexOf(StyleSheet element, [int start = 0]) =>
+      _Lists.indexOf(this, element, start, this.length);
+
+  int lastIndexOf(StyleSheet element, [int start]) {
+    if (start == null) start = length - 1;
+    return _Lists.lastIndexOf(this, element, start);
+  }
+
+  StyleSheet get last => this[length - 1];
+
+  StyleSheet removeLast() {
+    throw new UnsupportedError("Cannot removeLast on immutable List.");
+  }
+
+  void setRange(int start, int rangeLength, List<StyleSheet> from, [int startFrom]) {
+    throw new UnsupportedError("Cannot setRange on immutable List.");
+  }
+
+  void removeRange(int start, int rangeLength) {
+    throw new UnsupportedError("Cannot removeRange on immutable List.");
+  }
+
+  void insertRange(int start, int rangeLength, [StyleSheet initialValue]) {
+    throw new UnsupportedError("Cannot insertRange on immutable List.");
+  }
+
+  List<StyleSheet> getRange(int start, int rangeLength) =>
+      _Lists.getRange(this, start, rangeLength, <StyleSheet>[]);
+
+  // -- end List<StyleSheet> mixins.
+
+
+  /** @domName StyleSheetList.item */
+  StyleSheet item(int index) native "StyleSheetList_item_Callback";
+
+}
+// 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 _TextTrackCueFactoryProvider {
+  static TextTrackCue createTextTrackCue(num startTime, num endTime, String text) native "TextTrackCue_constructor_Callback";
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+/// @domName WebKitAnimationList
+class _WebKitAnimationList extends NativeFieldWrapperClass1 implements List<Animation> {
+  _WebKitAnimationList.internal();
+
+
+  /** @domName WebKitAnimationList.length */
   int get length native "WebKitAnimationList_length_Getter";
 
   Animation operator[](int index) native "WebKitAnimationList_item_Callback";
@@ -41059,6 +36079,8 @@
 
   // -- end List<Animation> mixins.
 
+
+  /** @domName WebKitAnimationList.item */
   Animation item(int index) native "WebKitAnimationList_item_Callback";
 
 }
@@ -41066,1427 +36088,6 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitCSSFilterValue
-abstract class WebKitCSSFilterValue implements List<CSSValue> {
-
-  static const int CSS_FILTER_BLUR = 10;
-
-  static const int CSS_FILTER_BRIGHTNESS = 8;
-
-  static const int CSS_FILTER_CONTRAST = 9;
-
-  static const int CSS_FILTER_CUSTOM = 12;
-
-  static const int CSS_FILTER_DROP_SHADOW = 11;
-
-  static const int CSS_FILTER_GRAYSCALE = 2;
-
-  static const int CSS_FILTER_HUE_ROTATE = 5;
-
-  static const int CSS_FILTER_INVERT = 6;
-
-  static const int CSS_FILTER_OPACITY = 7;
-
-  static const int CSS_FILTER_REFERENCE = 1;
-
-  static const int CSS_FILTER_SATURATE = 4;
-
-  static const int CSS_FILTER_SEPIA = 3;
-
-  /** @domName WebKitCSSFilterValue.operationType */
-  int get operationType;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebKitCSSFilterValueImpl extends _CSSValueListImpl implements WebKitCSSFilterValue {
-
-  int get operationType native "WebKitCSSFilterValue_operationType_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WebKitNamedFlow
-abstract class WebKitNamedFlow implements EventTarget {
-
-  /** @domName WebKitNamedFlow.firstEmptyRegionIndex */
-  int get firstEmptyRegionIndex;
-
-  /** @domName WebKitNamedFlow.name */
-  String get name;
-
-  /** @domName WebKitNamedFlow.overset */
-  bool get overset;
-
-  /** @domName WebKitNamedFlow.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebKitNamedFlow.dispatchEvent */
-  bool $dom_dispatchEvent(Event event);
-
-  /** @domName WebKitNamedFlow.getContent */
-  List<Node> getContent();
-
-  /** @domName WebKitNamedFlow.getRegions */
-  List<Node> getRegions();
-
-  /** @domName WebKitNamedFlow.getRegionsByContent */
-  List<Node> getRegionsByContent(Node contentNode);
-
-  /** @domName WebKitNamedFlow.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebKitNamedFlowImpl extends _EventTargetImpl implements WebKitNamedFlow {
-
-  int get firstEmptyRegionIndex native "WebKitNamedFlow_firstEmptyRegionIndex_Getter";
-
-  String get name native "WebKitNamedFlow_name_Getter";
-
-  bool get overset native "WebKitNamedFlow_overset_Getter";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_addEventListener_Callback";
-
-  bool $dom_dispatchEvent(Event event) native "WebKitNamedFlow_dispatchEvent_Callback";
-
-  List<Node> getContent() native "WebKitNamedFlow_getContent_Callback";
-
-  List<Node> getRegions() native "WebKitNamedFlow_getRegions_Callback";
-
-  List<Node> getRegionsByContent(Node contentNode) native "WebKitNamedFlow_getRegionsByContent_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_removeEventListener_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-
-/// @domName WebSocket
-abstract class WebSocket implements EventTarget {
-
-  factory WebSocket(String url) => _WebSocketFactoryProvider.createWebSocket(url);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WebSocketEvents get on;
-
-  static const int CLOSED = 3;
-
-  static const int CLOSING = 2;
-
-  static const int CONNECTING = 0;
-
-  static const int OPEN = 1;
-
-  /** @domName WebSocket.URL */
-  String get URL;
-
-  /** @domName WebSocket.binaryType */
-  String binaryType;
-
-  /** @domName WebSocket.bufferedAmount */
-  int get bufferedAmount;
-
-  /** @domName WebSocket.extensions */
-  String get extensions;
-
-  /** @domName WebSocket.protocol */
-  String get protocol;
-
-  /** @domName WebSocket.readyState */
-  int get readyState;
-
-  /** @domName WebSocket.url */
-  String get url;
-
-  /** @domName WebSocket.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.close */
-  void close([int code, String reason]);
-
-  /** @domName WebSocket.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName WebSocket.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WebSocket.send */
-  void send(data);
-}
-
-abstract class WebSocketEvents implements Events {
-
-  EventListenerList get close;
-
-  EventListenerList get error;
-
-  EventListenerList get message;
-
-  EventListenerList get open;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WebSocketImpl extends _EventTargetImpl implements WebSocket {
-
-  _WebSocketEventsImpl get on =>
-    new _WebSocketEventsImpl(this);
-
-  String get URL native "WebSocket_URL_Getter";
-
-  String get binaryType native "WebSocket_binaryType_Getter";
-
-  void set binaryType(String value) native "WebSocket_binaryType_Setter";
-
-  int get bufferedAmount native "WebSocket_bufferedAmount_Getter";
-
-  String get extensions native "WebSocket_extensions_Getter";
-
-  String get protocol native "WebSocket_protocol_Getter";
-
-  int get readyState native "WebSocket_readyState_Getter";
-
-  String get url native "WebSocket_url_Getter";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_addEventListener_Callback";
-
-  void close([/*unsigned short*/ code, /*DOMString*/ reason]) {
-    if (?reason) {
-      _close_1(code, reason);
-      return;
-    }
-    if (?code) {
-      _close_2(code);
-      return;
-    }
-    _close_3();
-  }
-
-  void _close_1(code, reason) native "WebSocket_close_1_Callback";
-
-  void _close_2(code) native "WebSocket_close_2_Callback";
-
-  void _close_3() native "WebSocket_close_3_Callback";
-
-  bool $dom_dispatchEvent(Event evt) native "WebSocket_dispatchEvent_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebSocket_removeEventListener_Callback";
-
-  void send(data) native "WebSocket_send_Callback";
-
-}
-
-class _WebSocketEventsImpl extends _EventsImpl implements WebSocketEvents {
-  _WebSocketEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get close => this['close'];
-
-  EventListenerList get error => this['error'];
-
-  EventListenerList get message => this['message'];
-
-  EventListenerList get open => this['open'];
-}
-// 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.
-
-
-/// @domName WheelEvent
-abstract class WheelEvent implements MouseEvent {
-
-  /** @domName WheelEvent.webkitDirectionInvertedFromDevice */
-  bool get webkitDirectionInvertedFromDevice;
-
-  /** @domName WheelEvent.wheelDeltaX */
-  int get $dom_wheelDeltaX;
-
-  /** @domName WheelEvent.wheelDeltaY */
-  int get $dom_wheelDeltaY;
-
-  /** @domName WheelEvent.initWebKitWheelEvent */
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
-
-
-  /** @domName WheelEvent.deltaX */
-  abstract num get deltaX;
-
-  /** @domName WheelEvent.deltaY */
-  abstract num get deltaY;
-
-  /** @domName WheelEvent.deltaMode */
-  abstract int get deltaMode;
-}
-// 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 _WheelEventImpl extends _MouseEventImpl implements WheelEvent {
-
-  bool get webkitDirectionInvertedFromDevice native "WheelEvent_webkitDirectionInvertedFromDevice_Getter";
-
-  int get $dom_wheelDeltaX native "WheelEvent_wheelDeltaX_Getter";
-
-  int get $dom_wheelDeltaY native "WheelEvent_wheelDeltaY_Getter";
-
-  void initWebKitWheelEvent(int wheelDeltaX, int wheelDeltaY, LocalWindow view, int screenX, int screenY, int clientX, int clientY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey) native "WheelEvent_initWebKitWheelEvent_Callback";
-
-
-  num get deltaX => $dom_wheelDeltaX;
-  num get deltaY => $dom_wheelDeltaY;
-  int get deltaMode => 0;
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName Worker
-abstract class Worker implements AbstractWorker {
-
-  factory Worker(String scriptUrl) => _WorkerFactoryProvider.createWorker(scriptUrl);
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WorkerEvents get on;
-
-  /** @domName Worker.postMessage */
-  void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]);
-
-  /** @domName Worker.terminate */
-  void terminate();
-}
-
-abstract class WorkerEvents implements AbstractWorkerEvents {
-
-  EventListenerList get message;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerContext
-abstract class WorkerContext implements EventTarget {
-
-  /**
-   * @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent
-   */
-  WorkerContextEvents get on;
-
-  static const int PERSISTENT = 1;
-
-  static const int TEMPORARY = 0;
-
-  /** @domName WorkerContext.indexedDB */
-  IDBFactory get indexedDB;
-
-  /** @domName WorkerContext.location */
-  WorkerLocation get location;
-
-  /** @domName WorkerContext.navigator */
-  WorkerNavigator get navigator;
-
-  /** @domName WorkerContext.self */
-  WorkerContext get self;
-
-  /** @domName WorkerContext.webkitIndexedDB */
-  IDBFactory get webkitIndexedDB;
-
-  /** @domName WorkerContext.webkitNotifications */
-  NotificationCenter get webkitNotifications;
-
-  /** @domName WorkerContext.addEventListener */
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WorkerContext.clearInterval */
-  void clearInterval(int handle);
-
-  /** @domName WorkerContext.clearTimeout */
-  void clearTimeout(int handle);
-
-  /** @domName WorkerContext.close */
-  void close();
-
-  /** @domName WorkerContext.dispatchEvent */
-  bool $dom_dispatchEvent(Event evt);
-
-  /** @domName WorkerContext.importScripts */
-  void importScripts();
-
-  /** @domName WorkerContext.openDatabase */
-  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName WorkerContext.openDatabaseSync */
-  DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]);
-
-  /** @domName WorkerContext.removeEventListener */
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]);
-
-  /** @domName WorkerContext.setInterval */
-  int setInterval(TimeoutHandler handler, int timeout);
-
-  /** @domName WorkerContext.setTimeout */
-  int setTimeout(TimeoutHandler handler, int timeout);
-
-  /** @domName WorkerContext.webkitRequestFileSystem */
-  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]);
-
-  /** @domName WorkerContext.webkitRequestFileSystemSync */
-  DOMFileSystemSync webkitRequestFileSystemSync(int type, int size);
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemSyncURL */
-  EntrySync webkitResolveLocalFileSystemSyncURL(String url);
-
-  /** @domName WorkerContext.webkitResolveLocalFileSystemURL */
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]);
-}
-
-abstract class WorkerContextEvents implements Events {
-
-  EventListenerList get error;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WorkerContextImpl extends _EventTargetImpl implements WorkerContext {
-
-  _WorkerContextEventsImpl get on =>
-    new _WorkerContextEventsImpl(this);
-
-  IDBFactory get indexedDB native "WorkerContext_indexedDB_Getter";
-
-  WorkerLocation get location native "WorkerContext_location_Getter";
-
-  WorkerNavigator get navigator native "WorkerContext_navigator_Getter";
-
-  WorkerContext get self native "WorkerContext_self_Getter";
-
-  IDBFactory get webkitIndexedDB native "WorkerContext_webkitIndexedDB_Getter";
-
-  NotificationCenter get webkitNotifications native "WorkerContext_webkitNotifications_Getter";
-
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_addEventListener_Callback";
-
-  void clearInterval(int handle) native "WorkerContext_clearInterval_Callback";
-
-  void clearTimeout(int handle) native "WorkerContext_clearTimeout_Callback";
-
-  void close() native "WorkerContext_close_Callback";
-
-  bool $dom_dispatchEvent(Event evt) native "WorkerContext_dispatchEvent_Callback";
-
-  void importScripts() native "WorkerContext_importScripts_Callback";
-
-  Database openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabase_Callback";
-
-  DatabaseSync openDatabaseSync(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "WorkerContext_openDatabaseSync_Callback";
-
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WorkerContext_removeEventListener_Callback";
-
-  int setInterval(TimeoutHandler handler, int timeout) native "WorkerContext_setInterval_Callback";
-
-  int setTimeout(TimeoutHandler handler, int timeout) native "WorkerContext_setTimeout_Callback";
-
-  void webkitRequestFileSystem(int type, int size, [FileSystemCallback successCallback, ErrorCallback errorCallback]) native "WorkerContext_webkitRequestFileSystem_Callback";
-
-  DOMFileSystemSync webkitRequestFileSystemSync(int type, int size) native "WorkerContext_webkitRequestFileSystemSync_Callback";
-
-  EntrySync webkitResolveLocalFileSystemSyncURL(String url) native "WorkerContext_webkitResolveLocalFileSystemSyncURL_Callback";
-
-  void webkitResolveLocalFileSystemURL(String url, EntryCallback successCallback, [ErrorCallback errorCallback]) native "WorkerContext_webkitResolveLocalFileSystemURL_Callback";
-
-}
-
-class _WorkerContextEventsImpl extends _EventsImpl implements WorkerContextEvents {
-  _WorkerContextEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get error => this['error'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WorkerImpl extends _AbstractWorkerImpl implements Worker {
-
-  _WorkerEventsImpl get on =>
-    new _WorkerEventsImpl(this);
-
-  void postMessage(/*SerializedScriptValue*/ message, [List messagePorts]) native "Worker_postMessage_Callback";
-
-  void terminate() native "Worker_terminate_Callback";
-
-}
-
-class _WorkerEventsImpl extends _AbstractWorkerEventsImpl implements WorkerEvents {
-  _WorkerEventsImpl(_ptr) : super(_ptr);
-
-  EventListenerList get message => this['message'];
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerLocation
-abstract class WorkerLocation {
-
-  /** @domName WorkerLocation.hash */
-  String get hash;
-
-  /** @domName WorkerLocation.host */
-  String get host;
-
-  /** @domName WorkerLocation.hostname */
-  String get hostname;
-
-  /** @domName WorkerLocation.href */
-  String get href;
-
-  /** @domName WorkerLocation.pathname */
-  String get pathname;
-
-  /** @domName WorkerLocation.port */
-  String get port;
-
-  /** @domName WorkerLocation.protocol */
-  String get protocol;
-
-  /** @domName WorkerLocation.search */
-  String get search;
-
-  /** @domName WorkerLocation.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WorkerLocationImpl extends NativeFieldWrapperClass1 implements WorkerLocation {
-
-  String get hash native "WorkerLocation_hash_Getter";
-
-  String get host native "WorkerLocation_host_Getter";
-
-  String get hostname native "WorkerLocation_hostname_Getter";
-
-  String get href native "WorkerLocation_href_Getter";
-
-  String get pathname native "WorkerLocation_pathname_Getter";
-
-  String get port native "WorkerLocation_port_Getter";
-
-  String get protocol native "WorkerLocation_protocol_Getter";
-
-  String get search native "WorkerLocation_search_Getter";
-
-  String toString() native "WorkerLocation_toString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName WorkerNavigator
-abstract class WorkerNavigator {
-
-  /** @domName WorkerNavigator.appName */
-  String get appName;
-
-  /** @domName WorkerNavigator.appVersion */
-  String get appVersion;
-
-  /** @domName WorkerNavigator.onLine */
-  bool get onLine;
-
-  /** @domName WorkerNavigator.platform */
-  String get platform;
-
-  /** @domName WorkerNavigator.userAgent */
-  String get userAgent;
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _WorkerNavigatorImpl extends NativeFieldWrapperClass1 implements WorkerNavigator {
-
-  String get appName native "WorkerNavigator_appName_Getter";
-
-  String get appVersion native "WorkerNavigator_appVersion_Getter";
-
-  bool get onLine native "WorkerNavigator_onLine_Getter";
-
-  String get platform native "WorkerNavigator_platform_Getter";
-
-  String get userAgent native "WorkerNavigator_userAgent_Getter";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XMLSerializer
-abstract class XMLSerializer {
-
-  factory XMLSerializer() => _XMLSerializerFactoryProvider.createXMLSerializer();
-
-  /** @domName XMLSerializer.serializeToString */
-  String serializeToString(Node node);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XMLSerializerImpl extends NativeFieldWrapperClass1 implements XMLSerializer {
-
-  String serializeToString(Node node) native "XMLSerializer_serializeToString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathEvaluator
-abstract class XPathEvaluator {
-
-  factory XPathEvaluator() => _XPathEvaluatorFactoryProvider.createXPathEvaluator();
-
-  /** @domName XPathEvaluator.createExpression */
-  XPathExpression createExpression(String expression, XPathNSResolver resolver);
-
-  /** @domName XPathEvaluator.createNSResolver */
-  XPathNSResolver createNSResolver(Node nodeResolver);
-
-  /** @domName XPathEvaluator.evaluate */
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XPathEvaluatorImpl extends NativeFieldWrapperClass1 implements XPathEvaluator {
-
-  XPathExpression createExpression(String expression, XPathNSResolver resolver) native "XPathEvaluator_createExpression_Callback";
-
-  XPathNSResolver createNSResolver(Node nodeResolver) native "XPathEvaluator_createNSResolver_Callback";
-
-  XPathResult evaluate(String expression, Node contextNode, XPathNSResolver resolver, int type, XPathResult inResult) native "XPathEvaluator_evaluate_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathException
-abstract class XPathException {
-
-  static const int INVALID_EXPRESSION_ERR = 51;
-
-  static const int TYPE_ERR = 52;
-
-  /** @domName XPathException.code */
-  int get code;
-
-  /** @domName XPathException.message */
-  String get message;
-
-  /** @domName XPathException.name */
-  String get name;
-
-  /** @domName XPathException.toString */
-  String toString();
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XPathExceptionImpl extends NativeFieldWrapperClass1 implements XPathException {
-
-  int get code native "XPathException_code_Getter";
-
-  String get message native "XPathException_message_Getter";
-
-  String get name native "XPathException_name_Getter";
-
-  String toString() native "XPathException_toString_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathExpression
-abstract class XPathExpression {
-
-  /** @domName XPathExpression.evaluate */
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XPathExpressionImpl extends NativeFieldWrapperClass1 implements XPathExpression {
-
-  XPathResult evaluate(Node contextNode, int type, XPathResult inResult) native "XPathExpression_evaluate_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathNSResolver
-abstract class XPathNSResolver {
-
-  /** @domName XPathNSResolver.lookupNamespaceURI */
-  String lookupNamespaceURI(String prefix);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XPathNSResolverImpl extends NativeFieldWrapperClass1 implements XPathNSResolver {
-
-  String lookupNamespaceURI(String prefix) native "XPathNSResolver_lookupNamespaceURI_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XPathResult
-abstract class XPathResult {
-
-  static const int ANY_TYPE = 0;
-
-  static const int ANY_UNORDERED_NODE_TYPE = 8;
-
-  static const int BOOLEAN_TYPE = 3;
-
-  static const int FIRST_ORDERED_NODE_TYPE = 9;
-
-  static const int NUMBER_TYPE = 1;
-
-  static const int ORDERED_NODE_ITERATOR_TYPE = 5;
-
-  static const int ORDERED_NODE_SNAPSHOT_TYPE = 7;
-
-  static const int STRING_TYPE = 2;
-
-  static const int UNORDERED_NODE_ITERATOR_TYPE = 4;
-
-  static const int UNORDERED_NODE_SNAPSHOT_TYPE = 6;
-
-  /** @domName XPathResult.booleanValue */
-  bool get booleanValue;
-
-  /** @domName XPathResult.invalidIteratorState */
-  bool get invalidIteratorState;
-
-  /** @domName XPathResult.numberValue */
-  num get numberValue;
-
-  /** @domName XPathResult.resultType */
-  int get resultType;
-
-  /** @domName XPathResult.singleNodeValue */
-  Node get singleNodeValue;
-
-  /** @domName XPathResult.snapshotLength */
-  int get snapshotLength;
-
-  /** @domName XPathResult.stringValue */
-  String get stringValue;
-
-  /** @domName XPathResult.iterateNext */
-  Node iterateNext();
-
-  /** @domName XPathResult.snapshotItem */
-  Node snapshotItem(int index);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XPathResultImpl extends NativeFieldWrapperClass1 implements XPathResult {
-
-  bool get booleanValue native "XPathResult_booleanValue_Getter";
-
-  bool get invalidIteratorState native "XPathResult_invalidIteratorState_Getter";
-
-  num get numberValue native "XPathResult_numberValue_Getter";
-
-  int get resultType native "XPathResult_resultType_Getter";
-
-  Node get singleNodeValue native "XPathResult_singleNodeValue_Getter";
-
-  int get snapshotLength native "XPathResult_snapshotLength_Getter";
-
-  String get stringValue native "XPathResult_stringValue_Getter";
-
-  Node iterateNext() native "XPathResult_iterateNext_Callback";
-
-  Node snapshotItem(int index) native "XPathResult_snapshotItem_Callback";
-
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-/// @domName XSLTProcessor
-abstract class XSLTProcessor {
-
-  factory XSLTProcessor() => _XSLTProcessorFactoryProvider.createXSLTProcessor();
-
-  /** @domName XSLTProcessor.clearParameters */
-  void clearParameters();
-
-  /** @domName XSLTProcessor.getParameter */
-  String getParameter(String namespaceURI, String localName);
-
-  /** @domName XSLTProcessor.importStylesheet */
-  void importStylesheet(Node stylesheet);
-
-  /** @domName XSLTProcessor.removeParameter */
-  void removeParameter(String namespaceURI, String localName);
-
-  /** @domName XSLTProcessor.reset */
-  void reset();
-
-  /** @domName XSLTProcessor.setParameter */
-  void setParameter(String namespaceURI, String localName, String value);
-
-  /** @domName XSLTProcessor.transformToDocument */
-  Document transformToDocument(Node source);
-
-  /** @domName XSLTProcessor.transformToFragment */
-  DocumentFragment transformToFragment(Node source, Document docVal);
-}
-// 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.
-
-// WARNING: Do not edit - generated code.
-
-class _XSLTProcessorImpl extends NativeFieldWrapperClass1 implements XSLTProcessor {
-
-  void clearParameters() native "XSLTProcessor_clearParameters_Callback";
-
-  String getParameter(String namespaceURI, String localName) native "XSLTProcessor_getParameter_Callback";
-
-  void importStylesheet(Node stylesheet) native "XSLTProcessor_importStylesheet_Callback";
-
-  void removeParameter(String namespaceURI, String localName) native "XSLTProcessor_removeParameter_Callback";
-
-  void reset() native "XSLTProcessor_reset_Callback";
-
-  void setParameter(String namespaceURI, String localName, String value) native "XSLTProcessor_setParameter_Callback";
-
-  Document transformToDocument(Node source) native "XSLTProcessor_transformToDocument_Callback";
-
-  DocumentFragment transformToFragment(Node source, Document docVal) native "XSLTProcessor_transformToFragment_Callback";
-
-}
-// 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 _ArrayBufferFactoryProvider {
-  static ArrayBuffer createArrayBuffer(int length) native "ArrayBuffer_constructor_Callback";
-}
-// 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 _AudioElementFactoryProvider {
-  static AudioElement createAudioElement([String src]) native "HTMLAudioElement_constructor_Callback";
-}
-// 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 _BlobFactoryProvider {
-  static Blob createBlob(List blobParts, [String type, String endings]) native "Blob_constructor_Callback";
-}
-// 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 _CSSMatrixFactoryProvider {
-  static CSSMatrix createCSSMatrix([String cssValue]) native "WebKitCSSMatrix_constructor_Callback";
-}
-// 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 _DOMParserFactoryProvider {
-  static DOMParser createDOMParser() native "DOMParser_constructor_Callback";
-}
-// 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 _DOMURLFactoryProvider {
-  static DOMURL createDOMURL() native "DOMURL_constructor_Callback";
-}
-// 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 _DataViewFactoryProvider {
-  static DataView createDataView(ArrayBuffer buffer, [int byteOffset, int byteLength]) native "DataView_constructor_Callback";
-}
-// 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 {
-
-
-  static AnchorElement createAnchorElement([String href]) {
-    _AnchorElementImpl _e = _document.$dom_createElement("a");
-    if (href != null) _e.href = href;
-    return _e;
-  }
-
-  static AreaElement createAreaElement() {
-    _AreaElementImpl _e = _document.$dom_createElement("area");
-    return _e;
-  }
-
-  static BRElement createBRElement() {
-    _BRElementImpl _e = _document.$dom_createElement("br");
-    return _e;
-  }
-
-  static BaseElement createBaseElement() {
-    _BaseElementImpl _e = _document.$dom_createElement("base");
-    return _e;
-  }
-
-  static BodyElement createBodyElement() {
-    _BodyElementImpl _e = _document.$dom_createElement("body");
-    return _e;
-  }
-
-  static ButtonElement createButtonElement() {
-    _ButtonElementImpl _e = _document.$dom_createElement("button");
-    return _e;
-  }
-
-  static CanvasElement createCanvasElement([int width, int height]) {
-    _CanvasElementImpl _e = _document.$dom_createElement("canvas");
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static ContentElement createContentElement() {
-    _ContentElementImpl _e = _document.$dom_createElement("content");
-    return _e;
-  }
-
-  static DListElement createDListElement() {
-    _DListElementImpl _e = _document.$dom_createElement("dl");
-    return _e;
-  }
-
-  static DataListElement createDataListElement() {
-    _DataListElementImpl _e = _document.$dom_createElement("datalist");
-    return _e;
-  }
-
-  static DetailsElement createDetailsElement() {
-    _DetailsElementImpl _e = _document.$dom_createElement("details");
-    return _e;
-  }
-
-  static DivElement createDivElement() {
-    _DivElementImpl _e = _document.$dom_createElement("div");
-    return _e;
-  }
-
-  static EmbedElement createEmbedElement() {
-    _EmbedElementImpl _e = _document.$dom_createElement("embed");
-    return _e;
-  }
-
-  static FieldSetElement createFieldSetElement() {
-    _FieldSetElementImpl _e = _document.$dom_createElement("fieldset");
-    return _e;
-  }
-
-  static FormElement createFormElement() {
-    _FormElementImpl _e = _document.$dom_createElement("form");
-    return _e;
-  }
-
-  static HRElement createHRElement() {
-    _HRElementImpl _e = _document.$dom_createElement("hr");
-    return _e;
-  }
-
-  static HeadElement createHeadElement() {
-    _HeadElementImpl _e = _document.$dom_createElement("head");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h1() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h1");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h2() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h2");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h3() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h3");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h4() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h4");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h5() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h5");
-    return _e;
-  }
-
-  static HeadingElement createHeadingElement_h6() {
-    _HeadingElementImpl _e = _document.$dom_createElement("h6");
-    return _e;
-  }
-
-  static HtmlElement createHtmlElement() {
-    _HtmlElementImpl _e = _document.$dom_createElement("html");
-    return _e;
-  }
-
-  static IFrameElement createIFrameElement() {
-    _IFrameElementImpl _e = _document.$dom_createElement("iframe");
-    return _e;
-  }
-
-  static ImageElement createImageElement([String src, int width, int height]) {
-    _ImageElementImpl _e = _document.$dom_createElement("img");
-    if (src != null) _e.src = src;
-    if (width != null) _e.width = width;
-    if (height != null) _e.height = height;
-    return _e;
-  }
-
-  static InputElement createInputElement([String type]) {
-    _InputElementImpl _e = _document.$dom_createElement("input");
-    if (type != null) _e.type = type;
-    return _e;
-  }
-
-  static KeygenElement createKeygenElement() {
-    _KeygenElementImpl _e = _document.$dom_createElement("keygen");
-    return _e;
-  }
-
-  static LIElement createLIElement() {
-    _LIElementImpl _e = _document.$dom_createElement("li");
-    return _e;
-  }
-
-  static LabelElement createLabelElement() {
-    _LabelElementImpl _e = _document.$dom_createElement("label");
-    return _e;
-  }
-
-  static LegendElement createLegendElement() {
-    _LegendElementImpl _e = _document.$dom_createElement("legend");
-    return _e;
-  }
-
-  static LinkElement createLinkElement() {
-    _LinkElementImpl _e = _document.$dom_createElement("link");
-    return _e;
-  }
-
-  static MapElement createMapElement() {
-    _MapElementImpl _e = _document.$dom_createElement("map");
-    return _e;
-  }
-
-  static MenuElement createMenuElement() {
-    _MenuElementImpl _e = _document.$dom_createElement("menu");
-    return _e;
-  }
-
-  static MeterElement createMeterElement() {
-    _MeterElementImpl _e = _document.$dom_createElement("meter");
-    return _e;
-  }
-
-  static OListElement createOListElement() {
-    _OListElementImpl _e = _document.$dom_createElement("ol");
-    return _e;
-  }
-
-  static ObjectElement createObjectElement() {
-    _ObjectElementImpl _e = _document.$dom_createElement("object");
-    return _e;
-  }
-
-  static OptGroupElement createOptGroupElement() {
-    _OptGroupElementImpl _e = _document.$dom_createElement("optgroup");
-    return _e;
-  }
-
-  static OutputElement createOutputElement() {
-    _OutputElementImpl _e = _document.$dom_createElement("output");
-    return _e;
-  }
-
-  static ParagraphElement createParagraphElement() {
-    _ParagraphElementImpl _e = _document.$dom_createElement("p");
-    return _e;
-  }
-
-  static ParamElement createParamElement() {
-    _ParamElementImpl _e = _document.$dom_createElement("param");
-    return _e;
-  }
-
-  static PreElement createPreElement() {
-    _PreElementImpl _e = _document.$dom_createElement("pre");
-    return _e;
-  }
-
-  static ProgressElement createProgressElement() {
-    _ProgressElementImpl _e = _document.$dom_createElement("progress");
-    return _e;
-  }
-
-  static ScriptElement createScriptElement() {
-    _ScriptElementImpl _e = _document.$dom_createElement("script");
-    return _e;
-  }
-
-  static SelectElement createSelectElement() {
-    _SelectElementImpl _e = _document.$dom_createElement("select");
-    return _e;
-  }
-
-  static SourceElement createSourceElement() {
-    _SourceElementImpl _e = _document.$dom_createElement("source");
-    return _e;
-  }
-
-  static SpanElement createSpanElement() {
-    _SpanElementImpl _e = _document.$dom_createElement("span");
-    return _e;
-  }
-
-  static StyleElement createStyleElement() {
-    _StyleElementImpl _e = _document.$dom_createElement("style");
-    return _e;
-  }
-
-  static TableCaptionElement createTableCaptionElement() {
-    _TableCaptionElementImpl _e = _document.$dom_createElement("caption");
-    return _e;
-  }
-
-  static TableCellElement createTableCellElement() {
-    _TableCellElementImpl _e = _document.$dom_createElement("td");
-    return _e;
-  }
-
-  static TableColElement createTableColElement() {
-    _TableColElementImpl _e = _document.$dom_createElement("col");
-    return _e;
-  }
-
-  static TableElement createTableElement() {
-    _TableElementImpl _e = _document.$dom_createElement("table");
-    return _e;
-  }
-
-  static TableRowElement createTableRowElement() {
-    _TableRowElementImpl _e = _document.$dom_createElement("tr");
-    return _e;
-  }
-
-  static TextAreaElement createTextAreaElement() {
-    _TextAreaElementImpl _e = _document.$dom_createElement("textarea");
-    return _e;
-  }
-
-  static TitleElement createTitleElement() {
-    _TitleElementImpl _e = _document.$dom_createElement("title");
-    return _e;
-  }
-
-  static TrackElement createTrackElement() {
-    _TrackElementImpl _e = _document.$dom_createElement("track");
-    return _e;
-  }
-
-  static UListElement createUListElement() {
-    _UListElementImpl _e = _document.$dom_createElement("ul");
-    return _e;
-  }
-
-  static VideoElement createVideoElement() {
-    _VideoElementImpl _e = _document.$dom_createElement("video");
-    return _e;
-  }
-}
-// 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 _EventSourceFactoryProvider {
-  static EventSource createEventSource(String scriptUrl) native "EventSource_constructor_Callback";
-}
-// 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 _FileReaderFactoryProvider {
-  static FileReader createFileReader() native "FileReader_constructor_Callback";
-}
-// 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 _FileReaderSyncFactoryProvider {
-  static FileReaderSync createFileReaderSync() native "FileReaderSync_constructor_Callback";
-}
-// 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 _FormDataFactoryProvider {
-  static FormData createFormData([FormElement form]) native "DOMFormData_constructor_Callback";
-}
-// 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 _HttpRequestFactoryProvider {
-  static HttpRequest createHttpRequest() => _createHttpRequest();
-  static HttpRequest _createHttpRequest() native "XMLHttpRequest_constructor_Callback";
-
-  static HttpRequest createHttpRequest_get(String url,
-                                     onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, false);
-
-  static HttpRequest createHttpRequest_getWithCredentials(String url,
-                                     onSuccess(HttpRequest request)) =>
-      _HttpRequestUtils.get(url, onSuccess, true);
-}
-// 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 _IceCandidateFactoryProvider {
-  static IceCandidate createIceCandidate(String label, String candidateLine) native "IceCandidate_constructor_Callback";
-}
-// 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 _MediaControllerFactoryProvider {
-  static MediaController createMediaController() native "MediaController_constructor_Callback";
-}
-// 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 _MediaSourceFactoryProvider {
-  static MediaSource createMediaSource() native "MediaSource_constructor_Callback";
-}
-// 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 _MediaStreamFactoryProvider {
-  static MediaStream createMediaStream(MediaStreamTrackList audioTracks, MediaStreamTrackList videoTracks) native "MediaStream_constructor_Callback";
-}
-// 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 _MessageChannelFactoryProvider {
-  static MessageChannel createMessageChannel() native "MessageChannel_constructor_Callback";
-}
-// 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 _MutationObserverFactoryProvider {
-  static MutationObserver createMutationObserver(MutationCallback callback) native "MutationObserver_constructor_Callback";
-}
-// 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 _NotificationFactoryProvider {
-  static Notification createNotification(String title, [Map options]) native "Notification_constructor_Callback";
-}
-// 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 _OptionElementFactoryProvider {
-  static OptionElement createOptionElement([String data, String value, bool defaultSelected, bool selected]) native "HTMLOptionElement_constructor_Callback";
-}
-// 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 _PeerConnection00FactoryProvider {
-  static PeerConnection00 createPeerConnection00(String serverConfiguration, IceCallback iceCallback) native "PeerConnection00_constructor_Callback";
-}
-// 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 _RTCIceCandidateFactoryProvider {
-  static RTCIceCandidate createRTCIceCandidate(Map dictionary) native "RTCIceCandidate_constructor_Callback";
-}
-// 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 _RTCPeerConnectionFactoryProvider {
-  static RTCPeerConnection createRTCPeerConnection(Map rtcIceServers, [Map mediaConstraints]) native "RTCPeerConnection_constructor_Callback";
-}
-// 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 _RTCSessionDescriptionFactoryProvider {
-  static RTCSessionDescription createRTCSessionDescription(Map dictionary) native "RTCSessionDescription_constructor_Callback";
-}
-// 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 _SessionDescriptionFactoryProvider {
-  static SessionDescription createSessionDescription(String sdp) native "SessionDescription_constructor_Callback";
-}
-// 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 _ShadowRootFactoryProvider {
-  static ShadowRoot createShadowRoot(Element host) native "ShadowRoot_constructor_Callback";
-}
-// 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 _SharedWorkerFactoryProvider {
-  static SharedWorker createSharedWorker(String scriptURL, [String name]) native "SharedWorker_constructor_Callback";
-}
-// 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 _SpeechGrammarFactoryProvider {
-  static SpeechGrammar createSpeechGrammar() native "SpeechGrammar_constructor_Callback";
-}
-// 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 _SpeechGrammarListFactoryProvider {
-  static SpeechGrammarList createSpeechGrammarList() native "SpeechGrammarList_constructor_Callback";
-}
-// 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 _SpeechRecognitionFactoryProvider {
-  static SpeechRecognition createSpeechRecognition() native "SpeechRecognition_constructor_Callback";
-}
-// 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 _TextTrackCueFactoryProvider {
-  static TextTrackCue createTextTrackCue(num startTime, num endTime, String text) native "TextTrackCue_constructor_Callback";
-}
-// 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 _WorkerFactoryProvider {
   static Worker createWorker(String scriptUrl) native "Worker_constructor_Callback";
 }
@@ -42546,6 +36147,202 @@
 // BSD-style license that can be found in the LICENSE file.
 
 typedef void EventListener(Event event);
+// 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.
+
+/**
+ * Defines the keycode values for keys that are returned by 
+ * KeyboardEvent.keyCode.
+ * 
+ * Important note: There is substantial divergence in how different browsers
+ * handle keycodes and their variants in different locales/keyboard layouts. We
+ * provide these constants to help make code processing keys more readable.
+ */
+abstract class KeyCode {
+  // These constant names were borrowed from Closure's Keycode enumeration
+  // class.
+  // http://closure-library.googlecode.com/svn/docs/closure_goog_events_keycodes.js.source.html  
+  static final int WIN_KEY_FF_LINUX = 0;
+  static final int MAC_ENTER = 3;
+  static final int BACKSPACE = 8;
+  static final int TAB = 9;
+  /** NUM_CENTER is also NUMLOCK for FF and Safari on Mac. */
+  static final int NUM_CENTER = 12;
+  static final int ENTER = 13;
+  static final int SHIFT = 16;
+  static final int CTRL = 17;
+  static final int ALT = 18;
+  static final int PAUSE = 19;
+  static final int CAPS_LOCK = 20;
+  static final int ESC = 27;
+  static final int SPACE = 32;
+  static final int PAGE_UP = 33;
+  static final int PAGE_DOWN = 34;
+  static final int END = 35;
+  static final int HOME = 36;
+  static final int LEFT = 37;
+  static final int UP = 38;
+  static final int RIGHT = 39;
+  static final int DOWN = 40;
+  static final int NUM_NORTH_EAST = 33;
+  static final int NUM_SOUTH_EAST = 34;
+  static final int NUM_SOUTH_WEST = 35;
+  static final int NUM_NORTH_WEST = 36;
+  static final int NUM_WEST = 37;
+  static final int NUM_NORTH = 38;
+  static final int NUM_EAST = 39;
+  static final int NUM_SOUTH = 40;
+  static final int PRINT_SCREEN = 44;
+  static final int INSERT = 45;
+  static final int NUM_INSERT = 45;
+  static final int DELETE = 46;
+  static final int NUM_DELETE = 46;
+  static final int ZERO = 48;
+  static final int ONE = 49;
+  static final int TWO = 50;
+  static final int THREE = 51;
+  static final int FOUR = 52;
+  static final int FIVE = 53;
+  static final int SIX = 54;
+  static final int SEVEN = 55;
+  static final int EIGHT = 56;
+  static final int NINE = 57;
+  static final int FF_SEMICOLON = 59;
+  static final int FF_EQUALS = 61;
+  /**
+   * CAUTION: The question mark is for US-keyboard layouts. It varies
+   * for other locales and keyboard layouts.
+   */
+  static final int QUESTION_MARK = 63;
+  static final int A = 65;
+  static final int B = 66;
+  static final int C = 67;
+  static final int D = 68;
+  static final int E = 69;
+  static final int F = 70;
+  static final int G = 71;
+  static final int H = 72;
+  static final int I = 73;
+  static final int J = 74;
+  static final int K = 75;
+  static final int L = 76;
+  static final int M = 77;
+  static final int N = 78;
+  static final int O = 79;
+  static final int P = 80;
+  static final int Q = 81;
+  static final int R = 82;
+  static final int S = 83;
+  static final int T = 84;
+  static final int U = 85;
+  static final int V = 86;
+  static final int W = 87;
+  static final int X = 88;
+  static final int Y = 89;
+  static final int Z = 90;
+  static final int META = 91;
+  static final int WIN_KEY_LEFT = 91;
+  static final int WIN_KEY_RIGHT = 92;
+  static final int CONTEXT_MENU = 93;
+  static final int NUM_ZERO = 96;
+  static final int NUM_ONE = 97;
+  static final int NUM_TWO = 98;
+  static final int NUM_THREE = 99;
+  static final int NUM_FOUR = 100;
+  static final int NUM_FIVE = 101;
+  static final int NUM_SIX = 102;
+  static final int NUM_SEVEN = 103;
+  static final int NUM_EIGHT = 104;
+  static final int NUM_NINE = 105;
+  static final int NUM_MULTIPLY = 106;
+  static final int NUM_PLUS = 107;
+  static final int NUM_MINUS = 109;
+  static final int NUM_PERIOD = 110;
+  static final int NUM_DIVISION = 111;
+  static final int F1 = 112;
+  static final int F2 = 113;
+  static final int F3 = 114;
+  static final int F4 = 115;
+  static final int F5 = 116;
+  static final int F6 = 117;
+  static final int F7 = 118;
+  static final int F8 = 119;
+  static final int F9 = 120;
+  static final int F10 = 121;
+  static final int F11 = 122;
+  static final int F12 = 123;
+  static final int NUMLOCK = 144;
+  static final int SCROLL_LOCK = 145;
+
+  // OS-specific media keys like volume controls and browser controls.
+  static final int FIRST_MEDIA_KEY = 166;
+  static final int LAST_MEDIA_KEY = 183;
+
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SEMICOLON = 186;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int DASH = 189;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int EQUALS = 187;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int COMMA = 188;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int PERIOD = 190;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SLASH = 191;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int APOSTROPHE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int TILDE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SINGLE_QUOTE = 222;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int OPEN_SQUARE_BRACKET = 219;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int BACKSLASH = 220;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int CLOSE_SQUARE_BRACKET = 221;
+  static final int WIN_KEY = 224;
+  static final int MAC_FF_META = 224;
+  static final int WIN_IME = 229;
+}
 // 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.
@@ -42591,7 +36388,7 @@
    */
   static const int JOYSTICK = 5;
 }
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
@@ -43230,7 +37027,7 @@
 class _CustomEventFactoryProvider {
   static CustomEvent createCustomEvent(String type, [bool canBubble = true,
       bool cancelable = true, Object detail = null]) {
-    final _CustomEventImpl e = _document.$dom_createEvent("CustomEvent");
+    final CustomEvent e = document.$dom_createEvent("CustomEvent");
     e.$dom_initCustomEvent(type, canBubble, cancelable, detail);
     return e;
   }
@@ -43239,7 +37036,7 @@
 class _EventFactoryProvider {
   static Event createEvent(String type, [bool canBubble = true,
       bool cancelable = true]) {
-    final _EventImpl e = _document.$dom_createEvent("Event");
+    final Event e = document.$dom_createEvent("Event");
     e.$dom_initEvent(type, canBubble, cancelable);
     return e;
   }
@@ -43251,7 +37048,7 @@
       [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
       bool altKey = false, bool shiftKey = false, bool metaKey = false,
       EventTarget relatedTarget = null]) {
-    final e = _document.$dom_createEvent("MouseEvent");
+    final e = document.$dom_createEvent("MouseEvent");
     e.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
         screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
         button, relatedTarget);
@@ -43309,7 +37106,7 @@
 class _SVGElementFactoryProvider {
   static SVGElement createSVGElement_tag(String tag) {
     final Element temp =
-      _document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
+      document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
     return temp;
   }
 
@@ -43354,20 +37151,20 @@
 class _IDBKeyRangeFactoryProvider {
 
   static IDBKeyRange createIDBKeyRange_only(/*IDBKey*/ value) =>
-      _IDBKeyRangeImpl.only_(value);
+      IDBKeyRange.only_(value);
 
   static IDBKeyRange createIDBKeyRange_lowerBound(
       /*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeImpl.lowerBound_(bound, open);
+      IDBKeyRange.lowerBound_(bound, open);
 
   static IDBKeyRange createIDBKeyRange_upperBound(
       /*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeImpl.upperBound_(bound, open);
+      IDBKeyRange.upperBound_(bound, open);
 
   static IDBKeyRange createIDBKeyRange_bound(
       /*IDBKey*/ lower, /*IDBKey*/ upper,
       [bool lowerOpen = false, bool upperOpen = false]) =>
-      _IDBKeyRangeImpl.bound_(lower, upper, lowerOpen, upperOpen);
+      IDBKeyRange.bound_(lower, upper, lowerOpen, upperOpen);
 }
 
 class _TypedArrayFactoryProvider {
@@ -43449,7 +37246,7 @@
 }
 
 class _TextFactoryProvider {
-  static Text createText(String data) => _document.$dom_createTextNode(data);
+  static Text createText(String data) => document.$dom_createTextNode(data);
 }
 // 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
@@ -44285,7 +38082,7 @@
 
   static Map createMap() => {};
 
-  static makeNotImplementedException(String fileName, int lineNo) {
+  static makeUnimplementedError(String fileName, int lineNo) {
     return new UnsupportedError('[info: $fileName:$lineNo]');
   }
 
@@ -44297,14 +38094,14 @@
 }
 
 class _NPObject extends NativeFieldWrapperClass1 {
-  _NPObject();
+  _NPObject.internal();
   static _NPObject retrieve(String key) native "NPObject_retrieve";
   property(String propertyName) native "NPObject_property";
   invoke(String methodName, [List args = null]) native "NPObject_invoke";
 }
 
-class _DOMWindowCrossFrameImpl extends NativeFieldWrapperClass1 implements Window {
-  _DOMWindowCrossFrameImpl();
+class _DOMWindowCrossFrame extends NativeFieldWrapperClass1 implements Window {
+  _DOMWindowCrossFrame.internal();
 
   // Fields.
   History get history() native "DOMWindow_history_cross_frame_Getter";
@@ -44325,8 +38122,8 @@
   String get typeName => "DOMWindow";
 }
 
-class _HistoryCrossFrameImpl extends NativeFieldWrapperClass1 implements History {
-  _HistoryCrossFrameImpl();
+class _HistoryCrossFrame extends NativeFieldWrapperClass1 implements History {
+  _HistoryCrossFrame.internal();
 
   // Methods.
   void back() native "History_back_Callback";
@@ -44337,8 +38134,8 @@
   String get typeName => "History";
 }
 
-class _LocationCrossFrameImpl extends NativeFieldWrapperClass1 implements Location {
-  _LocationCrossFrameImpl();
+class _LocationCrossFrame extends NativeFieldWrapperClass1 implements Location {
+  _LocationCrossFrame.internal();
 
   // Fields.
   void set href(String) native "Location_href_Setter";
@@ -44347,8 +38144,8 @@
   String get typeName => "Location";
 }
 
-class _DOMStringMapImpl extends NativeFieldWrapperClass1 implements Map<String, String> {
-  _DOMStringMapImpl();
+class _DOMStringMap extends NativeFieldWrapperClass1 implements Map<String, String> {
+  _DOMStringMap.internal();
 
   bool containsValue(String value) => Maps.containsValue(this, value);
   bool containsKey(String key) native "DOMStringMap_containsKey_Callback";
diff --git a/lib/html/dartium/nativewrappers.dart b/sdk/lib/html/dartium/nativewrappers.dart
similarity index 100%
rename from lib/html/dartium/nativewrappers.dart
rename to sdk/lib/html/dartium/nativewrappers.dart
diff --git a/lib/html/doc/html.dartdoc b/sdk/lib/html/doc/html.dartdoc
similarity index 100%
rename from lib/html/doc/html.dartdoc
rename to sdk/lib/html/doc/html.dartdoc
diff --git a/lib/html/doc/interface/AbstractWorker.dartdoc b/sdk/lib/html/doc/interface/AbstractWorker.dartdoc
similarity index 100%
rename from lib/html/doc/interface/AbstractWorker.dartdoc
rename to sdk/lib/html/doc/interface/AbstractWorker.dartdoc
diff --git a/lib/html/doc/interface/Element.dartdoc b/sdk/lib/html/doc/interface/Element.dartdoc
similarity index 100%
rename from lib/html/doc/interface/Element.dartdoc
rename to sdk/lib/html/doc/interface/Element.dartdoc
diff --git a/lib/html/doc/interface/Event.dartdoc b/sdk/lib/html/doc/interface/Event.dartdoc
similarity index 100%
rename from lib/html/doc/interface/Event.dartdoc
rename to sdk/lib/html/doc/interface/Event.dartdoc
diff --git a/lib/html/doc/interface/EventTarget.dartdoc b/sdk/lib/html/doc/interface/EventTarget.dartdoc
similarity index 100%
rename from lib/html/doc/interface/EventTarget.dartdoc
rename to sdk/lib/html/doc/interface/EventTarget.dartdoc
diff --git a/lib/html/doc/interface/HttpRequest.dartdoc b/sdk/lib/html/doc/interface/HttpRequest.dartdoc
similarity index 100%
rename from lib/html/doc/interface/HttpRequest.dartdoc
rename to sdk/lib/html/doc/interface/HttpRequest.dartdoc
diff --git a/lib/html/doc/interface/MouseEvent.dartdoc b/sdk/lib/html/doc/interface/MouseEvent.dartdoc
similarity index 100%
rename from lib/html/doc/interface/MouseEvent.dartdoc
rename to sdk/lib/html/doc/interface/MouseEvent.dartdoc
diff --git a/lib/html/doc/interface/Node.dartdoc b/sdk/lib/html/doc/interface/Node.dartdoc
similarity index 100%
rename from lib/html/doc/interface/Node.dartdoc
rename to sdk/lib/html/doc/interface/Node.dartdoc
diff --git a/lib/html/doc/interface/Storage.dartdoc b/sdk/lib/html/doc/interface/Storage.dartdoc
similarity index 100%
rename from lib/html/doc/interface/Storage.dartdoc
rename to sdk/lib/html/doc/interface/Storage.dartdoc
diff --git a/lib/html/doc/interface/UIEvent.dartdoc b/sdk/lib/html/doc/interface/UIEvent.dartdoc
similarity index 100%
rename from lib/html/doc/interface/UIEvent.dartdoc
rename to sdk/lib/html/doc/interface/UIEvent.dartdoc
diff --git a/lib/html/doc/interface/WebSocket.dartdoc b/sdk/lib/html/doc/interface/WebSocket.dartdoc
similarity index 100%
rename from lib/html/doc/interface/WebSocket.dartdoc
rename to sdk/lib/html/doc/interface/WebSocket.dartdoc
diff --git a/lib/html/idl/dart/dart.idl b/sdk/lib/html/idl/dart/dart.idl
similarity index 100%
rename from lib/html/idl/dart/dart.idl
rename to sdk/lib/html/idl/dart/dart.idl
diff --git a/lib/html/scripts/all_tests.py b/sdk/lib/html/scripts/all_tests.py
similarity index 100%
rename from lib/html/scripts/all_tests.py
rename to sdk/lib/html/scripts/all_tests.py
diff --git a/lib/html/scripts/css_code_generator.py b/sdk/lib/html/scripts/css_code_generator.py
similarity index 100%
rename from lib/html/scripts/css_code_generator.py
rename to sdk/lib/html/scripts/css_code_generator.py
diff --git a/lib/html/scripts/dartdomgenerator.py b/sdk/lib/html/scripts/dartdomgenerator.py
similarity index 98%
rename from lib/html/scripts/dartdomgenerator.py
rename to sdk/lib/html/scripts/dartdomgenerator.py
index 8ce05b8..68b4a25 100755
--- a/lib/html/scripts/dartdomgenerator.py
+++ b/sdk/lib/html/scripts/dartdomgenerator.py
@@ -134,7 +134,8 @@
 def GenerateSingleFile(library_path, output_dir):
   library_dir = os.path.dirname(library_path)
   library_filename = os.path.basename(library_path)
-  copy_dart_script = os.path.relpath('../../../tools/copy_dart.py', library_dir)
+  copy_dart_script = os.path.relpath('../../../../tools/copy_dart.py',
+      library_dir)
   output_dir = os.path.relpath(output_dir, library_dir)
   command = ' '.join(['cd', library_dir, ';',
                       copy_dart_script, output_dir, library_filename])
diff --git a/lib/html/scripts/dartgenerator.py b/sdk/lib/html/scripts/dartgenerator.py
similarity index 100%
rename from lib/html/scripts/dartgenerator.py
rename to sdk/lib/html/scripts/dartgenerator.py
diff --git a/lib/html/scripts/dartgenerator_test.py b/sdk/lib/html/scripts/dartgenerator_test.py
similarity index 100%
rename from lib/html/scripts/dartgenerator_test.py
rename to sdk/lib/html/scripts/dartgenerator_test.py
diff --git a/lib/html/scripts/database.py b/sdk/lib/html/scripts/database.py
similarity index 100%
rename from lib/html/scripts/database.py
rename to sdk/lib/html/scripts/database.py
diff --git a/lib/html/scripts/database_test.py b/sdk/lib/html/scripts/database_test.py
similarity index 100%
rename from lib/html/scripts/database_test.py
rename to sdk/lib/html/scripts/database_test.py
diff --git a/lib/html/scripts/databasebuilder.py b/sdk/lib/html/scripts/databasebuilder.py
similarity index 100%
rename from lib/html/scripts/databasebuilder.py
rename to sdk/lib/html/scripts/databasebuilder.py
diff --git a/lib/html/scripts/databasebuilder_test.py b/sdk/lib/html/scripts/databasebuilder_test.py
similarity index 100%
rename from lib/html/scripts/databasebuilder_test.py
rename to sdk/lib/html/scripts/databasebuilder_test.py
diff --git a/lib/html/scripts/emitter.py b/sdk/lib/html/scripts/emitter.py
similarity index 100%
rename from lib/html/scripts/emitter.py
rename to sdk/lib/html/scripts/emitter.py
diff --git a/lib/html/scripts/emitter_test.py b/sdk/lib/html/scripts/emitter_test.py
similarity index 100%
rename from lib/html/scripts/emitter_test.py
rename to sdk/lib/html/scripts/emitter_test.py
diff --git a/lib/html/scripts/fremontcutbuilder.py b/sdk/lib/html/scripts/fremontcutbuilder.py
similarity index 98%
rename from lib/html/scripts/fremontcutbuilder.py
rename to sdk/lib/html/scripts/fremontcutbuilder.py
index e114208..19181a0 100755
--- a/lib/html/scripts/fremontcutbuilder.py
+++ b/sdk/lib/html/scripts/fremontcutbuilder.py
@@ -185,7 +185,7 @@
 
   idl_files = []
 
-  webcore_dir = os.path.join(current_dir, '..', '..', '..',
+  webcore_dir = os.path.join(current_dir, '..', '..', '..', '..',
                              'third_party', 'WebCore')
   if not os.path.exists(webcore_dir):
     raise RuntimeError('directory not found: %s' % webcore_dir)
diff --git a/lib/html/scripts/generator.py b/sdk/lib/html/scripts/generator.py
similarity index 98%
rename from lib/html/scripts/generator.py
rename to sdk/lib/html/scripts/generator.py
index a7332a9..610e058 100644
--- a/lib/html/scripts/generator.py
+++ b/sdk/lib/html/scripts/generator.py
@@ -445,9 +445,6 @@
   # Dynamically type this field for now.
   return 'dynamic'
 
-def ImplementationClassNameForInterfaceName(interface_name):
-  return '_%sImpl' % interface_name
-
 # ------------------------------------------------------------------------------
 
 class Conversion(object):
@@ -521,6 +518,9 @@
       Conversion('_convertNativeToDart_SerializedScriptValue',
                  'dynamic', 'dynamic'),
 
+    'DOMObject get PopStateEvent.state':
+      Conversion('_convertNativeToDart_SerializedScriptValue',
+                 'dynamic', 'dynamic'),
 
     # IDBAny is problematic.  Some uses are just a union of other IDB types,
     # which need no conversion..  Others include data values which require
@@ -686,14 +686,14 @@
     if self.idl_type() == 'NodeList':
       return 'List<Node>'
     if self.list_item_type():
-      return ImplementationClassNameForInterfaceName(self.idl_type())
+      return self.idl_type()
     # TODO(podivilov): only primitive and collection types should override
     # dart_type.
     if self._data.dart_type != None:
       return self.dart_type()
     if IsPureInterface(self.idl_type()):
       return self.idl_type()
-    return ImplementationClassNameForInterfaceName(self.interface_name())
+    return self.interface_name()
 
   def interface_name(self):
     if self.list_item_type() and not self.has_generated_interface():
@@ -702,11 +702,15 @@
 
   def implementation_name(self):
     if self.list_item_type():
-      return ImplementationClassNameForInterfaceName(self.idl_type())
-    implementation_name = ImplementationClassNameForInterfaceName(
-        self.interface_name())
+      implementation_name = self.idl_type()
+    else:
+      implementation_name = self.interface_name()
     if self.merged_into():
-      implementation_name = '%s_Merged' % implementation_name
+      implementation_name = '_%s_Merged' % implementation_name
+
+    if not self.has_generated_interface():
+      implementation_name = '_%s' % implementation_name
+
     return implementation_name
 
   def has_generated_interface(self):
diff --git a/lib/html/scripts/go.sh b/sdk/lib/html/scripts/go.sh
similarity index 100%
rename from lib/html/scripts/go.sh
rename to sdk/lib/html/scripts/go.sh
diff --git a/sdk/lib/html/scripts/htmldartgenerator.py b/sdk/lib/html/scripts/htmldartgenerator.py
new file mode 100644
index 0000000..a199963
--- /dev/null
+++ b/sdk/lib/html/scripts/htmldartgenerator.py
@@ -0,0 +1,88 @@
+#!/usr/bin/python
+# 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.
+
+"""This module provides shared functionality for the system to generate
+dart:html APIs from the IDL database."""
+
+from generator import DartDomNameOfAttribute
+
+class HtmlDartGenerator(object):
+  def __init__(self, interface, options):
+    self._interface = interface
+
+  def EmitAttributeDocumentation(self, attribute):
+    dom_name = DartDomNameOfAttribute(attribute)
+    self._members_emitter.Emit('\n  /** @domName $DOMINTERFACE.$DOMNAME */',
+        DOMINTERFACE=attribute.doc_js_interface_name,
+        DOMNAME=dom_name)
+
+  def EmitOperationDocumentation(self, operation):
+    self._members_emitter.Emit('\n  /** @domName $DOMINTERFACE.$DOMNAME */',
+        DOMINTERFACE=operation.overloads[0].doc_js_interface_name,
+        DOMNAME=operation.name)
+
+  def AdditionalImplementedInterfaces(self):
+    # TODO: Include all implemented interfaces, including other Lists.
+    implements = []
+    if self._interface_type_info.is_typed_array():
+      element_type = self._interface_type_info.list_item_type()
+      implements.append('List<%s>' % self._DartType(element_type))
+    if self._interface_type_info.list_item_type():
+      item_type_info = self._type_registry.TypeInfo(
+          self._interface_type_info.list_item_type())
+      implements.append('List<%s>' % item_type_info.dart_type())
+    return implements
+
+  def AddConstructors(self, constructors, factory_provider, class_name,
+      base_class):
+    for constructor_info in constructors:
+      self._AddConstructor(constructor_info, factory_provider)
+
+    typed_array_type = None
+    for interface in self._database.Hierarchy(self._interface):
+      type_info = self._type_registry.TypeInfo(interface.id)
+      if type_info.is_typed_array():
+        typed_array_type = type_info.list_item_type()
+        break
+    if typed_array_type:
+      self._members_emitter.Emit(
+          '\n'
+          '  factory $CTOR(int length) =>\n'
+          '    $FACTORY.create$(CTOR)(length);\n'
+          '\n'
+          '  factory $CTOR.fromList(List<$TYPE> list) =>\n'
+          '    $FACTORY.create$(CTOR)_fromList(list);\n'
+          '\n'
+          '  factory $CTOR.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => \n'
+          '    $FACTORY.create$(CTOR)_fromBuffer(buffer, byteOffset, length);\n',
+        CTOR=self._interface.id,
+        TYPE=self._DartType(typed_array_type),
+        FACTORY=factory_provider)
+
+  def _AddConstructor(self, constructor_info, factory_provider):
+      constructor_info.GenerateFactoryInvocation(
+          self._DartType, self._members_emitter, factory_provider)
+
+  def DeclareAttribute(self, attribute, type_name, html_name, read_only):
+    # Declares an attribute but does not include the code to invoke it.
+    self.EmitAttributeDocumentation(attribute)
+    if read_only:
+      template = '\n  $TYPE get $NAME;\n'
+    else:
+      template = '\n  $TYPE $NAME;\n'
+
+    self._members_emitter.Emit(template,
+        NAME=html_name,
+        TYPE=type_name)
+
+  def DeclareOperation(self, operation, type_name, html_name):
+    # Declares an operation but does not include the code to invoke it.
+    self.EmitOperationDocumentation(operation)
+    self._members_emitter.Emit(
+             '\n'
+             '  $TYPE $NAME($PARAMS);\n',
+             TYPE=type_name,
+             NAME=html_name,
+             PARAMS=operation.ParametersDeclaration(self._DartType))
diff --git a/lib/html/scripts/htmleventgenerator.py b/sdk/lib/html/scripts/htmleventgenerator.py
similarity index 92%
rename from lib/html/scripts/htmleventgenerator.py
rename to sdk/lib/html/scripts/htmleventgenerator.py
index cfc40fe..6584502 100644
--- a/lib/html/scripts/htmleventgenerator.py
+++ b/sdk/lib/html/scripts/htmleventgenerator.py
@@ -202,30 +202,24 @@
       return None
 
     self._event_classes.add(interface.id)
-    events_interface = html_interface_name + 'Events'
+    events_class_name = html_interface_name + 'Events'
     parent_events_interface = self._GetParentEventsInterface(interface)
 
     if not events:
       return parent_events_interface
 
-    interface_events_members = events_interface_emitter.Emit(
-        '\nabstract class $INTERFACE implements $PARENT {\n$!MEMBERS}\n',
-        INTERFACE=events_interface,
-        PARENT=parent_events_interface)
-
-    template_file = 'impl_%s.darttemplate' % events_interface
+    template_file = 'impl_%s.darttemplate' % events_class_name
     template = (self._template_loader.TryLoad(template_file) or
         '\n'
-        'class $CLASSNAME extends $SUPER implements $INTERFACE {\n'
-        '  $CLASSNAME(_ptr) : super(_ptr);\n'
+        'class $CLASSNAME extends $SUPER {\n'
+        '  $CLASSNAME(EventTarget _ptr) : super(_ptr);\n'
         '$!MEMBERS}\n')
 
     # TODO(jacobr): specify the type of _ptr as EventTarget
     implementation_events_members = events_implementation_emitter.Emit(
         template,
-        CLASSNAME='_%sImpl' % events_interface,
-        INTERFACE=events_interface,
-        SUPER='_%sImpl' % parent_events_interface)
+        CLASSNAME=events_class_name,
+        SUPER='%s' % parent_events_interface)
 
     dom_event_names = set()
     for event in events:
@@ -240,8 +234,6 @@
         continue
 
       html_name = _html_event_names[dom_name]
-      interface_events_members.Emit('\n  EventListenerList get $NAME;\n',
-          NAME=html_name)
       full_event_name = '%sEvents.%s' % (html_interface_name, html_name)
       if not full_event_name in custom_events:
         implementation_events_members.Emit(
@@ -250,7 +242,7 @@
             NAME=html_name,
             DOM_NAME=dom_name)
 
-    return events_interface
+    return events_class_name
 
   # TODO(jacobr): this isn't quite right....
   def _GetParentEventsInterface(self, interface):
diff --git a/lib/html/scripts/htmlrenamer.py b/sdk/lib/html/scripts/htmlrenamer.py
similarity index 98%
rename from lib/html/scripts/htmlrenamer.py
rename to sdk/lib/html/scripts/htmlrenamer.py
index 79f187d..b3552ae 100644
--- a/lib/html/scripts/htmlrenamer.py
+++ b/sdk/lib/html/scripts/htmlrenamer.py
@@ -6,6 +6,7 @@
 html_interface_renames = {
     'DOMCoreException': 'DOMException',
     'DOMFormData': 'FormData',
+    'DOMURL': 'Url',
     'DOMWindow': 'LocalWindow',
     'History': 'LocalHistory',
     'Location': 'LocalLocation',
@@ -99,6 +100,8 @@
     'SVGElement.className': '$dom_svgClassName',
     'SVGAnimatedString.className': '$dom_svgClassName',
     'SVGStylable.className': '$dom_svgClassName',
+    'Url.createObjectURL': 'createObjectUrl',
+    'Url.revokeObjectURL': 'revokeObjectUrl',
 }
 
 # Members and classes from the dom that should be removed completely from
diff --git a/lib/html/scripts/idlnode.py b/sdk/lib/html/scripts/idlnode.py
similarity index 100%
rename from lib/html/scripts/idlnode.py
rename to sdk/lib/html/scripts/idlnode.py
diff --git a/lib/html/scripts/idlnode_test.py b/sdk/lib/html/scripts/idlnode_test.py
similarity index 100%
rename from lib/html/scripts/idlnode_test.py
rename to sdk/lib/html/scripts/idlnode_test.py
diff --git a/lib/html/scripts/idlparser.dart b/sdk/lib/html/scripts/idlparser.dart
similarity index 100%
rename from lib/html/scripts/idlparser.dart
rename to sdk/lib/html/scripts/idlparser.dart
diff --git a/lib/html/scripts/idlparser.py b/sdk/lib/html/scripts/idlparser.py
similarity index 100%
rename from lib/html/scripts/idlparser.py
rename to sdk/lib/html/scripts/idlparser.py
diff --git a/lib/html/scripts/idlparser_test.dart b/sdk/lib/html/scripts/idlparser_test.dart
similarity index 100%
rename from lib/html/scripts/idlparser_test.dart
rename to sdk/lib/html/scripts/idlparser_test.dart
diff --git a/lib/html/scripts/idlparser_test.py b/sdk/lib/html/scripts/idlparser_test.py
similarity index 100%
rename from lib/html/scripts/idlparser_test.py
rename to sdk/lib/html/scripts/idlparser_test.py
diff --git a/lib/html/scripts/idlrenderer.dart b/sdk/lib/html/scripts/idlrenderer.dart
similarity index 100%
rename from lib/html/scripts/idlrenderer.dart
rename to sdk/lib/html/scripts/idlrenderer.dart
diff --git a/lib/html/scripts/idlrenderer.py b/sdk/lib/html/scripts/idlrenderer.py
similarity index 100%
rename from lib/html/scripts/idlrenderer.py
rename to sdk/lib/html/scripts/idlrenderer.py
diff --git a/lib/html/scripts/idlrenderer_test.py b/sdk/lib/html/scripts/idlrenderer_test.py
similarity index 100%
rename from lib/html/scripts/idlrenderer_test.py
rename to sdk/lib/html/scripts/idlrenderer_test.py
diff --git a/lib/html/scripts/idlsync.py b/sdk/lib/html/scripts/idlsync.py
similarity index 100%
rename from lib/html/scripts/idlsync.py
rename to sdk/lib/html/scripts/idlsync.py
diff --git a/lib/html/scripts/logging.conf b/sdk/lib/html/scripts/logging.conf
similarity index 100%
rename from lib/html/scripts/logging.conf
rename to sdk/lib/html/scripts/logging.conf
diff --git a/lib/html/scripts/multiemitter.py b/sdk/lib/html/scripts/multiemitter.py
similarity index 100%
rename from lib/html/scripts/multiemitter.py
rename to sdk/lib/html/scripts/multiemitter.py
diff --git a/lib/html/scripts/multiemitter_test.py b/sdk/lib/html/scripts/multiemitter_test.py
similarity index 100%
rename from lib/html/scripts/multiemitter_test.py
rename to sdk/lib/html/scripts/multiemitter_test.py
diff --git a/lib/html/scripts/pegparser.py b/sdk/lib/html/scripts/pegparser.py
similarity index 100%
rename from lib/html/scripts/pegparser.py
rename to sdk/lib/html/scripts/pegparser.py
diff --git a/lib/html/scripts/pegparser_test.py b/sdk/lib/html/scripts/pegparser_test.py
similarity index 100%
rename from lib/html/scripts/pegparser_test.py
rename to sdk/lib/html/scripts/pegparser_test.py
diff --git a/lib/html/scripts/systemhtml.py b/sdk/lib/html/scripts/systemhtml.py
similarity index 89%
rename from lib/html/scripts/systemhtml.py
rename to sdk/lib/html/scripts/systemhtml.py
index 44553c4..1fb093010 100644
--- a/lib/html/scripts/systemhtml.py
+++ b/sdk/lib/html/scripts/systemhtml.py
@@ -9,11 +9,15 @@
 import emitter
 import os
 from generator import *
+from htmldartgenerator import *
 
 _js_custom_members = set([
     'AudioBufferSourceNode.start',
     'AudioBufferSourceNode.stop',
+    'AudioContext.createGain',
+    'AudioContext.createScriptProcessor',
     'CSSStyleDeclaration.setProperty',
+    'CanvasElement.getContext',
     'Element.insertAdjacentElement',
     'Element.insertAdjacentHTML',
     'Element.insertAdjacentText',
@@ -33,11 +37,17 @@
     'LocalWindow.requestAnimationFrame',
     'LocalWindow.webkitCancelAnimationFrame',
     'LocalWindow.webkitRequestAnimationFrame',
+    'Url.createObjectURL',
+    'Url.revokeObjectURL',
     'WheelEvent.wheelDeltaX',
     'WheelEvent.wheelDeltaY',
     ])
 
 
+# Classes that offer only static methods, and therefore we should suppress
+# constructor creation.
+_static_classes = set(['Url'])
+
 # Types that are accessible cross-frame in a limited fashion.
 # In these cases, the base type (e.g., Window) provides restricted access
 # while the subtype (e.g., LocalWindow) provides full access to the
@@ -180,7 +190,7 @@
     inits = emitter.Emit(
         '\n'
         '  static $RETURN_TYPE $CONSTRUCTOR($PARAMS) {\n'
-        '    $CLASS _e = _document.$dom_createElement("$TAG");\n'
+        '    $CLASS _e = document.$dom_createElement("$TAG");\n'
         '$!INITS'
         '    return _e;\n'
         '  }\n',
@@ -231,11 +241,8 @@
   def GenerateInterface(self):
     interface_name = self._interface_type_info.interface_name()
 
-    if (self._interface_type_info.has_generated_interface() and
-        not self._interface_type_info.merged_into()):
-      interface_emitter = self._library_emitter.FileEmitter(interface_name)
-    else:
-      interface_emitter = emitter.Emitter()
+    # TODO: this is just tossing the interface, need to skip it completely.
+    interface_emitter = emitter.Emitter()
 
     template_file = 'interface_%s.darttemplate' % interface_name
     interface_template = (self._template_loader.TryLoad(template_file) or
@@ -265,7 +272,10 @@
       factory_provider = interface_factories[interface_name]
 
     constructors = []
-    constructor_info = AnalyzeConstructor(self._interface)
+    if interface_name in _static_classes:
+      constructor_info = None
+    else:
+      constructor_info = AnalyzeConstructor(self._interface)
     if constructor_info:
       constructors.append(constructor_info)
       factory_provider = '_' + interface_name + 'FactoryProvider'
@@ -297,30 +307,45 @@
      self._members_emitter,
      self._top_level_emitter) = interface_emitter.Emit(
          interface_template + '$!TOP_LEVEL',
-         ID=interface_name,
+         ID='_I%s' % interface_name,
          EXTENDS=implements_str)
 
-    self._type_comment_emitter.Emit("/// @domName $DOMNAME",
-        DOMNAME=self._interface.doc_js_name)
-
     implementation_emitter = self._ImplementationEmitter()
 
-    base_class = self._backend.RootClassName()
+    base_type_info = None
     if self._interface.parents:
       supertype = self._interface.parents[0].type.id
       if not IsDartCollectionType(supertype) and not IsPureInterface(supertype):
-        type_info = self._type_registry.TypeInfo(supertype)
-        if type_info.merged_into() and self._backend.ImplementsMergedMembers():
-          type_info = self._type_registry.TypeInfo(type_info.merged_into())
-        base_class = type_info.implementation_name()
+        base_type_info = self._type_registry.TypeInfo(supertype)
+        if base_type_info.merged_into() \
+            and self._backend.ImplementsMergedMembers():
+          base_type_info = self._type_registry.TypeInfo(
+              base_type_info.merged_into())
 
-    implemented_interfaces = [interface_name] +\
-                             self._backend.AdditionalImplementedInterfaces()
+    if base_type_info:
+      base_class = base_type_info.implementation_name()
+    else:
+      base_class = self._backend.RootClassName()
+
+    implements = self._backend.AdditionalImplementedInterfaces()
+    for parent in self._interface.parents:
+      parent_type_info = self._type_registry.TypeInfo(parent.type.id)
+      if parent_type_info != base_type_info:
+        implements.append(parent_type_info.interface_name())
+
+    if interface_name in _secure_base_types:
+      implements.append(_secure_base_types[interface_name])
+
+    implements_str = ''
+    if implements:
+      implements_str = ' implements ' + ', '.join(set(implements))
+
     self._implementation_members_emitter = implementation_emitter.Emit(
         self._backend.ImplementationTemplate(),
         CLASSNAME=self._interface_type_info.implementation_name(),
         EXTENDS=' extends %s' % base_class if base_class else '',
-        IMPLEMENTS=' implements ' + ', '.join(implemented_interfaces),
+        IMPLEMENTS=implements_str,
+        DOMNAME=self._interface.doc_js_name,
         NATIVESPEC=self._backend.NativeSpec())
     self._backend.StartInterface(self._implementation_members_emitter)
 
@@ -328,13 +353,17 @@
       constructor_info.GenerateFactoryInvocation(
           self._DartType, self._members_emitter, factory_provider)
 
-    element_type = None
+    self._backend.AddConstructors(constructors, factory_provider,
+        self._interface_type_info.implementation_name(),
+        base_class)
+
+    typed_array_type = None
     for interface in self._database.Hierarchy(self._interface):
       type_info = self._type_registry.TypeInfo(interface.id)
       if type_info.is_typed_array():
-        element_type = type_info.list_item_type()
+        typed_array_type = type_info.list_item_type()
         break
-    if element_type:
+    if typed_array_type:
       self._members_emitter.Emit(
           '\n'
           '  factory $CTOR(int length) =>\n'
@@ -346,7 +375,7 @@
           '  factory $CTOR.fromBuffer(ArrayBuffer buffer, [int byteOffset, int length]) => \n'
           '    $FACTORY.create$(CTOR)_fromBuffer(buffer, byteOffset, length);\n',
         CTOR=self._interface.id,
-        TYPE=self._DartType(element_type),
+        TYPE=self._DartType(typed_array_type),
         FACTORY=factory_provider)
 
     events_interface = self._event_generator.ProcessInterface(
@@ -354,7 +383,7 @@
         self._backend.CustomJSMembers(),
         interface_emitter, implementation_emitter)
     if events_interface:
-      self._EmitEventGetter(events_interface, '_%sImpl' % events_interface)
+      self._EmitEventGetter(events_interface, events_interface)
 
     old_backend = self._backend
     if not self._backend.ImplementsMergedMembers():
@@ -365,16 +394,19 @@
     self._backend = old_backend
 
     self.AddMembers(self._interface)
+    if merged_interface and not self._backend.ImplementsMergedMembers():
+      self.AddMembers(self._database.GetInterface(merged_interface), True)
+
     self.AddSecondaryMembers(self._interface)
     self._backend.FinishInterface()
 
-  def AddMembers(self, interface):
+  def AddMembers(self, interface, declare_only=False):
     for const in sorted(interface.constants, ConstantOutputOrder):
       self.AddConstant(const)
 
     for attr in sorted(interface.attributes, ConstantOutputOrder):
       if attr.type.id != 'EventListener':
-        self.AddAttribute(attr)
+        self.AddAttribute(attr, False, declare_only)
 
     # The implementation should define an indexer if the interface directly
     # extends List.
@@ -402,7 +434,7 @@
     for id in sorted(operationsById.keys()):
       operations = operationsById[id]
       info = AnalyzeOperation(interface, operations)
-      self.AddOperation(info)
+      self.AddOperation(info, False, declare_only)
 
   def AddSecondaryMembers(self, interface):
     # With multiple inheritance, attributes and operations of non-first
@@ -437,7 +469,7 @@
   def AmendIndexer(self, element_type):
     self._backend.AmendIndexer(element_type)
 
-  def AddAttribute(self, attribute, is_secondary=False):
+  def AddAttribute(self, attribute, is_secondary=False, declare_only=False):
     dom_name = DartDomNameOfAttribute(attribute)
     html_name = self._renamer.RenameMember(
       self._interface.id, attribute, dom_name, 'get:')
@@ -466,13 +498,17 @@
                                  NAME=html_name,
                                  TYPE=SecureOutputType(self, attribute.type.id))
 
-    self._backend.AddAttribute(attribute, html_name, read_only)
+    if declare_only:
+      self._backend.DeclareAttribute(attribute,
+          SecureOutputType(self, attribute.type.id), html_name, read_only)
+    else:
+      self._backend.AddAttribute(attribute, html_name, read_only)
 
   def AddSecondaryAttribute(self, interface, attribute):
     self._backend.SecondaryContext(interface)
     self.AddAttribute(attribute, True)
 
-  def AddOperation(self, info, skip_declaration=False):
+  def AddOperation(self, info, skip_declaration=False, declare_only=False):
     """
     Arguments:
       operations - contains the overloads, one or more operations with the same
@@ -510,11 +546,15 @@
              TYPE=SecureOutputType(self, info.type_name),
              NAME=html_name,
              PARAMS=info.ParametersDeclaration(self._DartType))
-    self._backend.AddOperation(info, html_name)
+    if declare_only:
+      self._backend.DeclareOperation(info,
+          SecureOutputType(self, info.type_name), html_name)
+    else:
+      self._backend.AddOperation(info, html_name)
 
   def AddSecondaryOperation(self, interface, info):
     self._backend.SecondaryContext(interface)
-    self.AddOperation(info, True)
+    self.AddOperation(info)
 
   def AddConstant(self, constant):
     type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id)
@@ -523,15 +563,15 @@
                                TYPE=type,
                                VALUE=constant.value)
 
+    self._backend.AddConstant(constant)
+
   def _ImplementationEmitter(self):
-    if IsPureInterface(self._interface.id):
-      return emitter.Emitter()
     basename = self._interface_type_info.implementation_name()
     if (self._interface_type_info.merged_into() and
         self._backend.ImplementsMergedMembers()):
       # Merged members are implemented in target interface implementation.
       return emitter.Emitter()
-    return self._library_emitter.FileEmitter(basename.lstrip('_'))
+    return self._library_emitter.FileEmitter(basename)
 
   def _EmitEventGetter(self, events_interface, events_class):
     self._members_emitter.Emit(
@@ -543,6 +583,10 @@
         TYPE=events_interface)
 
     self._implementation_members_emitter.Emit(
+        '\n  /**'
+        '\n   * @domName EventTarget.addEventListener, '
+        'EventTarget.removeEventListener, EventTarget.dispatchEvent'
+        '\n   */'
         '\n  $TYPE get on =>\n    new $TYPE(this);\n',
         TYPE=events_class)
 
@@ -593,16 +637,18 @@
 
 # ------------------------------------------------------------------------------
 
-class Dart2JSBackend(object):
+class Dart2JSBackend(HtmlDartGenerator):
   """Generates a dart2js class for the dart:html library from a DOM IDL
   interface.
   """
 
   def __init__(self, interface, options):
-    self._interface = interface
+    super(Dart2JSBackend, self).__init__(interface, options)
+
     self._database = options.database
     self._template_loader = options.templates
     self._type_registry = options.type_registry
+    self._renamer = options.renamer
     self._interface_type_info = self._type_registry.TypeInfo(self._interface.id)
     self._current_secondary_parent = None
 
@@ -616,11 +662,7 @@
     return None
 
   def AdditionalImplementedInterfaces(self):
-    # TODO: Include all implemented interfaces, including other Lists.
-    implements = []
-    if self._interface_type_info.is_typed_array():
-      element_type = self._interface_type_info.list_item_type()
-      implements.append('List<%s>' % self._DartType(element_type))
+    implements = super(Dart2JSBackend, self).AdditionalImplementedInterfaces()
     if self._interface_type_info.list_item_type():
       implements.append('JavaScriptIndexingBehavior')
     return implements
@@ -630,6 +672,9 @@
     return ' native "%s"' % native_spec
 
   def ImplementationTemplate(self):
+    if IsPureInterface(self._interface.id):
+      return self._template_loader.Load('pure_interface.darttemplate')
+
     template_file = ('impl_%s.darttemplate' %
                      self._interface_type_info.interface_name())
     return (self._template_loader.TryLoad(template_file) or
@@ -722,6 +767,10 @@
     if self._HasCustomImplementation(attribute.id):
       return
 
+    if IsPureInterface(self._interface.id):
+      self._AddInterfaceAttribute(attribute)
+      return
+
     if attribute.id != html_name:
       self._AddAttributeUsingProperties(attribute, html_name, read_only)
       return
@@ -760,6 +809,7 @@
 
     output_type = self._NarrowOutputType(attribute.type.id)
     input_type = self._NarrowInputType(attribute.type.id)
+    self.EmitAttributeDocumentation(attribute)
     if not read_only:
       self._members_emitter.Emit(
           '\n  $TYPE $NAME;'
@@ -778,7 +828,16 @@
     if not read_only:
       self._AddRenamingSetter(attribute, html_name)
 
+  def _AddInterfaceAttribute(self, attribute):
+    self._members_emitter.Emit(
+        '\n  $TYPE $NAME;'
+        '\n',
+        NAME=DartDomNameOfAttribute(attribute),
+        TYPE=self._NarrowOutputType(attribute.type.id))
+
   def _AddRenamingGetter(self, attr, html_name):
+    self.EmitAttributeDocumentation(attr)
+
     conversion = self._OutputConversion(attr.type.id, attr.id)
     if conversion:
       return self._AddConvertingGetter(attr, html_name, conversion)
@@ -792,6 +851,8 @@
         TYPE=return_type)
 
   def _AddRenamingSetter(self, attr, html_name):
+    self.EmitAttributeDocumentation(attr)
+
     conversion = self._InputConversion(attr.type.id, attr.id)
     if conversion:
       return self._AddConvertingSetter(attr, html_name, conversion)
@@ -845,8 +906,12 @@
     if self._HasCustomImplementation(info.name):
       return
 
-    # Any conversions needed?
-    if any(self._OperationRequiresConversions(op) for op in info.overloads):
+    self.EmitOperationDocumentation(info)
+
+    if IsPureInterface(self._interface.id):
+      self._AddInterfaceOperation(info, html_name)
+    elif any(self._OperationRequiresConversions(op) for op in info.overloads):
+      # Any conversions needed?
       self._AddOperationWithConversions(info, html_name)
     else:
       self._AddDirectNativeOperation(info, html_name)
@@ -1015,6 +1080,20 @@
           argument_count = position
       GenerateCall(operation, argument_count, [])
 
+  def _AddInterfaceOperation(self, info, html_name):
+    self._members_emitter.Emit(
+        '\n'
+        '  $TYPE $NAME($PARAMS);\n',
+        TYPE=self._NarrowOutputType(info.type_name),
+        NAME=info.name,
+        PARAMS=info.ParametersDeclaration(self._NarrowInputType))
+
+  def AddConstant(self, constant):
+    type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id)
+    self._members_emitter.Emit('\n  static const $TYPE$NAME = $VALUE;\n',
+        NAME=constant.id,
+        TYPE=type,
+        VALUE=constant.value)
 
   def _IsOptional(self, operation, argument):
     return IsOptional(argument)
@@ -1052,8 +1131,7 @@
     return self._NarrowToImplementationType(type_name)
 
   def _NarrowOutputType(self, type_name):
-    secure_name = SecureOutputType(self, type_name, True)
-    return self._NarrowToImplementationType(secure_name)
+    return SecureOutputType(self, type_name)
 
   def _FindShadowedAttribute(self, attr):
     """Returns (attribute, superinterface) or (None, None)."""
diff --git a/lib/html/scripts/systemnative.py b/sdk/lib/html/scripts/systemnative.py
similarity index 96%
rename from lib/html/scripts/systemnative.py
rename to sdk/lib/html/scripts/systemnative.py
index 55477de..7155f29 100644
--- a/lib/html/scripts/systemnative.py
+++ b/sdk/lib/html/scripts/systemnative.py
@@ -10,11 +10,14 @@
 import os
 from generator import *
 from systemhtml import SecureOutputType
+from htmldartgenerator import *
 
-class DartiumBackend(object):
+class DartiumBackend(HtmlDartGenerator):
   """Generates Dart implementation for one DOM IDL interface."""
 
   def __init__(self, interface, cpp_library_emitter, options):
+    super(DartiumBackend, self).__init__(interface, options)
+
     self._interface = interface
     self._cpp_library_emitter = cpp_library_emitter
     self._database = options.database
@@ -104,9 +107,6 @@
   def RootClassName(self):
     return 'NativeFieldWrapperClass1'
 
-  def AdditionalImplementedInterfaces(self):
-    return []
-
   def NativeSpec(self):
     return ''
 
@@ -209,6 +209,20 @@
         ARGUMENTS=constructor_info.ParametersAsArgumentList(),
         NATIVE_NAME=native_binding)
 
+  def AddConstructors(self, constructors, factory_provider, class_name,
+      base_class):
+    super(DartiumBackend, self).AddConstructors(constructors, factory_provider,
+        class_name, base_class)
+
+    super_constructor = ''
+    if base_class and base_class != 'NativeFieldWrapperClass1':
+      super_constructor = ': super.internal()'
+
+    self._members_emitter.Emit(
+        '  $CLASSNAME.internal()$SUPERCONSTRUCTOR;\n',
+        CLASSNAME=class_name,
+        SUPERCONSTRUCTOR=super_constructor)
+
   def FinishInterface(self):
     self._GenerateCPPHeader()
 
@@ -462,6 +476,13 @@
     else:
       self._GenerateDispatcher(info.operations, dart_declaration, [info.name for info in info.param_infos])
 
+  def AddConstant(self, constant):
+    type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id)
+    self._members_emitter.Emit('\n  static const $TYPE$NAME = $VALUE;\n',
+        NAME=constant.id,
+        TYPE=type,
+        VALUE=constant.value)
+
   def _GenerateDispatcher(self, operations, dart_declaration, argument_names):
 
     body = self._members_emitter.Emit(
@@ -757,8 +778,12 @@
     native_binding = '%s_%s_%s' % (self._interface.id, idl_name, native_suffix)
     self._members_emitter.Emit(
         '\n'
-        '  $DART_DECLARATION native "$NATIVE_BINDING";\n',
-        DART_DECLARATION=dart_declaration, NATIVE_BINDING=native_binding)
+        '\n  /** @domName $DOMINTERFACE.$DOMNAME */'
+        '\n  $DART_DECLARATION native "$NATIVE_BINDING";\n',
+        DOMINTERFACE=self._interface.id,
+        DOMNAME=idl_name,
+        DART_DECLARATION=dart_declaration,
+        NATIVE_BINDING=native_binding)
 
     cpp_callback_name = '%s%s' % (idl_name, native_suffix)
     self._cpp_resolver_emitter.Emit(
diff --git a/lib/html/scripts/templateloader.py b/sdk/lib/html/scripts/templateloader.py
similarity index 100%
rename from lib/html/scripts/templateloader.py
rename to sdk/lib/html/scripts/templateloader.py
diff --git a/lib/html/scripts/templateloader_test.py b/sdk/lib/html/scripts/templateloader_test.py
similarity index 100%
rename from lib/html/scripts/templateloader_test.py
rename to sdk/lib/html/scripts/templateloader_test.py
diff --git a/lib/html/src/CrossFrameTypes.dart b/sdk/lib/html/src/CrossFrameTypes.dart
similarity index 100%
rename from lib/html/src/CrossFrameTypes.dart
rename to sdk/lib/html/src/CrossFrameTypes.dart
diff --git a/lib/html/src/Device.dart b/sdk/lib/html/src/Device.dart
similarity index 100%
rename from lib/html/src/Device.dart
rename to sdk/lib/html/src/Device.dart
diff --git a/lib/html/src/EventListener.dart b/sdk/lib/html/src/EventListener.dart
similarity index 100%
rename from lib/html/src/EventListener.dart
rename to sdk/lib/html/src/EventListener.dart
diff --git a/lib/html/src/Isolates.dart b/sdk/lib/html/src/Isolates.dart
similarity index 100%
rename from lib/html/src/Isolates.dart
rename to sdk/lib/html/src/Isolates.dart
diff --git a/sdk/lib/html/src/KeyCode.dart b/sdk/lib/html/src/KeyCode.dart
new file mode 100644
index 0000000..54771b7
--- /dev/null
+++ b/sdk/lib/html/src/KeyCode.dart
@@ -0,0 +1,196 @@
+// 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.
+
+/**
+ * Defines the keycode values for keys that are returned by 
+ * KeyboardEvent.keyCode.
+ * 
+ * Important note: There is substantial divergence in how different browsers
+ * handle keycodes and their variants in different locales/keyboard layouts. We
+ * provide these constants to help make code processing keys more readable.
+ */
+abstract class KeyCode {
+  // These constant names were borrowed from Closure's Keycode enumeration
+  // class.
+  // http://closure-library.googlecode.com/svn/docs/closure_goog_events_keycodes.js.source.html  
+  static final int WIN_KEY_FF_LINUX = 0;
+  static final int MAC_ENTER = 3;
+  static final int BACKSPACE = 8;
+  static final int TAB = 9;
+  /** NUM_CENTER is also NUMLOCK for FF and Safari on Mac. */
+  static final int NUM_CENTER = 12;
+  static final int ENTER = 13;
+  static final int SHIFT = 16;
+  static final int CTRL = 17;
+  static final int ALT = 18;
+  static final int PAUSE = 19;
+  static final int CAPS_LOCK = 20;
+  static final int ESC = 27;
+  static final int SPACE = 32;
+  static final int PAGE_UP = 33;
+  static final int PAGE_DOWN = 34;
+  static final int END = 35;
+  static final int HOME = 36;
+  static final int LEFT = 37;
+  static final int UP = 38;
+  static final int RIGHT = 39;
+  static final int DOWN = 40;
+  static final int NUM_NORTH_EAST = 33;
+  static final int NUM_SOUTH_EAST = 34;
+  static final int NUM_SOUTH_WEST = 35;
+  static final int NUM_NORTH_WEST = 36;
+  static final int NUM_WEST = 37;
+  static final int NUM_NORTH = 38;
+  static final int NUM_EAST = 39;
+  static final int NUM_SOUTH = 40;
+  static final int PRINT_SCREEN = 44;
+  static final int INSERT = 45;
+  static final int NUM_INSERT = 45;
+  static final int DELETE = 46;
+  static final int NUM_DELETE = 46;
+  static final int ZERO = 48;
+  static final int ONE = 49;
+  static final int TWO = 50;
+  static final int THREE = 51;
+  static final int FOUR = 52;
+  static final int FIVE = 53;
+  static final int SIX = 54;
+  static final int SEVEN = 55;
+  static final int EIGHT = 56;
+  static final int NINE = 57;
+  static final int FF_SEMICOLON = 59;
+  static final int FF_EQUALS = 61;
+  /**
+   * CAUTION: The question mark is for US-keyboard layouts. It varies
+   * for other locales and keyboard layouts.
+   */
+  static final int QUESTION_MARK = 63;
+  static final int A = 65;
+  static final int B = 66;
+  static final int C = 67;
+  static final int D = 68;
+  static final int E = 69;
+  static final int F = 70;
+  static final int G = 71;
+  static final int H = 72;
+  static final int I = 73;
+  static final int J = 74;
+  static final int K = 75;
+  static final int L = 76;
+  static final int M = 77;
+  static final int N = 78;
+  static final int O = 79;
+  static final int P = 80;
+  static final int Q = 81;
+  static final int R = 82;
+  static final int S = 83;
+  static final int T = 84;
+  static final int U = 85;
+  static final int V = 86;
+  static final int W = 87;
+  static final int X = 88;
+  static final int Y = 89;
+  static final int Z = 90;
+  static final int META = 91;
+  static final int WIN_KEY_LEFT = 91;
+  static final int WIN_KEY_RIGHT = 92;
+  static final int CONTEXT_MENU = 93;
+  static final int NUM_ZERO = 96;
+  static final int NUM_ONE = 97;
+  static final int NUM_TWO = 98;
+  static final int NUM_THREE = 99;
+  static final int NUM_FOUR = 100;
+  static final int NUM_FIVE = 101;
+  static final int NUM_SIX = 102;
+  static final int NUM_SEVEN = 103;
+  static final int NUM_EIGHT = 104;
+  static final int NUM_NINE = 105;
+  static final int NUM_MULTIPLY = 106;
+  static final int NUM_PLUS = 107;
+  static final int NUM_MINUS = 109;
+  static final int NUM_PERIOD = 110;
+  static final int NUM_DIVISION = 111;
+  static final int F1 = 112;
+  static final int F2 = 113;
+  static final int F3 = 114;
+  static final int F4 = 115;
+  static final int F5 = 116;
+  static final int F6 = 117;
+  static final int F7 = 118;
+  static final int F8 = 119;
+  static final int F9 = 120;
+  static final int F10 = 121;
+  static final int F11 = 122;
+  static final int F12 = 123;
+  static final int NUMLOCK = 144;
+  static final int SCROLL_LOCK = 145;
+
+  // OS-specific media keys like volume controls and browser controls.
+  static final int FIRST_MEDIA_KEY = 166;
+  static final int LAST_MEDIA_KEY = 183;
+
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SEMICOLON = 186;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int DASH = 189;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int EQUALS = 187;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int COMMA = 188;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int PERIOD = 190;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SLASH = 191;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int APOSTROPHE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int TILDE = 192;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int SINGLE_QUOTE = 222;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int OPEN_SQUARE_BRACKET = 219;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int BACKSLASH = 220;
+  /**
+   * CAUTION: This constant requires localization for other locales and keyboard
+   * layouts.
+   */
+  static final int CLOSE_SQUARE_BRACKET = 221;
+  static final int WIN_KEY = 224;
+  static final int MAC_FF_META = 224;
+  static final int WIN_IME = 229;
+}
diff --git a/lib/html/src/KeyLocation.dart b/sdk/lib/html/src/KeyLocation.dart
similarity index 100%
rename from lib/html/src/KeyLocation.dart
rename to sdk/lib/html/src/KeyLocation.dart
diff --git a/lib/html/src/KeyName.dart b/sdk/lib/html/src/KeyName.dart
similarity index 99%
rename from lib/html/src/KeyName.dart
rename to sdk/lib/html/src/KeyName.dart
index 5834582..ee96ceb 100644
--- a/lib/html/src/KeyName.dart
+++ b/sdk/lib/html/src/KeyName.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// 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/lib/html/src/Measurement.dart b/sdk/lib/html/src/Measurement.dart
similarity index 100%
rename from lib/html/src/Measurement.dart
rename to sdk/lib/html/src/Measurement.dart
diff --git a/lib/html/src/ReadyState.dart b/sdk/lib/html/src/ReadyState.dart
similarity index 100%
rename from lib/html/src/ReadyState.dart
rename to sdk/lib/html/src/ReadyState.dart
diff --git a/lib/html/src/Serialization.dart b/sdk/lib/html/src/Serialization.dart
similarity index 100%
rename from lib/html/src/Serialization.dart
rename to sdk/lib/html/src/Serialization.dart
diff --git a/lib/html/src/Timer.dart b/sdk/lib/html/src/Timer.dart
similarity index 100%
rename from lib/html/src/Timer.dart
rename to sdk/lib/html/src/Timer.dart
diff --git a/lib/html/src/_Collections.dart b/sdk/lib/html/src/_Collections.dart
similarity index 100%
rename from lib/html/src/_Collections.dart
rename to sdk/lib/html/src/_Collections.dart
diff --git a/lib/html/src/_HttpRequestUtils.dart b/sdk/lib/html/src/_HttpRequestUtils.dart
similarity index 100%
rename from lib/html/src/_HttpRequestUtils.dart
rename to sdk/lib/html/src/_HttpRequestUtils.dart
diff --git a/lib/html/src/_ListIterators.dart b/sdk/lib/html/src/_ListIterators.dart
similarity index 100%
rename from lib/html/src/_ListIterators.dart
rename to sdk/lib/html/src/_ListIterators.dart
diff --git a/lib/html/src/_Lists.dart b/sdk/lib/html/src/_Lists.dart
similarity index 100%
rename from lib/html/src/_Lists.dart
rename to sdk/lib/html/src/_Lists.dart
diff --git a/lib/html/src/_Testing.dart b/sdk/lib/html/src/_Testing.dart
similarity index 100%
rename from lib/html/src/_Testing.dart
rename to sdk/lib/html/src/_Testing.dart
diff --git a/lib/html/src/dart2js_Conversions.dart b/sdk/lib/html/src/dart2js_Conversions.dart
similarity index 89%
rename from lib/html/src/dart2js_Conversions.dart
rename to sdk/lib/html/src/dart2js_Conversions.dart
index 5ce8806..b5daaf3 100644
--- a/lib/html/src/dart2js_Conversions.dart
+++ b/sdk/lib/html/src/dart2js_Conversions.dart
@@ -27,7 +27,7 @@
 // window as a parameter.
 
 Window _convertNativeToDart_Window(win) {
-  return _DOMWindowCrossFrameImpl._createSafe(win);
+  return _DOMWindowCrossFrame._createSafe(win);
 }
 
 EventTarget _convertNativeToDart_EventTarget(e) {
@@ -35,13 +35,13 @@
   // from a different frame - without a patched prototype - so we cannot
   // rely on Dart type checking.
   if (JS('bool', r'"setInterval" in #', e))
-    return _DOMWindowCrossFrameImpl._createSafe(e);
+    return _DOMWindowCrossFrame._createSafe(e);
   else
     return e;
 }
 
 EventTarget _convertDartToNative_EventTarget(e) {
-  if (e is _DOMWindowCrossFrameImpl) {
+  if (e is _DOMWindowCrossFrame) {
     return e._window;
   } else {
     return e;
@@ -75,9 +75,11 @@
 // We can get rid of this conversion if _TypedImageData implements the fields
 // with native names.
 _convertDartToNative_ImageData(ImageData imageData) {
-  if (imageData is _ImageDataImpl) return imageData;
-  return JS('Object', '{data: #, height: #, width: #}',
-            imageData.data, imageData.height, imageData.width);
+  if (imageData is _TypedImageData) {
+    return JS('Object', '{data: #, height: #, width: #}',
+        imageData.data, imageData.height, imageData.width);
+  }
+  return imageData;
 }
 
 
@@ -136,7 +138,7 @@
     return false;  // number, string.
   }
   if (containsDate(nativeKey)) {
-    throw const NotImplementedException('IDBKey containing Date');
+    throw new UnimplementedError('IDBKey containing Date');
   }
   // TODO: Cache conversion somewhere?
   return nativeKey;
@@ -217,11 +219,11 @@
     if (e is String) return e;
     if (e is Date) {
       // TODO(sra).
-      throw const NotImplementedException('structured clone of Date');
+      throw new UnimplementedError('structured clone of Date');
     }
     if (e is RegExp) {
       // TODO(sra).
-      throw const NotImplementedException('structured clone of RegExp');
+      throw new UnimplementedError('structured clone of RegExp');
     }
 
     // The browser's internal structured cloning algorithm will copy certain
@@ -231,33 +233,15 @@
     // TODO(sra): The JavaScript objects suitable for direct cloning by the
     // structured clone algorithm could be tagged with an private interface.
 
-    if (e is _FileImpl) return e;
-    if (e is File) {
-      throw const NotImplementedException('structured clone of File');
-    }
-
-    if (e is _BlobImpl) return e;
-    if (e is Blob) {
-      throw const NotImplementedException('structured clone of Blob');
-    }
-
-    if (e is _FileListImpl) return e;
+    if (e is File) return e;
+    if (e is Blob) return e;
+    if (e is _FileList) return e;
 
     // TODO(sra): Firefox: How to convert _TypedImageData on the other end?
-    if (e is _ImageDataImpl) return e;
-    if (e is ImageData) {
-      throw const NotImplementedException('structured clone of ImageData');
-    }
+    if (e is ImageData) return e;
+    if (e is ArrayBuffer) return e;
 
-    if (e is _ArrayBufferImpl) return e;
-    if (e is ArrayBuffer) {
-      throw const NotImplementedException('structured clone of ArrayBuffer');
-    }
-
-    if (e is _ArrayBufferViewImpl) return e;
-    if (e is ArrayBufferView) {
-      throw const NotImplementedException('structured clone of ArrayBufferView');
-    }
+    if (e is ArrayBufferView) return e;
 
     if (e is Map) {
       var slot = findSlot(e);
@@ -328,7 +312,7 @@
       return copy;
     }
 
-    throw const NotImplementedException('structured clone of other type');
+    throw new UnimplementedError('structured clone of other type');
   }
 
   var copy = walk(value);
@@ -381,12 +365,12 @@
 
     if (_isJavaScriptDate(e)) {
       // TODO(sra).
-      throw const NotImplementedException('structured clone of Date');
+      throw new UnimplementedError('structured clone of Date');
     }
 
     if (_isJavaScriptRegExp(e)) {
       // TODO(sra).
-      throw const NotImplementedException('structured clone of RegExp');
+      throw new UnimplementedError('structured clone of RegExp');
     }
 
     if (_isJavaScriptSimpleObject(e)) {
diff --git a/lib/html/src/dart2js_DOMImplementation.dart b/sdk/lib/html/src/dart2js_DOMImplementation.dart
similarity index 82%
rename from lib/html/src/dart2js_DOMImplementation.dart
rename to sdk/lib/html/src/dart2js_DOMImplementation.dart
index ca3896f..aca0758 100644
--- a/lib/html/src/dart2js_DOMImplementation.dart
+++ b/sdk/lib/html/src/dart2js_DOMImplementation.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // TODO(vsm): Unify with Dartium version.
-class _DOMWindowCrossFrameImpl implements Window {
+class _DOMWindowCrossFrame implements Window {
   // Private window.  Note, this is a window in another frame, so it
   // cannot be typed as "Window" as its prototype is not patched
   // properly.  Its fields and methods can only be accessed via JavaScript.
@@ -11,9 +11,9 @@
 
   // Fields.
   History get history =>
-    _HistoryCrossFrameImpl._createSafe(JS('History', '#.history', _window));
+    _HistoryCrossFrame._createSafe(JS('History', '#.history', _window));
   Location get location =>
-    _LocationCrossFrameImpl._createSafe(JS('Location', '#.location', _window));
+    _LocationCrossFrame._createSafe(JS('Location', '#.location', _window));
 
   // TODO(vsm): Add frames to navigate subframes.  See 2312.
 
@@ -41,19 +41,19 @@
   }
 
   // Implementation support.
-  _DOMWindowCrossFrameImpl(this._window);
+  _DOMWindowCrossFrame(this._window);
 
   static Window _createSafe(w) {
     if (identical(w, window)) {
       return w;
     } else {
       // TODO(vsm): Cache or implement equality.
-      return new _DOMWindowCrossFrameImpl(w);
+      return new _DOMWindowCrossFrame(w);
     }
   }
 }
 
-class _LocationCrossFrameImpl implements Location {
+class _LocationCrossFrame implements Location {
   // Private location.  Note, this is a location object in another frame, so it
   // cannot be typed as "Location" as its prototype is not patched
   // properly.  Its fields and methods can only be accessed via JavaScript.
@@ -65,19 +65,19 @@
   }
 
   // Implementation support.
-  _LocationCrossFrameImpl(this._location);
+  _LocationCrossFrame(this._location);
 
   static Location _createSafe(location) {
     if (identical(location, window.location)) {
       return location;
     } else {
       // TODO(vsm): Cache or implement equality.
-      return new _LocationCrossFrameImpl(location);
+      return new _LocationCrossFrame(location);
     }
   }
 }
 
-class _HistoryCrossFrameImpl implements History {
+class _HistoryCrossFrame implements History {
   // Private history.  Note, this is a history object in another frame, so it
   // cannot be typed as "History" as its prototype is not patched
   // properly.  Its fields and methods can only be accessed via JavaScript.
@@ -90,14 +90,14 @@
   void go(int distance) => JS('void', '#.go(#)', _history, distance);
 
   // Implementation support.
-  _HistoryCrossFrameImpl(this._history);
+  _HistoryCrossFrame(this._history);
 
   static History _createSafe(h) {
     if (identical(h, window.history)) {
       return h;
     } else {
       // TODO(vsm): Cache or implement equality.
-      return new _HistoryCrossFrameImpl(h);
+      return new _HistoryCrossFrame(h);
     }
   }
 }
diff --git a/lib/html/src/dart2js_FactoryProviders.dart b/sdk/lib/html/src/dart2js_FactoryProviders.dart
similarity index 100%
rename from lib/html/src/dart2js_FactoryProviders.dart
rename to sdk/lib/html/src/dart2js_FactoryProviders.dart
diff --git a/lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart b/sdk/lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart
similarity index 73%
rename from lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart
rename to sdk/lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart
index 71e9e38..d962f6d 100644
--- a/lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart
+++ b/sdk/lib/html/src/dart2js_IDBKeyRangeFactoryProvider.dart
@@ -34,16 +34,16 @@
 
   static _translateKey(idbkey) => idbkey;  // TODO: fixme.
 
-  static _IDBKeyRangeImpl _only(cls, value) =>
-       JS('_IDBKeyRangeImpl', '#.only(#)', cls, value);
+  static IDBKeyRange _only(cls, value) =>
+       JS('IDBKeyRange', '#.only(#)', cls, value);
 
-  static _IDBKeyRangeImpl _lowerBound(cls, bound, open) =>
-       JS('_IDBKeyRangeImpl', '#.lowerBound(#, #)', cls, bound, open);
+  static IDBKeyRange _lowerBound(cls, bound, open) =>
+       JS('IDBKeyRange', '#.lowerBound(#, #)', cls, bound, open);
 
-  static _IDBKeyRangeImpl _upperBound(cls, bound, open) =>
-       JS('_IDBKeyRangeImpl', '#.upperBound(#, #)', cls, bound, open);
+  static IDBKeyRange _upperBound(cls, bound, open) =>
+       JS('IDBKeyRange', '#.upperBound(#, #)', cls, bound, open);
 
-  static _IDBKeyRangeImpl _bound(cls, lower, upper, lowerOpen, upperOpen) =>
-       JS('_IDBKeyRangeImpl', '#.bound(#, #, #, #)',
+  static IDBKeyRange _bound(cls, lower, upper, lowerOpen, upperOpen) =>
+       JS('IDBKeyRange', '#.bound(#, #, #, #)',
           cls, lower, upper, lowerOpen, upperOpen);
 }
diff --git a/lib/html/src/dart2js_LocationWrapper.dart b/sdk/lib/html/src/dart2js_LocationWrapper.dart
similarity index 100%
rename from lib/html/src/dart2js_LocationWrapper.dart
rename to sdk/lib/html/src/dart2js_LocationWrapper.dart
diff --git a/lib/html/src/dart2js_MutationObserverSupported.dart b/sdk/lib/html/src/dart2js_MutationObserverSupported.dart
similarity index 100%
rename from lib/html/src/dart2js_MutationObserverSupported.dart
rename to sdk/lib/html/src/dart2js_MutationObserverSupported.dart
diff --git a/lib/html/src/dart2js_TypedArrayFactoryProvider.dart b/sdk/lib/html/src/dart2js_TypedArrayFactoryProvider.dart
similarity index 100%
rename from lib/html/src/dart2js_TypedArrayFactoryProvider.dart
rename to sdk/lib/html/src/dart2js_TypedArrayFactoryProvider.dart
diff --git a/lib/html/src/dartium_FactoryProviders.dart b/sdk/lib/html/src/dartium_FactoryProviders.dart
similarity index 94%
rename from lib/html/src/dartium_FactoryProviders.dart
rename to sdk/lib/html/src/dartium_FactoryProviders.dart
index f31947a..0678689 100644
--- a/lib/html/src/dartium_FactoryProviders.dart
+++ b/sdk/lib/html/src/dartium_FactoryProviders.dart
@@ -13,20 +13,20 @@
 class _IDBKeyRangeFactoryProvider {
 
   static IDBKeyRange createIDBKeyRange_only(/*IDBKey*/ value) =>
-      _IDBKeyRangeImpl.only_(value);
+      IDBKeyRange.only_(value);
 
   static IDBKeyRange createIDBKeyRange_lowerBound(
       /*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeImpl.lowerBound_(bound, open);
+      IDBKeyRange.lowerBound_(bound, open);
 
   static IDBKeyRange createIDBKeyRange_upperBound(
       /*IDBKey*/ bound, [bool open = false]) =>
-      _IDBKeyRangeImpl.upperBound_(bound, open);
+      IDBKeyRange.upperBound_(bound, open);
 
   static IDBKeyRange createIDBKeyRange_bound(
       /*IDBKey*/ lower, /*IDBKey*/ upper,
       [bool lowerOpen = false, bool upperOpen = false]) =>
-      _IDBKeyRangeImpl.bound_(lower, upper, lowerOpen, upperOpen);
+      IDBKeyRange.bound_(lower, upper, lowerOpen, upperOpen);
 }
 
 class _TypedArrayFactoryProvider {
@@ -108,5 +108,5 @@
 }
 
 class _TextFactoryProvider {
-  static Text createText(String data) => _document.$dom_createTextNode(data);
+  static Text createText(String data) => document.$dom_createTextNode(data);
 }
diff --git a/lib/html/src/dartium_MutationObserverSupported.dart b/sdk/lib/html/src/dartium_MutationObserverSupported.dart
similarity index 100%
rename from lib/html/src/dartium_MutationObserverSupported.dart
rename to sdk/lib/html/src/dartium_MutationObserverSupported.dart
diff --git a/lib/html/src/native_DOMImplementation.dart b/sdk/lib/html/src/native_DOMImplementation.dart
similarity index 86%
rename from lib/html/src/native_DOMImplementation.dart
rename to sdk/lib/html/src/native_DOMImplementation.dart
index d45e7e4..206ec0f 100644
--- a/lib/html/src/native_DOMImplementation.dart
+++ b/sdk/lib/html/src/native_DOMImplementation.dart
@@ -27,7 +27,7 @@
 
   static Map createMap() => {};
 
-  static makeNotImplementedException(String fileName, int lineNo) {
+  static makeUnimplementedError(String fileName, int lineNo) {
     return new UnsupportedError('[info: $fileName:$lineNo]');
   }
 
@@ -39,14 +39,14 @@
 }
 
 class _NPObject extends NativeFieldWrapperClass1 {
-  _NPObject();
+  _NPObject.internal();
   static _NPObject retrieve(String key) native "NPObject_retrieve";
   property(String propertyName) native "NPObject_property";
   invoke(String methodName, [List args = null]) native "NPObject_invoke";
 }
 
-class _DOMWindowCrossFrameImpl extends NativeFieldWrapperClass1 implements Window {
-  _DOMWindowCrossFrameImpl();
+class _DOMWindowCrossFrame extends NativeFieldWrapperClass1 implements Window {
+  _DOMWindowCrossFrame.internal();
 
   // Fields.
   History get history() native "DOMWindow_history_cross_frame_Getter";
@@ -67,8 +67,8 @@
   String get typeName => "DOMWindow";
 }
 
-class _HistoryCrossFrameImpl extends NativeFieldWrapperClass1 implements History {
-  _HistoryCrossFrameImpl();
+class _HistoryCrossFrame extends NativeFieldWrapperClass1 implements History {
+  _HistoryCrossFrame.internal();
 
   // Methods.
   void back() native "History_back_Callback";
@@ -79,8 +79,8 @@
   String get typeName => "History";
 }
 
-class _LocationCrossFrameImpl extends NativeFieldWrapperClass1 implements Location {
-  _LocationCrossFrameImpl();
+class _LocationCrossFrame extends NativeFieldWrapperClass1 implements Location {
+  _LocationCrossFrame.internal();
 
   // Fields.
   void set href(String) native "Location_href_Setter";
@@ -89,8 +89,8 @@
   String get typeName => "Location";
 }
 
-class _DOMStringMapImpl extends NativeFieldWrapperClass1 implements Map<String, String> {
-  _DOMStringMapImpl();
+class _DOMStringMap extends NativeFieldWrapperClass1 implements Map<String, String> {
+  _DOMStringMap.internal();
 
   bool containsValue(String value) => Maps.containsValue(this, value);
   bool containsKey(String key) native "DOMStringMap_containsKey_Callback";
diff --git a/lib/html/src/native_DOMPublic.dart b/sdk/lib/html/src/native_DOMPublic.dart
similarity index 100%
rename from lib/html/src/native_DOMPublic.dart
rename to sdk/lib/html/src/native_DOMPublic.dart
diff --git a/lib/html/src/shared_FactoryProviders.dart b/sdk/lib/html/src/shared_FactoryProviders.dart
similarity index 92%
rename from lib/html/src/shared_FactoryProviders.dart
rename to sdk/lib/html/src/shared_FactoryProviders.dart
index 6ae9b9ff..045b43c 100644
--- a/lib/html/src/shared_FactoryProviders.dart
+++ b/sdk/lib/html/src/shared_FactoryProviders.dart
@@ -5,7 +5,7 @@
 class _CustomEventFactoryProvider {
   static CustomEvent createCustomEvent(String type, [bool canBubble = true,
       bool cancelable = true, Object detail = null]) {
-    final _CustomEventImpl e = _document.$dom_createEvent("CustomEvent");
+    final CustomEvent e = document.$dom_createEvent("CustomEvent");
     e.$dom_initCustomEvent(type, canBubble, cancelable, detail);
     return e;
   }
@@ -14,7 +14,7 @@
 class _EventFactoryProvider {
   static Event createEvent(String type, [bool canBubble = true,
       bool cancelable = true]) {
-    final _EventImpl e = _document.$dom_createEvent("Event");
+    final Event e = document.$dom_createEvent("Event");
     e.$dom_initEvent(type, canBubble, cancelable);
     return e;
   }
@@ -26,7 +26,7 @@
       [bool canBubble = true, bool cancelable = true, bool ctrlKey = false,
       bool altKey = false, bool shiftKey = false, bool metaKey = false,
       EventTarget relatedTarget = null]) {
-    final e = _document.$dom_createEvent("MouseEvent");
+    final e = document.$dom_createEvent("MouseEvent");
     e.$dom_initMouseEvent(type, canBubble, cancelable, view, detail,
         screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
         button, relatedTarget);
@@ -84,7 +84,7 @@
 class _SVGElementFactoryProvider {
   static SVGElement createSVGElement_tag(String tag) {
     final Element temp =
-      _document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
+      document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
     return temp;
   }
 
diff --git a/lib/html/templates/callback.darttemplate b/sdk/lib/html/templates/callback.darttemplate
similarity index 100%
rename from lib/html/templates/callback.darttemplate
rename to sdk/lib/html/templates/callback.darttemplate
diff --git a/lib/html/templates/dart2js_impl.darttemplate b/sdk/lib/html/templates/dart2js_impl.darttemplate
similarity index 73%
rename from lib/html/templates/dart2js_impl.darttemplate
rename to sdk/lib/html/templates/dart2js_impl.darttemplate
index f7a2d29..adf1cf1 100644
--- a/lib/html/templates/dart2js_impl.darttemplate
+++ b/sdk/lib/html/templates/dart2js_impl.darttemplate
@@ -1,3 +1,4 @@
 
+/// @domName $DOMNAME
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS}
diff --git a/lib/html/templates/html/dart2js/factoryprovider.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_AudioElement.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_AudioElement.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_AudioElement.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_AudioElement.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_Blob.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_Blob.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_Blob.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_Blob.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_CSSMatrix.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_CSSMatrix.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_CSSMatrix.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_CSSMatrix.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_DataView.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_DataView.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_DataView.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_DataView.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_FormData.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_FormData.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_FormData.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_FormData.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
similarity index 92%
rename from lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
index 1d35b61..aae0b21 100644
--- a/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/factoryprovider_HttpRequest.darttemplate
@@ -4,7 +4,7 @@
 
 class $FACTORYPROVIDER {
   static HttpRequest createHttpRequest() =>
-      JS('HttpRequest', 'new XMLHttpRequest();');
+      JS('HttpRequest', 'new XMLHttpRequest()');
 
   static HttpRequest createHttpRequest_get(String url,
       onSuccess(HttpRequest request)) =>
diff --git a/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_MutationObserver.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_OptionElement.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_OptionElement.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_OptionElement.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_OptionElement.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_ShadowRoot.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_ShadowRoot.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_ShadowRoot.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_ShadowRoot.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_SharedWorker.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_SharedWorker.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_SharedWorker.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_SharedWorker.darttemplate
diff --git a/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate b/sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
rename to sdk/lib/html/templates/html/dart2js/factoryprovider_TextTrackCue.darttemplate
diff --git a/lib/html/templates/html/dart2js/html_dart2js.darttemplate b/sdk/lib/html/templates/html/dart2js/html_dart2js.darttemplate
similarity index 85%
rename from lib/html/templates/html/dart2js/html_dart2js.darttemplate
rename to sdk/lib/html/templates/html/dart2js/html_dart2js.darttemplate
index fe44af3..cfd1e67 100644
--- a/lib/html/templates/html/dart2js/html_dart2js.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/html_dart2js.darttemplate
@@ -14,6 +14,7 @@
 
 part '$AUXILIARY_DIR/CrossFrameTypes.dart';
 part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyCode.dart';
 part '$AUXILIARY_DIR/KeyLocation.dart';
 part '$AUXILIARY_DIR/KeyName.dart';
 part '$AUXILIARY_DIR/ReadyState.dart';
@@ -38,18 +39,15 @@
 
 
 LocalWindow get window => JS('LocalWindow', 'window');
-_LocalWindowImpl get _window => JS('_LocalWindowImpl', 'window');
 
 Document get document => JS('Document', 'document');
 
-_DocumentImpl get _document => JS('_DocumentImpl', 'document');
-
-Element query(String selector) => _document.query(selector);
-List<Element> queryAll(String selector) => _document.queryAll(selector);
+Element query(String selector) => document.query(selector);
+List<Element> queryAll(String selector) => document.queryAll(selector);
 
 // Workaround for tags like <cite> that lack their own Element subclass --
 // Dart issue 1990.
-class _HTMLElementImpl extends _ElementImpl native "*HTMLElement" {
+class HTMLElement extends Element native "*HTMLElement" {
 }
 
 // Support for Send/ReceivePortSync.
diff --git a/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
diff --git a/lib/html/templates/html/dart2js/impl_Console.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_Console.darttemplate
similarity index 94%
rename from lib/html/templates/html/dart2js/impl_Console.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_Console.darttemplate
index 137f62a..751c4ce 100644
--- a/lib/html/templates/html/dart2js/impl_Console.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_Console.darttemplate
@@ -4,7 +4,6 @@
 
 class $CLASSNAME
     // Console is sometimes a singleton bag-of-properties without a prototype.
-    implements Console
     native "=(typeof console == 'undefined' ? {} : console)" {
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate
similarity index 87%
rename from lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate
index 41de3d7..1f33377 100644
--- a/lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_ElementEvents.darttemplate
@@ -2,8 +2,8 @@
 // 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 $CLASSNAME extends $SUPER implements $INTERFACE {
-  $CLASSNAME(_ptr) : super(_ptr);
+class $CLASSNAME extends $SUPER {
+  $CLASSNAME(EventTarget _ptr) : super(_ptr);
 $!MEMBERS
   EventListenerList get mouseWheel {
     if (JS('bool', '#.onwheel !== undefined', _ptr)) {
diff --git a/lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate
similarity index 79%
rename from lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate
index 1817667..0082f70 100644
--- a/lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_IDBDatabase.darttemplate
@@ -4,7 +4,7 @@
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
-  _IDBTransactionImpl transaction(storeName_OR_storeNames, String mode) {
+  IDBTransaction transaction(storeName_OR_storeNames, String mode) {
     if (mode != 'readonly' && mode != 'readwrite') {
       throw new ArgumentError(mode);
     }
@@ -29,24 +29,24 @@
     return txn;
   }
 
-  static _IDBTransactionImpl _transaction_string_mode($CLASSNAME db, stores, mode) {
+  static IDBTransaction _transaction_string_mode($CLASSNAME db, stores, mode) {
     return db._transaction(stores, mode);
   }
 
-  static _IDBTransactionImpl _transaction_numeric_mode($CLASSNAME db, stores, mode) {
+  static IDBTransaction _transaction_numeric_mode($CLASSNAME db, stores, mode) {
     int intMode;
     if (mode == 'readonly') intMode = IDBTransaction.READ_ONLY;
     if (mode == 'readwrite') intMode = IDBTransaction.READ_WRITE;
     return db._transaction(stores, intMode);
   }
 
-  _IDBTransactionImpl _transaction(stores, mode) native 'transaction';
+  IDBTransaction _transaction(stores, mode) native 'transaction';
 
   static bool _hasNumericMode(txn) =>
       JS('bool', 'typeof(#.mode) === "number"', txn);
 
 $!MEMBERS}
 
-// TODO(sra): This should be a static member of _IDBTransactionImpl but dart2js
+// TODO(sra): This should be a static member of IDBTransaction but dart2js
 // can't handle that.  Move it back after dart2js is completely done.
 var _transaction_fn;  // Assigned one of the static methods.
diff --git a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
similarity index 78%
rename from lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
index bbc27e1..117e0b7 100644
--- a/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_LocalWindow.darttemplate
@@ -4,7 +4,7 @@
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" {
 
-  _DocumentImpl get document => JS('_DocumentImpl', '#.document', this);
+  Document get document => JS('Document', '#.document', this);
 
   Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name);
 
@@ -13,28 +13,18 @@
 
   Window open(String url, String name, [String options]) {
     if (options == null) {
-      return _DOMWindowCrossFrameImpl._createSafe(_open2(url, name));
+      return _DOMWindowCrossFrame._createSafe(_open2(url, name));
     } else {
-      return _DOMWindowCrossFrameImpl._createSafe(_open3(url, name, options));
+      return _DOMWindowCrossFrame._createSafe(_open3(url, name, options));
     }
   }
 
   // API level getter and setter for Location.
   // TODO: The cross domain safe wrapper can be inserted here or folded into
   // _LocationWrapper.
-  LocalLocation get location => _get_location();
-
-  // TODO: consider forcing users to do: window.location.assign('string').
-  /**
-   * Sets the window's location, which causes the browser to navigate to the new
-   * location. [value] may be a Location object or a string.
-   */
-  void set location(value) => _set_location(value);
-
-  // Firefox work-around for Location.  The Firefox location object cannot be
-  // made to behave like a Dart object so must be wrapped.
-
-  LocalLocation _get_location() {
+  LocalLocation get location() {
+    // Firefox work-around for Location.  The Firefox location object cannot be
+    // made to behave like a Dart object so must be wrapped.
     var result = _location;
     if (_isDartLocation(result)) return result;  // e.g. on Chrome.
     if (null == _location_wrapper) {
@@ -43,7 +33,12 @@
     return _location_wrapper;
   }
 
-  void _set_location(value) {
+  // TODO: consider forcing users to do: window.location.assign('string').
+  /**
+   * Sets the window's location, which causes the browser to navigate to the new
+   * location. [value] may be a Location object or a string.
+   */
+  void set location(value) {
     if (value is _LocationWrapper) {
       _location = value._ptr;
     } else {
@@ -72,7 +67,11 @@
     }
   }
 
-
+  /**
+   * Executes a [callback] after the next batch of browser layout measurements
+   * has completed or would have completed if any browser layout measurements
+   * had been scheduled.
+   */
   void requestLayoutFrame(TimeoutHandler callback) {
     _addMeasurementFrameCallback(callback);
   }
@@ -120,33 +119,29 @@
        this);
   }
 
-
-  _IDBFactoryImpl get indexedDB => _get_indexedDB();
-
-  _IDBFactoryImpl _get_indexedDB() =>
-      JS('_IDBFactoryImpl',
+  IDBFactory get indexedDB() =>
+      JS('IDBFactory',
          '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
          this, this, this);
 
-  // TODO(kasperl): Document these.
-  lookupPort(String name) {
+  /**
+   * Lookup a port by its [name].  Return null if no port is
+   * registered under [name].
+   */
+  SendPortSync lookupPort(String name) {
     var port = JSON.parse(localStorage['dart-port:$name']);
     return _deserialize(port);
   }
 
-  registerPort(String name, var port) {
+  /**
+   * Register a [port] on this window under the given [name].  This
+   * port may be retrieved by any isolate (or JavaScript script)
+   * running in this window.
+   */
+  void registerPort(String name, var port) {
     var serialized = _serialize(port);
     localStorage['dart-port:$name'] = JSON.stringify(serialized);
   }
 
-  String createObjectUrl(object) =>
-      JS('String',
-         '(window.URL || window.webkitURL).createObjectURL(#)', object);
-
-  void revokeObjectUrl(String objectUrl) {
-    JS('void',
-       '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl);
-  }
-
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
similarity index 66%
rename from lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
index 62aaa4e..cda9bda 100644
--- a/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_MouseEvent.darttemplate
@@ -3,6 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(String type, Window view, int detail, int screenX,
+      int screenY, int clientX, int clientY, int button, [bool canBubble = true,
+      bool cancelable = true, bool ctrlKey = false, bool altKey = false,
+      bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) =>
+      _$(CLASSNAME)FactoryProvider.create$CLASSNAME(
+          type, view, detail, screenX, screenY,
+          clientX, clientY, button, canBubble, cancelable,
+          ctrlKey, altKey, shiftKey, metaKey,
+          relatedTarget);
 $!MEMBERS
 
   int get offsetX {
diff --git a/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
similarity index 100%
rename from lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_SelectElement.darttemplate
diff --git a/lib/html/templates/html/dart2js/impl_TableElement.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_TableElement.darttemplate
similarity index 84%
rename from lib/html/templates/html/dart2js/impl_TableElement.darttemplate
rename to sdk/lib/html/templates/html/dart2js/impl_TableElement.darttemplate
index 5a9a49b..aa8e769 100644
--- a/lib/html/templates/html/dart2js/impl_TableElement.darttemplate
+++ b/sdk/lib/html/templates/html/dart2js/impl_TableElement.darttemplate
@@ -5,7 +5,7 @@
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
-  _ElementImpl createTBody() {
+  Element createTBody() {
     if (JS('bool', '!!#.createTBody', this)) {
       return this._createTBody();
     }
@@ -14,5 +14,5 @@
     return tbody;
   }
 
-  _ElementImpl _createTBody() native 'createTBody';
+  Element _createTBody() native 'createTBody';
 }
diff --git a/sdk/lib/html/templates/html/dart2js/impl_Url.darttemplate b/sdk/lib/html/templates/html/dart2js/impl_Url.darttemplate
new file mode 100644
index 0000000..66a735c
--- /dev/null
+++ b/sdk/lib/html/templates/html/dart2js/impl_Url.darttemplate
@@ -0,0 +1,16 @@
+// 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  static String createObjectUrl(blob_OR_source_OR_stream) =>
+      JS('String',
+         '(window.URL || window.webkitURL).createObjectURL(#)',
+         blob_OR_source_OR_stream);
+
+  static void revokeObjectUrl(String objectUrl) =>
+      JS('void',
+         '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl);
+$!MEMBERS
+}
diff --git a/lib/html/templates/html/dartium/cpp_callback_header.template b/sdk/lib/html/templates/html/dartium/cpp_callback_header.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_callback_header.template
rename to sdk/lib/html/templates/html/dartium/cpp_callback_header.template
diff --git a/lib/html/templates/html/dartium/cpp_callback_implementation.template b/sdk/lib/html/templates/html/dartium/cpp_callback_implementation.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_callback_implementation.template
rename to sdk/lib/html/templates/html/dartium/cpp_callback_implementation.template
diff --git a/lib/html/templates/html/dartium/cpp_derived_sources.template b/sdk/lib/html/templates/html/dartium/cpp_derived_sources.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_derived_sources.template
rename to sdk/lib/html/templates/html/dartium/cpp_derived_sources.template
diff --git a/lib/html/templates/html/dartium/cpp_header.template b/sdk/lib/html/templates/html/dartium/cpp_header.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_header.template
rename to sdk/lib/html/templates/html/dartium/cpp_header.template
diff --git a/lib/html/templates/html/dartium/cpp_implementation.template b/sdk/lib/html/templates/html/dartium/cpp_implementation.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_implementation.template
rename to sdk/lib/html/templates/html/dartium/cpp_implementation.template
diff --git a/lib/html/templates/html/dartium/cpp_resolver.template b/sdk/lib/html/templates/html/dartium/cpp_resolver.template
similarity index 100%
rename from lib/html/templates/html/dartium/cpp_resolver.template
rename to sdk/lib/html/templates/html/dartium/cpp_resolver.template
diff --git a/lib/html/templates/html/dartium/dart_implementation.darttemplate b/sdk/lib/html/templates/html/dartium/dart_implementation.darttemplate
similarity index 93%
rename from lib/html/templates/html/dartium/dart_implementation.darttemplate
rename to sdk/lib/html/templates/html/dartium/dart_implementation.darttemplate
index 885414fa..bbecfdb 100644
--- a/lib/html/templates/html/dartium/dart_implementation.darttemplate
+++ b/sdk/lib/html/templates/html/dartium/dart_implementation.darttemplate
@@ -4,6 +4,7 @@
 
 // WARNING: Do not edit - generated code.
 
+/// @domName $DOMNAME
 class $CLASSNAME$EXTENDS$IMPLEMENTS {
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/dartium/factoryprovider.darttemplate b/sdk/lib/html/templates/html/dartium/factoryprovider.darttemplate
similarity index 100%
rename from lib/html/templates/html/dartium/factoryprovider.darttemplate
rename to sdk/lib/html/templates/html/dartium/factoryprovider.darttemplate
diff --git a/lib/html/templates/html/dartium/factoryprovider_HttpRequest.darttemplate b/sdk/lib/html/templates/html/dartium/factoryprovider_HttpRequest.darttemplate
similarity index 100%
rename from lib/html/templates/html/dartium/factoryprovider_HttpRequest.darttemplate
rename to sdk/lib/html/templates/html/dartium/factoryprovider_HttpRequest.darttemplate
diff --git a/lib/html/templates/html/dartium/html_dartium.darttemplate b/sdk/lib/html/templates/html/dartium/html_dartium.darttemplate
similarity index 88%
rename from lib/html/templates/html/dartium/html_dartium.darttemplate
rename to sdk/lib/html/templates/html/dartium/html_dartium.darttemplate
index 4225d60..eb16636 100644
--- a/lib/html/templates/html/dartium/html_dartium.darttemplate
+++ b/sdk/lib/html/templates/html/dartium/html_dartium.darttemplate
@@ -15,6 +15,7 @@
 
 part '$AUXILIARY_DIR/CrossFrameTypes.dart';
 part '$AUXILIARY_DIR/EventListener.dart';
+part '$AUXILIARY_DIR/KeyCode.dart';
 part '$AUXILIARY_DIR/KeyLocation.dart';
 part '$AUXILIARY_DIR/KeyName.dart';
 part '$AUXILIARY_DIR/ReadyState.dart';
@@ -35,6 +36,7 @@
 part '$AUXILIARY_DIR/native_DOMPublic.dart';
 part '$AUXILIARY_DIR/native_DOMImplementation.dart';
 
+// FIXME (blois): Rename to _window (ditto __document).
 LocalWindow __window;
 
 LocalWindow get window {
@@ -45,22 +47,19 @@
   return __window;
 }
 
-LocalWindow get _window native "Utils_window";
-
 Document __document;
 
 Document get document {
   if (__document != null) {
     return __document;
   }
-  __document = _document;
+  __document = window.document;
   return __document;
 }
 
-Document get _document => _window.document;
 
-Element query(String selector) => _document.query(selector);
-List<Element> queryAll(String selector) => _document.queryAll(selector);
+Element query(String selector) => document.query(selector);
+List<Element> queryAll(String selector) => document.queryAll(selector);
 
 int _getNewIsolateId() => _Utils._getNewIsolateId();
 
diff --git a/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate b/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
new file mode 100644
index 0000000..0ce4dcf
--- /dev/null
+++ b/sdk/lib/html/templates/html/dartium/impl_LocalWindow.darttemplate
@@ -0,0 +1,36 @@
+// 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+
+  /**
+   * Executes a [callback] after the next batch of browser layout measurements
+   * has completed or would have completed if any browser layout measurements
+   * had been scheduled.
+   */
+  void requestLayoutFrame(TimeoutHandler callback) {
+    _addMeasurementFrameCallback(callback);
+  }
+
+  /**
+   * Lookup a port by its [name].  Return null if no port is
+   * registered under [name].
+   */
+  lookupPort(String name) {
+    var port = JSON.parse(localStorage['dart-port:$name']);
+    return _deserialize(port);
+  }
+
+  /**
+   * Register a [port] on this window under the given [name].  This
+   * port may be retrieved by any isolate (or JavaScript script)
+   * running in this window.
+   */
+  registerPort(String name, var port) {
+    var serialized = _serialize(port);
+    localStorage['dart-port:$name'] = JSON.stringify(serialized);
+  }
+
+$!MEMBERS
+}
diff --git a/sdk/lib/html/templates/html/dartium/impl_MouseEvent.darttemplate b/sdk/lib/html/templates/html/dartium/impl_MouseEvent.darttemplate
new file mode 100644
index 0000000..7be8ca8
--- /dev/null
+++ b/sdk/lib/html/templates/html/dartium/impl_MouseEvent.darttemplate
@@ -0,0 +1,19 @@
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(String type, Window view, int detail, int screenX,
+      int screenY, int clientX, int clientY, int button, [bool canBubble = true,
+      bool cancelable = true, bool ctrlKey = false, bool altKey = false,
+      bool shiftKey = false, bool metaKey = false,
+      EventTarget relatedTarget = null]) =>
+      _$(CLASSNAME)FactoryProvider.create$CLASSNAME(
+          type, view, detail, screenX, screenY,
+          clientX, clientY, button, canBubble, cancelable,
+          ctrlKey, altKey, shiftKey, metaKey,
+          relatedTarget);
+$!MEMBERS
+}
diff --git a/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate b/sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
similarity index 100%
rename from lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
rename to sdk/lib/html/templates/html/impl/factoryprovider_Elements.darttemplate
diff --git a/sdk/lib/html/templates/html/impl/impl_AudioContext.darttemplate b/sdk/lib/html/templates/html/impl/impl_AudioContext.darttemplate
new file mode 100644
index 0000000..3813d0e
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_AudioContext.darttemplate
@@ -0,0 +1,33 @@
+// 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.create$CLASSNAME();
+$!MEMBERS
+$if DART2JS
+  GainNode createGain() {
+    if (JS('bool', '#.createGain !== undefined', this)) {
+      return JS('GainNode', '#.createGain()', this);
+    } else {
+      return JS('GainNode', '#.createGainNode()', this);
+    }
+  }
+
+  ScriptProcessorNode createScriptProcessor(int bufferSize,
+      [int numberOfInputChannels, int numberOfOutputChannels]) {
+    var function = JS('dynamic', '#.createScriptProcessor || '
+        '#.createJavaScriptNode', this, this);
+    if (?numberOfOutputChannels) {
+      return JS('ScriptProcessorNode', '#.call(#, #, #, #)', function, this,
+          bufferSize, numberOfInputChannels, numberOfOutputChannels);
+    } else if (?numberOfInputChannels) {
+      return JS('ScriptProcessorNode', '#.call(#, #, #)', function, this,
+          bufferSize, numberOfInputChannels);
+    } else {
+      return JS('ScriptProcessorNode', '#.call(#, #)', function, this,
+          bufferSize);
+    }
+  }
+$endif
+}
diff --git a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate b/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
similarity index 99%
rename from lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
index d723977..adb8b73 100644
--- a/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_CSSStyleDeclaration.darttemplate
@@ -20,6 +20,9 @@
 }
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.create$CLASSNAME();
+  factory $CLASSNAME.css(String css) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_css(css);
 
 $!MEMBERS
 
diff --git a/lib/html/templates/html/impl/impl_CanvasElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_CanvasElement.darttemplate
similarity index 80%
rename from lib/html/templates/html/impl/impl_CanvasElement.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_CanvasElement.darttemplate
index 7d9d2bf..dba7b01 100644
--- a/lib/html/templates/html/impl/impl_CanvasElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_CanvasElement.darttemplate
@@ -5,5 +5,8 @@
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
+$if DART2JS
+  CanvasRenderingContext getContext(String contextId) native;
+$endif
   CanvasRenderingContext2D get context2d => getContext('2d');
 }
diff --git a/lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/sdk/lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
similarity index 60%
rename from lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index 98a80fd..1198d89 100644
--- a/lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -5,18 +5,38 @@
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 $!MEMBERS
 
+  /**
+   * Sets the color used inside shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
   void setFillColorRgb(int r, int g, int b, [num a = 1]) {
     this.fillStyle = 'rgba($r, $g, $b, $a)';
   }
 
+  /**
+   * Sets the color used inside shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
   void setFillColorHsl(int h, num s, num l, [num a = 1]) {
     this.fillStyle = 'hsla($h, $s%, $l%, $a)';
   }
 
+  /**
+   * Sets the color used for stroking shapes.
+   * [r], [g], [b] are 0-255, [a] is 0-1.
+   */
   void setStrokeColorRgb(int r, int g, int b, [num a = 1]) {
     this.strokeStyle = 'rgba($r, $g, $b, $a)';
   }
 
+  /**
+   * Sets the color used for stroking shapes.
+   * [h] is in degrees, 0-360.
+   * [s], [l] are in percent, 0-100.
+   * [a] is 0-1.
+   */
   void setStrokeColorHsl(int h, num s, num l, [num a = 1]) {
     this.strokeStyle = 'hsla($h, $s%, $l%, $a)';
   }
diff --git a/sdk/lib/html/templates/html/impl/impl_CustomEvent.darttemplate b/sdk/lib/html/templates/html/impl/impl_CustomEvent.darttemplate
new file mode 100644
index 0000000..d76c038
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_CustomEvent.darttemplate
@@ -0,0 +1,12 @@
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(String type, [bool canBubble = true, bool cancelable = true,
+      Object detail]) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(
+      type, canBubble, cancelable, detail);
+$!MEMBERS
+}
diff --git a/lib/html/templates/html/impl/impl_Document.darttemplate b/sdk/lib/html/templates/html/impl/impl_Document.darttemplate
similarity index 94%
rename from lib/html/templates/html/impl/impl_Document.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_Document.darttemplate
index 77bd731..5469b16 100644
--- a/lib/html/templates/html/impl/impl_Document.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Document.darttemplate
@@ -2,7 +2,7 @@
 // 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 $CLASSNAME extends _NodeImpl implements Document
+class $CLASSNAME extends Node
 $if DART2JS
     native "*HTMLDocument"
 $endif
@@ -11,7 +11,7 @@
 $!MEMBERS
   // TODO(jacobr): implement all Element methods not on Document.
 
-  _ElementImpl query(String selectors) {
+  Element query(String selectors) {
     // It is fine for our RegExp to detect element id query selectors to have
     // false negatives but not false positives.
     if (const RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) {
diff --git a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate b/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
similarity index 94%
rename from lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
index c9dd6b7..d9e967d 100644
--- a/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_DocumentFragment.darttemplate
@@ -55,7 +55,7 @@
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void removeRange(int start, int rangeLength) {
@@ -63,7 +63,7 @@
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void clear() {
@@ -116,8 +116,8 @@
   const EmptyElementRect();
 }
 
-class _FrozenCSSClassSet extends _CssClassSet {
-  _FrozenCSSClassSet() : super(null);
+class _FrozenCssClassSet extends _CssClassSet {
+  _FrozenCssClassSet() : super(null);
 
   void _write(Set s) {
     throw new UnsupportedError(
@@ -129,6 +129,14 @@
 }
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createDocumentFragment();
+
+  factory $CLASSNAME.html(String html) =>
+      _$(CLASSNAME)FactoryProvider.createDocumentFragment_html(html);
+
+  factory $CLASSNAME.svg(String svg) =>
+      new _$(CLASSNAME)FactoryProvider.createDocumentFragment_svg(svg);
+
   List<Element> _elements;
 
   List<Element> get elements {
@@ -147,7 +155,7 @@
     elements.addAll(copy);
   }
 
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
+  Element query(String selectors) => $dom_querySelector(selectors);
 
   List<Element> queryAll(String selectors) =>
     new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
@@ -240,7 +248,7 @@
   Element get offsetParent => null;
   Element get parent => null;
   Map<String, String> get attributes => const {};
-  CSSClassSet get classes => new _FrozenCSSClassSet();
+  CssClassSet get classes => new _FrozenCssClassSet();
   Map<String, String> get dataAttributes => const {};
   CSSStyleDeclaration get style => new Element.tag('div').style;
   Future<CSSStyleDeclaration> get computedStyle =>
diff --git a/lib/html/templates/html/impl/impl_Element.darttemplate b/sdk/lib/html/templates/html/impl/impl_Element.darttemplate
similarity index 86%
rename from lib/html/templates/html/impl/impl_Element.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_Element.darttemplate
index e8b9ed5..f5c05f8 100644
--- a/lib/html/templates/html/impl/impl_Element.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Element.darttemplate
@@ -6,10 +6,10 @@
 // functionality.
 class _ChildrenElementList implements List {
   // Raw Element.
-  final _ElementImpl _element;
-  final _HTMLCollectionImpl _childElements;
+  final Element _element;
+  final HTMLCollection _childElements;
 
-  _ChildrenElementList._wrap(_ElementImpl element)
+  _ChildrenElementList._wrap(Element element)
     : _childElements = element.$dom_children,
       _element = element;
 
@@ -24,7 +24,7 @@
   bool contains(Element element) => _childElements.contains(element);
 
   void forEach(void f(Element element)) {
-    for (_ElementImpl element in _childElements) {
+    for (Element element in _childElements) {
       f(element);
     }
   }
@@ -73,11 +73,11 @@
     return _childElements.length;
   }
 
-  _ElementImpl operator [](int index) {
+  Element operator [](int index) {
     return _childElements[index];
   }
 
-  void operator []=(int index, _ElementImpl value) {
+  void operator []=(int index, Element value) {
     _element.$dom_replaceChild(value, _childElements[index]);
   }
 
@@ -86,17 +86,17 @@
      throw new UnsupportedError('');
    }
 
-  Element add(_ElementImpl value) {
+  Element add(Element value) {
     _element.$dom_appendChild(value);
     return value;
   }
 
-  Element addLast(_ElementImpl value) => add(value);
+  Element addLast(Element value) => add(value);
 
   Iterator<Element> iterator() => _toList().iterator();
 
   void addAll(Collection<Element> collection) {
-    for (_ElementImpl element in collection) {
+    for (Element element in collection) {
       _element.$dom_appendChild(element);
     }
   }
@@ -106,15 +106,15 @@
   }
 
   void setRange(int start, int rangeLength, List from, [int startFrom = 0]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void removeRange(int start, int rangeLength) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   void insertRange(int start, int rangeLength, [initialValue = null]) {
-    throw const NotImplementedException();
+    throw new UnimplementedError();
   }
 
   List getRange(int start, int rangeLength) =>
@@ -296,9 +296,18 @@
   bool get hasNext => _index < _list.length;
 }
 
-class _ElementAttributeMap implements AttributeMap {
+/**
+ * All your attribute manipulation needs in one place.
+ * Extends the regular Map interface by automatically coercing non-string
+ * values to strings.
+ */
+abstract class AttributeMap implements Map<String, String> {
+  void operator []=(String key, value);
+}
 
-  final _ElementImpl _element;
+class _ElementAttributeMap extends AttributeMap {
+
+  final Element _element;
 
   _ElementAttributeMap(this._element);
 
@@ -391,7 +400,7 @@
  * Provides a Map abstraction on top of data-* attributes, similar to the
  * dataSet in the old DOM.
  */
-class _DataAttributeMap implements AttributeMap {
+class _DataAttributeMap extends AttributeMap {
 
   final Map<String, String> $dom_attributes;
 
@@ -461,9 +470,23 @@
   String _strip(String key) => key.substring(5);
 }
 
-class _CssClassSet implements CSSClassSet {
+abstract class CssClassSet implements Set<String> {
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
+  bool toggle(String token);
 
-  final _ElementImpl _element;
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
+  bool get frozen;
+}
+
+class _CssClassSet extends CssClassSet {
+
+  final Element _element;
 
   _CssClassSet(this._element);
 
@@ -488,6 +511,10 @@
 
   bool get isEmpty => _read().isEmpty;
 
+  /**
+   * Returns [:true:] if classes cannot be added or removed from this
+   * [:CssClassSet:].
+   */
   bool get frozen => false;
 
   int get length =>_read().length;
@@ -510,6 +537,10 @@
     return result;
   }
 
+  /**
+   * Adds the class [token] to the element if it is not on it, removes it if it
+   * is.
+   */
   bool toggle(String value) {
     Set<String> s = _read();
     bool result = false;
@@ -620,20 +651,21 @@
 // rects as we must perform all measurement queries at a safe point to avoid
 // triggering unneeded layouts.
 /**
- * All your element measurement needs in one place
+ * All your element measurement needs in one place.
  * @domName none
  */
-class _ElementRectImpl implements ElementRect {
+class ElementRect {
+  // Relative to offsetParent.
   final ClientRect client;
   final ClientRect offset;
   final ClientRect scroll;
 
   // TODO(jacobr): should we move these outside of ElementRect to avoid the
   // overhead of computing them every time even though they are rarely used.
-  final _ClientRectImpl _boundingClientRect;
-  final _ClientRectListImpl _clientRects;
+  final ClientRect _boundingClientRect;
+  final _ClientRectList _clientRects;
 
-  _ElementRectImpl(_ElementImpl element) :
+  ElementRect(Element element) :
     client = new _SimpleClientRect(element.clientLeft,
                                   element.clientTop,
                                   element.clientWidth,
@@ -649,9 +681,10 @@
     _boundingClientRect = element.getBoundingClientRect(),
     _clientRects = element.getClientRects();
 
-  _ClientRectImpl get bounding => _boundingClientRect;
+  // In global coords.
+  ClientRect get bounding => _boundingClientRect;
 
-  // TODO(jacobr): cleanup.
+  // In global coords.
   List<ClientRect> get clientRects {
     final out = new List(_clientRects.length);
     for (num i = 0; i < _clientRects.length; i++) {
@@ -663,6 +696,11 @@
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
 
+  factory $CLASSNAME.html(String html) =>
+      _$(CLASSNAME)FactoryProvider.createElement_html(html);
+  factory $CLASSNAME.tag(String tag) =>
+      _$(CLASSNAME)FactoryProvider.createElement_tag(tag);
+
   /**
    * @domName Element.hasAttribute, Element.getAttribute, Element.setAttribute,
    *   Element.removeAttribute
@@ -683,17 +721,22 @@
     elements.addAll(value);
   }
 
+  /**
+   * @domName childElementCount, firstElementChild, lastElementChild,
+   *   children, Node.nodes.add
+   */
   List<Element> get elements => new _ChildrenElementList._wrap(this);
 
-  _ElementImpl query(String selectors) => $dom_querySelector(selectors);
+  Element query(String selectors) => $dom_querySelector(selectors);
 
   List<Element> queryAll(String selectors) =>
     new _FrozenElementList._wrap($dom_querySelectorAll(selectors));
 
-  _CssClassSet get classes => new _CssClassSet(this);
+  /** @domName className, classList */
+  CssClassSet get classes => new _CssClassSet(this);
 
   void set classes(Collection<String> value) {
-    _CssClassSet classSet = classes;
+    CssClassSet classSet = classes;
     classSet.clear();
     classSet.addAll(value);
   }
@@ -709,32 +752,56 @@
     }
   }
 
+  /**
+   * @domName getClientRects, getBoundingClientRect, clientHeight, clientWidth,
+   * clientTop, clientLeft, offsetHeight, offsetWidth, offsetTop, offsetLeft,
+   * scrollHeight, scrollWidth, scrollTop, scrollLeft
+   */
   Future<ElementRect> get rect {
     return _createMeasurementFuture(
-        () => new _ElementRectImpl(this),
+        () => new ElementRect(this),
         new Completer<ElementRect>());
   }
 
+  /** @domName Window.getComputedStyle */
   Future<CSSStyleDeclaration> get computedStyle {
      // TODO(jacobr): last param should be null, see b/5045788
      return getComputedStyle('');
   }
 
+  /** @domName Window.getComputedStyle */
   Future<CSSStyleDeclaration> getComputedStyle(String pseudoElement) {
     return _createMeasurementFuture(
-        () => _window.$dom_getComputedStyle(this, pseudoElement),
+        () => window.$dom_getComputedStyle(this, pseudoElement),
         new Completer<CSSStyleDeclaration>());
   }
 
+  /**
+   * Adds the specified text as a text node after the last child of this.
+   */
   void addText(String text) {
     this.insertAdjacentText('beforeend', text);
   }
 
+  /**
+   * Parses the specified text as HTML and adds the resulting node after the
+   * last child of this.
+   */
   void addHTML(String text) {
     this.insertAdjacentHTML('beforeend', text);
   }
 
   // Hooks to support custom WebComponents.
+  /**
+   * Experimental support for [web components][wc]. This field stores a
+   * reference to the component implementation. It was inspired by Mozilla's
+   * [x-tags][] project. Please note: in the future it may be possible to
+   * `extend Element` from your class, in which case this field will be
+   * deprecated and will simply return this [Element] object.
+   *
+   * [wc]: http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html
+   * [x-tags]: http://x-tags.org/
+   */
   var xtag;
 
 $if DARTIUM
@@ -855,7 +922,7 @@
         parentTag = _CUSTOM_PARENT_TAG_MAP[tag];
       }
     }
-    final _ElementImpl temp = new Element.tag(parentTag);
+    final Element temp = new Element.tag(parentTag);
     temp.innerHTML = html;
 
     Element element;
@@ -882,6 +949,6 @@
       JS('Element', 'document.createElement(#)', tag);
 $else
   static Element createElement_tag(String tag) =>
-      _document.$dom_createElement(tag);
+      document.$dom_createElement(tag);
 $endif
 }
diff --git a/sdk/lib/html/templates/html/impl/impl_Event.darttemplate b/sdk/lib/html/templates/html/impl/impl_Event.darttemplate
new file mode 100644
index 0000000..55d6039
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_Event.darttemplate
@@ -0,0 +1,17 @@
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  // In JS, canBubble and cancelable are technically required parameters to
+  // init*Event. In practice, though, if they aren't provided they simply
+  // default to false (since that's Boolean(undefined)).
+  //
+  // Contrary to JS, we default canBubble and cancelable to true, since that's
+  // what people want most of the time anyway.
+  factory $CLASSNAME(String type, [bool canBubble = true, bool cancelable = true]) =>
+      _$(CLASSNAME)FactoryProvider.create$CLASSNAME(type, canBubble, cancelable);
+$!MEMBERS
+}
diff --git a/sdk/lib/html/templates/html/impl/impl_EventTarget.darttemplate b/sdk/lib/html/templates/html/impl/impl_EventTarget.darttemplate
new file mode 100644
index 0000000..cc89779
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_EventTarget.darttemplate
@@ -0,0 +1,56 @@
+// 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 Events {
+  /* Raw event target. */
+  final EventTarget _ptr;
+
+  Events(this._ptr);
+
+  EventListenerList operator [](String type) {
+    return new EventListenerList(_ptr, type);
+  }
+}
+
+class EventListenerList {
+
+  final EventTarget _ptr;
+  final String _type;
+
+  EventListenerList(this._ptr, this._type);
+
+  // TODO(jacobr): implement equals.
+
+  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) {
+    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 {
+
+  /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
+  Events get on => new Events(this);
+$!MEMBERS
+}
diff --git a/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate b/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate
new file mode 100644
index 0000000..cfc265e
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_HttpRequest.darttemplate
@@ -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.
+
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME.get(String url, onSuccess($CLASSNAME request)) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_get(url, onSuccess);
+
+  factory $CLASSNAME.getWithCredentials(String url, onSuccess($CLASSNAME request)) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)getWithCredentials(url, onSuccess);
+
+$!MEMBERS
+}
diff --git a/sdk/lib/html/templates/html/impl/impl_IDBKeyRange.darttemplate b/sdk/lib/html/templates/html/impl/impl_IDBKeyRange.darttemplate
new file mode 100644
index 0000000..3267cc9
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/impl_IDBKeyRange.darttemplate
@@ -0,0 +1,33 @@
+// 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  /**
+   * @domName IDBKeyRange.only
+   */
+  factory IDBKeyRange.only(/*IDBKey*/ value) =>
+      _IDBKeyRangeFactoryProvider.create$(CLASSNAME)_only(value);
+
+  /**
+   * @domName IDBKeyRange.lowerBound
+   */
+  factory IDBKeyRange.lowerBound(/*IDBKey*/ bound, [bool open = false]) =>
+      _IDBKeyRangeFactoryProvider.create$(CLASSNAME)_lowerBound(bound, open);
+
+  /**
+   * @domName IDBKeyRange.upperBound
+   */
+  factory IDBKeyRange.upperBound(/*IDBKey*/ bound, [bool open = false]) =>
+      _IDBKeyRangeFactoryProvider.create$(CLASSNAME)_upperBound(bound, open);
+
+  /**
+   * @domName IDBKeyRange.bound
+   */
+  factory IDBKeyRange.bound(/*IDBKey*/ lower, /*IDBKey*/ upper,
+                            [bool lowerOpen = false, bool upperOpen = false]) =>
+      _IDBKeyRangeFactoryProvider.create$(CLASSNAME)_bound(
+          lower, upper, lowerOpen, upperOpen);
+
+$!MEMBERS
+}
diff --git a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate b/sdk/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
similarity index 96%
rename from lib/html/templates/html/impl/impl_MutationObserver.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
index 45d337b..3bca460 100644
--- a/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_MutationObserver.darttemplate
@@ -62,7 +62,7 @@
   static _add(m, String key, value) { m[key] = value; }
   static _fixupList(list) => list;
 
-  _call(Node target, options) {
+  void _call(Node target, options) {
     _observe(target, options);
   }
 $endif
@@ -73,6 +73,6 @@
   static _fixupList(list) => list;  // TODO: Ensure is a JavaScript Array.
 
   // Call native function with no conversions.
-  _call(target, options) native 'observe';
+  void _call(target, options) native 'observe';
 $endif
 }
diff --git a/lib/html/templates/html/impl/impl_Node.darttemplate b/sdk/lib/html/templates/html/impl/impl_Node.darttemplate
similarity index 79%
rename from lib/html/templates/html/impl/impl_Node.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_Node.darttemplate
index 594a2cc..48fab99 100644
--- a/lib/html/templates/html/impl/impl_Node.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Node.darttemplate
@@ -8,35 +8,35 @@
  * improving performance for the typical cases where it is not required.
  */
 class _ChildNodeListLazy implements List {
-  final _NodeImpl _this;
+  final Node _this;
 
   _ChildNodeListLazy(this._this);
 
 
 $if DART2JS
-  _NodeImpl get first => JS('_NodeImpl', '#.firstChild', _this);
-  _NodeImpl get last => JS('_NodeImpl', '#.lastChild', _this);
+  Node get first => JS('Node', '#.firstChild', _this);
+  Node get last => JS('Node', '#.lastChild', _this);
 $else
-  _NodeImpl get first => _this.$dom_firstChild;
-  _NodeImpl get last => _this.$dom_lastChild;
+  Node get first => _this.$dom_firstChild;
+  Node get last => _this.$dom_lastChild;
 $endif
 
-  void add(_NodeImpl value) {
+  void add(Node value) {
     _this.$dom_appendChild(value);
   }
 
-  void addLast(_NodeImpl value) {
+  void addLast(Node value) {
     _this.$dom_appendChild(value);
   }
 
 
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
       _this.$dom_appendChild(node);
     }
   }
 
-  _NodeImpl removeLast() {
+  Node removeLast() {
     final result = last;
     if (result != null) {
       _this.$dom_removeChild(result);
@@ -48,7 +48,7 @@
     _this.text = '';
   }
 
-  void operator []=(int index, _NodeImpl value) {
+  void operator []=(int index, Node value) {
     _this.$dom_replaceChild(value, this[index]);
   }
 
@@ -107,7 +107,7 @@
   // a local copy of $dom_childNodes is more efficient.
   int get length => _this.$dom_childNodes.length;
 
-  _NodeImpl operator[](int index) => _this.$dom_childNodes[index];
+  Node operator[](int index) => _this.$dom_childNodes[index];
 }
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
@@ -125,18 +125,26 @@
     }
   }
 
-  // TODO(jacobr): should we throw an exception if parent is already null?
-  // TODO(vsm): Use the native remove when available.
+  /**
+   * Removes this node from the DOM.
+   * @domName Node.removeChild
+   */
   void remove() {
+    // TODO(jacobr): should we throw an exception if parent is already null?
+    // TODO(vsm): Use the native remove when available.
     if (this.parent != null) {
-      final _NodeImpl parent = this.parent;
+      final Node parent = this.parent;
       parent.$dom_removeChild(this);
     }
   }
 
-  _NodeImpl replaceWith(Node otherNode) {
+  /**
+   * Replaces this node with another node.
+   * @domName Node.replaceChild
+   */
+  Node replaceWith(Node otherNode) {
     try {
-      final _NodeImpl parent = this.parent;
+      final Node parent = this.parent;
       parent.$dom_replaceChild(otherNode, this);
     } catch (e) {
 
diff --git a/lib/html/templates/html/impl/impl_NodeList.darttemplate b/sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate
similarity index 94%
rename from lib/html/templates/html/impl/impl_NodeList.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate
index 5e94454..e21a044 100644
--- a/lib/html/templates/html/impl/impl_NodeList.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_NodeList.darttemplate
@@ -82,7 +82,7 @@
 }
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  _NodeImpl _parent;
+  Node _parent;
 
   // -- start List<Node> mixins.
   // Node is the element type.
@@ -98,21 +98,21 @@
 
   // From Collection<Node>:
 
-  void add(_NodeImpl value) {
+  void add(Node value) {
     _parent.$dom_appendChild(value);
   }
 
-  void addLast(_NodeImpl value) {
+  void addLast(Node value) {
     _parent.$dom_appendChild(value);
   }
 
-  void addAll(Collection<_NodeImpl> collection) {
-    for (_NodeImpl node in collection) {
+  void addAll(Collection<Node> collection) {
+    for (Node node in collection) {
       _parent.$dom_appendChild(node);
     }
   }
 
-  _NodeImpl removeLast() {
+  Node removeLast() {
     final result = this.last;
     if (result != null) {
       _parent.$dom_removeChild(result);
@@ -124,7 +124,7 @@
     _parent.text = '';
   }
 
-  void operator []=(int index, _NodeImpl value) {
+  void operator []=(int index, Node value) {
     _parent.$dom_replaceChild(value, this[index]);
   }
 
diff --git a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_Point.darttemplate
similarity index 67%
copy from lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
copy to sdk/lib/html/templates/html/impl/impl_Point.darttemplate
index 1c790c0..cc3451e 100644
--- a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Point.darttemplate
@@ -2,8 +2,9 @@
 // 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-$!MEMBERS
+// WARNING: Do not edit - generated code.
 
-  _CanvasRenderingContext2DImpl get context2d => getContext('2d');
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(num x, num y) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(x, y);
+$!MEMBERS
 }
diff --git a/lib/html/templates/html/impl/impl_SVGElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate
similarity index 86%
rename from lib/html/templates/html/impl/impl_SVGElement.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate
index 64eeccc..10fe7cc 100644
--- a/lib/html/templates/html/impl/impl_SVGElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_SVGElement.darttemplate
@@ -13,7 +13,12 @@
 }
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-  CSSClassSet get classes {
+  factory $CLASSNAME.tag(String tag) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_tag(tag);
+  factory $CLASSNAME.svg(String svg) =>
+      _$(CLASSNAME)FactoryProvider.create$(CLASSNAME)_svg(svg);
+
+  CssClassSet get classes {
     if (_cssClassSet == null) {
       _cssClassSet = new _AttributeClassSet(_ptr);
     }
diff --git a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate
similarity index 77%
rename from lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate
index 1c790c0..c9a30ba 100644
--- a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_SVGSVGElement.darttemplate
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-$!MEMBERS
+  factory $CLASSNAME() => _$(CLASSNAME)FactoryProvider.createSVGSVGElement();
 
-  _CanvasRenderingContext2DImpl get context2d => getContext('2d');
+$!MEMBERS
 }
diff --git a/lib/html/templates/html/impl/impl_ShadowRoot.darttemplate b/sdk/lib/html/templates/html/impl/impl_ShadowRoot.darttemplate
similarity index 100%
rename from lib/html/templates/html/impl/impl_ShadowRoot.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_ShadowRoot.darttemplate
diff --git a/lib/html/templates/html/impl/impl_Storage.darttemplate b/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
similarity index 94%
rename from lib/html/templates/html/impl/impl_Storage.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
index 38c83f2..f44d8d0 100644
--- a/lib/html/templates/html/impl/impl_Storage.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Storage.darttemplate
@@ -2,7 +2,7 @@
 // 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+class $CLASSNAME$EXTENDS implements Map<String, String> $NATIVESPEC {
 
   // TODO(nweiz): update this when maps support lazy iteration
   bool containsValue(String value) => values.some((e) => e == value);
diff --git a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_Text.darttemplate
similarity index 67%
copy from lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
copy to sdk/lib/html/templates/html/impl/impl_Text.darttemplate
index 1c790c0..615b530 100644
--- a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_Text.darttemplate
@@ -2,8 +2,9 @@
 // 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-$!MEMBERS
+// WARNING: Do not edit - generated code.
 
-  _CanvasRenderingContext2DImpl get context2d => getContext('2d');
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(String data) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(data);
+$!MEMBERS
 }
diff --git a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate b/sdk/lib/html/templates/html/impl/impl_WebSocket.darttemplate
similarity index 67%
copy from lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
copy to sdk/lib/html/templates/html/impl/impl_WebSocket.darttemplate
index 1c790c0..2c2ef59 100644
--- a/lib/html/templates/html/dart2js/impl_CanvasElement.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_WebSocket.darttemplate
@@ -2,8 +2,9 @@
 // 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 $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
-$!MEMBERS
+// WARNING: Do not edit - generated code.
 
-  _CanvasRenderingContext2DImpl get context2d => getContext('2d');
+class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC {
+  factory $CLASSNAME(String url) => _$(CLASSNAME)FactoryProvider.create$CLASSNAME(url);
+$!MEMBERS
 }
diff --git a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate b/sdk/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
similarity index 93%
rename from lib/html/templates/html/impl/impl_WheelEvent.darttemplate
rename to sdk/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
index a2cf353..466b79a 100644
--- a/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
+++ b/sdk/lib/html/templates/html/impl/impl_WheelEvent.darttemplate
@@ -6,6 +6,7 @@
 $!MEMBERS
 
 $if DART2JS
+  /** @domName WheelEvent.deltaY */
   num get deltaY {
     if (JS('bool', '#.deltaY !== undefined', this)) {
       // W3C WheelEvent
@@ -33,6 +34,7 @@
         'deltaY is not supported');
   }
 
+  /** @domName WheelEvent.deltaX */
   num get deltaX {
     if (JS('bool', '#.deltaX !== undefined', this)) {
       // W3C WheelEvent
@@ -77,8 +79,11 @@
   int get _deltaMode => JS('int', '#.deltaMode', this);
 
 $else
+  /** @domName WheelEvent.deltaX */
   num get deltaX => $dom_wheelDeltaX;
+  /** @domName WheelEvent.deltaY */
   num get deltaY => $dom_wheelDeltaY;
+  /** @domName WheelEvent.deltaMode */
   int get deltaMode => 0;
 
 $endif
diff --git a/sdk/lib/html/templates/html/impl/pure_interface.darttemplate b/sdk/lib/html/templates/html/impl/pure_interface.darttemplate
new file mode 100644
index 0000000..5f0e58c
--- /dev/null
+++ b/sdk/lib/html/templates/html/impl/pure_interface.darttemplate
@@ -0,0 +1,3 @@
+/// @domName $DOMNAME
+abstract class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$!MEMBERS}
diff --git a/lib/html/templates/html/interface/interface.darttemplate b/sdk/lib/html/templates/html/interface/interface.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface.darttemplate
rename to sdk/lib/html/templates/html/interface/interface.darttemplate
diff --git a/lib/html/templates/html/interface/interface_AudioContext.darttemplate b/sdk/lib/html/templates/html/interface/interface_AudioContext.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_AudioContext.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_AudioContext.darttemplate
diff --git a/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate b/sdk/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_CSSStyleDeclaration.darttemplate
diff --git a/lib/html/templates/html/interface/interface_CanvasElement.darttemplate b/sdk/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_CanvasElement.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_CanvasElement.darttemplate
diff --git a/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate b/sdk/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_CanvasRenderingContext2D.darttemplate
diff --git a/lib/html/templates/html/interface/interface_CustomEvent.darttemplate b/sdk/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_CustomEvent.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_CustomEvent.darttemplate
diff --git a/lib/html/templates/html/interface/interface_Document.darttemplate b/sdk/lib/html/templates/html/interface/interface_Document.darttemplate
similarity index 83%
rename from lib/html/templates/html/interface/interface_Document.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Document.darttemplate
index 7d30daf..ac96d0c 100644
--- a/lib/html/templates/html/interface/interface_Document.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_Document.darttemplate
@@ -5,7 +5,7 @@
 part of html;
 
 $!COMMENT
-abstract class Document extends HtmlElement {
+abstract class _IDocument extends _IHtmlElement {
 
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate b/sdk/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
similarity index 69%
rename from lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
index e302f50..66af3d0 100644
--- a/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_DocumentFragment.darttemplate
@@ -5,11 +5,11 @@
 part of html;
 
 $!COMMENT
-abstract class DocumentFragment extends Element {
+abstract class _IDocumentFragment extends Element {
 
-  factory DocumentFragment() => _$(ID)FactoryProvider.createDocumentFragment();
+  factory _IDocumentFragment() => _$(ID)FactoryProvider.createDocumentFragment();
 
-  factory DocumentFragment.html(String html) =>
+  factory _IDocumentFragment.html(String html) =>
       _$(ID)FactoryProvider.createDocumentFragment_html(html);
 
   // TODO(nweiz): enable this when XML is ported
@@ -17,7 +17,7 @@
   // DocumentFragment.xml(String xml);
 
   factory DocumentFragment.svg(String svg) =>
-      new _$(ID)FactoryProvider.DocumentFragment.svg(svg);
+      new _$(ID)FactoryProvider.createDocumentFragment_svg(svg);
 
   DocumentFragment clone(bool deep);
 
diff --git a/lib/html/templates/html/interface/interface_Element.darttemplate b/sdk/lib/html/templates/html/interface/interface_Element.darttemplate
similarity index 97%
rename from lib/html/templates/html/interface/interface_Element.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Element.darttemplate
index 833fdfd..bb5e01b 100644
--- a/lib/html/templates/html/interface/interface_Element.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_Element.darttemplate
@@ -49,7 +49,7 @@
 }
 
 $!COMMENT
-abstract class Element implements Node, NodeSelector {
+abstract class _IElement implements _INode, NodeSelector {
   factory Element.html(String html) =>
       _$(ID)FactoryProvider.createElement_html(html);
   factory Element.tag(String tag) =>
diff --git a/lib/html/templates/html/interface/interface_Event.darttemplate b/sdk/lib/html/templates/html/interface/interface_Event.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_Event.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Event.darttemplate
diff --git a/lib/html/templates/html/interface/interface_EventTarget.darttemplate b/sdk/lib/html/templates/html/interface/interface_EventTarget.darttemplate
similarity index 91%
rename from lib/html/templates/html/interface/interface_EventTarget.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_EventTarget.darttemplate
index aa7288a..4ef6cb6 100644
--- a/lib/html/templates/html/interface/interface_EventTarget.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_EventTarget.darttemplate
@@ -6,7 +6,7 @@
 
 part of html;
 
-abstract class EventListenerList {
+abstract class _IEventListenerList {
   EventListenerList add(EventListener handler, [bool useCapture]);
 
   EventListenerList remove(EventListener handler, [bool useCapture]);
@@ -14,7 +14,7 @@
   bool dispatch(Event evt);
 }
 
-abstract class Events {
+abstract class _IEvents {
   EventListenerList operator [](String type);
 }
 
diff --git a/lib/html/templates/html/interface/interface_HttpRequest.darttemplate b/sdk/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_HttpRequest.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_HttpRequest.darttemplate
diff --git a/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate b/sdk/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_IDBKeyRange.darttemplate
diff --git a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate b/sdk/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
similarity index 75%
rename from lib/html/templates/html/interface/interface_LocalWindow.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
index ff46f20..a079d72 100644
--- a/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_LocalWindow.darttemplate
@@ -29,15 +29,5 @@
    */
   void requestLayoutFrame(TimeoutHandler callback);
 
-  /**
-   * Creates a new object URL for the specified object. The URL will be
-   * available until revokeObjectUrl is called.
-   * [object] can be a Blob, MediaStream or MediaSource.
-   */
-  String createObjectUrl(object);
-
-  /** @domName DOMURL.revokeObjectURL */
-  void revokeObjectUrl(String objectUrl);
-
 $!MEMBERS
 }
diff --git a/lib/html/templates/html/interface/interface_MouseEvent.darttemplate b/sdk/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_MouseEvent.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_MouseEvent.darttemplate
diff --git a/lib/html/templates/html/interface/interface_MutationObserver.darttemplate b/sdk/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_MutationObserver.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_MutationObserver.darttemplate
diff --git a/lib/html/templates/html/interface/interface_Node.darttemplate b/sdk/lib/html/templates/html/interface/interface_Node.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_Node.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Node.darttemplate
diff --git a/lib/html/templates/html/interface/interface_NodeList.darttemplate b/sdk/lib/html/templates/html/interface/interface_NodeList.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_NodeList.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_NodeList.darttemplate
diff --git a/lib/html/templates/html/interface/interface_NodeSelector.darttemplate b/sdk/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_NodeSelector.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_NodeSelector.darttemplate
diff --git a/lib/html/templates/html/interface/interface_Point.darttemplate b/sdk/lib/html/templates/html/interface/interface_Point.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_Point.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Point.darttemplate
diff --git a/lib/html/templates/html/interface/interface_SVGElement.darttemplate b/sdk/lib/html/templates/html/interface/interface_SVGElement.darttemplate
similarity index 89%
rename from lib/html/templates/html/interface/interface_SVGElement.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_SVGElement.darttemplate
index 47d4e6f..620c9d0 100644
--- a/lib/html/templates/html/interface/interface_SVGElement.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_SVGElement.darttemplate
@@ -5,7 +5,7 @@
 part of html;
 
 $!COMMENT
-abstract class SVGElement implements Element {
+abstract class _ISVGElement implements _IElement {
 
   factory SVGElement.tag(String tag) =>
       _$(ID)FactoryProvider.create$(ID)_tag(tag);
diff --git a/sdk/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate b/sdk/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
new file mode 100644
index 0000000..692955b
--- /dev/null
+++ b/sdk/lib/html/templates/html/interface/interface_SVGSVGElement.darttemplate
@@ -0,0 +1,11 @@
+// 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.
+
+part of html;
+
+$!COMMENT
+abstract class _ISVGSVGElement extends _ISVGElement implements _ISVGTests, _ISVGLangSpace, _ISVGExternalResourcesRequired, _ISVGStylable, _ISVGLocatable, _ISVGFitToViewBox, _ISVGZoomAndPan {
+
+$!MEMBERS
+}
diff --git a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate b/sdk/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
similarity index 85%
rename from lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
index f30a8c6..a1d32df 100644
--- a/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
+++ b/sdk/lib/html/templates/html/interface/interface_ShadowRoot.darttemplate
@@ -9,5 +9,5 @@
 $!COMMENT
 abstract class $ID$EXTENDS {
 $!MEMBERS
-  static bool get supported => _$(ID)Impl.supported;
+  static bool get supported => $(ID).supported;
 }
diff --git a/lib/html/templates/html/interface/interface_Storage.darttemplate b/sdk/lib/html/templates/html/interface/interface_Storage.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_Storage.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Storage.darttemplate
diff --git a/lib/html/templates/html/interface/interface_Text.darttemplate b/sdk/lib/html/templates/html/interface/interface_Text.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_Text.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_Text.darttemplate
diff --git a/lib/html/templates/html/interface/interface_WebSocket.darttemplate b/sdk/lib/html/templates/html/interface/interface_WebSocket.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_WebSocket.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_WebSocket.darttemplate
diff --git a/lib/html/templates/html/interface/interface_WheelEvent.darttemplate b/sdk/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
similarity index 100%
rename from lib/html/templates/html/interface/interface_WheelEvent.darttemplate
rename to sdk/lib/html/templates/html/interface/interface_WheelEvent.darttemplate
diff --git a/lib/html/templates/immutable_list_mixin.darttemplate b/sdk/lib/html/templates/immutable_list_mixin.darttemplate
similarity index 100%
rename from lib/html/templates/immutable_list_mixin.darttemplate
rename to sdk/lib/html/templates/immutable_list_mixin.darttemplate
diff --git a/lib/html/templates/interface.darttemplate b/sdk/lib/html/templates/interface.darttemplate
similarity index 100%
rename from lib/html/templates/interface.darttemplate
rename to sdk/lib/html/templates/interface.darttemplate
diff --git a/lib/io/base64.dart b/sdk/lib/io/base64.dart
similarity index 100%
rename from lib/io/base64.dart
rename to sdk/lib/io/base64.dart
diff --git a/lib/io/buffer_list.dart b/sdk/lib/io/buffer_list.dart
similarity index 100%
rename from lib/io/buffer_list.dart
rename to sdk/lib/io/buffer_list.dart
diff --git a/lib/io/chunked_stream.dart b/sdk/lib/io/chunked_stream.dart
similarity index 100%
rename from lib/io/chunked_stream.dart
rename to sdk/lib/io/chunked_stream.dart
diff --git a/lib/io/common.dart b/sdk/lib/io/common.dart
similarity index 100%
rename from lib/io/common.dart
rename to sdk/lib/io/common.dart
diff --git a/lib/io/directory.dart b/sdk/lib/io/directory.dart
similarity index 73%
rename from lib/io/directory.dart
rename to sdk/lib/io/directory.dart
index 740f0cb..76b9d2e 100644
--- a/lib/io/directory.dart
+++ b/sdk/lib/io/directory.dart
@@ -38,20 +38,28 @@
   bool existsSync();
 
   /**
-   * Creates the directory with this name. If the directory already
-   * exists nothing is done. Returns a [:Future<Directory>:] that
-   * completes with this directory once it has been created. If the
-   * directory does not exist and cannot be created the future
-   * completes with an exception.
+   * Creates the directory with this name.
+   *
+   * If [recursive] is false, only the last directory in the path is
+   * created. If [recursive] is true, all non-existing path components
+   * are created. If the directory already exists nothing is done.
+   *
+   * Returns a [:Future<Directory>:] that completes with this
+   * directory once it has been created. If the directory cannot be
+   * created the future completes with an exception.
    */
-  Future<Directory> create();
+  Future<Directory> create({recursive: false});
 
   /**
-   * Synchronously creates the directory with this name. If the
-   * directory already exists nothing is done. If the directory does
-   * not exist and cannot be created an exception is thrown.
+   * Synchronously creates the directory with this name.
+   *
+   * If [recursive] is false, only the last directory in the path is
+   * created. If [recursive] is true, all non-existing path components
+   * are created. If the directory already exists nothing is done.
+   *
+   * If the directory cannot be created an exception is thrown.
    */
-  void createSync();
+  void createSync({recursive: false});
 
   /**
    * Creates a temporary directory with a name based on the current
@@ -75,32 +83,30 @@
   Directory createTempSync();
 
   /**
-   * Deletes the directory with this name. The directory must be
-   * empty. Returns a [:Future<Directory>:] that completes with
-   * this directory when the deletion is done.
+   * Deletes the directory with this name.
+   *
+   * If [recursive] is false, the directory must be empty.
+   *
+   * If [recursive] is true, this directory and all sub-directories
+   * and files in the directories are deleted.
+   *
+   * Returns a [:Future<Directory>:] that completes with this
+   * directory when the deletion is done. If the directory cannot be
+   * deleted, the future completes with an exception.
    */
-  Future<Directory> delete();
+  Future<Directory> delete({recursive: false});
 
   /**
-   * Synchronously deletes the directory with this name. The directory
-   * must be empty. Throws an exception if the directory cannot be
-   * deleted.
+   * Synchronously deletes the directory with this name.
+   *
+   * If [recursive] is false, the directory must be empty.
+   *
+   * If [recursive] is true, this directory and all sub-directories
+   * and files in the directories are deleted.
+   *
+   * Throws an exception if the directory cannot be deleted.
    */
-  void deleteSync();
-
-  /**
-   * Deletes this directory and all sub-directories and files in the
-   * directories. Returns a [:Future<Directory>:] that completes with
-   * this directory when the deletion is done.
-   */
-  Future<Directory> deleteRecursively();
-
-  /**
-   * Synchronously deletes this directory and all sub-directories and
-   * files in the directories. Throws an exception if the directory
-   * cannot be deleted.
-   */
-  void deleteRecursivelySync();
+  void deleteSync({recursive: false});
 
   /**
    * Rename this directory. Returns a [:Future<Directory>:] that completes
@@ -141,6 +147,12 @@
 /**
  * A [DirectoryLister] represents an actively running listing operation.
  *
+ * A [DirectoryLister] is obtained from a [Directory] object by calling
+ * the [:Directory.list:] method.
+ *
+ *     Directory dir = new Directory('path/to/my/dir');
+ *     DirectoryLister lister = dir.list();
+ *
  * For each file and directory, the file or directory handler is
  * called. When all directories have been listed the done handler is
  * called. If the listing operation is recursive, the error handler is
diff --git a/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
similarity index 86%
rename from lib/io/directory_impl.dart
rename to sdk/lib/io/directory_impl.dart
index cbfa945..85968f1 100644
--- a/lib/io/directory_impl.dart
+++ b/sdk/lib/io/directory_impl.dart
@@ -51,7 +51,31 @@
     return (result == 1);
   }
 
-  Future<Directory> create() {
+  Future<Directory> createRecursively() {
+    if (_path is !String) {
+      throw new ArgumentError();
+    }
+    var path = new Path.fromNative(_path);
+    var current = new Path(path.isAbsolute ? '/' : '');
+    var future = null;
+    for (var segment in path.segments()) {
+      var next = current.append(segment);
+      if (future == null) {
+        future = new Directory.fromPath(current).create();
+      } else {
+        future = future.chain((_) => new Directory.fromPath(next).create());
+      }
+      current = next;
+    }
+    if (future == null) {
+      return new Future.immediate(this);
+    } else {
+      return future.transform((result) => this);
+    }
+  }
+
+  Future<Directory> create({recursive: false}) {
+    if (recursive) return createRecursively();
     _ensureDirectoryService();
     List request = new List(2);
     request[0] = CREATE_REQUEST;
@@ -64,10 +88,20 @@
     });
   }
 
-  void createSync() {
+  void createRecursivelySync() {
+    var path = new Path.fromNative(_path);
+    var current = new Path(path.isAbsolute ? '/' : '');
+    for (var segment in path.segments()) {
+      current = current.append(segment);
+      new Directory.fromPath(current).createSync();
+    }
+  }
+
+  void createSync({recursive: false}) {
     if (_path is !String) {
       throw new ArgumentError();
     }
+    if (recursive) return createRecursivelySync();
     var result = _create(_path);
     if (result is OSError) {
       throw new DirectoryIOException("Creation failed", _path, result);
@@ -102,6 +136,9 @@
   }
 
   Future<Directory> _deleteHelper(bool recursive, String errorMsg) {
+  }
+
+  Future<Directory> delete({recursive: false}) {
     _ensureDirectoryService();
     List request = new List(3);
     request[0] = DELETE_REQUEST;
@@ -109,35 +146,17 @@
     request[2] = recursive;
     return _directoryService.call(request).transform((response) {
       if (_isErrorResponse(response)) {
-        throw _exceptionOrErrorFromResponse(response, errorMsg);
+        throw _exceptionOrErrorFromResponse(response, "Deletion failed");
       }
       return this;
     });
   }
 
-  Future<Directory> delete() {
-    return _deleteHelper(false, "Deletion failed");
-  }
-
-  void deleteSync() {
+  void deleteSync({recursive: false}) {
     if (_path is !String) {
       throw new ArgumentError();
     }
-    var result = _delete(_path, false);
-    if (result is OSError) {
-      throw new DirectoryIOException("Deletion failed", _path, result);
-    }
-  }
-
-  Future<Directory> deleteRecursively() {
-    return _deleteHelper(true, "Deletion failed");
-  }
-
-  void deleteRecursivelySync() {
-    if (_path is !String) {
-      throw new ArgumentError();
-    }
-    var result = _delete(_path, true);
+    var result = _delete(_path, recursive);
     if (result is OSError) {
       throw new DirectoryIOException("Deletion failed", _path, result);
     }
diff --git a/lib/io/eventhandler.dart b/sdk/lib/io/eventhandler.dart
similarity index 100%
rename from lib/io/eventhandler.dart
rename to sdk/lib/io/eventhandler.dart
diff --git a/lib/io/file.dart b/sdk/lib/io/file.dart
similarity index 100%
rename from lib/io/file.dart
rename to sdk/lib/io/file.dart
diff --git a/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
similarity index 100%
rename from lib/io/file_impl.dart
rename to sdk/lib/io/file_impl.dart
diff --git a/lib/io/http.dart b/sdk/lib/io/http.dart
similarity index 100%
rename from lib/io/http.dart
rename to sdk/lib/io/http.dart
diff --git a/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
similarity index 95%
rename from lib/io/http_impl.dart
rename to sdk/lib/io/http_impl.dart
index 740dc36..440b635 100644
--- a/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -1144,12 +1144,13 @@
       for (int i = 0; i < cookies.length; i++) {
         if (cookies[i].name.toUpperCase() == _DART_SESSION_ID) {
           cookies[i].value = session.id;
+          cookies[i].httpOnly = true;
           found = true;
           break;
         }
       }
       if (!found) {
-        cookies.add(new Cookie(_DART_SESSION_ID, session.id));
+        cookies.add(new Cookie(_DART_SESSION_ID, session.id)..httpOnly = true);
       }
     }
     // Add all the cookies set to the headers.
@@ -1306,15 +1307,7 @@
     List<int> buffer = new Uint8List(available);
     int bytesRead = _socket.readList(buffer, 0, available);
     if (bytesRead > 0) {
-      int parsed = _httpParser.writeList(buffer, 0, bytesRead);
-      if (!_httpParser.upgrade) {
-        if (parsed != bytesRead) {
-          if (_socket != null) {
-            // TODO(sgjesse): Error handling.
-            _destroy();
-          }
-        }
-      }
+      _httpParser.writeList(buffer, 0, bytesRead);
     }
   }
 
@@ -1340,7 +1333,7 @@
     Socket socket = _socket;
     _socket = null;
     if (onDetach != null) onDetach();
-    return new _DetachedSocket(socket, _httpParser.unparsedData);
+    return new _DetachedSocket(socket, _httpParser.readUnparsedData());
   }
 
   HttpConnectionInfo get connectionInfo {
@@ -1398,7 +1391,7 @@
     // Don't report errors when HTTP parser is in idle state. Clients
     // can close the connection and cause a connection reset by peer
     // error which is OK.
-    if (e != null && onError != null && !_httpParser.isIdle) {
+    if (e != null && !_httpParser.isIdle) {
       onError(e);
       // Propagate the error to the streams.
       if (_request != null && _request._streamErrorHandler != null) {
@@ -1412,23 +1405,27 @@
     // If currently not processing any request close the socket when
     // we are done writing the response.
     if (_httpParser.isIdle) {
-      _socket.outputStream.onClosed = () {
-        _destroy();
-        if (onClosed != null && e == null) {
-          // Don't call onClosed if onError has been called.
+      // If the httpParser is idle and we get an error from the
+      // connection we deal with that as a closed connection and not
+      // as an error. When the client disappears we get a connection
+      // reset by peer and that is OK.
+      if (e != null) {
+        onClosed();
+      } else {
+        _socket.outputStream.onClosed = () {
+          _destroy();
           onClosed();
-        }
-      };
-      // If the client closes and we are done writing the response
-      // the connection should be closed.
-      if (_response == null) _close();
-      return;
-    }
-
-    // Processing a request.
-    if (e == null) {
-      // Indicate connection close to the HTTP parser.
-      _httpParser.connectionClosed();
+        };
+        // If the client closes and we are done writing the response
+        // the connection should be closed.
+        if (_response == null) _close();
+      }
+    } else {
+      // Processing a request.
+      if (e == null) {
+        // Indicate connection close to the HTTP parser.
+        _httpParser.connectionClosed();
+      }
     }
   }
 
@@ -1472,6 +1469,7 @@
     if (_closing) {
       _socket.outputStream.onClosed = () {
         _socket.close();
+        onClosed();
       };
     }
     _response = null;
@@ -1666,6 +1664,7 @@
     _httpConnection._onNoPendingWrites = null;
     // Ensure that any trailing data is written.
     _writeDone();
+    _connection._requestDone();
   }
 
   void _streamSetNoPendingWriteHandler(callback()) {
@@ -1802,7 +1801,7 @@
         // TODO(sgjesse): Support digest.
         if (cr.scheme == _AuthenticationScheme.BASIC) {
           inputStream.onData = inputStream.read;
-          inputStream.onClosed = _connection.retry;
+          _connection._retry();
           return;
         }
       }
@@ -1896,7 +1895,7 @@
         }
         // Drain body and redirect.
         inputStream.onData = inputStream.read;
-        inputStream.onClosed = _connection.redirect;
+        _connection.redirect();
       } else {
         throw new RedirectLimitExceededException(_connection._redirects);
       }
@@ -1951,6 +1950,11 @@
 
 class _HttpClientConnection
     extends _HttpConnectionBase implements HttpClientConnection {
+  static const int NONE = 0;
+  static const int REQUEST_DONE = 1;
+  static const int RESPONSE_DONE = 2;
+  static const int ALL_DONE = REQUEST_DONE | RESPONSE_DONE;
+
   _HttpClientConnection(_HttpClient this._client);
 
   void _connectionEstablished(_SocketConnection socketConn) {
@@ -1970,16 +1974,41 @@
     _httpParser.error = (e) => _onError(e);
   }
 
+  bool get _isRequestDone => (_state & REQUEST_DONE) == REQUEST_DONE;
+  bool get _isResponseDone => (_state & RESPONSE_DONE) == RESPONSE_DONE;
+  bool get _isAllDone => (_state & ALL_DONE) == ALL_DONE;
+
+  void _checkSocketDone() {
+    if (_isAllDone) {
+      if (!_closing) {
+        _client._returnSocketConnection(_socketConn);
+      }
+      _socket = null;
+      _socketConn = null;
+      assert(_pendingRedirect == null || _pendingRetry == null);
+      if (_pendingRedirect != null) {
+        _doRedirect(_pendingRedirect);
+        _pendingRedirect = null;
+      } else if (_pendingRetry != null) {
+        _doRetry(_pendingRetry);
+        _pendingRetry = null;
+      }
+    }
+  }
+
+  void _requestDone() {
+    _state |= REQUEST_DONE;
+    _checkSocketDone();
+  }
+
   void _responseDone() {
     if (_closing) {
       if (_socket != null) {
         _socket.close();
       }
-    } else {
-      _client._returnSocketConnection(_socketConn);
     }
-    _socket = null;
-    _socketConn = null;
+    _state |= RESPONSE_DONE;
+    _checkSocketDone();
   }
 
   HttpClientRequest open(String method, Uri uri) {
@@ -2056,32 +2085,58 @@
     _onErrorCallback = callback;
   }
 
-  void retry() {
-    if (_socketConn != null) {
-      throw new HttpException("Cannot retry with body data pending");
-    }
+  void _doRetry(_RedirectInfo retry) {
+    assert(_socketConn == null);
+    _request = null;
+    _response = null;
+
     // Retry the URL using the same connection instance.
-    _client._openUrl(_method, _request._uri, this);
+    _state = NONE;
+    _client._openUrl(retry.method, retry.location, this);
+  }
+
+  void _retry() {
+    var retry = new _RedirectInfo(_response.statusCode, _method, _request._uri);
+    // The actual retry is postponed until both response and request
+    // are done.
+    if (_isAllDone) {
+      _doRetry(retry);
+    } else {
+      // Prepare for retry.
+      assert(_pendingRedirect == null);
+      _pendingRetry = retry;
+    }
+  }
+
+  void _doRedirect(_RedirectInfo redirect) {
+    assert(_socketConn == null);
+
+    if (_redirects == null) {
+      _redirects = new List<_RedirectInfo>();
+    }
+    _redirects.add(redirect);
+    _doRetry(redirect);
   }
 
   void redirect([String method, Uri url]) {
-    if (_socketConn != null) {
-      throw new HttpException("Cannot redirect with body data pending");
-    }
     if (method == null) method = _method;
     if (url == null) {
       url = new Uri.fromString(_response.headers.value(HttpHeaders.LOCATION));
     }
-    if (_redirects == null) {
-      _redirects = new List<_RedirectInfo>();
+    var redirect = new _RedirectInfo(_response.statusCode, method, url);
+    // The actual redirect is postponed until both response and
+    // request are done.
+    if (_isAllDone) {
+      _doRedirect(redirect);
+    } else {
+      // Prepare for redirect.
+      assert(_pendingRetry == null);
+      _pendingRedirect = redirect;
     }
-    _redirects.add(new _RedirectInfo(_response.statusCode, method, url));
-    _request = null;
-    _response = null;
-    // Open redirect URL using the same connection instance.
-    _client._openUrl(method, url, this);
   }
 
+  int _state = NONE;
+
   List<RedirectInfo> get redirects => _redirects;
 
   Function _onRequest;
@@ -2099,6 +2154,8 @@
   bool followRedirects = true;
   int maxRedirects = 5;
   List<_RedirectInfo> _redirects;
+  _RedirectInfo _pendingRedirect;
+  _RedirectInfo _pendingRetry;
 
   // Callbacks.
   var requestReceived;
diff --git a/lib/io/http_parser.dart b/sdk/lib/io/http_parser.dart
similarity index 93%
rename from lib/io/http_parser.dart
rename to sdk/lib/io/http_parser.dart
index a5549c5..61e0a64 100644
--- a/lib/io/http_parser.dart
+++ b/sdk/lib/io/http_parser.dart
@@ -116,11 +116,12 @@
  * object will be [:true:] indicating that from now on the protocol is
  * not HTTP anymore and no more callbacks will happen, that is
  * [:dataReceived:] and [:dataEnd:] are not called in this case as
- * there is no more HTTP data. After the upgrade the call to
- * [:writeList:] causing the upgrade will return with the number of
- * bytes parsed as HTTP. Any unparsed bytes is part of the protocol
- * the connection is upgrading to and should be handled according to
- * that protocol.
+ * there is no more HTTP data. After the upgrade the method
+ * [:readUnparsedData:] can be used to read any remaining bytes in the
+ * HTTP parser which are part of the protocol the connection is
+ * upgrading to. These bytes cannot be processed by the HTTP parser
+ * and should be handled according to whatever protocol is being
+ * upgraded to.
  */
 class _HttpParser {
   _HttpParser() {
@@ -136,9 +137,7 @@
   // Request-Line    = Method SP Request-URI SP HTTP-Version CRLF
   // Status-Line     = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
   // message-header  = field-name ":" [ field-value ]
-  int writeList(List<int> buffer, int offset, int count) {
-    int index = offset;
-    int lastIndex = offset + count;
+  void _parse() {
     try {
       if (_state == _State.CLOSED) {
         throw new HttpParserException("Data on closed connection");
@@ -149,10 +148,11 @@
       if (_state == _State.FAILURE) {
         throw new HttpParserException("Data on failed connection");
       }
-      while ((index < lastIndex) &&
+      while (_buffer != null &&
+             _index < _lastIndex &&
              _state != _State.FAILURE &&
              _state != _State.UPGRADED) {
-        int byte = buffer[index];
+        int byte = _buffer[_index++];
         switch (_state) {
           case _State.START:
             if (byte == _Const.HTTP[0]) {
@@ -325,7 +325,9 @@
                   statusCode <= 199 || statusCode == 204 || statusCode == 304;
             }
             if (responseStart != null) {
-              responseStart(statusCode, _uri_or_reason_phrase.toString(), version);
+              responseStart(statusCode,
+                            _uri_or_reason_phrase.toString(),
+                            version);
             }
             _method_or_status_code.clear();
             _uri_or_reason_phrase.clear();
@@ -438,8 +440,6 @@
             }
             if (_connectionUpgrade) {
               _state = _State.UPGRADED;
-              _unparsedData =
-                  buffer.getRange(index + 1, count - (index + 1 - offset));
               if (headersComplete != null) headersComplete();
             } else {
               if (headersComplete != null) headersComplete();
@@ -513,22 +513,23 @@
 
           case _State.BODY:
             // The body is not handled one byte at a time but in blocks.
-            int dataAvailable = lastIndex - index;
+            _index--;
+            int dataAvailable = _lastIndex - _index;
             List<int> data;
             if (_remainingContent == null ||
                 dataAvailable <= _remainingContent) {
               data = new Uint8List(dataAvailable);
-              data.setRange(0, dataAvailable, buffer, index);
+              data.setRange(0, dataAvailable, _buffer, _index);
             } else {
               data = new Uint8List(_remainingContent);
-              data.setRange(0, _remainingContent, buffer, index);
+              data.setRange(0, _remainingContent, _buffer, _index);
             }
 
             if (dataReceived != null) dataReceived(data);
             if (_remainingContent != null) {
               _remainingContent -= data.length;
             }
-            index += data.length;
+            _index += data.length;
             if (_remainingContent == 0) {
               if (!_chunked) {
                 _bodyEnd();
@@ -537,9 +538,6 @@
                 _state = _State.CHUNK_SIZE_STARTING_CR;
               }
             }
-
-            // Hack - as we always do index++ below.
-            index--;
             break;
 
           case _State.FAILURE:
@@ -552,9 +550,6 @@
             assert(false);
             break;
         }
-
-        // Move to the next byte.
-        index++;
       }
     } catch (e) {
       // Report the error through the error callback if any. Otherwise
@@ -567,8 +562,17 @@
       }
     }
 
-    // Return the number of bytes parsed.
-    return index - offset;
+    // If all data is parsed or not needed due to failure there is no
+    // need to hold on to the buffer.
+    if (_state != _State.UPGRADED) _releaseBuffer();
+  }
+
+  void writeList(List<int> buffer, int offset, int count) {
+    assert(_buffer == null);
+    _buffer = buffer;
+    _index = offset;
+    _lastIndex = offset + count;
+    _parse();
   }
 
   void connectionClosed() {
@@ -623,7 +627,13 @@
 
   bool get isIdle => _state == _State.START;
 
-  List<int> get unparsedData => _unparsedData;
+  List<int> readUnparsedData() {
+    if (_buffer == null) return [];
+    if (_index == _lastIndex) return [];
+    var result = _buffer.getRange(_index, _lastIndex - _index);
+    _releaseBuffer();
+    return result;
+  }
 
   void _bodyEnd() {
     if (dataEnd != null) {
@@ -650,6 +660,12 @@
     _remainingContent = null;
   }
 
+  _releaseBuffer() {
+    _buffer = null;
+    _index = null;
+    _lastIndex = null;
+  }
+
   bool _isTokenChar(int byte) {
     return byte > 31 && byte < 128 && _Const.SEPARATORS.indexOf(byte) == -1;
   }
@@ -696,6 +712,11 @@
     }
   }
 
+  // The data that is currently being parsed.
+  List<int> _buffer;
+  int _index;
+  int _lastIndex;
+
   int _state;
   int _httpVersionIndex;
   int _messageType;
@@ -714,7 +735,6 @@
   String _responseToMethod;  // Indicates the method used for the request.
   int _remainingContent;
 
-  List<int> _unparsedData;  // Unparsed data after connection upgrade.
   // Callbacks.
   Function requestStart;
   Function responseStart;
diff --git a/lib/io/http_session.dart b/sdk/lib/io/http_session.dart
similarity index 100%
rename from lib/io/http_session.dart
rename to sdk/lib/io/http_session.dart
diff --git a/lib/io/http_utils.dart b/sdk/lib/io/http_utils.dart
similarity index 100%
rename from lib/io/http_utils.dart
rename to sdk/lib/io/http_utils.dart
diff --git a/lib/io/input_stream.dart b/sdk/lib/io/input_stream.dart
similarity index 100%
rename from lib/io/input_stream.dart
rename to sdk/lib/io/input_stream.dart
diff --git a/lib/io/io.dart b/sdk/lib/io/io.dart
similarity index 100%
rename from lib/io/io.dart
rename to sdk/lib/io/io.dart
diff --git a/lib/io/iolib_sources.gypi b/sdk/lib/io/iolib_sources.gypi
similarity index 100%
rename from lib/io/iolib_sources.gypi
rename to sdk/lib/io/iolib_sources.gypi
diff --git a/lib/io/list_stream.dart b/sdk/lib/io/list_stream.dart
similarity index 100%
rename from lib/io/list_stream.dart
rename to sdk/lib/io/list_stream.dart
diff --git a/lib/io/list_stream_impl.dart b/sdk/lib/io/list_stream_impl.dart
similarity index 100%
rename from lib/io/list_stream_impl.dart
rename to sdk/lib/io/list_stream_impl.dart
diff --git a/lib/io/mime_multipart_parser.dart b/sdk/lib/io/mime_multipart_parser.dart
similarity index 100%
rename from lib/io/mime_multipart_parser.dart
rename to sdk/lib/io/mime_multipart_parser.dart
diff --git a/lib/io/output_stream.dart b/sdk/lib/io/output_stream.dart
similarity index 100%
rename from lib/io/output_stream.dart
rename to sdk/lib/io/output_stream.dart
diff --git a/lib/io/path.dart b/sdk/lib/io/path.dart
similarity index 100%
rename from lib/io/path.dart
rename to sdk/lib/io/path.dart
diff --git a/lib/io/path_impl.dart b/sdk/lib/io/path_impl.dart
similarity index 98%
rename from lib/io/path_impl.dart
rename to sdk/lib/io/path_impl.dart
index d3467df..58e7ce3 100644
--- a/lib/io/path_impl.dart
+++ b/sdk/lib/io/path_impl.dart
@@ -75,7 +75,7 @@
       }
       return new Path(sb.toString());
     }
-    throw new NotImplementedException(
+    throw new UnimplementedError(
       "Unimplemented case of Path.relativeTo(base):\n"
       "  Only absolute paths are handled at present.\n"
       "  Arguments: $_path.relativeTo($base)");
@@ -189,7 +189,7 @@
     if (Platform.operatingSystem == 'windows') {
       String nativePath = _path;
       // Drop '/' before a drive letter.
-      if (nativePath.length > 3 &&
+      if (nativePath.length >= 3 &&
           nativePath.startsWith('/') &&
           nativePath[2] == ':') {
         nativePath = nativePath.substring(1);
diff --git a/lib/io/platform.dart b/sdk/lib/io/platform.dart
similarity index 100%
rename from lib/io/platform.dart
rename to sdk/lib/io/platform.dart
diff --git a/lib/io/platform_impl.dart b/sdk/lib/io/platform_impl.dart
similarity index 100%
rename from lib/io/platform_impl.dart
rename to sdk/lib/io/platform_impl.dart
diff --git a/lib/io/process.dart b/sdk/lib/io/process.dart
similarity index 100%
rename from lib/io/process.dart
rename to sdk/lib/io/process.dart
diff --git a/lib/io/socket.dart b/sdk/lib/io/socket.dart
similarity index 100%
rename from lib/io/socket.dart
rename to sdk/lib/io/socket.dart
diff --git a/lib/io/socket_stream_impl.dart b/sdk/lib/io/socket_stream_impl.dart
similarity index 100%
rename from lib/io/socket_stream_impl.dart
rename to sdk/lib/io/socket_stream_impl.dart
diff --git a/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
similarity index 100%
rename from lib/io/stdio.dart
rename to sdk/lib/io/stdio.dart
diff --git a/lib/io/stream_util.dart b/sdk/lib/io/stream_util.dart
similarity index 100%
rename from lib/io/stream_util.dart
rename to sdk/lib/io/stream_util.dart
diff --git a/lib/io/string_stream.dart b/sdk/lib/io/string_stream.dart
similarity index 96%
rename from lib/io/string_stream.dart
rename to sdk/lib/io/string_stream.dart
index 5d71af4..8f99c66 100644
--- a/lib/io/string_stream.dart
+++ b/sdk/lib/io/string_stream.dart
@@ -85,22 +85,18 @@
 
   int get lineBreaks => _lineBreaks;
 
-  String decoded([int len]) {
+  String decoded([int length]) {
     if (isEmpty) return null;
 
-    String result;
-    if (len !== null && len < available()) {
-      result = new String.fromCharCodes(_result.getRange(_resultOffset, len));
+    List<int> result;
+    if (length != null && length < available()) {
+      result = _result.getRange(_resultOffset, length);
+    } else if (_resultOffset == 0) {
+      result = _result;
     } else {
-      if (_resultOffset == 0) {
-        result = new String.fromCharCodes(_result);
-      } else {
-        result =
-            new String.fromCharCodes(
-                _result.getRange(_resultOffset,
-                                 _result.length - _resultOffset));
-      }
+      result = _result.getRange(_resultOffset, _result.length - _resultOffset);
     }
+
     _resultOffset += result.length;
     while (!_lineBreakEnds.isEmpty &&
            _lineBreakEnds.first < _charOffset + _resultOffset) {
@@ -108,7 +104,7 @@
       _lineBreaks--;
     }
     if (_result.length == _resultOffset) _resetResult();
-    return result;
+    return new String.fromCharCodes(result);
   }
 
   String get decodedLine {
@@ -419,7 +415,7 @@
 
   void set onError(void callback(e)) {
     _input.onError = callback;
-    _decoder.onError = (e) { 
+    _decoder.onError = (e) {
       _clientCloseHandler = null;
       _input.close();
       callback(e);
diff --git a/lib/io/timer_impl.dart b/sdk/lib/io/timer_impl.dart
similarity index 100%
rename from lib/io/timer_impl.dart
rename to sdk/lib/io/timer_impl.dart
diff --git a/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
similarity index 100%
rename from lib/io/websocket.dart
rename to sdk/lib/io/websocket.dart
diff --git a/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
similarity index 100%
rename from lib/io/websocket_impl.dart
rename to sdk/lib/io/websocket_impl.dart
diff --git a/lib/isolate/base.dart b/sdk/lib/isolate/base.dart
similarity index 100%
rename from lib/isolate/base.dart
rename to sdk/lib/isolate/base.dart
diff --git a/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
similarity index 100%
rename from lib/isolate/isolate.dart
rename to sdk/lib/isolate/isolate.dart
diff --git a/lib/isolate/isolate_sources.gypi b/sdk/lib/isolate/isolate_sources.gypi
similarity index 100%
rename from lib/isolate/isolate_sources.gypi
rename to sdk/lib/isolate/isolate_sources.gypi
diff --git a/lib/isolate/timer.dart b/sdk/lib/isolate/timer.dart
similarity index 100%
rename from lib/isolate/timer.dart
rename to sdk/lib/isolate/timer.dart
diff --git a/lib/json/json.dart b/sdk/lib/json/json.dart
similarity index 100%
rename from lib/json/json.dart
rename to sdk/lib/json/json.dart
diff --git a/lib/math/base.dart b/sdk/lib/math/base.dart
similarity index 100%
rename from lib/math/base.dart
rename to sdk/lib/math/base.dart
diff --git a/lib/math/math.dart b/sdk/lib/math/math.dart
similarity index 100%
rename from lib/math/math.dart
rename to sdk/lib/math/math.dart
diff --git a/lib/math/math_sources.gypi b/sdk/lib/math/math_sources.gypi
similarity index 100%
rename from lib/math/math_sources.gypi
rename to sdk/lib/math/math_sources.gypi
diff --git a/lib/math/random.dart b/sdk/lib/math/random.dart
similarity index 100%
rename from lib/math/random.dart
rename to sdk/lib/math/random.dart
diff --git a/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
similarity index 100%
rename from lib/mirrors/mirrors.dart
rename to sdk/lib/mirrors/mirrors.dart
diff --git a/lib/mirrors/mirrors_sources.gypi b/sdk/lib/mirrors/mirrors_sources.gypi
similarity index 83%
rename from lib/mirrors/mirrors_sources.gypi
rename to sdk/lib/mirrors/mirrors_sources.gypi
index 8d2ecce..8134666 100644
--- a/lib/mirrors/mirrors_sources.gypi
+++ b/sdk/lib/mirrors/mirrors_sources.gypi
@@ -4,6 +4,6 @@
 
 {
   'sources': [
-    '../../runtime/lib/empty_source.dart',
+    '../../../runtime/lib/empty_source.dart',
   ],
-}
\ No newline at end of file
+}
diff --git a/lib/scalarlist/byte_arrays.dart b/sdk/lib/scalarlist/byte_arrays.dart
similarity index 100%
rename from lib/scalarlist/byte_arrays.dart
rename to sdk/lib/scalarlist/byte_arrays.dart
diff --git a/lib/scalarlist/scalarlist.dart b/sdk/lib/scalarlist/scalarlist.dart
similarity index 100%
rename from lib/scalarlist/scalarlist.dart
rename to sdk/lib/scalarlist/scalarlist.dart
diff --git a/lib/scalarlist/scalarlist_sources.gypi b/sdk/lib/scalarlist/scalarlist_sources.gypi
similarity index 100%
rename from lib/scalarlist/scalarlist_sources.gypi
rename to sdk/lib/scalarlist/scalarlist_sources.gypi
diff --git a/lib/uri/encode_decode.dart b/sdk/lib/uri/encode_decode.dart
similarity index 100%
rename from lib/uri/encode_decode.dart
rename to sdk/lib/uri/encode_decode.dart
diff --git a/lib/uri/helpers.dart b/sdk/lib/uri/helpers.dart
similarity index 100%
rename from lib/uri/helpers.dart
rename to sdk/lib/uri/helpers.dart
diff --git a/lib/uri/uri.dart b/sdk/lib/uri/uri.dart
similarity index 100%
rename from lib/uri/uri.dart
rename to sdk/lib/uri/uri.dart
diff --git a/lib/utf/utf.dart b/sdk/lib/utf/utf.dart
similarity index 100%
rename from lib/utf/utf.dart
rename to sdk/lib/utf/utf.dart
diff --git a/lib/utf/utf16.dart b/sdk/lib/utf/utf16.dart
similarity index 100%
rename from lib/utf/utf16.dart
rename to sdk/lib/utf/utf16.dart
diff --git a/lib/utf/utf32.dart b/sdk/lib/utf/utf32.dart
similarity index 100%
rename from lib/utf/utf32.dart
rename to sdk/lib/utf/utf32.dart
diff --git a/lib/utf/utf8.dart b/sdk/lib/utf/utf8.dart
similarity index 100%
rename from lib/utf/utf8.dart
rename to sdk/lib/utf/utf8.dart
diff --git a/lib/utf/utf_core.dart b/sdk/lib/utf/utf_core.dart
similarity index 95%
rename from lib/utf/utf_core.dart
rename to sdk/lib/utf/utf_core.dart
index fb9e0e4..a1cedce 100644
--- a/lib/utf/utf_core.dart
+++ b/sdk/lib/utf/utf_core.dart
@@ -2,20 +2,15 @@
 // 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.
 
+// TODO(jmesserly): would be nice to have this on String (dartbug.com/6501).
 /**
  * Provide a list of Unicode codepoints for a given string.
  */
 List<int> stringToCodepoints(String str) {
-  List<int> codepoints;
-  // TODO _is16BitCodeUnit() is used to work around a bug with dart2js
-  // (http://code.google.com/p/dart/issues/detail?id=1357). Consider
-  // removing after this issue is resolved.
-  if (_is16BitCodeUnit()) {
-    codepoints = _utf16CodeUnitsToCodepoints(str.charCodes);
-  } else {
-    codepoints = str.charCodes;
-  }
-  return codepoints;
+  // Note: str.charCodes gives us 16-bit code units on all Dart implementations.
+  // So we need to convert. The same is not true of "new String.fromCharCodes",
+  // which accepts code points on the VM but not dart2js (dartbug.com/1357).
+  return _utf16CodeUnitsToCodepoints(str.charCodes);
 }
 
 /**
diff --git a/tests/benchmark_smoke/benchmark_smoke_test.dart b/tests/benchmark_smoke/benchmark_smoke_test.dart
index 91cb484..2c46a48 100644
--- a/tests/benchmark_smoke/benchmark_smoke_test.dart
+++ b/tests/benchmark_smoke/benchmark_smoke_test.dart
@@ -1,13 +1,14 @@
 // 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.
-#library('benchmark_smoke_test');
+
+library benchmarksmoketest;
 
 // Tests that benchmark classes used in perf testing are not broken.
-#import('benchmark_lib.dart');
-#import('dart:html');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
+import 'benchmark_lib.dart';
+import 'dart:html';
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
 
 void main() {
   useHtmlConfiguration();
diff --git a/tests/co19/co19-compiler.status b/tests/co19/co19-compiler.status
index 25470a6..c8264bb 100644
--- a/tests/co19/co19-compiler.status
+++ b/tests/co19/co19-compiler.status
@@ -214,6 +214,155 @@
 Language/13_Libraries_and_Scripts/3_Includes_A02_t04: Fail, OK
 Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail, OK
 
+# co19 issue 303
+Language/05_Variables/05_Variables_A07_t09: Fail, OK
+Language/05_Variables/05_Variables_A08_t03: Fail, OK
+Language/05_Variables/05_Variables_A12_t06: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t01: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t02: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t03: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A17_t04: Fail, OK
+Language/07_Classes/6_Constructors/1_Generative_Constructors_A18_t03: Fail, OK
+Language/07_Classes/6_Constructors/2_Factories_A01_t01: Fail, OK
+Language/07_Classes/6_Constructors/2_Factories_A06_t01: Fail, OK
+Language/07_Classes/6_Constructors/2_Factories_A06_t02: Fail, OK
+Language/07_Classes/6_Constructors/2_Factories_A06_t03: Fail, OK
+Language/07_Classes/6_Constructors/2_Factories_A06_t04: Fail, OK
+Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t06: Fail, OK
+Language/09_Generics/09_Generics_A03_t01: Fail, OK
+Language/09_Generics/09_Generics_A04_t06: Fail, OK
+Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t02: Fail, OK
+Language/11_Expressions/04_Booleans/1_Boolean_Conversion_A01_t01: Fail, OK
+Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t01: Fail, OK
+Language/11_Expressions/05_Strings_A18_t02: Fail, OK
+Language/11_Expressions/05_Strings_A18_t03: Fail, OK
+Language/11_Expressions/05_Strings_A18_t04: Fail, OK
+Language/11_Expressions/05_Strings_A18_t06: Fail, OK
+Language/11_Expressions/05_Strings_A18_t07: Fail, OK
+Language/11_Expressions/05_Strings_A18_t05: Fail, OK
+Language/11_Expressions/05_Strings_A18_t08: Fail, OK
+Language/11_Expressions/05_Strings_A18_t09: Fail, OK
+Language/11_Expressions/06_Lists_A09_t01: Fail, OK
+Language/11_Expressions/06_Lists_A09_t02: Fail, OK
+Language/11_Expressions/06_Lists_A09_t03: Fail, OK
+Language/11_Expressions/06_Lists_A09_t04: Fail, OK
+Language/11_Expressions/06_Lists_A09_t05: Fail, OK
+Language/11_Expressions/07_Maps_A10_t02: Fail, OK
+Language/11_Expressions/07_Maps_A10_t03: Fail, OK
+Language/11_Expressions/07_Maps_A10_t05: Fail, OK
+Language/11_Expressions/07_Maps_A10_t04: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A03_t03: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A03_t04: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A04_t03: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A04_t04: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A05_t02: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A05_t03: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A05_t04: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A05_t05: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A06_t02: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A06_t03: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A06_t04: Fail, OK
+Language/11_Expressions/09_Function_Expressions_A06_t05: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A02_t01: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A03_t01: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t01: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t02: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t03: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A05_t04: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t01: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t02: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t04: Fail, OK
+Language/11_Expressions/14_Function_Invocation/2_Binding_Actuals_to_Formals_A08_t03: Fail, OK
+Language/11_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t02: Fail, OK
+Language/11_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A06_t02: Fail, OK
+Language/11_Expressions/18_Assignment_A02_t01: Fail, OK
+Language/11_Expressions/18_Assignment_A03_t01: Fail, OK
+Language/11_Expressions/18_Assignment_A04_t06: Fail, OK
+Language/11_Expressions/18_Assignment_A04_t07: Fail, OK
+Language/11_Expressions/18_Assignment_A06_t01: Fail, OK
+Language/11_Expressions/19_Conditional_A02_t03: Fail, OK
+Language/11_Expressions/19_Conditional_A02_t04: Fail, OK
+Language/11_Expressions/20_Logical_Boolean_Expressions_A03_t01: Fail, OK
+Language/11_Expressions/22_Equality_A10_t02: Fail, OK
+Language/11_Expressions/27_Unary_Expressions_A02_t03: Fail, OK
+Language/11_Expressions/30_Identifier_Reference_A03_t01: Fail, OK
+Language/11_Expressions/30_Identifier_Reference_A10_t02: Fail, OK
+Language/12_Statements/03_Variable_Declaration_A01_t01: Fail, OK
+Language/12_Statements/03_Variable_Declaration_A01_t02: Fail, OK
+Language/12_Statements/05_If_A05_t01: Fail, OK
+Language/12_Statements/05_If_A05_t02: Fail, OK
+Language/12_Statements/06_For/1_For_Loop_A01_t07: Fail, OK
+Language/12_Statements/06_For/1_For_Loop_A01_t08: Fail, OK
+Language/12_Statements/07_While_A02_t02: Fail, OK
+Language/12_Statements/07_While_A03_t01: Fail, OK
+Language/12_Statements/07_While_A03_t02: Fail, OK
+Language/12_Statements/07_While_A03_t03: Fail, OK
+Language/12_Statements/08_Do_A02_t03: Fail, OK
+Language/12_Statements/15_Assert_A02_t01: Fail, OK
+Language/12_Statements/15_Assert_A03_t01: Fail, OK
+Language/12_Statements/15_Assert_A03_t02: Fail, OK
+Language/12_Statements/15_Assert_A03_t04: Fail, OK
+Language/12_Statements/15_Assert_A03_t03: Fail, OK
+Language/12_Statements/15_Assert_A03_t05: Fail, OK
+Language/12_Statements/15_Assert_A03_t08: Fail, OK
+Language/12_Statements/15_Assert_A03_t06: Fail, OK
+Language/12_Statements/15_Assert_A03_t09: Fail, OK
+Language/13_Libraries_and_Scripts/4_Scripts_A01_t17: Fail, OK
+Language/13_Libraries_and_Scripts/4_Scripts_A03_t01: Fail, OK
+Language/13_Libraries_and_Scripts/4_Scripts_A03_t02: Fail, OK
+Language/14_Types/1_Static_Types_A02_t09: Fail, OK
+Language/14_Types/2_Dynamic_Type_System_A01_t01: Fail, OK
+Language/14_Types/4_Interface_Types_A08_t03: Fail, OK
+Language/14_Types/8_Parameterized_Types_A02_t01: Fail, OK
+LibTest/core/AssertionError/column_A01_t02: Fail, OK
+LibTest/core/AssertionError/failedAssertion_A01_t01: Fail, OK
+LibTest/core/AssertionError/line_A01_t02: Fail, OK
+LibTest/core/AssertionError/toString_A01_t01: Fail, OK
+LibTest/core/AssertionError/url_A01_t01: Fail, OK
+LibTest/core/double/ceil_A01_t01: Fail, OK
+LibTest/core/double/ceil_A01_t03: Fail, OK
+LibTest/core/double/ceil_A01_t06: Fail, OK
+LibTest/core/double/floor_A01_t01: Fail, OK
+LibTest/core/double/floor_A01_t03: Fail, OK
+LibTest/core/double/floor_A01_t06: Fail, OK
+LibTest/core/double/operator_remainder_A01_t01: Fail, OK
+LibTest/core/double/round_A01_t05: Fail, OK
+LibTest/core/double/toDouble_A01_t03: Fail, OK
+LibTest/core/double/toInt_A01_t05: Fail, OK
+LibTest/core/double/truncate_A01_t05: Fail, OK
+LibTest/core/Future/chain_A02_t05: Fail, OK
+LibTest/core/Future/transform_A02_t04: Fail, OK
+LibTest/core/int/operator_addition_A01_t01: Fail, OK
+LibTest/core/int/operator_division_A01_t01: Fail, OK
+LibTest/core/int/operator_GE_A01_t01: Fail, OK
+LibTest/core/int/operator_GT_A01_t01: Fail, OK
+LibTest/core/int/operator_LE_A01_t01: Fail, OK
+LibTest/core/int/operator_LT_A01_t01: Fail, OK
+LibTest/core/int/operator_remainder_A01_t02: Fail, OK
+LibTest/core/int/operator_subtraction_A01_t01: Fail, OK
+LibTest/core/int/remainder_A01_t02: Fail, OK
+LibTest/core/int/toDouble_A01_t01: Fail, OK
+LibTest/core/List/addAll_A04_t01: Fail, OK
+LibTest/core/List/every_A01_t01: Fail, OK
+LibTest/core/List/forEach_A01_t02: Fail, OK
+LibTest/core/List/getRange_A06_t01: Fail, OK
+LibTest/core/List/indexOf_A06_t01: Fail, OK
+LibTest/core/List/insertRange_A08_t01: Fail, OK
+LibTest/core/List/length_A07_t01: Fail, OK
+LibTest/core/List/List.from_A03_t02: Fail, OK
+LibTest/core/List/List_A04_t01: Fail, OK
+LibTest/core/List/operator_subscript_A03_t01: Fail, OK
+LibTest/core/List/operator_subscripted_assignment_A03_t01: Fail, OK
+LibTest/core/List/setRange_A05_t01: Fail, OK
+LibTest/core/TypeError/dstName_A01_t01: Fail, OK
+LibTest/core/TypeError/column_A01_t01: Fail, OK
+LibTest/core/TypeError/failedAssertion_A01_t01: Fail, OK
+LibTest/core/TypeError/dstType_A01_t01: Fail, OK
+LibTest/core/TypeError/line_A01_t01: Fail, OK
+LibTest/core/TypeError/srcType_A01_t01: Fail, OK
+LibTest/core/TypeError/toString_A01_t01: Fail, OK
+LibTest/core/TypeError/url_A01_t01: Fail, OK
+
 
 
 Language/10_Expressions/30_Type_Cast_A01_t04: Fail, OK # the expected error is not specified
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 05deb6f..f5e2d1d 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -16,9 +16,10 @@
 Language/14_Types/4_Interface_Types_A10_t03: Fail
 
 
-Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash # TODO(dart2dart-team): Please triage this crash.
-Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash # TODO(dart2dart-team): Please triage this crash.
+Language/07_Classes/07_Classes_A03_t01: Fail, Pass # http://dartbug.com/6603 fails in minified, TRIAGE
+Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail, Pass # http://dartbug.com/6603 fails in minified, TRIAGE
 Language/12_Statements/10_Try_A06_t01: Fail, Pass # Fails in minified, TRIAGE
+Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, Pass # Fails in minified, TRIAGE
 
 Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t04: Fail # TODO(dart2dart-team): Please triage this failure.
@@ -103,21 +104,14 @@
 Language/13_Libraries_and_Scripts/1_Imports_A02_t19: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(dart2dart-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(dart2dart-team): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # Inherited from dart2js
 Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(dart2dart-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(dart2dart-team): Please triage this failure.
@@ -188,26 +182,6 @@
 LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
 LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
 
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
-
 Language/03_Overview/1_Scoping_A01_t39: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t40: Fail # http://dartbug.com/5519
 Language/03_Overview/1_Scoping_A01_t41: Fail # http://dartbug.com/5519
@@ -261,7 +235,6 @@
 Language/07_Classes/07_Classes_A02_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t04: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A02_t11: Fail # http://dartbug.com/5519
-Language/07_Classes/07_Classes_A03_t01: Fail # inherited from VM
 Language/07_Classes/07_Classes_A03_t02: Fail # http://dartbug.com/5519
 Language/07_Classes/07_Classes_A03_t07: Fail # inherited from dart2js
 Language/07_Classes/07_Classes_A03_t08: Fail # inherited from dart2js
@@ -391,8 +364,6 @@
 Language/11_Expressions/01_Constants_A17_t03: Crash # inherited from VM
 Language/11_Expressions/01_Constants_A17_t03: Fail # http://dartbug.com/5519
 Language/11_Expressions/01_Constants_A19_t04: Fail # http://dartbug.com/5519
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # Inherited from dart2js
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # Inherited from dart2js
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # Inherited from dart2js
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t09: Fail, OK # co19 issue 210
 Language/11_Expressions/05_Strings/1_String_Interpolation_A03_t02: Fail # inherited from VM
@@ -414,8 +385,6 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/1_New_A09_t09: Fail # inherited from VM
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # co19 issue 255: unmatched bracket (same behavior in dart2js)
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # Inherited from VM
 Language/11_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # Inherited from VM
 Language/11_Expressions/11_Instance_Creation/1_New_A14_t01: Fail # Inherited from dart2js
 Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # http://dartbug.com/5519
@@ -445,28 +414,15 @@
 Language/11_Expressions/18_Assignment_A05_t02: Fail # inherited from VM
 Language/11_Expressions/18_Assignment_A05_t04: Fail # inherited from VM
 Language/11_Expressions/18_Assignment_A05_t05: Fail # inherited from VM
-Language/11_Expressions/19_Conditional_A01_t10: Fail # Inherited from dart2js
-Language/11_Expressions/19_Conditional_A01_t11: Fail # Inherited from dart2js
-Language/11_Expressions/19_Conditional_A01_t12: Fail # Inherited from dart2js
-Language/11_Expressions/19_Conditional_A01_t13: Fail # Inherited from dart2js
 Language/11_Expressions/19_Conditional_A01_t14: Fail # Inherited from dart2js
 Language/11_Expressions/19_Conditional_A01_t15: Fail # Inherited from dart2js
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # http://dartbug.com/5519
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # Inherited from dart2js
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/11_Expressions/21_Bitwise_Expressions_A01_t13: Fail # Inherited from dart2js
-Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail # http://dartbug.com/5519
-Language/11_Expressions/21_Bitwise_Expressions_A01_t15: Fail # Inherited from dart2js
 Language/11_Expressions/21_Bitwise_Expressions_A01_t16: Fail # Inherited from dart2js
 Language/11_Expressions/21_Bitwise_Expressions_A01_t17: Fail # Inherited from dart2js
 Language/11_Expressions/23_Relational_Expressions_A01_t10: Fail # http://dartbug.com/5519
 Language/11_Expressions/23_Relational_Expressions_A01_t11: Fail # http://dartbug.com/5519
 Language/11_Expressions/23_Relational_Expressions_A01_t12: Fail # http://dartbug.com/5519
 Language/11_Expressions/23_Relational_Expressions_A01_t13: Fail # http://dartbug.com/5519
-Language/11_Expressions/23_Relational_Expressions_A01_t19: Fail # Inherited from dart2js
-Language/11_Expressions/23_Relational_Expressions_A01_t20: Fail # http://dartbug.com/5519
-Language/11_Expressions/23_Relational_Expressions_A01_t21: Fail # Inherited from dart2js
 Language/11_Expressions/23_Relational_Expressions_A01_t22: Fail # Inherited from dart2js
 Language/11_Expressions/23_Relational_Expressions_A01_t23: Fail # Inherited from dart2js
 Language/11_Expressions/22_Equality_A01_t01: Fail # inherited from VM
@@ -477,37 +433,23 @@
 Language/11_Expressions/22_Equality_A01_t24: Fail # Inherited from dart2js
 Language/11_Expressions/22_Equality_A02_t03: Fail # inherited from VM
 Language/11_Expressions/22_Equality_A05_t01: Fail # inherited from VM
-Language/11_Expressions/24_Shift_A01_t10: Fail # Inherited from dart2js
-Language/11_Expressions/24_Shift_A01_t11: Fail # http://dartbug.com/5519
-Language/11_Expressions/24_Shift_A01_t12: Fail # Inherited from dart2js
 Language/11_Expressions/24_Shift_A01_t13: Fail # Inherited from dart2js
 Language/11_Expressions/24_Shift_A01_t14: Fail # Inherited from dart2js
-Language/11_Expressions/25_Additive_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/11_Expressions/25_Additive_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/11_Expressions/25_Additive_Expressions_A01_t12: Fail # Inherited from dart2js
 Language/11_Expressions/25_Additive_Expressions_A01_t13: Fail # Inherited from dart2js
 Language/11_Expressions/25_Additive_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # Inherited from dart2js
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # Inherited from dart2js
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # Inherited from dart2js
 Language/11_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # Inherited from dart2js
 Language/11_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t01: Fail # inherited from VM
 Language/11_Expressions/27_Unary_Expressions_A01_t02: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t04: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/11_Expressions/27_Unary_Expressions_A01_t17: Fail # Inherited from dart2js
-Language/11_Expressions/27_Unary_Expressions_A01_t18: Fail # Inherited from dart2js
-Language/11_Expressions/27_Unary_Expressions_A01_t19: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t20: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t21: Fail # Inherited from dart2js
 Language/11_Expressions/27_Unary_Expressions_A01_t22: Fail # Inherited from dart2js
 Language/11_Expressions/28_Postfix_Expressions_A01_t02: Fail # Inherited from dart2js
 Language/11_Expressions/28_Postfix_Expressions_A01_t03: Fail # Inherited from dart2js
 Language/11_Expressions/28_Postfix_Expressions_A01_t05: Fail # Inherited from dart2js
-Language/11_Expressions/29_Assignable_Expressions_A01_t06: Fail # Inherited from dart2js
 Language/11_Expressions/29_Assignable_Expressions_A01_t08: Fail # Inherited from dart2js
-Language/11_Expressions/29_Assignable_Expressions_A01_t09: Fail # Inherited from dart2js
 Language/11_Expressions/30_Identifier_Reference_A02_t01: Fail # Pseudo keyword "abstract".
 Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail # http://dartbug.com/5519
 Language/12_Statements/03_Variable_Declaration_A04_t01: Fail # http://dartbug.com/5519
@@ -555,6 +497,10 @@
 
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A16_t07: Fail # http://dartbug.com/6242
 
+Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: Fail, OK # co19 issue 241
+Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t15: Fail, OK # co19 issue 241
+Language/11_Expressions/22_Equality_A01_t20: Fail, OK # co19 issue 241
+
 LibTest/core/NoSuchMethodError/NoSuchMethodError_A01_t01: Fail, OK # co19 issue 300
 LibTest/core/NoSuchMethodError/toString_A01_t01: Fail, OK # co19 issue 300
 
@@ -562,3 +508,9 @@
 LibTest/core/double/operator_remainder_A01_t04: Fail # Result is NaN
 LibTest/core/double/round_A01_t01: Fail # Result is NaN
 LibTest/core/double/remainder_A01_t04: Fail # Result is NaN
+
+
+[ $compiler == dart2dart && $system == macos ]
+LibTest/math/acos_A01_t01: Fail, OK # co19 issue 44
+LibTest/math/asin_A01_t01: Fail, OK # co19 issue 44
+LibTest/math/atan_A01_t01: Fail, OK # co19 issue 44
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 9e1dc2d..8493286 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -6,9 +6,6 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
-Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Crash
-Language/13_Libraries_and_Scripts/2_Exports_A04_t03: Crash
-
 Language/03_Overview/1_Scoping_A02_t05: Fail # TODO(ahe): Please triage this failure.
 Language/03_Overview/1_Scoping_A02_t06: Fail # TODO(ahe): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t02: Fail # TODO(ahe): Please triage this failure.
@@ -50,8 +47,6 @@
 Language/09_Generics/09_Generics_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/01_Constants_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/01_Constants_A13_t06: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t05: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/05_Strings/1_String_Interpolation_A01_t06: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/08_Throw_A01_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/08_Throw_A05_t01: Fail # TODO(ahe): Please triage this failure.
@@ -61,9 +56,6 @@
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t05: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t06: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A02_t07: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/11_Instance_Creation/1_New_A13_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/1_New_A14_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/11_Instance_Creation/2_Const_A01_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/17_Getter_Invocation_A02_t01: Fail # TODO(ahe): Please triage this failure.
@@ -71,73 +63,29 @@
 Language/11_Expressions/18_Assignment_A05_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/18_Assignment_A05_t05: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/18_Assignment_A08_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/19_Conditional_A01_t13: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/19_Conditional_A01_t14: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/19_Conditional_A01_t15: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/20_Logical_Boolean_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/21_Bitwise_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/21_Bitwise_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/22_Equality_A01_t23: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/22_Equality_A01_t24: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/22_Equality_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/23_Relational_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/23_Relational_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/23_Relational_Expressions_A01_t23: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t09: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/24_Shift_A01_t12: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/24_Shift_A01_t13: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/24_Shift_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t07: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/25_Additive_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/25_Additive_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/25_Additive_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t10: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t14: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/26_Multiplicative_Expressions_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/26_Multiplicative_Expressions_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/26_Multiplicative_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t04: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t11: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t13: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t17: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t18: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/27_Unary_Expressions_A01_t19: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/27_Unary_Expressions_A01_t20: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/27_Unary_Expressions_A01_t21: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/27_Unary_Expressions_A01_t22: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/28_Postfix_Expressions_A01_t02: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/28_Postfix_Expressions_A01_t03: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/28_Postfix_Expressions_A01_t05: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/29_Assignable_Expressions_A01_t06: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A04_t09: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t12: Fail # TODO(ahe): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t02: Fail # TODO(ahe): Please triage this failure.
 Language/11_Expressions/31_Type_Test_A01_t04: Fail # TODO(ahe): Please triage this failure.
@@ -180,21 +128,14 @@
 Language/13_Libraries_and_Scripts/1_Imports_A02_t27: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t28: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t02: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t09: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t10: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t22: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t29: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t30: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t42: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t49: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t50: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/1_Imports_A03_t62: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t69: Fail # TODO(ahe): Please triage this failure.
-Language/13_Libraries_and_Scripts/1_Imports_A03_t70: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t07: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t15: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A01_t16: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t01: Fail # TODO(ahe): Please triage this failure.
+Language/13_Libraries_and_Scripts/2_Exports_A04_t02: Fail # Missing check for duplicate exports.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(ahe): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(ahe): Please triage this failure.
@@ -231,26 +172,6 @@
 LibTest/core/EmptyQueueException/EmptyQueueException_A01_t01: Fail, OK # co19 issue 288
 LibTest/core/EmptyQueueException/toString_A01_t01: Fail, OK # co19 issue 288
 
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
-
 [ $compiler == dart2js && $unchecked ]
 LibTest/core/Date/Date.fromMillisecondsSinceEpoch_A03_t01: Fail # TODO(ahe): Please triage this failure.
 
@@ -301,7 +222,6 @@
 Language/12_Statements/05_If_A02_t01: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/06_For/1_For_Loop_A01_t08: Fail # TODO(ahe): Please triage this failure.
 Language/12_Statements/09_Switch_A05_t01: Fail # TODO(ahe): Please triage this failure.
-Language/12_Statements/11_Return_A04_t01: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/4_Interface_Types_A08_t03: Fail # TODO(ahe): Please triage this failure.
 Language/14_Types/8_Parameterized_Types_A02_t01: Fail # TODO(ahe): Please triage this failure.
 LibTest/core/AssertionError/column_A01_t02: Fail # TODO(ahe): Please triage this failure.
@@ -331,6 +251,14 @@
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t01: Fail # Checked mode failure for noSuchMethod type.
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A06_t02: Fail # Checked mode failure for noSuchMethod type.
 
+# These tests return an object from a void function.
+Language/14_Types/7_Type_Void_A04_t02: Fail, OK
+Language/14_Types/7_Type_Void_A04_t03: Fail, OK
+Language/14_Types/7_Type_Void_A04_t04: Fail, OK
+Language/14_Types/7_Type_Void_A04_t05: Fail, OK
+
+Language/11_Expressions/11_Instance_Creation/1_New_A12_t02: Fail # http://dartbug.com/3970
+
 
 [ $compiler == dart2js ]
 LibTest/core/int/operator_GT_A01_t01: Fail, OK # co19 issue 200
@@ -459,6 +387,11 @@
 # can understand so he can file a bug later.
 #
 [ $compiler == dart2js ]
+Language/11_Expressions/11_Instance_Creation/1_New_A01_t04: Fail, OK # co19 issue 241
+Language/11_Expressions/22_Equality_A01_t19: Fail, OK # co19 issue 241
+Language/11_Expressions/22_Equality_A01_t20: Fail, OK # co19 issue 241
+Language/11_Expressions/32_Type_Cast_A01_t04: Fail, OK # co19 issue 241
+
 Language/11_Expressions/22_Equality_A01_t01: Fail, OK # Function declaration takes precedence over function expression.
 Language/11_Expressions/28_Postfix_Expressions_A01_t01: Fail, OK # A map literal cannot start an expression statement.
 LibTest/core/String/String_class_A02_t01: Pass, Fail, OK # issue 6418 compiler cancelled: Unhandled non-BMP character: U+10000
@@ -479,7 +412,6 @@
 Language/03_Overview/2_Privacy_A01_t09: Fail, OK # co19 issue 198
 Language/03_Overview/2_Privacy_A01_t10: Fail, OK # co19 issue 198
 
-Language/11_Expressions/11_Instance_Creation/1_New_A12_t01: Fail, OK # co19 issue 273
 LibTest/core/String/hashCode_A01_t01: Fail, OK # co19 issue 273
 LibTest/core/int/hashCode_A01_t01: Fail, OK # co19 issue 273
 
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 0666c0c..e27cb1b 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -26,6 +26,9 @@
 Language/13_Libraries_and_Scripts/1_Imports_A02_t21: Crash # TODO(vm-team): Please triage this crash.
 Language/13_Libraries_and_Scripts/1_Imports_A02_t22: Crash # TODO(vm-team): Please triage this crash.
 
+Language/11_Expressions/30_Identifier_Reference_A05_t04: Fail, OK # co19 issue 302
+
+
 Language/05_Variables/05_Variables_A05_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t11: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/05_Variables_A05_t13: Fail # TODO(vm-team): Please triage this failure.
@@ -33,16 +36,14 @@
 Language/05_Variables/05_Variables_A05_t15: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/2_Getters_A01_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/2_Getters_A01_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t01: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t03: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t04: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t05: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t07: Fail # TODO(vm-team): Please triage this failure.
-Language/07_Classes/3_Setters_A04_t08: Fail # TODO(vm-team): Please triage this failure.
+Language/07_Classes/07_Classes_A07_t03: Fail, OK # co19 issue 306
+Language/07_Classes/07_Classes_A07_t06: Fail, OK # co19 issue 306
+Language/07_Classes/2_Getters_A01_t03: Fail # Expects compile-time error when getter has empty parameter list.
+Language/07_Classes/2_Getters_A01_t05: Fail # Expects compile-time error when getter has empty parameter list.
+Language/07_Classes/3_Setters_A04_t03: Fail, OK # Syntax error, issue 304
+Language/07_Classes/3_Setters_A04_t06: Fail, OK # Syntax error, issue 304
+Language/07_Classes/3_Setters_A04_t07: Fail, OK # test error, issue 305
+Language/07_Classes/3_Setters_A04_t08: Fail, OK # test error, issue 305
 Language/07_Classes/4_Abstract_Instance_Members_A03_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A03_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/07_Classes/4_Abstract_Instance_Members_A03_t04: Fail # TODO(vm-team): Please triage this failure.
@@ -140,7 +141,6 @@
 Language/11_Expressions/29_Assignable_Expressions_A01_t08: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/29_Assignable_Expressions_A01_t09: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A05_t02: Fail # TODO(vm-team): Please triage this failure.
-Language/11_Expressions/30_Identifier_Reference_A05_t08: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A06_t01: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A06_t02: Fail # TODO(vm-team): Please triage this failure.
 Language/11_Expressions/30_Identifier_Reference_A07_t01: Fail # TODO(vm-team): Please triage this failure.
@@ -184,7 +184,6 @@
 Language/13_Libraries_and_Scripts/2_Exports_A04_t04: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t05: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/2_Exports_A04_t06: Fail # TODO(vm-team): Please triage this failure.
-Language/13_Libraries_and_Scripts/3_Parts_A03_t03: Fail # TODO(vm-team): Please triage this failure.
 Language/13_Libraries_and_Scripts/4_Scripts_A01_t16: Fail # TODO(vm-team): Please triage this failure.
 Language/14_Types/5_Function_Types_A02_t01: Fail # TODO(vm-team): Please triage this failure.
 LibTest/core/Queue/Queue.from_A01_t02: Fail # TODO(vm-team): Please triage this failure.
@@ -374,26 +373,6 @@
 
 LibTest/core/Map/getValues_A01_t02: Fail, OK # co19 issue 287
 
-LibTest/core/List/List_A01_t01: Fail, OK # co19 issue 290
-LibTest/core/List/getRange_A04_t01: Fail, OK # co19 issue 290
-LibTest/core/List/insertRange_A06_t01: Fail, OK # co19 issue 290
-LibTest/core/List/last_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/length_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/operator_subscripted_assignment_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/removeLast_A01_t02: Fail, OK # co19 issue 290
-LibTest/core/List/removeRange_A05_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A02_t02: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t01: Fail, OK # co19 issue 290
-LibTest/core/List/setRange_A03_t02: Fail, OK # co19 issue 290
-LibTest/core/Match/group_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/groups_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/Match/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/charCodeAt_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/operator_subscript_A02_t01: Fail, OK # co19 issue 290
-LibTest/core/String/substring_A02_t01: Fail, OK # co19 issue 290
-
 [ $compiler == none && $runtime == vm ]
 LibTest/core/String/contains_A01_t03: Skip # Times out.
 
@@ -432,10 +411,6 @@
 Language/11_Expressions/15_Method_Invocation/4_Super_Invocation_A08_t02: Fail # co19 issue 251 or issue 5732
 
 
-# initializer must be a compile time constant
-Language/11_Expressions/30_Identifier_Reference_A05_t09: Fail
-
-
 # invalid operator overloading
 Language/07_Classes/1_Instance_Methods/2_Operators_A02_t01: Fail
 
diff --git a/tests/compiler/dart2js/backend_htype_list_test.dart b/tests/compiler/dart2js/backend_htype_list_test.dart
index 30369be..bc8ecc4 100644
--- a/tests/compiler/dart2js/backend_htype_list_test.dart
+++ b/tests/compiler/dart2js/backend_htype_list_test.dart
@@ -4,10 +4,11 @@
 
 import 'dart:uri';
 
-import '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/js_backend/js_backend.dart';
-import '../../../lib/compiler/implementation/ssa/ssa.dart';
-import '../../../lib/compiler/implementation/dart2jslib.dart' show Selector;
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart'
+       show Selector;
 
 import 'compiler_helper.dart';
 import 'parser_helper.dart';
diff --git a/tests/compiler/dart2js/begin_end_token_test.dart b/tests/compiler/dart2js/begin_end_token_test.dart
index 954213e..d58a63b 100644
--- a/tests/compiler/dart2js/begin_end_token_test.dart
+++ b/tests/compiler/dart2js/begin_end_token_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'parser_helper.dart';
-import '../../../lib/compiler/implementation/tree/tree.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
 
 void testNode(Node node, String expected, String text, [bool hard = true]) {
   var debug = 'text=$text,expected=$expected,node:${node}';
diff --git a/tests/compiler/dart2js/call_site_type_inferer_static_test.dart b/tests/compiler/dart2js/call_site_type_inferer_static_test.dart
index 43e9477..8b73b45 100644
--- a/tests/compiler/dart2js/call_site_type_inferer_static_test.dart
+++ b/tests/compiler/dart2js/call_site_type_inferer_static_test.dart
@@ -2,13 +2,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.
 
-#import("dart:uri");
+import "dart:uri";
 
-#import("../../../lib/compiler/implementation/js_backend/js_backend.dart");
-#import("../../../lib/compiler/implementation/ssa/ssa.dart");
+import "../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart";
 
-#import('compiler_helper.dart');
-#import('parser_helper.dart');
+import 'compiler_helper.dart';
+import 'parser_helper.dart';
 
 void compileAndFind(String code,
                     String functionName,
diff --git a/tests/compiler/dart2js/call_site_type_inferer_test.dart b/tests/compiler/dart2js/call_site_type_inferer_test.dart
index a32d9e6..a220063 100644
--- a/tests/compiler/dart2js/call_site_type_inferer_test.dart
+++ b/tests/compiler/dart2js/call_site_type_inferer_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:uri';
 
-import '../../../lib/compiler/implementation/js_backend/js_backend.dart';
-import '../../../lib/compiler/implementation/ssa/ssa.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart';
 
 import 'compiler_helper.dart';
 import 'parser_helper.dart';
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 96fcc3e..b6db836 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -7,12 +7,15 @@
 
 import "dart:uri";
 
-import "../../../lib/compiler/implementation/elements/elements.dart" as lego;
-import "../../../lib/compiler/implementation/js_backend/js_backend.dart" as js;
-import "../../../lib/compiler/implementation/dart2jslib.dart" as leg;
-import "../../../lib/compiler/implementation/ssa/ssa.dart" as ssa;
-import "../../../lib/compiler/implementation/util/util.dart";
-import '../../../lib/compiler/implementation/source_file.dart';
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart"
+       as lego;
+import "../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart"
+       as js;
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart"
+       as leg;
+import "../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart" as ssa;
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
+import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
 
 import "mock_compiler.dart";
 import "parser_helper.dart";
diff --git a/tests/compiler/dart2js/compiler_test.dart b/tests/compiler/dart2js/compiler_test.dart
index 6015342..aa55eba 100644
--- a/tests/compiler/dart2js/compiler_test.dart
+++ b/tests/compiler/dart2js/compiler_test.dart
@@ -2,11 +2,11 @@
 // 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 "../../../lib/compiler/implementation/dart2jslib.dart";
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import "../../../lib/compiler/implementation/resolution/resolution.dart";
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/util/util.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/resolution/resolution.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
 import "mock_compiler.dart";
 import "parser_helper.dart";
 
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 81046f2..c520581 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import "dart:uri";
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import '../../../lib/compiler/implementation/scanner/scannerlib.dart';
-import '../../../lib/compiler/implementation/source_file.dart';
-import '../../../lib/compiler/implementation/types/types.dart';
-import '../../../lib/compiler/implementation/tree/tree.dart';
-import "../../../lib/compiler/implementation/dart2jslib.dart" as leg;
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/types/types.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart" as leg;
 
 import "parser_helper.dart";
 import "compiler_helper.dart";
@@ -135,6 +135,7 @@
   abstract class Map {}
   class Closure {}
   class Null {}
+  class Type {}
   class Dynamic_ {}
   bool identical(Object a, Object b) {}''';
 
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 5a11b46..b082495 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -3,7 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 constant_folding_string_test: Fail
-redundant_phi_eliminator_test: Fail # Fails because of hack to allow aborting loops.
 pretty_parameter_test: Fail # TODO(floitsch): investigate.
 tree_shaking_test: Fail # Issue 4811
 
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index 6b59656..ce5702b 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -5,11 +5,11 @@
 import 'dart:uri';
 import 'parser_helper.dart';
 import 'mock_compiler.dart';
-import '../../../lib/compiler/compiler.dart';
-import '../../../lib/compiler/implementation/dart2jslib.dart' as leg;
-import '../../../lib/compiler/implementation/dart_backend/dart_backend.dart';
-import '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/tree/tree.dart';
+import '../../../sdk/lib/_internal/compiler/compiler.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart' as leg;
+import '../../../sdk/lib/_internal/compiler/implementation/dart_backend/dart_backend.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
 
 const coreLib = r'''
 #library('corelib');
@@ -26,6 +26,7 @@
 interface Dynamic_ {}
 interface Null {}
 interface TypeError {}
+class Type {}
 class Math {
   static double parseDouble(String s) => 1.0;
 }
@@ -103,8 +104,8 @@
 
   compile(
       scriptUri,
-      fileUri('libraryRoot'),
-      fileUri('packageRoot'),
+      fileUri('libraryRoot/'),
+      fileUri('packageRoot/'),
       provider,
       handler,
       options).then(continuation);
diff --git a/tests/compiler/dart2js/erroneous_element_test.dart b/tests/compiler/dart2js/erroneous_element_test.dart
index d616763..81b8f23 100644
--- a/tests/compiler/dart2js/erroneous_element_test.dart
+++ b/tests/compiler/dart2js/erroneous_element_test.dart
@@ -2,8 +2,9 @@
 // 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 '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/dart2jslib.dart' show MessageKind;
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart' 
+       show MessageKind;
 import 'parser_helper.dart';
 
 void main() {
diff --git a/tests/compiler/dart2js/field_type_inferer_test.dart b/tests/compiler/dart2js/field_type_inferer_test.dart
index c712a97..a3253b4 100644
--- a/tests/compiler/dart2js/field_type_inferer_test.dart
+++ b/tests/compiler/dart2js/field_type_inferer_test.dart
@@ -2,14 +2,14 @@
 // 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:uri");
+import 'dart:uri';
 
-#import("../../../lib/compiler/implementation/js_backend/js_backend.dart");
-#import("../../../lib/compiler/implementation/ssa/ssa.dart");
-#import("../../../lib/compiler/implementation/scanner/scannerlib.dart");
+import '../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart';
 
-#import('compiler_helper.dart');
-#import('parser_helper.dart');
+import 'compiler_helper.dart';
+import 'parser_helper.dart';
 
 void compileAndFind(String code,
                     String className,
diff --git a/tests/compiler/dart2js/find_my_name_test.dart b/tests/compiler/dart2js/find_my_name_test.dart
index 008575d..1961b3f 100644
--- a/tests/compiler/dart2js/find_my_name_test.dart
+++ b/tests/compiler/dart2js/find_my_name_test.dart
@@ -2,9 +2,9 @@
 // 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("../../../lib/compiler/implementation/elements/elements.dart");
-#import("mock_compiler.dart");
-#import("parser_helper.dart");
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "mock_compiler.dart";
+import "parser_helper.dart";
 
 main() {
   MockCompiler compiler = new MockCompiler();
diff --git a/tests/compiler/dart2js/link_test.dart b/tests/compiler/dart2js/link_test.dart
index a74073a..7dafb45 100644
--- a/tests/compiler/dart2js/link_test.dart
+++ b/tests/compiler/dart2js/link_test.dart
@@ -2,8 +2,8 @@
 // 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 '../../../lib/compiler/implementation/util/util.dart';
-import '../../../lib/compiler/implementation/util/util_implementation.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/util/util.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/util/util_implementation.dart';
 
 main() {
   test(const Link<Comparable>().prepend('three').prepend(2).prepend('one'),
diff --git a/tests/compiler/dart2js/metadata_test.dart b/tests/compiler/dart2js/metadata_test.dart
index 11d0bd5..df35845 100644
--- a/tests/compiler/dart2js/metadata_test.dart
+++ b/tests/compiler/dart2js/metadata_test.dart
@@ -7,8 +7,8 @@
 import 'compiler_helper.dart';
 import 'parser_helper.dart';
 
-import '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/dart2jslib.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart';
 
 void checkAnnotation(String name, String declaration,
                      {bool isTopLevelOnly: false}) {
diff --git a/tests/compiler/dart2js/mini_parser_test.dart b/tests/compiler/dart2js/mini_parser_test.dart
index 5fd37bf..369c3b0 100644
--- a/tests/compiler/dart2js/mini_parser_test.dart
+++ b/tests/compiler/dart2js/mini_parser_test.dart
@@ -4,8 +4,8 @@
 
 // Simple test to ensure that mini_parser keeps working.
 
-#import('../../../lib/compiler/implementation/tools/mini_parser.dart',
-        prefix: 'tool');
+import '../../../sdk/lib/_internal/compiler/implementation/tools/mini_parser.dart'
+    as tool;
 
 void main() {
   // Parse this script itself.
diff --git a/tests/compiler/dart2js/mirrors_helper.dart b/tests/compiler/dart2js/mirrors_helper.dart
index 7d33002..1e9485c 100644
--- a/tests/compiler/dart2js/mirrors_helper.dart
+++ b/tests/compiler/dart2js/mirrors_helper.dart
@@ -6,7 +6,7 @@
  * This file is read by 'mirrors_test.dart'.
  */
 
-#library('mirrors_helper');
+library mirrors_helper;
 
 typedef E Func<E,F extends Foo>(F f);
 
diff --git a/tests/compiler/dart2js/mirrors_test.dart b/tests/compiler/dart2js/mirrors_test.dart
index cec75b4..8b223fa7 100644
--- a/tests/compiler/dart2js/mirrors_test.dart
+++ b/tests/compiler/dart2js/mirrors_test.dart
@@ -2,10 +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.
 
-#import("../../../pkg/dartdoc/lib/mirrors.dart");
-#import("../../../pkg/dartdoc/lib/mirrors_util.dart");
+import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart';
 
-#import('dart:io');
+import 'dart:io';
 
 int count(Iterable iterable) {
   var count = 0;
@@ -36,7 +36,7 @@
 main() {
   var scriptPath = new Path.fromNative(new Options().script);
   var dirPath = scriptPath.directoryPath;
-  var libPath = dirPath.join(new Path.fromNative('../../../'));
+  var libPath = dirPath.join(new Path.fromNative('../../../sdk/'));
   var inputPath = dirPath.join(new Path.fromNative('mirrors_helper.dart'));
   var compilation = new Compilation.library([inputPath], libPath);
   Expect.isNotNull(compilation, "No compilation created");
@@ -55,6 +55,14 @@
   Expect.stringEquals("mirrors_helper", helperLibrary.qualifiedName,
     "Unexpected library qualified name");
 
+  var helperLibraryLocation = helperLibrary.location;
+  Expect.isNotNull(helperLibraryLocation);
+  Expect.equals(271, helperLibraryLocation.offset, "Unexpected offset");
+  Expect.equals(23, helperLibraryLocation.length, "Unexpected length");
+  Expect.equals(9, helperLibraryLocation.line, "Unexpected line");
+  Expect.equals(1, helperLibraryLocation.column, "Unexpected column");
+
+
   var classes = helperLibrary.classes;
   Expect.isNotNull(classes, "No classes map returned");
   Expect.isFalse(classes.isEmpty, "Empty classes map returned");
@@ -358,7 +366,7 @@
   Expect.equals(method1.owner, bazClass);
   Expect.isFalse(method1.isTopLevel);
   Expect.isFalse(method1.isConstructor);
-  Expect.isFalse(method1.isField);
+  Expect.isFalse(method1.isVariable);
   Expect.isTrue(method1.isMethod);
   Expect.isFalse(method1.isPrivate);
   Expect.isTrue(method1.isStatic);
@@ -412,7 +420,7 @@
   Expect.equals(method2.owner, bazClass);
   Expect.isFalse(method2.isTopLevel);
   Expect.isFalse(method2.isConstructor);
-  Expect.isFalse(method2.isField);
+  Expect.isFalse(method2.isVariable);
   Expect.isTrue(method2.isMethod);
   Expect.isFalse(method2.isPrivate);
   Expect.isFalse(method2.isStatic);
@@ -479,7 +487,7 @@
   Expect.equals(method3.owner, bazClass);
   Expect.isFalse(method3.isTopLevel);
   Expect.isFalse(method3.isConstructor);
-  Expect.isFalse(method3.isField);
+  Expect.isFalse(method3.isVariable);
   Expect.isTrue(method3.isMethod);
   Expect.isFalse(method3.isPrivate);
   Expect.isFalse(method3.isStatic);
@@ -605,7 +613,7 @@
   Expect.equals(operator_eq.owner, bazClass);
   Expect.isFalse(operator_eq.isTopLevel);
   Expect.isFalse(operator_eq.isConstructor);
-  Expect.isFalse(operator_eq.isField);
+  Expect.isFalse(operator_eq.isVariable);
   Expect.isTrue(operator_eq.isMethod);
   Expect.isFalse(operator_eq.isPrivate);
   Expect.isFalse(operator_eq.isStatic);
@@ -635,7 +643,7 @@
   Expect.equals(operator_negate.owner, bazClass);
   Expect.isFalse(operator_negate.isTopLevel);
   Expect.isFalse(operator_negate.isConstructor);
-  Expect.isFalse(operator_negate.isField);
+  Expect.isFalse(operator_negate.isVariable);
   Expect.isTrue(operator_negate.isMethod);
   Expect.isFalse(operator_negate.isPrivate);
   Expect.isFalse(operator_negate.isStatic);
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 50bb431..38ddd79 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -6,13 +6,14 @@
 
 import 'dart:uri';
 
-import '../../../lib/compiler/compiler.dart' as api;
-import '../../../lib/compiler/implementation/dart2jslib.dart' hide TreeElementMapping;
-import '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/resolution/resolution.dart';
-import '../../../lib/compiler/implementation/source_file.dart';
-import '../../../lib/compiler/implementation/tree/tree.dart';
-import '../../../lib/compiler/implementation/util/util.dart';
+import '../../../sdk/lib/_internal/compiler/compiler.dart' as api;
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart'
+       hide TreeElementMapping;
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/resolution/resolution.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/util/util.dart';
 import 'parser_helper.dart';
 
 class WarningMessage {
@@ -63,6 +64,7 @@
   class bool {}
   class String {}
   class Object {}
+  class Type {}
   class Function {}
   interface List default ListImplementation { List([length]);}
   class ListImplementation { factory List([length]) => null; }
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index fecc694..ed2af77 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -6,17 +6,18 @@
 
 import "dart:uri";
 
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/scanner/scannerlib.dart";
-import "../../../lib/compiler/implementation/dart2jslib.dart" hide SourceString;
-import "../../../lib/compiler/implementation/source_file.dart";
-import "../../../lib/compiler/implementation/util/util.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart" 
+       hide SourceString;
+import "../../../sdk/lib/_internal/compiler/implementation/source_file.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
 
-export "../../../lib/compiler/implementation/dart2jslib.dart"
+export "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart"
        show DiagnosticListener;
 // TODO(ahe): We should have token library to export instead.
-export "../../../lib/compiler/implementation/scanner/scannerlib.dart";
+export "../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart";
 
 class LoggerCanceler implements DiagnosticListener {
   void cancel(String reason, {node, token, instruction, element}) {
diff --git a/tests/compiler/dart2js/parser_test.dart b/tests/compiler/dart2js/parser_test.dart
index c3a6e00..2bb1b49 100644
--- a/tests/compiler/dart2js/parser_test.dart
+++ b/tests/compiler/dart2js/parser_test.dart
@@ -2,8 +2,8 @@
 // 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('parser_helper.dart');
-#import("../../../lib/compiler/implementation/tree/tree.dart");
+import 'parser_helper.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
 
 void testStatement(String statement) {
   Node node = parseStatement(statement);
diff --git a/tests/compiler/dart2js/patch_test.dart b/tests/compiler/dart2js/patch_test.dart
index 9770b3f..720c85d 100644
--- a/tests/compiler/dart2js/patch_test.dart
+++ b/tests/compiler/dart2js/patch_test.dart
@@ -2,10 +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.
 
-import "../../../lib/compiler/implementation/dart2jslib.dart";
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/util/util.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
 import "mock_compiler.dart";
 import "parser_helper.dart";
 import "dart:uri";
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 3cb50bf..5d193b9 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -4,12 +4,12 @@
 
 import 'dart:uri';
 
-import "../../../lib/compiler/implementation/dart2jslib.dart"
-    hide TreeElementMapping, TreeElements, SourceString;
-import "../../../lib/compiler/implementation/resolution/resolution.dart";
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/util/util.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart"
+       hide TreeElementMapping, TreeElements, SourceString;
+import "../../../sdk/lib/_internal/compiler/implementation/resolution/resolution.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
 import "compiler_helper.dart";
 import "mock_compiler.dart";
 import "parser_helper.dart";
@@ -730,6 +730,7 @@
          class Closure {}
          class Null {}
          class Dynamic_ {}
+         class Type {}
          class Object { Object() : super(); }''';
   resolveConstructor(script, "Object o = new Object();", "Object", "", 1,
                      expectedWarnings: [],
diff --git a/tests/compiler/dart2js/return_type_inferer_test.dart b/tests/compiler/dart2js/return_type_inferer_test.dart
index 43ef138..1dd60ff 100644
--- a/tests/compiler/dart2js/return_type_inferer_test.dart
+++ b/tests/compiler/dart2js/return_type_inferer_test.dart
@@ -2,9 +2,9 @@
 // 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("../../../lib/compiler/implementation/ssa/ssa.dart");
+import '../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart';
 
-#import('compiler_helper.dart');
+import 'compiler_helper.dart';
 
 const String TEST_ONE = r"""
   f(p) { if (p == null) return p; else return p; }
diff --git a/tests/compiler/dart2js/scanner_offset_length_test.dart b/tests/compiler/dart2js/scanner_offset_length_test.dart
index 8c158b9..bf22baf 100644
--- a/tests/compiler/dart2js/scanner_offset_length_test.dart
+++ b/tests/compiler/dart2js/scanner_offset_length_test.dart
@@ -2,8 +2,8 @@
 // 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('../../../lib/compiler/implementation/scanner/scannerlib.dart');
-#import('../../../lib/compiler/implementation/scanner/scanner_implementation.dart');
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart';
 
 Token scan(String text) =>
     new StringScanner(text, includeComments: true).tokenize();
diff --git a/tests/compiler/dart2js/scanner_test.dart b/tests/compiler/dart2js/scanner_test.dart
index d08f0fb..1126853 100644
--- a/tests/compiler/dart2js/scanner_test.dart
+++ b/tests/compiler/dart2js/scanner_test.dart
@@ -2,12 +2,12 @@
 // 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('../../../lib/utf/utf.dart');
-#import('../../../lib/compiler/implementation/scanner/scannerlib.dart');
-#import('../../../lib/compiler/implementation/scanner/scanner_implementation.dart');
-#import('../../../lib/compiler/implementation/util/characters.dart');
-#source('../../../lib/compiler/implementation/scanner/byte_strings.dart');
-#source('../../../lib/compiler/implementation/scanner/byte_array_scanner.dart');
+import 'dart:utf';
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/scanner/scanner_implementation.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/util/characters.dart';
+part '../../../sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart';
+part '../../../sdk/lib/_internal/compiler/implementation/scanner/byte_array_scanner.dart';
 
 Token scan(List<int> bytes) => new ByteArrayScanner(bytes).tokenize();
 
diff --git a/tests/compiler/dart2js/source_mapping_test.dart b/tests/compiler/dart2js/source_mapping_test.dart
index ee01064..fea3363 100644
--- a/tests/compiler/dart2js/source_mapping_test.dart
+++ b/tests/compiler/dart2js/source_mapping_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:uri';
 
-import "../../../lib/compiler/implementation/dart2jslib.dart";
-import '../../../lib/compiler/implementation/source_file.dart';
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
 import "mock_compiler.dart";
 import 'parser_helper.dart';
 
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index cb06d74..61d9286 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -2,10 +2,11 @@
 // 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 '../../../lib/compiler/implementation/dart2jslib.dart' hide SourceString;
-import '../../../lib/compiler/implementation/elements/elements.dart';
-import '../../../lib/compiler/implementation/tree/tree.dart';
-import '../../../lib/compiler/implementation/util/util.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart'
+       hide SourceString;
+import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/util/util.dart';
 import 'mock_compiler.dart';
 import 'parser_helper.dart';
 
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index fa2c48a..2f5c030 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -2,8 +2,8 @@
 // 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("mock_compiler.dart");
-#import("../../../lib/compiler/implementation/ssa/ssa.dart");
+import "mock_compiler.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart";
 
 const CONFLICTING = HType.CONFLICTING;
 const UNKNOWN = HType.UNKNOWN;
diff --git a/tests/compiler/dart2js/type_equals_test.dart b/tests/compiler/dart2js/type_equals_test.dart
index 7a24174..72eef67 100644
--- a/tests/compiler/dart2js/type_equals_test.dart
+++ b/tests/compiler/dart2js/type_equals_test.dart
@@ -2,10 +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.
 
-import "../../../lib/compiler/implementation/dart2jslib.dart";
-import "../../../lib/compiler/implementation/elements/elements.dart";
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/util/util.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/util/util.dart";
 import "compiler_helper.dart";
 import "parser_helper.dart";
 import "dart:uri";
diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart
index 54f7b7e..6717dce 100644
--- a/tests/compiler/dart2js/unparser2_test.dart
+++ b/tests/compiler/dart2js/unparser2_test.dart
@@ -2,10 +2,12 @@
 // 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 "../../../lib/compiler/implementation/scanner/scannerlib.dart";
-import "../../../lib/compiler/implementation/elements/elements.dart" show CompilationUnitElement, LibraryElement;
-import "../../../lib/compiler/implementation/tree/tree.dart";
-import "../../../lib/compiler/implementation/dart2jslib.dart" show DiagnosticListener, Script;
+import "../../../sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart"
+       show CompilationUnitElement, LibraryElement;
+import "../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart"
+       show DiagnosticListener, Script;
 
 main() {
   testClassDef();
diff --git a/tests/compiler/dart2js/unparser_test.dart b/tests/compiler/dart2js/unparser_test.dart
index 10ac315..441269e 100644
--- a/tests/compiler/dart2js/unparser_test.dart
+++ b/tests/compiler/dart2js/unparser_test.dart
@@ -2,10 +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.
 
-#import('dart:uri');
-#import('parser_helper.dart');
-#import('mock_compiler.dart');
-#import("../../../lib/compiler/implementation/tree/tree.dart");
+import 'dart:uri';
+import 'parser_helper.dart';
+import 'mock_compiler.dart';
+import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart';
 
 testUnparse(String statement) {
   Node node = parseStatement(statement);
diff --git a/tests/compiler/dart2js/uri_extras_test.dart b/tests/compiler/dart2js/uri_extras_test.dart
index 651865b..65a524a9 100644
--- a/tests/compiler/dart2js/uri_extras_test.dart
+++ b/tests/compiler/dart2js/uri_extras_test.dart
@@ -2,9 +2,9 @@
 // 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:uri');
+import 'dart:uri';
 
-#import('../../../lib/compiler/implementation/util/uri_extras.dart');
+import '../../../sdk/lib/_internal/compiler/implementation/util/uri_extras.dart';
 
 
 void testRelativize() {
@@ -48,9 +48,9 @@
   c('/c:/BAR', '///c:/foo', '///c:/BAR', true);
   c('/c:/BAR', '///c:/foo/', '///c:/BAR', true);
 
-  c('../lib/compiler/implementation/dart2js.dart',
+  c('../sdk/lib/_internal/compiler/implementation/dart2js.dart',
     '///C:/Users/person/dart_checkout_for_stuff/dart/ReleaseIA32/dart.exe',
-    '///c:/Users/person/dart_checkout_for_stuff/dart/lib/compiler/'
+    '///c:/Users/person/dart_checkout_for_stuff/dart/sdk/lib/_internal/compiler/'
     'implementation/dart2js.dart',
     true);
 
diff --git a/tests/compiler/dart2js/value_range2_test.dart b/tests/compiler/dart2js/value_range2_test.dart
index c0c3bca..bd84602 100644
--- a/tests/compiler/dart2js/value_range2_test.dart
+++ b/tests/compiler/dart2js/value_range2_test.dart
@@ -2,9 +2,9 @@
 // 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 "../../../lib/compiler/implementation/ssa/ssa.dart";
-import "../../../lib/compiler/implementation/dart2jslib.dart";
-import "../../../lib/compiler/implementation/js_backend/js_backend.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/ssa/ssa.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart";
+import "../../../sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart";
 
 ValueRangeInfo info = new ValueRangeInfo(const JavaScriptConstantSystem());
 
diff --git a/tests/compiler/dart2js_extra/3_test.dart b/tests/compiler/dart2js_extra/3_test.dart
index 9ac1ed71..520d8a8 100644
--- a/tests/compiler/dart2js_extra/3_test.dart
+++ b/tests/compiler/dart2js_extra/3_test.dart
@@ -2,6 +2,6 @@
 // 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.
 
-void main() {
+int main() {
   return 3;
 }
diff --git a/tests/compiler/dart2js_extra/async_helper.dart b/tests/compiler/dart2js_extra/async_helper.dart
new file mode 100644
index 0000000..a4263b5
--- /dev/null
+++ b/tests/compiler/dart2js_extra/async_helper.dart
@@ -0,0 +1,23 @@
+// 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 async_helper;
+
+/**
+ * Asynchronous test runner.
+ *
+ * [test] is a one argument function which must accept a one argument
+ * function (onDone).  The test function may start asynchronous tasks,
+ * and must call onDone exactly once when all asynchronous tasks have
+ * completed.  The argument to onDone is a bool which indicates
+ * success of the complete test.
+ */
+void asyncTest(void test(void onDone(bool success))) {
+  onDone(bool success) {
+    if (!success) throw 'test failed';
+    print('unittest-suite-success');
+  }
+  test(onDone);
+  print('unittest-suite-wait-for-done');
+}
diff --git a/tests/compiler/dart2js_extra/bailout_test.dart b/tests/compiler/dart2js_extra/bailout_test.dart
index 2b42399..308658a 100644
--- a/tests/compiler/dart2js_extra/bailout_test.dart
+++ b/tests/compiler/dart2js_extra/bailout_test.dart
@@ -31,7 +31,7 @@
   }
 }
 
-void forBailout() {
+String forBailout() {
   var n = myString.length;
   var res = '';
   for (int i = 0; i < n; i++) {
@@ -42,7 +42,7 @@
   return res;
 }
 
-void forInBailout() {
+String forInBailout() {
   var n = myString.length;
   var res = '';
   for (int i in myString.charCodes) {
@@ -53,7 +53,7 @@
   return res;
 }
 
-void innerForBailout() {
+String innerForBailout() {
   var n = myString.length;
   var res = '';
   for (int i = 0; i < 2; i++) {
@@ -66,7 +66,7 @@
   return res;
 }
 
-void whileBailout() {
+String whileBailout() {
   var n = myString.length;
   var res = '';
   var i = 0;
@@ -79,7 +79,7 @@
   return res;
 }
 
-void doWhileBailout() {
+String doWhileBailout() {
   var n = myString.length;
   var res = '';
   var i = 0;
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 47ea3f2..4743a49 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -7,9 +7,7 @@
 statements_test: Fail
 typed_locals_test: Fail
 no_such_method_test: Fail # Wrong InvocationMirror.memberName.
-
-[ $compiler == dart2js && $runtime == ff && $system == windows ]
-regress/4740_test: Fail
+break_test: Fail # Complex control flow TODO(ngeoffray): investigating
 
 [ $compiler == dart2js && $checked ]
 parameter_bailout_test: Fail, OK
@@ -25,3 +23,14 @@
 
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
+
+[ $jscl ]
+timer_test: Fail, OK # Timer is only supported in browsers.
+mirror_test: Fail, OK # Timer is only supported in browsers.
+
+[ $runtime == none ]
+timer_negative_test: Fail, OK # A negative runtime test.
+
+[ $compiler == none && $runtime == drt ]
+timer_test: Fail # http://dartbug.com/2264
+mirror_test: Fail # http://dartbug.com/2264
diff --git a/tests/compiler/dart2js_extra/foo7_test.dart b/tests/compiler/dart2js_extra/foo7_test.dart
index 35ee8ea..dc93acf 100644
--- a/tests/compiler/dart2js_extra/foo7_test.dart
+++ b/tests/compiler/dart2js_extra/foo7_test.dart
@@ -6,6 +6,6 @@
   print(foo());
 }
 
-void foo() {
+int foo() {
   return 3 + 4;
 }
diff --git a/tests/compiler/dart2js_extra/mirror_test.dart b/tests/compiler/dart2js_extra/mirror_test.dart
new file mode 100644
index 0000000..b2348a8
--- /dev/null
+++ b/tests/compiler/dart2js_extra/mirror_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+import 'dart:mirrors';
+
+import 'async_helper.dart';
+
+void test(void onDone(bool success)) {
+  var now = new Date.now();
+  InstanceMirror mirror = reflect(now);
+  print('now: ${now}');
+  print('mirror.type: ${mirror.type}');
+  print('now.toUtc(): ${now.toUtc()}');
+
+  mirror.invoke("toUtc", []).then((value) {
+    print('mirror.invoke("toUtc", []): $value');
+    Expect.isTrue(value.hasReflectee);
+    Expect.equals(now.toUtc(), value.reflectee);
+    onDone(true);
+  });
+}
+
+void main() {
+  print("""
+
+This program is using an experimental feature called \"mirrors\".  As
+currently implemented, mirrors do not work with minification, and will
+cause spurious errors depending on how code was optimized.
+
+The authors of this program are aware of these problems and have
+decided the thrill of using an experimental feature is outweighing the
+risks.  Furthermore, the authors of this program understand that
+long-term, to fix the problems mentioned above, mirrors may have
+negative impact on size and performance of Dart programs compiled to
+JavaScript.
+""");
+  asyncTest(test);
+}
diff --git a/tests/compiler/dart2js_extra/timer_negative_test.dart b/tests/compiler/dart2js_extra/timer_negative_test.dart
new file mode 100644
index 0000000..d446b8d
--- /dev/null
+++ b/tests/compiler/dart2js_extra/timer_negative_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import 'dart:isolate';
+
+import 'async_helper.dart';
+
+void test(void onDone(bool success)) {
+  int expected = 4;
+
+  void timerCallback(timer) {
+    if (--expected == 0) onDone(false);
+  }
+
+  new Timer(0, timerCallback);
+  new Timer(10, timerCallback);
+  new Timer(100, timerCallback);
+  new Timer(1000, timerCallback);
+}
+
+main() {
+  asyncTest(test);
+}
diff --git a/tests/compiler/dart2js_extra/timer_test.dart b/tests/compiler/dart2js_extra/timer_test.dart
new file mode 100644
index 0000000..7bb325c
--- /dev/null
+++ b/tests/compiler/dart2js_extra/timer_test.dart
@@ -0,0 +1,24 @@
+// 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.
+
+import 'dart:isolate';
+
+import 'async_helper.dart';
+
+void test(void onDone(bool success)) {
+  int expected = 4;
+
+  void timerCallback(timer) {
+    if (--expected == 0) onDone(true);
+  }
+
+  new Timer(0, timerCallback);
+  new Timer(10, timerCallback);
+  new Timer(100, timerCallback);
+  new Timer(1000, timerCallback);
+}
+
+main() {
+  asyncTest(test);
+}
diff --git a/tests/compiler/dart2js_extra/variable_type_test.dart b/tests/compiler/dart2js_extra/variable_type_test.dart
index d130046..58454fc 100644
--- a/tests/compiler/dart2js_extra/variable_type_test.dart
+++ b/tests/compiler/dart2js_extra/variable_type_test.dart
@@ -4,7 +4,7 @@
 
 int foo(int i) {
   i = 'fisk';  /// 01: static type warning
-  return 'kat';  /// 02: static type warning
+  return 'kat';  /// 02: static type warning, dynamic type error
 }
 
 main() {
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 83da1cb..a7928d2 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -72,3 +72,15 @@
 # test issue 6324
 list_sort_test: Fail, OK
 sort_test: Fail, OK
+
+# test issue 6512
+big_integer_vm_test: Fail, OK
+collection_to_string_test: Fail, OK
+exception_implementation_test: Fail, OK
+futures_test: Fail, OK
+map_test: Fail, OK
+maps_test: Fail, OK
+queue_test: Fail, OK
+splay_tree_test: Fail, OK
+string_base_vm_test: Fail, OK
+stopwatch_test: Fail, OK
diff --git a/tests/html/async_window_test.dart b/tests/html/async_window_test.dart
index d3d81c6..59b3dee 100644
--- a/tests/html/async_window_test.dart
+++ b/tests/html/async_window_test.dart
@@ -1,7 +1,7 @@
-#library('AsyncWindowTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library AsyncWindowTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/audiobuffersourcenode_test.dart b/tests/html/audiobuffersourcenode_test.dart
index 360f9bc..54d0b6a 100644
--- a/tests/html/audiobuffersourcenode_test.dart
+++ b/tests/html/audiobuffersourcenode_test.dart
@@ -1,7 +1,7 @@
-#library('AudioBufferSourceNodeTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library AudioBufferSourceNodeTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/audiocontext_test.dart b/tests/html/audiocontext_test.dart
index f84ddbf..8e78436 100644
--- a/tests/html/audiocontext_test.dart
+++ b/tests/html/audiocontext_test.dart
@@ -1,7 +1,7 @@
-#library('AudioContextTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library AudioContextTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
@@ -29,7 +29,7 @@
 
   test('audioRenames', () {
     AudioContext context = new AudioContext();
-    GainNode gainNode = context.createGainNode();
+    GainNode gainNode = context.createGain();
     gainNode.connect(context.destination, 0, 0);
     expect(gainNode is GainNode, isTrue);
 
@@ -38,6 +38,6 @@
     expect(context.createChannelSplitter() is ChannelSplitterNode, isTrue);
     expect(context.createOscillator() is OscillatorNode, isTrue);
     expect(context.createPanner() is PannerNode, isTrue);
-    expect(context.createJavaScriptNode(4096) is ScriptProcessorNode, isTrue);
+    expect(context.createScriptProcessor(4096) is ScriptProcessorNode, isTrue);
   });
 }
diff --git a/tests/html/audioelement_test.dart b/tests/html/audioelement_test.dart
index 988d140..0b518e0 100644
--- a/tests/html/audioelement_test.dart
+++ b/tests/html/audioelement_test.dart
@@ -1,7 +1,7 @@
-#library('AudioElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library AudioElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/b_element_test.dart b/tests/html/b_element_test.dart
index 2a73afb..1cd71b6 100644
--- a/tests/html/b_element_test.dart
+++ b/tests/html/b_element_test.dart
@@ -1,7 +1,7 @@
-#library('BElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library BElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/blob_constructor_test.dart b/tests/html/blob_constructor_test.dart
index 71071bc..93336f7 100644
--- a/tests/html/blob_constructor_test.dart
+++ b/tests/html/blob_constructor_test.dart
@@ -2,10 +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.
 
-#library('blob_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library blob_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/cache_test.dart b/tests/html/cache_test.dart
index 5164334..d771cce 100644
--- a/tests/html/cache_test.dart
+++ b/tests/html/cache_test.dart
@@ -1,7 +1,7 @@
-#library('CacheTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CacheTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/callbacks_test.dart b/tests/html/callbacks_test.dart
index 7cb55d4..b4c55fa 100644
--- a/tests/html/callbacks_test.dart
+++ b/tests/html/callbacks_test.dart
@@ -1,7 +1,7 @@
-#library('CallbacksTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CallbacksTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/canvas_pixel_array_type_alias_test.dart b/tests/html/canvas_pixel_array_type_alias_test.dart
index 7a9ba78..9fef8ab 100644
--- a/tests/html/canvas_pixel_array_type_alias_test.dart
+++ b/tests/html/canvas_pixel_array_type_alias_test.dart
@@ -1,7 +1,7 @@
-#library('CanvasTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CanvasTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // We have aliased the legacy type CanvasPixelArray with the new type
 // Uint8ClampedArray by mapping the CanvasPixelArray type tag to
diff --git a/tests/html/canvas_test.dart b/tests/html/canvas_test.dart
index af9a823..0f9deae 100644
--- a/tests/html/canvas_test.dart
+++ b/tests/html/canvas_test.dart
@@ -1,7 +1,7 @@
-#library('CanvasTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CanvasTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   CanvasElement canvas;
diff --git a/tests/html/canvasrenderingcontext2d_test.dart b/tests/html/canvasrenderingcontext2d_test.dart
index ff6888d..4a95b05 100644
--- a/tests/html/canvasrenderingcontext2d_test.dart
+++ b/tests/html/canvasrenderingcontext2d_test.dart
@@ -2,10 +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.
 
-#library('url_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library url_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/client_rect_test.dart b/tests/html/client_rect_test.dart
index 4ad9ddf..4086a0d 100644
--- a/tests/html/client_rect_test.dart
+++ b/tests/html/client_rect_test.dart
@@ -1,7 +1,7 @@
-#library('ClientRectTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ClientRectTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/contentelement_test.dart b/tests/html/contentelement_test.dart
index 1df3b10..b7911eb 100644
--- a/tests/html/contentelement_test.dart
+++ b/tests/html/contentelement_test.dart
@@ -2,10 +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.
 
-#library('contentelement_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library contentelement_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/cross_frame_test.dart b/tests/html/cross_frame_test.dart
index aa8043e..b5d9144 100644
--- a/tests/html/cross_frame_test.dart
+++ b/tests/html/cross_frame_test.dart
@@ -1,7 +1,7 @@
-#library('CrossFrameTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CrossFrameTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/css_rule_list_test.dart b/tests/html/css_rule_list_test.dart
index 9d144b4..441397d 100644
--- a/tests/html/css_rule_list_test.dart
+++ b/tests/html/css_rule_list_test.dart
@@ -1,7 +1,7 @@
-#library('CSSRuleListTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CSSRuleListTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/css_test.dart b/tests/html/css_test.dart
index f4fa0b8..eeb52cf 100644
--- a/tests/html/css_test.dart
+++ b/tests/html/css_test.dart
@@ -1,7 +1,7 @@
-#library('CSSTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CSSTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/cssstyledeclaration_test.dart b/tests/html/cssstyledeclaration_test.dart
index 068952a7..3822e07 100644
--- a/tests/html/cssstyledeclaration_test.dart
+++ b/tests/html/cssstyledeclaration_test.dart
@@ -2,10 +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.
 
-#library('CSSStyleDeclarationTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library CSSStyleDeclarationTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
@@ -23,7 +23,7 @@
     expect(style.getPropertyPriority('color'), isEmpty);
     expect(style.item(0), isEmpty);
     expect(style, hasLength(0));
-    // These assertions throw a NotImplementedException in dartium:
+    // These assertions throw a UnimplementedError in dartium:
     // expect(style.parentRule, isNull);
     // expect(style.getPropertyCSSValue('color'), isNull);
     // expect(style.getPropertyShorthand('color'), isNull);
diff --git a/tests/html/dart_object_local_storage_test.dart b/tests/html/dart_object_local_storage_test.dart
index 3e8a36d..14fde11 100644
--- a/tests/html/dart_object_local_storage_test.dart
+++ b/tests/html/dart_object_local_storage_test.dart
@@ -1,7 +1,7 @@
-#library('DartObjectLocalStorageTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library DartObjectLocalStorageTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // TODO(vsm): Rename this to wrapper_caching_test or similar.  It's
 // basically a port of dom/dart_object_local_storage_test.dart.  For
diff --git a/tests/html/datalistelement_test.dart b/tests/html/datalistelement_test.dart
index 790f11d..e6022cb 100644
--- a/tests/html/datalistelement_test.dart
+++ b/tests/html/datalistelement_test.dart
@@ -2,10 +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.
 
-#library('datalistelement_dataview_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library datalistelement_dataview_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/document_test.dart b/tests/html/document_test.dart
index e535aba..7597f77 100644
--- a/tests/html/document_test.dart
+++ b/tests/html/document_test.dart
@@ -1,7 +1,7 @@
-#library('DocumentTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library DocumentTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/documentfragment_test.dart b/tests/html/documentfragment_test.dart
index fe6ecb6..6704bd4 100644
--- a/tests/html/documentfragment_test.dart
+++ b/tests/html/documentfragment_test.dart
@@ -2,11 +2,11 @@
 // 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('DocumentFragmentTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#source('util.dart');
+library DocumentFragmentTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+part 'util.dart';
 
 main() {
   useHtmlConfiguration();
@@ -43,7 +43,7 @@
     expect(style.getPropertyPriority('color'), equals(''));
     expect(style.item(0), equals(''));
     expect(style.length, isZero);
-    // TODO(jacobr): these checks throw NotImplementedExceptions in dartium.
+    // TODO(jacobr): these checks throw UnimplementedErrors in dartium.
     // expect(style.parentRule, isNull);
     // expect(style.getPropertyCSSValue('color'), isNull);
     // expect(style.getPropertyShorthand('color'), isNull);
diff --git a/tests/html/dom_constructors_test.dart b/tests/html/dom_constructors_test.dart
index 6354aac..c2f8ad0 100644
--- a/tests/html/dom_constructors_test.dart
+++ b/tests/html/dom_constructors_test.dart
@@ -1,7 +1,7 @@
-#library('DOMConstructorsTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library DOMConstructorsTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/dom_isolates_test.dart b/tests/html/dom_isolates_test.dart
index ab9bdcf..b630f75 100644
--- a/tests/html/dom_isolates_test.dart
+++ b/tests/html/dom_isolates_test.dart
@@ -2,11 +2,11 @@
 // 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('DOMIsolatesTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:isolate');
+library DOMIsolatesTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:isolate';
 
 isolateMain() {
   port.receive((msg, replyTo) {
diff --git a/tests/html/domparser_test.dart b/tests/html/domparser_test.dart
index 59d20fb..a40516f 100644
--- a/tests/html/domparser_test.dart
+++ b/tests/html/domparser_test.dart
@@ -1,7 +1,7 @@
-#library('DOMParserTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library DOMParserTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/element_add_test.dart b/tests/html/element_add_test.dart
index 767dbe1..4acbea3 100644
--- a/tests/html/element_add_test.dart
+++ b/tests/html/element_add_test.dart
@@ -2,11 +2,11 @@
 // 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('ElementAddTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#source('util.dart');
+library ElementAddTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+part 'util.dart';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/element_classes_test.dart b/tests/html/element_classes_test.dart
index 039e844..ab0be3b 100644
--- a/tests/html/element_classes_test.dart
+++ b/tests/html/element_classes_test.dart
@@ -2,10 +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.
 
-#library('ElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/element_constructor_1_test.dart b/tests/html/element_constructor_1_test.dart
index 57f9439..74a40fa 100644
--- a/tests/html/element_constructor_1_test.dart
+++ b/tests/html/element_constructor_1_test.dart
@@ -6,10 +6,10 @@
 // Move constructors that fail on some configuration to their own
 // element_constructor_foo_test.dart file.
 
-#library('ElementConstructorTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementConstructorTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index 66968b2..21f9be7 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -2,10 +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.
 
-#library('ElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 expectLargeRect(ClientRect rect) {
   expect(rect.top, 0);
diff --git a/tests/html/element_webkit_test.dart b/tests/html/element_webkit_test.dart
index 64f5c7e..4933d75 100644
--- a/tests/html/element_webkit_test.dart
+++ b/tests/html/element_webkit_test.dart
@@ -2,10 +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.
 
-#library('ElementWebKitTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementWebKitTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 
 // NOTE:
diff --git a/tests/html/event_customevent_test.dart b/tests/html/event_customevent_test.dart
index f7e789a..ce80b55 100644
--- a/tests/html/event_customevent_test.dart
+++ b/tests/html/event_customevent_test.dart
@@ -2,10 +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.
 
-#library('EventCustomEventTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library EventCustomEventTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // TODO(nweiz): Make this private to testEvents when Frog supports closures with
 // optional arguments.
diff --git a/tests/html/event_test.dart b/tests/html/event_test.dart
index 7484432..e676fb4 100644
--- a/tests/html/event_test.dart
+++ b/tests/html/event_test.dart
@@ -2,10 +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.
 
-#library('EventTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library EventTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // TODO(nweiz): Make this private to testEvents when Frog supports closures with
 // optional arguments.
diff --git a/tests/html/events_test.dart b/tests/html/events_test.dart
index 62fbb7e..ccd03e5 100644
--- a/tests/html/events_test.dart
+++ b/tests/html/events_test.dart
@@ -1,7 +1,7 @@
-#library('EventsTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library EventsTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/exceptions_test.dart b/tests/html/exceptions_test.dart
index 2895d02..98d7331 100644
--- a/tests/html/exceptions_test.dart
+++ b/tests/html/exceptions_test.dart
@@ -1,7 +1,7 @@
-#library('ExceptionsTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ExceptionsTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/fileapi_test.dart b/tests/html/fileapi_test.dart
index bb15d15..031f1f1 100644
--- a/tests/html/fileapi_test.dart
+++ b/tests/html/fileapi_test.dart
@@ -1,7 +1,7 @@
-#library('fileapi');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library fileapi;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 void fail(message) {
   guardAsync(() {
diff --git a/tests/html/form_data_test.dart b/tests/html/form_data_test.dart
index 808c52f..61f0147 100644
--- a/tests/html/form_data_test.dart
+++ b/tests/html/form_data_test.dart
@@ -2,11 +2,11 @@
 // 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('FormDataTest');
+library FormDataTest;
 
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 void main() {
   // TODO(efortuna): This is a bad test. Revisit when we have tests that can run
diff --git a/tests/html/form_element_test.dart b/tests/html/form_element_test.dart
index a4b81f5..9539387 100644
--- a/tests/html/form_element_test.dart
+++ b/tests/html/form_element_test.dart
@@ -2,11 +2,11 @@
 // 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('FormElementTest');
+library FormElementTest;
 
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 void main() {
   useHtmlConfiguration();
diff --git a/tests/html/hidden_dom_1_test.dart b/tests/html/hidden_dom_1_test.dart
index 7d7e05a..d3208fc 100644
--- a/tests/html/hidden_dom_1_test.dart
+++ b/tests/html/hidden_dom_1_test.dart
@@ -1,7 +1,7 @@
-#library('HiddenDom1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library HiddenDom1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that the dart:html API does not leak native jsdom methods:
 //   onfocus setter.
diff --git a/tests/html/hidden_dom_2_test.dart b/tests/html/hidden_dom_2_test.dart
index 1e73b37..a2cb124 100644
--- a/tests/html/hidden_dom_2_test.dart
+++ b/tests/html/hidden_dom_2_test.dart
@@ -1,7 +1,7 @@
-#library('HiddenDom2Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library HiddenDom2Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that the dart:html API does not leak native jsdom methods:
 //   appendChild operation.
diff --git a/tests/html/history_test.dart b/tests/html/history_test.dart
index c80cce4..62dbc9c 100644
--- a/tests/html/history_test.dart
+++ b/tests/html/history_test.dart
@@ -1,7 +1,7 @@
-#library('HistoryTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library HistoryTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/html.status b/tests/html/html.status
index b31ad44..d9cfaa7 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -53,7 +53,6 @@
 
 [ $runtime == dartium || $runtime == chrome || $runtime == ie9 || $runtime == ie10 || $runtime == safari || $runtime == ff || $runtime == opera ]
 history_test: Fail
-audiocontext_test: Fail # After WebKit roll due to renamed method?
 
 [$runtime == ie10 ]
 # TODO(efortuna, blois): Triage.
@@ -274,7 +273,6 @@
 
 [ $compiler == dart2js && $runtime == drt ]
 # Unknown error - should investigate.
-audiocontext_test: Fail
 htmloptionscollection_test: Fail # Issue 3813.
 unknownelement_test: Fail # Issue 4189
 
diff --git a/tests/html/htmlaudioelement_test.dart b/tests/html/htmlaudioelement_test.dart
index 6d1b1c9..b3bcc08 100644
--- a/tests/html/htmlaudioelement_test.dart
+++ b/tests/html/htmlaudioelement_test.dart
@@ -1,7 +1,7 @@
-#library('AudioElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library AudioElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/htmlcollection_test.dart b/tests/html/htmlcollection_test.dart
index 7f6ce9c..32a31d9 100644
--- a/tests/html/htmlcollection_test.dart
+++ b/tests/html/htmlcollection_test.dart
@@ -1,7 +1,7 @@
-#library('ElementListTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementListTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that List<Element> implements List<T>
 main() {
diff --git a/tests/html/htmlelement_test.dart b/tests/html/htmlelement_test.dart
index ea99338..b7964c2 100644
--- a/tests/html/htmlelement_test.dart
+++ b/tests/html/htmlelement_test.dart
@@ -1,7 +1,7 @@
-#library('ElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/htmloptionscollection_test.dart b/tests/html/htmloptionscollection_test.dart
index 7f0657e..ccc5da5 100644
--- a/tests/html/htmloptionscollection_test.dart
+++ b/tests/html/htmloptionscollection_test.dart
@@ -2,10 +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.
 
-#library('HTMLOptionsCollectionTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library HTMLOptionsCollectionTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/indexeddb_1_test.dart b/tests/html/indexeddb_1_test.dart
index 2f2c6c7..d55494c 100644
--- a/tests/html/indexeddb_1_test.dart
+++ b/tests/html/indexeddb_1_test.dart
@@ -1,7 +1,7 @@
-#library('IndexedDB1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library IndexedDB1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 const String DB_NAME = 'Test';
 const String STORE_NAME = 'TEST';
diff --git a/tests/html/indexeddb_2_test.dart b/tests/html/indexeddb_2_test.dart
index f37be90..d10feb2 100644
--- a/tests/html/indexeddb_2_test.dart
+++ b/tests/html/indexeddb_2_test.dart
@@ -1,9 +1,9 @@
-#library('IndexedDB1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:collection');
-#import('utils.dart');
+library IndexedDB1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:collection';
+import 'utils.dart';
 
 // Write and re-read Maps: simple Maps; Maps with DAGs; Maps with cycles.
 
diff --git a/tests/html/indexeddb_3_test.dart b/tests/html/indexeddb_3_test.dart
index 03cb79a..4c55d97 100644
--- a/tests/html/indexeddb_3_test.dart
+++ b/tests/html/indexeddb_3_test.dart
@@ -1,7 +1,7 @@
-#library('IndexedDB3Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library IndexedDB3Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Read with cursor.
 
diff --git a/tests/html/indexeddb_4_test.dart b/tests/html/indexeddb_4_test.dart
index cbe4f77..d0ac66e 100644
--- a/tests/html/indexeddb_4_test.dart
+++ b/tests/html/indexeddb_4_test.dart
@@ -1,7 +1,7 @@
-#library('IndexedDB4Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library IndexedDB4Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test for IDBKeyRange and IDBCursor.
 
diff --git a/tests/html/inner_frame_test.dart b/tests/html/inner_frame_test.dart
index 0579412..ef42a84 100644
--- a/tests/html/inner_frame_test.dart
+++ b/tests/html/inner_frame_test.dart
@@ -1,7 +1,7 @@
-#library('InnerFrameTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library InnerFrameTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   if (window != window.top) {
diff --git a/tests/html/instance_of_test.dart b/tests/html/instance_of_test.dart
index ee21a9d..0643507 100644
--- a/tests/html/instance_of_test.dart
+++ b/tests/html/instance_of_test.dart
@@ -1,7 +1,7 @@
-#library('InstanceOfTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library InstanceOfTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   CanvasElement canvas;
diff --git a/tests/html/isolates_test.dart b/tests/html/isolates_test.dart
index 8b31ca3..76e465b 100644
--- a/tests/html/isolates_test.dart
+++ b/tests/html/isolates_test.dart
@@ -1,9 +1,9 @@
-#library('IsolatesTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:json');
-#import('dart:isolate', prefix:'isolate');
+library IsolatesTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:json';
+import 'dart:isolate' as isolate;
 
 String responseFor(message) => 'response for $message';
 
diff --git a/tests/html/js_interop_1_test.dart b/tests/html/js_interop_1_test.dart
index e63322d..610d873 100644
--- a/tests/html/js_interop_1_test.dart
+++ b/tests/html/js_interop_1_test.dart
@@ -2,11 +2,11 @@
 // 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('JsInterop1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:json');
+library JsInterop1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:json';
 
 injectSource(code) {
   final script = new ScriptElement();
diff --git a/tests/html/js_interop_2_test.dart b/tests/html/js_interop_2_test.dart
index bf7cfde..0f03f54 100644
--- a/tests/html/js_interop_2_test.dart
+++ b/tests/html/js_interop_2_test.dart
@@ -2,11 +2,11 @@
 // 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('JsInterop2Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:isolate');
+library JsInterop2Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:isolate';
 
 injectSource(code) {
   final script = new ScriptElement();
diff --git a/tests/html/js_interop_3_test.dart b/tests/html/js_interop_3_test.dart
index 92f7294..844dd11 100644
--- a/tests/html/js_interop_3_test.dart
+++ b/tests/html/js_interop_3_test.dart
@@ -2,11 +2,11 @@
 // 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('JsInterop3Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:isolate');
+library JsInterop3Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:isolate';
 
 injectSource(code) {
   final script = new ScriptElement();
diff --git a/tests/html/js_interop_4_test.dart b/tests/html/js_interop_4_test.dart
index 3e0fe4e..935c790 100644
--- a/tests/html/js_interop_4_test.dart
+++ b/tests/html/js_interop_4_test.dart
@@ -2,11 +2,11 @@
 // 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('JsInterop4Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:isolate');
+library JsInterop4Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:isolate';
 
 const testData = const [1, '2', 'true'];
 
diff --git a/tests/html/key_name_location_test.dart b/tests/html/key_name_location_test.dart
index 856b615..e276de1 100644
--- a/tests/html/key_name_location_test.dart
+++ b/tests/html/key_name_location_test.dart
@@ -1,7 +1,7 @@
-#library('KeyNameLocationTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library KeyNameLocationTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test for existence of some KeyName and KeyLocation constants.
 
diff --git a/tests/html/localstorage_test.dart b/tests/html/localstorage_test.dart
index 3e4aeda..ff9a7a3 100644
--- a/tests/html/localstorage_test.dart
+++ b/tests/html/localstorage_test.dart
@@ -2,10 +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.
 
-#library('LocalStorageTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library LocalStorageTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/location_test.dart b/tests/html/location_test.dart
index a46f528..e1f0fb8 100644
--- a/tests/html/location_test.dart
+++ b/tests/html/location_test.dart
@@ -1,7 +1,7 @@
-#library('LocationTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library LocationTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/measurement_test.dart b/tests/html/measurement_test.dart
index 74c4182..3b83d7d 100644
--- a/tests/html/measurement_test.dart
+++ b/tests/html/measurement_test.dart
@@ -2,10 +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.
 
-#library('MeasurementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library MeasurementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/messageevent_test.dart b/tests/html/messageevent_test.dart
index ff0a6a1..102f324 100644
--- a/tests/html/messageevent_test.dart
+++ b/tests/html/messageevent_test.dart
@@ -1,7 +1,7 @@
-#library('SerializedScriptValueTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library SerializedScriptValueTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/mutationobserver_test.dart b/tests/html/mutationobserver_test.dart
index 07bf311..6f93d84 100644
--- a/tests/html/mutationobserver_test.dart
+++ b/tests/html/mutationobserver_test.dart
@@ -2,10 +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.
 
-#library('mutationobserver_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library mutationobserver_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 /**
  * Test suite for Mutation Observers. This is just a small set of sanity
diff --git a/tests/html/native_gc_test.dart b/tests/html/native_gc_test.dart
index 0044ac4..fe27e0b 100644
--- a/tests/html/native_gc_test.dart
+++ b/tests/html/native_gc_test.dart
@@ -1,7 +1,7 @@
-#library('NativeGCTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library NativeGCTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/node_test.dart b/tests/html/node_test.dart
index df490ab..75237225 100644
--- a/tests/html/node_test.dart
+++ b/tests/html/node_test.dart
@@ -2,10 +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.
 
-#library('NodeTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library NodeTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 Node makeNode() => new Element.tag('div');
 Node makeNodeWithChildren() =>
diff --git a/tests/html/performance_api_test.dart b/tests/html/performance_api_test.dart
index 74db2dd..a6d885c 100644
--- a/tests/html/performance_api_test.dart
+++ b/tests/html/performance_api_test.dart
@@ -1,7 +1,7 @@
-#library('PerformanceApiTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library PerformanceApiTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/postmessage_structured_test.dart b/tests/html/postmessage_structured_test.dart
index a37280f..31f2a33 100644
--- a/tests/html/postmessage_structured_test.dart
+++ b/tests/html/postmessage_structured_test.dart
@@ -2,12 +2,12 @@
 // 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('postmessage_js_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:collection');  // SplayTreeMap
-#import('utils.dart');
+library postmessage_js_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:collection';  // SplayTreeMap
+import 'utils.dart';
 
 injectSource(code) {
   final script = new ScriptElement();
diff --git a/tests/html/query_test.dart b/tests/html/query_test.dart
index 5713652..33fabc5 100644
--- a/tests/html/query_test.dart
+++ b/tests/html/query_test.dart
@@ -2,10 +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.
 
-#library('QueryTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library QueryTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/queryall_test.dart b/tests/html/queryall_test.dart
index ce580e1..2d3fe95 100644
--- a/tests/html/queryall_test.dart
+++ b/tests/html/queryall_test.dart
@@ -2,10 +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
 
-#library('NodeListTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library NodeListTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/request_animation_frame_test.dart b/tests/html/request_animation_frame_test.dart
index c61c9ce..2bf8a0c 100644
--- a/tests/html/request_animation_frame_test.dart
+++ b/tests/html/request_animation_frame_test.dart
@@ -2,10 +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.
 
-#library('RequestAnimationFrameTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library RequestAnimationFrameTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/selectelement_test.dart b/tests/html/selectelement_test.dart
index 0d354df..9de1d68 100644
--- a/tests/html/selectelement_test.dart
+++ b/tests/html/selectelement_test.dart
@@ -2,10 +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.
 
-#library('selectelement_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library selectelement_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/serialized_script_value_test.dart b/tests/html/serialized_script_value_test.dart
index 5eb1e4034..efb20d0 100644
--- a/tests/html/serialized_script_value_test.dart
+++ b/tests/html/serialized_script_value_test.dart
@@ -1,8 +1,8 @@
-#library('SerializedScriptValueTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('utils.dart');
+library SerializedScriptValueTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'utils.dart';
 
 serializationTest(name, value) => test(name, () {
       // To check how value is serialized and deserialized, we create a MessageEvent.
diff --git a/tests/html/shadow_dom_test.dart b/tests/html/shadow_dom_test.dart
index 4f058eb..8e9a932 100644
--- a/tests/html/shadow_dom_test.dart
+++ b/tests/html/shadow_dom_test.dart
@@ -2,10 +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.
 
-#library('ShadowDOMTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ShadowDOMTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/shadowroot_test.dart b/tests/html/shadowroot_test.dart
index 4a55b27..4fb6fa0 100644
--- a/tests/html/shadowroot_test.dart
+++ b/tests/html/shadowroot_test.dart
@@ -2,10 +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.
 
-#library('ShadowRootTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library ShadowRootTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/storage_test.dart b/tests/html/storage_test.dart
index 25f127e..cb00f86 100644
--- a/tests/html/storage_test.dart
+++ b/tests/html/storage_test.dart
@@ -1,7 +1,7 @@
-#library('StorageTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library StorageTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/svg_1_test.dart b/tests/html/svg_1_test.dart
index f536f2c..97c9ac6 100644
--- a/tests/html/svg_1_test.dart
+++ b/tests/html/svg_1_test.dart
@@ -1,7 +1,7 @@
-#library('SVG1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library SVG1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that SVG is present in dart:html API
 
diff --git a/tests/html/svg_2_test.dart b/tests/html/svg_2_test.dart
index 1c355c0..b893a3c 100644
--- a/tests/html/svg_2_test.dart
+++ b/tests/html/svg_2_test.dart
@@ -1,7 +1,7 @@
-#library('SVG2Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library SVG2Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that SVG elements explicitly implement the IDL interfaces (is-checks
 // only, see SVGTest3 for behavioural tests).
diff --git a/tests/html/svg_3_test.dart b/tests/html/svg_3_test.dart
index 573c198..520b138 100644
--- a/tests/html/svg_3_test.dart
+++ b/tests/html/svg_3_test.dart
@@ -1,7 +1,7 @@
-#library('SVG3Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library SVG3Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that SVG elements have the operations advertised through all the IDL
 // interfaces.  This is a 'duck typing' test, and does not explicitly use 'is'
diff --git a/tests/html/svgelement2_test.dart b/tests/html/svgelement2_test.dart
index 024cf6b..caa85cb 100644
--- a/tests/html/svgelement2_test.dart
+++ b/tests/html/svgelement2_test.dart
@@ -2,11 +2,11 @@
 // 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('SVGElement2Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('svgelement_test.dart', prefix: 'originalTest');
+library SVGElement2Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'svgelement_test.dart' as originalTest;
 
 class A {
   var _this;
diff --git a/tests/html/svgelement_test.dart b/tests/html/svgelement_test.dart
index 69ab4fe..49bfef6 100644
--- a/tests/html/svgelement_test.dart
+++ b/tests/html/svgelement_test.dart
@@ -2,10 +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.
 
-#library('SVGElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library SVGElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/table_test.dart b/tests/html/table_test.dart
index 3441dcb..fda9fcc 100644
--- a/tests/html/table_test.dart
+++ b/tests/html/table_test.dart
@@ -2,10 +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.
 
-#library('TableTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TableTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/transferables_test.dart b/tests/html/transferables_test.dart
index 8779362..0a709a5 100644
--- a/tests/html/transferables_test.dart
+++ b/tests/html/transferables_test.dart
@@ -2,10 +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.
 
-#library('TransferableTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TransferableTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_1_test.dart b/tests/html/typed_arrays_1_test.dart
index 860ed71..ccd13d0 100644
--- a/tests/html/typed_arrays_1_test.dart
+++ b/tests/html/typed_arrays_1_test.dart
@@ -2,10 +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.
 
-#library('TypedArrays1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypedArrays1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_2_test.dart b/tests/html/typed_arrays_2_test.dart
index a2e747e..d109ddc 100644
--- a/tests/html/typed_arrays_2_test.dart
+++ b/tests/html/typed_arrays_2_test.dart
@@ -2,10 +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.
 
-#library('TypedArrays2Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypedArrays2Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_3_test.dart b/tests/html/typed_arrays_3_test.dart
index a1f9416..6dcd67b 100644
--- a/tests/html/typed_arrays_3_test.dart
+++ b/tests/html/typed_arrays_3_test.dart
@@ -2,10 +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.
 
-#library('TypedArrays3Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypedArrays3Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_4_test.dart b/tests/html/typed_arrays_4_test.dart
index 59e532c..112e382 100644
--- a/tests/html/typed_arrays_4_test.dart
+++ b/tests/html/typed_arrays_4_test.dart
@@ -2,10 +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.
 
-#library('TypedArrays4Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypedArrays4Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_5_test.dart b/tests/html/typed_arrays_5_test.dart
index a0792aa..b1930fe 100644
--- a/tests/html/typed_arrays_5_test.dart
+++ b/tests/html/typed_arrays_5_test.dart
@@ -2,10 +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.
 
-#library('typed_arrays_5_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library typed_arrays_5_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_arraybuffer_test.dart b/tests/html/typed_arrays_arraybuffer_test.dart
index afc4770..69d8d28 100644
--- a/tests/html/typed_arrays_arraybuffer_test.dart
+++ b/tests/html/typed_arrays_arraybuffer_test.dart
@@ -2,10 +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.
 
-#library('typed_arrays_arraybuffer_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library typed_arrays_arraybuffer_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_dataview_test.dart b/tests/html/typed_arrays_dataview_test.dart
index 2a486f0..d73f312 100644
--- a/tests/html/typed_arrays_dataview_test.dart
+++ b/tests/html/typed_arrays_dataview_test.dart
@@ -2,10 +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.
 
-#library('typed_arrays_dataview_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library typed_arrays_dataview_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typed_arrays_range_checks_test.dart b/tests/html/typed_arrays_range_checks_test.dart
index 7e7f953..bb8ee10 100644
--- a/tests/html/typed_arrays_range_checks_test.dart
+++ b/tests/html/typed_arrays_range_checks_test.dart
@@ -2,10 +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.
 
-#library('TypedArraysRangeCheckTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypedArraysRangeCheckTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/typing_test.dart b/tests/html/typing_test.dart
index ec544d8..c0a8389 100644
--- a/tests/html/typing_test.dart
+++ b/tests/html/typing_test.dart
@@ -1,7 +1,7 @@
-#library('TypingTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library TypingTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/unknownelement_test.dart b/tests/html/unknownelement_test.dart
index 00d7ca6..fda531e 100644
--- a/tests/html/unknownelement_test.dart
+++ b/tests/html/unknownelement_test.dart
@@ -2,10 +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
 
-#library('UnknownElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library UnknownElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/url_test.dart b/tests/html/url_test.dart
index 8fec60a..4b784ca 100644
--- a/tests/html/url_test.dart
+++ b/tests/html/url_test.dart
@@ -2,10 +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.
 
-#library('url_test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library url_test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
@@ -36,7 +36,7 @@
   group('blob', () {
     test('createObjectUrl', () {
       var blob = createImageBlob();
-      var url = window.createObjectUrl(blob);
+      var url = Url.createObjectUrl(blob);
       expect(url.length, greaterThan(0));
       expect(url, startsWith('blob:'));
 
@@ -54,9 +54,9 @@
 
     test('revokeObjectUrl', () {
       var blob = createImageBlob();
-      var url = window.createObjectUrl(blob);
+      var url = Url.createObjectUrl(blob);
       expect(url, startsWith('blob:'));
-      window.revokeObjectUrl(url);
+      Url.revokeObjectUrl(url);
 
       var img = new ImageElement();
       // Image should fail to load since the URL was revoked.
diff --git a/tests/html/utils.dart b/tests/html/utils.dart
index 9752239..09eeaaa 100644
--- a/tests/html/utils.dart
+++ b/tests/html/utils.dart
@@ -1,5 +1,5 @@
-#library('TestUtils');
-#import('../../pkg/unittest/unittest.dart');
+library TestUtils;
+import '../../pkg/unittest/lib/unittest.dart';
 
 /**
  * Verifies that [actual] has the same graph structure as [expected].
diff --git a/tests/html/webgl_1_test.dart b/tests/html/webgl_1_test.dart
index 8ad757c..87073d3 100644
--- a/tests/html/webgl_1_test.dart
+++ b/tests/html/webgl_1_test.dart
@@ -1,7 +1,7 @@
-#library('WebGL1Test');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library WebGL1Test;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 // Test that WebGL is present in dart:html API
 
diff --git a/tests/html/websocket_test.dart b/tests/html/websocket_test.dart
index d14765f..982afa4 100644
--- a/tests/html/websocket_test.dart
+++ b/tests/html/websocket_test.dart
@@ -1,7 +1,7 @@
-#library('WebSocketTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library WebSocketTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/html/websql_test.dart b/tests/html/websql_test.dart
index 047e9b3..ea64f50 100644
--- a/tests/html/websql_test.dart
+++ b/tests/html/websql_test.dart
@@ -1,7 +1,7 @@
-#library('WebDBTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library WebDBTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 void fail(message) {
   guardAsync(() {
diff --git a/tests/html/window_eq_test.dart b/tests/html/window_eq_test.dart
index 015c985..718011c 100644
--- a/tests/html/window_eq_test.dart
+++ b/tests/html/window_eq_test.dart
@@ -1,7 +1,7 @@
-#library('WindowEqualityTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library WindowEqualityTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/window_mangling_test.dart b/tests/html/window_mangling_test.dart
index 83d5481..33704b3 100644
--- a/tests/html/window_mangling_test.dart
+++ b/tests/html/window_mangling_test.dart
@@ -2,10 +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.
 
-#library('WindowManglingTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html', prefix: 'dom');
+library WindowManglingTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html' as dom;
 
 // Defined in dom.Window.
 get navigator => "Dummy";
diff --git a/tests/html/window_nosuchmethod_test.dart b/tests/html/window_nosuchmethod_test.dart
index cad0678..7b8c0ef 100644
--- a/tests/html/window_nosuchmethod_test.dart
+++ b/tests/html/window_nosuchmethod_test.dart
@@ -2,10 +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.
 
-#library('WindowNSMETest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html', prefix: 'dom');
+library WindowNSMETest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html' as dom;
 
 // Not defined in dom.Window.
 foo(x) => x;
diff --git a/tests/html/window_open_test.dart b/tests/html/window_open_test.dart
index 76ae473..664953f 100644
--- a/tests/html/window_open_test.dart
+++ b/tests/html/window_open_test.dart
@@ -1,7 +1,7 @@
-#library('WindowOpenTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library WindowOpenTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/xhr_cross_origin_test.dart b/tests/html/xhr_cross_origin_test.dart
index a210f66..d39af2c 100644
--- a/tests/html/xhr_cross_origin_test.dart
+++ b/tests/html/xhr_cross_origin_test.dart
@@ -2,11 +2,11 @@
 // 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('XHRCrossOriginTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:json');
+library XHRCrossOriginTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:json';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/xhr_test.dart b/tests/html/xhr_test.dart
index a17389c..b5ea6c1 100644
--- a/tests/html/xhr_test.dart
+++ b/tests/html/xhr_test.dart
@@ -2,11 +2,11 @@
 // 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('XHRTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
-#import('dart:json');
+library XHRTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
+import 'dart:json';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/xmldocument_test.dart b/tests/html/xmldocument_test.dart
index 980801d..5667812 100644
--- a/tests/html/xmldocument_test.dart
+++ b/tests/html/xmldocument_test.dart
@@ -2,10 +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.
 
-#library('XMLDocumentTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library XMLDocumentTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/xmlelement_test.dart b/tests/html/xmlelement_test.dart
index b134a69..0831518 100644
--- a/tests/html/xmlelement_test.dart
+++ b/tests/html/xmlelement_test.dart
@@ -2,10 +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.
 
-#library('XMLElementTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library XMLElementTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/html/xsltprocessor_test.dart b/tests/html/xsltprocessor_test.dart
index 5216726..c56f8c6 100644
--- a/tests/html/xsltprocessor_test.dart
+++ b/tests/html/xsltprocessor_test.dart
@@ -1,7 +1,7 @@
-#library('XSLTProcessorTest');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
-#import('dart:html');
+library XSLTProcessorTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
+import 'dart:html';
 
 main() {
 
diff --git a/tests/isolate/compute_this_script_browser_test.dart b/tests/isolate/compute_this_script_browser_test.dart
index 1064eef..49fbf2d 100644
--- a/tests/isolate/compute_this_script_browser_test.dart
+++ b/tests/isolate/compute_this_script_browser_test.dart
@@ -5,13 +5,12 @@
 // Test that spawn works even when there are many script files in the page.
 // This requires computing correctly the URL to the orignal script, so we can
 // pass it to the web worker APIs.
-#library('compute_this_script');
+library compute_this_script;
 
-#import('dart:html');
-#import('dart:isolate');
-
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
+import 'dart:html';
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
 
 child() {
   port.receive((msg, reply) {
diff --git a/tests/isolate/count_test.dart b/tests/isolate/count_test.dart
index 2bee065..be1d65a 100644
--- a/tests/isolate/count_test.dart
+++ b/tests/isolate/count_test.dart
@@ -2,20 +2,20 @@
 // 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("CountTest");
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library CountTest;
+import '../../pkg/unittest/lib/unittest.dart';
+import 'dart:isolate';
 
 void countMessages() {
   int count = 0;
   port.receive((int message, SendPort replyTo) {
     if (message == -1) {
-      Expect.equals(10, count);
+      expect(count, 10);
       replyTo.send(-1, null);
       port.close();
       return;
     }
-    Expect.equals(count, message);
+    expect(message, count);
     count++;
     replyTo.send(message * 2, null);
   });
@@ -30,12 +30,12 @@
 
     local.receive(expectAsync2((int message, SendPort replyTo) {
       if (message == -1) {
-        Expect.equals(11, count);
+        expect(count, 11);
         local.close();
         return;
       }
 
-      Expect.equals((count - 1) * 2, message);
+      expect(message, (count - 1) * 2);
       remote.send(count++, reply);
       if (count == 10) {
         remote.send(-1, reply);
diff --git a/tests/isolate/cross_isolate_message_test.dart b/tests/isolate/cross_isolate_message_test.dart
index 9676c34..41b2c7a 100644
--- a/tests/isolate/cross_isolate_message_test.dart
+++ b/tests/isolate/cross_isolate_message_test.dart
@@ -5,9 +5,9 @@
 // Dart test program for testing that isolates can communicate to isolates
 // other than the main isolate.
 
-#library('CrossIsolateMessageTest');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library CrossIsolateMessageTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 void crossIsolate1() {
   port.receive((msg, replyTo) {
@@ -44,12 +44,12 @@
     // Create a new receive port and send it to isolate2.
     ReceivePort myPort = new ReceivePort();
     port2.call(myPort.toSendPort()).then(expectAsync1((msg) {
-      Expect.equals("ready", msg[0]);
+      expect(msg[0], "ready");
       // Send port of isolate2 to isolate1.
       port1.call(msg[1]).then(expectAsync1((msg) {
-        Expect.equals("ready", msg[0]);
+        expect(msg[0], "ready");
         myPort.receive(expectAsync2((msg, replyTo) {
-          Expect.equals(499, msg);
+          expect(msg, 499);
           myPort.close();
         }));
         msg[1].send(42, null);
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 6e106f5..f3a482b 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -30,8 +30,9 @@
 spawn_uri_vm_negative_test: Fail, OK # Fails at runtime.
 unresolved_ports_negative_test: Fail, OK # Fails at runtime.
 
-# packages issue 6340
-compute_this_script_browser_test: Fail, OK
+# test issue 6512
+isolate2_negative_test: Pass
+compute_this_script_browser_test: Pass
 
 
 [ $compiler == dart2js ]
diff --git a/tests/isolate/isolate3_negative_test.dart b/tests/isolate/isolate3_negative_test.dart
index 5a275800..59510eb 100644
--- a/tests/isolate/isolate3_negative_test.dart
+++ b/tests/isolate/isolate3_negative_test.dart
@@ -5,9 +5,9 @@
 // Dart test program for testing that errors thrown from isolates are
 // processed correctly and don't result in crashes.
 
-#library('Isolate3NegativeTest');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library Isolate3NegativeTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 class TestClass {
   TestClass.named(num this.fld1) : fld2=fld1 {
diff --git a/tests/isolate/isolate_complex_messages_test.dart b/tests/isolate/isolate_complex_messages_test.dart
index 3d0e6a4..e4fae99 100644
--- a/tests/isolate/isolate_complex_messages_test.dart
+++ b/tests/isolate/isolate_complex_messages_test.dart
@@ -5,9 +5,9 @@
 // Dart test program for testing isolate communication with
 // complex messages.
 
-#library('IsolateComplexMessagesTest');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library IsolateComplexMessagesTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("complex messages are serialized correctly", () {
@@ -20,7 +20,7 @@
     remote.send(const ["Hello", "World", 0xffffffffff], null);
     // Shutdown the LogRunner.
     remote.call(-1).then(expectAsync1((int message) {
-      Expect.equals(6, message);
+      expect(message, 6);
     }));
   });
 }
@@ -36,35 +36,35 @@
     } else {
       switch (count) {
         case 0:
-          Expect.equals(1, message);
+          expect(message, 1);
           break;
         case 1:
-          Expect.equals("Hello", message);
+          expect(message, "Hello");
           break;
         case 2:
-          Expect.equals("World", message);
+          expect(message, "World");
           break;
         case 3:
-          Expect.equals(5, message.length);
-          Expect.equals(null, message[0]);
-          Expect.equals(1, message[1]);
-          Expect.equals(2, message[2]);
-          Expect.equals(3, message[3]);
-          Expect.equals(4, message[4]);
+          expect(message.length, 5);
+          expect(message[0], null);
+          expect(message[1], 1);
+          expect(message[2], 2);
+          expect(message[3], 3);
+          expect(message[4], 4);
           break;
         case 4:
-          Expect.equals(5, message.length);
-          Expect.equals(1, message[0]);
-          Expect.equals(2.0, message[1]);
-          Expect.equals(true, message[2]);
-          Expect.equals(false, message[3]);
-          Expect.equals(0xffffffffff, message[4]);
+          expect(message.length, 5);
+          expect(message[0], 1);
+          expect(message[1], 2.0);
+          expect(message[2], true);
+          expect(message[3], false);
+          expect(message[4], 0xffffffffff);
           break;
         case 5:
-          Expect.equals(3, message.length);
-          Expect.equals("Hello", message[0]);
-          Expect.equals("World", message[1]);
-          Expect.equals(0xffffffffff, message[2]);
+          expect(message.length, 3);
+          expect(message[0], "Hello");
+          expect(message[1], "World");
+          expect(message[2], 0xffffffffff);
           break;
       }
       count++;
diff --git a/tests/isolate/isolate_negative_test.dart b/tests/isolate/isolate_negative_test.dart
index 90a2c93..5fe9e30 100644
--- a/tests/isolate/isolate_negative_test.dart
+++ b/tests/isolate/isolate_negative_test.dart
@@ -4,9 +4,9 @@
 
 // Dart test program for testing that isolates are spawned.
 
-#library('IsolateNegativeTest');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library IsolateNegativeTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 void entry() {
   port.receive((ignored, replyTo) {
@@ -18,7 +18,7 @@
   test("ensure isolate code is executed", () {
     SendPort port = spawnFunction(entry);
     port.call("foo").then(expectAsync1((message) {
-      Expect.equals(true, "Expected fail");   // <=-------- Should fail here.
+      expect("Expected fail", isTrue);   // <=-------- Should fail here.
     }));
   });
 }
diff --git a/tests/isolate/mandel_isolate_test.dart b/tests/isolate/mandel_isolate_test.dart
index d74b05b..d849e919 100644
--- a/tests/isolate/mandel_isolate_test.dart
+++ b/tests/isolate/mandel_isolate_test.dart
@@ -2,10 +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.
 
-#library('MandelIsolateTest');
-#import('dart:isolate');
-#import('dart:math');
-#import('../../pkg/unittest/unittest.dart');
+library MandelIsolateTest;
+import 'dart:isolate';
+import 'dart:math';
+import '../../pkg/unittest/lib/unittest.dart';
 
 const TERMINATION_MESSAGE = -1;
 const N = 100;
diff --git a/tests/isolate/message2_test.dart b/tests/isolate/message2_test.dart
index e3eb23b..07b34e6 100644
--- a/tests/isolate/message2_test.dart
+++ b/tests/isolate/message2_test.dart
@@ -5,10 +5,9 @@
 // Dart test program for testing serialization of messages.
 // VMOptions=--enable_type_checks --enable_asserts
 
-#library('Message2Test');
-#import("dart:isolate");
-
-#import('../../pkg/unittest/unittest.dart');
+library Message2Test;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 // ---------------------------------------------------------------------------
 // Message passing test 2.
@@ -16,14 +15,14 @@
 
 class MessageTest {
   static void mapEqualsDeep(Map expected, Map actual) {
-    Expect.equals(true, expected is Map);
-    Expect.equals(true, actual is Map);
-    Expect.equals(expected.length, actual.length);
+    expect(expected, isMap);
+    expect(actual, isMap);
+    expect(actual.length, expected.length);
     testForEachMap(key, value) {
       if (value is List) {
         listEqualsDeep(value, actual[key]);
       } else {
-        Expect.equals(value, actual[key]);
+        expect(actual[key], value);
       }
     }
     expected.forEach(testForEachMap);
@@ -36,7 +35,7 @@
       } else if (expected[i] is Map) {
         mapEqualsDeep(expected[i], actual[i]);
       } else {
-        Expect.equals(expected[i], actual[i]);
+        expect(actual[i], expected[i]);
       }
     }
   }
diff --git a/tests/isolate/message_test.dart b/tests/isolate/message_test.dart
index 06f2d19..ee00de5 100644
--- a/tests/isolate/message_test.dart
+++ b/tests/isolate/message_test.dart
@@ -5,9 +5,9 @@
 // Dart test program for testing serialization of messages.
 // VMOptions=--enable_type_checks --enable_asserts
 
-#library('MessageTest');
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+library MessageTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 // ---------------------------------------------------------------------------
 // Message passing test.
@@ -29,14 +29,14 @@
   ];
 
   static void VerifyMap(Map expected, Map actual) {
-    Expect.equals(true, expected is Map);
-    Expect.equals(true, actual is Map);
-    Expect.equals(expected.length, actual.length);
+    expect(expected, isMap);
+    expect(actual,  isMap);
+    expect(actual.length, expected.length);
     testForEachMap(key, value) {
       if (value is List) {
         VerifyList(value, actual[key]);
       } else {
-        Expect.equals(value, actual[key]);
+        expect(actual[key], value);
       }
     }
     expected.forEach(testForEachMap);
@@ -49,16 +49,16 @@
       } else if (expected[i] is Map) {
         VerifyMap(expected[i], actual[i]);
       } else {
-        Expect.equals(expected[i], actual[i]);
+        expect(actual[i], expected[i]);
       }
     }
   }
 
   static void VerifyObject(int index, var actual) {
     var expected = elms[index];
-    Expect.equals(true, expected is List);
-    Expect.equals(true, actual is List);
-    Expect.equals(expected.length, actual.length);
+    expect(expected, isList);
+    expect(actual, isList);
+    expect(actual.length, expected.length);
     VerifyList(expected, actual);
   }
 }
@@ -107,22 +107,22 @@
     sendObject[3] = sendObject;
     sendObject[4] = local_list3;
     remote.call(sendObject).then((var replyObject) {
-      Expect.equals(true, sendObject is List);
-      Expect.equals(true, replyObject is List);
-      Expect.equals(sendObject.length, replyObject.length);
-      Expect.equals(true, replyObject[1] === replyObject);
-      Expect.equals(true, replyObject[3] === replyObject);
-      Expect.equals(true, replyObject[0] === replyObject[2][1]);
-      Expect.equals(true, replyObject[0] === replyObject[2][2]);
-      Expect.equals(true, replyObject[2] === replyObject[4][0]);
-      Expect.equals(true, replyObject[0][0] === replyObject[0][2]);
+      expect(sendObject, isList);
+      expect(replyObject, isList);
+      expect(sendObject.length, equals(replyObject.length));
+      expect(replyObject[1], same(replyObject));
+      expect(replyObject[3], same(replyObject));
+      expect(replyObject[0], same(replyObject[2][1]));
+      expect(replyObject[0], same(replyObject[2][2]));
+      expect(replyObject[2], same(replyObject[4][0]));
+      expect(replyObject[0][0], same(replyObject[0][2]));
       // Bigint literals are not canonicalized so do a == check.
-      Expect.equals(true, replyObject[0][3] == replyObject[4][4]);
+      expect(replyObject[0][3], equals(replyObject[4][4]));
     });
 
     // Shutdown the MessageServer.
     remote.call(-1).then(expectAsync1((int message) {
-        Expect.equals(MessageTest.elms.length + 1, message);
+        expect(message, MessageTest.elms.length + 1);
       }));
   });
 }
diff --git a/tests/isolate/mint_maker_test.dart b/tests/isolate/mint_maker_test.dart
index 2c32a08..90ad058 100644
--- a/tests/isolate/mint_maker_test.dart
+++ b/tests/isolate/mint_maker_test.dart
@@ -5,9 +5,9 @@
 // Things that should be "auto-generated" are between AUTO START and
 // AUTO END (or just AUTO if it's a single line).
 
-#library("MintMakerTest");
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+library MintMakerTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 class Mint {
   Mint() : registry_ = new Map<SendPort, Purse>() {
@@ -222,18 +222,18 @@
     deferred {
       MintWrapper mint = asynccall mintMaker.createMint();
       PurseWrapper purse = asynccall mint.createPurse(100);
-      Expect.equals(100, asynccall purse.queryBalance());
+      expect(asynccall purse.queryBalance(), 100);
 
       PurseWrapper sprouted = asynccall purse.sproutPurse();
-      Expect.equals(0, asynccall sprouted.queryBalance());
+      expect(asynccall sprouted.queryBalance(), 0);
 
       asynccall sprouted.deposit(purse, 5);
-      Expect.equals(0 + 5, asynccall sprouted.queryBalance());
-      Expect.equals(100 - 5, asynccall purse.queryBalance());
+      expect(asynccall sprouted.queryBalance(), 0 + 5);
+      expect(asynccall purse.queryBalance(), 100 - 5);
 
       asynccall sprouted.deposit(purse, 42);
-      Expect.equals(0 + 5 + 42, asynccall sprouted.queryBalance());
-      Expect.equals(100 - 5 - 42, asynccall purse.queryBalance());
+      expect(asynccall sprouted.queryBalance(), 0 + 5 + 42);
+      expect(asynccall purse.queryBalance(), 100 - 5 - 42);
     }
   }
   */
@@ -244,18 +244,18 @@
     Wrapper<MintMaker> mintMaker = spawnMintMaker();
     Future<Mint> mint = mintMaker...createMint();
     Future<Purse> purse = mint...createPurse(100);
-    Expect.equals(100, purse.queryBalance());
+    expect(purse.queryBalance(), 100);
 
     Future<Purse> sprouted = purse...sproutPurse();
-    Expect.equals(0, sprouted.queryBalance());
+    expect(0, sprouted.queryBalance());
 
     sprouted...deposit(purse, 5);
-    Expect.equals(0 + 5, sprouted.queryBalance());
-    Expect.equals(100 - 5, purse.queryBalance());
+    expect(sprouted.queryBalance(), 0 + 5);
+    expect(purse.queryBalance(), 100 - 5);
 
     sprouted...deposit(purse, 42);
-    Expect.equals(0 + 5 + 42, sprouted.queryBalance());
-    Expect.equals(100 - 5 - 42, purse.queryBalance());
+    expect(sprouted.queryBalance(), 0 + 5 + 42);
+    expect(purse.queryBalance(), 100 - 5 - 42);
   }
   */
 }
diff --git a/tests/isolate/multiple_timer_test.dart b/tests/isolate/multiple_timer_test.dart
index 9071e88..d1da947 100644
--- a/tests/isolate/multiple_timer_test.dart
+++ b/tests/isolate/multiple_timer_test.dart
@@ -2,10 +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.
 
-#library('multiple_timer_test');
+library multiple_timer_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 const int TIMEOUT1 = 1000;
 const int TIMEOUT2 = 2000;
diff --git a/tests/isolate/nested_spawn2_test.dart b/tests/isolate/nested_spawn2_test.dart
index 74175e3..a868084 100644
--- a/tests/isolate/nested_spawn2_test.dart
+++ b/tests/isolate/nested_spawn2_test.dart
@@ -6,13 +6,13 @@
 // that the nested isolates can communicate with the main once the spawner has
 // disappeared.
 
-#library('NestedSpawn2Test');
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+library NestedSpawn2Test;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 void isolateA() {
   port.receive((msg, replyTo) {
-    Expect.equals("launch nested!", msg);
+    expect(msg, "launch nested!");
     SendPort p = spawnFunction(isolateB);
     p.send(replyTo, null);
     port.close();
@@ -42,11 +42,11 @@
     // Do a little ping-pong dance to give the intermediate isolate
     // time to die.
     _call(mainPort, msg0, ((msg, replyTo) {
-      Expect.equals("1", msg[0]);
+      expect(msg[0], "1");
       _call(replyTo, msg2, ((msg, replyTo) {
-        Expect.equals("3", msg[0]);
+        expect(msg[0], "3");
         _call(replyTo, msg4, ((msg, replyTo) {
-          Expect.equals("5", msg[0]);
+          expect(msg[0], "5");
           replyTo.send(msg6, null);
         }));
       }));
@@ -58,13 +58,13 @@
   test("spawned isolate can spawn other isolates", () {
     SendPort port = spawnFunction(isolateA);
     _call(port, "launch nested!", expectAsync2((msg, replyTo) {
-      Expect.equals("0", msg[0]);
+      expect(msg[0], "0");
       _call(replyTo, msg1, expectAsync2((msg, replyTo) {
-        Expect.equals("2", msg[0]);
+        expect(msg[0], "2");
         _call(replyTo, msg3, expectAsync2((msg, replyTo) {
-          Expect.equals("4", msg[0]);
+          expect(msg[0], "4");
           _call(replyTo, msg5, expectAsync2((msg, replyTo) {
-            Expect.equals("6", msg[0]);
+            expect(msg[0], "6");
           }));
         }));
       }));
diff --git a/tests/isolate/nested_spawn_test.dart b/tests/isolate/nested_spawn_test.dart
index b40c89d..795ad99 100644
--- a/tests/isolate/nested_spawn_test.dart
+++ b/tests/isolate/nested_spawn_test.dart
@@ -4,16 +4,16 @@
 
 // Dart test program for testing that isolates can spawn other isolates.
 
-#library('NestedSpawnTest');
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+library NestedSpawnTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 void isolateA() {
   port.receive((msg, replyTo) {
-    Expect.equals("launch nested!", msg);
+    expect(msg, "launch nested!");
     SendPort p = spawnFunction(isolateB);
     p.call("alive?").then((msg) {
-      Expect.equals("and kicking", msg);
+      expect(msg, "and kicking");
       replyTo.send(499, null);
       port.close();
     });
@@ -22,7 +22,7 @@
 
 void isolateB() {
   port.receive((msg, replyTo) {
-    Expect.equals("alive?", msg);
+    expect(msg, "alive?");
     replyTo.send("and kicking", null);
     port.close();
   });
@@ -33,7 +33,7 @@
   test("spawned isolates can spawn nested isolates", () {
     SendPort port = spawnFunction(isolateA);
     port.call("launch nested!").then(expectAsync1((msg) {
-      Expect.equals(499, msg);
+      expect(msg, 499);
     }));
   });
 }
diff --git a/tests/isolate/port_test.dart b/tests/isolate/port_test.dart
index 02ea365..d3adfdd 100644
--- a/tests/isolate/port_test.dart
+++ b/tests/isolate/port_test.dart
@@ -6,9 +6,9 @@
 // Note: unittest.dart depends on ports, in particular on the behaviour tested
 // here. To keep things simple, we don't use the unittest library here.
 
-#library("PortTest");
-#import("dart:isolate");
-
+library PortTest;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/matcher.dart';
 
 main() {
   testHashCode();
@@ -19,8 +19,8 @@
 void testHashCode() {
   ReceivePort rp0 = new ReceivePort();
   ReceivePort rp1 = new ReceivePort();
-  Expect.equals(rp0.toSendPort().hashCode, rp0.toSendPort().hashCode);
-  Expect.equals(rp1.toSendPort().hashCode, rp1.toSendPort().hashCode);
+  expect(rp0.toSendPort().hashCode, rp0.toSendPort().hashCode);
+  expect(rp1.toSendPort().hashCode, rp1.toSendPort().hashCode);
   rp0.close();
   rp1.close();
 }
@@ -28,9 +28,9 @@
 void testEquals() {
   ReceivePort rp0 = new ReceivePort();
   ReceivePort rp1 = new ReceivePort();
-  Expect.equals(rp0.toSendPort(), rp0.toSendPort());
-  Expect.equals(rp1.toSendPort(), rp1.toSendPort());
-  Expect.equals(false, (rp0.toSendPort() == rp1.toSendPort()));
+  expect(rp0.toSendPort(), rp0.toSendPort());
+  expect(rp1.toSendPort(), rp1.toSendPort());
+  expect(rp0.toSendPort() == rp1.toSendPort(), isFalse);
   rp0.close();
   rp1.close();
 }
@@ -41,20 +41,20 @@
   final map = new Map<SendPort, int>();
   map[rp0.toSendPort()] = 42;
   map[rp1.toSendPort()] = 87;
-  Expect.equals(42, map[rp0.toSendPort()]);
-  Expect.equals(87, map[rp1.toSendPort()]);
+  expect(map[rp0.toSendPort()], 42);
+  expect(map[rp1.toSendPort()], 87);
 
   map[rp0.toSendPort()] = 99;
-  Expect.equals(99, map[rp0.toSendPort()]);
-  Expect.equals(87, map[rp1.toSendPort()]);
+  expect(map[rp0.toSendPort()], 99);
+  expect(map[rp1.toSendPort()], 87);
 
   map.remove(rp0.toSendPort());
-  Expect.equals(false, map.containsKey(rp0.toSendPort()));
-  Expect.equals(87, map[rp1.toSendPort()]);
+  expect(map.containsKey(rp0.toSendPort()), isFalse);
+  expect(map[rp1.toSendPort()], 87);
 
   map.remove(rp1.toSendPort());
-  Expect.equals(false, map.containsKey(rp0.toSendPort()));
-  Expect.equals(false, map.containsKey(rp1.toSendPort()));
+  expect(map.containsKey(rp0.toSendPort()), isFalse);
+  expect(map.containsKey(rp1.toSendPort()), isFalse);
 
   rp0.close();
   rp1.close();
diff --git a/tests/isolate/request_reply_test.dart b/tests/isolate/request_reply_test.dart
index 753564e..b582569 100644
--- a/tests/isolate/request_reply_test.dart
+++ b/tests/isolate/request_reply_test.dart
@@ -2,10 +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.
 
-#library("RequestReplyTest");
+library RequestReplyTest;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 void entry() {
   port.receive((message, SendPort replyTo) {
@@ -18,7 +18,7 @@
   test("call", () {
     SendPort port = spawnFunction(entry);
     port.call(42).then(expectAsync1((message) {
-      Expect.equals(42 + 87, message);
+      expect(message, 42 + 87);
     }));
   });
 
@@ -27,7 +27,7 @@
     ReceivePort reply = new ReceivePort();
     port.send(99, reply.toSendPort());
     reply.receive(expectAsync2((message, replyTo) {
-      Expect.equals(99 + 87, message);
+      expect(message, 99 + 87);
       reply.close();
     }));
   });
diff --git a/tests/isolate/spawn_function_custom_class_test.dart b/tests/isolate/spawn_function_custom_class_test.dart
index c605fcf..73f9a1d 100644
--- a/tests/isolate/spawn_function_custom_class_test.dart
+++ b/tests/isolate/spawn_function_custom_class_test.dart
@@ -7,9 +7,9 @@
 // Regression test for vm bug 2235: We were forgetting to finalize
 // classes in new isolates started using the v2 api.
 
-#library('spawn_tests');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 class MyClass {
   var myVar = 'there';
diff --git a/tests/isolate/spawn_function_negative_test.dart b/tests/isolate/spawn_function_negative_test.dart
index 564f57e..faecde09 100644
--- a/tests/isolate/spawn_function_negative_test.dart
+++ b/tests/isolate/spawn_function_negative_test.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Negative test to make sure that we are reaching all assertions.
-#library('spawn_tests');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 child() {
   port.receive((msg, reply) => reply.send('re: $msg'));
diff --git a/tests/isolate/spawn_function_test.dart b/tests/isolate/spawn_function_test.dart
index ae47227..6829fd1 100644
--- a/tests/isolate/spawn_function_test.dart
+++ b/tests/isolate/spawn_function_test.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // Example of spawning an isolate from a function.
-#library('spawn_tests');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 child() {
   port.receive((msg, reply) => reply.send('re: $msg'));
diff --git a/tests/isolate/spawn_uri_negative_test.dart b/tests/isolate/spawn_uri_negative_test.dart
index bb87cde2..6e5be3b 100644
--- a/tests/isolate/spawn_uri_negative_test.dart
+++ b/tests/isolate/spawn_uri_negative_test.dart
@@ -6,9 +6,9 @@
 // Note: the following comment is used by test.dart to additionally compile the
 // other isolate's code.
 // OtherScripts=spawn_uri_child_isolate.dart
-#library('spawn_tests');
-#import('../../pkg/unittest/unittest.dart');
-#import('dart:isolate');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('isolate fromUri - negative test', () {
diff --git a/tests/isolate/spawn_uri_test.dart b/tests/isolate/spawn_uri_test.dart
index 89d7bb8..5a33903 100644
--- a/tests/isolate/spawn_uri_test.dart
+++ b/tests/isolate/spawn_uri_test.dart
@@ -6,9 +6,9 @@
 // Note: the following comment is used by test.dart to additionally compile the
 // other isolate's code.
 // OtherScripts=spawn_uri_child_isolate.dart
-#library('spawn_tests');
-#import('../../pkg/unittest/unittest.dart');
-#import('dart:isolate');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('isolate fromUri - send and reply', () {
diff --git a/tests/isolate/spawn_uri_vm_negative_test.dart b/tests/isolate/spawn_uri_vm_negative_test.dart
index af82ea9..a342bfe 100644
--- a/tests/isolate/spawn_uri_vm_negative_test.dart
+++ b/tests/isolate/spawn_uri_vm_negative_test.dart
@@ -6,9 +6,9 @@
 // Note: the following comment is used by test.dart to additionally compile the
 // other isolate's code.
 // OtherScripts=spawn_uri_child_isolate.dart
-#library('spawn_tests');
-#import('../../pkg/unittest/unittest.dart');
-#import('dart:isolate');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('isolate fromUri - negative test', () {
diff --git a/tests/isolate/spawn_uri_vm_test.dart b/tests/isolate/spawn_uri_vm_test.dart
index 1edb3d7..e9bb0da 100644
--- a/tests/isolate/spawn_uri_vm_test.dart
+++ b/tests/isolate/spawn_uri_vm_test.dart
@@ -6,9 +6,9 @@
 // Note: the following comment is used by test.dart to additionally compile the
 // other isolate's code.
 // OtherScripts=spawn_uri_child_isolate.dart
-#library('spawn_tests');
-#import('../../pkg/unittest/unittest.dart');
-#import('dart:isolate');
+library spawn_tests;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('isolate fromUri - send and reply', () {
diff --git a/tests/isolate/timer_cancel1_test.dart b/tests/isolate/timer_cancel1_test.dart
index 052d9fe..c4d4277 100644
--- a/tests/isolate/timer_cancel1_test.dart
+++ b/tests/isolate/timer_cancel1_test.dart
@@ -2,10 +2,9 @@
 // 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('timer_cancel1_test');
-
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+library timer_cancel1_test;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   // Test that a timeout handler can cancel another.
diff --git a/tests/isolate/timer_cancel2_test.dart b/tests/isolate/timer_cancel2_test.dart
index 025638c..f01a8cc 100644
--- a/tests/isolate/timer_cancel2_test.dart
+++ b/tests/isolate/timer_cancel2_test.dart
@@ -2,10 +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.
 
-#library('timer_cancel2_test');
+library timer_cancel2_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   // Test that a timeout handler can cancel itself.
diff --git a/tests/isolate/timer_cancel_test.dart b/tests/isolate/timer_cancel_test.dart
index ffb866d..745a91b 100644
--- a/tests/isolate/timer_cancel_test.dart
+++ b/tests/isolate/timer_cancel_test.dart
@@ -2,10 +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.
 
-#library('timer_cancel_test');
+library timer_cancel_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("simple timer", () {
diff --git a/tests/isolate/timer_isolate_test.dart b/tests/isolate/timer_isolate_test.dart
index f98ffd2..afe29b5 100644
--- a/tests/isolate/timer_isolate_test.dart
+++ b/tests/isolate/timer_isolate_test.dart
@@ -2,10 +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.
 
-#library('multiple_timer_test');
+library multiple_timer_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 const int TIMEOUT = 100;
 
diff --git a/tests/isolate/timer_not_available_test.dart b/tests/isolate/timer_not_available_test.dart
index 96fb3c5..5234591 100644
--- a/tests/isolate/timer_not_available_test.dart
+++ b/tests/isolate/timer_not_available_test.dart
@@ -2,9 +2,9 @@
 // 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('timer_not_available');
+library timerNotAvailable;
 
-#import("dart:isolate");
+import 'dart:isolate';
 
 main() {
   bool failed = false;
diff --git a/tests/isolate/timer_repeat_test.dart b/tests/isolate/timer_repeat_test.dart
index 96be94d..31653dc 100644
--- a/tests/isolate/timer_repeat_test.dart
+++ b/tests/isolate/timer_repeat_test.dart
@@ -2,28 +2,28 @@
 // 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('timer_repeat_test');
+library timer_repeat_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
-  const int TIMEOUT = 500;
-  const int ITERATIONS = 5;
+const int TIMEOUT = 500;
+const int ITERATIONS = 5;
 
-  Timer timer;
-  int startTime;
-  int iteration;
+Timer timer;
+int startTime;
+int iteration;
   
-  void timeoutHandler(Timer timer) {
-    int endTime = (new Date.now()).millisecondsSinceEpoch;
-    iteration++;
-    if (iteration < ITERATIONS) {
-      startTime = (new Date.now()).millisecondsSinceEpoch;
-    } else {
-      expect(iteration, ITERATIONS);
-      timer.cancel();
-    }
+void timeoutHandler(Timer timer) {
+  int endTime = (new Date.now()).millisecondsSinceEpoch;
+  iteration++;
+  if (iteration < ITERATIONS) {
+    startTime = (new Date.now()).millisecondsSinceEpoch;
+  } else {
+    expect(iteration, ITERATIONS);
+    timer.cancel();
   }
+}
 
 main() {
   test("timer_repeat", () {
diff --git a/tests/isolate/timer_test.dart b/tests/isolate/timer_test.dart
index 4a151e0..0ec4bf45 100644
--- a/tests/isolate/timer_test.dart
+++ b/tests/isolate/timer_test.dart
@@ -2,10 +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.
 
-#library('timer_test');
+library timer_test;
 
-#import("dart:isolate");
-#import('../../pkg/unittest/unittest.dart');
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 const int STARTTIMEOUT = 1050;
 const int DECREASE = 200;
diff --git a/tests/isolate/unresolved_ports_negative_test.dart b/tests/isolate/unresolved_ports_negative_test.dart
index 67edb08..518884b 100644
--- a/tests/isolate/unresolved_ports_negative_test.dart
+++ b/tests/isolate/unresolved_ports_negative_test.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // negative test to ensure that API_unresolvedPortsTest works.
-#library('unresolved_ports');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library unresolved_ports;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 bethIsolate() {
   port.receive(expectAsync2((msg, reply) => msg[1].send(
diff --git a/tests/isolate/unresolved_ports_test.dart b/tests/isolate/unresolved_ports_test.dart
index 5dfe3fc..06f5d58 100644
--- a/tests/isolate/unresolved_ports_test.dart
+++ b/tests/isolate/unresolved_ports_test.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // spawns multiple isolates and sends unresolved ports between them.
-#library('unresolved_ports');
-#import('dart:isolate');
-#import('../../pkg/unittest/unittest.dart');
+library unresolved_ports;
+import 'dart:isolate';
+import '../../pkg/unittest/lib/unittest.dart';
 
 // This test does the following:
 //  - main spawns two isolates: 'tim' and 'beth'
diff --git a/tests/json/json_test.dart b/tests/json/json_test.dart
index 649deba..ef1c20e 100644
--- a/tests/json/json_test.dart
+++ b/tests/json/json_test.dart
@@ -2,12 +2,11 @@
 // 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('json_tests');
-
-#import('dart:json');
-#import('dart:html');
-#import('../../pkg/unittest/unittest.dart');
-#import('../../pkg/unittest/html_config.dart');
+library json_tests;
+import 'dart:json';
+import 'dart:html';
+import '../../pkg/unittest/lib/unittest.dart';
+import '../../pkg/unittest/lib/html_config.dart';
 
 main() {
   useHtmlConfiguration();
diff --git a/tests/language/bad_override_test.dart b/tests/language/bad_override_test.dart
index 2bb6900..646df5c 100644
--- a/tests/language/bad_override_test.dart
+++ b/tests/language/bad_override_test.dart
@@ -3,12 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class Fisk {
-  get fisk => null;
-  static /// 01: compile-time error
+  get fisk => null;	
+  static            /// 01: static type warning	
   set fisk(x) {}
-  static /// 02: compile-time error
-  get hest => null;
-  set hest(x) {}
+
+  static            /// 02: static type warning	
+  get hest => null;	
+  set hest(x) {}	
+
   foo() {}
   var field;
   method() {}
@@ -16,10 +18,10 @@
 }
 
 class Hest extends Fisk {
-  static foo() {} /// 03: compile-time error
-  field() {} /// 04: compile-time error
-  var method; /// 05: compile-time error
-  nullary(x) {} /// 06: compile-time error
+  static foo() {}   /// 03: compile-time error
+  field() {}        /// 04: compile-time error
+  var method;       /// 05: compile-time error
+  nullary(x) {}     /// 06: compile-time error
 }
 
 main() {
diff --git a/tests/language/checked_null_test.dart b/tests/language/checked_null_test.dart
new file mode 100644
index 0000000..cd95d61
--- /dev/null
+++ b/tests/language/checked_null_test.dart
@@ -0,0 +1,23 @@
+// 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 A {
+  Map a;
+  Comparator b;
+  // This code exhibited a bug in dart2js checked mode, where the type
+  // of [a] was inferred to be [Comparator] or null;
+  A() : b = null, a = null;
+}
+
+main() { 
+  Expect.throws(bar);
+}
+
+bar() {
+  // We would create a typed selector for the call to foo, where the
+  // receiver type is a typedef. Some code in the dart2js backend were
+  // not dealing correctly with typedefs and lead the compiler to
+  // crash.
+  new A().a.foo();
+}
diff --git a/tests/language/do_while2_test.dart b/tests/language/do_while2_test.dart
new file mode 100644
index 0000000..c6cae30
--- /dev/null
+++ b/tests/language/do_while2_test.dart
@@ -0,0 +1,45 @@
+// 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.
+
+var a = 42;
+
+foo1() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+  } while (i == saved);
+  Expect.equals(0, saved);
+  Expect.equals(42, i);
+}
+
+foo2() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+  } while (i != saved);
+  Expect.equals(42, saved);
+  Expect.equals(42, i);
+}
+
+foo3() {
+  var i = 0;
+  var saved;
+  do {
+    saved = i;
+    i = a;
+    if (i == saved) continue;
+  } while (i != saved);
+  Expect.equals(42, saved);
+  Expect.equals(42, i);
+}
+
+main() {
+  foo1();
+  foo2();
+  foo3();
+}
diff --git a/tests/language/field7a_negative_test.dart b/tests/language/field7a_negative_test.dart
deleted file mode 100644
index 1e26e68..0000000
--- a/tests/language/field7a_negative_test.dart
+++ /dev/null
@@ -1,23 +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.
-// Dart test to catch error reporting bugs in class fields declarations.
-// Should be an error because we have a function overriding a setter name.
-
-class A {
-  void set a(var val) {
-    int i = val;
-  }
-  int a() {
-    return 1;
-  }
-}
-
-class Field7aNegativeTest {
-  static testMain() {
-  }
-}
-
-main() {
-  Field7aNegativeTest.testMain();
-}
diff --git a/tests/language/first_class_types_libraries_test.dart b/tests/language/first_class_types_libraries_test.dart
index b04c572..521f2fa 100644
--- a/tests/language/first_class_types_libraries_test.dart
+++ b/tests/language/first_class_types_libraries_test.dart
@@ -2,6 +2,7 @@
 // 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 firstClassLibrariestest;
 import 'first_class_types_lib1.dart' as lib1;
 import 'first_class_types_lib2.dart' as lib2;
 
diff --git a/tests/language/first_class_types_literals_test.dart b/tests/language/first_class_types_literals_test.dart
new file mode 100644
index 0000000..9e8093f
--- /dev/null
+++ b/tests/language/first_class_types_literals_test.dart
@@ -0,0 +1,44 @@
+// 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 C<T> {}
+
+class D {}
+
+typedef int Foo(bool b);
+
+sameType(a, b) {
+  Expect.identical(a.runtimeType, b.runtimeType);
+}
+
+differentType(a, b) {
+  print("a: ${a.runtimeType}");
+  print("b: ${b.runtimeType}");
+  Expect.isFalse(a.runtimeType === b.runtimeType);
+}
+
+main() {
+  // Test type literals.
+  Expect.identical(int, int);
+  Expect.isFalse(int === num);
+  Expect.identical(Foo, Foo);
+
+  // Test that class literals return instances of Type.
+  Expect.isTrue((D).runtimeType is Type);
+
+  // Test that types from runtimeType and literals agree.
+  Expect.identical(int, 1.runtimeType);
+  Expect.identical(C, new C().runtimeType);
+  Expect.identical(D, new D().runtimeType);
+
+  // runtimeType on type is idempotent.
+  Expect.identical((D).runtimeType, (D).runtimeType.runtimeType);
+
+  // Test that operator calls on class literals go to Type.
+  Expect.throws(() => C = 1, (e) => e is NoSuchMethodError);
+  Expect.throws(() => C++, (e) => e is NoSuchMethodError);
+  Expect.throws(() => C + 1, (e) => e is NoSuchMethodError);
+  Expect.throws(() => C[2], (e) => e is NoSuchMethodError);
+  Expect.throws(() => C[2] = 'hest', (e) => e is NoSuchMethodError);
+}
diff --git a/tests/language/first_class_types_test.dart b/tests/language/first_class_types_test.dart
index 82c128f..5db1e54 100644
--- a/tests/language/first_class_types_test.dart
+++ b/tests/language/first_class_types_test.dart
@@ -5,9 +5,7 @@
 class C<T> {}
 
 sameType(a, b) {
-  print("a: ${a.runtimeType}");
-  print("b: ${b.runtimeType}");
-  Expect.isTrue(a.runtimeType === b.runtimeType);
+  Expect.identical(a.runtimeType, b.runtimeType);
 }
 
 differentType(a, b) {
@@ -17,6 +15,7 @@
 }
 
 main() {
+  // Test types obtained by calling runtimeType.
   var v1 = new C<int>();
   var v2 = new C<int>();
   sameType(v1, v2);
diff --git a/tests/language/import_combinators_negative_test.dart b/tests/language/import_combinators_negative_test.dart
index efbb344..20d6e68 100644
--- a/tests/language/import_combinators_negative_test.dart
+++ b/tests/language/import_combinators_negative_test.dart
@@ -4,6 +4,7 @@
 
 // Dart test program importing with show/hide combinators.
 
+library importCombinatorsNegativeTest;
 import "import1_lib.dart" show hide, show hide ugly;
 
 main() {
diff --git a/tests/language/import_combinators_test.dart b/tests/language/import_combinators_test.dart
index 5d0dd84..0d91356 100644
--- a/tests/language/import_combinators_test.dart
+++ b/tests/language/import_combinators_test.dart
@@ -4,6 +4,7 @@
 
 // Dart test program importing with show/hide combinators.
 
+library importCombinatorsTest;
 import "import1_lib.dart" show hide, show hide ugly;
 import "export1_lib.dart";
 import "dart:math" as M show E;
diff --git a/tests/language/instance_inline_test.dart b/tests/language/instance_inline_test.dart
new file mode 100644
index 0000000..e45dde2
--- /dev/null
+++ b/tests/language/instance_inline_test.dart
@@ -0,0 +1,27 @@
+// 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.
+
+// Test inlining of assignments in parameter passing. If [StringScanner.charAt]
+// is inlined, the argument expresion [: ++byteOffset :] should not be
+// duplicated.
+
+class StringScanner {
+  final String string;
+  int byteOffset = -1;
+
+  StringScanner(this.string);
+
+  int nextByte() => charAt(++byteOffset);
+
+  int charAt(index)
+      => (string.length > index) ? string.charCodeAt(index) : -1;
+}
+
+void main() {
+  var scanner = new StringScanner('az9');
+  Expect.equals(0x61, scanner.nextByte()); // Expect a.
+  Expect.equals(0x7A, scanner.nextByte()); // Expect z.
+  Expect.equals(0x39, scanner.nextByte()); // Expect 9.
+  Expect.equals(-1, scanner.nextByte());
+}
\ No newline at end of file
diff --git a/tests/language/language.status b/tests/language/language.status
index fd80dde..aa20e9f 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -19,12 +19,6 @@
 part_test: Fail
 part2_test: Fail
 gc_test: Fail # Issue 1487
-field_override_test/none: Fail  # Issue 742: field shadowing now allowed
-field_override_test/01: Fail    # Issue 742: field shadowing now allowed
-super_field_access_test: Fail    # Issue 742: field shadowing now allowed
-pseudo_kw_illegal_test/03: Fail  # Issue 356
-pseudo_kw_illegal_test/08: Fail  # Issue 356
-pseudo_kw_illegal_test/10: Fail  # Issue 356
 pseudo_kw_illegal_test/14: Fail  # Issue 356
 
 # These bugs refer currently ongoing language discussions.
@@ -42,9 +36,6 @@
 
 parameter_initializer6_negative_test: Fail # Issue 3502
 
-bad_override_test/01: Fail # Issue 3859.
-bad_override_test/02: Fail # Issue 3859.
-
 named_parameters_aggregated_test/05: Fail # Compile-time error reported instead of static type warning.
 
 lazy_static3_test: Fail # Issue 3558
@@ -57,13 +48,12 @@
 
 compile_time_constant10_test/none: Fail # issue 5214
 
-export_cyclic_test: Crash # issue 6060
-
 call_through_null_getter_test: Fail # issue 6124
 
 invocation_mirror_test: Fail # issue 3326, 3622.
 no_such_method_test: Fail # issue 3326, 3622.
 
+export_cyclic_test: Fail, Crash # issue 6060
 invocation_mirror_indirect_test: Fail # Issue 3326
 
 [ $compiler == none && ($system == macos || $system == linux) && $arch == ia32 && $checked ]
@@ -72,8 +62,13 @@
 [ $compiler == none && $mode == debug ]
 gc_test: Skip  # Takes too long.
 
+
+[ $compiler == none && $checked ]
+redirecting_factory_infinite_steps_test/01: Fail # http://dartbug.com/6596
+
+
 [ $compiler == none && $unchecked ]
-field_override_test/02: Fail    # Issue 742: field shadowing now allowed
+
 
 # Only checked mode reports an error on type assignment
 # problems in compile time constants.
@@ -92,8 +87,12 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dartc ]
+redirecting_factory_infinite_steps_test/01: Fail # http://dartbug.com/6560
+redirecting_factory_infinite_steps_test/02: Fail # http://dartbug.com/6560
 implicit_this_test/none: Fail # should not warn about allocating SubAbstract2
 metadata_test: Fail
+bad_override_test/01: Fail
+bad_override_test/02: Fail
 get_set_syntax_test/none: Fail # does not accept getter/setter with no method body
 application_negative_test: Fail # Runtime only test, rewrite as multitest
 assign_instance_method_negative_test: Fail # Runtime only test, rewrite as multitest
@@ -136,15 +135,14 @@
 class_literal_test/28 : Fail # language change 3368
 class_literal_test/29 : Fail # language change 3368
 closure_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
-compile_time_constant_test/02: Fail # issue 5987.
 compile_time_constant10_test/none: Fail # issue 5215.
 constructor3_negative_test: Fail # Runtime only test, rewrite as multitest
 constructor_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
 disable_privacy_test: Fail # Issue 1882: Needs --disable_privacy support.
 factory5_test/00: Fail # issue 3079
 field_method4_negative_test: Fail  # Runtime only test, rewrite as multitest
-field7_negative_test: Fail, OK # language changed, test issue 5249
-field7a_negative_test: Fail, OK # language changed, test issue 5249
+
+first_class_types_literals_test: Fail # issue 6283
 getter_no_setter_test/01: Fail # Fails to detect compile-time error.
 getter_no_setter2_test/01: Fail # Fails to detect compile-time error.
 instance_call_wrong_argument_count_negative_test: Fail # Runtime only test, rewrite as multitest
@@ -161,8 +159,6 @@
 many_overridden_no_such_method_test: Fail
 no_such_method_negative_test: Fail # Runtime only test, rewrite as multitest
 override_field_test/03: Fail # still a valid test? Issue 3894
-override_field_test/04: Fail # still a valid test? Issue 3656
-override_field_method3_negative_test: Fail, OK # test issue 5249
 override_field_method6_negative_test: Fail, OK # test issue 5249
 overridden_no_such_method_test: Fail
 parameter_initializer6_negative_test: Fail # language change 4288
@@ -304,6 +300,45 @@
 type_variable_bounds_test/07: Pass
 
 
+# test issue 6512
+arithmetic_test: Fail, OK
+call_constructor_on_unresolvable_class_test/none: Fail, OK
+call_constructor_on_unresolvable_class_test/01: Fail, OK
+call_constructor_on_unresolvable_class_test/02: Fail, OK
+call_constructor_on_unresolvable_class_test/07: Fail, OK
+call_constructor_on_unresolvable_class_test/03: Fail, OK
+closure_type_test: Fail, OK
+const_var_test: Fail, OK
+ct_const4_test: Fail, OK
+cyclic_import_test: Fail, OK
+function_type_alias3_test: Fail, OK
+getter_setter_in_lib_test: Fail, OK
+import_collection_no_prefix_test: Fail, OK
+import_core_no_prefix_test: Fail, OK
+import_core_prefix_test: Fail, OK
+import_core_test: Fail, OK
+intrinsified_methods_test: Fail, OK
+issue1363_test: Fail, OK
+library5_test: Fail, OK
+library_private_in_constructor_test: Fail, OK
+numbers_test: Fail, OK
+prefix101_test: Fail, OK
+prefix10_negative_test: Pass
+prefix10_test: Fail, OK
+prefix11_test: Fail, OK
+prefix12_test: Fail, OK
+prefix1_negative_test: Pass
+prefix21_test: Fail, OK
+prefix4_negative_test: Pass
+prefix5_negative_test: Pass
+prefix_new_test: Fail, OK
+prefix_test: Fail, OK
+private_member3_negative_test: Pass
+private_member_test: Fail, OK
+top_level_prefixed_declaration_test: Fail, OK
+typed_message_test: Fail, OK
+
+
 
 #
 # Add new dartc annotations above in alphabetical order
@@ -320,12 +355,6 @@
 final_variable_assignment_test/03: Fail
 final_variable_assignment_test/04: Fail
 gc_test: Skip # Issue 1487
-prefix_new_test: Fail
-import_combinators_test: Fail
-export_test: Fail # Issue 5785
-export_cyclic_test: Fail # Issue 5785
-first_class_types_libraries_test: Fail # Issue 2264
-local_export_test: Fail # http://dartbug.com/2264
 
 
 [ $runtime == dartium ]
@@ -333,6 +362,7 @@
 
 
 [ $runtime == vm || ($runtime == drt && $compiler == none) ]
+first_class_types_literals_test: Fail # issue 6282
 call_test: Fail # Issue 1604
 
 [ $runtime == chrome ]
@@ -354,12 +384,21 @@
 *: Skip
 
 [ $compiler == dart2dart ]
+redirecting_factory_infinite_steps_test/01: Fail, Pass # TRIAGE: fails in minified mode. http://dartbug.com/6603
+
 many_overridden_no_such_method_test: Fail, Pass # TRIAGE: fails in minified mode
 overridden_no_such_method_test: Fail, Pass # TRIAGE: fails in minified mode
 # Calling unresolved class constructor:
 # call_constructor_on_unresolvable_class_test/07: Fail
 call_nonexistent_constructor_test: Fail
 
+bad_override_test/01: Fail
+bad_override_test/02: Fail
+
+illegal_invocation_test/01: Fail, OK # Typedef literals are expressions now.
+illegal_invocation_test/04: Fail, OK # Class literals are expressions now.
+illegal_invocation_test/05: Fail, OK # Type variables are expressions now.
+
 # Renaming type from platform library:
 dynamic_test: Fail
 
@@ -386,19 +425,6 @@
 type_variable_scope_test: Fail
 constructor_redirect2_test/03: Fail
 
-class_literal_test/05: Fail # http://dartbug.com/5519
-class_literal_test/10: Fail # http://dartbug.com/5519
-class_literal_test/11: Fail # http://dartbug.com/5519
-class_literal_test/12: Fail # http://dartbug.com/5519
-class_literal_test/17: Fail # http://dartbug.com/5519
-class_literal_test/18: Fail # http://dartbug.com/5519
-class_literal_test/19: Fail # http://dartbug.com/5519
-class_literal_test/20: Fail # http://dartbug.com/5519
-class_literal_test/22: Fail # http://dartbug.com/5519
-class_literal_test/25: Fail # http://dartbug.com/5519
-class_literal_test/27: Fail # http://dartbug.com/5519
-class_literal_test/28: Fail # http://dartbug.com/5519
-class_literal_test/29: Fail # http://dartbug.com/5519
 compile_time_constant10_test/01: Fail # http://dartbug.com/5519
 compile_time_constant10_test/02: Fail # http://dartbug.com/5519
 compile_time_constant_arguments_test/01: Fail # http://dartbug.com/5519
@@ -436,7 +462,6 @@
 named_parameters_aggregated_test/03: Fail # http://dartbug.com/5519
 named_parameters_aggregated_test/04: Fail # http://dartbug.com/5519
 not_enough_positional_arguments_test/01: Fail # http://dartbug.com/5519
-override_field_test/04: Fail # http://dartbug.com/5519
 static_field3_test/01: Fail # http://dartbug.com/5519
 static_field3_test/02: Fail # http://dartbug.com/5519
 static_field3_test/03: Fail # http://dartbug.com/5519
@@ -456,7 +481,6 @@
 class_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 field1_negative_test: Fail, OK # Bad test: assumes eager loading.
 field6_negative_test: Fail, OK # Bad test: assumes eager loading.
-field7_negative_test: Fail, OK # Bad test: assumes eager loading.
 interface_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 # Common problems with dart2js.  In illegal family, invalid
 # declarations are simply not parsed.  In pseudo kw dart2js
@@ -480,7 +504,6 @@
 field4_negative_test: Fail
 field5_negative_test: Fail
 field6a_negative_test: Fail
-field7a_negative_test: Fail
 interface_factory_constructor_negative_test: Fail
 interface_static_method_negative_test: Fail
 non_const_super_negative_test: Fail
@@ -522,11 +545,7 @@
 constructor5_test: Fail
 constructor6_test: Fail
 closure_in_initializer_test: Fail
-field_override_test/01: Fail
-field_override_test/02: Fail
-field_override_test/none: Fail
 gc_test: Fail
-super_field_access_test: Fail
 super_first_constructor_test: Fail
 # VM specific tests.
 disable_privacy_test: Fail, Ok
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 8bcd4fd..3f87fe4 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -3,11 +3,36 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js || $compiler == dart2dart ]
+class_literal_test/01: Fail # Class literals are expression now; delete this test.
+class_literal_test/02: Fail # Class literals are expression now; delete this test.
+class_literal_test/05: Fail # Class literals are expression now; delete this test.
+class_literal_test/06: Fail # Class literals are expression now; delete this test.
+class_literal_test/07: Fail # Class literals are expression now; delete this test.
+class_literal_test/10: Fail # Class literals are expression now; delete this test.
+class_literal_test/11: Fail # Class literals are expression now; delete this test.
+class_literal_test/12: Fail # Class literals are expression now; delete this test.
+class_literal_test/13: Fail # Class literals are expression now; delete this test.
+class_literal_test/14: Fail # Class literals are expression now; delete this test.
+class_literal_test/17: Fail # Class literals are expression now; delete this test.
+class_literal_test/18: Fail # Class literals are expression now; delete this test.
+class_literal_test/19: Fail # Class literals are expression now; delete this test.
+class_literal_test/20: Fail # Class literals are expression now; delete this test.
+class_literal_test/21: Fail # Class literals are expression now; delete this test.
+class_literal_test/22: Fail # Class literals are expression now; delete this test.
+class_literal_test/23: Fail # Class literals are expression now; delete this test.
+class_literal_test/24: Fail # Class literals are expression now; delete this test.
+class_literal_test/25: Fail # Class literals are expression now; delete this test.
+class_literal_test/26: Fail # Class literals are expression now; delete this test.
+class_literal_test/27: Fail # Class literals are expression now; delete this test.
+class_literal_test/28: Fail # Class literals are expression now; delete this test.
+class_literal_test/29: Fail # Class literals are expression now; delete this test.
+
 # VM specific tests that should not be run by dart2js.
 *vm_test: Skip
 *vm_negative_test: Skip
 
 [ $compiler == dart2js && $checked ]
+redirecting_factory_infinite_steps_test/01: Fail
 assert_with_type_test_or_cast_test: Fail # Issue 4929
 type_variable_bounds_test/01: Fail
 type_variable_bounds_test/02: Fail
@@ -31,7 +56,6 @@
 closure_type_test: Fail # does not detect type error in checked mode.
 function_type_test: Fail # does not detect type error in checked mode.
 function_malformed_result_type_test: Fail # does not detect type error in checked mode.
-void_type_test: Fail # does not detect type error in checked mode.
 
 type_parameter_test/01: Fail # Issue 4932
 type_parameter_test/02: Fail # Issue 4932
@@ -61,10 +85,18 @@
 compile_time_constant_checked3_test/06: Fail, OK
 
 [ $compiler == dart2js ]
+factory_redirection_test/none: fail
+factory_redirection_test/01: fail
+factory_redirection_test/02: fail
+factory_redirection_test/03: fail
+factory_redirection_test/05: fail
+factory_redirection_test/06: fail
 final_variable_assignment_test/01: Fail
 final_variable_assignment_test/02: Fail
 final_variable_assignment_test/03: Fail
 final_variable_assignment_test/04: Fail
+bad_override_test/01: Fail
+bad_override_test/02: Fail
 bad_constructor_test/04: Fail # http://dartbug.com/5519
 bad_constructor_test/05: Fail # http://dartbug.com/5519
 bad_constructor_test/06: Fail # http://dartbug.com/5519
@@ -77,6 +109,10 @@
 isnot_malformed_type_test/01: Fail # http://dartbug.com/5519
 not_enough_positional_arguments_test/01: Fail # http://dartbug.com/5519
 
+constructor_negative_test: Pass # Wrong reason: the expression 'C()' is valid with class literals.
+illegal_invocation_test/01: Fail, OK # Typedef literals are expressions now.
+illegal_invocation_test/04: Fail, OK # Class literals are expressions now.
+
 throw_expr_test: Fail
 metadata_test: Fail # Metadata on type parameters not supported.
 infinity_test: Fail # Issue 4984
@@ -107,14 +143,6 @@
 char_escape_test: Fail # Unhandled non-BMP character: U+10000
 default_factory_library_test: Fail # lib is not a type
 dynamic_test: Fail # cannot resolve type F1
-factory_redirection_test/none: Fail # Not implemented.
-factory_redirection_test/01: Fail # Not implemented.
-factory_redirection_test/02: Fail # Not implemented.
-factory_redirection_test/03: Fail # Not implemented.
-factory_redirection_test/04: Pass # For the wrong reason. Not implemented.
-factory_redirection_test/05: Fail # Not implemented.
-factory_redirection_test/06: Fail # Not implemented.
-factory_redirection_test/07: Pass # For the wrong reason. Not implemented.
 constructor_redirect2_test/03: Fail # redirecting ctor with initializing formal
 factory3_test: Fail # internal error: visitIs for type variables not implemented
 function_type_alias2_test: Fail # cannot resolve type f1
@@ -199,7 +227,6 @@
 external_test/16: Fail, OK # Bad test: assumes eager loading.
 field1_negative_test: Fail, OK # Bad test: assumes eager loading.
 field6_negative_test: Fail, OK # Bad test: assumes eager loading.
-field7_negative_test: Fail, OK # Bad test: assumes eager loading.
 interface_cycle_negative_test: Fail, OK # Bad test: assumes eager loading.
 syntax_test/47: Fail, OK # Bad test: assumes eager loading.
 
@@ -218,7 +245,6 @@
 const_init_negative_test: Fail # Negative language test.
 const_syntax_test/04: Fail # Negative language test.
 constructor2_negative_test: Fail # Negative language test.
-constructor_negative_test: Pass # For the wrong reason.
 constructor_return_negative_test: Fail # Negative language test.
 constructor_return_with_arrow_negative_test: Fail # Negative language test.
 constructor_return_with_init_and_arrow_negative_test: Fail # Negative language test.
@@ -235,7 +261,6 @@
 field4_negative_test: Fail # Negative language test.
 field5_negative_test: Fail # Negative language test.
 field6a_negative_test: Fail # Negative language test.
-field7a_negative_test: Fail # Negative language test.
 final_for_in_variable_test/01: Fail # Negative language test
 final_param_negative_test: Fail # Negative language test.
 final_var_negative_test: Fail # Negative language test.
@@ -250,7 +275,6 @@
 non_const_super_negative_test: Fail # Negative language test.
 number_identifier_negative_test: Fail # Negative language test.
 operator1_negative_test: Fail # Negative language test.
-override_field_test/04: Fail # Broken test.
 prefix16_test: Fail
 prefix18_negative_test: Fail # Negative language test.
 prefix20_negative_test: Fail # Negative language test.
@@ -334,17 +358,6 @@
 null_pointer_exception_test: Fail # Uncaught error: Instance of 'TypeError'
 string_interpolate_npe_test: Fail # Uncaught error: Instance of 'TypeError'
 
-[ $compiler == dart2js && $runtime == ff && $system == windows ]
-prefix_new_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
-part2_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
-part_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
-export_test: Fail # Issue 5785 (root cause: issue 2264)
-export_cyclic_test: Fail # Issue 5785 (root cause: issue 2264)
-import_combinators_test: Fail # Issue 5785 (root cause: issue 2264)
-first_class_types_libraries_test: Fail
-local_export_test: Fail # TODO(ahe): Enable wrapper-less tests on Firefox/Windows.
-
-
 [ $runtime == opera ]
 call_through_null_getter_test: Fail
 closure3_test: Fail
diff --git a/lib/html/templates/html/interface/interface_Document.darttemplate b/tests/language/lazy_map_test.dart
similarity index 72%
copy from lib/html/templates/html/interface/interface_Document.darttemplate
copy to tests/language/lazy_map_test.dart
index 7d30daf..f1ff770 100644
--- a/lib/html/templates/html/interface/interface_Document.darttemplate
+++ b/tests/language/lazy_map_test.dart
@@ -2,10 +2,7 @@
 // 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;
-
-$!COMMENT
-abstract class Document extends HtmlElement {
-
-$!MEMBERS
+var data = { 'a': 'a' };
+main() {
+  Expect.equals('a', data['a']);
 }
diff --git a/tests/language/local_export_test.dart b/tests/language/local_export_test.dart
index fe4df96..ce2ca1d 100644
--- a/tests/language/local_export_test.dart
+++ b/tests/language/local_export_test.dart
@@ -2,6 +2,7 @@
 // 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 localExportTest;
 import 'local_export_a.dart';
 
 void main() {
diff --git a/tests/language/named_parameters_with_dollars_test.dart b/tests/language/named_parameters_with_dollars_test.dart
index d1bc0f6..6bd7af3 100644
--- a/tests/language/named_parameters_with_dollars_test.dart
+++ b/tests/language/named_parameters_with_dollars_test.dart
@@ -37,8 +37,8 @@
 makeTestClass(n) => [new TestClass(), new Decoy(), 'string'][n % 3];
 
 class Decoy {
-  method([a$b, b, a]) { throw const NotImplementedException(); }
-  psycho([$$$, $$, $])  { throw const NotImplementedException(); }
+  method([a$b, b, a]) { throw new UnimplementedError(); }
+  psycho([$$$, $$, $])  { throw new UnimplementedError(); }
 }
 
 testDollar() {
diff --git a/tests/language/optimized_constant_array_string_access.dart b/tests/language/optimized_constant_array_string_access.dart
new file mode 100644
index 0000000..2e0b1ba
--- /dev/null
+++ b/tests/language/optimized_constant_array_string_access.dart
@@ -0,0 +1,49 @@
+// 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.
+
+// Test optimized constant string and constant array access.
+
+int testConstantStringAndIndexCharCodeAt() {
+  int test(b) {
+    if (b) return "hest".charCodeAt(400);
+    return "hest".charCodeAt(2);
+  }
+
+  Expect.throws(() => test(true));
+  for (int i = 0; i < 10000; i++) test(false);
+  Expect.throws(() => test(true));
+}
+
+
+int testConstantArrayAndIndexAt() {
+  int test(b) {
+    var a = const [1,2,3,4];
+    if (b) return a[400];
+    return a[2];
+  }
+
+  Expect.throws(() => test(true));
+  for (int i = 0; i < 10000; i++) test(false);
+  Expect.throws(() => test(true));
+}
+
+
+foo(a) {
+  if (a == 1) { return 2; }
+  var aa = const [1, 2];
+  return aa[2.3];
+}
+
+
+int testNonSmiIndex() {
+  for (int i = 0; i < 10000; i++) { foo(1); }
+  Expect.throws(() => foo(2));
+}
+
+
+main() {
+  testConstantStringAndIndexCharCodeAt();
+  testConstantArrayAndIndexAt();
+  testNonSmiIndex();
+}
diff --git a/tests/language/optimized_string_charcodeat.dart b/tests/language/optimized_string_charcodeat.dart
new file mode 100644
index 0000000..1e84590
--- /dev/null
+++ b/tests/language/optimized_string_charcodeat.dart
@@ -0,0 +1,51 @@
+// 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.
+
+// Test optimized charCodeAt and array access.
+
+String one_byte = "hest";
+String two_byte = "høns";
+
+int testOneByteCharCodeAt(String x, int i) {
+  int test() {
+    return x.charCodeAt(i);
+  }
+  for (int i = 0; i < 10000; i++) test();
+  return test();
+}
+
+
+int testTwoByteCharCodeAt(String x, int i) {
+  int test() {
+    return x.charCodeAt(i);
+  }
+  for (int i = 0; i < 10000; i++) test();
+  return test();
+}
+
+
+int testConstantStringCharCodeAt(int i) {
+  int test() {
+    return "høns".charCodeAt(i);
+  }
+  for (int i = 0; i < 10000; i++) test();
+  return test();
+}
+
+
+int testConstantIndexCharCodeAt(String x) {
+  int test() {
+    return x.charCodeAt(1);
+  }
+  for (int i = 0; i < 10000; i++) test();
+  return test();
+}
+
+
+main() {
+  Expect.equals(101, testOneByteCharCodeAt(one_byte, 1));
+  Expect.equals(248, testTwoByteCharCodeAt(two_byte, 1));
+  Expect.equals(248, testConstantStringCharCodeAt(1));
+  Expect.equals(101, testConstantIndexCharCodeAt(one_byte));
+}
diff --git a/tests/language/override_field_method3_negative_test.dart b/tests/language/override_field_method3_negative_test.dart
deleted file mode 100644
index 5811aec..0000000
--- a/tests/language/override_field_method3_negative_test.dart
+++ /dev/null
@@ -1,22 +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.
-// Dart test error for overriding setter with method.
-
-class A {
-  set foo(x) { }
-}
-
-class B extends A {
-  foo(x) {}  // method cannot override setter.
-}
-
-class OverrideFieldMethod3NegativeTest {
-  static testMain() {
-    new B().foo(10);
-  }
-}
-
-main() {
-  OverrideFieldMethod3NegativeTest.testMain();
-}
diff --git a/tests/language/override_field_method6_negative_test.dart b/tests/language/override_field_method6_negative_test.dart
deleted file mode 100644
index 09998b7..0000000
--- a/tests/language/override_field_method6_negative_test.dart
+++ /dev/null
@@ -1,22 +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.
-// Dart test error for overriding method with setter.
-
-class A {
-  foo(x) { }
-}
-
-class B extends A {
-  set foo(x) { }  // setter cannot override method.
-}
-
-class OverrideFieldMethod6NegativeTest {
-  static testMain() {
-    new B().foo = 10;
-  }
-}
-
-main() {
-  OverrideFieldMethod6NegativeTest.testMain();
-}
diff --git a/tests/language/override_field_test.dart b/tests/language/override_field_test.dart
index ebc289f..4d57d18 100644
--- a/tests/language/override_field_test.dart
+++ b/tests/language/override_field_test.dart
@@ -4,19 +4,14 @@
 // Dart test checking that static/instance field shadowing do not conflict.
 
 class A {
-  A() {}  // DartC has no implicit constructors yet.
-
   int instanceFieldInA;
   static int staticFieldInA;
 }
 
 class B extends A {
-  B() : super() {}  // DartC has no implicit constructors yet.
-
-  static int instanceFieldInA; /// 01: compile-time error
-  int staticFieldInA; /// 02: static type warning
-  static int staticFieldInA; /// 03: static type warning
-  int instanceFieldInA; /// 04: compile-time error
+  static int instanceFieldInA;   /// 01: compile-time error
+  int staticFieldInA;            /// 02: static type warning
+  static int staticFieldInA;     /// 03: static type warning
 }
 
 main() {
diff --git a/tests/language/pseudo_kw_illegal_test.dart b/tests/language/pseudo_kw_illegal_test.dart
index a8962b1..815a8be 100644
--- a/tests/language/pseudo_kw_illegal_test.dart
+++ b/tests/language/pseudo_kw_illegal_test.dart
@@ -7,6 +7,7 @@
 class abstract { }    /// 01: compile-time error
 class assert { }      /// 02: compile-time error
 class dynamic { }     /// 04: compile-time error
+class export { }      /// 17: compile-time error
 class factory { }     /// 05: compile-time error
 class get { }         /// 06: compile-time error
 class implements { }  /// 07: compile-time error
@@ -14,6 +15,7 @@
 class interface { }   /// 09: compile-time error
 class library { }     /// 10: compile-time error
 class operator { }    /// 12: compile-time error
+class part { }        /// 18: compile-time error
 class set { }         /// 13: compile-time error
 class source { }      /// 14: compile-time error
 class static { }      /// 15: compile-time error
diff --git a/tests/language/redirecting_factory_infinite_steps_test.dart b/tests/language/redirecting_factory_infinite_steps_test.dart
new file mode 100644
index 0000000..e655080
--- /dev/null
+++ b/tests/language/redirecting_factory_infinite_steps_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// From Dart Language Specification, 0.12 M1, "7.6.2 Factories": It is
+// a compile-time error if a redirecting factory constructor does not
+// redirect to a non-redirecting factory constructor or to a
+// generative constructor in a finite number of steps.
+
+// TODO(ahe): The above specification will probably change to
+// something like: "It is a compile-time error if a redirecting
+// factory constructor redirects to itself, either directly or
+// indirectly via a sequence of redirections."
+
+class Foo extends Bar {
+  factory Foo() = Bar; /// 01: static type warning, dynamic type error
+}
+
+class Bar {
+  factory Bar() = Foo; /// 02: compile-time error
+}
+
+main() {
+  new Foo();
+}
diff --git a/tests/language/return_in_loop_test.dart b/tests/language/return_in_loop_test.dart
index d65caf0..a960ba6 100644
--- a/tests/language/return_in_loop_test.dart
+++ b/tests/language/return_in_loop_test.dart
@@ -1,7 +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.
-// Test for a leg bug where the live environment was not computed
+// Test for a dart2js bug where the live environment was not computed
 // right.
 
 class A {
diff --git a/tests/language/return_type_test.dart b/tests/language/return_type_test.dart
new file mode 100644
index 0000000..462282d
--- /dev/null
+++ b/tests/language/return_type_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+isCheckedMode() {
+  try {
+    var i = 1;
+    String s = i;
+    return false;
+  } catch (e) {
+    return true;
+  }
+}
+
+int returnString1() => 's';
+void returnNull() => null;
+void returnString2() => 's';
+
+main() {
+  if (isCheckedMode()) {
+    Expect.throws(returnString1, (e) => e is TypeError);
+    Expect.throws(returnString2, (e) => e is TypeError);
+    returnNull();
+  } else {
+    returnString1();
+    returnNull();
+    returnString2();
+  }
+}
diff --git a/tests/language/field7_negative_test.dart b/tests/language/setter4_test.dart
similarity index 83%
rename from tests/language/field7_negative_test.dart
rename to tests/language/setter4_test.dart
index 6a043aa..8428a7a 100644
--- a/tests/language/field7_negative_test.dart
+++ b/tests/language/setter4_test.dart
@@ -13,11 +13,5 @@
   }
 }
 
-class Field7NegativeTest {
-  static testMain() {
-  }
-}
-
 main() {
-  Field7NegativeTest.testMain();
 }
diff --git a/tests/language/state_mangling3_test.dart b/tests/language/state_mangling3_test.dart
new file mode 100644
index 0000000..195a2dd
--- /dev/null
+++ b/tests/language/state_mangling3_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+foo(state0) {
+  if (state0 == null) return 0;
+  var sum = 0;
+  for (int i = 0; i < state0.length; i++) {
+    sum += state0[i];
+  }
+  state0 = inscrutableId(state0);
+  for (int i = 0; i < state0.length; i++) {
+    sum += state0[i];
+  }
+  return sum;
+}
+
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));
+
+inscrutableId(x) {
+  if (x == 0) return inscrutable(x);
+  return (3 == inscrutable(3)) ? x : false;
+}
+
+class A {
+  int length = 3;
+  operator [](i) => 1;
+}
+
+main() {
+  Expect.equals(12, foo([1, 2, 3]));
+  if (inscrutableId(0) == 0) {
+    Expect.equals(6, foo(new A()));
+  }
+}
diff --git a/tests/language/state_mangling4_test.dart b/tests/language/state_mangling4_test.dart
new file mode 100644
index 0000000..b6aab91
--- /dev/null
+++ b/tests/language/state_mangling4_test.dart
@@ -0,0 +1,35 @@
+// 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.
+
+foo(env1) {
+  if (env1 == null) return 0;
+  var env0 = 0;
+  for (int i = 0; i < env1.length; i++) {
+    env0 += env1[i];
+  }
+  env1 = inscrutableId(new A());
+  for (int i = 0; i < env1.length; i++) {
+    env0 += env1[i];
+  }
+  return env0;
+}
+
+int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));
+
+inscrutableId(x) {
+  if (x == 0) return inscrutable(x);
+  return (3 == inscrutable(3)) ? x : false;
+}
+
+class A {
+  int length = 3;
+  operator [](i) => 1;
+}
+
+main() {
+  Expect.equals(9, foo([1, 2, 3]));
+  if (inscrutableId(0) == 0) {
+    Expect.equals(6, foo(new A()));
+  }
+}
diff --git a/tests/language/static_inline_test.dart b/tests/language/static_inline_test.dart
new file mode 100644
index 0000000..4c5ad9a
--- /dev/null
+++ b/tests/language/static_inline_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Test inlining of assignments in parameter passing. If [StringScanner.charAt]
+// is inlined, the argument expresion [: ++byteOffset :] should not be
+// duplicated.
+
+class StringScanner {
+  static String string;
+  int byteOffset = -1;
+
+  int nextByte(foo) {
+    if (foo) return -2;
+    return charAt(++byteOffset);
+  }
+
+  static int charAt(index)
+      => (string.length > index) ? string.charCodeAt(index) : -1;
+}
+
+void main() {
+  var scanner = new StringScanner();
+  StringScanner.string = 'az9';
+  Expect.equals(0x61, scanner.nextByte(false)); // Expect a.
+  Expect.equals(0x7A, scanner.nextByte(false)); // Expect z.
+  Expect.equals(0x39, scanner.nextByte(false)); // Expect 9.
+  Expect.equals(-1, scanner.nextByte(false));
+}
\ No newline at end of file
diff --git a/tests/language/try_catch4_test.dart b/tests/language/try_catch4_test.dart
new file mode 100644
index 0000000..16a0457
--- /dev/null
+++ b/tests/language/try_catch4_test.dart
@@ -0,0 +1,195 @@
+// 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.
+// Check that our SSA graph does have the try body a predecessor of a
+// try/finally.
+
+var a;
+
+foo1() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      return;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+doThrow() { throw 2; }
+
+foo2() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      doThrow();
+      return;
+    } catch(e) {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo3() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      doThrow();
+    } catch(e) {
+      a = 8;
+      entered = true;
+      return;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo4() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      break;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo5() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      doThrow();
+      break;
+    } catch(e) {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo6() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      doThrow();
+    } catch(e) {
+      a = 8;
+      entered = true;
+      break;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo7() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      continue;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo8() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      a = 8;
+      doThrow();
+      continue;
+    } catch(e) {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+foo9() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      doThrow();
+    } catch(e) {
+      a = 8;
+      entered = true;
+      continue;
+    } finally {
+      b = 8 == a;
+      entered = true;
+      continue;
+    }
+  }
+}
+
+main() {
+  a = 0;
+  Expect.isTrue(foo1());
+  a = 0;
+  Expect.isTrue(foo2());
+  a = 0;
+  Expect.isTrue(foo3());
+  a = 0;
+  Expect.isTrue(foo4());
+  a = 0;
+  Expect.isTrue(foo5());
+  a = 0;
+  Expect.isTrue(foo6());
+  a = 0;
+  Expect.isTrue(foo7());
+  a = 0;
+  Expect.isTrue(foo8());
+  a = 0;
+  Expect.isTrue(foo9());
+}
diff --git a/tests/language/try_catch5_test.dart b/tests/language/try_catch5_test.dart
new file mode 100644
index 0000000..cf74a47
--- /dev/null
+++ b/tests/language/try_catch5_test.dart
@@ -0,0 +1,33 @@
+// 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.
+// Check that our SSA graph does have the try body a predecessor of a
+// try/finally.
+
+var a;
+
+foo1() {
+  var b = false;
+  var entered = false;
+  while (true) {
+    if (entered) return b;
+    b = 8 == a; // This expression should not be GVN'ed.
+    try {
+      try {
+        a = 8;
+        return;
+      } finally {
+        b = 8 == a;
+        entered = true;
+        continue;
+      }
+    } finally {
+      continue;
+    }
+  }
+}
+
+main() {
+  a = 0;
+  Expect.isTrue(foo1());
+}
diff --git a/tests/language/typed_selector2_test.dart b/tests/language/typed_selector2_test.dart
new file mode 100644
index 0000000..618f13a
--- /dev/null
+++ b/tests/language/typed_selector2_test.dart
@@ -0,0 +1,22 @@
+// 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.
+// Test for dart2js to handle a typed selector with a typedef as a
+// receiver type.
+
+getComparator() => (a, b) => 42;
+
+class A {
+  foo() => 42;
+}
+
+main() {
+  Comparator a = getComparator();
+  if (a(1, 2) != 42) {
+    // This call used to crash dart2js because 'foo' was a typed
+    // selector with a typedef as a receiver type.
+    a.foo();
+  }
+  var b = new A();
+  b.foo();
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 63ffc68..a2732a1 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -20,3 +20,7 @@
 crypto/hmac_sha256_test: Fail, OK
 crypto/sha1_test: Fail, OK
 crypto/sha256_test: Fail, OK
+
+# test issue 6512
+crypto/base64_test: Fail, OK
+crypto/hmac_md5_test: Fail, OK
diff --git a/tests/lib/mirrors/mirrors_test.dart b/tests/lib/mirrors/mirrors_test.dart
index 522e187..14ab436 100644
--- a/tests/lib/mirrors/mirrors_test.dart
+++ b/tests/lib/mirrors/mirrors_test.dart
@@ -5,9 +5,9 @@
 // TODO(rmacnak): Move the existing mirror tests here (a place for 
 // cross-implementation tests).
 
-#library("MirrorsTest.dart");
-#import("dart:mirrors");
-#import("../../../pkg/unittest/unittest.dart");
+library MirrorsTest;
+import "dart:mirrors";
+import "../../../pkg/unittest/lib/unittest.dart";
 
 var topLevelField;
 
@@ -21,7 +21,7 @@
 testFieldAccess(mirrors) {
   var instance = new Class();
 
-  var libMirror = mirrors.libraries["MirrorsTest.dart"];
+  var libMirror = mirrors.libraries["MirrorsTest"];
   var classMirror = libMirror.classes["Class"];
   var instMirror = reflect(instance);
 
@@ -64,7 +64,7 @@
 }
 
 testInvokeConstructor(mirrors) {
-  var libMirror = mirrors.libraries["MirrorsTest.dart"];
+  var libMirror = mirrors.libraries["MirrorsTest"];
   var classMirror = libMirror.classes["Class"];
   
   var future = classMirror.newInstance('', []);
diff --git a/tests/standalone/byte_array_test.dart b/tests/standalone/byte_array_test.dart
index c2a1165..da95209 100644
--- a/tests/standalone/byte_array_test.dart
+++ b/tests/standalone/byte_array_test.dart
@@ -23,7 +23,7 @@
 
 }
 
-void testUnsignedByteArrayRange() {
+void testUnsignedByteArrayRange(bool check_throws) {
   Uint8List byteArray;
   byteArray = new Uint8List(10);
 
@@ -32,16 +32,18 @@
   byteArray[1] = 0;
   Expect.equals(0, byteArray[1]);
 
-  Expect.throws(() {
-    byteArray[1] = 1.2;
-  });
   // These should eventually throw.
   byteArray[1] = 256;
   byteArray[1] = -1;
   byteArray[2] = -129;
+  if (check_throws) {
+    Expect.throws(() {
+      byteArray[1] = 1.2;
+    });
+  }
 }
 
-void testByteArrayRange() {
+void testByteArrayRange(bool check_throws) {
   Int8List byteArray;
   byteArray = new Int8List(10);
   byteArray[1] = 0;
@@ -50,12 +52,14 @@
   Expect.equals(-128, byteArray[2]);
   byteArray[3] = 127;
   Expect.equals(127, byteArray[3]);
-  Expect.throws(() {
-    byteArray[1] = 1.2;
-  });
   // This should eventually throw.
   byteArray[0] = 128;
   byteArray[4] = -129;
+  if (check_throws) {
+    Expect.throws(() {
+      byteArray[1] = 1.2;
+    });
+  }
 }
 
 void testSetRange() {
@@ -158,12 +162,14 @@
 main() {
   for (int i = 0; i < 2000; i++) {
     testCreateByteArray();
-    testByteArrayRange();
-    testUnsignedByteArrayRange();
+    testByteArrayRange(false);
+    testUnsignedByteArrayRange(false);
     testSetRange();
     testIndexOutOfRange();
     testIndexOf();
     testSubArray();
   }
+  testByteArrayRange(true);
+  testUnsignedByteArrayRange(true);
 }
 
diff --git a/tests/standalone/crypto/base64_test.dart b/tests/standalone/crypto/base64_test.dart
index 96de0c2..a4a020d 100644
--- a/tests/standalone/crypto/base64_test.dart
+++ b/tests/standalone/crypto/base64_test.dart
@@ -2,7 +2,7 @@
 // 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.
 
-#source("../../../lib/io/base64.dart");
+#source("../../../sdk/lib/io/base64.dart");
 
 void main() {
   String line;
diff --git a/tests/standalone/io/dart_std_io_pipe_test.dart b/tests/standalone/io/dart_std_io_pipe_test.dart
index 5264a72..aa9e89d 100644
--- a/tests/standalone/io/dart_std_io_pipe_test.dart
+++ b/tests/standalone/io/dart_std_io_pipe_test.dart
@@ -65,14 +65,14 @@
       }
 
       // Cleanup test directory.
-      dir.deleteRecursivelySync();
+      dir.deleteSync(recursive: true);
     };
     // Drain out and err streams so they close.
     process.stdout.onData = process.stdout.read;
     process.stderr.onData = process.stderr.read;
   });
   future.handleException((ProcessException error) {
-    dir.deleteRecursivelySync();
+    dir.deleteSync(recursive: true);
     Expect.fail(error.toString());
   });
 }
diff --git a/tests/standalone/io/directory_error_test.dart b/tests/standalone/io/directory_error_test.dart
index 96eaf32..cf90f91 100644
--- a/tests/standalone/io/directory_error_test.dart
+++ b/tests/standalone/io/directory_error_test.dart
@@ -137,10 +137,10 @@
 
 void testDeleteRecursivelyNonExistent(Directory temp, Function done) {
   Directory nonExistent = new Directory("${temp.path}/nonExistent");
-  Expect.throws(() => nonExistent.deleteRecursivelySync(),
+  Expect.throws(() => nonExistent.deleteSync(recursive: true),
                 (e) => checkDeleteRecursivelyNonExistentFileException(e));
 
-  nonExistent.deleteRecursively().handleException((e) {
+  nonExistent.delete(recursive: true).handleException((e) {
     checkDeleteRecursivelyNonExistentFileException(e);
     done();
     return true;
@@ -222,7 +222,7 @@
   renameDone.then((ignore) => Expect.fail('rename dir overwrite file'));
   renameDone.handleException((e) {
     Expect.isTrue(e is DirectoryIOException);
-    temp1.deleteRecursivelySync();
+    temp1.deleteSync(recursive: true);
     done();
     return true;
   });
@@ -237,7 +237,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x,y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
 
   // Run the test.
diff --git a/tests/standalone/io/directory_fuzz_test.dart b/tests/standalone/io/directory_fuzz_test.dart
index 3aa46d4..625e994 100644
--- a/tests/standalone/io/directory_fuzz_test.dart
+++ b/tests/standalone/io/directory_fuzz_test.dart
@@ -23,7 +23,7 @@
       doItSync(() {
         // Let's be a little careful. If the directory exists we don't
         // want to delete it and all its contents.
-        if (!d.existsSync()) d.deleteRecursivelySync();
+        if (!d.existsSync()) d.deleteSync(recursive: true);
       });
       typeMapping.forEach((k2, v2) {
         doItSync(() => d.renameSync(v2));
@@ -48,7 +48,7 @@
     }));
     futures.add(doItAsync(() {
       return d.exists().chain((res) {
-        if (!res) return d.deleteRecursively();
+        if (!res) return d.delete(recursive: true);
         return new Future.immediate(true);
       });
     }));
diff --git a/tests/standalone/io/directory_test.dart b/tests/standalone/io/directory_test.dart
index 7f29525..f3bd2bd 100644
--- a/tests/standalone/io/directory_test.dart
+++ b/tests/standalone/io/directory_test.dart
@@ -40,7 +40,7 @@
       Expect.isTrue(completed, "directory listing did not complete");
       Expect.isTrue(listedDir, "directory not found");
       Expect.isTrue(listedFile, "file not found");
-      directory.deleteRecursively().then((ignore) {
+      directory.delete(recursive: true).then((ignore) {
         f.exists().then((exists) => Expect.isFalse(exists));
         directory.exists().then((exists) => Expect.isFalse(exists));
         subDirectory.exists().then((exists) => Expect.isFalse(exists));
@@ -84,7 +84,7 @@
         lister.onError = (e) {
           Expect.isTrue(e is DirectoryIOException);
           if (++errors == 2) {
-            d.deleteRecursively();
+            d.delete(recursive: true);
           }
         };
         lister.onFile = (file) {
@@ -129,7 +129,7 @@
     new Directory("").createTemp().then((d) {
       d.delete().then((ignore) {
         setupFutureHandlers(d.delete());
-        setupFutureHandlers(d.deleteRecursively());
+        setupFutureHandlers(d.delete(recursive: true));
       });
     });
   }
@@ -152,12 +152,12 @@
           onError(e) {
             Expect.isTrue(e is DirectoryIOException);
             if (++errors == 2) {
-              d.deleteRecursively().then((ignore) => port.close());
+              d.delete(recursive: true).then((ignore) => port.close());
             }
             return true;
           }
           long.delete().handleException(onError);
-          long.deleteRecursively().handleException(onError);
+          long.delete(recursive: true).handleException(onError);
         });
     });
   }
@@ -166,7 +166,7 @@
     Directory d = new Directory("").createTempSync();
     d.deleteSync();
     Expect.throws(d.deleteSync);
-    Expect.throws(() => d.deleteRecursivelySync());
+    Expect.throws(() => d.deleteSync(recursive: true));
   }
 
   static void testDeleteTooLongNameSync() {
@@ -183,8 +183,8 @@
     }
     var long = new Directory("${buffer.toString()}");
     Expect.throws(long.deleteSync);
-    Expect.throws(() => long.deleteRecursivelySync());
-    d.deleteRecursivelySync();
+    Expect.throws(() => long.deleteSync(recursive: true));
+    d.deleteSync(recursive: true);
   }
 
   static void testDeleteSymlink() {
@@ -216,13 +216,13 @@
 
     Process.run(cmd, args).then((_) {
       // Delete the directory containing the junction.
-      b.deleteRecursivelySync();
+      b.deleteSync(recursive: true);
 
       // We should not have recursed through a_link into a.
       Expect.isTrue(f.existsSync());
 
       // Clean up after ourselves.
-      d.deleteRecursivelySync();
+      d.deleteSync(recursive: true);
     });
   }
 
@@ -470,7 +470,7 @@
   Expect.isTrue(subDir.existsSync());
   subDir.createSync();
   Expect.isTrue(subDir.existsSync());
-  temp.deleteRecursivelySync();
+  temp.deleteSync(recursive: true);
 }
 
 
@@ -488,7 +488,7 @@
           subDir.create().then((_) {
             subDir.exists().then((dirExists) {
               Expect.isTrue(dirExists);
-              temp.deleteRecursively().then((_) {
+              temp.delete(recursive: true).then((_) {
                 port.close();
               });
             });
@@ -510,7 +510,7 @@
   Expect.isTrue(file.existsSync());
   Expect.throws(new Directory(path).createSync,
                 (e) => e is DirectoryIOException);
-  temp.deleteRecursivelySync();
+  temp.deleteSync(recursive: true);
 }
 
 
@@ -527,7 +527,7 @@
         ..then((_) { Expect.fail("dir create should fail on existing file"); })
         ..handleException((e) {
             Expect.isTrue(e is DirectoryIOException);
-            temp.deleteRecursively().then((_) {
+            temp.delete(recursive: true).then((_) {
               port.close();
             });
             return true;
@@ -537,6 +537,32 @@
 }
 
 
+testCreateRecursiveSync() {
+  var temp = new Directory('').createTempSync();
+  var d = new Directory('${temp.path}/a/b/c');
+  d.createSync(recursive: true);
+  Expect.isTrue(new Directory('${temp.path}/a').existsSync());
+  Expect.isTrue(new Directory('${temp.path}/a/b').existsSync());
+  Expect.isTrue(new Directory('${temp.path}/a/b/c').existsSync());
+  temp.deleteSync(recursive: true);
+}
+
+
+testCreateRecursive() {
+  var port = new ReceivePort();
+  new Directory('').createTemp().then((temp) {
+    var d = new Directory('${temp.path}/a/b/c');
+    d.create(recursive: true).then((_) {
+      Expect.isTrue(new Directory('${temp.path}/a').existsSync());
+      Expect.isTrue(new Directory('${temp.path}/a/b').existsSync());
+      Expect.isTrue(new Directory('${temp.path}/a/b/c').existsSync());
+      temp.deleteSync(recursive: true);
+      port.close();
+    });
+  });
+}
+
+
 testRename() {
   var d = new Directory('');
   var temp1 = d.createTempSync();
@@ -552,7 +578,7 @@
     Expect.isTrue(temp1.existsSync());
     Expect.isTrue(temp4.existsSync());
     Expect.equals(temp1.path, temp4.path);
-    temp1.deleteRecursivelySync();
+    temp1.deleteSync(recursive: true);
   });
 }
 
@@ -565,5 +591,7 @@
   testCreateExisting();
   testCreateDirExistingFileSync();
   testCreateDirExistingFile();
+  testCreateRecursive();
+  testCreateRecursiveSync();
   testRename();
 }
diff --git a/tests/standalone/io/file_error_test.dart b/tests/standalone/io/file_error_test.dart
index 094064c..4a6a309 100644
--- a/tests/standalone/io/file_error_test.dart
+++ b/tests/standalone/io/file_error_test.dart
@@ -52,7 +52,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile");
 
@@ -75,7 +75,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile");
 
@@ -98,7 +98,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile");
 
@@ -141,7 +141,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentDirectory/newFile");
 
@@ -182,7 +182,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentDirectory");
 
@@ -224,7 +224,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentDirectory/newFile");
 
@@ -246,7 +246,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile3");
 
@@ -268,7 +268,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile4");
 
@@ -290,7 +290,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
   var file = new File("${temp.path}/nonExistentFile5");
 
@@ -323,7 +323,7 @@
   ReceivePort p = new ReceivePort();
   p.receive((x, y) {
     p.close();
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
 
   var file = new File("${temp.path}/test_file");
diff --git a/tests/standalone/io/file_fuzz_test.dart b/tests/standalone/io/file_fuzz_test.dart
index a7918fa..faed2ef 100644
--- a/tests/standalone/io/file_fuzz_test.dart
+++ b/tests/standalone/io/file_fuzz_test.dart
@@ -84,7 +84,7 @@
     }
     opened.closeSync();
   }
-  temp.deleteRecursivelySync();
+  temp.deleteSync(recursive: true);
 }
 
 fuzzAsyncRandomAccessMethods() {
@@ -115,7 +115,7 @@
     for (var opened in openedFiles) {
       opened.closeSync();
     }
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
 }
 
diff --git a/tests/standalone/io/file_output_stream_test.dart b/tests/standalone/io/file_output_stream_test.dart
index 75e2732..412ea5c 100644
--- a/tests/standalone/io/file_output_stream_test.dart
+++ b/tests/standalone/io/file_output_stream_test.dart
@@ -38,7 +38,7 @@
   // Create a port for waiting on the final result of this test.
   ReceivePort done = new ReceivePort();
   done.receive((message, replyTo) {
-    tempDirectory.deleteRecursively().then((ignore) => done.close());
+    tempDirectory.delete(recursive: true).then((ignore) => done.close());
   });
 
   new Directory('').createTemp().then((temp) {
diff --git a/tests/standalone/io/file_system_links_test.dart b/tests/standalone/io/file_system_links_test.dart
index e0f90e0..63c6a4d 100644
--- a/tests/standalone/io/file_system_links_test.dart
+++ b/tests/standalone/io/file_system_links_test.dart
@@ -31,7 +31,7 @@
     new File(y).createSync();
     Expect.isTrue(new File(x).existsSync());
     Expect.isTrue(new File(y).existsSync());
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
 }
 
@@ -53,7 +53,7 @@
       new File(y).deleteSync();
       Expect.isTrue(new File(x).existsSync());
       Expect.isFalse(new File(y).existsSync());
-      temp.deleteRecursivelySync();
+      temp.deleteSync(recursive: true);
     });
   });
 }
@@ -74,7 +74,7 @@
       Expect.listEquals(data, read);
       var read2 = new File(x).readAsBytesSync();
       Expect.listEquals(data, read2);
-      temp.deleteRecursivelySync();
+      temp.deleteSync(recursive: true);
     };
   });
 }
@@ -88,7 +88,7 @@
     Expect.isFalse(new Directory(x).existsSync());
     Expect.isFalse(new Directory(y).existsSync());
     Expect.throws(new Directory(y).createSync);
-    temp.deleteRecursivelySync();
+    temp.deleteSync(recursive: true);
   });
 }
 
@@ -108,11 +108,11 @@
     Expect.isTrue(temp2.existsSync());
     createLink(temp2.path, y, true, () {
       Expect.isTrue(link.existsSync());
-      temp.deleteRecursivelySync();
+      temp.deleteSync(recursive: true);
       Expect.isFalse(link.existsSync());
       Expect.isTrue(temp2.existsSync());
       Expect.isTrue(new File(x).existsSync());
-      temp2.deleteRecursivelySync();
+      temp2.deleteSync(recursive: true);
     });
   });
 }
@@ -136,8 +136,8 @@
       Expect.isTrue(files[0].endsWith(x));
       Expect.equals(1, dirs.length);
       Expect.isTrue(dirs[0].endsWith(y));
-      temp.deleteRecursivelySync();
-      temp2.deleteRecursivelySync();
+      temp.deleteSync(recursive: true);
+      temp2.deleteSync(recursive: true);
     };
   });
 }
@@ -164,7 +164,7 @@
       Expect.equals(0, dirs.length);
       Expect.equals(1, errors.length);
       Expect.isTrue(errors[0].toString().contains(link));
-      temp.deleteRecursivelySync();
+      temp.deleteSync(recursive: true);
     };
   });
 }
diff --git a/tests/standalone/io/file_test.dart b/tests/standalone/io/file_test.dart
index 02ee65f..2f210f4 100644
--- a/tests/standalone/io/file_test.dart
+++ b/tests/standalone/io/file_test.dart
@@ -36,7 +36,7 @@
   }
 
   static void deleteTempDirectory() {
-    tempDirectory.deleteRecursivelySync();
+    tempDirectory.deleteSync(recursive: true);
   }
 
   // Test for file read functionality.
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart
index a37d025..bca0def 100644
--- a/tests/standalone/io/http_advanced_test.dart
+++ b/tests/standalone/io/http_advanced_test.dart
@@ -255,7 +255,8 @@
   bool _chunkedEncoding = false;
 }
 
-void testHost() {
+Future testHost() {
+  Completer completer = new Completer();
   TestServerMain testServerMain = new TestServerMain();
   testServerMain.setServerStartedHandler((int port) {
     HttpClient httpClient = new HttpClient();
@@ -288,12 +289,15 @@
       Expect.equals(HttpStatus.OK, response.statusCode);
       httpClient.shutdown();
       testServerMain.shutdown();
+      completer.complete(true);
     };
   });
   testServerMain.start();
+  return completer.future;
 }
 
-void testExpires() {
+Future testExpires() {
+  Completer completer = new Completer();
   TestServerMain testServerMain = new TestServerMain();
   testServerMain.setServerStartedHandler((int port) {
     int responses = 0;
@@ -309,6 +313,7 @@
       if (responses == 2) {
         httpClient.shutdown();
         testServerMain.shutdown();
+        completer.complete(true);
       }
     }
 
@@ -322,9 +327,11 @@
     };
   });
   testServerMain.start();
+  return completer.future;
 }
 
-void testContentType() {
+Future testContentType() {
+  Completer completer = new Completer();
   TestServerMain testServerMain = new TestServerMain();
   testServerMain.setServerStartedHandler((int port) {
     int responses = 0;
@@ -343,6 +350,7 @@
       if (responses == 2) {
         httpClient.shutdown();
         testServerMain.shutdown();
+        completer.complete(true);
       }
     }
 
@@ -370,9 +378,11 @@
     };
   });
   testServerMain.start();
+  return completer.future;
 }
 
-void testCookies() {
+Future testCookies() {
+  Completer completer = new Completer();
   TestServerMain testServerMain = new TestServerMain();
   testServerMain.setServerStartedHandler((int port) {
     int responses = 0;
@@ -408,13 +418,16 @@
       conn2.onResponse = (HttpClientResponse ignored) {
         httpClient.shutdown();
         testServerMain.shutdown();
+        completer.complete(true);
       };
     };
   });
   testServerMain.start();
+  return completer.future;
 }
 
-void testFlush() {
+Future testFlush() {
+  Completer completer = new Completer();
   TestServerMain testServerMain = new TestServerMain();
   testServerMain.setServerStartedHandler((int port) {
     HttpClient httpClient = new HttpClient();
@@ -428,15 +441,28 @@
       Expect.equals(HttpStatus.OK, response.statusCode);
       httpClient.shutdown();
       testServerMain.shutdown();
+      completer.complete(true);
     };
   });
   testServerMain.start();
+  return completer.future;
 }
 
 void main() {
-  testHost();
-  testExpires();
-  testContentType();
-  testCookies();
-  testFlush();
+  print('testHost()');
+  testHost().chain((_) {
+  print('testExpires()');
+    return testExpires().chain((_) {
+      print('testContentType()');
+      return testContentType().chain((_) {
+        print('testCookies()');
+        return testCookies().chain((_) {
+          print('testFlush()');
+          return testFlush();
+        });
+      });
+    });
+  }).then((_) {
+    print('done');
+  });
 }
diff --git a/tests/standalone/io/http_date_test.dart b/tests/standalone/io/http_date_test.dart
index 81ed109..1f4c685 100644
--- a/tests/standalone/io/http_date_test.dart
+++ b/tests/standalone/io/http_date_test.dart
@@ -2,17 +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.
 
-#import("dart:math");
+import "dart:math";
 
-#source("../../../lib/io/input_stream.dart");
-#source("../../../lib/io/output_stream.dart");
-#source("../../../lib/io/chunked_stream.dart");
-#source("../../../lib/io/string_stream.dart");
-#source("../../../lib/io/stream_util.dart");
-#source("../../../lib/io/http.dart");
-#source("../../../lib/io/http_impl.dart");
-#source("../../../lib/io/http_parser.dart");
-#source("../../../lib/io/http_utils.dart");
+part "../../../sdk/lib/io/input_stream.dart";
+part "../../../sdk/lib/io/output_stream.dart";
+part "../../../sdk/lib/io/chunked_stream.dart";
+part "../../../sdk/lib/io/string_stream.dart";
+part "../../../sdk/lib/io/stream_util.dart";
+part "../../../sdk/lib/io/http.dart";
+part "../../../sdk/lib/io/http_impl.dart";
+part "../../../sdk/lib/io/http_parser.dart";
+part "../../../sdk/lib/io/http_utils.dart";
 
 void testParseHttpDate() {
   Date date;
diff --git a/tests/standalone/io/http_headers_test.dart b/tests/standalone/io/http_headers_test.dart
index feb579a..6e81fee 100644
--- a/tests/standalone/io/http_headers_test.dart
+++ b/tests/standalone/io/http_headers_test.dart
@@ -2,17 +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.
 
-#import('dart:math');
+import 'dart:math';
 
-#source("../../../lib/io/input_stream.dart");
-#source("../../../lib/io/output_stream.dart");
-#source("../../../lib/io/chunked_stream.dart");
-#source("../../../lib/io/string_stream.dart");
-#source("../../../lib/io/stream_util.dart");
-#source("../../../lib/io/http.dart");
-#source("../../../lib/io/http_impl.dart");
-#source("../../../lib/io/http_parser.dart");
-#source("../../../lib/io/http_utils.dart");
+part "../../../sdk/lib/io/input_stream.dart";
+part "../../../sdk/lib/io/output_stream.dart";
+part "../../../sdk/lib/io/chunked_stream.dart";
+part "../../../sdk/lib/io/string_stream.dart";
+part "../../../sdk/lib/io/stream_util.dart";
+part "../../../sdk/lib/io/http.dart";
+part "../../../sdk/lib/io/http_impl.dart";
+part "../../../sdk/lib/io/http_parser.dart";
+part "../../../sdk/lib/io/http_utils.dart";
 
 void testMultiValue() {
   _HttpHeaders headers = new _HttpHeaders();
diff --git a/tests/standalone/io/http_parser_test.dart b/tests/standalone/io/http_parser_test.dart
index 1c6538d..1145ec7 100644
--- a/tests/standalone/io/http_parser_test.dart
+++ b/tests/standalone/io/http_parser_test.dart
@@ -2,10 +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.
 
-#import('dart:math');
-#import('dart:scalarlist');
+import 'dart:math';
+import 'dart:scalarlist';
 
-#source("../../../lib/io/http_parser.dart");
+part '../../../sdk/lib/io/http_parser.dart';
 
 class HttpParserTest {
   static void runAllTests() {
@@ -86,8 +86,8 @@
         int remaining = requestData.length - pos;
         int writeLength = min(chunkSize, remaining);
         written += writeLength;
-        int parsed = httpParser.writeList(requestData, pos, writeLength);
-        unparsed = writeLength - parsed;
+        httpParser.writeList(requestData, pos, writeLength);
+        unparsed = httpParser.readUnparsedData().length;
         if (httpParser.upgrade) {
           unparsed += requestData.length - written;
           break;
@@ -133,7 +133,9 @@
     void testWrite(List<int> requestData, [int chunkSize = -1]) {
       if (chunkSize == -1) chunkSize = requestData.length;
       reset();
-      for (int pos = 0; pos < requestData.length; pos += chunkSize) {
+      for (int pos = 0;
+           pos < requestData.length && !errorCalled;
+           pos += chunkSize) {
         int remaining = requestData.length - pos;
         int writeLength = min(chunkSize, remaining);
         httpParser.writeList(requestData, pos, writeLength);
@@ -230,8 +232,8 @@
         int remaining = requestData.length - pos;
         int writeLength = min(chunkSize, remaining);
         written += writeLength;
-        int parsed = httpParser.writeList(requestData, pos, writeLength);
-        unparsed = writeLength - parsed;
+        httpParser.writeList(requestData, pos, writeLength);
+        unparsed = httpParser.readUnparsedData().length;
         if (httpParser.upgrade) {
           unparsed += requestData.length - written;
           break;
@@ -280,7 +282,9 @@
     void testWrite(List<int> requestData, [int chunkSize = -1]) {
       if (chunkSize == -1) chunkSize = requestData.length;
       reset();
-      for (int pos = 0; pos < requestData.length; pos += chunkSize) {
+      for (int pos = 0;
+           pos < requestData.length && !errorCalled;
+           pos += chunkSize) {
         int remaining = requestData.length - pos;
         int writeLength = min(chunkSize, remaining);
         httpParser.writeList(requestData, pos, writeLength);
diff --git a/tests/standalone/io/http_server_handler_test.dart b/tests/standalone/io/http_server_handler_test.dart
index 52aed5c..e44a6cf 100644
--- a/tests/standalone/io/http_server_handler_test.dart
+++ b/tests/standalone/io/http_server_handler_test.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 //
 
-#import("dart:io");
-#import("dart:isolate");
+import 'dart:io';
+import 'dart:isolate';
 
 class Handler1 {
   void onRequest(HttpRequest request, HttpResponse response) {
diff --git a/tests/standalone/io/http_session_test.dart b/tests/standalone/io/http_session_test.dart
index dd2e059..2b7f81c 100644
--- a/tests/standalone/io/http_session_test.dart
+++ b/tests/standalone/io/http_session_test.dart
@@ -10,6 +10,7 @@
   var id = cookies.reduce(null, (last, cookie) {
     if (last != null) return last;
     if (cookie.name.toUpperCase() == SESSION_ID) {
+      Expect.isTrue(cookie.httpOnly);
       return cookie.value;
     }
     return null;
diff --git a/tests/standalone/io/mime_multipart_parser_test.dart b/tests/standalone/io/mime_multipart_parser_test.dart
index b46e5d1..122e075 100644
--- a/tests/standalone/io/mime_multipart_parser_test.dart
+++ b/tests/standalone/io/mime_multipart_parser_test.dart
@@ -2,10 +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.
 
-#import('dart:math');
+import 'dart:math';
 
-#source("../../../lib/io/http_parser.dart");
-#source("../../../lib/io/mime_multipart_parser.dart");
+part "../../../sdk/lib/io/http_parser.dart";
+part "../../../sdk/lib/io/mime_multipart_parser.dart";
 
 void testParse(String message,
                String boundary,
diff --git a/tests/standalone/io/regress-6521.dart b/tests/standalone/io/regress-6521.dart
new file mode 100644
index 0000000..a02025d
--- /dev/null
+++ b/tests/standalone/io/regress-6521.dart
@@ -0,0 +1,41 @@
+// 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.
+//
+// Regression test for http://code.google.com/p/dart/issues/detail?id=6393.
+
+import "dart:io";
+import "dart:uri";
+
+var client = new HttpClient();
+var clientRequest;
+
+void main() {
+  var server = new HttpServer();
+  server.listen("127.0.0.1", 0);
+  server.defaultRequestHandler = (req, rsp) {
+    req.inputStream.onData = () {
+      req.inputStream.read();
+      rsp.outputStream.close();
+    };
+    req.inputStream.onClosed = () {
+      client.shutdown();
+      server.close();
+    };
+  };
+
+  var connection = client.openUrl(
+      "POST",
+      new Uri.fromString("http://localhost:${server.port}/"));
+  connection.onRequest = (request) {
+    // Keep a reference to the client request object.
+    clientRequest = request;
+    request.outputStream.write([0]);
+  };
+  connection.onResponse = (response) {
+    response.inputStream.onClosed = () {
+      // Wait with closing the client request until the response is done.
+      clientRequest.outputStream.close();
+    };
+  };
+}
diff --git a/tests/standalone/io/string_stream_test.dart b/tests/standalone/io/string_stream_test.dart
index e9bb7af..f335291 100644
--- a/tests/standalone/io/string_stream_test.dart
+++ b/tests/standalone/io/string_stream_test.dart
@@ -11,20 +11,26 @@
                     0xc2, 0x80,
                     0xdf, 0xbf,
                     0xe0, 0xa0, 0x80,
-                    0xef, 0xbf, 0xbf];
+                    0xef, 0xbf, 0xbf,
+                    0xf0, 0x9d, 0x84, 0x9e];
   ListInputStream s = new ListInputStream();
   s.write(data);
   s.markEndOfStream();
   StringInputStream stream = new StringInputStream(s);
   void stringData() {
     String s = stream.read();
-    Expect.equals(6, s.length);
+    Expect.equals(8, s.length);
     Expect.equals(new String.fromCharCodes([0x01]), s[0]);
     Expect.equals(new String.fromCharCodes([0x7f]), s[1]);
     Expect.equals(new String.fromCharCodes([0x80]), s[2]);
     Expect.equals(new String.fromCharCodes([0x7ff]), s[3]);
     Expect.equals(new String.fromCharCodes([0x800]), s[4]);
     Expect.equals(new String.fromCharCodes([0xffff]), s[5]);
+    Expect.equals(new String.fromCharCodes([0xffff]), s[5]);
+
+    // Surrogate pair for U+1D11E.
+    Expect.equals(new String.fromCharCodes([0xd834]), s[6]);
+    Expect.equals(new String.fromCharCodes([0xdd1e]), s[7]);
   }
   stream.onData = stringData;
 }
@@ -300,7 +306,7 @@
 }
 
 testEncodingErrorWithHandler() {
-  var port = new ReceivePort();    
+  var port = new ReceivePort();
   var errors = 0;
   var expected = [206, 187, 120, 46, 32, 120, 10];
   ListInputStream input = new ListInputStream();
diff --git a/tests/standalone/io/url_encoding_test.dart b/tests/standalone/io/url_encoding_test.dart
index 7148c77..f491d5c 100644
--- a/tests/standalone/io/url_encoding_test.dart
+++ b/tests/standalone/io/url_encoding_test.dart
@@ -2,16 +2,16 @@
 // 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:utf");
-#source("../../../lib/io/input_stream.dart");
-#source("../../../lib/io/output_stream.dart");
-#source("../../../lib/io/chunked_stream.dart");
-#source("../../../lib/io/string_stream.dart");
-#source("../../../lib/io/stream_util.dart");
-#source("../../../lib/io/http.dart");
-#source("../../../lib/io/http_impl.dart");
-#source("../../../lib/io/http_parser.dart");
-#source("../../../lib/io/http_utils.dart");
+import "dart:utf";
+part "../../../sdk/lib/io/input_stream.dart";
+part "../../../sdk/lib/io/output_stream.dart";
+part "../../../sdk/lib/io/chunked_stream.dart";
+part "../../../sdk/lib/io/string_stream.dart";
+part "../../../sdk/lib/io/stream_util.dart";
+part "../../../sdk/lib/io/http.dart";
+part "../../../sdk/lib/io/http_impl.dart";
+part "../../../sdk/lib/io/http_parser.dart";
+part "../../../sdk/lib/io/http_utils.dart";
 
 void testParseEncodedString() {
   String encodedString = 'foo+bar%20foobar%25%26';
diff --git a/tests/standalone/io/web_socket_protocol_processor_test.dart b/tests/standalone/io/web_socket_protocol_processor_test.dart
index 568a705..46356c0 100644
--- a/tests/standalone/io/web_socket_protocol_processor_test.dart
+++ b/tests/standalone/io/web_socket_protocol_processor_test.dart
@@ -2,10 +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.
 
-#import("dart:math");
+import "dart:math";
 
-#source("../../../lib/io/websocket.dart");
-#source("../../../lib/io/websocket_impl.dart");
+part "../../../sdk/lib/io/websocket.dart";
+part "../../../sdk/lib/io/websocket_impl.dart";
 
 class WebSocketFrame {
   WebSocketFrame(int opcode, List<int> data);
diff --git a/tests/standalone/package/package_isolate_test.dart b/tests/standalone/package/package_isolate_test.dart
index a94a268..96e304f 100644
--- a/tests/standalone/package/package_isolate_test.dart
+++ b/tests/standalone/package/package_isolate_test.dart
@@ -3,10 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 library package_isolate_test;
-
 import 'package:shared.dart' as shared;
 import 'dart:isolate';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 expectResponse() {
   port.receive(expectAsync2((msg, r) {
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 265fae8..7008256 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -2,6 +2,8 @@
 # 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.
 
+io/http_basic_test: Pass, Timeout  # Issue 6393
+
 out_of_memory_test: Skip # Issue 2345
 
 package/invalid_uri_test: Fail, OK # Fails intentionally
@@ -25,7 +27,6 @@
 # This is expected as MacOS by default runs with a very low number
 # of allowed open files ('ulimit -n' says something like 256).
 io/socket_many_connections_test: Skip
-io/http_proxy_test: Fail, Pass # http://dartbug.com/5717
 
 [ $runtime == vm && $system == windows ]
 io/file_system_links_test: Skip  # No links on Windows.
diff --git a/tests/utils/dummy_compiler_test.dart b/tests/utils/dummy_compiler_test.dart
index 7389be8..d0a7797 100644
--- a/tests/utils/dummy_compiler_test.dart
+++ b/tests/utils/dummy_compiler_test.dart
@@ -4,8 +4,8 @@
 
 // Smoke test of the dart2js compiler API.
 
-#import('../../lib/compiler/compiler.dart');
-#import('dart:uri');
+import '../../sdk/lib/_internal/compiler/compiler.dart';
+import 'dart:uri';
 
 Future<String> provider(Uri uri) {
   Completer<String> completer = new Completer<String>();
@@ -15,7 +15,8 @@
   } else if (uri.scheme == "lib") {
     if (uri.path.endsWith("/core.dart")) {
       source = """#library('core');
-                  class Object{}
+                  class Object {}
+                  class Type {}
                   class bool {}
                   class num {}
                   class int {}
@@ -55,8 +56,8 @@
 
 main() {
   String code = compile(new Uri.fromComponents(scheme: 'main'),
-                        new Uri.fromComponents(scheme: 'lib'),
-                        new Uri.fromComponents(scheme: 'package'),
+                        new Uri.fromComponents(scheme: 'lib', path: '/'),
+                        new Uri.fromComponents(scheme: 'package', path: '/'),
                         provider, handler).value;
   if (code === null) {
     throw 'Compilation failed';
diff --git a/tests/utils/recursive_import_test.dart b/tests/utils/recursive_import_test.dart
index fdf5fb4..0ad898c 100644
--- a/tests/utils/recursive_import_test.dart
+++ b/tests/utils/recursive_import_test.dart
@@ -4,8 +4,8 @@
 
 // Test of "recursive" imports using the dart2js compiler API.
 
-#import('../../lib/compiler/compiler.dart');
-#import('dart:uri');
+import '../../sdk/lib/_internal/compiler/compiler.dart';
+import 'dart:uri';
 
 const CORE_LIB = """
 library core;
@@ -20,6 +20,7 @@
 class Map {}
 class Closure {}
 class Dynamic_ {}
+class Type {}
 class Null {}
 getRuntimeTypeInfo(o) {}
 setRuntimeTypeInfo(o, i) {}
@@ -78,8 +79,8 @@
   }
 
   String code = compile(new Uri.fromComponents(scheme: 'main'),
-                        new Uri.fromComponents(scheme: 'lib'),
-                        new Uri.fromComponents(scheme: 'package'),
+                        new Uri.fromComponents(scheme: 'lib', path: '/'),
+                        new Uri.fromComponents(scheme: 'package', path: '/'),
                         provider, handler).value;
   Expect.isNull(code);
   Expect.isTrue(10 < count);
diff --git a/tests/utils/uri_test.dart b/tests/utils/uri_test.dart
index 38d79c8..7acc5cf 100644
--- a/tests/utils/uri_test.dart
+++ b/tests/utils/uri_test.dart
@@ -2,10 +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.
 
-#library('uriTest');
+library uriTest;
 
-#import('../../lib/utf/utf.dart');
-#import('../../lib/uri/uri.dart');
+import 'dart:utf';
+import 'dart:uri';
 
 testUri(String uri, bool isAbsolute) {
   Expect.equals(isAbsolute, new Uri.fromString(uri).isAbsolute());
diff --git a/tests/utils/utf_test.dart b/tests/utils/utf_test.dart
new file mode 100644
index 0000000..6441789
--- /dev/null
+++ b/tests/utils/utf_test.dart
@@ -0,0 +1,14 @@
+// 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 utf_test;
+import 'dart:utf';
+
+main() {
+  String str = codepointsToString([0x1d537]);
+  // String.charCodes gives 16-bit code units, but stringToCodepoints gives
+  // back the original code points.
+  Expect.listEquals([0xd835, 0xdd37], str.charCodes);
+  Expect.listEquals([0x1d537], stringToCodepoints(str));
+}
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index d06160b..e5bbdb6 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -17,9 +17,6 @@
 [ $compiler == dart2js && $browser ]
 *: Skip
 
-[ $runtime == dartium || $runtime == drt ]
-utf8_test: Fail # TRIAGE
-
 [ $runtime == vm ]
 *_layout_test: Skip
 
@@ -27,6 +24,16 @@
 *_layout_test: Skip
 
 [ $compiler == dartc ]
+# dart2js issue 6323
+dummy_compiler_test: Fail, OK
+recursive_import_test: Fail, OK
+txt_layout_test: Fail, OK
+png_layout_test: Fail, OK
+
+# test issue 6512
+json_test: Fail, OK
+utf8_test: Fail, OK
+
 
 [ $compiler == dart2dart ]
 # Skip until we stabilize language tests.
diff --git a/tools/VERSION b/tools/VERSION
index 91a307d..1858bc2 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 2
-BUILD 2
-PATCH 1
+BUILD 3
+PATCH 0
diff --git a/tools/bots/pub.py b/tools/bots/pub.py
index 9d40778..e101783 100755
--- a/tools/bots/pub.py
+++ b/tools/bots/pub.py
@@ -41,8 +41,7 @@
     print 'Generating API Docs: %s' % (' '.join(args))
     bot.RunProcess(args)
 
-  # TODO(rnystrom): Eventually test other targets here like 'utils'?
-  bot.RunTest('pub', build_info, ['pub'])
+  bot.RunTest('pub', build_info, ['pub', 'pkg'])
 
 
 if __name__ == '__main__':
diff --git a/tools/create_sdk.py b/tools/create_sdk.py
index 857ba0e..c42f3e8 100755
--- a/tools/create_sdk.py
+++ b/tools/create_sdk.py
@@ -38,8 +38,6 @@
 # ......scalarlist/
 # ....pkg/
 # ......args/
-# ......compiler/
-# ......dartdoc/
 #.......htmlescape/
 # ......intl/
 # ......logging/
@@ -106,7 +104,7 @@
 
 def CopyDart2Js(build_dir, sdk_root, version):
   if version:
-    ReplaceInFiles([os.path.join(sdk_root, 'pkg', 'compiler',
+    ReplaceInFiles([os.path.join(sdk_root, 'lib', '_internal', 'compiler',
                                  'implementation', 'compiler.dart')],
                    [(r"BUILD_ID = 'build number could not be determined'",
                      r"BUILD_ID = '%s'" % version)])
@@ -115,34 +113,18 @@
     Copy(os.path.join(build_dir, 'dart2js.bat'), dart2js)
     dartdoc = os.path.join(sdk_root, 'bin', 'dartdoc.bat')
     Copy(os.path.join(build_dir, 'dartdoc.bat'), dartdoc)
-    # TODO(dgrove) - fix this once issue 4788 is addressed.
-    ReplaceInFiles([dart2js],
-                   [(r'%SCRIPTPATH%\.\.\\\.\.\\lib', r'%SCRIPTPATH%..\\pkg')])
-    ReplaceInFiles([dartdoc],
-                   [(r'%SCRIPTPATH%\.\.\\\.\.\\pkg', r'%SCRIPTPATH%..\\pkg')])
   else:
     dart2js = os.path.join(sdk_root, 'bin', 'dart2js')
     Copy(os.path.join(build_dir, 'dart2js'), dart2js)
     dartdoc = os.path.join(sdk_root, 'bin', 'dartdoc')
     Copy(os.path.join(build_dir, 'dartdoc'), dartdoc)
 
-    # TODO(dgrove) - fix this once issue 4788 is addressed.
-    ReplaceInFiles([dart2js],
-                   [(r'\$BIN_DIR/\.\./\.\./lib', r'$BIN_DIR/../pkg')])
-    ReplaceInFiles([dartdoc],
-                   [(r'\$BIN_DIR/\.\./\.\.', r'$BIN_DIR/..')])
-
     # TODO(ahe): Enable for Windows as well.
     subprocess.call([os.path.join(build_dir, 'gen_snapshot'),
-
-                     # TODO(ahe): Remove option when
-                     # http://dartbug.com/5989 is fixed.
-                     '--optimization_counter_threshold=-1',
-
                      '--script_snapshot=%s' %
-                     os.path.join(sdk_root, 'pkg', 'compiler',
+                     os.path.join(sdk_root, 'lib', '_internal', 'compiler',
                                   'implementation', 'dart2js.dart.snapshot'),
-                     os.path.join(sdk_root, 'pkg', 'compiler',
+                     os.path.join(sdk_root, 'lib', '_internal', 'compiler',
                                   'implementation', 'dart2js.dart')])
 
 
@@ -226,7 +208,7 @@
   for library in ['_internal', 'collection', 'core', 'coreimpl', 'crypto', 'io',
                   'isolate', join('html', 'dart2js'), join('html', 'dartium'),
                   'json', 'math', 'mirrors', 'scalarlist', 'uri', 'utf']:
-    copytree(join(HOME, 'lib', library), join(LIB, library),
+    copytree(join(HOME, 'sdk', 'lib', library), join(LIB, library),
              ignore=ignore_patterns('*.svn', 'doc', '*.py', '*.gypi', '*.sh'))
 
 
@@ -238,34 +220,12 @@
   # Create and populate pkg/{args, intl, logging, meta, unittest}
   #
 
-  for library in ['args', 'htmlescape', 'dartdoc', 'intl', 'logging',
+  for library in ['args', 'htmlescape', 'intl', 'logging',
                   'meta', 'unittest']:
     copytree(join(HOME, 'pkg', library), join(PKG, library),
              ignore=ignore_patterns('*.svn', 'doc', 'docs',
                                     '*.py', '*.gypi', '*.sh'))
 
-  # TODO(dgrove): Remove this once issue 4788 is addressed.
-  copytree(join(HOME, 'lib', 'compiler'), join(PKG, 'compiler'),
-             ignore=ignore_patterns('*.svn', 'doc', '*.py', '*.gypi', '*.sh'))
-
-  ReplaceInFiles(
-        [join(LIB, '_internal', 'libraries.dart')],
-        [('"compiler/', '"../pkg/compiler/')])
-
-  # Fixup dartdoc
-  # TODO(dgrove): Remove this once issue 4788 is addressed.
-  ReplaceInFiles([
-      join(PKG, 'dartdoc', 'lib', 'src', 'mirrors', 'dart2js_mirror.dart'),
-      join(PKG, 'dartdoc', 'lib', 'mirrors_util.dart'),
-      join(PKG, 'dartdoc', 'lib', 'classify.dart'),
-      join(PKG, 'dartdoc', 'lib', 'src', 'client', 'client-live-nav.dart'),
-      join(PKG, 'dartdoc', 'lib', 'src', 'client', 'client-static.dart'),
-      join(PKG, 'dartdoc', 'lib', 'dartdoc.dart'),
-    ], [
-      ("../../lib/compiler",
-       "../../pkg/compiler"),
-    ])
-
   # Create and copy tools.
   UTIL = join(SDK_tmp, 'util')
   os.makedirs(UTIL)
@@ -312,6 +272,25 @@
   # Copy dart2js.
   CopyDart2Js(build_dir, SDK_tmp, version)
 
+  # TODO(dgrove) remove this once we get sdk/bin created
+  if (utils.GuessOS() == 'win32'):
+    ReplaceInFiles([join(SDK_tmp, 'bin', 'dart2js.bat'),
+                    join(SDK_tmp, 'bin', 'dartdoc.bat'),
+                    join(SDK_tmp, 'bin', 'pub.bat')],
+                   [(r'..\\..\\sdk\\lib', r'..\lib')])
+  else:
+    ReplaceInFiles([join(SDK_tmp, 'bin', 'dart2js'),
+                    join(SDK_tmp, 'bin', 'dartdoc'),
+                    join(SDK_tmp, 'bin', 'pub')],
+                   [('../../sdk/lib', '../lib')])
+
+  # Fix up dartdoc.
+  # TODO(dgrove): Remove this once sdk and dart-sdk match.
+  ReplaceInFiles([join(SDK_tmp, 'lib', '_internal', 'dartdoc',
+                       'bin', 'dartdoc.dart')],
+                 [("../../../../../pkg/args/lib/args.dart",
+                   "../../../../pkg/args/lib/args.dart")])
+
   # Write the 'version' file
   versionFile = open(os.path.join(SDK_tmp, 'version'), 'w')
   versionFile.write(version + '\n')
diff --git a/tools/gyp/configurations_make.gypi b/tools/gyp/configurations_make.gypi
index 099cd20..6900999 100644
--- a/tools/gyp/configurations_make.gypi
+++ b/tools/gyp/configurations_make.gypi
@@ -27,6 +27,7 @@
           '-fPIC',
           '-fvisibility=hidden',
           '-fvisibility-inlines-hidden',
+          '-fno-omit-frame-pointer',
         ],
         'ldflags': [
           '-rdynamic',
diff --git a/tools/testing/dart/browser_test.dart b/tools/testing/dart/browser_test.dart
index fc0d05b..ec6d9a8 100644
--- a/tools/testing/dart/browser_test.dart
+++ b/tools/testing/dart/browser_test.dart
@@ -47,19 +47,17 @@
 
 String wrapDartTestInLibrary(Path test) =>
 """
-#library('libraryWrapper');
-#source('$test');
+library libraryWrapper;
+part '$test';
 """;
 
 String dartTestWrapper(Path dartHome, Path library) =>
 """
-#library('test');
+library test;
 
-#import('${dartHome.append('pkg/unittest/unittest.dart')}', prefix: 'unittest');
-#import('${dartHome.append('pkg/unittest/html_config.dart')}',
-        prefix: 'config');
-
-#import('${library}', prefix: "Test");
+import '${dartHome.append('pkg/unittest/lib/unittest.dart')}' as unittest;
+import '${dartHome.append('pkg/unittest/lib/html_config.dart')}' as config;
+import '${library}' as Test;
 
 main() {
   config.useHtmlConfiguration();
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index dd639df..cf13237 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -407,6 +407,11 @@
     }
 
     Set<String> expectations = testExpectations.expectations(testName);
+    if (info.hasCompileError &&
+        TestUtils.isBrowserRuntime(configuration['runtime'])) {
+      SummaryReport.addCompileErrorSkipTest();
+      return;
+    }
     if (configuration['report']) {
       // Tests with multiple VMOptions are counted more than once.
       for (var dummy in getVmOptions(optionsFromFile)) {
@@ -422,11 +427,6 @@
       enqueueStandardTest(info, testName, expectations);
     } else if (TestUtils.isBrowserRuntime(configuration['runtime'])) {
       bool isWrappingRequired = configuration['compiler'] != 'dart2js';
-      if (configuration['runtime'] == 'ff' &&
-          Platform.operatingSystem == 'windows') {
-        // TODO(ahe): Investigate why this doesn't work on Windows.
-        isWrappingRequired = true;
-      }
       enqueueBrowserTest(info, testName, expectations, isWrappingRequired);
     } else {
       enqueueStandardTest(info, testName, expectations);
@@ -976,13 +976,13 @@
     RegExp staticCleanRegExp = const RegExp(r"// @static-clean");
     RegExp leadingHashRegExp = const RegExp(r"^#", multiLine: true);
     RegExp isolateStubsRegExp = const RegExp(r"// IsolateStubs=(.*)");
+    // TODO(gram) Clean these up once the old directives are not supported.
     RegExp domImportRegExp =
-        const RegExp(r"^#import.*(dart:(dom|html)|html\.dart).*\)",
-                     multiLine: true);
+        const RegExp(r"^[#]?import.*dart:html", multiLine: true);
     RegExp libraryDefinitionRegExp =
-        const RegExp(r"^#library\(", multiLine: true);
+        const RegExp(r"^[#]?library[\( ]", multiLine: true);
     RegExp sourceOrImportRegExp =
-        const RegExp(r"^#(source|import|resource)\(", multiLine: true);
+        const RegExp("^(#source|#import|part)[ \t]+[\('\"]", multiLine: true);
 
     // Read the entire file into a byte buffer and transform it to a
     // String. This will treat the file as ascii but the only parts
@@ -1451,6 +1451,7 @@
   static int fail = 0;
   static int crash = 0;
   static int timeout = 0;
+  static int compileErrorSkip = 0;
 
   static void add(Set<String> expectations) {
     ++total;
@@ -1479,6 +1480,11 @@
     }
   }
 
+  static void addCompileErrorSkipTest() {
+    total++;
+    compileErrorSkip++;
+  }
+
   static void printReport() {
     if (total == 0) return;
     String report = """Total: $total tests
@@ -1489,6 +1495,7 @@
  * $fail tests are expected to fail that we should fix
  * $crash tests are expected to crash that we should fix
  * $timeout tests are allowed to timeout
+ * $compileErrorSkip tests are skipped on browsers due to compile-time error
 """;
     print(report);
    }
diff --git a/tools/testing/run_selenium.py b/tools/testing/run_selenium.py
index e9e1119..e97963e 100755
--- a/tools/testing/run_selenium.py
+++ b/tools/testing/run_selenium.py
@@ -40,6 +40,7 @@
 import sys
 import time
 import urllib2
+import threading
 
 TIMEOUT_ERROR_MSG = 'FAIL (timeout)'
 
@@ -170,10 +171,8 @@
     profile.set_preference('dom.max_chrome_script_run_time', 0)
     profile.set_preference('app.update.auto', True)
     profile.set_preference('app.update.enabled', True)
-    xpi = os.path.join(script_dir, 'extensions', 'firefox',                               'ConsoleCollector.xpi')
-    profile.add_extension(xpi);
     return selenium.webdriver.Firefox(firefox_profile=profile)
-  elif ((browser == 'ie9' or browser == 'ie10') and 
+  elif ((browser == 'ie9' or browser == 'ie10') and
       platform.system() == 'Windows'):
     return selenium.webdriver.Ie()
   elif browser == 'safari' and platform.system() == 'Darwin':
@@ -245,12 +244,6 @@
       index += len('<body>')
       end_index = source.find('</body')
       print unicode(source[index : end_index]).encode("utf-8")
-      if type(browser) is selenium.webdriver.firefox.webdriver.WebDriver:
-        logs = browser.execute_script("return window.ConsoleCollector.read()");
-        for msg in logs:
-          print('%s:%s:%s:%s %s' %(
-              msg['source'], msg['line'], msg['column'],
-              msg['category'], msg['message']))
       return 1
 
 
@@ -323,9 +316,27 @@
         print '>>> TEST FAIL'
       sys.stdout.flush()
   finally:
+    sys.stdin.close()
     print("Closing browser");
-    close_browser(browser)
 
+    def close_output_streams():
+      sys.stdout.flush()
+      sys.stdout.close()
+      sys.stderr.flush()
+      sys.stderr.close()
+
+    def close_and_exit():
+      print("Timed out waiting for browser to close")
+      close_output_streams()
+      exit(1)
+
+    timer = threading.Timer(5.0, close_and_exit)
+    timer.start()
+    try:
+      close_browser(browser)
+      timer.cancel()
+    finally:
+      close_output_streams()
 
 def main(args):
   # Run in batch mode if the --batch flag is passed.
diff --git a/tools/utils/vim/syntax/dart.vim b/tools/utils/vim/syntax/dart.vim
index fa5aa9d..f954ebd 100644
--- a/tools/utils/vim/syntax/dart.vim
+++ b/tools/utils/vim/syntax/dart.vim
@@ -34,7 +34,7 @@
 syn keyword dartStatement      return
 syn keyword dartStorageClass   static abstract
 syn keyword dartExceptions     throw try catch finally
-syn keyword dartExceptions     FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException./b ArgumentError IllegalJSRegExpException IndexOutOfRangeException IntegerDivisionByZeroException NoSuchMethodError NotImplementedException NullPointerException OutOfMemoryError StackOverflowException StateError UnsupportedError
+syn keyword dartExceptions     Error FormatException Exception ExpectException FutureAlreadyCompleteException FutureNotCompleteException ArgumentError IllegalJSRegExpException IntegerDivisionByZeroException NoSuchMethodError NullPointerException OutOfMemoryError RangeError StackOverflowException StateError UnimplementedError UnsupportedError
 syn keyword dartExceptions_DEPRECATED     BadNumberFormatException
 syn keyword dartAssert         assert
 syn keyword dartClassDecl      extends implements interface
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
index 931a5fe..793cd68 100644
--- a/utils/apidoc/apidoc.dart
+++ b/utils/apidoc/apidoc.dart
@@ -12,17 +12,16 @@
  *
  *     $ dart apidoc.dart [--out=<output directory>]
  */
+library apidoc;
 
-#library('apidoc');
-
-#import('dart:io');
-#import('dart:json');
-#import('html_diff.dart');
+import 'dart:io';
+import 'dart:json';
+import 'html_diff.dart';
 // TODO(rnystrom): Use "package:" URL (#4968).
-#import('../../pkg/dartdoc/lib/mirrors.dart');
-#import('../../pkg/dartdoc/lib/mirrors_util.dart');
-#import('../../pkg/dartdoc/lib/dartdoc.dart', prefix: 'doc');
-#import('../../lib/_internal/libraries.dart');
+import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';
+import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart';
+import '../../sdk/lib/_internal/dartdoc/lib/dartdoc.dart' as doc;
+import '../../sdk/lib/_internal/libraries.dart';
 
 HtmlDiff _diff;
 
@@ -65,14 +64,14 @@
     }
   }
 
-  final libPath = doc.scriptDir.append('../../');
+  final libPath = doc.scriptDir.append('../../sdk/');
   final pkgPath = doc.scriptDir.append('../../pkg/');
 
   doc.cleanOutputDirectory(outputDir);
 
   // The basic dartdoc-provided static content.
   final copiedStatic = doc.copyDirectory(
-      doc.scriptDir.append('../../pkg/dartdoc/static'),
+      doc.scriptDir.append('../../sdk/lib/_internal/dartdoc/static'),
       outputDir);
 
   // The apidoc-specific static content.
@@ -94,7 +93,7 @@
   final htmldoc = new Htmldoc();
   htmldoc.includeApi = true;
   htmldoc.documentLibraries(
-    <Path>[doc.scriptDir.append('../../lib/html/doc/html.dartdoc')],
+    <Path>[doc.scriptDir.append('../../sdk/lib/html/doc/html.dartdoc')],
     libPath, pkgPath);
 
   // Process libraries.
@@ -136,7 +135,8 @@
     print('Generating docs...');
     final apidoc = new Apidoc(mdn, htmldoc, outputDir, mode, generateAppCache,
         excludedLibraries);
-    apidoc.dartdocPath = doc.scriptDir.append('../../pkg/dartdoc/');
+    apidoc.dartdocPath =
+        doc.scriptDir.append('../../sdk/lib/_internal/dartdoc/');
     // Select the libraries to include in the produced documentation:
     apidoc.includeApi = true;
     apidoc.includedLibraries = includedLibraries;
diff --git a/utils/apidoc/apidoc.gyp b/utils/apidoc/apidoc.gyp
index 7710b91..931a11a 100644
--- a/utils/apidoc/apidoc.gyp
+++ b/utils/apidoc/apidoc.gyp
@@ -22,7 +22,7 @@
         '../../runtime/dart-runtime.gyp:dart',
       ],
       'includes': [
-        '../../lib/core/corelib_sources.gypi',
+        '../../sdk/lib/core/corelib_sources.gypi',
       ],
       'actions': [
         {
@@ -31,8 +31,8 @@
             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
             '<(PRODUCT_DIR)/dart2js',
             '<(PRODUCT_DIR)/dart2js.bat',
-            '<!@(["python", "../../tools/list_files.py", "\\.(css|ico|js|json|png|sh|txt|yaml|py)$", ".", "../../pkg/dartdoc"])',
-            '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../lib", "../../runtime/lib", "../../runtime/bin", "../../pkg/dartdoc"])',
+            '<!@(["python", "../../tools/list_files.py", "\\.(css|ico|js|json|png|sh|txt|yaml|py)$", ".", "../../sdk/lib/_internal/dartdoc"])',
+            '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../lib", "../../runtime/lib", "../../runtime/bin", "../../sdk/lib/_internal/dartdoc"])',
           ],
           'outputs': [
             '<(PRODUCT_DIR)/api_docs/index.html',
@@ -44,6 +44,7 @@
             '--out=<(PRODUCT_DIR)/api_docs',
             '--mode=static',
             '--exclude-lib=webdriver',
+            '--exclude-lib=http',
             '--exclude-lib=dartdoc',
           ],
           'message': 'Running apidoc: <(_action)',
diff --git a/utils/apidoc/html_diff.dart b/utils/apidoc/html_diff.dart
index 2de79b7..130666d 100644
--- a/utils/apidoc/html_diff.dart
+++ b/utils/apidoc/html_diff.dart
@@ -6,15 +6,15 @@
  * A script to assist in documenting the difference between the dart:html API
  * and the old DOM API.
  */
-#library('html_diff');
+library html_diff;
 
-#import('dart:coreimpl');
-#import('dart:io');
+import 'dart:coreimpl';
+import 'dart:io';
 
 // TODO(rnystrom): Use "package:" URL (#4968).
-#import('../../pkg/dartdoc/lib/dartdoc.dart');
-#import('../../pkg/dartdoc/lib/mirrors.dart');
-#import('../../pkg/dartdoc/lib/mirrors_util.dart');
+import '../../sdk/lib/_internal/dartdoc/lib/dartdoc.dart';
+import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors.dart';
+import '../../sdk/lib/_internal/compiler/implementation/mirrors/mirrors_util.dart';
 
 // TODO(amouravski): There is currently magic that looks at dart:* libraries
 // rather than the declared library names. This changed due to recent syntax
diff --git a/utils/apidoc/scripts/list_files.dart b/utils/apidoc/scripts/list_files.dart
index b7a62f4..08a5fdf 100644
--- a/utils/apidoc/scripts/list_files.dart
+++ b/utils/apidoc/scripts/list_files.dart
@@ -19,7 +19,7 @@
   final scriptDir = new File(new Options().script).directorySync().path;
   final dartDir = '$scriptDir/../../../';
   listFiles('$dartDir/utils/apidoc');
-  listFiles('$dartDir/pkg/dartdoc');
+  listFiles('$dartDir/sdk/lib/_internal/dartdoc');
 }
 
 void listFiles(String dirPath) {
diff --git a/utils/compiler/build_helper.dart b/utils/compiler/build_helper.dart
index 971bb58..e7e31d7 100644
--- a/utils/compiler/build_helper.dart
+++ b/utils/compiler/build_helper.dart
@@ -2,11 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-#import('dart:io');
-#import('dart:uri');
+import 'dart:io';
+import 'dart:uri';
 
-#import('../../lib/compiler/implementation/util/uri_extras.dart');
-#import('../../lib/compiler/implementation/filenames.dart');
+import '../../sdk/lib/_internal/compiler/implementation/util/uri_extras.dart';
+import '../../sdk/lib/_internal/compiler/implementation/filenames.dart';
 
 main() {
   List<String> arguments = new Options().arguments;
@@ -29,19 +29,20 @@
   List<String> productionScript = buildScript(
       'dart2js-production',
       dartUri, dartVmUri,
-      'lib/compiler/implementation/dart2js.dart', '');
+      'sdk/lib/_internal/compiler/implementation/dart2js.dart', '');
   writeScript(productionUri, productionScript);
 
   List<String> developerScript = buildScript(
       'dart2js-developer',
       dartUri, dartVmUri,
-      'lib/compiler/implementation/dart2js.dart', ' --enable_checked_mode');
+      'sdk/lib/_internal/compiler/implementation/dart2js.dart',
+      ' --enable_checked_mode');
   writeScript(developerUri, developerScript);
 
   List<String> dartdocScript = buildScript(
       'dartdoc',
       dartUri, dartVmUri,
-      'pkg/dartdoc/bin/dartdoc.dart', '');
+      'sdk/lib/_internal/dartdoc/bin/dartdoc.dart', '');
   writeScript(dartdocUri, dartdocScript);
 }
 
diff --git a/utils/compiler/compiler.gyp b/utils/compiler/compiler.gyp
index abb576d..2dee58f 100644
--- a/utils/compiler/compiler.gyp
+++ b/utils/compiler/compiler.gyp
@@ -49,8 +49,8 @@
           'inputs': [
             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)gen_snapshot<(EXECUTABLE_SUFFIX)',
             '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
-            '../../lib/_internal/libraries.dart',
-            '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../lib/compiler", "../../runtime/lib"])',
+            '../../sdk/lib/_internal/libraries.dart',
+            '<!@(["python", "../../tools/list_files.py", "\\.dart$", "../../sdk/lib/_internal/compiler", "../../runtime/lib"])',
           ],
           'outputs': [
             '<(PRODUCT_DIR)/dart2js.snapshot',
@@ -67,7 +67,7 @@
             # for dart2js compiler engineers.  However, we install the
             # snapshot in the proper location when building the SDK.
             '--script_snapshot=<(PRODUCT_DIR)/dart2js.snapshot',
-            '../../lib/compiler/implementation/dart2js.dart',
+            '../../sdk/lib/_internal/compiler/implementation/dart2js.dart',
           ],
         },
       ],
diff --git a/utils/pub/hosted_source.dart b/utils/pub/hosted_source.dart
index eb4b86fd..07ea60f 100644
--- a/utils/pub/hosted_source.dart
+++ b/utils/pub/hosted_source.dart
@@ -41,12 +41,7 @@
       var doc = JSON.parse(body);
       return doc['versions'].map((version) => new Version.parse(version));
     }).transformException((ex) {
-      if (ex is PubHttpException && ex.statusCode == 404) {
-        throw 'Could not find package "${parsed.first}" on ${parsed.last}.';
-      }
-
-      // Otherwise re-throw the original exception.
-      throw ex;
+      _throwFriendlyError(ex, parsed.first, parsed.last);
     });
   }
 
@@ -58,8 +53,11 @@
     var parsed = _parseDescription(id.description);
     var fullUrl = "${parsed.last}/packages/${parsed.first}/versions/"
       "${id.version}.yaml";
+
     return httpGetString(fullUrl).transform((yaml) {
       return new Pubspec.parse(yaml, systemCache.sources);
+    }).transformException((ex) {
+      _throwFriendlyError(ex, id, parsed.last);
     });
   }
 
@@ -121,6 +119,27 @@
     _parseDescription(description);
   }
 
+  /// When an error occurs trying to read something about [package] from [url],
+  /// this tries to translate into a more user friendly error message. Always
+  /// throws an error, either the original one or a better one.
+  void _throwFriendlyError(ex, package, url) {
+    if (ex is PubHttpException && ex.statusCode == 404) {
+      throw 'Could not find package "$package" at $url.';
+    }
+
+    if (ex is TimeoutException) {
+      throw 'Timed out trying to find package "$package" at $url.';
+    }
+
+    if (ex is io.SocketIOException) {
+      throw 'Got socket error trying to find package "$package" at $url.\n'
+          '${ex.osError}';
+    }
+
+    // Otherwise re-throw the original exception.
+    throw ex;
+  }
+
   /**
    * Parses the description for a package.
    *
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 8b632e3..cccedfc17 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -222,7 +222,7 @@
  */
 Future<Directory> deleteDir(dir) {
   dir = _getDirectory(dir);
-  return dir.deleteRecursively();
+  return dir.delete(recursive: true);
 }
 
 /**
@@ -712,6 +712,8 @@
   final String reason;
 
   const PubHttpException(this.statusCode, this.reason);
+
+  String toString() => 'HTTP error $statusCode: $reason';
 }
 
 /**
@@ -721,6 +723,8 @@
   final String message;
 
   const TimeoutException(this.message);
+
+  String toString() => message;
 }
 
 /**
diff --git a/utils/pub/package.dart b/utils/pub/package.dart
index 8d84546..b8ee759 100644
--- a/utils/pub/package.dart
+++ b/utils/pub/package.dart
@@ -137,7 +137,10 @@
            other.version == version;
   }
 
-  String toString() => "$name $version from ${source.name}";
+  String toString() {
+    if (source.isDefault) return "$name $version";
+    return "$name $version from $source";
+  }
 
   int compareTo(Comparable other) {
     if (other is! PackageId) throw new ArgumentError(other);
diff --git a/utils/pub/source.dart b/utils/pub/source.dart
index bb956c9..0dc6a23 100644
--- a/utils/pub/source.dart
+++ b/utils/pub/source.dart
@@ -23,6 +23,9 @@
    */
   abstract String get name;
 
+  /// Whether or not this source is the default source.
+  bool get isDefault => systemCache.sources.defaultSource == this;
+
   /**
    * Whether this source's packages should be cached in Pub's global cache
    * directory.
@@ -189,4 +192,7 @@
    * By default, this just returns [id].
    */
   Future<PackageId> resolveId(PackageId id) => new Future.immediate(id);
+
+  /// Returns the source's name.
+  String toString() => name;
 }
diff --git a/utils/tests/archive/reader_test.dart b/utils/tests/archive/reader_test.dart
index 5640ae7..77fd88f 100644
--- a/utils/tests/archive/reader_test.dart
+++ b/utils/tests/archive/reader_test.dart
@@ -2,11 +2,11 @@
 // 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('reader_test');
+library reader_test;
 
-#import('dart:io');
-#import('../../../pkg/unittest/unittest.dart');
-#import('../../archive/archive.dart');
+import 'dart:io';
+import '../../../pkg/unittest/lib/unittest.dart'
+import '../../archive/archive.dart';
 
 final String dataPath = "utils/tests/archive/data";
 
diff --git a/utils/tests/archive/utils_test.dart b/utils/tests/archive/utils_test.dart
index e85af66..bd51d75 100644
--- a/utils/tests/archive/utils_test.dart
+++ b/utils/tests/archive/utils_test.dart
@@ -2,10 +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.
 
-#library('utils_test');
+library utils_test;
 
-#import('../../../pkg/unittest/unittest.dart');
-#import('../../archive/utils.dart');
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../archive/utils.dart';
 
 main() {
   // TODO(nweiz): re-enable this once issue 4378 is fixed.
diff --git a/utils/tests/pub/install/git/check_out_and_update_test.dart b/utils/tests/pub/install/git/check_out_and_update_test.dart
index c61502a..fa632b6 100644
--- a/utils/tests/pub/install/git/check_out_and_update_test.dart
+++ b/utils/tests/pub/install/git/check_out_and_update_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out and updates a package from Git', () {
diff --git a/utils/tests/pub/install/git/check_out_branch_test.dart b/utils/tests/pub/install/git/check_out_branch_test.dart
index 9db508f..9c06391 100644
--- a/utils/tests/pub/install/git/check_out_branch_test.dart
+++ b/utils/tests/pub/install/git/check_out_branch_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package at a specific branch from Git', () {
diff --git a/utils/tests/pub/install/git/check_out_revision_test.dart b/utils/tests/pub/install/git/check_out_revision_test.dart
index 81ebaf7..9259682 100644
--- a/utils/tests/pub/install/git/check_out_revision_test.dart
+++ b/utils/tests/pub/install/git/check_out_revision_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package at a specific revision from Git', () {
diff --git a/utils/tests/pub/install/git/check_out_test.dart b/utils/tests/pub/install/git/check_out_test.dart
index 4ff253d..e3d7191 100644
--- a/utils/tests/pub/install/git/check_out_test.dart
+++ b/utils/tests/pub/install/git/check_out_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package from Git', () {
diff --git a/utils/tests/pub/install/git/check_out_transitive_test.dart b/utils/tests/pub/install/git/check_out_transitive_test.dart
index ef77b14..f8327ba 100644
--- a/utils/tests/pub/install/git/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/git/check_out_transitive_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out packages transitively from Git', () {
diff --git a/utils/tests/pub/install/git/check_out_twice_test.dart b/utils/tests/pub/install/git/check_out_twice_test.dart
index 8c2c59e..2b768e7 100644
--- a/utils/tests/pub/install/git/check_out_twice_test.dart
+++ b/utils/tests/pub/install/git/check_out_twice_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package from Git twice', () {
diff --git a/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart b/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
index b3afa6e..1a27e90 100644
--- a/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
+++ b/utils/tests/pub/install/git/check_out_with_trailing_slash_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   group("(regression)", () {
diff --git a/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart b/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
index 1cf60c5..c2733be 100644
--- a/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
+++ b/utils/tests/pub/install/git/dependency_name_match_pubspec_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('requires the dependency name to match the remote pubspec name', () {
diff --git a/utils/tests/pub/install/git/different_repo_name_test.dart b/utils/tests/pub/install/git/different_repo_name_test.dart
index 85f4306..2b9013e 100644
--- a/utils/tests/pub/install/git/different_repo_name_test.dart
+++ b/utils/tests/pub/install/git/different_repo_name_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('doesn\'t require the repository name to match the name in the '
diff --git a/utils/tests/pub/install/git/lock_version_test.dart b/utils/tests/pub/install/git/lock_version_test.dart
index e3a7a38..4676ae2 100644
--- a/utils/tests/pub/install/git/lock_version_test.dart
+++ b/utils/tests/pub/install/git/lock_version_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('keeps a Git package locked to the version in the lockfile', () {
diff --git a/utils/tests/pub/install/git/require_pubspec_name_test.dart b/utils/tests/pub/install/git/require_pubspec_name_test.dart
index 6ca6866..bde1ee1 100644
--- a/utils/tests/pub/install/git/require_pubspec_name_test.dart
+++ b/utils/tests/pub/install/git/require_pubspec_name_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('requires the dependency to have a pubspec with a name field', () {
diff --git a/utils/tests/pub/install/git/require_pubspec_test.dart b/utils/tests/pub/install/git/require_pubspec_test.dart
index dc8a8b8..00eb9d2 100644
--- a/utils/tests/pub/install/git/require_pubspec_test.dart
+++ b/utils/tests/pub/install/git/require_pubspec_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('requires the dependency to have a pubspec', () {
diff --git a/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart b/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
index de12dc9..c5e2331 100644
--- a/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
+++ b/utils/tests/pub/install/git/stay_locked_if_compatible_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("doesn't update a locked Git package with a new compatible "
diff --git a/utils/tests/pub/install/git/unlock_if_incompatible_test.dart b/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
index 433ef05..25476fc 100644
--- a/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
+++ b/utils/tests/pub/install/git/unlock_if_incompatible_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('updates a locked Git package with a new incompatible constraint', () {
diff --git a/utils/tests/pub/install/hosted/check_out_test.dart b/utils/tests/pub/install/hosted/check_out_test.dart
index c0eafff..c738daa 100644
--- a/utils/tests/pub/install/hosted/check_out_test.dart
+++ b/utils/tests/pub/install/hosted/check_out_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package from a pub server', () {
diff --git a/utils/tests/pub/install/hosted/check_out_transitive_test.dart b/utils/tests/pub/install/hosted/check_out_transitive_test.dart
index d13cc92..7a2f26a 100644
--- a/utils/tests/pub/install/hosted/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/hosted/check_out_transitive_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out packages transitively from a pub server', () {
diff --git a/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart b/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
index c10eb56..a41873c 100644
--- a/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
+++ b/utils/tests/pub/install/hosted/do_not_update_on_removed_constraints_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("doesn't update dependencies whose constraints have been removed", () {
diff --git a/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart b/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
index e333b00..dae4ce6 100644
--- a/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
+++ b/utils/tests/pub/install/hosted/fail_gracefully_on_missing_package_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('fails gracefully if the package does not exist', () {
@@ -16,7 +16,7 @@
     appDir([dependency("foo", "1.2.3")]).scheduleCreate();
 
     schedulePub(args: ['install'],
-        error: const RegExp('Could not find package "foo" on '
+        error: const RegExp('Could not find package "foo" at '
                             'http://localhost:'),
         exitCode: 1);
 
diff --git a/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart b/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
index b8728d6..ffb48496 100644
--- a/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
+++ b/utils/tests/pub/install/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('fails gracefully if the url does not resolve', () {
diff --git a/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart b/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
index 8198b6e..add5837 100644
--- a/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
+++ b/utils/tests/pub/install/hosted/remove_removed_dependency_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("removes a dependency that's been removed from the pubspec", () {
diff --git a/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart b/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
index 90772c5..62007fb 100644
--- a/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
+++ b/utils/tests/pub/install/hosted/remove_removed_transitive_dependency_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("removes a transitive dependency that's no longer depended on", () {
diff --git a/utils/tests/pub/install/hosted/resolve_constraints_test.dart b/utils/tests/pub/install/hosted/resolve_constraints_test.dart
index f3784ff..077f899 100644
--- a/utils/tests/pub/install/hosted/resolve_constraints_test.dart
+++ b/utils/tests/pub/install/hosted/resolve_constraints_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('resolves version constraints from a pub server', () {
diff --git a/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart b/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
index d16495f..7ac56bf 100644
--- a/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_if_compatible_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("doesn't update a locked pub server package with a new compatible "
diff --git a/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart b/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
index 4d955fe..30b0966 100644
--- a/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_if_new_is_satisfied_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("doesn't unlock dependencies if a new dependency is already "
diff --git a/utils/tests/pub/install/hosted/stay_locked_test.dart b/utils/tests/pub/install/hosted/stay_locked_test.dart
index 3a57916..c6e4b00 100644
--- a/utils/tests/pub/install/hosted/stay_locked_test.dart
+++ b/utils/tests/pub/install/hosted/stay_locked_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('keeps a pub server package locked to the version in the lockfile', () {
diff --git a/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart b/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
index 07aa514..3016bf5 100644
--- a/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
+++ b/utils/tests/pub/install/hosted/unlock_if_incompatible_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('updates a locked pub server package with a new incompatible '
diff --git a/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart b/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
index 5e63c78..21bb7cb 100644
--- a/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
+++ b/utils/tests/pub/install/hosted/unlock_if_new_is_unsatisfied_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("unlocks dependencies if necessary to ensure that a new dependency "
diff --git a/utils/tests/pub/install/pub_install_test.dart b/utils/tests/pub/install/pub_install_test.dart
index 4a57cbd..4c953b0 100644
--- a/utils/tests/pub/install/pub_install_test.dart
+++ b/utils/tests/pub/install/pub_install_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../test_pub.dart';
-import '../../../../pkg/unittest/unittest.dart';
+import '../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   group('requires', () {
diff --git a/utils/tests/pub/install/sdk/check_out_test.dart b/utils/tests/pub/install/sdk/check_out_test.dart
index 5c07b20..279869f 100644
--- a/utils/tests/pub/install/sdk/check_out_test.dart
+++ b/utils/tests/pub/install/sdk/check_out_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('checks out a package from the SDK', () {
diff --git a/utils/tests/pub/install/sdk/check_out_transitive_test.dart b/utils/tests/pub/install/sdk/check_out_transitive_test.dart
index 000e6dd..25c6457 100644
--- a/utils/tests/pub/install/sdk/check_out_transitive_test.dart
+++ b/utils/tests/pub/install/sdk/check_out_transitive_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('includes transitive dependencies', () {
diff --git a/utils/tests/pub/lock_file_test.dart b/utils/tests/pub/lock_file_test.dart
index e3eec8a..d1aeb00 100644
--- a/utils/tests/pub/lock_file_test.dart
+++ b/utils/tests/pub/lock_file_test.dart
@@ -4,7 +4,7 @@
 
 library lock_file_test;
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/lock_file.dart';
 import '../../pub/package.dart';
 import '../../pub/source.dart';
diff --git a/utils/tests/pub/pub_test.dart b/utils/tests/pub/pub_test.dart
index 9a28941..a1e1bc7 100644
--- a/utils/tests/pub/pub_test.dart
+++ b/utils/tests/pub/pub_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import 'test_pub.dart';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 final USAGE_STRING = """
     Pub is a package manager for Dart.
diff --git a/utils/tests/pub/pubspec_test.dart b/utils/tests/pub/pubspec_test.dart
index d952611..d93a408 100644
--- a/utils/tests/pub/pubspec_test.dart
+++ b/utils/tests/pub/pubspec_test.dart
@@ -4,7 +4,7 @@
 
 library pubspec_test;
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/pubspec.dart';
 import '../../pub/source.dart';
 import '../../pub/source_registry.dart';
diff --git a/utils/tests/pub/test_pub.dart b/utils/tests/pub/test_pub.dart
index 67ac4a7..3b45775 100644
--- a/utils/tests/pub/test_pub.dart
+++ b/utils/tests/pub/test_pub.dart
@@ -16,7 +16,7 @@
 import 'dart:math';
 import 'dart:uri';
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../../lib/file_system.dart' as fs;
 import '../../pub/git_source.dart';
 import '../../pub/hosted_source.dart';
@@ -1157,7 +1157,9 @@
       return create(tempDir);
     }).then((tar) {
       var sourceStream = tar.openInputStream();
-      pipeInputToInput(sourceStream, sinkStream, tempDir.deleteRecursively);
+      pipeInputToInput(sourceStream,
+                       sinkStream,
+                       () => tempDir.delete(recursive: true));
     });
     return sinkStream;
   }
diff --git a/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart b/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
index 098e25a..829a459 100644
--- a/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
+++ b/utils/tests/pub/update/git/do_not_update_if_unneeded_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("doesn't update one locked Git package's dependencies if it's not "
diff --git a/utils/tests/pub/update/git/update_locked_test.dart b/utils/tests/pub/update/git/update_locked_test.dart
index 758cb7c..00ae0f8 100644
--- a/utils/tests/pub/update/git/update_locked_test.dart
+++ b/utils/tests/pub/update/git/update_locked_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates locked Git packages", () {
diff --git a/utils/tests/pub/update/git/update_one_locked_test.dart b/utils/tests/pub/update/git/update_one_locked_test.dart
index 84ee856..1c793c6 100644
--- a/utils/tests/pub/update/git/update_one_locked_test.dart
+++ b/utils/tests/pub/update/git/update_one_locked_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates one locked Git package but no others", () {
diff --git a/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart b/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
index 87c3e09..e6086b5 100644
--- a/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
+++ b/utils/tests/pub/update/git/update_to_incompatible_pubspec_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates Git packages to an incompatible pubspec", () {
diff --git a/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart b/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
index 647b6de..c30157e 100644
--- a/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
+++ b/utils/tests/pub/update/git/update_to_nonexistent_pubspec_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates Git packages to a nonexistent pubspec", () {
diff --git a/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart b/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
index 51a0dba..381923e 100644
--- a/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
+++ b/utils/tests/pub/update/hosted/fail_gracefully_on_missing_package_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('fails gracefully if the package does not exist', () {
@@ -16,7 +16,7 @@
     appDir([dependency("foo", "1.2.3")]).scheduleCreate();
 
     schedulePub(args: ['update'],
-        error: const RegExp('Could not find package "foo" on '
+        error: const RegExp('Could not find package "foo" at '
                             'http://localhost:'),
         exitCode: 1);
 
diff --git a/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart b/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
index 6dd0071..c231122 100644
--- a/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
+++ b/utils/tests/pub/update/hosted/fail_gracefully_on_url_resolve_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test('fails gracefully if the url does not resolve', () {
diff --git a/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart b/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
index 8e52eddf..60fc438 100644
--- a/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
+++ b/utils/tests/pub/update/hosted/remove_removed_dependency_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("removes a dependency that's been removed from the pubspec", () {
diff --git a/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart b/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
index 38970d2..2f98b51 100644
--- a/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
+++ b/utils/tests/pub/update/hosted/remove_removed_transitive_dependency_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("removes a transitive dependency that's no longer depended on", () {
diff --git a/utils/tests/pub/update/hosted/unlock_dependers_test.dart b/utils/tests/pub/update/hosted/unlock_dependers_test.dart
index 0a9510f..64f58cd 100644
--- a/utils/tests/pub/update/hosted/unlock_dependers_test.dart
+++ b/utils/tests/pub/update/hosted/unlock_dependers_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates a locked package's dependers in order to get it to max "
diff --git a/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart b/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
index ab43ad5..4525f82 100644
--- a/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
+++ b/utils/tests/pub/update/hosted/unlock_if_necessary_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates one locked pub server package's dependencies if it's "
diff --git a/utils/tests/pub/update/hosted/update_removed_constraints_test.dart b/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
index 38ac584..b73347a 100644
--- a/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
+++ b/utils/tests/pub/update/hosted/update_removed_constraints_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../../test_pub.dart';
-import '../../../../../pkg/unittest/unittest.dart';
+import '../../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   test("updates dependencies whose constraints have been removed", () {
diff --git a/utils/tests/pub/update/pub_update_test.dart b/utils/tests/pub/update/pub_update_test.dart
index 29d8ca1..f4900f5 100644
--- a/utils/tests/pub/update/pub_update_test.dart
+++ b/utils/tests/pub/update/pub_update_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import '../test_pub.dart';
-import '../../../../pkg/unittest/unittest.dart';
+import '../../../../pkg/unittest/lib/unittest.dart';
 
 main() {
   group('requires', () {
diff --git a/utils/tests/pub/version_solver_test.dart b/utils/tests/pub/version_solver_test.dart
index 4777aa41..8bec240 100644
--- a/utils/tests/pub/version_solver_test.dart
+++ b/utils/tests/pub/version_solver_test.dart
@@ -13,10 +13,11 @@
 import '../../pub/root_source.dart';
 import '../../pub/source.dart';
 import '../../pub/source_registry.dart';
+import '../../pub/system_cache.dart';
 import '../../pub/utils.dart';
 import '../../pub/version.dart';
 import '../../pub/version_solver.dart';
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 
 final noVersion = 'no version';
 final disjointConstraint = 'disjoint';
@@ -353,14 +354,14 @@
     var isCouldNotSolveException = predicate((x)=> x is CouldNotSolveException,
             "is a CouldNotSolveException");
 
-    var sources = new SourceRegistry();
+    var cache = new SystemCache('.');
     source1 = new MockSource('mock1');
     source2 = new MockSource('mock2');
     versionlessSource = new MockVersionlessSource();
-    sources.register(source1);
-    sources.register(source2);
-    sources.register(versionlessSource);
-    sources.setDefault(source1.name);
+    cache.register(source1);
+    cache.register(source2);
+    cache.register(versionlessSource);
+    cache.sources.setDefault(source1.name);
 
     // Build the test package graph.
     var root;
@@ -380,7 +381,7 @@
         // remote server.
         root = package;
         rootSource = new RootSource(root);
-        sources.register(rootSource);
+        cache.register(rootSource);
       } else {
         source.addPackage(package);
       }
@@ -409,7 +410,7 @@
     }
 
     // Resolve the versions.
-    var future = resolveVersions(sources, root, realLockFile);
+    var future = resolveVersions(cache.sources, root, realLockFile);
 
     if (result != null) {
       expect(future, completion(predicate((actualResult) {
diff --git a/utils/tests/pub/version_test.dart b/utils/tests/pub/version_test.dart
index 314ab5b..d3fa7e5 100644
--- a/utils/tests/pub/version_test.dart
+++ b/utils/tests/pub/version_test.dart
@@ -4,7 +4,7 @@
 
 library version_test;
 
-import '../../../pkg/unittest/unittest.dart';
+import '../../../pkg/unittest/lib/unittest.dart';
 import '../../pub/utils.dart';
 import '../../pub/version.dart';
 
diff --git a/utils/tests/pub/yaml_test.dart b/utils/tests/pub/yaml_test.dart
index cb4e1be..a71c3ba 100644
--- a/utils/tests/pub/yaml_test.dart
+++ b/utils/tests/pub/yaml_test.dart
@@ -2,14 +2,14 @@
 // 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('yaml_test');
+library yaml_test;
 
-#import('dart:math');
+import 'dart:math';
 
-#import('../../../pkg/unittest/unittest.dart');
-#import('../../pub/yaml/yaml.dart');
-#import('../../pub/yaml/deep_equals.dart');
-#import('../../../tests/utils/test_utils.dart');
+import '../../../pkg/unittest/lib/unittest.dart';
+import '../../pub/yaml/yaml.dart';
+import '../../pub/yaml/deep_equals.dart';
+import '../../../tests/utils/test_utils.dart';
 
 /** Constructs a new yaml.YamlMap, optionally from a normal Map. */
 Map yamlMap([Map from]) =>
@@ -44,8 +44,8 @@
       _expectKeyWorks(keyFn()) {
         var map = yamlMap();
         map[keyFn()] = 5;
-        Expect.isTrue(map.containsKey(keyFn()));
-        Expect.equals(5, map[keyFn()]);
+        expect(map.containsKey(keyFn()), isTrue);
+        expect(map[keyFn()], 5);
       }
 
       test('null', () => _expectKeyWorks(() => null));
@@ -59,14 +59,14 @@
     test('works as a hash key', () {
       var normalMap = new Map();
       normalMap[yamlMap({'foo': 'bar'})] = 'baz';
-      Expect.isTrue(normalMap.containsKey(yamlMap({'foo': 'bar'})));
-      Expect.equals('baz', normalMap[yamlMap({'foo': 'bar'})]);
+      expect(normalMap.containsKey(yamlMap({'foo': 'bar'})), isTrue);
+      expect(normalMap[yamlMap({'foo': 'bar'})], 'baz');
     });
 
     test('treats YamlMap keys the same as normal maps', () {
       var map = yamlMap();
       map[{'a': 'b'}] = 5;
-      Expect.equals(5, map[yamlMap({'a': 'b'})]);
+      expect(map[yamlMap({'a': 'b'})], 5);
     });
   });