Bringing in most recent advances from the main line EnumString
authorJaroslav Tulach <jtulach@netbeans.org>
Fri, 25 Jul 2014 10:45:12 +0200
branchEnumString
changeset 756888067154d74
parent 606 4e9ec54a12e0
parent 755 d396bc480560
Bringing in most recent advances from the main line
json-tck/src/main/java/net/java/html/js/tests/Bodies.java
json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java
ko-archetype-test/pom.xml
ko-archetype-test/src/test/java/org/netbeans/html/archetype/test/ArchetypeVersionIT.java
ko-archetype-test/src/test/java/org/netbeans/html/archetype/test/VerifyArchetypeIT.java
ko-archetype/pom.xml
ko-archetype/src/main/java/org/netbeans/html/archetype/package-info.java
ko-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
ko-archetype/src/main/resources/archetype-resources/nbactions.xml
ko-archetype/src/main/resources/archetype-resources/pom.xml
ko-archetype/src/main/resources/archetype-resources/src/main/assembly/html.java.net.xml
ko-archetype/src/main/resources/archetype-resources/src/main/java/DataModel.java
ko-archetype/src/main/resources/archetype-resources/src/main/java/Main.java
ko-archetype/src/main/resources/archetype-resources/src/main/webapp/pages/index.html
ko-archetype/src/main/resources/archetype-resources/src/test/java/DataModelTest.java
ko-archetype/src/main/resources/archetype-resources/src/test/java/JsInteractionTest.java
     1.1 --- a/.hgtags	Wed Mar 12 20:26:58 2014 +0100
     1.2 +++ b/.hgtags	Fri Jul 25 10:45:12 2014 +0200
     1.3 @@ -10,3 +10,15 @@
     1.4  da6c0d295eed1c309ce108f70df158c5b4ef09aa release-0.7
     1.5  4f02ac8ef70a698fccada74cfeb43fede65fd8bf release-0.7.1
     1.6  40a4100ce43b933451048c4beb8cdc33c6b614f5 release-0.7.5
     1.7 +ae10a70c2f5a9893579723817b000214a7635964 release-0.7.6
     1.8 +88b0d9fe80ab1d842357aad1605ebe21a9517568 release-0.8
     1.9 +88b0d9fe80ab1d842357aad1605ebe21a9517568 release-0.8
    1.10 +0000000000000000000000000000000000000000 release-0.8
    1.11 +0000000000000000000000000000000000000000 release-0.8
    1.12 +2fd4f5f4a02eae9ced7f0b123b5b0cad89337f2b release-0.8
    1.13 +bab8e369c180d59b613731482ff3703036d1a0bc release-0.8.1
    1.14 +bab8e369c180d59b613731482ff3703036d1a0bc release-0.8.1
    1.15 +0000000000000000000000000000000000000000 release-0.8.1
    1.16 +0000000000000000000000000000000000000000 release-0.8.1
    1.17 +070ee1e013a3b3aba93285d36f7a5982549e06a7 release-0.8.1
    1.18 +9b1c84366336d8ab4d1f5717279eda3df656d248 release-0.8.2
     2.1 --- a/boot-fx/pom.xml	Wed Mar 12 20:26:58 2014 +0100
     2.2 +++ b/boot-fx/pom.xml	Fri Jul 25 10:45:12 2014 +0200
     2.3 @@ -4,11 +4,11 @@
     2.4    <parent>
     2.5      <groupId>org.netbeans.html</groupId>
     2.6      <artifactId>pom</artifactId>
     2.7 -    <version>0.8-SNAPSHOT</version>
     2.8 +    <version>1.0-SNAPSHOT</version>
     2.9    </parent>
    2.10    <groupId>org.netbeans.html</groupId>
    2.11    <artifactId>net.java.html.boot.fx</artifactId>
    2.12 -  <version>0.8-SNAPSHOT</version>
    2.13 +  <version>1.0-SNAPSHOT</version>
    2.14    <name>FX WebView Bootstrap</name>
    2.15    <packaging>bundle</packaging>
    2.16    <url>http://maven.apache.org</url>
     3.1 --- a/boot-fx/src/main/java/net/java/html/boot/fx/FXBrowsers.java	Wed Mar 12 20:26:58 2014 +0100
     3.2 +++ b/boot-fx/src/main/java/net/java/html/boot/fx/FXBrowsers.java	Fri Jul 25 10:45:12 2014 +0200
     3.3 @@ -43,17 +43,27 @@
     3.4  package net.java.html.boot.fx;
     3.5  
     3.6  import java.net.URL;
     3.7 +import javafx.application.Platform;
     3.8  import javafx.beans.value.ChangeListener;
     3.9  import javafx.beans.value.ObservableValue;
    3.10  import javafx.concurrent.Worker;
    3.11  import javafx.scene.web.WebView;
    3.12 +import net.java.html.BrwsrCtx;
    3.13  import net.java.html.boot.BrowserBuilder;
    3.14  import net.java.html.js.JavaScriptBody;
    3.15  import org.netbeans.html.boot.fx.AbstractFXPresenter;
    3.16  
    3.17 -/** Utility methods for working with <em>JavaFX</em> <code>WebView</code>s.
    3.18 - *
    3.19 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    3.20 +/** Utility methods to use {@link WebView} and {@link JavaScriptBody} code
    3.21 + * in existing <em>JavaFX</em> applications.
    3.22 + * This class is for those who want to instantiate their own {@link WebView},
    3.23 + * configure it manually, embed it into own <em>JavaFX</em>
    3.24 + * application and based on other events in the application
    3.25 + * {@link #runInBrowser(javafx.scene.web.WebView, java.lang.Runnable) re-execute code} 
    3.26 + * inside of such {@link WebView}s.
    3.27 + * In case such detailed control is not necessary,
    3.28 + * consider using {@link BrowserBuilder}.
    3.29 + * 
    3.30 + * @author Jaroslav Tulach
    3.31   * @since 0.6
    3.32   */
    3.33  public final class FXBrowsers {
    3.34 @@ -69,6 +79,9 @@
    3.35       * versions). The method <code>methodName</code> needs to be <code>public</code>
    3.36       * (in a public class), <code>static</code> and take either no parameters
    3.37       * or an array of {@link String}s.
    3.38 +     * <p>
    3.39 +     * This method sets {@link WebView#getUserData()} and {@link #runInBrowser(javafx.scene.web.WebView, java.lang.Runnable)}
    3.40 +     * relies on the value. Please don't alter it.
    3.41       * 
    3.42       * @param webView the instance of Web View to tweak
    3.43       * @param url the URL of the HTML page to load into the view
    3.44 @@ -81,34 +94,112 @@
    3.45          Class<?> onPageLoad, String methodName,
    3.46          String... args
    3.47      ) {
    3.48 -        class Load extends AbstractFXPresenter {
    3.49 -            @Override
    3.50 -            protected void waitFinished() {
    3.51 -                // don't wait
    3.52 -            }
    3.53 -
    3.54 -            @Override
    3.55 -            protected WebView findView(URL resource) {
    3.56 -                final Worker<Void> w = webView.getEngine().getLoadWorker();
    3.57 -                w.stateProperty().addListener(new ChangeListener<Worker.State>() {
    3.58 -                    @Override
    3.59 -                    public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State newState) {
    3.60 -                        if (newState.equals(Worker.State.SUCCEEDED)) {
    3.61 -                            onPageLoad();
    3.62 -                        }
    3.63 -                        if (newState.equals(Worker.State.FAILED)) {
    3.64 -                            throw new IllegalStateException("Failed to load " + url);
    3.65 -                        }
    3.66 -                    }
    3.67 -                });
    3.68 -                
    3.69 -                return webView;
    3.70 -            }
    3.71 -        }
    3.72 -        BrowserBuilder.newBrowser(new Load()).
    3.73 +        BrowserBuilder.newBrowser(new Load(webView)).
    3.74              loadPage(url.toExternalForm()).
    3.75              loadClass(onPageLoad).
    3.76              invoke(methodName, args).
    3.77              showAndWait();
    3.78      }
    3.79 +    
    3.80 +    /** Enables the Java/JavaScript bridge (that supports {@link JavaScriptBody} and co.)
    3.81 +     * in the provided <code>webView</code>. This method returns 
    3.82 +     * immediately. Once the support is active, it calls back specified
    3.83 +     * method in <code>onPageLoad</code>'s run method. 
    3.84 +     * This is more convenient way to initialize the webview, 
    3.85 +     * but it requires one to make sure
    3.86 +     * all {@link JavaScriptBody} methods has been post-processed during
    3.87 +     * compilation and there will be no need to instantiate new classloader.
    3.88 +     * <p>
    3.89 +     * This method sets {@link WebView#getUserData()} and {@link #runInBrowser(javafx.scene.web.WebView, java.lang.Runnable)}
    3.90 +     * relies on the value. Please don't alter it.
    3.91 +     * 
    3.92 +     * @param webView the instance of Web View to tweak
    3.93 +     * @param url the URL of the HTML page to load into the view
    3.94 +     * @param onPageLoad callback to call when the page is ready
    3.95 +     * @since 0.8.1
    3.96 +     */
    3.97 +    public static void load(
    3.98 +        WebView webView, final URL url, Runnable onPageLoad
    3.99 +    ) {
   3.100 +        BrowserBuilder.newBrowser(new Load(webView)).
   3.101 +                loadPage(url.toExternalForm()).
   3.102 +                loadFinished(onPageLoad).
   3.103 +                showAndWait();
   3.104 +    }
   3.105 +    
   3.106 +    /** Executes a code inside of provided {@link WebView}. This method
   3.107 +     * associates the {@link BrwsrCtx execution context} with provided browser,
   3.108 +     * so the {@link JavaScriptBody} annotations know where to execute
   3.109 +     * their JavaScript bodies.
   3.110 +     * The code is going to be executed synchronously
   3.111 +     * in case {@link Platform#isFxApplicationThread()} returns <code>true</code>.
   3.112 +     * Otherwise this method returns immediately and the code is executed
   3.113 +     * later via {@link Platform#runLater(java.lang.Runnable)}.
   3.114 +     * <p>
   3.115 +     * This method relies on {@link WebView#getUserData()} being properly
   3.116 +     * provided by the <code>load</code> methods in this class.
   3.117 +     * 
   3.118 +     * @param webView the web view previously prepared by one of the <code>load</code>
   3.119 +     *   methods in this class
   3.120 +     * @param code the code to execute
   3.121 +     * @throws IllegalArgumentException if the web view was not properly
   3.122 +     *   initialized
   3.123 +     * @see BrwsrCtx#execute(java.lang.Runnable) 
   3.124 +     * @since 0.8.1
   3.125 +     */
   3.126 +    public static void runInBrowser(WebView webView, Runnable code) {
   3.127 +        Object ud = webView.getUserData();
   3.128 +        if (!(ud instanceof Load)) {
   3.129 +            throw new IllegalArgumentException();
   3.130 +        }
   3.131 +        ((Load)ud).execute(code);
   3.132 +    }
   3.133 +    
   3.134 +    private static class Load extends AbstractFXPresenter {
   3.135 +        private final WebView webView;
   3.136 +
   3.137 +        public Load(WebView webView) {
   3.138 +            webView.setUserData(this);
   3.139 +            this.webView = webView;
   3.140 +        }
   3.141 +        
   3.142 +        @Override
   3.143 +        protected void waitFinished() {
   3.144 +            // don't wait
   3.145 +        }
   3.146 +
   3.147 +        @Override
   3.148 +        protected WebView findView(final URL resource) {
   3.149 +            final Worker<Void> w = webView.getEngine().getLoadWorker();
   3.150 +            w.stateProperty().addListener(new ChangeListener<Worker.State>() {
   3.151 +                private String previous;
   3.152 +
   3.153 +                @Override
   3.154 +                public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State newState) {
   3.155 +                    if (newState.equals(Worker.State.SUCCEEDED)) {
   3.156 +                        if (checkValid()) {
   3.157 +                            onPageLoad();
   3.158 +                        }
   3.159 +                    }
   3.160 +                    if (newState.equals(Worker.State.FAILED)) {
   3.161 +                        checkValid();
   3.162 +                        throw new IllegalStateException("Failed to load " + resource);
   3.163 +                    }
   3.164 +                }
   3.165 +
   3.166 +                private boolean checkValid() {
   3.167 +                    final String crnt = webView.getEngine().getLocation();
   3.168 +                    if (previous != null && !previous.equals(crnt)) {
   3.169 +                        w.stateProperty().removeListener(this);
   3.170 +                        return false;
   3.171 +                    }
   3.172 +                    previous = crnt;
   3.173 +                    return true;
   3.174 +                }
   3.175 +            });
   3.176 +
   3.177 +            return webView;
   3.178 +        }
   3.179 +    }
   3.180 +    
   3.181  }
     4.1 --- a/boot-fx/src/main/java/org/netbeans/html/boot/fx/AbstractFXPresenter.java	Wed Mar 12 20:26:58 2014 +0100
     4.2 +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/AbstractFXPresenter.java	Fri Jul 25 10:45:12 2014 +0200
     4.3 @@ -54,6 +54,10 @@
     4.4  import java.util.logging.Level;
     4.5  import java.util.logging.Logger;
     4.6  import javafx.application.Platform;
     4.7 +import javafx.collections.ObservableList;
     4.8 +import javafx.scene.Node;
     4.9 +import javafx.scene.Parent;
    4.10 +import javafx.scene.layout.BorderPane;
    4.11  import javafx.scene.web.WebEngine;
    4.12  import javafx.scene.web.WebView;
    4.13  import netscape.javascript.JSObject;
    4.14 @@ -61,16 +65,31 @@
    4.15  
    4.16  /**
    4.17   *
    4.18 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    4.19 + * @author Jaroslav Tulach
    4.20   */
    4.21  public abstract class AbstractFXPresenter 
    4.22 -implements Fn.Presenter, Fn.ToJavaScript, Fn.FromJavaScript, Executor {
    4.23 +implements Fn.Presenter, Fn.ToJavaScript, Fn.FromJavaScript, Executor, Cloneable {
    4.24      static final Logger LOG = Logger.getLogger(FXPresenter.class.getName());
    4.25      protected static int cnt;
    4.26 -    protected List<String> scripts;
    4.27      protected Runnable onLoad;
    4.28      protected WebEngine engine;
    4.29  
    4.30 +    // transient - e.g. not cloneable
    4.31 +    private JSObject arraySize;
    4.32 +    private JSObject wrapArrImpl;
    4.33 +
    4.34 +    @Override
    4.35 +    protected AbstractFXPresenter clone() {
    4.36 +        try {
    4.37 +            AbstractFXPresenter p = (AbstractFXPresenter) super.clone();
    4.38 +            p.arraySize = null;
    4.39 +            p.wrapArrImpl = null;
    4.40 +            return p;
    4.41 +        } catch (CloneNotSupportedException ex) {
    4.42 +            throw new IllegalStateException(ex);
    4.43 +        }
    4.44 +    }
    4.45 +    
    4.46      @Override
    4.47      public Fn defineFn(String code, String... names) {
    4.48          return defineJSFn(code, names);
    4.49 @@ -111,19 +130,20 @@
    4.50              sb.append(l).append('\n');
    4.51          }
    4.52          final String script = sb.toString();
    4.53 -        if (scripts != null) {
    4.54 -            scripts.add(script);
    4.55 -        }
    4.56          engine.executeScript(script);
    4.57      }
    4.58  
    4.59      protected final void onPageLoad() {
    4.60 -        if (scripts != null) {
    4.61 -            for (String s : scripts) {
    4.62 -                engine.executeScript(s);
    4.63 +        Closeable c = Fn.activate(this.clone());
    4.64 +        try {
    4.65 +            onLoad.run();
    4.66 +        } finally {
    4.67 +            try {
    4.68 +                c.close();
    4.69 +            } catch (IOException ex) {
    4.70 +                LOG.log(Level.SEVERE, null, ex);
    4.71              }
    4.72          }
    4.73 -        onLoad.run();
    4.74      }
    4.75  
    4.76      @Override
    4.77 @@ -131,20 +151,29 @@
    4.78          this.onLoad = onLoad;
    4.79          final WebView view = findView(resource);
    4.80          this.engine = view.getEngine();
    4.81 +        boolean inspectOn = false;
    4.82          try {
    4.83              if (FXInspect.initialize(engine)) {
    4.84 -                scripts = new ArrayList<String>();
    4.85 +                inspectOn = true;
    4.86              }
    4.87          } catch (Throwable ex) {
    4.88              ex.printStackTrace();
    4.89          }
    4.90 +        final boolean isInspectOn = inspectOn;
    4.91  
    4.92          class Run implements Runnable {
    4.93  
    4.94              @Override
    4.95              public void run() {
    4.96 -                if (scripts != null) {
    4.97 +                if (isInspectOn) {
    4.98                      view.setContextMenuEnabled(true);
    4.99 +                    final Parent p = view.getParent();
   4.100 +                    if (p instanceof BorderPane) {
   4.101 +                        BorderPane bp = (BorderPane) p;
   4.102 +                        if (bp.getTop() == null) {
   4.103 +                            bp.setTop(new FXToolbar(view, bp));
   4.104 +                        }
   4.105 +                    }
   4.106                  }
   4.107                  engine.load(resource.toExternalForm());
   4.108              }
   4.109 @@ -172,7 +201,6 @@
   4.110          return wrapArr;
   4.111      }
   4.112  
   4.113 -    private JSObject wrapArrImpl;
   4.114      private final JSObject wrapArrFn() {
   4.115          if (wrapArrImpl == null) {
   4.116              try {
   4.117 @@ -198,7 +226,6 @@
   4.118          arraySizeFn().call("array", val, arr);
   4.119          return arr;
   4.120      }
   4.121 -    private JSObject arraySize;
   4.122      private final JSObject arraySizeFn() {
   4.123          if (arraySize == null) {
   4.124              try {
     5.1 --- a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java	Wed Mar 12 20:26:58 2014 +0100
     5.2 +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXBrwsr.java	Fri Jul 25 10:45:12 2014 +0200
     5.3 @@ -43,6 +43,7 @@
     5.4  package org.netbeans.html.boot.fx;
     5.5  
     5.6  import java.net.URL;
     5.7 +import java.util.ResourceBundle;
     5.8  import java.util.concurrent.CountDownLatch;
     5.9  import java.util.concurrent.Executors;
    5.10  import java.util.logging.Level;
    5.11 @@ -58,13 +59,17 @@
    5.12  import javafx.geometry.Pos;
    5.13  import javafx.scene.Scene;
    5.14  import javafx.scene.control.Button;
    5.15 +import javafx.scene.control.TextField;
    5.16  import javafx.scene.layout.BorderPane;
    5.17 +import javafx.scene.layout.HBox;
    5.18  import javafx.scene.layout.VBox;
    5.19  import javafx.scene.text.Text;
    5.20 +import javafx.scene.web.PromptData;
    5.21  import javafx.scene.web.WebEvent;
    5.22  import javafx.scene.web.WebView;
    5.23  import javafx.stage.Modality;
    5.24  import javafx.stage.Stage;
    5.25 +import javafx.util.Callback;
    5.26  
    5.27  /** This is an implementation class, to implement browser builder API. Just
    5.28   * include this JAR on classpath and the browser builder API will find
    5.29 @@ -121,6 +126,7 @@
    5.30              return INSTANCE.newView(url, onLoad);
    5.31          }
    5.32      }
    5.33 +    private Stage stage;
    5.34  
    5.35      @Override
    5.36      public void start(Stage primaryStage) throws Exception {
    5.37 @@ -133,6 +139,7 @@
    5.38          primaryStage.setScene(scene);
    5.39          primaryStage.show();
    5.40          this.root = r;
    5.41 +        this.stage = primaryStage;
    5.42      }
    5.43  
    5.44      private WebView newView(final URL url, final FXPresenter onLoad) {
    5.45 @@ -143,8 +150,10 @@
    5.46              public void handle(WebEvent<String> t) {
    5.47                  final Stage dialogStage = new Stage();
    5.48                  dialogStage.initModality(Modality.WINDOW_MODAL);
    5.49 -                dialogStage.setTitle("Warning");
    5.50 -                final Button button = new Button("Close");
    5.51 +                dialogStage.initOwner(stage);
    5.52 +                ResourceBundle r = ResourceBundle.getBundle("org/netbeans/html/boot/fx/Bundle"); // NOI18N
    5.53 +                dialogStage.setTitle(r.getString("AlertTitle")); // NOI18N
    5.54 +                final Button button = new Button(r.getString("AlertCloseButton")); // NOI18N
    5.55                  final Text text = new Text(t.getData());
    5.56                  VBox box = new VBox();
    5.57                  box.setAlignment(Pos.CENTER);
    5.58 @@ -153,29 +162,108 @@
    5.59                  box.getChildren().addAll(text, button);
    5.60                  dialogStage.setScene(new Scene(box));
    5.61                  button.setCancelButton(true);
    5.62 -                button.setOnAction(new EventHandler<ActionEvent>() {
    5.63 -                    @Override
    5.64 -                    public void handle(ActionEvent t) {
    5.65 -                        dialogStage.close();
    5.66 -                    }
    5.67 -                });
    5.68 +                button.setOnAction(new CloseDialogHandler(dialogStage, null));
    5.69                  dialogStage.centerOnScreen();
    5.70                  dialogStage.showAndWait();
    5.71              }
    5.72          });
    5.73 +        view.getEngine().setConfirmHandler(new Callback<String, Boolean>() {
    5.74 +            @Override
    5.75 +            public Boolean call(String question) {
    5.76 +                final Stage dialogStage = new Stage();
    5.77 +                dialogStage.initModality(Modality.WINDOW_MODAL);
    5.78 +                dialogStage.initOwner(stage);
    5.79 +                ResourceBundle r = ResourceBundle.getBundle("org/netbeans/html/boot/fx/Bundle"); // NOI18N
    5.80 +                dialogStage.setTitle(r.getString("ConfirmTitle")); // NOI18N
    5.81 +                final Button ok = new Button(r.getString("ConfirmOKButton")); // NOI18N
    5.82 +                final Button cancel = new Button(r.getString("ConfirmCancelButton")); // NOI18N
    5.83 +                final Text text = new Text(question);
    5.84 +                final Insets ins = new Insets(10);
    5.85 +                final VBox box = new VBox();
    5.86 +                box.setAlignment(Pos.CENTER);
    5.87 +                box.setSpacing(10);
    5.88 +                box.setPadding(ins);
    5.89 +                final HBox buttons = new HBox(10);
    5.90 +                buttons.getChildren().addAll(ok, cancel);
    5.91 +                buttons.setAlignment(Pos.CENTER);
    5.92 +                buttons.setPadding(ins);
    5.93 +                box.getChildren().addAll(text, buttons);
    5.94 +                dialogStage.setScene(new Scene(box));
    5.95 +                ok.setCancelButton(false);
    5.96 +                
    5.97 +                final boolean[] res = new boolean[1];
    5.98 +                ok.setOnAction(new CloseDialogHandler(dialogStage, res));
    5.99 +                cancel.setCancelButton(true);
   5.100 +                cancel.setOnAction(new CloseDialogHandler(dialogStage, null));
   5.101 +                dialogStage.centerOnScreen();
   5.102 +                dialogStage.showAndWait();
   5.103 +                return res[0];
   5.104 +            }
   5.105 +        });
   5.106 +        view.getEngine().setPromptHandler(new Callback<PromptData, String>() {
   5.107 +            @Override
   5.108 +            public String call(PromptData prompt) {
   5.109 +                final Stage dialogStage = new Stage();
   5.110 +                dialogStage.initModality(Modality.WINDOW_MODAL);
   5.111 +                dialogStage.initOwner(stage);
   5.112 +                ResourceBundle r = ResourceBundle.getBundle("org/netbeans/html/boot/fx/Bundle"); // NOI18N
   5.113 +                dialogStage.setTitle(r.getString("PromptTitle")); // NOI18N
   5.114 +                final Button ok = new Button(r.getString("PromptOKButton")); // NOI18N
   5.115 +                final Button cancel = new Button(r.getString("PromptCancelButton")); // NOI18N
   5.116 +                final Text text = new Text(prompt.getMessage());
   5.117 +                final TextField line = new TextField();
   5.118 +                if (prompt.getDefaultValue() != null) {
   5.119 +                    line.setText(prompt.getDefaultValue());
   5.120 +                }
   5.121 +                final Insets ins = new Insets(10);
   5.122 +                final VBox box = new VBox();
   5.123 +                box.setAlignment(Pos.CENTER);
   5.124 +                box.setSpacing(10);
   5.125 +                box.setPadding(ins);
   5.126 +                final HBox buttons = new HBox(10);
   5.127 +                buttons.getChildren().addAll(ok, cancel);
   5.128 +                buttons.setAlignment(Pos.CENTER);
   5.129 +                buttons.setPadding(ins);
   5.130 +                box.getChildren().addAll(text, line, buttons);
   5.131 +                dialogStage.setScene(new Scene(box));
   5.132 +                ok.setCancelButton(false);
   5.133 +                
   5.134 +                final boolean[] res = new boolean[1];
   5.135 +                ok.setOnAction(new CloseDialogHandler(dialogStage, res));
   5.136 +                cancel.setCancelButton(true);
   5.137 +                cancel.setOnAction(new CloseDialogHandler(dialogStage, null));
   5.138 +                dialogStage.centerOnScreen();
   5.139 +                dialogStage.showAndWait();
   5.140 +                return res[0] ? line.getText() : null;
   5.141 +            }
   5.142 +        });
   5.143          root.setCenter(view);
   5.144          final Worker<Void> w = view.getEngine().getLoadWorker();
   5.145          w.stateProperty().addListener(new ChangeListener<Worker.State>() {
   5.146 +            private String previous;
   5.147 +            
   5.148              @Override
   5.149              public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State newState) {
   5.150                  if (newState.equals(Worker.State.SUCCEEDED)) {
   5.151 -                    FXConsole.register(view.getEngine());
   5.152 -                    onLoad.onPageLoad();
   5.153 +                    if (checkValid()) {
   5.154 +                        FXConsole.register(view.getEngine());
   5.155 +                        onLoad.onPageLoad();
   5.156 +                    }
   5.157                  }
   5.158                  if (newState.equals(Worker.State.FAILED)) {
   5.159                      throw new IllegalStateException("Failed to load " + url);
   5.160                  }
   5.161              }
   5.162 +            private boolean checkValid() {
   5.163 +                final String crnt = view.getEngine().getLocation();
   5.164 +                if (previous != null && !previous.equals(crnt)) {
   5.165 +                    w.stateProperty().removeListener(this);
   5.166 +                    return false;
   5.167 +                }
   5.168 +                previous = crnt;
   5.169 +                return true;
   5.170 +            }
   5.171 +            
   5.172          });
   5.173          return view;
   5.174      }
   5.175 @@ -191,4 +279,22 @@
   5.176          }
   5.177      }
   5.178      
   5.179 +    private static final class CloseDialogHandler implements EventHandler<ActionEvent> {
   5.180 +        private final Stage dialogStage;
   5.181 +        private final boolean[] res;
   5.182 +
   5.183 +        public CloseDialogHandler(Stage dialogStage, boolean[] res) {
   5.184 +            this.dialogStage = dialogStage;
   5.185 +            this.res = res;
   5.186 +        }
   5.187 +
   5.188 +        @Override
   5.189 +        public void handle(ActionEvent t) {
   5.190 +            dialogStage.close();
   5.191 +            if (res != null) {
   5.192 +                res[0] = true;
   5.193 +            }
   5.194 +        }
   5.195 +    }
   5.196 +    
   5.197  }
     6.1 --- a/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXInspect.java	Wed Mar 12 20:26:58 2014 +0100
     6.2 +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXInspect.java	Fri Jul 25 10:45:12 2014 +0200
     6.3 @@ -59,7 +59,7 @@
     6.4   * @author Jaroslav Tulach <jtulach@netbeans.org>
     6.5   */
     6.6  final class FXInspect implements Runnable {
     6.7 -    private static final Logger LOG = Logger.getLogger(FXInspect.class.getName());
     6.8 +    static final Logger LOG = Logger.getLogger(FXInspect.class.getName());
     6.9      
    6.10      
    6.11      private final WebEngine engine;
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/FXToolbar.java	Fri Jul 25 10:45:12 2014 +0200
     7.3 @@ -0,0 +1,415 @@
     7.4 +/**
     7.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     7.6 + *
     7.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
     7.8 + *
     7.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    7.10 + * Other names may be trademarks of their respective owners.
    7.11 + *
    7.12 + * The contents of this file are subject to the terms of either the GNU
    7.13 + * General Public License Version 2 only ("GPL") or the Common
    7.14 + * Development and Distribution License("CDDL") (collectively, the
    7.15 + * "License"). You may not use this file except in compliance with the
    7.16 + * License. You can obtain a copy of the License at
    7.17 + * http://www.netbeans.org/cddl-gplv2.html
    7.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    7.19 + * specific language governing permissions and limitations under the
    7.20 + * License.  When distributing the software, include this License Header
    7.21 + * Notice in each file and include the License file at
    7.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    7.23 + * particular file as subject to the "Classpath" exception as provided
    7.24 + * by Oracle in the GPL Version 2 section of the License file that
    7.25 + * accompanied this code. If applicable, add the following below the
    7.26 + * License Header, with the fields enclosed by brackets [] replaced by
    7.27 + * your own identifying information:
    7.28 + * "Portions Copyrighted [year] [name of copyright owner]"
    7.29 + *
    7.30 + * Contributor(s):
    7.31 + *
    7.32 + * The Original Software is NetBeans. The Initial Developer of the Original
    7.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
    7.34 + *
    7.35 + * If you wish your version of this file to be governed by only the CDDL
    7.36 + * or only the GPL Version 2, indicate your decision by adding
    7.37 + * "[Contributor] elects to include this software in this distribution
    7.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
    7.39 + * single choice of license, a recipient has the option to distribute
    7.40 + * your version of this file under either the CDDL, the GPL Version 2 or
    7.41 + * to extend the choice of license to its licensees as provided above.
    7.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
    7.43 + * Version 2 license, then the option applies only if the new code is
    7.44 + * made subject to such option by the copyright holder.
    7.45 + */
    7.46 +package org.netbeans.html.boot.fx;
    7.47 +
    7.48 +import java.io.IOException;
    7.49 +import java.net.URISyntaxException;
    7.50 +import java.util.ArrayList;
    7.51 +import java.util.List;
    7.52 +import java.util.logging.Level;
    7.53 +import java.util.prefs.Preferences;
    7.54 +import javafx.beans.InvalidationListener;
    7.55 +import javafx.beans.Observable;
    7.56 +import javafx.beans.value.ChangeListener;
    7.57 +import javafx.beans.value.ObservableValue;
    7.58 +import javafx.collections.FXCollections;
    7.59 +import javafx.event.ActionEvent;
    7.60 +import javafx.event.EventHandler;
    7.61 +import javafx.scene.control.Button;
    7.62 +import javafx.scene.control.CheckBox;
    7.63 +import javafx.scene.control.ComboBox;
    7.64 +import javafx.scene.control.ScrollPane;
    7.65 +import javafx.scene.control.Separator;
    7.66 +import javafx.scene.control.Toggle;
    7.67 +import javafx.scene.control.ToggleButton;
    7.68 +import javafx.scene.control.ToggleGroup;
    7.69 +import javafx.scene.control.ToolBar;
    7.70 +import javafx.scene.control.Tooltip;
    7.71 +import javafx.scene.image.Image;
    7.72 +import javafx.scene.image.ImageView;
    7.73 +import javafx.scene.layout.BorderPane;
    7.74 +import javafx.scene.web.WebView;
    7.75 +
    7.76 +final class FXToolbar extends ToolBar {
    7.77 +    private final ArrayList<ResizeBtn> resizeButtons;
    7.78 +    private final WebView webView;
    7.79 +    private final BorderPane container;
    7.80 +    private final ToggleGroup resizeGroup = new ToggleGroup();
    7.81 +    private final ComboBox<String> comboZoom = new ComboBox<String>();
    7.82 +    private WatchDir watcher;
    7.83 +    
    7.84 +    FXToolbar(WebView wv, BorderPane container) {
    7.85 +        this.webView = wv;
    7.86 +        this.container = container;
    7.87 +        
    7.88 +        List<ResizeOption> options = ResizeOption.loadAll();
    7.89 +        options.add( 0, ResizeOption.SIZE_TO_FIT );
    7.90 +        resizeButtons = new ArrayList<ResizeBtn>( options.size() );
    7.91 +
    7.92 +        for( ResizeOption ro : options ) {
    7.93 +            ResizeBtn button = new ResizeBtn(ro);
    7.94 +            resizeButtons.add( button );
    7.95 +            resizeGroup.getToggles().add( button );
    7.96 +            getItems().add( button );
    7.97 +        }
    7.98 +        resizeButtons.get( 0 ).setSelected( true );
    7.99 +        resizeGroup.selectedToggleProperty().addListener( new InvalidationListener() {
   7.100 +
   7.101 +            @Override
   7.102 +            public void invalidated( Observable o ) {
   7.103 +                resize();
   7.104 +            }
   7.105 +        });
   7.106 +        
   7.107 +        getItems().add( new Separator() );
   7.108 +
   7.109 +        getItems().add( comboZoom );
   7.110 +        ArrayList<String> zoomModel = new ArrayList<String>( 6 );
   7.111 +        zoomModel.add( "200%" ); //NOI18N
   7.112 +        zoomModel.add( "150%" ); //NOI18N
   7.113 +        zoomModel.add( "100%" ); //NOI18N
   7.114 +        zoomModel.add( "75%" ); //NOI18N
   7.115 +        zoomModel.add( "50%" ); //NOI18N
   7.116 +        comboZoom.setItems( FXCollections.observableList( zoomModel ) );
   7.117 +        comboZoom.setEditable( true );
   7.118 +        comboZoom.setValue( "100%" ); //NOI18N
   7.119 +        comboZoom.valueProperty().addListener( new ChangeListener<String>() {
   7.120 +
   7.121 +            @Override
   7.122 +            public void changed( ObservableValue<? extends String> ov, String t, String t1 ) {
   7.123 +                String newZoom = zoom( t1 );
   7.124 +                comboZoom.setValue( newZoom );
   7.125 +            }
   7.126 +        });
   7.127 +        
   7.128 +        getItems().add(new Separator());
   7.129 +        final CheckBox automatic = new CheckBox("Automatic");
   7.130 +        final Preferences prefs = Preferences.userNodeForPackage(FXToolbar.class);
   7.131 +        final String ar = "automaticReload"; // NOI18N
   7.132 +        automatic.setSelected(prefs.getBoolean(ar, true));
   7.133 +        getItems().add(automatic);
   7.134 +        final Button reload = new Button("Reload");
   7.135 +        getItems().add(reload);
   7.136 +        reload.setOnAction(new EventHandler<ActionEvent>() {
   7.137 +            @Override
   7.138 +            public void handle(ActionEvent event) {
   7.139 +                webView.getEngine().reload();
   7.140 +            }
   7.141 +        });
   7.142 +        automatic.setOnAction(new EventHandler<ActionEvent>() {
   7.143 +            @Override
   7.144 +            public void handle(ActionEvent event) {
   7.145 +                prefs.putBoolean(ar, automatic.isSelected());
   7.146 +                listenOnChanges(automatic.isSelected());
   7.147 +            }
   7.148 +        });
   7.149 +        webView.getEngine().locationProperty().addListener(new ChangeListener<String>() {
   7.150 +            @Override
   7.151 +            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
   7.152 +                listenOnChanges(automatic.isSelected());
   7.153 +            }
   7.154 +        });
   7.155 +    }
   7.156 +
   7.157 +    private String zoom( String zoomFactor ) {
   7.158 +        if( zoomFactor.trim().isEmpty() )
   7.159 +            return null;
   7.160 +
   7.161 +        try {
   7.162 +            zoomFactor = zoomFactor.replaceAll( "\\%", ""); //NOI18N
   7.163 +            zoomFactor = zoomFactor.trim();
   7.164 +            double zoom = Double.parseDouble( zoomFactor );
   7.165 +            zoom = Math.abs( zoom )/100;
   7.166 +            if( zoom <= 0.0 )
   7.167 +                return null;
   7.168 +            webView.setScaleX(zoom);
   7.169 +            webView.setScaleY(zoom);
   7.170 +            webView.setScaleZ(zoom);
   7.171 +            return (int)(100*zoom) + "%"; //NOI18N
   7.172 +        } catch( NumberFormatException nfe ) {
   7.173 +            //ignore
   7.174 +        }
   7.175 +        return null;
   7.176 +    }
   7.177 +
   7.178 +    private void resize() {
   7.179 +        Toggle selection = resizeGroup.getSelectedToggle();
   7.180 +        if( selection instanceof ResizeBtn ) {
   7.181 +            ResizeOption ro = ((ResizeBtn)selection).getResizeOption();
   7.182 +            if( ro == ResizeOption.SIZE_TO_FIT ) {
   7.183 +                _autofit();
   7.184 +            } else {
   7.185 +                _resize( ro.getWidth(), ro.getHeight() );
   7.186 +            }
   7.187 +        }
   7.188 +
   7.189 +    }
   7.190 +
   7.191 +    private void _resize( final double width, final double height ) {
   7.192 +        ScrollPane scroll;
   7.193 +        if (container.getCenter() == webView) {
   7.194 +            scroll = new ScrollPane();
   7.195 +            scroll.setContent(webView);
   7.196 +            container.setCenter(scroll);
   7.197 +        } else {
   7.198 +            scroll = (ScrollPane) container.getCenter();
   7.199 +        }
   7.200 +        scroll.setPrefViewportWidth( width );
   7.201 +        scroll.setPrefViewportHeight(height );
   7.202 +        webView.setMaxWidth( width );
   7.203 +        webView.setMaxHeight( height );
   7.204 +        webView.setMinWidth( width );
   7.205 +        webView.setMinHeight( height );
   7.206 +    }
   7.207 +
   7.208 +    private void _autofit() {
   7.209 +        if (container.getCenter() != webView) {
   7.210 +            container.setCenter(webView);
   7.211 +        }
   7.212 +        webView.setMaxWidth( Integer.MAX_VALUE );
   7.213 +        webView.setMaxHeight( Integer.MAX_VALUE );
   7.214 +        webView.setMinWidth( -1 );
   7.215 +        webView.setMinHeight( -1 );
   7.216 +        webView.autosize();
   7.217 +    }
   7.218 +
   7.219 +    /**
   7.220 +     * Button to resize the browser window.
   7.221 +     * Taken from NetBeans. Kept GPLwithCPEx license.
   7.222 +     * Portions Copyrighted 2012 Sun Microsystems, Inc.
   7.223 +     *
   7.224 +     * @author S. Aubrecht
   7.225 +     */
   7.226 +    static final class ResizeBtn extends ToggleButton {
   7.227 +
   7.228 +        private final ResizeOption resizeOption;
   7.229 +
   7.230 +        ResizeBtn(ResizeOption resizeOption) {
   7.231 +            super(null, new ImageView(toImage(resizeOption)));
   7.232 +            this.resizeOption = resizeOption;
   7.233 +            setTooltip(new Tooltip(resizeOption.getToolTip()));
   7.234 +        }
   7.235 +
   7.236 +        ResizeOption getResizeOption() {
   7.237 +            return resizeOption;
   7.238 +        }
   7.239 +
   7.240 +        static Image toImage(ResizeOption ro) {
   7.241 +            if (ro == ResizeOption.SIZE_TO_FIT) {
   7.242 +                return ResizeOption.Type.CUSTOM.getImage();
   7.243 +            }
   7.244 +            return ro.getType().getImage();
   7.245 +        }
   7.246 +    }
   7.247 +
   7.248 +    /**
   7.249 +     * Immutable value class describing a single button to resize web browser window.
   7.250 +     * Taken from NetBeans. Kept GPLwithCPEx license.
   7.251 +     * Portions Copyrighted 2012 Sun Microsystems, Inc.
   7.252 +     *
   7.253 +     * @author S. Aubrecht
   7.254 +     */
   7.255 +    static final class ResizeOption {
   7.256 +
   7.257 +        private final Type type;
   7.258 +        private final String displayName;
   7.259 +        private final int width;
   7.260 +        private final int height;
   7.261 +        private final boolean isDefault;
   7.262 +
   7.263 +        enum Type {
   7.264 +            DESKTOP("desktop.png"), 
   7.265 +            TABLET_PORTRAIT("tabletPortrait.png"), 
   7.266 +            TABLET_LANDSCAPE("tabletLandscape.png"), 
   7.267 +            SMARTPHONE_PORTRAIT("handheldPortrait.png"), 
   7.268 +            SMARTPHONE_LANDSCAPE("handheldLandscape.png"), 
   7.269 +            WIDESCREEN("widescreen.png"), 
   7.270 +            NETBOOK("netbook.png"), 
   7.271 +            CUSTOM("sizeToFit.png");
   7.272 +            
   7.273 +            
   7.274 +            private final String resource;
   7.275 +
   7.276 +            private Type(String r) {
   7.277 +                resource = r;
   7.278 +            }
   7.279 +
   7.280 +            public Image getImage() {
   7.281 +                return new Image(Type.class.getResourceAsStream(resource));
   7.282 +            }
   7.283 +        }
   7.284 +
   7.285 +        private ResizeOption(Type type, String displayName, int width, int height, boolean showInToolbar, boolean isDefault) {
   7.286 +            super();
   7.287 +            this.type = type;
   7.288 +            this.displayName = displayName;
   7.289 +            this.width = width;
   7.290 +            this.height = height;
   7.291 +            this.isDefault = isDefault;
   7.292 +        }
   7.293 +
   7.294 +        static List<ResizeOption> loadAll() {
   7.295 +            List<ResizeOption> res = new ArrayList<ResizeOption>(10);
   7.296 +            res.add(ResizeOption.create(ResizeOption.Type.DESKTOP, "Desktop", 1280, 1024, true, true));
   7.297 +            res.add(ResizeOption.create(ResizeOption.Type.TABLET_LANDSCAPE, "Tablet Landscape", 1024, 768, true, true));
   7.298 +            res.add(ResizeOption.create(ResizeOption.Type.TABLET_PORTRAIT, "Tablet Portrait", 768, 1024, true, true));
   7.299 +            res.add(ResizeOption.create(ResizeOption.Type.SMARTPHONE_LANDSCAPE, "Smartphone Landscape", 480, 320, true, true));
   7.300 +            res.add(ResizeOption.create(ResizeOption.Type.SMARTPHONE_PORTRAIT, "Smartphone Portrait", 320, 480, true, true));
   7.301 +            res.add(ResizeOption.create(ResizeOption.Type.WIDESCREEN, "Widescreen", 1680, 1050, false, true));
   7.302 +            res.add(ResizeOption.create(ResizeOption.Type.NETBOOK, "Netbook", 1024, 600, false, true));
   7.303 +            return res;
   7.304 +        }
   7.305 +        
   7.306 +        /**
   7.307 +         * Creates a new instance.
   7.308 +         * @param type
   7.309 +         * @param displayName Display name to show in tooltip, cannot be empty.
   7.310 +         * @param width Screen width
   7.311 +         * @param height Screen height
   7.312 +         * @param showInToolbar True to show in web developer toolbar.
   7.313 +         * @param isDefault True if this is a predefined option that cannot be removed.
   7.314 +         * @return New instance.
   7.315 +         */
   7.316 +        public static ResizeOption create(Type type, String displayName, int width, int height, boolean showInToolbar, boolean isDefault) {
   7.317 +            if (width <= 0 || height <= 0) {
   7.318 +                throw new IllegalArgumentException("Invalid screen dimensions: " + width + " x " + height); //NOI18N
   7.319 +            }
   7.320 +            return new ResizeOption(type, displayName, width, height, showInToolbar, isDefault);
   7.321 +        }
   7.322 +        /**
   7.323 +         * An extra option to size the browser content to fit its window.
   7.324 +         */
   7.325 +        public static final ResizeOption SIZE_TO_FIT = new ResizeOption(Type.CUSTOM, "Size To Fit", -1, -1, true, true);
   7.326 +
   7.327 +        public String getDisplayName() {
   7.328 +            return displayName;
   7.329 +        }
   7.330 +
   7.331 +        public Type getType() {
   7.332 +            return type;
   7.333 +        }
   7.334 +
   7.335 +        public int getWidth() {
   7.336 +            return width;
   7.337 +        }
   7.338 +
   7.339 +        public int getHeight() {
   7.340 +            return height;
   7.341 +        }
   7.342 +
   7.343 +        public boolean isDefault() {
   7.344 +            return isDefault;
   7.345 +        }
   7.346 +
   7.347 +        @Override
   7.348 +        public String toString() {
   7.349 +            return displayName;
   7.350 +        }
   7.351 +
   7.352 +        public String getToolTip() {
   7.353 +            if (width < 0 || height < 0) {
   7.354 +                return displayName;
   7.355 +            }
   7.356 +            StringBuilder sb = new StringBuilder();
   7.357 +            sb.append(width);
   7.358 +            sb.append(" x "); //NOI18N
   7.359 +            sb.append(height);
   7.360 +            sb.append(" ("); //NOI18N
   7.361 +            sb.append(displayName);
   7.362 +            sb.append(')'); //NOI18N
   7.363 +            return sb.toString();
   7.364 +        }
   7.365 +
   7.366 +        @Override
   7.367 +        public boolean equals(Object obj) {
   7.368 +            if (obj == null) {
   7.369 +                return false;
   7.370 +            }
   7.371 +            if (getClass() != obj.getClass()) {
   7.372 +                return false;
   7.373 +            }
   7.374 +            final ResizeOption other = (ResizeOption) obj;
   7.375 +            if (this.type != other.type) {
   7.376 +                return false;
   7.377 +            }
   7.378 +            if ((this.displayName == null) ? (other.displayName != null) : !this.displayName.equals(other.displayName)) {
   7.379 +                return false;
   7.380 +            }
   7.381 +            if (this.width != other.width) {
   7.382 +                return false;
   7.383 +            }
   7.384 +            if (this.height != other.height) {
   7.385 +                return false;
   7.386 +            }
   7.387 +            if (this.isDefault != other.isDefault) {
   7.388 +                return false;
   7.389 +            }
   7.390 +            return true;
   7.391 +        }
   7.392 +
   7.393 +        @Override
   7.394 +        public int hashCode() {
   7.395 +            int hash = 7;
   7.396 +            hash = 11 * hash + (this.type != null ? this.type.hashCode() : 0);
   7.397 +            hash = 11 * hash + (this.displayName != null ? this.displayName.hashCode() : 0);
   7.398 +            hash = 11 * hash + this.width;
   7.399 +            hash = 11 * hash + this.height;
   7.400 +            hash = 11 * hash + (this.isDefault ? 1 : 0);
   7.401 +            return hash;
   7.402 +        }
   7.403 +    }
   7.404 +    
   7.405 +    private void listenOnChanges(boolean turnOn) {
   7.406 +        try {
   7.407 +            if (watcher != null) {
   7.408 +                watcher.close();
   7.409 +                watcher = null;
   7.410 +            }
   7.411 +            if (turnOn) {
   7.412 +                watcher = new WatchDir(webView.getEngine());
   7.413 +            }
   7.414 +        } catch (Exception ex) {
   7.415 +            FXInspect.LOG.log(Level.SEVERE, null, ex);
   7.416 +        }
   7.417 +    }
   7.418 +}
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/boot-fx/src/main/java/org/netbeans/html/boot/fx/WatchDir.java	Fri Jul 25 10:45:12 2014 +0200
     8.3 @@ -0,0 +1,117 @@
     8.4 +/**
     8.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     8.6 + *
     8.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
     8.8 + *
     8.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    8.10 + * Other names may be trademarks of their respective owners.
    8.11 + *
    8.12 + * The contents of this file are subject to the terms of either the GNU
    8.13 + * General Public License Version 2 only ("GPL") or the Common
    8.14 + * Development and Distribution License("CDDL") (collectively, the
    8.15 + * "License"). You may not use this file except in compliance with the
    8.16 + * License. You can obtain a copy of the License at
    8.17 + * http://www.netbeans.org/cddl-gplv2.html
    8.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    8.19 + * specific language governing permissions and limitations under the
    8.20 + * License.  When distributing the software, include this License Header
    8.21 + * Notice in each file and include the License file at
    8.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    8.23 + * particular file as subject to the "Classpath" exception as provided
    8.24 + * by Oracle in the GPL Version 2 section of the License file that
    8.25 + * accompanied this code. If applicable, add the following below the
    8.26 + * License Header, with the fields enclosed by brackets [] replaced by
    8.27 + * your own identifying information:
    8.28 + * "Portions Copyrighted [year] [name of copyright owner]"
    8.29 + *
    8.30 + * Contributor(s):
    8.31 + *
    8.32 + * The Original Software is NetBeans. The Initial Developer of the Original
    8.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
    8.34 + *
    8.35 + * If you wish your version of this file to be governed by only the CDDL
    8.36 + * or only the GPL Version 2, indicate your decision by adding
    8.37 + * "[Contributor] elects to include this software in this distribution
    8.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
    8.39 + * single choice of license, a recipient has the option to distribute
    8.40 + * your version of this file under either the CDDL, the GPL Version 2 or
    8.41 + * to extend the choice of license to its licensees as provided above.
    8.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
    8.43 + * Version 2 license, then the option applies only if the new code is
    8.44 + * made subject to such option by the copyright holder.
    8.45 + */
    8.46 +package org.netbeans.html.boot.fx;
    8.47 +
    8.48 +import java.io.IOException;
    8.49 +import java.net.URI;
    8.50 +import java.net.URISyntaxException;
    8.51 +import java.nio.file.ClosedWatchServiceException;
    8.52 +import java.nio.file.Path;
    8.53 +import java.nio.file.Paths;
    8.54 +import java.nio.file.StandardWatchEventKinds;
    8.55 +import java.nio.file.WatchKey;
    8.56 +import java.nio.file.WatchService;
    8.57 +import java.util.logging.Level;
    8.58 +import java.util.logging.Logger;
    8.59 +import javafx.application.Platform;
    8.60 +import javafx.scene.web.WebEngine;
    8.61 +
    8.62 +/**
    8.63 + *
    8.64 + * @author Jaroslav Tulach
    8.65 + */
    8.66 +final class WatchDir implements Runnable {
    8.67 +    private final Path dir;
    8.68 +    private final WatchKey key;
    8.69 +    private final WatchService ws; 
    8.70 +    private final Thread watcher;
    8.71 +    private final WebEngine engine;
    8.72 +    
    8.73 +    WatchDir(WebEngine eng) throws URISyntaxException, IOException {
    8.74 +        dir = Paths.get(new URI(eng.getLocation())).getParent();
    8.75 +        engine = eng;
    8.76 +        ws = dir.getFileSystem().newWatchService();
    8.77 +        key = dir.register(ws, 
    8.78 +            StandardWatchEventKinds.ENTRY_CREATE,
    8.79 +            StandardWatchEventKinds.ENTRY_DELETE,
    8.80 +            StandardWatchEventKinds.ENTRY_MODIFY
    8.81 +        );
    8.82 +        watcher = new Thread(this, "Watching files in " + dir);
    8.83 +        watcher.setDaemon(true);
    8.84 +        watcher.setPriority(Thread.MIN_PRIORITY);
    8.85 +        watcher.start();
    8.86 +    }
    8.87 +
    8.88 +    public void close() throws IOException {
    8.89 +        key.cancel();
    8.90 +        ws.close();
    8.91 +        watcher.interrupt();
    8.92 +    }
    8.93 +
    8.94 +    @Override
    8.95 +    public void run() {
    8.96 +        if (Platform.isFxApplicationThread()) {
    8.97 +            engine.reload();
    8.98 +            return;
    8.99 +        }
   8.100 +        try {
   8.101 +            while (key.isValid()) {
   8.102 +                WatchKey changed;
   8.103 +                try {
   8.104 +                    changed = ws.take();
   8.105 +                    if (changed != key || changed.pollEvents().isEmpty()) {
   8.106 +                        continue;
   8.107 +                    }
   8.108 +                } catch (ClosedWatchServiceException ex) {
   8.109 +                    continue;
   8.110 +                }
   8.111 +                Platform.runLater(this);
   8.112 +                if (!key.reset()) {
   8.113 +                    break;
   8.114 +                }
   8.115 +            }
   8.116 +        } catch (InterruptedException ex) {
   8.117 +            FXInspect.LOG.log(Level.SEVERE, null, ex);
   8.118 +        }
   8.119 +    }
   8.120 +}
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/boot-fx/src/main/resources/org/netbeans/html/boot/fx/Bundle.properties	Fri Jul 25 10:45:12 2014 +0200
     9.3 @@ -0,0 +1,53 @@
     9.4 +#
     9.5 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     9.6 +#
     9.7 +# Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
     9.8 +#
     9.9 +# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    9.10 +# Other names may be trademarks of their respective owners.
    9.11 +#
    9.12 +# The contents of this file are subject to the terms of either the GNU
    9.13 +# General Public License Version 2 only ("GPL") or the Common
    9.14 +# Development and Distribution License("CDDL") (collectively, the
    9.15 +# "License"). You may not use this file except in compliance with the
    9.16 +# License. You can obtain a copy of the License at
    9.17 +# http://www.netbeans.org/cddl-gplv2.html
    9.18 +# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    9.19 +# specific language governing permissions and limitations under the
    9.20 +# License.  When distributing the software, include this License Header
    9.21 +# Notice in each file and include the License file at
    9.22 +# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    9.23 +# particular file as subject to the "Classpath" exception as provided
    9.24 +# by Oracle in the GPL Version 2 section of the License file that
    9.25 +# accompanied this code. If applicable, add the following below the
    9.26 +# License Header, with the fields enclosed by brackets [] replaced by
    9.27 +# your own identifying information:
    9.28 +# "Portions Copyrighted [year] [name of copyright owner]"
    9.29 +#
    9.30 +# Contributor(s):
    9.31 +#
    9.32 +# The Original Software is NetBeans. The Initial Developer of the Original
    9.33 +# Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
    9.34 +#
    9.35 +# If you wish your version of this file to be governed by only the CDDL
    9.36 +# or only the GPL Version 2, indicate your decision by adding
    9.37 +# "[Contributor] elects to include this software in this distribution
    9.38 +# under the [CDDL or GPL Version 2] license." If you do not indicate a
    9.39 +# single choice of license, a recipient has the option to distribute
    9.40 +# your version of this file under either the CDDL, the GPL Version 2 or
    9.41 +# to extend the choice of license to its licensees as provided above.
    9.42 +# However, if you add GPL Version 2 code and therefore, elected the GPL
    9.43 +# Version 2 license, then the option applies only if the new code is
    9.44 +# made subject to such option by the copyright holder.
    9.45 +#
    9.46 +
    9.47 +AlertTitle=Warning
    9.48 +AlertCloseButton=Close
    9.49 +
    9.50 +ConfirmTitle=Question
    9.51 +ConfirmOKButton=OK
    9.52 +ConfirmCancelButton=Cancel
    9.53 +
    9.54 +PromptTitle=Question
    9.55 +PromptOKButton=OK
    9.56 +PromptCancelButton=Cancel
    10.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/desktop.png has changed
    11.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/handheldLandscape.png has changed
    12.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/handheldPortrait.png has changed
    13.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/netbook.png has changed
    14.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/selectionMode.png has changed
    15.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/sizeToFit.png has changed
    16.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/tabletLandscape.png has changed
    17.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/tabletPortrait.png has changed
    18.1 Binary file boot-fx/src/main/resources/org/netbeans/html/boot/fx/widescreen.png has changed
    19.1 --- a/boot-fx/src/test/java/net/java/html/boot/fx/FXBrowsersOnResourceTest.java	Wed Mar 12 20:26:58 2014 +0100
    19.2 +++ b/boot-fx/src/test/java/net/java/html/boot/fx/FXBrowsersOnResourceTest.java	Fri Jul 25 10:45:12 2014 +0200
    19.3 @@ -60,7 +60,7 @@
    19.4  
    19.5  /**
    19.6   *
    19.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    19.8 + * @author Jaroslav Tulach
    19.9   */
   19.10  public class FXBrowsersOnResourceTest {
   19.11      
    20.1 --- a/boot-fx/src/test/java/net/java/html/boot/fx/FXBrowsersTest.java	Wed Mar 12 20:26:58 2014 +0100
    20.2 +++ b/boot-fx/src/test/java/net/java/html/boot/fx/FXBrowsersTest.java	Fri Jul 25 10:45:12 2014 +0200
    20.3 @@ -51,16 +51,13 @@
    20.4  import javafx.scene.web.WebView;
    20.5  import javafx.stage.Stage;
    20.6  import net.java.html.js.JavaScriptBody;
    20.7 -import static org.testng.Assert.assertEquals;
    20.8 -import static org.testng.Assert.assertNotEquals;
    20.9 -import static org.testng.Assert.assertNotNull;
   20.10 -import static org.testng.Assert.assertNotSame;
   20.11 +import static org.testng.Assert.*;
   20.12  import org.testng.annotations.BeforeClass;
   20.13  import org.testng.annotations.Test;
   20.14  
   20.15  /**
   20.16   *
   20.17 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
   20.18 + * @author Jaroslav Tulach
   20.19   */
   20.20  public class FXBrowsersTest {
   20.21      
   20.22 @@ -117,6 +114,21 @@
   20.23          
   20.24          assertEquals(Integer.getInteger("finalFirst"), Integer.valueOf(3), "Three times in view one");
   20.25          assertEquals(Integer.getInteger("finalSecond"), Integer.valueOf(2), "Two times in view one");
   20.26 +
   20.27 +        final CountDownLatch finish = new CountDownLatch(1);
   20.28 +        final Object[] three = { 0 };
   20.29 +        assertFalse(Platform.isFxApplicationThread());
   20.30 +        FXBrowsers.runInBrowser(App.getV1(), new Runnable() {
   20.31 +            @Override
   20.32 +            public void run() {
   20.33 +                assertTrue(Platform.isFxApplicationThread());
   20.34 +                three[0] = App.getV1().getEngine().executeScript("window.cnt");
   20.35 +                finish.countDown();
   20.36 +            }
   20.37 +        });
   20.38 +        finish.await();
   20.39 +        
   20.40 +        assertEquals(three[0], Integer.valueOf(3));
   20.41      }
   20.42      
   20.43      public static class OnPages {
   20.44 @@ -132,7 +144,12 @@
   20.45              
   20.46              URL u = FXBrowsersTest.class.getResource("/org/netbeans/html/boot/fx/empty.html");
   20.47              assertNotNull(u, "URL found");
   20.48 -            FXBrowsers.load(App.getV2(), u, OnPages.class, "second", "Hello");
   20.49 +            FXBrowsers.load(App.getV2(), u, new Runnable() {
   20.50 +                @Override
   20.51 +                public void run() {
   20.52 +                    OnPages.second("Hello");
   20.53 +                }
   20.54 +            });
   20.55              
   20.56              assertEquals(increment(), 2, "Now it is two and not influenced by second view");
   20.57              System.setProperty("finalFirst", "" + increment());
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/boot-fx/src/test/java/org/netbeans/html/boot/fx/ReloadTest.java	Fri Jul 25 10:45:12 2014 +0200
    21.3 @@ -0,0 +1,157 @@
    21.4 +/**
    21.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    21.6 + *
    21.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    21.8 + *
    21.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   21.10 + * Other names may be trademarks of their respective owners.
   21.11 + *
   21.12 + * The contents of this file are subject to the terms of either the GNU
   21.13 + * General Public License Version 2 only ("GPL") or the Common
   21.14 + * Development and Distribution License("CDDL") (collectively, the
   21.15 + * "License"). You may not use this file except in compliance with the
   21.16 + * License. You can obtain a copy of the License at
   21.17 + * http://www.netbeans.org/cddl-gplv2.html
   21.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   21.19 + * specific language governing permissions and limitations under the
   21.20 + * License.  When distributing the software, include this License Header
   21.21 + * Notice in each file and include the License file at
   21.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   21.23 + * particular file as subject to the "Classpath" exception as provided
   21.24 + * by Oracle in the GPL Version 2 section of the License file that
   21.25 + * accompanied this code. If applicable, add the following below the
   21.26 + * License Header, with the fields enclosed by brackets [] replaced by
   21.27 + * your own identifying information:
   21.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   21.29 + *
   21.30 + * Contributor(s):
   21.31 + *
   21.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   21.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   21.34 + *
   21.35 + * If you wish your version of this file to be governed by only the CDDL
   21.36 + * or only the GPL Version 2, indicate your decision by adding
   21.37 + * "[Contributor] elects to include this software in this distribution
   21.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   21.39 + * single choice of license, a recipient has the option to distribute
   21.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   21.41 + * to extend the choice of license to its licensees as provided above.
   21.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   21.43 + * Version 2 license, then the option applies only if the new code is
   21.44 + * made subject to such option by the copyright holder.
   21.45 + */
   21.46 +package org.netbeans.html.boot.fx;
   21.47 +
   21.48 +import java.util.concurrent.CountDownLatch;
   21.49 +import java.util.concurrent.Executors;
   21.50 +import javafx.application.Platform;
   21.51 +import net.java.html.BrwsrCtx;
   21.52 +import net.java.html.boot.BrowserBuilder;
   21.53 +import net.java.html.js.JavaScriptBody;
   21.54 +import org.apidesign.html.boot.spi.Fn;
   21.55 +import static org.testng.Assert.*;
   21.56 +import org.testng.annotations.Test;
   21.57 +
   21.58 +/**
   21.59 + *
   21.60 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   21.61 + */
   21.62 +public class ReloadTest {
   21.63 +    private static Runnable whenInitialized;
   21.64 +    
   21.65 +    public ReloadTest() {
   21.66 +    }
   21.67 +
   21.68 +    @JavaScriptBody(args = { "a", "b"  }, body = "return a + b;")
   21.69 +    private static native int plus(int a, int b);
   21.70 +    
   21.71 +    @Test public void checkReload() throws Throwable {
   21.72 +        final Throwable[] arr = { null };
   21.73 +        
   21.74 +        final BrowserBuilder bb = BrowserBuilder.newBrowser().loadClass(ReloadTest.class).
   21.75 +                loadPage("empty.html").
   21.76 +                invoke("initialized");
   21.77 +        
   21.78 +        class ShowBrowser implements Runnable {
   21.79 +            @Override
   21.80 +            public void run() {
   21.81 +                bb.showAndWait();
   21.82 +            }
   21.83 +        }
   21.84 +        
   21.85 +        class WhenInitialized implements Runnable {
   21.86 +            CountDownLatch cdl = new CountDownLatch(1);
   21.87 +            AbstractFXPresenter p;
   21.88 +            BrwsrCtx ctx;
   21.89 +            
   21.90 +            @Override
   21.91 +            public void run() {
   21.92 +                try {
   21.93 +                    whenInitialized = null;
   21.94 +                    doCheckReload();
   21.95 +                    p = (AbstractFXPresenter) Fn.activePresenter();
   21.96 +                    assertNotNull(p, "Presenter is defined");
   21.97 +                    ctx = BrwsrCtx.findDefault(WhenInitialized.class);
   21.98 +                } catch (Throwable ex) {
   21.99 +                    arr[0] = ex;
  21.100 +                } finally {
  21.101 +                    cdl.countDown();
  21.102 +                }
  21.103 +            }
  21.104 +        }
  21.105 +        WhenInitialized when = new WhenInitialized();
  21.106 +        whenInitialized = when;
  21.107 +        Executors.newSingleThreadExecutor().submit(new ShowBrowser());
  21.108 +        when.cdl.await();
  21.109 +        if (arr[0] != null) throw arr[0];
  21.110 +        
  21.111 +        class ReloadPage implements Runnable {
  21.112 +            final CountDownLatch cdl = new CountDownLatch(1);
  21.113 +            private final AbstractFXPresenter p;
  21.114 +
  21.115 +            public ReloadPage(AbstractFXPresenter p) {
  21.116 +                this.p = p;
  21.117 +            }
  21.118 +
  21.119 +            @Override
  21.120 +            public void run() {
  21.121 +                p.engine.reload();
  21.122 +                cdl.countDown();
  21.123 +            }
  21.124 +        }
  21.125 +        ReloadPage relPage = new ReloadPage(when.p);
  21.126 +        
  21.127 +        class SecondInit implements Runnable {
  21.128 +            CountDownLatch cdl = new CountDownLatch(1);
  21.129 +            
  21.130 +            @Override
  21.131 +            public void run() {
  21.132 +                try {
  21.133 +                    whenInitialized = null;
  21.134 +                    doCheckReload();
  21.135 +                } catch (Throwable ex) {
  21.136 +                    arr[0] = ex;
  21.137 +                } finally {
  21.138 +                    cdl.countDown();
  21.139 +                }
  21.140 +                
  21.141 +            }
  21.142 +        }
  21.143 +        SecondInit second = new SecondInit();
  21.144 +        whenInitialized = second;
  21.145 +        
  21.146 +        Platform.runLater(relPage);
  21.147 +        
  21.148 +        second.cdl.await();
  21.149 +        if (arr[0] != null) throw arr[0];
  21.150 +    }
  21.151 +    
  21.152 +    final void doCheckReload() throws Exception {
  21.153 +        int res = plus(30, 12);
  21.154 +        assertEquals(res, 42, "Meaning of world computed");
  21.155 +    }
  21.156 +    
  21.157 +    public static synchronized void initialized() throws Exception {
  21.158 +        whenInitialized.run();
  21.159 +    }
  21.160 +}
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/boot-script/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    22.3 @@ -0,0 +1,109 @@
    22.4 +<?xml version="1.0" encoding="UTF-8"?>
    22.5 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    22.6 +    <modelVersion>4.0.0</modelVersion>
    22.7 +    <parent>
    22.8 +        <groupId>org.netbeans.html</groupId>
    22.9 +        <artifactId>pom</artifactId>
   22.10 +        <version>1.0-SNAPSHOT</version>
   22.11 +    </parent>
   22.12 +    <name>Presenter via javax.script</name>
   22.13 +    <artifactId>net.java.html.boot.script</artifactId>
   22.14 +    <version>1.0-SNAPSHOT</version>
   22.15 +    <packaging>bundle</packaging>
   22.16 +    <properties>
   22.17 +        <netbeans.compile.on.save>NONE</netbeans.compile.on.save>
   22.18 +        <publicPackages>net.java.html.boot.script</publicPackages>
   22.19 +    </properties>
   22.20 +    <build>
   22.21 +      <plugins>
   22.22 +          <plugin>
   22.23 +              <groupId>org.apache.felix</groupId>
   22.24 +              <artifactId>maven-bundle-plugin</artifactId>
   22.25 +              <version>2.4.0</version>
   22.26 +              <extensions>true</extensions>
   22.27 +              <configuration>
   22.28 +                  <instructions>
   22.29 +                      <Export-Package>${publicPackages}</Export-Package>
   22.30 +                      <Bundle-SymbolicName>net.java.html.boot.script</Bundle-SymbolicName>
   22.31 +                  </instructions>
   22.32 +              </configuration>
   22.33 +          </plugin>
   22.34 +          <plugin>
   22.35 +              <groupId>org.netbeans.html</groupId>
   22.36 +              <artifactId>html4j-maven-plugin</artifactId>
   22.37 +          </plugin>
   22.38 +         <plugin>
   22.39 +            <groupId>org.apache.maven.plugins</groupId>
   22.40 +            <artifactId>maven-compiler-plugin</artifactId>
   22.41 +            <version>2.3.2</version>
   22.42 +            <configuration>
   22.43 +               <source>1.7</source>
   22.44 +               <target>1.7</target>
   22.45 +            </configuration>
   22.46 +         </plugin>
   22.47 +      </plugins>
   22.48 +    </build>
   22.49 +    <dependencies>
   22.50 +        <dependency>
   22.51 +            <groupId>org.netbeans.api</groupId>
   22.52 +            <artifactId>org-openide-util-lookup</artifactId>
   22.53 +            <scope>provided</scope>
   22.54 +        </dependency>
   22.55 +        <dependency>
   22.56 +            <groupId>org.netbeans.html</groupId>
   22.57 +            <artifactId>net.java.html.boot</artifactId>
   22.58 +            <version>${project.version}</version>
   22.59 +            <type>jar</type>
   22.60 +        </dependency>
   22.61 +        <dependency>
   22.62 +            <groupId>org.testng</groupId>
   22.63 +            <artifactId>testng</artifactId>
   22.64 +            <scope>test</scope>
   22.65 +        </dependency>
   22.66 +        <dependency>
   22.67 +            <groupId>${project.groupId}</groupId>
   22.68 +            <artifactId>net.java.html.json.tck</artifactId>
   22.69 +            <version>${project.version}</version>
   22.70 +            <scope>test</scope>
   22.71 +        </dependency>
   22.72 +        <dependency>
   22.73 +            <groupId>org.glassfish.grizzly</groupId>
   22.74 +            <artifactId>grizzly-http-server</artifactId>
   22.75 +            <version>${grizzly.version}</version>
   22.76 +            <scope>test</scope>
   22.77 +        </dependency>
   22.78 +        <dependency>
   22.79 +            <groupId>org.glassfish.grizzly</groupId>
   22.80 +            <artifactId>grizzly-websockets-server</artifactId>
   22.81 +            <version>${grizzly.version}</version>
   22.82 +            <scope>test</scope>
   22.83 +            <type>jar</type>
   22.84 +        </dependency>
   22.85 +        <dependency>
   22.86 +            <groupId>org.glassfish.grizzly</groupId>
   22.87 +            <artifactId>grizzly-http-servlet</artifactId>
   22.88 +            <version>${grizzly.version}</version>
   22.89 +            <scope>test</scope>
   22.90 +        </dependency>    
   22.91 +        <dependency>
   22.92 +            <groupId>javax.servlet</groupId>
   22.93 +            <artifactId>javax.servlet-api</artifactId>
   22.94 +            <scope>test</scope>
   22.95 +            <version>3.1.0</version>
   22.96 +        </dependency>
   22.97 +        <dependency>
   22.98 +            <groupId>org.netbeans.html</groupId>
   22.99 +            <artifactId>ko4j</artifactId>
  22.100 +            <version>${project.version}</version>
  22.101 +            <scope>test</scope>
  22.102 +            <type>jar</type>
  22.103 +        </dependency>
  22.104 +        <dependency>
  22.105 +            <groupId>${project.groupId}</groupId>
  22.106 +            <artifactId>ko-ws-tyrus</artifactId>
  22.107 +            <version>${project.version}</version>
  22.108 +            <scope>test</scope>
  22.109 +            <type>jar</type>
  22.110 +        </dependency>
  22.111 +    </dependencies>
  22.112 +</project>
  22.113 \ No newline at end of file
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java	Fri Jul 25 10:45:12 2014 +0200
    23.3 @@ -0,0 +1,280 @@
    23.4 +/**
    23.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    23.6 + *
    23.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    23.8 + *
    23.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   23.10 + * Other names may be trademarks of their respective owners.
   23.11 + *
   23.12 + * The contents of this file are subject to the terms of either the GNU
   23.13 + * General Public License Version 2 only ("GPL") or the Common
   23.14 + * Development and Distribution License("CDDL") (collectively, the
   23.15 + * "License"). You may not use this file except in compliance with the
   23.16 + * License. You can obtain a copy of the License at
   23.17 + * http://www.netbeans.org/cddl-gplv2.html
   23.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   23.19 + * specific language governing permissions and limitations under the
   23.20 + * License.  When distributing the software, include this License Header
   23.21 + * Notice in each file and include the License file at
   23.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   23.23 + * particular file as subject to the "Classpath" exception as provided
   23.24 + * by Oracle in the GPL Version 2 section of the License file that
   23.25 + * accompanied this code. If applicable, add the following below the
   23.26 + * License Header, with the fields enclosed by brackets [] replaced by
   23.27 + * your own identifying information:
   23.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   23.29 + *
   23.30 + * Contributor(s):
   23.31 + *
   23.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   23.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   23.34 + *
   23.35 + * If you wish your version of this file to be governed by only the CDDL
   23.36 + * or only the GPL Version 2, indicate your decision by adding
   23.37 + * "[Contributor] elects to include this software in this distribution
   23.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   23.39 + * single choice of license, a recipient has the option to distribute
   23.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   23.41 + * to extend the choice of license to its licensees as provided above.
   23.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   23.43 + * Version 2 license, then the option applies only if the new code is
   23.44 + * made subject to such option by the copyright holder.
   23.45 + */
   23.46 +package net.java.html.boot.script;
   23.47 +
   23.48 +import java.io.Closeable;
   23.49 +import java.io.IOException;
   23.50 +import java.io.Reader;
   23.51 +import java.net.URL;
   23.52 +import java.util.ArrayList;
   23.53 +import java.util.List;
   23.54 +import java.util.concurrent.Executor;
   23.55 +import java.util.logging.Level;
   23.56 +import java.util.logging.Logger;
   23.57 +import javax.script.Invocable;
   23.58 +import javax.script.ScriptEngine;
   23.59 +import javax.script.ScriptEngineManager;
   23.60 +import javax.script.ScriptException;
   23.61 +import org.apidesign.html.boot.spi.Fn;
   23.62 +import org.apidesign.html.boot.spi.Fn.Presenter;
   23.63 +
   23.64 +/** Implementation of {@link Presenter} that delegates
   23.65 + * to Java {@link ScriptEngine scripting} API. The presenter runs headless
   23.66 + * without appropriate simulation of browser APIs. Its primary usefulness
   23.67 + * is inside testing environments. 
   23.68 + * <p>
   23.69 + * One can load in browser simulation for example from 
   23.70 + * <a href="http://www.envjs.com/">env.js</a>. The best way to achieve so,
   23.71 + * is to wait until JDK-8046013 gets fixed....
   23.72 + * 
   23.73 + *
   23.74 + * @author Jaroslav Tulach
   23.75 + */
   23.76 +final class ScriptPresenter 
   23.77 +implements Presenter, Fn.FromJavaScript, Fn.ToJavaScript, Executor {
   23.78 +    private static final Logger LOG = Logger.getLogger(ScriptPresenter.class.getName());
   23.79 +    private final ScriptEngine eng;
   23.80 +    private final Executor exc;
   23.81 +
   23.82 +    public ScriptPresenter(Executor exc) {
   23.83 +        this.exc = exc;
   23.84 +        try {
   23.85 +            eng = new ScriptEngineManager().getEngineByName("javascript");
   23.86 +            eng.eval("function alert(msg) { Packages.java.lang.System.out.println(msg); };");
   23.87 +            eng.eval("function confirm(msg) { Packages.java.lang.System.out.println(msg); return true; };");
   23.88 +            eng.eval("function prompt(msg, txt) { Packages.java.lang.System.out.println(msg + ':' + txt); return txt; };");
   23.89 +        } catch (ScriptException ex) {
   23.90 +            throw new IllegalStateException(ex);
   23.91 +        }
   23.92 +    }
   23.93 +
   23.94 +    @Override
   23.95 +    public Fn defineFn(String code, String... names) {
   23.96 +        return defineImpl(code, names);
   23.97 +    }
   23.98 +    private FnImpl defineImpl(String code, String... names) {
   23.99 +        StringBuilder sb = new StringBuilder();
  23.100 +        sb.append("(function() {");
  23.101 +        sb.append("  return function(");
  23.102 +        String sep = "";
  23.103 +        if (names != null) for (String n : names) {
  23.104 +            sb.append(sep).append(n);
  23.105 +            sep = ",";
  23.106 +        }
  23.107 +        sb.append(") {\n");
  23.108 +        sb.append(code);
  23.109 +        sb.append("};");
  23.110 +        sb.append("})()");
  23.111 +
  23.112 +        final Object fn;
  23.113 +        try {
  23.114 +            fn = eng.eval(sb.toString());
  23.115 +        } catch (ScriptException ex) {
  23.116 +            throw new IllegalStateException(ex);
  23.117 +        }
  23.118 +        return new FnImpl(this, fn);
  23.119 +    }
  23.120 +
  23.121 +    @Override
  23.122 +    public void displayPage(URL page, Runnable onPageLoad) {
  23.123 +        try {
  23.124 +            eng.eval("if (typeof window !== 'undefined') window.location = '" + page + "'");
  23.125 +        } catch (ScriptException ex) {
  23.126 +            LOG.log(Level.SEVERE, "Cannot load " + page, ex);
  23.127 +        }
  23.128 +        if (onPageLoad != null) {
  23.129 +            onPageLoad.run();
  23.130 +        }
  23.131 +    }
  23.132 +
  23.133 +    @Override
  23.134 +    public void loadScript(Reader code) throws Exception {
  23.135 +        eng.eval(code);
  23.136 +    }
  23.137 +    
  23.138 +    //
  23.139 +    // array conversions
  23.140 +    //
  23.141 +    
  23.142 +    final Object convertArrays(Object[] arr) throws Exception {
  23.143 +        for (int i = 0; i < arr.length; i++) {
  23.144 +            if (arr[i] instanceof Object[]) {
  23.145 +                arr[i] = convertArrays((Object[]) arr[i]);
  23.146 +            }
  23.147 +        }
  23.148 +        final Object wrapArr = wrapArrFn().invokeImpl(null, false, arr); // NOI18N
  23.149 +        return wrapArr;
  23.150 +    }
  23.151 +
  23.152 +    private FnImpl wrapArrImpl;
  23.153 +    private FnImpl wrapArrFn() {
  23.154 +        if (wrapArrImpl == null) {
  23.155 +            try {
  23.156 +                wrapArrImpl = defineImpl("return Array.prototype.slice.call(arguments);");
  23.157 +            } catch (Exception ex) {
  23.158 +                throw new IllegalStateException(ex);
  23.159 +            }
  23.160 +        }
  23.161 +        return wrapArrImpl;
  23.162 +    }
  23.163 +
  23.164 +    final Object checkArray(Object val) throws Exception {
  23.165 +        final FnImpl fn = arraySizeFn();
  23.166 +        final Object fnRes = fn.invokeImpl(null, false, val, null);
  23.167 +        int length = ((Number) fnRes).intValue();
  23.168 +        if (length == -1) {
  23.169 +            return val;
  23.170 +        }
  23.171 +        Object[] arr = new Object[length];
  23.172 +        fn.invokeImpl(null, false, val, arr);
  23.173 +        return arr;
  23.174 +    }
  23.175 +    private FnImpl arraySize;
  23.176 +    private FnImpl arraySizeFn() {
  23.177 +        if (arraySize == null) {
  23.178 +            try {
  23.179 +                arraySize = defineImpl("\n"
  23.180 +                    + "if (to === null) {\n"
  23.181 +                    + "  if (Object.prototype.toString.call(arr) === '[object Array]') return arr.length;\n"
  23.182 +                    + "  else return -1;\n"
  23.183 +                    + "} else {\n"
  23.184 +                    + "  var l = arr.length;\n"
  23.185 +                    + "  for (var i = 0; i < l; i++) to[i] = arr[i];\n"
  23.186 +                    + "  return l;\n"
  23.187 +                    + "}", "arr", "to"
  23.188 +                );
  23.189 +            } catch (Exception ex) {
  23.190 +                throw new IllegalStateException(ex);
  23.191 +            }
  23.192 +        }
  23.193 +        return arraySize;
  23.194 +    }
  23.195 +
  23.196 +    @Override
  23.197 +    public Object toJava(Object jsArray) {
  23.198 +        try {
  23.199 +            return checkArray(jsArray);
  23.200 +        } catch (Exception ex) {
  23.201 +            throw new IllegalStateException(ex);
  23.202 +        }
  23.203 +    }
  23.204 +    
  23.205 +    @Override
  23.206 +    public Object toJavaScript(Object toReturn) {
  23.207 +        if (toReturn instanceof Object[]) {
  23.208 +            try {
  23.209 +                return convertArrays((Object[])toReturn);
  23.210 +            } catch (Exception ex) {
  23.211 +                throw new IllegalStateException(ex);
  23.212 +            }
  23.213 +        } else {
  23.214 +            return toReturn;
  23.215 +        }
  23.216 +    }
  23.217 +
  23.218 +    @Override
  23.219 +    public void execute(final Runnable command) {
  23.220 +        if (Fn.activePresenter() == this) {
  23.221 +            command.run();
  23.222 +            return;
  23.223 +        }
  23.224 +        
  23.225 +        class Wrap implements Runnable {
  23.226 +            public void run() {
  23.227 +                try (Closeable c = Fn.activate(ScriptPresenter.this)) {
  23.228 +                    command.run();
  23.229 +                } catch (IOException ex) {
  23.230 +                    throw new IllegalStateException(ex);
  23.231 +                }
  23.232 +            }
  23.233 +        }
  23.234 +        final Runnable wrap = new Wrap();
  23.235 +        if (exc == null) {
  23.236 +            wrap.run();
  23.237 +        } else {
  23.238 +            exc.execute(wrap);
  23.239 +        }
  23.240 +    }
  23.241 +
  23.242 +    private class FnImpl extends Fn {
  23.243 +
  23.244 +        private final Object fn;
  23.245 +
  23.246 +        public FnImpl(Presenter presenter, Object fn) {
  23.247 +            super(presenter);
  23.248 +            this.fn = fn;
  23.249 +        }
  23.250 +
  23.251 +        @Override
  23.252 +        public Object invoke(Object thiz, Object... args) throws Exception {
  23.253 +            return invokeImpl(thiz, true, args);
  23.254 +        }
  23.255 +
  23.256 +            final Object invokeImpl(Object thiz, boolean arrayChecks, Object... args) throws Exception {
  23.257 +                List<Object> all = new ArrayList<>(args.length + 1);
  23.258 +                all.add(thiz == null ? fn : thiz);
  23.259 +                for (int i = 0; i < args.length; i++) {
  23.260 +                    if (arrayChecks) {
  23.261 +                        if (args[i] instanceof Object[]) {
  23.262 +                            Object[] arr = (Object[]) args[i];
  23.263 +                            Object conv = ((ScriptPresenter)presenter()).convertArrays(arr);
  23.264 +                            args[i] = conv;
  23.265 +                        }
  23.266 +                        if (args[i] instanceof Character) {
  23.267 +                            args[i] = (int)((Character)args[i]);
  23.268 +                        }
  23.269 +                    }
  23.270 +                    all.add(args[i]);
  23.271 +                }
  23.272 +                Object ret = ((Invocable)eng).invokeMethod(fn, "call", all.toArray()); // NOI18N
  23.273 +                if (ret == fn) {
  23.274 +                    return null;
  23.275 +                }
  23.276 +                if (!arrayChecks) {
  23.277 +                    return ret;
  23.278 +                }
  23.279 +                return ((ScriptPresenter)presenter()).checkArray(ret);
  23.280 +            }
  23.281 +    }
  23.282 +    
  23.283 +}
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/Scripts.java	Fri Jul 25 10:45:12 2014 +0200
    24.3 @@ -0,0 +1,119 @@
    24.4 +/**
    24.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    24.6 + *
    24.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    24.8 + *
    24.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   24.10 + * Other names may be trademarks of their respective owners.
   24.11 + *
   24.12 + * The contents of this file are subject to the terms of either the GNU
   24.13 + * General Public License Version 2 only ("GPL") or the Common
   24.14 + * Development and Distribution License("CDDL") (collectively, the
   24.15 + * "License"). You may not use this file except in compliance with the
   24.16 + * License. You can obtain a copy of the License at
   24.17 + * http://www.netbeans.org/cddl-gplv2.html
   24.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   24.19 + * specific language governing permissions and limitations under the
   24.20 + * License.  When distributing the software, include this License Header
   24.21 + * Notice in each file and include the License file at
   24.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   24.23 + * particular file as subject to the "Classpath" exception as provided
   24.24 + * by Oracle in the GPL Version 2 section of the License file that
   24.25 + * accompanied this code. If applicable, add the following below the
   24.26 + * License Header, with the fields enclosed by brackets [] replaced by
   24.27 + * your own identifying information:
   24.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   24.29 + *
   24.30 + * Contributor(s):
   24.31 + *
   24.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   24.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   24.34 + *
   24.35 + * If you wish your version of this file to be governed by only the CDDL
   24.36 + * or only the GPL Version 2, indicate your decision by adding
   24.37 + * "[Contributor] elects to include this software in this distribution
   24.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   24.39 + * single choice of license, a recipient has the option to distribute
   24.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   24.41 + * to extend the choice of license to its licensees as provided above.
   24.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   24.43 + * Version 2 license, then the option applies only if the new code is
   24.44 + * made subject to such option by the copyright holder.
   24.45 + */
   24.46 +package net.java.html.boot.script;
   24.47 +
   24.48 +import java.io.Closeable;
   24.49 +import java.util.concurrent.Executor;
   24.50 +import javax.script.ScriptEngine;
   24.51 +import net.java.html.boot.BrowserBuilder;
   24.52 +import net.java.html.js.JavaScriptBody;
   24.53 +import org.apidesign.html.boot.spi.Fn;
   24.54 +import org.apidesign.html.boot.spi.Fn.Presenter;
   24.55 +
   24.56 +/** Implementations of {@link Presenter}s that delegate
   24.57 + * to Java {@link ScriptEngine scripting} API. Initialize your presenter
   24.58 + * like this:
   24.59 + * 
   24.60 + * <pre>
   24.61 + * 
   24.62 + * {@link Runnable} <em>run</em> = ...; // your own init code
   24.63 + * {@link Presenter Fn.Presenter} <b>p</b> = Scripts.{@link Scripts#createPresenter()};
   24.64 + * BrowserBuilder.{@link BrowserBuilder#newBrowser(java.lang.Object...) newBrowser(<b>p</b>)}.
   24.65 + *      {@link BrowserBuilder#loadFinished(java.lang.Runnable) loadFinished(run)}.
   24.66 + *      {@link BrowserBuilder#showAndWait()};
   24.67 + * </pre>
   24.68 + * 
   24.69 + * and your runnable can make extensive use of {@link JavaScriptBody} directly or
   24.70 + * indirectly via APIs using {@link JavaScriptBody such annotation} themselves.
   24.71 + * <p>
   24.72 + * Alternatively one can manipulate the presenter manually, which is
   24.73 + * especially useful when writing tests:
   24.74 + * <pre>
   24.75 + * {@code @Test} public void runInASimulatedBrowser() throws Exception {
   24.76 + *   {@link Presenter Fn.Presenter} <b>p</b> = Scripts.{@link Scripts#createPresenter()};
   24.77 + *   try ({@link Closeable} c = {@link Fn#activate(org.apidesign.html.boot.spi.Fn.Presenter) Fn.activate}(<b>p</b>)) {
   24.78 + *     // your code operating in context of <b>p</b>
   24.79 + *   }
   24.80 + * }
   24.81 + * </pre>
   24.82 + * The previous code snippet requires Java 7 language syntax, as it relies
   24.83 + * on try-with-resources language syntactic sugar feature. The same block
   24.84 + * of code can be used on older versions of Java, but it is slightly more
   24.85 + * verbose.
   24.86 + * 
   24.87 + * @author Jaroslav Tulach
   24.88 + */
   24.89 +public final class Scripts {
   24.90 +    private Scripts() {
   24.91 +    }
   24.92 +    
   24.93 +    /** Simple implementation of {@link Presenter} that delegates
   24.94 +     * to Java {@link ScriptEngine scripting} API. The presenter runs headless
   24.95 +     * without appropriate simulation of browser APIs. Its primary usefulness
   24.96 +     * is inside testing environments. The presenter implements {@link Executor}
   24.97 +     * interface, but invokes all runnables passed to {@link Executor#execute(java.lang.Runnable)}
   24.98 +     * immediately.
   24.99 +     * 
  24.100 +     * @return new instance of a presenter that is using its own
  24.101 +     *   {@link ScriptEngine} for <code>text/javascript</code> mimetype
  24.102 +     */
  24.103 +    public static Presenter createPresenter() {
  24.104 +        return new ScriptPresenter(null);
  24.105 +    }
  24.106 +
  24.107 +    /** Implementation of {@link Presenter} that delegates
  24.108 +     * to Java {@link ScriptEngine scripting} API and can control execution
  24.109 +     * thread. The presenter runs headless
  24.110 +     * without appropriate simulation of browser APIs. Its primary usefulness
  24.111 +     * is inside testing environments. The presenter implements {@link Executor}
  24.112 +     * interface, and passes all runnables from {@link Executor#execute(java.lang.Runnable)}
  24.113 +     * to here in provided <code>exc</code> instance.
  24.114 +     * 
  24.115 +     * @param exc the executor to re-schedule all asynchronous requests to
  24.116 +     * @return new instance of a presenter that is using its own
  24.117 +     *   {@link ScriptEngine} for <code>text/javascript</code> mimetype
  24.118 +     */
  24.119 +    public static Presenter createPresenter(Executor exc) {
  24.120 +        return new ScriptPresenter(exc);
  24.121 +    }
  24.122 +}
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/package.html	Fri Jul 25 10:45:12 2014 +0200
    25.3 @@ -0,0 +1,51 @@
    25.4 +<!--
    25.5 +
    25.6 +    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    25.7 +
    25.8 +    Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    25.9 +
   25.10 +    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   25.11 +    Other names may be trademarks of their respective owners.
   25.12 +
   25.13 +    The contents of this file are subject to the terms of either the GNU
   25.14 +    General Public License Version 2 only ("GPL") or the Common
   25.15 +    Development and Distribution License("CDDL") (collectively, the
   25.16 +    "License"). You may not use this file except in compliance with the
   25.17 +    License. You can obtain a copy of the License at
   25.18 +    http://www.netbeans.org/cddl-gplv2.html
   25.19 +    or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   25.20 +    specific language governing permissions and limitations under the
   25.21 +    License.  When distributing the software, include this License Header
   25.22 +    Notice in each file and include the License file at
   25.23 +    nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   25.24 +    particular file as subject to the "Classpath" exception as provided
   25.25 +    by Oracle in the GPL Version 2 section of the License file that
   25.26 +    accompanied this code. If applicable, add the following below the
   25.27 +    License Header, with the fields enclosed by brackets [] replaced by
   25.28 +    your own identifying information:
   25.29 +    "Portions Copyrighted [year] [name of copyright owner]"
   25.30 +
   25.31 +    Contributor(s):
   25.32 +
   25.33 +    The Original Software is NetBeans. The Initial Developer of the Original
   25.34 +    Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   25.35 +
   25.36 +    If you wish your version of this file to be governed by only the CDDL
   25.37 +    or only the GPL Version 2, indicate your decision by adding
   25.38 +    "[Contributor] elects to include this software in this distribution
   25.39 +    under the [CDDL or GPL Version 2] license." If you do not indicate a
   25.40 +    single choice of license, a recipient has the option to distribute
   25.41 +    your version of this file under either the CDDL, the GPL Version 2 or
   25.42 +    to extend the choice of license to its licensees as provided above.
   25.43 +    However, if you add GPL Version 2 code and therefore, elected the GPL
   25.44 +    Version 2 license, then the option applies only if the new code is
   25.45 +    made subject to such option by the copyright holder.
   25.46 +
   25.47 +-->
   25.48 +<body>
   25.49 +    <p>
   25.50 +        {@link net.java.html.boot.script.Scripts Factories} headless
   25.51 +        {@link net.java.html.boot.BrowserBuilder browser environment}
   25.52 +        useful for testing.
   25.53 +    </p>
   25.54 +</body>
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTest.java	Fri Jul 25 10:45:12 2014 +0200
    26.3 @@ -0,0 +1,117 @@
    26.4 +/**
    26.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    26.6 + *
    26.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    26.8 + *
    26.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   26.10 + * Other names may be trademarks of their respective owners.
   26.11 + *
   26.12 + * The contents of this file are subject to the terms of either the GNU
   26.13 + * General Public License Version 2 only ("GPL") or the Common
   26.14 + * Development and Distribution License("CDDL") (collectively, the
   26.15 + * "License"). You may not use this file except in compliance with the
   26.16 + * License. You can obtain a copy of the License at
   26.17 + * http://www.netbeans.org/cddl-gplv2.html
   26.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   26.19 + * specific language governing permissions and limitations under the
   26.20 + * License.  When distributing the software, include this License Header
   26.21 + * Notice in each file and include the License file at
   26.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   26.23 + * particular file as subject to the "Classpath" exception as provided
   26.24 + * by Oracle in the GPL Version 2 section of the License file that
   26.25 + * accompanied this code. If applicable, add the following below the
   26.26 + * License Header, with the fields enclosed by brackets [] replaced by
   26.27 + * your own identifying information:
   26.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   26.29 + *
   26.30 + * Contributor(s):
   26.31 + *
   26.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   26.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   26.34 + *
   26.35 + * If you wish your version of this file to be governed by only the CDDL
   26.36 + * or only the GPL Version 2, indicate your decision by adding
   26.37 + * "[Contributor] elects to include this software in this distribution
   26.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   26.39 + * single choice of license, a recipient has the option to distribute
   26.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   26.41 + * to extend the choice of license to its licensees as provided above.
   26.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   26.43 + * Version 2 license, then the option applies only if the new code is
   26.44 + * made subject to such option by the copyright holder.
   26.45 + */
   26.46 +package net.java.html.boot.script;
   26.47 +
   26.48 +import java.lang.annotation.Annotation;
   26.49 +import java.lang.reflect.Method;
   26.50 +import java.util.ArrayList;
   26.51 +import java.util.List;
   26.52 +import java.util.concurrent.Executors;
   26.53 +import net.java.html.boot.BrowserBuilder;
   26.54 +import org.apidesign.html.boot.spi.Fn;
   26.55 +import org.apidesign.html.json.tck.KOTest;
   26.56 +import org.testng.Assert;
   26.57 +import org.testng.annotations.Factory;
   26.58 +
   26.59 +/**
   26.60 + *
   26.61 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   26.62 + */
   26.63 +public class Jsr223JavaScriptTest {
   26.64 +    private static Class<?> browserClass;
   26.65 +    private static Fn.Presenter browserPresenter;
   26.66 +    
   26.67 +    public Jsr223JavaScriptTest() {
   26.68 +    }
   26.69 +
   26.70 +    @Factory public static Object[] compatibilityTests() throws Exception {
   26.71 +        final BrowserBuilder bb = BrowserBuilder.newBrowser(new ScriptPresenter(SingleCase.JS)).
   26.72 +            loadClass(Jsr223JavaScriptTest.class).
   26.73 +            loadPage("empty.html").
   26.74 +            invoke("initialized");
   26.75 +
   26.76 +        Executors.newSingleThreadExecutor().submit(new Runnable() {
   26.77 +            @Override
   26.78 +            public void run() {
   26.79 +                bb.showAndWait();
   26.80 +            }
   26.81 +        });
   26.82 +
   26.83 +        List<Object> res = new ArrayList<Object>();
   26.84 +        Class<? extends Annotation> test = 
   26.85 +            loadClass().getClassLoader().loadClass(KOTest.class.getName()).
   26.86 +            asSubclass(Annotation.class);
   26.87 +
   26.88 +        Class[] arr = (Class[]) loadClass().getDeclaredMethod("tests").invoke(null);
   26.89 +        for (Class c : arr) {
   26.90 +            for (Method m : c.getMethods()) {
   26.91 +                if (m.getAnnotation(test) != null) {
   26.92 +                    res.add(new SingleCase(browserPresenter, m));
   26.93 +                }
   26.94 +            }
   26.95 +        }
   26.96 +        return res.toArray();
   26.97 +    }
   26.98 +
   26.99 +    static synchronized Class<?> loadClass() throws InterruptedException {
  26.100 +        while (browserClass == null) {
  26.101 +            Jsr223JavaScriptTest.class.wait();
  26.102 +        }
  26.103 +        return browserClass;
  26.104 +    }
  26.105 +    
  26.106 +    public static synchronized void ready(Class<?> browserCls) throws Exception {
  26.107 +        browserClass = browserCls;
  26.108 +        browserPresenter = Fn.activePresenter();
  26.109 +        Jsr223JavaScriptTest.class.notifyAll();
  26.110 +    }
  26.111 +    
  26.112 +    public static void initialized() throws Exception {
  26.113 +        Assert.assertSame(
  26.114 +            Jsr223JavaScriptTest.class.getClassLoader(),
  26.115 +            ClassLoader.getSystemClassLoader(),
  26.116 +            "No special classloaders"
  26.117 +        );
  26.118 +        Jsr223JavaScriptTest.ready(Jsr223JavaScriptTst.class);
  26.119 +    }
  26.120 +}
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTst.java	Fri Jul 25 10:45:12 2014 +0200
    27.3 @@ -0,0 +1,55 @@
    27.4 +/**
    27.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    27.6 + *
    27.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    27.8 + *
    27.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   27.10 + * Other names may be trademarks of their respective owners.
   27.11 + *
   27.12 + * The contents of this file are subject to the terms of either the GNU
   27.13 + * General Public License Version 2 only ("GPL") or the Common
   27.14 + * Development and Distribution License("CDDL") (collectively, the
   27.15 + * "License"). You may not use this file except in compliance with the
   27.16 + * License. You can obtain a copy of the License at
   27.17 + * http://www.netbeans.org/cddl-gplv2.html
   27.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   27.19 + * specific language governing permissions and limitations under the
   27.20 + * License.  When distributing the software, include this License Header
   27.21 + * Notice in each file and include the License file at
   27.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   27.23 + * particular file as subject to the "Classpath" exception as provided
   27.24 + * by Oracle in the GPL Version 2 section of the License file that
   27.25 + * accompanied this code. If applicable, add the following below the
   27.26 + * License Header, with the fields enclosed by brackets [] replaced by
   27.27 + * your own identifying information:
   27.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   27.29 + *
   27.30 + * Contributor(s):
   27.31 + *
   27.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   27.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   27.34 + *
   27.35 + * If you wish your version of this file to be governed by only the CDDL
   27.36 + * or only the GPL Version 2, indicate your decision by adding
   27.37 + * "[Contributor] elects to include this software in this distribution
   27.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   27.39 + * single choice of license, a recipient has the option to distribute
   27.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   27.41 + * to extend the choice of license to its licensees as provided above.
   27.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   27.43 + * Version 2 license, then the option applies only if the new code is
   27.44 + * made subject to such option by the copyright holder.
   27.45 + */
   27.46 +package net.java.html.boot.script;
   27.47 +
   27.48 +import org.apidesign.html.json.tck.JavaScriptTCK;
   27.49 +
   27.50 +/**
   27.51 + *
   27.52 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   27.53 + */
   27.54 +public final class Jsr223JavaScriptTst extends JavaScriptTCK {
   27.55 +    public static Class[] tests() {
   27.56 +        return testClasses();
   27.57 +    }
   27.58 +}
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/SingleCase.java	Fri Jul 25 10:45:12 2014 +0200
    28.3 @@ -0,0 +1,127 @@
    28.4 +/**
    28.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    28.6 + *
    28.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    28.8 + *
    28.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   28.10 + * Other names may be trademarks of their respective owners.
   28.11 + *
   28.12 + * The contents of this file are subject to the terms of either the GNU
   28.13 + * General Public License Version 2 only ("GPL") or the Common
   28.14 + * Development and Distribution License("CDDL") (collectively, the
   28.15 + * "License"). You may not use this file except in compliance with the
   28.16 + * License. You can obtain a copy of the License at
   28.17 + * http://www.netbeans.org/cddl-gplv2.html
   28.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   28.19 + * specific language governing permissions and limitations under the
   28.20 + * License.  When distributing the software, include this License Header
   28.21 + * Notice in each file and include the License file at
   28.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   28.23 + * particular file as subject to the "Classpath" exception as provided
   28.24 + * by Oracle in the GPL Version 2 section of the License file that
   28.25 + * accompanied this code. If applicable, add the following below the
   28.26 + * License Header, with the fields enclosed by brackets [] replaced by
   28.27 + * your own identifying information:
   28.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   28.29 + *
   28.30 + * Contributor(s):
   28.31 + *
   28.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   28.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   28.34 + *
   28.35 + * If you wish your version of this file to be governed by only the CDDL
   28.36 + * or only the GPL Version 2, indicate your decision by adding
   28.37 + * "[Contributor] elects to include this software in this distribution
   28.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   28.39 + * single choice of license, a recipient has the option to distribute
   28.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   28.41 + * to extend the choice of license to its licensees as provided above.
   28.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   28.43 + * Version 2 license, then the option applies only if the new code is
   28.44 + * made subject to such option by the copyright holder.
   28.45 + */
   28.46 +package net.java.html.boot.script;
   28.47 +
   28.48 +import java.lang.reflect.InvocationTargetException;
   28.49 +import java.lang.reflect.Method;
   28.50 +import java.util.concurrent.Executor;
   28.51 +import java.util.concurrent.Executors;
   28.52 +import org.apidesign.html.boot.spi.Fn;
   28.53 +import org.netbeans.html.boot.impl.FnContext;
   28.54 +import org.testng.IHookCallBack;
   28.55 +import org.testng.IHookable;
   28.56 +import org.testng.ITest;
   28.57 +import org.testng.ITestResult;
   28.58 +import org.testng.annotations.Test;
   28.59 +
   28.60 +/**
   28.61 + *
   28.62 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   28.63 + */
   28.64 +public final class SingleCase implements ITest, IHookable, Runnable {
   28.65 +    static final Executor JS = Executors.newSingleThreadExecutor();
   28.66 +    private final Fn.Presenter p;
   28.67 +    private final Method m;
   28.68 +    private Object result;
   28.69 +    private Object inst;
   28.70 +
   28.71 +    SingleCase(Fn.Presenter p, Method m) {
   28.72 +        this.p = p;
   28.73 +        this.m = m;
   28.74 +    }
   28.75 +
   28.76 +    @Override
   28.77 +    public String getTestName() {
   28.78 +        return m.getName();
   28.79 +    }
   28.80 +
   28.81 +    @Test
   28.82 +    public synchronized void executeTest() throws Exception {
   28.83 +        if (result == null) {
   28.84 +            JS.execute(this);
   28.85 +            wait();
   28.86 +        }
   28.87 +        if (result instanceof Exception) {
   28.88 +            throw (Exception)result;
   28.89 +        }
   28.90 +        if (result instanceof Error) {
   28.91 +            throw (Error)result;
   28.92 +        }
   28.93 +    }
   28.94 +
   28.95 +    @Override
   28.96 +    public synchronized void run() {
   28.97 +        boolean notify = true;
   28.98 +        try {
   28.99 +            FnContext.currentPresenter(p);
  28.100 +            if (inst == null) {
  28.101 +                inst = m.getDeclaringClass().newInstance();
  28.102 +            }
  28.103 +            result = m.invoke(inst);
  28.104 +            if (result == null) {
  28.105 +                result = this;
  28.106 +            }
  28.107 +        } catch (InvocationTargetException ex) {
  28.108 +            Throwable r = ex.getTargetException();
  28.109 +            if (r instanceof InterruptedException) {
  28.110 +                notify = false;
  28.111 +                JS.execute(this);
  28.112 +                return;
  28.113 +            }
  28.114 +            result = r;
  28.115 +        } catch (Exception ex) {
  28.116 +            result = ex;
  28.117 +        } finally {
  28.118 +            if (notify) {
  28.119 +                notifyAll();
  28.120 +            }
  28.121 +            FnContext.currentPresenter(null);
  28.122 +        }
  28.123 +    }
  28.124 +
  28.125 +    @Override
  28.126 +    public void run(IHookCallBack ihcb, ITestResult itr) {
  28.127 +        ihcb.runTestMethod(itr);
  28.128 +    }
  28.129 +    
  28.130 +}
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/ko4j/DynamicHTTP.java	Fri Jul 25 10:45:12 2014 +0200
    29.3 @@ -0,0 +1,259 @@
    29.4 +/**
    29.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    29.6 + *
    29.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    29.8 + *
    29.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   29.10 + * Other names may be trademarks of their respective owners.
   29.11 + *
   29.12 + * The contents of this file are subject to the terms of either the GNU
   29.13 + * General Public License Version 2 only ("GPL") or the Common
   29.14 + * Development and Distribution License("CDDL") (collectively, the
   29.15 + * "License"). You may not use this file except in compliance with the
   29.16 + * License. You can obtain a copy of the License at
   29.17 + * http://www.netbeans.org/cddl-gplv2.html
   29.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   29.19 + * specific language governing permissions and limitations under the
   29.20 + * License.  When distributing the software, include this License Header
   29.21 + * Notice in each file and include the License file at
   29.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   29.23 + * particular file as subject to the "Classpath" exception as provided
   29.24 + * by Oracle in the GPL Version 2 section of the License file that
   29.25 + * accompanied this code. If applicable, add the following below the
   29.26 + * License Header, with the fields enclosed by brackets [] replaced by
   29.27 + * your own identifying information:
   29.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   29.29 + *
   29.30 + * Contributor(s):
   29.31 + *
   29.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   29.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   29.34 + *
   29.35 + * If you wish your version of this file to be governed by only the CDDL
   29.36 + * or only the GPL Version 2, indicate your decision by adding
   29.37 + * "[Contributor] elects to include this software in this distribution
   29.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   29.39 + * single choice of license, a recipient has the option to distribute
   29.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   29.41 + * to extend the choice of license to its licensees as provided above.
   29.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   29.43 + * Version 2 license, then the option applies only if the new code is
   29.44 + * made subject to such option by the copyright holder.
   29.45 + */
   29.46 +package net.java.html.boot.script.ko4j;
   29.47 +
   29.48 +import java.io.ByteArrayInputStream;
   29.49 +import java.io.ByteArrayOutputStream;
   29.50 +import java.io.IOException;
   29.51 +import java.io.InputStream;
   29.52 +import java.io.OutputStream;
   29.53 +import java.io.Reader;
   29.54 +import java.net.URI;
   29.55 +import java.net.URISyntaxException;
   29.56 +import java.util.ArrayList;
   29.57 +import java.util.List;
   29.58 +import java.util.logging.Level;
   29.59 +import java.util.logging.Logger;
   29.60 +import org.glassfish.grizzly.PortRange;
   29.61 +import org.glassfish.grizzly.http.server.HttpHandler;
   29.62 +import org.glassfish.grizzly.http.server.HttpServer;
   29.63 +import org.glassfish.grizzly.http.server.NetworkListener;
   29.64 +import org.glassfish.grizzly.http.server.Request;
   29.65 +import org.glassfish.grizzly.http.server.Response;
   29.66 +import org.glassfish.grizzly.http.server.ServerConfiguration;
   29.67 +import org.glassfish.grizzly.websockets.WebSocket;
   29.68 +import org.glassfish.grizzly.websockets.WebSocketAddOn;
   29.69 +import org.glassfish.grizzly.websockets.WebSocketApplication;
   29.70 +import org.glassfish.grizzly.websockets.WebSocketEngine;
   29.71 +
   29.72 +/**
   29.73 + *
   29.74 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   29.75 + */
   29.76 +final class DynamicHTTP extends HttpHandler {
   29.77 +    private static final Logger LOG = Logger.getLogger(DynamicHTTP.class.getName());
   29.78 +    private static int resourcesCount;
   29.79 +    private static List<Resource> resources;
   29.80 +    private static ServerConfiguration conf;
   29.81 +    private static HttpServer server;
   29.82 +    
   29.83 +    private DynamicHTTP() {
   29.84 +    }
   29.85 +    
   29.86 +    static URI initServer() throws Exception {
   29.87 +        server = HttpServer.createSimpleServer(null, new PortRange(8080, 65535));
   29.88 +        final WebSocketAddOn addon = new WebSocketAddOn();
   29.89 +        for (NetworkListener listener : server.getListeners()) {
   29.90 +            listener.registerAddOn(addon);
   29.91 +        }        
   29.92 +        resources = new ArrayList<Resource>();
   29.93 +
   29.94 +        conf = server.getServerConfiguration();
   29.95 +        final DynamicHTTP dh = new DynamicHTTP();
   29.96 +
   29.97 +        conf.addHttpHandler(dh, "/");
   29.98 +        
   29.99 +        server.start();
  29.100 +
  29.101 +        return pageURL("http", server, "/test.html");
  29.102 +    }
  29.103 +    
  29.104 +    @Override
  29.105 +    public void service(Request request, Response response) throws Exception {
  29.106 +        if ("/test.html".equals(request.getRequestURI())) {
  29.107 +            response.setContentType("text/html");
  29.108 +            final InputStream is = DynamicHTTP.class.getResourceAsStream("test.html");
  29.109 +            copyStream(is, response.getOutputStream(), null);
  29.110 +            return;
  29.111 +        }
  29.112 +        if ("/dynamic".equals(request.getRequestURI())) {
  29.113 +            String mimeType = request.getParameter("mimeType");
  29.114 +            List<String> params = new ArrayList<String>();
  29.115 +            boolean webSocket = false;
  29.116 +            for (int i = 0;; i++) {
  29.117 +                String p = request.getParameter("param" + i);
  29.118 +                if (p == null) {
  29.119 +                    break;
  29.120 +                }
  29.121 +                if ("protocol:ws".equals(p)) {
  29.122 +                    webSocket = true;
  29.123 +                    continue;
  29.124 +                }
  29.125 +                params.add(p);
  29.126 +            }
  29.127 +            final String cnt = request.getParameter("content");
  29.128 +            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
  29.129 +            ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
  29.130 +            URI url;
  29.131 +            final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
  29.132 +            if (webSocket) {
  29.133 +                url = registerWebSocket(res);
  29.134 +            } else {
  29.135 +                url = registerResource(res);
  29.136 +            }
  29.137 +            response.getWriter().write(url.toString());
  29.138 +            response.getWriter().write("\n");
  29.139 +            return;
  29.140 +        }
  29.141 +
  29.142 +        for (Resource r : resources) {
  29.143 +            if (r.httpPath.equals(request.getRequestURI())) {
  29.144 +                response.setContentType(r.httpType);
  29.145 +                r.httpContent.reset();
  29.146 +                String[] params = null;
  29.147 +                if (r.parameters.length != 0) {
  29.148 +                    params = new String[r.parameters.length];
  29.149 +                    for (int i = 0; i < r.parameters.length; i++) {
  29.150 +                        params[i] = request.getParameter(r.parameters[i]);
  29.151 +                        if (params[i] == null) {
  29.152 +                            if ("http.method".equals(r.parameters[i])) {
  29.153 +                                params[i] = request.getMethod().toString();
  29.154 +                            } else if ("http.requestBody".equals(r.parameters[i])) {
  29.155 +                                Reader rdr = request.getReader();
  29.156 +                                StringBuilder sb = new StringBuilder();
  29.157 +                                for (;;) {
  29.158 +                                    int ch = rdr.read();
  29.159 +                                    if (ch == -1) {
  29.160 +                                        break;
  29.161 +                                    }
  29.162 +                                    sb.append((char) ch);
  29.163 +                                }
  29.164 +                                params[i] = sb.toString();
  29.165 +                            }
  29.166 +                        }
  29.167 +                        if (params[i] == null) {
  29.168 +                            params[i] = "null";
  29.169 +                        }
  29.170 +                    }
  29.171 +                }
  29.172 +
  29.173 +                copyStream(r.httpContent, response.getOutputStream(), null, params);
  29.174 +            }
  29.175 +        }
  29.176 +    }
  29.177 +    
  29.178 +    private URI registerWebSocket(Resource r) {
  29.179 +        WebSocketEngine.getEngine().register("", r.httpPath, new WS(r));
  29.180 +        return pageURL("ws", server, r.httpPath);
  29.181 +    }
  29.182 +
  29.183 +    private URI registerResource(Resource r) {
  29.184 +        if (!resources.contains(r)) {
  29.185 +            resources.add(r);
  29.186 +            conf.addHttpHandler(this, r.httpPath);
  29.187 +        }
  29.188 +        return pageURL("http", server, r.httpPath);
  29.189 +    }
  29.190 +    
  29.191 +    private static URI pageURL(String proto, HttpServer server, final String page) {
  29.192 +        NetworkListener listener = server.getListeners().iterator().next();
  29.193 +        int port = listener.getPort();
  29.194 +        try {
  29.195 +            return new URI(proto + "://localhost:" + port + page);
  29.196 +        } catch (URISyntaxException ex) {
  29.197 +            throw new IllegalStateException(ex);
  29.198 +        }
  29.199 +    }
  29.200 +    
  29.201 +    static final class Resource {
  29.202 +
  29.203 +        final InputStream httpContent;
  29.204 +        final String httpType;
  29.205 +        final String httpPath;
  29.206 +        final String[] parameters;
  29.207 +
  29.208 +        Resource(InputStream httpContent, String httpType, String httpPath,
  29.209 +            String[] parameters) {
  29.210 +            httpContent.mark(Integer.MAX_VALUE);
  29.211 +            this.httpContent = httpContent;
  29.212 +            this.httpType = httpType;
  29.213 +            this.httpPath = httpPath;
  29.214 +            this.parameters = parameters;
  29.215 +        }
  29.216 +    }
  29.217 +
  29.218 +    static void copyStream(InputStream is, OutputStream os, String baseURL, String... params) throws IOException {
  29.219 +        for (;;) {
  29.220 +            int ch = is.read();
  29.221 +            if (ch == -1) {
  29.222 +                break;
  29.223 +            }
  29.224 +            if (ch == '$' && params.length > 0) {
  29.225 +                int cnt = is.read() - '0';
  29.226 +                if (baseURL != null && cnt == 'U' - '0') {
  29.227 +                    os.write(baseURL.getBytes("UTF-8"));
  29.228 +                } else {
  29.229 +                    if (cnt >= 0 && cnt < params.length) {
  29.230 +                        os.write(params[cnt].getBytes("UTF-8"));
  29.231 +                    } else {
  29.232 +                        os.write('$');
  29.233 +                        os.write(cnt + '0');
  29.234 +                    }
  29.235 +                }
  29.236 +            } else {
  29.237 +                os.write(ch);
  29.238 +            }
  29.239 +        }
  29.240 +    }
  29.241 +    
  29.242 +    private static class WS extends WebSocketApplication {
  29.243 +        private final Resource r;
  29.244 +
  29.245 +        private WS(Resource r) {
  29.246 +            this.r = r;
  29.247 +        }
  29.248 +
  29.249 +        @Override
  29.250 +        public void onMessage(WebSocket socket, String text) {
  29.251 +            try {
  29.252 +                r.httpContent.reset();
  29.253 +                ByteArrayOutputStream out = new ByteArrayOutputStream();
  29.254 +                copyStream(r.httpContent, out, null, text);
  29.255 +                String s = new String(out.toByteArray(), "UTF-8");
  29.256 +                socket.send(s);
  29.257 +            } catch (IOException ex) {
  29.258 +                LOG.log(Level.WARNING, "Error processing message " + text, ex);
  29.259 +            }
  29.260 +        }
  29.261 +    }
  29.262 +}
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/ko4j/KOCase.java	Fri Jul 25 10:45:12 2014 +0200
    30.3 @@ -0,0 +1,133 @@
    30.4 +/**
    30.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    30.6 + *
    30.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    30.8 + *
    30.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   30.10 + * Other names may be trademarks of their respective owners.
   30.11 + *
   30.12 + * The contents of this file are subject to the terms of either the GNU
   30.13 + * General Public License Version 2 only ("GPL") or the Common
   30.14 + * Development and Distribution License("CDDL") (collectively, the
   30.15 + * "License"). You may not use this file except in compliance with the
   30.16 + * License. You can obtain a copy of the License at
   30.17 + * http://www.netbeans.org/cddl-gplv2.html
   30.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   30.19 + * specific language governing permissions and limitations under the
   30.20 + * License.  When distributing the software, include this License Header
   30.21 + * Notice in each file and include the License file at
   30.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   30.23 + * particular file as subject to the "Classpath" exception as provided
   30.24 + * by Oracle in the GPL Version 2 section of the License file that
   30.25 + * accompanied this code. If applicable, add the following below the
   30.26 + * License Header, with the fields enclosed by brackets [] replaced by
   30.27 + * your own identifying information:
   30.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   30.29 + *
   30.30 + * Contributor(s):
   30.31 + *
   30.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   30.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   30.34 + *
   30.35 + * If you wish your version of this file to be governed by only the CDDL
   30.36 + * or only the GPL Version 2, indicate your decision by adding
   30.37 + * "[Contributor] elects to include this software in this distribution
   30.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   30.39 + * single choice of license, a recipient has the option to distribute
   30.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   30.41 + * to extend the choice of license to its licensees as provided above.
   30.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   30.43 + * Version 2 license, then the option applies only if the new code is
   30.44 + * made subject to such option by the copyright holder.
   30.45 + */
   30.46 +package net.java.html.boot.script.ko4j;
   30.47 +
   30.48 +import java.io.Closeable;
   30.49 +import java.io.IOException;
   30.50 +import java.lang.reflect.InvocationTargetException;
   30.51 +import java.lang.reflect.Method;
   30.52 +import java.util.concurrent.Executor;
   30.53 +import java.util.concurrent.Executors;
   30.54 +import org.apidesign.html.boot.spi.Fn;
   30.55 +import org.testng.ITest;
   30.56 +import org.testng.SkipException;
   30.57 +import org.testng.annotations.Test;
   30.58 +
   30.59 +/**
   30.60 + *
   30.61 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   30.62 + */
   30.63 +public final class KOCase implements ITest, Runnable {
   30.64 +    static final Executor JS = Executors.newSingleThreadExecutor();
   30.65 +    private final Fn.Presenter p;
   30.66 +    private final Method m;
   30.67 +    private final String skipMsg;
   30.68 +    private Object result;
   30.69 +    private Object inst;
   30.70 +    private int count;
   30.71 +
   30.72 +    KOCase(Fn.Presenter p, Method m, String skipMsg) {
   30.73 +        this.p = p;
   30.74 +        this.m = m;
   30.75 +        this.skipMsg = skipMsg;
   30.76 +    }
   30.77 +
   30.78 +    @Override
   30.79 +    public String getTestName() {
   30.80 +        return m.getName();
   30.81 +    }
   30.82 +
   30.83 +    @Test
   30.84 +    public synchronized void executeTest() throws Exception {
   30.85 +        if (skipMsg != null) {
   30.86 +            throw new SkipException(skipMsg);
   30.87 +        }
   30.88 +        if (result == null) {
   30.89 +            JS.execute(this);
   30.90 +            wait();
   30.91 +        }
   30.92 +        if (result instanceof Exception) {
   30.93 +            throw (Exception)result;
   30.94 +        }
   30.95 +        if (result instanceof Error) {
   30.96 +            throw (Error)result;
   30.97 +        }
   30.98 +    }
   30.99 +
  30.100 +    @Override
  30.101 +    public synchronized void run() {
  30.102 +        boolean notify = true;
  30.103 +        Closeable a = Fn.activate(p);
  30.104 +        try {
  30.105 +            if (inst == null) {
  30.106 +                inst = m.getDeclaringClass().newInstance();
  30.107 +            }
  30.108 +            result = m.invoke(inst);
  30.109 +            if (result == null) {
  30.110 +                result = this;
  30.111 +            }
  30.112 +        } catch (InvocationTargetException ex) {
  30.113 +            Throwable r = ex.getTargetException();
  30.114 +            if (r instanceof InterruptedException) {
  30.115 +                if (count++ < 10000) {
  30.116 +                    notify = false;
  30.117 +                    JS.execute(this);
  30.118 +                    return;
  30.119 +                }
  30.120 +            }
  30.121 +            result = r;
  30.122 +        } catch (Exception ex) {
  30.123 +            result = ex;
  30.124 +        } finally {
  30.125 +            if (notify) {
  30.126 +                notifyAll();
  30.127 +            }
  30.128 +            try {
  30.129 +                a.close();
  30.130 +            } catch (IOException ex) {
  30.131 +                throw new IllegalStateException(ex);
  30.132 +            }
  30.133 +        }
  30.134 +    }
  30.135 +    
  30.136 +}
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java	Fri Jul 25 10:45:12 2014 +0200
    31.3 @@ -0,0 +1,256 @@
    31.4 +/**
    31.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    31.6 + *
    31.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    31.8 + *
    31.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   31.10 + * Other names may be trademarks of their respective owners.
   31.11 + *
   31.12 + * The contents of this file are subject to the terms of either the GNU
   31.13 + * General Public License Version 2 only ("GPL") or the Common
   31.14 + * Development and Distribution License("CDDL") (collectively, the
   31.15 + * "License"). You may not use this file except in compliance with the
   31.16 + * License. You can obtain a copy of the License at
   31.17 + * http://www.netbeans.org/cddl-gplv2.html
   31.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   31.19 + * specific language governing permissions and limitations under the
   31.20 + * License.  When distributing the software, include this License Header
   31.21 + * Notice in each file and include the License file at
   31.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   31.23 + * particular file as subject to the "Classpath" exception as provided
   31.24 + * by Oracle in the GPL Version 2 section of the License file that
   31.25 + * accompanied this code. If applicable, add the following below the
   31.26 + * License Header, with the fields enclosed by brackets [] replaced by
   31.27 + * your own identifying information:
   31.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   31.29 + *
   31.30 + * Contributor(s):
   31.31 + *
   31.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   31.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   31.34 + *
   31.35 + * If you wish your version of this file to be governed by only the CDDL
   31.36 + * or only the GPL Version 2, indicate your decision by adding
   31.37 + * "[Contributor] elects to include this software in this distribution
   31.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   31.39 + * single choice of license, a recipient has the option to distribute
   31.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   31.41 + * to extend the choice of license to its licensees as provided above.
   31.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   31.43 + * Version 2 license, then the option applies only if the new code is
   31.44 + * made subject to such option by the copyright holder.
   31.45 + */
   31.46 +package net.java.html.boot.script.ko4j;
   31.47 +
   31.48 +import java.io.BufferedReader;
   31.49 +import java.io.IOException;
   31.50 +import java.io.InputStream;
   31.51 +import java.io.InputStreamReader;
   31.52 +import java.lang.annotation.Annotation;
   31.53 +import java.lang.reflect.Method;
   31.54 +import java.net.URI;
   31.55 +import java.net.URISyntaxException;
   31.56 +import java.net.URL;
   31.57 +import java.net.URLConnection;
   31.58 +import java.util.ArrayList;
   31.59 +import java.util.List;
   31.60 +import java.util.Map;
   31.61 +import java.util.concurrent.Executor;
   31.62 +import java.util.concurrent.Executors;
   31.63 +import net.java.html.BrwsrCtx;
   31.64 +import net.java.html.boot.BrowserBuilder;
   31.65 +import net.java.html.boot.script.Scripts;
   31.66 +import net.java.html.js.JavaScriptBody;
   31.67 +import org.apidesign.html.boot.spi.Fn;
   31.68 +import org.apidesign.html.context.spi.Contexts;
   31.69 +import org.apidesign.html.json.spi.Technology;
   31.70 +import org.apidesign.html.json.spi.Transfer;
   31.71 +import org.apidesign.html.json.tck.KOTest;
   31.72 +import org.apidesign.html.json.tck.KnockoutTCK;
   31.73 +import org.netbeans.html.ko4j.KO4J;
   31.74 +import org.netbeans.html.wstyrus.TyrusContext;
   31.75 +import org.openide.util.lookup.ServiceProvider;
   31.76 +import org.testng.Assert;
   31.77 +import static org.testng.Assert.*;
   31.78 +import org.testng.annotations.Factory;
   31.79 +
   31.80 +/**
   31.81 + *
   31.82 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   31.83 + */
   31.84 +@ServiceProvider(service = KnockoutTCK.class)
   31.85 +public final class KnockoutEnvJSTest extends KnockoutTCK {
   31.86 +    private static Class<?> browserClass;
   31.87 +    private static Fn.Presenter browserContext;
   31.88 +    private static URI baseUri;
   31.89 +    
   31.90 +    public KnockoutEnvJSTest() {
   31.91 +    }
   31.92 +    
   31.93 +    @Factory public static Object[] compatibilityTests() throws Exception {
   31.94 +        try {
   31.95 +            Class.forName("java.lang.FunctionalInterface");
   31.96 +        } catch (ClassNotFoundException ex) {
   31.97 +            // only runs on JDK8
   31.98 +            return new Object[0];
   31.99 +        }
  31.100 +        
  31.101 +        
  31.102 +        Class[] arr = testClasses();
  31.103 +        for (int i = 0; i < arr.length; i++) {
  31.104 +            assertEquals(
  31.105 +                arr[i].getClassLoader(),
  31.106 +                KnockoutEnvJSTest.class.getClassLoader(),
  31.107 +                "All classes loaded by the same classloader"
  31.108 +            );
  31.109 +        }
  31.110 +        
  31.111 +        baseUri = DynamicHTTP.initServer();
  31.112 +        
  31.113 +        final Fn.Presenter p = Scripts.createPresenter(KOCase.JS);
  31.114 +        InputStream is = KnockoutEnvJSTest.class.getResourceAsStream("env.nashorn.1.2-debug.js");
  31.115 +        p.loadScript(new InputStreamReader(is));
  31.116 +        is.close();
  31.117 +
  31.118 +        final BrowserBuilder bb = BrowserBuilder.newBrowser(p).
  31.119 +            loadClass(KnockoutEnvJSTest.class).
  31.120 +            loadPage(baseUri.toString()).
  31.121 +            invoke("initialized");
  31.122 +        
  31.123 +        Executors.newSingleThreadExecutor().submit(new Runnable() {
  31.124 +            @Override
  31.125 +            public void run() {
  31.126 +                bb.showAndWait();
  31.127 +            }
  31.128 +        });
  31.129 +        
  31.130 +        ClassLoader l = getClassLoader();
  31.131 +        List<Object> res = new ArrayList<Object>();
  31.132 +        for (int i = 0; i < arr.length; i++) {
  31.133 +            Class<?> c = Class.forName(arr[i].getName(), true, l);
  31.134 +            seekKOTests(c, res);
  31.135 +        }
  31.136 +        return res.toArray();
  31.137 +    }
  31.138 +
  31.139 +    private static void seekKOTests(Class<?> c, List<Object> res) throws SecurityException, ClassNotFoundException {
  31.140 +        Class<? extends Annotation> koTest =
  31.141 +            c.getClassLoader().loadClass(KOTest.class.getName()).
  31.142 +            asSubclass(Annotation.class);
  31.143 +        for (Method m : c.getMethods()) {
  31.144 +            if (m.getAnnotation(koTest) != null) {
  31.145 +                res.add(new KOCase(browserContext, m, skipMsg(m.getName())));
  31.146 +            }
  31.147 +        }
  31.148 +    }
  31.149 +    
  31.150 +    private static String skipMsg(String methodName) {
  31.151 +        final String ver = System.getProperty("java.runtime.version"); // NOI18N
  31.152 +        if (
  31.153 +            !"1.8.0_05-b13".equals(ver) &&
  31.154 +            !"1.8.0_11-b12".equals(ver) 
  31.155 +        ) {
  31.156 +            // we know that 1.8.0_05 and 1.8.0_11 are broken, 
  31.157 +            // let's not speculate about anything else
  31.158 +            return null;
  31.159 +        }
  31.160 +        switch (methodName) {
  31.161 +            case "paintTheGridOnClick":
  31.162 +            case "displayContentOfArrayOfPeople":
  31.163 +            case "connectUsingWebSocket":
  31.164 +                return "Does not work on JDK8, due to JDK-8046013";
  31.165 +        }
  31.166 +        return null;
  31.167 +    }
  31.168 +
  31.169 +    static synchronized ClassLoader getClassLoader() throws InterruptedException {
  31.170 +        while (browserClass == null) {
  31.171 +            KnockoutEnvJSTest.class.wait();
  31.172 +        }
  31.173 +        return browserClass.getClassLoader();
  31.174 +    }
  31.175 +    
  31.176 +    public static synchronized void initialized(Class<?> browserCls) throws Exception {
  31.177 +        browserClass = browserCls;
  31.178 +        browserContext = Fn.activePresenter();
  31.179 +        KnockoutEnvJSTest.class.notifyAll();
  31.180 +    }
  31.181 +    
  31.182 +    public static void initialized() throws Exception {
  31.183 +        Assert.assertSame(
  31.184 +            KnockoutEnvJSTest.class.getClassLoader(),
  31.185 +            ClassLoader.getSystemClassLoader(),
  31.186 +            "No special classloaders"
  31.187 +        );
  31.188 +        KnockoutEnvJSTest.initialized(KnockoutEnvJSTest.class);
  31.189 +        browserContext = Fn.activePresenter();
  31.190 +    }
  31.191 +    
  31.192 +    @Override
  31.193 +    public BrwsrCtx createContext() {
  31.194 +        KO4J fx = new KO4J(browserContext);
  31.195 +        TyrusContext tc = new TyrusContext();
  31.196 +        Contexts.Builder cb = Contexts.newBuilder().
  31.197 +            register(Technology.class, fx.knockout(), 10).
  31.198 +            register(Transfer.class, tc, 10);
  31.199 +        cb.register(Fn.Presenter.class, browserContext, 10);
  31.200 +        cb.register(Executor.class, (Executor)browserContext, 10);
  31.201 +        BrwsrCtx ctx = cb.build();
  31.202 +        return ctx;
  31.203 +    }
  31.204 +
  31.205 +    @Override
  31.206 +    public Object createJSON(Map<String, Object> values) {
  31.207 +        Object json = createJSON();
  31.208 +        for (Map.Entry<String, Object> entry : values.entrySet()) {
  31.209 +            setProperty(json, entry.getKey(), entry.getValue());
  31.210 +        }
  31.211 +        return json;
  31.212 +    }
  31.213 +    
  31.214 +    @JavaScriptBody(args = {}, body = "return new Object();")
  31.215 +    private static native Object createJSON();
  31.216 +    @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;")
  31.217 +    private static native void setProperty(Object json, String key, Object value);
  31.218 +
  31.219 +    @Override
  31.220 +    @JavaScriptBody(args = { "s", "args" }, body = "\n"
  31.221 +        + "var f = new Function(s);\n"
  31.222 +        + "return f.apply(null, args);\n"
  31.223 +    )
  31.224 +    public native Object executeScript(String script, Object[] arguments);
  31.225 +
  31.226 +    private static String findBaseURL() {
  31.227 +        return baseUri.toString();
  31.228 +    }
  31.229 +    
  31.230 +    @Override
  31.231 +    public URI prepareURL(String content, String mimeType, String[] parameters) {
  31.232 +        try {
  31.233 +            final URL baseURL = new URL(findBaseURL());
  31.234 +            StringBuilder sb = new StringBuilder();
  31.235 +            sb.append("/dynamic?mimeType=").append(mimeType);
  31.236 +            for (int i = 0; i < parameters.length; i++) {
  31.237 +                sb.append("&param" + i).append("=").append(parameters[i]);
  31.238 +            }
  31.239 +            String mangle = content.replace("\n", "%0a")
  31.240 +                .replace("\"", "\\\"").replace(" ", "%20");
  31.241 +            sb.append("&content=").append(mangle);
  31.242 +
  31.243 +            URL query = new URL(baseURL, sb.toString());
  31.244 +            URLConnection c = query.openConnection();
  31.245 +            BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
  31.246 +            URI connectTo = new URI(br.readLine());
  31.247 +            return connectTo;
  31.248 +        } catch (IOException ex) {
  31.249 +            throw new IllegalStateException(ex);
  31.250 +        } catch (URISyntaxException ex) {
  31.251 +            throw new IllegalStateException(ex);
  31.252 +        }
  31.253 +    }
  31.254 +
  31.255 +    @Override
  31.256 +    public boolean canFailWebSocketTest() {
  31.257 +        return true;
  31.258 +    }
  31.259 +}
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/boot-script/src/test/resources/net/java/html/boot/script/ko4j/env.nashorn.1.2-debug.js	Fri Jul 25 10:45:12 2014 +0200
    32.3 @@ -0,0 +1,23982 @@
    32.4 +/*
    32.5 + * Envjs core-env.1.2.13
    32.6 + * Pure JavaScript Browser Environment
    32.7 + * By John Resig <http://ejohn.org/> and the Envjs Team
    32.8 + * Copyright 2008-2010 John Resig, under the MIT License
    32.9 + */
   32.10 +
   32.11 +load("nashorn:mozilla_compat.js");
   32.12 +
   32.13 +var Envjs = function(){
   32.14 +    var i,
   32.15 +        name,
   32.16 +        override = function(){
   32.17 +            for(i=0;i<arguments.length;i++){
   32.18 +                for ( name in arguments[i] ) {
   32.19 +                    var g = arguments[i].__lookupGetter__(name),
   32.20 +                        s = arguments[i].__lookupSetter__(name);
   32.21 +                    if ( g || s ) {
   32.22 +                        if ( g ) { Envjs.__defineGetter__(name, g); }
   32.23 +                        if ( s ) { Envjs.__defineSetter__(name, s); }
   32.24 +                    } else {
   32.25 +                        Envjs[name] = arguments[i][name];
   32.26 +                    }
   32.27 +                }
   32.28 +            }
   32.29 +        };
   32.30 +    if(arguments.length === 1 && typeof(arguments[0]) == 'string'){
   32.31 +        window.location = arguments[0];
   32.32 +    }else if (arguments.length === 1 && typeof(arguments[0]) == "object"){
   32.33 +        override(arguments[0]);
   32.34 +    }else if(arguments.length === 2 && typeof(arguments[0]) == 'string'){
   32.35 +        override(arguments[1]);
   32.36 +        window.location = arguments[0];
   32.37 +    }
   32.38 +    return;
   32.39 +},
   32.40 +__this__ = this;
   32.41 +
   32.42 +//eg "Mozilla"
   32.43 +Envjs.appCodeName  = "Envjs";
   32.44 +
   32.45 +//eg "Gecko/20070309 Firefox/2.0.0.3"
   32.46 +Envjs.appName      = "Resig/20070309 PilotFish/1.2.13";
   32.47 +
   32.48 +Envjs.version = "1.6";//?
   32.49 +Envjs.revision = '';
   32.50 +/*
   32.51 + * Envjs core-env.1.2.13 
   32.52 + * Pure JavaScript Browser Environment
   32.53 + * By John Resig <http://ejohn.org/> and the Envjs Team
   32.54 + * Copyright 2008-2010 John Resig, under the MIT License
   32.55 + */
   32.56 +
   32.57 +//CLOSURE_START
   32.58 +(function(){
   32.59 +
   32.60 +
   32.61 +
   32.62 +
   32.63 +
   32.64 +/**
   32.65 + * @author john resig
   32.66 + */
   32.67 +// Helper method for extending one object with another.
   32.68 +function __extend__(a,b) {
   32.69 +    for ( var i in b ) {
   32.70 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
   32.71 +        if ( g || s ) {
   32.72 +            if ( g ) { a.__defineGetter__(i, g); }
   32.73 +            if ( s ) { a.__defineSetter__(i, s); }
   32.74 +        } else {
   32.75 +            a[i] = b[i];
   32.76 +        }
   32.77 +    } return a;
   32.78 +}
   32.79 +
   32.80 +/**
   32.81 + * Writes message to system out
   32.82 + * @param {String} message
   32.83 + */
   32.84 +Envjs.log = function(message){};
   32.85 +
   32.86 +/**
   32.87 + * Constants providing enumerated levels for logging in modules
   32.88 + */
   32.89 +Envjs.DEBUG = 1;
   32.90 +Envjs.INFO = 2;
   32.91 +Envjs.WARN = 3;
   32.92 +Envjs.ERROR = 3;
   32.93 +Envjs.NONE = 3;
   32.94 +
   32.95 +/**
   32.96 + * Writes error info out to console
   32.97 + * @param {Error} e
   32.98 + */
   32.99 +Envjs.lineSource = function(e){};
  32.100 +
  32.101 +    
  32.102 +/**
  32.103 + * TODO: used in ./event/eventtarget.js
  32.104 + * @param {Object} event
  32.105 + */
  32.106 +Envjs.defaultEventBehaviors = {};
  32.107 +
  32.108 +
  32.109 +/**
  32.110 + * describes which script src values will trigger Envjs to load
  32.111 + * the script like a browser would
  32.112 + */
  32.113 +Envjs.scriptTypes = {
  32.114 +    "text/javascript"   :false,
  32.115 +    "text/envjs"        :true
  32.116 +};
  32.117 +
  32.118 +/**
  32.119 + * will be called when loading a script throws an error
  32.120 + * @param {Object} script
  32.121 + * @param {Object} e
  32.122 + */
  32.123 +Envjs.onScriptLoadError = function(script, e){
  32.124 +    console.log('error loading script %s %s', script, e);
  32.125 +};
  32.126 +
  32.127 +
  32.128 +/**
  32.129 + * load and execute script tag text content
  32.130 + * @param {Object} script
  32.131 + */
  32.132 +Envjs.loadInlineScript = function(script){
  32.133 +    var tmpFile;
  32.134 +    tmpFile = Envjs.writeToTempFile(script.text, 'js') ;
  32.135 +    load(tmpFile);
  32.136 +};
  32.137 +
  32.138 +/**
  32.139 + * Should evaluate script in some context
  32.140 + * @param {Object} context
  32.141 + * @param {Object} source
  32.142 + * @param {Object} name
  32.143 + */
  32.144 +Envjs.eval = function(context, source, name){};
  32.145 +
  32.146 +
  32.147 +/**
  32.148 + * Executes a script tag
  32.149 + * @param {Object} script
  32.150 + * @param {Object} parser
  32.151 + */
  32.152 +Envjs.loadLocalScript = function(script){
  32.153 +    //console.log("loading script %s", script);
  32.154 +    var types,
  32.155 +    src,
  32.156 +    i,
  32.157 +    base,
  32.158 +    filename,
  32.159 +    xhr;
  32.160 +
  32.161 +    if(script.type){
  32.162 +        types = script.type.split(";");
  32.163 +        for(i=0;i<types.length;i++){
  32.164 +            if(Envjs.scriptTypes[types[i]]){
  32.165 +                //ok this script type is allowed
  32.166 +                break;
  32.167 +            }
  32.168 +            if(i+1 == types.length){
  32.169 +                //console.log('wont load script type %s', script.type);
  32.170 +                return false;
  32.171 +            }
  32.172 +        }
  32.173 +    }
  32.174 +
  32.175 +    try{
  32.176 +        //console.log('handling inline scripts');
  32.177 +        if(!script.src.length){
  32.178 +            Envjs.loadInlineScript(script);
  32.179 +            return true;
  32.180 +        }
  32.181 +    }catch(e){
  32.182 +        //Envjs.error("Error loading script.", e);
  32.183 +        Envjs.onScriptLoadError(script, e);
  32.184 +        return false;
  32.185 +    }
  32.186 +
  32.187 +
  32.188 +    //console.log("loading allowed external script %s", script.src);
  32.189 +
  32.190 +    //lets you register a function to execute
  32.191 +    //before the script is loaded
  32.192 +    if(Envjs.beforeScriptLoad){
  32.193 +        for(src in Envjs.beforeScriptLoad){
  32.194 +            if(script.src.match(src)){
  32.195 +                Envjs.beforeScriptLoad[src](script);
  32.196 +            }
  32.197 +        }
  32.198 +    }
  32.199 +    base = "" + script.ownerDocument.location;
  32.200 +    //filename = Envjs.uri(script.src.match(/([^\?#]*)/)[1], base );
  32.201 +    //console.log('loading script from base %s', base);
  32.202 +    filename = Envjs.uri(script.src, base);
  32.203 +    try {
  32.204 +        xhr = new XMLHttpRequest();
  32.205 +        xhr.open("GET", filename, false/*syncronous*/);
  32.206 +        //console.log("loading external script %s", filename);
  32.207 +        xhr.onreadystatechange = function(){
  32.208 +            //console.log("readyState %s", xhr.readyState);
  32.209 +            if(xhr.readyState === 4){
  32.210 +                Envjs.eval(
  32.211 +                    script.ownerDocument.ownerWindow,
  32.212 +                    xhr.responseText,
  32.213 +                    filename
  32.214 +                );
  32.215 +            }
  32.216 +        };
  32.217 +        xhr.send(null, false);
  32.218 +    } catch(e) {
  32.219 +        console.log("could not load script %s \n %s", filename, e );
  32.220 +        Envjs.onScriptLoadError(script, e);
  32.221 +        return false;
  32.222 +    }
  32.223 +    //lets you register a function to execute
  32.224 +    //after the script is loaded
  32.225 +    if(Envjs.afterScriptLoad){
  32.226 +        for(src in Envjs.afterScriptLoad){
  32.227 +            if(script.src.match(src)){
  32.228 +                Envjs.afterScriptLoad[src](script);
  32.229 +            }
  32.230 +        }
  32.231 +    }
  32.232 +    return true;
  32.233 +};
  32.234 +
  32.235 +
  32.236 +/**
  32.237 + * An 'image' was requested by the document.
  32.238 + *
  32.239 + * - During inital parse of a <link>
  32.240 + * - Via an innerHTML parse of a <link>
  32.241 + * - A modificiation of the 'src' attribute of an Image/HTMLImageElement
  32.242 + *
  32.243 + * NOTE: this is optional API.  If this doesn't exist then the default
  32.244 + * 'loaded' event occurs.
  32.245 + *
  32.246 + * @param node {Object} the <img> node
  32.247 + * @param node the src value
  32.248 + * @return 'true' to indicate the 'load' succeed, false otherwise
  32.249 + */
  32.250 +Envjs.loadImage = function(node, src) {
  32.251 +    return true;
  32.252 +};
  32.253 +
  32.254 +
  32.255 +/**
  32.256 + * A 'link'  was requested by the document.  Typically this occurs when:
  32.257 + * - During inital parse of a <link>
  32.258 + * - Via an innerHTML parse of a <link>
  32.259 + * - A modificiation of the 'href' attribute on a <link> node in the tree
  32.260 + *
  32.261 + * @param node {Object} is the link node in question
  32.262 + * @param href {String} is the href.
  32.263 + *
  32.264 + * Return 'true' to indicate that the 'load' was successful, or false
  32.265 + * otherwise.  The appropriate event is then triggered.
  32.266 + *
  32.267 + * NOTE: this is optional API.  If this doesn't exist then the default
  32.268 + *   'loaded' event occurs
  32.269 + */
  32.270 +Envjs.loadLink = function(node, href) {
  32.271 +    return true;
  32.272 +};
  32.273 +
  32.274 +(function(){
  32.275 +
  32.276 +
  32.277 +/*
  32.278 + *  cookie handling
  32.279 + *  Private internal helper class used to save/retreive cookies
  32.280 + */
  32.281 +
  32.282 +/**
  32.283 + * Specifies the location of the cookie file
  32.284 + */
  32.285 +Envjs.cookieFile = function(){
  32.286 +    return 'file://'+Envjs.homedir+'/.cookies';
  32.287 +};
  32.288 +
  32.289 +/**
  32.290 + * saves cookies to a local file
  32.291 + * @param {Object} htmldoc
  32.292 + */
  32.293 +Envjs.saveCookies = function(){
  32.294 +    var cookiejson = JSON.stringify(Envjs.cookies.peristent,null,'\t');
  32.295 +    //console.log('persisting cookies %s', cookiejson);
  32.296 +    Envjs.writeToFile(cookiejson, Envjs.cookieFile());
  32.297 +};
  32.298 +
  32.299 +/**
  32.300 + * loads cookies from a local file
  32.301 + * @param {Object} htmldoc
  32.302 + */
  32.303 +Envjs.loadCookies = function(){
  32.304 +    var cookiejson,
  32.305 +        js;
  32.306 +    try{
  32.307 +        cookiejson = Envjs.readFromFile(Envjs.cookieFile())
  32.308 +        js = JSON.parse(cookiejson, null, '\t');
  32.309 +    }catch(e){
  32.310 +        //console.log('failed to load cookies %s', e);
  32.311 +        js = {};
  32.312 +    }
  32.313 +    return js;
  32.314 +};
  32.315 +
  32.316 +Envjs.cookies = {
  32.317 +    persistent:{
  32.318 +        //domain - key on domain name {
  32.319 +            //path - key on path {
  32.320 +                //name - key on name {
  32.321 +                     //value : cookie value
  32.322 +                     //other cookie properties
  32.323 +                //}
  32.324 +            //}
  32.325 +        //}
  32.326 +        //expire - provides a timestamp for expiring the cookie
  32.327 +        //cookie - the cookie!
  32.328 +    },
  32.329 +    temporary:{//transient is a reserved word :(
  32.330 +        //like above
  32.331 +    }
  32.332 +};
  32.333 +
  32.334 +var __cookies__;
  32.335 +
  32.336 +//HTMLDocument cookie
  32.337 +Envjs.setCookie = function(url, cookie){
  32.338 +    var i,
  32.339 +        index,
  32.340 +        name,
  32.341 +        value,
  32.342 +        properties = {},
  32.343 +        attr,
  32.344 +        attrs;
  32.345 +    url = Envjs.urlsplit(url);
  32.346 +    if(cookie)
  32.347 +        attrs = cookie.split(";");
  32.348 +    else
  32.349 +        return;
  32.350 +    
  32.351 +    //for now the strategy is to simply create a json object
  32.352 +    //and post it to a file in the .cookies.js file.  I hate parsing
  32.353 +    //dates so I decided not to implement support for 'expires' 
  32.354 +    //(which is deprecated) and instead focus on the easier 'max-age'
  32.355 +    //(which succeeds 'expires') 
  32.356 +    cookie = {};//keyword properties of the cookie
  32.357 +    cookie['domain'] = url.hostname;
  32.358 +    cookie['path'] = url.path||'/';
  32.359 +    for(i=0;i<attrs.length;i++){
  32.360 +        index = attrs[i].indexOf("=");
  32.361 +        if(index > -1){
  32.362 +            name = __trim__(attrs[i].slice(0,index));
  32.363 +            value = __trim__(attrs[i].slice(index+1));
  32.364 +            if(name=='max-age'){
  32.365 +                //we'll have to when to check these
  32.366 +                //and garbage collect expired cookies
  32.367 +                cookie[name] = parseInt(value, 10);
  32.368 +            } else if( name == 'domain' ){
  32.369 +                if(__domainValid__(url, value)){
  32.370 +                    cookie['domain'] = value;
  32.371 +                }
  32.372 +            } else if( name == 'path' ){
  32.373 +                //not sure of any special logic for path
  32.374 +                cookie['path'] = value;
  32.375 +            } else {
  32.376 +                //its not a cookie keyword so store it in our array of properties
  32.377 +                //and we'll serialize individually in a moment
  32.378 +                properties[name] = value;
  32.379 +            }
  32.380 +        }else{
  32.381 +            if( attrs[i] == 'secure' ){
  32.382 +                cookie[attrs[i]] = true;
  32.383 +            }
  32.384 +        }
  32.385 +    }
  32.386 +    if(!('max-age' in cookie)){
  32.387 +        //it's a transient cookie so it only lasts as long as 
  32.388 +        //the window.location remains the same (ie in-memory cookie)
  32.389 +        __mergeCookie__(Envjs.cookies.temporary, cookie, properties);
  32.390 +    }else{
  32.391 +        //the cookie is persistent
  32.392 +        __mergeCookie__(Envjs.cookies.persistent, cookie, properties);
  32.393 +        Envjs.saveCookies();
  32.394 +    }
  32.395 +};
  32.396 +
  32.397 +function __domainValid__(url, value){
  32.398 +    var i,
  32.399 +        domainParts = url.hostname.split('.').reverse(),
  32.400 +        newDomainParts = value.split('.').reverse();
  32.401 +    if(newDomainParts.length > 1){
  32.402 +        for(i=0;i<newDomainParts.length;i++){
  32.403 +            if(!(newDomainParts[i] == domainParts[i])){
  32.404 +                return false;
  32.405 +            }
  32.406 +        }
  32.407 +        return true;
  32.408 +    }
  32.409 +    return false;
  32.410 +};
  32.411 +
  32.412 +Envjs.getCookies = function(url){
  32.413 +    //The cookies that are returned must belong to the same domain
  32.414 +    //and be at or below the current window.location.path.  Also
  32.415 +    //we must check to see if the cookie was set to 'secure' in which
  32.416 +    //case we must check our current location.protocol to make sure it's
  32.417 +    //https:
  32.418 +    var persisted;
  32.419 +    url = Envjs.urlsplit(url);
  32.420 +    if(!__cookies__){
  32.421 +        try{
  32.422 +            __cookies__ = true;
  32.423 +            try{
  32.424 +                persisted = Envjs.loadCookies();
  32.425 +            }catch(e){
  32.426 +                //fail gracefully
  32.427 +                //console.log('%s', e);
  32.428 +            }   
  32.429 +            if(persisted){
  32.430 +                __extend__(Envjs.cookies.persistent, persisted);
  32.431 +            }
  32.432 +            //console.log('set cookies for doc %s', doc.baseURI);
  32.433 +        }catch(e){
  32.434 +            console.log('cookies not loaded %s', e)
  32.435 +        };
  32.436 +    }
  32.437 +    var temporary = __cookieString__(Envjs.cookies.temporary, url),
  32.438 +        persistent =  __cookieString__(Envjs.cookies.persistent, url);
  32.439 +    //console.log('temporary cookies: %s', temporary);  
  32.440 +    //console.log('persistent cookies: %s', persistent);  
  32.441 +    return  temporary + persistent;
  32.442 +};
  32.443 +
  32.444 +function __cookieString__(cookies, url) {
  32.445 +    var cookieString = "",
  32.446 +        domain, 
  32.447 +        path,
  32.448 +        name,
  32.449 +        i=0;
  32.450 +    for (domain in cookies) {
  32.451 +        // check if the cookie is in the current domain (if domain is set)
  32.452 +        // console.log('cookie domain %s', domain);
  32.453 +        if (domain == "" || domain == url.hostname) {
  32.454 +            for (path in cookies[domain]) {
  32.455 +                // console.log('cookie domain path %s', path);
  32.456 +                // make sure path is at or below the window location path
  32.457 +                if (path == "/" || url.path.indexOf(path) > -1) {
  32.458 +                    for (name in cookies[domain][path]) {
  32.459 +                        // console.log('cookie domain path name %s', name);
  32.460 +                        cookieString += 
  32.461 +                            ((i++ > 0)?'; ':'') +
  32.462 +                            name + "=" + 
  32.463 +                            cookies[domain][path][name].value;
  32.464 +                    }
  32.465 +                }
  32.466 +            }
  32.467 +        }
  32.468 +    }
  32.469 +    return cookieString;
  32.470 +};
  32.471 +
  32.472 +function __mergeCookie__(target, cookie, properties){
  32.473 +    var name, now;
  32.474 +    if(!target[cookie.domain]){
  32.475 +        target[cookie.domain] = {};
  32.476 +    }
  32.477 +    if(!target[cookie.domain][cookie.path]){
  32.478 +        target[cookie.domain][cookie.path] = {};
  32.479 +    }
  32.480 +    for(name in properties){
  32.481 +        now = new Date().getTime();
  32.482 +        target[cookie.domain][cookie.path][name] = {
  32.483 +            "value":properties[name],
  32.484 +            "secure":cookie.secure,
  32.485 +            "max-age":cookie['max-age'],
  32.486 +            "date-created":now,
  32.487 +            "expiration":(cookie['max-age']===0) ? 
  32.488 +                0 :
  32.489 +                now + cookie['max-age']
  32.490 +        };
  32.491 +        //console.log('cookie is %o',target[cookie.domain][cookie.path][name]);
  32.492 +    }
  32.493 +};
  32.494 +
  32.495 +})();//end cookies
  32.496 +/*
  32.497 +    http://www.JSON.org/json2.js
  32.498 +    2008-07-15
  32.499 +
  32.500 +    Public Domain.
  32.501 +
  32.502 +    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
  32.503 +
  32.504 +    See http://www.JSON.org/js.html
  32.505 +
  32.506 +   
  32.507 +    This code should be minified before deployment.
  32.508 +    See http://javascript.crockford.com/jsmin.html
  32.509 +
  32.510 +    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
  32.511 +    NOT CONTROL.
  32.512 +*/
  32.513 +try{ JSON; }catch(e){ 
  32.514 +JSON = function () {
  32.515 +
  32.516 +    function f(n) {
  32.517 +        // Format integers to have at least two digits.
  32.518 +        return n < 10 ? '0' + n : n;
  32.519 +    }
  32.520 +
  32.521 +    Date.prototype.toJSON = function (key) {
  32.522 +
  32.523 +        return this.getUTCFullYear()   + '-' +
  32.524 +             f(this.getUTCMonth() + 1) + '-' +
  32.525 +             f(this.getUTCDate())      + 'T' +
  32.526 +             f(this.getUTCHours())     + ':' +
  32.527 +             f(this.getUTCMinutes())   + ':' +
  32.528 +             f(this.getUTCSeconds())   + 'Z';
  32.529 +    };
  32.530 +
  32.531 +    String.prototype.toJSON = function (key) {
  32.532 +        return String(this);
  32.533 +    };
  32.534 +    Number.prototype.toJSON =
  32.535 +    Boolean.prototype.toJSON = function (key) {
  32.536 +        return this.valueOf();
  32.537 +    };
  32.538 +
  32.539 +    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  32.540 +        escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  32.541 +        gap,
  32.542 +        indent,
  32.543 +        meta = {    // table of character substitutions
  32.544 +            '\b': '\\b',
  32.545 +            '\t': '\\t',
  32.546 +            '\n': '\\n',
  32.547 +            '\f': '\\f',
  32.548 +            '\r': '\\r',
  32.549 +            '"' : '\\"',
  32.550 +            '\\': '\\\\'
  32.551 +        },
  32.552 +        rep;
  32.553 +
  32.554 +
  32.555 +    function quote(string) {
  32.556 +        
  32.557 +        escapeable.lastIndex = 0;
  32.558 +        return escapeable.test(string) ?
  32.559 +            '"' + string.replace(escapeable, function (a) {
  32.560 +                var c = meta[a];
  32.561 +                if (typeof c === 'string') {
  32.562 +                    return c;
  32.563 +                }
  32.564 +                return '\\u' + ('0000' +
  32.565 +                        (+(a.charCodeAt(0))).toString(16)).slice(-4);
  32.566 +            }) + '"' :
  32.567 +            '"' + string + '"';
  32.568 +    }
  32.569 +
  32.570 +
  32.571 +    function str(key, holder) {
  32.572 +
  32.573 +        var i,          // The loop counter.
  32.574 +            k,          // The member key.
  32.575 +            v,          // The member value.
  32.576 +            length,
  32.577 +            mind = gap,
  32.578 +            partial,
  32.579 +            value = holder[key];
  32.580 +
  32.581 +        if (value && typeof value === 'object' &&
  32.582 +                typeof value.toJSON === 'function') {
  32.583 +            value = value.toJSON(key);
  32.584 +        }
  32.585 +        if (typeof rep === 'function') {
  32.586 +            value = rep.call(holder, key, value);
  32.587 +        }
  32.588 +
  32.589 +        switch (typeof value) {
  32.590 +        case 'string':
  32.591 +            return quote(value);
  32.592 +
  32.593 +        case 'number':
  32.594 +            return isFinite(value) ? String(value) : 'null';
  32.595 +
  32.596 +        case 'boolean':
  32.597 +        case 'null':
  32.598 +
  32.599 +            return String(value);
  32.600 +            
  32.601 +        case 'object':
  32.602 +
  32.603 +            if (!value) {
  32.604 +                return 'null';
  32.605 +            }
  32.606 +            gap += indent;
  32.607 +            partial = [];
  32.608 +
  32.609 +            if (typeof value.length === 'number' &&
  32.610 +                    !(value.propertyIsEnumerable('length'))) {
  32.611 +
  32.612 +                length = value.length;
  32.613 +                for (i = 0; i < length; i += 1) {
  32.614 +                    partial[i] = str(i, value) || 'null';
  32.615 +                }
  32.616 +                
  32.617 +                v = partial.length === 0 ? '[]' :
  32.618 +                    gap ? '[\n' + gap +
  32.619 +                            partial.join(',\n' + gap) + '\n' +
  32.620 +                                mind + ']' :
  32.621 +                          '[' + partial.join(',') + ']';
  32.622 +                gap = mind;
  32.623 +                return v;
  32.624 +            }
  32.625 +
  32.626 +            if (rep && typeof rep === 'object') {
  32.627 +                length = rep.length;
  32.628 +                for (i = 0; i < length; i += 1) {
  32.629 +                    k = rep[i];
  32.630 +                    if (typeof k === 'string') {
  32.631 +                        v = str(k, value);
  32.632 +                        if (v) {
  32.633 +                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
  32.634 +                        }
  32.635 +                    }
  32.636 +                }
  32.637 +            } else {
  32.638 +
  32.639 +                for (k in value) {
  32.640 +                    if (Object.hasOwnProperty.call(value, k)) {
  32.641 +                        v = str(k, value);
  32.642 +                        if (v) {
  32.643 +                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
  32.644 +                        }
  32.645 +                    }
  32.646 +                }
  32.647 +            }
  32.648 +
  32.649 +            v = partial.length === 0 ? '{}' :
  32.650 +                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
  32.651 +                        mind + '}' : '{' + partial.join(',') + '}';
  32.652 +            gap = mind;
  32.653 +            return v;
  32.654 +        }
  32.655 +    }
  32.656 +
  32.657 +    return {
  32.658 +        stringify: function (value, replacer, space) {
  32.659 +
  32.660 +            var i;
  32.661 +            gap = '';
  32.662 +            indent = '';
  32.663 +
  32.664 +            if (typeof space === 'number') {
  32.665 +                for (i = 0; i < space; i += 1) {
  32.666 +                    indent += ' ';
  32.667 +                }
  32.668 +
  32.669 +            } else if (typeof space === 'string') {
  32.670 +                indent = space;
  32.671 +            }
  32.672 +
  32.673 +            rep = replacer;
  32.674 +            if (replacer && typeof replacer !== 'function' &&
  32.675 +                    (typeof replacer !== 'object' ||
  32.676 +                     typeof replacer.length !== 'number')) {
  32.677 +                throw new Error('JSON.stringify');
  32.678 +            }
  32.679 +
  32.680 +            return str('', {'': value});
  32.681 +        },
  32.682 +
  32.683 +
  32.684 +        parse: function (text, reviver) {
  32.685 +            var j;
  32.686 +            function walk(holder, key) {
  32.687 +                var k, v, value = holder[key];
  32.688 +                if (value && typeof value === 'object') {
  32.689 +                    for (k in value) {
  32.690 +                        if (Object.hasOwnProperty.call(value, k)) {
  32.691 +                            v = walk(value, k);
  32.692 +                            if (v !== undefined) {
  32.693 +                                value[k] = v;
  32.694 +                            } else {
  32.695 +                                delete value[k];
  32.696 +                            }
  32.697 +                        }
  32.698 +                    }
  32.699 +                }
  32.700 +                return reviver.call(holder, key, value);
  32.701 +            }
  32.702 +
  32.703 +            cx.lastIndex = 0;
  32.704 +            if (cx.test(text)) {
  32.705 +                text = text.replace(cx, function (a) {
  32.706 +                    return '\\u' + ('0000' +
  32.707 +                            (+(a.charCodeAt(0))).toString(16)).slice(-4);
  32.708 +                });
  32.709 +            }
  32.710 +
  32.711 +
  32.712 +            if (/^[\],:{}\s]*$/.
  32.713 +test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
  32.714 +replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
  32.715 +replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
  32.716 +        
  32.717 +                j = eval('(' + text + ')');
  32.718 +
  32.719 +                return typeof reviver === 'function' ?
  32.720 +                    walk({'': j}, '') : j;
  32.721 +            }
  32.722 +
  32.723 +            throw new SyntaxError('JSON.parse');
  32.724 +        }
  32.725 +    };
  32.726 +}();
  32.727 +
  32.728 +}
  32.729 +
  32.730 +/**
  32.731 + * synchronizes thread modifications
  32.732 + * @param {Function} fn
  32.733 + */
  32.734 +Envjs.sync = function(fn){};
  32.735 +
  32.736 +/**
  32.737 + * sleep thread for specified duration
  32.738 + * @param {Object} millseconds
  32.739 + */
  32.740 +Envjs.sleep = function(millseconds){};
  32.741 +
  32.742 +/**
  32.743 + * Interval to wait on event loop when nothing is happening
  32.744 + */
  32.745 +Envjs.WAIT_INTERVAL = 20;//milliseconds
  32.746 +
  32.747 +/*
  32.748 + * Copyright (c) 2010 Nick Galbreath
  32.749 + * http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
  32.750 + *
  32.751 + * Permission is hereby granted, free of charge, to any person
  32.752 + * obtaining a copy of this software and associated documentation
  32.753 + * files (the "Software"), to deal in the Software without
  32.754 + * restriction, including without limitation the rights to use,
  32.755 + * copy, modify, merge, publish, distribute, sublicense, and/or sell
  32.756 + * copies of the Software, and to permit persons to whom the
  32.757 + * Software is furnished to do so, subject to the following
  32.758 + * conditions:
  32.759 + *
  32.760 + * The above copyright notice and this permission notice shall be
  32.761 + * included in all copies or substantial portions of the Software.
  32.762 + *
  32.763 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  32.764 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  32.765 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  32.766 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  32.767 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  32.768 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  32.769 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  32.770 + * OTHER DEALINGS IN THE SOFTWARE.
  32.771 + */
  32.772 +
  32.773 +/*
  32.774 + * url processing in the spirit of python's urlparse module
  32.775 + * see `pydoc urlparse` or
  32.776 + * http://docs.python.org/library/urlparse.html
  32.777 + *
  32.778 + *  urlsplit: break apart a URL into components
  32.779 + *  urlunsplit:  reconsistute a URL from componets
  32.780 + *  urljoin: join an absolute and another URL
  32.781 + *  urldefrag: remove the fragment from a URL
  32.782 + *
  32.783 + * Take a look at the tests in urlparse-test.html
  32.784 + *
  32.785 + * On URL Normalization:
  32.786 + *
  32.787 + * urlsplit only does minor normalization the components Only scheme
  32.788 + * and hostname are lowercased urljoin does a bit more, normalizing
  32.789 + * paths with "."  and "..".
  32.790 +
  32.791 + * urlnormalize adds additional normalization
  32.792 + *
  32.793 + *   * removes default port numbers
  32.794 + *     http://abc.com:80/ -> http://abc.com/, etc
  32.795 + *   * normalizes path
  32.796 + *     http://abc.com -> http://abc.com/
  32.797 + *     and other "." and ".." cleanups
  32.798 + *   * if file, remove query and fragment
  32.799 + *
  32.800 + * It does not do:
  32.801 + *   * normalizes escaped hex values
  32.802 + *     http://abc.com/%7efoo -> http://abc.com/%7Efoo
  32.803 + *   * normalize '+' <--> '%20'
  32.804 + *
  32.805 + * Differences with Python
  32.806 + *
  32.807 + * The javascript urlsplit returns a normal object with the following
  32.808 + * properties: scheme, netloc, hostname, port, path, query, fragment.
  32.809 + * All properties are read-write.
  32.810 + *
  32.811 + * In python, the resulting object is not a dict, but a specialized,
  32.812 + * read-only, and has alternative tuple interface (e.g. obj[0] ==
  32.813 + * obj.scheme).  It's not clear why such a simple function requires
  32.814 + * a unique datastructure.
  32.815 + *
  32.816 + * urlunsplit in javascript takes an duck-typed object,
  32.817 + *  { scheme: 'http', netloc: 'abc.com', ...}
  32.818 + *  while in  * python it takes a list-like object.
  32.819 + *  ['http', 'abc.com'... ]
  32.820 + *
  32.821 + * For all functions, the javascript version use
  32.822 + * hostname+port if netloc is missing.  In python
  32.823 + * hostname+port were always ignored.
  32.824 + *
  32.825 + * Similar functionality in different languages:
  32.826 + *
  32.827 + *   http://php.net/manual/en/function.parse-url.php
  32.828 + *   returns assocative array but cannot handle relative URL
  32.829 + *
  32.830 + * TODO: test allowfragments more
  32.831 + * TODO: test netloc missing, but hostname present
  32.832 + */
  32.833 +
  32.834 +var urlparse = {};
  32.835 +
  32.836 +// Unlike to be useful standalone
  32.837 +//
  32.838 +// NORMALIZE PATH with "../" and "./"
  32.839 +//   http://en.wikipedia.org/wiki/URL_normalization
  32.840 +//   http://tools.ietf.org/html/rfc3986#section-5.2.3
  32.841 +//
  32.842 +urlparse.normalizepath = function(path)
  32.843 +{
  32.844 +    if (!path || path === '/') {
  32.845 +        return '/';
  32.846 +    }
  32.847 +
  32.848 +    var parts = path.split('/');
  32.849 +
  32.850 +    var newparts = [];
  32.851 +    // make sure path always starts with '/'
  32.852 +    if (parts[0]) {
  32.853 +        newparts.push('');
  32.854 +    }
  32.855 +
  32.856 +    for (var i = 0; i < parts.length; ++i) {
  32.857 +        if (parts[i] === '..') {
  32.858 +            if (newparts.length > 1) {
  32.859 +                newparts.pop();
  32.860 +            } else {
  32.861 +                newparts.push(parts[i]);
  32.862 +            }
  32.863 +        } else if (parts[i] != '.') {
  32.864 +            newparts.push(parts[i]);
  32.865 +        }
  32.866 +    }
  32.867 +
  32.868 +    path = newparts.join('/');
  32.869 +    if (!path) {
  32.870 +        path = '/';
  32.871 +    }
  32.872 +    return path;
  32.873 +};
  32.874 +
  32.875 +//
  32.876 +// Does many of the normalizations that the stock
  32.877 +//  python urlsplit/urlunsplit/urljoin neglects
  32.878 +//
  32.879 +// Doesn't do hex-escape normalization on path or query
  32.880 +//   %7e -> %7E
  32.881 +// Nor, '+' <--> %20 translation
  32.882 +//
  32.883 +urlparse.urlnormalize = function(url)
  32.884 +{
  32.885 +    var parts = urlparse.urlsplit(url);
  32.886 +    switch (parts.scheme) {
  32.887 +    case 'file':
  32.888 +        // files can't have query strings
  32.889 +        //  and we don't bother with fragments
  32.890 +        parts.query = '';
  32.891 +        parts.fragment = '';
  32.892 +        break;
  32.893 +    case 'http':
  32.894 +    case 'https':
  32.895 +        // remove default port
  32.896 +        if ((parts.scheme === 'http' && parts.port == 80) ||
  32.897 +            (parts.scheme === 'https' && parts.port == 443)) {
  32.898 +            parts.port = null;
  32.899 +            // hostname is already lower case
  32.900 +            parts.netloc = parts.hostname;
  32.901 +        }
  32.902 +        break;
  32.903 +    default:
  32.904 +        // if we don't have specific normalizations for this
  32.905 +        // scheme, return the original url unmolested
  32.906 +        return url;
  32.907 +    }
  32.908 +
  32.909 +    // for [file|http|https].  Not sure about other schemes
  32.910 +    parts.path = urlparse.normalizepath(parts.path);
  32.911 +
  32.912 +    return urlparse.urlunsplit(parts);
  32.913 +};
  32.914 +
  32.915 +urlparse.urldefrag = function(url)
  32.916 +{
  32.917 +    var idx = url.indexOf('#');
  32.918 +    if (idx == -1) {
  32.919 +        return [ url, '' ];
  32.920 +    } else {
  32.921 +        return [ url.substr(0,idx), url.substr(idx+1) ];
  32.922 +    }
  32.923 +};
  32.924 +
  32.925 +urlparse.urlsplit = function(url, default_scheme, allow_fragments)
  32.926 +{
  32.927 +    var leftover;
  32.928 +
  32.929 +    if (typeof allow_fragments === 'undefined') {
  32.930 +        allow_fragments = true;
  32.931 +    }
  32.932 +
  32.933 +    // scheme (optional), host, port
  32.934 +    var fullurl = /^([A-Za-z]+)?(:?\/\/)([0-9.\-A-Za-z]*)(?::(\d+))?(.*)$/;
  32.935 +    // path, query, fragment
  32.936 +    var parse_leftovers = /([^?#]*)?(?:\?([^#]*))?(?:#(.*))?$/;
  32.937 +
  32.938 +    var o = {};
  32.939 +
  32.940 +    var parts = url.match(fullurl);
  32.941 +    if (parts) {
  32.942 +        o.scheme = parts[1] || default_scheme || '';
  32.943 +        o.hostname = parts[3].toLowerCase() || '';
  32.944 +        o.port = parseInt(parts[4],10) || '';
  32.945 +        // Probably should grab the netloc from regexp
  32.946 +        //  and then parse again for hostname/port
  32.947 +
  32.948 +        o.netloc = parts[3];
  32.949 +        if (parts[4]) {
  32.950 +            o.netloc += ':' + parts[4];
  32.951 +        }
  32.952 +
  32.953 +        leftover = parts[5];
  32.954 +    } else {
  32.955 +        o.scheme = default_scheme || '';
  32.956 +        o.netloc = '';
  32.957 +        o.hostname = '';
  32.958 +        leftover = url;
  32.959 +    }
  32.960 +    o.scheme = o.scheme.toLowerCase();
  32.961 +
  32.962 +    parts = leftover.match(parse_leftovers);
  32.963 +
  32.964 +    o.path =  parts[1] || '';
  32.965 +    o.query = parts[2] || '';
  32.966 +
  32.967 +    if (allow_fragments) {
  32.968 +        o.fragment = parts[3] || '';
  32.969 +    } else {
  32.970 +        o.fragment = '';
  32.971 +    }
  32.972 +
  32.973 +    return o;
  32.974 +};
  32.975 +
  32.976 +urlparse.urlunsplit = function(o) {
  32.977 +    var s = '';
  32.978 +    if (o.scheme) {
  32.979 +        s += o.scheme + '://';
  32.980 +    }
  32.981 +
  32.982 +    if (o.netloc) {
  32.983 +        if (s == '') {
  32.984 +            s += '//';
  32.985 +        }
  32.986 +        s +=  o.netloc;
  32.987 +    } else if (o.hostname) {
  32.988 +        // extension.  Python only uses netloc
  32.989 +        if (s == '') {
  32.990 +            s += '//';
  32.991 +        }
  32.992 +        s += o.hostname;
  32.993 +        if (o.port) {
  32.994 +            s += ':' + o.port;
  32.995 +        }
  32.996 +    }
  32.997 +
  32.998 +    if (o.path) {
  32.999 +        s += o.path;
 32.1000 +    }
 32.1001 +
 32.1002 +    if (o.query) {
 32.1003 +        s += '?' + o.query;
 32.1004 +    }
 32.1005 +    if (o.fragment) {
 32.1006 +        s += '#' + o.fragment;
 32.1007 +    }
 32.1008 +    return s;
 32.1009 +};
 32.1010 +
 32.1011 +urlparse.urljoin = function(base, url, allow_fragments)
 32.1012 +{
 32.1013 +    if (typeof allow_fragments === 'undefined') {
 32.1014 +        allow_fragments = true;
 32.1015 +    }
 32.1016 +
 32.1017 +    var url_parts = urlparse.urlsplit(url);
 32.1018 +
 32.1019 +    // if url parts has a scheme (i.e. absolute)
 32.1020 +    // then nothing to do
 32.1021 +    if (url_parts.scheme) {
 32.1022 +        if (! allow_fragments) {
 32.1023 +            return url;
 32.1024 +        } else {
 32.1025 +            return urlparse.urldefrag(url)[0];
 32.1026 +        }
 32.1027 +    }
 32.1028 +    var base_parts = urlparse.urlsplit(base);
 32.1029 +
 32.1030 +    // copy base, only if not present
 32.1031 +    if (!base_parts.scheme) {
 32.1032 +        base_parts.scheme = url_parts.scheme;
 32.1033 +    }
 32.1034 +
 32.1035 +    // copy netloc, only if not present
 32.1036 +    if (!base_parts.netloc || !base_parts.hostname) {
 32.1037 +        base_parts.netloc = url_parts.netloc;
 32.1038 +        base_parts.hostname = url_parts.hostname;
 32.1039 +        base_parts.port = url_parts.port;
 32.1040 +    }
 32.1041 +
 32.1042 +    // paths
 32.1043 +    if (url_parts.path.length > 0) {
 32.1044 +        if (url_parts.path.charAt(0) == '/') {
 32.1045 +            base_parts.path = url_parts.path;
 32.1046 +        } else {
 32.1047 +            // relative path.. get rid of "current filename" and
 32.1048 +            //   replace.  Same as var parts =
 32.1049 +            //   base_parts.path.split('/'); parts[parts.length-1] =
 32.1050 +            //   url_parts.path; base_parts.path = parts.join('/');
 32.1051 +            var idx = base_parts.path.lastIndexOf('/');
 32.1052 +            if (idx == -1) {
 32.1053 +                base_parts.path = url_parts.path;
 32.1054 +            } else {
 32.1055 +                base_parts.path = base_parts.path.substr(0,idx) + '/' +
 32.1056 +                    url_parts.path;
 32.1057 +            }
 32.1058 +        }
 32.1059 +    }
 32.1060 +
 32.1061 +    // clean up path
 32.1062 +    base_parts.path = urlparse.normalizepath(base_parts.path);
 32.1063 +
 32.1064 +    // copy query string
 32.1065 +    base_parts.query = url_parts.query;
 32.1066 +
 32.1067 +    // copy fragments
 32.1068 +    if (allow_fragments) {
 32.1069 +        base_parts.fragment = url_parts.fragment;
 32.1070 +    } else {
 32.1071 +        base_parts.fragment = '';
 32.1072 +    }
 32.1073 +
 32.1074 +    return urlparse.urlunsplit(base_parts);
 32.1075 +};
 32.1076 +
 32.1077 +/**
 32.1078 + * getcwd - named after posix call of same name (see 'man 2 getcwd')
 32.1079 + *
 32.1080 + */
 32.1081 +Envjs.getcwd = function() {
 32.1082 +    return '.';
 32.1083 +};
 32.1084 +
 32.1085 +/**
 32.1086 + * resolves location relative to doc location
 32.1087 + *
 32.1088 + * @param {Object} path  Relative or absolute URL
 32.1089 + * @param {Object} base  (semi-optional)  The base url used in resolving "path" above
 32.1090 + */
 32.1091 +Envjs.uri = function(path, base) {
 32.1092 +    //console.log('constructing uri from path %s and base %s', path, base);
 32.1093 +
 32.1094 +    // Semi-common trick is to make an iframe with src='javascript:false'
 32.1095 +    //  (or some equivalent).  By returning '', the load is skipped
 32.1096 +    if (path.indexOf('javascript') === 0) {
 32.1097 +        return '';
 32.1098 +    }
 32.1099 +
 32.1100 +    // if path is absolute, then just normalize and return
 32.1101 +    if (path.match('^[a-zA-Z]+://')) {
 32.1102 +        return urlparse.urlnormalize(path);
 32.1103 +    }
 32.1104 +
 32.1105 +    // interesting special case, a few very large websites use
 32.1106 +    // '//foo/bar/' to mean 'http://foo/bar'
 32.1107 +    if (path.match('^//')) {
 32.1108 +        path = 'http:' + path;
 32.1109 +    }
 32.1110 +
 32.1111 +    // if base not passed in, try to get it from document
 32.1112 +    // Ideally I would like the caller to pass in document.baseURI to
 32.1113 +    //  make this more self-sufficient and testable
 32.1114 +    if (!base && document) {
 32.1115 +        base = document.baseURI;
 32.1116 +    }
 32.1117 +
 32.1118 +    // about:blank doesn't count
 32.1119 +    if (base === 'about:blank'){
 32.1120 +        base = '';
 32.1121 +    }
 32.1122 +
 32.1123 +    // if base is still empty, then we are in QA mode loading local
 32.1124 +    // files.  Get current working directory
 32.1125 +    if (!base) {
 32.1126 +        base = 'file://' +  Envjs.getcwd() + '/';
 32.1127 +    }
 32.1128 +    // handles all cases if path is abosulte or relative to base
 32.1129 +    // 3rd arg is "false" --> remove fragments
 32.1130 +    var newurl = urlparse.urlnormalize(urlparse.urljoin(base, path, false));
 32.1131 +
 32.1132 +    return newurl;
 32.1133 +};
 32.1134 +
 32.1135 +
 32.1136 +
 32.1137 +/**
 32.1138 + * Used in the XMLHttpRquest implementation to run a
 32.1139 + * request in a seperate thread
 32.1140 + * @param {Object} fn
 32.1141 + */
 32.1142 +Envjs.runAsync = function(fn){};
 32.1143 +
 32.1144 +
 32.1145 +/**
 32.1146 + * Used to write to a local file
 32.1147 + * @param {Object} text
 32.1148 + * @param {Object} url
 32.1149 + */
 32.1150 +Envjs.writeToFile = function(text, url){};
 32.1151 +
 32.1152 +
 32.1153 +/**
 32.1154 + * Used to write to a local file
 32.1155 + * @param {Object} text
 32.1156 + * @param {Object} suffix
 32.1157 + */
 32.1158 +Envjs.writeToTempFile = function(text, suffix){};
 32.1159 +
 32.1160 +/**
 32.1161 + * Used to read the contents of a local file
 32.1162 + * @param {Object} url
 32.1163 + */
 32.1164 +Envjs.readFromFile = function(url){};
 32.1165 +
 32.1166 +/**
 32.1167 + * Used to delete a local file
 32.1168 + * @param {Object} url
 32.1169 + */
 32.1170 +Envjs.deleteFile = function(url){};
 32.1171 +
 32.1172 +/**
 32.1173 + * establishes connection and calls responsehandler
 32.1174 + * @param {Object} xhr
 32.1175 + * @param {Object} responseHandler
 32.1176 + * @param {Object} data
 32.1177 + */
 32.1178 +Envjs.connection = function(xhr, responseHandler, data){};
 32.1179 +
 32.1180 +
 32.1181 +__extend__(Envjs, urlparse);
 32.1182 +
 32.1183 +/**
 32.1184 + * Makes an object window-like by proxying object accessors
 32.1185 + * @param {Object} scope
 32.1186 + * @param {Object} parent
 32.1187 + */
 32.1188 +Envjs.proxy = function(scope, parent, aliasList){};
 32.1189 +
 32.1190 +Envjs.javaEnabled = false;
 32.1191 +
 32.1192 +Envjs.homedir        = '';
 32.1193 +Envjs.tmpdir         = '';
 32.1194 +Envjs.os_name        = '';
 32.1195 +Envjs.os_arch        = '';
 32.1196 +Envjs.os_version     = '';
 32.1197 +Envjs.lang           = '';
 32.1198 +Envjs.platform       = '';
 32.1199 +
 32.1200 +/**
 32.1201 + *
 32.1202 + * @param {Object} frameElement
 32.1203 + * @param {Object} url
 32.1204 + */
 32.1205 +Envjs.loadFrame = function(frame, url){
 32.1206 +    try {
 32.1207 +        if(frame.contentWindow){
 32.1208 +            //mark for garbage collection
 32.1209 +            frame.contentWindow = null;
 32.1210 +        }
 32.1211 +
 32.1212 +        //create a new scope for the window proxy
 32.1213 +        //platforms will need to override this function
 32.1214 +        //to make sure the scope is global-like
 32.1215 +        frame.contentWindow = (function(){return this;})();
 32.1216 +        new Window(frame.contentWindow, window);
 32.1217 +
 32.1218 +        //I dont think frames load asynchronously in firefox
 32.1219 +        //and I think the tests have verified this but for
 32.1220 +        //some reason I'm less than confident... Are there cases?
 32.1221 +        frame.contentDocument = frame.contentWindow.document;
 32.1222 +        frame.contentDocument.async = false;
 32.1223 +        if(url){
 32.1224 +            //console.log('envjs.loadFrame async %s', frame.contentDocument.async);
 32.1225 +            frame.contentWindow.location = url;
 32.1226 +        }
 32.1227 +    } catch(e) {
 32.1228 +        console.log("failed to load frame content: from %s %s", url, e);
 32.1229 +    }
 32.1230 +};
 32.1231 +
 32.1232 +
 32.1233 +// The following are in rhino/window.js
 32.1234 +// TODO: Envjs.unloadFrame
 32.1235 +// TODO: Envjs.proxy
 32.1236 +
 32.1237 +/**
 32.1238 + * @author john resig & the envjs team
 32.1239 + * @uri http://www.envjs.com/
 32.1240 + * @copyright 2008-2010
 32.1241 + * @license MIT
 32.1242 + */
 32.1243 +//CLOSURE_END
 32.1244 +}());
 32.1245 +/*
 32.1246 + * Envjs rhino-env.1.2.13
 32.1247 + * Pure JavaScript Browser Environment
 32.1248 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.1249 + * Copyright 2008-2010 John Resig, under the MIT License
 32.1250 + */
 32.1251 +
 32.1252 +var __context__ = Packages.jdk.nashorn.internal.runtime.Context.getContext();
 32.1253 +
 32.1254 +Envjs.platform       = "Nashorn";
 32.1255 +Envjs.revision       = "0.1";
 32.1256 +
 32.1257 +/*
 32.1258 + * Envjs rhino-env.1.2.13 
 32.1259 + * Pure JavaScript Browser Environment
 32.1260 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.1261 + * Copyright 2008-2010 John Resig, under the MIT License
 32.1262 + */
 32.1263 +
 32.1264 +//CLOSURE_START
 32.1265 +(function(){
 32.1266 +
 32.1267 +
 32.1268 +
 32.1269 +
 32.1270 +
 32.1271 +/**
 32.1272 + * @author john resig
 32.1273 + */
 32.1274 +// Helper method for extending one object with another.
 32.1275 +function __extend__(a,b) {
 32.1276 +    for ( var i in b ) {
 32.1277 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
 32.1278 +        if ( g || s ) {
 32.1279 +            if ( g ) { a.__defineGetter__(i, g); }
 32.1280 +            if ( s ) { a.__defineSetter__(i, s); }
 32.1281 +        } else {
 32.1282 +            a[i] = b[i];
 32.1283 +        }
 32.1284 +    } return a;
 32.1285 +}
 32.1286 +
 32.1287 +/**
 32.1288 + * Writes message to system out.
 32.1289 + *
 32.1290 + * Some sites redefine 'print' as in 'window.print', so instead of
 32.1291 + * printing to stdout, you are popping open a new window, which might
 32.1292 + * call print, etc, etc,etc This can cause infinite loops and can
 32.1293 + * exhausing all memory.
 32.1294 + *
 32.1295 + * By defining this upfront now, Envjs.log will always call the native 'print'
 32.1296 + * function
 32.1297 + *
 32.1298 + * @param {Object} message
 32.1299 + */
 32.1300 +Envjs.log = print;
 32.1301 +
 32.1302 +Envjs.lineSource = function(e){
 32.1303 +    return e&&e.rhinoException?e.rhinoException.lineSource():"(line ?)";
 32.1304 +};
 32.1305 +/**
 32.1306 + * load and execute script tag text content
 32.1307 + * @param {Object} script
 32.1308 + */
 32.1309 +Envjs.loadInlineScript = function(script){
 32.1310 +    if(script.ownerDocument.ownerWindow){
 32.1311 +        Envjs.eval(
 32.1312 +            script.ownerDocument.ownerWindow,
 32.1313 +            script.text,
 32.1314 +            'eval('+script.text.substring(0,16)+'...):'+new Date().getTime()
 32.1315 +        );
 32.1316 +    }else{
 32.1317 +        Envjs.eval(
 32.1318 +            __this__,
 32.1319 +            script.text,
 32.1320 +            'eval('+script.text.substring(0,16)+'...):'+new Date().getTime()
 32.1321 +        );
 32.1322 +    }
 32.1323 +    //console.log('evaluated at scope %s \n%s',
 32.1324 +    //    script.ownerDocument.ownerWindow.guid, script.text);
 32.1325 +};
 32.1326 +
 32.1327 +
 32.1328 +Envjs.eval = function(context, source, name){
 32.1329 +    __context__.eval(context, source, null, name, false);
 32.1330 +};
 32.1331 +
 32.1332 +
 32.1333 +/**
 32.1334 + * Rhino provides a very succinct 'sync'
 32.1335 + * @param {Function} fn
 32.1336 + */
 32.1337 +Envjs.sync = function(fn){
 32.1338 +    //console.log('Threadless platform, sync is safe');
 32.1339 +    return fn;
 32.1340 +};
 32.1341 +Envjs.spawn = function(fn){
 32.1342 +    //console.log('Threadless platform, spawn shares main thread.');
 32.1343 +    return fn();
 32.1344 +};
 32.1345 +
 32.1346 +/**
 32.1347 + * sleep thread for specified duration
 32.1348 + * @param {Object} millseconds
 32.1349 + */
 32.1350 +Envjs.sleep = function(millseconds){
 32.1351 +    try{
 32.1352 +        java.lang.Thread.sleep(millseconds);
 32.1353 +    }catch(e){
 32.1354 +        console.log('Threadless platform, cannot sleep.');
 32.1355 +    }
 32.1356 +};
 32.1357 +
 32.1358 +/**
 32.1359 + * provides callback hook for when the system exits
 32.1360 + */
 32.1361 +Envjs.onExit = function(callback){
 32.1362 +    // TODO add exit listener
 32.1363 +};
 32.1364 +
 32.1365 +/**
 32.1366 + * Get 'Current Working Directory'
 32.1367 + */
 32.1368 +Envjs.getcwd = function() {
 32.1369 +    return java.lang.System.getProperty('user.dir');
 32.1370 +}
 32.1371 +
 32.1372 +/**
 32.1373 + *
 32.1374 + * @param {Object} fn
 32.1375 + * @param {Object} onInterupt
 32.1376 + */
 32.1377 +Envjs.runAsync = function(fn, onInterupt){
 32.1378 +    ////Envjs.debug("running async");
 32.1379 +    var running = true,
 32.1380 +        run;
 32.1381 +
 32.1382 +    try{
 32.1383 +        run = Envjs.sync(function(){
 32.1384 +            fn();
 32.1385 +            Envjs.wait();
 32.1386 +        });
 32.1387 +        Envjs.spawn(run);
 32.1388 +    }catch(e){
 32.1389 +        console.log("error while running async operation", e);
 32.1390 +        try{if(onInterrupt)onInterrupt(e)}catch(ee){};
 32.1391 +    }
 32.1392 +};
 32.1393 +
 32.1394 +/**
 32.1395 + * Used to write to a local file
 32.1396 + * @param {Object} text
 32.1397 + * @param {Object} url
 32.1398 + */
 32.1399 +Envjs.writeToFile = function(text, url){
 32.1400 +    //Envjs.debug("writing text to url : " + url);
 32.1401 +    var out = new java.io.FileWriter(
 32.1402 +        new java.io.File(
 32.1403 +            new java.net.URI(url.toString())));
 32.1404 +    out.write( text, 0, text.length );
 32.1405 +    out.flush();
 32.1406 +    out.close();
 32.1407 +};
 32.1408 +
 32.1409 +/**
 32.1410 + * Used to write to a local file
 32.1411 + * @param {Object} text
 32.1412 + * @param {Object} suffix
 32.1413 + */
 32.1414 +Envjs.writeToTempFile = function(text, suffix){
 32.1415 +    //Envjs.debug("writing text to temp url : " + suffix);
 32.1416 +    // Create temp file.
 32.1417 +    var temp = java.io.File.createTempFile("envjs-tmp", suffix);
 32.1418 +
 32.1419 +    // Delete temp file when program exits.
 32.1420 +    temp.deleteOnExit();
 32.1421 +
 32.1422 +    // Write to temp file
 32.1423 +    var out = new java.io.FileWriter(temp);
 32.1424 +    out.write(text, 0, text.length);
 32.1425 +    out.close();
 32.1426 +    return temp.getAbsolutePath().toString()+'';
 32.1427 +};
 32.1428 +
 32.1429 +
 32.1430 +/**
 32.1431 + * Used to read the contents of a local file
 32.1432 + * @param {Object} url
 32.1433 + */
 32.1434 +Envjs.readFromFile = function( url ){
 32.1435 +    var fileReader = new java.io.FileReader(
 32.1436 +        new java.io.File( 
 32.1437 +            new java.net.URI( url )));
 32.1438 +            
 32.1439 +    var stringwriter = new java.io.StringWriter(),
 32.1440 +        buffer = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 1024),
 32.1441 +        length;
 32.1442 +
 32.1443 +    while ((length = fileReader.read(buffer, 0, 1024)) != -1) {
 32.1444 +        stringwriter.write(buffer, 0, length);
 32.1445 +    }
 32.1446 +
 32.1447 +    stringwriter.close();
 32.1448 +    return stringwriter.toString()+"";
 32.1449 +};
 32.1450 +    
 32.1451 +
 32.1452 +/**
 32.1453 + * Used to delete a local file
 32.1454 + * @param {Object} url
 32.1455 + */
 32.1456 +Envjs.deleteFile = function(url){
 32.1457 +    var file = new java.io.File( new java.net.URI( url ) );
 32.1458 +    file["delete"]();
 32.1459 +};
 32.1460 +
 32.1461 +/**
 32.1462 + * establishes connection and calls responsehandler
 32.1463 + * @param {Object} xhr
 32.1464 + * @param {Object} responseHandler
 32.1465 + * @param {Object} data
 32.1466 + */
 32.1467 +Envjs.connection = function(xhr, responseHandler, data){
 32.1468 +    var url = new java.net.URL(xhr.url),
 32.1469 +        connection,
 32.1470 +        header,
 32.1471 +        outstream,
 32.1472 +        buffer,
 32.1473 +        length,
 32.1474 +        binary = false,
 32.1475 +        name, value,
 32.1476 +        contentEncoding,
 32.1477 +        instream,
 32.1478 +        responseXML,
 32.1479 +        i;
 32.1480 +    if ( /^file\:/.test(url) ) {
 32.1481 +        try{
 32.1482 +            if ( "PUT" == xhr.method || "POST" == xhr.method ) {
 32.1483 +                data =  data || "" ;
 32.1484 +                Envjs.writeToFile(data, url);
 32.1485 +                xhr.readyState = 4;
 32.1486 +                //could be improved, I just cant recall the correct http codes
 32.1487 +                xhr.status = 200;
 32.1488 +                xhr.statusText = "";
 32.1489 +            } else if ( xhr.method == "DELETE" ) {
 32.1490 +                Envjs.deleteFile(url);
 32.1491 +                xhr.readyState = 4;
 32.1492 +                //could be improved, I just cant recall the correct http codes
 32.1493 +                xhr.status = 200;
 32.1494 +                xhr.statusText = "";
 32.1495 +            } else {
 32.1496 +                connection = url.openConnection();
 32.1497 +                connection.connect();
 32.1498 +                //try to add some canned headers that make sense
 32.1499 +
 32.1500 +                try{
 32.1501 +                    if(xhr.url.match(/html$/)){
 32.1502 +                        xhr.responseHeaders["Content-Type"] = 'text/html';
 32.1503 +                    }else if(xhr.url.match(/.xml$/)){
 32.1504 +                        xhr.responseHeaders["Content-Type"] = 'text/xml';
 32.1505 +                    }else if(xhr.url.match(/.js$/)){
 32.1506 +                        xhr.responseHeaders["Content-Type"] = 'text/javascript';
 32.1507 +                    }else if(xhr.url.match(/.json$/)){
 32.1508 +                        xhr.responseHeaders["Content-Type"] = 'application/json';
 32.1509 +                    }else{
 32.1510 +                        xhr.responseHeaders["Content-Type"] = 'text/plain';
 32.1511 +                    }
 32.1512 +                    //xhr.responseHeaders['Last-Modified'] = connection.getLastModified();
 32.1513 +                    //xhr.responseHeaders['Content-Length'] = headerValue+'';
 32.1514 +                    //xhr.responseHeaders['Date'] = new Date()+'';*/
 32.1515 +                }catch(e){
 32.1516 +                    console.log('failed to load response headers',e);
 32.1517 +                }
 32.1518 +            }
 32.1519 +        }catch(e){
 32.1520 +            console.log('failed to open file %s %s', url, e);
 32.1521 +            connection = null;
 32.1522 +            xhr.readyState = 4;
 32.1523 +            xhr.statusText = "Local File Protocol Error";
 32.1524 +            xhr.responseText = "<html><head/><body><p>"+ e+ "</p></body></html>";
 32.1525 +        }
 32.1526 +    } else {
 32.1527 +        connection = url.openConnection();
 32.1528 +        connection.setRequestMethod( xhr.method );
 32.1529 +
 32.1530 +        // Add headers to Java connection
 32.1531 +        for (header in xhr.headers){
 32.1532 +            connection.addRequestProperty(header+'', xhr.headers[header]+'');
 32.1533 +        }
 32.1534 +
 32.1535 +        //write data to output stream if required
 32.1536 +        if(data){
 32.1537 +            if(data instanceof Document){
 32.1538 +                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
 32.1539 +                    connection.setDoOutput(true);
 32.1540 +                    outstream = connection.getOutputStream(),
 32.1541 +                    xml = (new XMLSerializer()).serializeToString(data);
 32.1542 +                    buffer = new java.lang.String(xml).getBytes('UTF-8');
 32.1543 +                    outstream.write(buffer, 0, buffer.length);
 32.1544 +                    outstream.close();
 32.1545 +                }
 32.1546 +            }else if(data.length&&data.length>0){
 32.1547 +                if ( xhr.method == "PUT" || xhr.method == "POST" ) {
 32.1548 +                    connection.setDoOutput(true);
 32.1549 +                    outstream = connection.getOutputStream();
 32.1550 +                    buffer = new java.lang.String(data).getBytes('UTF-8');
 32.1551 +                    outstream.write(buffer, 0, buffer.length);
 32.1552 +                    outstream.close();
 32.1553 +                }
 32.1554 +            }
 32.1555 +            connection.connect();
 32.1556 +        }else{
 32.1557 +            connection.connect();
 32.1558 +        }
 32.1559 +    }
 32.1560 +
 32.1561 +    if(connection){
 32.1562 +        try{
 32.1563 +            length = connection.getHeaderFields().size();
 32.1564 +            // Stick the response headers into responseHeaders
 32.1565 +            for (i = 0; i < length; i++) {
 32.1566 +                name = connection.getHeaderFieldKey(i);
 32.1567 +                value = connection.getHeaderField(i);
 32.1568 +                if (name)
 32.1569 +                    xhr.responseHeaders[name+''] = value+'';
 32.1570 +            }
 32.1571 +        }catch(e){
 32.1572 +            console.log('failed to load response headers \n%s',e);
 32.1573 +        }
 32.1574 +
 32.1575 +        xhr.readyState = 4;
 32.1576 +        xhr.status = parseInt(connection.responseCode,10) || undefined;
 32.1577 +        xhr.statusText = connection.responseMessage || "";
 32.1578 +
 32.1579 +        contentEncoding = connection.getContentEncoding() || "utf-8";
 32.1580 +        instream = null;
 32.1581 +        responseXML = null;
 32.1582 +        
 32.1583 +        try{
 32.1584 +            //console.log('contentEncoding %s', contentEncoding);
 32.1585 +            if( contentEncoding.equalsIgnoreCase("gzip") ||
 32.1586 +                contentEncoding.equalsIgnoreCase("decompress")){
 32.1587 +                //zipped content
 32.1588 +                binary = true;
 32.1589 +                outstream = new java.io.ByteArrayOutputStream();
 32.1590 +                buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
 32.1591 +                instream = new java.util.zip.GZIPInputStream(connection.getInputStream())
 32.1592 +            }else{
 32.1593 +                //this is a text file
 32.1594 +                outstream = new java.io.StringWriter();
 32.1595 +                buffer = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 1024);
 32.1596 +                instream = new java.io.InputStreamReader(connection.getInputStream());
 32.1597 +            }
 32.1598 +        }catch(e){
 32.1599 +            if (connection.getResponseCode() == 404){
 32.1600 +                console.log('failed to open connection stream \n %s %s',
 32.1601 +                            e.toString(), e);
 32.1602 +            }else{
 32.1603 +                console.log('failed to open connection stream \n %s %s',
 32.1604 +                            e.toString(), e);
 32.1605 +            }
 32.1606 +            instream = connection.getErrorStream();
 32.1607 +        }
 32.1608 +
 32.1609 +        while ((length = instream.read(buffer, 0, 1024)) != -1) {
 32.1610 +            outstream.write(buffer, 0, length);
 32.1611 +        }
 32.1612 +
 32.1613 +        outstream.close();
 32.1614 +        instream.close();
 32.1615 +        
 32.1616 +        if(binary){
 32.1617 +            xhr.responseText = new String(outstream.toByteArray(), 'UTF-8')+'';
 32.1618 +        }else{
 32.1619 +            xhr.responseText = outstream.toString()+'';
 32.1620 +        }
 32.1621 +
 32.1622 +    }
 32.1623 +    if(responseHandler){
 32.1624 +        //Envjs.debug('calling ajax response handler');
 32.1625 +        responseHandler();
 32.1626 +    }
 32.1627 +};
 32.1628 +
 32.1629 +//Since we're running in rhino I guess we can safely assume
 32.1630 +//java is 'enabled'.  I'm sure this requires more thought
 32.1631 +//than I've given it here
 32.1632 +Envjs.javaEnabled = true;
 32.1633 +
 32.1634 +Envjs.homedir        = java.lang.System.getProperty("user.home");
 32.1635 +Envjs.tmpdir         = java.lang.System.getProperty("java.io.tmpdir");
 32.1636 +Envjs.os_name        = java.lang.System.getProperty("os.name");
 32.1637 +Envjs.os_arch        = java.lang.System.getProperty("os.arch");
 32.1638 +Envjs.os_version     = java.lang.System.getProperty("os.version");
 32.1639 +Envjs.lang           = java.lang.System.getProperty("user.lang");
 32.1640 +
 32.1641 +
 32.1642 +/**
 32.1643 + *
 32.1644 + * @param {Object} frameElement
 32.1645 + * @param {Object} url
 32.1646 + */
 32.1647 +Envjs.loadFrame = function(frame, url){
 32.1648 +    try {
 32.1649 +        if(frame.contentWindow){
 32.1650 +            //mark for garbage collection
 32.1651 +            frame.contentWindow = null;
 32.1652 +        }
 32.1653 +
 32.1654 +        //create a new scope for the window proxy
 32.1655 +        frame.contentWindow = Envjs.proxy();
 32.1656 +        new Window(frame.contentWindow, window);
 32.1657 +
 32.1658 +        //I dont think frames load asynchronously in firefox
 32.1659 +        //and I think the tests have verified this but for
 32.1660 +        //some reason I'm less than confident... Are there cases?
 32.1661 +        frame.contentDocument = frame.contentWindow.document;
 32.1662 +        frame.contentDocument.async = false;
 32.1663 +        if(url){
 32.1664 +            //console.log('envjs.loadFrame async %s', frame.contentDocument.async);
 32.1665 +            frame.contentWindow.location = url;
 32.1666 +        }
 32.1667 +    } catch(e) {
 32.1668 +        console.log("failed to load frame content: from %s %s", url, e);
 32.1669 +    }
 32.1670 +};
 32.1671 +
 32.1672 +/**
 32.1673 + * unloadFrame
 32.1674 + * @param {Object} frame
 32.1675 + */
 32.1676 +Envjs.unloadFrame = function(frame){
 32.1677 +    var all, length, i;
 32.1678 +    try{
 32.1679 +        //TODO: probably self-referencing structures within a document tree
 32.1680 +        //preventing it from being entirely garbage collected once orphaned.
 32.1681 +        //Should have code to walk tree and break all links between contained
 32.1682 +        //objects.
 32.1683 +        frame.contentDocument = null;
 32.1684 +        if(frame.contentWindow){
 32.1685 +            frame.contentWindow.close();
 32.1686 +        }
 32.1687 +        gc();
 32.1688 +    }catch(e){
 32.1689 +        console.log(e);
 32.1690 +    }
 32.1691 +};
 32.1692 +
 32.1693 +/**
 32.1694 + * Makes an object window-like by proxying object accessors
 32.1695 + * @param {Object} scope
 32.1696 + * @param {Object} parent
 32.1697 + */
 32.1698 +Envjs.proxy = function(scope, parent) {
 32.1699 +    try{
 32.1700 +        if(scope+'' == '[object global]'){
 32.1701 +            return scope
 32.1702 +        }else{
 32.1703 +            return __context__.createGlobal();
 32.1704 +        }
 32.1705 +    }catch(e){
 32.1706 +        console.log('failed to init standard objects %s %s \n%s', scope, parent, e);
 32.1707 +    }
 32.1708 +
 32.1709 +};
 32.1710 +
 32.1711 +/**
 32.1712 + * @author john resig & the envjs team
 32.1713 + * @uri http://www.envjs.com/
 32.1714 + * @copyright 2008-2010
 32.1715 + * @license MIT
 32.1716 + */
 32.1717 +//CLOSURE_END
 32.1718 +}());
 32.1719 +
 32.1720 +/**
 32.1721 + * @author envjs team
 32.1722 + */
 32.1723 +var Console,
 32.1724 +    console;
 32.1725 +
 32.1726 +/*
 32.1727 + * Envjs console.1.2.13 
 32.1728 + * Pure JavaScript Browser Environment
 32.1729 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.1730 + * Copyright 2008-2010 John Resig, under the MIT License
 32.1731 + */
 32.1732 +
 32.1733 +//CLOSURE_START
 32.1734 +(function(){
 32.1735 +
 32.1736 +
 32.1737 +
 32.1738 +
 32.1739 +
 32.1740 +/**
 32.1741 + * @author envjs team
 32.1742 + * borrowed 99%-ish with love from firebug-lite
 32.1743 + *
 32.1744 + * http://wiki.commonjs.org/wiki/Console
 32.1745 + */
 32.1746 +Console = function(module){
 32.1747 +    var $level,
 32.1748 +    $logger,
 32.1749 +    $null = function(){};
 32.1750 +
 32.1751 +
 32.1752 +    if(Envjs[module] && Envjs[module].loglevel){
 32.1753 +        $level = Envjs.module.loglevel;
 32.1754 +        $logger = {
 32.1755 +            log: function(level){
 32.1756 +                logFormatted(arguments, (module)+" ");
 32.1757 +            },
 32.1758 +            debug: $level>1 ? $null: function() {
 32.1759 +                logFormatted(arguments, (module)+" debug");
 32.1760 +            },
 32.1761 +            info: $level>2 ? $null:function(){
 32.1762 +                logFormatted(arguments, (module)+" info");
 32.1763 +            },
 32.1764 +            warn: $level>3 ? $null:function(){
 32.1765 +                logFormatted(arguments, (module)+" warning");
 32.1766 +            },
 32.1767 +            error: $level>4 ? $null:function(){
 32.1768 +                logFormatted(arguments, (module)+" error");
 32.1769 +            }
 32.1770 +        };
 32.1771 +    } else {
 32.1772 +        $logger = {
 32.1773 +            log: function(level){
 32.1774 +                logFormatted(arguments, "");
 32.1775 +            },
 32.1776 +            debug: $null,
 32.1777 +            info: $null,
 32.1778 +            warn: $null,
 32.1779 +            error: $null
 32.1780 +        };
 32.1781 +    }
 32.1782 +
 32.1783 +    return $logger;
 32.1784 +};
 32.1785 +
 32.1786 +console = new Console("console",1);
 32.1787 +
 32.1788 +function logFormatted(objects, className)
 32.1789 +{
 32.1790 +    var html = [];
 32.1791 +
 32.1792 +    var format = objects[0];
 32.1793 +    var objIndex = 0;
 32.1794 +
 32.1795 +    if (typeof(format) != "string")
 32.1796 +    {
 32.1797 +        format = "";
 32.1798 +        objIndex = -1;
 32.1799 +    }
 32.1800 +
 32.1801 +    var parts = parseFormat(format);
 32.1802 +    for (var i = 0; i < parts.length; ++i)
 32.1803 +    {
 32.1804 +        var part = parts[i];
 32.1805 +        if (part && typeof(part) == "object")
 32.1806 +        {
 32.1807 +            var object = objects[++objIndex];
 32.1808 +            part.appender(object, html);
 32.1809 +        }
 32.1810 +        else {
 32.1811 +            appendText(part, html);
 32.1812 +	}
 32.1813 +    }
 32.1814 +
 32.1815 +    for (var i = objIndex+1; i < objects.length; ++i)
 32.1816 +    {
 32.1817 +        appendText(" ", html);
 32.1818 +
 32.1819 +        var object = objects[i];
 32.1820 +        if (typeof(object) == "string") {
 32.1821 +            appendText(object, html);
 32.1822 +        } else {
 32.1823 +            appendObject(object, html);
 32.1824 +	}
 32.1825 +    }
 32.1826 +
 32.1827 +    Envjs.log(html.join(' '));
 32.1828 +}
 32.1829 +
 32.1830 +function parseFormat(format)
 32.1831 +{
 32.1832 +    var parts = [];
 32.1833 +
 32.1834 +    var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;
 32.1835 +    var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat};
 32.1836 +
 32.1837 +    for (var m = reg.exec(format); m; m = reg.exec(format))
 32.1838 +    {
 32.1839 +        var type = m[8] ? m[8] : m[5];
 32.1840 +        var appender = type in appenderMap ? appenderMap[type] : appendObject;
 32.1841 +        var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0);
 32.1842 +
 32.1843 +        parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1));
 32.1844 +        parts.push({appender: appender, precision: precision});
 32.1845 +
 32.1846 +        format = format.substr(m.index+m[0].length);
 32.1847 +    }
 32.1848 +
 32.1849 +    parts.push(format);
 32.1850 +
 32.1851 +    return parts;
 32.1852 +}
 32.1853 +
 32.1854 +function escapeHTML(value)
 32.1855 +{
 32.1856 +    return value;
 32.1857 +}
 32.1858 +
 32.1859 +function objectToString(object)
 32.1860 +{
 32.1861 +    try
 32.1862 +    {
 32.1863 +        return object+"";
 32.1864 +    }
 32.1865 +    catch (exc)
 32.1866 +    {
 32.1867 +        return null;
 32.1868 +    }
 32.1869 +}
 32.1870 +
 32.1871 +// ********************************************************************************************
 32.1872 +
 32.1873 +function appendText(object, html)
 32.1874 +{
 32.1875 +    html.push(escapeHTML(objectToString(object)));
 32.1876 +}
 32.1877 +
 32.1878 +function appendNull(object, html)
 32.1879 +{
 32.1880 +    html.push(escapeHTML(objectToString(object)));
 32.1881 +}
 32.1882 +
 32.1883 +function appendString(object, html)
 32.1884 +{
 32.1885 +    html.push(escapeHTML(objectToString(object)));
 32.1886 +}
 32.1887 +
 32.1888 +function appendInteger(object, html)
 32.1889 +{
 32.1890 +    html.push(escapeHTML(objectToString(object)));
 32.1891 +}
 32.1892 +
 32.1893 +function appendFloat(object, html)
 32.1894 +{
 32.1895 +    html.push(escapeHTML(objectToString(object)));
 32.1896 +}
 32.1897 +
 32.1898 +function appendFunction(object, html)
 32.1899 +{
 32.1900 +    var reName = /function ?(.*?)\(/;
 32.1901 +    var m = reName.exec(objectToString(object));
 32.1902 +    var name = m ? m[1] : "function";
 32.1903 +    html.push(escapeHTML(name));
 32.1904 +}
 32.1905 +
 32.1906 +function appendObject(object, html)
 32.1907 +{
 32.1908 +    try
 32.1909 +    {
 32.1910 +        if (object == undefined) {
 32.1911 +            appendNull("undefined", html);
 32.1912 +        } else if (object == null) {
 32.1913 +            appendNull("null", html);
 32.1914 +        } else if (typeof object == "string") {
 32.1915 +            appendString(object, html);
 32.1916 +	} else if (typeof object == "number") {
 32.1917 +            appendInteger(object, html);
 32.1918 +	} else if (typeof object == "function") {
 32.1919 +            appendFunction(object, html);
 32.1920 +        } else if (object.nodeType == 1) {
 32.1921 +            appendSelector(object, html);
 32.1922 +        } else if (typeof object == "object") {
 32.1923 +            appendObjectFormatted(object, html);
 32.1924 +        } else {
 32.1925 +            appendText(object, html);
 32.1926 +	}
 32.1927 +    }
 32.1928 +    catch (exc)
 32.1929 +    {
 32.1930 +    }
 32.1931 +}
 32.1932 +
 32.1933 +function appendObjectFormatted(object, html)
 32.1934 +{
 32.1935 +    var text = objectToString(object);
 32.1936 +    var reObject = /\[object (.*?)\]/;
 32.1937 +
 32.1938 +    var m = reObject.exec(text);
 32.1939 +    html.push( m ? m[1] : text);
 32.1940 +}
 32.1941 +
 32.1942 +function appendSelector(object, html)
 32.1943 +{
 32.1944 +
 32.1945 +    html.push(escapeHTML(object.nodeName.toLowerCase()));
 32.1946 +    if (object.id) {
 32.1947 +        html.push(escapeHTML(object.id));
 32.1948 +    }
 32.1949 +    if (object.className) {
 32.1950 +        html.push(escapeHTML(object.className));
 32.1951 +    }
 32.1952 +}
 32.1953 +
 32.1954 +function appendNode(node, html)
 32.1955 +{
 32.1956 +    if (node.nodeType == 1)
 32.1957 +    {
 32.1958 +        html.push( node.nodeName.toLowerCase());
 32.1959 +
 32.1960 +        for (var i = 0; i < node.attributes.length; ++i)
 32.1961 +        {
 32.1962 +            var attr = node.attributes[i];
 32.1963 +            if (!attr.specified) {
 32.1964 +                continue;
 32.1965 +	    }
 32.1966 +
 32.1967 +            html.push( attr.nodeName.toLowerCase(),escapeHTML(attr.nodeValue));
 32.1968 +        }
 32.1969 +
 32.1970 +        if (node.firstChild)
 32.1971 +        {
 32.1972 +            for (var child = node.firstChild; child; child = child.nextSibling) {
 32.1973 +                appendNode(child, html);
 32.1974 +	    }
 32.1975 +
 32.1976 +            html.push( node.nodeName.toLowerCase());
 32.1977 +        }
 32.1978 +    }
 32.1979 +    else if (node.nodeType === 3)
 32.1980 +    {
 32.1981 +        html.push(escapeHTML(node.nodeValue));
 32.1982 +    }
 32.1983 +};
 32.1984 +
 32.1985 +/**
 32.1986 + * @author john resig & the envjs team
 32.1987 + * @uri http://www.envjs.com/
 32.1988 + * @copyright 2008-2010
 32.1989 + * @license MIT
 32.1990 + */
 32.1991 +//CLOSURE_END
 32.1992 +}());
 32.1993 +/*
 32.1994 + * Envjs dom.1.2.13 
 32.1995 + * Pure JavaScript Browser Environment
 32.1996 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.1997 + * Copyright 2008-2010 John Resig, under the MIT License
 32.1998 + * 
 32.1999 + * Parts of the implementation were originally written by:\
 32.2000 + * and Jon van Noort   (jon@webarcana.com.au) \
 32.2001 + * and David Joham     (djoham@yahoo.com)",\ 
 32.2002 + * and Scott Severtson
 32.2003 + * 
 32.2004 + * This file simply provides the global definitions we need to \
 32.2005 + * be able to correctly implement to core browser DOM interfaces."
 32.2006 + */
 32.2007 +
 32.2008 +var Attr,
 32.2009 +    CDATASection,
 32.2010 +    CharacterData,
 32.2011 +    Comment,
 32.2012 +    Document,
 32.2013 +    DocumentFragment,
 32.2014 +    DocumentType,
 32.2015 +    DOMException,
 32.2016 +    DOMImplementation,
 32.2017 +    Element,
 32.2018 +    Entity,
 32.2019 +    EntityReference,
 32.2020 +    NamedNodeMap,
 32.2021 +    Namespace,
 32.2022 +    Node,
 32.2023 +    NodeList,
 32.2024 +    Notation,
 32.2025 +    ProcessingInstruction,
 32.2026 +    Text,
 32.2027 +    Range,
 32.2028 +    XMLSerializer,
 32.2029 +    DOMParser;
 32.2030 +
 32.2031 +
 32.2032 +
 32.2033 +/*
 32.2034 + * Envjs dom.1.2.13 
 32.2035 + * Pure JavaScript Browser Environment
 32.2036 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.2037 + * Copyright 2008-2010 John Resig, under the MIT License
 32.2038 + */
 32.2039 +
 32.2040 +//CLOSURE_START
 32.2041 +(function(){
 32.2042 +
 32.2043 +
 32.2044 +
 32.2045 +
 32.2046 +
 32.2047 +/**
 32.2048 + * @author john resig
 32.2049 + */
 32.2050 +// Helper method for extending one object with another.
 32.2051 +function __extend__(a,b) {
 32.2052 +    for ( var i in b ) {
 32.2053 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
 32.2054 +        if ( g || s ) {
 32.2055 +            if ( g ) { a.__defineGetter__(i, g); }
 32.2056 +            if ( s ) { a.__defineSetter__(i, s); }
 32.2057 +        } else {
 32.2058 +            a[i] = b[i];
 32.2059 +        }
 32.2060 +    } return a;
 32.2061 +}
 32.2062 +
 32.2063 +/**
 32.2064 + * @author john resig
 32.2065 + */
 32.2066 +//from jQuery
 32.2067 +function __setArray__( target, array ) {
 32.2068 +    // Resetting the length to 0, then using the native Array push
 32.2069 +    // is a super-fast way to populate an object with array-like properties
 32.2070 +    target.length = 0;
 32.2071 +    Array.prototype.push.apply( target, array );
 32.2072 +}
 32.2073 +
 32.2074 +/**
 32.2075 + * @class  NodeList -
 32.2076 + *      provides the abstraction of an ordered collection of nodes
 32.2077 + *
 32.2078 + * @param  ownerDocument : Document - the ownerDocument
 32.2079 + * @param  parentNode    : Node - the node that the NodeList is attached to (or null)
 32.2080 + */
 32.2081 +NodeList = function(ownerDocument, parentNode) {
 32.2082 +    this.length = 0;
 32.2083 +    this.parentNode = parentNode;
 32.2084 +    this.ownerDocument = ownerDocument;
 32.2085 +    this._readonly = false;
 32.2086 +    __setArray__(this, []);
 32.2087 +};
 32.2088 +
 32.2089 +__extend__(NodeList.prototype, {
 32.2090 +    item : function(index) {
 32.2091 +        var ret = null;
 32.2092 +        if ((index >= 0) && (index < this.length)) {
 32.2093 +            // bounds check
 32.2094 +            ret = this[index];
 32.2095 +        }
 32.2096 +        // if the index is out of bounds, default value null is returned
 32.2097 +        return ret;
 32.2098 +    },
 32.2099 +    get xml() {
 32.2100 +        var ret = "",
 32.2101 +            i;
 32.2102 +
 32.2103 +        // create string containing the concatenation of the string values of each child
 32.2104 +        for (i=0; i < this.length; i++) {
 32.2105 +            if(this[i]){
 32.2106 +                if(this[i].nodeType == Node.TEXT_NODE && i>0 &&
 32.2107 +                   this[i-1].nodeType == Node.TEXT_NODE){
 32.2108 +                    //add a single space between adjacent text nodes
 32.2109 +                    ret += " "+this[i].xml;
 32.2110 +                }else{
 32.2111 +                    ret += this[i].xml;
 32.2112 +                }
 32.2113 +            }
 32.2114 +        }
 32.2115 +        return ret;
 32.2116 +    },
 32.2117 +    toArray: function () {
 32.2118 +        var children = [],
 32.2119 +            i;
 32.2120 +        for ( i=0; i < this.length; i++) {
 32.2121 +            children.push (this[i]);
 32.2122 +        }
 32.2123 +        return children;
 32.2124 +    },
 32.2125 +    toString: function(){
 32.2126 +        return "[object NodeList]";
 32.2127 +    }
 32.2128 +});
 32.2129 +
 32.2130 +
 32.2131 +/**
 32.2132 + * @method __findItemIndex__
 32.2133 + *      find the item index of the node
 32.2134 + * @author Jon van Noort (jon@webarcana.com.au)
 32.2135 + * @param  node : Node
 32.2136 + * @return : int
 32.2137 + */
 32.2138 +var __findItemIndex__ = function (nodelist, node) {
 32.2139 +    var ret = -1, i;
 32.2140 +    for (i=0; i<nodelist.length; i++) {
 32.2141 +        // compare id to each node's _id
 32.2142 +        if (nodelist[i] === node) {
 32.2143 +            // found it!
 32.2144 +            ret = i;
 32.2145 +            break;
 32.2146 +        }
 32.2147 +    }
 32.2148 +    // if node is not found, default value -1 is returned
 32.2149 +    return ret;
 32.2150 +};
 32.2151 +
 32.2152 +/**
 32.2153 + * @method __insertBefore__
 32.2154 + *      insert the specified Node into the NodeList before the specified index
 32.2155 + *      Used by Node.insertBefore(). Note: Node.insertBefore() is responsible
 32.2156 + *      for Node Pointer surgery __insertBefore__ simply modifies the internal
 32.2157 + *      data structure (Array).
 32.2158 + * @param  newChild      : Node - the Node to be inserted
 32.2159 + * @param  refChildIndex : int     - the array index to insert the Node before
 32.2160 + */
 32.2161 +var __insertBefore__ = function(nodelist, newChild, refChildIndex) {
 32.2162 +    if ((refChildIndex >= 0) && (refChildIndex <= nodelist.length)) {
 32.2163 +        // bounds check
 32.2164 +        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2165 +            // node is a DocumentFragment
 32.2166 +            // append the children of DocumentFragment
 32.2167 +            Array.prototype.splice.apply(nodelist,
 32.2168 +                [refChildIndex, 0].concat(newChild.childNodes.toArray()));
 32.2169 +        }
 32.2170 +        else {
 32.2171 +            // append the newChild
 32.2172 +            Array.prototype.splice.apply(nodelist,[refChildIndex, 0, newChild]);
 32.2173 +        }
 32.2174 +    }
 32.2175 +};
 32.2176 +
 32.2177 +/**
 32.2178 + * @method __replaceChild__
 32.2179 + *      replace the specified Node in the NodeList at the specified index
 32.2180 + *      Used by Node.replaceChild(). Note: Node.replaceChild() is responsible
 32.2181 + *      for Node Pointer surgery __replaceChild__ simply modifies the internal
 32.2182 + *      data structure (Array).
 32.2183 + *
 32.2184 + * @param  newChild      : Node - the Node to be inserted
 32.2185 + * @param  refChildIndex : int     - the array index to hold the Node
 32.2186 + */
 32.2187 +var __replaceChild__ = function(nodelist, newChild, refChildIndex) {
 32.2188 +    var ret = null;
 32.2189 +
 32.2190 +    // bounds check
 32.2191 +    if ((refChildIndex >= 0) && (refChildIndex < nodelist.length)) {
 32.2192 +        // preserve old child for return
 32.2193 +        ret = nodelist[refChildIndex];
 32.2194 +
 32.2195 +        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2196 +            // node is a DocumentFragment
 32.2197 +            // get array containing children prior to refChild
 32.2198 +            Array.prototype.splice.apply(nodelist,
 32.2199 +                [refChildIndex, 1].concat(newChild.childNodes.toArray()));
 32.2200 +        }
 32.2201 +        else {
 32.2202 +            // simply replace node in array (links between Nodes are
 32.2203 +            // made at higher level)
 32.2204 +            nodelist[refChildIndex] = newChild;
 32.2205 +        }
 32.2206 +    }
 32.2207 +    // return replaced node
 32.2208 +    return ret;
 32.2209 +};
 32.2210 +
 32.2211 +/**
 32.2212 + * @method __removeChild__
 32.2213 + *      remove the specified Node in the NodeList at the specified index
 32.2214 + *      Used by Node.removeChild(). Note: Node.removeChild() is responsible
 32.2215 + *      for Node Pointer surgery __removeChild__ simply modifies the internal
 32.2216 + *      data structure (Array).
 32.2217 + * @param  refChildIndex : int - the array index holding the Node to be removed
 32.2218 + */
 32.2219 +var __removeChild__ = function(nodelist, refChildIndex) {
 32.2220 +    var ret = null;
 32.2221 +
 32.2222 +    if (refChildIndex > -1) {
 32.2223 +        // found it!
 32.2224 +        // return removed node
 32.2225 +        ret = nodelist[refChildIndex];
 32.2226 +
 32.2227 +        // rebuild array without removed child
 32.2228 +        Array.prototype.splice.apply(nodelist,[refChildIndex, 1]);
 32.2229 +    }
 32.2230 +    // return removed node
 32.2231 +    return ret;
 32.2232 +};
 32.2233 +
 32.2234 +/**
 32.2235 + * @method __appendChild__
 32.2236 + *      append the specified Node to the NodeList. Used by Node.appendChild().
 32.2237 + *      Note: Node.appendChild() is responsible for Node Pointer surgery
 32.2238 + *      __appendChild__ simply modifies the internal data structure (Array).
 32.2239 + * @param  newChild      : Node - the Node to be inserted
 32.2240 + */
 32.2241 +var __appendChild__ = function(nodelist, newChild) {
 32.2242 +    if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2243 +        // node is a DocumentFragment
 32.2244 +        // append the children of DocumentFragment
 32.2245 +        Array.prototype.push.apply(nodelist, newChild.childNodes.toArray() );
 32.2246 +    } else {
 32.2247 +        // simply add node to array (links between Nodes are made at higher level)
 32.2248 +        Array.prototype.push.apply(nodelist, [newChild]);
 32.2249 +    }
 32.2250 +
 32.2251 +};
 32.2252 +
 32.2253 +/**
 32.2254 + * @method __cloneNodes__ -
 32.2255 + *      Returns a NodeList containing clones of the Nodes in this NodeList
 32.2256 + * @param  deep : boolean -
 32.2257 + *      If true, recursively clone the subtree under each of the nodes;
 32.2258 + *      if false, clone only the nodes themselves (and their attributes,
 32.2259 + *      if it is an Element).
 32.2260 + * @param  parentNode : Node - the new parent of the cloned NodeList
 32.2261 + * @return : NodeList - NodeList containing clones of the Nodes in this NodeList
 32.2262 + */
 32.2263 +var __cloneNodes__ = function(nodelist, deep, parentNode) {
 32.2264 +    var cloneNodeList = new NodeList(nodelist.ownerDocument, parentNode);
 32.2265 +
 32.2266 +    // create list containing clones of each child
 32.2267 +    for (var i=0; i < nodelist.length; i++) {
 32.2268 +        __appendChild__(cloneNodeList, nodelist[i].cloneNode(deep));
 32.2269 +    }
 32.2270 +
 32.2271 +    return cloneNodeList;
 32.2272 +};
 32.2273 +
 32.2274 +
 32.2275 +var __ownerDocument__ = function(node){
 32.2276 +    return (node.nodeType == Node.DOCUMENT_NODE)?node:node.ownerDocument;
 32.2277 +};
 32.2278 +
 32.2279 +/**
 32.2280 + * @class  Node -
 32.2281 + *      The Node interface is the primary datatype for the entire
 32.2282 + *      Document Object Model. It represents a single node in the
 32.2283 + *      document tree.
 32.2284 + * @param  ownerDocument : Document - The Document object associated with this node.
 32.2285 + */
 32.2286 +
 32.2287 +Node = function(ownerDocument) {
 32.2288 +    this.baseURI = 'about:blank';
 32.2289 +    this.namespaceURI = null;
 32.2290 +    this.nodeName = "";
 32.2291 +    this.nodeValue = null;
 32.2292 +
 32.2293 +    // A NodeList that contains all children of this node. If there are no
 32.2294 +    // children, this is a NodeList containing no nodes.  The content of the
 32.2295 +    // returned NodeList is "live" in the sense that, for instance, changes to
 32.2296 +    // the children of the node object that it was created from are immediately
 32.2297 +    // reflected in the nodes returned by the NodeList accessors; it is not a
 32.2298 +    // static snapshot of the content of the node. This is true for every
 32.2299 +    // NodeList, including the ones returned by the getElementsByTagName method.
 32.2300 +    this.childNodes      = new NodeList(ownerDocument, this);
 32.2301 +
 32.2302 +    // The first child of this node. If there is no such node, this is null
 32.2303 +    this.firstChild      = null;
 32.2304 +    // The last child of this node. If there is no such node, this is null.
 32.2305 +    this.lastChild       = null;
 32.2306 +    // The node immediately preceding this node. If there is no such node,
 32.2307 +    // this is null.
 32.2308 +    this.previousSibling = null;
 32.2309 +    // The node immediately following this node. If there is no such node,
 32.2310 +    // this is null.
 32.2311 +    this.nextSibling     = null;
 32.2312 +
 32.2313 +    this.attributes = null;
 32.2314 +    // The namespaces in scope for this node
 32.2315 +    this._namespaces = new NamespaceNodeMap(ownerDocument, this);
 32.2316 +    this._readonly = false;
 32.2317 +
 32.2318 +    //IMPORTANT: These must come last so rhino will not iterate parent
 32.2319 +    //           properties before child properties.  (qunit.equiv issue)
 32.2320 +
 32.2321 +    // The parent of this node. All nodes, except Document, DocumentFragment,
 32.2322 +    // and Attr may have a parent.  However, if a node has just been created
 32.2323 +    // and not yet added to the tree, or if it has been removed from the tree,
 32.2324 +    // this is null
 32.2325 +    this.parentNode      = null;
 32.2326 +    // The Document object associated with this node
 32.2327 +    this.ownerDocument = ownerDocument;
 32.2328 +
 32.2329 +};
 32.2330 +
 32.2331 +// nodeType constants
 32.2332 +Node.ELEMENT_NODE                = 1;
 32.2333 +Node.ATTRIBUTE_NODE              = 2;
 32.2334 +Node.TEXT_NODE                   = 3;
 32.2335 +Node.CDATA_SECTION_NODE          = 4;
 32.2336 +Node.ENTITY_REFERENCE_NODE       = 5;
 32.2337 +Node.ENTITY_NODE                 = 6;
 32.2338 +Node.PROCESSING_INSTRUCTION_NODE = 7;
 32.2339 +Node.COMMENT_NODE                = 8;
 32.2340 +Node.DOCUMENT_NODE               = 9;
 32.2341 +Node.DOCUMENT_TYPE_NODE          = 10;
 32.2342 +Node.DOCUMENT_FRAGMENT_NODE      = 11;
 32.2343 +Node.NOTATION_NODE               = 12;
 32.2344 +Node.NAMESPACE_NODE              = 13;
 32.2345 +
 32.2346 +Node.DOCUMENT_POSITION_EQUAL        = 0x00;
 32.2347 +Node.DOCUMENT_POSITION_DISCONNECTED = 0x01;
 32.2348 +Node.DOCUMENT_POSITION_PRECEDING    = 0x02;
 32.2349 +Node.DOCUMENT_POSITION_FOLLOWING    = 0x04;
 32.2350 +Node.DOCUMENT_POSITION_CONTAINS     = 0x08;
 32.2351 +Node.DOCUMENT_POSITION_CONTAINED_BY = 0x10;
 32.2352 +Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC      = 0x20;
 32.2353 +
 32.2354 +
 32.2355 +__extend__(Node.prototype, {
 32.2356 +    get localName(){
 32.2357 +        return this.prefix?
 32.2358 +            this.nodeName.substring(this.prefix.length+1, this.nodeName.length):
 32.2359 +            this.nodeName;
 32.2360 +    },
 32.2361 +    get prefix(){
 32.2362 +        return this.nodeName.split(':').length>1?
 32.2363 +            this.nodeName.split(':')[0]:
 32.2364 +            null;
 32.2365 +    },
 32.2366 +    set prefix(value){
 32.2367 +        if(value === null){
 32.2368 +            this.nodeName = this.localName;
 32.2369 +        }else{
 32.2370 +            this.nodeName = value+':'+this.localName;
 32.2371 +        }
 32.2372 +    },
 32.2373 +    hasAttributes : function() {
 32.2374 +        if (this.attributes.length == 0) {
 32.2375 +            return false;
 32.2376 +        }else{
 32.2377 +            return true;
 32.2378 +        }
 32.2379 +    },
 32.2380 +    get textContent(){
 32.2381 +        return __recursivelyGatherText__(this);
 32.2382 +    },
 32.2383 +    set textContent(newText){
 32.2384 +        while(this.firstChild != null){
 32.2385 +            this.removeChild( this.firstChild );
 32.2386 +        }
 32.2387 +        var text = this.ownerDocument.createTextNode(newText);
 32.2388 +        this.appendChild(text);
 32.2389 +    },
 32.2390 +    insertBefore : function(newChild, refChild) {
 32.2391 +        var prevNode;
 32.2392 +
 32.2393 +        if(newChild==null){
 32.2394 +            return newChild;
 32.2395 +        }
 32.2396 +        if(refChild==null){
 32.2397 +            this.appendChild(newChild);
 32.2398 +            return this.newChild;
 32.2399 +        }
 32.2400 +
 32.2401 +        // test for exceptions
 32.2402 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.2403 +            // throw Exception if Node is readonly
 32.2404 +            if (this._readonly) {
 32.2405 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.2406 +            }
 32.2407 +
 32.2408 +            // throw Exception if newChild was not created by this Document
 32.2409 +            if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
 32.2410 +                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
 32.2411 +            }
 32.2412 +
 32.2413 +            // throw Exception if the node is an ancestor
 32.2414 +            if (__isAncestor__(this, newChild)) {
 32.2415 +                throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
 32.2416 +            }
 32.2417 +        }
 32.2418 +
 32.2419 +        // if refChild is specified, insert before it
 32.2420 +        if (refChild) {
 32.2421 +            // find index of refChild
 32.2422 +            var itemIndex = __findItemIndex__(this.childNodes, refChild);
 32.2423 +            // throw Exception if there is no child node with this id
 32.2424 +            if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
 32.2425 +                throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.2426 +            }
 32.2427 +
 32.2428 +            // if the newChild is already in the tree,
 32.2429 +            var newChildParent = newChild.parentNode;
 32.2430 +            if (newChildParent) {
 32.2431 +                // remove it
 32.2432 +                newChildParent.removeChild(newChild);
 32.2433 +            }
 32.2434 +
 32.2435 +            // insert newChild into childNodes
 32.2436 +            __insertBefore__(this.childNodes, newChild, itemIndex);
 32.2437 +
 32.2438 +            // do node pointer surgery
 32.2439 +            prevNode = refChild.previousSibling;
 32.2440 +
 32.2441 +            // handle DocumentFragment
 32.2442 +            if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2443 +                if (newChild.childNodes.length > 0) {
 32.2444 +                    // set the parentNode of DocumentFragment's children
 32.2445 +                    for (var ind = 0; ind < newChild.childNodes.length; ind++) {
 32.2446 +                        newChild.childNodes[ind].parentNode = this;
 32.2447 +                    }
 32.2448 +
 32.2449 +                    // link refChild to last child of DocumentFragment
 32.2450 +                    refChild.previousSibling = newChild.childNodes[newChild.childNodes.length-1];
 32.2451 +                }
 32.2452 +            }else {
 32.2453 +                // set the parentNode of the newChild
 32.2454 +                newChild.parentNode = this;
 32.2455 +                // link refChild to newChild
 32.2456 +                refChild.previousSibling = newChild;
 32.2457 +            }
 32.2458 +
 32.2459 +        }else {
 32.2460 +            // otherwise, append to end
 32.2461 +            prevNode = this.lastChild;
 32.2462 +            this.appendChild(newChild);
 32.2463 +        }
 32.2464 +
 32.2465 +        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2466 +            // do node pointer surgery for DocumentFragment
 32.2467 +            if (newChild.childNodes.length > 0) {
 32.2468 +                if (prevNode) {
 32.2469 +                    prevNode.nextSibling = newChild.childNodes[0];
 32.2470 +                }else {
 32.2471 +                    // this is the first child in the list
 32.2472 +                    this.firstChild = newChild.childNodes[0];
 32.2473 +                }
 32.2474 +                newChild.childNodes[0].previousSibling = prevNode;
 32.2475 +                newChild.childNodes[newChild.childNodes.length-1].nextSibling = refChild;
 32.2476 +            }
 32.2477 +        }else {
 32.2478 +            // do node pointer surgery for newChild
 32.2479 +            if (prevNode) {
 32.2480 +                prevNode.nextSibling = newChild;
 32.2481 +            }else {
 32.2482 +                // this is the first child in the list
 32.2483 +                this.firstChild = newChild;
 32.2484 +            }
 32.2485 +            newChild.previousSibling = prevNode;
 32.2486 +            newChild.nextSibling     = refChild;
 32.2487 +        }
 32.2488 +
 32.2489 +        return newChild;
 32.2490 +    },
 32.2491 +    replaceChild : function(newChild, oldChild) {
 32.2492 +        var ret = null;
 32.2493 +
 32.2494 +        if(newChild==null || oldChild==null){
 32.2495 +            return oldChild;
 32.2496 +        }
 32.2497 +
 32.2498 +        // test for exceptions
 32.2499 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.2500 +            // throw Exception if Node is readonly
 32.2501 +            if (this._readonly) {
 32.2502 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.2503 +            }
 32.2504 +
 32.2505 +            // throw Exception if newChild was not created by this Document
 32.2506 +            if (__ownerDocument__(this) != __ownerDocument__(newChild)) {
 32.2507 +                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
 32.2508 +            }
 32.2509 +
 32.2510 +            // throw Exception if the node is an ancestor
 32.2511 +            if (__isAncestor__(this, newChild)) {
 32.2512 +                throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
 32.2513 +            }
 32.2514 +        }
 32.2515 +
 32.2516 +        // get index of oldChild
 32.2517 +        var index = __findItemIndex__(this.childNodes, oldChild);
 32.2518 +
 32.2519 +        // throw Exception if there is no child node with this id
 32.2520 +        if (__ownerDocument__(this).implementation.errorChecking && (index < 0)) {
 32.2521 +            throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.2522 +        }
 32.2523 +
 32.2524 +        // if the newChild is already in the tree,
 32.2525 +        var newChildParent = newChild.parentNode;
 32.2526 +        if (newChildParent) {
 32.2527 +            // remove it
 32.2528 +            newChildParent.removeChild(newChild);
 32.2529 +        }
 32.2530 +
 32.2531 +        // add newChild to childNodes
 32.2532 +        ret = __replaceChild__(this.childNodes,newChild, index);
 32.2533 +
 32.2534 +
 32.2535 +        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2536 +            // do node pointer surgery for Document Fragment
 32.2537 +            if (newChild.childNodes.length > 0) {
 32.2538 +                for (var ind = 0; ind < newChild.childNodes.length; ind++) {
 32.2539 +                    newChild.childNodes[ind].parentNode = this;
 32.2540 +                }
 32.2541 +
 32.2542 +                if (oldChild.previousSibling) {
 32.2543 +                    oldChild.previousSibling.nextSibling = newChild.childNodes[0];
 32.2544 +                } else {
 32.2545 +                    this.firstChild = newChild.childNodes[0];
 32.2546 +                }
 32.2547 +
 32.2548 +                if (oldChild.nextSibling) {
 32.2549 +                    oldChild.nextSibling.previousSibling = newChild;
 32.2550 +                } else {
 32.2551 +                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
 32.2552 +                }
 32.2553 +
 32.2554 +                newChild.childNodes[0].previousSibling = oldChild.previousSibling;
 32.2555 +                newChild.childNodes[newChild.childNodes.length-1].nextSibling = oldChild.nextSibling;
 32.2556 +            }
 32.2557 +        } else {
 32.2558 +            // do node pointer surgery for newChild
 32.2559 +            newChild.parentNode = this;
 32.2560 +
 32.2561 +            if (oldChild.previousSibling) {
 32.2562 +                oldChild.previousSibling.nextSibling = newChild;
 32.2563 +            }else{
 32.2564 +                this.firstChild = newChild;
 32.2565 +            }
 32.2566 +            if (oldChild.nextSibling) {
 32.2567 +                oldChild.nextSibling.previousSibling = newChild;
 32.2568 +            }else{
 32.2569 +                this.lastChild = newChild;
 32.2570 +            }
 32.2571 +            newChild.previousSibling = oldChild.previousSibling;
 32.2572 +            newChild.nextSibling = oldChild.nextSibling;
 32.2573 +        }
 32.2574 +
 32.2575 +        return ret;
 32.2576 +    },
 32.2577 +    removeChild : function(oldChild) {
 32.2578 +        if(!oldChild){
 32.2579 +            return null;
 32.2580 +        }
 32.2581 +        // throw Exception if NamedNodeMap is readonly
 32.2582 +        if (__ownerDocument__(this).implementation.errorChecking &&
 32.2583 +            (this._readonly || oldChild._readonly)) {
 32.2584 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.2585 +        }
 32.2586 +
 32.2587 +        // get index of oldChild
 32.2588 +        var itemIndex = __findItemIndex__(this.childNodes, oldChild);
 32.2589 +
 32.2590 +        // throw Exception if there is no child node with this id
 32.2591 +        if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
 32.2592 +            throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.2593 +        }
 32.2594 +
 32.2595 +        // remove oldChild from childNodes
 32.2596 +        __removeChild__(this.childNodes, itemIndex);
 32.2597 +
 32.2598 +        // do node pointer surgery
 32.2599 +        oldChild.parentNode = null;
 32.2600 +
 32.2601 +        if (oldChild.previousSibling) {
 32.2602 +            oldChild.previousSibling.nextSibling = oldChild.nextSibling;
 32.2603 +        }else {
 32.2604 +            this.firstChild = oldChild.nextSibling;
 32.2605 +        }
 32.2606 +        if (oldChild.nextSibling) {
 32.2607 +            oldChild.nextSibling.previousSibling = oldChild.previousSibling;
 32.2608 +        }else {
 32.2609 +            this.lastChild = oldChild.previousSibling;
 32.2610 +        }
 32.2611 +
 32.2612 +        oldChild.previousSibling = null;
 32.2613 +        oldChild.nextSibling = null;
 32.2614 +
 32.2615 +        return oldChild;
 32.2616 +    },
 32.2617 +    appendChild : function(newChild) {
 32.2618 +        if(!newChild){
 32.2619 +            return null;
 32.2620 +        }
 32.2621 +        // test for exceptions
 32.2622 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.2623 +            // throw Exception if Node is readonly
 32.2624 +            if (this._readonly) {
 32.2625 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.2626 +            }
 32.2627 +
 32.2628 +            // throw Exception if arg was not created by this Document
 32.2629 +            if (__ownerDocument__(this) != __ownerDocument__(this)) {
 32.2630 +                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
 32.2631 +            }
 32.2632 +
 32.2633 +            // throw Exception if the node is an ancestor
 32.2634 +            if (__isAncestor__(this, newChild)) {
 32.2635 +              throw(new DOMException(DOMException.HIERARCHY_REQUEST_ERR));
 32.2636 +            }
 32.2637 +        }
 32.2638 +
 32.2639 +        // if the newChild is already in the tree,
 32.2640 +        var newChildParent = newChild.parentNode;
 32.2641 +        if (newChildParent) {
 32.2642 +            // remove it
 32.2643 +           //console.debug('removing node %s', newChild);
 32.2644 +            newChildParent.removeChild(newChild);
 32.2645 +        }
 32.2646 +
 32.2647 +        // add newChild to childNodes
 32.2648 +        __appendChild__(this.childNodes, newChild);
 32.2649 +
 32.2650 +        if (newChild.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2651 +            // do node pointer surgery for DocumentFragment
 32.2652 +            if (newChild.childNodes.length > 0) {
 32.2653 +                for (var ind = 0; ind < newChild.childNodes.length; ind++) {
 32.2654 +                    newChild.childNodes[ind].parentNode = this;
 32.2655 +                }
 32.2656 +
 32.2657 +                if (this.lastChild) {
 32.2658 +                    this.lastChild.nextSibling = newChild.childNodes[0];
 32.2659 +                    newChild.childNodes[0].previousSibling = this.lastChild;
 32.2660 +                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
 32.2661 +                } else {
 32.2662 +                    this.lastChild = newChild.childNodes[newChild.childNodes.length-1];
 32.2663 +                    this.firstChild = newChild.childNodes[0];
 32.2664 +                }
 32.2665 +            }
 32.2666 +        } else {
 32.2667 +            // do node pointer surgery for newChild
 32.2668 +            newChild.parentNode = this;
 32.2669 +            if (this.lastChild) {
 32.2670 +                this.lastChild.nextSibling = newChild;
 32.2671 +                newChild.previousSibling = this.lastChild;
 32.2672 +                this.lastChild = newChild;
 32.2673 +            } else {
 32.2674 +                this.lastChild = newChild;
 32.2675 +                this.firstChild = newChild;
 32.2676 +            }
 32.2677 +       }
 32.2678 +       return newChild;
 32.2679 +    },
 32.2680 +    hasChildNodes : function() {
 32.2681 +        return (this.childNodes.length > 0);
 32.2682 +    },
 32.2683 +    cloneNode: function(deep) {
 32.2684 +        // use importNode to clone this Node
 32.2685 +        //do not throw any exceptions
 32.2686 +        try {
 32.2687 +            return __ownerDocument__(this).importNode(this, deep);
 32.2688 +        } catch (e) {
 32.2689 +            //there shouldn't be any exceptions, but if there are, return null
 32.2690 +            // may want to warn: $debug("could not clone node: "+e.code);
 32.2691 +            return null;
 32.2692 +        }
 32.2693 +    },
 32.2694 +    normalize : function() {
 32.2695 +        var i;
 32.2696 +        var inode;
 32.2697 +        var nodesToRemove = new NodeList();
 32.2698 +
 32.2699 +        if (this.nodeType == Node.ELEMENT_NODE || this.nodeType == Node.DOCUMENT_NODE) {
 32.2700 +            var adjacentTextNode = null;
 32.2701 +
 32.2702 +            // loop through all childNodes
 32.2703 +            for(i = 0; i < this.childNodes.length; i++) {
 32.2704 +                inode = this.childNodes.item(i);
 32.2705 +
 32.2706 +                if (inode.nodeType == Node.TEXT_NODE) {
 32.2707 +                    // this node is a text node
 32.2708 +                    if (inode.length < 1) {
 32.2709 +                        // this text node is empty
 32.2710 +                        // add this node to the list of nodes to be remove
 32.2711 +                        __appendChild__(nodesToRemove, inode);
 32.2712 +                    }else {
 32.2713 +                        if (adjacentTextNode) {
 32.2714 +                            // previous node was also text
 32.2715 +                            adjacentTextNode.appendData(inode.data);
 32.2716 +                            // merge the data in adjacent text nodes
 32.2717 +                            // add this node to the list of nodes to be removed
 32.2718 +                            __appendChild__(nodesToRemove, inode);
 32.2719 +                        } else {
 32.2720 +                            // remember this node for next cycle
 32.2721 +                            adjacentTextNode = inode;
 32.2722 +                        }
 32.2723 +                    }
 32.2724 +                } else {
 32.2725 +                    // (soon to be) previous node is not a text node
 32.2726 +                    adjacentTextNode = null;
 32.2727 +                    // normalize non Text childNodes
 32.2728 +                    inode.normalize();
 32.2729 +                }
 32.2730 +            }
 32.2731 +
 32.2732 +            // remove redundant Text Nodes
 32.2733 +            for(i = 0; i < nodesToRemove.length; i++) {
 32.2734 +                inode = nodesToRemove.item(i);
 32.2735 +                inode.parentNode.removeChild(inode);
 32.2736 +            }
 32.2737 +        }
 32.2738 +    },
 32.2739 +    isSupported : function(feature, version) {
 32.2740 +        // use Implementation.hasFeature to determine if this feature is supported
 32.2741 +        return __ownerDocument__(this).implementation.hasFeature(feature, version);
 32.2742 +    },
 32.2743 +    getElementsByTagName : function(tagname) {
 32.2744 +        // delegate to _getElementsByTagNameRecursive
 32.2745 +        // recurse childNodes
 32.2746 +        var nodelist = new NodeList(__ownerDocument__(this));
 32.2747 +        for (var i = 0; i < this.childNodes.length; i++) {
 32.2748 +            __getElementsByTagNameRecursive__(this.childNodes.item(i),
 32.2749 +                                              tagname,
 32.2750 +                                              nodelist);
 32.2751 +        }
 32.2752 +        return nodelist;
 32.2753 +    },
 32.2754 +    getElementsByTagNameNS : function(namespaceURI, localName) {
 32.2755 +        // delegate to _getElementsByTagNameNSRecursive
 32.2756 +        return __getElementsByTagNameNSRecursive__(this, namespaceURI, localName,
 32.2757 +            new NodeList(__ownerDocument__(this)));
 32.2758 +    },
 32.2759 +    importNode : function(importedNode, deep) {
 32.2760 +        var i;
 32.2761 +        var importNode;
 32.2762 +
 32.2763 +        //there is no need to perform namespace checks since everything has already gone through them
 32.2764 +        //in order to have gotten into the DOM in the first place. The following line
 32.2765 +        //turns namespace checking off in ._isValidNamespace
 32.2766 +        __ownerDocument__(this).importing = true;
 32.2767 +
 32.2768 +        if (importedNode.nodeType == Node.ELEMENT_NODE) {
 32.2769 +            if (!__ownerDocument__(this).implementation.namespaceAware) {
 32.2770 +                // create a local Element (with the name of the importedNode)
 32.2771 +                importNode = __ownerDocument__(this).createElement(importedNode.tagName);
 32.2772 +
 32.2773 +                // create attributes matching those of the importedNode
 32.2774 +                for(i = 0; i < importedNode.attributes.length; i++) {
 32.2775 +                    importNode.setAttribute(importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
 32.2776 +                }
 32.2777 +            } else {
 32.2778 +                // create a local Element (with the name & namespaceURI of the importedNode)
 32.2779 +                importNode = __ownerDocument__(this).createElementNS(importedNode.namespaceURI, importedNode.nodeName);
 32.2780 +
 32.2781 +                // create attributes matching those of the importedNode
 32.2782 +                for(i = 0; i < importedNode.attributes.length; i++) {
 32.2783 +                    importNode.setAttributeNS(importedNode.attributes.item(i).namespaceURI,
 32.2784 +                        importedNode.attributes.item(i).name, importedNode.attributes.item(i).value);
 32.2785 +                }
 32.2786 +
 32.2787 +                // create namespace definitions matching those of the importedNode
 32.2788 +                for(i = 0; i < importedNode._namespaces.length; i++) {
 32.2789 +                    importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
 32.2790 +                    importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
 32.2791 +                }
 32.2792 +            }
 32.2793 +        } else if (importedNode.nodeType == Node.ATTRIBUTE_NODE) {
 32.2794 +            if (!__ownerDocument__(this).implementation.namespaceAware) {
 32.2795 +                // create a local Attribute (with the name of the importedAttribute)
 32.2796 +                importNode = __ownerDocument__(this).createAttribute(importedNode.name);
 32.2797 +            } else {
 32.2798 +                // create a local Attribute (with the name & namespaceURI of the importedAttribute)
 32.2799 +                importNode = __ownerDocument__(this).createAttributeNS(importedNode.namespaceURI, importedNode.nodeName);
 32.2800 +
 32.2801 +                // create namespace definitions matching those of the importedAttribute
 32.2802 +                for(i = 0; i < importedNode._namespaces.length; i++) {
 32.2803 +                    importNode._namespaces[i] = __ownerDocument__(this).createNamespace(importedNode._namespaces.item(i).localName);
 32.2804 +                    importNode._namespaces[i].value = importedNode._namespaces.item(i).value;
 32.2805 +                }
 32.2806 +            }
 32.2807 +
 32.2808 +            // set the value of the local Attribute to match that of the importedAttribute
 32.2809 +            importNode.value = importedNode.value;
 32.2810 +
 32.2811 +        } else if (importedNode.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
 32.2812 +            // create a local DocumentFragment
 32.2813 +            importNode = __ownerDocument__(this).createDocumentFragment();
 32.2814 +        } else if (importedNode.nodeType == Node.NAMESPACE_NODE) {
 32.2815 +            // create a local NamespaceNode (with the same name & value as the importedNode)
 32.2816 +            importNode = __ownerDocument__(this).createNamespace(importedNode.nodeName);
 32.2817 +            importNode.value = importedNode.value;
 32.2818 +        } else if (importedNode.nodeType == Node.TEXT_NODE) {
 32.2819 +            // create a local TextNode (with the same data as the importedNode)
 32.2820 +            importNode = __ownerDocument__(this).createTextNode(importedNode.data);
 32.2821 +        } else if (importedNode.nodeType == Node.CDATA_SECTION_NODE) {
 32.2822 +            // create a local CDATANode (with the same data as the importedNode)
 32.2823 +            importNode = __ownerDocument__(this).createCDATASection(importedNode.data);
 32.2824 +        } else if (importedNode.nodeType == Node.PROCESSING_INSTRUCTION_NODE) {
 32.2825 +            // create a local ProcessingInstruction (with the same target & data as the importedNode)
 32.2826 +            importNode = __ownerDocument__(this).createProcessingInstruction(importedNode.target, importedNode.data);
 32.2827 +        } else if (importedNode.nodeType == Node.COMMENT_NODE) {
 32.2828 +            // create a local Comment (with the same data as the importedNode)
 32.2829 +            importNode = __ownerDocument__(this).createComment(importedNode.data);
 32.2830 +        } else {  // throw Exception if nodeType is not supported
 32.2831 +            throw(new DOMException(DOMException.NOT_SUPPORTED_ERR));
 32.2832 +        }
 32.2833 +
 32.2834 +        if (deep) {
 32.2835 +            // recurse childNodes
 32.2836 +            for(i = 0; i < importedNode.childNodes.length; i++) {
 32.2837 +                importNode.appendChild(__ownerDocument__(this).importNode(importedNode.childNodes.item(i), true));
 32.2838 +            }
 32.2839 +        }
 32.2840 +
 32.2841 +        //reset importing
 32.2842 +        __ownerDocument__(this).importing = false;
 32.2843 +        return importNode;
 32.2844 +
 32.2845 +    },
 32.2846 +    contains : function(node){
 32.2847 +        while(node && node != this ){
 32.2848 +            node = node.parentNode;
 32.2849 +        }
 32.2850 +        return !!node;
 32.2851 +    },
 32.2852 +    toString : function() {
 32.2853 +        return '[object Node]';
 32.2854 +    }
 32.2855 +
 32.2856 +});
 32.2857 +
 32.2858 +
 32.2859 +
 32.2860 +/**
 32.2861 + * @method __getElementsByTagNameRecursive__ - implements getElementsByTagName()
 32.2862 + * @param  elem     : Element  - The element which are checking and then recursing into
 32.2863 + * @param  tagname  : string      - The name of the tag to match on. The special value "*" matches all tags
 32.2864 + * @param  nodeList : NodeList - The accumulating list of matching nodes
 32.2865 + *
 32.2866 + * @return : NodeList
 32.2867 + */
 32.2868 +var __getElementsByTagNameRecursive__ = function (elem, tagname, nodeList) {
 32.2869 +
 32.2870 +    if (elem.nodeType == Node.ELEMENT_NODE || elem.nodeType == Node.DOCUMENT_NODE) {
 32.2871 +
 32.2872 +        if(elem.nodeType !== Node.DOCUMENT_NODE &&
 32.2873 +            ((elem.nodeName.toUpperCase() == tagname.toUpperCase()) ||
 32.2874 +                (tagname == "*")) ){
 32.2875 +            // add matching node to nodeList
 32.2876 +            __appendChild__(nodeList, elem);
 32.2877 +        }
 32.2878 +
 32.2879 +        // recurse childNodes
 32.2880 +        for(var i = 0; i < elem.childNodes.length; i++) {
 32.2881 +            nodeList = __getElementsByTagNameRecursive__(elem.childNodes.item(i), tagname, nodeList);
 32.2882 +        }
 32.2883 +    }
 32.2884 +
 32.2885 +    return nodeList;
 32.2886 +};
 32.2887 +
 32.2888 +/**
 32.2889 + * @method __getElementsByTagNameNSRecursive__
 32.2890 + *      implements getElementsByTagName()
 32.2891 + *
 32.2892 + * @param  elem     : Element  - The element which are checking and then recursing into
 32.2893 + * @param  namespaceURI : string - the namespace URI of the required node
 32.2894 + * @param  localName    : string - the local name of the required node
 32.2895 + * @param  nodeList     : NodeList - The accumulating list of matching nodes
 32.2896 + *
 32.2897 + * @return : NodeList
 32.2898 + */
 32.2899 +var __getElementsByTagNameNSRecursive__ = function(elem, namespaceURI, localName, nodeList) {
 32.2900 +    if (elem.nodeType == Node.ELEMENT_NODE || elem.nodeType == Node.DOCUMENT_NODE) {
 32.2901 +
 32.2902 +        if (((elem.namespaceURI == namespaceURI) || (namespaceURI == "*")) &&
 32.2903 +            ((elem.localName == localName) || (localName == "*"))) {
 32.2904 +            // add matching node to nodeList
 32.2905 +            __appendChild__(nodeList, elem);
 32.2906 +        }
 32.2907 +
 32.2908 +        // recurse childNodes
 32.2909 +        for(var i = 0; i < elem.childNodes.length; i++) {
 32.2910 +            nodeList = __getElementsByTagNameNSRecursive__(
 32.2911 +                elem.childNodes.item(i), namespaceURI, localName, nodeList);
 32.2912 +        }
 32.2913 +    }
 32.2914 +
 32.2915 +    return nodeList;
 32.2916 +};
 32.2917 +
 32.2918 +/**
 32.2919 + * @method __isAncestor__ - returns true if node is ancestor of target
 32.2920 + * @param  target         : Node - The node we are using as context
 32.2921 + * @param  node         : Node - The candidate ancestor node
 32.2922 + * @return : boolean
 32.2923 + */
 32.2924 +var __isAncestor__ = function(target, node) {
 32.2925 +    // if this node matches, return true,
 32.2926 +    // otherwise recurse up (if there is a parentNode)
 32.2927 +    return ((target == node) || ((target.parentNode) && (__isAncestor__(target.parentNode, node))));
 32.2928 +};
 32.2929 +
 32.2930 +
 32.2931 +
 32.2932 +var __recursivelyGatherText__ = function(aNode) {
 32.2933 +    var accumulateText = "",
 32.2934 +        idx,
 32.2935 +        node;
 32.2936 +    for (idx=0;idx < aNode.childNodes.length;idx++){
 32.2937 +        node = aNode.childNodes.item(idx);
 32.2938 +        if(node.nodeType == Node.TEXT_NODE)
 32.2939 +            accumulateText += node.data;
 32.2940 +        else
 32.2941 +            accumulateText += __recursivelyGatherText__(node);
 32.2942 +    }
 32.2943 +    return accumulateText;
 32.2944 +};
 32.2945 +
 32.2946 +/**
 32.2947 + * function __escapeXML__
 32.2948 + * @param  str : string - The string to be escaped
 32.2949 + * @return : string - The escaped string
 32.2950 + */
 32.2951 +var escAmpRegEx = /&(?!(amp;|lt;|gt;|quot|apos;))/g;
 32.2952 +var escLtRegEx = /</g;
 32.2953 +var escGtRegEx = />/g;
 32.2954 +var quotRegEx = /"/g;
 32.2955 +var aposRegEx = /'/g;
 32.2956 +
 32.2957 +function __escapeXML__(str) {
 32.2958 +    str = str.replace(escAmpRegEx, "&amp;").
 32.2959 +            replace(escLtRegEx, "&lt;").
 32.2960 +            replace(escGtRegEx, "&gt;").
 32.2961 +            replace(quotRegEx, "&quot;").
 32.2962 +            replace(aposRegEx, "&apos;");
 32.2963 +
 32.2964 +    return str;
 32.2965 +};
 32.2966 +
 32.2967 +/*
 32.2968 +function __escapeHTML5__(str) {
 32.2969 +    str = str.replace(escAmpRegEx, "&amp;").
 32.2970 +            replace(escLtRegEx, "&lt;").
 32.2971 +            replace(escGtRegEx, "&gt;");
 32.2972 +
 32.2973 +    return str;
 32.2974 +};
 32.2975 +function __escapeHTML5Atribute__(str) {
 32.2976 +    str = str.replace(escAmpRegEx, "&amp;").
 32.2977 +            replace(escLtRegEx, "&lt;").
 32.2978 +            replace(escGtRegEx, "&gt;").
 32.2979 +            replace(quotRegEx, "&quot;").
 32.2980 +            replace(aposRegEx, "&apos;");
 32.2981 +
 32.2982 +    return str;
 32.2983 +};
 32.2984 +*/
 32.2985 +
 32.2986 +/**
 32.2987 + * function __unescapeXML__
 32.2988 + * @param  str : string - The string to be unescaped
 32.2989 + * @return : string - The unescaped string
 32.2990 + */
 32.2991 +var unescAmpRegEx = /&amp;/g;
 32.2992 +var unescLtRegEx = /&lt;/g;
 32.2993 +var unescGtRegEx = /&gt;/g;
 32.2994 +var unquotRegEx = /&quot;/g;
 32.2995 +var unaposRegEx = /&apos;/g;
 32.2996 +function __unescapeXML__(str) {
 32.2997 +    str = str.replace(unescAmpRegEx, "&").
 32.2998 +            replace(unescLtRegEx, "<").
 32.2999 +            replace(unescGtRegEx, ">").
 32.3000 +            replace(unquotRegEx, "\"").
 32.3001 +            replace(unaposRegEx, "'");
 32.3002 +
 32.3003 +    return str;
 32.3004 +};
 32.3005 +
 32.3006 +/**
 32.3007 + * @class  NamedNodeMap -
 32.3008 + *      used to represent collections of nodes that can be accessed by name
 32.3009 + *      typically a set of Element attributes
 32.3010 + *
 32.3011 + * @extends NodeList -
 32.3012 + *      note W3C spec says that this is not the case, but we need an item()
 32.3013 + *      method identical to NodeList's, so why not?
 32.3014 + * @param  ownerDocument : Document - the ownerDocument
 32.3015 + * @param  parentNode    : Node - the node that the NamedNodeMap is attached to (or null)
 32.3016 + */
 32.3017 +NamedNodeMap = function(ownerDocument, parentNode) {
 32.3018 +    NodeList.apply(this, arguments);
 32.3019 +    __setArray__(this, []);
 32.3020 +};
 32.3021 +NamedNodeMap.prototype = new NodeList();
 32.3022 +__extend__(NamedNodeMap.prototype, {
 32.3023 +    add: function(name){
 32.3024 +        this[this.length] = name;
 32.3025 +    },
 32.3026 +    getNamedItem : function(name) {
 32.3027 +        var ret = null;
 32.3028 +        //console.log('NamedNodeMap getNamedItem %s', name);
 32.3029 +        // test that Named Node exists
 32.3030 +        var itemIndex = __findNamedItemIndex__(this, name);
 32.3031 +
 32.3032 +        if (itemIndex > -1) {
 32.3033 +            // found it!
 32.3034 +            ret = this[itemIndex];
 32.3035 +        }
 32.3036 +        // if node is not found, default value null is returned
 32.3037 +        return ret;
 32.3038 +    },
 32.3039 +    setNamedItem : function(arg) {
 32.3040 +      //console.log('setNamedItem %s', arg);
 32.3041 +      // test for exceptions
 32.3042 +      if (__ownerDocument__(this).implementation.errorChecking) {
 32.3043 +            // throw Exception if arg was not created by this Document
 32.3044 +            if (this.ownerDocument != arg.ownerDocument) {
 32.3045 +              throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
 32.3046 +            }
 32.3047 +
 32.3048 +            // throw Exception if DOMNamedNodeMap is readonly
 32.3049 +            if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
 32.3050 +              throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3051 +            }
 32.3052 +
 32.3053 +            // throw Exception if arg is already an attribute of another Element object
 32.3054 +            if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
 32.3055 +              throw(new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
 32.3056 +            }
 32.3057 +      }
 32.3058 +
 32.3059 +     //console.log('setNamedItem __findNamedItemIndex__ ');
 32.3060 +      // get item index
 32.3061 +      var itemIndex = __findNamedItemIndex__(this, arg.name);
 32.3062 +      var ret = null;
 32.3063 +
 32.3064 +     //console.log('setNamedItem __findNamedItemIndex__ %s', itemIndex);
 32.3065 +      if (itemIndex > -1) {                          // found it!
 32.3066 +            ret = this[itemIndex];                // use existing Attribute
 32.3067 +
 32.3068 +            // throw Exception if DOMAttr is readonly
 32.3069 +            if (__ownerDocument__(this).implementation.errorChecking && ret._readonly) {
 32.3070 +              throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3071 +            } else {
 32.3072 +              this[itemIndex] = arg;                // over-write existing NamedNode
 32.3073 +              this[arg.name.toLowerCase()] = arg;
 32.3074 +            }
 32.3075 +      } else {
 32.3076 +            // add new NamedNode
 32.3077 +           //console.log('setNamedItem add new named node map (by index)');
 32.3078 +            Array.prototype.push.apply(this, [arg]);
 32.3079 +           //console.log('setNamedItem add new named node map (by name) %s %s', arg, arg.name);
 32.3080 +            this[arg.name] = arg;
 32.3081 +           //console.log('finsished setNamedItem add new named node map (by name) %s', arg.name);
 32.3082 +
 32.3083 +      }
 32.3084 +
 32.3085 +     //console.log('setNamedItem parentNode');
 32.3086 +      arg.ownerElement = this.parentNode;            // update ownerElement
 32.3087 +      // return old node or new node
 32.3088 +     //console.log('setNamedItem exit');
 32.3089 +      return ret;
 32.3090 +    },
 32.3091 +    removeNamedItem : function(name) {
 32.3092 +          var ret = null;
 32.3093 +          // test for exceptions
 32.3094 +          // throw Exception if NamedNodeMap is readonly
 32.3095 +          if (__ownerDocument__(this).implementation.errorChecking &&
 32.3096 +                (this._readonly || (this.parentNode && this.parentNode._readonly))) {
 32.3097 +              throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3098 +          }
 32.3099 +
 32.3100 +          // get item index
 32.3101 +          var itemIndex = __findNamedItemIndex__(this, name);
 32.3102 +
 32.3103 +          // throw Exception if there is no node named name in this map
 32.3104 +          if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
 32.3105 +            throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.3106 +          }
 32.3107 +
 32.3108 +          // get Node
 32.3109 +          var oldNode = this[itemIndex];
 32.3110 +          //this[oldNode.name] = undefined;
 32.3111 +
 32.3112 +          // throw Exception if Node is readonly
 32.3113 +          if (__ownerDocument__(this).implementation.errorChecking && oldNode._readonly) {
 32.3114 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3115 +          }
 32.3116 +
 32.3117 +          // return removed node
 32.3118 +          return __removeChild__(this, itemIndex);
 32.3119 +    },
 32.3120 +    getNamedItemNS : function(namespaceURI, localName) {
 32.3121 +        var ret = null;
 32.3122 +
 32.3123 +        // test that Named Node exists
 32.3124 +        var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
 32.3125 +
 32.3126 +        if (itemIndex > -1) {
 32.3127 +            // found it! return NamedNode
 32.3128 +            ret = this[itemIndex];
 32.3129 +        }
 32.3130 +        // if node is not found, default value null is returned
 32.3131 +        return ret;
 32.3132 +    },
 32.3133 +    setNamedItemNS : function(arg) {
 32.3134 +        //console.log('setNamedItemNS %s', arg);
 32.3135 +        // test for exceptions
 32.3136 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.3137 +            // throw Exception if NamedNodeMap is readonly
 32.3138 +            if (this._readonly || (this.parentNode && this.parentNode._readonly)) {
 32.3139 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3140 +            }
 32.3141 +
 32.3142 +            // throw Exception if arg was not created by this Document
 32.3143 +            if (__ownerDocument__(this) != __ownerDocument__(arg)) {
 32.3144 +                throw(new DOMException(DOMException.WRONG_DOCUMENT_ERR));
 32.3145 +            }
 32.3146 +
 32.3147 +            // throw Exception if arg is already an attribute of another Element object
 32.3148 +            if (arg.ownerElement && (arg.ownerElement != this.parentNode)) {
 32.3149 +                throw(new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
 32.3150 +            }
 32.3151 +        }
 32.3152 +
 32.3153 +        // get item index
 32.3154 +        var itemIndex = __findNamedItemNSIndex__(this, arg.namespaceURI, arg.localName);
 32.3155 +        var ret = null;
 32.3156 +
 32.3157 +        if (itemIndex > -1) {
 32.3158 +            // found it!
 32.3159 +            // use existing Attribute
 32.3160 +            ret = this[itemIndex];
 32.3161 +            // throw Exception if Attr is readonly
 32.3162 +            if (__ownerDocument__(this).implementation.errorChecking && ret._readonly) {
 32.3163 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3164 +            } else {
 32.3165 +                // over-write existing NamedNode
 32.3166 +                this[itemIndex] = arg;
 32.3167 +            }
 32.3168 +        }else {
 32.3169 +            // add new NamedNode
 32.3170 +            Array.prototype.push.apply(this, [arg]);
 32.3171 +        }
 32.3172 +        arg.ownerElement = this.parentNode;
 32.3173 +
 32.3174 +        // return old node or null
 32.3175 +        return ret;
 32.3176 +        //console.log('finished setNamedItemNS %s', arg);
 32.3177 +    },
 32.3178 +    removeNamedItemNS : function(namespaceURI, localName) {
 32.3179 +          var ret = null;
 32.3180 +
 32.3181 +          // test for exceptions
 32.3182 +          // throw Exception if NamedNodeMap is readonly
 32.3183 +          if (__ownerDocument__(this).implementation.errorChecking && (this._readonly || (this.parentNode && this.parentNode._readonly))) {
 32.3184 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3185 +          }
 32.3186 +
 32.3187 +          // get item index
 32.3188 +          var itemIndex = __findNamedItemNSIndex__(this, namespaceURI, localName);
 32.3189 +
 32.3190 +          // throw Exception if there is no matching node in this map
 32.3191 +          if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
 32.3192 +            throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.3193 +          }
 32.3194 +
 32.3195 +          // get Node
 32.3196 +          var oldNode = this[itemIndex];
 32.3197 +
 32.3198 +          // throw Exception if Node is readonly
 32.3199 +          if (__ownerDocument__(this).implementation.errorChecking && oldNode._readonly) {
 32.3200 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3201 +          }
 32.3202 +
 32.3203 +          return __removeChild__(this, itemIndex);             // return removed node
 32.3204 +    },
 32.3205 +    get xml() {
 32.3206 +          var ret = "";
 32.3207 +
 32.3208 +          // create string containing concatenation of all (but last) Attribute string values (separated by spaces)
 32.3209 +          for (var i=0; i < this.length -1; i++) {
 32.3210 +            ret += this[i].xml +" ";
 32.3211 +          }
 32.3212 +
 32.3213 +          // add last Attribute to string (without trailing space)
 32.3214 +          if (this.length > 0) {
 32.3215 +            ret += this[this.length -1].xml;
 32.3216 +          }
 32.3217 +
 32.3218 +          return ret;
 32.3219 +    },
 32.3220 +    toString : function(){
 32.3221 +        return "[object NamedNodeMap]";
 32.3222 +    }
 32.3223 +
 32.3224 +});
 32.3225 +
 32.3226 +/**
 32.3227 + * @method __findNamedItemIndex__
 32.3228 + *      find the item index of the node with the specified name
 32.3229 + *
 32.3230 + * @param  name : string - the name of the required node
 32.3231 + * @param  isnsmap : if its a NamespaceNodeMap
 32.3232 + * @return : int
 32.3233 + */
 32.3234 +var __findNamedItemIndex__ = function(namednodemap, name, isnsmap) {
 32.3235 +    var ret = -1;
 32.3236 +    // loop through all nodes
 32.3237 +    for (var i=0; i<namednodemap.length; i++) {
 32.3238 +        // compare name to each node's nodeName
 32.3239 +        if(namednodemap[i].localName && name && isnsmap){
 32.3240 +            if (namednodemap[i].localName.toLowerCase() == name.toLowerCase()) {
 32.3241 +                // found it!
 32.3242 +                ret = i;
 32.3243 +                break;
 32.3244 +            }
 32.3245 +        }else{
 32.3246 +            if(namednodemap[i].name && name){
 32.3247 +                if (namednodemap[i].name.toLowerCase() == name.toLowerCase()) {
 32.3248 +                    // found it!
 32.3249 +                    ret = i;
 32.3250 +                    break;
 32.3251 +                }
 32.3252 +            }
 32.3253 +        }
 32.3254 +    }
 32.3255 +    // if node is not found, default value -1 is returned
 32.3256 +    return ret;
 32.3257 +};
 32.3258 +
 32.3259 +/**
 32.3260 + * @method __findNamedItemNSIndex__
 32.3261 + *      find the item index of the node with the specified
 32.3262 + *      namespaceURI and localName
 32.3263 + *
 32.3264 + * @param  namespaceURI : string - the namespace URI of the required node
 32.3265 + * @param  localName    : string - the local name of the required node
 32.3266 + * @return : int
 32.3267 + */
 32.3268 +var __findNamedItemNSIndex__ = function(namednodemap, namespaceURI, localName) {
 32.3269 +    var ret = -1;
 32.3270 +    // test that localName is not null
 32.3271 +    if (localName) {
 32.3272 +        // loop through all nodes
 32.3273 +        for (var i=0; i<namednodemap.length; i++) {
 32.3274 +            if(namednodemap[i].namespaceURI && namednodemap[i].localName){
 32.3275 +                // compare name to each node's namespaceURI and localName
 32.3276 +                if ((namednodemap[i].namespaceURI.toLowerCase() == namespaceURI.toLowerCase()) &&
 32.3277 +                    (namednodemap[i].localName.toLowerCase() == localName.toLowerCase())) {
 32.3278 +                    // found it!
 32.3279 +                    ret = i;
 32.3280 +                    break;
 32.3281 +                }
 32.3282 +            }
 32.3283 +        }
 32.3284 +    }
 32.3285 +    // if node is not found, default value -1 is returned
 32.3286 +    return ret;
 32.3287 +};
 32.3288 +
 32.3289 +/**
 32.3290 + * @method __hasAttribute__
 32.3291 + *      Returns true if specified node exists
 32.3292 + *
 32.3293 + * @param  name : string - the name of the required node
 32.3294 + * @return : boolean
 32.3295 + */
 32.3296 +var __hasAttribute__ = function(namednodemap, name) {
 32.3297 +    var ret = false;
 32.3298 +    // test that Named Node exists
 32.3299 +    var itemIndex = __findNamedItemIndex__(namednodemap, name);
 32.3300 +        if (itemIndex > -1) {
 32.3301 +        // found it!
 32.3302 +        ret = true;
 32.3303 +    }
 32.3304 +    // if node is not found, default value false is returned
 32.3305 +    return ret;
 32.3306 +}
 32.3307 +
 32.3308 +/**
 32.3309 + * @method __hasAttributeNS__
 32.3310 + *      Returns true if specified node exists
 32.3311 + *
 32.3312 + * @param  namespaceURI : string - the namespace URI of the required node
 32.3313 + * @param  localName    : string - the local name of the required node
 32.3314 + * @return : boolean
 32.3315 + */
 32.3316 +var __hasAttributeNS__ = function(namednodemap, namespaceURI, localName) {
 32.3317 +    var ret = false;
 32.3318 +    // test that Named Node exists
 32.3319 +    var itemIndex = __findNamedItemNSIndex__(namednodemap, namespaceURI, localName);
 32.3320 +    if (itemIndex > -1) {
 32.3321 +        // found it!
 32.3322 +        ret = true;
 32.3323 +    }
 32.3324 +    // if node is not found, default value false is returned
 32.3325 +    return ret;
 32.3326 +}
 32.3327 +
 32.3328 +/**
 32.3329 + * @method __cloneNamedNodes__
 32.3330 + *      Returns a NamedNodeMap containing clones of the Nodes in this NamedNodeMap
 32.3331 + *
 32.3332 + * @param  parentNode : Node - the new parent of the cloned NodeList
 32.3333 + * @param  isnsmap : bool - is this a NamespaceNodeMap
 32.3334 + * @return NamedNodeMap containing clones of the Nodes in this NamedNodeMap
 32.3335 + */
 32.3336 +var __cloneNamedNodes__ = function(namednodemap, parentNode, isnsmap) {
 32.3337 +    var cloneNamedNodeMap = isnsmap?
 32.3338 +        new NamespaceNodeMap(namednodemap.ownerDocument, parentNode):
 32.3339 +        new NamedNodeMap(namednodemap.ownerDocument, parentNode);
 32.3340 +
 32.3341 +    // create list containing clones of all children
 32.3342 +    for (var i=0; i < namednodemap.length; i++) {
 32.3343 +        __appendChild__(cloneNamedNodeMap, namednodemap[i].cloneNode(false));
 32.3344 +    }
 32.3345 +
 32.3346 +    return cloneNamedNodeMap;
 32.3347 +};
 32.3348 +
 32.3349 +
 32.3350 +/**
 32.3351 + * @class  NamespaceNodeMap -
 32.3352 + *      used to represent collections of namespace nodes that can be
 32.3353 + *      accessed by name typically a set of Element attributes
 32.3354 + *
 32.3355 + * @extends NamedNodeMap
 32.3356 + *
 32.3357 + * @param  ownerDocument : Document - the ownerDocument
 32.3358 + * @param  parentNode    : Node - the node that the NamespaceNodeMap is attached to (or null)
 32.3359 + */
 32.3360 +var NamespaceNodeMap = function(ownerDocument, parentNode) {
 32.3361 +    this.NamedNodeMap = NamedNodeMap;
 32.3362 +    this.NamedNodeMap(ownerDocument, parentNode);
 32.3363 +    __setArray__(this, []);
 32.3364 +};
 32.3365 +NamespaceNodeMap.prototype = new NamedNodeMap();
 32.3366 +__extend__(NamespaceNodeMap.prototype, {
 32.3367 +    get xml() {
 32.3368 +        var ret = "",
 32.3369 +            ns,
 32.3370 +            ind;
 32.3371 +        // identify namespaces declared local to this Element (ie, not inherited)
 32.3372 +        for (ind = 0; ind < this.length; ind++) {
 32.3373 +            // if namespace declaration does not exist in the containing node's, parentNode's namespaces
 32.3374 +            ns = null;
 32.3375 +            try {
 32.3376 +                var ns = this.parentNode.parentNode._namespaces.
 32.3377 +                    getNamedItem(this[ind].localName);
 32.3378 +            }catch (e) {
 32.3379 +                //breaking to prevent default namespace being inserted into return value
 32.3380 +                break;
 32.3381 +            }
 32.3382 +            if (!(ns && (""+ ns.nodeValue == ""+ this[ind].nodeValue))) {
 32.3383 +                // display the namespace declaration
 32.3384 +                ret += this[ind].xml +" ";
 32.3385 +            }
 32.3386 +        }
 32.3387 +        return ret;
 32.3388 +    }
 32.3389 +});
 32.3390 +
 32.3391 +/**
 32.3392 + * @class  Namespace -
 32.3393 + *      The Namespace interface represents an namespace in an Element object
 32.3394 + *
 32.3395 + * @param  ownerDocument : The Document object associated with this node.
 32.3396 + */
 32.3397 +Namespace = function(ownerDocument) {
 32.3398 +    Node.apply(this, arguments);
 32.3399 +    // the name of this attribute
 32.3400 +    this.name      = "";
 32.3401 +
 32.3402 +    // If this attribute was explicitly given a value in the original document,
 32.3403 +    // this is true; otherwise, it is false.
 32.3404 +    // Note that the implementation is in charge of this attribute, not the user.
 32.3405 +    // If the user changes the value of the attribute (even if it ends up having
 32.3406 +    // the same value as the default value) then the specified flag is
 32.3407 +    // automatically flipped to true
 32.3408 +    this.specified = false;
 32.3409 +};
 32.3410 +Namespace.prototype = new Node();
 32.3411 +__extend__(Namespace.prototype, {
 32.3412 +    get value(){
 32.3413 +        // the value of the attribute is returned as a string
 32.3414 +        return this.nodeValue;
 32.3415 +    },
 32.3416 +    set value(value){
 32.3417 +        this.nodeValue = value+'';
 32.3418 +    },
 32.3419 +    get nodeType(){
 32.3420 +        return Node.NAMESPACE_NODE;
 32.3421 +    },
 32.3422 +    get xml(){
 32.3423 +        var ret = "";
 32.3424 +
 32.3425 +          // serialize Namespace Declaration
 32.3426 +          if (this.nodeName != "") {
 32.3427 +            ret += this.nodeName +"=\""+ __escapeXML__(this.nodeValue) +"\"";
 32.3428 +          }
 32.3429 +          else {  // handle default namespace
 32.3430 +            ret += "xmlns=\""+ __escapeXML__(this.nodeValue) +"\"";
 32.3431 +          }
 32.3432 +
 32.3433 +          return ret;
 32.3434 +    },
 32.3435 +    toString: function(){
 32.3436 +        return '[object Namespace]';
 32.3437 +    }
 32.3438 +});
 32.3439 +
 32.3440 +
 32.3441 +/**
 32.3442 + * @class  CharacterData - parent abstract class for Text and Comment
 32.3443 + * @extends Node
 32.3444 + * @param  ownerDocument : The Document object associated with this node.
 32.3445 + */
 32.3446 +CharacterData = function(ownerDocument) {
 32.3447 +    Node.apply(this, arguments);
 32.3448 +};
 32.3449 +CharacterData.prototype = new Node();
 32.3450 +__extend__(CharacterData.prototype,{
 32.3451 +    get data(){
 32.3452 +        return this.nodeValue;
 32.3453 +    },
 32.3454 +    set data(data){
 32.3455 +        this.nodeValue = data;
 32.3456 +    },
 32.3457 +    get textContent(){
 32.3458 +        return this.nodeValue;
 32.3459 +    },
 32.3460 +    set textContent(newText){
 32.3461 +        this.nodeValue = newText;
 32.3462 +    },
 32.3463 +    get length(){return this.nodeValue.length;},
 32.3464 +    appendData: function(arg){
 32.3465 +        // throw Exception if CharacterData is readonly
 32.3466 +        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
 32.3467 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3468 +        }
 32.3469 +        // append data
 32.3470 +        this.data = "" + this.data + arg;
 32.3471 +    },
 32.3472 +    deleteData: function(offset, count){
 32.3473 +        // throw Exception if CharacterData is readonly
 32.3474 +        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
 32.3475 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3476 +        }
 32.3477 +        if (this.data) {
 32.3478 +            // throw Exception if offset is negative or greater than the data length,
 32.3479 +            if (__ownerDocument__(this).implementation.errorChecking &&
 32.3480 +                ((offset < 0) || (offset >  this.data.length) || (count < 0))) {
 32.3481 +                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3482 +            }
 32.3483 +
 32.3484 +            // delete data
 32.3485 +            if(!count || (offset + count) > this.data.length) {
 32.3486 +              this.data = this.data.substring(0, offset);
 32.3487 +            }else {
 32.3488 +              this.data = this.data.substring(0, offset).
 32.3489 +                concat(this.data.substring(offset + count));
 32.3490 +            }
 32.3491 +        }
 32.3492 +    },
 32.3493 +    insertData: function(offset, arg){
 32.3494 +        // throw Exception if CharacterData is readonly
 32.3495 +        if(__ownerDocument__(this).implementation.errorChecking && this._readonly){
 32.3496 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3497 +        }
 32.3498 +
 32.3499 +        if(this.data){
 32.3500 +            // throw Exception if offset is negative or greater than the data length,
 32.3501 +            if (__ownerDocument__(this).implementation.errorChecking &&
 32.3502 +                ((offset < 0) || (offset >  this.data.length))) {
 32.3503 +                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3504 +            }
 32.3505 +
 32.3506 +            // insert data
 32.3507 +            this.data =  this.data.substring(0, offset).concat(arg, this.data.substring(offset));
 32.3508 +        }else {
 32.3509 +            // throw Exception if offset is negative or greater than the data length,
 32.3510 +            if (__ownerDocument__(this).implementation.errorChecking && (offset !== 0)) {
 32.3511 +               throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3512 +            }
 32.3513 +
 32.3514 +            // set data
 32.3515 +            this.data = arg;
 32.3516 +        }
 32.3517 +    },
 32.3518 +    replaceData: function(offset, count, arg){
 32.3519 +        // throw Exception if CharacterData is readonly
 32.3520 +        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
 32.3521 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3522 +        }
 32.3523 +
 32.3524 +        if (this.data) {
 32.3525 +            // throw Exception if offset is negative or greater than the data length,
 32.3526 +            if (__ownerDocument__(this).implementation.errorChecking &&
 32.3527 +                ((offset < 0) || (offset >  this.data.length) || (count < 0))) {
 32.3528 +                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3529 +            }
 32.3530 +
 32.3531 +            // replace data
 32.3532 +            this.data = this.data.substring(0, offset).
 32.3533 +                concat(arg, this.data.substring(offset + count));
 32.3534 +        }else {
 32.3535 +            // set data
 32.3536 +            this.data = arg;
 32.3537 +        }
 32.3538 +    },
 32.3539 +    substringData: function(offset, count){
 32.3540 +        var ret = null;
 32.3541 +        if (this.data) {
 32.3542 +            // throw Exception if offset is negative or greater than the data length,
 32.3543 +            // or the count is negative
 32.3544 +            if (__ownerDocument__(this).implementation.errorChecking &&
 32.3545 +                ((offset < 0) || (offset > this.data.length) || (count < 0))) {
 32.3546 +                throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3547 +            }
 32.3548 +            // if count is not specified
 32.3549 +            if (!count) {
 32.3550 +                ret = this.data.substring(offset); // default to 'end of string'
 32.3551 +            }else{
 32.3552 +                ret = this.data.substring(offset, offset + count);
 32.3553 +            }
 32.3554 +        }
 32.3555 +        return ret;
 32.3556 +    },
 32.3557 +    toString : function(){
 32.3558 +        return "[object CharacterData]";
 32.3559 +    }
 32.3560 +});
 32.3561 +
 32.3562 +/**
 32.3563 + * @class  Text
 32.3564 + *      The Text interface represents the textual content (termed
 32.3565 + *      character data in XML) of an Element or Attr.
 32.3566 + *      If there is no markup inside an element's content, the text is
 32.3567 + *      contained in a single object implementing the Text interface that
 32.3568 + *      is the only child of the element. If there is markup, it is
 32.3569 + *      parsed into a list of elements and Text nodes that form the
 32.3570 + *      list of children of the element.
 32.3571 + * @extends CharacterData
 32.3572 + * @param  ownerDocument The Document object associated with this node.
 32.3573 + */
 32.3574 +Text = function(ownerDocument) {
 32.3575 +    CharacterData.apply(this, arguments);
 32.3576 +    this.nodeName  = "#text";
 32.3577 +};
 32.3578 +Text.prototype = new CharacterData();
 32.3579 +__extend__(Text.prototype,{
 32.3580 +    get localName(){
 32.3581 +        return null;
 32.3582 +    },
 32.3583 +    // Breaks this Text node into two Text nodes at the specified offset,
 32.3584 +    // keeping both in the tree as siblings. This node then only contains
 32.3585 +    // all the content up to the offset point.  And a new Text node, which
 32.3586 +    // is inserted as the next sibling of this node, contains all the
 32.3587 +    // content at and after the offset point.
 32.3588 +    splitText : function(offset) {
 32.3589 +        var data,
 32.3590 +            inode;
 32.3591 +        // test for exceptions
 32.3592 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.3593 +            // throw Exception if Node is readonly
 32.3594 +            if (this._readonly) {
 32.3595 +              throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3596 +            }
 32.3597 +            // throw Exception if offset is negative or greater than the data length,
 32.3598 +            if ((offset < 0) || (offset > this.data.length)) {
 32.3599 +              throw(new DOMException(DOMException.INDEX_SIZE_ERR));
 32.3600 +            }
 32.3601 +        }
 32.3602 +        if (this.parentNode) {
 32.3603 +            // get remaining string (after offset)
 32.3604 +            data  = this.substringData(offset);
 32.3605 +            // create new TextNode with remaining string
 32.3606 +            inode = __ownerDocument__(this).createTextNode(data);
 32.3607 +            // attach new TextNode
 32.3608 +            if (this.nextSibling) {
 32.3609 +              this.parentNode.insertBefore(inode, this.nextSibling);
 32.3610 +            } else {
 32.3611 +              this.parentNode.appendChild(inode);
 32.3612 +            }
 32.3613 +            // remove remaining string from original TextNode
 32.3614 +            this.deleteData(offset);
 32.3615 +        }
 32.3616 +        return inode;
 32.3617 +    },
 32.3618 +    get nodeType(){
 32.3619 +        return Node.TEXT_NODE;
 32.3620 +    },
 32.3621 +    get xml(){
 32.3622 +        return __escapeXML__(""+ this.nodeValue);
 32.3623 +    },
 32.3624 +    toString: function(){
 32.3625 +        return "[object Text]";
 32.3626 +    }
 32.3627 +});
 32.3628 +
 32.3629 +/**
 32.3630 + * @class CDATASection 
 32.3631 + *      CDATA sections are used to escape blocks of text containing 
 32.3632 + *      characters that would otherwise be regarded as markup.
 32.3633 + *      The only delimiter that is recognized in a CDATA section is 
 32.3634 + *      the "\]\]\>" string that ends the CDATA section
 32.3635 + * @extends Text
 32.3636 + * @param  ownerDocument : The Document object associated with this node.
 32.3637 + */
 32.3638 +CDATASection = function(ownerDocument) {
 32.3639 +    Text.apply(this, arguments);
 32.3640 +    this.nodeName = '#cdata-section';
 32.3641 +};
 32.3642 +CDATASection.prototype = new Text();
 32.3643 +__extend__(CDATASection.prototype,{
 32.3644 +    get nodeType(){
 32.3645 +        return Node.CDATA_SECTION_NODE;
 32.3646 +    },
 32.3647 +    get xml(){
 32.3648 +        return "<![CDATA[" + this.nodeValue + "]]>";
 32.3649 +    },
 32.3650 +    toString : function(){
 32.3651 +        return "[object CDATASection]";
 32.3652 +    }
 32.3653 +});
 32.3654 +/**
 32.3655 + * @class  Comment
 32.3656 + *      This represents the content of a comment, i.e., all the
 32.3657 + *      characters between the starting '<!--' and ending '-->'
 32.3658 + * @extends CharacterData
 32.3659 + * @param  ownerDocument :  The Document object associated with this node.
 32.3660 + */
 32.3661 +Comment = function(ownerDocument) {
 32.3662 +    CharacterData.apply(this, arguments);
 32.3663 +    this.nodeName  = "#comment";
 32.3664 +};
 32.3665 +Comment.prototype = new CharacterData();
 32.3666 +__extend__(Comment.prototype, {
 32.3667 +    get localName(){
 32.3668 +        return null;
 32.3669 +    },
 32.3670 +    get nodeType(){
 32.3671 +        return Node.COMMENT_NODE;
 32.3672 +    },
 32.3673 +    get xml(){
 32.3674 +        return "<!--" + this.nodeValue + "-->";
 32.3675 +    },
 32.3676 +    toString : function(){
 32.3677 +        return "[object Comment]";
 32.3678 +    }
 32.3679 +});
 32.3680 +
 32.3681 +
 32.3682 +/**
 32.3683 + * @author envjs team
 32.3684 + * @param {Document} onwnerDocument
 32.3685 + */
 32.3686 +DocumentType = function(ownerDocument) {
 32.3687 +    Node.apply(this, arguments);
 32.3688 +    this.systemId = null;
 32.3689 +    this.publicId = null;
 32.3690 +};
 32.3691 +DocumentType.prototype = new Node();
 32.3692 +__extend__({
 32.3693 +    get name(){
 32.3694 +        return this.nodeName;
 32.3695 +    },
 32.3696 +    get entities(){
 32.3697 +        return null;
 32.3698 +    },
 32.3699 +    get internalSubsets(){
 32.3700 +        return null;
 32.3701 +    },
 32.3702 +    get notations(){
 32.3703 +        return null;
 32.3704 +    },
 32.3705 +    toString : function(){
 32.3706 +        return "[object DocumentType]";
 32.3707 +    }
 32.3708 +});
 32.3709 +
 32.3710 +/**
 32.3711 + * @class  Attr
 32.3712 + *      The Attr interface represents an attribute in an Element object
 32.3713 + * @extends Node
 32.3714 + * @param  ownerDocument : The Document object associated with this node.
 32.3715 + */
 32.3716 +Attr = function(ownerDocument) {
 32.3717 +    Node.apply(this, arguments);
 32.3718 +    // set when Attr is added to NamedNodeMap
 32.3719 +    this.ownerElement = null;
 32.3720 +    //TODO: our implementation of Attr is incorrect because we don't
 32.3721 +    //      treat the value of the attribute as a child text node.
 32.3722 +};
 32.3723 +Attr.prototype = new Node();
 32.3724 +__extend__(Attr.prototype, {
 32.3725 +    // the name of this attribute
 32.3726 +    get name(){
 32.3727 +        return this.nodeName;
 32.3728 +    },
 32.3729 +    // the value of the attribute is returned as a string
 32.3730 +    get value(){
 32.3731 +        return this.nodeValue||'';
 32.3732 +    },
 32.3733 +    set value(value){
 32.3734 +        // throw Exception if Attribute is readonly
 32.3735 +        if (__ownerDocument__(this).implementation.errorChecking && this._readonly) {
 32.3736 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3737 +        }
 32.3738 +        // delegate to node
 32.3739 +        this.nodeValue = value;
 32.3740 +    },
 32.3741 +    get textContent(){
 32.3742 +        return this.nodeValue;
 32.3743 +    },
 32.3744 +    set textContent(newText){
 32.3745 +        this.nodeValue = newText;
 32.3746 +    },
 32.3747 +    get specified(){
 32.3748 +        return (this !== null && this !== undefined);
 32.3749 +    },
 32.3750 +    get nodeType(){
 32.3751 +        return Node.ATTRIBUTE_NODE;
 32.3752 +    },
 32.3753 +    get xml() {
 32.3754 +        if (this.nodeValue) {
 32.3755 +            return  __escapeXML__(this.nodeValue+"");
 32.3756 +        } else {
 32.3757 +            return '';
 32.3758 +        }
 32.3759 +    },
 32.3760 +    toString : function() {
 32.3761 +        return '[object Attr]';
 32.3762 +    }
 32.3763 +});
 32.3764 +
 32.3765 +
 32.3766 +/**
 32.3767 + * @class  Element -
 32.3768 + *      By far the vast majority of objects (apart from text)
 32.3769 + *      that authors encounter when traversing a document are
 32.3770 + *      Element nodes.
 32.3771 + * @extends Node
 32.3772 + * @param  ownerDocument : The Document object associated with this node.
 32.3773 + */
 32.3774 +Element = function(ownerDocument) {
 32.3775 +    Node.apply(this, arguments);
 32.3776 +    this.attributes = new NamedNodeMap(this.ownerDocument, this);
 32.3777 +};
 32.3778 +Element.prototype = new Node();
 32.3779 +__extend__(Element.prototype, {
 32.3780 +    // The name of the element.
 32.3781 +    get tagName(){
 32.3782 +        return this.nodeName;
 32.3783 +    },
 32.3784 +
 32.3785 +    getAttribute: function(name) {
 32.3786 +        var ret = null;
 32.3787 +        // if attribute exists, use it
 32.3788 +        var attr = this.attributes.getNamedItem(name);
 32.3789 +        if (attr) {
 32.3790 +            ret = attr.value;
 32.3791 +        }
 32.3792 +        // if Attribute exists, return its value, otherwise, return null
 32.3793 +        return ret;
 32.3794 +    },
 32.3795 +    setAttribute : function (name, value) {
 32.3796 +        // if attribute exists, use it
 32.3797 +        var attr = this.attributes.getNamedItem(name);
 32.3798 +       //console.log('attr %s', attr);
 32.3799 +        //I had to add this check because as the script initializes
 32.3800 +        //the id may be set in the constructor, and the html element
 32.3801 +        //overrides the id property with a getter/setter.
 32.3802 +        if(__ownerDocument__(this)){
 32.3803 +            if (attr===null||attr===undefined) {
 32.3804 +                // otherwise create it
 32.3805 +                attr = __ownerDocument__(this).createAttribute(name);
 32.3806 +               //console.log('attr %s', attr);
 32.3807 +            }
 32.3808 +
 32.3809 +
 32.3810 +            // test for exceptions
 32.3811 +            if (__ownerDocument__(this).implementation.errorChecking) {
 32.3812 +                // throw Exception if Attribute is readonly
 32.3813 +                if (attr._readonly) {
 32.3814 +                    throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3815 +                }
 32.3816 +
 32.3817 +                // throw Exception if the value string contains an illegal character
 32.3818 +                if (!__isValidString__(value+'')) {
 32.3819 +                    throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.3820 +                }
 32.3821 +            }
 32.3822 +
 32.3823 +            // assign values to properties (and aliases)
 32.3824 +            attr.value     = value + '';
 32.3825 +
 32.3826 +            // add/replace Attribute in NamedNodeMap
 32.3827 +            this.attributes.setNamedItem(attr);
 32.3828 +           //console.log('element setNamedItem %s', attr);
 32.3829 +        }else{
 32.3830 +           console.warn('Element has no owner document '+this.tagName+
 32.3831 +                '\n\t cant set attribute ' + name + ' = '+value );
 32.3832 +        }
 32.3833 +    },
 32.3834 +    removeAttribute : function removeAttribute(name) {
 32.3835 +        // delegate to NamedNodeMap.removeNamedItem
 32.3836 +        return this.attributes.removeNamedItem(name);
 32.3837 +    },
 32.3838 +    getAttributeNode : function getAttributeNode(name) {
 32.3839 +        // delegate to NamedNodeMap.getNamedItem
 32.3840 +        return this.attributes.getNamedItem(name);
 32.3841 +    },
 32.3842 +    setAttributeNode: function(newAttr) {
 32.3843 +        // if this Attribute is an ID
 32.3844 +        if (__isIdDeclaration__(newAttr.name)) {
 32.3845 +            this.id = newAttr.value;  // cache ID for getElementById()
 32.3846 +        }
 32.3847 +        // delegate to NamedNodeMap.setNamedItem
 32.3848 +        return this.attributes.setNamedItem(newAttr);
 32.3849 +    },
 32.3850 +    removeAttributeNode: function(oldAttr) {
 32.3851 +      // throw Exception if Attribute is readonly
 32.3852 +      if (__ownerDocument__(this).implementation.errorChecking && oldAttr._readonly) {
 32.3853 +        throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3854 +      }
 32.3855 +
 32.3856 +      // get item index
 32.3857 +      var itemIndex = this.attributes._findItemIndex(oldAttr._id);
 32.3858 +
 32.3859 +      // throw Exception if node does not exist in this map
 32.3860 +      if (__ownerDocument__(this).implementation.errorChecking && (itemIndex < 0)) {
 32.3861 +        throw(new DOMException(DOMException.NOT_FOUND_ERR));
 32.3862 +      }
 32.3863 +
 32.3864 +      return this.attributes._removeChild(itemIndex);
 32.3865 +    },
 32.3866 +    getAttributeNS : function(namespaceURI, localName) {
 32.3867 +        var ret = "";
 32.3868 +        // delegate to NAmedNodeMap.getNamedItemNS
 32.3869 +        var attr = this.attributes.getNamedItemNS(namespaceURI, localName);
 32.3870 +        if (attr) {
 32.3871 +            ret = attr.value;
 32.3872 +        }
 32.3873 +        return ret;  // if Attribute exists, return its value, otherwise return ""
 32.3874 +    },
 32.3875 +    setAttributeNS : function(namespaceURI, qualifiedName, value) {
 32.3876 +        // call NamedNodeMap.getNamedItem
 32.3877 +        //console.log('setAttributeNS %s %s %s', namespaceURI, qualifiedName, value);
 32.3878 +        var attr = this.attributes.getNamedItem(namespaceURI, qualifiedName);
 32.3879 +
 32.3880 +        if (!attr) {  // if Attribute exists, use it
 32.3881 +            // otherwise create it
 32.3882 +            attr = __ownerDocument__(this).createAttributeNS(namespaceURI, qualifiedName);
 32.3883 +        }
 32.3884 +
 32.3885 +        value = '' + value;
 32.3886 +
 32.3887 +        // test for exceptions
 32.3888 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.3889 +            // throw Exception if Attribute is readonly
 32.3890 +            if (attr._readonly) {
 32.3891 +                throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.3892 +            }
 32.3893 +
 32.3894 +            // throw Exception if the Namespace is invalid
 32.3895 +            if (!__isValidNamespace__(this.ownerDocument, namespaceURI, qualifiedName, true)) {
 32.3896 +                throw(new DOMException(DOMException.NAMESPACE_ERR));
 32.3897 +            }
 32.3898 +
 32.3899 +            // throw Exception if the value string contains an illegal character
 32.3900 +            if (!__isValidString__(value)) {
 32.3901 +                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.3902 +            }
 32.3903 +        }
 32.3904 +
 32.3905 +        // if this Attribute is an ID
 32.3906 +        //if (__isIdDeclaration__(name)) {
 32.3907 +        //    this.id = value;
 32.3908 +        //}
 32.3909 +
 32.3910 +        // assign values to properties (and aliases)
 32.3911 +        attr.value     = value;
 32.3912 +        attr.nodeValue = value;
 32.3913 +
 32.3914 +        // delegate to NamedNodeMap.setNamedItem
 32.3915 +        this.attributes.setNamedItemNS(attr);
 32.3916 +    },
 32.3917 +    removeAttributeNS : function(namespaceURI, localName) {
 32.3918 +        // delegate to NamedNodeMap.removeNamedItemNS
 32.3919 +        return this.attributes.removeNamedItemNS(namespaceURI, localName);
 32.3920 +    },
 32.3921 +    getAttributeNodeNS : function(namespaceURI, localName) {
 32.3922 +        // delegate to NamedNodeMap.getNamedItemNS
 32.3923 +        return this.attributes.getNamedItemNS(namespaceURI, localName);
 32.3924 +    },
 32.3925 +    setAttributeNodeNS : function(newAttr) {
 32.3926 +        // if this Attribute is an ID
 32.3927 +        if ((newAttr.prefix == "") &&  __isIdDeclaration__(newAttr.name)) {
 32.3928 +            this.id = newAttr.value+'';  // cache ID for getElementById()
 32.3929 +        }
 32.3930 +
 32.3931 +        // delegate to NamedNodeMap.setNamedItemNS
 32.3932 +        return this.attributes.setNamedItemNS(newAttr);
 32.3933 +    },
 32.3934 +    hasAttribute : function(name) {
 32.3935 +        // delegate to NamedNodeMap._hasAttribute
 32.3936 +        return __hasAttribute__(this.attributes,name);
 32.3937 +    },
 32.3938 +    hasAttributeNS : function(namespaceURI, localName) {
 32.3939 +        // delegate to NamedNodeMap._hasAttributeNS
 32.3940 +        return __hasAttributeNS__(this.attributes, namespaceURI, localName);
 32.3941 +    },
 32.3942 +    get nodeType(){
 32.3943 +        return Node.ELEMENT_NODE;
 32.3944 +    },
 32.3945 +    get xml() {
 32.3946 +        var ret = "",
 32.3947 +            ns = "",
 32.3948 +            attrs,
 32.3949 +            attrstring,
 32.3950 +            i;
 32.3951 +
 32.3952 +        // serialize namespace declarations
 32.3953 +        if (this.namespaceURI ){
 32.3954 +            if((this === this.ownerDocument.documentElement) ||
 32.3955 +               (!this.parentNode)||
 32.3956 +               (this.parentNode && (this.parentNode.namespaceURI !== this.namespaceURI))) {
 32.3957 +                ns = ' xmlns' + (this.prefix?(':'+this.prefix):'') +
 32.3958 +                    '="' + this.namespaceURI + '"';
 32.3959 +            }
 32.3960 +        }
 32.3961 +
 32.3962 +        // serialize Attribute declarations
 32.3963 +        attrs = this.attributes;
 32.3964 +        attrstring = "";
 32.3965 +        for(i=0;i< attrs.length;i++){
 32.3966 +            if(attrs[i].name.match('xmlns:')) {
 32.3967 +                attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
 32.3968 +            }
 32.3969 +        }
 32.3970 +        for(i=0;i< attrs.length;i++){
 32.3971 +            if(!attrs[i].name.match('xmlns:')) {
 32.3972 +                attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
 32.3973 +            }
 32.3974 +        }
 32.3975 +
 32.3976 +        if(this.hasChildNodes()){
 32.3977 +            // serialize this Element
 32.3978 +            ret += "<" + this.tagName + ns + attrstring +">";
 32.3979 +            ret += this.childNodes.xml;
 32.3980 +            ret += "</" + this.tagName + ">";
 32.3981 +        }else{
 32.3982 +            ret += "<" + this.tagName + ns + attrstring +"/>";
 32.3983 +        }
 32.3984 +
 32.3985 +        return ret;
 32.3986 +    },
 32.3987 +    toString : function(){
 32.3988 +        return '[object Element]';
 32.3989 +    }
 32.3990 +});
 32.3991 +/**
 32.3992 + * @class  DOMException - raised when an operation is impossible to perform
 32.3993 + * @author Jon van Noort (jon@webarcana.com.au)
 32.3994 + * @param  code : int - the exception code (one of the DOMException constants)
 32.3995 + */
 32.3996 +DOMException = function(code) {
 32.3997 +    this.code = code;
 32.3998 +};
 32.3999 +
 32.4000 +// DOMException constants
 32.4001 +// Introduced in DOM Level 1:
 32.4002 +DOMException.INDEX_SIZE_ERR                 = 1;
 32.4003 +DOMException.DOMSTRING_SIZE_ERR             = 2;
 32.4004 +DOMException.HIERARCHY_REQUEST_ERR          = 3;
 32.4005 +DOMException.WRONG_DOCUMENT_ERR             = 4;
 32.4006 +DOMException.INVALID_CHARACTER_ERR          = 5;
 32.4007 +DOMException.NO_DATA_ALLOWED_ERR            = 6;
 32.4008 +DOMException.NO_MODIFICATION_ALLOWED_ERR    = 7;
 32.4009 +DOMException.NOT_FOUND_ERR                  = 8;
 32.4010 +DOMException.NOT_SUPPORTED_ERR              = 9;
 32.4011 +DOMException.INUSE_ATTRIBUTE_ERR            = 10;
 32.4012 +
 32.4013 +// Introduced in DOM Level 2:
 32.4014 +DOMException.INVALID_STATE_ERR              = 11;
 32.4015 +DOMException.SYNTAX_ERR                     = 12;
 32.4016 +DOMException.INVALID_MODIFICATION_ERR       = 13;
 32.4017 +DOMException.NAMESPACE_ERR                  = 14;
 32.4018 +DOMException.INVALID_ACCESS_ERR             = 15;
 32.4019 +
 32.4020 +/**
 32.4021 + * @class  DocumentFragment -
 32.4022 + *      DocumentFragment is a "lightweight" or "minimal" Document object.
 32.4023 + * @extends Node
 32.4024 + * @param  ownerDocument :  The Document object associated with this node.
 32.4025 + */
 32.4026 +DocumentFragment = function(ownerDocument) {
 32.4027 +    Node.apply(this, arguments);
 32.4028 +    this.nodeName  = "#document-fragment";
 32.4029 +};
 32.4030 +DocumentFragment.prototype = new Node();
 32.4031 +__extend__(DocumentFragment.prototype,{
 32.4032 +    get nodeType(){
 32.4033 +        return Node.DOCUMENT_FRAGMENT_NODE;
 32.4034 +    },
 32.4035 +    get xml(){
 32.4036 +        var xml = "",
 32.4037 +        count = this.childNodes.length;
 32.4038 +
 32.4039 +        // create string concatenating the serialized ChildNodes
 32.4040 +        for (var i = 0; i < count; i++) {
 32.4041 +            xml += this.childNodes.item(i).xml;
 32.4042 +        }
 32.4043 +
 32.4044 +        return xml;
 32.4045 +    },
 32.4046 +    toString : function(){
 32.4047 +        return "[object DocumentFragment]";
 32.4048 +    },
 32.4049 +    get localName(){
 32.4050 +        return null;
 32.4051 +    }
 32.4052 +});
 32.4053 +
 32.4054 +
 32.4055 +/**
 32.4056 + * @class  ProcessingInstruction -
 32.4057 + *      The ProcessingInstruction interface represents a
 32.4058 + *      "processing instruction", used in XML as a way to
 32.4059 + *      keep processor-specific information in the text of
 32.4060 + *      the document
 32.4061 + * @extends Node
 32.4062 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4063 + * @param  ownerDocument :  The Document object associated with this node.
 32.4064 + */
 32.4065 +ProcessingInstruction = function(ownerDocument) {
 32.4066 +    Node.apply(this, arguments);
 32.4067 +};
 32.4068 +ProcessingInstruction.prototype = new Node();
 32.4069 +__extend__(ProcessingInstruction.prototype, {
 32.4070 +    get data(){
 32.4071 +        return this.nodeValue;
 32.4072 +    },
 32.4073 +    set data(data){
 32.4074 +        // throw Exception if Node is readonly
 32.4075 +        if (__ownerDocument__(this).errorChecking && this._readonly) {
 32.4076 +            throw(new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR));
 32.4077 +        }
 32.4078 +        this.nodeValue = data;
 32.4079 +    },
 32.4080 +    get textContent(){
 32.4081 +        return this.data;
 32.4082 +    },
 32.4083 +    get localName(){
 32.4084 +        return null;
 32.4085 +    },
 32.4086 +    get target(){
 32.4087 +      // The target of this processing instruction.
 32.4088 +      // XML defines this as being the first token following the markup that begins the processing instruction.
 32.4089 +      // The content of this processing instruction.
 32.4090 +        return this.nodeName;
 32.4091 +    },
 32.4092 +    set target(value){
 32.4093 +      // The target of this processing instruction.
 32.4094 +      // XML defines this as being the first token following the markup that begins the processing instruction.
 32.4095 +      // The content of this processing instruction.
 32.4096 +        this.nodeName = value;
 32.4097 +    },
 32.4098 +    get nodeType(){
 32.4099 +        return Node.PROCESSING_INSTRUCTION_NODE;
 32.4100 +    },
 32.4101 +    get xml(){
 32.4102 +        return "<?" + this.nodeName +" "+ this.nodeValue + "?>";
 32.4103 +    },
 32.4104 +    toString : function(){
 32.4105 +        return "[object ProcessingInstruction]";
 32.4106 +    }
 32.4107 +});
 32.4108 +
 32.4109 +
 32.4110 +/**
 32.4111 + * @author envjs team
 32.4112 + */
 32.4113 +
 32.4114 +Entity = function() {
 32.4115 +    throw new Error("Entity Not Implemented" );
 32.4116 +};
 32.4117 +
 32.4118 +Entity.constants = {
 32.4119 +        // content taken from W3C "HTML 4.01 Specification"
 32.4120 +        //                        "W3C Recommendation 24 December 1999"
 32.4121 +
 32.4122 +    nbsp: "\u00A0",
 32.4123 +    iexcl: "\u00A1",
 32.4124 +    cent: "\u00A2",
 32.4125 +    pound: "\u00A3",
 32.4126 +    curren: "\u00A4",
 32.4127 +    yen: "\u00A5",
 32.4128 +    brvbar: "\u00A6",
 32.4129 +    sect: "\u00A7",
 32.4130 +    uml: "\u00A8",
 32.4131 +    copy: "\u00A9",
 32.4132 +    ordf: "\u00AA",
 32.4133 +    laquo: "\u00AB",
 32.4134 +    not: "\u00AC",
 32.4135 +    shy: "\u00AD",
 32.4136 +    reg: "\u00AE",
 32.4137 +    macr: "\u00AF",
 32.4138 +    deg: "\u00B0",
 32.4139 +    plusmn: "\u00B1",
 32.4140 +    sup2: "\u00B2",
 32.4141 +    sup3: "\u00B3",
 32.4142 +    acute: "\u00B4",
 32.4143 +    micro: "\u00B5",
 32.4144 +    para: "\u00B6",
 32.4145 +    middot: "\u00B7",
 32.4146 +    cedil: "\u00B8",
 32.4147 +    sup1: "\u00B9",
 32.4148 +    ordm: "\u00BA",
 32.4149 +    raquo: "\u00BB",
 32.4150 +    frac14: "\u00BC",
 32.4151 +    frac12: "\u00BD",
 32.4152 +    frac34: "\u00BE",
 32.4153 +    iquest: "\u00BF",
 32.4154 +    Agrave: "\u00C0",
 32.4155 +    Aacute: "\u00C1",
 32.4156 +    Acirc: "\u00C2",
 32.4157 +    Atilde: "\u00C3",
 32.4158 +    Auml: "\u00C4",
 32.4159 +    Aring: "\u00C5",
 32.4160 +    AElig: "\u00C6",
 32.4161 +    Ccedil: "\u00C7",
 32.4162 +    Egrave: "\u00C8",
 32.4163 +    Eacute: "\u00C9",
 32.4164 +    Ecirc: "\u00CA",
 32.4165 +    Euml: "\u00CB",
 32.4166 +    Igrave: "\u00CC",
 32.4167 +    Iacute: "\u00CD",
 32.4168 +    Icirc: "\u00CE",
 32.4169 +    Iuml: "\u00CF",
 32.4170 +    ETH: "\u00D0",
 32.4171 +    Ntilde: "\u00D1",
 32.4172 +    Ograve: "\u00D2",
 32.4173 +    Oacute: "\u00D3",
 32.4174 +    Ocirc: "\u00D4",
 32.4175 +    Otilde: "\u00D5",
 32.4176 +    Ouml: "\u00D6",
 32.4177 +    times: "\u00D7",
 32.4178 +    Oslash: "\u00D8",
 32.4179 +    Ugrave: "\u00D9",
 32.4180 +    Uacute: "\u00DA",
 32.4181 +    Ucirc: "\u00DB",
 32.4182 +    Uuml: "\u00DC",
 32.4183 +    Yacute: "\u00DD",
 32.4184 +    THORN: "\u00DE",
 32.4185 +    szlig: "\u00DF",
 32.4186 +    agrave: "\u00E0",
 32.4187 +    aacute: "\u00E1",
 32.4188 +    acirc: "\u00E2",
 32.4189 +    atilde: "\u00E3",
 32.4190 +    auml: "\u00E4",
 32.4191 +    aring: "\u00E5",
 32.4192 +    aelig: "\u00E6",
 32.4193 +    ccedil: "\u00E7",
 32.4194 +    egrave: "\u00E8",
 32.4195 +    eacute: "\u00E9",
 32.4196 +    ecirc: "\u00EA",
 32.4197 +    euml: "\u00EB",
 32.4198 +    igrave: "\u00EC",
 32.4199 +    iacute: "\u00ED",
 32.4200 +    icirc: "\u00EE",
 32.4201 +    iuml: "\u00EF",
 32.4202 +    eth: "\u00F0",
 32.4203 +    ntilde: "\u00F1",
 32.4204 +    ograve: "\u00F2",
 32.4205 +    oacute: "\u00F3",
 32.4206 +    ocirc: "\u00F4",
 32.4207 +    otilde: "\u00F5",
 32.4208 +    ouml: "\u00F6",
 32.4209 +    divide: "\u00F7",
 32.4210 +    oslash: "\u00F8",
 32.4211 +    ugrave: "\u00F9",
 32.4212 +    uacute: "\u00FA",
 32.4213 +    ucirc: "\u00FB",
 32.4214 +    uuml: "\u00FC",
 32.4215 +    yacute: "\u00FD",
 32.4216 +    thorn: "\u00FE",
 32.4217 +    yuml: "\u00FF",
 32.4218 +    fnof: "\u0192",
 32.4219 +    Alpha: "\u0391",
 32.4220 +    Beta: "\u0392",
 32.4221 +    Gamma: "\u0393",
 32.4222 +    Delta: "\u0394",
 32.4223 +    Epsilon: "\u0395",
 32.4224 +    Zeta: "\u0396",
 32.4225 +    Eta: "\u0397",
 32.4226 +    Theta: "\u0398",
 32.4227 +    Iota: "\u0399",
 32.4228 +    Kappa: "\u039A",
 32.4229 +    Lambda: "\u039B",
 32.4230 +    Mu: "\u039C",
 32.4231 +    Nu: "\u039D",
 32.4232 +    Xi: "\u039E",
 32.4233 +    Omicron: "\u039F",
 32.4234 +    Pi: "\u03A0",
 32.4235 +    Rho: "\u03A1",
 32.4236 +    Sigma: "\u03A3",
 32.4237 +    Tau: "\u03A4",
 32.4238 +    Upsilon: "\u03A5",
 32.4239 +    Phi: "\u03A6",
 32.4240 +    Chi: "\u03A7",
 32.4241 +    Psi: "\u03A8",
 32.4242 +    Omega: "\u03A9",
 32.4243 +    alpha: "\u03B1",
 32.4244 +    beta: "\u03B2",
 32.4245 +    gamma: "\u03B3",
 32.4246 +    delta: "\u03B4",
 32.4247 +    epsilon: "\u03B5",
 32.4248 +    zeta: "\u03B6",
 32.4249 +    eta: "\u03B7",
 32.4250 +    theta: "\u03B8",
 32.4251 +    iota: "\u03B9",
 32.4252 +    kappa: "\u03BA",
 32.4253 +    lambda: "\u03BB",
 32.4254 +    mu: "\u03BC",
 32.4255 +    nu: "\u03BD",
 32.4256 +    xi: "\u03BE",
 32.4257 +    omicron: "\u03BF",
 32.4258 +    pi: "\u03C0",
 32.4259 +    rho: "\u03C1",
 32.4260 +    sigmaf: "\u03C2",
 32.4261 +    sigma: "\u03C3",
 32.4262 +    tau: "\u03C4",
 32.4263 +    upsilon: "\u03C5",
 32.4264 +    phi: "\u03C6",
 32.4265 +    chi: "\u03C7",
 32.4266 +    psi: "\u03C8",
 32.4267 +    omega: "\u03C9",
 32.4268 +    thetasym: "\u03D1",
 32.4269 +    upsih: "\u03D2",
 32.4270 +    piv: "\u03D6",
 32.4271 +    bull: "\u2022",
 32.4272 +    hellip: "\u2026",
 32.4273 +    prime: "\u2032",
 32.4274 +    Prime: "\u2033",
 32.4275 +    oline: "\u203E",
 32.4276 +    frasl: "\u2044",
 32.4277 +    weierp: "\u2118",
 32.4278 +    image: "\u2111",
 32.4279 +    real: "\u211C",
 32.4280 +    trade: "\u2122",
 32.4281 +    alefsym: "\u2135",
 32.4282 +    larr: "\u2190",
 32.4283 +    uarr: "\u2191",
 32.4284 +    rarr: "\u2192",
 32.4285 +    darr: "\u2193",
 32.4286 +    harr: "\u2194",
 32.4287 +    crarr: "\u21B5",
 32.4288 +    lArr: "\u21D0",
 32.4289 +    uArr: "\u21D1",
 32.4290 +    rArr: "\u21D2",
 32.4291 +    dArr: "\u21D3",
 32.4292 +    hArr: "\u21D4",
 32.4293 +    forall: "\u2200",
 32.4294 +    part: "\u2202",
 32.4295 +    exist: "\u2203",
 32.4296 +    empty: "\u2205",
 32.4297 +    nabla: "\u2207",
 32.4298 +    isin: "\u2208",
 32.4299 +    notin: "\u2209",
 32.4300 +    ni: "\u220B",
 32.4301 +    prod: "\u220F",
 32.4302 +    sum: "\u2211",
 32.4303 +    minus: "\u2212",
 32.4304 +    lowast: "\u2217",
 32.4305 +    radic: "\u221A",
 32.4306 +    prop: "\u221D",
 32.4307 +    infin: "\u221E",
 32.4308 +    ang: "\u2220",
 32.4309 +    and: "\u2227",
 32.4310 +    or: "\u2228",
 32.4311 +    cap: "\u2229",
 32.4312 +    cup: "\u222A",
 32.4313 +    intXX: "\u222B",
 32.4314 +    there4: "\u2234",
 32.4315 +    sim: "\u223C",
 32.4316 +    cong: "\u2245",
 32.4317 +    asymp: "\u2248",
 32.4318 +    ne: "\u2260",
 32.4319 +    equiv: "\u2261",
 32.4320 +    le: "\u2264",
 32.4321 +    ge: "\u2265",
 32.4322 +    sub: "\u2282",
 32.4323 +    sup: "\u2283",
 32.4324 +    nsub: "\u2284",
 32.4325 +    sube: "\u2286",
 32.4326 +    supe: "\u2287",
 32.4327 +    oplus: "\u2295",
 32.4328 +    otimes: "\u2297",
 32.4329 +    perp: "\u22A5",
 32.4330 +    sdot: "\u22C5",
 32.4331 +    lceil: "\u2308",
 32.4332 +    rceil: "\u2309",
 32.4333 +    lfloor: "\u230A",
 32.4334 +    rfloor: "\u230B",
 32.4335 +    lang: "\u2329",
 32.4336 +    rang: "\u232A",
 32.4337 +    loz: "\u25CA",
 32.4338 +    spades: "\u2660",
 32.4339 +    clubs: "\u2663",
 32.4340 +    hearts: "\u2665",
 32.4341 +    diams: "\u2666",
 32.4342 +    quot: "\u0022",
 32.4343 +    amp: "\u0026",
 32.4344 +    lt: "\u003C",
 32.4345 +    gt: "\u003E",
 32.4346 +    OElig: "\u0152",
 32.4347 +    oelig: "\u0153",
 32.4348 +    Scaron: "\u0160",
 32.4349 +    scaron: "\u0161",
 32.4350 +    Yuml: "\u0178",
 32.4351 +    circ: "\u02C6",
 32.4352 +    tilde: "\u02DC",
 32.4353 +    ensp: "\u2002",
 32.4354 +    emsp: "\u2003",
 32.4355 +    thinsp: "\u2009",
 32.4356 +    zwnj: "\u200C",
 32.4357 +    zwj: "\u200D",
 32.4358 +    lrm: "\u200E",
 32.4359 +    rlm: "\u200F",
 32.4360 +    ndash: "\u2013",
 32.4361 +    mdash: "\u2014",
 32.4362 +    lsquo: "\u2018",
 32.4363 +    rsquo: "\u2019",
 32.4364 +    sbquo: "\u201A",
 32.4365 +    ldquo: "\u201C",
 32.4366 +    rdquo: "\u201D",
 32.4367 +    bdquo: "\u201E",
 32.4368 +    dagger: "\u2020",
 32.4369 +    Dagger: "\u2021",
 32.4370 +    permil: "\u2030",
 32.4371 +    lsaquo: "\u2039",
 32.4372 +    rsaquo: "\u203A",
 32.4373 +    euro: "\u20AC",
 32.4374 +
 32.4375 +    // non-standard entities
 32.4376 +    apos: "'"
 32.4377 +};
 32.4378 +
 32.4379 +/**
 32.4380 + * @author envjs team
 32.4381 + */
 32.4382 +
 32.4383 +EntityReference = function() {
 32.4384 +    throw new Error("EntityReference Not Implemented" );
 32.4385 +};
 32.4386 +
 32.4387 +/**
 32.4388 + * @class  DOMImplementation -
 32.4389 + *      provides a number of methods for performing operations
 32.4390 + *      that are independent of any particular instance of the
 32.4391 + *      document object model.
 32.4392 + *
 32.4393 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4394 + */
 32.4395 +DOMImplementation = function() {
 32.4396 +    this.preserveWhiteSpace = false;  // by default, ignore whitespace
 32.4397 +    this.namespaceAware = true;       // by default, handle namespaces
 32.4398 +    this.errorChecking  = true;      // by default, test for exceptions
 32.4399 +};
 32.4400 +
 32.4401 +__extend__(DOMImplementation.prototype,{
 32.4402 +    // @param  feature : string - The package name of the feature to test.
 32.4403 +    //      the legal only values are "XML" and "CORE" (case-insensitive).
 32.4404 +    // @param  version : string - This is the version number of the package
 32.4405 +    //       name to test. In Level 1, this is the string "1.0".*
 32.4406 +    // @return : boolean
 32.4407 +    hasFeature : function(feature, version) {
 32.4408 +        var ret = false;
 32.4409 +        if (feature.toLowerCase() == "xml") {
 32.4410 +            ret = (!version || (version == "1.0") || (version == "2.0"));
 32.4411 +        }
 32.4412 +        else if (feature.toLowerCase() == "core") {
 32.4413 +            ret = (!version || (version == "2.0"));
 32.4414 +        }
 32.4415 +        else if (feature == "http://www.w3.org/TR/SVG11/feature#BasicStructure") {
 32.4416 +            ret = (version == "1.1");
 32.4417 +        }
 32.4418 +        return ret;
 32.4419 +    },
 32.4420 +    createDocumentType : function(qname, publicId, systemId){
 32.4421 +        var doctype = new DocumentType();
 32.4422 +        doctype.nodeName = qname?qname.toUpperCase():null;
 32.4423 +        doctype.publicId = publicId?publicId:null;
 32.4424 +        doctype.systemId = systemId?systemId:null;
 32.4425 +        return doctype;
 32.4426 +    },
 32.4427 +    createDocument : function(nsuri, qname, doctype){
 32.4428 +
 32.4429 +        var doc = null, documentElement;
 32.4430 +
 32.4431 +        doc = new Document(this, null);
 32.4432 +        if(doctype){
 32.4433 +            doc.doctype = doctype;
 32.4434 +        }
 32.4435 +
 32.4436 +        if(nsuri && qname){
 32.4437 +            documentElement = doc.createElementNS(nsuri, qname);
 32.4438 +        }else if(qname){
 32.4439 +            documentElement = doc.createElement(qname);
 32.4440 +        }
 32.4441 +        if(documentElement){
 32.4442 +            doc.appendChild(documentElement);
 32.4443 +        }
 32.4444 +        return doc;
 32.4445 +    },
 32.4446 +    createHTMLDocument : function(title){
 32.4447 +        var doc = new HTMLDocument($implementation, null, "");
 32.4448 +        var html = doc.createElement("html"); doc.appendChild(html);
 32.4449 +        var head = doc.createElement("head"); html.appendChild(head);
 32.4450 +        var body = doc.createElement("body"); html.appendChild(body);
 32.4451 +        var t = doc.createElement("title"); head.appendChild(t);
 32.4452 +        if( title) {
 32.4453 +            t.appendChild(doc.createTextNode(title));
 32.4454 +        }
 32.4455 +        return doc;
 32.4456 +    },
 32.4457 +    translateErrCode : function(code) {
 32.4458 +        //convert DOMException Code to human readable error message;
 32.4459 +      var msg = "";
 32.4460 +
 32.4461 +      switch (code) {
 32.4462 +        case DOMException.INDEX_SIZE_ERR :                // 1
 32.4463 +           msg = "INDEX_SIZE_ERR: Index out of bounds";
 32.4464 +           break;
 32.4465 +
 32.4466 +        case DOMException.DOMSTRING_SIZE_ERR :            // 2
 32.4467 +           msg = "DOMSTRING_SIZE_ERR: The resulting string is too long to fit in a DOMString";
 32.4468 +           break;
 32.4469 +
 32.4470 +        case DOMException.HIERARCHY_REQUEST_ERR :         // 3
 32.4471 +           msg = "HIERARCHY_REQUEST_ERR: The Node can not be inserted at this location";
 32.4472 +           break;
 32.4473 +
 32.4474 +        case DOMException.WRONG_DOCUMENT_ERR :            // 4
 32.4475 +           msg = "WRONG_DOCUMENT_ERR: The source and the destination Documents are not the same";
 32.4476 +           break;
 32.4477 +
 32.4478 +        case DOMException.INVALID_CHARACTER_ERR :         // 5
 32.4479 +           msg = "INVALID_CHARACTER_ERR: The string contains an invalid character";
 32.4480 +           break;
 32.4481 +
 32.4482 +        case DOMException.NO_DATA_ALLOWED_ERR :           // 6
 32.4483 +           msg = "NO_DATA_ALLOWED_ERR: This Node / NodeList does not support data";
 32.4484 +           break;
 32.4485 +
 32.4486 +        case DOMException.NO_MODIFICATION_ALLOWED_ERR :   // 7
 32.4487 +           msg = "NO_MODIFICATION_ALLOWED_ERR: This object cannot be modified";
 32.4488 +           break;
 32.4489 +
 32.4490 +        case DOMException.NOT_FOUND_ERR :                 // 8
 32.4491 +           msg = "NOT_FOUND_ERR: The item cannot be found";
 32.4492 +           break;
 32.4493 +
 32.4494 +        case DOMException.NOT_SUPPORTED_ERR :             // 9
 32.4495 +           msg = "NOT_SUPPORTED_ERR: This implementation does not support function";
 32.4496 +           break;
 32.4497 +
 32.4498 +        case DOMException.INUSE_ATTRIBUTE_ERR :           // 10
 32.4499 +           msg = "INUSE_ATTRIBUTE_ERR: The Attribute has already been assigned to another Element";
 32.4500 +           break;
 32.4501 +
 32.4502 +        // Introduced in DOM Level 2:
 32.4503 +        case DOMException.INVALID_STATE_ERR :             // 11
 32.4504 +           msg = "INVALID_STATE_ERR: The object is no longer usable";
 32.4505 +           break;
 32.4506 +
 32.4507 +        case DOMException.SYNTAX_ERR :                    // 12
 32.4508 +           msg = "SYNTAX_ERR: Syntax error";
 32.4509 +           break;
 32.4510 +
 32.4511 +        case DOMException.INVALID_MODIFICATION_ERR :      // 13
 32.4512 +           msg = "INVALID_MODIFICATION_ERR: Cannot change the type of the object";
 32.4513 +           break;
 32.4514 +
 32.4515 +        case DOMException.NAMESPACE_ERR :                 // 14
 32.4516 +           msg = "NAMESPACE_ERR: The namespace declaration is incorrect";
 32.4517 +           break;
 32.4518 +
 32.4519 +        case DOMException.INVALID_ACCESS_ERR :            // 15
 32.4520 +           msg = "INVALID_ACCESS_ERR: The object does not support this function";
 32.4521 +           break;
 32.4522 +
 32.4523 +        default :
 32.4524 +           msg = "UNKNOWN: Unknown Exception Code ("+ code +")";
 32.4525 +      }
 32.4526 +
 32.4527 +      return msg;
 32.4528 +    },
 32.4529 +    toString : function(){
 32.4530 +        return "[object DOMImplementation]";
 32.4531 +    }
 32.4532 +});
 32.4533 +
 32.4534 +
 32.4535 +
 32.4536 +/**
 32.4537 + * @method DOMImplementation._isNamespaceDeclaration - Return true, if attributeName is a namespace declaration
 32.4538 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4539 + * @param  attributeName : string - the attribute name
 32.4540 + * @return : boolean
 32.4541 + */
 32.4542 +function __isNamespaceDeclaration__(attributeName) {
 32.4543 +  // test if attributeName is 'xmlns'
 32.4544 +  return (attributeName.indexOf('xmlns') > -1);
 32.4545 +}
 32.4546 +
 32.4547 +/**
 32.4548 + * @method DOMImplementation._isIdDeclaration - Return true, if attributeName is an id declaration
 32.4549 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4550 + * @param  attributeName : string - the attribute name
 32.4551 + * @return : boolean
 32.4552 + */
 32.4553 +function __isIdDeclaration__(attributeName) {
 32.4554 +  // test if attributeName is 'id' (case insensitive)
 32.4555 +  return attributeName?(attributeName.toLowerCase() == 'id'):false;
 32.4556 +}
 32.4557 +
 32.4558 +/**
 32.4559 + * @method DOMImplementation._isValidName - Return true,
 32.4560 + *   if name contains no invalid characters
 32.4561 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4562 + * @param  name : string - the candidate name
 32.4563 + * @return : boolean
 32.4564 + */
 32.4565 +function __isValidName__(name) {
 32.4566 +  // test if name contains only valid characters
 32.4567 +  return name.match(re_validName);
 32.4568 +}
 32.4569 +var re_validName = /^[a-zA-Z_:][a-zA-Z0-9\.\-_:]*$/;
 32.4570 +
 32.4571 +/**
 32.4572 + * @method DOMImplementation._isValidString - Return true, if string does not contain any illegal chars
 32.4573 + *  All of the characters 0 through 31 and character 127 are nonprinting control characters.
 32.4574 + *  With the exception of characters 09, 10, and 13, (Ox09, Ox0A, and Ox0D)
 32.4575 + *  Note: different from _isValidName in that ValidStrings may contain spaces
 32.4576 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4577 + * @param  name : string - the candidate string
 32.4578 + * @return : boolean
 32.4579 + */
 32.4580 +function __isValidString__(name) {
 32.4581 +  // test that string does not contains invalid characters
 32.4582 +  return (name.search(re_invalidStringChars) < 0);
 32.4583 +}
 32.4584 +var re_invalidStringChars = /\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\x0B|\x0C|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F|\x7F/;
 32.4585 +
 32.4586 +/**
 32.4587 + * @method DOMImplementation._parseNSName - parse the namespace name.
 32.4588 + *  if there is no colon, the
 32.4589 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4590 + * @param  qualifiedName : string - The qualified name
 32.4591 + * @return : NSName - [
 32.4592 +         .prefix        : string - The prefix part of the qname
 32.4593 +         .namespaceName : string - The namespaceURI part of the qname
 32.4594 +    ]
 32.4595 + */
 32.4596 +function __parseNSName__(qualifiedName) {
 32.4597 +    var resultNSName = {};
 32.4598 +    // unless the qname has a namespaceName, the prefix is the entire String
 32.4599 +    resultNSName.prefix          = qualifiedName;
 32.4600 +    resultNSName.namespaceName   = "";
 32.4601 +    // split on ':'
 32.4602 +    var delimPos = qualifiedName.indexOf(':');
 32.4603 +    if (delimPos > -1) {
 32.4604 +        // get prefix
 32.4605 +        resultNSName.prefix        = qualifiedName.substring(0, delimPos);
 32.4606 +        // get namespaceName
 32.4607 +        resultNSName.namespaceName = qualifiedName.substring(delimPos +1, qualifiedName.length);
 32.4608 +    }
 32.4609 +    return resultNSName;
 32.4610 +}
 32.4611 +
 32.4612 +/**
 32.4613 + * @method DOMImplementation._parseQName - parse the qualified name
 32.4614 + * @author Jon van Noort (jon@webarcana.com.au)
 32.4615 + * @param  qualifiedName : string - The qualified name
 32.4616 + * @return : QName
 32.4617 + */
 32.4618 +function __parseQName__(qualifiedName) {
 32.4619 +    var resultQName = {};
 32.4620 +    // unless the qname has a prefix, the local name is the entire String
 32.4621 +    resultQName.localName = qualifiedName;
 32.4622 +    resultQName.prefix    = "";
 32.4623 +    // split on ':'
 32.4624 +    var delimPos = qualifiedName.indexOf(':');
 32.4625 +    if (delimPos > -1) {
 32.4626 +        // get prefix
 32.4627 +        resultQName.prefix    = qualifiedName.substring(0, delimPos);
 32.4628 +        // get localName
 32.4629 +        resultQName.localName = qualifiedName.substring(delimPos +1, qualifiedName.length);
 32.4630 +    }
 32.4631 +    return resultQName;
 32.4632 +}
 32.4633 +/**
 32.4634 + * @author envjs team
 32.4635 + */
 32.4636 +Notation = function() {
 32.4637 +    throw new Error("Notation Not Implemented" );
 32.4638 +};/**
 32.4639 + * @author thatcher
 32.4640 + */
 32.4641 +Range = function(){
 32.4642 +
 32.4643 +};
 32.4644 +
 32.4645 +__extend__(Range.prototype, {
 32.4646 +    get startContainer(){
 32.4647 +
 32.4648 +    },
 32.4649 +    get endContainer(){
 32.4650 +
 32.4651 +    },
 32.4652 +    get startOffset(){
 32.4653 +
 32.4654 +    },
 32.4655 +    get endOffset(){
 32.4656 +
 32.4657 +    },
 32.4658 +    get collapsed(){
 32.4659 +
 32.4660 +    },
 32.4661 +    get commonAncestorContainer(){
 32.4662 +
 32.4663 +    },
 32.4664 +    setStart: function(refNode, offset){//throws RangeException
 32.4665 +
 32.4666 +    },
 32.4667 +    setEnd: function(refNode, offset){//throws RangeException
 32.4668 +    
 32.4669 +    },
 32.4670 +    setStartBefore: function(refNode){//throws RangeException
 32.4671 +    
 32.4672 +    },
 32.4673 +    setStartAfter: function(refNode){//throws RangeException
 32.4674 +    
 32.4675 +    },
 32.4676 +    setEndBefore: function(refNode){//throws RangeException
 32.4677 +    
 32.4678 +    },
 32.4679 +    setEndAfter: function(refNode){//throws RangeException
 32.4680 +    
 32.4681 +    },
 32.4682 +    collapse: function(toStart){//throws RangeException
 32.4683 +    
 32.4684 +    },
 32.4685 +    selectNode: function(refNode){//throws RangeException
 32.4686 +    
 32.4687 +    },
 32.4688 +    selectNodeContents: function(refNode){//throws RangeException
 32.4689 +    
 32.4690 +    },
 32.4691 +    compareBoundaryPoints: function(how, sourceRange){
 32.4692 +
 32.4693 +    },
 32.4694 +    deleteContents: function(){
 32.4695 +
 32.4696 +    },
 32.4697 +    extractContents: function(){
 32.4698 +
 32.4699 +    },
 32.4700 +    cloneContents: function(){
 32.4701 +
 32.4702 +    },
 32.4703 +    insertNode: function(newNode){
 32.4704 +
 32.4705 +    },
 32.4706 +    surroundContents: function(newParent){
 32.4707 +
 32.4708 +    },
 32.4709 +    cloneRange: function(){
 32.4710 +
 32.4711 +    },
 32.4712 +    toString: function(){
 32.4713 +        return '[object Range]';
 32.4714 +    },
 32.4715 +    detach: function(){
 32.4716 +
 32.4717 +    }
 32.4718 +});
 32.4719 +
 32.4720 +
 32.4721 +  // CompareHow
 32.4722 +Range.START_TO_START                 = 0;
 32.4723 +Range.START_TO_END                   = 1;
 32.4724 +Range.END_TO_END                     = 2;
 32.4725 +Range.END_TO_START                   = 3;
 32.4726 +  
 32.4727 +/*
 32.4728 + * Forward declarations
 32.4729 + */
 32.4730 +var __isValidNamespace__;
 32.4731 +
 32.4732 +/**
 32.4733 + * @class  Document - The Document interface represents the entire HTML
 32.4734 + *      or XML document. Conceptually, it is the root of the document tree,
 32.4735 + *      and provides the primary access to the document's data.
 32.4736 + *
 32.4737 + * @extends Node
 32.4738 + * @param  implementation : DOMImplementation - the creator Implementation
 32.4739 + */
 32.4740 +Document = function(implementation, docParentWindow) {
 32.4741 +    Node.apply(this, arguments);
 32.4742 +
 32.4743 +    //TODO: Temporary!!! Cnage back to true!!!
 32.4744 +    this.async = true;
 32.4745 +    // The Document Type Declaration (see DocumentType) associated with this document
 32.4746 +    this.doctype = null;
 32.4747 +    // The DOMImplementation object that handles this document.
 32.4748 +    this.implementation = implementation;
 32.4749 +
 32.4750 +    this.nodeName  = "#document";
 32.4751 +    // initially false, set to true by parser
 32.4752 +    this.parsing = false;
 32.4753 +    this.baseURI = 'about:blank';
 32.4754 +
 32.4755 +    this.ownerDocument = null;
 32.4756 +
 32.4757 +    this.importing = false;
 32.4758 +};
 32.4759 +
 32.4760 +Document.prototype = new Node();
 32.4761 +__extend__(Document.prototype,{
 32.4762 +    get localName(){
 32.4763 +        return null;
 32.4764 +    },
 32.4765 +    get textContent(){
 32.4766 +        return null;
 32.4767 +    },
 32.4768 +    get all(){
 32.4769 +        return this.getElementsByTagName("*");
 32.4770 +    },
 32.4771 +    get documentElement(){
 32.4772 +        var i, length = this.childNodes?this.childNodes.length:0;
 32.4773 +        for(i=0;i<length;i++){
 32.4774 +            if(this.childNodes[i].nodeType === Node.ELEMENT_NODE){
 32.4775 +                return this.childNodes[i];
 32.4776 +            }
 32.4777 +        }
 32.4778 +        return null;
 32.4779 +    },
 32.4780 +    get documentURI(){
 32.4781 +        return this.baseURI;
 32.4782 +    },
 32.4783 +    createExpression: function(xpath, nsuriMap){
 32.4784 +        return new XPathExpression(xpath, nsuriMap);
 32.4785 +    },
 32.4786 +    createDocumentFragment: function() {
 32.4787 +        var node = new DocumentFragment(this);
 32.4788 +        return node;
 32.4789 +    },
 32.4790 +    createTextNode: function(data) {
 32.4791 +        var node = new Text(this);
 32.4792 +        node.data = data;
 32.4793 +        return node;
 32.4794 +    },
 32.4795 +    createComment: function(data) {
 32.4796 +        var node = new Comment(this);
 32.4797 +        node.data = data;
 32.4798 +        return node;
 32.4799 +    },
 32.4800 +    createCDATASection : function(data) {
 32.4801 +        var node = new CDATASection(this);
 32.4802 +        node.data = data;
 32.4803 +        return node;
 32.4804 +    },
 32.4805 +    createProcessingInstruction: function(target, data) {
 32.4806 +        // throw Exception if the target string contains an illegal character
 32.4807 +        if (__ownerDocument__(this).implementation.errorChecking &&
 32.4808 +            (!__isValidName__(target))) {
 32.4809 +            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.4810 +        }
 32.4811 +
 32.4812 +        var node = new ProcessingInstruction(this);
 32.4813 +        node.target = target;
 32.4814 +        node.data = data;
 32.4815 +        return node;
 32.4816 +    },
 32.4817 +    createElement: function(tagName) {
 32.4818 +        // throw Exception if the tagName string contains an illegal character
 32.4819 +        if (__ownerDocument__(this).implementation.errorChecking &&
 32.4820 +            (!__isValidName__(tagName))) {
 32.4821 +            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.4822 +        }
 32.4823 +        var node = new Element(this);
 32.4824 +        node.nodeName = tagName;
 32.4825 +        return node;
 32.4826 +    },
 32.4827 +    createElementNS : function(namespaceURI, qualifiedName) {
 32.4828 +        //we use this as a parser flag to ignore the xhtml
 32.4829 +        //namespace assumed by the parser
 32.4830 +        //console.log('creating element %s %s', namespaceURI, qualifiedName);
 32.4831 +        if(this.baseURI === 'http://envjs.com/xml' &&
 32.4832 +            namespaceURI === 'http://www.w3.org/1999/xhtml'){
 32.4833 +            return this.createElement(qualifiedName);
 32.4834 +        }
 32.4835 +        //console.log('createElementNS %s %s', namespaceURI, qualifiedName);
 32.4836 +        if (__ownerDocument__(this).implementation.errorChecking) {
 32.4837 +            // throw Exception if the Namespace is invalid
 32.4838 +            if (!__isValidNamespace__(this, namespaceURI, qualifiedName)) {
 32.4839 +                throw(new DOMException(DOMException.NAMESPACE_ERR));
 32.4840 +            }
 32.4841 +
 32.4842 +            // throw Exception if the qualifiedName string contains an illegal character
 32.4843 +            if (!__isValidName__(qualifiedName)) {
 32.4844 +                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.4845 +            }
 32.4846 +        }
 32.4847 +        var node  = new Element(this);
 32.4848 +        var qname = __parseQName__(qualifiedName);
 32.4849 +        node.namespaceURI = namespaceURI;
 32.4850 +        node.prefix       = qname.prefix;
 32.4851 +        node.nodeName     = qualifiedName;
 32.4852 +
 32.4853 +        //console.log('created element %s %s', namespaceURI, qualifiedName);
 32.4854 +        return node;
 32.4855 +    },
 32.4856 +    createAttribute : function(name) {
 32.4857 +        //console.log('createAttribute %s ', name);
 32.4858 +        // throw Exception if the name string contains an illegal character
 32.4859 +        if (__ownerDocument__(this).implementation.errorChecking &&
 32.4860 +            (!__isValidName__(name))) {
 32.4861 +            throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.4862 +        }
 32.4863 +        var node = new Attr(this);
 32.4864 +        node.nodeName = name;
 32.4865 +        return node;
 32.4866 +    },
 32.4867 +    createAttributeNS : function(namespaceURI, qualifiedName) {
 32.4868 +        //we use this as a parser flag to ignore the xhtml
 32.4869 +        //namespace assumed by the parser
 32.4870 +        if(this.baseURI === 'http://envjs.com/xml' &&
 32.4871 +            namespaceURI === 'http://www.w3.org/1999/xhtml'){
 32.4872 +            return this.createAttribute(qualifiedName);
 32.4873 +        }
 32.4874 +        //console.log('createAttributeNS %s %s', namespaceURI, qualifiedName);
 32.4875 +        // test for exceptions
 32.4876 +        if (this.implementation.errorChecking) {
 32.4877 +            // throw Exception if the Namespace is invalid
 32.4878 +            if (!__isValidNamespace__(this, namespaceURI, qualifiedName, true)) {
 32.4879 +                throw(new DOMException(DOMException.NAMESPACE_ERR));
 32.4880 +            }
 32.4881 +
 32.4882 +            // throw Exception if the qualifiedName string contains an illegal character
 32.4883 +            if (!__isValidName__(qualifiedName)) {
 32.4884 +                throw(new DOMException(DOMException.INVALID_CHARACTER_ERR));
 32.4885 +            }
 32.4886 +        }
 32.4887 +        var node  = new Attr(this);
 32.4888 +        var qname = __parseQName__(qualifiedName);
 32.4889 +        node.namespaceURI = namespaceURI === '' ? null : namespaceURI;
 32.4890 +        node.prefix       = qname.prefix;
 32.4891 +        node.nodeName     = qualifiedName;
 32.4892 +        node.nodeValue    = "";
 32.4893 +        //console.log('attribute %s %s %s', node.namespaceURI, node.prefix, node.nodeName);
 32.4894 +        return node;
 32.4895 +    },
 32.4896 +    createNamespace : function(qualifiedName) {
 32.4897 +        //console.log('createNamespace %s', qualifiedName);
 32.4898 +        // create Namespace specifying 'this' as ownerDocument
 32.4899 +        var node  = new Namespace(this);
 32.4900 +        var qname = __parseQName__(qualifiedName);
 32.4901 +
 32.4902 +        // assign values to properties (and aliases)
 32.4903 +        node.prefix       = qname.prefix;
 32.4904 +        node.localName    = qname.localName;
 32.4905 +        node.name         = qualifiedName;
 32.4906 +        node.nodeValue    = "";
 32.4907 +
 32.4908 +        return node;
 32.4909 +    },
 32.4910 +
 32.4911 +    createRange: function(){
 32.4912 +        return new Range();
 32.4913 +    },
 32.4914 +
 32.4915 +    evaluate: function(xpathText, contextNode, nsuriMapper, resultType, result){
 32.4916 +        //return new XPathExpression().evaluate();
 32.4917 +        throw Error('Document.evaluate not supported yet!');
 32.4918 +    },
 32.4919 +
 32.4920 +    getElementById : function(elementId) {
 32.4921 +        var retNode = null,
 32.4922 +            node;
 32.4923 +        // loop through all Elements
 32.4924 +        var all = this.getElementsByTagName('*');
 32.4925 +        for (var i=0; i < all.length; i++) {
 32.4926 +            node = all[i];
 32.4927 +            // if id matches
 32.4928 +            if (node.id == elementId) {
 32.4929 +                //found the node
 32.4930 +                retNode = node;
 32.4931 +                break;
 32.4932 +            }
 32.4933 +        }
 32.4934 +        return retNode;
 32.4935 +    },
 32.4936 +    normalizeDocument: function(){
 32.4937 +        this.normalize();
 32.4938 +    },
 32.4939 +    get nodeType(){
 32.4940 +        return Node.DOCUMENT_NODE;
 32.4941 +    },
 32.4942 +    get xml(){
 32.4943 +        return this.documentElement.xml;
 32.4944 +    },
 32.4945 +    toString: function(){
 32.4946 +        return "[object XMLDocument]";
 32.4947 +    },
 32.4948 +    get defaultView(){
 32.4949 +        return { getComputedStyle: function(elem){
 32.4950 +            return window.getComputedStyle(elem);
 32.4951 +        }};
 32.4952 +    },
 32.4953 +});
 32.4954 +
 32.4955 +/*
 32.4956 + * Helper function
 32.4957 + *
 32.4958 + */
 32.4959 +__isValidNamespace__ = function(doc, namespaceURI, qualifiedName, isAttribute) {
 32.4960 +
 32.4961 +    if (doc.importing === true) {
 32.4962 +        //we're doing an importNode operation (or a cloneNode) - in both cases, there
 32.4963 +        //is no need to perform any namespace checking since the nodes have to have been valid
 32.4964 +        //to have gotten into the DOM in the first place
 32.4965 +        return true;
 32.4966 +    }
 32.4967 +
 32.4968 +    var valid = true;
 32.4969 +    // parse QName
 32.4970 +    var qName = __parseQName__(qualifiedName);
 32.4971 +
 32.4972 +
 32.4973 +    //only check for namespaces if we're finished parsing
 32.4974 +    if (this.parsing === false) {
 32.4975 +
 32.4976 +        // if the qualifiedName is malformed
 32.4977 +        if (qName.localName.indexOf(":") > -1 ){
 32.4978 +            valid = false;
 32.4979 +        }
 32.4980 +
 32.4981 +        if ((valid) && (!isAttribute)) {
 32.4982 +            // if the namespaceURI is not null
 32.4983 +            if (!namespaceURI) {
 32.4984 +                valid = false;
 32.4985 +            }
 32.4986 +        }
 32.4987 +
 32.4988 +        // if the qualifiedName has a prefix
 32.4989 +        if ((valid) && (qName.prefix === "")) {
 32.4990 +            valid = false;
 32.4991 +        }
 32.4992 +    }
 32.4993 +
 32.4994 +    // if the qualifiedName has a prefix that is "xml" and the namespaceURI is
 32.4995 +    //  different from "http://www.w3.org/XML/1998/namespace" [Namespaces].
 32.4996 +    if ((valid) && (qName.prefix === "xml") && (namespaceURI !== "http://www.w3.org/XML/1998/namespace")) {
 32.4997 +        valid = false;
 32.4998 +    }
 32.4999 +
 32.5000 +    return valid;
 32.5001 +};
 32.5002 +/**
 32.5003 + *
 32.5004 + * This file only handles XML parser.
 32.5005 + * It is extended by parser/domparser.js (and parser/htmlparser.js)
 32.5006 + *
 32.5007 + * This depends on e4x, which some engines may not have.
 32.5008 + *
 32.5009 + * @author thatcher
 32.5010 + */
 32.5011 +DOMParser = function(principle, documentURI, baseURI) {
 32.5012 +    // TODO: why/what should these 3 args do?
 32.5013 +};
 32.5014 +__extend__(DOMParser.prototype,{
 32.5015 +    parseFromString: function(xmlstring, mimetype){
 32.5016 +        var doc = new Document(new DOMImplementation()),
 32.5017 +            e4;
 32.5018 +
 32.5019 +        // The following are e4x directives.
 32.5020 +        // Full spec is here:
 32.5021 +        // http://www.ecma-international.org/publications/standards/Ecma-357.htm
 32.5022 +        //
 32.5023 +        // that is pretty gross, so checkout this summary
 32.5024 +        // http://rephrase.net/days/07/06/e4x
 32.5025 +        //
 32.5026 +        // also see the Mozilla Developer Center:
 32.5027 +        // https://developer.mozilla.org/en/E4X
 32.5028 +        //
 32.5029 +        XML.ignoreComments = false;
 32.5030 +        XML.ignoreProcessingInstructions = false;
 32.5031 +        XML.ignoreWhitespace = false;
 32.5032 +
 32.5033 +        // for some reason e4x can't handle initial xml declarations
 32.5034 +        // https://bugzilla.mozilla.org/show_bug.cgi?id=336551
 32.5035 +        // The official workaround is the big regexp below
 32.5036 +        // but simpler one seems to be ok
 32.5037 +        // xmlstring = xmlstring.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "");
 32.5038 +        //
 32.5039 +        xmlstring = xmlstring.replace(/<\?xml.*\?>/);
 32.5040 +
 32.5041 +        e4 = new XMLList(xmlstring);
 32.5042 +
 32.5043 +        __toDomNode__(e4, doc, doc);
 32.5044 +
 32.5045 +        //console.log('xml \n %s', doc.documentElement.xml);
 32.5046 +        return doc;
 32.5047 +    }
 32.5048 +});
 32.5049 +
 32.5050 +var __toDomNode__ = function(e4, parent, doc){
 32.5051 +    var xnode,
 32.5052 +        domnode,
 32.5053 +        children,
 32.5054 +        target,
 32.5055 +        value,
 32.5056 +        length,
 32.5057 +        element,
 32.5058 +        kind,
 32.5059 +        item;
 32.5060 +    //console.log('converting e4x node list \n %s', e4)
 32.5061 +
 32.5062 +    // not using the for each(item in e4) since some engines can't
 32.5063 +    // handle the syntax (i.e. says syntax error)
 32.5064 +    //
 32.5065 +    // for each(xnode in e4) {
 32.5066 +    for (item in e4) {
 32.5067 +        // NO do not do this if (e4.hasOwnProperty(item)) {
 32.5068 +        // breaks spidermonkey
 32.5069 +        xnode = e4[item];
 32.5070 +
 32.5071 +        kind = xnode.nodeKind();
 32.5072 +        //console.log('treating node kind %s', kind);
 32.5073 +        switch(kind){
 32.5074 +        case 'element':
 32.5075 +            // add node
 32.5076 +            //console.log('creating element %s %s', xnode.localName(), xnode.namespace());
 32.5077 +            if(xnode.namespace() && (xnode.namespace()+'') !== ''){
 32.5078 +                //console.log('createElementNS %s %s',xnode.namespace()+'', xnode.localName() );
 32.5079 +                domnode = doc.createElementNS(xnode.namespace()+'', xnode.localName());
 32.5080 +            }else{
 32.5081 +                domnode = doc.createElement(xnode.name()+'');
 32.5082 +            }
 32.5083 +            parent.appendChild(domnode);
 32.5084 +
 32.5085 +            // add attributes
 32.5086 +            __toDomNode__(xnode.attributes(), domnode, doc);
 32.5087 +
 32.5088 +            // add children
 32.5089 +            children = xnode.children();
 32.5090 +            length = children.length();
 32.5091 +            //console.log('recursing? %s', length ? 'yes' : 'no');
 32.5092 +            if (length > 0) {
 32.5093 +                __toDomNode__(children, domnode, doc);
 32.5094 +            }
 32.5095 +            break;
 32.5096 +        case 'attribute':
 32.5097 +            // console.log('setting attribute %s %s %s',
 32.5098 +            //       xnode.localName(), xnode.namespace(), xnode.valueOf());
 32.5099 +
 32.5100 +            //
 32.5101 +            // cross-platform alert.  The original code used
 32.5102 +            //  xnode.text() to get the attribute value
 32.5103 +            //  This worked in Rhino, but did not in Spidermonkey
 32.5104 +            //  valueOf seemed to work in both
 32.5105 +            //
 32.5106 +            if(xnode.namespace() && xnode.namespace().prefix){
 32.5107 +                //console.log("%s", xnode.namespace().prefix);
 32.5108 +                parent.setAttributeNS(xnode.namespace()+'',
 32.5109 +                                      xnode.namespace().prefix+':'+xnode.localName(),
 32.5110 +                                      xnode.valueOf());
 32.5111 +            }else if((xnode.name()+'').match('http://www.w3.org/2000/xmlns/::')){
 32.5112 +                if(xnode.localName()!=='xmlns'){
 32.5113 +                    parent.setAttributeNS('http://www.w3.org/2000/xmlns/',
 32.5114 +                                          'xmlns:'+xnode.localName(),
 32.5115 +                                          xnode.valueOf());
 32.5116 +                }
 32.5117 +            }else{
 32.5118 +                parent.setAttribute(xnode.localName()+'', xnode.valueOf());
 32.5119 +            }
 32.5120 +            break;
 32.5121 +        case 'text':
 32.5122 +            //console.log('creating text node : %s', xnode);
 32.5123 +            domnode = doc.createTextNode(xnode+'');
 32.5124 +            parent.appendChild(domnode);
 32.5125 +            break;
 32.5126 +        case 'comment':
 32.5127 +            //console.log('creating comment node : %s', xnode);
 32.5128 +            value = xnode+'';
 32.5129 +            domnode = doc.createComment(value.substring(4,value.length-3));
 32.5130 +            parent.appendChild(domnode);
 32.5131 +            break;
 32.5132 +        case 'processing-instruction':
 32.5133 +            //console.log('creating processing-instruction node : %s', xnode);
 32.5134 +            value = xnode+'';
 32.5135 +            target = value.split(' ')[0].substring(2);
 32.5136 +            value = value.split(' ').splice(1).join(' ').replace('?>','');
 32.5137 +            //console.log('creating processing-instruction data : %s', value);
 32.5138 +            domnode = doc.createProcessingInstruction(target, value);
 32.5139 +            parent.appendChild(domnode);
 32.5140 +            break;
 32.5141 +        default:
 32.5142 +            console.log('e4x DOM ERROR');
 32.5143 +            throw new Error("Assertion failed in xml parser");
 32.5144 +        }
 32.5145 +    }
 32.5146 +};
 32.5147 +/**
 32.5148 + * @author envjs team
 32.5149 + * @class XMLSerializer
 32.5150 + */
 32.5151 +
 32.5152 +XMLSerializer = function() {};
 32.5153 +
 32.5154 +__extend__(XMLSerializer.prototype, {
 32.5155 +    serializeToString: function(node){
 32.5156 +        return node.xml;
 32.5157 +    },
 32.5158 +    toString : function(){
 32.5159 +        return "[object XMLSerializer]";
 32.5160 +    }
 32.5161 +});
 32.5162 +
 32.5163 +/**
 32.5164 + * @author john resig & the envjs team
 32.5165 + * @uri http://www.envjs.com/
 32.5166 + * @copyright 2008-2010
 32.5167 + * @license MIT
 32.5168 + */
 32.5169 +//CLOSURE_END
 32.5170 +}());
 32.5171 +/*
 32.5172 + * Envjs event.1.2.13
 32.5173 + * Pure JavaScript Browser Environment
 32.5174 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.5175 + * Copyright 2008-2010 John Resig, under the MIT License
 32.5176 + *
 32.5177 + * This file simply provides the global definitions we need to
 32.5178 + * be able to correctly implement to core browser DOM Event interfaces.
 32.5179 + */
 32.5180 +var Event,
 32.5181 +    MouseEvent,
 32.5182 +    UIEvent,
 32.5183 +    KeyboardEvent,
 32.5184 +    MutationEvent,
 32.5185 +    DocumentEvent,
 32.5186 +    EventTarget,
 32.5187 +    EventException,
 32.5188 +    //nonstandard but very useful for implementing mutation events
 32.5189 +    //among other things like general profiling
 32.5190 +    Aspect;
 32.5191 +/*
 32.5192 + * Envjs event.1.2.13 
 32.5193 + * Pure JavaScript Browser Environment
 32.5194 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.5195 + * Copyright 2008-2010 John Resig, under the MIT License
 32.5196 + */
 32.5197 +
 32.5198 +//CLOSURE_START
 32.5199 +(function(){
 32.5200 +
 32.5201 +
 32.5202 +
 32.5203 +
 32.5204 +
 32.5205 +/**
 32.5206 + * @author john resig
 32.5207 + */
 32.5208 +// Helper method for extending one object with another.
 32.5209 +function __extend__(a,b) {
 32.5210 +    for ( var i in b ) {
 32.5211 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
 32.5212 +        if ( g || s ) {
 32.5213 +            if ( g ) { a.__defineGetter__(i, g); }
 32.5214 +            if ( s ) { a.__defineSetter__(i, s); }
 32.5215 +        } else {
 32.5216 +            a[i] = b[i];
 32.5217 +        }
 32.5218 +    } return a;
 32.5219 +}
 32.5220 +
 32.5221 +/**
 32.5222 + * @author john resig
 32.5223 + */
 32.5224 +//from jQuery
 32.5225 +function __setArray__( target, array ) {
 32.5226 +    // Resetting the length to 0, then using the native Array push
 32.5227 +    // is a super-fast way to populate an object with array-like properties
 32.5228 +    target.length = 0;
 32.5229 +    Array.prototype.push.apply( target, array );
 32.5230 +}
 32.5231 +/**
 32.5232 + * Borrowed with love from:
 32.5233 + * 
 32.5234 + * jQuery AOP - jQuery plugin to add features of aspect-oriented programming (AOP) to jQuery.
 32.5235 + * http://jquery-aop.googlecode.com/
 32.5236 + *
 32.5237 + * Licensed under the MIT license:
 32.5238 + * http://www.opensource.org/licenses/mit-license.php
 32.5239 + *
 32.5240 + * Version: 1.1
 32.5241 + */
 32.5242 +(function() {
 32.5243 +
 32.5244 +	var _after	= 1;
 32.5245 +	var _before	= 2;
 32.5246 +	var _around	= 3;
 32.5247 +	var _intro  = 4;
 32.5248 +	var _regexEnabled = true;
 32.5249 +
 32.5250 +	/**
 32.5251 +	 * Private weaving function.
 32.5252 +	 */
 32.5253 +	var weaveOne = function(source, method, advice) {
 32.5254 +
 32.5255 +		var old = source[method];
 32.5256 +
 32.5257 +		var aspect;
 32.5258 +		if (advice.type == _after)
 32.5259 +			aspect = function() {
 32.5260 +				var returnValue = old.apply(this, arguments);
 32.5261 +				return advice.value.apply(this, [returnValue, method]);
 32.5262 +			};
 32.5263 +		else if (advice.type == _before)
 32.5264 +			aspect = function() {
 32.5265 +				advice.value.apply(this, [arguments, method]);
 32.5266 +				return old.apply(this, arguments);
 32.5267 +			};
 32.5268 +		else if (advice.type == _intro)
 32.5269 +			aspect = function() {
 32.5270 +				return advice.value.apply(this, arguments);
 32.5271 +			};
 32.5272 +		else if (advice.type == _around) {
 32.5273 +			aspect = function() {
 32.5274 +				var invocation = { object: this, args: arguments };
 32.5275 +				return advice.value.apply(invocation.object, [{ arguments: invocation.args, method: method, proceed : 
 32.5276 +					function() {
 32.5277 +						return old.apply(invocation.object, invocation.args);
 32.5278 +					}
 32.5279 +				}] );
 32.5280 +			};
 32.5281 +		}
 32.5282 +
 32.5283 +		aspect.unweave = function() { 
 32.5284 +			source[method] = old;
 32.5285 +			pointcut = source = aspect = old = null;
 32.5286 +		};
 32.5287 +
 32.5288 +		source[method] = aspect;
 32.5289 +
 32.5290 +		return aspect;
 32.5291 +
 32.5292 +	};
 32.5293 +
 32.5294 +
 32.5295 +	/**
 32.5296 +	 * Private weaver and pointcut parser.
 32.5297 +	 */
 32.5298 +	var weave = function(pointcut, advice)
 32.5299 +	{
 32.5300 +
 32.5301 +		var source = (typeof(pointcut.target.prototype) != 'undefined') ? pointcut.target.prototype : pointcut.target;
 32.5302 +		var advices = [];
 32.5303 +
 32.5304 +		// If it's not an introduction and no method was found, try with regex...
 32.5305 +		if (advice.type != _intro && typeof(source[pointcut.method]) == 'undefined')
 32.5306 +		{
 32.5307 +
 32.5308 +			for (var method in source)
 32.5309 +			{
 32.5310 +				if (source[method] != null && source[method] instanceof Function && method.match(pointcut.method))
 32.5311 +				{
 32.5312 +					advices[advices.length] = weaveOne(source, method, advice);
 32.5313 +				}
 32.5314 +			}
 32.5315 +
 32.5316 +			if (advices.length == 0)
 32.5317 +				throw 'No method: ' + pointcut.method;
 32.5318 +
 32.5319 +		} 
 32.5320 +		else
 32.5321 +		{
 32.5322 +			// Return as an array of one element
 32.5323 +			advices[0] = weaveOne(source, pointcut.method, advice);
 32.5324 +		}
 32.5325 +
 32.5326 +		return _regexEnabled ? advices : advices[0];
 32.5327 +
 32.5328 +	};
 32.5329 +
 32.5330 +	Aspect = 
 32.5331 +	{
 32.5332 +		/**
 32.5333 +		 * Creates an advice after the defined point-cut. The advice will be executed after the point-cut method 
 32.5334 +		 * has completed execution successfully, and will receive one parameter with the result of the execution.
 32.5335 +		 * This function returns an array of weaved aspects (Function).
 32.5336 +		 *
 32.5337 +		 * @example jQuery.aop.after( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
 32.5338 +		 * @result Array<Function>
 32.5339 +		 *
 32.5340 +		 * @example jQuery.aop.after( {target: String, method: 'indexOf'}, function(index) { alert('Result found at: ' + index + ' on:' + this); } );
 32.5341 +		 * @result Array<Function>
 32.5342 +		 *
 32.5343 +		 * @name after
 32.5344 +		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
 32.5345 +		 * @option Object target Target object to be weaved. 
 32.5346 +		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
 32.5347 +		 * @param Function advice Function containing the code that will get called after the execution of the point-cut. It receives one parameter
 32.5348 +		 *                        with the result of the point-cut's execution.
 32.5349 +		 *
 32.5350 +		 * @type Array<Function>
 32.5351 +		 * @cat Plugins/General
 32.5352 +		 */
 32.5353 +		after : function(pointcut, advice)
 32.5354 +		{
 32.5355 +			return weave( pointcut, { type: _after, value: advice } );
 32.5356 +		},
 32.5357 +
 32.5358 +		/**
 32.5359 +		 * Creates an advice before the defined point-cut. The advice will be executed before the point-cut method 
 32.5360 +		 * but cannot modify the behavior of the method, or prevent its execution.
 32.5361 +		 * This function returns an array of weaved aspects (Function).
 32.5362 +		 *
 32.5363 +		 * @example jQuery.aop.before( {target: window, method: 'MyGlobalMethod'}, function() { alert('About to execute MyGlobalMethod'); } );
 32.5364 +		 * @result Array<Function>
 32.5365 +		 *
 32.5366 +		 * @example jQuery.aop.before( {target: String, method: 'indexOf'}, function(index) { alert('About to execute String.indexOf on: ' + this); } );
 32.5367 +		 * @result Array<Function>
 32.5368 +		 *
 32.5369 +		 * @name before
 32.5370 +		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
 32.5371 +		 * @option Object target Target object to be weaved. 
 32.5372 +		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
 32.5373 +		 * @param Function advice Function containing the code that will get called before the execution of the point-cut.
 32.5374 +		 *
 32.5375 +		 * @type Array<Function>
 32.5376 +		 * @cat Plugins/General
 32.5377 +		 */
 32.5378 +		before : function(pointcut, advice)
 32.5379 +		{
 32.5380 +			return weave( pointcut, { type: _before, value: advice } );
 32.5381 +		},
 32.5382 +
 32.5383 +
 32.5384 +		/**
 32.5385 +		 * Creates an advice 'around' the defined point-cut. This type of advice can control the point-cut method execution by calling
 32.5386 +		 * the functions '.proceed()' on the 'invocation' object, and also, can modify the arguments collection before sending them to the function call.
 32.5387 +		 * This function returns an array of weaved aspects (Function).
 32.5388 +		 *
 32.5389 +		 * @example jQuery.aop.around( {target: window, method: 'MyGlobalMethod'}, function(invocation) {
 32.5390 +		 *                alert('# of Arguments: ' + invocation.arguments.length); 
 32.5391 +		 *                return invocation.proceed(); 
 32.5392 +		 *          } );
 32.5393 +		 * @result Array<Function>
 32.5394 +		 *
 32.5395 +		 * @example jQuery.aop.around( {target: String, method: 'indexOf'}, function(invocation) { 
 32.5396 +		 *                alert('Searching: ' + invocation.arguments[0] + ' on: ' + this); 
 32.5397 +		 *                return invocation.proceed(); 
 32.5398 +		 *          } );
 32.5399 +		 * @result Array<Function>
 32.5400 +		 *
 32.5401 +		 * @example jQuery.aop.around( {target: window, method: /Get(\d+)/}, function(invocation) {
 32.5402 +		 *                alert('Executing ' + invocation.method); 
 32.5403 +		 *                return invocation.proceed(); 
 32.5404 +		 *          } );
 32.5405 +		 * @desc Matches all global methods starting with 'Get' and followed by a number.
 32.5406 +		 * @result Array<Function>
 32.5407 +		 *
 32.5408 +		 *
 32.5409 +		 * @name around
 32.5410 +		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
 32.5411 +		 * @option Object target Target object to be weaved. 
 32.5412 +		 * @option String method Name of the function to be weaved. Regex are supported, but not on built-in objects.
 32.5413 +		 * @param Function advice Function containing the code that will get called around the execution of the point-cut. This advice will be called with one
 32.5414 +		 *                        argument containing one function '.proceed()', the collection of arguments '.arguments', and the matched method name '.method'.
 32.5415 +		 *
 32.5416 +		 * @type Array<Function>
 32.5417 +		 * @cat Plugins/General
 32.5418 +		 */
 32.5419 +		around : function(pointcut, advice)
 32.5420 +		{
 32.5421 +			return weave( pointcut, { type: _around, value: advice } );
 32.5422 +		},
 32.5423 +
 32.5424 +		/**
 32.5425 +		 * Creates an introduction on the defined point-cut. This type of advice replaces any existing methods with the same
 32.5426 +		 * name. To restore them, just unweave it.
 32.5427 +		 * This function returns an array with only one weaved aspect (Function).
 32.5428 +		 *
 32.5429 +		 * @example jQuery.aop.introduction( {target: window, method: 'MyGlobalMethod'}, function(result) { alert('Returned: ' + result); } );
 32.5430 +		 * @result Array<Function>
 32.5431 +		 *
 32.5432 +		 * @example jQuery.aop.introduction( {target: String, method: 'log'}, function() { alert('Console: ' + this); } );
 32.5433 +		 * @result Array<Function>
 32.5434 +		 *
 32.5435 +		 * @name introduction
 32.5436 +		 * @param Map pointcut Definition of the point-cut to apply the advice. A point-cut is the definition of the object/s and method/s to be weaved.
 32.5437 +		 * @option Object target Target object to be weaved. 
 32.5438 +		 * @option String method Name of the function to be weaved.
 32.5439 +		 * @param Function advice Function containing the code that will be executed on the point-cut. 
 32.5440 +		 *
 32.5441 +		 * @type Array<Function>
 32.5442 +		 * @cat Plugins/General
 32.5443 +		 */
 32.5444 +		introduction : function(pointcut, advice)
 32.5445 +		{
 32.5446 +			return weave( pointcut, { type: _intro, value: advice } );
 32.5447 +		},
 32.5448 +		
 32.5449 +		/**
 32.5450 +		 * Configures global options.
 32.5451 +		 *
 32.5452 +		 * @name setup
 32.5453 +		 * @param Map settings Configuration options.
 32.5454 +		 * @option Boolean regexMatch Enables/disables regex matching of method names.
 32.5455 +		 *
 32.5456 +		 * @example jQuery.aop.setup( { regexMatch: false } );
 32.5457 +		 * @desc Disable regex matching.
 32.5458 +		 *
 32.5459 +		 * @type Void
 32.5460 +		 * @cat Plugins/General
 32.5461 +		 */
 32.5462 +		setup: function(settings)
 32.5463 +		{
 32.5464 +			_regexEnabled = settings.regexMatch;
 32.5465 +		}
 32.5466 +	};
 32.5467 +
 32.5468 +})();
 32.5469 +
 32.5470 +
 32.5471 +
 32.5472 +
 32.5473 +/**
 32.5474 + * @name EventTarget
 32.5475 + * @w3c:domlevel 2
 32.5476 + * @uri -//TODO: paste dom event level 2 w3c spc uri here
 32.5477 + */
 32.5478 +EventTarget = function(){};
 32.5479 +EventTarget.prototype.addEventListener = function(type, fn, phase){
 32.5480 +    __addEventListener__(this, type, fn, phase);
 32.5481 +};
 32.5482 +EventTarget.prototype.removeEventListener = function(type, fn){
 32.5483 +    __removeEventListener__(this, type, fn);
 32.5484 +};
 32.5485 +EventTarget.prototype.dispatchEvent = function(event, bubbles){
 32.5486 +    __dispatchEvent__(this, event, bubbles);
 32.5487 +};
 32.5488 +
 32.5489 +__extend__(Node.prototype, EventTarget.prototype);
 32.5490 +
 32.5491 +
 32.5492 +var $events = [{}];
 32.5493 +
 32.5494 +function __addEventListener__(target, type, fn, phase){
 32.5495 +    phase = !!phase?"CAPTURING":"BUBBLING";
 32.5496 +    if ( !target.uuid ) {
 32.5497 +        //console.log('event uuid %s %s', target, target.uuid);
 32.5498 +        target.uuid = $events.length+'';
 32.5499 +    }
 32.5500 +    if ( !$events[target.uuid] ) {
 32.5501 +        //console.log('creating listener for target: %s %s', target, target.uuid);
 32.5502 +        $events[target.uuid] = {};
 32.5503 +    }
 32.5504 +    if ( !$events[target.uuid][type] ){
 32.5505 +        //console.log('creating listener for type: %s %s %s', target, target.uuid, type);
 32.5506 +        $events[target.uuid][type] = {
 32.5507 +            CAPTURING:[],
 32.5508 +            BUBBLING:[]
 32.5509 +        };
 32.5510 +    }
 32.5511 +    if ( $events[target.uuid][type][phase].indexOf( fn ) < 0 ){
 32.5512 +        //console.log('adding event listener %s %s %s %s %s %s', target, target.uuid, type, phase,
 32.5513 +        //    $events[target.uuid][type][phase].length, $events[target.uuid][type][phase].indexOf( fn ));
 32.5514 +        //console.log('creating listener for function: %s %s %s', target, target.uuid, phase);
 32.5515 +        $events[target.uuid][type][phase].push( fn );
 32.5516 +        //console.log('adding event listener %s %s %s %s %s %s', target, target.uuid, type, phase,
 32.5517 +        //    $events[target.uuid][type][phase].length, $events[target.uuid][type][phase].indexOf( fn ));
 32.5518 +    }
 32.5519 +    //console.log('registered event listeners %s', $events.length);
 32.5520 +}
 32.5521 +
 32.5522 +function __removeEventListener__(target, type, fn, phase){
 32.5523 +
 32.5524 +    phase = !!phase?"CAPTURING":"BUBBLING";
 32.5525 +    if ( !target.uuid ) {
 32.5526 +        return;
 32.5527 +    }
 32.5528 +    if ( !$events[target.uuid] ) {
 32.5529 +        return;
 32.5530 +    }
 32.5531 +    if(type == '*'){
 32.5532 +        //used to clean all event listeners for a given node
 32.5533 +        //console.log('cleaning all event listeners for node %s %s',target, target.uuid);
 32.5534 +        delete $events[target.uuid];
 32.5535 +        return;
 32.5536 +    }else if ( !$events[target.uuid][type] ){
 32.5537 +        return;
 32.5538 +    }
 32.5539 +    $events[target.uuid][type][phase] =
 32.5540 +    $events[target.uuid][type][phase].filter(function(f){
 32.5541 +        //console.log('removing event listener %s %s %s %s', target, type, phase, fn);
 32.5542 +        return f != fn;
 32.5543 +    });
 32.5544 +}
 32.5545 +
 32.5546 +var __eventuuid__ = 0;
 32.5547 +function __dispatchEvent__(target, event, bubbles){
 32.5548 +
 32.5549 +    if (!event.uuid) {
 32.5550 +        event.uuid = __eventuuid__++;
 32.5551 +    }
 32.5552 +    //the window scope defines the $event object, for IE(^^^) compatibility;
 32.5553 +    //$event = event;
 32.5554 +    //console.log('dispatching event %s', event.uuid);
 32.5555 +    if (bubbles === undefined || bubbles === null) {
 32.5556 +        bubbles = true;
 32.5557 +    }
 32.5558 +
 32.5559 +    if (!event.target) {
 32.5560 +        event.target = target;
 32.5561 +    }
 32.5562 +
 32.5563 +    //console.log('dispatching? %s %s %s', target, event.type, bubbles);
 32.5564 +    if ( event.type && (target.nodeType || target === window )) {
 32.5565 +
 32.5566 +        //console.log('dispatching event %s %s %s', target, event.type, bubbles);
 32.5567 +        __captureEvent__(target, event);
 32.5568 +
 32.5569 +        event.eventPhase = Event.AT_TARGET;
 32.5570 +        if ( target.uuid && $events[target.uuid] && $events[target.uuid][event.type] ) {
 32.5571 +            event.currentTarget = target;
 32.5572 +            //console.log('dispatching %s %s %s %s', target, event.type,
 32.5573 +            //  $events[target.uuid][event.type]['CAPTURING'].length);
 32.5574 +            $events[target.uuid][event.type].CAPTURING.forEach(function(fn){
 32.5575 +                //console.log('AT_TARGET (CAPTURING) event %s', fn);
 32.5576 +                var returnValue = fn( event );
 32.5577 +                //console.log('AT_TARGET (CAPTURING) return value %s', returnValue);
 32.5578 +                if(returnValue === false){
 32.5579 +                    event.stopPropagation();
 32.5580 +                }
 32.5581 +            });
 32.5582 +            //console.log('dispatching %s %s %s %s', target, event.type,
 32.5583 +            //  $events[target.uuid][event.type]['BUBBLING'].length);
 32.5584 +            $events[target.uuid][event.type].BUBBLING.forEach(function(fn){
 32.5585 +                //console.log('AT_TARGET (BUBBLING) event %s', fn);
 32.5586 +                var returnValue = fn( event );
 32.5587 +                //console.log('AT_TARGET (BUBBLING) return value %s', returnValue);
 32.5588 +                if(returnValue === false){
 32.5589 +                    event.stopPropagation();
 32.5590 +                }
 32.5591 +            });
 32.5592 +        }
 32.5593 +        if (target["on" + event.type]) {
 32.5594 +            target["on" + event.type](event);
 32.5595 +        }
 32.5596 +        if (bubbles && !event.cancelled){
 32.5597 +            __bubbleEvent__(target, event);
 32.5598 +        }
 32.5599 +        if(!event._preventDefault){
 32.5600 +            //At this point I'm guessing that just HTMLEvents are concerned
 32.5601 +            //with default behavior being executed in a browser but I could be
 32.5602 +            //wrong as usual.  The goal is much more to filter at this point
 32.5603 +            //what events have no need to be handled
 32.5604 +            //console.log('triggering default behavior for %s', event.type);
 32.5605 +            if(event.type in Envjs.defaultEventBehaviors){
 32.5606 +                Envjs.defaultEventBehaviors[event.type](event);
 32.5607 +            }
 32.5608 +        }
 32.5609 +        //console.log('deleting event %s', event.uuid);
 32.5610 +        event.target = null;
 32.5611 +        event = null;
 32.5612 +    }else{
 32.5613 +        throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
 32.5614 +    }
 32.5615 +}
 32.5616 +
 32.5617 +function __captureEvent__(target, event){
 32.5618 +    var ancestorStack = [],
 32.5619 +        parent = target.parentNode;
 32.5620 +
 32.5621 +    event.eventPhase = Event.CAPTURING_PHASE;
 32.5622 +    while(parent){
 32.5623 +        if(parent.uuid && $events[parent.uuid] && $events[parent.uuid][event.type]){
 32.5624 +            ancestorStack.push(parent);
 32.5625 +        }
 32.5626 +        parent = parent.parentNode;
 32.5627 +    }
 32.5628 +    while(ancestorStack.length && !event.cancelled){
 32.5629 +        event.currentTarget = ancestorStack.pop();
 32.5630 +        if($events[event.currentTarget.uuid] && $events[event.currentTarget.uuid][event.type]){
 32.5631 +            $events[event.currentTarget.uuid][event.type].CAPTURING.forEach(function(fn){
 32.5632 +                var returnValue = fn( event );
 32.5633 +                if(returnValue === false){
 32.5634 +                    event.stopPropagation();
 32.5635 +                }
 32.5636 +            });
 32.5637 +        }
 32.5638 +    }
 32.5639 +}
 32.5640 +
 32.5641 +function __bubbleEvent__(target, event){
 32.5642 +    var parent = target.parentNode;
 32.5643 +    event.eventPhase = Event.BUBBLING_PHASE;
 32.5644 +    while(parent){
 32.5645 +        if(parent.uuid && $events[parent.uuid] && $events[parent.uuid][event.type] ){
 32.5646 +            event.currentTarget = parent;
 32.5647 +            $events[event.currentTarget.uuid][event.type].BUBBLING.forEach(function(fn){
 32.5648 +                var returnValue = fn( event );
 32.5649 +                if(returnValue === false){
 32.5650 +                    event.stopPropagation();
 32.5651 +                }
 32.5652 +            });
 32.5653 +        }
 32.5654 +        parent = parent.parentNode;
 32.5655 +    }
 32.5656 +}
 32.5657 +
 32.5658 +/**
 32.5659 + * @class Event
 32.5660 + */
 32.5661 +Event = function(options){
 32.5662 +    // event state is kept read-only by forcing
 32.5663 +    // a new object for each event.  This may not
 32.5664 +    // be appropriate in the long run and we'll
 32.5665 +    // have to decide if we simply dont adhere to
 32.5666 +    // the read-only restriction of the specification
 32.5667 +    this._bubbles = true;
 32.5668 +    this._cancelable = true;
 32.5669 +    this._cancelled = false;
 32.5670 +    this._currentTarget = null;
 32.5671 +    this._target = null;
 32.5672 +    this._eventPhase = Event.AT_TARGET;
 32.5673 +    this._timeStamp = new Date().getTime();
 32.5674 +    this._preventDefault = false;
 32.5675 +    this._stopPropogation = false;
 32.5676 +};
 32.5677 +
 32.5678 +__extend__(Event.prototype,{
 32.5679 +    get bubbles(){return this._bubbles;},
 32.5680 +    get cancelable(){return this._cancelable;},
 32.5681 +    get currentTarget(){return this._currentTarget;},
 32.5682 +    set currentTarget(currentTarget){ this._currentTarget = currentTarget; },
 32.5683 +    get eventPhase(){return this._eventPhase;},
 32.5684 +    set eventPhase(eventPhase){this._eventPhase = eventPhase;},
 32.5685 +    get target(){return this._target;},
 32.5686 +    set target(target){ this._target = target;},
 32.5687 +    get timeStamp(){return this._timeStamp;},
 32.5688 +    get type(){return this._type;},
 32.5689 +    initEvent: function(type, bubbles, cancelable){
 32.5690 +        this._type=type?type:'';
 32.5691 +        this._bubbles=!!bubbles;
 32.5692 +        this._cancelable=!!cancelable;
 32.5693 +    },
 32.5694 +    preventDefault: function(){
 32.5695 +        this._preventDefault = true;
 32.5696 +    },
 32.5697 +    stopPropagation: function(){
 32.5698 +        if(this._cancelable){
 32.5699 +            this._cancelled = true;
 32.5700 +            this._bubbles = false;
 32.5701 +        }
 32.5702 +    },
 32.5703 +    get cancelled(){
 32.5704 +        return this._cancelled;
 32.5705 +    },
 32.5706 +    toString: function(){
 32.5707 +        return '[object Event]';
 32.5708 +    }
 32.5709 +});
 32.5710 +
 32.5711 +__extend__(Event,{
 32.5712 +    CAPTURING_PHASE : 1,
 32.5713 +    AT_TARGET       : 2,
 32.5714 +    BUBBLING_PHASE  : 3
 32.5715 +});
 32.5716 +
 32.5717 +
 32.5718 +
 32.5719 +/**
 32.5720 + * @name UIEvent
 32.5721 + * @param {Object} options
 32.5722 + */
 32.5723 +UIEvent = function(options) {
 32.5724 +    this._view = null;
 32.5725 +    this._detail = 0;
 32.5726 +};
 32.5727 +
 32.5728 +UIEvent.prototype = new Event();
 32.5729 +__extend__(UIEvent.prototype,{
 32.5730 +    get view(){
 32.5731 +        return this._view;
 32.5732 +    },
 32.5733 +    get detail(){
 32.5734 +        return this._detail;
 32.5735 +    },
 32.5736 +    initUIEvent: function(type, bubbles, cancelable, windowObject, detail){
 32.5737 +        this.initEvent(type, bubbles, cancelable);
 32.5738 +        this._detail = 0;
 32.5739 +        this._view = windowObject;
 32.5740 +    }
 32.5741 +});
 32.5742 +
 32.5743 +var $onblur,
 32.5744 +    $onfocus,
 32.5745 +    $onresize;
 32.5746 +
 32.5747 +
 32.5748 +/**
 32.5749 + * @name MouseEvent
 32.5750 + * @w3c:domlevel 2 
 32.5751 + * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
 32.5752 + */
 32.5753 +MouseEvent = function(options) {
 32.5754 +    this._screenX= 0;
 32.5755 +    this._screenY= 0;
 32.5756 +    this._clientX= 0;
 32.5757 +    this._clientY= 0;
 32.5758 +    this._ctrlKey= false;
 32.5759 +    this._metaKey= false;
 32.5760 +    this._altKey= false;
 32.5761 +    this._button= null;
 32.5762 +    this._relatedTarget= null;
 32.5763 +};
 32.5764 +MouseEvent.prototype = new UIEvent();
 32.5765 +__extend__(MouseEvent.prototype,{
 32.5766 +    get screenX(){
 32.5767 +        return this._screenX;
 32.5768 +    },
 32.5769 +    get screenY(){
 32.5770 +        return this._screenY;
 32.5771 +    },
 32.5772 +    get clientX(){
 32.5773 +        return this._clientX;
 32.5774 +    },
 32.5775 +    get clientY(){
 32.5776 +        return this._clientY;
 32.5777 +    },
 32.5778 +    get ctrlKey(){
 32.5779 +        return this._ctrlKey;
 32.5780 +    },
 32.5781 +    get altKey(){
 32.5782 +        return this._altKey;
 32.5783 +    },
 32.5784 +    get shiftKey(){
 32.5785 +        return this._shiftKey;
 32.5786 +    },
 32.5787 +    get metaKey(){
 32.5788 +        return this._metaKey;
 32.5789 +    },
 32.5790 +    get button(){
 32.5791 +        return this._button;
 32.5792 +    },
 32.5793 +    get relatedTarget(){
 32.5794 +        return this._relatedTarget;
 32.5795 +    },
 32.5796 +    initMouseEvent: function(type, bubbles, cancelable, windowObject, detail,
 32.5797 +            screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, 
 32.5798 +            metaKey, button, relatedTarget){
 32.5799 +        this.initUIEvent(type, bubbles, cancelable, windowObject, detail);
 32.5800 +        this._screenX = screenX;
 32.5801 +        this._screenY = screenY;
 32.5802 +        this._clientX = clientX;
 32.5803 +        this._clientY = clientY;
 32.5804 +        this._ctrlKey = ctrlKey;
 32.5805 +        this._altKey = altKey;
 32.5806 +        this._shiftKey = shiftKey;
 32.5807 +        this._metaKey = metaKey;
 32.5808 +        this._button = button;
 32.5809 +        this._relatedTarget = relatedTarget;
 32.5810 +    }
 32.5811 +});
 32.5812 +
 32.5813 +/**
 32.5814 + * Interface KeyboardEvent (introduced in DOM Level 3)
 32.5815 + */
 32.5816 +KeyboardEvent = function(options) {
 32.5817 +    this._keyIdentifier = 0;
 32.5818 +    this._keyLocation = 0;
 32.5819 +    this._ctrlKey = false;
 32.5820 +    this._metaKey = false;
 32.5821 +    this._altKey = false;
 32.5822 +    this._metaKey = false;
 32.5823 +};
 32.5824 +KeyboardEvent.prototype = new UIEvent();
 32.5825 +
 32.5826 +__extend__(KeyboardEvent.prototype,{
 32.5827 +
 32.5828 +    get ctrlKey(){
 32.5829 +        return this._ctrlKey;
 32.5830 +    },
 32.5831 +    get altKey(){
 32.5832 +        return this._altKey;
 32.5833 +    },
 32.5834 +    get shiftKey(){
 32.5835 +        return this._shiftKey;
 32.5836 +    },
 32.5837 +    get metaKey(){
 32.5838 +        return this._metaKey;
 32.5839 +    },
 32.5840 +    get button(){
 32.5841 +        return this._button;
 32.5842 +    },
 32.5843 +    get relatedTarget(){
 32.5844 +        return this._relatedTarget;
 32.5845 +    },
 32.5846 +    getModifiersState: function(keyIdentifier){
 32.5847 +
 32.5848 +    },
 32.5849 +    initMouseEvent: function(type, bubbles, cancelable, windowObject,
 32.5850 +            keyIdentifier, keyLocation, modifiersList, repeat){
 32.5851 +        this.initUIEvent(type, bubbles, cancelable, windowObject, 0);
 32.5852 +        this._keyIdentifier = keyIdentifier;
 32.5853 +        this._keyLocation = keyLocation;
 32.5854 +        this._modifiersList = modifiersList;
 32.5855 +        this._repeat = repeat;
 32.5856 +    }
 32.5857 +});
 32.5858 +
 32.5859 +KeyboardEvent.DOM_KEY_LOCATION_STANDARD      = 0;
 32.5860 +KeyboardEvent.DOM_KEY_LOCATION_LEFT          = 1;
 32.5861 +KeyboardEvent.DOM_KEY_LOCATION_RIGHT         = 2;
 32.5862 +KeyboardEvent.DOM_KEY_LOCATION_NUMPAD        = 3;
 32.5863 +KeyboardEvent.DOM_KEY_LOCATION_MOBILE        = 4;
 32.5864 +KeyboardEvent.DOM_KEY_LOCATION_JOYSTICK      = 5;
 32.5865 +
 32.5866 +
 32.5867 +
 32.5868 +//We dont fire mutation events until someone has registered for them
 32.5869 +var __supportedMutations__ = /DOMSubtreeModified|DOMNodeInserted|DOMNodeRemoved|DOMAttrModified|DOMCharacterDataModified/;
 32.5870 +
 32.5871 +var __fireMutationEvents__ = Aspect.before({
 32.5872 +    target: EventTarget,
 32.5873 +    method: 'addEventListener'
 32.5874 +}, function(target, type){
 32.5875 +    if(type && type.match(__supportedMutations__)){
 32.5876 +        //unweaving removes the __addEventListener__ aspect
 32.5877 +        __fireMutationEvents__.unweave();
 32.5878 +        // These two methods are enough to cover all dom 2 manipulations
 32.5879 +        Aspect.around({
 32.5880 +            target: Node,
 32.5881 +            method:"removeChild"
 32.5882 +        }, function(invocation){
 32.5883 +            var event,
 32.5884 +                node = invocation.arguments[0];
 32.5885 +            event = node.ownerDocument.createEvent('MutationEvents');
 32.5886 +            event.initEvent('DOMNodeRemoved', true, false, node.parentNode, null, null, null, null);
 32.5887 +            node.dispatchEvent(event, false);
 32.5888 +            return invocation.proceed();
 32.5889 +
 32.5890 +        });
 32.5891 +        Aspect.around({
 32.5892 +            target: Node,
 32.5893 +            method:"appendChild"
 32.5894 +        }, function(invocation) {
 32.5895 +            var event,
 32.5896 +                node = invocation.proceed();
 32.5897 +            event = node.ownerDocument.createEvent('MutationEvents');
 32.5898 +            event.initEvent('DOMNodeInserted', true, false, node.parentNode, null, null, null, null);
 32.5899 +            node.dispatchEvent(event, false);
 32.5900 +            return node;
 32.5901 +        });
 32.5902 +    }
 32.5903 +});
 32.5904 +
 32.5905 +/**
 32.5906 + * @name MutationEvent
 32.5907 + * @param {Object} options
 32.5908 + */
 32.5909 +MutationEvent = function(options) {
 32.5910 +    this._cancelable = false;
 32.5911 +    this._timeStamp = 0;
 32.5912 +};
 32.5913 +
 32.5914 +MutationEvent.prototype = new Event();
 32.5915 +__extend__(MutationEvent.prototype,{
 32.5916 +    get relatedNode(){
 32.5917 +        return this._relatedNode;
 32.5918 +    },
 32.5919 +    get prevValue(){
 32.5920 +        return this._prevValue;
 32.5921 +    },
 32.5922 +    get newValue(){
 32.5923 +        return this._newValue;
 32.5924 +    },
 32.5925 +    get attrName(){
 32.5926 +        return this._attrName;
 32.5927 +    },
 32.5928 +    get attrChange(){
 32.5929 +        return this._attrChange;
 32.5930 +    },
 32.5931 +    initMutationEvent: function( type, bubbles, cancelable,
 32.5932 +            relatedNode, prevValue, newValue, attrName, attrChange ){
 32.5933 +        this._relatedNode = relatedNode;
 32.5934 +        this._prevValue = prevValue;
 32.5935 +        this._newValue = newValue;
 32.5936 +        this._attrName = attrName;
 32.5937 +        this._attrChange = attrChange;
 32.5938 +        switch(type){
 32.5939 +            case "DOMSubtreeModified":
 32.5940 +                this.initEvent(type, true, false);
 32.5941 +                break;
 32.5942 +            case "DOMNodeInserted":
 32.5943 +                this.initEvent(type, true, false);
 32.5944 +                break;
 32.5945 +            case "DOMNodeRemoved":
 32.5946 +                this.initEvent(type, true, false);
 32.5947 +                break;
 32.5948 +            case "DOMNodeRemovedFromDocument":
 32.5949 +                this.initEvent(type, false, false);
 32.5950 +                break;
 32.5951 +            case "DOMNodeInsertedIntoDocument":
 32.5952 +                this.initEvent(type, false, false);
 32.5953 +                break;
 32.5954 +            case "DOMAttrModified":
 32.5955 +                this.initEvent(type, true, false);
 32.5956 +                break;
 32.5957 +            case "DOMCharacterDataModified":
 32.5958 +                this.initEvent(type, true, false);
 32.5959 +                break;
 32.5960 +            default:
 32.5961 +                this.initEvent(type, bubbles, cancelable);
 32.5962 +        }
 32.5963 +    }
 32.5964 +});
 32.5965 +
 32.5966 +// constants
 32.5967 +MutationEvent.ADDITION = 0;
 32.5968 +MutationEvent.MODIFICATION = 1;
 32.5969 +MutationEvent.REMOVAL = 2;
 32.5970 +
 32.5971 +
 32.5972 +/**
 32.5973 + * @name EventException
 32.5974 + */
 32.5975 +EventException = function(code) {
 32.5976 +  this.code = code;
 32.5977 +};
 32.5978 +EventException.UNSPECIFIED_EVENT_TYPE_ERR = 0;
 32.5979 +/**
 32.5980 + *
 32.5981 + * DOM Level 2: http://www.w3.org/TR/DOM-Level-2-Events/events.html
 32.5982 + * DOM Level 3: http://www.w3.org/TR/DOM-Level-3-Events/
 32.5983 + *
 32.5984 + * interface DocumentEvent {
 32.5985 + *   Event createEvent (in DOMString eventType)
 32.5986 + *      raises (DOMException);
 32.5987 + * };
 32.5988 + *
 32.5989 + * Firefox (3.6) exposes DocumentEvent
 32.5990 + * Safari (4) does NOT.
 32.5991 + */
 32.5992 +
 32.5993 +/**
 32.5994 + * TODO: Not sure we need a full prototype.  We not just an regular object?
 32.5995 + */
 32.5996 +DocumentEvent = function(){};
 32.5997 +DocumentEvent.prototype.__EventMap__ = {
 32.5998 +    // Safari4: singular and plural forms accepted
 32.5999 +    // Firefox3.6: singular and plural forms accepted
 32.6000 +    'Event'          : Event,
 32.6001 +    'Events'         : Event,
 32.6002 +    'UIEvent'        : UIEvent,
 32.6003 +    'UIEvents'       : UIEvent,
 32.6004 +    'MouseEvent'     : MouseEvent,
 32.6005 +    'MouseEvents'    : MouseEvent,
 32.6006 +    'MutationEvent'  : MutationEvent,
 32.6007 +    'MutationEvents' : MutationEvent,
 32.6008 +
 32.6009 +    // Safari4: accepts HTMLEvents, but not HTMLEvent
 32.6010 +    // Firefox3.6: accepts HTMLEvents, but not HTMLEvent
 32.6011 +    'HTMLEvent'      : Event,
 32.6012 +    'HTMLEvents'     : Event,
 32.6013 +
 32.6014 +    // Safari4: both not accepted
 32.6015 +    // Firefox3.6, only KeyEvents is accepted
 32.6016 +    'KeyEvent'       : KeyboardEvent,
 32.6017 +    'KeyEvents'      : KeyboardEvent,
 32.6018 +
 32.6019 +    // Safari4: both accepted
 32.6020 +    // Firefox3.6: none accepted
 32.6021 +    'KeyboardEvent'  : KeyboardEvent,
 32.6022 +    'KeyboardEvents' : KeyboardEvent
 32.6023 +};
 32.6024 +
 32.6025 +DocumentEvent.prototype.createEvent = function(eventType) {
 32.6026 +    var Clazz = this.__EventMap__[eventType];
 32.6027 +    if (Clazz) {
 32.6028 +        return new Clazz();
 32.6029 +    }
 32.6030 +    throw(new DOMException(DOMException.NOT_SUPPORTED_ERR));
 32.6031 +};
 32.6032 +
 32.6033 +__extend__(Document.prototype, DocumentEvent.prototype);
 32.6034 +
 32.6035 +/**
 32.6036 + * @author john resig & the envjs team
 32.6037 + * @uri http://www.envjs.com/
 32.6038 + * @copyright 2008-2010
 32.6039 + * @license MIT
 32.6040 + */
 32.6041 +//CLOSURE_END
 32.6042 +}());
 32.6043 +
 32.6044 +/*
 32.6045 + * Envjs timer.1.2.13 
 32.6046 + * Pure JavaScript Browser Environment
 32.6047 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.6048 + * Copyright 2008-2010 John Resig, under the MIT License
 32.6049 + * 
 32.6050 + * Parts of the implementation were originally written by:\
 32.6051 + * Steven Parkes
 32.6052 + * 
 32.6053 + * requires Envjs.wait, Envjs.sleep, Envjs.WAIT_INTERVAL
 32.6054 + */
 32.6055 +var setTimeout,
 32.6056 +    clearTimeout,
 32.6057 +    setInterval,
 32.6058 +    clearInterval;
 32.6059 +    
 32.6060 +/*
 32.6061 + * Envjs timer.1.2.13 
 32.6062 + * Pure JavaScript Browser Environment
 32.6063 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.6064 + * Copyright 2008-2010 John Resig, under the MIT License
 32.6065 + */
 32.6066 +
 32.6067 +//CLOSURE_START
 32.6068 +(function(){
 32.6069 +
 32.6070 +
 32.6071 +
 32.6072 +
 32.6073 +/*
 32.6074 +*       timer.js
 32.6075 +*   implementation provided by Steven Parkes
 32.6076 +*/
 32.6077 +
 32.6078 +//private
 32.6079 +var $timers = [],
 32.6080 +    EVENT_LOOP_RUNNING = false;
 32.6081 +
 32.6082 +$timers.lock = function(fn){
 32.6083 +    Envjs.sync(fn)();
 32.6084 +};
 32.6085 +
 32.6086 +//private internal class
 32.6087 +var Timer = function(fn, interval){
 32.6088 +    this.fn = fn;
 32.6089 +    this.interval = interval;
 32.6090 +    this.at = Date.now() + interval;
 32.6091 +    // allows for calling wait() from callbacks
 32.6092 +    this.running = false;
 32.6093 +};
 32.6094 +
 32.6095 +Timer.prototype.start = function(){};
 32.6096 +Timer.prototype.stop = function(){};
 32.6097 +
 32.6098 +//static
 32.6099 +Timer.normalize = function(time) {
 32.6100 +    time = time*1;
 32.6101 +    if ( isNaN(time) || time < 0 ) {
 32.6102 +        time = 0;
 32.6103 +    }
 32.6104 +
 32.6105 +    if ( EVENT_LOOP_RUNNING && time < Timer.MIN_TIME ) {
 32.6106 +        time = Timer.MIN_TIME;
 32.6107 +    }
 32.6108 +    return time;
 32.6109 +};
 32.6110 +// html5 says this should be at least 4, but the parser is using
 32.6111 +// a setTimeout for the SAX stuff which messes up the world
 32.6112 +Timer.MIN_TIME = /* 4 */ 0;
 32.6113 +
 32.6114 +/**
 32.6115 + * @function setTimeout
 32.6116 + * @param {Object} fn
 32.6117 + * @param {Object} time
 32.6118 + */
 32.6119 +setTimeout = function(fn, time){
 32.6120 +    var num;
 32.6121 +    time = Timer.normalize(time);
 32.6122 +    $timers.lock(function(){
 32.6123 +        num = $timers.length+1;
 32.6124 +        var tfn;
 32.6125 +        if (typeof fn == 'string') {
 32.6126 +            tfn = function() {
 32.6127 +                try {
 32.6128 +                    // eval in global scope
 32.6129 +                    eval(fn, null);
 32.6130 +                // } catch (e) {
 32.6131 +                //     console.log('timer error %s %s', fn, e);
 32.6132 +                } finally {
 32.6133 +                    clearInterval(num);
 32.6134 +                }
 32.6135 +            };
 32.6136 +        } else {
 32.6137 +            tfn = function() {
 32.6138 +                try {
 32.6139 +                    fn();
 32.6140 +                // } catch (e) {
 32.6141 +                //     console.log('timer error %s %s', fn, e);
 32.6142 +                } finally {
 32.6143 +                    clearInterval(num);
 32.6144 +                }
 32.6145 +            };
 32.6146 +        }
 32.6147 +        //console.log("Creating timer number %s", num);
 32.6148 +        $timers[num] = new Timer(tfn, time);
 32.6149 +        $timers[num].start();
 32.6150 +    });
 32.6151 +    return num;
 32.6152 +};
 32.6153 +
 32.6154 +/**
 32.6155 + * @function setInterval
 32.6156 + * @param {Object} fn
 32.6157 + * @param {Object} time
 32.6158 + */
 32.6159 +setInterval = function(fn, time){
 32.6160 +    //console.log('setting interval %s %s', time, fn.toString().substring(0,64));
 32.6161 +    time = Timer.normalize(time);
 32.6162 +    if ( time < 10 ) {
 32.6163 +        time = 10;
 32.6164 +    }
 32.6165 +    if (typeof fn == 'string') {
 32.6166 +        var fnstr = fn;
 32.6167 +        fn = function() {
 32.6168 +            eval(fnstr);
 32.6169 +        };
 32.6170 +    }
 32.6171 +    var num;
 32.6172 +    $timers.lock(function(){
 32.6173 +        num = $timers.length+1;
 32.6174 +        //Envjs.debug("Creating timer number "+num);
 32.6175 +        $timers[num] = new Timer(fn, time);
 32.6176 +        $timers[num].start();
 32.6177 +    });
 32.6178 +    return num;
 32.6179 +};
 32.6180 +
 32.6181 +/**
 32.6182 + * clearInterval
 32.6183 + * @param {Object} num
 32.6184 + */
 32.6185 +clearInterval = clearTimeout = function(num){
 32.6186 +    //console.log("clearing interval "+num);
 32.6187 +    $timers.lock(function(){
 32.6188 +        if ( $timers[num] ) {
 32.6189 +            $timers[num].stop();
 32.6190 +            delete $timers[num];
 32.6191 +        }
 32.6192 +    });
 32.6193 +};
 32.6194 +
 32.6195 +// wait === null/undefined: execute any timers as they fire,
 32.6196 +//  waiting until there are none left
 32.6197 +// wait(n) (n > 0): execute any timers as they fire until there
 32.6198 +//  are none left waiting at least n ms but no more, even if there
 32.6199 +//  are future events/current threads
 32.6200 +// wait(0): execute any immediately runnable timers and return
 32.6201 +// wait(-n): keep sleeping until the next event is more than n ms
 32.6202 +//  in the future
 32.6203 +//
 32.6204 +// TODO: make a priority queue ...
 32.6205 +
 32.6206 +Envjs.wait = function(wait) {
 32.6207 +    //console.log('wait %s', wait);
 32.6208 +    var delta_wait,
 32.6209 +        start = Date.now(),
 32.6210 +        was_running = EVENT_LOOP_RUNNING;
 32.6211 +
 32.6212 +    if (wait < 0) {
 32.6213 +        delta_wait = -wait;
 32.6214 +        wait = 0;
 32.6215 +    }
 32.6216 +    EVENT_LOOP_RUNNING = true;
 32.6217 +    if (wait !== 0 && wait !== null && wait !== undefined){
 32.6218 +        wait += Date.now();
 32.6219 +    }
 32.6220 +
 32.6221 +    var earliest,
 32.6222 +        timer,
 32.6223 +        sleep,
 32.6224 +        index,
 32.6225 +        goal,
 32.6226 +        now,
 32.6227 +        nextfn;
 32.6228 +
 32.6229 +    for (;;) {
 32.6230 +        //console.log('timer loop');
 32.6231 +        earliest = sleep = goal = now = nextfn = null;
 32.6232 +        $timers.lock(function(){
 32.6233 +            for(index in $timers){
 32.6234 +                if( isNaN(index*0) ) {
 32.6235 +                    continue;
 32.6236 +                }
 32.6237 +                timer = $timers[index];
 32.6238 +                // determine timer with smallest run-at time that is
 32.6239 +                // not already running
 32.6240 +                if( !timer.running && ( !earliest || timer.at < earliest.at) ) {
 32.6241 +                    earliest = timer;
 32.6242 +                }
 32.6243 +            }
 32.6244 +        });
 32.6245 +        //next sleep time
 32.6246 +        sleep = earliest && earliest.at - Date.now();
 32.6247 +        if ( earliest && sleep <= 0 ) {
 32.6248 +            nextfn = earliest.fn;
 32.6249 +            try {
 32.6250 +                //console.log('running stack %s', nextfn.toString().substring(0,64));
 32.6251 +                earliest.running = true;
 32.6252 +                nextfn();
 32.6253 +            // } catch (e) {
 32.6254 +            //     console.log('timer error %s %s', nextfn, e);
 32.6255 +            } finally {
 32.6256 +                earliest.running = false;
 32.6257 +            }
 32.6258 +            goal = earliest.at + earliest.interval;
 32.6259 +            now = Date.now();
 32.6260 +            if ( goal < now ) {
 32.6261 +                earliest.at = now;
 32.6262 +            } else {
 32.6263 +                earliest.at = goal;
 32.6264 +            }
 32.6265 +            continue;
 32.6266 +        }
 32.6267 +
 32.6268 +        // bunch of subtle cases here ...
 32.6269 +        if ( !earliest ) {
 32.6270 +            // no events in the queue (but maybe XHR will bring in events, so ...
 32.6271 +            if ( !wait || wait < Date.now() ) {
 32.6272 +                // Loop ends if there are no events and a wait hasn't been
 32.6273 +                // requested or has expired
 32.6274 +                break;
 32.6275 +            }
 32.6276 +        // no events, but a wait requested: fall through to sleep
 32.6277 +        } else {
 32.6278 +            // there are events in the queue, but they aren't firable now
 32.6279 +            /*if ( delta_wait && sleep <= delta_wait ) {
 32.6280 +                //TODO: why waste a check on a tight
 32.6281 +                // loop if it just falls through?
 32.6282 +            // if they will happen within the next delta, fall through to sleep
 32.6283 +            } else */if ( wait === 0 || ( wait > 0 && wait < Date.now () ) ) {
 32.6284 +                // loop ends even if there are events but the user
 32.6285 +                // specifcally asked not to wait too long
 32.6286 +                break;
 32.6287 +            }
 32.6288 +            // there are events and the user wants to wait: fall through to sleep
 32.6289 +        }
 32.6290 +
 32.6291 +        // Related to ajax threads ... hopefully can go away ..
 32.6292 +        var interval =  Envjs.WAIT_INTERVAL || 100;
 32.6293 +        if ( !sleep || sleep > interval ) {
 32.6294 +            sleep = interval;
 32.6295 +        }
 32.6296 +        //console.log('sleeping %s', sleep);
 32.6297 +        Envjs.sleep(sleep);
 32.6298 +
 32.6299 +    }
 32.6300 +    EVENT_LOOP_RUNNING = was_running;
 32.6301 +};
 32.6302 +
 32.6303 +
 32.6304 +/**
 32.6305 + * @author john resig & the envjs team
 32.6306 + * @uri http://www.envjs.com/
 32.6307 + * @copyright 2008-2010
 32.6308 + * @license MIT
 32.6309 + */
 32.6310 +//CLOSURE_END
 32.6311 +}());
 32.6312 +/*
 32.6313 + * Pure JavaScript Browser Environment
 32.6314 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.6315 + * Copyright 2008-2010 John Resig, under the MIT License
 32.6316 + *
 32.6317 + * This file simply provides the global definitions we need to
 32.6318 + * be able to correctly implement to core browser DOM HTML interfaces.
 32.6319 + */
 32.6320 +var HTMLDocument,
 32.6321 +    HTMLElement,
 32.6322 +    HTMLCollection,
 32.6323 +    HTMLAnchorElement,
 32.6324 +    HTMLAreaElement,
 32.6325 +    HTMLBaseElement,
 32.6326 +    HTMLQuoteElement,
 32.6327 +    HTMLBodyElement,
 32.6328 +    HTMLBRElement,
 32.6329 +    HTMLButtonElement,
 32.6330 +    HTMLCanvasElement,
 32.6331 +    HTMLTableColElement,
 32.6332 +    HTMLModElement,
 32.6333 +    HTMLDivElement,
 32.6334 +    HTMLDListElement,
 32.6335 +    HTMLFieldSetElement,
 32.6336 +    HTMLFormElement,
 32.6337 +    HTMLFrameElement,
 32.6338 +    HTMLFrameSetElement,
 32.6339 +    HTMLHeadElement,
 32.6340 +    HTMLHeadingElement,
 32.6341 +    HTMLHRElement,
 32.6342 +    HTMLHtmlElement,
 32.6343 +    HTMLIFrameElement,
 32.6344 +    HTMLImageElement,
 32.6345 +    HTMLInputElement,
 32.6346 +    HTMLLabelElement,
 32.6347 +    HTMLLegendElement,
 32.6348 +    HTMLLIElement,
 32.6349 +    HTMLLinkElement,
 32.6350 +    HTMLMapElement,
 32.6351 +    HTMLMetaElement,
 32.6352 +    HTMLObjectElement,
 32.6353 +    HTMLOListElement,
 32.6354 +    HTMLOptGroupElement,
 32.6355 +    HTMLOptionElement,
 32.6356 +    HTMLParagraphElement,
 32.6357 +    HTMLParamElement,
 32.6358 +    HTMLPreElement,
 32.6359 +    HTMLScriptElement,
 32.6360 +    HTMLSelectElement,
 32.6361 +    HTMLSpanElement,
 32.6362 +    HTMLStyleElement,
 32.6363 +    HTMLTableElement,
 32.6364 +    HTMLTableSectionElement,
 32.6365 +    HTMLTableCellElement,
 32.6366 +    HTMLTableDataCellElement,
 32.6367 +    HTMLTableHeaderCellElement,
 32.6368 +    HTMLTableRowElement,
 32.6369 +    HTMLTextAreaElement,
 32.6370 +    HTMLTitleElement,
 32.6371 +    HTMLUListElement,
 32.6372 +    HTMLUnknownElement,
 32.6373 +    Image,
 32.6374 +    Option,
 32.6375 +    __loadImage__,
 32.6376 +    __loadLink__;
 32.6377 +
 32.6378 +/*
 32.6379 + * Envjs html.1.2.13 
 32.6380 + * Pure JavaScript Browser Environment
 32.6381 + * By John Resig <http://ejohn.org/> and the Envjs Team
 32.6382 + * Copyright 2008-2010 John Resig, under the MIT License
 32.6383 + */
 32.6384 +
 32.6385 +//CLOSURE_START
 32.6386 +(function(){
 32.6387 +
 32.6388 +
 32.6389 +
 32.6390 +
 32.6391 +
 32.6392 +/**
 32.6393 + * @author ariel flesler
 32.6394 + *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
 32.6395 + * @param {Object} str
 32.6396 + */
 32.6397 +function __trim__( str ){
 32.6398 +    return (str || "").replace( /^\s+|\s+$/g, "" );
 32.6399 +}
 32.6400 +
 32.6401 +
 32.6402 +/**
 32.6403 + * @author john resig
 32.6404 + */
 32.6405 +// Helper method for extending one object with another.
 32.6406 +function __extend__(a,b) {
 32.6407 +    for ( var i in b ) {
 32.6408 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
 32.6409 +        if ( g || s ) {
 32.6410 +            if ( g ) { a.__defineGetter__(i, g); }
 32.6411 +            if ( s ) { a.__defineSetter__(i, s); }
 32.6412 +        } else {
 32.6413 +            a[i] = b[i];
 32.6414 +        }
 32.6415 +    } return a;
 32.6416 +}
 32.6417 +
 32.6418 +/**
 32.6419 + * @author john resig
 32.6420 + */
 32.6421 +//from jQuery
 32.6422 +function __setArray__( target, array ) {
 32.6423 +    // Resetting the length to 0, then using the native Array push
 32.6424 +    // is a super-fast way to populate an object with array-like properties
 32.6425 +    target.length = 0;
 32.6426 +    Array.prototype.push.apply( target, array );
 32.6427 +}
 32.6428 +
 32.6429 +/**
 32.6430 + * @class  HTMLDocument
 32.6431 + *      The Document interface represents the entire HTML or XML document.
 32.6432 + *      Conceptually, it is the root of the document tree, and provides
 32.6433 + *      the primary access to the document's data.
 32.6434 + *
 32.6435 + * @extends Document
 32.6436 + */
 32.6437 +HTMLDocument = function(implementation, ownerWindow, referrer) {
 32.6438 +    Document.apply(this, arguments);
 32.6439 +    this.referrer = referrer || '';
 32.6440 +    this.baseURI = "about:blank";
 32.6441 +    this.ownerWindow = ownerWindow;
 32.6442 +};
 32.6443 +
 32.6444 +HTMLDocument.prototype = new Document();
 32.6445 +
 32.6446 +__extend__(HTMLDocument.prototype, {
 32.6447 +    createElement: function(tagName){
 32.6448 +        var node;
 32.6449 +        tagName = tagName.toUpperCase();
 32.6450 +        // create Element specifying 'this' as ownerDocument
 32.6451 +        // This is an html document so we need to use explicit interfaces per the
 32.6452 +        //TODO: would be much faster as a big switch
 32.6453 +        switch(tagName){
 32.6454 +        case "A":
 32.6455 +            node = new HTMLAnchorElement(this);break;
 32.6456 +        case "AREA":
 32.6457 +            node = new HTMLAreaElement(this);break;
 32.6458 +        case "BASE":
 32.6459 +            node = new HTMLBaseElement(this);break;
 32.6460 +        case "BLOCKQUOTE":
 32.6461 +            node = new HTMLQuoteElement(this);break;
 32.6462 +        case "CANVAS":
 32.6463 +            node = new HTMLCanvasElement(this);break;
 32.6464 +        case "Q":
 32.6465 +            node = new HTMLQuoteElement(this);break;
 32.6466 +        case "BODY":
 32.6467 +            node = new HTMLBodyElement(this);break;
 32.6468 +        case "BR":
 32.6469 +            node = new HTMLBRElement(this);break;
 32.6470 +        case "BUTTON":
 32.6471 +            node = new HTMLButtonElement(this);break;
 32.6472 +        case "CAPTION":
 32.6473 +            node = new HTMLElement(this);break;
 32.6474 +        case "COL":
 32.6475 +            node = new HTMLTableColElement(this);break;
 32.6476 +        case "COLGROUP":
 32.6477 +            node = new HTMLTableColElement(this);break;
 32.6478 +        case "DEL":
 32.6479 +            node = new HTMLModElement(this);break;
 32.6480 +        case "INS":
 32.6481 +            node = new HTMLModElement(this);break;
 32.6482 +        case "DIV":
 32.6483 +            node = new HTMLDivElement(this);break;
 32.6484 +        case "DL":
 32.6485 +            node = new HTMLDListElement(this);break;
 32.6486 +        case "DT":
 32.6487 +            node = new HTMLElement(this); break;
 32.6488 +        case "FIELDSET":
 32.6489 +            node = new HTMLFieldSetElement(this);break;
 32.6490 +        case "FORM":
 32.6491 +            node = new HTMLFormElement(this);break;
 32.6492 +        case "FRAME":
 32.6493 +            node = new HTMLFrameElement(this);break;
 32.6494 +        case "H1":
 32.6495 +            node = new HTMLHeadingElement(this);break;
 32.6496 +        case "H2":
 32.6497 +            node = new HTMLHeadingElement(this);break;
 32.6498 +        case "H3":
 32.6499 +            node = new HTMLHeadingElement(this);break;
 32.6500 +        case "H4":
 32.6501 +            node = new HTMLHeadingElement(this);break;
 32.6502 +        case "H5":
 32.6503 +            node = new HTMLHeadingElement(this);break;
 32.6504 +        case "H6":
 32.6505 +            node = new HTMLHeadingElement(this);break;
 32.6506 +        case "HEAD":
 32.6507 +            node = new HTMLHeadElement(this);break;
 32.6508 +        case "HR":
 32.6509 +            node = new HTMLHRElement(this);break;
 32.6510 +        case "HTML":
 32.6511 +            node = new HTMLHtmlElement(this);break;
 32.6512 +        case "IFRAME":
 32.6513 +            node = new HTMLIFrameElement(this);break;
 32.6514 +        case "IMG":
 32.6515 +            node = new HTMLImageElement(this);break;
 32.6516 +        case "INPUT":
 32.6517 +            node = new HTMLInputElement(this);break;
 32.6518 +        case "LABEL":
 32.6519 +            node = new HTMLLabelElement(this);break;
 32.6520 +        case "LEGEND":
 32.6521 +            node = new HTMLLegendElement(this);break;
 32.6522 +        case "LI":
 32.6523 +            node = new HTMLLIElement(this);break;
 32.6524 +        case "LINK":
 32.6525 +            node = new HTMLLinkElement(this);break;
 32.6526 +        case "MAP":
 32.6527 +            node = new HTMLMapElement(this);break;
 32.6528 +        case "META":
 32.6529 +            node = new HTMLMetaElement(this);break;
 32.6530 +        case "NOSCRIPT":
 32.6531 +            node = new HTMLElement(this);break;
 32.6532 +        case "OBJECT":
 32.6533 +            node = new HTMLObjectElement(this);break;
 32.6534 +        case "OPTGROUP":
 32.6535 +            node = new HTMLOptGroupElement(this);break;
 32.6536 +        case "OL":
 32.6537 +            node = new HTMLOListElement(this); break;
 32.6538 +        case "OPTION":
 32.6539 +            node = new HTMLOptionElement(this);break;
 32.6540 +        case "P":
 32.6541 +            node = new HTMLParagraphElement(this);break;
 32.6542 +        case "PARAM":
 32.6543 +            node = new HTMLParamElement(this);break;
 32.6544 +        case "PRE":
 32.6545 +            node = new HTMLPreElement(this);break;
 32.6546 +        case "SCRIPT":
 32.6547 +            node = new HTMLScriptElement(this);break;
 32.6548 +        case "SELECT":
 32.6549 +            node = new HTMLSelectElement(this);break;
 32.6550 +        case "SMALL":
 32.6551 +            node = new HTMLElement(this);break;
 32.6552 +        case "SPAN":
 32.6553 +            node = new HTMLSpanElement(this);break;
 32.6554 +        case "STRONG":
 32.6555 +            node = new HTMLElement(this);break;
 32.6556 +        case "STYLE":
 32.6557 +            node = new HTMLStyleElement(this);break;
 32.6558 +        case "TABLE":
 32.6559 +            node = new HTMLTableElement(this);break;
 32.6560 +        case "TBODY":
 32.6561 +            node = new HTMLTableSectionElement(this);break;
 32.6562 +        case "TFOOT":
 32.6563 +            node = new HTMLTableSectionElement(this);break;
 32.6564 +        case "THEAD":
 32.6565 +            node = new HTMLTableSectionElement(this);break;
 32.6566 +        case "TD":
 32.6567 +            node = new HTMLTableDataCellElement(this);break;
 32.6568 +        case "TH":
 32.6569 +            node = new HTMLTableHeaderCellElement(this);break;
 32.6570 +        case "TEXTAREA":
 32.6571 +            node = new HTMLTextAreaElement(this);break;
 32.6572 +        case "TITLE":
 32.6573 +            node = new HTMLTitleElement(this);break;
 32.6574 +        case "TR":
 32.6575 +            node = new HTMLTableRowElement(this);break;
 32.6576 +        case "UL":
 32.6577 +            node = new HTMLUListElement(this);break;
 32.6578 +        default:
 32.6579 +            node = new HTMLUnknownElement(this);
 32.6580 +        }
 32.6581 +        // assign values to properties (and aliases)
 32.6582 +        node.nodeName  = tagName;
 32.6583 +        return node;
 32.6584 +    },
 32.6585 +    createElementNS : function (uri, local) {
 32.6586 +        //print('createElementNS :'+uri+" "+local);
 32.6587 +        if(!uri){
 32.6588 +            return this.createElement(local);
 32.6589 +        }else if ("http://www.w3.org/1999/xhtml" == uri) {
 32.6590 +            return this.createElement(local);
 32.6591 +        } else if ("http://www.w3.org/1998/Math/MathML" == uri) {
 32.6592 +            return this.createElement(local);
 32.6593 +        } else {
 32.6594 +            return Document.prototype.createElementNS.apply(this,[uri, local]);
 32.6595 +        }
 32.6596 +    },
 32.6597 +    get anchors(){
 32.6598 +        return new HTMLCollection(this.getElementsByTagName('a'));
 32.6599 +    },
 32.6600 +    get applets(){
 32.6601 +        return new HTMLCollection(this.getElementsByTagName('applet'));
 32.6602 +    },
 32.6603 +    get documentElement(){
 32.6604 +        var html = Document.prototype.__lookupGetter__('documentElement').apply(this,[]);
 32.6605 +        if( html === null){
 32.6606 +            html = this.createElement('html');
 32.6607 +            this.appendChild(html);
 32.6608 +            html.appendChild(this.createElement('head'));
 32.6609 +            html.appendChild(this.createElement('body'));
 32.6610 +        }
 32.6611 +        return html;
 32.6612 +    },
 32.6613 +    //document.head is non-standard
 32.6614 +    get head(){
 32.6615 +        //console.log('get head');
 32.6616 +        if (!this.documentElement) {
 32.6617 +            this.appendChild(this.createElement('html'));
 32.6618 +        }
 32.6619 +        var element = this.documentElement,
 32.6620 +        length = element.childNodes.length,
 32.6621 +        i;
 32.6622 +        //check for the presence of the head element in this html doc
 32.6623 +        for(i=0;i<length;i++){
 32.6624 +            if(element.childNodes[i].nodeType === Node.ELEMENT_NODE){
 32.6625 +                if(element.childNodes[i].tagName.toLowerCase() === 'head'){
 32.6626 +                    return element.childNodes[i];
 32.6627 +                }
 32.6628 +            }
 32.6629 +        }
 32.6630 +        //no head?  ugh bad news html.. I guess we'll force the issue?
 32.6631 +        var head = element.appendChild(this.createElement('head'));
 32.6632 +        return head;
 32.6633 +    },
 32.6634 +    get title(){
 32.6635 +        //console.log('get title');
 32.6636 +        if (!this.documentElement) {
 32.6637 +            this.appendChild(this.createElement('html'));
 32.6638 +        }
 32.6639 +        var title,
 32.6640 +        head = this.head,
 32.6641 +        length = head.childNodes.length,
 32.6642 +        i;
 32.6643 +        //check for the presence of the title element in this head element
 32.6644 +        for(i=0;i<length;i++){
 32.6645 +            if(head.childNodes[i].nodeType === Node.ELEMENT_NODE){
 32.6646 +                if(head.childNodes[i].tagName.toLowerCase() === 'title'){
 32.6647 +                    return head.childNodes[i].textContent;
 32.6648 +                }
 32.6649 +            }
 32.6650 +        }
 32.6651 +        //no title?  ugh bad news html.. I guess we'll force the issue?
 32.6652 +        title = head.appendChild(this.createElement('title'));
 32.6653 +        return title.appendChild(this.createTextNode('Untitled Document')).nodeValue;
 32.6654 +    },
 32.6655 +    set title(titleStr){
 32.6656 +        //console.log('set title %s', titleStr);
 32.6657 +        if (!this.documentElement) {
 32.6658 +            this.appendChild(this.createElement('html'));
 32.6659 +        }
 32.6660 +        var title = this.title;
 32.6661 +        title.textContent = titleStr;
 32.6662 +    },
 32.6663 +
 32.6664 +    get body(){
 32.6665 +        //console.log('get body');
 32.6666 +        if (!this.documentElement) {
 32.6667 +            this.appendChild(this.createElement('html'));
 32.6668 +        }
 32.6669 +        var body,
 32.6670 +        element = this.documentElement,
 32.6671 +        length = element.childNodes.length,
 32.6672 +        i;
 32.6673 +        //check for the presence of the head element in this html doc
 32.6674 +        for(i=0;i<length;i++){
 32.6675 +            if(element.childNodes[i].nodeType === Node.ELEMENT_NODE){
 32.6676 +                if(element.childNodes[i].tagName.toLowerCase() === 'body'){
 32.6677 +                    return element.childNodes[i];
 32.6678 +                }
 32.6679 +            }
 32.6680 +        }
 32.6681 +        //no head?  ugh bad news html.. I guess we'll force the issue?
 32.6682 +        return element.appendChild(this.createElement('body'));
 32.6683 +    },
 32.6684 +    set body(x){console.log('set body');/**in firefox this is a benevolent do nothing*/},
 32.6685 +    get cookie(){
 32.6686 +        return Envjs.getCookies(this.location+'');
 32.6687 +    },
 32.6688 +    set cookie(cookie){
 32.6689 +        return Envjs.setCookie(this.location+'', cookie);
 32.6690 +    },
 32.6691 +
 32.6692 +    /**
 32.6693 +     * document.location
 32.6694 +     *
 32.6695 +     * should be identical to window.location
 32.6696 +     *
 32.6697 +     * HTML5:
 32.6698 +     * http://dev.w3.org/html5/spec/Overview.html#the-location-interface
 32.6699 +     *
 32.6700 +     * Mozilla MDC:
 32.6701 +     * https://developer.mozilla.org/en/DOM/document.location
 32.6702 +     *
 32.6703 +     */
 32.6704 +    get location() {
 32.6705 +        if (this.ownerWindow) {
 32.6706 +            return this.ownerWindow.location;
 32.6707 +        } else {
 32.6708 +            return this.baseURI;
 32.6709 +        }
 32.6710 +    },
 32.6711 +    set location(url) {
 32.6712 +        this.baseURI = url;
 32.6713 +        if (this.ownerWindow) {
 32.6714 +            this.ownerWindow.location = url;
 32.6715 +        }
 32.6716 +    },
 32.6717 +
 32.6718 +    /**
 32.6719 +     * document.URL (read-only)
 32.6720 +     *
 32.6721 +     * HTML DOM Level 2:
 32.6722 +     * http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-46183437
 32.6723 +     *
 32.6724 +     * HTML5:
 32.6725 +     * http://dev.w3.org/html5/spec/Overview.html#dom-document-url
 32.6726 +     *
 32.6727 +     * Mozilla MDC:
 32.6728 +     * https://developer.mozilla.org/en/DOM/document.URL
 32.6729 +     */
 32.6730 +    get URL() {
 32.6731 +        return this.location;
 32.6732 +    },
 32.6733 +    set URL(url) {
 32.6734 +        this.location = url;
 32.6735 +    },
 32.6736 +
 32.6737 +    /**
 32.6738 +     * document.domain
 32.6739 +     *
 32.6740 +     * HTML5 Spec:
 32.6741 +     * http://dev.w3.org/html5/spec/Overview.html#dom-document-domain
 32.6742 +     *
 32.6743 +     * Mozilla MDC:
 32.6744 +     * https://developer.mozilla.org/en/DOM/document.domain
 32.6745 +     *
 32.6746 +     */
 32.6747 +    get domain(){
 32.6748 +        var HOSTNAME = new RegExp('\/\/([^\:\/]+)'),
 32.6749 +        matches = HOSTNAME.exec(this.baseURI);
 32.6750 +        return matches&&matches.length>1?matches[1]:"";
 32.6751 +    },
 32.6752 +    set domain(value){
 32.6753 +        var i,
 32.6754 +        domainParts = this.domain.split('.').reverse(),
 32.6755 +        newDomainParts = value.split('.').reverse();
 32.6756 +        if(newDomainParts.length > 1){
 32.6757 +            for(i=0;i<newDomainParts.length;i++){
 32.6758 +                if(!(newDomainParts[i] === domainParts[i])){
 32.6759 +                    return;
 32.6760 +                }
 32.6761 +            }
 32.6762 +            this.baseURI = this.baseURI.replace(domainParts.join('.'), value);
 32.6763 +        }
 32.6764 +    },
 32.6765 +
 32.6766 +    get forms(){
 32.6767 +        return new HTMLCollection(this.getElementsByTagName('form'));
 32.6768 +    },
 32.6769 +    get images(){
 32.6770 +        return new HTMLCollection(this.getElementsByTagName('img'));
 32.6771 +    },
 32.6772 +    get lastModified(){
 32.6773 +        /* TODO */
 32.6774 +        return this._lastModified;
 32.6775 +    },
 32.6776 +    get links(){
 32.6777 +        return new HTMLCollection(this.getElementsByTagName('a'));
 32.6778 +    },
 32.6779 +    getElementsByName : function(name){
 32.6780 +        //returns a real Array + the NodeList
 32.6781 +        var retNodes = __extend__([],new NodeList(this, this.documentElement)),
 32.6782 +        node;
 32.6783 +        // loop through all Elements
 32.6784 +        var all = this.getElementsByTagName('*');
 32.6785 +        for (var i=0; i < all.length; i++) {
 32.6786 +            node = all[i];
 32.6787 +            if (node.nodeType === Node.ELEMENT_NODE &&
 32.6788 +                node.getAttribute('name') == name) {
 32.6789 +                retNodes.push(node);
 32.6790 +            }
 32.6791 +        }
 32.6792 +        return retNodes;
 32.6793 +    },
 32.6794 +    toString: function(){
 32.6795 +        return "[object HTMLDocument]";
 32.6796 +    },
 32.6797 +    get innerHTML(){
 32.6798 +        return this.documentElement.outerHTML;
 32.6799 +    }
 32.6800 +});
 32.6801 +
 32.6802 +
 32.6803 +
 32.6804 +Aspect.around({
 32.6805 +    target: Node,
 32.6806 +    method:"appendChild"
 32.6807 +}, function(invocation) {
 32.6808 +    var event,
 32.6809 +    okay,
 32.6810 +    node = invocation.proceed(),
 32.6811 +    doc = node.ownerDocument;
 32.6812 +
 32.6813 +    //console.log('element appended: %s %s %s', node+'', node.nodeName, node.namespaceURI);
 32.6814 +    if((node.nodeType !== Node.ELEMENT_NODE)){
 32.6815 +        //for now we are only handling element insertions.  probably
 32.6816 +        //we will need to handle text node changes to script tags and
 32.6817 +        //changes to src attributes
 32.6818 +        return node;
 32.6819 +    }
 32.6820 +    //console.log('appended html element %s %s %s',
 32.6821 +    //             node.namespaceURI, node.nodeName, node);
 32.6822 +    switch(doc.parsing){
 32.6823 +        case true:
 32.6824 +            //handled by parser if included
 32.6825 +            //console.log('html document in parse mode');
 32.6826 +            break;
 32.6827 +        case false:
 32.6828 +            switch(node.namespaceURI){
 32.6829 +                case null:
 32.6830 +                    //fall through
 32.6831 +                case "":
 32.6832 +                    //fall through
 32.6833 +                case "http://www.w3.org/1999/xhtml":
 32.6834 +                    switch(node.tagName.toLowerCase()){
 32.6835 +                    case 'style':
 32.6836 +                        document.styleSheets.push(CSSStyleSheet(node));
 32.6837 +                        break;
 32.6838 +                    case 'script':
 32.6839 +                        if((this.nodeName.toLowerCase() === 'head')){
 32.6840 +                            try{
 32.6841 +                                okay = Envjs.loadLocalScript(node, null);
 32.6842 +                                //console.log('loaded script? %s %s', node.uuid, okay);
 32.6843 +                                // only fire event if we actually had something to load
 32.6844 +                                if (node.src && node.src.length > 0){
 32.6845 +                                    event = doc.createEvent('HTMLEvents');
 32.6846 +                                    event.initEvent( okay ? "load" : "error", false, false );
 32.6847 +                                    node.dispatchEvent( event, false );
 32.6848 +                                }
 32.6849 +                            }catch(e){
 32.6850 +                                console.log('error loading html element %s %e', node, e.toString());
 32.6851 +                            }
 32.6852 +                        }
 32.6853 +                        break;
 32.6854 +                    case 'frame':
 32.6855 +                    case 'iframe':
 32.6856 +                        node.contentWindow = { };
 32.6857 +                        node.contentDocument = new HTMLDocument(new DOMImplementation(), node.contentWindow);
 32.6858 +                        node.contentWindow.document = node.contentDocument;
 32.6859 +                        try{
 32.6860 +                            Window;
 32.6861 +                        }catch(e){
 32.6862 +                            node.contentDocument.addEventListener('DOMContentLoaded', function(){
 32.6863 +                                event = node.contentDocument.createEvent('HTMLEvents');
 32.6864 +                                event.initEvent("load", false, false);
 32.6865 +                                node.dispatchEvent( event, false );
 32.6866 +                            });
 32.6867 +                        }
 32.6868 +                        try{
 32.6869 +                            if (node.src && node.src.length > 0){
 32.6870 +                                //console.log("getting content document for (i)frame from %s", node.src);
 32.6871 +                                Envjs.loadFrame(node, Envjs.uri(node.src));
 32.6872 +                                event = node.contentDocument.createEvent('HTMLEvents');
 32.6873 +                                event.initEvent("load", false, false);
 32.6874 +                                node.dispatchEvent( event, false );
 32.6875 +                            }else{
 32.6876 +                                //I dont like this being here:
 32.6877 +                                //TODO: better  mix-in strategy so the try/catch isnt required
 32.6878 +                                try{
 32.6879 +                                    if(Window){
 32.6880 +                                        Envjs.loadFrame(node);
 32.6881 +                                        //console.log('src/html/document.js: triggering frame load');
 32.6882 +                                        event = node.contentDocument.createEvent('HTMLEvents');
 32.6883 +                                        event.initEvent("load", false, false);
 32.6884 +                                        node.dispatchEvent( event, false );
 32.6885 +                                    }
 32.6886 +                                }catch(e){}
 32.6887 +                            }
 32.6888 +                        }catch(e){
 32.6889 +                            console.log('error loading html element %s %e', node, e.toString());
 32.6890 +                        }
 32.6891 +                        break;
 32.6892 +        
 32.6893 +                    case 'link':
 32.6894 +                        if (node.href && node.href.length > 0) {
 32.6895 +                            __loadLink__(node, node.href);
 32.6896 +                        }
 32.6897 +                        break;
 32.6898 +                        /*
 32.6899 +                          case 'img':
 32.6900 +                          if (node.src && node.src.length > 0){
 32.6901 +                          // don't actually load anything, so we're "done" immediately:
 32.6902 +                          event = doc.createEvent('HTMLEvents');
 32.6903 +                          event.initEvent("load", false, false);
 32.6904 +                          node.dispatchEvent( event, false );
 32.6905 +                          }
 32.6906 +                          break;
 32.6907 +                        */
 32.6908 +                    case 'option':
 32.6909 +                        node._updateoptions();
 32.6910 +                        break;
 32.6911 +                    default:
 32.6912 +                        if(node.getAttribute('onload')){
 32.6913 +                            console.log('calling attribute onload %s | %s', node.onload, node.tagName);
 32.6914 +                            node.onload();
 32.6915 +                        }
 32.6916 +                        break;
 32.6917 +                    }//switch on name
 32.6918 +                default:
 32.6919 +                    break;
 32.6920 +            }//switch on ns
 32.6921 +            break;
 32.6922 +        default:
 32.6923 +            // console.log('element appended: %s %s', node+'', node.namespaceURI);
 32.6924 +    }//switch on doc.parsing
 32.6925 +    return node;
 32.6926 +
 32.6927 +});
 32.6928 +
 32.6929 +Aspect.around({
 32.6930 +    target: Node,
 32.6931 +    method:"removeChild"
 32.6932 +}, function(invocation) {
 32.6933 +    var event,
 32.6934 +        okay,
 32.6935 +        node = invocation.proceed(),
 32.6936 +        doc = node.ownerDocument;
 32.6937 +    if((node.nodeType !== Node.ELEMENT_NODE)){
 32.6938 +        //for now we are only handling element insertions.  probably we will need
 32.6939 +        //to handle text node changes to script tags and changes to src
 32.6940 +        //attributes
 32.6941 +        if(node.nodeType !== Node.DOCUMENT_NODE && node.uuid){
 32.6942 +            //console.log('removing event listeners, %s', node, node.uuid);
 32.6943 +            node.removeEventListener('*', null, null);
 32.6944 +        }
 32.6945 +        return node;
 32.6946 +    }
 32.6947 +    //console.log('appended html element %s %s %s', node.namespaceURI, node.nodeName, node);
 32.6948 +
 32.6949 +    switch(doc.parsing){
 32.6950 +        case true:
 32.6951 +            //handled by parser if included
 32.6952 +            break;
 32.6953 +        case false:
 32.6954 +            switch(node.namespaceURI){
 32.6955 +            case null:
 32.6956 +                //fall through
 32.6957 +            case "":
 32.6958 +                //fall through
 32.6959 +            case "http://www.w3.org/1999/xhtml":
 32.6960 +                //this is interesting dillema since our event engine is
 32.6961 +                //storing the registered events in an array accessed
 32.6962 +                //by the uuid property of the node.  unforunately this
 32.6963 +                //means listeners hang out way after(forever ;)) the node
 32.6964 +                //has been removed and gone out of scope.
 32.6965 +                //console.log('removing event listeners, %s', node, node.uuid);
 32.6966 +                node.removeEventListener('*', null, null);
 32.6967 +                switch(node.tagName.toLowerCase()){
 32.6968 +                case 'frame':
 32.6969 +                case 'iframe':
 32.6970 +                    try{
 32.6971 +                        //console.log('removing iframe document');
 32.6972 +                        try{
 32.6973 +                            Envjs.unloadFrame(node);
 32.6974 +                        }catch(e){
 32.6975 +                            console.log('error freeing resources from frame %s', e);
 32.6976 +                        }
 32.6977 +                        node.contentWindow = null;
 32.6978 +                        node.contentDocument = null;
 32.6979 +                    }catch(e){
 32.6980 +                        console.log('error unloading html element %s %e', node, e.toString());
 32.6981 +                    }
 32.6982 +                    break;
 32.6983 +                default:
 32.6984 +                    break;
 32.6985 +                }//switch on name
 32.6986 +            default:
 32.6987 +                break;
 32.6988 +            }//switch on ns
 32.6989 +            break;
 32.6990 +        default:
 32.6991 +            console.log('element appended: %s %s', node+'', node.namespaceURI);
 32.6992 +    }//switch on doc.parsing
 32.6993 +    return node;
 32.6994 +
 32.6995 +});
 32.6996 +
 32.6997 +
 32.6998 +
 32.6999 +/**
 32.7000 + * Named Element Support
 32.7001 + *
 32.7002 + *
 32.7003 + */
 32.7004 +
 32.7005 +/*
 32.7006 + *
 32.7007 + * @returns 'name' if the node has a appropriate name
 32.7008 + *          null if node does not have a name
 32.7009 + */
 32.7010 +
 32.7011 +var __isNamedElement__ = function(node) {
 32.7012 +    if (node.nodeType !== Node.ELEMENT_NODE) {
 32.7013 +        return null;
 32.7014 +    }
 32.7015 +    var tagName = node.tagName.toLowerCase();
 32.7016 +    var nodename = null;
 32.7017 +
 32.7018 +    switch (tagName) {
 32.7019 +        case 'embed':
 32.7020 +        case 'form':
 32.7021 +        case 'iframe':
 32.7022 +            nodename = node.getAttribute('name');
 32.7023 +            break;
 32.7024 +        case 'applet':
 32.7025 +            nodename = node.id;
 32.7026 +            break;
 32.7027 +        case 'object':
 32.7028 +            // TODO: object needs to be 'fallback free'
 32.7029 +            nodename = node.id;
 32.7030 +            break;
 32.7031 +        case 'img':
 32.7032 +            nodename = node.id;
 32.7033 +            if (!nodename || ! node.getAttribute('name')) {
 32.7034 +                nodename = null;
 32.7035 +            }
 32.7036 +            break;
 32.7037 +    }
 32.7038 +    return (nodename) ? nodename : null;
 32.7039 +};
 32.7040 +
 32.7041 +
 32.7042 +var __addNamedMap__ = function(target, node) {
 32.7043 +    var nodename = __isNamedElement__(node);
 32.7044 +    if (nodename) {
 32.7045 +        target.__defineGetter__(nodename, function() {
 32.7046 +            return node;
 32.7047 +        });
 32.7048 +    }
 32.7049 +};
 32.7050 +
 32.7051 +var __removeNamedMap__ = function(target, node) {
 32.7052 +    if (!node) {
 32.7053 +        return;
 32.7054 +    }
 32.7055 +    var nodename = __isNamedElement__(node);
 32.7056 +    if (nodename) {
 32.7057 +        delete target[nodename];
 32.7058 +    }
 32.7059 +};
 32.7060 +    
 32.7061 +/**
 32.7062 + * @name HTMLEvents
 32.7063 + * @w3c:domlevel 2
 32.7064 + * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
 32.7065 + */
 32.7066 +
 32.7067 +var __eval__ = function(script, node){
 32.7068 +    if (!script == ""){
 32.7069 +        // don't assemble environment if no script...
 32.7070 +        try{
 32.7071 +            eval(script);
 32.7072 +        }catch(e){
 32.7073 +            console.log('error evaluating %s', e);
 32.7074 +        }
 32.7075 +    }
 32.7076 +};
 32.7077 +
 32.7078 +var HTMLEvents= function(){};
 32.7079 +HTMLEvents.prototype = {
 32.7080 +    onload: function(event){
 32.7081 +        __eval__(this.getAttribute('onload')||'', this);
 32.7082 +    },
 32.7083 +    onunload: function(event){
 32.7084 +        __eval__(this.getAttribute('onunload')||'', this);
 32.7085 +    },
 32.7086 +    onabort: function(event){
 32.7087 +        __eval__(this.getAttribute('onabort')||'', this);
 32.7088 +    },
 32.7089 +    onerror: function(event){
 32.7090 +        __eval__(this.getAttribute('onerror')||'', this);
 32.7091 +    },
 32.7092 +    onselect: function(event){
 32.7093 +        __eval__(this.getAttribute('onselect')||'', this);
 32.7094 +    },
 32.7095 +    onchange: function(event){
 32.7096 +        __eval__(this.getAttribute('onchange')||'', this);
 32.7097 +    },
 32.7098 +    onsubmit: function(event){
 32.7099 +        if (__eval__(this.getAttribute('onsubmit')||'', this)) {
 32.7100 +            this.submit();
 32.7101 +        }
 32.7102 +    },
 32.7103 +    onreset: function(event){
 32.7104 +        __eval__(this.getAttribute('onreset')||'', this);
 32.7105 +    },
 32.7106 +    onfocus: function(event){
 32.7107 +        __eval__(this.getAttribute('onfocus')||'', this);
 32.7108 +    },
 32.7109 +    onblur: function(event){
 32.7110 +        __eval__(this.getAttribute('onblur')||'', this);
 32.7111 +    },
 32.7112 +    onresize: function(event){
 32.7113 +        __eval__(this.getAttribute('onresize')||'', this);
 32.7114 +    },
 32.7115 +    onscroll: function(event){
 32.7116 +        __eval__(this.getAttribute('onscroll')||'', this);
 32.7117 +    }
 32.7118 +};
 32.7119 +
 32.7120 +//HTMLDocument, HTMLFramesetElement, HTMLObjectElement
 32.7121 +var  __load__ = function(element){
 32.7122 +    var event = new Event('HTMLEvents');
 32.7123 +    event.initEvent("load", false, false);
 32.7124 +    element.dispatchEvent(event);
 32.7125 +    return event;
 32.7126 +};
 32.7127 +
 32.7128 +//HTMLFramesetElement, HTMLBodyElement
 32.7129 +var  __unload__ = function(element){
 32.7130 +    var event = new Event('HTMLEvents');
 32.7131 +    event.initEvent("unload", false, false);
 32.7132 +    element.dispatchEvent(event);
 32.7133 +    return event;
 32.7134 +};
 32.7135 +
 32.7136 +//HTMLObjectElement
 32.7137 +var  __abort__ = function(element){
 32.7138 +    var event = new Event('HTMLEvents');
 32.7139 +    event.initEvent("abort", true, false);
 32.7140 +    element.dispatchEvent(event);
 32.7141 +    return event;
 32.7142 +};
 32.7143 +
 32.7144 +//HTMLFramesetElement, HTMLObjectElement, HTMLBodyElement
 32.7145 +var  __error__ = function(element){
 32.7146 +    var event = new Event('HTMLEvents');
 32.7147 +    event.initEvent("error", true, false);
 32.7148 +    element.dispatchEvent(event);
 32.7149 +    return event;
 32.7150 +};
 32.7151 +
 32.7152 +//HTMLInputElement, HTMLTextAreaElement
 32.7153 +var  __select__ = function(element){
 32.7154 +    var event = new Event('HTMLEvents');
 32.7155 +    event.initEvent("select", true, false);
 32.7156 +    element.dispatchEvent(event);
 32.7157 +    return event;
 32.7158 +};
 32.7159 +
 32.7160 +//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
 32.7161 +var  __change__ = function(element){
 32.7162 +    var event = new Event('HTMLEvents');
 32.7163 +    event.initEvent("change", true, false);
 32.7164 +    element.dispatchEvent(event);
 32.7165 +    return event;
 32.7166 +};
 32.7167 +
 32.7168 +//HtmlFormElement
 32.7169 +var __submit__ = function(element){
 32.7170 +    var event = new Event('HTMLEvents');
 32.7171 +    event.initEvent("submit", true, true);
 32.7172 +    element.dispatchEvent(event);
 32.7173 +    return event;
 32.7174 +};
 32.7175 +
 32.7176 +//HtmlFormElement
 32.7177 +var  __reset__ = function(element){
 32.7178 +    var event = new Event('HTMLEvents');
 32.7179 +    event.initEvent("reset", false, false);
 32.7180 +    element.dispatchEvent(event);
 32.7181 +    return event;
 32.7182 +};
 32.7183 +
 32.7184 +//LABEL, INPUT, SELECT, TEXTAREA, and BUTTON
 32.7185 +var __focus__ = function(element){
 32.7186 +    var event = new Event('HTMLEvents');
 32.7187 +    event.initEvent("focus", false, false);
 32.7188 +    element.dispatchEvent(event);
 32.7189 +    return event;
 32.7190 +};
 32.7191 +
 32.7192 +//LABEL, INPUT, SELECT, TEXTAREA, and BUTTON
 32.7193 +var __blur__ = function(element){
 32.7194 +    var event = new Event('HTMLEvents');
 32.7195 +    event.initEvent("blur", false, false);
 32.7196 +    element.dispatchEvent(event);
 32.7197 +    return event;
 32.7198 +};
 32.7199 +
 32.7200 +//Window
 32.7201 +var __resize__ = function(element){
 32.7202 +    var event = new Event('HTMLEvents');
 32.7203 +    event.initEvent("resize", true, false);
 32.7204 +    element.dispatchEvent(event);
 32.7205 +    return event;
 32.7206 +};
 32.7207 +
 32.7208 +//Window
 32.7209 +var __scroll__ = function(element){
 32.7210 +    var event = new Event('HTMLEvents');
 32.7211 +    event.initEvent("scroll", true, false);
 32.7212 +    element.dispatchEvent(event);
 32.7213 +    return event;
 32.7214 +};
 32.7215 +
 32.7216 +/**
 32.7217 + * @name KeyboardEvents
 32.7218 + * @w3c:domlevel 2 
 32.7219 + * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
 32.7220 + */
 32.7221 +var KeyboardEvents= function(){};
 32.7222 +KeyboardEvents.prototype = {
 32.7223 +    onkeydown: function(event){
 32.7224 +        __eval__(this.getAttribute('onkeydown')||'', this);
 32.7225 +    },
 32.7226 +    onkeypress: function(event){
 32.7227 +        __eval__(this.getAttribute('onkeypress')||'', this);
 32.7228 +    },
 32.7229 +    onkeyup: function(event){
 32.7230 +        __eval__(this.getAttribute('onkeyup')||'', this);
 32.7231 +    }
 32.7232 +};
 32.7233 +
 32.7234 +
 32.7235 +var __registerKeyboardEventAttrs__ = function(elm){
 32.7236 +    if(elm.hasAttribute('onkeydown')){ 
 32.7237 +        elm.addEventListener('keydown', elm.onkeydown, false); 
 32.7238 +    }
 32.7239 +    if(elm.hasAttribute('onkeypress')){ 
 32.7240 +        elm.addEventListener('keypress', elm.onkeypress, false); 
 32.7241 +    }
 32.7242 +    if(elm.hasAttribute('onkeyup')){ 
 32.7243 +        elm.addEventListener('keyup', elm.onkeyup, false); 
 32.7244 +    }
 32.7245 +    return elm;
 32.7246 +};
 32.7247 +
 32.7248 +//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
 32.7249 +var  __keydown__ = function(element){
 32.7250 +    var event = new Event('KeyboardEvents');
 32.7251 +    event.initEvent("keydown", false, false);
 32.7252 +    element.dispatchEvent(event);
 32.7253 +};
 32.7254 +
 32.7255 +//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
 32.7256 +var  __keypress__ = function(element){
 32.7257 +    var event = new Event('KeyboardEvents');
 32.7258 +    event.initEvent("keypress", false, false);
 32.7259 +    element.dispatchEvent(event);
 32.7260 +};
 32.7261 +
 32.7262 +//HTMLInputElement, HTMLSelectElement, HTMLTextAreaElement
 32.7263 +var  __keyup__ = function(element){
 32.7264 +    var event = new Event('KeyboardEvents');
 32.7265 +    event.initEvent("keyup", false, false);
 32.7266 +    element.dispatchEvent(event);
 32.7267 +};
 32.7268 +
 32.7269 +/**
 32.7270 + * @name MaouseEvents
 32.7271 + * @w3c:domlevel 2 
 32.7272 + * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
 32.7273 + */
 32.7274 +var MouseEvents= function(){};
 32.7275 +MouseEvents.prototype = {
 32.7276 +    onclick: function(event){
 32.7277 +        __eval__(this.getAttribute('onclick')||'', this);
 32.7278 +    },
 32.7279 +    ondblclick: function(event){
 32.7280 +        __eval__(this.getAttribute('ondblclick')||'', this);
 32.7281 +    },
 32.7282 +    onmousedown: function(event){
 32.7283 +        __eval__(this.getAttribute('onmousedown')||'', this);
 32.7284 +    },
 32.7285 +    onmousemove: function(event){
 32.7286 +        __eval__(this.getAttribute('onmousemove')||'', this);
 32.7287 +    },
 32.7288 +    onmouseout: function(event){
 32.7289 +        __eval__(this.getAttribute('onmouseout')||'', this);
 32.7290 +    },
 32.7291 +    onmouseover: function(event){
 32.7292 +        __eval__(this.getAttribute('onmouseover')||'', this);
 32.7293 +    },
 32.7294 +    onmouseup: function(event){
 32.7295 +        __eval__(this.getAttribute('onmouseup')||'', this);
 32.7296 +    }  
 32.7297 +};
 32.7298 +
 32.7299 +var __registerMouseEventAttrs__ = function(elm){
 32.7300 +    if(elm.hasAttribute('onclick')){ 
 32.7301 +        elm.addEventListener('click', elm.onclick, false); 
 32.7302 +    }
 32.7303 +    if(elm.hasAttribute('ondblclick')){ 
 32.7304 +        elm.addEventListener('dblclick', elm.ondblclick, false); 
 32.7305 +    }
 32.7306 +    if(elm.hasAttribute('onmousedown')){ 
 32.7307 +        elm.addEventListener('mousedown', elm.onmousedown, false); 
 32.7308 +    }
 32.7309 +    if(elm.hasAttribute('onmousemove')){ 
 32.7310 +        elm.addEventListener('mousemove', elm.onmousemove, false); 
 32.7311 +    }
 32.7312 +    if(elm.hasAttribute('onmouseout')){ 
 32.7313 +        elm.addEventListener('mouseout', elm.onmouseout, false); 
 32.7314 +    }
 32.7315 +    if(elm.hasAttribute('onmouseover')){ 
 32.7316 +        elm.addEventListener('mouseover', elm.onmouseover, false); 
 32.7317 +    }
 32.7318 +    if(elm.hasAttribute('onmouseup')){ 
 32.7319 +        elm.addEventListener('mouseup', elm.onmouseup, false); 
 32.7320 +    }
 32.7321 +    return elm;
 32.7322 +};
 32.7323 +
 32.7324 +
 32.7325 +var  __click__ = function(element){
 32.7326 +    var event = new Event('MouseEvents');
 32.7327 +    event.initEvent("click", true, true, null, 0,
 32.7328 +                0, 0, 0, 0, false, false, false, 
 32.7329 +                false, null, null);
 32.7330 +    element.dispatchEvent(event);
 32.7331 +};
 32.7332 +var  __mousedown__ = function(element){
 32.7333 +    var event = new Event('MouseEvents');
 32.7334 +    event.initEvent("mousedown", true, true, null, 0,
 32.7335 +                0, 0, 0, 0, false, false, false, 
 32.7336 +                false, null, null);
 32.7337 +    element.dispatchEvent(event);
 32.7338 +};
 32.7339 +var  __mouseup__ = function(element){
 32.7340 +    var event = new Event('MouseEvents');
 32.7341 +    event.initEvent("mouseup", true, true, null, 0,
 32.7342 +                0, 0, 0, 0, false, false, false, 
 32.7343 +                false, null, null);
 32.7344 +    element.dispatchEvent(event);
 32.7345 +};
 32.7346 +var  __mouseover__ = function(element){
 32.7347 +    var event = new Event('MouseEvents');
 32.7348 +    event.initEvent("mouseover", true, true, null, 0,
 32.7349 +                0, 0, 0, 0, false, false, false, 
 32.7350 +                false, null, null);
 32.7351 +    element.dispatchEvent(event);
 32.7352 +};
 32.7353 +var  __mousemove__ = function(element){
 32.7354 +    var event = new Event('MouseEvents');
 32.7355 +    event.initEvent("mousemove", true, true, null, 0,
 32.7356 +                0, 0, 0, 0, false, false, false, 
 32.7357 +                false, null, null);
 32.7358 +    element.dispatchEvent(event);
 32.7359 +};
 32.7360 +var  __mouseout__ = function(element){
 32.7361 +    var event = new Event('MouseEvents');
 32.7362 +    event.initEvent("mouseout", true, true, null, 0,
 32.7363 +                0, 0, 0, 0, false, false, false, 
 32.7364 +                false, null, null);
 32.7365 +    element.dispatchEvent(event);
 32.7366 +};
 32.7367 +
 32.7368 +/**
 32.7369 + * HTMLElement - DOM Level 2
 32.7370 + */
 32.7371 +
 32.7372 +
 32.7373 +/* Hack for http://www.prototypejs.org/
 32.7374 + *
 32.7375 + * Prototype 1.6 (the library) creates a new global Element, which causes
 32.7376 + * envjs to use the wrong Element.
 32.7377 + *
 32.7378 + * http://envjs.lighthouseapp.com/projects/21590/tickets/108-prototypejs-wont-load-due-it-clobbering-element
 32.7379 + *
 32.7380 + * Options:
 32.7381 + *  (1) Rename the dom/element to something else
 32.7382 + *       rejected: been done before. people want Element.
 32.7383 + *  (2) merge dom+html and not export Element to global namespace
 32.7384 + *      (meaning we would use a local var Element in a closure, so prototype
 32.7385 + *      can do what ever it wants)
 32.7386 + *       rejected: want dom and html separate
 32.7387 + *  (3) use global namespace (put everything under Envjs = {})
 32.7388 + *       rejected: massive change
 32.7389 + *  (4) use commonjs modules (similar to (3) in spirit)
 32.7390 + *       rejected: massive change
 32.7391 + *
 32.7392 + *  or
 32.7393 + *
 32.7394 + *  (5) take a reference to Element during initial loading ("compile
 32.7395 + *      time"), and use the reference instead of "Element".  That's
 32.7396 + *      what the next line does.  We use __DOMElement__ if we need to
 32.7397 + *      reference the parent class.  Only this file explcity uses
 32.7398 + *      Element so this should work, and is the most minimal change I
 32.7399 + *      could think of with no external API changes.
 32.7400 + *
 32.7401 + */
 32.7402 +var  __DOMElement__ = Element;
 32.7403 +
 32.7404 +HTMLElement = function(ownerDocument) {
 32.7405 +    __DOMElement__.apply(this, arguments);
 32.7406 +};
 32.7407 +
 32.7408 +HTMLElement.prototype = new Element();
 32.7409 +__extend__(HTMLElement.prototype, HTMLEvents.prototype);
 32.7410 +__extend__(HTMLElement.prototype, {
 32.7411 +    get className() {
 32.7412 +        return this.getAttribute("class")||'';
 32.7413 +    },
 32.7414 +    set className(value) {
 32.7415 +        return this.setAttribute("class",__trim__(value));
 32.7416 +    },
 32.7417 +    get dir() {
 32.7418 +        return this.getAttribute("dir")||"ltr";
 32.7419 +    },
 32.7420 +    set dir(val) {
 32.7421 +        return this.setAttribute("dir",val);
 32.7422 +    },
 32.7423 +    get id(){
 32.7424 +        return this.getAttribute('id');
 32.7425 +    },
 32.7426 +    set id(id){
 32.7427 +        this.setAttribute('id', id);
 32.7428 +    },
 32.7429 +    get innerHTML(){
 32.7430 +        var ret = "",
 32.7431 +        i;
 32.7432 +
 32.7433 +        // create string containing the concatenation of the string
 32.7434 +        // values of each child
 32.7435 +        for (i=0; i < this.childNodes.length; i++) {
 32.7436 +            if(this.childNodes[i]){
 32.7437 +                if(this.childNodes[i].nodeType === Node.ELEMENT_NODE){
 32.7438 +                    ret += this.childNodes[i].xhtml;
 32.7439 +                } else if (this.childNodes[i].nodeType === Node.TEXT_NODE && i>0 &&
 32.7440 +                           this.childNodes[i-1].nodeType === Node.TEXT_NODE){
 32.7441 +                    //add a single space between adjacent text nodes
 32.7442 +                    ret += " "+this.childNodes[i].xml;
 32.7443 +                }else{
 32.7444 +                    ret += this.childNodes[i].xml;
 32.7445 +                }
 32.7446 +            }
 32.7447 +        }
 32.7448 +        return ret;
 32.7449 +    },
 32.7450 +    get lang() {
 32.7451 +        return this.getAttribute("lang");
 32.7452 +    },
 32.7453 +    set lang(val) {
 32.7454 +        return this.setAttribute("lang",val);
 32.7455 +    },
 32.7456 +    get offsetHeight(){
 32.7457 +        return Number((this.style.height || '').replace("px",""));
 32.7458 +    },
 32.7459 +    get offsetWidth(){
 32.7460 +        return Number((this.style.width || '').replace("px",""));
 32.7461 +    },
 32.7462 +    offsetLeft: 0,
 32.7463 +    offsetRight: 0,
 32.7464 +    get offsetParent(){
 32.7465 +        /* TODO */
 32.7466 +        return;
 32.7467 +    },
 32.7468 +    set offsetParent(element){
 32.7469 +        /* TODO */
 32.7470 +        return;
 32.7471 +    },
 32.7472 +    scrollHeight: 0,
 32.7473 +    scrollWidth: 0,
 32.7474 +    scrollLeft: 0,
 32.7475 +    scrollRight: 0,
 32.7476 +    get style(){
 32.7477 +        return this.getAttribute('style')||'';
 32.7478 +    },
 32.7479 +    get title() {
 32.7480 +        return this.getAttribute("title");
 32.7481 +    },
 32.7482 +    set title(value) {
 32.7483 +        return this.setAttribute("title", value);
 32.7484 +    },
 32.7485 +    get tabIndex(){
 32.7486 +        var tabindex = this.getAttribute('tabindex');
 32.7487 +        if(tabindex!==null){
 32.7488 +            return Number(tabindex);
 32.7489 +        } else {
 32.7490 +            return 0;
 32.7491 +        }
 32.7492 +    },
 32.7493 +    set tabIndex(value){
 32.7494 +        if (value === undefined || value === null) {
 32.7495 +            value = 0;
 32.7496 +        }
 32.7497 +        this.setAttribute('tabindex',Number(value));
 32.7498 +    },
 32.7499 +    get outerHTML(){
 32.7500 +        //Not in the specs but I'll leave it here for now.
 32.7501 +        return this.xhtml;
 32.7502 +    },
 32.7503 +    scrollIntoView: function(){
 32.7504 +        /*TODO*/
 32.7505 +        return;
 32.7506 +    },
 32.7507 +    toString: function(){
 32.7508 +        return '[object HTMLElement]';
 32.7509 +    },
 32.7510 +    get xhtml() {
 32.7511 +        // HTMLDocument.xhtml is non-standard
 32.7512 +        // This is exactly like Document.xml except the tagName has to be
 32.7513 +        // lower cased.  I dont like to duplicate this but its really not
 32.7514 +        // a simple work around between xml and html serialization via
 32.7515 +        // XMLSerializer (which uppercases html tags) and innerHTML (which
 32.7516 +        // lowercases tags)
 32.7517 +
 32.7518 +        var ret = "",
 32.7519 +            ns = "",
 32.7520 +            name = (this.tagName+"").toLowerCase(),
 32.7521 +            attrs,
 32.7522 +            attrstring = "",
 32.7523 +            i;
 32.7524 +
 32.7525 +        // serialize namespace declarations
 32.7526 +        if (this.namespaceURI){
 32.7527 +            if((this === this.ownerDocument.documentElement) ||
 32.7528 +               (!this.parentNode) ||
 32.7529 +               (this.parentNode &&
 32.7530 +                (this.parentNode.namespaceURI !== this.namespaceURI))) {
 32.7531 +                ns = ' xmlns' + (this.prefix ? (':' + this.prefix) : '') +
 32.7532 +                    '="' + this.namespaceURI + '"';
 32.7533 +            }
 32.7534 +        }
 32.7535 +
 32.7536 +        // serialize Attribute declarations
 32.7537 +        attrs = this.attributes;
 32.7538 +        for(i=0;i< attrs.length;i++){
 32.7539 +            attrstring += " "+attrs[i].name+'="'+attrs[i].xml+'"';
 32.7540 +        }
 32.7541 +
 32.7542 +        if(this.hasChildNodes()){
 32.7543 +            // serialize this Element
 32.7544 +            ret += "<" + name + ns + attrstring +">";
 32.7545 +            for(i=0;i< this.childNodes.length;i++){
 32.7546 +                ret += this.childNodes[i].xhtml ?
 32.7547 +                    this.childNodes[i].xhtml :
 32.7548 +                    this.childNodes[i].xml;
 32.7549 +            }
 32.7550 +            ret += "</" + name + ">";
 32.7551 +        }else{
 32.7552 +            switch(name){
 32.7553 +            case 'script':
 32.7554 +                ret += "<" + name + ns + attrstring +"></"+name+">";
 32.7555 +                break;
 32.7556 +            default:
 32.7557 +                ret += "<" + name + ns + attrstring +"/>";
 32.7558 +            }
 32.7559 +        }
 32.7560 +
 32.7561 +        return ret;
 32.7562 +    },
 32.7563 +
 32.7564 +    /**
 32.7565 +     * setAttribute use a dispatch table that other tags can set to
 32.7566 +     *  "listen" to various values being set.  The dispatch table
 32.7567 +     * and registration functions are at the end of the file.
 32.7568 +     *
 32.7569 +     */
 32.7570 +
 32.7571 +    setAttribute: function(name, value) {
 32.7572 +        var result = __DOMElement__.prototype.setAttribute.apply(this, arguments);
 32.7573 +        __addNamedMap__(this.ownerDocument, this);
 32.7574 +        var tagname = this.tagName;
 32.7575 +        var callback = HTMLElement.getAttributeCallback('set', tagname, name);
 32.7576 +        if (callback) {
 32.7577 +            callback(this, value);
 32.7578 +        }
 32.7579 +    },
 32.7580 +    setAttributeNS: function(namespaceURI, name, value) {
 32.7581 +        var result = __DOMElement__.prototype.setAttributeNS.apply(this, arguments);
 32.7582 +        __addNamedMap__(this.ownerDocument, this);
 32.7583 +        var tagname = this.tagName;
 32.7584 +        var callback = HTMLElement.getAttributeCallback('set', tagname, name);
 32.7585 +        if (callback) {
 32.7586 +            callback(this, value);
 32.7587 +        }
 32.7588 +
 32.7589 +        return result;
 32.7590 +    },
 32.7591 +    setAttributeNode: function(newnode) {
 32.7592 +        var result = __DOMElement__.prototype.setAttributeNode.apply(this, arguments);
 32.7593 +        __addNamedMap__(this.ownerDocument, this);
 32.7594 +        var tagname = this.tagName;
 32.7595 +        var callback = HTMLElement.getAttributeCallback('set', tagname, newnode.name);
 32.7596 +        if (callback) {
 32.7597 +            callback(this, node.value);
 32.7598 +        }
 32.7599 +        return result;
 32.7600 +    },
 32.7601 +    setAttributeNodeNS: function(newnode) {
 32.7602 +        var result = __DOMElement__.prototype.setAttributeNodeNS.apply(this, arguments);
 32.7603 +        __addNamedMap__(this.ownerDocument, this);
 32.7604 +        var tagname = this.tagName;
 32.7605 +        var callback = HTMLElement.getAttributeCallback('set', tagname, newnode.name);
 32.7606 +        if (callback) {
 32.7607 +            callback(this, node.value);
 32.7608 +        }
 32.7609 +        return result;
 32.7610 +    },
 32.7611 +    removeAttribute: function(name) {
 32.7612 +        __removeNamedMap__(this.ownerDocument, this);
 32.7613 +        return __DOMElement__.prototype.removeAttribute.apply(this, arguments);
 32.7614 +    },
 32.7615 +    removeAttributeNS: function(namespace, localname) {
 32.7616 +        __removeNamedMap__(this.ownerDocument, this);
 32.7617 +        return __DOMElement__.prototype.removeAttributeNS.apply(this, arguments);
 32.7618 +    },
 32.7619 +    removeAttributeNode: function(name) {
 32.7620 +        __removeNamedMap__(this.ownerDocument, this);
 32.7621 +        return __DOMElement__.prototype.removeAttribute.apply(this, arguments);
 32.7622 +    },
 32.7623 +    removeChild: function(oldChild) {
 32.7624 +        __removeNamedMap__(this.ownerDocument, oldChild);
 32.7625 +        return __DOMElement__.prototype.removeChild.apply(this, arguments);
 32.7626 +    },
 32.7627 +    importNode: function(othernode, deep) {
 32.7628 +        var newnode = __DOMElement__.prototype.importNode.apply(this, arguments);
 32.7629 +        __addNamedMap__(this.ownerDocument, newnode);
 32.7630 +        return newnode;
 32.7631 +    },
 32.7632 +
 32.7633 +    // not actually sure if this is needed or not
 32.7634 +    replaceNode: function(newchild, oldchild) {
 32.7635 +        var newnode = __DOMElement__.prototype.replaceNode.apply(this, arguments);
 32.7636 +        __removeNamedMap__(this.ownerDocument, oldchild);
 32.7637 +        __addNamedMap__(this.ownerDocument, newnode);
 32.7638 +                return newnode;
 32.7639 +    }
 32.7640 +});
 32.7641 +
 32.7642 +
 32.7643 +HTMLElement.attributeCallbacks = {};
 32.7644 +HTMLElement.registerSetAttribute = function(tag, attrib, callbackfn) {
 32.7645 +    HTMLElement.attributeCallbacks[tag + ':set:' + attrib] = callbackfn;
 32.7646 +};
 32.7647 +HTMLElement.registerRemoveAttribute = function(tag, attrib, callbackfn) {
 32.7648 +    HTMLElement.attributeCallbacks[tag + ':remove:' + attrib] = callbackfn;
 32.7649 +};
 32.7650 +
 32.7651 +/**
 32.7652 + * This is really only useful internally
 32.7653 + *
 32.7654 + */
 32.7655 +HTMLElement.getAttributeCallback = function(type, tag, attrib) {
 32.7656 +    return HTMLElement.attributeCallbacks[tag + ':' + type + ':' + attrib] || null;
 32.7657 +};
 32.7658 +/*
 32.7659 + * HTMLCollection
 32.7660 + *
 32.7661 + * HTML5 -- 2.7.2.1 HTMLCollection
 32.7662 + * http://dev.w3.org/html5/spec/Overview.html#htmlcollection
 32.7663 + * http://dev.w3.org/html5/spec/Overview.html#collections
 32.7664 + */
 32.7665 +HTMLCollection = function(nodelist, type) {
 32.7666 +
 32.7667 +    __setArray__(this, []);
 32.7668 +    var n;
 32.7669 +    for (var i=0; i<nodelist.length; i++) {
 32.7670 +        this[i] = nodelist[i];
 32.7671 +        n = nodelist[i].name;
 32.7672 +        if (n) {
 32.7673 +            this[n] = nodelist[i];
 32.7674 +        }
 32.7675 +        n = nodelist[i].id;
 32.7676 +        if (n) {
 32.7677 +            this[n] = nodelist[i];
 32.7678 +        }
 32.7679 +    }
 32.7680 +
 32.7681 +    this.length = nodelist.length;
 32.7682 +};
 32.7683 +
 32.7684 +HTMLCollection.prototype = {
 32.7685 +
 32.7686 +    item: function (idx) {
 32.7687 +        return  ((idx >= 0) && (idx < this.length)) ? this[idx] : null;
 32.7688 +    },
 32.7689 +
 32.7690 +    namedItem: function (name) {
 32.7691 +        return this[name] || null;
 32.7692 +    },
 32.7693 +
 32.7694 +    toString: function() {
 32.7695 +        return '[object HTMLCollection]';
 32.7696 +    }
 32.7697 +};
 32.7698 +/*
 32.7699 + *  a set of convenience classes to centralize implementation of
 32.7700 + * properties and methods across multiple in-form elements
 32.7701 + *
 32.7702 + *  the hierarchy of related HTML elements and their members is as follows:
 32.7703 + *
 32.7704 + * Condensed Version
 32.7705 + *
 32.7706 + *  HTMLInputCommon
 32.7707 + *     * legent (no value attr)
 32.7708 + *     * fieldset (no value attr)
 32.7709 + *     * label (no value attr)
 32.7710 + *     * option (custom value)
 32.7711 + *  HTMLTypeValueInputs (extends InputCommon)
 32.7712 + *     * select  (custom value)
 32.7713 + *     * button (just sets value)
 32.7714 + *  HTMLInputAreaCommon (extends TypeValueIput)
 32.7715 + *     * input  (custom)
 32.7716 + *     * textarea (just sets value)
 32.7717 + *
 32.7718 + * -----------------------
 32.7719 + *    HTMLInputCommon:  common to all elements
 32.7720 + *       .form
 32.7721 + *
 32.7722 + *    <legend>
 32.7723 + *          [common plus:]
 32.7724 + *       .align
 32.7725 + *
 32.7726 + *    <fieldset>
 32.7727 + *          [identical to "legend" plus:]
 32.7728 + *       .margin
 32.7729 + *
 32.7730 + *
 32.7731 + *  ****
 32.7732 + *
 32.7733 + *    <label>
 32.7734 + *          [common plus:]
 32.7735 + *       .dataFormatAs
 32.7736 + *       .htmlFor
 32.7737 + *       [plus data properties]
 32.7738 + *
 32.7739 + *    <option>
 32.7740 + *          [common plus:]
 32.7741 + *       .defaultSelected
 32.7742 + *       .index
 32.7743 + *       .label
 32.7744 + *       .selected
 32.7745 + *       .text
 32.7746 + *       .value   // unique implementation, not duplicated
 32.7747 + *       .form    // unique implementation, not duplicated
 32.7748 + *  ****
 32.7749 + *
 32.7750 + *    HTMLTypeValueInputs:  common to remaining elements
 32.7751 + *          [common plus:]
 32.7752 + *       .name
 32.7753 + *       .type
 32.7754 + *       .value
 32.7755 + *       [plus data properties]
 32.7756 + *
 32.7757 + *
 32.7758 + *    <select>
 32.7759 + *       .length
 32.7760 + *       .multiple
 32.7761 + *       .options[]
 32.7762 + *       .selectedIndex
 32.7763 + *       .add()
 32.7764 + *       .remove()
 32.7765 + *       .item()                                       // unimplemented
 32.7766 + *       .namedItem()                                  // unimplemented
 32.7767 + *       [plus ".onchange"]
 32.7768 + *       [plus focus events]
 32.7769 + *       [plus data properties]
 32.7770 + *       [plus ".size"]
 32.7771 + *
 32.7772 + *    <button>
 32.7773 + *       .dataFormatAs   // duplicated from above, oh well....
 32.7774 + *       [plus ".status", ".createTextRange()"]
 32.7775 + *
 32.7776 + *  ****
 32.7777 + *
 32.7778 + *    HTMLInputAreaCommon:  common to remaining elements
 32.7779 + *       .defaultValue
 32.7780 + *       .readOnly
 32.7781 + *       .handleEvent()                                // unimplemented
 32.7782 + *       .select()
 32.7783 + *       .onselect
 32.7784 + *       [plus ".size"]
 32.7785 + *       [plus ".status", ".createTextRange()"]
 32.7786 + *       [plus focus events]
 32.7787 + *       [plus ".onchange"]
 32.7788 + *
 32.7789 + *    <textarea>
 32.7790 + *       .cols
 32.7791 + *       .rows
 32.7792 + *       .wrap                                         // unimplemented
 32.7793 + *       .onscroll                                     // unimplemented
 32.7794 + *
 32.7795 + *    <input>
 32.7796 + *       .alt
 32.7797 + *       .accept                                       // unimplemented
 32.7798 + *       .checked
 32.7799 + *       .complete                                     // unimplemented
 32.7800 + *       .defaultChecked
 32.7801 + *       .dynsrc                                       // unimplemented
 32.7802 + *       .height
 32.7803 + *       .hspace                                       // unimplemented
 32.7804 + *       .indeterminate                                // unimplemented
 32.7805 + *       .loop                                         // unimplemented
 32.7806 + *       .lowsrc                                       // unimplemented
 32.7807 + *       .maxLength
 32.7808 + *       .src
 32.7809 + *       .start                                        // unimplemented
 32.7810 + *       .useMap
 32.7811 + *       .vspace                                       // unimplemented
 32.7812 + *       .width
 32.7813 + *       .onclick
 32.7814 + *       [plus ".size"]
 32.7815 + *       [plus ".status", ".createTextRange()"]
 32.7816 +
 32.7817 + *    [data properties]                                // unimplemented
 32.7818 + *       .dataFld
 32.7819 + *       .dataSrc
 32.7820 +
 32.7821 + *    [status stuff]                                   // unimplemented
 32.7822 + *       .status
 32.7823 + *       .createTextRange()
 32.7824 +
 32.7825 + *    [focus events]
 32.7826 + *       .onblur
 32.7827 + *       .onfocus
 32.7828 +
 32.7829 + */
 32.7830 +
 32.7831 +
 32.7832 +
 32.7833 +var inputElements_dataProperties = {};
 32.7834 +var inputElements_status = {};
 32.7835 +
 32.7836 +var inputElements_onchange = {
 32.7837 +    onchange: function(event){
 32.7838 +        __eval__(this.getAttribute('onchange')||'', this);
 32.7839 +    }
 32.7840 +};
 32.7841 +
 32.7842 +var inputElements_size = {
 32.7843 +    get size(){
 32.7844 +        return Number(this.getAttribute('size'));
 32.7845 +    },
 32.7846 +    set size(value){
 32.7847 +        this.setAttribute('size',value);
 32.7848 +    }
 32.7849 +};
 32.7850 +
 32.7851 +var inputElements_focusEvents = {
 32.7852 +    blur: function(){
 32.7853 +        __blur__(this);
 32.7854 +
 32.7855 +        if (this._oldValue != this.value){
 32.7856 +            var event = document.createEvent("HTMLEvents");
 32.7857 +            event.initEvent("change", true, true);
 32.7858 +            this.dispatchEvent( event );
 32.7859 +        }
 32.7860 +    },
 32.7861 +    focus: function(){
 32.7862 +        __focus__(this);
 32.7863 +        this._oldValue = this.value;
 32.7864 +    }
 32.7865 +};
 32.7866 +
 32.7867 +
 32.7868 +/*
 32.7869 +* HTMLInputCommon - convenience class, not DOM
 32.7870 +*/
 32.7871 +var HTMLInputCommon = function(ownerDocument) {
 32.7872 +    HTMLElement.apply(this, arguments);
 32.7873 +};
 32.7874 +HTMLInputCommon.prototype = new HTMLElement();
 32.7875 +__extend__(HTMLInputCommon.prototype, {
 32.7876 +    get form() {
 32.7877 +        // parent can be null if element is outside of a form
 32.7878 +        // or not yet added to the document
 32.7879 +        var parent = this.parentNode;
 32.7880 +        while (parent && parent.nodeName.toLowerCase() !== 'form') {
 32.7881 +            parent = parent.parentNode;
 32.7882 +        }
 32.7883 +        return parent;
 32.7884 +    },
 32.7885 +    get accessKey(){
 32.7886 +        return this.getAttribute('accesskey');
 32.7887 +    },
 32.7888 +    set accessKey(value){
 32.7889 +        this.setAttribute('accesskey',value);
 32.7890 +    },
 32.7891 +    get access(){
 32.7892 +        return this.getAttribute('access');
 32.7893 +    },
 32.7894 +    set access(value){
 32.7895 +        this.setAttribute('access', value);
 32.7896 +    },
 32.7897 +    get disabled(){
 32.7898 +        return (this.getAttribute('disabled') === 'disabled');
 32.7899 +    },
 32.7900 +    set disabled(value){
 32.7901 +        this.setAttribute('disabled', (value ? 'disabled' :''));
 32.7902 +    }
 32.7903 +});
 32.7904 +
 32.7905 +
 32.7906 +
 32.7907 +
 32.7908 +/*
 32.7909 +* HTMLTypeValueInputs - convenience class, not DOM
 32.7910 +*/
 32.7911 +var HTMLTypeValueInputs = function(ownerDocument) {
 32.7912 +
 32.7913 +    HTMLInputCommon.apply(this, arguments);
 32.7914 +
 32.7915 +    this._oldValue = "";
 32.7916 +};
 32.7917 +HTMLTypeValueInputs.prototype = new HTMLInputCommon();
 32.7918 +__extend__(HTMLTypeValueInputs.prototype, inputElements_size);
 32.7919 +__extend__(HTMLTypeValueInputs.prototype, inputElements_status);
 32.7920 +__extend__(HTMLTypeValueInputs.prototype, inputElements_dataProperties);
 32.7921 +__extend__(HTMLTypeValueInputs.prototype, {
 32.7922 +    get name(){
 32.7923 +        return this.getAttribute('name')||'';
 32.7924 +    },
 32.7925 +    set name(value){
 32.7926 +        this.setAttribute('name',value);
 32.7927 +    },
 32.7928 +});
 32.7929 +
 32.7930 +
 32.7931 +/*
 32.7932 +* HTMLInputAreaCommon - convenience class, not DOM
 32.7933 +*/
 32.7934 +var HTMLInputAreaCommon = function(ownerDocument) {
 32.7935 +    HTMLTypeValueInputs.apply(this, arguments);
 32.7936 +};
 32.7937 +HTMLInputAreaCommon.prototype = new HTMLTypeValueInputs();
 32.7938 +__extend__(HTMLInputAreaCommon.prototype, inputElements_focusEvents);
 32.7939 +__extend__(HTMLInputAreaCommon.prototype, inputElements_onchange);
 32.7940 +__extend__(HTMLInputAreaCommon.prototype, {
 32.7941 +    get readOnly(){
 32.7942 +        return (this.getAttribute('readonly')=='readonly');
 32.7943 +    },
 32.7944 +    set readOnly(value){
 32.7945 +        this.setAttribute('readonly', (value ? 'readonly' :''));
 32.7946 +    },
 32.7947 +    select:function(){
 32.7948 +        __select__(this);
 32.7949 +
 32.7950 +    }
 32.7951 +});
 32.7952 +
 32.7953 +
 32.7954 +var __updateFormForNamedElement__ = function(node, value) {
 32.7955 +    if (node.form) {
 32.7956 +        // to check for ID or NAME attribute too
 32.7957 +        // not, then nothing to do
 32.7958 +        node.form._updateElements();
 32.7959 +    }
 32.7960 +};
 32.7961 +
 32.7962 +/**
 32.7963 + * HTMLAnchorElement - DOM Level 2
 32.7964 + *
 32.7965 + * HTML5: 4.6.1 The a element
 32.7966 + * http://dev.w3.org/html5/spec/Overview.html#the-a-element
 32.7967 + */
 32.7968 +HTMLAnchorElement = function(ownerDocument) {
 32.7969 +    HTMLElement.apply(this, arguments);
 32.7970 +};
 32.7971 +HTMLAnchorElement.prototype = new HTMLElement();
 32.7972 +__extend__(HTMLAnchorElement.prototype, {
 32.7973 +    get accessKey() {
 32.7974 +        return this.getAttribute("accesskey")||'';
 32.7975 +    },
 32.7976 +    set accessKey(val) {
 32.7977 +        return this.setAttribute("accesskey",val);
 32.7978 +    },
 32.7979 +    get charset() {
 32.7980 +        return this.getAttribute("charset")||'';
 32.7981 +    },
 32.7982 +    set charset(val) {
 32.7983 +        return this.setAttribute("charset",val);
 32.7984 +    },
 32.7985 +    get coords() {
 32.7986 +        return this.getAttribute("coords")||'';
 32.7987 +    },
 32.7988 +    set coords(val) {
 32.7989 +        return this.setAttribute("coords",val);
 32.7990 +    },
 32.7991 +    get href() {
 32.7992 +        var link = this.getAttribute('href');
 32.7993 +        if (!link) {
 32.7994 +            return '';
 32.7995 +        }
 32.7996 +        return Envjs.uri(link,
 32.7997 +                         this.ownerDocument.location.toString());
 32.7998 +    },
 32.7999 +    set href(val) {
 32.8000 +        return this.setAttribute("href", val);
 32.8001 +    },
 32.8002 +    get hreflang() {
 32.8003 +        return this.getAttribute("hreflang")||'';
 32.8004 +    },
 32.8005 +    set hreflang(val) {
 32.8006 +        this.setAttribute("hreflang",val);
 32.8007 +    },
 32.8008 +    get name() {
 32.8009 +        return this.getAttribute("name")||'';
 32.8010 +    },
 32.8011 +    set name(val) {
 32.8012 +        this.setAttribute("name",val);
 32.8013 +    },
 32.8014 +    get rel() {
 32.8015 +        return this.getAttribute("rel")||'';
 32.8016 +    },
 32.8017 +    set rel(val) {
 32.8018 +        return this.setAttribute("rel", val);
 32.8019 +    },
 32.8020 +    get rev() {
 32.8021 +        return this.getAttribute("rev")||'';
 32.8022 +    },
 32.8023 +    set rev(val) {
 32.8024 +        return this.setAttribute("rev",val);
 32.8025 +    },
 32.8026 +    get shape() {
 32.8027 +        return this.getAttribute("shape")||'';
 32.8028 +    },
 32.8029 +    set shape(val) {
 32.8030 +        return this.setAttribute("shape",val);
 32.8031 +    },
 32.8032 +    get target() {
 32.8033 +        return this.getAttribute("target")||'';
 32.8034 +    },
 32.8035 +    set target(val) {
 32.8036 +        return this.setAttribute("target",val);
 32.8037 +    },
 32.8038 +    get type() {
 32.8039 +        return this.getAttribute("type")||'';
 32.8040 +    },
 32.8041 +    set type(val) {
 32.8042 +        return this.setAttribute("type",val);
 32.8043 +    },
 32.8044 +    blur: function() {
 32.8045 +        __blur__(this);
 32.8046 +    },
 32.8047 +    focus: function() {
 32.8048 +        __focus__(this);
 32.8049 +    },
 32.8050 +
 32.8051 +    /**
 32.8052 +     * Unlike other elements, toString returns the href
 32.8053 +     */
 32.8054 +    toString: function() {
 32.8055 +        return this.href;
 32.8056 +    }
 32.8057 +});
 32.8058 +
 32.8059 +/*
 32.8060 + * HTMLAreaElement - DOM Level 2
 32.8061 + *
 32.8062 + * HTML5: 4.8.13 The area element
 32.8063 + * http://dev.w3.org/html5/spec/Overview.html#the-area-element
 32.8064 + */
 32.8065 +HTMLAreaElement = function(ownerDocument) {
 32.8066 +    HTMLElement.apply(this, arguments);
 32.8067 +};
 32.8068 +HTMLAreaElement.prototype = new HTMLElement();
 32.8069 +__extend__(HTMLAreaElement.prototype, {
 32.8070 +    get accessKey(){
 32.8071 +        return this.getAttribute('accesskey');
 32.8072 +    },
 32.8073 +    set accessKey(value){
 32.8074 +        this.setAttribute('accesskey',value);
 32.8075 +    },
 32.8076 +    get alt(){
 32.8077 +        return this.getAttribute('alt') || '';
 32.8078 +    },
 32.8079 +    set alt(value){
 32.8080 +        this.setAttribute('alt',value);
 32.8081 +    },
 32.8082 +    get coords(){
 32.8083 +        return this.getAttribute('coords');
 32.8084 +    },
 32.8085 +    set coords(value){
 32.8086 +        this.setAttribute('coords',value);
 32.8087 +    },
 32.8088 +    get href(){
 32.8089 +        return this.getAttribute('href') || '';
 32.8090 +    },
 32.8091 +    set href(value){
 32.8092 +        this.setAttribute('href',value);
 32.8093 +    },
 32.8094 +    get noHref(){
 32.8095 +        return this.hasAttribute('href');
 32.8096 +    },
 32.8097 +    get shape(){
 32.8098 +        //TODO
 32.8099 +        return 0;
 32.8100 +    },
 32.8101 +    /*get tabIndex(){
 32.8102 +      return this.getAttribute('tabindex');
 32.8103 +      },
 32.8104 +      set tabIndex(value){
 32.8105 +      this.setAttribute('tabindex',value);
 32.8106 +      },*/
 32.8107 +    get target(){
 32.8108 +        return this.getAttribute('target');
 32.8109 +    },
 32.8110 +    set target(value){
 32.8111 +        this.setAttribute('target',value);
 32.8112 +    },
 32.8113 +
 32.8114 +    /**
 32.8115 +     * toString like <a>, returns the href
 32.8116 +     */
 32.8117 +    toString: function() {
 32.8118 +        return this.href;
 32.8119 +    }
 32.8120 +});
 32.8121 +
 32.8122 +
 32.8123 +/*
 32.8124 + * HTMLBaseElement - DOM Level 2
 32.8125 + *
 32.8126 + * HTML5: 4.2.3 The base element
 32.8127 + * http://dev.w3.org/html5/spec/Overview.html#the-base-element
 32.8128 + */
 32.8129 +HTMLBaseElement = function(ownerDocument) {
 32.8130 +    HTMLElement.apply(this, arguments);
 32.8131 +};
 32.8132 +HTMLBaseElement.prototype = new HTMLElement();
 32.8133 +__extend__(HTMLBaseElement.prototype, {
 32.8134 +    get href(){
 32.8135 +        return this.getAttribute('href');
 32.8136 +    },
 32.8137 +    set href(value){
 32.8138 +        this.setAttribute('href',value);
 32.8139 +    },
 32.8140 +    get target(){
 32.8141 +        return this.getAttribute('target');
 32.8142 +    },
 32.8143 +    set target(value){
 32.8144 +        this.setAttribute('target',value);
 32.8145 +    },
 32.8146 +    toString: function() {
 32.8147 +        return '[object HTMLBaseElement]';
 32.8148 +    }
 32.8149 +});
 32.8150 +
 32.8151 +
 32.8152 +/*
 32.8153 + * HTMLQuoteElement - DOM Level 2
 32.8154 + * HTML5: 4.5.5 The blockquote element
 32.8155 + * http://dev.w3.org/html5/spec/Overview.html#htmlquoteelement
 32.8156 + */
 32.8157 +HTMLQuoteElement = function(ownerDocument) {
 32.8158 +    HTMLElement.apply(this, arguments);
 32.8159 +};
 32.8160 +__extend__(HTMLQuoteElement.prototype, HTMLElement.prototype);
 32.8161 +__extend__(HTMLQuoteElement.prototype, {
 32.8162 +    /**
 32.8163 +     * Quoth the spec:
 32.8164 +     * """
 32.8165 +     * If the cite attribute is present, it must be a valid URL. To
 32.8166 +     * obtain the corresponding citation link, the value of the
 32.8167 +     * attribute must be resolved relative to the element. User agents
 32.8168 +     * should allow users to follow such citation links.
 32.8169 +     * """
 32.8170 +     *
 32.8171 +     * TODO: normalize
 32.8172 +     *
 32.8173 +     */
 32.8174 +    get cite() {
 32.8175 +        return this.getAttribute('cite') || '';
 32.8176 +    },
 32.8177 +
 32.8178 +    set cite(value) {
 32.8179 +        this.setAttribute('cite', value);
 32.8180 +    },
 32.8181 +    toString: function() {
 32.8182 +        return '[object HTMLQuoteElement]';
 32.8183 +    }
 32.8184 +});
 32.8185 +
 32.8186 +/*
 32.8187 + * HTMLBodyElement - DOM Level 2
 32.8188 + * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-body-element-0
 32.8189 + */
 32.8190 +HTMLBodyElement = function(ownerDocument) {
 32.8191 +    HTMLElement.apply(this, arguments);
 32.8192 +};
 32.8193 +HTMLBodyElement.prototype = new HTMLElement();
 32.8194 +__extend__(HTMLBodyElement.prototype, {
 32.8195 +    onload: function(event){
 32.8196 +        __eval__(this.getAttribute('onload')||'', this);
 32.8197 +    },
 32.8198 +    onunload: function(event){
 32.8199 +        __eval__(this.getAttribute('onunload')||'', this);
 32.8200 +    },
 32.8201 +    toString: function() {
 32.8202 +        return '[object HTMLBodyElement]';
 32.8203 +    }
 32.8204 +});
 32.8205 +
 32.8206 +/*
 32.8207 + * HTMLBRElement
 32.8208 + * HTML5: 4.5.3 The hr Element
 32.8209 + * http://dev.w3.org/html5/spec/Overview.html#the-br-element
 32.8210 + */
 32.8211 +HTMLBRElement = function(ownerDocument) {
 32.8212 +    HTMLElement.apply(this, arguments);
 32.8213 +};
 32.8214 +
 32.8215 +HTMLBRElement.prototype = new HTMLElement();
 32.8216 +__extend__(HTMLBRElement.prototype, {
 32.8217 +
 32.8218 +    // no additional properties or elements
 32.8219 +
 32.8220 +    toString: function() {
 32.8221 +        return '[object HTMLBRElement]';
 32.8222 +    }
 32.8223 +});
 32.8224 +
 32.8225 +
 32.8226 +/*
 32.8227 + * HTMLButtonElement - DOM Level 2
 32.8228 + *
 32.8229 + * HTML5: 4.10.6 The button element
 32.8230 + * http://dev.w3.org/html5/spec/Overview.html#the-button-element
 32.8231 + */
 32.8232 +HTMLButtonElement = function(ownerDocument) {
 32.8233 +    HTMLTypeValueInputs.apply(this, arguments);
 32.8234 +};
 32.8235 +HTMLButtonElement.prototype = new HTMLTypeValueInputs();
 32.8236 +__extend__(HTMLButtonElement.prototype, inputElements_status);
 32.8237 +__extend__(HTMLButtonElement.prototype, {
 32.8238 +    get dataFormatAs(){
 32.8239 +        return this.getAttribute('dataFormatAs');
 32.8240 +    },
 32.8241 +    set dataFormatAs(value){
 32.8242 +        this.setAttribute('dataFormatAs',value);
 32.8243 +    },
 32.8244 +    get type() {
 32.8245 +        return this.getAttribute('type') || 'submit';
 32.8246 +    },
 32.8247 +    set type(value) {
 32.8248 +        this.setAttribute('type', value);
 32.8249 +    },
 32.8250 +    get value() {
 32.8251 +        return this.getAttribute('value') || '';
 32.8252 +    },
 32.8253 +    set value(value) {
 32.8254 +        this.setAttribute('value', value);
 32.8255 +    },
 32.8256 +    toString: function() {
 32.8257 +        return '[object HTMLButtonElement]';
 32.8258 +    }
 32.8259 +});
 32.8260 +
 32.8261 +// Named Element Support
 32.8262 +HTMLElement.registerSetAttribute('BUTTON', 'name',
 32.8263 +                                 __updateFormForNamedElement__);
 32.8264 +
 32.8265 +/*
 32.8266 + * HTMLCanvasElement - DOM Level 2
 32.8267 + * HTML5: 4.8.11 The canvas element
 32.8268 + * http://dev.w3.org/html5/spec/Overview.html#the-canvas-element
 32.8269 + */
 32.8270 +
 32.8271 +
 32.8272 +/*
 32.8273 + * This is a "non-Abstract Base Class". For an implmentation that actually
 32.8274 + * did something, all these methods would need to over-written
 32.8275 + */
 32.8276 +CanvasRenderingContext2D = function() {
 32.8277 +    // NOP
 32.8278 +};
 32.8279 +
 32.8280 +var nullfunction = function() {};
 32.8281 +
 32.8282 +CanvasRenderingContext2D.prototype = {
 32.8283 +    addColorStop: nullfunction,
 32.8284 +    arc: nullfunction,
 32.8285 +    beginPath: nullfunction,
 32.8286 +    bezierCurveTo: nullfunction,
 32.8287 +    clearRect: nullfunction,
 32.8288 +    clip: nullfunction,
 32.8289 +    closePath: nullfunction,
 32.8290 +    createLinearGradient: nullfunction,
 32.8291 +    createPattern: nullfunction,
 32.8292 +    createRadialGradient: nullfunction,
 32.8293 +    drawImage: nullfunction,
 32.8294 +    fill: nullfunction,
 32.8295 +    fillRect:  nullfunction,
 32.8296 +    lineTo: nullfunction,
 32.8297 +    moveTo: nullfunction,
 32.8298 +    quadraticCurveTo: nullfunction,
 32.8299 +    rect: nullfunction,
 32.8300 +    restore: nullfunction,
 32.8301 +    rotate: nullfunction,
 32.8302 +    save: nullfunction,
 32.8303 +    scale: nullfunction,
 32.8304 +    setTranform: nullfunction,
 32.8305 +    stroke: nullfunction,
 32.8306 +    strokeRect: nullfunction,
 32.8307 +    transform: nullfunction,
 32.8308 +    translate: nullfunction,
 32.8309 +
 32.8310 +    toString: function() {
 32.8311 +        return '[object CanvasRenderingContext2D]';
 32.8312 +    }
 32.8313 +};
 32.8314 +
 32.8315 +HTMLCanvasElement = function(ownerDocument) {
 32.8316 +    HTMLElement.apply(this, arguments);
 32.8317 +};
 32.8318 +HTMLCanvasElement.prototype = new HTMLElement();
 32.8319 +__extend__(HTMLCanvasElement.prototype, {
 32.8320 +
 32.8321 +    getContext: function(ctxtype) {
 32.8322 +        if (ctxtype === '2d') {
 32.8323 +            return new CanvasRenderingContext2D();
 32.8324 +        }
 32.8325 +        throw new Error("Unknown context type of '" + ctxtype + '"');
 32.8326 +    },
 32.8327 +
 32.8328 +    get height(){
 32.8329 +        return Number(this.getAttribute('height')|| 150);
 32.8330 +    },
 32.8331 +    set height(value){
 32.8332 +        this.setAttribute('height', value);
 32.8333 +    },
 32.8334 +
 32.8335 +    get width(){
 32.8336 +        return Number(this.getAttribute('width')|| 300);
 32.8337 +    },
 32.8338 +    set width(value){
 32.8339 +        this.setAttribute('width', value);
 32.8340 +    },
 32.8341 +
 32.8342 +    toString: function() {
 32.8343 +        return '[object HTMLCanvasElement]';
 32.8344 +    }
 32.8345 +
 32.8346 +});
 32.8347 +
 32.8348 +
 32.8349 +/*
 32.8350 +* HTMLTableColElement - DOM Level 2
 32.8351 +*
 32.8352 +* HTML5: 4.9.3 The colgroup element
 32.8353 +* http://dev.w3.org/html5/spec/Overview.html#the-colgroup-element
 32.8354 +*/
 32.8355 +HTMLTableColElement = function(ownerDocument) {
 32.8356 +    HTMLElement.apply(this, arguments);
 32.8357 +};
 32.8358 +HTMLTableColElement.prototype = new HTMLElement();
 32.8359 +__extend__(HTMLTableColElement.prototype, {
 32.8360 +    get align(){
 32.8361 +        return this.getAttribute('align');
 32.8362 +    },
 32.8363 +    set align(value){
 32.8364 +        this.setAttribute('align', value);
 32.8365 +    },
 32.8366 +    get ch(){
 32.8367 +        return this.getAttribute('ch');
 32.8368 +    },
 32.8369 +    set ch(value){
 32.8370 +        this.setAttribute('ch', value);
 32.8371 +    },
 32.8372 +    get chOff(){
 32.8373 +        return this.getAttribute('ch');
 32.8374 +    },
 32.8375 +    set chOff(value){
 32.8376 +        this.setAttribute('ch', value);
 32.8377 +    },
 32.8378 +    get span(){
 32.8379 +        return this.getAttribute('span');
 32.8380 +    },
 32.8381 +    set span(value){
 32.8382 +        this.setAttribute('span', value);
 32.8383 +    },
 32.8384 +    get vAlign(){
 32.8385 +        return this.getAttribute('valign');
 32.8386 +    },
 32.8387 +    set vAlign(value){
 32.8388 +        this.setAttribute('valign', value);
 32.8389 +    },
 32.8390 +    get width(){
 32.8391 +        return this.getAttribute('width');
 32.8392 +    },
 32.8393 +    set width(value){
 32.8394 +        this.setAttribute('width', value);
 32.8395 +    },
 32.8396 +    toString: function() {
 32.8397 +        return '[object HTMLTableColElement]';
 32.8398 +    }
 32.8399 +});
 32.8400 +
 32.8401 +
 32.8402 +/*
 32.8403 + * HTMLModElement - DOM Level 2
 32.8404 + * http://dev.w3.org/html5/spec/Overview.html#htmlmodelement
 32.8405 + */
 32.8406 +HTMLModElement = function(ownerDocument) {
 32.8407 +    HTMLElement.apply(this, arguments);
 32.8408 +};
 32.8409 +HTMLModElement.prototype = new HTMLElement();
 32.8410 +__extend__(HTMLModElement.prototype, {
 32.8411 +    get cite(){
 32.8412 +        return this.getAttribute('cite');
 32.8413 +    },
 32.8414 +    set cite(value){
 32.8415 +        this.setAttribute('cite', value);
 32.8416 +    },
 32.8417 +    get dateTime(){
 32.8418 +        return this.getAttribute('datetime');
 32.8419 +    },
 32.8420 +    set dateTime(value){
 32.8421 +        this.setAttribute('datetime', value);
 32.8422 +    },
 32.8423 +    toString: function() {
 32.8424 +        return '[object HTMLModElement]';
 32.8425 +    }
 32.8426 +});
 32.8427 +
 32.8428 +/*
 32.8429 + * HTMLDivElement - DOM Level 2
 32.8430 + * HTML5: 4.5.12 The Div Element
 32.8431 + * http://dev.w3.org/html5/spec/Overview.html#the-div-element
 32.8432 + */
 32.8433 +HTMLDivElement = function(ownerDocument) {
 32.8434 +    HTMLElement.apply(this, arguments);
 32.8435 +};
 32.8436 +
 32.8437 +HTMLDivElement.prototype = new HTMLElement();
 32.8438 +__extend__(HTMLDivElement.prototype, {
 32.8439 +    get align(){
 32.8440 +        return this.getAttribute('align') || 'left';
 32.8441 +    },
 32.8442 +    set align(value){
 32.8443 +        this.setAttribute('align', value);
 32.8444 +    },
 32.8445 +    toString: function() {
 32.8446 +        return '[object HTMLDivElement]';
 32.8447 +    }
 32.8448 +});
 32.8449 +
 32.8450 +
 32.8451 +/*
 32.8452 + * HTMLDListElement
 32.8453 + * HTML5: 4.5.7 The dl Element
 32.8454 + * http://dev.w3.org/html5/spec/Overview.html#the-dl-element
 32.8455 + */
 32.8456 +HTMLDListElement = function(ownerDocument) {
 32.8457 +    HTMLElement.apply(this, arguments);
 32.8458 +};
 32.8459 +
 32.8460 +HTMLDListElement.prototype = new HTMLElement();
 32.8461 +__extend__(HTMLDListElement.prototype, {
 32.8462 +
 32.8463 +    // no additional properties or elements
 32.8464 +
 32.8465 +    toString: function() {
 32.8466 +        return '[object HTMLDListElement]';
 32.8467 +    }
 32.8468 +});
 32.8469 +
 32.8470 +
 32.8471 +/**
 32.8472 + * HTMLLegendElement - DOM Level 2
 32.8473 + *
 32.8474 + * HTML5: 4.10.3 The legend element
 32.8475 + * http://dev.w3.org/html5/spec/Overview.html#the-legend-element
 32.8476 + */
 32.8477 +HTMLLegendElement = function(ownerDocument) {
 32.8478 +    HTMLInputCommon.apply(this, arguments);
 32.8479 +};
 32.8480 +HTMLLegendElement.prototype = new HTMLInputCommon();
 32.8481 +__extend__(HTMLLegendElement.prototype, {
 32.8482 +    get align(){
 32.8483 +        return this.getAttribute('align');
 32.8484 +    },
 32.8485 +    set align(value){
 32.8486 +        this.setAttribute('align',value);
 32.8487 +    }
 32.8488 +});
 32.8489 +
 32.8490 +
 32.8491 +/*
 32.8492 + * HTMLFieldSetElement - DOM Level 2
 32.8493 + *
 32.8494 + * HTML5: 4.10.2 The fieldset element
 32.8495 + * http://dev.w3.org/html5/spec/Overview.html#the-fieldset-element
 32.8496 + */
 32.8497 +HTMLFieldSetElement = function(ownerDocument) {
 32.8498 +    HTMLLegendElement.apply(this, arguments);
 32.8499 +};
 32.8500 +HTMLFieldSetElement.prototype = new HTMLLegendElement();
 32.8501 +__extend__(HTMLFieldSetElement.prototype, {
 32.8502 +    get margin(){
 32.8503 +        return this.getAttribute('margin');
 32.8504 +    },
 32.8505 +    set margin(value){
 32.8506 +        this.setAttribute('margin',value);
 32.8507 +    },
 32.8508 +    toString: function() {
 32.8509 +        return '[object HTMLFieldSetElement]';
 32.8510 +    }
 32.8511 +});
 32.8512 +
 32.8513 +// Named Element Support
 32.8514 +HTMLElement.registerSetAttribute('FIELDSET', 'name',
 32.8515 +                                 __updateFormForNamedElement__);
 32.8516 +/*
 32.8517 + * HTMLFormElement - DOM Level 2
 32.8518 + *
 32.8519 + * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-form-element
 32.8520 + */
 32.8521 +HTMLFormElement = function(ownerDocument){
 32.8522 +    HTMLElement.apply(this, arguments);
 32.8523 +
 32.8524 +    //TODO: on __elementPopped__ from the parser
 32.8525 +    //      we need to determine all the forms default
 32.8526 +    //      values
 32.8527 +};
 32.8528 +HTMLFormElement.prototype = new HTMLElement();
 32.8529 +__extend__(HTMLFormElement.prototype,{
 32.8530 +    get acceptCharset(){
 32.8531 +        return this.getAttribute('accept-charset');
 32.8532 +    },
 32.8533 +    set acceptCharset(acceptCharset) {
 32.8534 +        this.setAttribute('accept-charset', acceptCharset);
 32.8535 +    },
 32.8536 +    get action() {
 32.8537 +        return this.getAttribute('action');
 32.8538 +    },
 32.8539 +    set action(action){
 32.8540 +        this.setAttribute('action', action);
 32.8541 +    },
 32.8542 +
 32.8543 +    get enctype() {
 32.8544 +        return this.getAttribute('enctype');
 32.8545 +    },
 32.8546 +    set enctype(enctype) {
 32.8547 +        this.setAttribute('enctype', enctype);
 32.8548 +    },
 32.8549 +    get method() {
 32.8550 +        return this.getAttribute('method');
 32.8551 +    },
 32.8552 +    set method(method) {
 32.8553 +        this.setAttribute('method', method);
 32.8554 +    },
 32.8555 +    get name() {
 32.8556 +        return this.getAttribute("name");
 32.8557 +    },
 32.8558 +    set name(val) {
 32.8559 +        return this.setAttribute("name",val);
 32.8560 +    },
 32.8561 +    get target() {
 32.8562 +        return this.getAttribute("target");
 32.8563 +    },
 32.8564 +    set target(val) {
 32.8565 +        return this.setAttribute("target",val);
 32.8566 +    },
 32.8567 +
 32.8568 +    /**
 32.8569 +     * "Named Elements"
 32.8570 +     *
 32.8571 +     */
 32.8572 +    /**
 32.8573 +     * returns HTMLFormControlsCollection
 32.8574 +     * http://dev.w3.org/html5/spec/Overview.html#dom-form-elements
 32.8575 +     *
 32.8576 +     * button fieldset input keygen object output select textarea
 32.8577 +     */
 32.8578 +    get elements() {
 32.8579 +        var nodes = this.getElementsByTagName('*');
 32.8580 +        var alist = [];
 32.8581 +        var i, tmp;
 32.8582 +        for (i = 0; i < nodes.length; ++i) {
 32.8583 +            nodename = nodes[i].nodeName;
 32.8584 +            // would like to replace switch with something else
 32.8585 +            //  since it's redundant with the SetAttribute callbacks
 32.8586 +            switch (nodes[i].nodeName) {
 32.8587 +            case 'BUTTON':
 32.8588 +            case 'FIELDSET':
 32.8589 +            case 'INPUT':
 32.8590 +            case 'KEYGEN':
 32.8591 +            case 'OBJECT':
 32.8592 +            case 'OUTPUT':
 32.8593 +            case 'SELECT':
 32.8594 +            case 'TEXTAREA':
 32.8595 +                alist.push(nodes[i]);
 32.8596 +                this[i] = nodes[i];
 32.8597 +                tmp = nodes[i].name;
 32.8598 +                if (tmp) {
 32.8599 +                    this[tmp] = nodes[i];
 32.8600 +                }
 32.8601 +                tmp = nodes[i].id;
 32.8602 +                if (tmp) {
 32.8603 +                    this[tmp] = nodes[i];
 32.8604 +                }
 32.8605 +            }
 32.8606 +        }
 32.8607 +        return new HTMLCollection(alist);
 32.8608 +    },
 32.8609 +    _updateElements: function() {
 32.8610 +        this.elements;
 32.8611 +    },
 32.8612 +    get length() {
 32.8613 +        return this.elements.length;
 32.8614 +    },
 32.8615 +    item: function(idx) {
 32.8616 +        return this.elements[idx];
 32.8617 +    },
 32.8618 +    namedItem: function(aname) {
 32.8619 +        return this.elements.namedItem(aname);
 32.8620 +    },
 32.8621 +    toString: function() {
 32.8622 +        return '[object HTMLFormElement]';
 32.8623 +    },
 32.8624 +    submit: function() {
 32.8625 +        //TODO: this needs to perform the form inputs serialization
 32.8626 +        //      and submission
 32.8627 +        //  DONE: see xhr/form.js
 32.8628 +        var event = __submit__(this);
 32.8629 +
 32.8630 +    },
 32.8631 +    reset: function() {
 32.8632 +        //TODO: this needs to reset all values specified in the form
 32.8633 +        //      to those which where set as defaults
 32.8634 +        __reset__(this);
 32.8635 +
 32.8636 +    },
 32.8637 +    onsubmit: HTMLEvents.prototype.onsubmit,
 32.8638 +    onreset: HTMLEvents.prototype.onreset
 32.8639 +});
 32.8640 +
 32.8641 +/**
 32.8642 + * HTMLFrameElement - DOM Level 2
 32.8643 + */
 32.8644 +HTMLFrameElement = function(ownerDocument) {
 32.8645 +    HTMLElement.apply(this, arguments);
 32.8646 +    // this is normally a getter but we need to be
 32.8647 +    // able to set it to correctly emulate behavior
 32.8648 +    this.contentDocument = null;
 32.8649 +    this.contentWindow = null;
 32.8650 +};
 32.8651 +HTMLFrameElement.prototype = new HTMLElement();
 32.8652 +__extend__(HTMLFrameElement.prototype, {
 32.8653 +
 32.8654 +    get frameBorder(){
 32.8655 +        return this.getAttribute('border')||"";
 32.8656 +    },
 32.8657 +    set frameBorder(value){
 32.8658 +        this.setAttribute('border', value);
 32.8659 +    },
 32.8660 +    get longDesc(){
 32.8661 +        return this.getAttribute('longdesc')||"";
 32.8662 +    },
 32.8663 +    set longDesc(value){
 32.8664 +        this.setAttribute('longdesc', value);
 32.8665 +    },
 32.8666 +    get marginHeight(){
 32.8667 +        return this.getAttribute('marginheight')||"";
 32.8668 +    },
 32.8669 +    set marginHeight(value){
 32.8670 +        this.setAttribute('marginheight', value);
 32.8671 +    },
 32.8672 +    get marginWidth(){
 32.8673 +        return this.getAttribute('marginwidth')||"";
 32.8674 +    },
 32.8675 +    set marginWidth(value){
 32.8676 +        this.setAttribute('marginwidth', value);
 32.8677 +    },
 32.8678 +    get name(){
 32.8679 +        return this.getAttribute('name')||"";
 32.8680 +    },
 32.8681 +    set name(value){
 32.8682 +        this.setAttribute('name', value);
 32.8683 +    },
 32.8684 +    get noResize(){
 32.8685 +        return this.getAttribute('noresize')||false;
 32.8686 +    },
 32.8687 +    set noResize(value){
 32.8688 +        this.setAttribute('noresize', value);
 32.8689 +    },
 32.8690 +    get scrolling(){
 32.8691 +        return this.getAttribute('scrolling')||"";
 32.8692 +    },
 32.8693 +    set scrolling(value){
 32.8694 +        this.setAttribute('scrolling', value);
 32.8695 +    },
 32.8696 +    get src(){
 32.8697 +        return this.getAttribute('src')||"";
 32.8698 +    },
 32.8699 +    set src(value){
 32.8700 +        this.setAttribute('src', value);
 32.8701 +    },
 32.8702 +    toString: function(){
 32.8703 +        return '[object HTMLFrameElement]';
 32.8704 +    },
 32.8705 +    onload: HTMLEvents.prototype.onload
 32.8706 +});
 32.8707 +
 32.8708 +/**
 32.8709 + * HTMLFrameSetElement - DOM Level 2
 32.8710 + *
 32.8711 + * HTML5: 12.3.3 Frames
 32.8712 + * http://dev.w3.org/html5/spec/Overview.html#frameset
 32.8713 + */
 32.8714 +HTMLFrameSetElement = function(ownerDocument) {
 32.8715 +    HTMLElement.apply(this, arguments);
 32.8716 +};
 32.8717 +HTMLFrameSetElement.prototype = new HTMLElement();
 32.8718 +__extend__(HTMLFrameSetElement.prototype, {
 32.8719 +    get cols(){
 32.8720 +        return this.getAttribute('cols');
 32.8721 +    },
 32.8722 +    set cols(value){
 32.8723 +        this.setAttribute('cols', value);
 32.8724 +    },
 32.8725 +    get rows(){
 32.8726 +        return this.getAttribute('rows');
 32.8727 +    },
 32.8728 +    set rows(value){
 32.8729 +        this.setAttribute('rows', value);
 32.8730 +    },
 32.8731 +    toString: function() {
 32.8732 +        return '[object HTMLFrameSetElement]';
 32.8733 +    }
 32.8734 +});
 32.8735 +
 32.8736 +/*
 32.8737 + * HTMLHeadingElement
 32.8738 + * HTML5: 4.4.6 The h1, h2, h3, h4, h5, and h6 elements
 32.8739 + * http://dev.w3.org/html5/spec/Overview.html#the-h1-h2-h3-h4-h5-and-h6-elements
 32.8740 + */
 32.8741 +HTMLHeadingElement = function(ownerDocument) {
 32.8742 +    HTMLElement.apply(this, arguments);
 32.8743 +};
 32.8744 +
 32.8745 +HTMLHeadingElement.prototype = new HTMLElement();
 32.8746 +__extend__(HTMLHeadingElement.prototype, {
 32.8747 +    toString: function() {
 32.8748 +        return '[object HTMLHeadingElement]';
 32.8749 +    }
 32.8750 +});
 32.8751 +
 32.8752 +/**
 32.8753 + * HTMLHeadElement - DOM Level 2
 32.8754 + *
 32.8755 + * HTML5: 4.2.1 The head element
 32.8756 + * http://dev.w3.org/html5/spec/Overview.html#the-head-element-0
 32.8757 + */
 32.8758 +HTMLHeadElement = function(ownerDocument) {
 32.8759 +    HTMLElement.apply(this, arguments);
 32.8760 +};
 32.8761 +HTMLHeadElement.prototype = new HTMLElement();
 32.8762 +__extend__(HTMLHeadElement.prototype, {
 32.8763 +    get profile(){
 32.8764 +        return this.getAttribute('profile');
 32.8765 +    },
 32.8766 +    set profile(value){
 32.8767 +        this.setAttribute('profile', value);
 32.8768 +    },
 32.8769 +    //we override this so we can apply browser behavior specific to head children
 32.8770 +    //like loading scripts
 32.8771 +    appendChild : function(newChild) {
 32.8772 +        newChild = HTMLElement.prototype.appendChild.apply(this,[newChild]);
 32.8773 +        //TODO: evaluate scripts which are appended to the head
 32.8774 +        //__evalScript__(newChild);
 32.8775 +        return newChild;
 32.8776 +    },
 32.8777 +    insertBefore : function(newChild, refChild) {
 32.8778 +        newChild = HTMLElement.prototype.insertBefore.apply(this,[newChild]);
 32.8779 +        //TODO: evaluate scripts which are appended to the head
 32.8780 +        //__evalScript__(newChild);
 32.8781 +        return newChild;
 32.8782 +    },
 32.8783 +    toString: function(){
 32.8784 +        return '[object HTMLHeadElement]';
 32.8785 +    }
 32.8786 +});
 32.8787 +
 32.8788 +
 32.8789 +/*
 32.8790 + * HTMLHRElement
 32.8791 + * HTML5: 4.5.2 The hr Element
 32.8792 + * http://dev.w3.org/html5/spec/Overview.html#the-hr-element
 32.8793 + */
 32.8794 +HTMLHRElement = function(ownerDocument) {
 32.8795 +    HTMLElement.apply(this, arguments);
 32.8796 +};
 32.8797 +
 32.8798 +HTMLHRElement.prototype = new HTMLElement();
 32.8799 +__extend__(HTMLHRElement.prototype, {
 32.8800 +
 32.8801 +    // no additional properties or elements
 32.8802 +
 32.8803 +    toString: function() {
 32.8804 +        return '[object HTMLHRElement]';
 32.8805 +    }
 32.8806 +});
 32.8807 +
 32.8808 +
 32.8809 +/*
 32.8810 + * HTMLHtmlElement
 32.8811 + * HTML5: 4.1.1 The Html Element
 32.8812 + * http://dev.w3.org/html5/spec/Overview.html#htmlhtmlelement
 32.8813 + */
 32.8814 +HTMLHtmlElement = function(ownerDocument) {
 32.8815 +    HTMLElement.apply(this, arguments);
 32.8816 +};
 32.8817 +
 32.8818 +HTMLHtmlElement.prototype = new HTMLElement();
 32.8819 +__extend__(HTMLHtmlElement.prototype, {
 32.8820 +
 32.8821 +    // no additional properties or elements
 32.8822 +
 32.8823 +    toString: function() {
 32.8824 +        return '[object HTMLHtmlElement]';
 32.8825 +    }
 32.8826 +});
 32.8827 +
 32.8828 +
 32.8829 +/*
 32.8830 + * HTMLIFrameElement - DOM Level 2
 32.8831 + *
 32.8832 + * HTML5: 4.8.3 The iframe element
 32.8833 + * http://dev.w3.org/html5/spec/Overview.html#the-iframe-element
 32.8834 + */
 32.8835 +HTMLIFrameElement = function(ownerDocument) {
 32.8836 +    HTMLFrameElement.apply(this, arguments);
 32.8837 +};
 32.8838 +HTMLIFrameElement.prototype = new HTMLFrameElement();
 32.8839 +__extend__(HTMLIFrameElement.prototype, {
 32.8840 +    get height() {
 32.8841 +        return this.getAttribute("height") || "";
 32.8842 +    },
 32.8843 +    set height(val) {
 32.8844 +        return this.setAttribute("height",val);
 32.8845 +    },
 32.8846 +    get width() {
 32.8847 +        return this.getAttribute("width") || "";
 32.8848 +    },
 32.8849 +    set width(val) {
 32.8850 +        return this.setAttribute("width",val);
 32.8851 +    },
 32.8852 +    toString: function(){
 32.8853 +        return '[object HTMLIFrameElement]';
 32.8854 +    }
 32.8855 +});
 32.8856 +
 32.8857 +/**
 32.8858 + * HTMLImageElement and Image
 32.8859 + */
 32.8860 +
 32.8861 +
 32.8862 +HTMLImageElement = function(ownerDocument) {
 32.8863 +    HTMLElement.apply(this, arguments);
 32.8864 +};
 32.8865 +HTMLImageElement.prototype = new HTMLElement();
 32.8866 +__extend__(HTMLImageElement.prototype, {
 32.8867 +    get alt(){
 32.8868 +        return this.getAttribute('alt');
 32.8869 +    },
 32.8870 +    set alt(value){
 32.8871 +        this.setAttribute('alt', value);
 32.8872 +    },
 32.8873 +    get height(){
 32.8874 +        return parseInt(this.getAttribute('height'), 10) || 0;
 32.8875 +    },
 32.8876 +    set height(value){
 32.8877 +        this.setAttribute('height', value);
 32.8878 +    },
 32.8879 +    get isMap(){
 32.8880 +        return this.hasAttribute('map');
 32.8881 +    },
 32.8882 +    set useMap(value){
 32.8883 +        this.setAttribute('map', value);
 32.8884 +    },
 32.8885 +    get longDesc(){
 32.8886 +        return this.getAttribute('longdesc');
 32.8887 +    },
 32.8888 +    set longDesc(value){
 32.8889 +        this.setAttribute('longdesc', value);
 32.8890 +    },
 32.8891 +    get name(){
 32.8892 +        return this.getAttribute('name');
 32.8893 +    },
 32.8894 +    set name(value){
 32.8895 +        this.setAttribute('name', value);
 32.8896 +    },
 32.8897 +    get src(){
 32.8898 +        return this.getAttribute('src') || '';
 32.8899 +    },
 32.8900 +    set src(value){
 32.8901 +        this.setAttribute('src', value);
 32.8902 +    },
 32.8903 +    get width(){
 32.8904 +        return parseInt(this.getAttribute('width'), 10) || 0;
 32.8905 +    },
 32.8906 +    set width(value){
 32.8907 +        this.setAttribute('width', value);
 32.8908 +    },
 32.8909 +    toString: function(){
 32.8910 +        return '[object HTMLImageElement]';
 32.8911 +    }
 32.8912 +});
 32.8913 +
 32.8914 +/*
 32.8915 + * html5 4.8.1
 32.8916 + * http://dev.w3.org/html5/spec/Overview.html#the-img-element
 32.8917 + */
 32.8918 +Image = function(width, height) {
 32.8919 +    // Not sure if "[global].document" satifies this requirement:
 32.8920 +    // "The element's document must be the active document of the
 32.8921 +    // browsing context of the Window object on which the interface
 32.8922 +    // object of the invoked constructor is found."
 32.8923 +
 32.8924 +    HTMLElement.apply(this, [document]);
 32.8925 +    // Note: firefox will throw an error if the width/height
 32.8926 +    //   is not an integer.  Safari just converts to 0 on error.
 32.8927 +    this.width = parseInt(width, 10) || 0;
 32.8928 +    this.height = parseInt(height, 10) || 0;
 32.8929 +    this.nodeName = 'IMG';
 32.8930 +};
 32.8931 +Image.prototype = new HTMLImageElement();
 32.8932 +
 32.8933 +
 32.8934 +/*
 32.8935 + * Image.src attribute events.
 32.8936 + *
 32.8937 + * Not sure where this should live... in events/img.js? in parser/img.js?
 32.8938 + * Split out to make it easy to move.
 32.8939 + */
 32.8940 +
 32.8941 +/**
 32.8942 + * HTMLImageElement && Image are a bit odd in that the 'src' attribute
 32.8943 + * is 'active' -- changing it triggers loading of the image from the
 32.8944 + * network.
 32.8945 + *
 32.8946 + * This can occur by
 32.8947 + *   - Directly setting the Image.src =
 32.8948 + *   - Using one of the Element.setAttributeXXX methods
 32.8949 + *   - Node.importNode an image
 32.8950 + *   - The initial creation and parsing of an <img> tag
 32.8951 + *
 32.8952 + * __onImageRequest__ is a function that handles eventing
 32.8953 + *  and dispatches to a user-callback.
 32.8954 + *
 32.8955 + */
 32.8956 +__loadImage__ = function(node, value) {
 32.8957 +    var event;
 32.8958 +    if (value && (!Envjs.loadImage ||
 32.8959 +                  (Envjs.loadImage &&
 32.8960 +                   Envjs.loadImage(node, value)))) {
 32.8961 +        // value has to be something (easy)
 32.8962 +        // if the user-land API doesn't exist
 32.8963 +        // Or if the API exists and it returns true, then ok:
 32.8964 +        event = document.createEvent('Events');
 32.8965 +        event.initEvent('load');
 32.8966 +    } else {
 32.8967 +        // oops
 32.8968 +        event = document.createEvent('Events');
 32.8969 +        event.initEvent('error');
 32.8970 +    }
 32.8971 +    node.dispatchEvent(event, false);
 32.8972 +};
 32.8973 +
 32.8974 +__extend__(HTMLImageElement.prototype, {
 32.8975 +    onload: function(event){
 32.8976 +        __eval__(this.getAttribute('onload') || '', this);
 32.8977 +    }
 32.8978 +});
 32.8979 +
 32.8980 +
 32.8981 +/*
 32.8982 + * Image Loading
 32.8983 + *
 32.8984 + * The difference between "owner.parsing" and "owner.fragment"
 32.8985 + *
 32.8986 + * If owner.parsing === true, then during the html5 parsing then,
 32.8987 + *  __elementPopped__ is called when a compete tag (with attrs and
 32.8988 + *  children) is full parsed and added the DOM.
 32.8989 + *
 32.8990 + *   For images, __elementPopped__ is called with everything the
 32.8991 + *    tag has.  which in turn looks for a "src" attr and calls
 32.8992 + *    __loadImage__
 32.8993 + *
 32.8994 + * If owner.parser === false (or non-existant), then we are not in
 32.8995 + * a parsing step.  For images, perhaps someone directly modified
 32.8996 + * a 'src' attribute of an existing image.
 32.8997 + *
 32.8998 + * 'innerHTML' is tricky since we first create a "fake document",
 32.8999 + *  parse it, then import the right parts.  This may call
 32.9000 + *  img.setAttributeNS twice.  once during the parse and once
 32.9001 + *  during the clone of the node.  We want event to trigger on the
 32.9002 + *  later and not during th fake doco.  "owner.fragment" is set by
 32.9003 + *  the fake doco parser to indicate that events should not be
 32.9004 + *  triggered on this.
 32.9005 + *
 32.9006 + * We coud make 'owner.parser' == [ 'none', 'full', 'fragment']
 32.9007 + * and just use one variable That was not done since the patch is
 32.9008 + * quite large as is.
 32.9009 + *
 32.9010 + * This same problem occurs with scripts.  innerHTML oddly does
 32.9011 + * not eval any <script> tags inside.
 32.9012 + */
 32.9013 +HTMLElement.registerSetAttribute('IMG', 'src', function(node, value) {
 32.9014 +    var owner = node.ownerDocument;
 32.9015 +    if (!owner.parsing && !owner.fragment) {
 32.9016 +        __loadImage__(node, value);
 32.9017 +    }
 32.9018 +});
 32.9019 +/**
 32.9020 + * HTMLInputElement
 32.9021 + *
 32.9022 + * HTML5: 4.10.5 The input element
 32.9023 + * http://dev.w3.org/html5/spec/Overview.html#the-input-element
 32.9024 + */
 32.9025 +HTMLInputElement = function(ownerDocument) {
 32.9026 +    HTMLInputAreaCommon.apply(this, arguments);
 32.9027 +    this._dirty = false;
 32.9028 +    this._checked = null;
 32.9029 +    this._value = null;
 32.9030 +};
 32.9031 +HTMLInputElement.prototype = new HTMLInputAreaCommon();
 32.9032 +__extend__(HTMLInputElement.prototype, {
 32.9033 +    get alt(){
 32.9034 +        return this.getAttribute('alt') || '';
 32.9035 +    },
 32.9036 +    set alt(value){
 32.9037 +        this.setAttribute('alt', value);
 32.9038 +    },
 32.9039 +
 32.9040 +    /**
 32.9041 +     * 'checked' returns state, NOT the value of the attribute
 32.9042 +     */
 32.9043 +    get checked(){
 32.9044 +        if (this._checked === null) {
 32.9045 +            this._checked = this.defaultChecked;
 32.9046 +        }
 32.9047 +        return this._checked;
 32.9048 +    },
 32.9049 +    set checked(value){
 32.9050 +        // force to boolean value
 32.9051 +        this._checked = (value) ? true : false;
 32.9052 +    },
 32.9053 +
 32.9054 +    /**
 32.9055 +     * 'defaultChecked' actually reflects if the 'checked' attribute
 32.9056 +     * is present or not
 32.9057 +     */
 32.9058 +    get defaultChecked(){
 32.9059 +        return this.hasAttribute('checked');
 32.9060 +    },
 32.9061 +    set defaultChecked(val){
 32.9062 +        if (val) {
 32.9063 +            this.setAttribute('checked', '');
 32.9064 +        } else {
 32.9065 +            if (this.defaultChecked) {
 32.9066 +                this.removeAttribute('checked');
 32.9067 +            }
 32.9068 +        }
 32.9069 +    },
 32.9070 +    get defaultValue() {
 32.9071 +        return this.getAttribute('value') || '';
 32.9072 +    },
 32.9073 +    set defaultValue(value) {
 32.9074 +        this._dirty = true;
 32.9075 +        this.setAttribute('value', value);
 32.9076 +    },
 32.9077 +    get value() {
 32.9078 +        return (this._value === null) ? this.defaultValue : this._value;
 32.9079 +    },
 32.9080 +    set value(newvalue) {
 32.9081 +        this._value = newvalue;
 32.9082 +    },
 32.9083 +    /**
 32.9084 +     * Height is a string
 32.9085 +     */
 32.9086 +    get height(){
 32.9087 +        // spec says it is a string
 32.9088 +        return this.getAttribute('height') || '';
 32.9089 +    },
 32.9090 +    set height(value){
 32.9091 +        this.setAttribute('height',value);
 32.9092 +    },
 32.9093 +
 32.9094 +    /**
 32.9095 +     * MaxLength is a number
 32.9096 +     */
 32.9097 +    get maxLength(){
 32.9098 +        return Number(this.getAttribute('maxlength')||'-1');
 32.9099 +    },
 32.9100 +    set maxLength(value){
 32.9101 +        this.setAttribute('maxlength', value);
 32.9102 +    },
 32.9103 +
 32.9104 +    /**
 32.9105 +     * Src is a URL string
 32.9106 +     */
 32.9107 +    get src(){
 32.9108 +        return this.getAttribute('src') || '';
 32.9109 +    },
 32.9110 +    set src(value){
 32.9111 +        // TODO: make absolute any relative URLS
 32.9112 +        this.setAttribute('src', value);
 32.9113 +    },
 32.9114 +
 32.9115 +    get type() {
 32.9116 +        return this.getAttribute('type') || 'text';
 32.9117 +    },
 32.9118 +    set type(value) {
 32.9119 +        this.setAttribute('type', value);
 32.9120 +    },
 32.9121 +
 32.9122 +    get useMap(){
 32.9123 +        return this.getAttribute('map') || '';
 32.9124 +    },
 32.9125 +
 32.9126 +    /**
 32.9127 +     * Width: spec says it is a string
 32.9128 +     */
 32.9129 +    get width(){
 32.9130 +        return this.getAttribute('width') || '';
 32.9131 +    },
 32.9132 +    set width(value){
 32.9133 +        this.setAttribute('width',value);
 32.9134 +    },
 32.9135 +    click:function(){
 32.9136 +        __click__(this);
 32.9137 +    },
 32.9138 +    toString: function() {
 32.9139 +        return '[object HTMLInputElement]';
 32.9140 +    }
 32.9141 +});
 32.9142 +
 32.9143 +//http://dev.w3.org/html5/spec/Overview.html#dom-input-value
 32.9144 +// if someone directly modifies the value attribute, then the input's value
 32.9145 +// also directly changes.
 32.9146 +HTMLElement.registerSetAttribute('INPUT', 'value', function(node, value) {
 32.9147 +    if (!node._dirty) {
 32.9148 +        node._value = value;
 32.9149 +        node._dirty = true;
 32.9150 +    }
 32.9151 +});
 32.9152 +
 32.9153 +/*
 32.9154 + *The checked content attribute is a boolean attribute that gives the
 32.9155 + *default checkedness of the input element. When the checked content
 32.9156 + *attribute is added, if the control does not have dirty checkedness,
 32.9157 + *the user agent must set the checkedness of the element to true; when
 32.9158 + *the checked content attribute is removed, if the control does not
 32.9159 + *have dirty checkedness, the user agent must set the checkedness of
 32.9160 + *the element to false.
 32.9161 + */
 32.9162 +// Named Element Support
 32.9163 +HTMLElement.registerSetAttribute('INPUT', 'name',
 32.9164 +                                 __updateFormForNamedElement__);
 32.9165 +
 32.9166 +/**
 32.9167 + * HTMLLabelElement - DOM Level 2
 32.9168 + * HTML5 4.10.4 The label element
 32.9169 + * http://dev.w3.org/html5/spec/Overview.html#the-label-element
 32.9170 + */
 32.9171 +HTMLLabelElement = function(ownerDocument) {
 32.9172 +    HTMLInputCommon.apply(this, arguments);
 32.9173 +};
 32.9174 +HTMLLabelElement.prototype = new HTMLInputCommon();
 32.9175 +__extend__(HTMLLabelElement.prototype, inputElements_dataProperties);
 32.9176 +__extend__(HTMLLabelElement.prototype, {
 32.9177 +    get htmlFor() {
 32.9178 +        return this.getAttribute('for');
 32.9179 +    },
 32.9180 +    set htmlFor(value) {
 32.9181 +        this.setAttribute('for',value);
 32.9182 +    },
 32.9183 +    get dataFormatAs() {
 32.9184 +        return this.getAttribute('dataFormatAs');
 32.9185 +    },
 32.9186 +    set dataFormatAs(value) {
 32.9187 +        this.setAttribute('dataFormatAs',value);
 32.9188 +    },
 32.9189 +    toString: function() {
 32.9190 +        return '[object HTMLLabelElement]';
 32.9191 +    }
 32.9192 +});
 32.9193 +
 32.9194 +/*
 32.9195 + * HTMLLIElement
 32.9196 + * HTML5: 4.5.8 The li Element
 32.9197 + * http://dev.w3.org/html5/spec/Overview.html#the-li-element
 32.9198 + */
 32.9199 +HTMLLIElement = function(ownerDocument) {
 32.9200 +    HTMLElement.apply(this, arguments);
 32.9201 +};
 32.9202 +
 32.9203 +HTMLLIElement.prototype = new HTMLElement();
 32.9204 +__extend__(HTMLLIElement.prototype, {
 32.9205 +
 32.9206 +    // TODO: attribute long value;
 32.9207 +
 32.9208 +    toString: function() {
 32.9209 +        return '[object HTMLLIElement]';
 32.9210 +    }
 32.9211 +});
 32.9212 +
 32.9213 +
 32.9214 +/*
 32.9215 + * HTMLLinkElement - DOM Level 2
 32.9216 + *
 32.9217 + * HTML5: 4.8.12 The map element
 32.9218 + * http://dev.w3.org/html5/spec/Overview.html#the-map-element
 32.9219 + */
 32.9220 +HTMLLinkElement = function(ownerDocument) {
 32.9221 +    HTMLElement.apply(this, arguments);
 32.9222 +};
 32.9223 +HTMLLinkElement.prototype = new HTMLElement();
 32.9224 +__extend__(HTMLLinkElement.prototype, {
 32.9225 +    get disabled(){
 32.9226 +        return this.getAttribute('disabled');
 32.9227 +    },
 32.9228 +    set disabled(value){
 32.9229 +        this.setAttribute('disabled',value);
 32.9230 +    },
 32.9231 +    get charset(){
 32.9232 +        return this.getAttribute('charset');
 32.9233 +    },
 32.9234 +    set charset(value){
 32.9235 +        this.setAttribute('charset',value);
 32.9236 +    },
 32.9237 +    get href(){
 32.9238 +        return this.getAttribute('href');
 32.9239 +    },
 32.9240 +    set href(value){
 32.9241 +        this.setAttribute('href',value);
 32.9242 +    },
 32.9243 +    get hreflang(){
 32.9244 +        return this.getAttribute('hreflang');
 32.9245 +    },
 32.9246 +    set hreflang(value){
 32.9247 +        this.setAttribute('hreflang',value);
 32.9248 +    },
 32.9249 +    get media(){
 32.9250 +        return this.getAttribute('media');
 32.9251 +    },
 32.9252 +    set media(value){
 32.9253 +        this.setAttribute('media',value);
 32.9254 +    },
 32.9255 +    get rel(){
 32.9256 +        return this.getAttribute('rel');
 32.9257 +    },
 32.9258 +    set rel(value){
 32.9259 +        this.setAttribute('rel',value);
 32.9260 +    },
 32.9261 +    get rev(){
 32.9262 +        return this.getAttribute('rev');
 32.9263 +    },
 32.9264 +    set rev(value){
 32.9265 +        this.setAttribute('rev',value);
 32.9266 +    },
 32.9267 +    get target(){
 32.9268 +        return this.getAttribute('target');
 32.9269 +    },
 32.9270 +    set target(value){
 32.9271 +        this.setAttribute('target',value);
 32.9272 +    },
 32.9273 +    get type(){
 32.9274 +        return this.getAttribute('type');
 32.9275 +    },
 32.9276 +    set type(value){
 32.9277 +        this.setAttribute('type',value);
 32.9278 +    },
 32.9279 +    toString: function() {
 32.9280 +        return '[object HTMLLinkElement]';
 32.9281 +    }
 32.9282 +});
 32.9283 +
 32.9284 +__loadLink__ = function(node, value) {
 32.9285 +    var event;
 32.9286 +    var owner = node.ownerDocument;
 32.9287 +
 32.9288 +    if (owner.fragment) {
 32.9289 +        /**
 32.9290 +         * if we are in an innerHTML fragment parsing step
 32.9291 +         * then ignore.  It will be handled once the fragment is
 32.9292 +         * added to the real doco
 32.9293 +         */
 32.9294 +        return;
 32.9295 +    }
 32.9296 +
 32.9297 +    if (node.parentNode === null) {
 32.9298 +        /*
 32.9299 +         * if a <link> is parentless (normally by create a new link
 32.9300 +         * via document.createElement('link'), then do *not* fire an
 32.9301 +         * event, even if it has a valid 'href' attribute.
 32.9302 +         */
 32.9303 +        return;
 32.9304 +    }
 32.9305 +    if (value != '' && (!Envjs.loadLink ||
 32.9306 +                        (Envjs.loadLink &&
 32.9307 +                         Envjs.loadLink(node, value)))) {
 32.9308 +        // value has to be something (easy)
 32.9309 +        // if the user-land API doesn't exist
 32.9310 +        // Or if the API exists and it returns true, then ok:
 32.9311 +        event = document.createEvent('Events');
 32.9312 +        event.initEvent('load');
 32.9313 +    } else {
 32.9314 +        // oops
 32.9315 +        event = document.createEvent('Events');
 32.9316 +        event.initEvent('error');
 32.9317 +    }
 32.9318 +    node.dispatchEvent(event, false);
 32.9319 +};
 32.9320 +
 32.9321 +
 32.9322 +HTMLElement.registerSetAttribute('LINK', 'href', function(node, value) {
 32.9323 +    __loadLink__(node, value);
 32.9324 +});
 32.9325 +
 32.9326 +/**
 32.9327 + * Event stuff, not sure where it goes
 32.9328 + */
 32.9329 +__extend__(HTMLLinkElement.prototype, {
 32.9330 +    onload: function(event){
 32.9331 +        __eval__(this.getAttribute('onload')||'', this);
 32.9332 +    },
 32.9333 +});
 32.9334 +
 32.9335 +/**
 32.9336 + * HTMLMapElement
 32.9337 + *
 32.9338 + * 4.8.12 The map element
 32.9339 + * http://dev.w3.org/html5/spec/Overview.html#the-map-element
 32.9340 + */
 32.9341 +HTMLMapElement = function(ownerDocument) {
 32.9342 +    HTMLElement.apply(this, arguments);
 32.9343 +};
 32.9344 +HTMLMapElement.prototype = new HTMLElement();
 32.9345 +__extend__(HTMLMapElement.prototype, {
 32.9346 +    get areas(){
 32.9347 +        return this.getElementsByTagName('area');
 32.9348 +    },
 32.9349 +    get name(){
 32.9350 +        return this.getAttribute('name') || '';
 32.9351 +    },
 32.9352 +    set name(value){
 32.9353 +        this.setAttribute('name',value);
 32.9354 +    },
 32.9355 +    toString: function() {
 32.9356 +        return '[object HTMLMapElement]';
 32.9357 +    }
 32.9358 +});
 32.9359 +
 32.9360 +/**
 32.9361 + * HTMLMetaElement - DOM Level 2
 32.9362 + * HTML5: 4.2.5 The meta element
 32.9363 + * http://dev.w3.org/html5/spec/Overview.html#meta
 32.9364 + */
 32.9365 +HTMLMetaElement = function(ownerDocument) {
 32.9366 +    HTMLElement.apply(this, arguments);
 32.9367 +};
 32.9368 +HTMLMetaElement.prototype = new HTMLElement();
 32.9369 +__extend__(HTMLMetaElement.prototype, {
 32.9370 +    get content() {
 32.9371 +        return this.getAttribute('content') || '';
 32.9372 +    },
 32.9373 +    set content(value){
 32.9374 +        this.setAttribute('content',value);
 32.9375 +    },
 32.9376 +    get httpEquiv(){
 32.9377 +        return this.getAttribute('http-equiv') || '';
 32.9378 +    },
 32.9379 +    set httpEquiv(value){
 32.9380 +        this.setAttribute('http-equiv',value);
 32.9381 +    },
 32.9382 +    get name(){
 32.9383 +        return this.getAttribute('name') || '';
 32.9384 +    },
 32.9385 +    set name(value){
 32.9386 +        this.setAttribute('name',value);
 32.9387 +    },
 32.9388 +    get scheme(){
 32.9389 +        return this.getAttribute('scheme');
 32.9390 +    },
 32.9391 +    set scheme(value){
 32.9392 +        this.setAttribute('scheme',value);
 32.9393 +    },
 32.9394 +    toString: function() {
 32.9395 +        return '[object HTMLMetaElement]';
 32.9396 +    }
 32.9397 +});
 32.9398 +
 32.9399 +
 32.9400 +/**
 32.9401 + * HTMLObjectElement - DOM Level 2
 32.9402 + * HTML5: 4.8.5 The object element
 32.9403 + * http://dev.w3.org/html5/spec/Overview.html#the-object-element
 32.9404 + */
 32.9405 +HTMLObjectElement = function(ownerDocument) {
 32.9406 +    HTMLElement.apply(this, arguments);
 32.9407 +};
 32.9408 +HTMLObjectElement.prototype = new HTMLElement();
 32.9409 +__extend__(HTMLObjectElement.prototype, {
 32.9410 +    get code(){
 32.9411 +        return this.getAttribute('code');
 32.9412 +    },
 32.9413 +    set code(value){
 32.9414 +        this.setAttribute('code',value);
 32.9415 +    },
 32.9416 +    get archive(){
 32.9417 +        return this.getAttribute('archive');
 32.9418 +    },
 32.9419 +    set archive(value){
 32.9420 +        this.setAttribute('archive',value);
 32.9421 +    },
 32.9422 +    get codeBase(){
 32.9423 +        return this.getAttribute('codebase');
 32.9424 +    },
 32.9425 +    set codeBase(value){
 32.9426 +        this.setAttribute('codebase',value);
 32.9427 +    },
 32.9428 +    get codeType(){
 32.9429 +        return this.getAttribute('codetype');
 32.9430 +    },
 32.9431 +    set codeType(value){
 32.9432 +        this.setAttribute('codetype',value);
 32.9433 +    },
 32.9434 +    get data(){
 32.9435 +        return this.getAttribute('data');
 32.9436 +    },
 32.9437 +    set data(value){
 32.9438 +        this.setAttribute('data',value);
 32.9439 +    },
 32.9440 +    get declare(){
 32.9441 +        return this.getAttribute('declare');
 32.9442 +    },
 32.9443 +    set declare(value){
 32.9444 +        this.setAttribute('declare',value);
 32.9445 +    },
 32.9446 +    get height(){
 32.9447 +        return this.getAttribute('height');
 32.9448 +    },
 32.9449 +    set height(value){
 32.9450 +        this.setAttribute('height',value);
 32.9451 +    },
 32.9452 +    get standby(){
 32.9453 +        return this.getAttribute('standby');
 32.9454 +    },
 32.9455 +    set standby(value){
 32.9456 +        this.setAttribute('standby',value);
 32.9457 +    },
 32.9458 +    /*get tabIndex(){
 32.9459 +      return this.getAttribute('tabindex');
 32.9460 +      },
 32.9461 +      set tabIndex(value){
 32.9462 +      this.setAttribute('tabindex',value);
 32.9463 +      },*/
 32.9464 +    get type(){
 32.9465 +        return this.getAttribute('type');
 32.9466 +    },
 32.9467 +    set type(value){
 32.9468 +        this.setAttribute('type',value);
 32.9469 +    },
 32.9470 +    get useMap(){
 32.9471 +        return this.getAttribute('usemap');
 32.9472 +    },
 32.9473 +    set useMap(value){
 32.9474 +        this.setAttribute('usemap',value);
 32.9475 +    },
 32.9476 +    get width(){
 32.9477 +        return this.getAttribute('width');
 32.9478 +    },
 32.9479 +    set width(value){
 32.9480 +        this.setAttribute('width',value);
 32.9481 +    },
 32.9482 +    get contentDocument(){
 32.9483 +        return this.ownerDocument;
 32.9484 +    },
 32.9485 +    toString: function() {
 32.9486 +        return '[object HTMLObjectElement]';
 32.9487 +    }
 32.9488 +});
 32.9489 +
 32.9490 +// Named Element Support
 32.9491 +HTMLElement.registerSetAttribute('OBJECT', 'name',
 32.9492 +                                 __updateFormForNamedElement__);
 32.9493 +
 32.9494 +/*
 32.9495 + * HTMLOListElement
 32.9496 + * HTML5: 4.5.6 The ol Element
 32.9497 + * http://dev.w3.org/html5/spec/Overview.html#the-ol-element
 32.9498 + */
 32.9499 +HTMLOListElement = function(ownerDocument) {
 32.9500 +    HTMLElement.apply(this, arguments);
 32.9501 +};
 32.9502 +
 32.9503 +HTMLOListElement.prototype = new HTMLElement();
 32.9504 +__extend__(HTMLOListElement.prototype, {
 32.9505 +
 32.9506 +    // TODO: attribute boolean reversed;
 32.9507 +    // TODO:  attribute long start;
 32.9508 +
 32.9509 +    toString: function() {
 32.9510 +        return '[object HTMLOListElement]';
 32.9511 +    }
 32.9512 +});
 32.9513 +
 32.9514 +
 32.9515 +/**
 32.9516 + * HTMLOptGroupElement - DOM Level 2
 32.9517 + * HTML 5: 4.10.9 The optgroup element
 32.9518 + * http://dev.w3.org/html5/spec/Overview.html#the-optgroup-element
 32.9519 + */
 32.9520 +HTMLOptGroupElement = function(ownerDocument) {
 32.9521 +    HTMLElement.apply(this, arguments);
 32.9522 +};
 32.9523 +HTMLOptGroupElement.prototype = new HTMLElement();
 32.9524 +__extend__(HTMLOptGroupElement.prototype, {
 32.9525 +    get disabled(){
 32.9526 +        return this.getAttribute('disabled');
 32.9527 +    },
 32.9528 +    set disabled(value){
 32.9529 +        this.setAttribute('disabled',value);
 32.9530 +    },
 32.9531 +    get label(){
 32.9532 +        return this.getAttribute('label');
 32.9533 +    },
 32.9534 +    set label(value){
 32.9535 +        this.setAttribute('label',value);
 32.9536 +    },
 32.9537 +    appendChild: function(node){
 32.9538 +        var i,
 32.9539 +        length,
 32.9540 +        selected = false;
 32.9541 +        //make sure at least one is selected by default
 32.9542 +        if(node.nodeType === Node.ELEMENT_NODE && node.tagName === 'OPTION'){
 32.9543 +            length = this.childNodes.length;
 32.9544 +            for(i=0;i<length;i++){
 32.9545 +                if(this.childNodes[i].nodeType === Node.ELEMENT_NODE &&
 32.9546 +                   this.childNodes[i].tagName === 'OPTION'){
 32.9547 +                    //check if it is selected
 32.9548 +                    if(this.selected){
 32.9549 +                        selected = true;
 32.9550 +                        break;
 32.9551 +                    }
 32.9552 +                }
 32.9553 +            }
 32.9554 +            if(!selected){
 32.9555 +                node.selected = true;
 32.9556 +                this.value = node.value?node.value:'';
 32.9557 +            }
 32.9558 +        }
 32.9559 +        return HTMLElement.prototype.appendChild.apply(this, [node]);
 32.9560 +    },
 32.9561 +    toString: function() {
 32.9562 +        return '[object HTMLOptGroupElement]';
 32.9563 +    }
 32.9564 +});
 32.9565 +
 32.9566 +/**
 32.9567 + * HTMLOptionElement, Option
 32.9568 + * HTML5: 4.10.10 The option element
 32.9569 + * http://dev.w3.org/html5/spec/Overview.html#the-option-element
 32.9570 + */
 32.9571 +HTMLOptionElement = function(ownerDocument) {
 32.9572 +    HTMLInputCommon.apply(this, arguments);
 32.9573 +    this._selected = null;
 32.9574 +};
 32.9575 +HTMLOptionElement.prototype = new HTMLInputCommon();
 32.9576 +__extend__(HTMLOptionElement.prototype, {
 32.9577 +
 32.9578 +    /**
 32.9579 +     * defaultSelected actually reflects the presence of the
 32.9580 +     * 'selected' attribute.
 32.9581 +     */
 32.9582 +    get defaultSelected() {
 32.9583 +        return this.hasAttribute('selected');
 32.9584 +    },
 32.9585 +    set defaultSelected(value) {
 32.9586 +        if (value) {
 32.9587 +            this.setAttribute('selected','');
 32.9588 +        } else {
 32.9589 +            if (this.hasAttribute('selected')) {
 32.9590 +                this.removeAttribute('selected');
 32.9591 +            }
 32.9592 +        }
 32.9593 +    },
 32.9594 +
 32.9595 +    /*
 32.9596 +     * HTML5: The form IDL attribute's behavior depends on whether the
 32.9597 +     * option element is in a select element or not. If the option has
 32.9598 +     * a select element as its parent, or has a colgroup element as
 32.9599 +     * its parent and that colgroup element has a select element as
 32.9600 +     * its parent, then the form IDL attribute must return the same
 32.9601 +     * value as the form IDL attribute on that select
 32.9602 +     * element. Otherwise, it must return null.
 32.9603 +     */
 32.9604 +    _selectparent: function() {
 32.9605 +        var parent = this.parentNode;
 32.9606 +        if (!parent) {
 32.9607 +            return null;
 32.9608 +        }
 32.9609 +
 32.9610 +        if (parent.tagName === 'SELECT') {
 32.9611 +            return parent;
 32.9612 +        }
 32.9613 +        if (parent.tagName === 'COLGROUP') {
 32.9614 +            parent = parent.parentNode;
 32.9615 +            if (parent && parent.tagName === 'SELECT') {
 32.9616 +                return parent;
 32.9617 +            }
 32.9618 +        }
 32.9619 +    },
 32.9620 +    _updateoptions: function() {
 32.9621 +        var parent = this._selectparent();
 32.9622 +        if (parent) {
 32.9623 +            // has side effects and updates owner select's options
 32.9624 +            parent.options;
 32.9625 +        }
 32.9626 +    },
 32.9627 +    get form() {
 32.9628 +        var parent = this._selectparent();
 32.9629 +        return parent ? parent.form : null;
 32.9630 +    },
 32.9631 +    get index() {
 32.9632 +        var options, i;
 32.9633 +
 32.9634 +        if (! this.parentNode) {
 32.9635 +            return -1;
 32.9636 +        }
 32.9637 +        options = this.parentNode.options;
 32.9638 +        for (i=0; i < options.length; ++i) {
 32.9639 +            if (this === options[i]) {
 32.9640 +                return i;
 32.9641 +            }
 32.9642 +        }
 32.9643 +        return 0;
 32.9644 +    },
 32.9645 +    get label() {
 32.9646 +        return this.getAttribute('label');
 32.9647 +    },
 32.9648 +    set label(value) {
 32.9649 +        this.setAttribute('label', value);
 32.9650 +    },
 32.9651 +
 32.9652 +    /*
 32.9653 +     * This is not in the spec, but safari and firefox both
 32.9654 +     * use this
 32.9655 +     */
 32.9656 +    get name() {
 32.9657 +        return this.getAttribute('name');
 32.9658 +    },
 32.9659 +    set name(value) {
 32.9660 +        this.setAttribute('name', value);
 32.9661 +    },
 32.9662 +
 32.9663 +    /**
 32.9664 +     *
 32.9665 +     */
 32.9666 +    get selected() {
 32.9667 +        // if disabled, return false, no matter what
 32.9668 +        if (this.disabled) {
 32.9669 +            return false;
 32.9670 +        }
 32.9671 +        if (this._selected === null) {
 32.9672 +            return this.defaultSelected;
 32.9673 +        }
 32.9674 +
 32.9675 +        return this._selected;
 32.9676 +    },
 32.9677 +    set selected(value) {
 32.9678 +        this._selected = (value) ? true : false;
 32.9679 +    },
 32.9680 +
 32.9681 +    get text() {
 32.9682 +        var val = this.nodeValue;
 32.9683 +        return (val === null || this.value === undefined) ?
 32.9684 +            this.innerHTML :
 32.9685 +            val;
 32.9686 +    },
 32.9687 +    get value() {
 32.9688 +        var val = this.getAttribute('value');
 32.9689 +        return (val === null || val === undefined) ?
 32.9690 +            this.textContent :
 32.9691 +            val;
 32.9692 +    },
 32.9693 +    set value(value) {
 32.9694 +        this.setAttribute('value', value);
 32.9695 +    },
 32.9696 +    toString: function() {
 32.9697 +        return '[object HTMLOptionElement]';
 32.9698 +    }
 32.9699 +});
 32.9700 +
 32.9701 +Option = function(text, value, defaultSelected, selected) {
 32.9702 +
 32.9703 +    // Not sure if this is correct:
 32.9704 +    //
 32.9705 +    // The element's document must be the active document of the
 32.9706 +    // browsing context of the Window object on which the interface
 32.9707 +    // object of the invoked constructor is found.
 32.9708 +    HTMLOptionElement.apply(this, [document]);
 32.9709 +    this.nodeName = 'OPTION';
 32.9710 +
 32.9711 +    if (arguments.length >= 1) {
 32.9712 +        this.appendChild(document.createTextNode('' + text));
 32.9713 +    }
 32.9714 +    if (arguments.length >= 2) {
 32.9715 +        this.value = value;
 32.9716 +    }
 32.9717 +    if (arguments.length >= 3) {
 32.9718 +        if (defaultSelected) {
 32.9719 +            this.defaultSelected = '';
 32.9720 +        }
 32.9721 +    }
 32.9722 +    if (arguments.length >= 4) {
 32.9723 +        this.selected = (selected) ? true : false;
 32.9724 +    }
 32.9725 +};
 32.9726 +
 32.9727 +Option.prototype = new HTMLOptionElement();
 32.9728 +
 32.9729 +// Named Element Support
 32.9730 +
 32.9731 +function updater(node, value) {
 32.9732 +    node._updateoptions();
 32.9733 +}
 32.9734 +HTMLElement.registerSetAttribute('OPTION', 'name', updater);
 32.9735 +HTMLElement.registerSetAttribute('OPTION', 'id', updater);
 32.9736 +
 32.9737 +/*
 32.9738 +* HTMLParagraphElement - DOM Level 2
 32.9739 +*/
 32.9740 +HTMLParagraphElement = function(ownerDocument) {
 32.9741 +    HTMLElement.apply(this, arguments);
 32.9742 +};
 32.9743 +HTMLParagraphElement.prototype = new HTMLElement();
 32.9744 +__extend__(HTMLParagraphElement.prototype, {
 32.9745 +    toString: function(){
 32.9746 +        return '[object HTMLParagraphElement]';
 32.9747 +    }
 32.9748 +});
 32.9749 +
 32.9750 +
 32.9751 +/**
 32.9752 + * HTMLParamElement
 32.9753 + *
 32.9754 + * HTML5: 4.8.6 The param element
 32.9755 + * http://dev.w3.org/html5/spec/Overview.html#the-param-element
 32.9756 + */
 32.9757 +HTMLParamElement = function(ownerDocument) {
 32.9758 +    HTMLElement.apply(this, arguments);
 32.9759 +};
 32.9760 +HTMLParamElement.prototype = new HTMLElement();
 32.9761 +__extend__(HTMLParamElement.prototype, {
 32.9762 +    get name() {
 32.9763 +        return this.getAttribute('name') || '';
 32.9764 +    },
 32.9765 +    set name(value) {
 32.9766 +        this.setAttribute('name', value);
 32.9767 +    },
 32.9768 +    get type(){
 32.9769 +        return this.getAttribute('type');
 32.9770 +    },
 32.9771 +    set type(value){
 32.9772 +        this.setAttribute('type',value);
 32.9773 +    },
 32.9774 +    get value(){
 32.9775 +        return this.getAttribute('value');
 32.9776 +    },
 32.9777 +    set value(value){
 32.9778 +        this.setAttribute('value',value);
 32.9779 +    },
 32.9780 +    get valueType(){
 32.9781 +        return this.getAttribute('valuetype');
 32.9782 +    },
 32.9783 +    set valueType(value){
 32.9784 +        this.setAttribute('valuetype',value);
 32.9785 +    },
 32.9786 +    toString: function() {
 32.9787 +        return '[object HTMLParamElement]';
 32.9788 +    }
 32.9789 +});
 32.9790 +
 32.9791 +
 32.9792 +/**
 32.9793 + * HTMLScriptElement - DOM Level 2
 32.9794 + *
 32.9795 + * HTML5: 4.3.1 The script element
 32.9796 + * http://dev.w3.org/html5/spec/Overview.html#script
 32.9797 + */
 32.9798 +HTMLScriptElement = function(ownerDocument) {
 32.9799 +    HTMLElement.apply(this, arguments);
 32.9800 +};
 32.9801 +HTMLScriptElement.prototype = new HTMLElement();
 32.9802 +__extend__(HTMLScriptElement.prototype, {
 32.9803 +
 32.9804 +    /**
 32.9805 +     * HTML5 spec @ http://dev.w3.org/html5/spec/Overview.html#script
 32.9806 +     *
 32.9807 +     * "The IDL attribute text must return a concatenation of the
 32.9808 +     * contents of all the text nodes that are direct children of the
 32.9809 +     * script element (ignoring any other nodes such as comments or
 32.9810 +     * elements), in tree order. On setting, it must act the same way
 32.9811 +     * as the textContent IDL attribute."
 32.9812 +     *
 32.9813 +     * AND... "The term text node refers to any Text node,
 32.9814 +     * including CDATASection nodes; specifically, any Node with node
 32.9815 +     * type TEXT_NODE (3) or CDATA_SECTION_NODE (4)"
 32.9816 +     */
 32.9817 +    get text() {
 32.9818 +        var kids = this.childNodes;
 32.9819 +        var kid;
 32.9820 +        var s = '';
 32.9821 +        var imax = kids.length;
 32.9822 +        for (var i = 0; i < imax; ++i) {
 32.9823 +            kid = kids[i];
 32.9824 +            if (kid.nodeType === Node.TEXT_NODE ||
 32.9825 +                kid.nodeType === Node.CDATA_SECTION_NODE) {
 32.9826 +                s += kid.nodeValue;
 32.9827 +            }
 32.9828 +        }
 32.9829 +        return s;
 32.9830 +    },
 32.9831 +
 32.9832 +    /**
 32.9833 +     * HTML5 spec "Can be set, to replace the element's children with
 32.9834 +     * the given value."
 32.9835 +     */
 32.9836 +    set text(value) {
 32.9837 +        // this deletes all children, and make a new single text node
 32.9838 +        // with value
 32.9839 +        this.textContent = value;
 32.9840 +
 32.9841 +        /* Currently we always execute, but this isn't quite right if
 32.9842 +         * the node has *not* been inserted into the document, then it
 32.9843 +         * should *not* fire.  The more detailed answer from the spec:
 32.9844 +         *
 32.9845 +         * When a script element that is neither marked as having
 32.9846 +         * "already started" nor marked as being "parser-inserted"
 32.9847 +         * experiences one of the events listed in the following list,
 32.9848 +         * the user agent must synchronously run the script element:
 32.9849 +         *
 32.9850 +         *   * The script element gets inserted into a document.
 32.9851 +         *   * The script element is in a Document and its child nodes
 32.9852 +         *     are changed.
 32.9853 +         *   * The script element is in a Document and has a src
 32.9854 +         *     attribute set where previously the element had no such
 32.9855 +         *     attribute.
 32.9856 +         *
 32.9857 +         * And no doubt there are other cases as well.
 32.9858 +         */
 32.9859 +        Envjs.loadInlineScript(this);
 32.9860 +    },
 32.9861 +
 32.9862 +    get htmlFor(){
 32.9863 +        return this.getAttribute('for');
 32.9864 +    },
 32.9865 +    set htmlFor(value){
 32.9866 +        this.setAttribute('for',value);
 32.9867 +    },
 32.9868 +    get event(){
 32.9869 +        return this.getAttribute('event');
 32.9870 +    },
 32.9871 +    set event(value){
 32.9872 +        this.setAttribute('event',value);
 32.9873 +    },
 32.9874 +    get charset(){
 32.9875 +        return this.getAttribute('charset');
 32.9876 +    },
 32.9877 +    set charset(value){
 32.9878 +        this.setAttribute('charset',value);
 32.9879 +    },
 32.9880 +    get defer(){
 32.9881 +        return this.getAttribute('defer');
 32.9882 +    },
 32.9883 +    set defer(value){
 32.9884 +        this.setAttribute('defer',value);
 32.9885 +    },
 32.9886 +    get src(){
 32.9887 +        return this.getAttribute('src')||'';
 32.9888 +    },
 32.9889 +    set src(value){
 32.9890 +        this.setAttribute('src',value);
 32.9891 +    },
 32.9892 +    get type(){
 32.9893 +        return this.getAttribute('type')||'';
 32.9894 +    },
 32.9895 +    set type(value){
 32.9896 +        this.setAttribute('type',value);
 32.9897 +    },
 32.9898 +    onload: HTMLEvents.prototype.onload,
 32.9899 +    onerror: HTMLEvents.prototype.onerror,
 32.9900 +    toString: function() {
 32.9901 +        return '[object HTMLScriptElement]';
 32.9902 +    }
 32.9903 +});
 32.9904 +
 32.9905 +
 32.9906 +/**
 32.9907 + * HTMLSelectElement
 32.9908 + * HTML5: http://dev.w3.org/html5/spec/Overview.html#the-select-element
 32.9909 + */
 32.9910 +HTMLSelectElement = function(ownerDocument) {
 32.9911 +    HTMLTypeValueInputs.apply(this, arguments);
 32.9912 +    this._oldIndex = -1;
 32.9913 +};
 32.9914 +
 32.9915 +HTMLSelectElement.prototype = new HTMLTypeValueInputs();
 32.9916 +__extend__(HTMLSelectElement.prototype, inputElements_dataProperties);
 32.9917 +__extend__(HTMLButtonElement.prototype, inputElements_size);
 32.9918 +__extend__(HTMLSelectElement.prototype, inputElements_onchange);
 32.9919 +__extend__(HTMLSelectElement.prototype, inputElements_focusEvents);
 32.9920 +__extend__(HTMLSelectElement.prototype, {
 32.9921 +
 32.9922 +    get value() {
 32.9923 +        var index = this.selectedIndex;
 32.9924 +        return (index === -1) ? '' : this.options[index].value;
 32.9925 +    },
 32.9926 +    set value(newValue) {
 32.9927 +        var options = this.options;
 32.9928 +        var imax = options.length;
 32.9929 +        for (var i=0; i< imax; ++i) {
 32.9930 +            if (options[i].value == newValue) {
 32.9931 +                this.setAttribute('value', newValue);
 32.9932 +                this.selectedIndex = i;
 32.9933 +                return;
 32.9934 +            }
 32.9935 +        }
 32.9936 +    },
 32.9937 +    get multiple() {
 32.9938 +        return this.hasAttribute('multiple');
 32.9939 +    },
 32.9940 +    set multiple(value) {
 32.9941 +        if (value) {
 32.9942 +            this.setAttribute('multiple', '');
 32.9943 +        } else {
 32.9944 +            if (this.hasAttribute('multiple')) {
 32.9945 +                this.removeAttribute('multiple');
 32.9946 +            }
 32.9947 +        }
 32.9948 +    },
 32.9949 +    // Returns HTMLOptionsCollection
 32.9950 +    get options() {
 32.9951 +        var nodes = this.getElementsByTagName('option');
 32.9952 +        var alist = [];
 32.9953 +        var i, tmp;
 32.9954 +        for (i = 0; i < nodes.length; ++i) {
 32.9955 +            alist.push(nodes[i]);
 32.9956 +            this[i] = nodes[i];
 32.9957 +            tmp = nodes[i].name;
 32.9958 +            if (tmp) {
 32.9959 +                this[tmp] = nodes[i];
 32.9960 +            }
 32.9961 +            tmp = nodes[i].id;
 32.9962 +            if (tmp) {
 32.9963 +                this[tmp] = nodes[i];
 32.9964 +            }
 32.9965 +        }
 32.9966 +        return new HTMLCollection(alist);
 32.9967 +    },
 32.9968 +    get length() {
 32.9969 +        return this.options.length;
 32.9970 +    },
 32.9971 +    item: function(idx) {
 32.9972 +        return this.options[idx];
 32.9973 +    },
 32.9974 +    namedItem: function(aname) {
 32.9975 +        return this.options[aname];
 32.9976 +    },
 32.9977 +
 32.9978 +    get selectedIndex() {
 32.9979 +        var options = this.options;
 32.9980 +        var imax = options.length;
 32.9981 +        for (var i=0; i < imax; ++i) {
 32.9982 +            if (options[i].selected) {
 32.9983 +                //console.log('select get selectedIndex %s', i);
 32.9984 +                return i;
 32.9985 +            }
 32.9986 +        }
 32.9987 +        //console.log('select get selectedIndex %s', -1);
 32.9988 +        return -1;
 32.9989 +    },
 32.9990 +
 32.9991 +    set selectedIndex(value) {
 32.9992 +        var options = this.options;
 32.9993 +        var num = Number(value);
 32.9994 +        var imax = options.length;
 32.9995 +        for (var i = 0; i < imax; ++i) {
 32.9996 +            options[i].selected = (i === num);
 32.9997 +        }
 32.9998 +    },
 32.9999 +    get type() {
32.10000 +        return this.multiple ? 'select-multiple' : 'select-one';
32.10001 +    },
32.10002 +
32.10003 +    add: function(element, before) {
32.10004 +        this.appendChild(element);
32.10005 +        //__add__(this);
32.10006 +    },
32.10007 +    remove: function() {
32.10008 +        __remove__(this);
32.10009 +    },
32.10010 +    toString: function() {
32.10011 +        return '[object HTMLSelectElement]';
32.10012 +    }
32.10013 +});
32.10014 +
32.10015 +// Named Element Support
32.10016 +HTMLElement.registerSetAttribute('SELECT', 'name',
32.10017 +                                 __updateFormForNamedElement__);
32.10018 +/**
32.10019 + * HTML 5: 4.6.22 The span element
32.10020 + * http://dev.w3.org/html5/spec/Overview.html#the-span-element
32.10021 + * 
32.10022 + */
32.10023 +HTMLSpanElement = function(ownerDocument) {
32.10024 +    HTMLElement.apply(this, arguments);
32.10025 +};
32.10026 +HTMLSpanElement.prototype = new HTMLElement();
32.10027 +__extend__(HTMLSpanElement.prototype, {
32.10028 +    toString: function(){
32.10029 +        return '[object HTMLSpanElement]';
32.10030 +    }
32.10031 +});
32.10032 +
32.10033 +
32.10034 +/**
32.10035 + * HTMLStyleElement - DOM Level 2
32.10036 + * HTML5 4.2.6 The style element
32.10037 + * http://dev.w3.org/html5/spec/Overview.html#the-style-element
32.10038 + */
32.10039 +HTMLStyleElement = function(ownerDocument) {
32.10040 +    HTMLElement.apply(this, arguments);
32.10041 +};
32.10042 +HTMLStyleElement.prototype = new HTMLElement();
32.10043 +__extend__(HTMLStyleElement.prototype, {
32.10044 +    get disabled(){
32.10045 +        return this.getAttribute('disabled');
32.10046 +    },
32.10047 +    set disabled(value){
32.10048 +        this.setAttribute('disabled',value);
32.10049 +    },
32.10050 +    get media(){
32.10051 +        return this.getAttribute('media');
32.10052 +    },
32.10053 +    set media(value){
32.10054 +        this.setAttribute('media',value);
32.10055 +    },
32.10056 +    get type(){
32.10057 +        return this.getAttribute('type');
32.10058 +    },
32.10059 +    set type(value){
32.10060 +        this.setAttribute('type',value);
32.10061 +    },
32.10062 +    toString: function() {
32.10063 +        return '[object HTMLStyleElement]';
32.10064 +    }
32.10065 +});
32.10066 +
32.10067 +/**
32.10068 + * HTMLTableElement - DOM Level 2
32.10069 + * Implementation Provided by Steven Wood
32.10070 + *
32.10071 + * HTML5: 4.9.1 The table element
32.10072 + * http://dev.w3.org/html5/spec/Overview.html#the-table-element
32.10073 + */
32.10074 +HTMLTableElement = function(ownerDocument) {
32.10075 +    HTMLElement.apply(this, arguments);
32.10076 +};
32.10077 +HTMLTableElement.prototype = new HTMLElement();
32.10078 +__extend__(HTMLTableElement.prototype, {
32.10079 +
32.10080 +    get tFoot() {
32.10081 +        //tFoot returns the table footer.
32.10082 +        return this.getElementsByTagName("tfoot")[0];
32.10083 +    },
32.10084 +
32.10085 +    createTFoot : function () {
32.10086 +        var tFoot = this.tFoot;
32.10087 +
32.10088 +        if (!tFoot) {
32.10089 +            tFoot = document.createElement("tfoot");
32.10090 +            this.appendChild(tFoot);
32.10091 +        }
32.10092 +
32.10093 +        return tFoot;
32.10094 +    },
32.10095 +
32.10096 +    deleteTFoot : function () {
32.10097 +        var foot = this.tFoot;
32.10098 +        if (foot) {
32.10099 +            foot.parentNode.removeChild(foot);
32.10100 +        }
32.10101 +    },
32.10102 +
32.10103 +    get tHead() {
32.10104 +        //tHead returns the table head.
32.10105 +        return this.getElementsByTagName("thead")[0];
32.10106 +    },
32.10107 +
32.10108 +    createTHead : function () {
32.10109 +        var tHead = this.tHead;
32.10110 +
32.10111 +        if (!tHead) {
32.10112 +            tHead = document.createElement("thead");
32.10113 +            this.insertBefore(tHead, this.firstChild);
32.10114 +        }
32.10115 +
32.10116 +        return tHead;
32.10117 +    },
32.10118 +
32.10119 +    deleteTHead : function () {
32.10120 +        var head = this.tHead;
32.10121 +        if (head) {
32.10122 +            head.parentNode.removeChild(head);
32.10123 +        }
32.10124 +    },
32.10125 +
32.10126 +    /*appendChild : function (child) {
32.10127 +
32.10128 +      var tagName;
32.10129 +      if(child&&child.nodeType==Node.ELEMENT_NODE){
32.10130 +      tagName = child.tagName.toLowerCase();
32.10131 +      if (tagName === "tr") {
32.10132 +      // need an implcit <tbody> to contain this...
32.10133 +      if (!this.currentBody) {
32.10134 +      this.currentBody = document.createElement("tbody");
32.10135 +
32.10136 +      Node.prototype.appendChild.apply(this, [this.currentBody]);
32.10137 +      }
32.10138 +
32.10139 +      return this.currentBody.appendChild(child);
32.10140 +
32.10141 +      } else if (tagName === "tbody" || tagName === "tfoot" && this.currentBody) {
32.10142 +      this.currentBody = child;
32.10143 +      return Node.prototype.appendChild.apply(this, arguments);
32.10144 +
32.10145 +      } else {
32.10146 +      return Node.prototype.appendChild.apply(this, arguments);
32.10147 +      }
32.10148 +      }else{
32.10149 +      //tables can still have text node from white space
32.10150 +      return Node.prototype.appendChild.apply(this, arguments);
32.10151 +      }
32.10152 +      },*/
32.10153 +
32.10154 +    get tBodies() {
32.10155 +        return new HTMLCollection(this.getElementsByTagName("tbody"));
32.10156 +
32.10157 +    },
32.10158 +
32.10159 +    get rows() {
32.10160 +        return new HTMLCollection(this.getElementsByTagName("tr"));
32.10161 +    },
32.10162 +
32.10163 +    insertRow : function (idx) {
32.10164 +        if (idx === undefined) {
32.10165 +            throw new Error("Index omitted in call to HTMLTableElement.insertRow ");
32.10166 +        }
32.10167 +
32.10168 +        var rows = this.rows,
32.10169 +            numRows = rows.length,
32.10170 +            node,
32.10171 +            inserted,
32.10172 +            lastRow;
32.10173 +
32.10174 +        if (idx > numRows) {
32.10175 +            throw new Error("Index > rows.length in call to HTMLTableElement.insertRow");
32.10176 +        }
32.10177 +
32.10178 +        inserted = document.createElement("tr");
32.10179 +        // If index is -1 or equal to the number of rows,
32.10180 +        // the row is appended as the last row. If index is omitted
32.10181 +        // or greater than the number of rows, an error will result
32.10182 +        if (idx === -1 || idx === numRows) {
32.10183 +            this.appendChild(inserted);
32.10184 +        } else {
32.10185 +            rows[idx].parentNode.insertBefore(inserted, rows[idx]);
32.10186 +        }
32.10187 +
32.10188 +        return inserted;
32.10189 +    },
32.10190 +
32.10191 +    deleteRow : function (idx) {
32.10192 +        var elem = this.rows[idx];
32.10193 +        elem.parentNode.removeChild(elem);
32.10194 +    },
32.10195 +
32.10196 +    get summary() {
32.10197 +        return this.getAttribute("summary");
32.10198 +    },
32.10199 +
32.10200 +    set summary(summary) {
32.10201 +        this.setAttribute("summary", summary);
32.10202 +    },
32.10203 +
32.10204 +    get align() {
32.10205 +        return this.getAttribute("align");
32.10206 +    },
32.10207 +
32.10208 +    set align(align) {
32.10209 +        this.setAttribute("align", align);
32.10210 +    },
32.10211 +
32.10212 +    get bgColor() {
32.10213 +        return this.getAttribute("bgColor");
32.10214 +    },
32.10215 +
32.10216 +    set bgColor(bgColor) {
32.10217 +        return this.setAttribute("bgColor", bgColor);
32.10218 +    },
32.10219 +
32.10220 +    get cellPadding() {
32.10221 +        return this.getAttribute("cellPadding");
32.10222 +    },
32.10223 +
32.10224 +    set cellPadding(cellPadding) {
32.10225 +        return this.setAttribute("cellPadding", cellPadding);
32.10226 +    },
32.10227 +
32.10228 +    get cellSpacing() {
32.10229 +        return this.getAttribute("cellSpacing");
32.10230 +    },
32.10231 +
32.10232 +    set cellSpacing(cellSpacing) {
32.10233 +        this.setAttribute("cellSpacing", cellSpacing);
32.10234 +    },
32.10235 +
32.10236 +    get frame() {
32.10237 +        return this.getAttribute("frame");
32.10238 +    },
32.10239 +
32.10240 +    set frame(frame) {
32.10241 +        this.setAttribute("frame", frame);
32.10242 +    },
32.10243 +
32.10244 +    get rules() {
32.10245 +        return this.getAttribute("rules");
32.10246 +    },
32.10247 +
32.10248 +    set rules(rules) {
32.10249 +        this.setAttribute("rules", rules);
32.10250 +    },
32.10251 +
32.10252 +    get width() {
32.10253 +        return this.getAttribute("width");
32.10254 +    },
32.10255 +
32.10256 +    set width(width) {
32.10257 +        this.setAttribute("width", width);
32.10258 +    },
32.10259 +    toString: function() {
32.10260 +        return '[object HTMLTableElement]';
32.10261 +    }
32.10262 +});
32.10263 +
32.10264 +/*
32.10265 + * HTMLxElement - DOM Level 2
32.10266 + * - Contributed by Steven Wood
32.10267 + *
32.10268 + * HTML5: 4.9.5 The tbody element
32.10269 + * http://dev.w3.org/html5/spec/Overview.html#the-tbody-element
32.10270 + * http://dev.w3.org/html5/spec/Overview.html#htmltablesectionelement
32.10271 + */
32.10272 +HTMLTableSectionElement = function(ownerDocument) {
32.10273 +    HTMLElement.apply(this, arguments);
32.10274 +};
32.10275 +HTMLTableSectionElement.prototype = new HTMLElement();
32.10276 +__extend__(HTMLTableSectionElement.prototype, {
32.10277 +
32.10278 +    /*appendChild : function (child) {
32.10279 +
32.10280 +    // disallow nesting of these elements.
32.10281 +    if (child.tagName.match(/TBODY|TFOOT|THEAD/)) {
32.10282 +    return this.parentNode.appendChild(child);
32.10283 +    } else {
32.10284 +    return Node.prototype.appendChild.apply(this, arguments);
32.10285 +    }
32.10286 +
32.10287 +    },*/
32.10288 +
32.10289 +    get align() {
32.10290 +        return this.getAttribute("align");
32.10291 +    },
32.10292 +
32.10293 +    get ch() {
32.10294 +        return this.getAttribute("ch");
32.10295 +    },
32.10296 +
32.10297 +    set ch(ch) {
32.10298 +        this.setAttribute("ch", ch);
32.10299 +    },
32.10300 +
32.10301 +    // ch gets or sets the alignment character for cells in a column.
32.10302 +    set chOff(chOff) {
32.10303 +        this.setAttribute("chOff", chOff);
32.10304 +    },
32.10305 +
32.10306 +    get chOff() {
32.10307 +        return this.getAttribute("chOff");
32.10308 +    },
32.10309 +
32.10310 +    get vAlign () {
32.10311 +        return this.getAttribute("vAlign");
32.10312 +    },
32.10313 +
32.10314 +    get rows() {
32.10315 +        return new HTMLCollection(this.getElementsByTagName("tr"));
32.10316 +    },
32.10317 +
32.10318 +    insertRow : function (idx) {
32.10319 +        if (idx === undefined) {
32.10320 +            throw new Error("Index omitted in call to HTMLTableSectionElement.insertRow ");
32.10321 +        }
32.10322 +
32.10323 +        var numRows = this.rows.length,
32.10324 +        node = null;
32.10325 +
32.10326 +        if (idx > numRows) {
32.10327 +            throw new Error("Index > rows.length in call to HTMLTableSectionElement.insertRow");
32.10328 +        }
32.10329 +
32.10330 +        var row = document.createElement("tr");
32.10331 +        // If index is -1 or equal to the number of rows,
32.10332 +        // the row is appended as the last row. If index is omitted
32.10333 +        // or greater than the number of rows, an error will result
32.10334 +        if (idx === -1 || idx === numRows) {
32.10335 +            this.appendChild(row);
32.10336 +        } else {
32.10337 +            node = this.firstChild;
32.10338 +
32.10339 +            for (var i=0; i<idx; i++) {
32.10340 +                node = node.nextSibling;
32.10341 +            }
32.10342 +        }
32.10343 +
32.10344 +        this.insertBefore(row, node);
32.10345 +
32.10346 +        return row;
32.10347 +    },
32.10348 +
32.10349 +    deleteRow : function (idx) {
32.10350 +        var elem = this.rows[idx];
32.10351 +        this.removeChild(elem);
32.10352 +    },
32.10353 +
32.10354 +    toString: function() {
32.10355 +        return '[object HTMLTableSectionElement]';
32.10356 +    }
32.10357 +});
32.10358 +
32.10359 +/**
32.10360 + * HTMLTableCellElement
32.10361 + * base interface for TD and TH
32.10362 + *
32.10363 + * HTML5: 4.9.11 Attributes common to td and th elements
32.10364 + * http://dev.w3.org/html5/spec/Overview.html#htmltablecellelement
32.10365 + */
32.10366 +HTMLTableCellElement = function(ownerDocument) {
32.10367 +    HTMLElement.apply(this, arguments);
32.10368 +};
32.10369 +HTMLTableCellElement.prototype = new HTMLElement();
32.10370 +__extend__(HTMLTableCellElement.prototype, {
32.10371 +
32.10372 +
32.10373 +    // TOOD: attribute unsigned long  colSpan;
32.10374 +    // TODO: attribute unsigned long  rowSpan;
32.10375 +    // TODO: attribute DOMString      headers;
32.10376 +    // TODO: readonly attribute long  cellIndex;
32.10377 +
32.10378 +    // Not really necessary but might be helpful in debugging
32.10379 +    toString: function() {
32.10380 +        return '[object HTMLTableCellElement]';
32.10381 +    }
32.10382 +
32.10383 +});
32.10384 +
32.10385 +/**
32.10386 + * HTMLTableDataCellElement
32.10387 + * HTML5: 4.9.9 The td Element
32.10388 + * http://dev.w3.org/html5/spec/Overview.html#the-td-element
32.10389 + */
32.10390 +HTMLTableDataCellElement = function(ownerDocument) {
32.10391 +    HTMLElement.apply(this, arguments);
32.10392 +};
32.10393 +HTMLTableDataCellElement.prototype = new HTMLTableCellElement();
32.10394 +__extend__(HTMLTableDataCellElement.prototype, {
32.10395 +
32.10396 +    // adds no new properties or methods
32.10397 +
32.10398 +    toString: function() {
32.10399 +        return '[object HTMLTableDataCellElement]';
32.10400 +    }
32.10401 +});
32.10402 +
32.10403 +/**
32.10404 + * HTMLTableHeaderCellElement
32.10405 + * HTML5: 4.9.10 The th Element
32.10406 + * http://dev.w3.org/html5/spec/Overview.html#the-th-element
32.10407 + */
32.10408 +HTMLTableHeaderCellElement = function(ownerDocument) {
32.10409 +    HTMLElement.apply(this, arguments);
32.10410 +};
32.10411 +HTMLTableHeaderCellElement.prototype = new HTMLTableCellElement();
32.10412 +__extend__(HTMLTableHeaderCellElement.prototype, {
32.10413 +
32.10414 +    // TODO:  attribute DOMString scope
32.10415 +
32.10416 +    toString: function() {
32.10417 +        return '[object HTMLTableHeaderCellElement]';
32.10418 +    }
32.10419 +});
32.10420 +
32.10421 +
32.10422 +/**
32.10423 + * HTMLTextAreaElement - DOM Level 2
32.10424 + * HTML5: 4.10.11 The textarea element
32.10425 + * http://dev.w3.org/html5/spec/Overview.html#the-textarea-element
32.10426 + */
32.10427 +HTMLTextAreaElement = function(ownerDocument) {
32.10428 +    HTMLInputAreaCommon.apply(this, arguments);
32.10429 +    this._rawvalue = null;
32.10430 +};
32.10431 +HTMLTextAreaElement.prototype = new HTMLInputAreaCommon();
32.10432 +__extend__(HTMLTextAreaElement.prototype, {
32.10433 +    get cols(){
32.10434 +        return Number(this.getAttribute('cols')||'-1');
32.10435 +    },
32.10436 +    set cols(value){
32.10437 +        this.setAttribute('cols', value);
32.10438 +    },
32.10439 +    get rows(){
32.10440 +        return Number(this.getAttribute('rows')||'-1');
32.10441 +    },
32.10442 +    set rows(value){
32.10443 +        this.setAttribute('rows', value);
32.10444 +    },
32.10445 +
32.10446 +    /*
32.10447 +     * read-only
32.10448 +     */
32.10449 +    get type() {
32.10450 +        return this.getAttribute('type') || 'textarea';
32.10451 +    },
32.10452 +
32.10453 +    /**
32.10454 +     * This modifies the text node under the widget
32.10455 +     */
32.10456 +    get defaultValue() {
32.10457 +        return this.textContent;
32.10458 +    },
32.10459 +    set defaultValue(value) {
32.10460 +        this.textContent = value;
32.10461 +    },
32.10462 +
32.10463 +    /**
32.10464 +     * http://dev.w3.org/html5/spec/Overview.html#concept-textarea-raw-value
32.10465 +     */
32.10466 +    get value() {
32.10467 +        return (this._rawvalue === null) ? this.defaultValue : this._rawvalue;
32.10468 +    },
32.10469 +    set value(value) {
32.10470 +        this._rawvalue = value;
32.10471 +    },
32.10472 +    toString: function() {
32.10473 +        return '[object HTMLTextAreaElement]';
32.10474 +    }
32.10475 +});
32.10476 +
32.10477 +// Named Element Support
32.10478 +HTMLElement.registerSetAttribute('TEXTAREA', 'name',
32.10479 +                                 __updateFormForNamedElement__);
32.10480 +
32.10481 +/**
32.10482 + * HTMLTitleElement - DOM Level 2
32.10483 + *
32.10484 + * HTML5: 4.2.2 The title element
32.10485 + * http://dev.w3.org/html5/spec/Overview.html#the-title-element-0
32.10486 + */
32.10487 +HTMLTitleElement = function(ownerDocument) {
32.10488 +    HTMLElement.apply(this, arguments);
32.10489 +};
32.10490 +HTMLTitleElement.prototype = new HTMLElement();
32.10491 +__extend__(HTMLTitleElement.prototype, {
32.10492 +    get text() {
32.10493 +        return this.innerText;
32.10494 +    },
32.10495 +
32.10496 +    set text(titleStr) {
32.10497 +        this.textContent = titleStr;
32.10498 +    },
32.10499 +    toString: function() {
32.10500 +        return '[object HTMLTitleElement]';
32.10501 +    }
32.10502 +});
32.10503 +
32.10504 +
32.10505 +
32.10506 +/**
32.10507 + * HTMLRowElement - DOM Level 2
32.10508 + * Implementation Provided by Steven Wood
32.10509 + *
32.10510 + * HTML5: 4.9.8 The tr element
32.10511 + * http://dev.w3.org/html5/spec/Overview.html#the-tr-element
32.10512 + */
32.10513 +HTMLTableRowElement = function(ownerDocument) {
32.10514 +    HTMLElement.apply(this, arguments);
32.10515 +};
32.10516 +HTMLTableRowElement.prototype = new HTMLElement();
32.10517 +__extend__(HTMLTableRowElement.prototype, {
32.10518 +
32.10519 +    /*appendChild : function (child) {
32.10520 +
32.10521 +      var retVal = Node.prototype.appendChild.apply(this, arguments);
32.10522 +      retVal.cellIndex = this.cells.length -1;
32.10523 +
32.10524 +      return retVal;
32.10525 +      },*/
32.10526 +    // align gets or sets the horizontal alignment of data within cells of the row.
32.10527 +    get align() {
32.10528 +        return this.getAttribute("align");
32.10529 +    },
32.10530 +
32.10531 +    get bgColor() {
32.10532 +        return this.getAttribute("bgcolor");
32.10533 +    },
32.10534 +
32.10535 +    get cells() {
32.10536 +        var nl = this.getElementsByTagName("td");
32.10537 +        return new HTMLCollection(nl);
32.10538 +    },
32.10539 +
32.10540 +    get ch() {
32.10541 +        return this.getAttribute("ch");
32.10542 +    },
32.10543 +
32.10544 +    set ch(ch) {
32.10545 +        this.setAttribute("ch", ch);
32.10546 +    },
32.10547 +
32.10548 +    // ch gets or sets the alignment character for cells in a column.
32.10549 +    set chOff(chOff) {
32.10550 +        this.setAttribute("chOff", chOff);
32.10551 +    },
32.10552 +
32.10553 +    get chOff() {
32.10554 +        return this.getAttribute("chOff");
32.10555 +    },
32.10556 +
32.10557 +    /**
32.10558 +     * http://dev.w3.org/html5/spec/Overview.html#dom-tr-rowindex
32.10559 +     */
32.10560 +    get rowIndex() {
32.10561 +        var nl = this.parentNode.childNodes;
32.10562 +        for (var i=0; i<nl.length; i++) {
32.10563 +            if (nl[i] === this) {
32.10564 +                return i;
32.10565 +            }
32.10566 +        }
32.10567 +        return -1;
32.10568 +    },
32.10569 +
32.10570 +    /**
32.10571 +     * http://dev.w3.org/html5/spec/Overview.html#dom-tr-sectionrowindex
32.10572 +     */
32.10573 +    get sectionRowIndex() {
32.10574 +        var nl = this.parentNode.getElementsByTagName(this.tagName);
32.10575 +        for (var i=0; i<nl.length; i++) {
32.10576 +            if (nl[i] === this) {
32.10577 +                return i;
32.10578 +            }
32.10579 +        }
32.10580 +        return -1;
32.10581 +    },
32.10582 +
32.10583 +    get vAlign () {
32.10584 +        return this.getAttribute("vAlign");
32.10585 +    },
32.10586 +
32.10587 +    insertCell : function (idx) {
32.10588 +        if (idx === undefined) {
32.10589 +            throw new Error("Index omitted in call to HTMLTableRow.insertCell");
32.10590 +        }
32.10591 +
32.10592 +        var numCells = this.cells.length,
32.10593 +        node = null;
32.10594 +
32.10595 +        if (idx > numCells) {
32.10596 +            throw new Error("Index > rows.length in call to HTMLTableRow.insertCell");
32.10597 +        }
32.10598 +
32.10599 +        var cell = document.createElement("td");
32.10600 +
32.10601 +        if (idx === -1 || idx === numCells) {
32.10602 +            this.appendChild(cell);
32.10603 +        } else {
32.10604 +
32.10605 +
32.10606 +            node = this.firstChild;
32.10607 +
32.10608 +            for (var i=0; i<idx; i++) {
32.10609 +                node = node.nextSibling;
32.10610 +            }
32.10611 +        }
32.10612 +
32.10613 +        this.insertBefore(cell, node);
32.10614 +        cell.cellIndex = idx;
32.10615 +
32.10616 +        return cell;
32.10617 +    },
32.10618 +    deleteCell : function (idx) {
32.10619 +        var elem = this.cells[idx];
32.10620 +        this.removeChild(elem);
32.10621 +    },
32.10622 +    toString: function() {
32.10623 +        return '[object HTMLTableRowElement]';
32.10624 +    }
32.10625 +
32.10626 +});
32.10627 +
32.10628 +/*
32.10629 + * HTMLUListElement
32.10630 + * HTML5: 4.5.7 The ul Element
32.10631 + * http://dev.w3.org/html5/spec/Overview.html#htmlhtmlelement
32.10632 + */
32.10633 +HTMLUListElement = function(ownerDocument) {
32.10634 +    HTMLElement.apply(this, arguments);
32.10635 +};
32.10636 +
32.10637 +HTMLUListElement.prototype = new HTMLElement();
32.10638 +__extend__(HTMLUListElement.prototype, {
32.10639 +
32.10640 +    // no additional properties or elements
32.10641 +
32.10642 +    toString: function() {
32.10643 +        return '[object HTMLUListElement]';
32.10644 +    }
32.10645 +});
32.10646 +
32.10647 +
32.10648 +/**
32.10649 + * HTMLUnknownElement DOM Level 2
32.10650 + */
32.10651 +HTMLUnknownElement = function(ownerDocument) {
32.10652 +    HTMLElement.apply(this, arguments);
32.10653 +};
32.10654 +HTMLUnknownElement.prototype = new HTMLElement();
32.10655 +__extend__(HTMLUnknownElement.prototype,{
32.10656 +    toString: function(){
32.10657 +        return '[object HTMLUnknownElement]';
32.10658 +    }
32.10659 +});
32.10660 +
32.10661 +/**
32.10662 + * @author john resig & the envjs team
32.10663 + * @uri http://www.envjs.com/
32.10664 + * @copyright 2008-2010
32.10665 + * @license MIT
32.10666 + */
32.10667 +//CLOSURE_END
32.10668 +}());
32.10669 +
32.10670 +/**
32.10671 + * DOM Style Level 2
32.10672 + */
32.10673 +var CSS2Properties,
32.10674 +    CSSRule,
32.10675 +    CSSStyleRule,
32.10676 +    CSSImportRule,
32.10677 +    CSSMediaRule,
32.10678 +    CSSFontFaceRule,
32.10679 +    CSSPageRule,
32.10680 +    CSSRuleList,
32.10681 +    CSSStyleSheet,
32.10682 +    StyleSheet,
32.10683 +    StyleSheetList;
32.10684 +;
32.10685 +
32.10686 +/*
32.10687 + * Envjs css.1.2.13 
32.10688 + * Pure JavaScript Browser Environment
32.10689 + * By John Resig <http://ejohn.org/> and the Envjs Team
32.10690 + * Copyright 2008-2010 John Resig, under the MIT License
32.10691 + */
32.10692 +
32.10693 +//CLOSURE_START
32.10694 +(function(){
32.10695 +
32.10696 +
32.10697 +
32.10698 +
32.10699 +
32.10700 +/**
32.10701 + * @author john resig
32.10702 + */
32.10703 +// Helper method for extending one object with another.
32.10704 +function __extend__(a,b) {
32.10705 +    for ( var i in b ) {
32.10706 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
32.10707 +        if ( g || s ) {
32.10708 +            if ( g ) { a.__defineGetter__(i, g); }
32.10709 +            if ( s ) { a.__defineSetter__(i, s); }
32.10710 +        } else {
32.10711 +            a[i] = b[i];
32.10712 +        }
32.10713 +    } return a;
32.10714 +}
32.10715 +
32.10716 +/**
32.10717 + * @author john resig
32.10718 + */
32.10719 +//from jQuery
32.10720 +function __setArray__( target, array ) {
32.10721 +    // Resetting the length to 0, then using the native Array push
32.10722 +    // is a super-fast way to populate an object with array-like properties
32.10723 +    target.length = 0;
32.10724 +    Array.prototype.push.apply( target, array );
32.10725 +}
32.10726 +
32.10727 +/**
32.10728 + * @author ariel flesler
32.10729 + *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
32.10730 + * @param {Object} str
32.10731 + */
32.10732 +function __trim__( str ){
32.10733 +    return (str || "").replace( /^\s+|\s+$/g, "" );
32.10734 +}
32.10735 +
32.10736 +/*
32.10737 + * Interface DocumentStyle (introduced in DOM Level 2)
32.10738 + * http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle
32.10739 + *
32.10740 + * interface DocumentStyle {
32.10741 + *   readonly attribute StyleSheetList   styleSheets;
32.10742 + * };
32.10743 + *
32.10744 + */
32.10745 +__extend__(Document.prototype, {
32.10746 +    get styleSheets() {
32.10747 +        if (! this._styleSheets) {
32.10748 +            this._styleSheets = new StyleSheetList();
32.10749 +        }
32.10750 +        return this._styleSheets;
32.10751 +    }
32.10752 +});
32.10753 +/*
32.10754 + * CSS2Properties - DOM Level 2 CSS
32.10755 + * Renamed to CSSStyleDeclaration??
32.10756 + */
32.10757 +
32.10758 +var __toCamelCase__ = function(name) {
32.10759 +    if (name) {
32.10760 +        return name.replace(/\-(\w)/g, function(all, letter) {
32.10761 +            return letter.toUpperCase();
32.10762 +        });
32.10763 +    }
32.10764 +    return name;
32.10765 +};
32.10766 +
32.10767 +var __toDashed__ = function(camelCaseName) {
32.10768 +    if (camelCaseName) {
32.10769 +        return camelCaseName.replace(/[A-Z]/g, function(all) {
32.10770 +            return '-' + all.toLowerCase();
32.10771 +        });
32.10772 +    }
32.10773 +    return camelCaseName;
32.10774 +};
32.10775 +
32.10776 +CSS2Properties = function(element){
32.10777 +    //console.log('css2properties %s', __cssproperties__++);
32.10778 +    this.styleIndex = __supportedStyles__;//non-standard
32.10779 +    this.type = element.tagName;//non-standard
32.10780 +    __setArray__(this, []);
32.10781 +    __cssTextToStyles__(this, element.cssText || '');
32.10782 +};
32.10783 +__extend__(CSS2Properties.prototype, {
32.10784 +    get cssText() {
32.10785 +        var i, css = [];
32.10786 +        for (i = 0; i < this.length; ++i) {
32.10787 +            css.push(this[i] + ': ' + this.getPropertyValue(this[i]) + ';');
32.10788 +        }
32.10789 +        return css.join(' ');
32.10790 +    },
32.10791 +    set cssText(cssText) {
32.10792 +        __cssTextToStyles__(this, cssText);
32.10793 +    },
32.10794 +    getPropertyCSSValue: function(name) {
32.10795 +        //?
32.10796 +    },
32.10797 +    getPropertyPriority: function() {
32.10798 +
32.10799 +    },
32.10800 +    getPropertyValue: function(name) {
32.10801 +        var index, cname = __toCamelCase__(name);
32.10802 +        if (cname in this.styleIndex) {
32.10803 +            return this[cname];
32.10804 +        } else {
32.10805 +            index = Array.prototype.indexOf.apply(this, [name]);
32.10806 +            if (index > -1) {
32.10807 +                return this[index];
32.10808 +            }
32.10809 +        }
32.10810 +        return null;
32.10811 +    },
32.10812 +    item: function(index) {
32.10813 +        return this[index];
32.10814 +    },
32.10815 +    removeProperty: function(name) {
32.10816 +        this.styleIndex[name] = null;
32.10817 +        name = __toDashed__(name);
32.10818 +        var index = Array.prototype.indexOf.apply(this, [name]);
32.10819 +        if (index > -1) {
32.10820 +            Array.prototype.splice.apply(this, [1,index]);
32.10821 +        }
32.10822 +    },
32.10823 +    setProperty: function(name, value, priority) {
32.10824 +        var nval;
32.10825 +        name = __toCamelCase__(name);
32.10826 +        if (value !== undefined && name in this.styleIndex) {
32.10827 +            // NOTE:  parseFloat('300px') ==> 300  no
32.10828 +            // NOTE:  Number('300px') ==> Nan      yes
32.10829 +            nval = Number(value);
32.10830 +            this.styleIndex[name] = isNaN(nval) ? value : nval;
32.10831 +            name = __toDashed__(name);
32.10832 +            if (Array.prototype.indexOf.apply(this, [name]) === -1 ){
32.10833 +                Array.prototype.push.apply(this,[name]);
32.10834 +            }
32.10835 +        }
32.10836 +    },
32.10837 +    toString: function() {
32.10838 +        return '[object CSS2Properties]';
32.10839 +    }
32.10840 +});
32.10841 +
32.10842 +
32.10843 +
32.10844 +var __cssTextToStyles__ = function(css2props, cssText) {
32.10845 +    //console.log('__cssTextToStyles__ %s %s', css2props, cssText);
32.10846 +    //var styleArray=[];
32.10847 +    var i, style, styles = cssText.split(';');
32.10848 +    for (i = 0; i < styles.length; ++i) {
32.10849 +        style = styles[i].split(':');
32.10850 +        if (style.length === 2) {
32.10851 +            css2props.setProperty(style[0].replace(' ', '', 'g'),
32.10852 +                                  style[1].replace(' ', '', 'g'));
32.10853 +        }
32.10854 +    }
32.10855 +};
32.10856 +
32.10857 +//Obviously these arent all supported but by commenting out various
32.10858 +//sections this provides a single location to configure what is
32.10859 +//exposed as supported.
32.10860 +var __supportedStyles__ = {
32.10861 +    azimuth:                null,
32.10862 +    background:             null,
32.10863 +    backgroundAttachment:   null,
32.10864 +    backgroundColor:        'rgb(0,0,0)',
32.10865 +    backgroundImage:        null,
32.10866 +    backgroundPosition:     null,
32.10867 +    backgroundRepeat:       null,
32.10868 +    border:                 null,
32.10869 +    borderBottom:           null,
32.10870 +    borderBottomColor:      null,
32.10871 +    borderBottomStyle:      null,
32.10872 +    borderBottomWidth:      null,
32.10873 +    borderCollapse:         null,
32.10874 +    borderColor:            null,
32.10875 +    borderLeft:             null,
32.10876 +    borderLeftColor:        null,
32.10877 +    borderLeftStyle:        null,
32.10878 +    borderLeftWidth:        null,
32.10879 +    borderRight:            null,
32.10880 +    borderRightColor:       null,
32.10881 +    borderRightStyle:       null,
32.10882 +    borderRightWidth:       null,
32.10883 +    borderSpacing:          null,
32.10884 +    borderStyle:            null,
32.10885 +    borderTop:              null,
32.10886 +    borderTopColor:         null,
32.10887 +    borderTopStyle:         null,
32.10888 +    borderTopWidth:         null,
32.10889 +    borderWidth:            null,
32.10890 +    bottom:                 null,
32.10891 +    captionSide:            null,
32.10892 +    clear:                  null,
32.10893 +    clip:                   null,
32.10894 +    color:                  null,
32.10895 +    content:                null,
32.10896 +    counterIncrement:       null,
32.10897 +    counterReset:           null,
32.10898 +    cssFloat:               null,
32.10899 +    cue:                    null,
32.10900 +    cueAfter:               null,
32.10901 +    cueBefore:              null,
32.10902 +    cursor:                 null,
32.10903 +    direction:              'ltr',
32.10904 +    display:                null,
32.10905 +    elevation:              null,
32.10906 +    emptyCells:             null,
32.10907 +    font:                   null,
32.10908 +    fontFamily:             null,
32.10909 +    fontSize:               '1em',
32.10910 +    fontSizeAdjust:         null,
32.10911 +    fontStretch:            null,
32.10912 +    fontStyle:              null,
32.10913 +    fontVariant:            null,
32.10914 +    fontWeight:             null,
32.10915 +    height:                 '',
32.10916 +    left:                   null,
32.10917 +    letterSpacing:          null,
32.10918 +    lineHeight:             null,
32.10919 +    listStyle:              null,
32.10920 +    listStyleImage:         null,
32.10921 +    listStylePosition:      null,
32.10922 +    listStyleType:          null,
32.10923 +    margin:                 null,
32.10924 +    marginBottom:           '0px',
32.10925 +    marginLeft:             '0px',
32.10926 +    marginRight:            '0px',
32.10927 +    marginTop:              '0px',
32.10928 +    markerOffset:           null,
32.10929 +    marks:                  null,
32.10930 +    maxHeight:              null,
32.10931 +    maxWidth:               null,
32.10932 +    minHeight:              null,
32.10933 +    minWidth:               null,
32.10934 +    opacity:                1,
32.10935 +    orphans:                null,
32.10936 +    outline:                null,
32.10937 +    outlineColor:           null,
32.10938 +    outlineOffset:          null,
32.10939 +    outlineStyle:           null,
32.10940 +    outlineWidth:           null,
32.10941 +    overflow:               null,
32.10942 +    overflowX:              null,
32.10943 +    overflowY:              null,
32.10944 +    padding:                null,
32.10945 +    paddingBottom:          '0px',
32.10946 +    paddingLeft:            '0px',
32.10947 +    paddingRight:           '0px',
32.10948 +    paddingTop:             '0px',
32.10949 +    page:                   null,
32.10950 +    pageBreakAfter:         null,
32.10951 +    pageBreakBefore:        null,
32.10952 +    pageBreakInside:        null,
32.10953 +    pause:                  null,
32.10954 +    pauseAfter:             null,
32.10955 +    pauseBefore:            null,
32.10956 +    pitch:                  null,
32.10957 +    pitchRange:             null,
32.10958 +    position:               null,
32.10959 +    quotes:                 null,
32.10960 +    richness:               null,
32.10961 +    right:                  null,
32.10962 +    size:                   null,
32.10963 +    speak:                  null,
32.10964 +    speakHeader:            null,
32.10965 +    speakNumeral:           null,
32.10966 +    speakPunctuation:       null,
32.10967 +    speechRate:             null,
32.10968 +    stress:                 null,
32.10969 +    tableLayout:            null,
32.10970 +    textAlign:              null,
32.10971 +    textDecoration:         null,
32.10972 +    textIndent:             null,
32.10973 +    textShadow:             null,
32.10974 +    textTransform:          null,
32.10975 +    top:                    null,
32.10976 +    unicodeBidi:            null,
32.10977 +    verticalAlign:          null,
32.10978 +    visibility:             '',
32.10979 +    voiceFamily:            null,
32.10980 +    volume:                 null,
32.10981 +    whiteSpace:             null,
32.10982 +    widows:                 null,
32.10983 +    width:                  '1px',
32.10984 +    wordSpacing:            null,
32.10985 +    zIndex:                 1
32.10986 +};
32.10987 +
32.10988 +var __displayMap__ = {
32.10989 +    DIV      : 'block',
32.10990 +    P        : 'block',
32.10991 +    A        : 'inline',
32.10992 +    CODE     : 'inline',
32.10993 +    PRE      : 'block',
32.10994 +    SPAN     : 'inline',
32.10995 +    TABLE    : 'table',
32.10996 +    THEAD    : 'table-header-group',
32.10997 +    TBODY    : 'table-row-group',
32.10998 +    TR       : 'table-row',
32.10999 +    TH       : 'table-cell',
32.11000 +    TD       : 'table-cell',
32.11001 +    UL       : 'block',
32.11002 +    LI       : 'list-item'
32.11003 +};
32.11004 +
32.11005 +for (var style in __supportedStyles__) {
32.11006 +    if (__supportedStyles__.hasOwnProperty(style)) {
32.11007 +        (function(name) {
32.11008 +            if (name === 'width' || name === 'height') {
32.11009 +                CSS2Properties.prototype.__defineGetter__(name, function() {
32.11010 +                    if (this.display === 'none'){
32.11011 +                        return '0px';
32.11012 +                    }
32.11013 +                    return this.styleIndex[name];
32.11014 +                });
32.11015 +            } else if (name === 'display') {
32.11016 +                //display will be set to a tagName specific value if ''
32.11017 +                CSS2Properties.prototype.__defineGetter__(name, function() {
32.11018 +                    var val = this.styleIndex[name];
32.11019 +                    val = val ? val :__displayMap__[this.type];
32.11020 +                    return val;
32.11021 +                });
32.11022 +            } else {
32.11023 +                CSS2Properties.prototype.__defineGetter__(name, function() {
32.11024 +                    return this.styleIndex[name];
32.11025 +                });
32.11026 +            }
32.11027 +            CSS2Properties.prototype.__defineSetter__(name, function(value) {
32.11028 +                this.setProperty(name, value);
32.11029 +            });
32.11030 +        }(style));
32.11031 +    }
32.11032 +}
32.11033 +
32.11034 +/*
32.11035 + * CSSRule - DOM Level 2
32.11036 + */
32.11037 +CSSRule = function(options) {
32.11038 +
32.11039 +
32.11040 +
32.11041 +    var $style,
32.11042 +    $selectorText = options.selectorText ? options.selectorText : '';
32.11043 +    $style = new CSS2Properties({
32.11044 +        cssText: options.cssText ? options.cssText : null
32.11045 +    });
32.11046 +
32.11047 +    return __extend__(this, {
32.11048 +        get style(){
32.11049 +            return $style;
32.11050 +        },
32.11051 +        get selectorText(){
32.11052 +            return $selectorText;
32.11053 +        },
32.11054 +        set selectorText(selectorText){
32.11055 +            $selectorText = selectorText;
32.11056 +        },
32.11057 +        toString : function(){
32.11058 +            return "[object CSSRule]";
32.11059 +        }
32.11060 +    });
32.11061 +};
32.11062 +CSSRule.STYLE_RULE     =  1;
32.11063 +CSSRule.IMPORT_RULE    =  3;
32.11064 +CSSRule.MEDIA_RULE     =  4;
32.11065 +CSSRule.FONT_FACE_RULE =  5;
32.11066 +CSSRule.PAGE_RULE      =  6;
32.11067 +//CSSRule.NAMESPACE_RULE = 10;
32.11068 +
32.11069 +
32.11070 +CSSStyleRule = function() {
32.11071 +
32.11072 +};
32.11073 +
32.11074 +CSSImportRule = function() {
32.11075 +
32.11076 +};
32.11077 +
32.11078 +CSSMediaRule = function() {
32.11079 +
32.11080 +};
32.11081 +
32.11082 +CSSFontFaceRule = function() {
32.11083 +
32.11084 +};
32.11085 +
32.11086 +CSSPageRule = function() {
32.11087 +
32.11088 +};
32.11089 +
32.11090 +
32.11091 +CSSRuleList = function(data) {
32.11092 +    this.length = 0;
32.11093 +    __setArray__(this, data);
32.11094 +};
32.11095 +
32.11096 +__extend__(CSSRuleList.prototype, {
32.11097 +    item : function(index) {
32.11098 +        if ((index >= 0) && (index < this.length)) {
32.11099 +            // bounds check
32.11100 +            return this[index];
32.11101 +        }
32.11102 +        return null;
32.11103 +    },
32.11104 +    toString: function() {
32.11105 +        return '[object CSSRuleList]';
32.11106 +    }
32.11107 +});
32.11108 +
32.11109 +/**
32.11110 + * StyleSheet
32.11111 + * http://dev.w3.org/csswg/cssom/#stylesheet
32.11112 + *
32.11113 + * interface StyleSheet {
32.11114 + *   readonly attribute DOMString type;
32.11115 + *   readonly attribute DOMString href;
32.11116 + *   readonly attribute Node ownerNode;
32.11117 + *   readonly attribute StyleSheet parentStyleSheet;
32.11118 + *   readonly attribute DOMString title;
32.11119 + *   [PutForwards=mediaText] readonly attribute MediaList media;
32.11120 + *          attribute boolean disabled;
32.11121 + * };
32.11122 + */
32.11123 +StyleSheet = function() {
32.11124 +}
32.11125 +
32.11126 +/*
32.11127 + * CSSStyleSheet
32.11128 + * http://dev.w3.org/csswg/cssom/#cssstylesheet
32.11129 + *
32.11130 + * interface CSSStyleSheet : StyleSheet {
32.11131 + *   readonly attribute CSSRule ownerRule;
32.11132 + *   readonly attribute CSSRuleList cssRules;
32.11133 + *   unsigned long insertRule(DOMString rule, unsigned long index);
32.11134 + *   void deleteRule(unsigned long index);
32.11135 + * };
32.11136 + */
32.11137 +CSSStyleSheet = function(options){
32.11138 +    var $cssRules,
32.11139 +        $disabled = options.disabled ? options.disabled : false,
32.11140 +        $href = options.href ? options.href : null,
32.11141 +        $parentStyleSheet = options.parentStyleSheet ? options.parentStyleSheet : null,
32.11142 +        $title = options.title ? options.title : "",
32.11143 +        $type = "text/css";
32.11144 +
32.11145 +    function parseStyleSheet(text){
32.11146 +        //$debug("parsing css");
32.11147 +        //this is pretty ugly, but text is the entire text of a stylesheet
32.11148 +        var cssRules = [];
32.11149 +        if (!text) {
32.11150 +            text = '';
32.11151 +        }
32.11152 +        text = __trim__(text.replace(/\/\*(\r|\n|.)*\*\//g,""));
32.11153 +        // TODO: @import
32.11154 +        var blocks = text.split("}");
32.11155 +        blocks.pop();
32.11156 +        var i, j, len = blocks.length;
32.11157 +        var definition_block, properties, selectors;
32.11158 +        for (i=0; i<len; i++) {
32.11159 +            definition_block = blocks[i].split("{");
32.11160 +            if (definition_block.length === 2) {
32.11161 +                selectors = definition_block[0].split(",");
32.11162 +                for (j=0; j<selectors.length; j++) {
32.11163 +                    cssRules.push(new CSSRule({
32.11164 +                        selectorText : __trim__(selectors[j]),
32.11165 +                        cssText      : definition_block[1]
32.11166 +                    }));
32.11167 +                }
32.11168 +            }
32.11169 +        }
32.11170 +        return cssRules;
32.11171 +    }
32.11172 +
32.11173 +    $cssRules = new CSSRuleList(parseStyleSheet(options.textContent));
32.11174 +
32.11175 +    return __extend__(this, {
32.11176 +        get cssRules(){
32.11177 +            return $cssRules;
32.11178 +        },
32.11179 +        get rule(){
32.11180 +            return $cssRules;
32.11181 +        },//IE - may be deprecated
32.11182 +        get href(){
32.11183 +            return $href;
32.11184 +        },
32.11185 +        get parentStyleSheet(){
32.11186 +            return $parentStyleSheet;
32.11187 +        },
32.11188 +        get title(){
32.11189 +            return $title;
32.11190 +        },
32.11191 +        get type(){
32.11192 +            return $type;
32.11193 +        },
32.11194 +        addRule: function(selector, style, index){/*TODO*/},
32.11195 +        deleteRule: function(index){/*TODO*/},
32.11196 +        insertRule: function(rule, index){/*TODO*/},
32.11197 +        //IE - may be deprecated
32.11198 +        removeRule: function(index){
32.11199 +            this.deleteRule(index);
32.11200 +        }
32.11201 +    });
32.11202 +};
32.11203 +
32.11204 +StyleSheetList = function() {
32.11205 +}
32.11206 +StyleSheetList.prototype = new Array();
32.11207 +__extend__(StyleSheetList.prototype, {
32.11208 +    item : function(index) {
32.11209 +        if ((index >= 0) && (index < this.length)) {
32.11210 +            // bounds check
32.11211 +            return this[index];
32.11212 +        }
32.11213 +        return null;
32.11214 +    },
32.11215 +    toString: function() {
32.11216 +        return '[object StyleSheetList]';
32.11217 +    }
32.11218 +});
32.11219 +/**
32.11220 + * This extends HTMLElement to handle CSS-specific interfaces.
32.11221 + *
32.11222 + * More work / research would be needed to extend just (DOM) Element
32.11223 + * for xml use and additional changes for just HTMLElement.
32.11224 + */
32.11225 +
32.11226 +
32.11227 +/**
32.11228 + * Replace or add  the getter for 'style'
32.11229 + *
32.11230 + * This could be wrapped in a closure
32.11231 + */
32.11232 +var $css2properties = [{}];
32.11233 +
32.11234 +__extend__(HTMLElement.prototype, {
32.11235 +    get style(){
32.11236 +        if ( !this.css2uuid ) {
32.11237 +            this.css2uuid = $css2properties.length;
32.11238 +            $css2properties[this.css2uuid] = new CSS2Properties(this);
32.11239 +        }
32.11240 +        return $css2properties[this.css2uuid];
32.11241 +    },
32.11242 +});
32.11243 +
32.11244 +/**
32.11245 + * Change for how 'setAttribute("style", ...)' works
32.11246 + *
32.11247 + * We are truly adding functionality to HtmlElement.setAttribute, not
32.11248 + * replacing it.  So we need to save the old one first, call it, then
32.11249 + * do our stuff.  If we need to do more hacks like this, HTMLElement
32.11250 + * (or regular Element) needs to have a hooks array or dispatch table
32.11251 + * for global changes.
32.11252 + *
32.11253 + * This could be wrapped in a closure if desired.
32.11254 + */
32.11255 +var updateCss2Props = function(elem, values) {
32.11256 +    //console.log('__updateCss2Props__ %s %s', elem, values);
32.11257 +    if ( !elem.css2uuid ) {
32.11258 +        elem.css2uuid = $css2properties.length;
32.11259 +        $css2properties[elem.css2uuid] = new CSS2Properties(elem);
32.11260 +    }
32.11261 +    __cssTextToStyles__($css2properties[elem.css2uuid], values);
32.11262 +}
32.11263 +
32.11264 +var origSetAttribute =  HTMLElement.prototype.setAttribute;
32.11265 +
32.11266 +HTMLElement.prototype.setAttribute = function(name, value) {
32.11267 +    //console.log("CSS set attribute: " + name + ", " + value);
32.11268 +    origSetAttribute.apply(this, arguments);
32.11269 +    if (name === "style") {
32.11270 +        updateCss2Props(this, value);
32.11271 +    }
32.11272 +}
32.11273 +
32.11274 +/**
32.11275 + * @author john resig & the envjs team
32.11276 + * @uri http://www.envjs.com/
32.11277 + * @copyright 2008-2010
32.11278 + * @license MIT
32.11279 + */
32.11280 +//CLOSURE_END
32.11281 +}());
32.11282 +
32.11283 +//these are both non-standard globals that
32.11284 +//provide static namespaces and functions
32.11285 +//to support the html 5 parser from nu.
32.11286 +var XMLParser = {},
32.11287 +    HTMLParser = {};
32.11288 +
32.11289 +    
32.11290 +/*
32.11291 + * Envjs parser.1.2.13 
32.11292 + * Pure JavaScript Browser Environment
32.11293 + * By John Resig <http://ejohn.org/> and the Envjs Team
32.11294 + * Copyright 2008-2010 John Resig, under the MIT License
32.11295 + */
32.11296 +
32.11297 +//CLOSURE_START
32.11298 +(function(){
32.11299 +
32.11300 +
32.11301 +
32.11302 +
32.11303 +
32.11304 +/**
32.11305 + * @author john resig
32.11306 + */
32.11307 +// Helper method for extending one object with another.
32.11308 +function __extend__(a,b) {
32.11309 +    for ( var i in b ) {
32.11310 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
32.11311 +        if ( g || s ) {
32.11312 +            if ( g ) { a.__defineGetter__(i, g); }
32.11313 +            if ( s ) { a.__defineSetter__(i, s); }
32.11314 +        } else {
32.11315 +            a[i] = b[i];
32.11316 +        }
32.11317 +    } return a;
32.11318 +}
32.11319 +
32.11320 +/**
32.11321 + * @author john resig
32.11322 + */
32.11323 +//from jQuery
32.11324 +function __setArray__( target, array ) {
32.11325 +    // Resetting the length to 0, then using the native Array push
32.11326 +    // is a super-fast way to populate an object with array-like properties
32.11327 +    target.length = 0;
32.11328 +    Array.prototype.push.apply( target, array );
32.11329 +}
32.11330 +var __defineParser__;
32.11331 +(function () {var $gwt_version = "1.5.1";var $wnd = {};var $doc = {};var $moduleName, $moduleBase;var $stats = $wnd.__gwtStatsEvent ? function(a) {$wnd.__gwtStatsEvent(a)} : null;var _, N8000000000000000_longLit = [0, -9223372036854775808], P1000000_longLit = [16777216, 0], P7fffffffffffffff_longLit = [4294967295, 9223372032559808512];
32.11332 +function equals_1(other){
32.11333 +  return (this == null?null:this) === (other == null?null:other);
32.11334 +}
32.11335 +
32.11336 +function getClass_13(){
32.11337 +  return Ljava_lang_Object_2_classLit;
32.11338 +}
32.11339 +
32.11340 +function hashCode_2(){
32.11341 +  return this.$H || (this.$H = ++sNextHashId);
32.11342 +}
32.11343 +
32.11344 +function toString_3(){
32.11345 +  return (this.typeMarker$ == nullMethod || this.typeId$ == 2?this.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName + '@' + toPowerOfTwoString(this.typeMarker$ == nullMethod || this.typeId$ == 2?this.hashCode$():this.$H || (this.$H = ++sNextHashId), 4);
32.11346 +}
32.11347 +
32.11348 +function Object_0(){
32.11349 +}
32.11350 +
32.11351 +_ = Object_0.prototype = {};
32.11352 +_.equals$ = equals_1;
32.11353 +_.getClass$ = getClass_13;
32.11354 +_.hashCode$ = hashCode_2;
32.11355 +_.toString$ = toString_3;
32.11356 +_.toString = function(){
32.11357 +  return this.toString$();
32.11358 +}
32.11359 +;
32.11360 +_.typeMarker$ = nullMethod;
32.11361 +_.typeId$ = 1;
32.11362 +function $toString_1(this$static){
32.11363 +  var className, msg;
32.11364 +  className = this$static.getClass$().typeName;
32.11365 +  msg = this$static.getMessage();
32.11366 +  if (msg != null) {
32.11367 +    return className + ': ' + msg;
32.11368 +  }
32.11369 +   else {
32.11370 +    return className;
32.11371 +  }
32.11372 +}
32.11373 +
32.11374 +function getClass_19(){
32.11375 +  return Ljava_lang_Throwable_2_classLit;
32.11376 +}
32.11377 +
32.11378 +function getMessage(){
32.11379 +  return this.detailMessage;
32.11380 +}
32.11381 +
32.11382 +function toString_7(){
32.11383 +  return $toString_1(this);
32.11384 +}
32.11385 +
32.11386 +function Throwable(){
32.11387 +}
32.11388 +
32.11389 +_ = Throwable.prototype = new Object_0();
32.11390 +_.getClass$ = getClass_19;
32.11391 +_.getMessage = getMessage;
32.11392 +_.toString$ = toString_7;
32.11393 +_.typeId$ = 3;
32.11394 +_.detailMessage = null;
32.11395 +function $Exception(this$static, message){
32.11396 +  this$static.detailMessage = message;
32.11397 +  return this$static;
32.11398 +}
32.11399 +
32.11400 +function getClass_9(){
32.11401 +  return Ljava_lang_Exception_2_classLit;
32.11402 +}
32.11403 +
32.11404 +function Exception(){
32.11405 +}
32.11406 +
32.11407 +_ = Exception.prototype = new Throwable();
32.11408 +_.getClass$ = getClass_9;
32.11409 +_.typeId$ = 4;
32.11410 +function $RuntimeException(this$static, message){
32.11411 +  this$static.detailMessage = message;
32.11412 +  return this$static;
32.11413 +}
32.11414 +
32.11415 +function getClass_14(){
32.11416 +  return Ljava_lang_RuntimeException_2_classLit;
32.11417 +}
32.11418 +
32.11419 +function RuntimeException(){
32.11420 +}
32.11421 +
32.11422 +_ = RuntimeException.prototype = new Exception();
32.11423 +_.getClass$ = getClass_14;
32.11424 +_.typeId$ = 5;
32.11425 +function $JavaScriptException(this$static, e){
32.11426 +  $Exception(this$static, '(' + getName(e) + '): ' + getDescription(e) + (e != null && (e.typeMarker$ != nullMethod && e.typeId$ != 2)?getProperties0(dynamicCastJso(e)):''));
32.11427 +  getName(e);
32.11428 +  getDescription(e);
32.11429 +  getException(e);
32.11430 +  return this$static;
32.11431 +}
32.11432 +
32.11433 +function getClass_0(){
32.11434 +  return Lcom_google_gwt_core_client_JavaScriptException_2_classLit;
32.11435 +}
32.11436 +
32.11437 +function getDescription(e){
32.11438 +  if (e != null && (e.typeMarker$ != nullMethod && e.typeId$ != 2)) {
32.11439 +    return getDescription0(dynamicCastJso(e));
32.11440 +  }
32.11441 +   else {
32.11442 +    return e + '';
32.11443 +  }
32.11444 +}
32.11445 +
32.11446 +function getDescription0(e){
32.11447 +  return e == null?null:e.message;
32.11448 +}
32.11449 +
32.11450 +function getException(e){
32.11451 +  if (e != null && (e.typeMarker$ != nullMethod && e.typeId$ != 2)) {
32.11452 +    return dynamicCastJso(e);
32.11453 +  }
32.11454 +   else {
32.11455 +    return null;
32.11456 +  }
32.11457 +}
32.11458 +
32.11459 +function getName(e){
32.11460 +  if (e == null) {
32.11461 +    return 'null';
32.11462 +  }
32.11463 +   else if (e != null && (e.typeMarker$ != nullMethod && e.typeId$ != 2)) {
32.11464 +    return getName0(dynamicCastJso(e));
32.11465 +  }
32.11466 +   else if (e != null && canCast(e.typeId$, 1)) {
32.11467 +    return 'String';
32.11468 +  }
32.11469 +   else {
32.11470 +    return (e.typeMarker$ == nullMethod || e.typeId$ == 2?e.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName;
32.11471 +  }
32.11472 +}
32.11473 +
32.11474 +function getName0(e){
32.11475 +  return e == null?null:e.name;
32.11476 +}
32.11477 +
32.11478 +function getProperties0(e){
32.11479 +  var result = '';
32.11480 +  for (prop in e) {
32.11481 +    if (prop != 'name' && prop != 'message') {
32.11482 +      result += '\n ' + prop + ': ' + e[prop];
32.11483 +    }
32.11484 +  }
32.11485 +  return result;
32.11486 +}
32.11487 +
32.11488 +function JavaScriptException(){
32.11489 +}
32.11490 +
32.11491 +_ = JavaScriptException.prototype = new RuntimeException();
32.11492 +_.getClass$ = getClass_0;
32.11493 +_.typeId$ = 6;
32.11494 +function createFunction(){
32.11495 +  return function(){
32.11496 +  }
32.11497 +  ;
32.11498 +}
32.11499 +
32.11500 +function equals__devirtual$(this$static, other){
32.11501 +  return this$static.typeMarker$ == nullMethod || this$static.typeId$ == 2?this$static.equals$(other):(this$static == null?null:this$static) === (other == null?null:other);
32.11502 +}
32.11503 +
32.11504 +function hashCode__devirtual$(this$static){
32.11505 +  return this$static.typeMarker$ == nullMethod || this$static.typeId$ == 2?this$static.hashCode$():this$static.$H || (this$static.$H = ++sNextHashId);
32.11506 +}
32.11507 +
32.11508 +var sNextHashId = 0;
32.11509 +function createFromSeed(seedType, length){
32.11510 +  var seedArray = [null, 0, false, [0, 0]];
32.11511 +  var value = seedArray[seedType];
32.11512 +  var array = new Array(length);
32.11513 +  for (var i = 0; i < length; ++i) {
32.11514 +    array[i] = value;
32.11515 +  }
32.11516 +  return array;
32.11517 +}
32.11518 +
32.11519 +function getClass_2(){
32.11520 +  return this.arrayClass$;
32.11521 +}
32.11522 +
32.11523 +function initDim(arrayClass, typeId, queryId, length, seedType){
32.11524 +  var result;
32.11525 +  result = createFromSeed(seedType, length);
32.11526 +  initValues(arrayClass, typeId, queryId, result);
32.11527 +  return result;
32.11528 +}
32.11529 +
32.11530 +function initValues(arrayClass, typeId, queryId, array){
32.11531 +  if (!protoTypeArray_0) {
32.11532 +    protoTypeArray_0 = new Array_0();
32.11533 +  }
32.11534 +  wrapArray(array, protoTypeArray_0);
32.11535 +  array.arrayClass$ = arrayClass;
32.11536 +  array.typeId$ = typeId;
32.11537 +  array.queryId$ = queryId;
32.11538 +  return array;
32.11539 +}
32.11540 +
32.11541 +function setCheck(array, index, value){
32.11542 +  if (value != null) {
32.11543 +    if (array.queryId$ > 0 && !canCastUnsafe(value.typeId$, array.queryId$)) {
32.11544 +      throw new ArrayStoreException();
32.11545 +    }
32.11546 +    if (array.queryId$ < 0 && (value.typeMarker$ == nullMethod || value.typeId$ == 2)) {
32.11547 +      throw new ArrayStoreException();
32.11548 +    }
32.11549 +  }
32.11550 +  return array[index] = value;
32.11551 +}
32.11552 +
32.11553 +function wrapArray(array, protoTypeArray){
32.11554 +  for (var i in protoTypeArray) {
32.11555 +    var toCopy = protoTypeArray[i];
32.11556 +    if (toCopy) {
32.11557 +      array[i] = toCopy;
32.11558 +    }
32.11559 +  }
32.11560 +  return array;
32.11561 +}
32.11562 +
32.11563 +function Array_0(){
32.11564 +}
32.11565 +
32.11566 +_ = Array_0.prototype = new Object_0();
32.11567 +_.getClass$ = getClass_2;
32.11568 +_.typeId$ = 0;
32.11569 +_.arrayClass$ = null;
32.11570 +_.length = 0;
32.11571 +_.queryId$ = 0;
32.11572 +var protoTypeArray_0 = null;
32.11573 +function canCast(srcId, dstId){
32.11574 +  return srcId && !!typeIdArray[srcId][dstId];
32.11575 +}
32.11576 +
32.11577 +function canCastUnsafe(srcId, dstId){
32.11578 +  return srcId && typeIdArray[srcId][dstId];
32.11579 +}
32.11580 +
32.11581 +function dynamicCast(src, dstId){
32.11582 +  if (src != null && !canCastUnsafe(src.typeId$, dstId)) {
32.11583 +    throw new ClassCastException();
32.11584 +  }
32.11585 +  return src;
32.11586 +}
32.11587 +
32.11588 +function dynamicCastJso(src){
32.11589 +  if (src != null && (src.typeMarker$ == nullMethod || src.typeId$ == 2)) {
32.11590 +    throw new ClassCastException();
32.11591 +  }
32.11592 +  return src;
32.11593 +}
32.11594 +
32.11595 +function instanceOf(src, dstId){
32.11596 +  return src != null && canCast(src.typeId$, dstId);
32.11597 +}
32.11598 +
32.11599 +var typeIdArray = [{}, {}, {1:1, 6:1, 7:1, 8:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1, 19:1}, {4:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1}, {6:1, 8:1}, {2:1, 6:1}, {2:1, 6:1}, {2:1, 6:1}, {7:1}, {7:1}, {2:1, 6:1}, {2:1, 6:1}, {18:1}, {14:1}, {14:1}, {14:1}, {15:1}, {15:1}, {6:1, 15:1}, {6:1, 16:1}, {6:1, 15:1}, {2:1, 6:1, 17:1}, {6:1, 8:1}, {6:1, 8:1}, {6:1, 8:1}, {20:1}, {3:1}, {9:1}, {10:1}, {11:1}, {21:1}, {2:1, 6:1, 22:1}, {2:1, 6:1, 22:1}, {12:1}, {13:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}, {5:1}];
32.11600 +function caught(e){
32.11601 +  if (e != null && canCast(e.typeId$, 2)) {
32.11602 +    return e;
32.11603 +  }
32.11604 +  return $JavaScriptException(new JavaScriptException(), e);
32.11605 +}
32.11606 +
32.11607 +function create(valueLow, valueHigh){
32.11608 +  var diffHigh, diffLow;
32.11609 +  valueHigh %= 1.8446744073709552E19;
32.11610 +  valueLow %= 1.8446744073709552E19;
32.11611 +  diffHigh = valueHigh % 4294967296;
32.11612 +  diffLow = Math.floor(valueLow / 4294967296) * 4294967296;
32.11613 +  valueHigh = valueHigh - diffHigh + diffLow;
32.11614 +  valueLow = valueLow - diffLow + diffHigh;
32.11615 +  while (valueLow < 0) {
32.11616 +    valueLow += 4294967296;
32.11617 +    valueHigh -= 4294967296;
32.11618 +  }
32.11619 +  while (valueLow > 4294967295) {
32.11620 +    valueLow -= 4294967296;
32.11621 +    valueHigh += 4294967296;
32.11622 +  }
32.11623 +  valueHigh = valueHigh % 1.8446744073709552E19;
32.11624 +  while (valueHigh > 9223372032559808512) {
32.11625 +    valueHigh -= 1.8446744073709552E19;
32.11626 +  }
32.11627 +  while (valueHigh < -9223372036854775808) {
32.11628 +    valueHigh += 1.8446744073709552E19;
32.11629 +  }
32.11630 +  return [valueLow, valueHigh];
32.11631 +}
32.11632 +
32.11633 +function fromDouble(value){
32.11634 +  if (isNaN(value)) {
32.11635 +    return $clinit_7() , ZERO;
32.11636 +  }
32.11637 +  if (value < -9223372036854775808) {
32.11638 +    return $clinit_7() , MIN_VALUE;
32.11639 +  }
32.11640 +  if (value >= 9223372036854775807) {
32.11641 +    return $clinit_7() , MAX_VALUE;
32.11642 +  }
32.11643 +  if (value > 0) {
32.11644 +    return create(Math.floor(value), 0);
32.11645 +  }
32.11646 +   else {
32.11647 +    return create(Math.ceil(value), 0);
32.11648 +  }
32.11649 +}
32.11650 +
32.11651 +function fromInt(value){
32.11652 +  var rebase, result;
32.11653 +  if (value > -129 && value < 128) {
32.11654 +    rebase = value + 128;
32.11655 +    result = ($clinit_6() , boxedValues)[rebase];
32.11656 +    if (result == null) {
32.11657 +      result = boxedValues[rebase] = internalFromInt(value);
32.11658 +    }
32.11659 +    return result;
32.11660 +  }
32.11661 +  return internalFromInt(value);
32.11662 +}
32.11663 +
32.11664 +function internalFromInt(value){
32.11665 +  if (value >= 0) {
32.11666 +    return [value, 0];
32.11667 +  }
32.11668 +   else {
32.11669 +    return [value + 4294967296, -4294967296];
32.11670 +  }
32.11671 +}
32.11672 +
32.11673 +function $clinit_6(){
32.11674 +  $clinit_6 = nullMethod;
32.11675 +  boxedValues = initDim(_3_3D_classLit, 53, 13, 256, 0);
32.11676 +}
32.11677 +
32.11678 +var boxedValues;
32.11679 +function $clinit_7(){
32.11680 +  $clinit_7 = nullMethod;
32.11681 +  Math.log(2);
32.11682 +  MAX_VALUE = P7fffffffffffffff_longLit;
32.11683 +  MIN_VALUE = N8000000000000000_longLit;
32.11684 +  fromInt(-1);
32.11685 +  fromInt(1);
32.11686 +  fromInt(2);
32.11687 +  ZERO = fromInt(0);
32.11688 +}
32.11689 +
32.11690 +var MAX_VALUE, MIN_VALUE, ZERO;
32.11691 +function $clinit_12(){
32.11692 +  $clinit_12 = nullMethod;
32.11693 +  timers = $ArrayList(new ArrayList());
32.11694 +  addWindowCloseListener(new Timer$1());
32.11695 +}
32.11696 +
32.11697 +function $cancel(this$static){
32.11698 +  if (this$static.isRepeating) {
32.11699 +    clearInterval(this$static.timerId);
32.11700 +  }
32.11701 +   else {
32.11702 +    clearTimeout(this$static.timerId);
32.11703 +  }
32.11704 +  $remove_0(timers, this$static);
32.11705 +}
32.11706 +
32.11707 +function $fireImpl(this$static){
32.11708 +  if (!this$static.isRepeating) {
32.11709 +    $remove_0(timers, this$static);
32.11710 +  }
32.11711 +  $run(this$static);
32.11712 +}
32.11713 +
32.11714 +function $schedule(this$static, delayMillis){
32.11715 +  if (delayMillis <= 0) {
32.11716 +    throw $IllegalArgumentException(new IllegalArgumentException(), 'must be positive');
32.11717 +  }
32.11718 +  $cancel(this$static);
32.11719 +  this$static.isRepeating = false;
32.11720 +  this$static.timerId = createTimeout(this$static, delayMillis);
32.11721 +  $add(timers, this$static);
32.11722 +}
32.11723 +
32.11724 +function createTimeout(timer, delay){
32.11725 +  return setTimeout(function(){
32.11726 +    timer.fire();
32.11727 +  }
32.11728 +  , delay);
32.11729 +}
32.11730 +
32.11731 +function fire(){
32.11732 +  $fireImpl(this);
32.11733 +}
32.11734 +
32.11735 +function getClass_4(){
32.11736 +  return Lcom_google_gwt_user_client_Timer_2_classLit;
32.11737 +}
32.11738 +
32.11739 +function Timer(){
32.11740 +}
32.11741 +
32.11742 +_ = Timer.prototype = new Object_0();
32.11743 +_.fire = fire;
32.11744 +_.getClass$ = getClass_4;
32.11745 +_.typeId$ = 0;
32.11746 +_.isRepeating = false;
32.11747 +_.timerId = 0;
32.11748 +var timers;
32.11749 +function $onWindowClosed(){
32.11750 +  while (($clinit_12() , timers).size > 0) {
32.11751 +    $cancel(dynamicCast($get_0(timers, 0), 3));
32.11752 +  }
32.11753 +}
32.11754 +
32.11755 +function getClass_3(){
32.11756 +  return Lcom_google_gwt_user_client_Timer$1_2_classLit;
32.11757 +}
32.11758 +
32.11759 +function Timer$1(){
32.11760 +}
32.11761 +
32.11762 +_ = Timer$1.prototype = new Object_0();
32.11763 +_.getClass$ = getClass_3;
32.11764 +_.typeId$ = 7;
32.11765 +function addWindowCloseListener(listener){
32.11766 +  maybeInitializeHandlers();
32.11767 +  if (!closingListeners) {
32.11768 +    closingListeners = $ArrayList(new ArrayList());
32.11769 +  }
32.11770 +  $add(closingListeners, listener);
32.11771 +}
32.11772 +
32.11773 +function fireClosedImpl(){
32.11774 +  var listener$iterator;
32.11775 +  if (closingListeners) {
32.11776 +    for (listener$iterator = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl(), closingListeners); listener$iterator.i < listener$iterator.this$0.size_0();) {
32.11777 +      dynamicCast($next(listener$iterator), 4);
32.11778 +      $onWindowClosed();
32.11779 +    }
32.11780 +  }
32.11781 +}
32.11782 +
32.11783 +function fireClosingImpl(){
32.11784 +  var listener$iterator, ret;
32.11785 +  ret = null;
32.11786 +  if (closingListeners) {
32.11787 +    for (listener$iterator = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl(), closingListeners); listener$iterator.i < listener$iterator.this$0.size_0();) {
32.11788 +      dynamicCast($next(listener$iterator), 4);
32.11789 +      ret = null;
32.11790 +    }
32.11791 +  }
32.11792 +  return ret;
32.11793 +}
32.11794 +
32.11795 +function __init__xxx__(){
32.11796 +  __gwt_initHandlers(function(){
32.11797 +  }
32.11798 +  , function(){
32.11799 +    return fireClosingImpl();
32.11800 +  }
32.11801 +  , function(){
32.11802 +    fireClosedImpl();
32.11803 +  }
32.11804 +  );
32.11805 +}
32.11806 +
32.11807 +function maybeInitializeHandlers(){
32.11808 +  if (!handlersAreInitialized) {
32.11809 +    // __init__xxx__();
32.11810 +    handlersAreInitialized = true;
32.11811 +  }
32.11812 +}
32.11813 +
32.11814 +var closingListeners = null, handlersAreInitialized = false;
32.11815 +function $ArrayStoreException(this$static, message){
32.11816 +  this$static.detailMessage = message;
32.11817 +  return this$static;
32.11818 +}
32.11819 +
32.11820 +function getClass_5(){
32.11821 +  return Ljava_lang_ArrayStoreException_2_classLit;
32.11822 +}
32.11823 +
32.11824 +function ArrayStoreException(){
32.11825 +}
32.11826 +
32.11827 +_ = ArrayStoreException.prototype = new RuntimeException();
32.11828 +_.getClass$ = getClass_5;
32.11829 +_.typeId$ = 9;
32.11830 +function createForArray(packageName, className){
32.11831 +  var clazz;
32.11832 +  clazz = new Class();
32.11833 +  clazz.typeName = packageName + className;
32.11834 +  clazz.modifiers = 4;
32.11835 +  return clazz;
32.11836 +}
32.11837 +
32.11838 +function createForClass(packageName, className){
32.11839 +  var clazz;
32.11840 +  clazz = new Class();
32.11841 +  clazz.typeName = packageName + className;
32.11842 +  return clazz;
32.11843 +}
32.11844 +
32.11845 +function createForEnum(packageName, className){
32.11846 +  var clazz;
32.11847 +  clazz = new Class();
32.11848 +  clazz.typeName = packageName + className;
32.11849 +  clazz.modifiers = 8;
32.11850 +  return clazz;
32.11851 +}
32.11852 +
32.11853 +function getClass_7(){
32.11854 +  return Ljava_lang_Class_2_classLit;
32.11855 +}
32.11856 +
32.11857 +function toString_1(){
32.11858 +  return ((this.modifiers & 2) != 0?'interface ':(this.modifiers & 1) != 0?'':'class ') + this.typeName;
32.11859 +}
32.11860 +
32.11861 +function Class(){
32.11862 +}
32.11863 +
32.11864 +_ = Class.prototype = new Object_0();
32.11865 +_.getClass$ = getClass_7;
32.11866 +_.toString$ = toString_1;
32.11867 +_.typeId$ = 0;
32.11868 +_.modifiers = 0;
32.11869 +_.typeName = null;
32.11870 +function getClass_6(){
32.11871 +  return Ljava_lang_ClassCastException_2_classLit;
32.11872 +}
32.11873 +
32.11874 +function ClassCastException(){
32.11875 +}
32.11876 +
32.11877 +_ = ClassCastException.prototype = new RuntimeException();
32.11878 +_.getClass$ = getClass_6;
32.11879 +_.typeId$ = 12;
32.11880 +function compareTo(other){
32.11881 +  return this.ordinal - other.ordinal;
32.11882 +}
32.11883 +
32.11884 +function equals_0(other){
32.11885 +  return (this == null?null:this) === (other == null?null:other);
32.11886 +}
32.11887 +
32.11888 +function getClass_8(){
32.11889 +  return Ljava_lang_Enum_2_classLit;
32.11890 +}
32.11891 +
32.11892 +function hashCode_1(){
32.11893 +  return this.$H || (this.$H = ++sNextHashId);
32.11894 +}
32.11895 +
32.11896 +function toString_2(){
32.11897 +  return this.name_0;
32.11898 +}
32.11899 +
32.11900 +function Enum(){
32.11901 +}
32.11902 +
32.11903 +_ = Enum.prototype = new Object_0();
32.11904 +_.compareTo$ = compareTo;
32.11905 +_.equals$ = equals_0;
32.11906 +_.getClass$ = getClass_8;
32.11907 +_.hashCode$ = hashCode_1;
32.11908 +_.toString$ = toString_2;
32.11909 +_.typeId$ = 13;
32.11910 +_.name_0 = null;
32.11911 +_.ordinal = 0;
32.11912 +function $IllegalArgumentException(this$static, message){
32.11913 +  this$static.detailMessage = message;
32.11914 +  return this$static;
32.11915 +}
32.11916 +
32.11917 +function getClass_10(){
32.11918 +  return Ljava_lang_IllegalArgumentException_2_classLit;
32.11919 +}
32.11920 +
32.11921 +function IllegalArgumentException(){
32.11922 +}
32.11923 +
32.11924 +_ = IllegalArgumentException.prototype = new RuntimeException();
32.11925 +_.getClass$ = getClass_10;
32.11926 +_.typeId$ = 14;
32.11927 +function $IndexOutOfBoundsException(this$static, message){
32.11928 +  this$static.detailMessage = message;
32.11929 +  return this$static;
32.11930 +}
32.11931 +
32.11932 +function getClass_11(){
32.11933 +  return Ljava_lang_IndexOutOfBoundsException_2_classLit;
32.11934 +}
32.11935 +
32.11936 +function IndexOutOfBoundsException(){
32.11937 +}
32.11938 +
32.11939 +_ = IndexOutOfBoundsException.prototype = new RuntimeException();
32.11940 +_.getClass$ = getClass_11;
32.11941 +_.typeId$ = 15;
32.11942 +function toPowerOfTwoString(value, shift){
32.11943 +  var bitMask, buf, bufSize, pos;
32.11944 +  bufSize = ~~(32 / shift);
32.11945 +  bitMask = (1 << shift) - 1;
32.11946 +  buf = initDim(_3C_classLit, 42, -1, bufSize, 1);
32.11947 +  pos = bufSize - 1;
32.11948 +  if (value >= 0) {
32.11949 +    while (value > bitMask) {
32.11950 +      buf[pos--] = ($clinit_31() , digits)[value & bitMask];
32.11951 +      value >>= shift;
32.11952 +    }
32.11953 +  }
32.11954 +   else {
32.11955 +    while (pos > 0) {
32.11956 +      buf[pos--] = ($clinit_31() , digits)[value & bitMask];
32.11957 +      value >>= shift;
32.11958 +    }
32.11959 +  }
32.11960 +  buf[pos] = ($clinit_31() , digits)[value & bitMask];
32.11961 +  return __valueOf(buf, pos, bufSize);
32.11962 +}
32.11963 +
32.11964 +function getClass_12(){
32.11965 +  return Ljava_lang_NullPointerException_2_classLit;
32.11966 +}
32.11967 +
32.11968 +function NullPointerException(){
32.11969 +}
32.11970 +
32.11971 +_ = NullPointerException.prototype = new RuntimeException();
32.11972 +_.getClass$ = getClass_12;
32.11973 +_.typeId$ = 16;
32.11974 +function $clinit_31(){
32.11975 +  $clinit_31 = nullMethod;
32.11976 +  digits = initValues(_3C_classLit, 42, -1, [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 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]);
32.11977 +}
32.11978 +
32.11979 +var digits;
32.11980 +function $equals_0(this$static, other){
32.11981 +  if (!(other != null && canCast(other.typeId$, 1))) {
32.11982 +    return false;
32.11983 +  }
32.11984 +  return String(this$static) == other;
32.11985 +}
32.11986 +
32.11987 +function $getChars_0(this$static, srcBegin, srcEnd, dst, dstBegin){
32.11988 +  var srcIdx;
32.11989 +  for (srcIdx = srcBegin; srcIdx < srcEnd; ++srcIdx) {
32.11990 +    dst[dstBegin++] = this$static.charCodeAt(srcIdx);
32.11991 +  }
32.11992 +}
32.11993 +
32.11994 +function $toCharArray(this$static){
32.11995 +  var charArr, n;
32.11996 +  n = this$static.length;
32.11997 +  charArr = initDim(_3C_classLit, 42, -1, n, 1);
32.11998 +  $getChars_0(this$static, 0, n, charArr, 0);
32.11999 +  return charArr;
32.12000 +}
32.12001 +
32.12002 +function __checkBounds(legalCount, start, end){
32.12003 +  if (start < 0) {
32.12004 +    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException(), start);
32.12005 +  }
32.12006 +  if (end < start) {
32.12007 +    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException(), end - start);
32.12008 +  }
32.12009 +  if (end > legalCount) {
32.12010 +    throw $StringIndexOutOfBoundsException(new StringIndexOutOfBoundsException(), end);
32.12011 +  }
32.12012 +}
32.12013 +
32.12014 +function __valueOf(x, start, end){
32.12015 +  x = x.slice(start, end);
32.12016 +  return String.fromCharCode.apply(null, x);
32.12017 +}
32.12018 +
32.12019 +function compareTo_1(thisStr, otherStr){
32.12020 +  thisStr = String(thisStr);
32.12021 +  if (thisStr == otherStr) {
32.12022 +    return 0;
32.12023 +  }
32.12024 +  return thisStr < otherStr?-1:1;
32.12025 +}
32.12026 +
32.12027 +function compareTo_0(other){
32.12028 +  return compareTo_1(this, other);
32.12029 +}
32.12030 +
32.12031 +function equals_2(other){
32.12032 +  return $equals_0(this, other);
32.12033 +}
32.12034 +
32.12035 +function getClass_18(){
32.12036 +  return Ljava_lang_String_2_classLit;
32.12037 +}
32.12038 +
32.12039 +function hashCode_3(){
32.12040 +  return getHashCode_0(this);
32.12041 +}
32.12042 +
32.12043 +function toString_6(){
32.12044 +  return this;
32.12045 +}
32.12046 +
32.12047 +function valueOf_1(x, offset, count){
32.12048 +  var end;
32.12049 +  end = offset + count;
32.12050 +  __checkBounds(x.length, offset, end);
32.12051 +  return __valueOf(x, offset, end);
32.12052 +}
32.12053 +
32.12054 +_ = String.prototype;
32.12055 +_.compareTo$ = compareTo_0;
32.12056 +_.equals$ = equals_2;
32.12057 +_.getClass$ = getClass_18;
32.12058 +_.hashCode$ = hashCode_3;
32.12059 +_.toString$ = toString_6;
32.12060 +_.typeId$ = 2;
32.12061 +function $clinit_35(){
32.12062 +  $clinit_35 = nullMethod;
32.12063 +  back = {};
32.12064 +  front = {};
32.12065 +}
32.12066 +
32.12067 +function compute(str){
32.12068 +  var hashCode, i, inc, n;
32.12069 +  n = str.length;
32.12070 +  inc = n < 64?1:~~(n / 32);
32.12071 +  hashCode = 0;
32.12072 +  for (i = 0; i < n; i += inc) {
32.12073 +    hashCode <<= 1;
32.12074 +    hashCode += str.charCodeAt(i);
32.12075 +  }
32.12076 +  hashCode |= 0;
32.12077 +  return hashCode;
32.12078 +}
32.12079 +
32.12080 +function getHashCode_0(str){
32.12081 +  $clinit_35();
32.12082 +  var key = ':' + str;
32.12083 +  var result = front[key];
32.12084 +  if (result != null) {
32.12085 +    return result;
32.12086 +  }
32.12087 +  result = back[key];
32.12088 +  if (result == null) {
32.12089 +    result = compute(str);
32.12090 +  }
32.12091 +  increment();
32.12092 +  return front[key] = result;
32.12093 +}
32.12094 +
32.12095 +function increment(){
32.12096 +  if (count_0 == 256) {
32.12097 +    back = front;
32.12098 +    front = {};
32.12099 +    count_0 = 0;
32.12100 +  }
32.12101 +  ++count_0;
32.12102 +}
32.12103 +
32.12104 +var back, count_0 = 0, front;
32.12105 +function $StringBuffer(this$static){
32.12106 +  this$static.builder = $StringBuilder(new StringBuilder());
32.12107 +  return this$static;
32.12108 +}
32.12109 +
32.12110 +function $append(this$static, toAppend){
32.12111 +  $append_0(this$static.builder, toAppend);
32.12112 +  return this$static;
32.12113 +}
32.12114 +
32.12115 +function getClass_15(){
32.12116 +  return Ljava_lang_StringBuffer_2_classLit;
32.12117 +}
32.12118 +
32.12119 +function toString_4(){
32.12120 +  return $toString_0(this.builder);
32.12121 +}
32.12122 +
32.12123 +function StringBuffer(){
32.12124 +}
32.12125 +
32.12126 +_ = StringBuffer.prototype = new Object_0();
32.12127 +_.getClass$ = getClass_15;
32.12128 +_.toString$ = toString_4;
32.12129 +_.typeId$ = 17;
32.12130 +function $StringBuilder(this$static){
32.12131 +  this$static.stringArray = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 0, 0);
32.12132 +  return this$static;
32.12133 +}
32.12134 +
32.12135 +function $append_0(this$static, toAppend){
32.12136 +  var appendLength;
32.12137 +  if (toAppend == null) {
32.12138 +    toAppend = 'null';
32.12139 +  }
32.12140 +  appendLength = toAppend.length;
32.12141 +  if (appendLength > 0) {
32.12142 +    this$static.stringArray[this$static.arrayLen++] = toAppend;
32.12143 +    this$static.stringLength += appendLength;
32.12144 +    if (this$static.arrayLen > 1024) {
32.12145 +      $toString_0(this$static);
32.12146 +      this$static.stringArray.length = 1024;
32.12147 +    }
32.12148 +  }
32.12149 +  return this$static;
32.12150 +}
32.12151 +
32.12152 +function $getChars(this$static, srcStart, srcEnd, dst, dstStart){
32.12153 +  var s;
32.12154 +  __checkBounds(this$static.stringLength, srcStart, srcEnd);
32.12155 +  __checkBounds(dst.length, dstStart, dstStart + (srcEnd - srcStart));
32.12156 +  s = $toString_0(this$static);
32.12157 +  while (srcStart < srcEnd) {
32.12158 +    dst[dstStart++] = s.charCodeAt(srcStart++);
32.12159 +  }
32.12160 +}
32.12161 +
32.12162 +function $setLength(this$static, newLength){
32.12163 +  var oldLength, s;
32.12164 +  oldLength = this$static.stringLength;
32.12165 +  if (newLength < oldLength) {
32.12166 +    s = $toString_0(this$static);
32.12167 +    this$static.stringArray = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [s.substr(0, newLength - 0), '', s.substr(oldLength, s.length - oldLength)]);
32.12168 +    this$static.arrayLen = 3;
32.12169 +    this$static.stringLength += ''.length - (oldLength - newLength);
32.12170 +  }
32.12171 +   else if (newLength > oldLength) {
32.12172 +    $append_0(this$static, String.fromCharCode.apply(null, initDim(_3C_classLit, 42, -1, newLength - oldLength, 1)));
32.12173 +  }
32.12174 +}
32.12175 +
32.12176 +function $toString_0(this$static){
32.12177 +  var s;
32.12178 +  if (this$static.arrayLen != 1) {
32.12179 +    this$static.stringArray.length = this$static.arrayLen;
32.12180 +    s = this$static.stringArray.join('');
32.12181 +    this$static.stringArray = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [s]);
32.12182 +    this$static.arrayLen = 1;
32.12183 +  }
32.12184 +  return this$static.stringArray[0];
32.12185 +}
32.12186 +
32.12187 +function getClass_16(){
32.12188 +  return Ljava_lang_StringBuilder_2_classLit;
32.12189 +}
32.12190 +
32.12191 +function toString_5(){
32.12192 +  return $toString_0(this);
32.12193 +}
32.12194 +
32.12195 +function StringBuilder(){
32.12196 +}
32.12197 +
32.12198 +_ = StringBuilder.prototype = new Object_0();
32.12199 +_.getClass$ = getClass_16;
32.12200 +_.toString$ = toString_5;
32.12201 +_.typeId$ = 18;
32.12202 +_.arrayLen = 0;
32.12203 +_.stringLength = 0;
32.12204 +function $StringIndexOutOfBoundsException(this$static, index){
32.12205 +  this$static.detailMessage = 'String index out of range: ' + index;
32.12206 +  return this$static;
32.12207 +}
32.12208 +
32.12209 +function getClass_17(){
32.12210 +  return Ljava_lang_StringIndexOutOfBoundsException_2_classLit;
32.12211 +}
32.12212 +
32.12213 +function StringIndexOutOfBoundsException(){
32.12214 +}
32.12215 +
32.12216 +_ = StringIndexOutOfBoundsException.prototype = new IndexOutOfBoundsException();
32.12217 +_.getClass$ = getClass_17;
32.12218 +_.typeId$ = 19;
32.12219 +function arraycopy(src, srcOfs, dest, destOfs, len){
32.12220 +  var destArray, destEnd, destTypeName, destlen, srcArray, srcTypeName, srclen;
32.12221 +  if (src == null || dest == null) {
32.12222 +    throw new NullPointerException();
32.12223 +  }
32.12224 +  srcTypeName = (src.typeMarker$ == nullMethod || src.typeId$ == 2?src.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName;
32.12225 +  destTypeName = (dest.typeMarker$ == nullMethod || dest.typeId$ == 2?dest.getClass$():Lcom_google_gwt_core_client_JavaScriptObject_2_classLit).typeName;
32.12226 +  if (srcTypeName.charCodeAt(0) != 91 || destTypeName.charCodeAt(0) != 91) {
32.12227 +    throw $ArrayStoreException(new ArrayStoreException(), 'Must be array types');
32.12228 +  }
32.12229 +  if (srcTypeName.charCodeAt(1) != destTypeName.charCodeAt(1)) {
32.12230 +    throw $ArrayStoreException(new ArrayStoreException(), 'Array types must match');
32.12231 +  }
32.12232 +  srclen = src.length;
32.12233 +  destlen = dest.length;
32.12234 +  if (srcOfs < 0 || destOfs < 0 || len < 0 || srcOfs + len > srclen || destOfs + len > destlen) {
32.12235 +    throw new IndexOutOfBoundsException();
32.12236 +  }
32.12237 +  if ((srcTypeName.charCodeAt(1) == 76 || srcTypeName.charCodeAt(1) == 91) && !$equals_0(srcTypeName, destTypeName)) {
32.12238 +    srcArray = dynamicCast(src, 5);
32.12239 +    destArray = dynamicCast(dest, 5);
32.12240 +    if ((src == null?null:src) === (dest == null?null:dest) && srcOfs < destOfs) {
32.12241 +      srcOfs += len;
32.12242 +      for (destEnd = destOfs + len; destEnd-- > destOfs;) {
32.12243 +        setCheck(destArray, destEnd, srcArray[--srcOfs]);
32.12244 +      }
32.12245 +    }
32.12246 +     else {
32.12247 +      for (destEnd = destOfs + len; destOfs < destEnd;) {
32.12248 +        setCheck(destArray, destOfs++, srcArray[srcOfs++]);
32.12249 +      }
32.12250 +    }
32.12251 +  }
32.12252 +   else {
32.12253 +    Array.prototype.splice.apply(dest, [destOfs, len].concat(src.slice(srcOfs, srcOfs + len)));
32.12254 +  }
32.12255 +}
32.12256 +
32.12257 +function $UnsupportedOperationException(this$static, message){
32.12258 +  this$static.detailMessage = message;
32.12259 +  return this$static;
32.12260 +}
32.12261 +
32.12262 +function getClass_20(){
32.12263 +  return Ljava_lang_UnsupportedOperationException_2_classLit;
32.12264 +}
32.12265 +
32.12266 +function UnsupportedOperationException(){
32.12267 +}
32.12268 +
32.12269 +_ = UnsupportedOperationException.prototype = new RuntimeException();
32.12270 +_.getClass$ = getClass_20;
32.12271 +_.typeId$ = 20;
32.12272 +function $advanceToFind(iter, o){
32.12273 +  var t;
32.12274 +  while (iter.hasNext()) {
32.12275 +    t = iter.next_0();
32.12276 +    if (o == null?t == null:equals__devirtual$(o, t)) {
32.12277 +      return iter;
32.12278 +    }
32.12279 +  }
32.12280 +  return null;
32.12281 +}
32.12282 +
32.12283 +function add(o){
32.12284 +  throw $UnsupportedOperationException(new UnsupportedOperationException(), 'Add not supported on this collection');
32.12285 +}
32.12286 +
32.12287 +function contains(o){
32.12288 +  var iter;
32.12289 +  iter = $advanceToFind(this.iterator(), o);
32.12290 +  return !!iter;
32.12291 +}
32.12292 +
32.12293 +function getClass_21(){
32.12294 +  return Ljava_util_AbstractCollection_2_classLit;
32.12295 +}
32.12296 +
32.12297 +function toString_8(){
32.12298 +  var comma, iter, sb;
32.12299 +  sb = $StringBuffer(new StringBuffer());
32.12300 +  comma = null;
32.12301 +  $append_0(sb.builder, '[');
32.12302 +  iter = this.iterator();
32.12303 +  while (iter.hasNext()) {
32.12304 +    if (comma != null) {
32.12305 +      $append_0(sb.builder, comma);
32.12306 +    }
32.12307 +     else {
32.12308 +      comma = ', ';
32.12309 +    }
32.12310 +    $append(sb, '' + iter.next_0());
32.12311 +  }
32.12312 +  $append_0(sb.builder, ']');
32.12313 +  return $toString_0(sb.builder);
32.12314 +}
32.12315 +
32.12316 +function AbstractCollection(){
32.12317 +}
32.12318 +
32.12319 +_ = AbstractCollection.prototype = new Object_0();
32.12320 +_.add_1 = add;
32.12321 +_.contains = contains;
32.12322 +_.getClass$ = getClass_21;
32.12323 +_.toString$ = toString_8;
32.12324 +_.typeId$ = 0;
32.12325 +function equals_5(obj){
32.12326 +  var entry, entry$iterator, otherKey, otherMap, otherValue;
32.12327 +  if ((obj == null?null:obj) === (this == null?null:this)) {
32.12328 +    return true;
32.12329 +  }
32.12330 +  if (!(obj != null && canCast(obj.typeId$, 16))) {
32.12331 +    return false;
32.12332 +  }
32.12333 +  otherMap = dynamicCast(obj, 16);
32.12334 +  if (dynamicCast(this, 16).size != otherMap.size) {
32.12335 +    return false;
32.12336 +  }
32.12337 +  for (entry$iterator = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator(), $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet(), otherMap).this$0); $hasNext(entry$iterator.iter);) {
32.12338 +    entry = dynamicCast($next(entry$iterator.iter), 14);
32.12339 +    otherKey = entry.getKey();
32.12340 +    otherValue = entry.getValue();
32.12341 +    if (!(otherKey == null?dynamicCast(this, 16).nullSlotLive:otherKey != null?$hasStringValue(dynamicCast(this, 16), otherKey):$hasHashValue(dynamicCast(this, 16), otherKey, ~~getHashCode_0(otherKey)))) {
32.12342 +      return false;
32.12343 +    }
32.12344 +    if (!equalsWithNullCheck(otherValue, otherKey == null?dynamicCast(this, 16).nullSlot:otherKey != null?dynamicCast(this, 16).stringMap[':' + otherKey]:$getHashValue(dynamicCast(this, 16), otherKey, ~~getHashCode_0(otherKey)))) {
32.12345 +      return false;
32.12346 +    }
32.12347 +  }
32.12348 +  return true;
32.12349 +}
32.12350 +
32.12351 +function getClass_31(){
32.12352 +  return Ljava_util_AbstractMap_2_classLit;
32.12353 +}
32.12354 +
32.12355 +function hashCode_6(){
32.12356 +  var entry, entry$iterator, hashCode;
32.12357 +  hashCode = 0;
32.12358 +  for (entry$iterator = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator(), $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet(), dynamicCast(this, 16)).this$0); $hasNext(entry$iterator.iter);) {
32.12359 +    entry = dynamicCast($next(entry$iterator.iter), 14);
32.12360 +    hashCode += entry.hashCode$();
32.12361 +    hashCode = ~~hashCode;
32.12362 +  }
32.12363 +  return hashCode;
32.12364 +}
32.12365 +
32.12366 +function toString_10(){
32.12367 +  var comma, entry, iter, s;
32.12368 +  s = '{';
32.12369 +  comma = false;
32.12370 +  for (iter = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator(), $AbstractHashMap$EntrySet(new AbstractHashMap$EntrySet(), dynamicCast(this, 16)).this$0); $hasNext(iter.iter);) {
32.12371 +    entry = dynamicCast($next(iter.iter), 14);
32.12372 +    if (comma) {
32.12373 +      s += ', ';
32.12374 +    }
32.12375 +     else {
32.12376 +      comma = true;
32.12377 +    }
32.12378 +    s += '' + entry.getKey();
32.12379 +    s += '=';
32.12380 +    s += '' + entry.getValue();
32.12381 +  }
32.12382 +  return s + '}';
32.12383 +}
32.12384 +
32.12385 +function AbstractMap(){
32.12386 +}
32.12387 +
32.12388 +_ = AbstractMap.prototype = new Object_0();
32.12389 +_.equals$ = equals_5;
32.12390 +_.getClass$ = getClass_31;
32.12391 +_.hashCode$ = hashCode_6;
32.12392 +_.toString$ = toString_10;
32.12393 +_.typeId$ = 0;
32.12394 +function $addAllHashEntries(this$static, dest){
32.12395 +  var hashCodeMap = this$static.hashCodeMap;
32.12396 +  for (var hashCode in hashCodeMap) {
32.12397 +    if (hashCode == parseInt(hashCode)) {
32.12398 +      var array = hashCodeMap[hashCode];
32.12399 +      for (var i = 0, c = array.length; i < c; ++i) {
32.12400 +        dest.add_1(array[i]);
32.12401 +      }
32.12402 +    }
32.12403 +  }
32.12404 +}
32.12405 +
32.12406 +function $addAllStringEntries(this$static, dest){
32.12407 +  var stringMap = this$static.stringMap;
32.12408 +  for (var key in stringMap) {
32.12409 +    if (key.charCodeAt(0) == 58) {
32.12410 +      var entry = new_$(this$static, key.substring(1));
32.12411 +      dest.add_1(entry);
32.12412 +    }
32.12413 +  }
32.12414 +}
32.12415 +
32.12416 +function $clearImpl(this$static){
32.12417 +  this$static.hashCodeMap = [];
32.12418 +  this$static.stringMap = {};
32.12419 +  this$static.nullSlotLive = false;
32.12420 +  this$static.nullSlot = null;
32.12421 +  this$static.size = 0;
32.12422 +}
32.12423 +
32.12424 +function $containsKey(this$static, key){
32.12425 +  return key == null?this$static.nullSlotLive:key != null?':' + key in this$static.stringMap:$hasHashValue(this$static, key, ~~getHashCode_0(key));
32.12426 +}
32.12427 +
32.12428 +function $get(this$static, key){
32.12429 +  return key == null?this$static.nullSlot:key != null?this$static.stringMap[':' + key]:$getHashValue(this$static, key, ~~getHashCode_0(key));
32.12430 +}
32.12431 +
32.12432 +function $getHashValue(this$static, key, hashCode){
32.12433 +  var array = this$static.hashCodeMap[hashCode];
32.12434 +  if (array) {
32.12435 +    for (var i = 0, c = array.length; i < c; ++i) {
32.12436 +      var entry = array[i];
32.12437 +      var entryKey = entry.getKey();
32.12438 +      if (this$static.equalsBridge(key, entryKey)) {
32.12439 +        return entry.getValue();
32.12440 +      }
32.12441 +    }
32.12442 +  }
32.12443 +  return null;
32.12444 +}
32.12445 +
32.12446 +function $hasHashValue(this$static, key, hashCode){
32.12447 +  var array = this$static.hashCodeMap[hashCode];
32.12448 +  if (array) {
32.12449 +    for (var i = 0, c = array.length; i < c; ++i) {
32.12450 +      var entry = array[i];
32.12451 +      var entryKey = entry.getKey();
32.12452 +      if (this$static.equalsBridge(key, entryKey)) {
32.12453 +        return true;
32.12454 +      }
32.12455 +    }
32.12456 +  }
32.12457 +  return false;
32.12458 +}
32.12459 +
32.12460 +function $hasStringValue(this$static, key){
32.12461 +  return ':' + key in this$static.stringMap;
32.12462 +}
32.12463 +
32.12464 +function equalsBridge(value1, value2){
32.12465 +  return (value1 == null?null:value1) === (value2 == null?null:value2) || value1 != null && equals__devirtual$(value1, value2);
32.12466 +}
32.12467 +
32.12468 +function getClass_26(){
32.12469 +  return Ljava_util_AbstractHashMap_2_classLit;
32.12470 +}
32.12471 +
32.12472 +function AbstractHashMap(){
32.12473 +}
32.12474 +
32.12475 +_ = AbstractHashMap.prototype = new AbstractMap();
32.12476 +_.equalsBridge = equalsBridge;
32.12477 +_.getClass$ = getClass_26;
32.12478 +_.typeId$ = 0;
32.12479 +_.hashCodeMap = null;
32.12480 +_.nullSlot = null;
32.12481 +_.nullSlotLive = false;
32.12482 +_.size = 0;
32.12483 +_.stringMap = null;
32.12484 +function equals_6(o){
32.12485 +  var iter, other, otherItem;
32.12486 +  if ((o == null?null:o) === (this == null?null:this)) {
32.12487 +    return true;
32.12488 +  }
32.12489 +  if (!(o != null && canCast(o.typeId$, 18))) {
32.12490 +    return false;
32.12491 +  }
32.12492 +  other = dynamicCast(o, 18);
32.12493 +  if (other.this$0.size != this.size_0()) {
32.12494 +    return false;
32.12495 +  }
32.12496 +  for (iter = $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator(), other.this$0); $hasNext(iter.iter);) {
32.12497 +    otherItem = dynamicCast($next(iter.iter), 14);
32.12498 +    if (!this.contains(otherItem)) {
32.12499 +      return false;
32.12500 +    }
32.12501 +  }
32.12502 +  return true;
32.12503 +}
32.12504 +
32.12505 +function getClass_33(){
32.12506 +  return Ljava_util_AbstractSet_2_classLit;
32.12507 +}
32.12508 +
32.12509 +function hashCode_7(){
32.12510 +  var hashCode, iter, next;
32.12511 +  hashCode = 0;
32.12512 +  for (iter = this.iterator(); iter.hasNext();) {
32.12513 +    next = iter.next_0();
32.12514 +    if (next != null) {
32.12515 +      hashCode += hashCode__devirtual$(next);
32.12516 +      hashCode = ~~hashCode;
32.12517 +    }
32.12518 +  }
32.12519 +  return hashCode;
32.12520 +}
32.12521 +
32.12522 +function AbstractSet(){
32.12523 +}
32.12524 +
32.12525 +_ = AbstractSet.prototype = new AbstractCollection();
32.12526 +_.equals$ = equals_6;
32.12527 +_.getClass$ = getClass_33;
32.12528 +_.hashCode$ = hashCode_7;
32.12529 +_.typeId$ = 0;
32.12530 +function $AbstractHashMap$EntrySet(this$static, this$0){
32.12531 +  this$static.this$0 = this$0;
32.12532 +  return this$static;
32.12533 +}
32.12534 +
32.12535 +function contains_0(o){
32.12536 +  var entry, key, value;
32.12537 +  if (o != null && canCast(o.typeId$, 14)) {
32.12538 +    entry = dynamicCast(o, 14);
32.12539 +    key = entry.getKey();
32.12540 +    if ($containsKey(this.this$0, key)) {
32.12541 +      value = $get(this.this$0, key);
32.12542 +      return $equals_1(entry.getValue(), value);
32.12543 +    }
32.12544 +  }
32.12545 +  return false;
32.12546 +}
32.12547 +
32.12548 +function getClass_23(){
32.12549 +  return Ljava_util_AbstractHashMap$EntrySet_2_classLit;
32.12550 +}
32.12551 +
32.12552 +function iterator(){
32.12553 +  return $AbstractHashMap$EntrySetIterator(new AbstractHashMap$EntrySetIterator(), this.this$0);
32.12554 +}
32.12555 +
32.12556 +function size_0(){
32.12557 +  return this.this$0.size;
32.12558 +}
32.12559 +
32.12560 +function AbstractHashMap$EntrySet(){
32.12561 +}
32.12562 +
32.12563 +_ = AbstractHashMap$EntrySet.prototype = new AbstractSet();
32.12564 +_.contains = contains_0;
32.12565 +_.getClass$ = getClass_23;
32.12566 +_.iterator = iterator;
32.12567 +_.size_0 = size_0;
32.12568 +_.typeId$ = 21;
32.12569 +_.this$0 = null;
32.12570 +function $AbstractHashMap$EntrySetIterator(this$static, this$0){
32.12571 +  var list;
32.12572 +  this$static.this$0 = this$0;
32.12573 +  list = $ArrayList(new ArrayList());
32.12574 +  if (this$static.this$0.nullSlotLive) {
32.12575 +    $add(list, $AbstractHashMap$MapEntryNull(new AbstractHashMap$MapEntryNull(), this$static.this$0));
32.12576 +  }
32.12577 +  $addAllStringEntries(this$static.this$0, list);
32.12578 +  $addAllHashEntries(this$static.this$0, list);
32.12579 +  this$static.iter = $AbstractList$IteratorImpl(new AbstractList$IteratorImpl(), list);
32.12580 +  return this$static;
32.12581 +}
32.12582 +
32.12583 +function getClass_22(){
32.12584 +  return Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit;
32.12585 +}
32.12586 +
32.12587 +function hasNext(){
32.12588 +  return $hasNext(this.iter);
32.12589 +}
32.12590 +
32.12591 +function next_0(){
32.12592 +  return dynamicCast($next(this.iter), 14);
32.12593 +}
32.12594 +
32.12595 +function AbstractHashMap$EntrySetIterator(){
32.12596 +}
32.12597 +
32.12598 +_ = AbstractHashMap$EntrySetIterator.prototype = new Object_0();
32.12599 +_.getClass$ = getClass_22;
32.12600 +_.hasNext = hasNext;
32.12601 +_.next_0 = next_0;
32.12602 +_.typeId$ = 0;
32.12603 +_.iter = null;
32.12604 +_.this$0 = null;
32.12605 +function equals_4(other){
32.12606 +  var entry;
32.12607 +  if (other != null && canCast(other.typeId$, 14)) {
32.12608 +    entry = dynamicCast(other, 14);
32.12609 +    if (equalsWithNullCheck(this.getKey(), entry.getKey()) && equalsWithNullCheck(this.getValue(), entry.getValue())) {
32.12610 +      return true;
32.12611 +    }
32.12612 +  }
32.12613 +  return false;
32.12614 +}
32.12615 +
32.12616 +function getClass_30(){
32.12617 +  return Ljava_util_AbstractMapEntry_2_classLit;
32.12618 +}
32.12619 +
32.12620 +function hashCode_5(){
32.12621 +  var keyHash, valueHash;
32.12622 +  keyHash = 0;
32.12623 +  valueHash = 0;
32.12624 +  if (this.getKey() != null) {
32.12625 +    keyHash = getHashCode_0(this.getKey());
32.12626 +  }
32.12627 +  if (this.getValue() != null) {
32.12628 +    valueHash = hashCode__devirtual$(this.getValue());
32.12629 +  }
32.12630 +  return keyHash ^ valueHash;
32.12631 +}
32.12632 +
32.12633 +function toString_9(){
32.12634 +  return this.getKey() + '=' + this.getValue();
32.12635 +}
32.12636 +
32.12637 +function AbstractMapEntry(){
32.12638 +}
32.12639 +
32.12640 +_ = AbstractMapEntry.prototype = new Object_0();
32.12641 +_.equals$ = equals_4;
32.12642 +_.getClass$ = getClass_30;
32.12643 +_.hashCode$ = hashCode_5;
32.12644 +_.toString$ = toString_9;
32.12645 +_.typeId$ = 22;
32.12646 +function $AbstractHashMap$MapEntryNull(this$static, this$0){
32.12647 +  this$static.this$0 = this$0;
32.12648 +  return this$static;
32.12649 +}
32.12650 +
32.12651 +function getClass_24(){
32.12652 +  return Ljava_util_AbstractHashMap$MapEntryNull_2_classLit;
32.12653 +}
32.12654 +
32.12655 +function getKey(){
32.12656 +  return null;
32.12657 +}
32.12658 +
32.12659 +function getValue(){
32.12660 +  return this.this$0.nullSlot;
32.12661 +}
32.12662 +
32.12663 +function AbstractHashMap$MapEntryNull(){
32.12664 +}
32.12665 +
32.12666 +_ = AbstractHashMap$MapEntryNull.prototype = new AbstractMapEntry();
32.12667 +_.getClass$ = getClass_24;
32.12668 +_.getKey = getKey;
32.12669 +_.getValue = getValue;
32.12670 +_.typeId$ = 23;
32.12671 +_.this$0 = null;
32.12672 +function $AbstractHashMap$MapEntryString(this$static, key, this$0){
32.12673 +  this$static.this$0 = this$0;
32.12674 +  this$static.key = key;
32.12675 +  return this$static;
32.12676 +}
32.12677 +
32.12678 +function getClass_25(){
32.12679 +  return Ljava_util_AbstractHashMap$MapEntryString_2_classLit;
32.12680 +}
32.12681 +
32.12682 +function getKey_0(){
32.12683 +  return this.key;
32.12684 +}
32.12685 +
32.12686 +function getValue_0(){
32.12687 +  return this.this$0.stringMap[':' + this.key];
32.12688 +}
32.12689 +
32.12690 +function new_$(this$outer, key){
32.12691 +  return $AbstractHashMap$MapEntryString(new AbstractHashMap$MapEntryString(), key, this$outer);
32.12692 +}
32.12693 +
32.12694 +function AbstractHashMap$MapEntryString(){
32.12695 +}
32.12696 +
32.12697 +_ = AbstractHashMap$MapEntryString.prototype = new AbstractMapEntry();
32.12698 +_.getClass$ = getClass_25;
32.12699 +_.getKey = getKey_0;
32.12700 +_.getValue = getValue_0;
32.12701 +_.typeId$ = 24;
32.12702 +_.key = null;
32.12703 +_.this$0 = null;
32.12704 +function add_1(obj){
32.12705 +  this.add_0(this.size_0(), obj);
32.12706 +  return true;
32.12707 +}
32.12708 +
32.12709 +function add_0(index, element){
32.12710 +  throw $UnsupportedOperationException(new UnsupportedOperationException(), 'Add not supported on this list');
32.12711 +}
32.12712 +
32.12713 +function checkIndex(index, size){
32.12714 +  if (index < 0 || index >= size) {
32.12715 +    indexOutOfBounds(index, size);
32.12716 +  }
32.12717 +}
32.12718 +
32.12719 +function equals_3(o){
32.12720 +  var elem, elemOther, iter, iterOther, other;
32.12721 +  if ((o == null?null:o) === (this == null?null:this)) {
32.12722 +    return true;
32.12723 +  }
32.12724 +  if (!(o != null && canCast(o.typeId$, 15))) {
32.12725 +    return false;
32.12726 +  }
32.12727 +  other = dynamicCast(o, 15);
32.12728 +  if (this.size_0() != other.size_0()) {
32.12729 +    return false;
32.12730 +  }
32.12731 +  iter = this.iterator();
32.12732 +  iterOther = other.iterator();
32.12733 +  while (iter.i < iter.this$0.size_0()) {
32.12734 +    elem = $next(iter);
32.12735 +    elemOther = $next(iterOther);
32.12736 +    if (!(elem == null?elemOther == null:equals__devirtual$(elem, elemOther))) {
32.12737 +      return false;
32.12738 +    }
32.12739 +  }
32.12740 +  return true;
32.12741 +}
32.12742 +
32.12743 +function getClass_29(){
32.12744 +  return Ljava_util_AbstractList_2_classLit;
32.12745 +}
32.12746 +
32.12747 +function hashCode_4(){
32.12748 +  var iter, k, obj;
32.12749 +  k = 1;
32.12750 +  iter = this.iterator();
32.12751 +  while (iter.i < iter.this$0.size_0()) {
32.12752 +    obj = $next(iter);
32.12753 +    k = 31 * k + (obj == null?0:hashCode__devirtual$(obj));
32.12754 +    k = ~~k;
32.12755 +  }
32.12756 +  return k;
32.12757 +}
32.12758 +
32.12759 +function indexOutOfBounds(index, size){
32.12760 +  throw $IndexOutOfBoundsException(new IndexOutOfBoundsException(), 'Index: ' + index + ', Size: ' + size);
32.12761 +}
32.12762 +
32.12763 +function iterator_0(){
32.12764 +  return $AbstractList$IteratorImpl(new AbstractList$IteratorImpl(), this);
32.12765 +}
32.12766 +
32.12767 +function AbstractList(){
32.12768 +}
32.12769 +
32.12770 +_ = AbstractList.prototype = new AbstractCollection();
32.12771 +_.add_1 = add_1;
32.12772 +_.add_0 = add_0;
32.12773 +_.equals$ = equals_3;
32.12774 +_.getClass$ = getClass_29;
32.12775 +_.hashCode$ = hashCode_4;
32.12776 +_.iterator = iterator_0;
32.12777 +_.typeId$ = 25;
32.12778 +function $AbstractList$IteratorImpl(this$static, this$0){
32.12779 +  this$static.this$0 = this$0;
32.12780 +  return this$static;
32.12781 +}
32.12782 +
32.12783 +function $hasNext(this$static){
32.12784 +  return this$static.i < this$static.this$0.size_0();
32.12785 +}
32.12786 +
32.12787 +function $next(this$static){
32.12788 +  if (this$static.i >= this$static.this$0.size_0()) {
32.12789 +    throw new NoSuchElementException();
32.12790 +  }
32.12791 +  return this$static.this$0.get(this$static.i++);
32.12792 +}
32.12793 +
32.12794 +function getClass_27(){
32.12795 +  return Ljava_util_AbstractList$IteratorImpl_2_classLit;
32.12796 +}
32.12797 +
32.12798 +function hasNext_0(){
32.12799 +  return this.i < this.this$0.size_0();
32.12800 +}
32.12801 +
32.12802 +function next_1(){
32.12803 +  return $next(this);
32.12804 +}
32.12805 +
32.12806 +function AbstractList$IteratorImpl(){
32.12807 +}
32.12808 +
32.12809 +_ = AbstractList$IteratorImpl.prototype = new Object_0();
32.12810 +_.getClass$ = getClass_27;
32.12811 +_.hasNext = hasNext_0;
32.12812 +_.next_0 = next_1;
32.12813 +_.typeId$ = 0;
32.12814 +_.i = 0;
32.12815 +_.this$0 = null;
32.12816 +function $AbstractList$ListIteratorImpl(this$static, this$0){
32.12817 +  this$static.this$0 = this$0;
32.12818 +  return this$static;
32.12819 +}
32.12820 +
32.12821 +function getClass_28(){
32.12822 +  return Ljava_util_AbstractList$ListIteratorImpl_2_classLit;
32.12823 +}
32.12824 +
32.12825 +function AbstractList$ListIteratorImpl(){
32.12826 +}
32.12827 +
32.12828 +_ = AbstractList$ListIteratorImpl.prototype = new AbstractList$IteratorImpl();
32.12829 +_.getClass$ = getClass_28;
32.12830 +_.typeId$ = 0;
32.12831 +function add_2(index, element){
32.12832 +  var iter;
32.12833 +  iter = $listIterator(this, index);
32.12834 +  $addBefore(iter.this$0, element, iter.currentNode);
32.12835 +  ++iter.currentIndex;
32.12836 +  iter.lastNode = null;
32.12837 +}
32.12838 +
32.12839 +function get(index){
32.12840 +  var $e0, iter;
32.12841 +  iter = $listIterator(this, index);
32.12842 +  try {
32.12843 +    return $next_0(iter);
32.12844 +  }
32.12845 +   catch ($e0) {
32.12846 +    $e0 = caught($e0);
32.12847 +    if (instanceOf($e0, 17)) {
32.12848 +      throw $IndexOutOfBoundsException(new IndexOutOfBoundsException(), "Can't get element " + index);
32.12849 +    }
32.12850 +     else 
32.12851 +      throw $e0;
32.12852 +  }
32.12853 +}
32.12854 +
32.12855 +function getClass_32(){
32.12856 +  return Ljava_util_AbstractSequentialList_2_classLit;
32.12857 +}
32.12858 +
32.12859 +function iterator_1(){
32.12860 +  return $AbstractList$ListIteratorImpl(new AbstractList$ListIteratorImpl(), this);
32.12861 +}
32.12862 +
32.12863 +function AbstractSequentialList(){
32.12864 +}
32.12865 +
32.12866 +_ = AbstractSequentialList.prototype = new AbstractList();
32.12867 +_.add_0 = add_2;
32.12868 +_.get = get;
32.12869 +_.getClass$ = getClass_32;
32.12870 +_.iterator = iterator_1;
32.12871 +_.typeId$ = 26;
32.12872 +function $ArrayList(this$static){
32.12873 +  this$static.array = initDim(_3Ljava_lang_Object_2_classLit, 47, 0, 0, 0);
32.12874 +  this$static.size = 0;
32.12875 +  return this$static;
32.12876 +}
32.12877 +
32.12878 +function $add(this$static, o){
32.12879 +  setCheck(this$static.array, this$static.size++, o);
32.12880 +  return true;
32.12881 +}
32.12882 +
32.12883 +function $get_0(this$static, index){
32.12884 +  checkIndex(index, this$static.size);
32.12885 +  return this$static.array[index];
32.12886 +}
32.12887 +
32.12888 +function $indexOf_0(this$static, o, index){
32.12889 +  for (; index < this$static.size; ++index) {
32.12890 +    if (equalsWithNullCheck(o, this$static.array[index])) {
32.12891 +      return index;
32.12892 +    }
32.12893 +  }
32.12894 +  return -1;
32.12895 +}
32.12896 +
32.12897 +function $remove_0(this$static, o){
32.12898 +  var i, previous;
32.12899 +  i = $indexOf_0(this$static, o, 0);
32.12900 +  if (i == -1) {
32.12901 +    return false;
32.12902 +  }
32.12903 +  previous = (checkIndex(i, this$static.size) , this$static.array[i]);
32.12904 +  this$static.array.splice(i, 1);
32.12905 +  --this$static.size;
32.12906 +  return true;
32.12907 +}
32.12908 +
32.12909 +function add_4(o){
32.12910 +  return setCheck(this.array, this.size++, o) , true;
32.12911 +}
32.12912 +
32.12913 +function add_3(index, o){
32.12914 +  if (index < 0 || index > this.size) {
32.12915 +    indexOutOfBounds(index, this.size);
32.12916 +  }
32.12917 +  this.array.splice(index, 0, o);
32.12918 +  ++this.size;
32.12919 +}
32.12920 +
32.12921 +function contains_1(o){
32.12922 +  return $indexOf_0(this, o, 0) != -1;
32.12923 +}
32.12924 +
32.12925 +function get_0(index){
32.12926 +  return checkIndex(index, this.size) , this.array[index];
32.12927 +}
32.12928 +
32.12929 +function getClass_34(){
32.12930 +  return Ljava_util_ArrayList_2_classLit;
32.12931 +}
32.12932 +
32.12933 +function size_1(){
32.12934 +  return this.size;
32.12935 +}
32.12936 +
32.12937 +function ArrayList(){
32.12938 +}
32.12939 +
32.12940 +_ = ArrayList.prototype = new AbstractList();
32.12941 +_.add_1 = add_4;
32.12942 +_.add_0 = add_3;
32.12943 +_.contains = contains_1;
32.12944 +_.get = get_0;
32.12945 +_.getClass$ = getClass_34;
32.12946 +_.size_0 = size_1;
32.12947 +_.typeId$ = 27;
32.12948 +_.array = null;
32.12949 +_.size = 0;
32.12950 +function binarySearch(sortedArray, key){
32.12951 +  var high, low, mid, midVal;
32.12952 +  low = 0;
32.12953 +  high = sortedArray.length - 1;
32.12954 +  while (low <= high) {
32.12955 +    mid = low + (high - low >> 1);
32.12956 +    midVal = sortedArray[mid];
32.12957 +    if (midVal < key) {
32.12958 +      low = mid + 1;
32.12959 +    }
32.12960 +     else if (midVal > key) {
32.12961 +      high = mid - 1;
32.12962 +    }
32.12963 +     else {
32.12964 +      return mid;
32.12965 +    }
32.12966 +  }
32.12967 +  return -low - 1;
32.12968 +}
32.12969 +
32.12970 +function binarySearch_0(sortedArray, key, comparator){
32.12971 +  var compareResult, high, low, mid, midVal;
32.12972 +  if (!comparator) {
32.12973 +    comparator = ($clinit_61() , NATURAL);
32.12974 +  }
32.12975 +  low = 0;
32.12976 +  high = sortedArray.length - 1;
32.12977 +  while (low <= high) {
32.12978 +    mid = low + (high - low >> 1);
32.12979 +    midVal = sortedArray[mid];
32.12980 +    compareResult = midVal.compareTo$(key);
32.12981 +    if (compareResult < 0) {
32.12982 +      low = mid + 1;
32.12983 +    }
32.12984 +     else if (compareResult > 0) {
32.12985 +      high = mid - 1;
32.12986 +    }
32.12987 +     else {
32.12988 +      return mid;
32.12989 +    }
32.12990 +  }
32.12991 +  return -low - 1;
32.12992 +}
32.12993 +
32.12994 +function $clinit_61(){
32.12995 +  $clinit_61 = nullMethod;
32.12996 +  NATURAL = new Comparators$1();
32.12997 +}
32.12998 +
32.12999 +var NATURAL;
32.13000 +function getClass_35(){
32.13001 +  return Ljava_util_Comparators$1_2_classLit;
32.13002 +}
32.13003 +
32.13004 +function Comparators$1(){
32.13005 +}
32.13006 +
32.13007 +_ = Comparators$1.prototype = new Object_0();
32.13008 +_.getClass$ = getClass_35;
32.13009 +_.typeId$ = 0;
32.13010 +function $HashMap(this$static){
32.13011 +  $clearImpl(this$static);
32.13012 +  return this$static;
32.13013 +}
32.13014 +
32.13015 +function $equals_1(value1, value2){
32.13016 +  return (value1 == null?null:value1) === (value2 == null?null:value2) || value1 != null && equals__devirtual$(value1, value2);
32.13017 +}
32.13018 +
32.13019 +function getClass_36(){
32.13020 +  return Ljava_util_HashMap_2_classLit;
32.13021 +}
32.13022 +
32.13023 +function HashMap(){
32.13024 +}
32.13025 +
32.13026 +_ = HashMap.prototype = new AbstractHashMap();
32.13027 +_.getClass$ = getClass_36;
32.13028 +_.typeId$ = 28;
32.13029 +function $LinkedList(this$static){
32.13030 +  this$static.header = $LinkedList$Node(new LinkedList$Node());
32.13031 +  this$static.size = 0;
32.13032 +  return this$static;
32.13033 +}
32.13034 +
32.13035 +function $addBefore(this$static, o, target){
32.13036 +  $LinkedList$Node_0(new LinkedList$Node(), o, target);
32.13037 +  ++this$static.size;
32.13038 +}
32.13039 +
32.13040 +function $addLast(this$static, o){
32.13041 +  $LinkedList$Node_0(new LinkedList$Node(), o, this$static.header);
32.13042 +  ++this$static.size;
32.13043 +}
32.13044 +
32.13045 +function $clear(this$static){
32.13046 +  this$static.header = $LinkedList$Node(new LinkedList$Node());
32.13047 +  this$static.size = 0;
32.13048 +}
32.13049 +
32.13050 +function $getLast(this$static){
32.13051 +  $throwEmptyException(this$static);
32.13052 +  return this$static.header.prev.value;
32.13053 +}
32.13054 +
32.13055 +function $listIterator(this$static, index){
32.13056 +  var i, node;
32.13057 +  if (index < 0 || index > this$static.size) {
32.13058 +    indexOutOfBounds(index, this$static.size);
32.13059 +  }
32.13060 +  if (index >= this$static.size >> 1) {
32.13061 +    node = this$static.header;
32.13062 +    for (i = this$static.size; i > index; --i) {
32.13063 +      node = node.prev;
32.13064 +    }
32.13065 +  }
32.13066 +   else {
32.13067 +    node = this$static.header.next;
32.13068 +    for (i = 0; i < index; ++i) {
32.13069 +      node = node.next;
32.13070 +    }
32.13071 +  }
32.13072 +  return $LinkedList$ListIteratorImpl(new LinkedList$ListIteratorImpl(), index, node, this$static);
32.13073 +}
32.13074 +
32.13075 +function $removeLast(this$static){
32.13076 +  var node;
32.13077 +  $throwEmptyException(this$static);
32.13078 +  --this$static.size;
32.13079 +  node = this$static.header.prev;
32.13080 +  node.next.prev = node.prev;
32.13081 +  node.prev.next = node.next;
32.13082 +  node.next = node.prev = node;
32.13083 +  return node.value;
32.13084 +}
32.13085 +
32.13086 +function $throwEmptyException(this$static){
32.13087 +  if (this$static.size == 0) {
32.13088 +    throw new NoSuchElementException();
32.13089 +  }
32.13090 +}
32.13091 +
32.13092 +function add_5(o){
32.13093 +  $LinkedList$Node_0(new LinkedList$Node(), o, this.header);
32.13094 +  ++this.size;
32.13095 +  return true;
32.13096 +}
32.13097 +
32.13098 +function getClass_39(){
32.13099 +  return Ljava_util_LinkedList_2_classLit;
32.13100 +}
32.13101 +
32.13102 +function size_2(){
32.13103 +  return this.size;
32.13104 +}
32.13105 +
32.13106 +function LinkedList(){
32.13107 +}
32.13108 +
32.13109 +_ = LinkedList.prototype = new AbstractSequentialList();
32.13110 +_.add_1 = add_5;
32.13111 +_.getClass$ = getClass_39;
32.13112 +_.size_0 = size_2;
32.13113 +_.typeId$ = 29;
32.13114 +_.header = null;
32.13115 +_.size = 0;
32.13116 +function $LinkedList$ListIteratorImpl(this$static, index, startNode, this$0){
32.13117 +  this$static.this$0 = this$0;
32.13118 +  this$static.currentNode = startNode;
32.13119 +  this$static.currentIndex = index;
32.13120 +  return this$static;
32.13121 +}
32.13122 +
32.13123 +function $next_0(this$static){
32.13124 +  if (this$static.currentNode == this$static.this$0.header) {
32.13125 +    throw new NoSuchElementException();
32.13126 +  }
32.13127 +  this$static.lastNode = this$static.currentNode;
32.13128 +  this$static.currentNode = this$static.currentNode.next;
32.13129 +  ++this$static.currentIndex;
32.13130 +  return this$static.lastNode.value;
32.13131 +}
32.13132 +
32.13133 +function getClass_37(){
32.13134 +  return Ljava_util_LinkedList$ListIteratorImpl_2_classLit;
32.13135 +}
32.13136 +
32.13137 +function hasNext_1(){
32.13138 +  return this.currentNode != this.this$0.header;
32.13139 +}
32.13140 +
32.13141 +function next_2(){
32.13142 +  return $next_0(this);
32.13143 +}
32.13144 +
32.13145 +function LinkedList$ListIteratorImpl(){
32.13146 +}
32.13147 +
32.13148 +_ = LinkedList$ListIteratorImpl.prototype = new Object_0();
32.13149 +_.getClass$ = getClass_37;
32.13150 +_.hasNext = hasNext_1;
32.13151 +_.next_0 = next_2;
32.13152 +_.typeId$ = 0;
32.13153 +_.currentIndex = 0;
32.13154 +_.currentNode = null;
32.13155 +_.lastNode = null;
32.13156 +_.this$0 = null;
32.13157 +function $LinkedList$Node(this$static){
32.13158 +  this$static.next = this$static.prev = this$static;
32.13159 +  return this$static;
32.13160 +}
32.13161 +
32.13162 +function $LinkedList$Node_0(this$static, value, nextNode){
32.13163 +  this$static.value = value;
32.13164 +  this$static.next = nextNode;
32.13165 +  this$static.prev = nextNode.prev;
32.13166 +  nextNode.prev.next = this$static;
32.13167 +  nextNode.prev = this$static;
32.13168 +  return this$static;
32.13169 +}
32.13170 +
32.13171 +function getClass_38(){
32.13172 +  return Ljava_util_LinkedList$Node_2_classLit;
32.13173 +}
32.13174 +
32.13175 +function LinkedList$Node(){
32.13176 +}
32.13177 +
32.13178 +_ = LinkedList$Node.prototype = new Object_0();
32.13179 +_.getClass$ = getClass_38;
32.13180 +_.typeId$ = 0;
32.13181 +_.next = null;
32.13182 +_.prev = null;
32.13183 +_.value = null;
32.13184 +function getClass_40(){
32.13185 +  return Ljava_util_NoSuchElementException_2_classLit;
32.13186 +}
32.13187 +
32.13188 +function NoSuchElementException(){
32.13189 +}
32.13190 +
32.13191 +_ = NoSuchElementException.prototype = new RuntimeException();
32.13192 +_.getClass$ = getClass_40;
32.13193 +_.typeId$ = 30;
32.13194 +function equalsWithNullCheck(a, b){
32.13195 +  return (a == null?null:a) === (b == null?null:b) || a != null && equals__devirtual$(a, b);
32.13196 +}
32.13197 +
32.13198 +function $clinit_77(){
32.13199 +  $clinit_77 = nullMethod;
32.13200 +  HTML = $DoctypeExpectation(new DoctypeExpectation(), 'HTML', 0);
32.13201 +  $DoctypeExpectation(new DoctypeExpectation(), 'HTML401_TRANSITIONAL', 1);
32.13202 +  $DoctypeExpectation(new DoctypeExpectation(), 'HTML401_STRICT', 2);
32.13203 +  $DoctypeExpectation(new DoctypeExpectation(), 'AUTO', 3);
32.13204 +  $DoctypeExpectation(new DoctypeExpectation(), 'NO_DOCTYPE_ERRORS', 4);
32.13205 +}
32.13206 +
32.13207 +function $DoctypeExpectation(this$static, enum$name, enum$ordinal){
32.13208 +  $clinit_77();
32.13209 +  this$static.name_0 = enum$name;
32.13210 +  this$static.ordinal = enum$ordinal;
32.13211 +  return this$static;
32.13212 +}
32.13213 +
32.13214 +function getClass_41(){
32.13215 +  return Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit;
32.13216 +}
32.13217 +
32.13218 +function DoctypeExpectation(){
32.13219 +}
32.13220 +
32.13221 +_ = DoctypeExpectation.prototype = new Enum();
32.13222 +_.getClass$ = getClass_41;
32.13223 +_.typeId$ = 31;
32.13224 +var HTML;
32.13225 +function $clinit_78(){
32.13226 +  $clinit_78 = nullMethod;
32.13227 +  STANDARDS_MODE = $DocumentMode(new DocumentMode(), 'STANDARDS_MODE', 0);
32.13228 +  ALMOST_STANDARDS_MODE = $DocumentMode(new DocumentMode(), 'ALMOST_STANDARDS_MODE', 1);
32.13229 +  QUIRKS_MODE = $DocumentMode(new DocumentMode(), 'QUIRKS_MODE', 2);
32.13230 +}
32.13231 +
32.13232 +function $DocumentMode(this$static, enum$name, enum$ordinal){
32.13233 +  $clinit_78();
32.13234 +  this$static.name_0 = enum$name;
32.13235 +  this$static.ordinal = enum$ordinal;
32.13236 +  return this$static;
32.13237 +}
32.13238 +
32.13239 +function getClass_42(){
32.13240 +  return Lnu_validator_htmlparser_common_DocumentMode_2_classLit;
32.13241 +}
32.13242 +
32.13243 +function DocumentMode(){
32.13244 +}
32.13245 +
32.13246 +_ = DocumentMode.prototype = new Enum();
32.13247 +_.getClass$ = getClass_42;
32.13248 +_.typeId$ = 32;
32.13249 +var ALMOST_STANDARDS_MODE, QUIRKS_MODE, STANDARDS_MODE;
32.13250 +function $clinit_80(){
32.13251 +  $clinit_80 = nullMethod;
32.13252 +  ALLOW = $XmlViolationPolicy(new XmlViolationPolicy(), 'ALLOW', 0);
32.13253 +  FATAL = $XmlViolationPolicy(new XmlViolationPolicy(), 'FATAL', 1);
32.13254 +  ALTER_INFOSET = $XmlViolationPolicy(new XmlViolationPolicy(), 'ALTER_INFOSET', 2);
32.13255 +}
32.13256 +
32.13257 +function $XmlViolationPolicy(this$static, enum$name, enum$ordinal){
32.13258 +  $clinit_80();
32.13259 +  this$static.name_0 = enum$name;
32.13260 +  this$static.ordinal = enum$ordinal;
32.13261 +  return this$static;
32.13262 +}
32.13263 +
32.13264 +function getClass_43(){
32.13265 +  return Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit;
32.13266 +}
32.13267 +
32.13268 +function XmlViolationPolicy(){
32.13269 +}
32.13270 +
32.13271 +_ = XmlViolationPolicy.prototype = new Enum();
32.13272 +_.getClass$ = getClass_43;
32.13273 +_.typeId$ = 33;
32.13274 +var ALLOW, ALTER_INFOSET, FATAL;
32.13275 +function $clinit_98(){
32.13276 +  $clinit_98 = nullMethod;
32.13277 +  ISINDEX_PROMPT = $toCharArray('This is a searchable index. Insert your search keywords here: ');
32.13278 +  HTML4_PUBLIC_IDS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['-//W3C//DTD HTML 4.0 Frameset//EN', '-//W3C//DTD HTML 4.0 Transitional//EN', '-//W3C//DTD HTML 4.0//EN', '-//W3C//DTD HTML 4.01 Frameset//EN', '-//W3C//DTD HTML 4.01 Transitional//EN', '-//W3C//DTD HTML 4.01//EN']);
32.13279 +  QUIRKY_PUBLIC_IDS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['+//silmaril//dtd html pro v0r11 19970101//', '-//advasoft ltd//dtd html 3.0 aswedit + extensions//', '-//as//dtd html 3.0 aswedit + extensions//', '-//ietf//dtd html 2.0 level 1//', '-//ietf//dtd html 2.0 level 2//', '-//ietf//dtd html 2.0 strict level 1//', '-//ietf//dtd html 2.0 strict level 2//', '-//ietf//dtd html 2.0 strict//', '-//ietf//dtd html 2.0//', '-//ietf//dtd html 2.1e//', '-//ietf//dtd html 3.0//', '-//ietf//dtd html 3.2 final//', '-//ietf//dtd html 3.2//', '-//ietf//dtd html 3//', '-//ietf//dtd html level 0//', '-//ietf//dtd html level 1//', '-//ietf//dtd html level 2//', '-//ietf//dtd html level 3//', '-//ietf//dtd html strict level 0//', '-//ietf//dtd html strict level 1//', '-//ietf//dtd html strict level 2//', '-//ietf//dtd html strict level 3//', '-//ietf//dtd html strict//', '-//ietf//dtd html//', '-//metrius//dtd metrius presentational//', '-//microsoft//dtd internet explorer 2.0 html strict//', '-//microsoft//dtd internet explorer 2.0 html//', '-//microsoft//dtd internet explorer 2.0 tables//', '-//microsoft//dtd internet explorer 3.0 html strict//', '-//microsoft//dtd internet explorer 3.0 html//', '-//microsoft//dtd internet explorer 3.0 tables//', '-//netscape comm. corp.//dtd html//', '-//netscape comm. corp.//dtd strict html//', "-//o'reilly and associates//dtd html 2.0//", "-//o'reilly and associates//dtd html extended 1.0//", "-//o'reilly and associates//dtd html extended relaxed 1.0//", '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//', '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//', '-//spyglass//dtd html 2.0 extended//', '-//sq//dtd html 2.0 hotmetal + extensions//', '-//sun microsystems corp.//dtd hotjava html//', '-//sun microsystems corp.//dtd hotjava strict html//', '-//w3c//dtd html 3 1995-03-24//', '-//w3c//dtd html 3.2 draft//', '-//w3c//dtd html 3.2 final//', '-//w3c//dtd html 3.2//', '-//w3c//dtd html 3.2s draft//', '-//w3c//dtd html 4.0 frameset//', '-//w3c//dtd html 4.0 transitional//', '-//w3c//dtd html experimental 19960712//', '-//w3c//dtd html experimental 970421//', '-//w3c//dtd w3 html//', '-//w3o//dtd w3 html 3.0//', '-//webtechs//dtd mozilla html 2.0//', '-//webtechs//dtd mozilla html//']);
32.13280 +}
32.13281 +
32.13282 +function $accumulateCharacter(this$static, c){
32.13283 +  var newBuf, newLen;
32.13284 +  newLen = this$static.charBufferLen + 1;
32.13285 +  if (newLen > this$static.charBuffer.length) {
32.13286 +    newBuf = initDim(_3C_classLit, 42, -1, newLen, 1);
32.13287 +    arraycopy(this$static.charBuffer, 0, newBuf, 0, this$static.charBufferLen);
32.13288 +    this$static.charBuffer = newBuf;
32.13289 +  }
32.13290 +  this$static.charBuffer[this$static.charBufferLen] = c;
32.13291 +  this$static.charBufferLen = newLen;
32.13292 +}
32.13293 +
32.13294 +function $addAttributesToBody(this$static, attributes){
32.13295 +  var body;
32.13296 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13297 +  if (this$static.currentPtr >= 1) {
32.13298 +    body = this$static.stack[1];
32.13299 +    if (body.group == 3) {
32.13300 +      $addAttributesToElement(this$static, body.node, attributes);
32.13301 +    }
32.13302 +  }
32.13303 +}
32.13304 +
32.13305 +function $adoptionAgencyEndTag(this$static, name){
32.13306 +  var bookmark, clone, commonAncestor, formattingClone, formattingElt, formattingEltListPos, formattingEltStackPos, furthestBlock, furthestBlockPos, inScope, lastNode, listNode, newNode, node, nodeListPos, nodePos;
32.13307 +  $flushCharacters(this$static);
32.13308 +  for (;;) {
32.13309 +    formattingEltListPos = this$static.listPtr;
32.13310 +    while (formattingEltListPos > -1) {
32.13311 +      listNode = this$static.listOfActiveFormattingElements[formattingEltListPos];
32.13312 +      if (!listNode) {
32.13313 +        formattingEltListPos = -1;
32.13314 +        break;
32.13315 +      }
32.13316 +       else if (listNode.name_0 == name) {
32.13317 +        break;
32.13318 +      }
32.13319 +      --formattingEltListPos;
32.13320 +    }
32.13321 +    if (formattingEltListPos == -1) {
32.13322 +      return;
32.13323 +    }
32.13324 +    formattingElt = this$static.listOfActiveFormattingElements[formattingEltListPos];
32.13325 +    formattingEltStackPos = this$static.currentPtr;
32.13326 +    inScope = true;
32.13327 +    while (formattingEltStackPos > -1) {
32.13328 +      node = this$static.stack[formattingEltStackPos];
32.13329 +      if (node == formattingElt) {
32.13330 +        break;
32.13331 +      }
32.13332 +       else if (node.scoping) {
32.13333 +        inScope = false;
32.13334 +      }
32.13335 +      --formattingEltStackPos;
32.13336 +    }
32.13337 +    if (formattingEltStackPos == -1) {
32.13338 +      $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
32.13339 +      return;
32.13340 +    }
32.13341 +    if (!inScope) {
32.13342 +      return;
32.13343 +    }
32.13344 +    furthestBlockPos = formattingEltStackPos + 1;
32.13345 +    while (furthestBlockPos <= this$static.currentPtr) {
32.13346 +      node = this$static.stack[furthestBlockPos];
32.13347 +      if (node.scoping || node.special) {
32.13348 +        break;
32.13349 +      }
32.13350 +      ++furthestBlockPos;
32.13351 +    }
32.13352 +    if (furthestBlockPos > this$static.currentPtr) {
32.13353 +      while (this$static.currentPtr >= formattingEltStackPos) {
32.13354 +        $pop(this$static);
32.13355 +      }
32.13356 +      $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
32.13357 +      return;
32.13358 +    }
32.13359 +    commonAncestor = this$static.stack[formattingEltStackPos - 1];
32.13360 +    furthestBlock = this$static.stack[furthestBlockPos];
32.13361 +    bookmark = formattingEltListPos;
32.13362 +    nodePos = furthestBlockPos;
32.13363 +    lastNode = furthestBlock;
32.13364 +    for (;;) {
32.13365 +      --nodePos;
32.13366 +      node = this$static.stack[nodePos];
32.13367 +      nodeListPos = $findInListOfActiveFormattingElements(this$static, node);
32.13368 +      if (nodeListPos == -1) {
32.13369 +        $removeFromStack(this$static, nodePos);
32.13370 +        --furthestBlockPos;
32.13371 +        continue;
32.13372 +      }
32.13373 +      if (nodePos == formattingEltStackPos) {
32.13374 +        break;
32.13375 +      }
32.13376 +      if (nodePos == furthestBlockPos) {
32.13377 +        bookmark = nodeListPos + 1;
32.13378 +      }
32.13379 +      clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', node.name_0, $cloneAttributes(node.attributes));
32.13380 +      newNode = $StackNode(new StackNode(), node.group, node.ns, node.name_0, clone, node.scoping, node.special, node.fosterParenting, node.popName, node.attributes);
32.13381 +      node.attributes = null;
32.13382 +      this$static.stack[nodePos] = newNode;
32.13383 +      ++newNode.refcount;
32.13384 +      this$static.listOfActiveFormattingElements[nodeListPos] = newNode;
32.13385 +      --node.refcount;
32.13386 +      --node.refcount;
32.13387 +      node = newNode;
32.13388 +      $detachFromParent(this$static, lastNode.node);
32.13389 +      $appendElement(this$static, lastNode.node, node.node);
32.13390 +      lastNode = node;
32.13391 +    }
32.13392 +    if (commonAncestor.fosterParenting) {
32.13393 +      $detachFromParent(this$static, lastNode.node);
32.13394 +      $insertIntoFosterParent(this$static, lastNode.node);
32.13395 +    }
32.13396 +     else {
32.13397 +      $detachFromParent(this$static, lastNode.node);
32.13398 +      $appendElement(this$static, lastNode.node, commonAncestor.node);
32.13399 +    }
32.13400 +    clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', formattingElt.name_0, $cloneAttributes(formattingElt.attributes));
32.13401 +    formattingClone = $StackNode(new StackNode(), formattingElt.group, formattingElt.ns, formattingElt.name_0, clone, formattingElt.scoping, formattingElt.special, formattingElt.fosterParenting, formattingElt.popName, formattingElt.attributes);
32.13402 +    formattingElt.attributes = null;
32.13403 +    $appendChildrenToNewParent(this$static, furthestBlock.node, clone);
32.13404 +    $appendElement(this$static, clone, furthestBlock.node);
32.13405 +    $removeFromListOfActiveFormattingElements(this$static, formattingEltListPos);
32.13406 +    $insertIntoListOfActiveFormattingElements(this$static, formattingClone, bookmark);
32.13407 +    $removeFromStack(this$static, formattingEltStackPos);
32.13408 +    $insertIntoStack(this$static, formattingClone, furthestBlockPos);
32.13409 +  }
32.13410 +}
32.13411 +
32.13412 +function $append_1(this$static, node){
32.13413 +  var newList;
32.13414 +  ++this$static.listPtr;
32.13415 +  if (this$static.listPtr == this$static.listOfActiveFormattingElements.length) {
32.13416 +    newList = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 51, 11, this$static.listOfActiveFormattingElements.length + 64, 0);
32.13417 +    arraycopy(this$static.listOfActiveFormattingElements, 0, newList, 0, this$static.listOfActiveFormattingElements.length);
32.13418 +    this$static.listOfActiveFormattingElements = newList;
32.13419 +  }
32.13420 +  this$static.listOfActiveFormattingElements[this$static.listPtr] = node;
32.13421 +}
32.13422 +
32.13423 +function $appendHtmlElementToDocumentAndPush(this$static, attributes){
32.13424 +  var elt, node;
32.13425 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13426 +  elt = $createHtmlElementSetAsRoot(this$static, attributes);
32.13427 +  node = $StackNode_0(new StackNode(), 'http://www.w3.org/1999/xhtml', ($clinit_89() , HTML_0), elt);
32.13428 +  $push_0(this$static, node);
32.13429 +}
32.13430 +
32.13431 +function $appendToCurrentNodeAndPushElement(this$static, ns, elementName, attributes){
32.13432 +  var elt, node;
32.13433 +  $flushCharacters(this$static);
32.13434 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13435 +  elt = $createElement(this$static, ns, elementName.name_0, attributes);
32.13436 +  $appendElement(this$static, elt, this$static.stack[this$static.currentPtr].node);
32.13437 +  node = $StackNode_0(new StackNode(), ns, elementName, elt);
32.13438 +  $push_0(this$static, node);
32.13439 +}
32.13440 +
32.13441 +function $appendToCurrentNodeAndPushElementMayFoster(this$static, ns, elementName, attributes){
32.13442 +  var current, elt, node, popName;
32.13443 +  $flushCharacters(this$static);
32.13444 +  popName = elementName.name_0;
32.13445 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13446 +  if (elementName.custom) {
32.13447 +    popName = $checkPopName(this$static, popName);
32.13448 +  }
32.13449 +  elt = $createElement(this$static, ns, popName, attributes);
32.13450 +  current = this$static.stack[this$static.currentPtr];
32.13451 +  if (current.fosterParenting) {
32.13452 +    $insertIntoFosterParent(this$static, elt);
32.13453 +  }
32.13454 +   else {
32.13455 +    $appendElement(this$static, elt, current.node);
32.13456 +  }
32.13457 +  node = $StackNode_1(new StackNode(), ns, elementName, elt, popName);
32.13458 +  $push_0(this$static, node);
32.13459 +}
32.13460 +
32.13461 +function $appendToCurrentNodeAndPushElementMayFoster_0(this$static, ns, elementName, attributes){
32.13462 +  var current, elt, node;
32.13463 +  $flushCharacters(this$static);
32.13464 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13465 +  elt = $createElement_0(this$static, ns, elementName.name_0, attributes);
32.13466 +  current = this$static.stack[this$static.currentPtr];
32.13467 +  if (current.fosterParenting) {
32.13468 +    $insertIntoFosterParent(this$static, elt);
32.13469 +  }
32.13470 +   else {
32.13471 +    $appendElement(this$static, elt, current.node);
32.13472 +  }
32.13473 +  node = $StackNode_0(new StackNode(), ns, elementName, elt);
32.13474 +  $push_0(this$static, node);
32.13475 +}
32.13476 +
32.13477 +function $appendToCurrentNodeAndPushElementMayFosterCamelCase(this$static, ns, elementName, attributes){
32.13478 +  var current, elt, node, popName;
32.13479 +  $flushCharacters(this$static);
32.13480 +  popName = elementName.camelCaseName;
32.13481 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13482 +  if (elementName.custom) {
32.13483 +    popName = $checkPopName(this$static, popName);
32.13484 +  }
32.13485 +  elt = $createElement(this$static, ns, popName, attributes);
32.13486 +  current = this$static.stack[this$static.currentPtr];
32.13487 +  if (current.fosterParenting) {
32.13488 +    $insertIntoFosterParent(this$static, elt);
32.13489 +  }
32.13490 +   else {
32.13491 +    $appendElement(this$static, elt, current.node);
32.13492 +  }
32.13493 +  node = $StackNode_2(new StackNode(), ns, elementName, elt, popName, ($clinit_89() , FOREIGNOBJECT) == elementName);
32.13494 +  $push_0(this$static, node);
32.13495 +}
32.13496 +
32.13497 +function $appendToCurrentNodeAndPushElementMayFosterNoScoping(this$static, ns, elementName, attributes){
32.13498 +  var current, elt, node, popName;
32.13499 +  $flushCharacters(this$static);
32.13500 +  popName = elementName.name_0;
32.13501 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13502 +  if (elementName.custom) {
32.13503 +    popName = $checkPopName(this$static, popName);
32.13504 +  }
32.13505 +  elt = $createElement(this$static, ns, popName, attributes);
32.13506 +  current = this$static.stack[this$static.currentPtr];
32.13507 +  if (current.fosterParenting) {
32.13508 +    $insertIntoFosterParent(this$static, elt);
32.13509 +  }
32.13510 +   else {
32.13511 +    $appendElement(this$static, elt, current.node);
32.13512 +  }
32.13513 +  node = $StackNode_2(new StackNode(), ns, elementName, elt, popName, false);
32.13514 +  $push_0(this$static, node);
32.13515 +}
32.13516 +
32.13517 +function $appendToCurrentNodeAndPushFormElementMayFoster(this$static, attributes){
32.13518 +  var current, elt, node;
32.13519 +  $flushCharacters(this$static);
32.13520 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13521 +  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', 'form', attributes);
32.13522 +  this$static.formPointer = elt;
32.13523 +  current = this$static.stack[this$static.currentPtr];
32.13524 +  if (current.fosterParenting) {
32.13525 +    $insertIntoFosterParent(this$static, elt);
32.13526 +  }
32.13527 +   else {
32.13528 +    $appendElement(this$static, elt, current.node);
32.13529 +  }
32.13530 +  node = $StackNode_0(new StackNode(), 'http://www.w3.org/1999/xhtml', ($clinit_89() , FORM_0), elt);
32.13531 +  $push_0(this$static, node);
32.13532 +}
32.13533 +
32.13534 +function $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, ns, elementName, attributes){
32.13535 +  var current, elt, node;
32.13536 +  $flushCharacters(this$static);
32.13537 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13538 +  elt = $createElement(this$static, ns, elementName.name_0, attributes);
32.13539 +  current = this$static.stack[this$static.currentPtr];
32.13540 +  if (current.fosterParenting) {
32.13541 +    $insertIntoFosterParent(this$static, elt);
32.13542 +  }
32.13543 +   else {
32.13544 +    $appendElement(this$static, elt, current.node);
32.13545 +  }
32.13546 +  node = $StackNode_3(new StackNode(), ns, elementName, elt, $cloneAttributes(attributes));
32.13547 +  $push_0(this$static, node);
32.13548 +  $append_1(this$static, node);
32.13549 +  ++node.refcount;
32.13550 +}
32.13551 +
32.13552 +function $appendToCurrentNodeAndPushHeadElement(this$static, attributes){
32.13553 +  var elt, node;
32.13554 +  $flushCharacters(this$static);
32.13555 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13556 +  elt = $createElement(this$static, 'http://www.w3.org/1999/xhtml', 'head', attributes);
32.13557 +  $appendElement(this$static, elt, this$static.stack[this$static.currentPtr].node);
32.13558 +  this$static.headPointer = elt;
32.13559 +  node = $StackNode_0(new StackNode(), 'http://www.w3.org/1999/xhtml', ($clinit_89() , HEAD), elt);
32.13560 +  $push_0(this$static, node);
32.13561 +}
32.13562 +
32.13563 +function $appendVoidElementToCurrentMayFoster(this$static, ns, name, attributes){
32.13564 +  var current, elt;
32.13565 +  $flushCharacters(this$static);
32.13566 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13567 +  elt = $createElement_0(this$static, ns, name, attributes);
32.13568 +  current = this$static.stack[this$static.currentPtr];
32.13569 +  if (current.fosterParenting) {
32.13570 +    $insertIntoFosterParent(this$static, elt);
32.13571 +  }
32.13572 +   else {
32.13573 +    $appendElement(this$static, elt, current.node);
32.13574 +  }
32.13575 +  $elementPopped(this$static, ns, name, elt);
32.13576 +}
32.13577 +
32.13578 +function $appendVoidElementToCurrentMayFoster_0(this$static, ns, elementName, attributes){
32.13579 +  var current, elt, popName;
32.13580 +  $flushCharacters(this$static);
32.13581 +  popName = elementName.name_0;
32.13582 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13583 +  if (elementName.custom) {
32.13584 +    popName = $checkPopName(this$static, popName);
32.13585 +  }
32.13586 +  elt = $createElement(this$static, ns, popName, attributes);
32.13587 +  current = this$static.stack[this$static.currentPtr];
32.13588 +  if (current.fosterParenting) {
32.13589 +    $insertIntoFosterParent(this$static, elt);
32.13590 +  }
32.13591 +   else {
32.13592 +    $appendElement(this$static, elt, current.node);
32.13593 +  }
32.13594 +  $elementPopped(this$static, ns, popName, elt);
32.13595 +}
32.13596 +
32.13597 +function $appendVoidElementToCurrentMayFosterCamelCase(this$static, ns, elementName, attributes){
32.13598 +  var current, elt, popName;
32.13599 +  $flushCharacters(this$static);
32.13600 +  popName = elementName.camelCaseName;
32.13601 +  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.13602 +  if (elementName.custom) {
32.13603 +    popName = $checkPopName(this$static, popName);
32.13604 +  }
32.13605 +  elt = $createElement(this$static, ns, popName, attributes);
32.13606 +  current = this$static.stack[this$static.currentPtr];
32.13607 +  if (current.fosterParenting) {
32.13608 +    $insertIntoFosterParent(this$static, elt);
32.13609 +  }
32.13610 +   else {
32.13611 +    $appendElement(this$static, elt, current.node);
32.13612 +  }
32.13613 +  $elementPopped(this$static, ns, popName, elt);
32.13614 +}
32.13615 +
32.13616 +function $charBufferContainsNonWhitespace(this$static){
32.13617 +  var i;
32.13618 +  for (i = 0; i < this$static.charBufferLen; ++i) {
32.13619 +    switch (this$static.charBuffer[i]) {
32.13620 +      case 32:
32.13621 +      case 9:
32.13622 +      case 10:
32.13623 +      case 12:
32.13624 +        continue;
32.13625 +      default:return true;
32.13626 +    }
32.13627 +  }
32.13628 +  return false;
32.13629 +}
32.13630 +
32.13631 +function $characters(this$static, buf, start, length){
32.13632 +  var end, i;
32.13633 +  if (this$static.needToDropLF) {
32.13634 +    if (buf[start] == 10) {
32.13635 +      ++start;
32.13636 +      --length;
32.13637 +      if (length == 0) {
32.13638 +        return;
32.13639 +      }
32.13640 +    }
32.13641 +    this$static.needToDropLF = false;
32.13642 +  }
32.13643 +  switch (this$static.mode) {
32.13644 +    case 6:
32.13645 +    case 12:
32.13646 +    case 8:
32.13647 +      $reconstructTheActiveFormattingElements(this$static);
32.13648 +    case 20:
32.13649 +      $accumulateCharacters(this$static, buf, start, length);
32.13650 +      return;
32.13651 +    default:end = start + length;
32.13652 +      charactersloop: for (i = start; i < end; ++i) {
32.13653 +        switch (buf[i]) {
32.13654 +          case 32:
32.13655 +          case 9:
32.13656 +          case 10:
32.13657 +          case 12:
32.13658 +            switch (this$static.mode) {
32.13659 +              case 0:
32.13660 +              case 1:
32.13661 +              case 2:
32.13662 +                start = i + 1;
32.13663 +                continue;
32.13664 +              case 21:
32.13665 +              case 3:
32.13666 +              case 4:
32.13667 +              case 5:
32.13668 +              case 9:
32.13669 +              case 16:
32.13670 +              case 17:
32.13671 +                continue;
32.13672 +              case 6:
32.13673 +              case 12:
32.13674 +              case 8:
32.13675 +                if (start < i) {
32.13676 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13677 +                  start = i;
32.13678 +                }
32.13679 +
32.13680 +                $reconstructTheActiveFormattingElements(this$static);
32.13681 +                break charactersloop;
32.13682 +              case 7:
32.13683 +              case 10:
32.13684 +              case 11:
32.13685 +                $reconstructTheActiveFormattingElements(this$static);
32.13686 +                $accumulateCharacter(this$static, buf[i]);
32.13687 +                start = i + 1;
32.13688 +                continue;
32.13689 +              case 15:
32.13690 +                if (start < i) {
32.13691 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13692 +                  start = i;
32.13693 +                }
32.13694 +
32.13695 +                $reconstructTheActiveFormattingElements(this$static);
32.13696 +                continue;
32.13697 +              case 18:
32.13698 +              case 19:
32.13699 +                if (start < i) {
32.13700 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13701 +                  start = i;
32.13702 +                }
32.13703 +
32.13704 +                $reconstructTheActiveFormattingElements(this$static);
32.13705 +                continue;
32.13706 +            }
32.13707 +
32.13708 +          default:switch (this$static.mode) {
32.13709 +              case 0:
32.13710 +                $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.13711 +                this$static.mode = 1;
32.13712 +                --i;
32.13713 +                continue;
32.13714 +              case 1:
32.13715 +                $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
32.13716 +                this$static.mode = 2;
32.13717 +                --i;
32.13718 +                continue;
32.13719 +              case 2:
32.13720 +                if (start < i) {
32.13721 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13722 +                  start = i;
32.13723 +                }
32.13724 +
32.13725 +                $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_91() , EMPTY_ATTRIBUTES));
32.13726 +                this$static.mode = 3;
32.13727 +                --i;
32.13728 +                continue;
32.13729 +              case 3:
32.13730 +                if (start < i) {
32.13731 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13732 +                  start = i;
32.13733 +                }
32.13734 +
32.13735 +                $pop(this$static);
32.13736 +                this$static.mode = 5;
32.13737 +                --i;
32.13738 +                continue;
32.13739 +              case 4:
32.13740 +                if (start < i) {
32.13741 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13742 +                  start = i;
32.13743 +                }
32.13744 +
32.13745 +                $pop(this$static);
32.13746 +                this$static.mode = 3;
32.13747 +                --i;
32.13748 +                continue;
32.13749 +              case 5:
32.13750 +                if (start < i) {
32.13751 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13752 +                  start = i;
32.13753 +                }
32.13754 +
32.13755 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), $emptyAttributes(this$static.tokenizer));
32.13756 +                this$static.mode = 21;
32.13757 +                --i;
32.13758 +                continue;
32.13759 +              case 21:
32.13760 +                this$static.mode = 6;
32.13761 +                --i;
32.13762 +                continue;
32.13763 +              case 6:
32.13764 +              case 12:
32.13765 +              case 8:
32.13766 +                if (start < i) {
32.13767 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13768 +                  start = i;
32.13769 +                }
32.13770 +
32.13771 +                $reconstructTheActiveFormattingElements(this$static);
32.13772 +                break charactersloop;
32.13773 +              case 7:
32.13774 +              case 10:
32.13775 +              case 11:
32.13776 +                $reconstructTheActiveFormattingElements(this$static);
32.13777 +                $accumulateCharacter(this$static, buf[i]);
32.13778 +                start = i + 1;
32.13779 +                continue;
32.13780 +              case 9:
32.13781 +                if (start < i) {
32.13782 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13783 +                  start = i;
32.13784 +                }
32.13785 +
32.13786 +                if (this$static.currentPtr == 0) {
32.13787 +                  start = i + 1;
32.13788 +                  continue;
32.13789 +                }
32.13790 +
32.13791 +                $pop(this$static);
32.13792 +                this$static.mode = 7;
32.13793 +                --i;
32.13794 +                continue;
32.13795 +                break charactersloop;
32.13796 +              case 15:
32.13797 +                this$static.mode = 6;
32.13798 +                --i;
32.13799 +                continue;
32.13800 +              case 16:
32.13801 +                if (start < i) {
32.13802 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13803 +                  start = i;
32.13804 +                }
32.13805 +
32.13806 +                start = i + 1;
32.13807 +                continue;
32.13808 +              case 17:
32.13809 +                if (start < i) {
32.13810 +                  $accumulateCharacters(this$static, buf, start, i - start);
32.13811 +                  start = i;
32.13812 +                }
32.13813 +
32.13814 +                start = i + 1;
32.13815 +                continue;
32.13816 +              case 18:
32.13817 +                this$static.mode = 6;
32.13818 +                --i;
32.13819 +                continue;
32.13820 +              case 19:
32.13821 +                this$static.mode = 16;
32.13822 +                --i;
32.13823 +                continue;
32.13824 +            }
32.13825 +
32.13826 +        }
32.13827 +      }
32.13828 +
32.13829 +      if (start < end) {
32.13830 +        $accumulateCharacters(this$static, buf, start, end - start);
32.13831 +      }
32.13832 +
32.13833 +  }
32.13834 +}
32.13835 +
32.13836 +function $checkMetaCharset(this$static, attributes){
32.13837 +  var content, internalCharsetHtml5, internalCharsetLegacy;
32.13838 +  content = $getValue_0(attributes, ($clinit_87() , CONTENT));
32.13839 +  internalCharsetLegacy = null;
32.13840 +  if (content != null) {
32.13841 +    internalCharsetLegacy = extractCharsetFromContent(content);
32.13842 +  }
32.13843 +  if (internalCharsetLegacy == null) {
32.13844 +    internalCharsetHtml5 = $getValue_0(attributes, CHARSET);
32.13845 +    if (internalCharsetHtml5 != null) {
32.13846 +      this$static.tokenizer.shouldSuspend = true;
32.13847 +    }
32.13848 +  }
32.13849 +   else {
32.13850 +    this$static.tokenizer.shouldSuspend = true;
32.13851 +  }
32.13852 +}
32.13853 +
32.13854 +function $checkPopName(this$static, name){
32.13855 +  if (isNCName(name)) {
32.13856 +    return name;
32.13857 +  }
32.13858 +   else {
32.13859 +    switch (this$static.namePolicy.ordinal) {
32.13860 +      case 0:
32.13861 +        return name;
32.13862 +      case 2:
32.13863 +        return escapeName(name);
32.13864 +      case 1:
32.13865 +        $fatal_1(this$static, 'Element name \u201C' + name + '\u201D cannot be represented as XML 1.0.');
32.13866 +    }
32.13867 +  }
32.13868 +  return null;
32.13869 +}
32.13870 +
32.13871 +function $clearStackBackTo(this$static, eltPos){
32.13872 +  while (this$static.currentPtr > eltPos) {
32.13873 +    $pop(this$static);
32.13874 +  }
32.13875 +}
32.13876 +
32.13877 +function $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static){
32.13878 +  while (this$static.listPtr > -1) {
32.13879 +    if (!this$static.listOfActiveFormattingElements[this$static.listPtr]) {
32.13880 +      --this$static.listPtr;
32.13881 +      return;
32.13882 +    }
32.13883 +    --this$static.listOfActiveFormattingElements[this$static.listPtr].refcount;
32.13884 +    --this$static.listPtr;
32.13885 +  }
32.13886 +}
32.13887 +
32.13888 +function $closeTheCell(this$static, eltPos){
32.13889 +  $generateImpliedEndTags(this$static);
32.13890 +  while (this$static.currentPtr >= eltPos) {
32.13891 +    $pop(this$static);
32.13892 +  }
32.13893 +  $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.13894 +  this$static.mode = 11;
32.13895 +  return;
32.13896 +}
32.13897 +
32.13898 +function $comment(this$static, buf, start, length){
32.13899 +  var end, end_0, end_1;
32.13900 +  this$static.needToDropLF = false;
32.13901 +  if (!this$static.wantingComments) {
32.13902 +    return;
32.13903 +  }
32.13904 +  commentloop: for (;;) {
32.13905 +    switch (this$static.foreignFlag) {
32.13906 +      case 0:
32.13907 +        break commentloop;
32.13908 +      default:switch (this$static.mode) {
32.13909 +          case 0:
32.13910 +          case 1:
32.13911 +          case 18:
32.13912 +          case 19:
32.13913 +            $appendCommentToDocument(this$static, (end = start + length , __checkBounds(buf.length, start, end) , __valueOf(buf, start, end)));
32.13914 +            return;
32.13915 +          case 15:
32.13916 +            $flushCharacters(this$static);
32.13917 +            $appendComment(this$static, this$static.stack[0].node, (end_0 = start + length , __checkBounds(buf.length, start, end_0) , __valueOf(buf, start, end_0)));
32.13918 +            return;
32.13919 +          default:break commentloop;
32.13920 +        }
32.13921 +
32.13922 +    }
32.13923 +  }
32.13924 +  $flushCharacters(this$static);
32.13925 +  $appendComment(this$static, this$static.stack[this$static.currentPtr].node, (end_1 = start + length , __checkBounds(buf.length, start, end_1) , __valueOf(buf, start, end_1)));
32.13926 +  return;
32.13927 +}
32.13928 +
32.13929 +function $doctype(this$static, name, publicIdentifier, systemIdentifier, forceQuirks){
32.13930 +  this$static.needToDropLF = false;
32.13931 +  doctypeloop: for (;;) {
32.13932 +    switch (this$static.foreignFlag) {
32.13933 +      case 0:
32.13934 +        break doctypeloop;
32.13935 +      default:switch (this$static.mode) {
32.13936 +          case 0:
32.13937 +            switch (this$static.doctypeExpectation.ordinal) {
32.13938 +              case 0:
32.13939 +                if ($isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
32.13940 +                  $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.13941 +                }
32.13942 +                 else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
32.13943 +                  $documentModeInternal(this$static, ($clinit_78() , ALMOST_STANDARDS_MODE));
32.13944 +                }
32.13945 +                 else {
32.13946 +                  if ($equals_0('-//W3C//DTD HTML 4.0//EN', publicIdentifier) && (systemIdentifier == null || $equals_0('http://www.w3.org/TR/REC-html40/strict.dtd', systemIdentifier)) || $equals_0('-//W3C//DTD HTML 4.01//EN', publicIdentifier) && (systemIdentifier == null || $equals_0('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier)) || $equals_0('-//W3C//DTD XHTML 1.0 Strict//EN', publicIdentifier) && $equals_0('http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd', systemIdentifier) || $equals_0('-//W3C//DTD XHTML 1.1//EN', publicIdentifier) && $equals_0('http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd', systemIdentifier)) {
32.13947 +                  }
32.13948 +                   else 
32.13949 +                    !((systemIdentifier == null || $equals_0('about:legacy-compat', systemIdentifier)) && publicIdentifier == null);
32.13950 +                  $documentModeInternal(this$static, ($clinit_78() , STANDARDS_MODE));
32.13951 +                }
32.13952 +
32.13953 +                break;
32.13954 +              case 2:
32.13955 +                this$static.html4 = true;
32.13956 +                this$static.tokenizer.html4 = true;
32.13957 +                if ($isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
32.13958 +                  $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.13959 +                }
32.13960 +                 else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
32.13961 +                  $documentModeInternal(this$static, ($clinit_78() , ALMOST_STANDARDS_MODE));
32.13962 +                }
32.13963 +                 else {
32.13964 +                  if ($equals_0('-//W3C//DTD HTML 4.01//EN', publicIdentifier)) {
32.13965 +                    !$equals_0('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier);
32.13966 +                  }
32.13967 +                   else {
32.13968 +                  }
32.13969 +                  $documentModeInternal(this$static, ($clinit_78() , STANDARDS_MODE));
32.13970 +                }
32.13971 +
32.13972 +                break;
32.13973 +              case 1:
32.13974 +                this$static.html4 = true;
32.13975 +                this$static.tokenizer.html4 = true;
32.13976 +                if ($isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
32.13977 +                  $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.13978 +                }
32.13979 +                 else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
32.13980 +                  if ($equals_0('-//W3C//DTD HTML 4.01 Transitional//EN', publicIdentifier) && systemIdentifier != null) {
32.13981 +                    !$equals_0('http://www.w3.org/TR/html4/loose.dtd', systemIdentifier);
32.13982 +                  }
32.13983 +                   else {
32.13984 +                  }
32.13985 +                  $documentModeInternal(this$static, ($clinit_78() , ALMOST_STANDARDS_MODE));
32.13986 +                }
32.13987 +                 else {
32.13988 +                  $documentModeInternal(this$static, ($clinit_78() , STANDARDS_MODE));
32.13989 +                }
32.13990 +
32.13991 +                break;
32.13992 +              case 3:
32.13993 +                this$static.html4 = $isHtml4Doctype(publicIdentifier);
32.13994 +                if (this$static.html4) {
32.13995 +                  this$static.tokenizer.html4 = true;
32.13996 +                }
32.13997 +
32.13998 +                if ($isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
32.13999 +                  $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.14000 +                }
32.14001 +                 else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
32.14002 +                  if ($equals_0('-//W3C//DTD HTML 4.01 Transitional//EN', publicIdentifier)) {
32.14003 +                    !$equals_0('http://www.w3.org/TR/html4/loose.dtd', systemIdentifier);
32.14004 +                  }
32.14005 +                   else {
32.14006 +                  }
32.14007 +                  $documentModeInternal(this$static, ($clinit_78() , ALMOST_STANDARDS_MODE));
32.14008 +                }
32.14009 +                 else {
32.14010 +                  if ($equals_0('-//W3C//DTD HTML 4.01//EN', publicIdentifier)) {
32.14011 +                    !$equals_0('http://www.w3.org/TR/html4/strict.dtd', systemIdentifier);
32.14012 +                  }
32.14013 +                   else {
32.14014 +                  }
32.14015 +                  $documentModeInternal(this$static, ($clinit_78() , STANDARDS_MODE));
32.14016 +                }
32.14017 +
32.14018 +                break;
32.14019 +              case 4:
32.14020 +                if ($isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
32.14021 +                  $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.14022 +                }
32.14023 +                 else if ($isAlmostStandards(publicIdentifier, systemIdentifier)) {
32.14024 +                  $documentModeInternal(this$static, ($clinit_78() , ALMOST_STANDARDS_MODE));
32.14025 +                }
32.14026 +                 else {
32.14027 +                  $documentModeInternal(this$static, ($clinit_78() , STANDARDS_MODE));
32.14028 +                }
32.14029 +
32.14030 +            }
32.14031 +
32.14032 +            this$static.mode = 1;
32.14033 +            return;
32.14034 +          default:break doctypeloop;
32.14035 +        }
32.14036 +
32.14037 +    }
32.14038 +  }
32.14039 +  return;
32.14040 +}
32.14041 +
32.14042 +function $documentModeInternal(this$static, m){
32.14043 +  this$static.quirks = m == ($clinit_78() , QUIRKS_MODE);
32.14044 +}
32.14045 +
32.14046 +function $endSelect(this$static){
32.14047 +  var eltPos;
32.14048 +  eltPos = $findLastInTableScope(this$static, 'select');
32.14049 +  if (eltPos == 2147483647) {
32.14050 +    return;
32.14051 +  }
32.14052 +  while (this$static.currentPtr >= eltPos) {
32.14053 +    $pop(this$static);
32.14054 +  }
32.14055 +  $resetTheInsertionMode(this$static);
32.14056 +}
32.14057 +
32.14058 +function $endTag(this$static, elementName){
32.14059 +  var eltPos, group, name, node;
32.14060 +  this$static.needToDropLF = false;
32.14061 +  endtagloop: for (;;) {
32.14062 +    group = elementName.group;
32.14063 +    name = elementName.name_0;
32.14064 +    switch (this$static.mode) {
32.14065 +      case 11:
32.14066 +        switch (group) {
32.14067 +          case 37:
32.14068 +            eltPos = $findLastOrRoot(this$static, 37);
32.14069 +            if (eltPos == 0) {
32.14070 +              break endtagloop;
32.14071 +            }
32.14072 +
32.14073 +            $clearStackBackTo(this$static, eltPos);
32.14074 +            $pop(this$static);
32.14075 +            this$static.mode = 10;
32.14076 +            break endtagloop;
32.14077 +          case 34:
32.14078 +            eltPos = $findLastOrRoot(this$static, 37);
32.14079 +            if (eltPos == 0) {
32.14080 +              break endtagloop;
32.14081 +            }
32.14082 +
32.14083 +            $clearStackBackTo(this$static, eltPos);
32.14084 +            $pop(this$static);
32.14085 +            this$static.mode = 10;
32.14086 +            continue;
32.14087 +          case 39:
32.14088 +            if ($findLastInTableScope(this$static, name) == 2147483647) {
32.14089 +              break endtagloop;
32.14090 +            }
32.14091 +
32.14092 +            eltPos = $findLastOrRoot(this$static, 37);
32.14093 +            if (eltPos == 0) {
32.14094 +              break endtagloop;
32.14095 +            }
32.14096 +
32.14097 +            $clearStackBackTo(this$static, eltPos);
32.14098 +            $pop(this$static);
32.14099 +            this$static.mode = 10;
32.14100 +            continue;
32.14101 +            break endtagloop;
32.14102 +        }
32.14103 +
32.14104 +      case 10:
32.14105 +        switch (group) {
32.14106 +          case 39:
32.14107 +            eltPos = $findLastOrRoot_0(this$static, name);
32.14108 +            if (eltPos == 0) {
32.14109 +              break endtagloop;
32.14110 +            }
32.14111 +
32.14112 +            $clearStackBackTo(this$static, eltPos);
32.14113 +            $pop(this$static);
32.14114 +            this$static.mode = 7;
32.14115 +            break endtagloop;
32.14116 +          case 34:
32.14117 +            eltPos = $findLastInTableScopeOrRootTbodyTheadTfoot(this$static);
32.14118 +            if (eltPos == 0) {
32.14119 +              break endtagloop;
32.14120 +            }
32.14121 +
32.14122 +            $clearStackBackTo(this$static, eltPos);
32.14123 +            $pop(this$static);
32.14124 +            this$static.mode = 7;
32.14125 +            continue;
32.14126 +            break endtagloop;
32.14127 +        }
32.14128 +
32.14129 +      case 7:
32.14130 +        switch (group) {
32.14131 +          case 34:
32.14132 +            eltPos = $findLast(this$static, 'table');
32.14133 +            if (eltPos == 2147483647) {
32.14134 +              break endtagloop;
32.14135 +            }
32.14136 +
32.14137 +            while (this$static.currentPtr >= eltPos) {
32.14138 +              $pop(this$static);
32.14139 +            }
32.14140 +
32.14141 +            $resetTheInsertionMode(this$static);
32.14142 +            break endtagloop;
32.14143 +        }
32.14144 +
32.14145 +      case 8:
32.14146 +        switch (group) {
32.14147 +          case 6:
32.14148 +            eltPos = $findLastInTableScope(this$static, 'caption');
32.14149 +            if (eltPos == 2147483647) {
32.14150 +              break endtagloop;
32.14151 +            }
32.14152 +
32.14153 +            $generateImpliedEndTags(this$static);
32.14154 +            while (this$static.currentPtr >= eltPos) {
32.14155 +              $pop(this$static);
32.14156 +            }
32.14157 +
32.14158 +            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.14159 +            this$static.mode = 7;
32.14160 +            break endtagloop;
32.14161 +          case 34:
32.14162 +            eltPos = $findLastInTableScope(this$static, 'caption');
32.14163 +            if (eltPos == 2147483647) {
32.14164 +              break endtagloop;
32.14165 +            }
32.14166 +
32.14167 +            $generateImpliedEndTags(this$static);
32.14168 +            while (this$static.currentPtr >= eltPos) {
32.14169 +              $pop(this$static);
32.14170 +            }
32.14171 +
32.14172 +            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.14173 +            this$static.mode = 7;
32.14174 +            continue;
32.14175 +            break endtagloop;
32.14176 +        }
32.14177 +
32.14178 +      case 12:
32.14179 +        switch (group) {
32.14180 +          case 40:
32.14181 +            eltPos = $findLastInTableScope(this$static, name);
32.14182 +            if (eltPos == 2147483647) {
32.14183 +              break endtagloop;
32.14184 +            }
32.14185 +
32.14186 +            $generateImpliedEndTags(this$static);
32.14187 +            while (this$static.currentPtr >= eltPos) {
32.14188 +              $pop(this$static);
32.14189 +            }
32.14190 +
32.14191 +            $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.14192 +            this$static.mode = 11;
32.14193 +            break endtagloop;
32.14194 +          case 34:
32.14195 +          case 39:
32.14196 +          case 37:
32.14197 +            if ($findLastInTableScope(this$static, name) == 2147483647) {
32.14198 +              break endtagloop;
32.14199 +            }
32.14200 +
32.14201 +            $closeTheCell(this$static, $findLastInTableScopeTdTh(this$static));
32.14202 +            continue;
32.14203 +            break endtagloop;
32.14204 +        }
32.14205 +
32.14206 +      case 21:
32.14207 +      case 6:
32.14208 +        switch (group) {
32.14209 +          case 3:
32.14210 +            if (!(this$static.currentPtr >= 1 && this$static.stack[1].group == 3)) {
32.14211 +              break endtagloop;
32.14212 +            }
32.14213 +
32.14214 +            this$static.mode = 15;
32.14215 +            break endtagloop;
32.14216 +          case 23:
32.14217 +            if (!(this$static.currentPtr >= 1 && this$static.stack[1].group == 3)) {
32.14218 +              break endtagloop;
32.14219 +            }
32.14220 +
32.14221 +            this$static.mode = 15;
32.14222 +            continue;
32.14223 +          case 50:
32.14224 +          case 46:
32.14225 +          case 44:
32.14226 +          case 61:
32.14227 +          case 51:
32.14228 +            eltPos = $findLastInScope(this$static, name);
32.14229 +            if (eltPos == 2147483647) {
32.14230 +            }
32.14231 +             else {
32.14232 +              $generateImpliedEndTags(this$static);
32.14233 +              while (this$static.currentPtr >= eltPos) {
32.14234 +                $pop(this$static);
32.14235 +              }
32.14236 +            }
32.14237 +
32.14238 +            break endtagloop;
32.14239 +          case 9:
32.14240 +            if (!this$static.formPointer) {
32.14241 +              break endtagloop;
32.14242 +            }
32.14243 +
32.14244 +            this$static.formPointer = null;
32.14245 +            eltPos = $findLastInScope(this$static, name);
32.14246 +            if (eltPos == 2147483647) {
32.14247 +              break endtagloop;
32.14248 +            }
32.14249 +
32.14250 +            $generateImpliedEndTags(this$static);
32.14251 +            $removeFromStack(this$static, eltPos);
32.14252 +            break endtagloop;
32.14253 +          case 29:
32.14254 +            eltPos = $findLastInScope(this$static, 'p');
32.14255 +            if (eltPos == 2147483647) {
32.14256 +              if (this$static.foreignFlag == 0) {
32.14257 +                while (this$static.stack[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
32.14258 +                  $pop(this$static);
32.14259 +                }
32.14260 +                this$static.foreignFlag = 1;
32.14261 +              }
32.14262 +              $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, ($clinit_91() , EMPTY_ATTRIBUTES));
32.14263 +              break endtagloop;
32.14264 +            }
32.14265 +
32.14266 +            $generateImpliedEndTagsExceptFor(this$static, 'p');
32.14267 +            while (this$static.currentPtr >= eltPos) {
32.14268 +              $pop(this$static);
32.14269 +            }
32.14270 +
32.14271 +            break endtagloop;
32.14272 +          case 41:
32.14273 +          case 15:
32.14274 +            eltPos = $findLastInScope(this$static, name);
32.14275 +            if (eltPos == 2147483647) {
32.14276 +            }
32.14277 +             else {
32.14278 +              $generateImpliedEndTagsExceptFor(this$static, name);
32.14279 +              while (this$static.currentPtr >= eltPos) {
32.14280 +                $pop(this$static);
32.14281 +              }
32.14282 +            }
32.14283 +
32.14284 +            break endtagloop;
32.14285 +          case 42:
32.14286 +            eltPos = $findLastInScopeHn(this$static);
32.14287 +            if (eltPos == 2147483647) {
32.14288 +            }
32.14289 +             else {
32.14290 +              $generateImpliedEndTags(this$static);
32.14291 +              while (this$static.currentPtr >= eltPos) {
32.14292 +                $pop(this$static);
32.14293 +              }
32.14294 +            }
32.14295 +
32.14296 +            break endtagloop;
32.14297 +          case 1:
32.14298 +          case 45:
32.14299 +          case 64:
32.14300 +          case 24:
32.14301 +            $adoptionAgencyEndTag(this$static, name);
32.14302 +            break endtagloop;
32.14303 +          case 5:
32.14304 +          case 63:
32.14305 +          case 43:
32.14306 +            eltPos = $findLastInScope(this$static, name);
32.14307 +            if (eltPos == 2147483647) {
32.14308 +            }
32.14309 +             else {
32.14310 +              $generateImpliedEndTags(this$static);
32.14311 +              while (this$static.currentPtr >= eltPos) {
32.14312 +                $pop(this$static);
32.14313 +              }
32.14314 +              $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.14315 +            }
32.14316 +
32.14317 +            break endtagloop;
32.14318 +          case 4:
32.14319 +            if (this$static.foreignFlag == 0) {
32.14320 +              while (this$static.stack[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
32.14321 +                $pop(this$static);
32.14322 +              }
32.14323 +              this$static.foreignFlag = 1;
32.14324 +            }
32.14325 +
32.14326 +            $reconstructTheActiveFormattingElements(this$static);
32.14327 +            $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, ($clinit_91() , EMPTY_ATTRIBUTES));
32.14328 +            break endtagloop;
32.14329 +          case 49:
32.14330 +          case 55:
32.14331 +          case 48:
32.14332 +          case 12:
32.14333 +          case 13:
32.14334 +          case 65:
32.14335 +          case 22:
32.14336 +          case 14:
32.14337 +          case 47:
32.14338 +          case 60:
32.14339 +          case 25:
32.14340 +          case 32:
32.14341 +          case 34:
32.14342 +          case 35:
32.14343 +            break endtagloop;
32.14344 +          case 26:
32.14345 +          default:if (name == this$static.stack[this$static.currentPtr].name_0) {
32.14346 +              $pop(this$static);
32.14347 +              break endtagloop;
32.14348 +            }
32.14349 +
32.14350 +            eltPos = this$static.currentPtr;
32.14351 +            for (;;) {
32.14352 +              node = this$static.stack[eltPos];
32.14353 +              if (node.name_0 == name) {
32.14354 +                $generateImpliedEndTags(this$static);
32.14355 +                while (this$static.currentPtr >= eltPos) {
32.14356 +                  $pop(this$static);
32.14357 +                }
32.14358 +                break endtagloop;
32.14359 +              }
32.14360 +               else if (node.scoping || node.special) {
32.14361 +                break endtagloop;
32.14362 +              }
32.14363 +              --eltPos;
32.14364 +            }
32.14365 +
32.14366 +        }
32.14367 +
32.14368 +      case 9:
32.14369 +        switch (group) {
32.14370 +          case 8:
32.14371 +            if (this$static.currentPtr == 0) {
32.14372 +              break endtagloop;
32.14373 +            }
32.14374 +
32.14375 +            $pop(this$static);
32.14376 +            this$static.mode = 7;
32.14377 +            break endtagloop;
32.14378 +          case 7:
32.14379 +            break endtagloop;
32.14380 +          default:if (this$static.currentPtr == 0) {
32.14381 +              break endtagloop;
32.14382 +            }
32.14383 +
32.14384 +            $pop(this$static);
32.14385 +            this$static.mode = 7;
32.14386 +            continue;
32.14387 +        }
32.14388 +
32.14389 +      case 14:
32.14390 +        switch (group) {
32.14391 +          case 6:
32.14392 +          case 34:
32.14393 +          case 39:
32.14394 +          case 37:
32.14395 +          case 40:
32.14396 +            if ($findLastInTableScope(this$static, name) != 2147483647) {
32.14397 +              $endSelect(this$static);
32.14398 +              continue;
32.14399 +            }
32.14400 +             else {
32.14401 +              break endtagloop;
32.14402 +            }
32.14403 +
32.14404 +        }
32.14405 +
32.14406 +      case 13:
32.14407 +        switch (group) {
32.14408 +          case 28:
32.14409 +            if ('option' == this$static.stack[this$static.currentPtr].name_0) {
32.14410 +              $pop(this$static);
32.14411 +              break endtagloop;
32.14412 +            }
32.14413 +             else {
32.14414 +              break endtagloop;
32.14415 +            }
32.14416 +
32.14417 +          case 27:
32.14418 +            if ('option' == this$static.stack[this$static.currentPtr].name_0 && 'optgroup' == this$static.stack[this$static.currentPtr - 1].name_0) {
32.14419 +              $pop(this$static);
32.14420 +            }
32.14421 +
32.14422 +            if ('optgroup' == this$static.stack[this$static.currentPtr].name_0) {
32.14423 +              $pop(this$static);
32.14424 +            }
32.14425 +             else {
32.14426 +            }
32.14427 +
32.14428 +            break endtagloop;
32.14429 +          case 32:
32.14430 +            $endSelect(this$static);
32.14431 +            break endtagloop;
32.14432 +          default:break endtagloop;
32.14433 +        }
32.14434 +
32.14435 +      case 15:
32.14436 +        switch (group) {
32.14437 +          case 23:
32.14438 +            if (this$static.fragment) {
32.14439 +              break endtagloop;
32.14440 +            }
32.14441 +             else {
32.14442 +              this$static.mode = 18;
32.14443 +              break endtagloop;
32.14444 +            }
32.14445 +
32.14446 +          default:this$static.mode = 6;
32.14447 +            continue;
32.14448 +        }
32.14449 +
32.14450 +      case 16:
32.14451 +        switch (group) {
32.14452 +          case 11:
32.14453 +            if (this$static.currentPtr == 0) {
32.14454 +              break endtagloop;
32.14455 +            }
32.14456 +
32.14457 +            $pop(this$static);
32.14458 +            if (!this$static.fragment && 'frameset' != this$static.stack[this$static.currentPtr].name_0) {
32.14459 +              this$static.mode = 17;
32.14460 +            }
32.14461 +
32.14462 +            break endtagloop;
32.14463 +          default:break endtagloop;
32.14464 +        }
32.14465 +
32.14466 +      case 17:
32.14467 +        switch (group) {
32.14468 +          case 23:
32.14469 +            this$static.mode = 19;
32.14470 +            break endtagloop;
32.14471 +          default:break endtagloop;
32.14472 +        }
32.14473 +
32.14474 +      case 0:
32.14475 +        $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.14476 +        this$static.mode = 1;
32.14477 +        continue;
32.14478 +      case 1:
32.14479 +        $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
32.14480 +        this$static.mode = 2;
32.14481 +        continue;
32.14482 +      case 2:
32.14483 +        switch (group) {
32.14484 +          case 20:
32.14485 +          case 4:
32.14486 +          case 23:
32.14487 +          case 3:
32.14488 +            $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_91() , EMPTY_ATTRIBUTES));
32.14489 +            this$static.mode = 3;
32.14490 +            continue;
32.14491 +          default:break endtagloop;
32.14492 +        }
32.14493 +
32.14494 +      case 3:
32.14495 +        switch (group) {
32.14496 +          case 20:
32.14497 +            $pop(this$static);
32.14498 +            this$static.mode = 5;
32.14499 +            break endtagloop;
32.14500 +          case 4:
32.14501 +          case 23:
32.14502 +          case 3:
32.14503 +            $pop(this$static);
32.14504 +            this$static.mode = 5;
32.14505 +            continue;
32.14506 +          default:break endtagloop;
32.14507 +        }
32.14508 +
32.14509 +      case 4:
32.14510 +        switch (group) {
32.14511 +          case 26:
32.14512 +            $pop(this$static);
32.14513 +            this$static.mode = 3;
32.14514 +            break endtagloop;
32.14515 +          case 4:
32.14516 +            $pop(this$static);
32.14517 +            this$static.mode = 3;
32.14518 +            continue;
32.14519 +          default:break endtagloop;
32.14520 +        }
32.14521 +
32.14522 +      case 5:
32.14523 +        switch (group) {
32.14524 +          case 23:
32.14525 +          case 3:
32.14526 +          case 4:
32.14527 +            $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), $emptyAttributes(this$static.tokenizer));
32.14528 +            this$static.mode = 21;
32.14529 +            continue;
32.14530 +          default:break endtagloop;
32.14531 +        }
32.14532 +
32.14533 +      case 18:
32.14534 +        this$static.mode = 6;
32.14535 +        continue;
32.14536 +      case 19:
32.14537 +        this$static.mode = 16;
32.14538 +        continue;
32.14539 +      case 20:
32.14540 +        if (this$static.originalMode == 5) {
32.14541 +          $pop(this$static);
32.14542 +        }
32.14543 +
32.14544 +        $pop(this$static);
32.14545 +        this$static.mode = this$static.originalMode;
32.14546 +        break endtagloop;
32.14547 +    }
32.14548 +  }
32.14549 +  if (this$static.foreignFlag == 0 && !$hasForeignInScope(this$static)) {
32.14550 +    this$static.foreignFlag = 1;
32.14551 +  }
32.14552 +}
32.14553 +
32.14554 +function $endTokenization(this$static){
32.14555 +  this$static.formPointer = null;
32.14556 +  this$static.headPointer = null;
32.14557 +  while (this$static.currentPtr > -1) {
32.14558 +    --this$static.stack[this$static.currentPtr].refcount;
32.14559 +    --this$static.currentPtr;
32.14560 +  }
32.14561 +  this$static.stack = null;
32.14562 +  while (this$static.listPtr > -1) {
32.14563 +    if (this$static.listOfActiveFormattingElements[this$static.listPtr]) {
32.14564 +      --this$static.listOfActiveFormattingElements[this$static.listPtr].refcount;
32.14565 +    }
32.14566 +    --this$static.listPtr;
32.14567 +  }
32.14568 +  this$static.listOfActiveFormattingElements = null;
32.14569 +  $clearImpl(this$static.idLocations);
32.14570 +  this$static.charBuffer = null;
32.14571 +}
32.14572 +
32.14573 +function $eof_0(this$static){
32.14574 +  var group, i;
32.14575 +  $flushCharacters(this$static);
32.14576 +  switch (this$static.foreignFlag) {
32.14577 +    case 0:
32.14578 +      while (this$static.stack[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
32.14579 +        $popOnEof(this$static);
32.14580 +      }
32.14581 +
32.14582 +      this$static.foreignFlag = 1;
32.14583 +  }
32.14584 +  eofloop: for (;;) {
32.14585 +    switch (this$static.mode) {
32.14586 +      case 0:
32.14587 +        $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.14588 +        this$static.mode = 1;
32.14589 +        continue;
32.14590 +      case 1:
32.14591 +        $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
32.14592 +        this$static.mode = 2;
32.14593 +        continue;
32.14594 +      case 2:
32.14595 +        $appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_91() , EMPTY_ATTRIBUTES));
32.14596 +        this$static.mode = 3;
32.14597 +        continue;
32.14598 +      case 3:
32.14599 +        while (this$static.currentPtr > 0) {
32.14600 +          $popOnEof(this$static);
32.14601 +        }
32.14602 +
32.14603 +        this$static.mode = 5;
32.14604 +        continue;
32.14605 +      case 4:
32.14606 +        while (this$static.currentPtr > 1) {
32.14607 +          $popOnEof(this$static);
32.14608 +        }
32.14609 +
32.14610 +        this$static.mode = 3;
32.14611 +        continue;
32.14612 +      case 5:
32.14613 +        $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), $emptyAttributes(this$static.tokenizer));
32.14614 +        this$static.mode = 6;
32.14615 +        continue;
32.14616 +      case 9:
32.14617 +        if (this$static.currentPtr == 0) {
32.14618 +          break eofloop;
32.14619 +        }
32.14620 +         else {
32.14621 +          $popOnEof(this$static);
32.14622 +          this$static.mode = 7;
32.14623 +          continue;
32.14624 +        }
32.14625 +
32.14626 +      case 21:
32.14627 +      case 8:
32.14628 +      case 12:
32.14629 +      case 6:
32.14630 +        openelementloop: for (i = this$static.currentPtr; i >= 0; --i) {
32.14631 +          group = this$static.stack[i].group;
32.14632 +          switch (group) {
32.14633 +            case 41:
32.14634 +            case 15:
32.14635 +            case 29:
32.14636 +            case 39:
32.14637 +            case 40:
32.14638 +            case 3:
32.14639 +            case 23:
32.14640 +              break;
32.14641 +            default:break openelementloop;
32.14642 +          }
32.14643 +        }
32.14644 +
32.14645 +        break eofloop;
32.14646 +      case 20:
32.14647 +        if (this$static.originalMode == 5) {
32.14648 +          $popOnEof(this$static);
32.14649 +        }
32.14650 +
32.14651 +        $popOnEof(this$static);
32.14652 +        this$static.mode = this$static.originalMode;
32.14653 +        continue;
32.14654 +      case 10:
32.14655 +      case 11:
32.14656 +      case 7:
32.14657 +      case 13:
32.14658 +      case 14:
32.14659 +      case 16:
32.14660 +        break eofloop;
32.14661 +      case 15:
32.14662 +      case 17:
32.14663 +      case 18:
32.14664 +      case 19:
32.14665 +      default:if (this$static.currentPtr == 0) {
32.14666 +          fromDouble((new Date()).getTime());
32.14667 +        }
32.14668 +
32.14669 +        break eofloop;
32.14670 +    }
32.14671 +  }
32.14672 +  while (this$static.currentPtr > 0) {
32.14673 +    $popOnEof(this$static);
32.14674 +  }
32.14675 +  if (!this$static.fragment) {
32.14676 +    $popOnEof(this$static);
32.14677 +  }
32.14678 +}
32.14679 +
32.14680 +function $fatal_0(this$static, e){
32.14681 +  var spe;
32.14682 +  spe = $SAXParseException_0(new SAXParseException(), e.detailMessage, this$static.tokenizer, e);
32.14683 +  throw spe;
32.14684 +}
32.14685 +
32.14686 +function $fatal_1(this$static, s){
32.14687 +  var spe;
32.14688 +  spe = $SAXParseException(new SAXParseException(), s, this$static.tokenizer);
32.14689 +  throw spe;
32.14690 +}
32.14691 +
32.14692 +function $findInListOfActiveFormattingElements(this$static, node){
32.14693 +  var i;
32.14694 +  for (i = this$static.listPtr; i >= 0; --i) {
32.14695 +    if (node == this$static.listOfActiveFormattingElements[i]) {
32.14696 +      return i;
32.14697 +    }
32.14698 +  }
32.14699 +  return -1;
32.14700 +}
32.14701 +
32.14702 +function $findInListOfActiveFormattingElementsContainsBetweenEndAndLastMarker(this$static, name){
32.14703 +  var i, node;
32.14704 +  for (i = this$static.listPtr; i >= 0; --i) {
32.14705 +    node = this$static.listOfActiveFormattingElements[i];
32.14706 +    if (!node) {
32.14707 +      return -1;
32.14708 +    }
32.14709 +     else if (node.name_0 == name) {
32.14710 +      return i;
32.14711 +    }
32.14712 +  }
32.14713 +  return -1;
32.14714 +}
32.14715 +
32.14716 +function $findLast(this$static, name){
32.14717 +  var i;
32.14718 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14719 +    if (this$static.stack[i].name_0 == name) {
32.14720 +      return i;
32.14721 +    }
32.14722 +  }
32.14723 +  return 2147483647;
32.14724 +}
32.14725 +
32.14726 +function $findLastInScope(this$static, name){
32.14727 +  var i;
32.14728 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14729 +    if (this$static.stack[i].name_0 == name) {
32.14730 +      return i;
32.14731 +    }
32.14732 +     else if (this$static.stack[i].scoping) {
32.14733 +      return 2147483647;
32.14734 +    }
32.14735 +  }
32.14736 +  return 2147483647;
32.14737 +}
32.14738 +
32.14739 +function $findLastInScopeHn(this$static){
32.14740 +  var i;
32.14741 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14742 +    if (this$static.stack[i].group == 42) {
32.14743 +      return i;
32.14744 +    }
32.14745 +     else if (this$static.stack[i].scoping) {
32.14746 +      return 2147483647;
32.14747 +    }
32.14748 +  }
32.14749 +  return 2147483647;
32.14750 +}
32.14751 +
32.14752 +function $findLastInTableScope(this$static, name){
32.14753 +  var i;
32.14754 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14755 +    if (this$static.stack[i].name_0 == name) {
32.14756 +      return i;
32.14757 +    }
32.14758 +     else if (this$static.stack[i].name_0 == 'table') {
32.14759 +      return 2147483647;
32.14760 +    }
32.14761 +  }
32.14762 +  return 2147483647;
32.14763 +}
32.14764 +
32.14765 +function $findLastInTableScopeOrRootTbodyTheadTfoot(this$static){
32.14766 +  var i;
32.14767 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14768 +    if (this$static.stack[i].group == 39) {
32.14769 +      return i;
32.14770 +    }
32.14771 +  }
32.14772 +  return 0;
32.14773 +}
32.14774 +
32.14775 +function $findLastInTableScopeTdTh(this$static){
32.14776 +  var i, name;
32.14777 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14778 +    name = this$static.stack[i].name_0;
32.14779 +    if ('td' == name || 'th' == name) {
32.14780 +      return i;
32.14781 +    }
32.14782 +     else if (name == 'table') {
32.14783 +      return 2147483647;
32.14784 +    }
32.14785 +  }
32.14786 +  return 2147483647;
32.14787 +}
32.14788 +
32.14789 +function $findLastOrRoot_0(this$static, name){
32.14790 +  var i;
32.14791 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14792 +    if (this$static.stack[i].name_0 == name) {
32.14793 +      return i;
32.14794 +    }
32.14795 +  }
32.14796 +  return 0;
32.14797 +}
32.14798 +
32.14799 +function $findLastOrRoot(this$static, group){
32.14800 +  var i;
32.14801 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14802 +    if (this$static.stack[i].group == group) {
32.14803 +      return i;
32.14804 +    }
32.14805 +  }
32.14806 +  return 0;
32.14807 +}
32.14808 +
32.14809 +function $flushCharacters(this$static){
32.14810 +  var current, elt, eltPos, node;
32.14811 +  if (this$static.charBufferLen > 0) {
32.14812 +    current = this$static.stack[this$static.currentPtr];
32.14813 +    if (current.fosterParenting && $charBufferContainsNonWhitespace(this$static)) {
32.14814 +      eltPos = $findLastOrRoot(this$static, 34);
32.14815 +      node = this$static.stack[eltPos];
32.14816 +      elt = node.node;
32.14817 +      if (eltPos == 0) {
32.14818 +        $appendCharacters(this$static, elt, valueOf_1(this$static.charBuffer, 0, this$static.charBufferLen));
32.14819 +        this$static.charBufferLen = 0;
32.14820 +        return;
32.14821 +      }
32.14822 +      $insertFosterParentedCharacters_0(this$static, this$static.charBuffer, 0, this$static.charBufferLen, elt, this$static.stack[eltPos - 1].node);
32.14823 +      this$static.charBufferLen = 0;
32.14824 +      return;
32.14825 +    }
32.14826 +    $appendCharacters(this$static, this$static.stack[this$static.currentPtr].node, valueOf_1(this$static.charBuffer, 0, this$static.charBufferLen));
32.14827 +    this$static.charBufferLen = 0;
32.14828 +  }
32.14829 +}
32.14830 +
32.14831 +function $generateImpliedEndTags(this$static){
32.14832 +  for (;;) {
32.14833 +    switch (this$static.stack[this$static.currentPtr].group) {
32.14834 +      case 29:
32.14835 +      case 15:
32.14836 +      case 41:
32.14837 +      case 28:
32.14838 +      case 27:
32.14839 +      case 53:
32.14840 +        $pop(this$static);
32.14841 +        continue;
32.14842 +      default:return;
32.14843 +    }
32.14844 +  }
32.14845 +}
32.14846 +
32.14847 +function $generateImpliedEndTagsExceptFor(this$static, name){
32.14848 +  var node;
32.14849 +  for (;;) {
32.14850 +    node = this$static.stack[this$static.currentPtr];
32.14851 +    switch (node.group) {
32.14852 +      case 29:
32.14853 +      case 15:
32.14854 +      case 41:
32.14855 +      case 28:
32.14856 +      case 27:
32.14857 +      case 53:
32.14858 +        if (node.name_0 == name) {
32.14859 +          return;
32.14860 +        }
32.14861 +
32.14862 +        $pop(this$static);
32.14863 +        continue;
32.14864 +      default:return;
32.14865 +    }
32.14866 +  }
32.14867 +}
32.14868 +
32.14869 +function $hasForeignInScope(this$static){
32.14870 +  var i;
32.14871 +  for (i = this$static.currentPtr; i > 0; --i) {
32.14872 +    if (this$static.stack[i].ns != 'http://www.w3.org/1999/xhtml') {
32.14873 +      return true;
32.14874 +    }
32.14875 +     else if (this$static.stack[i].scoping) {
32.14876 +      return false;
32.14877 +    }
32.14878 +  }
32.14879 +  return false;
32.14880 +}
32.14881 +
32.14882 +function $implicitlyCloseP(this$static){
32.14883 +  var eltPos;
32.14884 +  eltPos = $findLastInScope(this$static, 'p');
32.14885 +  if (eltPos == 2147483647) {
32.14886 +    return;
32.14887 +  }
32.14888 +  $generateImpliedEndTagsExceptFor(this$static, 'p');
32.14889 +  while (this$static.currentPtr >= eltPos) {
32.14890 +    $pop(this$static);
32.14891 +  }
32.14892 +}
32.14893 +
32.14894 +function $insertIntoFosterParent(this$static, child){
32.14895 +  var elt, eltPos, node;
32.14896 +  eltPos = $findLastOrRoot(this$static, 34);
32.14897 +  node = this$static.stack[eltPos];
32.14898 +  elt = node.node;
32.14899 +  if (eltPos == 0) {
32.14900 +    $appendElement(this$static, child, elt);
32.14901 +    return;
32.14902 +  }
32.14903 +  $insertFosterParentedChild(this$static, child, elt, this$static.stack[eltPos - 1].node);
32.14904 +}
32.14905 +
32.14906 +function $insertIntoListOfActiveFormattingElements(this$static, formattingClone, bookmark){
32.14907 +  ++formattingClone.refcount;
32.14908 +  if (bookmark <= this$static.listPtr) {
32.14909 +    arraycopy(this$static.listOfActiveFormattingElements, bookmark, this$static.listOfActiveFormattingElements, bookmark + 1, this$static.listPtr - bookmark + 1);
32.14910 +  }
32.14911 +  ++this$static.listPtr;
32.14912 +  this$static.listOfActiveFormattingElements[bookmark] = formattingClone;
32.14913 +}
32.14914 +
32.14915 +function $insertIntoStack(this$static, node, position){
32.14916 +  if (position == this$static.currentPtr + 1) {
32.14917 +    $flushCharacters(this$static);
32.14918 +    $push_0(this$static, node);
32.14919 +  }
32.14920 +   else {
32.14921 +    arraycopy(this$static.stack, position, this$static.stack, position + 1, this$static.currentPtr - position + 1);
32.14922 +    ++this$static.currentPtr;
32.14923 +    this$static.stack[position] = node;
32.14924 +  }
32.14925 +}
32.14926 +
32.14927 +function $isAlmostStandards(publicIdentifier, systemIdentifier){
32.14928 +  if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd xhtml 1.0 transitional//en', publicIdentifier)) {
32.14929 +    return true;
32.14930 +  }
32.14931 +  if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd xhtml 1.0 frameset//en', publicIdentifier)) {
32.14932 +    return true;
32.14933 +  }
32.14934 +  if (systemIdentifier != null) {
32.14935 +    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 transitional//en', publicIdentifier)) {
32.14936 +      return true;
32.14937 +    }
32.14938 +    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 frameset//en', publicIdentifier)) {
32.14939 +      return true;
32.14940 +    }
32.14941 +  }
32.14942 +  return false;
32.14943 +}
32.14944 +
32.14945 +function $isHtml4Doctype(publicIdentifier){
32.14946 +  if (publicIdentifier != null && binarySearch_0(HTML4_PUBLIC_IDS, publicIdentifier, ($clinit_61() , NATURAL)) > -1) {
32.14947 +    return true;
32.14948 +  }
32.14949 +  return false;
32.14950 +}
32.14951 +
32.14952 +function $isInStack(this$static, node){
32.14953 +  var i;
32.14954 +  for (i = this$static.currentPtr; i >= 0; --i) {
32.14955 +    if (this$static.stack[i] == node) {
32.14956 +      return true;
32.14957 +    }
32.14958 +  }
32.14959 +  return false;
32.14960 +}
32.14961 +
32.14962 +function $isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks){
32.14963 +  var i;
32.14964 +  if (forceQuirks) {
32.14965 +    return true;
32.14966 +  }
32.14967 +  if (name != 'html') {
32.14968 +    return true;
32.14969 +  }
32.14970 +  if (publicIdentifier != null) {
32.14971 +    for (i = 0; i < QUIRKY_PUBLIC_IDS.length; ++i) {
32.14972 +      if (lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(QUIRKY_PUBLIC_IDS[i], publicIdentifier)) {
32.14973 +        return true;
32.14974 +      }
32.14975 +    }
32.14976 +    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3o//dtd w3 html strict 3.0//en//', publicIdentifier) || lowerCaseLiteralEqualsIgnoreAsciiCaseString('-/w3c/dtd html 4.0 transitional/en', publicIdentifier) || lowerCaseLiteralEqualsIgnoreAsciiCaseString('html', publicIdentifier)) {
32.14977 +      return true;
32.14978 +    }
32.14979 +  }
32.14980 +  if (systemIdentifier == null) {
32.14981 +    if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 transitional//en', publicIdentifier)) {
32.14982 +      return true;
32.14983 +    }
32.14984 +     else if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('-//w3c//dtd html 4.01 frameset//en', publicIdentifier)) {
32.14985 +      return true;
32.14986 +    }
32.14987 +  }
32.14988 +   else if (lowerCaseLiteralEqualsIgnoreAsciiCaseString('http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd', systemIdentifier)) {
32.14989 +    return true;
32.14990 +  }
32.14991 +  return false;
32.14992 +}
32.14993 +
32.14994 +function $pop(this$static){
32.14995 +  var node;
32.14996 +  $flushCharacters(this$static);
32.14997 +  node = this$static.stack[this$static.currentPtr];
32.14998 +  --this$static.currentPtr;
32.14999 +  $elementPopped(this$static, node.ns, node.popName, node.node);
32.15000 +  --node.refcount;
32.15001 +}
32.15002 +
32.15003 +function $popOnEof(this$static){
32.15004 +  var node;
32.15005 +  $flushCharacters(this$static);
32.15006 +  node = this$static.stack[this$static.currentPtr];
32.15007 +  --this$static.currentPtr;
32.15008 +  $elementPopped(this$static, node.ns, node.popName, node.node);
32.15009 +  --node.refcount;
32.15010 +}
32.15011 +
32.15012 +function $push_0(this$static, node){
32.15013 +  var newStack;
32.15014 +  ++this$static.currentPtr;
32.15015 +  if (this$static.currentPtr == this$static.stack.length) {
32.15016 +    newStack = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 51, 11, this$static.stack.length + 64, 0);
32.15017 +    arraycopy(this$static.stack, 0, newStack, 0, this$static.stack.length);
32.15018 +    this$static.stack = newStack;
32.15019 +  }
32.15020 +  this$static.stack[this$static.currentPtr] = node;
32.15021 +}
32.15022 +
32.15023 +function $pushHeadPointerOntoStack(this$static){
32.15024 +  $flushCharacters(this$static);
32.15025 +  if (!this$static.headPointer) {
32.15026 +    $push_0(this$static, this$static.stack[this$static.currentPtr]);
32.15027 +  }
32.15028 +   else {
32.15029 +    $push_0(this$static, $StackNode_0(new StackNode(), 'http://www.w3.org/1999/xhtml', ($clinit_89() , HEAD), this$static.headPointer));
32.15030 +  }
32.15031 +}
32.15032 +
32.15033 +function $reconstructTheActiveFormattingElements(this$static){
32.15034 +  var clone, currentNode, entry, entryClone, entryPos, mostRecent;
32.15035 +  if (this$static.listPtr == -1) {
32.15036 +    return;
32.15037 +  }
32.15038 +  mostRecent = this$static.listOfActiveFormattingElements[this$static.listPtr];
32.15039 +  if (!mostRecent || $isInStack(this$static, mostRecent)) {
32.15040 +    return;
32.15041 +  }
32.15042 +  entryPos = this$static.listPtr;
32.15043 +  for (;;) {
32.15044 +    --entryPos;
32.15045 +    if (entryPos == -1) {
32.15046 +      break;
32.15047 +    }
32.15048 +    if (!this$static.listOfActiveFormattingElements[entryPos]) {
32.15049 +      break;
32.15050 +    }
32.15051 +    if ($isInStack(this$static, this$static.listOfActiveFormattingElements[entryPos])) {
32.15052 +      break;
32.15053 +    }
32.15054 +  }
32.15055 +  if (entryPos < this$static.listPtr) {
32.15056 +    $flushCharacters(this$static);
32.15057 +  }
32.15058 +  while (entryPos < this$static.listPtr) {
32.15059 +    ++entryPos;
32.15060 +    entry = this$static.listOfActiveFormattingElements[entryPos];
32.15061 +    clone = $createElement(this$static, 'http://www.w3.org/1999/xhtml', entry.name_0, $cloneAttributes(entry.attributes));
32.15062 +    entryClone = $StackNode(new StackNode(), entry.group, entry.ns, entry.name_0, clone, entry.scoping, entry.special, entry.fosterParenting, entry.popName, entry.attributes);
32.15063 +    entry.attributes = null;
32.15064 +    currentNode = this$static.stack[this$static.currentPtr];
32.15065 +    if (currentNode.fosterParenting) {
32.15066 +      $insertIntoFosterParent(this$static, clone);
32.15067 +    }
32.15068 +     else {
32.15069 +      $appendElement(this$static, clone, currentNode.node);
32.15070 +    }
32.15071 +    $push_0(this$static, entryClone);
32.15072 +    this$static.listOfActiveFormattingElements[entryPos] = entryClone;
32.15073 +    --entry.refcount;
32.15074 +    ++entryClone.refcount;
32.15075 +  }
32.15076 +}
32.15077 +
32.15078 +function $removeFromListOfActiveFormattingElements(this$static, pos){
32.15079 +  --this$static.listOfActiveFormattingElements[pos].refcount;
32.15080 +  if (pos == this$static.listPtr) {
32.15081 +    --this$static.listPtr;
32.15082 +    return;
32.15083 +  }
32.15084 +  arraycopy(this$static.listOfActiveFormattingElements, pos + 1, this$static.listOfActiveFormattingElements, pos, this$static.listPtr - pos);
32.15085 +  --this$static.listPtr;
32.15086 +}
32.15087 +
32.15088 +function $removeFromStack(this$static, pos){
32.15089 +  if (this$static.currentPtr == pos) {
32.15090 +    $pop(this$static);
32.15091 +  }
32.15092 +   else {
32.15093 +    --this$static.stack[pos].refcount;
32.15094 +    arraycopy(this$static.stack, pos + 1, this$static.stack, pos, this$static.currentPtr - pos);
32.15095 +    --this$static.currentPtr;
32.15096 +  }
32.15097 +}
32.15098 +
32.15099 +function $removeFromStack_0(this$static, node){
32.15100 +  var pos;
32.15101 +  if (this$static.stack[this$static.currentPtr] == node) {
32.15102 +    $pop(this$static);
32.15103 +  }
32.15104 +   else {
32.15105 +    pos = this$static.currentPtr - 1;
32.15106 +    while (pos >= 0 && this$static.stack[pos] != node) {
32.15107 +      --pos;
32.15108 +    }
32.15109 +    if (pos == -1) {
32.15110 +      return;
32.15111 +    }
32.15112 +    --node.refcount;
32.15113 +    arraycopy(this$static.stack, pos + 1, this$static.stack, pos, this$static.currentPtr - pos);
32.15114 +    --this$static.currentPtr;
32.15115 +  }
32.15116 +}
32.15117 +
32.15118 +function $resetTheInsertionMode(this$static){
32.15119 +  var i, name, node;
32.15120 +  this$static.foreignFlag = 1;
32.15121 +  for (i = this$static.currentPtr; i >= 0; --i) {
32.15122 +    node = this$static.stack[i];
32.15123 +    name = node.name_0;
32.15124 +    if (i == 0) {
32.15125 +      if (this$static.contextNamespace == 'http://www.w3.org/1999/xhtml' && (this$static.contextName == 'td' || this$static.contextName == 'th')) {
32.15126 +        this$static.mode = 6;
32.15127 +        return;
32.15128 +      }
32.15129 +       else {
32.15130 +        name = this$static.contextName;
32.15131 +      }
32.15132 +    }
32.15133 +    if ('select' == name) {
32.15134 +      this$static.mode = 13;
32.15135 +      return;
32.15136 +    }
32.15137 +     else if ('td' == name || 'th' == name) {
32.15138 +      this$static.mode = 12;
32.15139 +      return;
32.15140 +    }
32.15141 +     else if ('tr' == name) {
32.15142 +      this$static.mode = 11;
32.15143 +      return;
32.15144 +    }
32.15145 +     else if ('tbody' == name || 'thead' == name || 'tfoot' == name) {
32.15146 +      this$static.mode = 10;
32.15147 +      return;
32.15148 +    }
32.15149 +     else if ('caption' == name) {
32.15150 +      this$static.mode = 8;
32.15151 +      return;
32.15152 +    }
32.15153 +     else if ('colgroup' == name) {
32.15154 +      this$static.mode = 9;
32.15155 +      return;
32.15156 +    }
32.15157 +     else if ('table' == name) {
32.15158 +      this$static.mode = 7;
32.15159 +      return;
32.15160 +    }
32.15161 +     else if ('http://www.w3.org/1999/xhtml' != node.ns) {
32.15162 +      this$static.foreignFlag = 0;
32.15163 +      this$static.mode = 6;
32.15164 +      return;
32.15165 +    }
32.15166 +     else if ('head' == name) {
32.15167 +      this$static.mode = 6;
32.15168 +      return;
32.15169 +    }
32.15170 +     else if ('body' == name) {
32.15171 +      this$static.mode = 6;
32.15172 +      return;
32.15173 +    }
32.15174 +     else if ('frameset' == name) {
32.15175 +      this$static.mode = 16;
32.15176 +      return;
32.15177 +    }
32.15178 +     else if ('html' == name) {
32.15179 +      if (!this$static.headPointer) {
32.15180 +        this$static.mode = 2;
32.15181 +      }
32.15182 +       else {
32.15183 +        this$static.mode = 5;
32.15184 +      }
32.15185 +      return;
32.15186 +    }
32.15187 +     else if (i == 0) {
32.15188 +      this$static.mode = 6;
32.15189 +      return;
32.15190 +    }
32.15191 +  }
32.15192 +}
32.15193 +
32.15194 +function $setFragmentContext(this$static, context){
32.15195 +  this$static.contextName = context;
32.15196 +  this$static.contextNamespace = 'http://www.w3.org/1999/xhtml';
32.15197 +  this$static.fragment = false;
32.15198 +  this$static.quirks = false;
32.15199 +}
32.15200 +
32.15201 +function $startTag(this$static, elementName, attributes, selfClosing){
32.15202 +  var actionIndex, activeA, activeAPos, attributeQName, currGroup, currNs, currentNode, eltPos, formAttrs, group, i, inputAttributes, name, needsPostProcessing, node, prompt, promptIndex, current, elt_53;
32.15203 +  this$static.needToDropLF = false;
32.15204 +  needsPostProcessing = false;
32.15205 +  starttagloop: for (;;) {
32.15206 +    group = elementName.group;
32.15207 +    name = elementName.name_0;
32.15208 +    switch (this$static.foreignFlag) {
32.15209 +      case 0:
32.15210 +        currentNode = this$static.stack[this$static.currentPtr];
32.15211 +        currNs = currentNode.ns;
32.15212 +        currGroup = currentNode.group;
32.15213 +        if ('http://www.w3.org/1999/xhtml' == currNs || 'http://www.w3.org/1998/Math/MathML' == currNs && (56 != group && 57 == currGroup || 19 == group && 58 == currGroup) || 'http://www.w3.org/2000/svg' == currNs && (36 == currGroup || 59 == currGroup)) {
32.15214 +          needsPostProcessing = true;
32.15215 +        }
32.15216 +         else {
32.15217 +          switch (group) {
32.15218 +            case 45:
32.15219 +            case 50:
32.15220 +            case 3:
32.15221 +            case 4:
32.15222 +            case 52:
32.15223 +            case 41:
32.15224 +            case 46:
32.15225 +            case 48:
32.15226 +            case 42:
32.15227 +            case 20:
32.15228 +            case 22:
32.15229 +            case 15:
32.15230 +            case 18:
32.15231 +            case 24:
32.15232 +            case 29:
32.15233 +            case 44:
32.15234 +            case 34:
32.15235 +              while (this$static.stack[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
32.15236 +                $pop(this$static);
32.15237 +              }
32.15238 +
32.15239 +              this$static.foreignFlag = 1;
32.15240 +              continue starttagloop;
32.15241 +            case 64:
32.15242 +              if ($contains(attributes, ($clinit_87() , COLOR)) || $contains(attributes, FACE) || $contains(attributes, SIZE)) {
32.15243 +                while (this$static.stack[this$static.currentPtr].ns != 'http://www.w3.org/1999/xhtml') {
32.15244 +                  $pop(this$static);
32.15245 +                }
32.15246 +                this$static.foreignFlag = 1;
32.15247 +                continue starttagloop;
32.15248 +              }
32.15249 +
32.15250 +            default:if ('http://www.w3.org/2000/svg' == currNs) {
32.15251 +                attributes.mode = 2;
32.15252 +                if (selfClosing) {
32.15253 +                  $appendVoidElementToCurrentMayFosterCamelCase(this$static, currNs, elementName, attributes);
32.15254 +                  selfClosing = false;
32.15255 +                }
32.15256 +                 else {
32.15257 +                  $appendToCurrentNodeAndPushElementMayFosterCamelCase(this$static, currNs, elementName, attributes);
32.15258 +                }
32.15259 +                attributes = null;
32.15260 +                break starttagloop;
32.15261 +              }
32.15262 +               else {
32.15263 +                attributes.mode = 1;
32.15264 +                if (selfClosing) {
32.15265 +                  $appendVoidElementToCurrentMayFoster_0(this$static, currNs, elementName, attributes);
32.15266 +                  selfClosing = false;
32.15267 +                }
32.15268 +                 else {
32.15269 +                  $appendToCurrentNodeAndPushElementMayFosterNoScoping(this$static, currNs, elementName, attributes);
32.15270 +                }
32.15271 +                attributes = null;
32.15272 +                break starttagloop;
32.15273 +              }
32.15274 +
32.15275 +          }
32.15276 +        }
32.15277 +
32.15278 +      default:switch (this$static.mode) {
32.15279 +          case 10:
32.15280 +            switch (group) {
32.15281 +              case 37:
32.15282 +                $clearStackBackTo(this$static, $findLastInTableScopeOrRootTbodyTheadTfoot(this$static));
32.15283 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15284 +                this$static.mode = 11;
32.15285 +                attributes = null;
32.15286 +                break starttagloop;
32.15287 +              case 40:
32.15288 +                $clearStackBackTo(this$static, $findLastInTableScopeOrRootTbodyTheadTfoot(this$static));
32.15289 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , TR), ($clinit_91() , EMPTY_ATTRIBUTES));
32.15290 +                this$static.mode = 11;
32.15291 +                continue;
32.15292 +              case 6:
32.15293 +              case 7:
32.15294 +              case 8:
32.15295 +              case 39:
32.15296 +                eltPos = $findLastInTableScopeOrRootTbodyTheadTfoot(this$static);
32.15297 +                if (eltPos == 0) {
32.15298 +                  break starttagloop;
32.15299 +                }
32.15300 +                 else {
32.15301 +                  $clearStackBackTo(this$static, eltPos);
32.15302 +                  $pop(this$static);
32.15303 +                  this$static.mode = 7;
32.15304 +                  continue;
32.15305 +                }
32.15306 +
32.15307 +            }
32.15308 +
32.15309 +          case 11:
32.15310 +            switch (group) {
32.15311 +              case 40:
32.15312 +                $clearStackBackTo(this$static, $findLastOrRoot(this$static, 37));
32.15313 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15314 +                this$static.mode = 12;
32.15315 +                $append_1(this$static, null);
32.15316 +                attributes = null;
32.15317 +                break starttagloop;
32.15318 +              case 6:
32.15319 +              case 7:
32.15320 +              case 8:
32.15321 +              case 39:
32.15322 +              case 37:
32.15323 +                eltPos = $findLastOrRoot(this$static, 37);
32.15324 +                if (eltPos == 0) {
32.15325 +                  break starttagloop;
32.15326 +                }
32.15327 +
32.15328 +                $clearStackBackTo(this$static, eltPos);
32.15329 +                $pop(this$static);
32.15330 +                this$static.mode = 10;
32.15331 +                continue;
32.15332 +            }
32.15333 +
32.15334 +          case 7:
32.15335 +            intableloop: for (;;) {
32.15336 +              switch (group) {
32.15337 +                case 6:
32.15338 +                  $clearStackBackTo(this$static, $findLastOrRoot(this$static, 34));
32.15339 +                  $append_1(this$static, null);
32.15340 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15341 +                  this$static.mode = 8;
32.15342 +                  attributes = null;
32.15343 +                  break starttagloop;
32.15344 +                case 8:
32.15345 +                  $clearStackBackTo(this$static, $findLastOrRoot(this$static, 34));
32.15346 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15347 +                  this$static.mode = 9;
32.15348 +                  attributes = null;
32.15349 +                  break starttagloop;
32.15350 +                case 7:
32.15351 +                  $clearStackBackTo(this$static, $findLastOrRoot(this$static, 34));
32.15352 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , COLGROUP), ($clinit_91() , EMPTY_ATTRIBUTES));
32.15353 +                  this$static.mode = 9;
32.15354 +                  continue starttagloop;
32.15355 +                case 39:
32.15356 +                  $clearStackBackTo(this$static, $findLastOrRoot(this$static, 34));
32.15357 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15358 +                  this$static.mode = 10;
32.15359 +                  attributes = null;
32.15360 +                  break starttagloop;
32.15361 +                case 37:
32.15362 +                case 40:
32.15363 +                  $clearStackBackTo(this$static, $findLastOrRoot(this$static, 34));
32.15364 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , TBODY), ($clinit_91() , EMPTY_ATTRIBUTES));
32.15365 +                  this$static.mode = 10;
32.15366 +                  continue starttagloop;
32.15367 +                case 34:
32.15368 +                  eltPos = $findLastInTableScope(this$static, name);
32.15369 +                  if (eltPos == 2147483647) {
32.15370 +                    break starttagloop;
32.15371 +                  }
32.15372 +
32.15373 +                  $generateImpliedEndTags(this$static);
32.15374 +                  while (this$static.currentPtr >= eltPos) {
32.15375 +                    $pop(this$static);
32.15376 +                  }
32.15377 +
32.15378 +                  $resetTheInsertionMode(this$static);
32.15379 +                  continue starttagloop;
32.15380 +                case 31:
32.15381 +                case 33:
32.15382 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15383 +                  this$static.originalMode = this$static.mode;
32.15384 +                  this$static.mode = 20;
32.15385 +                  $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.15386 +                  attributes = null;
32.15387 +                  break starttagloop;
32.15388 +                case 13:
32.15389 +                  if (!lowerCaseLiteralEqualsIgnoreAsciiCaseString('hidden', $getValue_0(attributes, ($clinit_87() , TYPE)))) {
32.15390 +                    break intableloop;
32.15391 +                  }
32.15392 +
32.15393 +                  $flushCharacters(this$static);
32.15394 +                  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15395 +                  elt_53 = $createElement_0(this$static, 'http://www.w3.org/1999/xhtml', name, attributes);
32.15396 +                  current = this$static.stack[this$static.currentPtr];
32.15397 +                  $appendElement(this$static, elt_53, current.node);
32.15398 +                  $elementPopped(this$static, 'http://www.w3.org/1999/xhtml', name, elt_53);
32.15399 +                  selfClosing = false;
32.15400 +                  attributes = null;
32.15401 +                  break starttagloop;
32.15402 +                default:break intableloop;
32.15403 +              }
32.15404 +            }
32.15405 +
32.15406 +          case 8:
32.15407 +            switch (group) {
32.15408 +              case 6:
32.15409 +              case 7:
32.15410 +              case 8:
32.15411 +              case 39:
32.15412 +              case 37:
32.15413 +              case 40:
32.15414 +                eltPos = $findLastInTableScope(this$static, 'caption');
32.15415 +                if (eltPos == 2147483647) {
32.15416 +                  break starttagloop;
32.15417 +                }
32.15418 +
32.15419 +                $generateImpliedEndTags(this$static);
32.15420 +                while (this$static.currentPtr >= eltPos) {
32.15421 +                  $pop(this$static);
32.15422 +                }
32.15423 +
32.15424 +                $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.15425 +                this$static.mode = 7;
32.15426 +                continue;
32.15427 +            }
32.15428 +
32.15429 +          case 12:
32.15430 +            switch (group) {
32.15431 +              case 6:
32.15432 +              case 7:
32.15433 +              case 8:
32.15434 +              case 39:
32.15435 +              case 37:
32.15436 +              case 40:
32.15437 +                eltPos = $findLastInTableScopeTdTh(this$static);
32.15438 +                if (eltPos == 2147483647) {
32.15439 +                  break starttagloop;
32.15440 +                }
32.15441 +                 else {
32.15442 +                  $closeTheCell(this$static, eltPos);
32.15443 +                  continue;
32.15444 +                }
32.15445 +
32.15446 +            }
32.15447 +
32.15448 +          case 21:
32.15449 +            switch (group) {
32.15450 +              case 11:
32.15451 +                if (this$static.mode == 21) {
32.15452 +                  if (this$static.currentPtr == 0 || this$static.stack[1].group != 3) {
32.15453 +                    break starttagloop;
32.15454 +                  }
32.15455 +                   else {
32.15456 +                    $detachFromParent(this$static, this$static.stack[1].node);
32.15457 +                    while (this$static.currentPtr > 0) {
32.15458 +                      $pop(this$static);
32.15459 +                    }
32.15460 +                    $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15461 +                    this$static.mode = 16;
32.15462 +                    attributes = null;
32.15463 +                    break starttagloop;
32.15464 +                  }
32.15465 +                }
32.15466 +                 else {
32.15467 +                  break starttagloop;
32.15468 +                }
32.15469 +
32.15470 +              case 44:
32.15471 +              case 15:
32.15472 +              case 41:
32.15473 +              case 5:
32.15474 +              case 43:
32.15475 +              case 63:
32.15476 +              case 34:
32.15477 +              case 49:
32.15478 +              case 4:
32.15479 +              case 48:
32.15480 +              case 13:
32.15481 +              case 65:
32.15482 +              case 22:
32.15483 +              case 35:
32.15484 +              case 38:
32.15485 +              case 47:
32.15486 +              case 32:
32.15487 +                if (this$static.mode == 21) {
32.15488 +                  this$static.mode = 6;
32.15489 +                }
32.15490 +
32.15491 +            }
32.15492 +
32.15493 +          case 6:
32.15494 +            inbodyloop: for (;;) {
32.15495 +              switch (group) {
32.15496 +                case 23:
32.15497 +                  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15498 +                  $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.15499 +                  attributes = null;
32.15500 +                  break starttagloop;
32.15501 +                case 2:
32.15502 +                case 16:
32.15503 +                case 18:
32.15504 +                case 33:
32.15505 +                case 31:
32.15506 +                case 36:
32.15507 +                case 54:
32.15508 +                  break inbodyloop;
32.15509 +                case 3:
32.15510 +                  $addAttributesToBody(this$static, attributes);
32.15511 +                  attributes = null;
32.15512 +                  break starttagloop;
32.15513 +                case 29:
32.15514 +                case 50:
32.15515 +                case 46:
32.15516 +                case 51:
32.15517 +                  $implicitlyCloseP(this$static);
32.15518 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15519 +                  attributes = null;
32.15520 +                  break starttagloop;
32.15521 +                case 42:
32.15522 +                  $implicitlyCloseP(this$static);
32.15523 +                  if (this$static.stack[this$static.currentPtr].group == 42) {
32.15524 +                    $pop(this$static);
32.15525 +                  }
32.15526 +
32.15527 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15528 +                  attributes = null;
32.15529 +                  break starttagloop;
32.15530 +                case 61:
32.15531 +                  $implicitlyCloseP(this$static);
32.15532 +                  $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15533 +                  attributes = null;
32.15534 +                  break starttagloop;
32.15535 +                case 44:
32.15536 +                  $implicitlyCloseP(this$static);
32.15537 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15538 +                  this$static.needToDropLF = true;
32.15539 +                  attributes = null;
32.15540 +                  break starttagloop;
32.15541 +                case 9:
32.15542 +                  if (this$static.formPointer) {
32.15543 +                    break starttagloop;
32.15544 +                  }
32.15545 +                   else {
32.15546 +                    $implicitlyCloseP(this$static);
32.15547 +                    $appendToCurrentNodeAndPushFormElementMayFoster(this$static, attributes);
32.15548 +                    attributes = null;
32.15549 +                    break starttagloop;
32.15550 +                  }
32.15551 +
32.15552 +                case 15:
32.15553 +                case 41:
32.15554 +                  eltPos = this$static.currentPtr;
32.15555 +                  for (;;) {
32.15556 +                    node = this$static.stack[eltPos];
32.15557 +                    if (node.group == group) {
32.15558 +                      $generateImpliedEndTagsExceptFor(this$static, node.name_0);
32.15559 +                      while (this$static.currentPtr >= eltPos) {
32.15560 +                        $pop(this$static);
32.15561 +                      }
32.15562 +                      break;
32.15563 +                    }
32.15564 +                     else if (node.scoping || node.special && node.name_0 != 'p' && node.name_0 != 'address' && node.name_0 != 'div') {
32.15565 +                      break;
32.15566 +                    }
32.15567 +                    --eltPos;
32.15568 +                  }
32.15569 +
32.15570 +                  $implicitlyCloseP(this$static);
32.15571 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15572 +                  attributes = null;
32.15573 +                  break starttagloop;
32.15574 +                case 30:
32.15575 +                  $implicitlyCloseP(this$static);
32.15576 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15577 +                  $setContentModelFlag_0(this$static.tokenizer, 3, elementName);
32.15578 +                  attributes = null;
32.15579 +                  break starttagloop;
32.15580 +                case 1:
32.15581 +                  activeAPos = $findInListOfActiveFormattingElementsContainsBetweenEndAndLastMarker(this$static, 'a');
32.15582 +                  if (activeAPos != -1) {
32.15583 +                    activeA = this$static.listOfActiveFormattingElements[activeAPos];
32.15584 +                    ++activeA.refcount;
32.15585 +                    $adoptionAgencyEndTag(this$static, 'a');
32.15586 +                    $removeFromStack_0(this$static, activeA);
32.15587 +                    activeAPos = $findInListOfActiveFormattingElements(this$static, activeA);
32.15588 +                    if (activeAPos != -1) {
32.15589 +                      $removeFromListOfActiveFormattingElements(this$static, activeAPos);
32.15590 +                    }
32.15591 +                    --activeA.refcount;
32.15592 +                  }
32.15593 +
32.15594 +                  $reconstructTheActiveFormattingElements(this$static);
32.15595 +                  $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15596 +                  attributes = null;
32.15597 +                  break starttagloop;
32.15598 +                case 45:
32.15599 +                case 64:
32.15600 +                  $reconstructTheActiveFormattingElements(this$static);
32.15601 +                  $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15602 +                  attributes = null;
32.15603 +                  break starttagloop;
32.15604 +                case 24:
32.15605 +                  $reconstructTheActiveFormattingElements(this$static);
32.15606 +                  if (2147483647 != $findLastInScope(this$static, 'nobr')) {
32.15607 +                    $adoptionAgencyEndTag(this$static, 'nobr');
32.15608 +                  }
32.15609 +
32.15610 +                  $appendToCurrentNodeAndPushFormattingElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15611 +                  attributes = null;
32.15612 +                  break starttagloop;
32.15613 +                case 5:
32.15614 +                  eltPos = $findLastInScope(this$static, name);
32.15615 +                  if (eltPos != 2147483647) {
32.15616 +                    $generateImpliedEndTags(this$static);
32.15617 +                    while (this$static.currentPtr >= eltPos) {
32.15618 +                      $pop(this$static);
32.15619 +                    }
32.15620 +                    $clearTheListOfActiveFormattingElementsUpToTheLastMarker(this$static);
32.15621 +                    continue starttagloop;
32.15622 +                  }
32.15623 +                   else {
32.15624 +                    $reconstructTheActiveFormattingElements(this$static);
32.15625 +                    $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15626 +                    $append_1(this$static, null);
32.15627 +                    attributes = null;
32.15628 +                    break starttagloop;
32.15629 +                  }
32.15630 +
32.15631 +                case 63:
32.15632 +                  $reconstructTheActiveFormattingElements(this$static);
32.15633 +                  $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15634 +                  $append_1(this$static, null);
32.15635 +                  attributes = null;
32.15636 +                  break starttagloop;
32.15637 +                case 43:
32.15638 +                  $reconstructTheActiveFormattingElements(this$static);
32.15639 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15640 +                  $append_1(this$static, null);
32.15641 +                  attributes = null;
32.15642 +                  break starttagloop;
32.15643 +                case 38:
32.15644 +                  $reconstructTheActiveFormattingElements(this$static);
32.15645 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15646 +                  this$static.originalMode = this$static.mode;
32.15647 +                  this$static.mode = 20;
32.15648 +                  $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.15649 +                  attributes = null;
32.15650 +                  break starttagloop;
32.15651 +                case 34:
32.15652 +                  if (!this$static.quirks) {
32.15653 +                    $implicitlyCloseP(this$static);
32.15654 +                  }
32.15655 +
32.15656 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15657 +                  this$static.mode = 7;
32.15658 +                  attributes = null;
32.15659 +                  break starttagloop;
32.15660 +                case 4:
32.15661 +                case 48:
32.15662 +                case 49:
32.15663 +                  $reconstructTheActiveFormattingElements(this$static);
32.15664 +                case 55:
32.15665 +                  $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15666 +                  selfClosing = false;
32.15667 +                  attributes = null;
32.15668 +                  break starttagloop;
32.15669 +                case 22:
32.15670 +                  $implicitlyCloseP(this$static);
32.15671 +                  $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15672 +                  selfClosing = false;
32.15673 +                  attributes = null;
32.15674 +                  break starttagloop;
32.15675 +                case 12:
32.15676 +                  elementName = ($clinit_89() , IMG);
32.15677 +                  continue starttagloop;
32.15678 +                case 65:
32.15679 +                case 13:
32.15680 +                  $reconstructTheActiveFormattingElements(this$static);
32.15681 +                  $appendVoidElementToCurrentMayFoster(this$static, 'http://www.w3.org/1999/xhtml', name, attributes);
32.15682 +                  selfClosing = false;
32.15683 +                  attributes = null;
32.15684 +                  break starttagloop;
32.15685 +                case 14:
32.15686 +                  if (this$static.formPointer) {
32.15687 +                    break starttagloop;
32.15688 +                  }
32.15689 +
32.15690 +                  $implicitlyCloseP(this$static);
32.15691 +                  formAttrs = $HtmlAttributes(new HtmlAttributes(), 0);
32.15692 +                  actionIndex = $getIndex(attributes, ($clinit_87() , ACTION));
32.15693 +                  if (actionIndex > -1) {
32.15694 +                    $addAttribute(formAttrs, ACTION, $getValue(attributes, actionIndex), ($clinit_80() , ALLOW));
32.15695 +                  }
32.15696 +
32.15697 +                  $appendToCurrentNodeAndPushFormElementMayFoster(this$static, formAttrs);
32.15698 +                  $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , HR), ($clinit_91() , EMPTY_ATTRIBUTES));
32.15699 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', P, EMPTY_ATTRIBUTES);
32.15700 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', LABEL_0, EMPTY_ATTRIBUTES);
32.15701 +                  promptIndex = $getIndex(attributes, PROMPT);
32.15702 +                  if (promptIndex > -1) {
32.15703 +                    prompt = $toCharArray($getValue(attributes, promptIndex));
32.15704 +                    $appendCharacters(this$static, this$static.stack[this$static.currentPtr].node, valueOf_1(prompt, 0, prompt.length));
32.15705 +                  }
32.15706 +                   else {
32.15707 +                    $appendCharacters(this$static, this$static.stack[this$static.currentPtr].node, valueOf_1(ISINDEX_PROMPT, 0, ISINDEX_PROMPT.length));
32.15708 +                  }
32.15709 +
32.15710 +                  inputAttributes = $HtmlAttributes(new HtmlAttributes(), 0);
32.15711 +                  $addAttribute(inputAttributes, NAME, 'isindex', ($clinit_80() , ALLOW));
32.15712 +                  for (i = 0; i < attributes.length_0; ++i) {
32.15713 +                    attributeQName = $getAttributeName(attributes, i);
32.15714 +                    if (NAME == attributeQName || PROMPT == attributeQName) {
32.15715 +                    }
32.15716 +                     else if (ACTION != attributeQName) {
32.15717 +                      $addAttribute(inputAttributes, attributeQName, $getValue(attributes, i), ALLOW);
32.15718 +                    }
32.15719 +                  }
32.15720 +
32.15721 +                  $clearWithoutReleasingContents(attributes);
32.15722 +                  $appendVoidElementToCurrentMayFoster(this$static, 'http://www.w3.org/1999/xhtml', 'input', inputAttributes);
32.15723 +                  $pop(this$static);
32.15724 +                  $pop(this$static);
32.15725 +                  $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', HR, EMPTY_ATTRIBUTES);
32.15726 +                  $pop(this$static);
32.15727 +                  selfClosing = false;
32.15728 +                  attributes = null;
32.15729 +                  break starttagloop;
32.15730 +                case 35:
32.15731 +                  $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15732 +                  $setContentModelFlag_0(this$static.tokenizer, 1, elementName);
32.15733 +                  this$static.originalMode = this$static.mode;
32.15734 +                  this$static.mode = 20;
32.15735 +                  this$static.needToDropLF = true;
32.15736 +                  attributes = null;
32.15737 +                  break starttagloop;
32.15738 +                case 26:
32.15739 +                  {
32.15740 +                    $reconstructTheActiveFormattingElements(this$static);
32.15741 +                    $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15742 +                    attributes = null;
32.15743 +                    break starttagloop;
32.15744 +                  }
32.15745 +
32.15746 +                case 25:
32.15747 +                case 47:
32.15748 +                case 60:
32.15749 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15750 +                  this$static.originalMode = this$static.mode;
32.15751 +                  this$static.mode = 20;
32.15752 +                  $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.15753 +                  attributes = null;
32.15754 +                  break starttagloop;
32.15755 +                case 32:
32.15756 +                  $reconstructTheActiveFormattingElements(this$static);
32.15757 +                  $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15758 +                  switch (this$static.mode) {
32.15759 +                    case 7:
32.15760 +                    case 8:
32.15761 +                    case 9:
32.15762 +                    case 10:
32.15763 +                    case 11:
32.15764 +                    case 12:
32.15765 +                      this$static.mode = 14;
32.15766 +                      break;
32.15767 +                    default:this$static.mode = 13;
32.15768 +                  }
32.15769 +
32.15770 +                  attributes = null;
32.15771 +                  break starttagloop;
32.15772 +                case 27:
32.15773 +                case 28:
32.15774 +                  if ($findLastInScope(this$static, 'option') != 2147483647) {
32.15775 +                    optionendtagloop: for (;;) {
32.15776 +                      if ('option' == this$static.stack[this$static.currentPtr].name_0) {
32.15777 +                        $pop(this$static);
32.15778 +                        break optionendtagloop;
32.15779 +                      }
32.15780 +                      eltPos = this$static.currentPtr;
32.15781 +                      for (;;) {
32.15782 +                        if (this$static.stack[eltPos].name_0 == 'option') {
32.15783 +                          $generateImpliedEndTags(this$static);
32.15784 +                          while (this$static.currentPtr >= eltPos) {
32.15785 +                            $pop(this$static);
32.15786 +                          }
32.15787 +                          break optionendtagloop;
32.15788 +                        }
32.15789 +                        --eltPos;
32.15790 +                      }
32.15791 +                    }
32.15792 +                  }
32.15793 +
32.15794 +                  $reconstructTheActiveFormattingElements(this$static);
32.15795 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15796 +                  attributes = null;
32.15797 +                  break starttagloop;
32.15798 +                case 53:
32.15799 +                  eltPos = $findLastInScope(this$static, 'ruby');
32.15800 +                  if (eltPos != 2147483647) {
32.15801 +                    $generateImpliedEndTags(this$static);
32.15802 +                  }
32.15803 +
32.15804 +                  if (eltPos != this$static.currentPtr) {
32.15805 +                    while (this$static.currentPtr > eltPos) {
32.15806 +                      $pop(this$static);
32.15807 +                    }
32.15808 +                  }
32.15809 +
32.15810 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15811 +                  attributes = null;
32.15812 +                  break starttagloop;
32.15813 +                case 17:
32.15814 +                  $reconstructTheActiveFormattingElements(this$static);
32.15815 +                  attributes.mode = 1;
32.15816 +                  if (selfClosing) {
32.15817 +                    $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1998/Math/MathML', elementName, attributes);
32.15818 +                    selfClosing = false;
32.15819 +                  }
32.15820 +                   else {
32.15821 +                    $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1998/Math/MathML', elementName, attributes);
32.15822 +                    this$static.foreignFlag = 0;
32.15823 +                  }
32.15824 +
32.15825 +                  attributes = null;
32.15826 +                  break starttagloop;
32.15827 +                case 19:
32.15828 +                  $reconstructTheActiveFormattingElements(this$static);
32.15829 +                  attributes.mode = 2;
32.15830 +                  if (selfClosing) {
32.15831 +                    $appendVoidElementToCurrentMayFosterCamelCase(this$static, 'http://www.w3.org/2000/svg', elementName, attributes);
32.15832 +                    selfClosing = false;
32.15833 +                  }
32.15834 +                   else {
32.15835 +                    $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/2000/svg', elementName, attributes);
32.15836 +                    this$static.foreignFlag = 0;
32.15837 +                  }
32.15838 +
32.15839 +                  attributes = null;
32.15840 +                  break starttagloop;
32.15841 +                case 6:
32.15842 +                case 7:
32.15843 +                case 8:
32.15844 +                case 39:
32.15845 +                case 37:
32.15846 +                case 40:
32.15847 +                case 10:
32.15848 +                case 11:
32.15849 +                case 20:
32.15850 +                  break starttagloop;
32.15851 +                case 62:
32.15852 +                  $reconstructTheActiveFormattingElements(this$static);
32.15853 +                  $appendToCurrentNodeAndPushElementMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15854 +                  attributes = null;
32.15855 +                  break starttagloop;
32.15856 +                default:$reconstructTheActiveFormattingElements(this$static);
32.15857 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15858 +                  attributes = null;
32.15859 +                  break starttagloop;
32.15860 +              }
32.15861 +            }
32.15862 +
32.15863 +          case 3:
32.15864 +            inheadloop: for (;;) {
32.15865 +              switch (group) {
32.15866 +                case 23:
32.15867 +                  $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15868 +                  $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.15869 +                  attributes = null;
32.15870 +                  break starttagloop;
32.15871 +                case 2:
32.15872 +                case 54:
32.15873 +                  $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15874 +                  selfClosing = false;
32.15875 +                  attributes = null;
32.15876 +                  break starttagloop;
32.15877 +                case 18:
32.15878 +                case 16:
32.15879 +                  break inheadloop;
32.15880 +                case 36:
32.15881 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15882 +                  this$static.originalMode = this$static.mode;
32.15883 +                  this$static.mode = 20;
32.15884 +                  $setContentModelFlag_0(this$static.tokenizer, 1, elementName);
32.15885 +                  attributes = null;
32.15886 +                  break starttagloop;
32.15887 +                case 26:
32.15888 +                  {
32.15889 +                    $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15890 +                    this$static.mode = 4;
32.15891 +                  }
32.15892 +
32.15893 +                  attributes = null;
32.15894 +                  break starttagloop;
32.15895 +                case 31:
32.15896 +                case 33:
32.15897 +                case 25:
32.15898 +                  $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15899 +                  this$static.originalMode = this$static.mode;
32.15900 +                  this$static.mode = 20;
32.15901 +                  $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.15902 +                  attributes = null;
32.15903 +                  break starttagloop;
32.15904 +                case 20:
32.15905 +                  break starttagloop;
32.15906 +                default:$pop(this$static);
32.15907 +                  this$static.mode = 5;
32.15908 +                  continue starttagloop;
32.15909 +              }
32.15910 +            }
32.15911 +
32.15912 +          case 4:
32.15913 +            switch (group) {
32.15914 +              case 23:
32.15915 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15916 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.15917 +                attributes = null;
32.15918 +                break starttagloop;
32.15919 +              case 16:
32.15920 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15921 +                selfClosing = false;
32.15922 +                attributes = null;
32.15923 +                break starttagloop;
32.15924 +              case 18:
32.15925 +                $checkMetaCharset(this$static, attributes);
32.15926 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15927 +                selfClosing = false;
32.15928 +                attributes = null;
32.15929 +                break starttagloop;
32.15930 +              case 33:
32.15931 +              case 25:
32.15932 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15933 +                this$static.originalMode = this$static.mode;
32.15934 +                this$static.mode = 20;
32.15935 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.15936 +                attributes = null;
32.15937 +                break starttagloop;
32.15938 +              case 20:
32.15939 +                break starttagloop;
32.15940 +              case 26:
32.15941 +                break starttagloop;
32.15942 +              default:$pop(this$static);
32.15943 +                this$static.mode = 3;
32.15944 +                continue;
32.15945 +            }
32.15946 +
32.15947 +          case 9:
32.15948 +            switch (group) {
32.15949 +              case 23:
32.15950 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15951 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.15952 +                attributes = null;
32.15953 +                break starttagloop;
32.15954 +              case 7:
32.15955 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15956 +                selfClosing = false;
32.15957 +                attributes = null;
32.15958 +                break starttagloop;
32.15959 +              default:if (this$static.currentPtr == 0) {
32.15960 +                  break starttagloop;
32.15961 +                }
32.15962 +
32.15963 +                $pop(this$static);
32.15964 +                this$static.mode = 7;
32.15965 +                continue;
32.15966 +            }
32.15967 +
32.15968 +          case 14:
32.15969 +            switch (group) {
32.15970 +              case 6:
32.15971 +              case 39:
32.15972 +              case 37:
32.15973 +              case 40:
32.15974 +              case 34:
32.15975 +                $endSelect(this$static);
32.15976 +                continue;
32.15977 +            }
32.15978 +
32.15979 +          case 13:
32.15980 +            switch (group) {
32.15981 +              case 23:
32.15982 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.15983 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.15984 +                attributes = null;
32.15985 +                break starttagloop;
32.15986 +              case 28:
32.15987 +                if ('option' == this$static.stack[this$static.currentPtr].name_0) {
32.15988 +                  $pop(this$static);
32.15989 +                }
32.15990 +
32.15991 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.15992 +                attributes = null;
32.15993 +                break starttagloop;
32.15994 +              case 27:
32.15995 +                if ('option' == this$static.stack[this$static.currentPtr].name_0) {
32.15996 +                  $pop(this$static);
32.15997 +                }
32.15998 +
32.15999 +                if ('optgroup' == this$static.stack[this$static.currentPtr].name_0) {
32.16000 +                  $pop(this$static);
32.16001 +                }
32.16002 +
32.16003 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16004 +                attributes = null;
32.16005 +                break starttagloop;
32.16006 +              case 32:
32.16007 +                eltPos = $findLastInTableScope(this$static, name);
32.16008 +                if (eltPos == 2147483647) {
32.16009 +                  break starttagloop;
32.16010 +                }
32.16011 +                 else {
32.16012 +                  while (this$static.currentPtr >= eltPos) {
32.16013 +                    $pop(this$static);
32.16014 +                  }
32.16015 +                  $resetTheInsertionMode(this$static);
32.16016 +                  break starttagloop;
32.16017 +                }
32.16018 +
32.16019 +              case 13:
32.16020 +              case 35:
32.16021 +                $endSelect(this$static);
32.16022 +                continue;
32.16023 +              case 31:
32.16024 +                $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16025 +                this$static.originalMode = this$static.mode;
32.16026 +                this$static.mode = 20;
32.16027 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.16028 +                attributes = null;
32.16029 +                break starttagloop;
32.16030 +              default:break starttagloop;
32.16031 +            }
32.16032 +
32.16033 +          case 15:
32.16034 +            switch (group) {
32.16035 +              case 23:
32.16036 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.16037 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.16038 +                attributes = null;
32.16039 +                break starttagloop;
32.16040 +              default:this$static.mode = 6;
32.16041 +                continue;
32.16042 +            }
32.16043 +
32.16044 +          case 16:
32.16045 +            switch (group) {
32.16046 +              case 11:
32.16047 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16048 +                attributes = null;
32.16049 +                break starttagloop;
32.16050 +              case 10:
32.16051 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16052 +                selfClosing = false;
32.16053 +                attributes = null;
32.16054 +                break starttagloop;
32.16055 +            }
32.16056 +
32.16057 +          case 17:
32.16058 +            switch (group) {
32.16059 +              case 23:
32.16060 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.16061 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.16062 +                attributes = null;
32.16063 +                break starttagloop;
32.16064 +              case 25:
32.16065 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16066 +                this$static.originalMode = this$static.mode;
32.16067 +                this$static.mode = 20;
32.16068 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.16069 +                attributes = null;
32.16070 +                break starttagloop;
32.16071 +              default:break starttagloop;
32.16072 +            }
32.16073 +
32.16074 +          case 0:
32.16075 +            $documentModeInternal(this$static, ($clinit_78() , QUIRKS_MODE));
32.16076 +            this$static.mode = 1;
32.16077 +            continue;
32.16078 +          case 1:
32.16079 +            switch (group) {
32.16080 +              case 23:
32.16081 +                if (attributes == ($clinit_91() , EMPTY_ATTRIBUTES)) {
32.16082 +                  $appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
32.16083 +                }
32.16084 +                 else {
32.16085 +                  $appendHtmlElementToDocumentAndPush(this$static, attributes);
32.16086 +                }
32.16087 +
32.16088 +                this$static.mode = 2;
32.16089 +                attributes = null;
32.16090 +                break starttagloop;
32.16091 +              default:$appendHtmlElementToDocumentAndPush(this$static, $emptyAttributes(this$static.tokenizer));
32.16092 +                this$static.mode = 2;
32.16093 +                continue;
32.16094 +            }
32.16095 +
32.16096 +          case 2:
32.16097 +            switch (group) {
32.16098 +              case 23:
32.16099 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.16100 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.16101 +                attributes = null;
32.16102 +                break starttagloop;
32.16103 +              case 20:
32.16104 +                $appendToCurrentNodeAndPushHeadElement(this$static, attributes);
32.16105 +                this$static.mode = 3;
32.16106 +                attributes = null;
32.16107 +                break starttagloop;
32.16108 +              default:$appendToCurrentNodeAndPushHeadElement(this$static, ($clinit_91() , EMPTY_ATTRIBUTES));
32.16109 +                this$static.mode = 3;
32.16110 +                continue;
32.16111 +            }
32.16112 +
32.16113 +          case 5:
32.16114 +            switch (group) {
32.16115 +              case 23:
32.16116 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.16117 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.16118 +                attributes = null;
32.16119 +                break starttagloop;
32.16120 +              case 3:
32.16121 +                if (attributes.length_0 == 0) {
32.16122 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), $emptyAttributes(this$static.tokenizer));
32.16123 +                }
32.16124 +                 else {
32.16125 +                  $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), attributes);
32.16126 +                }
32.16127 +
32.16128 +                this$static.mode = 21;
32.16129 +                attributes = null;
32.16130 +                break starttagloop;
32.16131 +              case 11:
32.16132 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16133 +                this$static.mode = 16;
32.16134 +                attributes = null;
32.16135 +                break starttagloop;
32.16136 +              case 2:
32.16137 +                $pushHeadPointerOntoStack(this$static);
32.16138 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16139 +                selfClosing = false;
32.16140 +                $pop(this$static);
32.16141 +                attributes = null;
32.16142 +                break starttagloop;
32.16143 +              case 16:
32.16144 +                $pushHeadPointerOntoStack(this$static);
32.16145 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16146 +                selfClosing = false;
32.16147 +                $pop(this$static);
32.16148 +                attributes = null;
32.16149 +                break starttagloop;
32.16150 +              case 18:
32.16151 +                $checkMetaCharset(this$static, attributes);
32.16152 +                $pushHeadPointerOntoStack(this$static);
32.16153 +                $appendVoidElementToCurrentMayFoster_0(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16154 +                selfClosing = false;
32.16155 +                $pop(this$static);
32.16156 +                attributes = null;
32.16157 +                break starttagloop;
32.16158 +              case 31:
32.16159 +                $pushHeadPointerOntoStack(this$static);
32.16160 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16161 +                this$static.originalMode = this$static.mode;
32.16162 +                this$static.mode = 20;
32.16163 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.16164 +                attributes = null;
32.16165 +                break starttagloop;
32.16166 +              case 33:
32.16167 +              case 25:
32.16168 +                $pushHeadPointerOntoStack(this$static);
32.16169 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16170 +                this$static.originalMode = this$static.mode;
32.16171 +                this$static.mode = 20;
32.16172 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.16173 +                attributes = null;
32.16174 +                break starttagloop;
32.16175 +              case 36:
32.16176 +                $pushHeadPointerOntoStack(this$static);
32.16177 +                $appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16178 +                this$static.originalMode = this$static.mode;
32.16179 +                this$static.mode = 20;
32.16180 +                $setContentModelFlag_0(this$static.tokenizer, 1, elementName);
32.16181 +                attributes = null;
32.16182 +                break starttagloop;
32.16183 +              case 20:
32.16184 +                break starttagloop;
32.16185 +              default:$appendToCurrentNodeAndPushElement(this$static, 'http://www.w3.org/1999/xhtml', ($clinit_89() , BODY), $emptyAttributes(this$static.tokenizer));
32.16186 +                this$static.mode = 21;
32.16187 +                continue;
32.16188 +            }
32.16189 +
32.16190 +          case 18:
32.16191 +            switch (group) {
32.16192 +              case 23:
32.16193 +                $processNonNcNames(attributes, this$static, this$static.namePolicy);
32.16194 +                $addAttributesToElement(this$static, this$static.stack[0].node, attributes);
32.16195 +                attributes = null;
32.16196 +                break starttagloop;
32.16197 +              default:this$static.mode = 6;
32.16198 +                continue;
32.16199 +            }
32.16200 +
32.16201 +          case 19:
32.16202 +            switch (group) {
32.16203 +              case 25:
32.16204 +                $appendToCurrentNodeAndPushElementMayFoster(this$static, 'http://www.w3.org/1999/xhtml', elementName, attributes);
32.16205 +                this$static.originalMode = this$static.mode;
32.16206 +                this$static.mode = 20;
32.16207 +                $setContentModelFlag_0(this$static.tokenizer, 2, elementName);
32.16208 +                attributes = null;
32.16209 +                break starttagloop;
32.16210 +              default:break starttagloop;
32.16211 +            }
32.16212 +
32.16213 +        }
32.16214 +
32.16215 +    }
32.16216 +  }
32.16217 +  if (needsPostProcessing && this$static.foreignFlag == 0 && !$hasForeignInScope(this$static)) {
32.16218 +    this$static.foreignFlag = 1;
32.16219 +  }
32.16220 +  attributes != ($clinit_91() , EMPTY_ATTRIBUTES);
32.16221 +}
32.16222 +
32.16223 +function $startTokenization(this$static, self){
32.16224 +  var elt, node;
32.16225 +  this$static.tokenizer = self;
32.16226 +  this$static.stack = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 51, 11, 64, 0);
32.16227 +  this$static.listOfActiveFormattingElements = initDim(_3Lnu_validator_htmlparser_impl_StackNode_2_classLit, 51, 11, 64, 0);
32.16228 +  this$static.needToDropLF = false;
32.16229 +  this$static.originalMode = 0;
32.16230 +  this$static.currentPtr = -1;
32.16231 +  this$static.listPtr = -1;
32.16232 +  this$static.formPointer = null;
32.16233 +  this$static.headPointer = null;
32.16234 +  this$static.html4 = false;
32.16235 +  $clearImpl(this$static.idLocations);
32.16236 +  this$static.wantingComments = this$static.wantingComments;
32.16237 +  this$static.script = null;
32.16238 +  this$static.placeholder = null;
32.16239 +  this$static.readyToRun = false;
32.16240 +  this$static.charBufferLen = 0;
32.16241 +  this$static.charBuffer = initDim(_3C_classLit, 42, -1, 1024, 1);
32.16242 +  if (this$static.fragment) {
32.16243 +    elt = $createHtmlElementSetAsRoot(this$static, $emptyAttributes(this$static.tokenizer));
32.16244 +    node = $StackNode_0(new StackNode(), 'http://www.w3.org/1999/xhtml', ($clinit_89() , HTML_0), elt);
32.16245 +    ++this$static.currentPtr;
32.16246 +    this$static.stack[this$static.currentPtr] = node;
32.16247 +    $resetTheInsertionMode(this$static);
32.16248 +    if ('title' == this$static.contextName || 'textarea' == this$static.contextName) {
32.16249 +      $setContentModelFlag(this$static.tokenizer, 1);
32.16250 +    }
32.16251 +     else if ('style' == this$static.contextName || 'script' == this$static.contextName || 'xmp' == this$static.contextName || 'iframe' == this$static.contextName || 'noembed' == this$static.contextName || 'noframes' == this$static.contextName) {
32.16252 +      $setContentModelFlag(this$static.tokenizer, 2);
32.16253 +    }
32.16254 +     else if ('plaintext' == this$static.contextName) {
32.16255 +      $setContentModelFlag(this$static.tokenizer, 3);
32.16256 +    }
32.16257 +     else {
32.16258 +      $setContentModelFlag(this$static.tokenizer, 0);
32.16259 +    }
32.16260 +    this$static.contextName = null;
32.16261 +  }
32.16262 +   else {
32.16263 +    this$static.mode = 0;
32.16264 +    this$static.foreignFlag = 1;
32.16265 +  }
32.16266 +}
32.16267 +
32.16268 +function extractCharsetFromContent(attributeValue){
32.16269 +  var buffer, c, charset, charsetState, end, i, start;
32.16270 +  charsetState = 0;
32.16271 +  start = -1;
32.16272 +  end = -1;
32.16273 +  buffer = $toCharArray(attributeValue);
32.16274 +  charsetloop: for (i = 0; i < buffer.length; ++i) {
32.16275 +    c = buffer[i];
32.16276 +    switch (charsetState) {
32.16277 +      case 0:
32.16278 +        switch (c) {
32.16279 +          case 99:
32.16280 +          case 67:
32.16281 +            charsetState = 1;
32.16282 +            continue;
32.16283 +          default:continue;
32.16284 +        }
32.16285 +
32.16286 +      case 1:
32.16287 +        switch (c) {
32.16288 +          case 104:
32.16289 +          case 72:
32.16290 +            charsetState = 2;
32.16291 +            continue;
32.16292 +          default:charsetState = 0;
32.16293 +            continue;
32.16294 +        }
32.16295 +
32.16296 +      case 2:
32.16297 +        switch (c) {
32.16298 +          case 97:
32.16299 +          case 65:
32.16300 +            charsetState = 3;
32.16301 +            continue;
32.16302 +          default:charsetState = 0;
32.16303 +            continue;
32.16304 +        }
32.16305 +
32.16306 +      case 3:
32.16307 +        switch (c) {
32.16308 +          case 114:
32.16309 +          case 82:
32.16310 +            charsetState = 4;
32.16311 +            continue;
32.16312 +          default:charsetState = 0;
32.16313 +            continue;
32.16314 +        }
32.16315 +
32.16316 +      case 4:
32.16317 +        switch (c) {
32.16318 +          case 115:
32.16319 +          case 83:
32.16320 +            charsetState = 5;
32.16321 +            continue;
32.16322 +          default:charsetState = 0;
32.16323 +            continue;
32.16324 +        }
32.16325 +
32.16326 +      case 5:
32.16327 +        switch (c) {
32.16328 +          case 101:
32.16329 +          case 69:
32.16330 +            charsetState = 6;
32.16331 +            continue;
32.16332 +          default:charsetState = 0;
32.16333 +            continue;
32.16334 +        }
32.16335 +
32.16336 +      case 6:
32.16337 +        switch (c) {
32.16338 +          case 116:
32.16339 +          case 84:
32.16340 +            charsetState = 7;
32.16341 +            continue;
32.16342 +          default:charsetState = 0;
32.16343 +            continue;
32.16344 +        }
32.16345 +
32.16346 +      case 7:
32.16347 +        switch (c) {
32.16348 +          case 9:
32.16349 +          case 10:
32.16350 +          case 12:
32.16351 +          case 13:
32.16352 +          case 32:
32.16353 +            continue;
32.16354 +          case 61:
32.16355 +            charsetState = 8;
32.16356 +            continue;
32.16357 +          default:return null;
32.16358 +        }
32.16359 +
32.16360 +      case 8:
32.16361 +        switch (c) {
32.16362 +          case 9:
32.16363 +          case 10:
32.16364 +          case 12:
32.16365 +          case 13:
32.16366 +          case 32:
32.16367 +            continue;
32.16368 +          case 39:
32.16369 +            start = i + 1;
32.16370 +            charsetState = 9;
32.16371 +            continue;
32.16372 +          case 34:
32.16373 +            start = i + 1;
32.16374 +            charsetState = 10;
32.16375 +            continue;
32.16376 +          default:start = i;
32.16377 +            charsetState = 11;
32.16378 +            continue;
32.16379 +        }
32.16380 +
32.16381 +      case 9:
32.16382 +        switch (c) {
32.16383 +          case 39:
32.16384 +            end = i;
32.16385 +            break charsetloop;
32.16386 +          default:continue;
32.16387 +        }
32.16388 +
32.16389 +      case 10:
32.16390 +        switch (c) {
32.16391 +          case 34:
32.16392 +            end = i;
32.16393 +            break charsetloop;
32.16394 +          default:continue;
32.16395 +        }
32.16396 +
32.16397 +      case 11:
32.16398 +        switch (c) {
32.16399 +          case 9:
32.16400 +          case 10:
32.16401 +          case 12:
32.16402 +          case 13:
32.16403 +          case 32:
32.16404 +          case 59:
32.16405 +            end = i;
32.16406 +            break charsetloop;
32.16407 +          default:continue;
32.16408 +        }
32.16409 +
32.16410 +    }
32.16411 +  }
32.16412 +  charset = null;
32.16413 +  if (start != -1) {
32.16414 +    if (end == -1) {
32.16415 +      end = buffer.length;
32.16416 +    }
32.16417 +    charset = valueOf_1(buffer, start, end - start);
32.16418 +  }
32.16419 +  return charset;
32.16420 +}
32.16421 +
32.16422 +function getClass_57(){
32.16423 +  return Lnu_validator_htmlparser_impl_TreeBuilder_2_classLit;
32.16424 +}
32.16425 +
32.16426 +function TreeBuilder(){
32.16427 +}
32.16428 +
32.16429 +_ = TreeBuilder.prototype = new Object_0();
32.16430 +_.getClass$ = getClass_57;
32.16431 +_.typeId$ = 0;
32.16432 +_.charBuffer = null;
32.16433 +_.charBufferLen = 0;
32.16434 +_.contextName = null;
32.16435 +_.contextNamespace = null;
32.16436 +_.currentPtr = -1;
32.16437 +_.foreignFlag = 1;
32.16438 +_.formPointer = null;
32.16439 +_.fragment = false;
32.16440 +_.headPointer = null;
32.16441 +_.html4 = false;
32.16442 +_.listOfActiveFormattingElements = null;
32.16443 +_.listPtr = -1;
32.16444 +_.mode = 0;
32.16445 +_.needToDropLF = false;
32.16446 +_.originalMode = 0;
32.16447 +_.quirks = false;
32.16448 +_.stack = null;
32.16449 +_.tokenizer = null;
32.16450 +_.wantingComments = false;
32.16451 +var HTML4_PUBLIC_IDS, ISINDEX_PROMPT, QUIRKY_PUBLIC_IDS;
32.16452 +function $clinit_88(){
32.16453 +  $clinit_88 = nullMethod;
32.16454 +  $clinit_98();
32.16455 +}
32.16456 +
32.16457 +function $accumulateCharacters(this$static, buf, start, length){
32.16458 +  var newBuf, newLen;
32.16459 +  newLen = this$static.charBufferLen + length;
32.16460 +  if (newLen > this$static.charBuffer.length) {
32.16461 +    newBuf = initDim(_3C_classLit, 42, -1, newLen, 1);
32.16462 +    arraycopy(this$static.charBuffer, 0, newBuf, 0, this$static.charBufferLen);
32.16463 +    this$static.charBuffer = newBuf;
32.16464 +  }
32.16465 +  arraycopy(buf, start, this$static.charBuffer, this$static.charBufferLen, length);
32.16466 +  this$static.charBufferLen = newLen;
32.16467 +}
32.16468 +
32.16469 +function $insertFosterParentedCharacters_0(this$static, buf, start, length, table, stackParent){
32.16470 +  var end;
32.16471 +  $insertFosterParentedCharacters(this$static, (end = start + length , __checkBounds(buf.length, start, end) , __valueOf(buf, start, end)), table, stackParent);
32.16472 +}
32.16473 +
32.16474 +function getClass_50(){
32.16475 +  return Lnu_validator_htmlparser_impl_CoalescingTreeBuilder_2_classLit;
32.16476 +}
32.16477 +
32.16478 +function CoalescingTreeBuilder(){
32.16479 +}
32.16480 +
32.16481 +_ = CoalescingTreeBuilder.prototype = new TreeBuilder();
32.16482 +_.getClass$ = getClass_50;
32.16483 +_.typeId$ = 0;
32.16484 +function $clinit_82(){
32.16485 +  $clinit_82 = nullMethod;
32.16486 +  $clinit_88();
32.16487 +}
32.16488 +
32.16489 +function $BrowserTreeBuilder(this$static, document_0){
32.16490 +  $clinit_82();
32.16491 +  this$static.doctypeExpectation = ($clinit_77() , HTML);
32.16492 +  this$static.namePolicy = ($clinit_80() , ALTER_INFOSET);
32.16493 +  this$static.idLocations = $HashMap(new HashMap());
32.16494 +  this$static.fragment = false;
32.16495 +  this$static.scriptStack = $LinkedList(new LinkedList());
32.16496 +  this$static.document_0 = document_0;
32.16497 +  installExplorerCreateElementNS(document_0);
32.16498 +  return this$static;
32.16499 +}
32.16500 +
32.16501 +function $addAttributesToElement(this$static, element, attributes){
32.16502 +  var $e0, e, i, localName, uri;
32.16503 +  try {
32.16504 +    for (i = 0; i < attributes.length_0; ++i) {
32.16505 +      localName = $getLocalName(attributes, i);
32.16506 +      uri = $getURI(attributes, i);
32.16507 +      if (!element.hasAttributeNS(uri, localName)) {
32.16508 +        element.setAttributeNS(uri, localName, $getValue(attributes, i));
32.16509 +      }
32.16510 +    }
32.16511 +  }
32.16512 +   catch ($e0) {
32.16513 +    $e0 = caught($e0);
32.16514 +    if (instanceOf($e0, 19)) {
32.16515 +      e = $e0;
32.16516 +      $fatal_0(this$static, e);
32.16517 +    }
32.16518 +     else 
32.16519 +      throw $e0;
32.16520 +  }
32.16521 +}
32.16522 +
32.16523 +function $appendCharacters(this$static, parent, text){
32.16524 +  var $e0, e;
32.16525 +  try {
32.16526 +    if (parent == this$static.placeholder) {
32.16527 +      this$static.script.appendChild(this$static.document_0.createTextNode(text));
32.16528 +    }
32.16529 +    parent.appendChild(this$static.document_0.createTextNode(text));
32.16530 +  }
32.16531 +   catch ($e0) {
32.16532 +    $e0 = caught($e0);
32.16533 +    if (instanceOf($e0, 19)) {
32.16534 +      e = $e0;
32.16535 +      $fatal_0(this$static, e);
32.16536 +    }
32.16537 +     else 
32.16538 +      throw $e0;
32.16539 +  }
32.16540 +}
32.16541 +
32.16542 +function $appendChildrenToNewParent(this$static, oldParent, newParent){
32.16543 +  var $e0, e;
32.16544 +  try {
32.16545 +    while (oldParent.hasChildNodes()) {
32.16546 +      newParent.appendChild(oldParent.firstChild);
32.16547 +    }
32.16548 +  }
32.16549 +   catch ($e0) {
32.16550 +    $e0 = caught($e0);
32.16551 +    if (instanceOf($e0, 19)) {
32.16552 +      e = $e0;
32.16553 +      $fatal_0(this$static, e);
32.16554 +    }
32.16555 +     else 
32.16556 +      throw $e0;
32.16557 +  }
32.16558 +}
32.16559 +
32.16560 +function $appendComment(this$static, parent, comment){
32.16561 +  var $e0, e;
32.16562 +  try {
32.16563 +    if (parent == this$static.placeholder) {
32.16564 +      this$static.script.appendChild(this$static.document_0.createComment(comment));
32.16565 +    }
32.16566 +    parent.appendChild(this$static.document_0.createComment(comment));
32.16567 +  }
32.16568 +   catch ($e0) {
32.16569 +    $e0 = caught($e0);
32.16570 +    if (instanceOf($e0, 19)) {
32.16571 +      e = $e0;
32.16572 +      $fatal_0(this$static, e);
32.16573 +    }
32.16574 +     else 
32.16575 +      throw $e0;
32.16576 +  }
32.16577 +}
32.16578 +
32.16579 +function $appendCommentToDocument(this$static, comment){
32.16580 +  var $e0, e;
32.16581 +  try {
32.16582 +    this$static.document_0.appendChild(this$static.document_0.createComment(comment));
32.16583 +  }
32.16584 +   catch ($e0) {
32.16585 +    $e0 = caught($e0);
32.16586 +    if (instanceOf($e0, 19)) {
32.16587 +      e = $e0;
32.16588 +      $fatal_0(this$static, e);
32.16589 +    }
32.16590 +     else 
32.16591 +      throw $e0;
32.16592 +  }
32.16593 +}
32.16594 +
32.16595 +function $appendElement(this$static, child, newParent){
32.16596 +  var $e0, e;
32.16597 +  try {
32.16598 +    if (newParent == this$static.placeholder) {
32.16599 +      this$static.script.appendChild(child.cloneNode(true));
32.16600 +    }
32.16601 +    newParent.appendChild(child);
32.16602 +  }
32.16603 +   catch ($e0) {
32.16604 +    $e0 = caught($e0);
32.16605 +    if (instanceOf($e0, 19)) {
32.16606 +      e = $e0;
32.16607 +      $fatal_0(this$static, e);
32.16608 +    }
32.16609 +     else 
32.16610 +      throw $e0;
32.16611 +  }
32.16612 +}
32.16613 +
32.16614 +function $createElement(this$static, ns, name, attributes){
32.16615 +  var $e0, e, i, rv;
32.16616 +  try {
32.16617 +    rv = this$static.document_0.createElementNS(ns, name);
32.16618 +    for (i = 0; i < attributes.length_0; ++i) {
32.16619 +      rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue(attributes, i));
32.16620 +    }
32.16621 +    if ('script' == name) {
32.16622 +      if (this$static.placeholder) {
32.16623 +        $addLast(this$static.scriptStack, $BrowserTreeBuilder$ScriptHolder(new BrowserTreeBuilder$ScriptHolder(), this$static.script, this$static.placeholder));
32.16624 +      }
32.16625 +      this$static.script = rv;
32.16626 +      this$static.placeholder = this$static.document_0.createElementNS('http://n.validator.nu/placeholder/', 'script');
32.16627 +      rv = this$static.placeholder;
32.16628 +      for (i = 0; i < attributes.length_0; ++i) {
32.16629 +        rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue(attributes, i));
32.16630 +      }
32.16631 +    }
32.16632 +    return rv;
32.16633 +  }
32.16634 +   catch ($e0) {
32.16635 +    $e0 = caught($e0);
32.16636 +    if (instanceOf($e0, 19)) {
32.16637 +      e = $e0;
32.16638 +      $fatal_0(this$static, e);
32.16639 +      throw $RuntimeException(new RuntimeException(), 'Unreachable');
32.16640 +    }
32.16641 +     else 
32.16642 +      throw $e0;
32.16643 +  }
32.16644 +}
32.16645 +
32.16646 +function $createElement_0(this$static, ns, name, attributes){
32.16647 +  var $e0, e, rv;
32.16648 +  try {
32.16649 +    rv = $createElement(this$static, ns, name, attributes);
32.16650 +    return rv;
32.16651 +  }
32.16652 +   catch ($e0) {
32.16653 +    $e0 = caught($e0);
32.16654 +    if (instanceOf($e0, 19)) {
32.16655 +      e = $e0;
32.16656 +      $fatal_0(this$static, e);
32.16657 +      return null;
32.16658 +    }
32.16659 +     else 
32.16660 +      throw $e0;
32.16661 +  }
32.16662 +}
32.16663 +
32.16664 +function $createHtmlElementSetAsRoot(this$static, attributes){
32.16665 +  var $e0, e, i, rv;
32.16666 +  try {
32.16667 +    rv = this$static.document_0.createElementNS('http://www.w3.org/1999/xhtml', 'html');
32.16668 +    for (i = 0; i < attributes.length_0; ++i) {
32.16669 +      rv.setAttributeNS($getURI(attributes, i), $getLocalName(attributes, i), $getValue(attributes, i));
32.16670 +    }
32.16671 +    this$static.document_0.appendChild(rv);
32.16672 +    return rv;
32.16673 +  }
32.16674 +   catch ($e0) {
32.16675 +    $e0 = caught($e0);
32.16676 +    if (instanceOf($e0, 19)) {
32.16677 +      e = $e0;
32.16678 +      $fatal_0(this$static, e);
32.16679 +      throw $RuntimeException(new RuntimeException(), 'Unreachable');
32.16680 +    }
32.16681 +     else 
32.16682 +      throw $e0;
32.16683 +  }
32.16684 +}
32.16685 +
32.16686 +function $detachFromParent(this$static, element){
32.16687 +  var $e0, e, parent;
32.16688 +  try {
32.16689 +    parent = element.parentNode;
32.16690 +    if (parent) {
32.16691 +      parent.removeChild(element);
32.16692 +    }
32.16693 +  }
32.16694 +   catch ($e0) {
32.16695 +    $e0 = caught($e0);
32.16696 +    if (instanceOf($e0, 19)) {
32.16697 +      e = $e0;
32.16698 +      $fatal_0(this$static, e);
32.16699 +    }
32.16700 +     else 
32.16701 +      throw $e0;
32.16702 +  }
32.16703 +}
32.16704 +
32.16705 +function $elementPopped(this$static, ns, name, node){
32.16706 +  if (node == this$static.placeholder) {
32.16707 +    this$static.readyToRun = true;
32.16708 +    this$static.tokenizer.shouldSuspend = true;
32.16709 +  }
32.16710 +  __elementPopped__(ns, name, node);
32.16711 +}
32.16712 +
32.16713 +function $getDocument(this$static){
32.16714 +  var rv;
32.16715 +  rv = this$static.document_0;
32.16716 +  this$static.document_0 = null;
32.16717 +  return rv;
32.16718 +}
32.16719 +
32.16720 +function $insertFosterParentedCharacters(this$static, text, table, stackParent){
32.16721 +  var $e0, child, e, parent;
32.16722 +  try {
32.16723 +    child = this$static.document_0.createTextNode(text);
32.16724 +    parent = table.parentNode;
32.16725 +    if (!!parent && parent.nodeType == 1) {
32.16726 +      parent.insertBefore(child, table);
32.16727 +    }
32.16728 +     else {
32.16729 +      stackParent.appendChild(child);
32.16730 +    }
32.16731 +  }
32.16732 +   catch ($e0) {
32.16733 +    $e0 = caught($e0);
32.16734 +    if (instanceOf($e0, 19)) {
32.16735 +      e = $e0;
32.16736 +      $fatal_0(this$static, e);
32.16737 +    }
32.16738 +     else 
32.16739 +      throw $e0;
32.16740 +  }
32.16741 +}
32.16742 +
32.16743 +function $insertFosterParentedChild(this$static, child, table, stackParent){
32.16744 +  var $e0, e, parent;
32.16745 +  parent = table.parentNode;
32.16746 +  try {
32.16747 +    if (!!parent && parent.nodeType == 1) {
32.16748 +      parent.insertBefore(child, table);
32.16749 +    }
32.16750 +     else {
32.16751 +      stackParent.appendChild(child);
32.16752 +    }
32.16753 +  }
32.16754 +   catch ($e0) {
32.16755 +    $e0 = caught($e0);
32.16756 +    if (instanceOf($e0, 19)) {
32.16757 +      e = $e0;
32.16758 +      $fatal_0(this$static, e);
32.16759 +    }
32.16760 +     else 
32.16761 +      throw $e0;
32.16762 +  }
32.16763 +}
32.16764 +
32.16765 +function $maybeRunScript(this$static){
32.16766 +  var scriptHolder;
32.16767 +  if (this$static.readyToRun) {
32.16768 +    this$static.readyToRun = false;
32.16769 +    replace_0(this$static.placeholder, this$static.script);
32.16770 +    if (this$static.scriptStack.size == 0) {
32.16771 +      this$static.script = null;
32.16772 +      this$static.placeholder = null;
32.16773 +    }
32.16774 +     else {
32.16775 +      scriptHolder = dynamicCast($removeLast(this$static.scriptStack), 20);
32.16776 +      this$static.script = scriptHolder.script;
32.16777 +      this$static.placeholder = scriptHolder.placeholder;
32.16778 +    }
32.16779 +  }
32.16780 +}
32.16781 +
32.16782 +function getClass_45(){
32.16783 +  return Lnu_validator_htmlparser_gwt_BrowserTreeBuilder_2_classLit;
32.16784 +}
32.16785 +
32.16786 +function installExplorerCreateElementNS(doc){
32.16787 +  if (!doc.createElementNS) {
32.16788 +    doc.createElementNS = function(uri, local){
32.16789 +      if ('http://www.w3.org/1999/xhtml' == uri) {
32.16790 +        return doc.createElement(local);
32.16791 +      }
32.16792 +       else if ('http://www.w3.org/1998/Math/MathML' == uri) {
32.16793 +        if (!doc.mathplayerinitialized) {
32.16794 +          var obj = document.createElement('object');
32.16795 +          obj.setAttribute('id', 'mathplayer');
32.16796 +          obj.setAttribute('classid', 'clsid:32F66A20-7614-11D4-BD11-00104BD3F987');
32.16797 +          document.getElementsByTagName('head')[0].appendChild(obj);
32.16798 +          document.namespaces.add('m', 'http://www.w3.org/1998/Math/MathML', '#mathplayer');
32.16799 +          doc.mathplayerinitialized = true;
32.16800 +        }
32.16801 +        return doc.createElement('m:' + local);
32.16802 +      }
32.16803 +       else if ('http://www.w3.org/2000/svg' == uri) {
32.16804 +        if (!doc.renesisinitialized) {
32.16805 +          var obj = document.createElement('object');
32.16806 +          obj.setAttribute('id', 'renesis');
32.16807 +          obj.setAttribute('classid', 'clsid:AC159093-1683-4BA2-9DCF-0C350141D7F2');
32.16808 +          document.getElementsByTagName('head')[0].appendChild(obj);
32.16809 +          document.namespaces.add('s', 'http://www.w3.org/2000/svg', '#renesis');
32.16810 +          doc.renesisinitialized = true;
32.16811 +        }
32.16812 +        return doc.createElement('s:' + local);
32.16813 +      }
32.16814 +       else {
32.16815 +      }
32.16816 +    }
32.16817 +    ;
32.16818 +  }
32.16819 +}
32.16820 +
32.16821 +function replace_0(oldNode, newNode){
32.16822 +  oldNode.parentNode.replaceChild(newNode, oldNode);
32.16823 +  __elementPopped__('', newNode.nodeName, newNode);
32.16824 +}
32.16825 +
32.16826 +function BrowserTreeBuilder(){
32.16827 +}
32.16828 +
32.16829 +_ = BrowserTreeBuilder.prototype = new CoalescingTreeBuilder();
32.16830 +_.getClass$ = getClass_45;
32.16831 +_.typeId$ = 0;
32.16832 +_.document_0 = null;
32.16833 +_.placeholder = null;
32.16834 +_.readyToRun = false;
32.16835 +_.script = null;
32.16836 +function $BrowserTreeBuilder$ScriptHolder(this$static, script, placeholder){
32.16837 +  this$static.script = script;
32.16838 +  this$static.placeholder = placeholder;
32.16839 +  return this$static;
32.16840 +}
32.16841 +
32.16842 +function getClass_44(){
32.16843 +  return Lnu_validator_htmlparser_gwt_BrowserTreeBuilder$ScriptHolder_2_classLit;
32.16844 +}
32.16845 +
32.16846 +function BrowserTreeBuilder$ScriptHolder(){
32.16847 +}
32.16848 +
32.16849 +_ = BrowserTreeBuilder$ScriptHolder.prototype = new Object_0();
32.16850 +_.getClass$ = getClass_44;
32.16851 +_.typeId$ = 34;
32.16852 +_.placeholder = null;
32.16853 +_.script = null;
32.16854 +function $HtmlParser(this$static, document_0){
32.16855 +  this$static.documentWriteBuffer = $StringBuilder(new StringBuilder());
32.16856 +  this$static.bufferStack = $LinkedList(new LinkedList());
32.16857 +  this$static.domTreeBuilder = $BrowserTreeBuilder(new BrowserTreeBuilder(), document_0);
32.16858 +  this$static.tokenizer = $ErrorReportingTokenizer(new ErrorReportingTokenizer(), this$static.domTreeBuilder);
32.16859 +  this$static.domTreeBuilder.namePolicy = ($clinit_80() , ALTER_INFOSET);
32.16860 +  this$static.tokenizer.commentPolicy = ALTER_INFOSET;
32.16861 +  this$static.tokenizer.contentNonXmlCharPolicy = ALTER_INFOSET;
32.16862 +  this$static.tokenizer.contentSpacePolicy = ALTER_INFOSET;
32.16863 +  this$static.tokenizer.namePolicy = ALTER_INFOSET;
32.16864 +  $setXmlnsPolicy(this$static.tokenizer, ALTER_INFOSET);
32.16865 +  return this$static;
32.16866 +}
32.16867 +
32.16868 +function $parse(this$static, source, useSetTimeouts, callback){
32.16869 +  this$static.parseEndListener = callback;
32.16870 +  $setFragmentContext(this$static.domTreeBuilder, null);
32.16871 +  this$static.lastWasCR = false;
32.16872 +  this$static.ending = false;
32.16873 +  $setLength(this$static.documentWriteBuffer, 0);
32.16874 +  this$static.streamLength = source.length;
32.16875 +  this$static.stream = $UTF16Buffer(new UTF16Buffer(), $toCharArray(source), 0, this$static.streamLength < 512?this$static.streamLength:512);
32.16876 +  $clear(this$static.bufferStack);
32.16877 +  $addLast(this$static.bufferStack, this$static.stream);
32.16878 +  $setFragmentContext(this$static.domTreeBuilder, null);
32.16879 +  $start_0(this$static.tokenizer);
32.16880 +  $pump(this$static, useSetTimeouts);
32.16881 +}
32.16882 +
32.16883 +function $pump(this$static, useSetTimeouts){
32.16884 +  var $e0, buffer, docWriteLen, newBuf, newEnd, timer;
32.16885 +  if (this$static.ending) {
32.16886 +    $end(this$static.tokenizer);
32.16887 +    $getDocument(this$static.domTreeBuilder);
32.16888 +    this$static.parseEndListener.callback();
32.16889 +    return;
32.16890 +  }
32.16891 +  docWriteLen = this$static.documentWriteBuffer.stringLength;
32.16892 +  if (docWriteLen > 0) {
32.16893 +    newBuf = initDim(_3C_classLit, 42, -1, docWriteLen, 1);
32.16894 +    $getChars(this$static.documentWriteBuffer, 0, docWriteLen, newBuf, 0);
32.16895 +    $addLast(this$static.bufferStack, $UTF16Buffer(new UTF16Buffer(), newBuf, 0, docWriteLen));
32.16896 +    $setLength(this$static.documentWriteBuffer, 0);
32.16897 +  }
32.16898 +  for (;;) {
32.16899 +    buffer = dynamicCast($getLast(this$static.bufferStack), 21);
32.16900 +    if (buffer.start >= buffer.end) {
32.16901 +      if (buffer == this$static.stream) {
32.16902 +        if (buffer.end == this$static.streamLength) {
32.16903 +          $eof(this$static.tokenizer);
32.16904 +          this$static.ending = true;
32.16905 +          break;
32.16906 +        }
32.16907 +         else {
32.16908 +          newEnd = buffer.start + 512;
32.16909 +          buffer.end = newEnd < this$static.streamLength?newEnd:this$static.streamLength;
32.16910 +          continue;
32.16911 +        }
32.16912 +      }
32.16913 +       else {
32.16914 +        dynamicCast($removeLast(this$static.bufferStack), 21);
32.16915 +        continue;
32.16916 +      }
32.16917 +    }
32.16918 +    $adjust(buffer, this$static.lastWasCR);
32.16919 +    this$static.lastWasCR = false;
32.16920 +    if (buffer.start < buffer.end) {
32.16921 +      this$static.lastWasCR = $tokenizeBuffer(this$static.tokenizer, buffer);
32.16922 +      $maybeRunScript(this$static.domTreeBuilder);
32.16923 +      break;
32.16924 +    }
32.16925 +     else {
32.16926 +      continue;
32.16927 +    }
32.16928 +  }
32.16929 +  if (useSetTimeouts) {
32.16930 +    timer = $HtmlParser$1(new HtmlParser$1(), this$static);
32.16931 +    $schedule(timer, 1);
32.16932 +  }
32.16933 +   else {
32.16934 +    try {
32.16935 +      $pump(this$static, false);
32.16936 +    }
32.16937 +     catch ($e0) {
32.16938 +      $e0 = caught($e0);
32.16939 +      if (instanceOf($e0, 22)) {
32.16940 +        this$static.ending = true;
32.16941 +      }
32.16942 +       else 
32.16943 +        throw $e0;
32.16944 +    }
32.16945 +  }
32.16946 +}
32.16947 +
32.16948 +function documentWrite(text){
32.16949 +  var buffer;
32.16950 +  buffer = $UTF16Buffer(new UTF16Buffer(), $toCharArray(text), 0, text.length);
32.16951 +  while (buffer.start < buffer.end) {
32.16952 +    $adjust(buffer, this.lastWasCR);
32.16953 +    this.lastWasCR = false;
32.16954 +    if (buffer.start < buffer.end) {
32.16955 +      this.lastWasCR = $tokenizeBuffer(this.tokenizer, buffer);
32.16956 +      $maybeRunScript(this.domTreeBuilder);
32.16957 +    }
32.16958 +  }
32.16959 +}
32.16960 +
32.16961 +function getClass_47(){
32.16962 +  return Lnu_validator_htmlparser_gwt_HtmlParser_2_classLit;
32.16963 +}
32.16964 +
32.16965 +function HtmlParser(){
32.16966 +}
32.16967 +
32.16968 +_ = HtmlParser.prototype = new Object_0();
32.16969 +_.documentWrite = documentWrite;
32.16970 +_.getClass$ = getClass_47;
32.16971 +_.typeId$ = 0;
32.16972 +_.domTreeBuilder = null;
32.16973 +_.ending = false;
32.16974 +_.lastWasCR = false;
32.16975 +_.parseEndListener = null;
32.16976 +_.stream = null;
32.16977 +_.streamLength = 0;
32.16978 +_.tokenizer = null;
32.16979 +function $clinit_83(){
32.16980 +  $clinit_83 = nullMethod;
32.16981 +  $clinit_12();
32.16982 +}
32.16983 +
32.16984 +function $HtmlParser$1(this$static, this$0){
32.16985 +  $clinit_83();
32.16986 +  this$static.this$0 = this$0;
32.16987 +  return this$static;
32.16988 +}
32.16989 +
32.16990 +function $run(this$static){
32.16991 +  var $e0;
32.16992 +  // try {
32.16993 +    $pump(this$static.this$0, true);
32.16994 +  /*}
32.16995 +   catch ($e0) {
32.16996 +    $e0 = caught($e0);
32.16997 +    if (instanceOf($e0, 22)) {
32.16998 +      this$static.this$0.ending = true;
32.16999 +    }
32.17000 +     else 
32.17001 +      throw $e0;
32.17002 +  } */
32.17003 +}
32.17004 +
32.17005 +function getClass_46(){
32.17006 +  return Lnu_validator_htmlparser_gwt_HtmlParser$1_2_classLit;
32.17007 +}
32.17008 +
32.17009 +function HtmlParser$1(){
32.17010 +}
32.17011 +
32.17012 +_ = HtmlParser$1.prototype = new Timer();
32.17013 +_.getClass$ = getClass_46;
32.17014 +_.typeId$ = 35;
32.17015 +_.this$0 = null;
32.17016 +function installDocWrite(doc, parser){
32.17017 +  doc.write = function(){
32.17018 +    if (arguments.length == 0) {
32.17019 +      return;
32.17020 +    }
32.17021 +    var text = arguments[0];
32.17022 +    for (var i = 1; i < arguments.length; i++) {
32.17023 +      text += arguments[i];
32.17024 +    }
32.17025 +    parser.documentWrite(text);
32.17026 +  }
32.17027 +  ;
32.17028 +  doc.writeln = function(){
32.17029 +    if (arguments.length == 0) {
32.17030 +      parser.documentWrite('\n');
32.17031 +      return;
32.17032 +    }
32.17033 +    var text = arguments[0];
32.17034 +    for (var i = 1; i < arguments.length; i++) {
32.17035 +      text += arguments[i];
32.17036 +    }
32.17037 +    text += '\n';
32.17038 +    parser.documentWrite(text);
32.17039 +  }
32.17040 +  ;
32.17041 +}
32.17042 +
32.17043 +function parseHtmlDocument(source, document_0, useSetTimeouts, readyCallback, errorHandler){
32.17044 +  var parser;
32.17045 +  if (!readyCallback) {
32.17046 +    readyCallback = createFunction();
32.17047 +  }
32.17048 +  zapChildren(document_0);
32.17049 +  parser = $HtmlParser(new HtmlParser(), document_0);
32.17050 +  installDocWrite(document_0, parser);
32.17051 +  $parse(parser, source, useSetTimeouts, $ParseEndListener(new ParseEndListener(), readyCallback));
32.17052 +}
32.17053 +
32.17054 +function zapChildren(node){
32.17055 +  while (node.hasChildNodes()) {
32.17056 +    node.removeChild(node.lastChild);
32.17057 +  }
32.17058 +}
32.17059 +
32.17060 +function $ParseEndListener(this$static, callback){
32.17061 +  this$static.callback = callback;
32.17062 +  return this$static;
32.17063 +}
32.17064 +
32.17065 +function getClass_48(){
32.17066 +  return Lnu_validator_htmlparser_gwt_ParseEndListener_2_classLit;
32.17067 +}
32.17068 +
32.17069 +function ParseEndListener(){
32.17070 +}
32.17071 +
32.17072 +_ = ParseEndListener.prototype = new Object_0();
32.17073 +_.getClass$ = getClass_48;
32.17074 +_.typeId$ = 0;
32.17075 +_.callback = null;
32.17076 +function $clinit_87(){
32.17077 +  var arr_32;
32.17078 +  $clinit_87 = nullMethod;
32.17079 +  ALL_NO_NS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['', '', '', '']);
32.17080 +  XMLNS_NS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['', 'http://www.w3.org/2000/xmlns/', 'http://www.w3.org/2000/xmlns/', '']);
32.17081 +  XML_NS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['', 'http://www.w3.org/XML/1998/namespace', 'http://www.w3.org/XML/1998/namespace', '']);
32.17082 +  XLINK_NS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['', 'http://www.w3.org/1999/xlink', 'http://www.w3.org/1999/xlink', '']);
32.17083 +  LANG_NS = initValues(_3Ljava_lang_String_2_classLit, 48, 1, ['', '', '', 'http://www.w3.org/XML/1998/namespace']);
32.17084 +  ALL_NO_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [null, null, null, null]);
32.17085 +  XMLNS_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [null, 'xmlns', 'xmlns', null]);
32.17086 +  XLINK_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [null, 'xlink', 'xlink', null]);
32.17087 +  XML_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [null, 'xml', 'xml', null]);
32.17088 +  LANG_PREFIX = initValues(_3Ljava_lang_String_2_classLit, 48, 1, [null, null, null, 'xml']);
32.17089 +  ALL_NCNAME = initValues(_3Z_classLit, 0, -1, [true, true, true, true]);
32.17090 +  ALL_NO_NCNAME = initValues(_3Z_classLit, 0, -1, [false, false, false, false]);
32.17091 +  D = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('d'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17092 +  K = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('k'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17093 +  R = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('r'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17094 +  X = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('x'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17095 +  Y = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('y'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17096 +  Z = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('z'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17097 +  BY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('by'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17098 +  CX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cx'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17099 +  CY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17100 +  DX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dx'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17101 +  DY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17102 +  G2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('g2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17103 +  G1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('g1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17104 +  FX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fx'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17105 +  FY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17106 +  K4 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('k4'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17107 +  K2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('k2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17108 +  K3 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('k3'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17109 +  K1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('k1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17110 +  ID = $AttributeName_0(new AttributeName(), ALL_NO_NS, SAME_LOCAL('id'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17111 +  IN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('in'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17112 +  U2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('u2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17113 +  U1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('u1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17114 +  RT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rt'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17115 +  RX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rx'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17116 +  RY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ry'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17117 +  TO = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('to'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17118 +  Y2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('y2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17119 +  Y1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('y1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17120 +  X1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('x1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17121 +  X2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('x2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17122 +  ALT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alt'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17123 +  DIR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dir'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17124 +  DUR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dur'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17125 +  END = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('end'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17126 +  FOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('for'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17127 +  IN2 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('in2'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17128 +  MAX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('max'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17129 +  MIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('min'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17130 +  LOW = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('low'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17131 +  REL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rel'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17132 +  REV = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rev'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17133 +  SRC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('src'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17134 +  AXIS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('axis'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17135 +  ABBR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('abbr'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17136 +  BBOX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('bbox'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17137 +  CITE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cite'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17138 +  CODE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('code'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17139 +  BIAS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('bias'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17140 +  COLS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cols'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17141 +  CLIP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('clip'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17142 +  CHAR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('char'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17143 +  BASE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('base'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17144 +  EDGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('edge'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17145 +  DATA = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('data'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17146 +  FILL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fill'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17147 +  FROM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('from'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17148 +  FORM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('form'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17149 +  FACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('face'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17150 +  HIGH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('high'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17151 +  HREF = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('href'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17152 +  OPEN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('open'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17153 +  ICON = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('icon'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17154 +  NAME = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('name'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17155 +  MODE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17156 +  MASK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mask'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17157 +  LINK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('link'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17158 +  LANG = $AttributeName(new AttributeName(), LANG_NS, SAME_LOCAL('lang'), LANG_PREFIX, ALL_NCNAME, false);
32.17159 +  LIST = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('list'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17160 +  TYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('type'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17161 +  WHEN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('when'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17162 +  WRAP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('wrap'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17163 +  TEXT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('text'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17164 +  PATH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('path'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17165 +  PING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ping'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17166 +  REFX = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('refx', 'refX'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17167 +  REFY = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('refy', 'refY'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17168 +  SIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('size'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17169 +  SEED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('seed'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17170 +  ROWS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rows'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17171 +  SPAN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('span'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17172 +  STEP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('step'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17173 +  ROLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('role'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17174 +  XREF = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('xref'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17175 +  ASYNC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('async'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17176 +  ALINK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alink'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17177 +  ALIGN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('align'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17178 +  CLOSE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('close'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17179 +  COLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('color'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17180 +  CLASS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('class'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17181 +  CLEAR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('clear'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17182 +  BEGIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('begin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17183 +  DEPTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('depth'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17184 +  DEFER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('defer'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17185 +  FENCE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fence'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17186 +  FRAME = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('frame'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17187 +  ISMAP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ismap'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17188 +  ONEND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onend'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17189 +  INDEX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('index'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17190 +  ORDER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('order'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17191 +  OTHER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('other'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17192 +  ONCUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oncut'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17193 +  NARGS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('nargs'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17194 +  MEDIA = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('media'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17195 +  LABEL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('label'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17196 +  LOCAL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('local'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17197 +  WIDTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('width'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17198 +  TITLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('title'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17199 +  VLINK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('vlink'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17200 +  VALUE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('value'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17201 +  SLOPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('slope'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17202 +  SHAPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('shape'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17203 +  SCOPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scope'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17204 +  SCALE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scale'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17205 +  SPEED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('speed'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17206 +  STYLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('style'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17207 +  RULES = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rules'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17208 +  STEMH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stemh'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17209 +  STEMV = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stemv'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17210 +  START = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('start'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17211 +  XMLNS = $AttributeName(new AttributeName(), XMLNS_NS, SAME_LOCAL('xmlns'), ALL_NO_PREFIX, initValues(_3Z_classLit, 0, -1, [false, false, false, false]), true);
32.17212 +  ACCEPT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accept'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17213 +  ACCENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17214 +  ASCENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ascent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17215 +  ACTIVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('active'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17216 +  ALTIMG = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('altimg'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17217 +  ACTION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('action'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17218 +  BORDER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('border'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17219 +  CURSOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cursor'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17220 +  COORDS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('coords'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17221 +  FILTER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('filter'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17222 +  FORMAT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('format'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17223 +  HIDDEN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('hidden'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17224 +  HSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('hspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17225 +  HEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('height'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17226 +  ONMOVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmove'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17227 +  ONLOAD = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onload'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17228 +  ONDRAG = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondrag'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17229 +  ORIGIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('origin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17230 +  ONZOOM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onzoom'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17231 +  ONHELP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onhelp'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17232 +  ONSTOP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onstop'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17233 +  ONDROP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondrop'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17234 +  ONBLUR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onblur'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17235 +  OBJECT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('object'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17236 +  OFFSET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('offset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17237 +  ORIENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('orient'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17238 +  ONCOPY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oncopy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17239 +  NOWRAP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('nowrap'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17240 +  NOHREF = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('nohref'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17241 +  MACROS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('macros'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17242 +  METHOD = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('method'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17243 +  LOWSRC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('lowsrc'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17244 +  LSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('lspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17245 +  LQUOTE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('lquote'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17246 +  USEMAP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('usemap'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17247 +  WIDTHS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('widths'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17248 +  TARGET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('target'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17249 +  VALUES = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('values'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17250 +  VALIGN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('valign'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17251 +  VSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('vspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17252 +  POSTER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('poster'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17253 +  POINTS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('points'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17254 +  PROMPT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('prompt'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17255 +  SCOPED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scoped'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17256 +  STRING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('string'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17257 +  SCHEME = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scheme'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17258 +  STROKE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17259 +  RADIUS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('radius'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17260 +  RESULT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('result'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17261 +  REPEAT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('repeat'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17262 +  RSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17263 +  ROTATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rotate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17264 +  RQUOTE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rquote'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17265 +  ALTTEXT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alttext'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17266 +  ARCHIVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('archive'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17267 +  AZIMUTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('azimuth'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17268 +  CLOSURE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('closure'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17269 +  CHECKED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('checked'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17270 +  CLASSID = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('classid'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17271 +  CHAROFF = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('charoff'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17272 +  BGCOLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('bgcolor'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17273 +  COLSPAN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('colspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17274 +  CHARSET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('charset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17275 +  COMPACT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('compact'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17276 +  CONTENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('content'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17277 +  ENCTYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('enctype'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17278 +  DATASRC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('datasrc'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17279 +  DATAFLD = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('datafld'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17280 +  DECLARE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('declare'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17281 +  DISPLAY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('display'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17282 +  DIVISOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('divisor'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17283 +  DEFAULT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('default'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17284 +  DESCENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('descent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17285 +  KERNING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('kerning'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17286 +  HANGING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('hanging'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17287 +  HEADERS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('headers'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17288 +  ONPASTE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onpaste'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17289 +  ONCLICK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onclick'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17290 +  OPTIMUM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('optimum'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17291 +  ONBEGIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbegin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17292 +  ONKEYUP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onkeyup'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17293 +  ONFOCUS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onfocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17294 +  ONERROR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onerror'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17295 +  ONINPUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oninput'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17296 +  ONABORT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onabort'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17297 +  ONSTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17298 +  ONRESET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onreset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17299 +  OPACITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17300 +  NOSHADE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('noshade'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17301 +  MINSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('minsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17302 +  MAXSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('maxsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17303 +  LOOPEND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('loopend'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17304 +  LARGEOP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('largeop'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17305 +  UNICODE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('unicode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17306 +  TARGETX = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('targetx', 'targetX'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17307 +  TARGETY = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('targety', 'targetY'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17308 +  VIEWBOX = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('viewbox', 'viewBox'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17309 +  VERSION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('version'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17310 +  PATTERN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('pattern'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17311 +  PROFILE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('profile'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17312 +  SPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17313 +  RESTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('restart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17314 +  ROWSPAN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rowspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17315 +  SANDBOX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('sandbox'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17316 +  SUMMARY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('summary'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17317 +  STANDBY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('standby'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17318 +  REPLACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('replace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17319 +  AUTOPLAY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('autoplay'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17320 +  ADDITIVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('additive'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17321 +  CALCMODE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('calcmode', 'calcMode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17322 +  CODETYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('codetype'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17323 +  CODEBASE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('codebase'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17324 +  CONTROLS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('controls'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17325 +  BEVELLED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('bevelled'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17326 +  BASELINE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17327 +  EXPONENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('exponent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17328 +  EDGEMODE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('edgemode', 'edgeMode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17329 +  ENCODING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('encoding'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17330 +  GLYPHREF = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('glyphref', 'glyphRef'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17331 +  DATETIME = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('datetime'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17332 +  DISABLED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('disabled'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17333 +  FONTSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fontsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17334 +  KEYTIMES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('keytimes', 'keyTimes'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17335 +  PANOSE_1 = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('panose-1'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17336 +  HREFLANG = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('hreflang'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17337 +  ONRESIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onresize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17338 +  ONCHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17339 +  ONBOUNCE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbounce'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17340 +  ONUNLOAD = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onunload'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17341 +  ONFINISH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onfinish'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17342 +  ONSCROLL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onscroll'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17343 +  OPERATOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('operator'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17344 +  OVERFLOW = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('overflow'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17345 +  ONSUBMIT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onsubmit'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17346 +  ONREPEAT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onrepeat'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17347 +  ONSELECT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onselect'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17348 +  NOTATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('notation'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17349 +  NORESIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('noresize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17350 +  MANIFEST = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('manifest'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17351 +  MATHSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mathsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17352 +  MULTIPLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('multiple'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17353 +  LONGDESC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('longdesc'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17354 +  LANGUAGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('language'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17355 +  TEMPLATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('template'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17356 +  TABINDEX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('tabindex'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17357 +  READONLY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('readonly'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17358 +  SELECTED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('selected'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17359 +  ROWLINES = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rowlines'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17360 +  SEAMLESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('seamless'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17361 +  ROWALIGN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rowalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17362 +  STRETCHY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stretchy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17363 +  REQUIRED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('required'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17364 +  XML_BASE = $AttributeName(new AttributeName(), XML_NS, COLONIFIED_LOCAL('xml:base', 'base'), XML_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17365 +  XML_LANG = $AttributeName(new AttributeName(), XML_NS, COLONIFIED_LOCAL('xml:lang', 'lang'), XML_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17366 +  X_HEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('x-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17367 +  ARIA_OWNS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-owns'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17368 +  AUTOFOCUS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('autofocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17369 +  ARIA_SORT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-sort'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17370 +  ACCESSKEY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accesskey'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17371 +  ARIA_BUSY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-busy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17372 +  ARIA_GRAB = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-grab'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17373 +  AMPLITUDE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('amplitude'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17374 +  ARIA_LIVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-live'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17375 +  CLIP_RULE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('clip-rule'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17376 +  CLIP_PATH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('clip-path'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17377 +  EQUALROWS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('equalrows'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17378 +  ELEVATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('elevation'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17379 +  DIRECTION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('direction'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17380 +  DRAGGABLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('draggable'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17381 +  FILTERRES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('filterres', 'filterRes'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17382 +  FILL_RULE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fill-rule'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17383 +  FONTSTYLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fontstyle'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17384 +  FONT_SIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-size'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17385 +  KEYPOINTS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('keypoints', 'keyPoints'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17386 +  HIDEFOCUS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('hidefocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17387 +  ONMESSAGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmessage'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17388 +  INTERCEPT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('intercept'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17389 +  ONDRAGEND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragend'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17390 +  ONMOVEEND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmoveend'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17391 +  ONINVALID = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oninvalid'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17392 +  ONKEYDOWN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onkeydown'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17393 +  ONFOCUSIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onfocusin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17394 +  ONMOUSEUP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmouseup'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17395 +  INPUTMODE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('inputmode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17396 +  ONROWEXIT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onrowexit'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17397 +  MATHCOLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mathcolor'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17398 +  MASKUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('maskunits', 'maskUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17399 +  MAXLENGTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('maxlength'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17400 +  LINEBREAK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('linebreak'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17401 +  LOOPSTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('loopstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17402 +  TRANSFORM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('transform'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17403 +  V_HANGING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('v-hanging'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17404 +  VALUETYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('valuetype'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17405 +  POINTSATZ = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('pointsatz', 'pointsAtZ'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17406 +  POINTSATX = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('pointsatx', 'pointsAtX'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17407 +  POINTSATY = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('pointsaty', 'pointsAtY'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17408 +  PLAYCOUNT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('playcount'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17409 +  SYMMETRIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('symmetric'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17410 +  SCROLLING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scrolling'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17411 +  REPEATDUR = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('repeatdur', 'repeatDur'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17412 +  SELECTION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('selection'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17413 +  SEPARATOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('separator'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17414 +  XML_SPACE = $AttributeName(new AttributeName(), XML_NS, COLONIFIED_LOCAL('xml:space', 'space'), XML_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17415 +  AUTOSUBMIT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('autosubmit'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17416 +  ALPHABETIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alphabetic'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17417 +  ACTIONTYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('actiontype'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17418 +  ACCUMULATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accumulate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17419 +  ARIA_LEVEL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-level'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17420 +  COLUMNSPAN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('columnspan'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17421 +  CAP_HEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cap-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17422 +  BACKGROUND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('background'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17423 +  GLYPH_NAME = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('glyph-name'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17424 +  GROUPALIGN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('groupalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17425 +  FONTFAMILY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fontfamily'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17426 +  FONTWEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fontweight'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17427 +  FONT_STYLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-style'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17428 +  KEYSPLINES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('keysplines', 'keySplines'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17429 +  HTTP_EQUIV = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('http-equiv'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17430 +  ONACTIVATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17431 +  OCCURRENCE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('occurrence'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17432 +  IRRELEVANT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('irrelevant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17433 +  ONDBLCLICK = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondblclick'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17434 +  ONDRAGDROP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragdrop'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17435 +  ONKEYPRESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onkeypress'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17436 +  ONROWENTER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onrowenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17437 +  ONDRAGOVER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragover'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17438 +  ONFOCUSOUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onfocusout'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17439 +  ONMOUSEOUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmouseout'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17440 +  NUMOCTAVES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('numoctaves', 'numOctaves'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17441 +  MARKER_MID = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('marker-mid'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17442 +  MARKER_END = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('marker-end'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17443 +  TEXTLENGTH = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('textlength', 'textLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17444 +  VISIBILITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('visibility'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17445 +  VIEWTARGET = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('viewtarget', 'viewTarget'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17446 +  VERT_ADV_Y = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('vert-adv-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17447 +  PATHLENGTH = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('pathlength', 'pathLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17448 +  REPEAT_MAX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('repeat-max'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17449 +  RADIOGROUP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('radiogroup'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17450 +  STOP_COLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stop-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17451 +  SEPARATORS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('separators'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17452 +  REPEAT_MIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('repeat-min'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17453 +  ROWSPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rowspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17454 +  ZOOMANDPAN = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('zoomandpan', 'zoomAndPan'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17455 +  XLINK_TYPE = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:type', 'type'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17456 +  XLINK_ROLE = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:role', 'role'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17457 +  XLINK_HREF = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:href', 'href'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17458 +  XLINK_SHOW = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:show', 'show'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17459 +  ACCENTUNDER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accentunder'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17460 +  ARIA_SECRET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-secret'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17461 +  ARIA_ATOMIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-atomic'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17462 +  ARIA_HIDDEN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-hidden'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17463 +  ARIA_FLOWTO = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-flowto'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17464 +  ARABIC_FORM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('arabic-form'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17465 +  CELLPADDING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cellpadding'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17466 +  CELLSPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('cellspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17467 +  COLUMNWIDTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('columnwidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17468 +  COLUMNALIGN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('columnalign'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17469 +  COLUMNLINES = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('columnlines'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17470 +  CONTEXTMENU = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('contextmenu'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17471 +  BASEPROFILE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('baseprofile', 'baseProfile'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17472 +  FONT_FAMILY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-family'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17473 +  FRAMEBORDER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('frameborder'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17474 +  FILTERUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('filterunits', 'filterUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17475 +  FLOOD_COLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('flood-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17476 +  FONT_WEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-weight'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17477 +  HORIZ_ADV_X = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('horiz-adv-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17478 +  ONDRAGLEAVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragleave'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17479 +  ONMOUSEMOVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmousemove'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17480 +  ORIENTATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('orientation'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17481 +  ONMOUSEDOWN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmousedown'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17482 +  ONMOUSEOVER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmouseover'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17483 +  ONDRAGENTER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17484 +  IDEOGRAPHIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ideographic'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17485 +  ONBEFORECUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforecut'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17486 +  ONFORMINPUT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onforminput'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17487 +  ONDRAGSTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondragstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17488 +  ONMOVESTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmovestart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17489 +  MARKERUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('markerunits', 'markerUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17490 +  MATHVARIANT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mathvariant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17491 +  MARGINWIDTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('marginwidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17492 +  MARKERWIDTH = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('markerwidth', 'markerWidth'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17493 +  TEXT_ANCHOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('text-anchor'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17494 +  TABLEVALUES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('tablevalues', 'tableValues'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17495 +  SCRIPTLEVEL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scriptlevel'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17496 +  REPEATCOUNT = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('repeatcount', 'repeatCount'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17497 +  STITCHTILES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('stitchtiles', 'stitchTiles'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17498 +  STARTOFFSET = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('startoffset', 'startOffset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17499 +  SCROLLDELAY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scrolldelay'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17500 +  XMLNS_XLINK = $AttributeName(new AttributeName(), XMLNS_NS, COLONIFIED_LOCAL('xmlns:xlink', 'xlink'), XMLNS_PREFIX, initValues(_3Z_classLit, 0, -1, [false, false, false, false]), true);
32.17501 +  XLINK_TITLE = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:title', 'title'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17502 +  ARIA_INVALID = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-invalid'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17503 +  ARIA_PRESSED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-pressed'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17504 +  ARIA_CHECKED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-checked'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17505 +  AUTOCOMPLETE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('autocomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17506 +  ARIA_SETSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-setsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17507 +  ARIA_CHANNEL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-channel'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17508 +  EQUALCOLUMNS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('equalcolumns'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17509 +  DISPLAYSTYLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('displaystyle'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17510 +  DATAFORMATAS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dataformatas'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17511 +  FILL_OPACITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('fill-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17512 +  FONT_VARIANT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-variant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17513 +  FONT_STRETCH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-stretch'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17514 +  FRAMESPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('framespacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17515 +  KERNELMATRIX = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('kernelmatrix', 'kernelMatrix'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17516 +  ONDEACTIVATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17517 +  ONROWSDELETE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onrowsdelete'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17518 +  ONMOUSELEAVE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmouseleave'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17519 +  ONFORMCHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onformchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17520 +  ONCELLCHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oncellchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17521 +  ONMOUSEWHEEL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmousewheel'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17522 +  ONMOUSEENTER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onmouseenter'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17523 +  ONAFTERPRINT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onafterprint'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17524 +  ONBEFORECOPY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforecopy'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17525 +  MARGINHEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('marginheight'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17526 +  MARKERHEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('markerheight', 'markerHeight'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17527 +  MARKER_START = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('marker-start'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17528 +  MATHEMATICAL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mathematical'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17529 +  LENGTHADJUST = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('lengthadjust', 'lengthAdjust'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17530 +  UNSELECTABLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('unselectable'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17531 +  UNICODE_BIDI = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('unicode-bidi'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17532 +  UNITS_PER_EM = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('units-per-em'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17533 +  WORD_SPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('word-spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17534 +  WRITING_MODE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('writing-mode'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17535 +  V_ALPHABETIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('v-alphabetic'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17536 +  PATTERNUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('patternunits', 'patternUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17537 +  SPREADMETHOD = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('spreadmethod', 'spreadMethod'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17538 +  SURFACESCALE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('surfacescale', 'surfaceScale'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17539 +  STROKE_WIDTH = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-width'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17540 +  REPEAT_START = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('repeat-start'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17541 +  STDDEVIATION = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('stddeviation', 'stdDeviation'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17542 +  STOP_OPACITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stop-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17543 +  ARIA_CONTROLS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-controls'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17544 +  ARIA_HASPOPUP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-haspopup'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17545 +  ACCENT_HEIGHT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accent-height'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17546 +  ARIA_VALUENOW = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-valuenow'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17547 +  ARIA_RELEVANT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-relevant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17548 +  ARIA_POSINSET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-posinset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17549 +  ARIA_VALUEMAX = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-valuemax'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17550 +  ARIA_READONLY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-readonly'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17551 +  ARIA_SELECTED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-selected'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17552 +  ARIA_REQUIRED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-required'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17553 +  ARIA_EXPANDED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-expanded'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17554 +  ARIA_DISABLED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-disabled'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17555 +  ATTRIBUTETYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('attributetype', 'attributeType'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17556 +  ATTRIBUTENAME = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('attributename', 'attributeName'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17557 +  ARIA_DATATYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-datatype'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17558 +  ARIA_VALUEMIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-valuemin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17559 +  BASEFREQUENCY = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('basefrequency', 'baseFrequency'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17560 +  COLUMNSPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('columnspacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17561 +  COLOR_PROFILE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('color-profile'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17562 +  CLIPPATHUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('clippathunits', 'clipPathUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17563 +  DEFINITIONURL = $AttributeName(new AttributeName(), ALL_NO_NS, (arr_32 = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 4, 0) , arr_32[0] = 'definitionurl' , arr_32[1] = 'definitionURL' , arr_32[2] = 'definitionurl' , arr_32[3] = 'definitionurl' , arr_32), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17564 +  GRADIENTUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('gradientunits', 'gradientUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17565 +  FLOOD_OPACITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('flood-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17566 +  ONAFTERUPDATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onafterupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17567 +  ONERRORUPDATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onerrorupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17568 +  ONBEFOREPASTE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforepaste'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17569 +  ONLOSECAPTURE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onlosecapture'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17570 +  ONCONTEXTMENU = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oncontextmenu'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17571 +  ONSELECTSTART = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onselectstart'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17572 +  ONBEFOREPRINT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforeprint'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17573 +  MOVABLELIMITS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('movablelimits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17574 +  LINETHICKNESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('linethickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17575 +  UNICODE_RANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('unicode-range'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17576 +  THINMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('thinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17577 +  VERT_ORIGIN_X = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('vert-origin-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17578 +  VERT_ORIGIN_Y = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('vert-origin-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17579 +  V_IDEOGRAPHIC = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('v-ideographic'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17580 +  PRESERVEALPHA = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('preservealpha', 'preserveAlpha'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17581 +  SCRIPTMINSIZE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scriptminsize'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17582 +  SPECIFICATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('specification'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17583 +  XLINK_ACTUATE = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:actuate', 'actuate'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17584 +  XLINK_ARCROLE = $AttributeName(new AttributeName(), XLINK_NS, COLONIFIED_LOCAL('xlink:arcrole', 'arcrole'), XLINK_PREFIX, initValues(_3Z_classLit, 0, -1, [false, true, true, false]), false);
32.17585 +  ACCEPT_CHARSET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('accept-charset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17586 +  ALIGNMENTSCOPE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alignmentscope'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17587 +  ARIA_MULTILINE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-multiline'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17588 +  BASELINE_SHIFT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('baseline-shift'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17589 +  HORIZ_ORIGIN_X = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('horiz-origin-x'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17590 +  HORIZ_ORIGIN_Y = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('horiz-origin-y'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17591 +  ONBEFOREUPDATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforeupdate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17592 +  ONFILTERCHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onfilterchange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17593 +  ONROWSINSERTED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onrowsinserted'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17594 +  ONBEFOREUNLOAD = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforeunload'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17595 +  MATHBACKGROUND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mathbackground'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17596 +  LETTER_SPACING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('letter-spacing'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17597 +  LIGHTING_COLOR = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('lighting-color'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17598 +  THICKMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('thickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17599 +  TEXT_RENDERING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('text-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17600 +  V_MATHEMATICAL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('v-mathematical'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17601 +  POINTER_EVENTS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('pointer-events'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17602 +  PRIMITIVEUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('primitiveunits', 'primitiveUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17603 +  SYSTEMLANGUAGE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('systemlanguage', 'systemLanguage'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17604 +  STROKE_LINECAP = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-linecap'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17605 +  SUBSCRIPTSHIFT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('subscriptshift'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17606 +  STROKE_OPACITY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-opacity'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17607 +  ARIA_DROPEFFECT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-dropeffect'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17608 +  ARIA_LABELLEDBY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-labelledby'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17609 +  ARIA_TEMPLATEID = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-templateid'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17610 +  COLOR_RENDERING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('color-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17611 +  CONTENTEDITABLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('contenteditable'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17612 +  DIFFUSECONSTANT = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('diffuseconstant', 'diffuseConstant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17613 +  ONDATAAVAILABLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondataavailable'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17614 +  ONCONTROLSELECT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('oncontrolselect'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17615 +  IMAGE_RENDERING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('image-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17616 +  MEDIUMMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('mediummathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17617 +  TEXT_DECORATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('text-decoration'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17618 +  SHAPE_RENDERING = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('shape-rendering'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17619 +  STROKE_LINEJOIN = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-linejoin'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17620 +  REPEAT_TEMPLATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('repeat-template'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17621 +  ARIA_DESCRIBEDBY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-describedby'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17622 +  CONTENTSTYLETYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('contentstyletype', 'contentStyleType'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17623 +  FONT_SIZE_ADJUST = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('font-size-adjust'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17624 +  KERNELUNITLENGTH = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('kernelunitlength', 'kernelUnitLength'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17625 +  ONBEFOREACTIVATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17626 +  ONPROPERTYCHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onpropertychange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17627 +  ONDATASETCHANGED = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondatasetchanged'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17628 +  MASKCONTENTUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('maskcontentunits', 'maskContentUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17629 +  PATTERNTRANSFORM = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('patterntransform', 'patternTransform'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17630 +  REQUIREDFEATURES = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('requiredfeatures', 'requiredFeatures'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17631 +  RENDERING_INTENT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('rendering-intent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17632 +  SPECULAREXPONENT = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('specularexponent', 'specularExponent'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17633 +  SPECULARCONSTANT = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('specularconstant', 'specularConstant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17634 +  SUPERSCRIPTSHIFT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('superscriptshift'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17635 +  STROKE_DASHARRAY = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-dasharray'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17636 +  XCHANNELSELECTOR = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('xchannelselector', 'xChannelSelector'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17637 +  YCHANNELSELECTOR = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('ychannelselector', 'yChannelSelector'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17638 +  ARIA_AUTOCOMPLETE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-autocomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17639 +  CONTENTSCRIPTTYPE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('contentscripttype', 'contentScriptType'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17640 +  ENABLE_BACKGROUND = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('enable-background'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17641 +  DOMINANT_BASELINE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('dominant-baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17642 +  GRADIENTTRANSFORM = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('gradienttransform', 'gradientTransform'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17643 +  ONBEFORDEACTIVATE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbefordeactivate'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17644 +  ONDATASETCOMPLETE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('ondatasetcomplete'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17645 +  OVERLINE_POSITION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('overline-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17646 +  ONBEFOREEDITFOCUS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onbeforeeditfocus'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17647 +  LIMITINGCONEANGLE = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('limitingconeangle', 'limitingConeAngle'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17648 +  VERYTHINMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('verythinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17649 +  STROKE_DASHOFFSET = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-dashoffset'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17650 +  STROKE_MITERLIMIT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('stroke-miterlimit'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17651 +  ALIGNMENT_BASELINE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('alignment-baseline'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17652 +  ONREADYSTATECHANGE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('onreadystatechange'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17653 +  OVERLINE_THICKNESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('overline-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17654 +  UNDERLINE_POSITION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('underline-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17655 +  VERYTHICKMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('verythickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17656 +  REQUIREDEXTENSIONS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('requiredextensions', 'requiredExtensions'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17657 +  COLOR_INTERPOLATION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('color-interpolation'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17658 +  UNDERLINE_THICKNESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('underline-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17659 +  PRESERVEASPECTRATIO = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('preserveaspectratio', 'preserveAspectRatio'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17660 +  PATTERNCONTENTUNITS = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('patterncontentunits', 'patternContentUnits'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17661 +  ARIA_MULTISELECTABLE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-multiselectable'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17662 +  SCRIPTSIZEMULTIPLIER = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('scriptsizemultiplier'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17663 +  ARIA_ACTIVEDESCENDANT = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('aria-activedescendant'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17664 +  VERYVERYTHINMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('veryverythinmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17665 +  VERYVERYTHICKMATHSPACE = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('veryverythickmathspace'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17666 +  STRIKETHROUGH_POSITION = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('strikethrough-position'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17667 +  STRIKETHROUGH_THICKNESS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('strikethrough-thickness'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17668 +  EXTERNALRESOURCESREQUIRED = $AttributeName(new AttributeName(), ALL_NO_NS, SVG_DIFFERENT('externalresourcesrequired', 'externalResourcesRequired'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17669 +  GLYPH_ORIENTATION_VERTICAL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('glyph-orientation-vertical'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17670 +  COLOR_INTERPOLATION_FILTERS = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('color-interpolation-filters'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17671 +  GLYPH_ORIENTATION_HORIZONTAL = $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL('glyph-orientation-horizontal'), ALL_NO_PREFIX, ALL_NCNAME, false);
32.17672 +  ATTRIBUTE_NAMES = initValues(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 49, 9, [D, K, R, X, Y, Z, BY, CX, CY, DX, DY, G2, G1, FX, FY, K4, K2, K3, K1, ID, IN, U2, U1, RT, RX, RY, TO, Y2, Y1, X1, X2, ALT, DIR, DUR, END, FOR, IN2, MAX, MIN, LOW, REL, REV, SRC, AXIS, ABBR, BBOX, CITE, CODE, BIAS, COLS, CLIP, CHAR, BASE, EDGE, DATA, FILL, FROM, FORM, FACE, HIGH, HREF, OPEN, ICON, NAME, MODE, MASK, LINK, LANG, LIST, TYPE, WHEN, WRAP, TEXT, PATH, PING, REFX, REFY, SIZE, SEED, ROWS, SPAN, STEP, ROLE, XREF, ASYNC, ALINK, ALIGN, CLOSE, COLOR, CLASS, CLEAR, BEGIN, DEPTH, DEFER, FENCE, FRAME, ISMAP, ONEND, INDEX, ORDER, OTHER, ONCUT, NARGS, MEDIA, LABEL, LOCAL, WIDTH, TITLE, VLINK, VALUE, SLOPE, SHAPE, SCOPE, SCALE, SPEED, STYLE, RULES, STEMH, STEMV, START, XMLNS, ACCEPT, ACCENT, ASCENT, ACTIVE, ALTIMG, ACTION, BORDER, CURSOR, COORDS, FILTER, FORMAT, HIDDEN, HSPACE, HEIGHT, ONMOVE, ONLOAD, ONDRAG, ORIGIN, ONZOOM, ONHELP, ONSTOP, ONDROP, ONBLUR, OBJECT, OFFSET, ORIENT, ONCOPY, NOWRAP, NOHREF, MACROS, METHOD, LOWSRC, LSPACE, LQUOTE, USEMAP, WIDTHS, TARGET, VALUES, VALIGN, VSPACE, POSTER, POINTS, PROMPT, SCOPED, STRING, SCHEME, STROKE, RADIUS, RESULT, REPEAT, RSPACE, ROTATE, RQUOTE, ALTTEXT, ARCHIVE, AZIMUTH, CLOSURE, CHECKED, CLASSID, CHAROFF, BGCOLOR, COLSPAN, CHARSET, COMPACT, CONTENT, ENCTYPE, DATASRC, DATAFLD, DECLARE, DISPLAY, DIVISOR, DEFAULT, DESCENT, KERNING, HANGING, HEADERS, ONPASTE, ONCLICK, OPTIMUM, ONBEGIN, ONKEYUP, ONFOCUS, ONERROR, ONINPUT, ONABORT, ONSTART, ONRESET, OPACITY, NOSHADE, MINSIZE, MAXSIZE, LOOPEND, LARGEOP, UNICODE, TARGETX, TARGETY, VIEWBOX, VERSION, PATTERN, PROFILE, SPACING, RESTART, ROWSPAN, SANDBOX, SUMMARY, STANDBY, REPLACE, AUTOPLAY, ADDITIVE, CALCMODE, CODETYPE, CODEBASE, CONTROLS, BEVELLED, BASELINE, EXPONENT, EDGEMODE, ENCODING, GLYPHREF, DATETIME, DISABLED, FONTSIZE, KEYTIMES, PANOSE_1, HREFLANG, ONRESIZE, ONCHANGE, ONBOUNCE, ONUNLOAD, ONFINISH, ONSCROLL, OPERATOR, OVERFLOW, ONSUBMIT, ONREPEAT, ONSELECT, NOTATION, NORESIZE, MANIFEST, MATHSIZE, MULTIPLE, LONGDESC, LANGUAGE, TEMPLATE, TABINDEX, READONLY, SELECTED, ROWLINES, SEAMLESS, ROWALIGN, STRETCHY, REQUIRED, XML_BASE, XML_LANG, X_HEIGHT, ARIA_OWNS, AUTOFOCUS, ARIA_SORT, ACCESSKEY, ARIA_BUSY, ARIA_GRAB, AMPLITUDE, ARIA_LIVE, CLIP_RULE, CLIP_PATH, EQUALROWS, ELEVATION, DIRECTION, DRAGGABLE, FILTERRES, FILL_RULE, FONTSTYLE, FONT_SIZE, KEYPOINTS, HIDEFOCUS, ONMESSAGE, INTERCEPT, ONDRAGEND, ONMOVEEND, ONINVALID, ONKEYDOWN, ONFOCUSIN, ONMOUSEUP, INPUTMODE, ONROWEXIT, MATHCOLOR, MASKUNITS, MAXLENGTH, LINEBREAK, LOOPSTART, TRANSFORM, V_HANGING, VALUETYPE, POINTSATZ, POINTSATX, POINTSATY, PLAYCOUNT, SYMMETRIC, SCROLLING, REPEATDUR, SELECTION, SEPARATOR, XML_SPACE, AUTOSUBMIT, ALPHABETIC, ACTIONTYPE, ACCUMULATE, ARIA_LEVEL, COLUMNSPAN, CAP_HEIGHT, BACKGROUND, GLYPH_NAME, GROUPALIGN, FONTFAMILY, FONTWEIGHT, FONT_STYLE, KEYSPLINES, HTTP_EQUIV, ONACTIVATE, OCCURRENCE, IRRELEVANT, ONDBLCLICK, ONDRAGDROP, ONKEYPRESS, ONROWENTER, ONDRAGOVER, ONFOCUSOUT, ONMOUSEOUT, NUMOCTAVES, MARKER_MID, MARKER_END, TEXTLENGTH, VISIBILITY, VIEWTARGET, VERT_ADV_Y, PATHLENGTH, REPEAT_MAX, RADIOGROUP, STOP_COLOR, SEPARATORS, REPEAT_MIN, ROWSPACING, ZOOMANDPAN, XLINK_TYPE, XLINK_ROLE, XLINK_HREF, XLINK_SHOW, ACCENTUNDER, ARIA_SECRET, ARIA_ATOMIC, ARIA_HIDDEN, ARIA_FLOWTO, ARABIC_FORM, CELLPADDING, CELLSPACING, COLUMNWIDTH, COLUMNALIGN, COLUMNLINES, CONTEXTMENU, BASEPROFILE, FONT_FAMILY, FRAMEBORDER, FILTERUNITS, FLOOD_COLOR, FONT_WEIGHT, HORIZ_ADV_X, ONDRAGLEAVE, ONMOUSEMOVE, ORIENTATION, ONMOUSEDOWN, ONMOUSEOVER, ONDRAGENTER, IDEOGRAPHIC, ONBEFORECUT, ONFORMINPUT, ONDRAGSTART, ONMOVESTART, MARKERUNITS, MATHVARIANT, MARGINWIDTH, MARKERWIDTH, TEXT_ANCHOR, TABLEVALUES, SCRIPTLEVEL, REPEATCOUNT, STITCHTILES, STARTOFFSET, SCROLLDELAY, XMLNS_XLINK, XLINK_TITLE, ARIA_INVALID, ARIA_PRESSED, ARIA_CHECKED, AUTOCOMPLETE, ARIA_SETSIZE, ARIA_CHANNEL, EQUALCOLUMNS, DISPLAYSTYLE, DATAFORMATAS, FILL_OPACITY, FONT_VARIANT, FONT_STRETCH, FRAMESPACING, KERNELMATRIX, ONDEACTIVATE, ONROWSDELETE, ONMOUSELEAVE, ONFORMCHANGE, ONCELLCHANGE, ONMOUSEWHEEL, ONMOUSEENTER, ONAFTERPRINT, ONBEFORECOPY, MARGINHEIGHT, MARKERHEIGHT, MARKER_START, MATHEMATICAL, LENGTHADJUST, UNSELECTABLE, UNICODE_BIDI, UNITS_PER_EM, WORD_SPACING, WRITING_MODE, V_ALPHABETIC, PATTERNUNITS, SPREADMETHOD, SURFACESCALE, STROKE_WIDTH, REPEAT_START, STDDEVIATION, STOP_OPACITY, ARIA_CONTROLS, ARIA_HASPOPUP, ACCENT_HEIGHT, ARIA_VALUENOW, ARIA_RELEVANT, ARIA_POSINSET, ARIA_VALUEMAX, ARIA_READONLY, ARIA_SELECTED, ARIA_REQUIRED, ARIA_EXPANDED, ARIA_DISABLED, ATTRIBUTETYPE, ATTRIBUTENAME, ARIA_DATATYPE, ARIA_VALUEMIN, BASEFREQUENCY, COLUMNSPACING, COLOR_PROFILE, CLIPPATHUNITS, DEFINITIONURL, GRADIENTUNITS, FLOOD_OPACITY, ONAFTERUPDATE, ONERRORUPDATE, ONBEFOREPASTE, ONLOSECAPTURE, ONCONTEXTMENU, ONSELECTSTART, ONBEFOREPRINT, MOVABLELIMITS, LINETHICKNESS, UNICODE_RANGE, THINMATHSPACE, VERT_ORIGIN_X, VERT_ORIGIN_Y, V_IDEOGRAPHIC, PRESERVEALPHA, SCRIPTMINSIZE, SPECIFICATION, XLINK_ACTUATE, XLINK_ARCROLE, ACCEPT_CHARSET, ALIGNMENTSCOPE, ARIA_MULTILINE, BASELINE_SHIFT, HORIZ_ORIGIN_X, HORIZ_ORIGIN_Y, ONBEFOREUPDATE, ONFILTERCHANGE, ONROWSINSERTED, ONBEFOREUNLOAD, MATHBACKGROUND, LETTER_SPACING, LIGHTING_COLOR, THICKMATHSPACE, TEXT_RENDERING, V_MATHEMATICAL, POINTER_EVENTS, PRIMITIVEUNITS, SYSTEMLANGUAGE, STROKE_LINECAP, SUBSCRIPTSHIFT, STROKE_OPACITY, ARIA_DROPEFFECT, ARIA_LABELLEDBY, ARIA_TEMPLATEID, COLOR_RENDERING, CONTENTEDITABLE, DIFFUSECONSTANT, ONDATAAVAILABLE, ONCONTROLSELECT, IMAGE_RENDERING, MEDIUMMATHSPACE, TEXT_DECORATION, SHAPE_RENDERING, STROKE_LINEJOIN, REPEAT_TEMPLATE, ARIA_DESCRIBEDBY, CONTENTSTYLETYPE, FONT_SIZE_ADJUST, KERNELUNITLENGTH, ONBEFOREACTIVATE, ONPROPERTYCHANGE, ONDATASETCHANGED, MASKCONTENTUNITS, PATTERNTRANSFORM, REQUIREDFEATURES, RENDERING_INTENT, SPECULAREXPONENT, SPECULARCONSTANT, SUPERSCRIPTSHIFT, STROKE_DASHARRAY, XCHANNELSELECTOR, YCHANNELSELECTOR, ARIA_AUTOCOMPLETE, CONTENTSCRIPTTYPE, ENABLE_BACKGROUND, DOMINANT_BASELINE, GRADIENTTRANSFORM, ONBEFORDEACTIVATE, ONDATASETCOMPLETE, OVERLINE_POSITION, ONBEFOREEDITFOCUS, LIMITINGCONEANGLE, VERYTHINMATHSPACE, STROKE_DASHOFFSET, STROKE_MITERLIMIT, ALIGNMENT_BASELINE, ONREADYSTATECHANGE, OVERLINE_THICKNESS, UNDERLINE_POSITION, VERYTHICKMATHSPACE, REQUIREDEXTENSIONS, COLOR_INTERPOLATION, UNDERLINE_THICKNESS, PRESERVEASPECTRATIO, PATTERNCONTENTUNITS, ARIA_MULTISELECTABLE, SCRIPTSIZEMULTIPLIER, ARIA_ACTIVEDESCENDANT, VERYVERYTHINMATHSPACE, VERYVERYTHICKMATHSPACE, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, EXTERNALRESOURCESREQUIRED, GLYPH_ORIENTATION_VERTICAL, COLOR_INTERPOLATION_FILTERS, GLYPH_ORIENTATION_HORIZONTAL]);
32.17673 +  ATTRIBUTE_HASHES = initValues(_3I_classLit, 0, -1, [1153, 1383, 1601, 1793, 1827, 1857, 68600, 69146, 69177, 70237, 70270, 71572, 71669, 72415, 72444, 74846, 74904, 74943, 75001, 75276, 75590, 84742, 84839, 85575, 85963, 85992, 87204, 88074, 88171, 89130, 89163, 3207892, 3283895, 3284791, 3338752, 3358197, 3369562, 3539124, 3562402, 3574260, 3670335, 3696933, 3721879, 135280021, 135346322, 136317019, 136475749, 136548517, 136652214, 136884919, 136902418, 136942992, 137292068, 139120259, 139785574, 142250603, 142314056, 142331176, 142519584, 144752417, 145106895, 146147200, 146765926, 148805544, 149655723, 149809441, 150018784, 150445028, 150923321, 152528754, 152536216, 152647366, 152962785, 155219321, 155654904, 157317483, 157350248, 157437941, 157447478, 157604838, 157685404, 157894402, 158315188, 166078431, 169409980, 169700259, 169856932, 170007032, 170409695, 170466488, 170513710, 170608367, 173028944, 173896963, 176090625, 176129212, 179390001, 179489057, 179627464, 179840468, 179849042, 180004216, 181779081, 183027151, 183645319, 183698797, 185922012, 185997252, 188312483, 188675799, 190977533, 190992569, 191006194, 191033518, 191038774, 191096249, 191166163, 191194426, 191522106, 191568039, 200104642, 202506661, 202537381, 202602917, 203070590, 203120766, 203389054, 203690071, 203971238, 203986524, 209040857, 209125756, 212055489, 212322418, 212746849, 213002877, 213055164, 213088023, 213259873, 213273386, 213435118, 213437318, 213438231, 213493071, 213532268, 213542834, 213584431, 213659891, 215285828, 215880731, 216112976, 216684637, 217369699, 217565298, 217576549, 218186795, 219743185, 220082234, 221623802, 221986406, 222283890, 223089542, 223138630, 223311265, 224547358, 224587256, 224589550, 224655650, 224785518, 224810917, 224813302, 225429618, 225432950, 225440869, 236107233, 236709921, 236838947, 237117095, 237143271, 237172455, 237209953, 237354143, 237372743, 237668065, 237703073, 237714273, 239743521, 240512803, 240522627, 240560417, 240656513, 241015715, 241062755, 241065383, 243523041, 245865199, 246261793, 246556195, 246774817, 246923491, 246928419, 246981667, 247014847, 247058369, 247112833, 247118177, 247119137, 247128739, 247316903, 249533729, 250235623, 250269543, 251083937, 251402351, 252339047, 253260911, 253293679, 254844367, 255547879, 256077281, 256345377, 258124199, 258354465, 258605063, 258744193, 258845603, 258856961, 258926689, 269869248, 270174334, 270709417, 270778994, 270781796, 271102503, 271478858, 271490090, 272870654, 273335275, 273369140, 273924313, 274108530, 274116736, 276818662, 277476156, 279156579, 279349675, 280108533, 280128712, 280132869, 280162403, 280280292, 280413430, 280506130, 280677397, 280678580, 280686710, 280689066, 282736758, 283110901, 283275116, 283823226, 283890012, 284479340, 284606461, 286700477, 286798916, 291557706, 291665349, 291804100, 292138018, 292166446, 292418738, 292451039, 300298041, 300374839, 300597935, 303073389, 303083839, 303266673, 303354997, 303430688, 303576261, 303724281, 303819694, 304242723, 304382625, 306247792, 307227811, 307468786, 307724489, 309671175, 310252031, 310358241, 310373094, 311015256, 313357609, 313683893, 313701861, 313706996, 313707317, 313710350, 314027746, 314038181, 314091299, 314205627, 314233813, 316741830, 316797986, 317486755, 317794164, 318721061, 320076137, 322657125, 322887778, 323506876, 323572412, 323605180, 323938869, 325060058, 325320188, 325398738, 325541490, 325671619, 333868843, 336806130, 337212108, 337282686, 337285434, 337585223, 338036037, 338298087, 338566051, 340943551, 341190970, 342995704, 343352124, 343912673, 344585053, 346977248, 347218098, 347262163, 347278576, 347438191, 347655959, 347684788, 347726430, 347727772, 347776035, 347776629, 349500753, 350880161, 350887073, 353384123, 355496998, 355906922, 355979793, 356545959, 358637867, 358905016, 359164318, 359247286, 359350571, 359579447, 365560330, 367399355, 367420285, 367510727, 368013212, 370234760, 370353345, 370710317, 371074566, 371122285, 371194213, 371448425, 371448430, 371545055, 371596922, 371758751, 371964792, 372151328, 376550136, 376710172, 376795771, 376826271, 376906556, 380514830, 380774774, 380775037, 381030322, 381136500, 381281631, 381282269, 381285504, 381330595, 381331422, 381335911, 381336484, 383907298, 383917408, 384595009, 384595013, 387799894, 387823201, 392581647, 392584937, 392742684, 392906485, 393003349, 400644707, 400973830, 404428547, 404432113, 404432865, 404469244, 404478897, 404694860, 406887479, 408294949, 408789955, 410022510, 410467324, 410586448, 410945965, 411845275, 414327152, 414327932, 414329781, 414346257, 414346439, 414639928, 414835998, 414894517, 414986533, 417465377, 417465381, 417492216, 418259232, 419310946, 420103495, 420242342, 420380455, 420658662, 420717432, 423183880, 424539259, 425929170, 425972964, 426050649, 426126450, 426142833, 426607922, 437289840, 437347469, 437412335, 437423943, 437455540, 437462252, 437597991, 437617485, 437986305, 437986507, 437986828, 437987072, 438015591, 438034813, 438038966, 438179623, 438347971, 438483573, 438547062, 438895551, 441592676, 442032555, 443548979, 447881379, 447881655, 447881895, 447887844, 448416189, 448445746, 448449012, 450942191, 452816744, 453668677, 454434495, 456610076, 456642844, 456738709, 457544600, 459451897, 459680944, 468058810, 468083581, 470964084, 471470955, 471567278, 472267822, 481177859, 481210627, 481435874, 481455115, 481485378, 481490218, 485105638, 486005878, 486383494, 487988916, 488103783, 490661867, 491574090, 491578272, 493041952, 493441205, 493582844, 493716979, 504577572, 504740359, 505091638, 505592418, 505656212, 509516275, 514998531, 515571132, 515594682, 518712698, 521362273, 526592419, 526807354, 527348842, 538294791, 539214049, 544689535, 545535009, 548544752, 548563346, 548595116, 551679010, 558034099, 560329411, 560356209, 560671018, 560671152, 560692590, 560845442, 569212097, 569474241, 572252718, 572768481, 575326764, 576174758, 576190819, 582099184, 582099438, 582372519, 582558889, 586552164, 591325418, 594231990, 594243961, 605711268, 615672071, 616086845, 621792370, 624879850, 627432831, 640040548, 654392808, 658675477, 659420283, 672891587, 694768102, 705890982, 725543146, 759097578, 761686526, 795383908, 843809551, 878105336, 908643300, 945213471]);
32.17674 +}
32.17675 +
32.17676 +function $AttributeName_0(this$static, uri, local, prefix, ncname, xmlns){
32.17677 +  $clinit_87();
32.17678 +  this$static.uri = uri;
32.17679 +  this$static.local = local;
32.17680 +  COMPUTE_QNAME(local, prefix);
32.17681 +  this$static.ncname = ncname;
32.17682 +  this$static.xmlns = xmlns;
32.17683 +  return this$static;
32.17684 +}
32.17685 +
32.17686 +function $AttributeName(this$static, uri, local, prefix, ncname, xmlns){
32.17687 +  $clinit_87();
32.17688 +  this$static.uri = uri;
32.17689 +  this$static.local = local;
32.17690 +  COMPUTE_QNAME(local, prefix);
32.17691 +  this$static.ncname = ncname;
32.17692 +  this$static.xmlns = xmlns;
32.17693 +  return this$static;
32.17694 +}
32.17695 +
32.17696 +function $isBoolean(this$static){
32.17697 +  return this$static == ACTIVE || this$static == ASYNC || this$static == AUTOFOCUS || this$static == AUTOSUBMIT || this$static == CHECKED || this$static == COMPACT || this$static == DECLARE || this$static == DEFAULT || this$static == DEFER || this$static == DISABLED || this$static == ISMAP || this$static == MULTIPLE || this$static == NOHREF || this$static == NORESIZE || this$static == NOSHADE || this$static == NOWRAP || this$static == READONLY || this$static == REQUIRED || this$static == SELECTED;
32.17698 +}
32.17699 +
32.17700 +function $isCaseFolded(this$static){
32.17701 +  return this$static == ACTIVE || this$static == ALIGN || this$static == ASYNC || this$static == AUTOCOMPLETE || this$static == AUTOFOCUS || this$static == AUTOSUBMIT || this$static == CHECKED || this$static == CLEAR || this$static == COMPACT || this$static == DATAFORMATAS || this$static == DECLARE || this$static == DEFAULT || this$static == DEFER || this$static == DIR || this$static == DISABLED || this$static == ENCTYPE || this$static == FRAME || this$static == ISMAP || this$static == METHOD || this$static == MULTIPLE || this$static == NOHREF || this$static == NORESIZE || this$static == NOSHADE || this$static == NOWRAP || this$static == READONLY || this$static == REPLACE || this$static == REQUIRED || this$static == RULES || this$static == SCOPE || this$static == SCROLLING || this$static == SELECTED || this$static == SHAPE || this$static == STEP || this$static == TYPE || this$static == VALIGN || this$static == VALUETYPE;
32.17702 +}
32.17703 +
32.17704 +function COLONIFIED_LOCAL(name, suffix){
32.17705 +  var arr;
32.17706 +  arr = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 4, 0);
32.17707 +  arr[0] = name;
32.17708 +  arr[1] = suffix;
32.17709 +  arr[2] = suffix;
32.17710 +  arr[3] = name;
32.17711 +  return arr;
32.17712 +}
32.17713 +
32.17714 +function COMPUTE_QNAME(local, prefix){
32.17715 +  var arr, i;
32.17716 +  arr = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 4, 0);
32.17717 +  for (i = 0; i < arr.length; ++i) {
32.17718 +    if (prefix[i] == null) {
32.17719 +      arr[i] = local[i];
32.17720 +    }
32.17721 +     else {
32.17722 +      arr[i] = String(prefix[i] + ':' + local[i]);
32.17723 +    }
32.17724 +  }
32.17725 +  return arr;
32.17726 +}
32.17727 +
32.17728 +function SAME_LOCAL(name){
32.17729 +  var arr;
32.17730 +  arr = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 4, 0);
32.17731 +  arr[0] = name;
32.17732 +  arr[1] = name;
32.17733 +  arr[2] = name;
32.17734 +  arr[3] = name;
32.17735 +  return arr;
32.17736 +}
32.17737 +
32.17738 +function SVG_DIFFERENT(name, camel){
32.17739 +  var arr;
32.17740 +  arr = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 4, 0);
32.17741 +  arr[0] = name;
32.17742 +  arr[1] = name;
32.17743 +  arr[2] = camel;
32.17744 +  arr[3] = name;
32.17745 +  return arr;
32.17746 +}
32.17747 +
32.17748 +function bufToHash(buf, len){
32.17749 +  var hash, hash2, i, j;
32.17750 +  hash2 = 0;
32.17751 +  hash = len;
32.17752 +  hash <<= 5;
32.17753 +  hash += buf[0] - 96;
32.17754 +  j = len;
32.17755 +  for (i = 0; i < 4 && j > 0; ++i) {
32.17756 +    --j;
32.17757 +    hash <<= 5;
32.17758 +    hash += buf[j] - 96;
32.17759 +    hash2 <<= 6;
32.17760 +    hash2 += buf[i] - 95;
32.17761 +  }
32.17762 +  return hash ^ hash2;
32.17763 +}
32.17764 +
32.17765 +function createAttributeName(name, checkNcName){
32.17766 +  var ncName, xmlns;
32.17767 +  ncName = true;
32.17768 +  xmlns = name.indexOf('xmlns:') == 0;
32.17769 +  if (checkNcName) {
32.17770 +    if (xmlns) {
32.17771 +      ncName = false;
32.17772 +    }
32.17773 +     else {
32.17774 +      ncName = isNCName(name);
32.17775 +    }
32.17776 +  }
32.17777 +  return $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL(name), ALL_NO_PREFIX, ncName?ALL_NCNAME:ALL_NO_NCNAME, xmlns);
32.17778 +}
32.17779 +
32.17780 +function getClass_49(){
32.17781 +  return Lnu_validator_htmlparser_impl_AttributeName_2_classLit;
32.17782 +}
32.17783 +
32.17784 +function nameByBuffer(buf, offset, length, checkNcName){
32.17785 +  var end, end_0;
32.17786 +  $clinit_87();
32.17787 +  var attributeName, hash, index, name;
32.17788 +  hash = bufToHash(buf, length);
32.17789 +  index = binarySearch(ATTRIBUTE_HASHES, hash);
32.17790 +  if (index < 0) {
32.17791 +    return createAttributeName(String((end = offset + length , __checkBounds(buf.length, offset, end) , __valueOf(buf, offset, end))), checkNcName);
32.17792 +  }
32.17793 +   else {
32.17794 +    attributeName = ATTRIBUTE_NAMES[index];
32.17795 +    name = attributeName.local[0];
32.17796 +    if (!localEqualsBuffer(name, buf, offset, length)) {
32.17797 +      return createAttributeName(String((end_0 = offset + length , __checkBounds(buf.length, offset, end_0) , __valueOf(buf, offset, end_0))), checkNcName);
32.17798 +    }
32.17799 +    return attributeName;
32.17800 +  }
32.17801 +}
32.17802 +
32.17803 +function AttributeName(){
32.17804 +}
32.17805 +
32.17806 +_ = AttributeName.prototype = new Object_0();
32.17807 +_.getClass$ = getClass_49;
32.17808 +_.typeId$ = 36;
32.17809 +_.local = null;
32.17810 +_.ncname = null;
32.17811 +_.uri = null;
32.17812 +_.xmlns = false;
32.17813 +var ABBR, ACCENT, ACCENTUNDER, ACCENT_HEIGHT, ACCEPT, ACCEPT_CHARSET, ACCESSKEY, ACCUMULATE, ACTION, ACTIONTYPE, ACTIVE, ADDITIVE, ALIGN, ALIGNMENTSCOPE, ALIGNMENT_BASELINE, ALINK, ALL_NCNAME, ALL_NO_NCNAME, ALL_NO_NS, ALL_NO_PREFIX, ALPHABETIC, ALT, ALTIMG, ALTTEXT, AMPLITUDE, ARABIC_FORM, ARCHIVE, ARIA_ACTIVEDESCENDANT, ARIA_ATOMIC, ARIA_AUTOCOMPLETE, ARIA_BUSY, ARIA_CHANNEL, ARIA_CHECKED, ARIA_CONTROLS, ARIA_DATATYPE, ARIA_DESCRIBEDBY, ARIA_DISABLED, ARIA_DROPEFFECT, ARIA_EXPANDED, ARIA_FLOWTO, ARIA_GRAB, ARIA_HASPOPUP, ARIA_HIDDEN, ARIA_INVALID, ARIA_LABELLEDBY, ARIA_LEVEL, ARIA_LIVE, ARIA_MULTILINE, ARIA_MULTISELECTABLE, ARIA_OWNS, ARIA_POSINSET, ARIA_PRESSED, ARIA_READONLY, ARIA_RELEVANT, ARIA_REQUIRED, ARIA_SECRET, ARIA_SELECTED, ARIA_SETSIZE, ARIA_SORT, ARIA_TEMPLATEID, ARIA_VALUEMAX, ARIA_VALUEMIN, ARIA_VALUENOW, ASCENT, ASYNC, ATTRIBUTENAME, ATTRIBUTETYPE, ATTRIBUTE_HASHES, ATTRIBUTE_NAMES, AUTOCOMPLETE, AUTOFOCUS, AUTOPLAY, AUTOSUBMIT, AXIS, AZIMUTH, BACKGROUND, BASE, BASEFREQUENCY, BASELINE, BASELINE_SHIFT, BASEPROFILE, BBOX, BEGIN, BEVELLED, BGCOLOR, BIAS, BORDER, BY, CALCMODE, CAP_HEIGHT, CELLPADDING, CELLSPACING, CHAR, CHAROFF, CHARSET, CHECKED, CITE, CLASS, CLASSID, CLEAR, CLIP, CLIPPATHUNITS, CLIP_PATH, CLIP_RULE, CLOSE, CLOSURE, CODE, CODEBASE, CODETYPE, COLOR, COLOR_INTERPOLATION, COLOR_INTERPOLATION_FILTERS, COLOR_PROFILE, COLOR_RENDERING, COLS, COLSPAN, COLUMNALIGN, COLUMNLINES, COLUMNSPACING, COLUMNSPAN, COLUMNWIDTH, COMPACT, CONTENT, CONTENTEDITABLE, CONTENTSCRIPTTYPE, CONTENTSTYLETYPE, CONTEXTMENU, CONTROLS, COORDS, CURSOR, CX, CY, D, DATA, DATAFLD, DATAFORMATAS, DATASRC, DATETIME, DECLARE, DEFAULT, DEFER, DEFINITIONURL, DEPTH, DESCENT, DIFFUSECONSTANT, DIR, DIRECTION, DISABLED, DISPLAY, DISPLAYSTYLE, DIVISOR, DOMINANT_BASELINE, DRAGGABLE, DUR, DX, DY, EDGE, EDGEMODE, ELEVATION, ENABLE_BACKGROUND, ENCODING, ENCTYPE, END, EQUALCOLUMNS, EQUALROWS, EXPONENT, EXTERNALRESOURCESREQUIRED, FACE, FENCE, FILL, FILL_OPACITY, FILL_RULE, FILTER, FILTERRES, FILTERUNITS, FLOOD_COLOR, FLOOD_OPACITY, FONTFAMILY, FONTSIZE, FONTSTYLE, FONTWEIGHT, FONT_FAMILY, FONT_SIZE, FONT_SIZE_ADJUST, FONT_STRETCH, FONT_STYLE, FONT_VARIANT, FONT_WEIGHT, FOR, FORM, FORMAT, FRAME, FRAMEBORDER, FRAMESPACING, FROM, FX, FY, G1, G2, GLYPHREF, GLYPH_NAME, GLYPH_ORIENTATION_HORIZONTAL, GLYPH_ORIENTATION_VERTICAL, GRADIENTTRANSFORM, GRADIENTUNITS, GROUPALIGN, HANGING, HEADERS, HEIGHT, HIDDEN, HIDEFOCUS, HIGH, HORIZ_ADV_X, HORIZ_ORIGIN_X, HORIZ_ORIGIN_Y, HREF, HREFLANG, HSPACE, HTTP_EQUIV, ICON, ID, IDEOGRAPHIC, IMAGE_RENDERING, IN, IN2, INDEX, INPUTMODE, INTERCEPT, IRRELEVANT, ISMAP, K, K1, K2, K3, K4, KERNELMATRIX, KERNELUNITLENGTH, KERNING, KEYPOINTS, KEYSPLINES, KEYTIMES, LABEL, LANG, LANGUAGE, LANG_NS, LANG_PREFIX, LARGEOP, LENGTHADJUST, LETTER_SPACING, LIGHTING_COLOR, LIMITINGCONEANGLE, LINEBREAK, LINETHICKNESS, LINK, LIST, LOCAL, LONGDESC, LOOPEND, LOOPSTART, LOW, LOWSRC, LQUOTE, LSPACE, MACROS, MANIFEST, MARGINHEIGHT, MARGINWIDTH, MARKERHEIGHT, MARKERUNITS, MARKERWIDTH, MARKER_END, MARKER_MID, MARKER_START, MASK, MASKCONTENTUNITS, MASKUNITS, MATHBACKGROUND, MATHCOLOR, MATHEMATICAL, MATHSIZE, MATHVARIANT, MAX, MAXLENGTH, MAXSIZE, MEDIA, MEDIUMMATHSPACE, METHOD, MIN, MINSIZE, MODE, MOVABLELIMITS, MULTIPLE, NAME, NARGS, NOHREF, NORESIZE, NOSHADE, NOTATION, NOWRAP, NUMOCTAVES, OBJECT, OCCURRENCE, OFFSET, ONABORT, ONACTIVATE, ONAFTERPRINT, ONAFTERUPDATE, ONBEFORDEACTIVATE, ONBEFOREACTIVATE, ONBEFORECOPY, ONBEFORECUT, ONBEFOREEDITFOCUS, ONBEFOREPASTE, ONBEFOREPRINT, ONBEFOREUNLOAD, ONBEFOREUPDATE, ONBEGIN, ONBLUR, ONBOUNCE, ONCELLCHANGE, ONCHANGE, ONCLICK, ONCONTEXTMENU, ONCONTROLSELECT, ONCOPY, ONCUT, ONDATAAVAILABLE, ONDATASETCHANGED, ONDATASETCOMPLETE, ONDBLCLICK, ONDEACTIVATE, ONDRAG, ONDRAGDROP, ONDRAGEND, ONDRAGENTER, ONDRAGLEAVE, ONDRAGOVER, ONDRAGSTART, ONDROP, ONEND, ONERROR, ONERRORUPDATE, ONFILTERCHANGE, ONFINISH, ONFOCUS, ONFOCUSIN, ONFOCUSOUT, ONFORMCHANGE, ONFORMINPUT, ONHELP, ONINPUT, ONINVALID, ONKEYDOWN, ONKEYPRESS, ONKEYUP, ONLOAD, ONLOSECAPTURE, ONMESSAGE, ONMOUSEDOWN, ONMOUSEENTER, ONMOUSELEAVE, ONMOUSEMOVE, ONMOUSEOUT, ONMOUSEOVER, ONMOUSEUP, ONMOUSEWHEEL, ONMOVE, ONMOVEEND, ONMOVESTART, ONPASTE, ONPROPERTYCHANGE, ONREADYSTATECHANGE, ONREPEAT, ONRESET, ONRESIZE, ONROWENTER, ONROWEXIT, ONROWSDELETE, ONROWSINSERTED, ONSCROLL, ONSELECT, ONSELECTSTART, ONSTART, ONSTOP, ONSUBMIT, ONUNLOAD, ONZOOM, OPACITY, OPEN, OPERATOR, OPTIMUM, ORDER, ORIENT, ORIENTATION, ORIGIN, OTHER, OVERFLOW, OVERLINE_POSITION, OVERLINE_THICKNESS, PANOSE_1, PATH, PATHLENGTH, PATTERN, PATTERNCONTENTUNITS, PATTERNTRANSFORM, PATTERNUNITS, PING, PLAYCOUNT, POINTER_EVENTS, POINTS, POINTSATX, POINTSATY, POINTSATZ, POSTER, PRESERVEALPHA, PRESERVEASPECTRATIO, PRIMITIVEUNITS, PROFILE, PROMPT, R, RADIOGROUP, RADIUS, READONLY, REFX, REFY, REL, RENDERING_INTENT, REPEAT, REPEATCOUNT, REPEATDUR, REPEAT_MAX, REPEAT_MIN, REPEAT_START, REPEAT_TEMPLATE, REPLACE, REQUIRED, REQUIREDEXTENSIONS, REQUIREDFEATURES, RESTART, RESULT, REV, ROLE, ROTATE, ROWALIGN, ROWLINES, ROWS, ROWSPACING, ROWSPAN, RQUOTE, RSPACE, RT, RULES, RX, RY, SANDBOX, SCALE, SCHEME, SCOPE, SCOPED, SCRIPTLEVEL, SCRIPTMINSIZE, SCRIPTSIZEMULTIPLIER, SCROLLDELAY, SCROLLING, SEAMLESS, SEED, SELECTED, SELECTION, SEPARATOR, SEPARATORS, SHAPE, SHAPE_RENDERING, SIZE, SLOPE, SPACING, SPAN, SPECIFICATION, SPECULARCONSTANT, SPECULAREXPONENT, SPEED, SPREADMETHOD, SRC, STANDBY, START, STARTOFFSET, STDDEVIATION, STEMH, STEMV, STEP, STITCHTILES, STOP_COLOR, STOP_OPACITY, STRETCHY, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, STRING, STROKE, STROKE_DASHARRAY, STROKE_DASHOFFSET, STROKE_LINECAP, STROKE_LINEJOIN, STROKE_MITERLIMIT, STROKE_OPACITY, STROKE_WIDTH, STYLE, SUBSCRIPTSHIFT, SUMMARY, SUPERSCRIPTSHIFT, SURFACESCALE, SYMMETRIC, SYSTEMLANGUAGE, TABINDEX, TABLEVALUES, TARGET, TARGETX, TARGETY, TEMPLATE, TEXT, TEXTLENGTH, TEXT_ANCHOR, TEXT_DECORATION, TEXT_RENDERING, THICKMATHSPACE, THINMATHSPACE, TITLE, TO, TRANSFORM, TYPE, U1, U2, UNDERLINE_POSITION, UNDERLINE_THICKNESS, UNICODE, UNICODE_BIDI, UNICODE_RANGE, UNITS_PER_EM, UNSELECTABLE, USEMAP, VALIGN, VALUE, VALUES, VALUETYPE, VERSION, VERT_ADV_Y, VERT_ORIGIN_X, VERT_ORIGIN_Y, VERYTHICKMATHSPACE, VERYTHINMATHSPACE, VERYVERYTHICKMATHSPACE, VERYVERYTHINMATHSPACE, VIEWBOX, VIEWTARGET, VISIBILITY, VLINK, VSPACE, V_ALPHABETIC, V_HANGING, V_IDEOGRAPHIC, V_MATHEMATICAL, WHEN, WIDTH, WIDTHS, WORD_SPACING, WRAP, WRITING_MODE, X, X1, X2, XCHANNELSELECTOR, XLINK_ACTUATE, XLINK_ARCROLE, XLINK_HREF, XLINK_NS, XLINK_PREFIX, XLINK_ROLE, XLINK_SHOW, XLINK_TITLE, XLINK_TYPE, XMLNS, XMLNS_NS, XMLNS_PREFIX, XMLNS_XLINK, XML_BASE, XML_LANG, XML_NS, XML_PREFIX, XML_SPACE, XREF, X_HEIGHT, Y, Y1, Y2, YCHANNELSELECTOR, Z, ZOOMANDPAN;
32.17814 +function $clinit_89(){
32.17815 +  $clinit_89 = nullMethod;
32.17816 +  $ElementName(new ElementName(), null);
32.17817 +  A = $ElementName_0(new ElementName(), 'a', 'a', 1, false, false, false);
32.17818 +  B = $ElementName_0(new ElementName(), 'b', 'b', 45, false, false, false);
32.17819 +  G = $ElementName_0(new ElementName(), 'g', 'g', 0, false, false, false);
32.17820 +  I = $ElementName_0(new ElementName(), 'i', 'i', 45, false, false, false);
32.17821 +  P = $ElementName_0(new ElementName(), 'p', 'p', 29, true, false, false);
32.17822 +  Q = $ElementName_0(new ElementName(), 'q', 'q', 0, false, false, false);
32.17823 +  S = $ElementName_0(new ElementName(), 's', 's', 45, false, false, false);
32.17824 +  U = $ElementName_0(new ElementName(), 'u', 'u', 45, false, false, false);
32.17825 +  BR = $ElementName_0(new ElementName(), 'br', 'br', 4, true, false, false);
32.17826 +  CI = $ElementName_0(new ElementName(), 'ci', 'ci', 0, false, false, false);
32.17827 +  CN = $ElementName_0(new ElementName(), 'cn', 'cn', 0, false, false, false);
32.17828 +  DD = $ElementName_0(new ElementName(), 'dd', 'dd', 41, true, false, false);
32.17829 +  DL = $ElementName_0(new ElementName(), 'dl', 'dl', 46, true, false, false);
32.17830 +  DT = $ElementName_0(new ElementName(), 'dt', 'dt', 41, true, false, false);
32.17831 +  EM = $ElementName_0(new ElementName(), 'em', 'em', 45, false, false, false);
32.17832 +  EQ = $ElementName_0(new ElementName(), 'eq', 'eq', 0, false, false, false);
32.17833 +  FN = $ElementName_0(new ElementName(), 'fn', 'fn', 0, false, false, false);
32.17834 +  H1 = $ElementName_0(new ElementName(), 'h1', 'h1', 42, true, false, false);
32.17835 +  H2 = $ElementName_0(new ElementName(), 'h2', 'h2', 42, true, false, false);
32.17836 +  H3 = $ElementName_0(new ElementName(), 'h3', 'h3', 42, true, false, false);
32.17837 +  H4 = $ElementName_0(new ElementName(), 'h4', 'h4', 42, true, false, false);
32.17838 +  H5 = $ElementName_0(new ElementName(), 'h5', 'h5', 42, true, false, false);
32.17839 +  H6 = $ElementName_0(new ElementName(), 'h6', 'h6', 42, true, false, false);
32.17840 +  GT = $ElementName_0(new ElementName(), 'gt', 'gt', 0, false, false, false);
32.17841 +  HR = $ElementName_0(new ElementName(), 'hr', 'hr', 22, true, false, false);
32.17842 +  IN_0 = $ElementName_0(new ElementName(), 'in', 'in', 0, false, false, false);
32.17843 +  LI = $ElementName_0(new ElementName(), 'li', 'li', 15, true, false, false);
32.17844 +  LN = $ElementName_0(new ElementName(), 'ln', 'ln', 0, false, false, false);
32.17845 +  LT = $ElementName_0(new ElementName(), 'lt', 'lt', 0, false, false, false);
32.17846 +  MI = $ElementName_0(new ElementName(), 'mi', 'mi', 57, false, false, false);
32.17847 +  MN = $ElementName_0(new ElementName(), 'mn', 'mn', 57, false, false, false);
32.17848 +  MO = $ElementName_0(new ElementName(), 'mo', 'mo', 57, false, false, false);
32.17849 +  MS = $ElementName_0(new ElementName(), 'ms', 'ms', 57, false, false, false);
32.17850 +  OL = $ElementName_0(new ElementName(), 'ol', 'ol', 46, true, false, false);
32.17851 +  OR = $ElementName_0(new ElementName(), 'or', 'or', 0, false, false, false);
32.17852 +  PI = $ElementName_0(new ElementName(), 'pi', 'pi', 0, false, false, false);
32.17853 +  RP = $ElementName_0(new ElementName(), 'rp', 'rp', 53, false, false, false);
32.17854 +  RT_0 = $ElementName_0(new ElementName(), 'rt', 'rt', 53, false, false, false);
32.17855 +  TD = $ElementName_0(new ElementName(), 'td', 'td', 40, false, true, false);
32.17856 +  TH = $ElementName_0(new ElementName(), 'th', 'th', 40, false, true, false);
32.17857 +  TR = $ElementName_0(new ElementName(), 'tr', 'tr', 37, true, false, true);
32.17858 +  TT = $ElementName_0(new ElementName(), 'tt', 'tt', 45, false, false, false);
32.17859 +  UL = $ElementName_0(new ElementName(), 'ul', 'ul', 46, true, false, false);
32.17860 +  AND = $ElementName_0(new ElementName(), 'and', 'and', 0, false, false, false);
32.17861 +  ARG = $ElementName_0(new ElementName(), 'arg', 'arg', 0, false, false, false);
32.17862 +  ABS = $ElementName_0(new ElementName(), 'abs', 'abs', 0, false, false, false);
32.17863 +  BIG = $ElementName_0(new ElementName(), 'big', 'big', 45, false, false, false);
32.17864 +  BDO = $ElementName_0(new ElementName(), 'bdo', 'bdo', 0, false, false, false);
32.17865 +  CSC = $ElementName_0(new ElementName(), 'csc', 'csc', 0, false, false, false);
32.17866 +  COL = $ElementName_0(new ElementName(), 'col', 'col', 7, true, false, false);
32.17867 +  COS = $ElementName_0(new ElementName(), 'cos', 'cos', 0, false, false, false);
32.17868 +  COT = $ElementName_0(new ElementName(), 'cot', 'cot', 0, false, false, false);
32.17869 +  DEL = $ElementName_0(new ElementName(), 'del', 'del', 0, false, false, false);
32.17870 +  DFN = $ElementName_0(new ElementName(), 'dfn', 'dfn', 0, false, false, false);
32.17871 +  DIR_0 = $ElementName_0(new ElementName(), 'dir', 'dir', 51, true, false, false);
32.17872 +  DIV = $ElementName_0(new ElementName(), 'div', 'div', 50, true, false, false);
32.17873 +  EXP = $ElementName_0(new ElementName(), 'exp', 'exp', 0, false, false, false);
32.17874 +  GCD = $ElementName_0(new ElementName(), 'gcd', 'gcd', 0, false, false, false);
32.17875 +  GEQ = $ElementName_0(new ElementName(), 'geq', 'geq', 0, false, false, false);
32.17876 +  IMG = $ElementName_0(new ElementName(), 'img', 'img', 48, true, false, false);
32.17877 +  INS = $ElementName_0(new ElementName(), 'ins', 'ins', 0, false, false, false);
32.17878 +  INT = $ElementName_0(new ElementName(), 'int', 'int', 0, false, false, false);
32.17879 +  KBD = $ElementName_0(new ElementName(), 'kbd', 'kbd', 0, false, false, false);
32.17880 +  LOG = $ElementName_0(new ElementName(), 'log', 'log', 0, false, false, false);
32.17881 +  LCM = $ElementName_0(new ElementName(), 'lcm', 'lcm', 0, false, false, false);
32.17882 +  LEQ = $ElementName_0(new ElementName(), 'leq', 'leq', 0, false, false, false);
32.17883 +  MTD = $ElementName_0(new ElementName(), 'mtd', 'mtd', 0, false, false, false);
32.17884 +  MIN_0 = $ElementName_0(new ElementName(), 'min', 'min', 0, false, false, false);
32.17885 +  MAP = $ElementName_0(new ElementName(), 'map', 'map', 0, false, false, false);
32.17886 +  MTR = $ElementName_0(new ElementName(), 'mtr', 'mtr', 0, false, false, false);
32.17887 +  MAX_0 = $ElementName_0(new ElementName(), 'max', 'max', 0, false, false, false);
32.17888 +  NEQ = $ElementName_0(new ElementName(), 'neq', 'neq', 0, false, false, false);
32.17889 +  NOT = $ElementName_0(new ElementName(), 'not', 'not', 0, false, false, false);
32.17890 +  NAV = $ElementName_0(new ElementName(), 'nav', 'nav', 51, true, false, false);
32.17891 +  PRE = $ElementName_0(new ElementName(), 'pre', 'pre', 44, true, false, false);
32.17892 +  REM = $ElementName_0(new ElementName(), 'rem', 'rem', 0, false, false, false);
32.17893 +  SUB = $ElementName_0(new ElementName(), 'sub', 'sub', 52, false, false, false);
32.17894 +  SEC = $ElementName_0(new ElementName(), 'sec', 'sec', 0, false, false, false);
32.17895 +  SVG = $ElementName_0(new ElementName(), 'svg', 'svg', 19, false, false, false);
32.17896 +  SUM = $ElementName_0(new ElementName(), 'sum', 'sum', 0, false, false, false);
32.17897 +  SIN = $ElementName_0(new ElementName(), 'sin', 'sin', 0, false, false, false);
32.17898 +  SEP = $ElementName_0(new ElementName(), 'sep', 'sep', 0, false, false, false);
32.17899 +  SUP = $ElementName_0(new ElementName(), 'sup', 'sup', 52, false, false, false);
32.17900 +  SET = $ElementName_0(new ElementName(), 'set', 'set', 0, false, false, false);
32.17901 +  TAN = $ElementName_0(new ElementName(), 'tan', 'tan', 0, false, false, false);
32.17902 +  USE = $ElementName_0(new ElementName(), 'use', 'use', 0, false, false, false);
32.17903 +  VAR = $ElementName_0(new ElementName(), 'var', 'var', 52, false, false, false);
32.17904 +  WBR = $ElementName_0(new ElementName(), 'wbr', 'wbr', 49, true, false, false);
32.17905 +  XMP = $ElementName_0(new ElementName(), 'xmp', 'xmp', 38, false, false, false);
32.17906 +  XOR = $ElementName_0(new ElementName(), 'xor', 'xor', 0, false, false, false);
32.17907 +  AREA = $ElementName_0(new ElementName(), 'area', 'area', 49, true, false, false);
32.17908 +  ABBR_0 = $ElementName_0(new ElementName(), 'abbr', 'abbr', 0, false, false, false);
32.17909 +  BASE_0 = $ElementName_0(new ElementName(), 'base', 'base', 2, true, false, false);
32.17910 +  BVAR = $ElementName_0(new ElementName(), 'bvar', 'bvar', 0, false, false, false);
32.17911 +  BODY = $ElementName_0(new ElementName(), 'body', 'body', 3, true, false, false);
32.17912 +  CARD = $ElementName_0(new ElementName(), 'card', 'card', 0, false, false, false);
32.17913 +  CODE_0 = $ElementName_0(new ElementName(), 'code', 'code', 45, false, false, false);
32.17914 +  CITE_0 = $ElementName_0(new ElementName(), 'cite', 'cite', 0, false, false, false);
32.17915 +  CSCH = $ElementName_0(new ElementName(), 'csch', 'csch', 0, false, false, false);
32.17916 +  COSH = $ElementName_0(new ElementName(), 'cosh', 'cosh', 0, false, false, false);
32.17917 +  COTH = $ElementName_0(new ElementName(), 'coth', 'coth', 0, false, false, false);
32.17918 +  CURL = $ElementName_0(new ElementName(), 'curl', 'curl', 0, false, false, false);
32.17919 +  DESC = $ElementName_0(new ElementName(), 'desc', 'desc', 59, false, false, false);
32.17920 +  DIFF = $ElementName_0(new ElementName(), 'diff', 'diff', 0, false, false, false);
32.17921 +  DEFS = $ElementName_0(new ElementName(), 'defs', 'defs', 0, false, false, false);
32.17922 +  FORM_0 = $ElementName_0(new ElementName(), 'form', 'form', 9, true, false, false);
32.17923 +  FONT = $ElementName_0(new ElementName(), 'font', 'font', 64, false, false, false);
32.17924 +  GRAD = $ElementName_0(new ElementName(), 'grad', 'grad', 0, false, false, false);
32.17925 +  HEAD = $ElementName_0(new ElementName(), 'head', 'head', 20, true, false, false);
32.17926 +  HTML_0 = $ElementName_0(new ElementName(), 'html', 'html', 23, false, true, false);
32.17927 +  LINE = $ElementName_0(new ElementName(), 'line', 'line', 0, false, false, false);
32.17928 +  LINK_0 = $ElementName_0(new ElementName(), 'link', 'link', 16, true, false, false);
32.17929 +  LIST_0 = $ElementName_0(new ElementName(), 'list', 'list', 0, false, false, false);
32.17930 +  META = $ElementName_0(new ElementName(), 'meta', 'meta', 18, true, false, false);
32.17931 +  MSUB = $ElementName_0(new ElementName(), 'msub', 'msub', 0, false, false, false);
32.17932 +  MODE_0 = $ElementName_0(new ElementName(), 'mode', 'mode', 0, false, false, false);
32.17933 +  MATH = $ElementName_0(new ElementName(), 'math', 'math', 17, false, false, false);
32.17934 +  MARK = $ElementName_0(new ElementName(), 'mark', 'mark', 0, false, false, false);
32.17935 +  MASK_0 = $ElementName_0(new ElementName(), 'mask', 'mask', 0, false, false, false);
32.17936 +  MEAN = $ElementName_0(new ElementName(), 'mean', 'mean', 0, false, false, false);
32.17937 +  MSUP = $ElementName_0(new ElementName(), 'msup', 'msup', 0, false, false, false);
32.17938 +  MENU = $ElementName_0(new ElementName(), 'menu', 'menu', 50, true, false, false);
32.17939 +  MROW = $ElementName_0(new ElementName(), 'mrow', 'mrow', 0, false, false, false);
32.17940 +  NONE = $ElementName_0(new ElementName(), 'none', 'none', 0, false, false, false);
32.17941 +  NOBR = $ElementName_0(new ElementName(), 'nobr', 'nobr', 24, false, false, false);
32.17942 +  NEST = $ElementName_0(new ElementName(), 'nest', 'nest', 0, false, false, false);
32.17943 +  PATH_0 = $ElementName_0(new ElementName(), 'path', 'path', 0, false, false, false);
32.17944 +  PLUS = $ElementName_0(new ElementName(), 'plus', 'plus', 0, false, false, false);
32.17945 +  RULE = $ElementName_0(new ElementName(), 'rule', 'rule', 0, false, false, false);
32.17946 +  REAL = $ElementName_0(new ElementName(), 'real', 'real', 0, false, false, false);
32.17947 +  RELN = $ElementName_0(new ElementName(), 'reln', 'reln', 0, false, false, false);
32.17948 +  RECT = $ElementName_0(new ElementName(), 'rect', 'rect', 0, false, false, false);
32.17949 +  ROOT = $ElementName_0(new ElementName(), 'root', 'root', 0, false, false, false);
32.17950 +  RUBY = $ElementName_0(new ElementName(), 'ruby', 'ruby', 52, false, false, false);
32.17951 +  SECH = $ElementName_0(new ElementName(), 'sech', 'sech', 0, false, false, false);
32.17952 +  SINH = $ElementName_0(new ElementName(), 'sinh', 'sinh', 0, false, false, false);
32.17953 +  SPAN_0 = $ElementName_0(new ElementName(), 'span', 'span', 52, false, false, false);
32.17954 +  SAMP = $ElementName_0(new ElementName(), 'samp', 'samp', 0, false, false, false);
32.17955 +  STOP = $ElementName_0(new ElementName(), 'stop', 'stop', 0, false, false, false);
32.17956 +  SDEV = $ElementName_0(new ElementName(), 'sdev', 'sdev', 0, false, false, false);
32.17957 +  TIME = $ElementName_0(new ElementName(), 'time', 'time', 0, false, false, false);
32.17958 +  TRUE = $ElementName_0(new ElementName(), 'true', 'true', 0, false, false, false);
32.17959 +  TREF = $ElementName_0(new ElementName(), 'tref', 'tref', 0, false, false, false);
32.17960 +  TANH = $ElementName_0(new ElementName(), 'tanh', 'tanh', 0, false, false, false);
32.17961 +  TEXT_0 = $ElementName_0(new ElementName(), 'text', 'text', 0, false, false, false);
32.17962 +  VIEW = $ElementName_0(new ElementName(), 'view', 'view', 0, false, false, false);
32.17963 +  ASIDE = $ElementName_0(new ElementName(), 'aside', 'aside', 51, true, false, false);
32.17964 +  AUDIO = $ElementName_0(new ElementName(), 'audio', 'audio', 0, false, false, false);
32.17965 +  APPLY = $ElementName_0(new ElementName(), 'apply', 'apply', 0, false, false, false);
32.17966 +  EMBED = $ElementName_0(new ElementName(), 'embed', 'embed', 48, true, false, false);
32.17967 +  FRAME_0 = $ElementName_0(new ElementName(), 'frame', 'frame', 10, true, false, false);
32.17968 +  FALSE = $ElementName_0(new ElementName(), 'false', 'false', 0, false, false, false);
32.17969 +  FLOOR = $ElementName_0(new ElementName(), 'floor', 'floor', 0, false, false, false);
32.17970 +  GLYPH = $ElementName_0(new ElementName(), 'glyph', 'glyph', 0, false, false, false);
32.17971 +  HKERN = $ElementName_0(new ElementName(), 'hkern', 'hkern', 0, false, false, false);
32.17972 +  IMAGE = $ElementName_0(new ElementName(), 'image', 'image', 12, true, false, false);
32.17973 +  IDENT = $ElementName_0(new ElementName(), 'ident', 'ident', 0, false, false, false);
32.17974 +  INPUT = $ElementName_0(new ElementName(), 'input', 'input', 13, true, false, false);
32.17975 +  LABEL_0 = $ElementName_0(new ElementName(), 'label', 'label', 62, false, false, false);
32.17976 +  LIMIT = $ElementName_0(new ElementName(), 'limit', 'limit', 0, false, false, false);
32.17977 +  MFRAC = $ElementName_0(new ElementName(), 'mfrac', 'mfrac', 0, false, false, false);
32.17978 +  MPATH = $ElementName_0(new ElementName(), 'mpath', 'mpath', 0, false, false, false);
32.17979 +  METER = $ElementName_0(new ElementName(), 'meter', 'meter', 0, false, false, false);
32.17980 +  MOVER = $ElementName_0(new ElementName(), 'mover', 'mover', 0, false, false, false);
32.17981 +  MINUS = $ElementName_0(new ElementName(), 'minus', 'minus', 0, false, false, false);
32.17982 +  MROOT = $ElementName_0(new ElementName(), 'mroot', 'mroot', 0, false, false, false);
32.17983 +  MSQRT = $ElementName_0(new ElementName(), 'msqrt', 'msqrt', 0, false, false, false);
32.17984 +  MTEXT = $ElementName_0(new ElementName(), 'mtext', 'mtext', 57, false, false, false);
32.17985 +  NOTIN = $ElementName_0(new ElementName(), 'notin', 'notin', 0, false, false, false);
32.17986 +  PIECE = $ElementName_0(new ElementName(), 'piece', 'piece', 0, false, false, false);
32.17987 +  PARAM = $ElementName_0(new ElementName(), 'param', 'param', 55, true, false, false);
32.17988 +  POWER = $ElementName_0(new ElementName(), 'power', 'power', 0, false, false, false);
32.17989 +  REALS = $ElementName_0(new ElementName(), 'reals', 'reals', 0, false, false, false);
32.17990 +  STYLE_0 = $ElementName_0(new ElementName(), 'style', 'style', 33, true, false, false);
32.17991 +  SMALL = $ElementName_0(new ElementName(), 'small', 'small', 45, false, false, false);
32.17992 +  THEAD = $ElementName_0(new ElementName(), 'thead', 'thead', 39, true, false, true);
32.17993 +  TABLE = $ElementName_0(new ElementName(), 'table', 'table', 34, false, true, true);
32.17994 +  TITLE_0 = $ElementName_0(new ElementName(), 'title', 'title', 36, true, false, false);
32.17995 +  TSPAN = $ElementName_0(new ElementName(), 'tspan', 'tspan', 0, false, false, false);
32.17996 +  TIMES = $ElementName_0(new ElementName(), 'times', 'times', 0, false, false, false);
32.17997 +  TFOOT = $ElementName_0(new ElementName(), 'tfoot', 'tfoot', 39, true, false, true);
32.17998 +  TBODY = $ElementName_0(new ElementName(), 'tbody', 'tbody', 39, true, false, true);
32.17999 +  UNION = $ElementName_0(new ElementName(), 'union', 'union', 0, false, false, false);
32.18000 +  VKERN = $ElementName_0(new ElementName(), 'vkern', 'vkern', 0, false, false, false);
32.18001 +  VIDEO = $ElementName_0(new ElementName(), 'video', 'video', 0, false, false, false);
32.18002 +  ARCSEC = $ElementName_0(new ElementName(), 'arcsec', 'arcsec', 0, false, false, false);
32.18003 +  ARCCSC = $ElementName_0(new ElementName(), 'arccsc', 'arccsc', 0, false, false, false);
32.18004 +  ARCTAN = $ElementName_0(new ElementName(), 'arctan', 'arctan', 0, false, false, false);
32.18005 +  ARCSIN = $ElementName_0(new ElementName(), 'arcsin', 'arcsin', 0, false, false, false);
32.18006 +  ARCCOS = $ElementName_0(new ElementName(), 'arccos', 'arccos', 0, false, false, false);
32.18007 +  APPLET = $ElementName_0(new ElementName(), 'applet', 'applet', 43, false, true, false);
32.18008 +  ARCCOT = $ElementName_0(new ElementName(), 'arccot', 'arccot', 0, false, false, false);
32.18009 +  APPROX = $ElementName_0(new ElementName(), 'approx', 'approx', 0, false, false, false);
32.18010 +  BUTTON = $ElementName_0(new ElementName(), 'button', 'button', 5, false, true, false);
32.18011 +  CIRCLE = $ElementName_0(new ElementName(), 'circle', 'circle', 0, false, false, false);
32.18012 +  CENTER = $ElementName_0(new ElementName(), 'center', 'center', 50, true, false, false);
32.18013 +  CURSOR_0 = $ElementName_0(new ElementName(), 'cursor', 'cursor', 0, false, false, false);
32.18014 +  CANVAS = $ElementName_0(new ElementName(), 'canvas', 'canvas', 0, false, false, false);
32.18015 +  DIVIDE = $ElementName_0(new ElementName(), 'divide', 'divide', 0, false, false, false);
32.18016 +  DEGREE = $ElementName_0(new ElementName(), 'degree', 'degree', 0, false, false, false);
32.18017 +  DIALOG = $ElementName_0(new ElementName(), 'dialog', 'dialog', 51, true, false, false);
32.18018 +  DOMAIN = $ElementName_0(new ElementName(), 'domain', 'domain', 0, false, false, false);
32.18019 +  EXISTS = $ElementName_0(new ElementName(), 'exists', 'exists', 0, false, false, false);
32.18020 +  FETILE = $ElementName_0(new ElementName(), 'fetile', 'feTile', 0, false, false, false);
32.18021 +  FIGURE = $ElementName_0(new ElementName(), 'figure', 'figure', 51, true, false, false);
32.18022 +  FORALL = $ElementName_0(new ElementName(), 'forall', 'forall', 0, false, false, false);
32.18023 +  FILTER_0 = $ElementName_0(new ElementName(), 'filter', 'filter', 0, false, false, false);
32.18024 +  FOOTER = $ElementName_0(new ElementName(), 'footer', 'footer', 51, true, false, false);
32.18025 +  HEADER = $ElementName_0(new ElementName(), 'header', 'header', 51, true, false, false);
32.18026 +  IFRAME = $ElementName_0(new ElementName(), 'iframe', 'iframe', 47, true, false, false);
32.18027 +  KEYGEN = $ElementName_0(new ElementName(), 'keygen', 'keygen', 65, true, false, false);
32.18028 +  LAMBDA = $ElementName_0(new ElementName(), 'lambda', 'lambda', 0, false, false, false);
32.18029 +  LEGEND = $ElementName_0(new ElementName(), 'legend', 'legend', 0, false, false, false);
32.18030 +  MSPACE = $ElementName_0(new ElementName(), 'mspace', 'mspace', 0, false, false, false);
32.18031 +  MTABLE = $ElementName_0(new ElementName(), 'mtable', 'mtable', 0, false, false, false);
32.18032 +  MSTYLE = $ElementName_0(new ElementName(), 'mstyle', 'mstyle', 0, false, false, false);
32.18033 +  MGLYPH = $ElementName_0(new ElementName(), 'mglyph', 'mglyph', 56, false, false, false);
32.18034 +  MEDIAN = $ElementName_0(new ElementName(), 'median', 'median', 0, false, false, false);
32.18035 +  MUNDER = $ElementName_0(new ElementName(), 'munder', 'munder', 0, false, false, false);
32.18036 +  MARKER = $ElementName_0(new ElementName(), 'marker', 'marker', 0, false, false, false);
32.18037 +  MERROR = $ElementName_0(new ElementName(), 'merror', 'merror', 0, false, false, false);
32.18038 +  MOMENT = $ElementName_0(new ElementName(), 'moment', 'moment', 0, false, false, false);
32.18039 +  MATRIX = $ElementName_0(new ElementName(), 'matrix', 'matrix', 0, false, false, false);
32.18040 +  OPTION = $ElementName_0(new ElementName(), 'option', 'option', 28, true, false, false);
32.18041 +  OBJECT_0 = $ElementName_0(new ElementName(), 'object', 'object', 63, false, true, false);
32.18042 +  OUTPUT = $ElementName_0(new ElementName(), 'output', 'output', 62, false, false, false);
32.18043 +  PRIMES = $ElementName_0(new ElementName(), 'primes', 'primes', 0, false, false, false);
32.18044 +  SOURCE = $ElementName_0(new ElementName(), 'source', 'source', 55, false, false, false);
32.18045 +  STRIKE = $ElementName_0(new ElementName(), 'strike', 'strike', 45, false, false, false);
32.18046 +  STRONG = $ElementName_0(new ElementName(), 'strong', 'strong', 45, false, false, false);
32.18047 +  SWITCH = $ElementName_0(new ElementName(), 'switch', 'switch', 0, false, false, false);
32.18048 +  SYMBOL = $ElementName_0(new ElementName(), 'symbol', 'symbol', 0, false, false, false);
32.18049 +  SPACER = $ElementName_0(new ElementName(), 'spacer', 'spacer', 49, true, false, false);
32.18050 +  SELECT = $ElementName_0(new ElementName(), 'select', 'select', 32, true, false, false);
32.18051 +  SUBSET = $ElementName_0(new ElementName(), 'subset', 'subset', 0, false, false, false);
32.18052 +  SCRIPT = $ElementName_0(new ElementName(), 'script', 'script', 31, true, false, false);
32.18053 +  TBREAK = $ElementName_0(new ElementName(), 'tbreak', 'tbreak', 0, false, false, false);
32.18054 +  VECTOR = $ElementName_0(new ElementName(), 'vector', 'vector', 0, false, false, false);
32.18055 +  ARTICLE = $ElementName_0(new ElementName(), 'article', 'article', 51, true, false, false);
32.18056 +  ANIMATE = $ElementName_0(new ElementName(), 'animate', 'animate', 0, false, false, false);
32.18057 +  ARCSECH = $ElementName_0(new ElementName(), 'arcsech', 'arcsech', 0, false, false, false);
32.18058 +  ARCCSCH = $ElementName_0(new ElementName(), 'arccsch', 'arccsch', 0, false, false, false);
32.18059 +  ARCTANH = $ElementName_0(new ElementName(), 'arctanh', 'arctanh', 0, false, false, false);
32.18060 +  ARCSINH = $ElementName_0(new ElementName(), 'arcsinh', 'arcsinh', 0, false, false, false);
32.18061 +  ARCCOSH = $ElementName_0(new ElementName(), 'arccosh', 'arccosh', 0, false, false, false);
32.18062 +  ARCCOTH = $ElementName_0(new ElementName(), 'arccoth', 'arccoth', 0, false, false, false);
32.18063 +  ACRONYM = $ElementName_0(new ElementName(), 'acronym', 'acronym', 0, false, false, false);
32.18064 +  ADDRESS = $ElementName_0(new ElementName(), 'address', 'address', 51, true, false, false);
32.18065 +  BGSOUND = $ElementName_0(new ElementName(), 'bgsound', 'bgsound', 49, true, false, false);
32.18066 +  COMMAND = $ElementName_0(new ElementName(), 'command', 'command', 54, true, false, false);
32.18067 +  COMPOSE = $ElementName_0(new ElementName(), 'compose', 'compose', 0, false, false, false);
32.18068 +  CEILING = $ElementName_0(new ElementName(), 'ceiling', 'ceiling', 0, false, false, false);
32.18069 +  CSYMBOL = $ElementName_0(new ElementName(), 'csymbol', 'csymbol', 0, false, false, false);
32.18070 +  CAPTION = $ElementName_0(new ElementName(), 'caption', 'caption', 6, false, true, false);
32.18071 +  DISCARD = $ElementName_0(new ElementName(), 'discard', 'discard', 0, false, false, false);
32.18072 +  DECLARE_0 = $ElementName_0(new ElementName(), 'declare', 'declare', 0, false, false, false);
32.18073 +  DETAILS = $ElementName_0(new ElementName(), 'details', 'details', 51, true, false, false);
32.18074 +  ELLIPSE = $ElementName_0(new ElementName(), 'ellipse', 'ellipse', 0, false, false, false);
32.18075 +  FEFUNCA = $ElementName_0(new ElementName(), 'fefunca', 'feFuncA', 0, false, false, false);
32.18076 +  FEFUNCB = $ElementName_0(new ElementName(), 'fefuncb', 'feFuncB', 0, false, false, false);
32.18077 +  FEBLEND = $ElementName_0(new ElementName(), 'feblend', 'feBlend', 0, false, false, false);
32.18078 +  FEFLOOD = $ElementName_0(new ElementName(), 'feflood', 'feFlood', 0, false, false, false);
32.18079 +  FEIMAGE = $ElementName_0(new ElementName(), 'feimage', 'feImage', 0, false, false, false);
32.18080 +  FEMERGE = $ElementName_0(new ElementName(), 'femerge', 'feMerge', 0, false, false, false);
32.18081 +  FEFUNCG = $ElementName_0(new ElementName(), 'fefuncg', 'feFuncG', 0, false, false, false);
32.18082 +  FEFUNCR = $ElementName_0(new ElementName(), 'fefuncr', 'feFuncR', 0, false, false, false);
32.18083 +  HANDLER = $ElementName_0(new ElementName(), 'handler', 'handler', 0, false, false, false);
32.18084 +  INVERSE = $ElementName_0(new ElementName(), 'inverse', 'inverse', 0, false, false, false);
32.18085 +  IMPLIES = $ElementName_0(new ElementName(), 'implies', 'implies', 0, false, false, false);
32.18086 +  ISINDEX = $ElementName_0(new ElementName(), 'isindex', 'isindex', 14, true, false, false);
32.18087 +  LOGBASE = $ElementName_0(new ElementName(), 'logbase', 'logbase', 0, false, false, false);
32.18088 +  LISTING = $ElementName_0(new ElementName(), 'listing', 'listing', 44, true, false, false);
32.18089 +  MFENCED = $ElementName_0(new ElementName(), 'mfenced', 'mfenced', 0, false, false, false);
32.18090 +  MPADDED = $ElementName_0(new ElementName(), 'mpadded', 'mpadded', 0, false, false, false);
32.18091 +  MARQUEE = $ElementName_0(new ElementName(), 'marquee', 'marquee', 43, false, true, false);
32.18092 +  MACTION = $ElementName_0(new ElementName(), 'maction', 'maction', 0, false, false, false);
32.18093 +  MSUBSUP = $ElementName_0(new ElementName(), 'msubsup', 'msubsup', 0, false, false, false);
32.18094 +  NOEMBED = $ElementName_0(new ElementName(), 'noembed', 'noembed', 60, true, false, false);
32.18095 +  POLYGON = $ElementName_0(new ElementName(), 'polygon', 'polygon', 0, false, false, false);
32.18096 +  PATTERN_0 = $ElementName_0(new ElementName(), 'pattern', 'pattern', 0, false, false, false);
32.18097 +  PRODUCT = $ElementName_0(new ElementName(), 'product', 'product', 0, false, false, false);
32.18098 +  SETDIFF = $ElementName_0(new ElementName(), 'setdiff', 'setdiff', 0, false, false, false);
32.18099 +  SECTION = $ElementName_0(new ElementName(), 'section', 'section', 51, true, false, false);
32.18100 +  TENDSTO = $ElementName_0(new ElementName(), 'tendsto', 'tendsto', 0, false, false, false);
32.18101 +  UPLIMIT = $ElementName_0(new ElementName(), 'uplimit', 'uplimit', 0, false, false, false);
32.18102 +  ALTGLYPH = $ElementName_0(new ElementName(), 'altglyph', 'altGlyph', 0, false, false, false);
32.18103 +  BASEFONT = $ElementName_0(new ElementName(), 'basefont', 'basefont', 49, true, false, false);
32.18104 +  CLIPPATH = $ElementName_0(new ElementName(), 'clippath', 'clipPath', 0, false, false, false);
32.18105 +  CODOMAIN = $ElementName_0(new ElementName(), 'codomain', 'codomain', 0, false, false, false);
32.18106 +  COLGROUP = $ElementName_0(new ElementName(), 'colgroup', 'colgroup', 8, true, false, false);
32.18107 +  DATAGRID = $ElementName_0(new ElementName(), 'datagrid', 'datagrid', 51, true, false, false);
32.18108 +  EMPTYSET = $ElementName_0(new ElementName(), 'emptyset', 'emptyset', 0, false, false, false);
32.18109 +  FACTOROF = $ElementName_0(new ElementName(), 'factorof', 'factorof', 0, false, false, false);
32.18110 +  FIELDSET = $ElementName_0(new ElementName(), 'fieldset', 'fieldset', 61, true, false, false);
32.18111 +  FRAMESET = $ElementName_0(new ElementName(), 'frameset', 'frameset', 11, true, false, false);
32.18112 +  FEOFFSET = $ElementName_0(new ElementName(), 'feoffset', 'feOffset', 0, false, false, false);
32.18113 +  GLYPHREF_0 = $ElementName_0(new ElementName(), 'glyphref', 'glyphRef', 0, false, false, false);
32.18114 +  INTERVAL = $ElementName_0(new ElementName(), 'interval', 'interval', 0, false, false, false);
32.18115 +  INTEGERS = $ElementName_0(new ElementName(), 'integers', 'integers', 0, false, false, false);
32.18116 +  INFINITY = $ElementName_0(new ElementName(), 'infinity', 'infinity', 0, false, false, false);
32.18117 +  LISTENER = $ElementName_0(new ElementName(), 'listener', 'listener', 0, false, false, false);
32.18118 +  LOWLIMIT = $ElementName_0(new ElementName(), 'lowlimit', 'lowlimit', 0, false, false, false);
32.18119 +  METADATA = $ElementName_0(new ElementName(), 'metadata', 'metadata', 0, false, false, false);
32.18120 +  MENCLOSE = $ElementName_0(new ElementName(), 'menclose', 'menclose', 0, false, false, false);
32.18121 +  MPHANTOM = $ElementName_0(new ElementName(), 'mphantom', 'mphantom', 0, false, false, false);
32.18122 +  NOFRAMES = $ElementName_0(new ElementName(), 'noframes', 'noframes', 25, true, false, false);
32.18123 +  NOSCRIPT = $ElementName_0(new ElementName(), 'noscript', 'noscript', 26, true, false, false);
32.18124 +  OPTGROUP = $ElementName_0(new ElementName(), 'optgroup', 'optgroup', 27, true, false, false);
32.18125 +  POLYLINE = $ElementName_0(new ElementName(), 'polyline', 'polyline', 0, false, false, false);
32.18126 +  PREFETCH = $ElementName_0(new ElementName(), 'prefetch', 'prefetch', 0, false, false, false);
32.18127 +  PROGRESS = $ElementName_0(new ElementName(), 'progress', 'progress', 0, false, false, false);
32.18128 +  PRSUBSET = $ElementName_0(new ElementName(), 'prsubset', 'prsubset', 0, false, false, false);
32.18129 +  QUOTIENT = $ElementName_0(new ElementName(), 'quotient', 'quotient', 0, false, false, false);
32.18130 +  SELECTOR = $ElementName_0(new ElementName(), 'selector', 'selector', 0, false, false, false);
32.18131 +  TEXTAREA = $ElementName_0(new ElementName(), 'textarea', 'textarea', 35, true, false, false);
32.18132 +  TEXTPATH = $ElementName_0(new ElementName(), 'textpath', 'textPath', 0, false, false, false);
32.18133 +  VARIANCE = $ElementName_0(new ElementName(), 'variance', 'variance', 0, false, false, false);
32.18134 +  ANIMATION = $ElementName_0(new ElementName(), 'animation', 'animation', 0, false, false, false);
32.18135 +  CONJUGATE = $ElementName_0(new ElementName(), 'conjugate', 'conjugate', 0, false, false, false);
32.18136 +  CONDITION = $ElementName_0(new ElementName(), 'condition', 'condition', 0, false, false, false);
32.18137 +  COMPLEXES = $ElementName_0(new ElementName(), 'complexes', 'complexes', 0, false, false, false);
32.18138 +  FONT_FACE = $ElementName_0(new ElementName(), 'font-face', 'font-face', 0, false, false, false);
32.18139 +  FACTORIAL = $ElementName_0(new ElementName(), 'factorial', 'factorial', 0, false, false, false);
32.18140 +  INTERSECT = $ElementName_0(new ElementName(), 'intersect', 'intersect', 0, false, false, false);
32.18141 +  IMAGINARY = $ElementName_0(new ElementName(), 'imaginary', 'imaginary', 0, false, false, false);
32.18142 +  LAPLACIAN = $ElementName_0(new ElementName(), 'laplacian', 'laplacian', 0, false, false, false);
32.18143 +  MATRIXROW = $ElementName_0(new ElementName(), 'matrixrow', 'matrixrow', 0, false, false, false);
32.18144 +  NOTSUBSET = $ElementName_0(new ElementName(), 'notsubset', 'notsubset', 0, false, false, false);
32.18145 +  OTHERWISE = $ElementName_0(new ElementName(), 'otherwise', 'otherwise', 0, false, false, false);
32.18146 +  PIECEWISE = $ElementName_0(new ElementName(), 'piecewise', 'piecewise', 0, false, false, false);
32.18147 +  PLAINTEXT = $ElementName_0(new ElementName(), 'plaintext', 'plaintext', 30, true, false, false);
32.18148 +  RATIONALS = $ElementName_0(new ElementName(), 'rationals', 'rationals', 0, false, false, false);
32.18149 +  SEMANTICS = $ElementName_0(new ElementName(), 'semantics', 'semantics', 0, false, false, false);
32.18150 +  TRANSPOSE = $ElementName_0(new ElementName(), 'transpose', 'transpose', 0, false, false, false);
32.18151 +  ANNOTATION = $ElementName_0(new ElementName(), 'annotation', 'annotation', 0, false, false, false);
32.18152 +  BLOCKQUOTE = $ElementName_0(new ElementName(), 'blockquote', 'blockquote', 50, true, false, false);
32.18153 +  DIVERGENCE = $ElementName_0(new ElementName(), 'divergence', 'divergence', 0, false, false, false);
32.18154 +  EULERGAMMA = $ElementName_0(new ElementName(), 'eulergamma', 'eulergamma', 0, false, false, false);
32.18155 +  EQUIVALENT = $ElementName_0(new ElementName(), 'equivalent', 'equivalent', 0, false, false, false);
32.18156 +  IMAGINARYI = $ElementName_0(new ElementName(), 'imaginaryi', 'imaginaryi', 0, false, false, false);
32.18157 +  MALIGNMARK = $ElementName_0(new ElementName(), 'malignmark', 'malignmark', 56, false, false, false);
32.18158 +  MUNDEROVER = $ElementName_0(new ElementName(), 'munderover', 'munderover', 0, false, false, false);
32.18159 +  MLABELEDTR = $ElementName_0(new ElementName(), 'mlabeledtr', 'mlabeledtr', 0, false, false, false);
32.18160 +  NOTANUMBER = $ElementName_0(new ElementName(), 'notanumber', 'notanumber', 0, false, false, false);
32.18161 +  SOLIDCOLOR = $ElementName_0(new ElementName(), 'solidcolor', 'solidcolor', 0, false, false, false);
32.18162 +  ALTGLYPHDEF = $ElementName_0(new ElementName(), 'altglyphdef', 'altGlyphDef', 0, false, false, false);
32.18163 +  DETERMINANT = $ElementName_0(new ElementName(), 'determinant', 'determinant', 0, false, false, false);
32.18164 +  EVENTSOURCE = $ElementName_0(new ElementName(), 'eventsource', 'eventsource', 54, true, false, false);
32.18165 +  FEMERGENODE = $ElementName_0(new ElementName(), 'femergenode', 'feMergeNode', 0, false, false, false);
32.18166 +  FECOMPOSITE = $ElementName_0(new ElementName(), 'fecomposite', 'feComposite', 0, false, false, false);
32.18167 +  FESPOTLIGHT = $ElementName_0(new ElementName(), 'fespotlight', 'feSpotLight', 0, false, false, false);
32.18168 +  MALIGNGROUP = $ElementName_0(new ElementName(), 'maligngroup', 'maligngroup', 0, false, false, false);
32.18169 +  MPRESCRIPTS = $ElementName_0(new ElementName(), 'mprescripts', 'mprescripts', 0, false, false, false);
32.18170 +  MOMENTABOUT = $ElementName_0(new ElementName(), 'momentabout', 'momentabout', 0, false, false, false);
32.18171 +  NOTPRSUBSET = $ElementName_0(new ElementName(), 'notprsubset', 'notprsubset', 0, false, false, false);
32.18172 +  PARTIALDIFF = $ElementName_0(new ElementName(), 'partialdiff', 'partialdiff', 0, false, false, false);
32.18173 +  ALTGLYPHITEM = $ElementName_0(new ElementName(), 'altglyphitem', 'altGlyphItem', 0, false, false, false);
32.18174 +  ANIMATECOLOR = $ElementName_0(new ElementName(), 'animatecolor', 'animateColor', 0, false, false, false);
32.18175 +  DATATEMPLATE = $ElementName_0(new ElementName(), 'datatemplate', 'datatemplate', 0, false, false, false);
32.18176 +  EXPONENTIALE = $ElementName_0(new ElementName(), 'exponentiale', 'exponentiale', 0, false, false, false);
32.18177 +  FETURBULENCE = $ElementName_0(new ElementName(), 'feturbulence', 'feTurbulence', 0, false, false, false);
32.18178 +  FEPOINTLIGHT = $ElementName_0(new ElementName(), 'fepointlight', 'fePointLight', 0, false, false, false);
32.18179 +  FEMORPHOLOGY = $ElementName_0(new ElementName(), 'femorphology', 'feMorphology', 0, false, false, false);
32.18180 +  OUTERPRODUCT = $ElementName_0(new ElementName(), 'outerproduct', 'outerproduct', 0, false, false, false);
32.18181 +  ANIMATEMOTION = $ElementName_0(new ElementName(), 'animatemotion', 'animateMotion', 0, false, false, false);
32.18182 +  COLOR_PROFILE_0 = $ElementName_0(new ElementName(), 'color-profile', 'color-profile', 0, false, false, false);
32.18183 +  FONT_FACE_SRC = $ElementName_0(new ElementName(), 'font-face-src', 'font-face-src', 0, false, false, false);
32.18184 +  FONT_FACE_URI = $ElementName_0(new ElementName(), 'font-face-uri', 'font-face-uri', 0, false, false, false);
32.18185 +  FOREIGNOBJECT = $ElementName_0(new ElementName(), 'foreignobject', 'foreignObject', 59, false, false, false);
32.18186 +  FECOLORMATRIX = $ElementName_0(new ElementName(), 'fecolormatrix', 'feColorMatrix', 0, false, false, false);
32.18187 +  MISSING_GLYPH = $ElementName_0(new ElementName(), 'missing-glyph', 'missing-glyph', 0, false, false, false);
32.18188 +  MMULTISCRIPTS = $ElementName_0(new ElementName(), 'mmultiscripts', 'mmultiscripts', 0, false, false, false);
32.18189 +  SCALARPRODUCT = $ElementName_0(new ElementName(), 'scalarproduct', 'scalarproduct', 0, false, false, false);
32.18190 +  VECTORPRODUCT = $ElementName_0(new ElementName(), 'vectorproduct', 'vectorproduct', 0, false, false, false);
32.18191 +  ANNOTATION_XML = $ElementName_0(new ElementName(), 'annotation-xml', 'annotation-xml', 58, false, false, false);
32.18192 +  DEFINITION_SRC = $ElementName_0(new ElementName(), 'definition-src', 'definition-src', 0, false, false, false);
32.18193 +  FONT_FACE_NAME = $ElementName_0(new ElementName(), 'font-face-name', 'font-face-name', 0, false, false, false);
32.18194 +  FEGAUSSIANBLUR = $ElementName_0(new ElementName(), 'fegaussianblur', 'feGaussianBlur', 0, false, false, false);
32.18195 +  FEDISTANTLIGHT = $ElementName_0(new ElementName(), 'fedistantlight', 'feDistantLight', 0, false, false, false);
32.18196 +  LINEARGRADIENT = $ElementName_0(new ElementName(), 'lineargradient', 'linearGradient', 0, false, false, false);
32.18197 +  NATURALNUMBERS = $ElementName_0(new ElementName(), 'naturalnumbers', 'naturalnumbers', 0, false, false, false);
32.18198 +  RADIALGRADIENT = $ElementName_0(new ElementName(), 'radialgradient', 'radialGradient', 0, false, false, false);
32.18199 +  ANIMATETRANSFORM = $ElementName_0(new ElementName(), 'animatetransform', 'animateTransform', 0, false, false, false);
32.18200 +  CARTESIANPRODUCT = $ElementName_0(new ElementName(), 'cartesianproduct', 'cartesianproduct', 0, false, false, false);
32.18201 +  FONT_FACE_FORMAT = $ElementName_0(new ElementName(), 'font-face-format', 'font-face-format', 0, false, false, false);
32.18202 +  FECONVOLVEMATRIX = $ElementName_0(new ElementName(), 'feconvolvematrix', 'feConvolveMatrix', 0, false, false, false);
32.18203 +  FEDIFFUSELIGHTING = $ElementName_0(new ElementName(), 'fediffuselighting', 'feDiffuseLighting', 0, false, false, false);
32.18204 +  FEDISPLACEMENTMAP = $ElementName_0(new ElementName(), 'fedisplacementmap', 'feDisplacementMap', 0, false, false, false);
32.18205 +  FESPECULARLIGHTING = $ElementName_0(new ElementName(), 'fespecularlighting', 'feSpecularLighting', 0, false, false, false);
32.18206 +  DOMAINOFAPPLICATION = $ElementName_0(new ElementName(), 'domainofapplication', 'domainofapplication', 0, false, false, false);
32.18207 +  FECOMPONENTTRANSFER = $ElementName_0(new ElementName(), 'fecomponenttransfer', 'feComponentTransfer', 0, false, false, false);
32.18208 +  ELEMENT_NAMES = initValues(_3Lnu_validator_htmlparser_impl_ElementName_2_classLit, 50, 10, [A, B, G, I, P, Q, S, U, BR, CI, CN, DD, DL, DT, EM, EQ, FN, H1, H2, H3, H4, H5, H6, GT, HR, IN_0, LI, LN, LT, MI, MN, MO, MS, OL, OR, PI, RP, RT_0, TD, TH, TR, TT, UL, AND, ARG, ABS, BIG, BDO, CSC, COL, COS, COT, DEL, DFN, DIR_0, DIV, EXP, GCD, GEQ, IMG, INS, INT, KBD, LOG, LCM, LEQ, MTD, MIN_0, MAP, MTR, MAX_0, NEQ, NOT, NAV, PRE, REM, SUB, SEC, SVG, SUM, SIN, SEP, SUP, SET, TAN, USE, VAR, WBR, XMP, XOR, AREA, ABBR_0, BASE_0, BVAR, BODY, CARD, CODE_0, CITE_0, CSCH, COSH, COTH, CURL, DESC, DIFF, DEFS, FORM_0, FONT, GRAD, HEAD, HTML_0, LINE, LINK_0, LIST_0, META, MSUB, MODE_0, MATH, MARK, MASK_0, MEAN, MSUP, MENU, MROW, NONE, NOBR, NEST, PATH_0, PLUS, RULE, REAL, RELN, RECT, ROOT, RUBY, SECH, SINH, SPAN_0, SAMP, STOP, SDEV, TIME, TRUE, TREF, TANH, TEXT_0, VIEW, ASIDE, AUDIO, APPLY, EMBED, FRAME_0, FALSE, FLOOR, GLYPH, HKERN, IMAGE, IDENT, INPUT, LABEL_0, LIMIT, MFRAC, MPATH, METER, MOVER, MINUS, MROOT, MSQRT, MTEXT, NOTIN, PIECE, PARAM, POWER, REALS, STYLE_0, SMALL, THEAD, TABLE, TITLE_0, TSPAN, TIMES, TFOOT, TBODY, UNION, VKERN, VIDEO, ARCSEC, ARCCSC, ARCTAN, ARCSIN, ARCCOS, APPLET, ARCCOT, APPROX, BUTTON, CIRCLE, CENTER, CURSOR_0, CANVAS, DIVIDE, DEGREE, DIALOG, DOMAIN, EXISTS, FETILE, FIGURE, FORALL, FILTER_0, FOOTER, HEADER, IFRAME, KEYGEN, LAMBDA, LEGEND, MSPACE, MTABLE, MSTYLE, MGLYPH, MEDIAN, MUNDER, MARKER, MERROR, MOMENT, MATRIX, OPTION, OBJECT_0, OUTPUT, PRIMES, SOURCE, STRIKE, STRONG, SWITCH, SYMBOL, SPACER, SELECT, SUBSET, SCRIPT, TBREAK, VECTOR, ARTICLE, ANIMATE, ARCSECH, ARCCSCH, ARCTANH, ARCSINH, ARCCOSH, ARCCOTH, ACRONYM, ADDRESS, BGSOUND, COMMAND, COMPOSE, CEILING, CSYMBOL, CAPTION, DISCARD, DECLARE_0, DETAILS, ELLIPSE, FEFUNCA, FEFUNCB, FEBLEND, FEFLOOD, FEIMAGE, FEMERGE, FEFUNCG, FEFUNCR, HANDLER, INVERSE, IMPLIES, ISINDEX, LOGBASE, LISTING, MFENCED, MPADDED, MARQUEE, MACTION, MSUBSUP, NOEMBED, POLYGON, PATTERN_0, PRODUCT, SETDIFF, SECTION, TENDSTO, UPLIMIT, ALTGLYPH, BASEFONT, CLIPPATH, CODOMAIN, COLGROUP, DATAGRID, EMPTYSET, FACTOROF, FIELDSET, FRAMESET, FEOFFSET, GLYPHREF_0, INTERVAL, INTEGERS, INFINITY, LISTENER, LOWLIMIT, METADATA, MENCLOSE, MPHANTOM, NOFRAMES, NOSCRIPT, OPTGROUP, POLYLINE, PREFETCH, PROGRESS, PRSUBSET, QUOTIENT, SELECTOR, TEXTAREA, TEXTPATH, VARIANCE, ANIMATION, CONJUGATE, CONDITION, COMPLEXES, FONT_FACE, FACTORIAL, INTERSECT, IMAGINARY, LAPLACIAN, MATRIXROW, NOTSUBSET, OTHERWISE, PIECEWISE, PLAINTEXT, RATIONALS, SEMANTICS, TRANSPOSE, ANNOTATION, BLOCKQUOTE, DIVERGENCE, EULERGAMMA, EQUIVALENT, IMAGINARYI, MALIGNMARK, MUNDEROVER, MLABELEDTR, NOTANUMBER, SOLIDCOLOR, ALTGLYPHDEF, DETERMINANT, EVENTSOURCE, FEMERGENODE, FECOMPOSITE, FESPOTLIGHT, MALIGNGROUP, MPRESCRIPTS, MOMENTABOUT, NOTPRSUBSET, PARTIALDIFF, ALTGLYPHITEM, ANIMATECOLOR, DATATEMPLATE, EXPONENTIALE, FETURBULENCE, FEPOINTLIGHT, FEMORPHOLOGY, OUTERPRODUCT, ANIMATEMOTION, COLOR_PROFILE_0, FONT_FACE_SRC, FONT_FACE_URI, FOREIGNOBJECT, FECOLORMATRIX, MISSING_GLYPH, MMULTISCRIPTS, SCALARPRODUCT, VECTORPRODUCT, ANNOTATION_XML, DEFINITION_SRC, FONT_FACE_NAME, FEGAUSSIANBLUR, FEDISTANTLIGHT, LINEARGRADIENT, NATURALNUMBERS, RADIALGRADIENT, ANIMATETRANSFORM, CARTESIANPRODUCT, FONT_FACE_FORMAT, FECONVOLVEMATRIX, FEDIFFUSELIGHTING, FEDISPLACEMENTMAP, FESPECULARLIGHTING, DOMAINOFAPPLICATION, FECOMPONENTTRANSFER]);
32.18209 +  ELEMENT_HASHES = initValues(_3I_classLit, 0, -1, [1057, 1090, 1255, 1321, 1552, 1585, 1651, 1717, 68162, 68899, 69059, 69764, 70020, 70276, 71077, 71205, 72134, 72232, 72264, 72296, 72328, 72360, 72392, 73351, 74312, 75209, 78124, 78284, 78476, 79149, 79309, 79341, 79469, 81295, 81487, 82224, 84498, 84626, 86164, 86292, 86612, 86676, 87445, 3183041, 3186241, 3198017, 3218722, 3226754, 3247715, 3256803, 3263971, 3264995, 3289252, 3291332, 3295524, 3299620, 3326725, 3379303, 3392679, 3448233, 3460553, 3461577, 3510347, 3546604, 3552364, 3556524, 3576461, 3586349, 3588141, 3590797, 3596333, 3622062, 3625454, 3627054, 3675728, 3749042, 3771059, 3771571, 3776211, 3782323, 3782963, 3784883, 3785395, 3788979, 3815476, 3839605, 3885110, 3917911, 3948984, 3951096, 135304769, 135858241, 136498210, 136906434, 137138658, 137512995, 137531875, 137548067, 137629283, 137645539, 137646563, 137775779, 138529956, 138615076, 139040932, 140954086, 141179366, 141690439, 142738600, 143013512, 146979116, 147175724, 147475756, 147902637, 147936877, 148017645, 148131885, 148228141, 148229165, 148309165, 148395629, 148551853, 148618829, 149076462, 149490158, 149572782, 151277616, 151639440, 153268914, 153486514, 153563314, 153750706, 153763314, 153914034, 154406067, 154417459, 154600979, 154678323, 154680979, 154866835, 155366708, 155375188, 155391572, 155465780, 155869364, 158045494, 168988979, 169321621, 169652752, 173151309, 174240818, 174247297, 174669292, 175391532, 176638123, 177380397, 177879204, 177886734, 180753473, 181020073, 181503558, 181686320, 181999237, 181999311, 182048201, 182074866, 182078003, 182083764, 182920847, 184716457, 184976961, 185145071, 187281445, 187872052, 188100653, 188875944, 188919873, 188920457, 189203987, 189371817, 189414886, 189567458, 190266670, 191318187, 191337609, 202479203, 202493027, 202835587, 202843747, 203013219, 203036048, 203045987, 203177552, 203898516, 204648562, 205067918, 205078130, 205096654, 205689142, 205690439, 205766017, 205988909, 207213161, 207794484, 207800999, 208023602, 208213644, 208213647, 210310273, 210940978, 213325049, 213946445, 214055079, 215125040, 215134273, 215135028, 215237420, 215418148, 215553166, 215553394, 215563858, 215627949, 215754324, 217529652, 217713834, 217732628, 218731945, 221417045, 221424946, 221493746, 221515401, 221658189, 221844577, 221908140, 221910626, 221921586, 222659762, 225001091, 236105833, 236113965, 236194995, 236195427, 236206132, 236206387, 236211683, 236212707, 236381647, 236571826, 237124271, 238172205, 238210544, 238270764, 238435405, 238501172, 239224867, 239257644, 239710497, 240307721, 241208789, 241241557, 241318060, 241319404, 241343533, 241344069, 241405397, 241765845, 243864964, 244502085, 244946220, 245109902, 247647266, 247707956, 248648814, 248648836, 248682161, 248986932, 249058914, 249697357, 252132601, 252135604, 252317348, 255007012, 255278388, 256365156, 257566121, 269763372, 271202790, 271863856, 272049197, 272127474, 272770631, 274339449, 274939471, 275388004, 275388005, 275388006, 275977800, 278267602, 278513831, 278712622, 281613765, 281683369, 282120228, 282250732, 282508942, 283743649, 283787570, 284710386, 285391148, 285478533, 285854898, 285873762, 286931113, 288964227, 289445441, 289689648, 291671489, 303512884, 305319975, 305610036, 305764101, 308448294, 308675890, 312085683, 312264750, 315032867, 316391000, 317331042, 317902135, 318950711, 319447220, 321499182, 322538804, 323145200, 337067316, 337826293, 339905989, 340833697, 341457068, 345302593, 349554733, 349771471, 349786245, 350819405, 356072847, 370349192, 373962798, 374509141, 375558638, 375574835, 376053993, 383276530, 383373833, 383407586, 384439906, 386079012, 404133513, 404307343, 407031852, 408072233, 409112005, 409608425, 409771500, 419040932, 437730612, 439529766, 442616365, 442813037, 443157674, 443295316, 450118444, 450482697, 456789668, 459935396, 471217869, 474073645, 476230702, 476665218, 476717289, 483014825, 485083298, 489306281, 538364390, 540675748, 543819186, 543958612, 576960820, 577242548, 610515252, 642202932, 644420819]);
32.18210 +}
32.18211 +
32.18212 +function $ElementName_0(this$static, name, camelCaseName, group, special, scoping, fosterParenting){
32.18213 +  $clinit_89();
32.18214 +  this$static.name_0 = name;
32.18215 +  this$static.camelCaseName = camelCaseName;
32.18216 +  this$static.group = group;
32.18217 +  this$static.special = special;
32.18218 +  this$static.scoping = scoping;
32.18219 +  this$static.fosterParenting = fosterParenting;
32.18220 +  this$static.custom = false;
32.18221 +  return this$static;
32.18222 +}
32.18223 +
32.18224 +function $ElementName(this$static, name){
32.18225 +  $clinit_89();
32.18226 +  this$static.name_0 = name;
32.18227 +  this$static.camelCaseName = name;
32.18228 +  this$static.group = 0;
32.18229 +  this$static.special = false;
32.18230 +  this$static.scoping = false;
32.18231 +  this$static.fosterParenting = false;
32.18232 +  this$static.custom = true;
32.18233 +  return this$static;
32.18234 +}
32.18235 +
32.18236 +function bufToHash_0(buf, len){
32.18237 +  var hash, i, j;
32.18238 +  hash = len;
32.18239 +  hash <<= 5;
32.18240 +  hash += buf[0] - 96;
32.18241 +  j = len;
32.18242 +  for (i = 0; i < 4 && j > 0; ++i) {
32.18243 +    --j;
32.18244 +    hash <<= 5;
32.18245 +    hash += buf[j] - 96;
32.18246 +  }
32.18247 +  return hash;
32.18248 +}
32.18249 +
32.18250 +function elementNameByBuffer(buf, offset, length){
32.18251 +  var end, end_0;
32.18252 +  $clinit_89();
32.18253 +  var elementName, hash, index, name;
32.18254 +  hash = bufToHash_0(buf, length);
32.18255 +  index = binarySearch(ELEMENT_HASHES, hash);
32.18256 +  if (index < 0) {
32.18257 +    return $ElementName(new ElementName(), String((end = offset + length , __checkBounds(buf.length, offset, end) , __valueOf(buf, offset, end))));
32.18258 +  }
32.18259 +   else {
32.18260 +    elementName = ELEMENT_NAMES[index];
32.18261 +    name = elementName.name_0;
32.18262 +    if (!localEqualsBuffer(name, buf, offset, length)) {
32.18263 +      return $ElementName(new ElementName(), String((end_0 = offset + length , __checkBounds(buf.length, offset, end_0) , __valueOf(buf, offset, end_0))));
32.18264 +    }
32.18265 +    return elementName;
32.18266 +  }
32.18267 +}
32.18268 +
32.18269 +function getClass_51(){
32.18270 +  return Lnu_validator_htmlparser_impl_ElementName_2_classLit;
32.18271 +}
32.18272 +
32.18273 +function ElementName(){
32.18274 +}
32.18275 +
32.18276 +_ = ElementName.prototype = new Object_0();
32.18277 +_.getClass$ = getClass_51;
32.18278 +_.typeId$ = 37;
32.18279 +_.camelCaseName = null;
32.18280 +_.custom = false;
32.18281 +_.fosterParenting = false;
32.18282 +_.group = 0;
32.18283 +_.name_0 = null;
32.18284 +_.scoping = false;
32.18285 +_.special = false;
32.18286 +var A, ABBR_0, ABS, ACRONYM, ADDRESS, ALTGLYPH, ALTGLYPHDEF, ALTGLYPHITEM, AND, ANIMATE, ANIMATECOLOR, ANIMATEMOTION, ANIMATETRANSFORM, ANIMATION, ANNOTATION, ANNOTATION_XML, APPLET, APPLY, APPROX, ARCCOS, ARCCOSH, ARCCOT, ARCCOTH, ARCCSC, ARCCSCH, ARCSEC, ARCSECH, ARCSIN, ARCSINH, ARCTAN, ARCTANH, AREA, ARG, ARTICLE, ASIDE, AUDIO, B, BASE_0, BASEFONT, BDO, BGSOUND, BIG, BLOCKQUOTE, BODY, BR, BUTTON, BVAR, CANVAS, CAPTION, CARD, CARTESIANPRODUCT, CEILING, CENTER, CI, CIRCLE, CITE_0, CLIPPATH, CN, CODE_0, CODOMAIN, COL, COLGROUP, COLOR_PROFILE_0, COMMAND, COMPLEXES, COMPOSE, CONDITION, CONJUGATE, COS, COSH, COT, COTH, CSC, CSCH, CSYMBOL, CURL, CURSOR_0, DATAGRID, DATATEMPLATE, DD, DECLARE_0, DEFINITION_SRC, DEFS, DEGREE, DEL, DESC, DETAILS, DETERMINANT, DFN, DIALOG, DIFF, DIR_0, DISCARD, DIV, DIVERGENCE, DIVIDE, DL, DOMAIN, DOMAINOFAPPLICATION, DT, ELEMENT_HASHES, ELEMENT_NAMES, ELLIPSE, EM, EMBED, EMPTYSET, EQ, EQUIVALENT, EULERGAMMA, EVENTSOURCE, EXISTS, EXP, EXPONENTIALE, FACTORIAL, FACTOROF, FALSE, FEBLEND, FECOLORMATRIX, FECOMPONENTTRANSFER, FECOMPOSITE, FECONVOLVEMATRIX, FEDIFFUSELIGHTING, FEDISPLACEMENTMAP, FEDISTANTLIGHT, FEFLOOD, FEFUNCA, FEFUNCB, FEFUNCG, FEFUNCR, FEGAUSSIANBLUR, FEIMAGE, FEMERGE, FEMERGENODE, FEMORPHOLOGY, FEOFFSET, FEPOINTLIGHT, FESPECULARLIGHTING, FESPOTLIGHT, FETILE, FETURBULENCE, FIELDSET, FIGURE, FILTER_0, FLOOR, FN, FONT, FONT_FACE, FONT_FACE_FORMAT, FONT_FACE_NAME, FONT_FACE_SRC, FONT_FACE_URI, FOOTER, FORALL, FOREIGNOBJECT, FORM_0, FRAME_0, FRAMESET, G, GCD, GEQ, GLYPH, GLYPHREF_0, GRAD, GT, H1, H2, H3, H4, H5, H6, HANDLER, HEAD, HEADER, HKERN, HR, HTML_0, I, IDENT, IFRAME, IMAGE, IMAGINARY, IMAGINARYI, IMG, IMPLIES, IN_0, INFINITY, INPUT, INS, INT, INTEGERS, INTERSECT, INTERVAL, INVERSE, ISINDEX, KBD, KEYGEN, LABEL_0, LAMBDA, LAPLACIAN, LCM, LEGEND, LEQ, LI, LIMIT, LINE, LINEARGRADIENT, LINK_0, LIST_0, LISTENER, LISTING, LN, LOG, LOGBASE, LOWLIMIT, LT, MACTION, MALIGNGROUP, MALIGNMARK, MAP, MARK, MARKER, MARQUEE, MASK_0, MATH, MATRIX, MATRIXROW, MAX_0, MEAN, MEDIAN, MENCLOSE, MENU, MERROR, META, METADATA, METER, MFENCED, MFRAC, MGLYPH, MI, MIN_0, MINUS, MISSING_GLYPH, MLABELEDTR, MMULTISCRIPTS, MN, MO, MODE_0, MOMENT, MOMENTABOUT, MOVER, MPADDED, MPATH, MPHANTOM, MPRESCRIPTS, MROOT, MROW, MS, MSPACE, MSQRT, MSTYLE, MSUB, MSUBSUP, MSUP, MTABLE, MTD, MTEXT, MTR, MUNDER, MUNDEROVER, NATURALNUMBERS, NAV, NEQ, NEST, NOBR, NOEMBED, NOFRAMES, NONE, NOSCRIPT, NOT, NOTANUMBER, NOTIN, NOTPRSUBSET, NOTSUBSET, OBJECT_0, OL, OPTGROUP, OPTION, OR, OTHERWISE, OUTERPRODUCT, OUTPUT, P, PARAM, PARTIALDIFF, PATH_0, PATTERN_0, PI, PIECE, PIECEWISE, PLAINTEXT, PLUS, POLYGON, POLYLINE, POWER, PRE, PREFETCH, PRIMES, PRODUCT, PROGRESS, PRSUBSET, Q, QUOTIENT, RADIALGRADIENT, RATIONALS, REAL, REALS, RECT, RELN, REM, ROOT, RP, RT_0, RUBY, RULE, S, SAMP, SCALARPRODUCT, SCRIPT, SDEV, SEC, SECH, SECTION, SELECT, SELECTOR, SEMANTICS, SEP, SET, SETDIFF, SIN, SINH, SMALL, SOLIDCOLOR, SOURCE, SPACER, SPAN_0, STOP, STRIKE, STRONG, STYLE_0, SUB, SUBSET, SUM, SUP, SVG, SWITCH, SYMBOL, TABLE, TAN, TANH, TBODY, TBREAK, TD, TENDSTO, TEXT_0, TEXTAREA, TEXTPATH, TFOOT, TH, THEAD, TIME, TIMES, TITLE_0, TR, TRANSPOSE, TREF, TRUE, TSPAN, TT, U, UL, UNION, UPLIMIT, USE, VAR, VARIANCE, VECTOR, VECTORPRODUCT, VIDEO, VIEW, VKERN, WBR, XMP, XOR;
32.18287 +function $clinit_97(){
32.18288 +  $clinit_97 = nullMethod;
32.18289 +  LT_GT = initValues(_3C_classLit, 42, -1, [60, 62]);
32.18290 +  LT_SOLIDUS = initValues(_3C_classLit, 42, -1, [60, 47]);
32.18291 +  RSQB_RSQB = initValues(_3C_classLit, 42, -1, [93, 93]);
32.18292 +  REPLACEMENT_CHARACTER = initValues(_3C_classLit, 42, -1, [65533]);
32.18293 +  SPACE = initValues(_3C_classLit, 42, -1, [32]);
32.18294 +  LF = initValues(_3C_classLit, 42, -1, [10]);
32.18295 +  CDATA_LSQB = $toCharArray('CDATA[');
32.18296 +  OCTYPE = $toCharArray('octype');
32.18297 +  UBLIC = $toCharArray('ublic');
32.18298 +  YSTEM = $toCharArray('ystem');
32.18299 +  TITLE_ARR = initValues(_3C_classLit, 42, -1, [116, 105, 116, 108, 101]);
32.18300 +  SCRIPT_ARR = initValues(_3C_classLit, 42, -1, [115, 99, 114, 105, 112, 116]);
32.18301 +  STYLE_ARR = initValues(_3C_classLit, 42, -1, [115, 116, 121, 108, 101]);
32.18302 +  PLAINTEXT_ARR = initValues(_3C_classLit, 42, -1, [112, 108, 97, 105, 110, 116, 101, 120, 116]);
32.18303 +  XMP_ARR = initValues(_3C_classLit, 42, -1, [120, 109, 112]);
32.18304 +  TEXTAREA_ARR = initValues(_3C_classLit, 42, -1, [116, 101, 120, 116, 97, 114, 101, 97]);
32.18305 +  IFRAME_ARR = initValues(_3C_classLit, 42, -1, [105, 102, 114, 97, 109, 101]);
32.18306 +  NOEMBED_ARR = initValues(_3C_classLit, 42, -1, [110, 111, 101, 109, 98, 101, 100]);
32.18307 +  NOSCRIPT_ARR = initValues(_3C_classLit, 42, -1, [110, 111, 115, 99, 114, 105, 112, 116]);
32.18308 +  NOFRAMES_ARR = initValues(_3C_classLit, 42, -1, [110, 111, 102, 114, 97, 109, 101, 115]);
32.18309 +}
32.18310 +
32.18311 +function $addAttributeWithValue(this$static){
32.18312 +  var value;
32.18313 +  this$static.metaBoundaryPassed && ($clinit_89() , META) == this$static.tagName && ($clinit_87() , CHARSET) == this$static.attributeName;
32.18314 +  if (this$static.attributeName) {
32.18315 +    value = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.18316 +    if (!this$static.endTag && this$static.html4 && this$static.html4ModeCompatibleWithXhtml1Schemata && $isCaseFolded(this$static.attributeName)) {
32.18317 +      value = newAsciiLowerCaseStringFromString(value);
32.18318 +    }
32.18319 +    $addAttribute(this$static.attributes, this$static.attributeName, value, this$static.xmlnsPolicy);
32.18320 +  }
32.18321 +}
32.18322 +
32.18323 +function $addAttributeWithoutValue(this$static){
32.18324 +  this$static.metaBoundaryPassed && ($clinit_87() , CHARSET) == this$static.attributeName && ($clinit_89() , META) == this$static.tagName;
32.18325 +  if (this$static.attributeName) {
32.18326 +    if (this$static.html4) {
32.18327 +      if ($isBoolean(this$static.attributeName)) {
32.18328 +        if (this$static.html4ModeCompatibleWithXhtml1Schemata) {
32.18329 +          $addAttribute(this$static.attributes, this$static.attributeName, this$static.attributeName.local[0], this$static.xmlnsPolicy);
32.18330 +        }
32.18331 +         else {
32.18332 +          $addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy);
32.18333 +        }
32.18334 +      }
32.18335 +       else {
32.18336 +        $addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy);
32.18337 +      }
32.18338 +    }
32.18339 +     else {
32.18340 +      if (($clinit_87() , SRC) == this$static.attributeName || HREF == this$static.attributeName) {
32.18341 +        'Attribute \u201C' + this$static.attributeName.local[0] + '\u201D without an explicit value seen. The attribute may be dropped by IE7.';
32.18342 +      }
32.18343 +      $addAttribute(this$static.attributes, this$static.attributeName, '', this$static.xmlnsPolicy);
32.18344 +    }
32.18345 +  }
32.18346 +}
32.18347 +
32.18348 +function $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c){
32.18349 +  switch (this$static.commentPolicy.ordinal) {
32.18350 +    case 2:
32.18351 +      --this$static.longStrBufLen;
32.18352 +      $appendLongStrBuf(this$static, 32);
32.18353 +      $appendLongStrBuf(this$static, 45);
32.18354 +    case 0:
32.18355 +      $appendLongStrBuf(this$static, c);
32.18356 +      break;
32.18357 +    case 1:
32.18358 +      $fatal(this$static, 'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.');
32.18359 +  }
32.18360 +}
32.18361 +
32.18362 +function $appendLongStrBuf(this$static, c){
32.18363 +  var newBuf;
32.18364 +  if (this$static.longStrBufLen == this$static.longStrBuf.length) {
32.18365 +    newBuf = initDim(_3C_classLit, 42, -1, this$static.longStrBufLen + (this$static.longStrBufLen >> 1), 1);
32.18366 +    arraycopy(this$static.longStrBuf, 0, newBuf, 0, this$static.longStrBuf.length);
32.18367 +    this$static.longStrBuf = newBuf;
32.18368 +  }
32.18369 +  this$static.longStrBuf[this$static.longStrBufLen++] = c;
32.18370 +}
32.18371 +
32.18372 +function $appendLongStrBuf_0(this$static, buffer, offset, length){
32.18373 +  var newBuf, reqLen;
32.18374 +  reqLen = this$static.longStrBufLen + length;
32.18375 +  if (this$static.longStrBuf.length < reqLen) {
32.18376 +    newBuf = initDim(_3C_classLit, 42, -1, reqLen + (reqLen >> 1), 1);
32.18377 +    arraycopy(this$static.longStrBuf, 0, newBuf, 0, this$static.longStrBuf.length);
32.18378 +    this$static.longStrBuf = newBuf;
32.18379 +  }
32.18380 +  arraycopy(buffer, offset, this$static.longStrBuf, this$static.longStrBufLen, length);
32.18381 +  this$static.longStrBufLen = reqLen;
32.18382 +}
32.18383 +
32.18384 +function $appendSecondHyphenToBogusComment(this$static){
32.18385 +  switch (this$static.commentPolicy.ordinal) {
32.18386 +    case 2:
32.18387 +      $appendLongStrBuf(this$static, 32);
32.18388 +    case 0:
32.18389 +      $appendLongStrBuf(this$static, 45);
32.18390 +      break;
32.18391 +    case 1:
32.18392 +      $fatal(this$static, 'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.');
32.18393 +  }
32.18394 +}
32.18395 +
32.18396 +function $appendStrBuf(this$static, c){
32.18397 +  var newBuf;
32.18398 +  if (this$static.strBufLen == this$static.strBuf.length) {
32.18399 +    newBuf = initDim(_3C_classLit, 42, -1, this$static.strBuf.length + 1024, 1);
32.18400 +    arraycopy(this$static.strBuf, 0, newBuf, 0, this$static.strBuf.length);
32.18401 +    this$static.strBuf = newBuf;
32.18402 +  }
32.18403 +  this$static.strBuf[this$static.strBufLen++] = c;
32.18404 +}
32.18405 +
32.18406 +function $attributeNameComplete(this$static){
32.18407 +  this$static.attributeName = nameByBuffer(this$static.strBuf, 0, this$static.strBufLen, this$static.namePolicy != ($clinit_80() , ALLOW));
32.18408 +  if (!this$static.attributes) {
32.18409 +    this$static.attributes = $HtmlAttributes(new HtmlAttributes(), this$static.mappingLangToXmlLang);
32.18410 +  }
32.18411 +  if ($contains(this$static.attributes, this$static.attributeName)) {
32.18412 +    'Duplicate attribute \u201C' + this$static.attributeName.local[0] + '\u201D.';
32.18413 +    this$static.attributeName = null;
32.18414 +  }
32.18415 +}
32.18416 +
32.18417 +function $contentModelElementToArray(this$static){
32.18418 +  switch (this$static.contentModelElement.group) {
32.18419 +    case 36:
32.18420 +      this$static.contentModelElementNameAsArray = TITLE_ARR;
32.18421 +      return;
32.18422 +    case 31:
32.18423 +      this$static.contentModelElementNameAsArray = SCRIPT_ARR;
32.18424 +      return;
32.18425 +    case 33:
32.18426 +      this$static.contentModelElementNameAsArray = STYLE_ARR;
32.18427 +      return;
32.18428 +    case 30:
32.18429 +      this$static.contentModelElementNameAsArray = PLAINTEXT_ARR;
32.18430 +      return;
32.18431 +    case 38:
32.18432 +      this$static.contentModelElementNameAsArray = XMP_ARR;
32.18433 +      return;
32.18434 +    case 35:
32.18435 +      this$static.contentModelElementNameAsArray = TEXTAREA_ARR;
32.18436 +      return;
32.18437 +    case 47:
32.18438 +      this$static.contentModelElementNameAsArray = IFRAME_ARR;
32.18439 +      return;
32.18440 +    case 60:
32.18441 +      this$static.contentModelElementNameAsArray = NOEMBED_ARR;
32.18442 +      return;
32.18443 +    case 26:
32.18444 +      this$static.contentModelElementNameAsArray = NOSCRIPT_ARR;
32.18445 +      return;
32.18446 +    case 25:
32.18447 +      this$static.contentModelElementNameAsArray = NOFRAMES_ARR;
32.18448 +      return;
32.18449 +    default:return;
32.18450 +  }
32.18451 +}
32.18452 +
32.18453 +function $emitCarriageReturn(this$static, buf, pos){
32.18454 +  this$static.nextCharOnNewLine = true;
32.18455 +  this$static.lastCR = true;
32.18456 +  $flushChars(this$static, buf, pos);
32.18457 +  $characters(this$static.tokenHandler, LF, 0, 1);
32.18458 +  this$static.cstart = 2147483647;
32.18459 +}
32.18460 +
32.18461 +function $emitComment(this$static, provisionalHyphens, pos){
32.18462 +  if (this$static.wantsComments) {
32.18463 +    $comment(this$static.tokenHandler, this$static.longStrBuf, 0, this$static.longStrBufLen - provisionalHyphens);
32.18464 +  }
32.18465 +  this$static.cstart = pos + 1;
32.18466 +}
32.18467 +
32.18468 +function $emitCurrentTagToken(this$static, selfClosing, pos){
32.18469 +  var attrs;
32.18470 +  this$static.cstart = pos + 1;
32.18471 +  this$static.stateSave = 0;
32.18472 +  attrs = !this$static.attributes?($clinit_91() , EMPTY_ATTRIBUTES):this$static.attributes;
32.18473 +  if (this$static.endTag) {
32.18474 +    $endTag(this$static.tokenHandler, this$static.tagName);
32.18475 +  }
32.18476 +   else {
32.18477 +    $startTag(this$static.tokenHandler, this$static.tagName, attrs, selfClosing);
32.18478 +  }
32.18479 +  $resetAttributes(this$static);
32.18480 +  return this$static.stateSave;
32.18481 +}
32.18482 +
32.18483 +function $emitOrAppend(this$static, val, returnState){
32.18484 +  if ((returnState & -2) != 0) {
32.18485 +    $appendLongStrBuf_0(this$static, val, 0, val.length);
32.18486 +  }
32.18487 +   else {
32.18488 +    $characters(this$static.tokenHandler, val, 0, val.length);
32.18489 +  }
32.18490 +}
32.18491 +
32.18492 +function $emitOrAppendOne(this$static, val, returnState){
32.18493 +  if ((returnState & -2) != 0) {
32.18494 +    $appendLongStrBuf(this$static, val[0]);
32.18495 +  }
32.18496 +   else {
32.18497 +    $characters(this$static.tokenHandler, val, 0, 1);
32.18498 +  }
32.18499 +}
32.18500 +
32.18501 +function $emitOrAppendStrBuf(this$static, returnState){
32.18502 +  if ((returnState & -2) != 0) {
32.18503 +    $appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen);
32.18504 +  }
32.18505 +   else {
32.18506 +    $emitStrBuf(this$static);
32.18507 +  }
32.18508 +}
32.18509 +
32.18510 +function $emitReplacementCharacter(this$static, buf, pos){
32.18511 +  this$static.nextCharOnNewLine = true;
32.18512 +  this$static.lastCR = true;
32.18513 +  $flushChars(this$static, buf, pos);
32.18514 +  $characters(this$static.tokenHandler, REPLACEMENT_CHARACTER, 0, 1);
32.18515 +  this$static.cstart = 2147483647;
32.18516 +}
32.18517 +
32.18518 +function $emitStrBuf(this$static){
32.18519 +  if (this$static.strBufLen > 0) {
32.18520 +    $characters(this$static.tokenHandler, this$static.strBuf, 0, this$static.strBufLen);
32.18521 +  }
32.18522 +}
32.18523 +
32.18524 +function $emptyAttributes(this$static){
32.18525 +  if (this$static.newAttributesEachTime) {
32.18526 +    return $HtmlAttributes(new HtmlAttributes(), this$static.mappingLangToXmlLang);
32.18527 +  }
32.18528 +   else {
32.18529 +    return $clinit_91() , EMPTY_ATTRIBUTES;
32.18530 +  }
32.18531 +}
32.18532 +
32.18533 +function $end(this$static){
32.18534 +  this$static.strBuf = null;
32.18535 +  this$static.longStrBuf = null;
32.18536 +  this$static.systemIdentifier = null;
32.18537 +  this$static.publicIdentifier = null;
32.18538 +  this$static.doctypeName = null;
32.18539 +  this$static.tagName = null;
32.18540 +  this$static.attributeName = null;
32.18541 +  $endTokenization(this$static.tokenHandler);
32.18542 +  if (this$static.attributes) {
32.18543 +    $clear_0(this$static.attributes, this$static.mappingLangToXmlLang);
32.18544 +    this$static.attributes = null;
32.18545 +  }
32.18546 +}
32.18547 +
32.18548 +function $eof(this$static){
32.18549 +  var candidateArr, ch, i, returnState, state, val;
32.18550 +  state = this$static.stateSave;
32.18551 +  returnState = this$static.returnStateSave;
32.18552 +  eofloop: for (;;) {
32.18553 +    switch (state) {
32.18554 +      case 53:
32.18555 +        $characters(this$static.tokenHandler, LT_GT, 0, 1);
32.18556 +        break eofloop;
32.18557 +      case 4:
32.18558 +        $characters(this$static.tokenHandler, LT_GT, 0, 1);
32.18559 +        break eofloop;
32.18560 +      case 37:
32.18561 +        if (this$static.index < this$static.contentModelElementNameAsArray.length) {
32.18562 +          break eofloop;
32.18563 +        }
32.18564 +         else {
32.18565 +          break eofloop;
32.18566 +        }
32.18567 +
32.18568 +      case 5:
32.18569 +        $characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
32.18570 +        break eofloop;
32.18571 +      case 6:
32.18572 +        break eofloop;
32.18573 +      case 7:
32.18574 +      case 14:
32.18575 +      case 48:
32.18576 +        break eofloop;
32.18577 +      case 8:
32.18578 +        break eofloop;
32.18579 +      case 9:
32.18580 +      case 10:
32.18581 +        break eofloop;
32.18582 +      case 11:
32.18583 +      case 12:
32.18584 +      case 13:
32.18585 +        break eofloop;
32.18586 +      case 15:
32.18587 +        $emitComment(this$static, 0, 0);
32.18588 +        break eofloop;
32.18589 +      case 59:
32.18590 +        $maybeAppendSpaceToBogusComment(this$static);
32.18591 +        $emitComment(this$static, 0, 0);
32.18592 +        break eofloop;
32.18593 +      case 16:
32.18594 +        this$static.longStrBufLen = 0;
32.18595 +        $emitComment(this$static, 0, 0);
32.18596 +        break eofloop;
32.18597 +      case 38:
32.18598 +        $emitComment(this$static, 0, 0);
32.18599 +        break eofloop;
32.18600 +      case 39:
32.18601 +        if (this$static.index < 6) {
32.18602 +          $emitComment(this$static, 0, 0);
32.18603 +        }
32.18604 +         else {
32.18605 +          this$static.doctypeName = '';
32.18606 +          this$static.publicIdentifier = null;
32.18607 +          this$static.systemIdentifier = null;
32.18608 +          this$static.forceQuirks = true;
32.18609 +          this$static.cstart = 1;
32.18610 +          $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18611 +          break eofloop;
32.18612 +        }
32.18613 +
32.18614 +        break eofloop;
32.18615 +      case 30:
32.18616 +      case 32:
32.18617 +      case 35:
32.18618 +        $emitComment(this$static, 0, 0);
32.18619 +        break eofloop;
32.18620 +      case 34:
32.18621 +        $emitComment(this$static, 2, 0);
32.18622 +        break eofloop;
32.18623 +      case 33:
32.18624 +      case 31:
32.18625 +        $emitComment(this$static, 1, 0);
32.18626 +        break eofloop;
32.18627 +      case 36:
32.18628 +        $emitComment(this$static, 3, 0);
32.18629 +        break eofloop;
32.18630 +      case 17:
32.18631 +      case 18:
32.18632 +        this$static.forceQuirks = true;
32.18633 +        this$static.cstart = 1;
32.18634 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18635 +        break eofloop;
32.18636 +      case 19:
32.18637 +        this$static.doctypeName = String(valueOf_1(this$static.strBuf, 0, this$static.strBufLen));
32.18638 +        this$static.forceQuirks = true;
32.18639 +        this$static.cstart = 1;
32.18640 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18641 +        break eofloop;
32.18642 +      case 40:
32.18643 +      case 41:
32.18644 +      case 20:
32.18645 +      case 21:
32.18646 +        this$static.forceQuirks = true;
32.18647 +        this$static.cstart = 1;
32.18648 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18649 +        break eofloop;
32.18650 +      case 22:
32.18651 +      case 23:
32.18652 +        this$static.forceQuirks = true;
32.18653 +        this$static.publicIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.18654 +        this$static.cstart = 1;
32.18655 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18656 +        break eofloop;
32.18657 +      case 24:
32.18658 +      case 25:
32.18659 +        this$static.forceQuirks = true;
32.18660 +        this$static.cstart = 1;
32.18661 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18662 +        break eofloop;
32.18663 +      case 26:
32.18664 +      case 27:
32.18665 +        this$static.forceQuirks = true;
32.18666 +        this$static.systemIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.18667 +        this$static.cstart = 1;
32.18668 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18669 +        break eofloop;
32.18670 +      case 28:
32.18671 +        this$static.forceQuirks = true;
32.18672 +        this$static.cstart = 1;
32.18673 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18674 +        break eofloop;
32.18675 +      case 29:
32.18676 +        this$static.cstart = 1;
32.18677 +        $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.18678 +        break eofloop;
32.18679 +      case 42:
32.18680 +        $emitOrAppendStrBuf(this$static, returnState);
32.18681 +        state = returnState;
32.18682 +        continue;
32.18683 +      case 44:
32.18684 +        outer: for (;;) {
32.18685 +          ++this$static.entCol;
32.18686 +          hiloop: for (;;) {
32.18687 +            if (this$static.hi == -1) {
32.18688 +              break hiloop;
32.18689 +            }
32.18690 +            if (this$static.entCol == ($clinit_94() , NAMES)[this$static.hi].length) {
32.18691 +              break hiloop;
32.18692 +            }
32.18693 +            if (this$static.entCol > NAMES[this$static.hi].length) {
32.18694 +              break outer;
32.18695 +            }
32.18696 +             else if (0 < NAMES[this$static.hi][this$static.entCol]) {
32.18697 +              --this$static.hi;
32.18698 +            }
32.18699 +             else {
32.18700 +              break hiloop;
32.18701 +            }
32.18702 +          }
32.18703 +          loloop: for (;;) {
32.18704 +            if (this$static.hi < this$static.lo) {
32.18705 +              break outer;
32.18706 +            }
32.18707 +            if (this$static.entCol == ($clinit_94() , NAMES)[this$static.lo].length) {
32.18708 +              this$static.candidate = this$static.lo;
32.18709 +              this$static.strBufMark = this$static.strBufLen;
32.18710 +              ++this$static.lo;
32.18711 +            }
32.18712 +             else if (this$static.entCol > NAMES[this$static.lo].length) {
32.18713 +              break outer;
32.18714 +            }
32.18715 +             else if (0 > NAMES[this$static.lo][this$static.entCol]) {
32.18716 +              ++this$static.lo;
32.18717 +            }
32.18718 +             else {
32.18719 +              break loloop;
32.18720 +            }
32.18721 +          }
32.18722 +          if (this$static.hi < this$static.lo) {
32.18723 +            break outer;
32.18724 +          }
32.18725 +          continue;
32.18726 +        }
32.18727 +
32.18728 +        if (this$static.candidate == -1) {
32.18729 +          $emitOrAppendStrBuf(this$static, returnState);
32.18730 +          state = returnState;
32.18731 +          continue eofloop;
32.18732 +        }
32.18733 +         else {
32.18734 +          candidateArr = ($clinit_94() , NAMES)[this$static.candidate];
32.18735 +          if (candidateArr[candidateArr.length - 1] != 59) {
32.18736 +            if ((returnState & -2) != 0) {
32.18737 +              if (this$static.strBufMark == this$static.strBufLen) {
32.18738 +                ch = 0;
32.18739 +              }
32.18740 +               else {
32.18741 +                ch = this$static.strBuf[this$static.strBufMark];
32.18742 +              }
32.18743 +              if (ch >= 48 && ch <= 57 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122) {
32.18744 +                $appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen);
32.18745 +                state = returnState;
32.18746 +                continue eofloop;
32.18747 +              }
32.18748 +            }
32.18749 +          }
32.18750 +          val = VALUES_0[this$static.candidate];
32.18751 +          $emitOrAppend(this$static, val, returnState);
32.18752 +          if (this$static.strBufMark < this$static.strBufLen) {
32.18753 +            if ((returnState & -2) != 0) {
32.18754 +              for (i = this$static.strBufMark; i < this$static.strBufLen; ++i) {
32.18755 +                $appendLongStrBuf(this$static, this$static.strBuf[i]);
32.18756 +              }
32.18757 +            }
32.18758 +             else {
32.18759 +              $characters(this$static.tokenHandler, this$static.strBuf, this$static.strBufMark, this$static.strBufLen - this$static.strBufMark);
32.18760 +            }
32.18761 +          }
32.18762 +          state = returnState;
32.18763 +          continue eofloop;
32.18764 +        }
32.18765 +
32.18766 +      case 43:
32.18767 +      case 46:
32.18768 +      case 45:
32.18769 +        if (this$static.seenDigits) {
32.18770 +        }
32.18771 +         else {
32.18772 +          'No digits after \u201C' + valueOf_1(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.';
32.18773 +          $emitOrAppendStrBuf(this$static, returnState);
32.18774 +          state = returnState;
32.18775 +          continue;
32.18776 +        }
32.18777 +
32.18778 +        $handleNcrValue(this$static, returnState);
32.18779 +        state = returnState;
32.18780 +        continue;
32.18781 +      case 0:
32.18782 +      default:break eofloop;
32.18783 +    }
32.18784 +  }
32.18785 +  $eof_0(this$static.tokenHandler);
32.18786 +  return;
32.18787 +}
32.18788 +
32.18789 +function $fatal(this$static, message){
32.18790 +  var spe;
32.18791 +  spe = $SAXParseException(new SAXParseException(), message, this$static);
32.18792 +  throw spe;
32.18793 +}
32.18794 +
32.18795 +function $handleNcrValue(this$static, returnState){
32.18796 +  var ch, val;
32.18797 +  if (this$static.value >= 128 && this$static.value <= 159) {
32.18798 +    val = ($clinit_94() , WINDOWS_1252)[this$static.value - 128];
32.18799 +    $emitOrAppendOne(this$static, val, returnState);
32.18800 +  }
32.18801 +   else if (this$static.value == 13) {
32.18802 +    $emitOrAppendOne(this$static, LF, returnState);
32.18803 +  }
32.18804 +   else if (this$static.value == 12 && this$static.contentSpacePolicy != ($clinit_80() , ALLOW)) {
32.18805 +    if (this$static.contentSpacePolicy == ($clinit_80() , ALTER_INFOSET)) {
32.18806 +      $emitOrAppendOne(this$static, SPACE, returnState);
32.18807 +    }
32.18808 +     else if (this$static.contentSpacePolicy == FATAL) {
32.18809 +      $fatal(this$static, 'A character reference expanded to a form feed which is not legal XML 1.0 white space.');
32.18810 +    }
32.18811 +  }
32.18812 +   else if (this$static.value >= 0 && this$static.value <= 8 || this$static.value == 11 || this$static.value >= 14 && this$static.value <= 31 || this$static.value == 127) {
32.18813 +    'Character reference expands to a control character (' + $toUPlusString(this$static.value & 65535) + ').';
32.18814 +    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER, returnState);
32.18815 +  }
32.18816 +   else if ((this$static.value & 63488) == 55296) {
32.18817 +    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER, returnState);
32.18818 +  }
32.18819 +   else if ((this$static.value & 65534) == 65534) {
32.18820 +    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER, returnState);
32.18821 +  }
32.18822 +   else if (this$static.value >= 64976 && this$static.value <= 65007) {
32.18823 +    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER, returnState);
32.18824 +  }
32.18825 +   else if (this$static.value <= 65535) {
32.18826 +    ch = this$static.value & 65535;
32.18827 +    this$static.bmpChar[0] = ch;
32.18828 +    $emitOrAppendOne(this$static, this$static.bmpChar, returnState);
32.18829 +  }
32.18830 +   else if (this$static.value <= 1114111) {
32.18831 +    this$static.astralChar[0] = 55232 + (this$static.value >> 10) & 65535;
32.18832 +    this$static.astralChar[1] = 56320 + (this$static.value & 1023) & 65535;
32.18833 +    $emitOrAppend(this$static, this$static.astralChar, returnState);
32.18834 +  }
32.18835 +   else {
32.18836 +    $emitOrAppendOne(this$static, REPLACEMENT_CHARACTER, returnState);
32.18837 +  }
32.18838 +}
32.18839 +
32.18840 +function $maybeAppendSpaceToBogusComment(this$static){
32.18841 +  switch (this$static.commentPolicy.ordinal) {
32.18842 +    case 2:
32.18843 +      $appendLongStrBuf(this$static, 32);
32.18844 +      break;
32.18845 +    case 1:
32.18846 +      $fatal(this$static, 'The document is not mappable to XML 1.0 due to a trailing hyphen in a comment.');
32.18847 +  }
32.18848 +}
32.18849 +
32.18850 +function $resetAttributes(this$static){
32.18851 +  if (this$static.newAttributesEachTime) {
32.18852 +    this$static.attributes = null;
32.18853 +  }
32.18854 +   else {
32.18855 +    $clear_0(this$static.attributes, this$static.mappingLangToXmlLang);
32.18856 +  }
32.18857 +}
32.18858 +
32.18859 +function $setContentModelFlag(this$static, contentModelFlag){
32.18860 +  var asArray;
32.18861 +  this$static.stateSave = contentModelFlag;
32.18862 +  if (contentModelFlag == 0) {
32.18863 +    return;
32.18864 +  }
32.18865 +  asArray = null.nullMethod();
32.18866 +  this$static.contentModelElement = elementNameByBuffer(asArray, 0, null.nullField);
32.18867 +  $contentModelElementToArray(this$static);
32.18868 +}
32.18869 +
32.18870 +function $setContentModelFlag_0(this$static, contentModelFlag, contentModelElement){
32.18871 +  this$static.stateSave = contentModelFlag;
32.18872 +  this$static.contentModelElement = contentModelElement;
32.18873 +  $contentModelElementToArray(this$static);
32.18874 +}
32.18875 +
32.18876 +function $setXmlnsPolicy(this$static, xmlnsPolicy){
32.18877 +  if (xmlnsPolicy == ($clinit_80() , FATAL)) {
32.18878 +    throw $IllegalArgumentException(new IllegalArgumentException(), "Can't use FATAL here.");
32.18879 +  }
32.18880 +  this$static.xmlnsPolicy = xmlnsPolicy;
32.18881 +}
32.18882 +
32.18883 +function $start_0(this$static){
32.18884 +  this$static.confident = false;
32.18885 +  this$static.strBuf = initDim(_3C_classLit, 42, -1, 64, 1);
32.18886 +  this$static.strBufLen = 0;
32.18887 +  this$static.longStrBuf = initDim(_3C_classLit, 42, -1, 1024, 1);
32.18888 +  this$static.longStrBufLen = 0;
32.18889 +  this$static.stateSave = 0;
32.18890 +  this$static.lastCR = false;
32.18891 +  this$static.html4 = false;
32.18892 +  this$static.metaBoundaryPassed = false;
32.18893 +  $startTokenization(this$static.tokenHandler, this$static);
32.18894 +  this$static.wantsComments = this$static.tokenHandler.wantingComments;
32.18895 +  this$static.index = 0;
32.18896 +  this$static.forceQuirks = false;
32.18897 +  this$static.additional = 0;
32.18898 +  this$static.entCol = -1;
32.18899 +  this$static.lo = 0;
32.18900 +  this$static.hi = ($clinit_94() , NAMES).length - 1;
32.18901 +  this$static.candidate = -1;
32.18902 +  this$static.strBufMark = 0;
32.18903 +  this$static.prevValue = -1;
32.18904 +  this$static.value = 0;
32.18905 +  this$static.seenDigits = false;
32.18906 +  this$static.shouldSuspend = false;
32.18907 +  if (this$static.newAttributesEachTime) {
32.18908 +    this$static.attributes = null;
32.18909 +  }
32.18910 +   else {
32.18911 +    this$static.attributes = $HtmlAttributes(new HtmlAttributes(), this$static.mappingLangToXmlLang);
32.18912 +  }
32.18913 +  this$static.alreadyComplainedAboutNonAscii = false;
32.18914 +  this$static.line = this$static.linePrev = 0;
32.18915 +  this$static.col = this$static.colPrev = 1;
32.18916 +  this$static.nextCharOnNewLine = true;
32.18917 +  this$static.prev = 0;
32.18918 +  this$static.alreadyWarnedAboutPrivateUseCharacters = false;
32.18919 +}
32.18920 +
32.18921 +function $stateLoop(this$static, state, c, pos, buf, reconsume, returnState, endPos){
32.18922 +  var candidateArr, ch, e, folded, i, val;
32.18923 +  stateloop: for (;;) {
32.18924 +    switch (state) {
32.18925 +      case 0:
32.18926 +        dataloop: for (;;) {
32.18927 +          if (reconsume) {
32.18928 +            reconsume = false;
32.18929 +          }
32.18930 +           else {
32.18931 +            if (++pos == endPos) {
32.18932 +              break stateloop;
32.18933 +            }
32.18934 +            c = $checkChar(this$static, buf, pos);
32.18935 +          }
32.18936 +          switch (c) {
32.18937 +            case 38:
32.18938 +              $flushChars(this$static, buf, pos);
32.18939 +              this$static.strBuf[0] = c;
32.18940 +              this$static.strBufLen = 1;
32.18941 +              this$static.additional = 0;
32.18942 +              $LocatorImpl(new LocatorImpl(), this$static);
32.18943 +              returnState = state;
32.18944 +              state = 42;
32.18945 +              continue stateloop;
32.18946 +            case 60:
32.18947 +              $flushChars(this$static, buf, pos);
32.18948 +              state = 4;
32.18949 +              break dataloop;
32.18950 +            case 0:
32.18951 +              $emitReplacementCharacter(this$static, buf, pos);
32.18952 +              continue;
32.18953 +            case 13:
32.18954 +              $emitCarriageReturn(this$static, buf, pos);
32.18955 +              break stateloop;
32.18956 +            case 10:
32.18957 +              this$static.nextCharOnNewLine = true;
32.18958 +            default:continue;
32.18959 +          }
32.18960 +        }
32.18961 +
32.18962 +      case 4:
32.18963 +        tagopenloop: for (;;) {
32.18964 +          if (++pos == endPos) {
32.18965 +            break stateloop;
32.18966 +          }
32.18967 +          c = $checkChar(this$static, buf, pos);
32.18968 +          if (c >= 65 && c <= 90) {
32.18969 +            this$static.endTag = false;
32.18970 +            this$static.strBuf[0] = c + 32 & 65535;
32.18971 +            this$static.strBufLen = 1;
32.18972 +            state = 6;
32.18973 +            break tagopenloop;
32.18974 +          }
32.18975 +           else if (c >= 97 && c <= 122) {
32.18976 +            this$static.endTag = false;
32.18977 +            this$static.strBuf[0] = c;
32.18978 +            this$static.strBufLen = 1;
32.18979 +            state = 6;
32.18980 +            break tagopenloop;
32.18981 +          }
32.18982 +          switch (c) {
32.18983 +            case 33:
32.18984 +              state = 16;
32.18985 +              continue stateloop;
32.18986 +            case 47:
32.18987 +              state = 5;
32.18988 +              continue stateloop;
32.18989 +            case 63:
32.18990 +              this$static.longStrBuf[0] = c;
32.18991 +              this$static.longStrBufLen = 1;
32.18992 +              state = 15;
32.18993 +              continue stateloop;
32.18994 +            case 62:
32.18995 +              $characters(this$static.tokenHandler, LT_GT, 0, 2);
32.18996 +              this$static.cstart = pos + 1;
32.18997 +              state = 0;
32.18998 +              continue stateloop;
32.18999 +            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
32.19000 +              this$static.cstart = pos;
32.19001 +              state = 0;
32.19002 +              reconsume = true;
32.19003 +              continue stateloop;
32.19004 +          }
32.19005 +        }
32.19006 +
32.19007 +      case 6:
32.19008 +        tagnameloop: for (;;) {
32.19009 +          if (++pos == endPos) {
32.19010 +            break stateloop;
32.19011 +          }
32.19012 +          c = $checkChar(this$static, buf, pos);
32.19013 +          switch (c) {
32.19014 +            case 13:
32.19015 +              this$static.nextCharOnNewLine = true;
32.19016 +              this$static.lastCR = true;
32.19017 +              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
32.19018 +              state = 7;
32.19019 +              break stateloop;
32.19020 +            case 10:
32.19021 +              this$static.nextCharOnNewLine = true;
32.19022 +            case 32:
32.19023 +            case 9:
32.19024 +            case 12:
32.19025 +              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
32.19026 +              state = 7;
32.19027 +              break tagnameloop;
32.19028 +            case 47:
32.19029 +              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
32.19030 +              state = 48;
32.19031 +              continue stateloop;
32.19032 +            case 62:
32.19033 +              this$static.tagName = elementNameByBuffer(this$static.strBuf, 0, this$static.strBufLen);
32.19034 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19035 +              if (this$static.shouldSuspend) {
32.19036 +                break stateloop;
32.19037 +              }
32.19038 +
32.19039 +              continue stateloop;
32.19040 +            case 0:
32.19041 +              c = 65533;
32.19042 +            default:if (c >= 65 && c <= 90) {
32.19043 +                c += 32;
32.19044 +              }
32.19045 +
32.19046 +              $appendStrBuf(this$static, c);
32.19047 +              continue;
32.19048 +          }
32.19049 +        }
32.19050 +
32.19051 +      case 7:
32.19052 +        beforeattributenameloop: for (;;) {
32.19053 +          if (reconsume) {
32.19054 +            reconsume = false;
32.19055 +          }
32.19056 +           else {
32.19057 +            if (++pos == endPos) {
32.19058 +              break stateloop;
32.19059 +            }
32.19060 +            c = $checkChar(this$static, buf, pos);
32.19061 +          }
32.19062 +          switch (c) {
32.19063 +            case 13:
32.19064 +              this$static.nextCharOnNewLine = true;
32.19065 +              this$static.lastCR = true;
32.19066 +              break stateloop;
32.19067 +            case 10:
32.19068 +              this$static.nextCharOnNewLine = true;
32.19069 +            case 32:
32.19070 +            case 9:
32.19071 +            case 12:
32.19072 +              continue;
32.19073 +            case 47:
32.19074 +              state = 48;
32.19075 +              continue stateloop;
32.19076 +            case 62:
32.19077 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19078 +              if (this$static.shouldSuspend) {
32.19079 +                break stateloop;
32.19080 +              }
32.19081 +
32.19082 +              continue stateloop;
32.19083 +            case 0:
32.19084 +              c = 65533;
32.19085 +            case 34:
32.19086 +            case 39:
32.19087 +            case 60:
32.19088 +            case 61:
32.19089 +            default:if (c >= 65 && c <= 90) {
32.19090 +                c += 32;
32.19091 +              }
32.19092 +
32.19093 +              this$static.strBuf[0] = c;
32.19094 +              this$static.strBufLen = 1;
32.19095 +              state = 8;
32.19096 +              break beforeattributenameloop;
32.19097 +          }
32.19098 +        }
32.19099 +
32.19100 +      case 8:
32.19101 +        attributenameloop: for (;;) {
32.19102 +          if (++pos == endPos) {
32.19103 +            break stateloop;
32.19104 +          }
32.19105 +          c = $checkChar(this$static, buf, pos);
32.19106 +          switch (c) {
32.19107 +            case 13:
32.19108 +              this$static.nextCharOnNewLine = true;
32.19109 +              this$static.lastCR = true;
32.19110 +              $attributeNameComplete(this$static);
32.19111 +              state = 9;
32.19112 +              break stateloop;
32.19113 +            case 10:
32.19114 +              this$static.nextCharOnNewLine = true;
32.19115 +            case 32:
32.19116 +            case 9:
32.19117 +            case 12:
32.19118 +              $attributeNameComplete(this$static);
32.19119 +              state = 9;
32.19120 +              continue stateloop;
32.19121 +            case 47:
32.19122 +              $attributeNameComplete(this$static);
32.19123 +              $addAttributeWithoutValue(this$static);
32.19124 +              state = 48;
32.19125 +              continue stateloop;
32.19126 +            case 61:
32.19127 +              $attributeNameComplete(this$static);
32.19128 +              state = 10;
32.19129 +              break attributenameloop;
32.19130 +            case 62:
32.19131 +              $attributeNameComplete(this$static);
32.19132 +              $addAttributeWithoutValue(this$static);
32.19133 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19134 +              if (this$static.shouldSuspend) {
32.19135 +                break stateloop;
32.19136 +              }
32.19137 +
32.19138 +              continue stateloop;
32.19139 +            case 0:
32.19140 +              c = 65533;
32.19141 +            case 34:
32.19142 +            case 39:
32.19143 +            case 60:
32.19144 +            default:if (c >= 65 && c <= 90) {
32.19145 +                c += 32;
32.19146 +              }
32.19147 +
32.19148 +              $appendStrBuf(this$static, c);
32.19149 +              continue;
32.19150 +          }
32.19151 +        }
32.19152 +
32.19153 +      case 10:
32.19154 +        beforeattributevalueloop: for (;;) {
32.19155 +          if (++pos == endPos) {
32.19156 +            break stateloop;
32.19157 +          }
32.19158 +          c = $checkChar(this$static, buf, pos);
32.19159 +          switch (c) {
32.19160 +            case 13:
32.19161 +              this$static.nextCharOnNewLine = true;
32.19162 +              this$static.lastCR = true;
32.19163 +              break stateloop;
32.19164 +            case 10:
32.19165 +              this$static.nextCharOnNewLine = true;
32.19166 +            case 32:
32.19167 +            case 9:
32.19168 +            case 12:
32.19169 +              continue;
32.19170 +            case 34:
32.19171 +              this$static.longStrBufLen = 0;
32.19172 +              state = 11;
32.19173 +              break beforeattributevalueloop;
32.19174 +            case 38:
32.19175 +              this$static.longStrBufLen = 0;
32.19176 +              state = 13;
32.19177 +              reconsume = true;
32.19178 +              continue stateloop;
32.19179 +            case 39:
32.19180 +              this$static.longStrBufLen = 0;
32.19181 +              state = 12;
32.19182 +              continue stateloop;
32.19183 +            case 62:
32.19184 +              $addAttributeWithoutValue(this$static);
32.19185 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19186 +              if (this$static.shouldSuspend) {
32.19187 +                break stateloop;
32.19188 +              }
32.19189 +
32.19190 +              continue stateloop;
32.19191 +            case 0:
32.19192 +              c = 65533;
32.19193 +            case 60:
32.19194 +            case 61:
32.19195 +              $errLtOrEqualsInUnquotedAttributeOrNull(c);
32.19196 +            default:this$static.longStrBuf[0] = c;
32.19197 +              this$static.longStrBufLen = 1;
32.19198 +              state = 13;
32.19199 +              continue stateloop;
32.19200 +          }
32.19201 +        }
32.19202 +
32.19203 +      case 11:
32.19204 +        attributevaluedoublequotedloop: for (;;) {
32.19205 +          if (reconsume) {
32.19206 +            reconsume = false;
32.19207 +          }
32.19208 +           else {
32.19209 +            if (++pos == endPos) {
32.19210 +              break stateloop;
32.19211 +            }
32.19212 +            c = $checkChar(this$static, buf, pos);
32.19213 +          }
32.19214 +          switch (c) {
32.19215 +            case 34:
32.19216 +              $addAttributeWithValue(this$static);
32.19217 +              state = 14;
32.19218 +              break attributevaluedoublequotedloop;
32.19219 +            case 38:
32.19220 +              this$static.strBuf[0] = c;
32.19221 +              this$static.strBufLen = 1;
32.19222 +              this$static.additional = 34;
32.19223 +              $LocatorImpl(new LocatorImpl(), this$static);
32.19224 +              returnState = state;
32.19225 +              state = 42;
32.19226 +              continue stateloop;
32.19227 +            case 13:
32.19228 +              this$static.nextCharOnNewLine = true;
32.19229 +              this$static.lastCR = true;
32.19230 +              $appendLongStrBuf(this$static, 10);
32.19231 +              break stateloop;
32.19232 +            case 10:
32.19233 +              this$static.nextCharOnNewLine = true;
32.19234 +              $appendLongStrBuf(this$static, 10);
32.19235 +              continue;
32.19236 +            case 0:
32.19237 +              c = 65533;
32.19238 +            default:$appendLongStrBuf(this$static, c);
32.19239 +              continue;
32.19240 +          }
32.19241 +        }
32.19242 +
32.19243 +      case 14:
32.19244 +        afterattributevaluequotedloop: for (;;) {
32.19245 +          if (++pos == endPos) {
32.19246 +            break stateloop;
32.19247 +          }
32.19248 +          c = $checkChar(this$static, buf, pos);
32.19249 +          switch (c) {
32.19250 +            case 13:
32.19251 +              this$static.nextCharOnNewLine = true;
32.19252 +              this$static.lastCR = true;
32.19253 +              state = 7;
32.19254 +              break stateloop;
32.19255 +            case 10:
32.19256 +              this$static.nextCharOnNewLine = true;
32.19257 +            case 32:
32.19258 +            case 9:
32.19259 +            case 12:
32.19260 +              state = 7;
32.19261 +              continue stateloop;
32.19262 +            case 47:
32.19263 +              state = 48;
32.19264 +              break afterattributevaluequotedloop;
32.19265 +            case 62:
32.19266 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19267 +              if (this$static.shouldSuspend) {
32.19268 +                break stateloop;
32.19269 +              }
32.19270 +
32.19271 +              continue stateloop;
32.19272 +            default:state = 7;
32.19273 +              reconsume = true;
32.19274 +              continue stateloop;
32.19275 +          }
32.19276 +        }
32.19277 +
32.19278 +      case 48:
32.19279 +        if (++pos == endPos) {
32.19280 +          break stateloop;
32.19281 +        }
32.19282 +
32.19283 +        c = $checkChar(this$static, buf, pos);
32.19284 +        switch (c) {
32.19285 +          case 62:
32.19286 +            state = $emitCurrentTagToken(this$static, true, pos);
32.19287 +            if (this$static.shouldSuspend) {
32.19288 +              break stateloop;
32.19289 +            }
32.19290 +
32.19291 +            continue stateloop;
32.19292 +          default:state = 7;
32.19293 +            reconsume = true;
32.19294 +            continue stateloop;
32.19295 +        }
32.19296 +
32.19297 +      case 13:
32.19298 +        for (;;) {
32.19299 +          if (reconsume) {
32.19300 +            reconsume = false;
32.19301 +          }
32.19302 +           else {
32.19303 +            if (++pos == endPos) {
32.19304 +              break stateloop;
32.19305 +            }
32.19306 +            c = $checkChar(this$static, buf, pos);
32.19307 +          }
32.19308 +          switch (c) {
32.19309 +            case 13:
32.19310 +              this$static.nextCharOnNewLine = true;
32.19311 +              this$static.lastCR = true;
32.19312 +              $addAttributeWithValue(this$static);
32.19313 +              state = 7;
32.19314 +              break stateloop;
32.19315 +            case 10:
32.19316 +              this$static.nextCharOnNewLine = true;
32.19317 +            case 32:
32.19318 +            case 9:
32.19319 +            case 12:
32.19320 +              $addAttributeWithValue(this$static);
32.19321 +              state = 7;
32.19322 +              continue stateloop;
32.19323 +            case 38:
32.19324 +              this$static.strBuf[0] = c;
32.19325 +              this$static.strBufLen = 1;
32.19326 +              this$static.additional = 62;
32.19327 +              $LocatorImpl(new LocatorImpl(), this$static);
32.19328 +              returnState = state;
32.19329 +              state = 42;
32.19330 +              continue stateloop;
32.19331 +            case 62:
32.19332 +              $addAttributeWithValue(this$static);
32.19333 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19334 +              if (this$static.shouldSuspend) {
32.19335 +                break stateloop;
32.19336 +              }
32.19337 +
32.19338 +              continue stateloop;
32.19339 +            case 0:
32.19340 +              c = 65533;
32.19341 +            case 60:
32.19342 +            case 34:
32.19343 +            case 39:
32.19344 +            case 61:
32.19345 +            default:$appendLongStrBuf(this$static, c);
32.19346 +              continue;
32.19347 +          }
32.19348 +        }
32.19349 +
32.19350 +      case 9:
32.19351 +        for (;;) {
32.19352 +          if (++pos == endPos) {
32.19353 +            break stateloop;
32.19354 +          }
32.19355 +          c = $checkChar(this$static, buf, pos);
32.19356 +          switch (c) {
32.19357 +            case 13:
32.19358 +              this$static.nextCharOnNewLine = true;
32.19359 +              this$static.lastCR = true;
32.19360 +              break stateloop;
32.19361 +            case 10:
32.19362 +              this$static.nextCharOnNewLine = true;
32.19363 +            case 32:
32.19364 +            case 9:
32.19365 +            case 12:
32.19366 +              continue;
32.19367 +            case 47:
32.19368 +              $addAttributeWithoutValue(this$static);
32.19369 +              state = 48;
32.19370 +              continue stateloop;
32.19371 +            case 61:
32.19372 +              state = 10;
32.19373 +              continue stateloop;
32.19374 +            case 62:
32.19375 +              $addAttributeWithoutValue(this$static);
32.19376 +              state = $emitCurrentTagToken(this$static, false, pos);
32.19377 +              if (this$static.shouldSuspend) {
32.19378 +                break stateloop;
32.19379 +              }
32.19380 +
32.19381 +              continue stateloop;
32.19382 +            case 0:
32.19383 +              c = 65533;
32.19384 +            case 34:
32.19385 +            case 39:
32.19386 +            case 60:
32.19387 +            default:$addAttributeWithoutValue(this$static);
32.19388 +              if (c >= 65 && c <= 90) {
32.19389 +                c += 32;
32.19390 +              }
32.19391 +
32.19392 +              this$static.strBuf[0] = c;
32.19393 +              this$static.strBufLen = 1;
32.19394 +              state = 8;
32.19395 +              continue stateloop;
32.19396 +          }
32.19397 +        }
32.19398 +
32.19399 +      case 15:
32.19400 +        boguscommentloop: for (;;) {
32.19401 +          if (reconsume) {
32.19402 +            reconsume = false;
32.19403 +          }
32.19404 +           else {
32.19405 +            if (++pos == endPos) {
32.19406 +              break stateloop;
32.19407 +            }
32.19408 +            c = $checkChar(this$static, buf, pos);
32.19409 +          }
32.19410 +          switch (c) {
32.19411 +            case 62:
32.19412 +              $emitComment(this$static, 0, pos);
32.19413 +              state = 0;
32.19414 +              continue stateloop;
32.19415 +            case 45:
32.19416 +              $appendLongStrBuf(this$static, c);
32.19417 +              state = 59;
32.19418 +              break boguscommentloop;
32.19419 +            case 13:
32.19420 +              this$static.nextCharOnNewLine = true;
32.19421 +              this$static.lastCR = true;
32.19422 +              $appendLongStrBuf(this$static, 10);
32.19423 +              break stateloop;
32.19424 +            case 10:
32.19425 +              this$static.nextCharOnNewLine = true;
32.19426 +              $appendLongStrBuf(this$static, 10);
32.19427 +              continue;
32.19428 +            case 0:
32.19429 +              c = 65533;
32.19430 +            default:$appendLongStrBuf(this$static, c);
32.19431 +              continue;
32.19432 +          }
32.19433 +        }
32.19434 +
32.19435 +      case 59:
32.19436 +        boguscommenthyphenloop: for (;;) {
32.19437 +          if (++pos == endPos) {
32.19438 +            break stateloop;
32.19439 +          }
32.19440 +          c = $checkChar(this$static, buf, pos);
32.19441 +          switch (c) {
32.19442 +            case 62:
32.19443 +              $maybeAppendSpaceToBogusComment(this$static);
32.19444 +              $emitComment(this$static, 0, pos);
32.19445 +              state = 0;
32.19446 +              continue stateloop;
32.19447 +            case 45:
32.19448 +              $appendSecondHyphenToBogusComment(this$static);
32.19449 +              continue boguscommenthyphenloop;
32.19450 +            case 13:
32.19451 +              this$static.nextCharOnNewLine = true;
32.19452 +              this$static.lastCR = true;
32.19453 +              $appendLongStrBuf(this$static, 10);
32.19454 +              state = 15;
32.19455 +              break stateloop;
32.19456 +            case 10:
32.19457 +              this$static.nextCharOnNewLine = true;
32.19458 +              $appendLongStrBuf(this$static, 10);
32.19459 +              state = 15;
32.19460 +              continue stateloop;
32.19461 +            case 0:
32.19462 +              c = 65533;
32.19463 +            default:$appendLongStrBuf(this$static, c);
32.19464 +              state = 15;
32.19465 +              continue stateloop;
32.19466 +          }
32.19467 +        }
32.19468 +
32.19469 +      case 16:
32.19470 +        markupdeclarationopenloop: for (;;) {
32.19471 +          if (++pos == endPos) {
32.19472 +            break stateloop;
32.19473 +          }
32.19474 +          c = $checkChar(this$static, buf, pos);
32.19475 +          switch (c) {
32.19476 +            case 45:
32.19477 +              this$static.longStrBuf[0] = c;
32.19478 +              this$static.longStrBufLen = 1;
32.19479 +              state = 38;
32.19480 +              break markupdeclarationopenloop;
32.19481 +            case 100:
32.19482 +            case 68:
32.19483 +              this$static.longStrBuf[0] = c;
32.19484 +              this$static.longStrBufLen = 1;
32.19485 +              this$static.index = 0;
32.19486 +              state = 39;
32.19487 +              continue stateloop;
32.19488 +            case 91:
32.19489 +              if (this$static.tokenHandler.foreignFlag == 0) {
32.19490 +                this$static.longStrBuf[0] = c;
32.19491 +                this$static.longStrBufLen = 1;
32.19492 +                this$static.index = 0;
32.19493 +                state = 49;
32.19494 +                continue stateloop;
32.19495 +              }
32.19496 +               else {
32.19497 +              }
32.19498 +
32.19499 +            default:this$static.longStrBufLen = 0;
32.19500 +              state = 15;
32.19501 +              reconsume = true;
32.19502 +              continue stateloop;
32.19503 +          }
32.19504 +        }
32.19505 +
32.19506 +      case 38:
32.19507 +        markupdeclarationhyphenloop: for (;;) {
32.19508 +          if (++pos == endPos) {
32.19509 +            break stateloop;
32.19510 +          }
32.19511 +          c = $checkChar(this$static, buf, pos);
32.19512 +          switch (c) {
32.19513 +            case 0:
32.19514 +              break stateloop;
32.19515 +            case 45:
32.19516 +              this$static.longStrBufLen = 0;
32.19517 +              state = 30;
32.19518 +              break markupdeclarationhyphenloop;
32.19519 +            default:state = 15;
32.19520 +              reconsume = true;
32.19521 +              continue stateloop;
32.19522 +          }
32.19523 +        }
32.19524 +
32.19525 +      case 30:
32.19526 +        commentstartloop: for (;;) {
32.19527 +          if (++pos == endPos) {
32.19528 +            break stateloop;
32.19529 +          }
32.19530 +          c = $checkChar(this$static, buf, pos);
32.19531 +          switch (c) {
32.19532 +            case 45:
32.19533 +              $appendLongStrBuf(this$static, c);
32.19534 +              state = 31;
32.19535 +              continue stateloop;
32.19536 +            case 62:
32.19537 +              $emitComment(this$static, 0, pos);
32.19538 +              state = 0;
32.19539 +              continue stateloop;
32.19540 +            case 13:
32.19541 +              this$static.nextCharOnNewLine = true;
32.19542 +              this$static.lastCR = true;
32.19543 +              $appendLongStrBuf(this$static, 10);
32.19544 +              state = 32;
32.19545 +              break stateloop;
32.19546 +            case 10:
32.19547 +              this$static.nextCharOnNewLine = true;
32.19548 +              $appendLongStrBuf(this$static, 10);
32.19549 +              state = 32;
32.19550 +              break commentstartloop;
32.19551 +            case 0:
32.19552 +              c = 65533;
32.19553 +            default:$appendLongStrBuf(this$static, c);
32.19554 +              state = 32;
32.19555 +              break commentstartloop;
32.19556 +          }
32.19557 +        }
32.19558 +
32.19559 +      case 32:
32.19560 +        commentloop: for (;;) {
32.19561 +          if (++pos == endPos) {
32.19562 +            break stateloop;
32.19563 +          }
32.19564 +          c = $checkChar(this$static, buf, pos);
32.19565 +          switch (c) {
32.19566 +            case 45:
32.19567 +              $appendLongStrBuf(this$static, c);
32.19568 +              state = 33;
32.19569 +              break commentloop;
32.19570 +            case 13:
32.19571 +              this$static.nextCharOnNewLine = true;
32.19572 +              this$static.lastCR = true;
32.19573 +              $appendLongStrBuf(this$static, 10);
32.19574 +              break stateloop;
32.19575 +            case 10:
32.19576 +              this$static.nextCharOnNewLine = true;
32.19577 +              $appendLongStrBuf(this$static, 10);
32.19578 +              continue;
32.19579 +            case 0:
32.19580 +              c = 65533;
32.19581 +            default:$appendLongStrBuf(this$static, c);
32.19582 +              continue;
32.19583 +          }
32.19584 +        }
32.19585 +
32.19586 +      case 33:
32.19587 +        commentenddashloop: for (;;) {
32.19588 +          if (++pos == endPos) {
32.19589 +            break stateloop;
32.19590 +          }
32.19591 +          c = $checkChar(this$static, buf, pos);
32.19592 +          switch (c) {
32.19593 +            case 45:
32.19594 +              $appendLongStrBuf(this$static, c);
32.19595 +              state = 34;
32.19596 +              break commentenddashloop;
32.19597 +            case 13:
32.19598 +              this$static.nextCharOnNewLine = true;
32.19599 +              this$static.lastCR = true;
32.19600 +              $appendLongStrBuf(this$static, 10);
32.19601 +              state = 32;
32.19602 +              break stateloop;
32.19603 +            case 10:
32.19604 +              this$static.nextCharOnNewLine = true;
32.19605 +              $appendLongStrBuf(this$static, 10);
32.19606 +              state = 32;
32.19607 +              continue stateloop;
32.19608 +            case 0:
32.19609 +              c = 65533;
32.19610 +            default:$appendLongStrBuf(this$static, c);
32.19611 +              state = 32;
32.19612 +              continue stateloop;
32.19613 +          }
32.19614 +        }
32.19615 +
32.19616 +      case 34:
32.19617 +        commentendloop: for (;;) {
32.19618 +          if (++pos == endPos) {
32.19619 +            break stateloop;
32.19620 +          }
32.19621 +          c = $checkChar(this$static, buf, pos);
32.19622 +          switch (c) {
32.19623 +            case 62:
32.19624 +              $emitComment(this$static, 2, pos);
32.19625 +              state = 0;
32.19626 +              continue stateloop;
32.19627 +            case 45:
32.19628 +              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c);
32.19629 +              continue;
32.19630 +            case 32:
32.19631 +            case 9:
32.19632 +            case 12:
32.19633 +              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c);
32.19634 +              state = 35;
32.19635 +              break commentendloop;
32.19636 +            case 13:
32.19637 +              this$static.nextCharOnNewLine = true;
32.19638 +              this$static.lastCR = true;
32.19639 +              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, 10);
32.19640 +              state = 35;
32.19641 +              break stateloop;
32.19642 +            case 10:
32.19643 +              this$static.nextCharOnNewLine = true;
32.19644 +              $adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, 10);
32.19645 +              state = 35;
32.19646 +              break commentendloop;
32.19647 +            case 33:
32.19648 +              $appendLongStrBuf(this$static, c);
32.19649 +              state = 36;
32.19650 +              continue stateloop;
32.19651 +            case 0:
32.19652 +              c = 65533;
32.19653 +            default:$adjustDoubleHyphenAndAppendToLongStrBufAndErr(this$static, c);
32.19654 +              state = 32;
32.19655 +              continue stateloop;
32.19656 +          }
32.19657 +        }
32.19658 +
32.19659 +      case 35:
32.19660 +        for (;;) {
32.19661 +          if (++pos == endPos) {
32.19662 +            break stateloop;
32.19663 +          }
32.19664 +          c = $checkChar(this$static, buf, pos);
32.19665 +          switch (c) {
32.19666 +            case 62:
32.19667 +              $emitComment(this$static, 0, pos);
32.19668 +              state = 0;
32.19669 +              continue stateloop;
32.19670 +            case 45:
32.19671 +              $appendLongStrBuf(this$static, c);
32.19672 +              state = 33;
32.19673 +              continue stateloop;
32.19674 +            case 32:
32.19675 +            case 9:
32.19676 +            case 12:
32.19677 +              $appendLongStrBuf(this$static, c);
32.19678 +              continue;
32.19679 +            case 13:
32.19680 +              this$static.nextCharOnNewLine = true;
32.19681 +              this$static.lastCR = true;
32.19682 +              $appendLongStrBuf(this$static, 10);
32.19683 +              break stateloop;
32.19684 +            case 10:
32.19685 +              this$static.nextCharOnNewLine = true;
32.19686 +              $appendLongStrBuf(this$static, 10);
32.19687 +              continue;
32.19688 +            case 0:
32.19689 +              c = 65533;
32.19690 +            default:$appendLongStrBuf(this$static, c);
32.19691 +              state = 32;
32.19692 +              continue stateloop;
32.19693 +          }
32.19694 +        }
32.19695 +
32.19696 +      case 36:
32.19697 +        for (;;) {
32.19698 +          if (++pos == endPos) {
32.19699 +            break stateloop;
32.19700 +          }
32.19701 +          c = $checkChar(this$static, buf, pos);
32.19702 +          switch (c) {
32.19703 +            case 62:
32.19704 +              $emitComment(this$static, 3, pos);
32.19705 +              state = 0;
32.19706 +              continue stateloop;
32.19707 +            case 45:
32.19708 +              $appendLongStrBuf(this$static, c);
32.19709 +              state = 33;
32.19710 +              continue stateloop;
32.19711 +            case 13:
32.19712 +              this$static.nextCharOnNewLine = true;
32.19713 +              this$static.lastCR = true;
32.19714 +              $appendLongStrBuf(this$static, 10);
32.19715 +              break stateloop;
32.19716 +            case 10:
32.19717 +              this$static.nextCharOnNewLine = true;
32.19718 +              $appendLongStrBuf(this$static, 10);
32.19719 +              continue;
32.19720 +            case 0:
32.19721 +              c = 65533;
32.19722 +            default:$appendLongStrBuf(this$static, c);
32.19723 +              state = 32;
32.19724 +              continue stateloop;
32.19725 +          }
32.19726 +        }
32.19727 +
32.19728 +      case 31:
32.19729 +        if (++pos == endPos) {
32.19730 +          break stateloop;
32.19731 +        }
32.19732 +
32.19733 +        c = $checkChar(this$static, buf, pos);
32.19734 +        switch (c) {
32.19735 +          case 45:
32.19736 +            $appendLongStrBuf(this$static, c);
32.19737 +            state = 34;
32.19738 +            continue stateloop;
32.19739 +          case 62:
32.19740 +            $emitComment(this$static, 1, pos);
32.19741 +            state = 0;
32.19742 +            continue stateloop;
32.19743 +          case 13:
32.19744 +            this$static.nextCharOnNewLine = true;
32.19745 +            this$static.lastCR = true;
32.19746 +            $appendLongStrBuf(this$static, 10);
32.19747 +            state = 32;
32.19748 +            break stateloop;
32.19749 +          case 10:
32.19750 +            this$static.nextCharOnNewLine = true;
32.19751 +            $appendLongStrBuf(this$static, 10);
32.19752 +            state = 32;
32.19753 +            continue stateloop;
32.19754 +          case 0:
32.19755 +            c = 65533;
32.19756 +          default:$appendLongStrBuf(this$static, c);
32.19757 +            state = 32;
32.19758 +            continue stateloop;
32.19759 +        }
32.19760 +
32.19761 +      case 39:
32.19762 +        markupdeclarationdoctypeloop: for (;;) {
32.19763 +          if (++pos == endPos) {
32.19764 +            break stateloop;
32.19765 +          }
32.19766 +          c = $checkChar(this$static, buf, pos);
32.19767 +          if (this$static.index < 6) {
32.19768 +            folded = c;
32.19769 +            if (c >= 65 && c <= 90) {
32.19770 +              folded += 32;
32.19771 +            }
32.19772 +            if (folded == OCTYPE[this$static.index]) {
32.19773 +              $appendLongStrBuf(this$static, c);
32.19774 +            }
32.19775 +             else {
32.19776 +              state = 15;
32.19777 +              reconsume = true;
32.19778 +              continue stateloop;
32.19779 +            }
32.19780 +            ++this$static.index;
32.19781 +            continue;
32.19782 +          }
32.19783 +           else {
32.19784 +            state = 17;
32.19785 +            reconsume = true;
32.19786 +            break markupdeclarationdoctypeloop;
32.19787 +          }
32.19788 +        }
32.19789 +
32.19790 +      case 17:
32.19791 +        doctypeloop: for (;;) {
32.19792 +          if (reconsume) {
32.19793 +            reconsume = false;
32.19794 +          }
32.19795 +           else {
32.19796 +            if (++pos == endPos) {
32.19797 +              break stateloop;
32.19798 +            }
32.19799 +            c = $checkChar(this$static, buf, pos);
32.19800 +          }
32.19801 +          this$static.doctypeName = '';
32.19802 +          this$static.systemIdentifier = null;
32.19803 +          this$static.publicIdentifier = null;
32.19804 +          this$static.forceQuirks = false;
32.19805 +          switch (c) {
32.19806 +            case 13:
32.19807 +              this$static.nextCharOnNewLine = true;
32.19808 +              this$static.lastCR = true;
32.19809 +              state = 18;
32.19810 +              break stateloop;
32.19811 +            case 10:
32.19812 +              this$static.nextCharOnNewLine = true;
32.19813 +            case 32:
32.19814 +            case 9:
32.19815 +            case 12:
32.19816 +              state = 18;
32.19817 +              break doctypeloop;
32.19818 +            default:state = 18;
32.19819 +              reconsume = true;
32.19820 +              break doctypeloop;
32.19821 +          }
32.19822 +        }
32.19823 +
32.19824 +      case 18:
32.19825 +        beforedoctypenameloop: for (;;) {
32.19826 +          if (reconsume) {
32.19827 +            reconsume = false;
32.19828 +          }
32.19829 +           else {
32.19830 +            if (++pos == endPos) {
32.19831 +              break stateloop;
32.19832 +            }
32.19833 +            c = $checkChar(this$static, buf, pos);
32.19834 +          }
32.19835 +          switch (c) {
32.19836 +            case 13:
32.19837 +              this$static.nextCharOnNewLine = true;
32.19838 +              this$static.lastCR = true;
32.19839 +              break stateloop;
32.19840 +            case 10:
32.19841 +              this$static.nextCharOnNewLine = true;
32.19842 +            case 32:
32.19843 +            case 9:
32.19844 +            case 12:
32.19845 +              continue;
32.19846 +            case 62:
32.19847 +              this$static.forceQuirks = true;
32.19848 +              this$static.cstart = pos + 1;
32.19849 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.19850 +              state = 0;
32.19851 +              continue stateloop;
32.19852 +            case 0:
32.19853 +              c = 65533;
32.19854 +            default:if (c >= 65 && c <= 90) {
32.19855 +                c += 32;
32.19856 +              }
32.19857 +
32.19858 +              this$static.strBuf[0] = c;
32.19859 +              this$static.strBufLen = 1;
32.19860 +              state = 19;
32.19861 +              break beforedoctypenameloop;
32.19862 +          }
32.19863 +        }
32.19864 +
32.19865 +      case 19:
32.19866 +        doctypenameloop: for (;;) {
32.19867 +          if (++pos == endPos) {
32.19868 +            break stateloop;
32.19869 +          }
32.19870 +          c = $checkChar(this$static, buf, pos);
32.19871 +          switch (c) {
32.19872 +            case 13:
32.19873 +              this$static.nextCharOnNewLine = true;
32.19874 +              this$static.lastCR = true;
32.19875 +              this$static.doctypeName = String(valueOf_1(this$static.strBuf, 0, this$static.strBufLen));
32.19876 +              state = 20;
32.19877 +              break stateloop;
32.19878 +            case 10:
32.19879 +              this$static.nextCharOnNewLine = true;
32.19880 +            case 32:
32.19881 +            case 9:
32.19882 +            case 12:
32.19883 +              this$static.doctypeName = String(valueOf_1(this$static.strBuf, 0, this$static.strBufLen));
32.19884 +              state = 20;
32.19885 +              break doctypenameloop;
32.19886 +            case 62:
32.19887 +              this$static.doctypeName = String(valueOf_1(this$static.strBuf, 0, this$static.strBufLen));
32.19888 +              this$static.cstart = pos + 1;
32.19889 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.19890 +              state = 0;
32.19891 +              continue stateloop;
32.19892 +            case 0:
32.19893 +              c = 65533;
32.19894 +            default:if (c >= 65 && c <= 90) {
32.19895 +                c += 32;
32.19896 +              }
32.19897 +
32.19898 +              $appendStrBuf(this$static, c);
32.19899 +              continue;
32.19900 +          }
32.19901 +        }
32.19902 +
32.19903 +      case 20:
32.19904 +        afterdoctypenameloop: for (;;) {
32.19905 +          if (++pos == endPos) {
32.19906 +            break stateloop;
32.19907 +          }
32.19908 +          c = $checkChar(this$static, buf, pos);
32.19909 +          switch (c) {
32.19910 +            case 13:
32.19911 +              this$static.nextCharOnNewLine = true;
32.19912 +              this$static.lastCR = true;
32.19913 +              break stateloop;
32.19914 +            case 10:
32.19915 +              this$static.nextCharOnNewLine = true;
32.19916 +            case 32:
32.19917 +            case 9:
32.19918 +            case 12:
32.19919 +              continue;
32.19920 +            case 62:
32.19921 +              this$static.cstart = pos + 1;
32.19922 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.19923 +              state = 0;
32.19924 +              continue stateloop;
32.19925 +            case 112:
32.19926 +            case 80:
32.19927 +              this$static.index = 0;
32.19928 +              state = 40;
32.19929 +              break afterdoctypenameloop;
32.19930 +            case 115:
32.19931 +            case 83:
32.19932 +              this$static.index = 0;
32.19933 +              state = 41;
32.19934 +              continue stateloop;
32.19935 +            default:this$static.forceQuirks = true;
32.19936 +              state = 29;
32.19937 +              continue stateloop;
32.19938 +          }
32.19939 +        }
32.19940 +
32.19941 +      case 40:
32.19942 +        doctypeublicloop: for (;;) {
32.19943 +          if (++pos == endPos) {
32.19944 +            break stateloop;
32.19945 +          }
32.19946 +          c = $checkChar(this$static, buf, pos);
32.19947 +          if (this$static.index < 5) {
32.19948 +            folded = c;
32.19949 +            if (c >= 65 && c <= 90) {
32.19950 +              folded += 32;
32.19951 +            }
32.19952 +            if (folded != UBLIC[this$static.index]) {
32.19953 +              this$static.forceQuirks = true;
32.19954 +              state = 29;
32.19955 +              reconsume = true;
32.19956 +              continue stateloop;
32.19957 +            }
32.19958 +            ++this$static.index;
32.19959 +            continue;
32.19960 +          }
32.19961 +           else {
32.19962 +            state = 21;
32.19963 +            reconsume = true;
32.19964 +            break doctypeublicloop;
32.19965 +          }
32.19966 +        }
32.19967 +
32.19968 +      case 21:
32.19969 +        beforedoctypepublicidentifierloop: for (;;) {
32.19970 +          if (reconsume) {
32.19971 +            reconsume = false;
32.19972 +          }
32.19973 +           else {
32.19974 +            if (++pos == endPos) {
32.19975 +              break stateloop;
32.19976 +            }
32.19977 +            c = $checkChar(this$static, buf, pos);
32.19978 +          }
32.19979 +          switch (c) {
32.19980 +            case 13:
32.19981 +              this$static.nextCharOnNewLine = true;
32.19982 +              this$static.lastCR = true;
32.19983 +              break stateloop;
32.19984 +            case 10:
32.19985 +              this$static.nextCharOnNewLine = true;
32.19986 +            case 32:
32.19987 +            case 9:
32.19988 +            case 12:
32.19989 +              continue;
32.19990 +            case 34:
32.19991 +              this$static.longStrBufLen = 0;
32.19992 +              state = 22;
32.19993 +              break beforedoctypepublicidentifierloop;
32.19994 +            case 39:
32.19995 +              this$static.longStrBufLen = 0;
32.19996 +              state = 23;
32.19997 +              continue stateloop;
32.19998 +            case 62:
32.19999 +              this$static.forceQuirks = true;
32.20000 +              this$static.cstart = pos + 1;
32.20001 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20002 +              state = 0;
32.20003 +              continue stateloop;
32.20004 +            default:this$static.forceQuirks = true;
32.20005 +              state = 29;
32.20006 +              continue stateloop;
32.20007 +          }
32.20008 +        }
32.20009 +
32.20010 +      case 22:
32.20011 +        doctypepublicidentifierdoublequotedloop: for (;;) {
32.20012 +          if (++pos == endPos) {
32.20013 +            break stateloop;
32.20014 +          }
32.20015 +          c = $checkChar(this$static, buf, pos);
32.20016 +          switch (c) {
32.20017 +            case 34:
32.20018 +              this$static.publicIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20019 +              state = 24;
32.20020 +              break doctypepublicidentifierdoublequotedloop;
32.20021 +            case 62:
32.20022 +              this$static.forceQuirks = true;
32.20023 +              this$static.publicIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20024 +              this$static.cstart = pos + 1;
32.20025 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20026 +              state = 0;
32.20027 +              continue stateloop;
32.20028 +            case 13:
32.20029 +              this$static.nextCharOnNewLine = true;
32.20030 +              this$static.lastCR = true;
32.20031 +              $appendLongStrBuf(this$static, 10);
32.20032 +              break stateloop;
32.20033 +            case 10:
32.20034 +              this$static.nextCharOnNewLine = true;
32.20035 +              $appendLongStrBuf(this$static, 10);
32.20036 +              continue;
32.20037 +            case 0:
32.20038 +              c = 65533;
32.20039 +            default:$appendLongStrBuf(this$static, c);
32.20040 +              continue;
32.20041 +          }
32.20042 +        }
32.20043 +
32.20044 +      case 24:
32.20045 +        afterdoctypepublicidentifierloop: for (;;) {
32.20046 +          if (++pos == endPos) {
32.20047 +            break stateloop;
32.20048 +          }
32.20049 +          c = $checkChar(this$static, buf, pos);
32.20050 +          switch (c) {
32.20051 +            case 13:
32.20052 +              this$static.nextCharOnNewLine = true;
32.20053 +              this$static.lastCR = true;
32.20054 +              break stateloop;
32.20055 +            case 10:
32.20056 +              this$static.nextCharOnNewLine = true;
32.20057 +            case 32:
32.20058 +            case 9:
32.20059 +            case 12:
32.20060 +              continue;
32.20061 +            case 34:
32.20062 +              this$static.longStrBufLen = 0;
32.20063 +              state = 26;
32.20064 +              break afterdoctypepublicidentifierloop;
32.20065 +            case 39:
32.20066 +              this$static.longStrBufLen = 0;
32.20067 +              state = 27;
32.20068 +              continue stateloop;
32.20069 +            case 62:
32.20070 +              this$static.cstart = pos + 1;
32.20071 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20072 +              state = 0;
32.20073 +              continue stateloop;
32.20074 +            default:this$static.forceQuirks = true;
32.20075 +              state = 29;
32.20076 +              continue stateloop;
32.20077 +          }
32.20078 +        }
32.20079 +
32.20080 +      case 26:
32.20081 +        doctypesystemidentifierdoublequotedloop: for (;;) {
32.20082 +          if (++pos == endPos) {
32.20083 +            break stateloop;
32.20084 +          }
32.20085 +          c = $checkChar(this$static, buf, pos);
32.20086 +          switch (c) {
32.20087 +            case 34:
32.20088 +              this$static.systemIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20089 +              state = 28;
32.20090 +              continue stateloop;
32.20091 +            case 62:
32.20092 +              this$static.forceQuirks = true;
32.20093 +              this$static.systemIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20094 +              this$static.cstart = pos + 1;
32.20095 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20096 +              state = 0;
32.20097 +              continue stateloop;
32.20098 +            case 13:
32.20099 +              this$static.nextCharOnNewLine = true;
32.20100 +              this$static.lastCR = true;
32.20101 +              $appendLongStrBuf(this$static, 10);
32.20102 +              break stateloop;
32.20103 +            case 10:
32.20104 +              this$static.nextCharOnNewLine = true;
32.20105 +              $appendLongStrBuf(this$static, 10);
32.20106 +              continue;
32.20107 +            case 0:
32.20108 +              c = 65533;
32.20109 +            default:$appendLongStrBuf(this$static, c);
32.20110 +              continue;
32.20111 +          }
32.20112 +        }
32.20113 +
32.20114 +      case 28:
32.20115 +        afterdoctypesystemidentifierloop: for (;;) {
32.20116 +          if (++pos == endPos) {
32.20117 +            break stateloop;
32.20118 +          }
32.20119 +          c = $checkChar(this$static, buf, pos);
32.20120 +          switch (c) {
32.20121 +            case 13:
32.20122 +              this$static.nextCharOnNewLine = true;
32.20123 +              this$static.lastCR = true;
32.20124 +              break stateloop;
32.20125 +            case 10:
32.20126 +              this$static.nextCharOnNewLine = true;
32.20127 +            case 32:
32.20128 +            case 9:
32.20129 +            case 12:
32.20130 +              continue;
32.20131 +            case 62:
32.20132 +              this$static.cstart = pos + 1;
32.20133 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20134 +              state = 0;
32.20135 +              continue stateloop;
32.20136 +            default:this$static.forceQuirks = false;
32.20137 +              state = 29;
32.20138 +              break afterdoctypesystemidentifierloop;
32.20139 +          }
32.20140 +        }
32.20141 +
32.20142 +      case 29:
32.20143 +        for (;;) {
32.20144 +          if (reconsume) {
32.20145 +            reconsume = false;
32.20146 +          }
32.20147 +           else {
32.20148 +            if (++pos == endPos) {
32.20149 +              break stateloop;
32.20150 +            }
32.20151 +            c = $checkChar(this$static, buf, pos);
32.20152 +          }
32.20153 +          switch (c) {
32.20154 +            case 62:
32.20155 +              this$static.cstart = pos + 1;
32.20156 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20157 +              state = 0;
32.20158 +              continue stateloop;
32.20159 +            case 13:
32.20160 +              this$static.nextCharOnNewLine = true;
32.20161 +              this$static.lastCR = true;
32.20162 +              break stateloop;
32.20163 +            case 10:
32.20164 +              this$static.nextCharOnNewLine = true;
32.20165 +            default:continue;
32.20166 +          }
32.20167 +        }
32.20168 +
32.20169 +      case 41:
32.20170 +        doctypeystemloop: for (;;) {
32.20171 +          if (++pos == endPos) {
32.20172 +            break stateloop;
32.20173 +          }
32.20174 +          c = $checkChar(this$static, buf, pos);
32.20175 +          if (this$static.index < 5) {
32.20176 +            folded = c;
32.20177 +            if (c >= 65 && c <= 90) {
32.20178 +              folded += 32;
32.20179 +            }
32.20180 +            if (folded != YSTEM[this$static.index]) {
32.20181 +              this$static.forceQuirks = true;
32.20182 +              state = 29;
32.20183 +              reconsume = true;
32.20184 +              continue stateloop;
32.20185 +            }
32.20186 +            ++this$static.index;
32.20187 +            continue stateloop;
32.20188 +          }
32.20189 +           else {
32.20190 +            state = 25;
32.20191 +            reconsume = true;
32.20192 +            break doctypeystemloop;
32.20193 +          }
32.20194 +        }
32.20195 +
32.20196 +      case 25:
32.20197 +        beforedoctypesystemidentifierloop: for (;;) {
32.20198 +          if (reconsume) {
32.20199 +            reconsume = false;
32.20200 +          }
32.20201 +           else {
32.20202 +            if (++pos == endPos) {
32.20203 +              break stateloop;
32.20204 +            }
32.20205 +            c = $checkChar(this$static, buf, pos);
32.20206 +          }
32.20207 +          switch (c) {
32.20208 +            case 13:
32.20209 +              this$static.nextCharOnNewLine = true;
32.20210 +              this$static.lastCR = true;
32.20211 +              break stateloop;
32.20212 +            case 10:
32.20213 +              this$static.nextCharOnNewLine = true;
32.20214 +            case 32:
32.20215 +            case 9:
32.20216 +            case 12:
32.20217 +              continue;
32.20218 +            case 34:
32.20219 +              this$static.longStrBufLen = 0;
32.20220 +              state = 26;
32.20221 +              continue stateloop;
32.20222 +            case 39:
32.20223 +              this$static.longStrBufLen = 0;
32.20224 +              state = 27;
32.20225 +              break beforedoctypesystemidentifierloop;
32.20226 +            case 62:
32.20227 +              this$static.forceQuirks = true;
32.20228 +              this$static.cstart = pos + 1;
32.20229 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20230 +              state = 0;
32.20231 +              continue stateloop;
32.20232 +            default:this$static.forceQuirks = true;
32.20233 +              state = 29;
32.20234 +              continue stateloop;
32.20235 +          }
32.20236 +        }
32.20237 +
32.20238 +      case 27:
32.20239 +        for (;;) {
32.20240 +          if (++pos == endPos) {
32.20241 +            break stateloop;
32.20242 +          }
32.20243 +          c = $checkChar(this$static, buf, pos);
32.20244 +          switch (c) {
32.20245 +            case 39:
32.20246 +              this$static.systemIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20247 +              state = 28;
32.20248 +              continue stateloop;
32.20249 +            case 62:
32.20250 +              this$static.forceQuirks = true;
32.20251 +              this$static.systemIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20252 +              this$static.cstart = pos + 1;
32.20253 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20254 +              state = 0;
32.20255 +              continue stateloop;
32.20256 +            case 13:
32.20257 +              this$static.nextCharOnNewLine = true;
32.20258 +              this$static.lastCR = true;
32.20259 +              $appendLongStrBuf(this$static, 10);
32.20260 +              break stateloop;
32.20261 +            case 10:
32.20262 +              this$static.nextCharOnNewLine = true;
32.20263 +              $appendLongStrBuf(this$static, 10);
32.20264 +              continue;
32.20265 +            case 0:
32.20266 +              c = 65533;
32.20267 +            default:$appendLongStrBuf(this$static, c);
32.20268 +              continue;
32.20269 +          }
32.20270 +        }
32.20271 +
32.20272 +      case 23:
32.20273 +        for (;;) {
32.20274 +          if (++pos == endPos) {
32.20275 +            break stateloop;
32.20276 +          }
32.20277 +          c = $checkChar(this$static, buf, pos);
32.20278 +          switch (c) {
32.20279 +            case 39:
32.20280 +              this$static.publicIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20281 +              state = 24;
32.20282 +              continue stateloop;
32.20283 +            case 62:
32.20284 +              this$static.forceQuirks = true;
32.20285 +              this$static.publicIdentifier = valueOf_1(this$static.longStrBuf, 0, this$static.longStrBufLen);
32.20286 +              this$static.cstart = pos + 1;
32.20287 +              $doctype(this$static.tokenHandler, this$static.doctypeName, this$static.publicIdentifier, this$static.systemIdentifier, this$static.forceQuirks);
32.20288 +              state = 0;
32.20289 +              continue stateloop;
32.20290 +            case 13:
32.20291 +              this$static.nextCharOnNewLine = true;
32.20292 +              this$static.lastCR = true;
32.20293 +              $appendLongStrBuf(this$static, 10);
32.20294 +              break stateloop;
32.20295 +            case 10:
32.20296 +              this$static.nextCharOnNewLine = true;
32.20297 +              $appendLongStrBuf(this$static, 10);
32.20298 +              continue;
32.20299 +            case 0:
32.20300 +              c = 65533;
32.20301 +            default:$appendLongStrBuf(this$static, c);
32.20302 +              continue;
32.20303 +          }
32.20304 +        }
32.20305 +
32.20306 +      case 49:
32.20307 +        for (;;) {
32.20308 +          if (++pos == endPos) {
32.20309 +            break stateloop;
32.20310 +          }
32.20311 +          c = $checkChar(this$static, buf, pos);
32.20312 +          if (this$static.index < 6) {
32.20313 +            if (c == CDATA_LSQB[this$static.index]) {
32.20314 +              $appendLongStrBuf(this$static, c);
32.20315 +            }
32.20316 +             else {
32.20317 +              state = 15;
32.20318 +              reconsume = true;
32.20319 +              continue stateloop;
32.20320 +            }
32.20321 +            ++this$static.index;
32.20322 +            continue;
32.20323 +          }
32.20324 +           else {
32.20325 +            this$static.cstart = pos;
32.20326 +            state = 50;
32.20327 +            reconsume = true;
32.20328 +            break;
32.20329 +          }
32.20330 +        }
32.20331 +
32.20332 +      case 50:
32.20333 +        cdatasectionloop: for (;;) {
32.20334 +          if (reconsume) {
32.20335 +            reconsume = false;
32.20336 +          }
32.20337 +           else {
32.20338 +            if (++pos == endPos) {
32.20339 +              break stateloop;
32.20340 +            }
32.20341 +            c = $checkChar(this$static, buf, pos);
32.20342 +          }
32.20343 +          switch (c) {
32.20344 +            case 93:
32.20345 +              $flushChars(this$static, buf, pos);
32.20346 +              state = 51;
32.20347 +              break cdatasectionloop;
32.20348 +            case 0:
32.20349 +              $emitReplacementCharacter(this$static, buf, pos);
32.20350 +              continue;
32.20351 +            case 13:
32.20352 +              $emitCarriageReturn(this$static, buf, pos);
32.20353 +              break stateloop;
32.20354 +            case 10:
32.20355 +              this$static.nextCharOnNewLine = true;
32.20356 +            default:continue;
32.20357 +          }
32.20358 +        }
32.20359 +
32.20360 +      case 51:
32.20361 +        cdatarsqb: for (;;) {
32.20362 +          if (++pos == endPos) {
32.20363 +            break stateloop;
32.20364 +          }
32.20365 +          c = $checkChar(this$static, buf, pos);
32.20366 +          switch (c) {
32.20367 +            case 93:
32.20368 +              state = 52;
32.20369 +              break cdatarsqb;
32.20370 +            default:$characters(this$static.tokenHandler, RSQB_RSQB, 0, 1);
32.20371 +              this$static.cstart = pos;
32.20372 +              state = 50;
32.20373 +              reconsume = true;
32.20374 +              continue stateloop;
32.20375 +          }
32.20376 +        }
32.20377 +
32.20378 +      case 52:
32.20379 +        if (++pos == endPos) {
32.20380 +          break stateloop;
32.20381 +        }
32.20382 +
32.20383 +        c = $checkChar(this$static, buf, pos);
32.20384 +        switch (c) {
32.20385 +          case 62:
32.20386 +            this$static.cstart = pos + 1;
32.20387 +            state = 0;
32.20388 +            continue stateloop;
32.20389 +          default:$characters(this$static.tokenHandler, RSQB_RSQB, 0, 2);
32.20390 +            this$static.cstart = pos;
32.20391 +            state = 50;
32.20392 +            reconsume = true;
32.20393 +            continue stateloop;
32.20394 +        }
32.20395 +
32.20396 +      case 12:
32.20397 +        attributevaluesinglequotedloop: for (;;) {
32.20398 +          if (reconsume) {
32.20399 +            reconsume = false;
32.20400 +          }
32.20401 +           else {
32.20402 +            if (++pos == endPos) {
32.20403 +              break stateloop;
32.20404 +            }
32.20405 +            c = $checkChar(this$static, buf, pos);
32.20406 +          }
32.20407 +          switch (c) {
32.20408 +            case 39:
32.20409 +              $addAttributeWithValue(this$static);
32.20410 +              state = 14;
32.20411 +              continue stateloop;
32.20412 +            case 38:
32.20413 +              this$static.strBuf[0] = c;
32.20414 +              this$static.strBufLen = 1;
32.20415 +              this$static.additional = 39;
32.20416 +              $LocatorImpl(new LocatorImpl(), this$static);
32.20417 +              returnState = state;
32.20418 +              state = 42;
32.20419 +              break attributevaluesinglequotedloop;
32.20420 +            case 13:
32.20421 +              this$static.nextCharOnNewLine = true;
32.20422 +              this$static.lastCR = true;
32.20423 +              $appendLongStrBuf(this$static, 10);
32.20424 +              break stateloop;
32.20425 +            case 10:
32.20426 +              this$static.nextCharOnNewLine = true;
32.20427 +              $appendLongStrBuf(this$static, 10);
32.20428 +              continue;
32.20429 +            case 0:
32.20430 +              c = 65533;
32.20431 +            default:$appendLongStrBuf(this$static, c);
32.20432 +              continue;
32.20433 +          }
32.20434 +        }
32.20435 +
32.20436 +      case 42:
32.20437 +        if (++pos == endPos) {
32.20438 +          break stateloop;
32.20439 +        }
32.20440 +
32.20441 +        c = $checkChar(this$static, buf, pos);
32.20442 +        if (c == 0) {
32.20443 +          break stateloop;
32.20444 +        }
32.20445 +
32.20446 +        switch (c) {
32.20447 +          case 32:
32.20448 +          case 9:
32.20449 +          case 10:
32.20450 +          case 13:
32.20451 +          case 12:
32.20452 +          case 60:
32.20453 +          case 38:
32.20454 +            $emitOrAppendStrBuf(this$static, returnState);
32.20455 +            if ((returnState & -2) == 0) {
32.20456 +              this$static.cstart = pos;
32.20457 +            }
32.20458 +
32.20459 +            state = returnState;
32.20460 +            reconsume = true;
32.20461 +            continue stateloop;
32.20462 +          case 35:
32.20463 +            $appendStrBuf(this$static, 35);
32.20464 +            state = 43;
32.20465 +            continue stateloop;
32.20466 +          default:if (c == this$static.additional) {
32.20467 +              $emitOrAppendStrBuf(this$static, returnState);
32.20468 +              state = returnState;
32.20469 +              reconsume = true;
32.20470 +              continue stateloop;
32.20471 +            }
32.20472 +
32.20473 +            this$static.entCol = -1;
32.20474 +            this$static.lo = 0;
32.20475 +            this$static.hi = ($clinit_94() , NAMES).length - 1;
32.20476 +            this$static.candidate = -1;
32.20477 +            this$static.strBufMark = 0;
32.20478 +            state = 44;
32.20479 +            reconsume = true;
32.20480 +        }
32.20481 +
32.20482 +      case 44:
32.20483 +        outer: for (;;) {
32.20484 +          if (reconsume) {
32.20485 +            reconsume = false;
32.20486 +          }
32.20487 +           else {
32.20488 +            if (++pos == endPos) {
32.20489 +              break stateloop;
32.20490 +            }
32.20491 +            c = $checkChar(this$static, buf, pos);
32.20492 +          }
32.20493 +          if (c == 0) {
32.20494 +            break stateloop;
32.20495 +          }
32.20496 +          ++this$static.entCol;
32.20497 +          hiloop: for (;;) {
32.20498 +            if (this$static.hi == -1) {
32.20499 +              break hiloop;
32.20500 +            }
32.20501 +            if (this$static.entCol == ($clinit_94() , NAMES)[this$static.hi].length) {
32.20502 +              break hiloop;
32.20503 +            }
32.20504 +            if (this$static.entCol > NAMES[this$static.hi].length) {
32.20505 +              break outer;
32.20506 +            }
32.20507 +             else if (c < NAMES[this$static.hi][this$static.entCol]) {
32.20508 +              --this$static.hi;
32.20509 +            }
32.20510 +             else {
32.20511 +              break hiloop;
32.20512 +            }
32.20513 +          }
32.20514 +          loloop: for (;;) {
32.20515 +            if (this$static.hi < this$static.lo) {
32.20516 +              break outer;
32.20517 +            }
32.20518 +            if (this$static.entCol == ($clinit_94() , NAMES)[this$static.lo].length) {
32.20519 +              this$static.candidate = this$static.lo;
32.20520 +              this$static.strBufMark = this$static.strBufLen;
32.20521 +              ++this$static.lo;
32.20522 +            }
32.20523 +             else if (this$static.entCol > NAMES[this$static.lo].length) {
32.20524 +              break outer;
32.20525 +            }
32.20526 +             else if (c > NAMES[this$static.lo][this$static.entCol]) {
32.20527 +              ++this$static.lo;
32.20528 +            }
32.20529 +             else {
32.20530 +              break loloop;
32.20531 +            }
32.20532 +          }
32.20533 +          if (this$static.hi < this$static.lo) {
32.20534 +            break outer;
32.20535 +          }
32.20536 +          $appendStrBuf(this$static, c);
32.20537 +          continue;
32.20538 +        }
32.20539 +
32.20540 +        if (this$static.candidate == -1) {
32.20541 +          $emitOrAppendStrBuf(this$static, returnState);
32.20542 +          if ((returnState & -2) == 0) {
32.20543 +            this$static.cstart = pos;
32.20544 +          }
32.20545 +          state = returnState;
32.20546 +          reconsume = true;
32.20547 +          continue stateloop;
32.20548 +        }
32.20549 +         else {
32.20550 +          candidateArr = ($clinit_94() , NAMES)[this$static.candidate];
32.20551 +          if (candidateArr[candidateArr.length - 1] != 59) {
32.20552 +            if ((returnState & -2) != 0) {
32.20553 +              if (this$static.strBufMark == this$static.strBufLen) {
32.20554 +                ch = c;
32.20555 +              }
32.20556 +               else {
32.20557 +                ch = this$static.strBuf[this$static.strBufMark];
32.20558 +              }
32.20559 +              if (ch >= 48 && ch <= 57 || ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122) {
32.20560 +                $appendLongStrBuf_0(this$static, this$static.strBuf, 0, this$static.strBufLen);
32.20561 +                state = returnState;
32.20562 +                reconsume = true;
32.20563 +                continue stateloop;
32.20564 +              }
32.20565 +            }
32.20566 +          }
32.20567 +          val = VALUES_0[this$static.candidate];
32.20568 +          $emitOrAppend(this$static, val, returnState);
32.20569 +          if (this$static.strBufMark < this$static.strBufLen) {
32.20570 +            if ((returnState & -2) != 0) {
32.20571 +              for (i = this$static.strBufMark; i < this$static.strBufLen; ++i) {
32.20572 +                $appendLongStrBuf(this$static, this$static.strBuf[i]);
32.20573 +              }
32.20574 +            }
32.20575 +             else {
32.20576 +              $characters(this$static.tokenHandler, this$static.strBuf, this$static.strBufMark, this$static.strBufLen - this$static.strBufMark);
32.20577 +            }
32.20578 +          }
32.20579 +          if ((returnState & -2) == 0) {
32.20580 +            this$static.cstart = pos;
32.20581 +          }
32.20582 +          state = returnState;
32.20583 +          reconsume = true;
32.20584 +          continue stateloop;
32.20585 +        }
32.20586 +
32.20587 +      case 43:
32.20588 +        if (++pos == endPos) {
32.20589 +          break stateloop;
32.20590 +        }
32.20591 +
32.20592 +        c = $checkChar(this$static, buf, pos);
32.20593 +        this$static.prevValue = -1;
32.20594 +        this$static.value = 0;
32.20595 +        this$static.seenDigits = false;
32.20596 +        switch (c) {
32.20597 +          case 120:
32.20598 +          case 88:
32.20599 +            $appendStrBuf(this$static, c);
32.20600 +            state = 45;
32.20601 +            continue stateloop;
32.20602 +          default:state = 46;
32.20603 +            reconsume = true;
32.20604 +        }
32.20605 +
32.20606 +      case 46:
32.20607 +        decimalloop: for (;;) {
32.20608 +          if (reconsume) {
32.20609 +            reconsume = false;
32.20610 +          }
32.20611 +           else {
32.20612 +            if (++pos == endPos) {
32.20613 +              break stateloop;
32.20614 +            }
32.20615 +            c = $checkChar(this$static, buf, pos);
32.20616 +          }
32.20617 +          if (this$static.value < this$static.prevValue) {
32.20618 +            this$static.value = 1114112;
32.20619 +          }
32.20620 +          this$static.prevValue = this$static.value;
32.20621 +          if (c >= 48 && c <= 57) {
32.20622 +            this$static.seenDigits = true;
32.20623 +            this$static.value *= 10;
32.20624 +            this$static.value += c - 48;
32.20625 +            continue;
32.20626 +          }
32.20627 +           else if (c == 59) {
32.20628 +            if (this$static.seenDigits) {
32.20629 +              if ((returnState & -2) == 0) {
32.20630 +                this$static.cstart = pos + 1;
32.20631 +              }
32.20632 +              state = 47;
32.20633 +              break decimalloop;
32.20634 +            }
32.20635 +             else {
32.20636 +              'No digits after \u201C' + valueOf_1(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.';
32.20637 +              $appendStrBuf(this$static, 59);
32.20638 +              $emitOrAppendStrBuf(this$static, returnState);
32.20639 +              if ((returnState & -2) == 0) {
32.20640 +                this$static.cstart = pos + 1;
32.20641 +              }
32.20642 +              state = returnState;
32.20643 +              continue stateloop;
32.20644 +            }
32.20645 +          }
32.20646 +           else {
32.20647 +            if (this$static.seenDigits) {
32.20648 +              if ((returnState & -2) == 0) {
32.20649 +                this$static.cstart = pos;
32.20650 +              }
32.20651 +              state = 47;
32.20652 +              reconsume = true;
32.20653 +              break decimalloop;
32.20654 +            }
32.20655 +             else {
32.20656 +              'No digits after \u201C' + valueOf_1(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.';
32.20657 +              $emitOrAppendStrBuf(this$static, returnState);
32.20658 +              if ((returnState & -2) == 0) {
32.20659 +                this$static.cstart = pos;
32.20660 +              }
32.20661 +              state = returnState;
32.20662 +              reconsume = true;
32.20663 +              continue stateloop;
32.20664 +            }
32.20665 +          }
32.20666 +        }
32.20667 +
32.20668 +      case 47:
32.20669 +        $handleNcrValue(this$static, returnState);
32.20670 +        state = returnState;
32.20671 +        continue stateloop;
32.20672 +      case 45:
32.20673 +        for (;;) {
32.20674 +          if (++pos == endPos) {
32.20675 +            break stateloop;
32.20676 +          }
32.20677 +          c = $checkChar(this$static, buf, pos);
32.20678 +          if (this$static.value < this$static.prevValue) {
32.20679 +            this$static.value = 1114112;
32.20680 +          }
32.20681 +          this$static.prevValue = this$static.value;
32.20682 +          if (c >= 48 && c <= 57) {
32.20683 +            this$static.seenDigits = true;
32.20684 +            this$static.value *= 16;
32.20685 +            this$static.value += c - 48;
32.20686 +            continue;
32.20687 +          }
32.20688 +           else if (c >= 65 && c <= 70) {
32.20689 +            this$static.seenDigits = true;
32.20690 +            this$static.value *= 16;
32.20691 +            this$static.value += c - 65 + 10;
32.20692 +            continue;
32.20693 +          }
32.20694 +           else if (c >= 97 && c <= 102) {
32.20695 +            this$static.seenDigits = true;
32.20696 +            this$static.value *= 16;
32.20697 +            this$static.value += c - 97 + 10;
32.20698 +            continue;
32.20699 +          }
32.20700 +           else if (c == 59) {
32.20701 +            if (this$static.seenDigits) {
32.20702 +              if ((returnState & -2) == 0) {
32.20703 +                this$static.cstart = pos + 1;
32.20704 +              }
32.20705 +              state = 47;
32.20706 +              continue stateloop;
32.20707 +            }
32.20708 +             else {
32.20709 +              'No digits after \u201C' + valueOf_1(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.';
32.20710 +              $appendStrBuf(this$static, 59);
32.20711 +              $emitOrAppendStrBuf(this$static, returnState);
32.20712 +              if ((returnState & -2) == 0) {
32.20713 +                this$static.cstart = pos + 1;
32.20714 +              }
32.20715 +              state = returnState;
32.20716 +              continue stateloop;
32.20717 +            }
32.20718 +          }
32.20719 +           else {
32.20720 +            if (this$static.seenDigits) {
32.20721 +              if ((returnState & -2) == 0) {
32.20722 +                this$static.cstart = pos;
32.20723 +              }
32.20724 +              state = 47;
32.20725 +              reconsume = true;
32.20726 +              continue stateloop;
32.20727 +            }
32.20728 +             else {
32.20729 +              'No digits after \u201C' + valueOf_1(this$static.strBuf, 0, this$static.strBufLen) + '\u201D.';
32.20730 +              $emitOrAppendStrBuf(this$static, returnState);
32.20731 +              if ((returnState & -2) == 0) {
32.20732 +                this$static.cstart = pos;
32.20733 +              }
32.20734 +              state = returnState;
32.20735 +              reconsume = true;
32.20736 +              continue stateloop;
32.20737 +            }
32.20738 +          }
32.20739 +        }
32.20740 +
32.20741 +      case 3:
32.20742 +        plaintextloop: for (;;) {
32.20743 +          if (reconsume) {
32.20744 +            reconsume = false;
32.20745 +          }
32.20746 +           else {
32.20747 +            if (++pos == endPos) {
32.20748 +              break stateloop;
32.20749 +            }
32.20750 +            c = $checkChar(this$static, buf, pos);
32.20751 +          }
32.20752 +          switch (c) {
32.20753 +            case 0:
32.20754 +              $emitReplacementCharacter(this$static, buf, pos);
32.20755 +              continue;
32.20756 +            case 13:
32.20757 +              $emitCarriageReturn(this$static, buf, pos);
32.20758 +              break stateloop;
32.20759 +            case 10:
32.20760 +              this$static.nextCharOnNewLine = true;
32.20761 +            default:continue;
32.20762 +          }
32.20763 +        }
32.20764 +
32.20765 +      case 2:
32.20766 +        cdataloop: for (;;) {
32.20767 +          if (reconsume) {
32.20768 +            reconsume = false;
32.20769 +          }
32.20770 +           else {
32.20771 +            if (++pos == endPos) {
32.20772 +              break stateloop;
32.20773 +            }
32.20774 +            c = $checkChar(this$static, buf, pos);
32.20775 +          }
32.20776 +          switch (c) {
32.20777 +            case 60:
32.20778 +              $flushChars(this$static, buf, pos);
32.20779 +              returnState = state;
32.20780 +              state = 53;
32.20781 +              break cdataloop;
32.20782 +            case 0:
32.20783 +              $emitReplacementCharacter(this$static, buf, pos);
32.20784 +              continue;
32.20785 +            case 13:
32.20786 +              $emitCarriageReturn(this$static, buf, pos);
32.20787 +              break stateloop;
32.20788 +            case 10:
32.20789 +              this$static.nextCharOnNewLine = true;
32.20790 +            default:continue;
32.20791 +          }
32.20792 +        }
32.20793 +
32.20794 +      case 53:
32.20795 +        tagopennonpcdataloop: for (;;) {
32.20796 +          if (++pos == endPos) {
32.20797 +            break stateloop;
32.20798 +          }
32.20799 +          c = $checkChar(this$static, buf, pos);
32.20800 +          switch (c) {
32.20801 +            case 33:
32.20802 +              $characters(this$static.tokenHandler, LT_GT, 0, 1);
32.20803 +              this$static.cstart = pos;
32.20804 +              state = 54;
32.20805 +              break tagopennonpcdataloop;
32.20806 +            case 47:
32.20807 +              if (this$static.contentModelElement) {
32.20808 +                this$static.index = 0;
32.20809 +                this$static.strBufLen = 0;
32.20810 +                state = 37;
32.20811 +                continue stateloop;
32.20812 +              }
32.20813 +
32.20814 +            default:$characters(this$static.tokenHandler, LT_GT, 0, 1);
32.20815 +              this$static.cstart = pos;
32.20816 +              state = returnState;
32.20817 +              reconsume = true;
32.20818 +              continue stateloop;
32.20819 +          }
32.20820 +        }
32.20821 +
32.20822 +      case 54:
32.20823 +        escapeexclamationloop: for (;;) {
32.20824 +          if (++pos == endPos) {
32.20825 +            break stateloop;
32.20826 +          }
32.20827 +          c = $checkChar(this$static, buf, pos);
32.20828 +          switch (c) {
32.20829 +            case 45:
32.20830 +              state = 55;
32.20831 +              break escapeexclamationloop;
32.20832 +            default:state = returnState;
32.20833 +              reconsume = true;
32.20834 +              continue stateloop;
32.20835 +          }
32.20836 +        }
32.20837 +
32.20838 +      case 55:
32.20839 +        escapeexclamationhyphenloop: for (;;) {
32.20840 +          if (++pos == endPos) {
32.20841 +            break stateloop;
32.20842 +          }
32.20843 +          c = $checkChar(this$static, buf, pos);
32.20844 +          switch (c) {
32.20845 +            case 45:
32.20846 +              state = 58;
32.20847 +              break escapeexclamationhyphenloop;
32.20848 +            default:state = returnState;
32.20849 +              reconsume = true;
32.20850 +              continue stateloop;
32.20851 +          }
32.20852 +        }
32.20853 +
32.20854 +      case 58:
32.20855 +        escapehyphenhyphenloop: for (;;) {
32.20856 +          if (++pos == endPos) {
32.20857 +            break stateloop;
32.20858 +          }
32.20859 +          c = $checkChar(this$static, buf, pos);
32.20860 +          switch (c) {
32.20861 +            case 45:
32.20862 +              continue;
32.20863 +            case 62:
32.20864 +              state = returnState;
32.20865 +              continue stateloop;
32.20866 +            case 0:
32.20867 +              $emitReplacementCharacter(this$static, buf, pos);
32.20868 +              state = 56;
32.20869 +              break escapehyphenhyphenloop;
32.20870 +            case 13:
32.20871 +              $emitCarriageReturn(this$static, buf, pos);
32.20872 +              state = 56;
32.20873 +              break stateloop;
32.20874 +            case 10:
32.20875 +              this$static.nextCharOnNewLine = true;
32.20876 +            default:state = 56;
32.20877 +              break escapehyphenhyphenloop;
32.20878 +          }
32.20879 +        }
32.20880 +
32.20881 +      case 56:
32.20882 +        escapeloop: for (;;) {
32.20883 +          if (++pos == endPos) {
32.20884 +            break stateloop;
32.20885 +          }
32.20886 +          c = $checkChar(this$static, buf, pos);
32.20887 +          switch (c) {
32.20888 +            case 45:
32.20889 +              state = 57;
32.20890 +              break escapeloop;
32.20891 +            case 0:
32.20892 +              $emitReplacementCharacter(this$static, buf, pos);
32.20893 +              continue;
32.20894 +            case 13:
32.20895 +              $emitCarriageReturn(this$static, buf, pos);
32.20896 +              break stateloop;
32.20897 +            case 10:
32.20898 +              this$static.nextCharOnNewLine = true;
32.20899 +            default:continue;
32.20900 +          }
32.20901 +        }
32.20902 +
32.20903 +      case 57:
32.20904 +        escapehyphenloop: for (;;) {
32.20905 +          if (++pos == endPos) {
32.20906 +            break stateloop;
32.20907 +          }
32.20908 +          c = $checkChar(this$static, buf, pos);
32.20909 +          switch (c) {
32.20910 +            case 45:
32.20911 +              state = 58;
32.20912 +              continue stateloop;
32.20913 +            case 0:
32.20914 +              $emitReplacementCharacter(this$static, buf, pos);
32.20915 +              state = 56;
32.20916 +              continue stateloop;
32.20917 +            case 13:
32.20918 +              $emitCarriageReturn(this$static, buf, pos);
32.20919 +              state = 56;
32.20920 +              continue stateloop;
32.20921 +            case 10:
32.20922 +              this$static.nextCharOnNewLine = true;
32.20923 +            default:state = 56;
32.20924 +              continue stateloop;
32.20925 +          }
32.20926 +        }
32.20927 +
32.20928 +      case 37:
32.20929 +        for (;;) {
32.20930 +          if (++pos == endPos) {
32.20931 +            break stateloop;
32.20932 +          }
32.20933 +          c = $checkChar(this$static, buf, pos);
32.20934 +          if (this$static.index < this$static.contentModelElementNameAsArray.length) {
32.20935 +            e = this$static.contentModelElementNameAsArray[this$static.index];
32.20936 +            folded = c;
32.20937 +            if (c >= 65 && c <= 90) {
32.20938 +              folded += 32;
32.20939 +            }
32.20940 +            if (folded != e) {
32.20941 +              this$static.html4 && (this$static.index > 0 || folded >= 97 && folded <= 122) && ($clinit_89() , IFRAME) != this$static.contentModelElement;
32.20942 +              $characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
32.20943 +              $emitStrBuf(this$static);
32.20944 +              this$static.cstart = pos;
32.20945 +              state = returnState;
32.20946 +              reconsume = true;
32.20947 +              continue stateloop;
32.20948 +            }
32.20949 +            $appendStrBuf(this$static, c);
32.20950 +            ++this$static.index;
32.20951 +            continue;
32.20952 +          }
32.20953 +           else {
32.20954 +            this$static.endTag = true;
32.20955 +            this$static.tagName = this$static.contentModelElement;
32.20956 +            switch (c) {
32.20957 +              case 13:
32.20958 +                this$static.nextCharOnNewLine = true;
32.20959 +                this$static.lastCR = true;
32.20960 +                state = 7;
32.20961 +                break stateloop;
32.20962 +              case 10:
32.20963 +                this$static.nextCharOnNewLine = true;
32.20964 +              case 32:
32.20965 +              case 9:
32.20966 +              case 12:
32.20967 +                state = 7;
32.20968 +                continue stateloop;
32.20969 +              case 62:
32.20970 +                state = $emitCurrentTagToken(this$static, false, pos);
32.20971 +                if (this$static.shouldSuspend) {
32.20972 +                  break stateloop;
32.20973 +                }
32.20974 +
32.20975 +                continue stateloop;
32.20976 +              case 47:
32.20977 +                state = 48;
32.20978 +                continue stateloop;
32.20979 +              default:$characters(this$static.tokenHandler, LT_SOLIDUS, 0, 2);
32.20980 +                $emitStrBuf(this$static);
32.20981 +                if (c == 0) {
32.20982 +                  $emitReplacementCharacter(this$static, buf, pos);
32.20983 +                }
32.20984 +                 else {
32.20985 +                  this$static.cstart = pos;
32.20986 +                }
32.20987 +
32.20988 +                state = returnState;
32.20989 +                continue stateloop;
32.20990 +            }
32.20991 +          }
32.20992 +        }
32.20993 +
32.20994 +      case 5:
32.20995 +        if (++pos == endPos) {
32.20996 +          break stateloop;
32.20997 +        }
32.20998 +
32.20999 +        c = $checkChar(this$static, buf, pos);
32.21000 +        switch (c) {
32.21001 +          case 62:
32.21002 +            this$static.cstart = pos + 1;
32.21003 +            state = 0;
32.21004 +            continue stateloop;
32.21005 +          case 13:
32.21006 +            this$static.nextCharOnNewLine = true;
32.21007 +            this$static.lastCR = true;
32.21008 +            this$static.longStrBuf[0] = 10;
32.21009 +            this$static.longStrBufLen = 1;
32.21010 +            state = 15;
32.21011 +            break stateloop;
32.21012 +          case 10:
32.21013 +            this$static.nextCharOnNewLine = true;
32.21014 +            this$static.longStrBuf[0] = 10;
32.21015 +            this$static.longStrBufLen = 1;
32.21016 +            state = 15;
32.21017 +            continue stateloop;
32.21018 +          case 0:
32.21019 +            c = 65533;
32.21020 +          default:if (c >= 65 && c <= 90) {
32.21021 +              c += 32;
32.21022 +            }
32.21023 +
32.21024 +            if (c >= 97 && c <= 122) {
32.21025 +              this$static.endTag = true;
32.21026 +              this$static.strBuf[0] = c;
32.21027 +              this$static.strBufLen = 1;
32.21028 +              state = 6;
32.21029 +              continue stateloop;
32.21030 +            }
32.21031 +             else {
32.21032 +              this$static.longStrBuf[0] = c;
32.21033 +              this$static.longStrBufLen = 1;
32.21034 +              state = 15;
32.21035 +              continue stateloop;
32.21036 +            }
32.21037 +
32.21038 +        }
32.21039 +
32.21040 +      case 1:
32.21041 +        rcdataloop: for (;;) {
32.21042 +          if (reconsume) {
32.21043 +            reconsume = false;
32.21044 +          }
32.21045 +           else {
32.21046 +            if (++pos == endPos) {
32.21047 +              break stateloop;
32.21048 +            }
32.21049 +            c = $checkChar(this$static, buf, pos);
32.21050 +          }
32.21051 +          switch (c) {
32.21052 +            case 38:
32.21053 +              $flushChars(this$static, buf, pos);
32.21054 +              this$static.strBuf[0] = c;
32.21055 +              this$static.strBufLen = 1;
32.21056 +              this$static.additional = 0;
32.21057 +              returnState = state;
32.21058 +              state = 42;
32.21059 +              continue stateloop;
32.21060 +            case 60:
32.21061 +              $flushChars(this$static, buf, pos);
32.21062 +              returnState = state;
32.21063 +              state = 53;
32.21064 +              continue stateloop;
32.21065 +            case 0:
32.21066 +              $emitReplacementCharacter(this$static, buf, pos);
32.21067 +              continue;
32.21068 +            case 13:
32.21069 +              $emitCarriageReturn(this$static, buf, pos);
32.21070 +              break stateloop;
32.21071 +            case 10:
32.21072 +              this$static.nextCharOnNewLine = true;
32.21073 +            default:continue;
32.21074 +          }
32.21075 +        }
32.21076 +
32.21077 +    }
32.21078 +  }
32.21079 +  $flushChars(this$static, buf, pos);
32.21080 +  this$static.stateSave = state;
32.21081 +  this$static.returnStateSave = returnState;
32.21082 +  return pos;
32.21083 +}
32.21084 +
32.21085 +function $tokenizeBuffer(this$static, buffer){
32.21086 +  var pos, returnState, start, state;
32.21087 +  state = this$static.stateSave;
32.21088 +  returnState = this$static.returnStateSave;
32.21089 +  this$static.shouldSuspend = false;
32.21090 +  this$static.lastCR = false;
32.21091 +  start = buffer.start;
32.21092 +  pos = start - 1;
32.21093 +  switch (state) {
32.21094 +    case 0:
32.21095 +    case 1:
32.21096 +    case 2:
32.21097 +    case 3:
32.21098 +    case 50:
32.21099 +    case 56:
32.21100 +    case 54:
32.21101 +    case 55:
32.21102 +    case 57:
32.21103 +    case 58:
32.21104 +      this$static.cstart = start;
32.21105 +      break;
32.21106 +    default:this$static.cstart = 2147483647;
32.21107 +  }
32.21108 +  pos = $stateLoop(this$static, state, 0, pos, buffer.buffer, false, returnState, buffer.end);
32.21109 +  if (pos == buffer.end) {
32.21110 +    buffer.start = pos;
32.21111 +  }
32.21112 +   else {
32.21113 +    buffer.start = pos + 1;
32.21114 +  }
32.21115 +  return this$static.lastCR;
32.21116 +}
32.21117 +
32.21118 +function getClass_56(){
32.21119 +  return Lnu_validator_htmlparser_impl_Tokenizer_2_classLit;
32.21120 +}
32.21121 +
32.21122 +function newAsciiLowerCaseStringFromString(str){
32.21123 +  var buf, c, i;
32.21124 +  if (str == null) {
32.21125 +    return null;
32.21126 +  }
32.21127 +  buf = initDim(_3C_classLit, 42, -1, str.length, 1);
32.21128 +  for (i = 0; i < str.length; ++i) {
32.21129 +    c = str.charCodeAt(i);
32.21130 +    if (c >= 65 && c <= 90) {
32.21131 +      c += 32;
32.21132 +    }
32.21133 +    buf[i] = c;
32.21134 +  }
32.21135 +  return String.fromCharCode.apply(null, buf);
32.21136 +}
32.21137 +
32.21138 +function Tokenizer(){
32.21139 +}
32.21140 +
32.21141 +_ = Tokenizer.prototype = new Object_0();
32.21142 +_.getClass$ = getClass_56;
32.21143 +_.typeId$ = 0;
32.21144 +_.additional = 0;
32.21145 +_.astralChar = null;
32.21146 +_.attributeName = null;
32.21147 +_.attributes = null;
32.21148 +_.bmpChar = null;
32.21149 +_.candidate = 0;
32.21150 +_.confident = false;
32.21151 +_.contentModelElement = null;
32.21152 +_.contentModelElementNameAsArray = null;
32.21153 +_.cstart = 0;
32.21154 +_.doctypeName = null;
32.21155 +_.endTag = false;
32.21156 +_.entCol = 0;
32.21157 +_.forceQuirks = false;
32.21158 +_.hi = 0;
32.21159 +_.html4 = false;
32.21160 +_.html4ModeCompatibleWithXhtml1Schemata = false;
32.21161 +_.index = 0;
32.21162 +_.lastCR = false;
32.21163 +_.lo = 0;
32.21164 +_.longStrBuf = null;
32.21165 +_.longStrBufLen = 0;
32.21166 +_.mappingLangToXmlLang = 0;
32.21167 +_.metaBoundaryPassed = false;
32.21168 +_.newAttributesEachTime = false;
32.21169 +_.prevValue = 0;
32.21170 +_.publicIdentifier = null;
32.21171 +_.returnStateSave = 0;
32.21172 +_.seenDigits = false;
32.21173 +_.shouldSuspend = false;
32.21174 +_.stateSave = 0;
32.21175 +_.strBuf = null;
32.21176 +_.strBufLen = 0;
32.21177 +_.strBufMark = 0;
32.21178 +_.systemIdentifier = null;
32.21179 +_.tagName = null;
32.21180 +_.tokenHandler = null;
32.21181 +_.value = 0;
32.21182 +_.wantsComments = false;
32.21183 +var CDATA_LSQB, IFRAME_ARR, LF, LT_GT, LT_SOLIDUS, NOEMBED_ARR, NOFRAMES_ARR, NOSCRIPT_ARR, OCTYPE, PLAINTEXT_ARR, REPLACEMENT_CHARACTER, RSQB_RSQB, SCRIPT_ARR, SPACE, STYLE_ARR, TEXTAREA_ARR, TITLE_ARR, UBLIC, XMP_ARR, YSTEM;
32.21184 +function $clinit_90(){
32.21185 +  $clinit_90 = nullMethod;
32.21186 +  $clinit_97();
32.21187 +}
32.21188 +
32.21189 +function $ErrorReportingTokenizer(this$static, tokenHandler){
32.21190 +  $clinit_90();
32.21191 +  this$static.contentSpacePolicy = ($clinit_80() , ALTER_INFOSET);
32.21192 +  this$static.commentPolicy = ALTER_INFOSET;
32.21193 +  this$static.xmlnsPolicy = ALTER_INFOSET;
32.21194 +  this$static.namePolicy = ALTER_INFOSET;
32.21195 +  this$static.tokenHandler = tokenHandler;
32.21196 +  this$static.newAttributesEachTime = false;
32.21197 +  this$static.bmpChar = initDim(_3C_classLit, 42, -1, 1, 1);
32.21198 +  this$static.astralChar = initDim(_3C_classLit, 42, -1, 2, 1);
32.21199 +  this$static.contentNonXmlCharPolicy = ALTER_INFOSET;
32.21200 +  return this$static;
32.21201 +}
32.21202 +
32.21203 +function $checkChar(this$static, buf, pos){
32.21204 +  var c, intVal;
32.21205 +  this$static.linePrev = this$static.line;
32.21206 +  this$static.colPrev = this$static.col;
32.21207 +  if (this$static.nextCharOnNewLine) {
32.21208 +    ++this$static.line;
32.21209 +    this$static.col = 1;
32.21210 +    this$static.nextCharOnNewLine = false;
32.21211 +  }
32.21212 +   else {
32.21213 +    ++this$static.col;
32.21214 +  }
32.21215 +  c = buf[pos];
32.21216 +  if (!this$static.confident && !this$static.alreadyComplainedAboutNonAscii && c > 127) {
32.21217 +    this$static.alreadyComplainedAboutNonAscii = true;
32.21218 +  }
32.21219 +  switch (c) {
32.21220 +    case 0:
32.21221 +    case 9:
32.21222 +    case 13:
32.21223 +    case 10:
32.21224 +      break;
32.21225 +    case 12:
32.21226 +      if (this$static.contentNonXmlCharPolicy == ($clinit_80() , FATAL)) {
32.21227 +        $fatal(this$static, 'This document is not mappable to XML 1.0 without data loss due to ' + $toUPlusString(c) + ' which is not a legal XML 1.0 character.');
32.21228 +      }
32.21229 +       else {
32.21230 +        if (this$static.contentNonXmlCharPolicy == ALTER_INFOSET) {
32.21231 +          c = buf[pos] = 32;
32.21232 +        }
32.21233 +        'This document is not mappable to XML 1.0 without data loss due to ' + $toUPlusString(c) + ' which is not a legal XML 1.0 character.';
32.21234 +      }
32.21235 +
32.21236 +      break;
32.21237 +    default:if ((c & 64512) == 56320) {
32.21238 +        if ((this$static.prev & 64512) == 55296) {
32.21239 +          intVal = (this$static.prev << 10) + c + -56613888;
32.21240 +          if (intVal >= 983040 && intVal <= 1048573 || intVal >= 1048576 && intVal <= 1114109) {
32.21241 +            $warnAboutPrivateUseChar(this$static);
32.21242 +          }
32.21243 +        }
32.21244 +      }
32.21245 +       else if (c < 32 || (c & 65534) == 65534) {
32.21246 +        switch (this$static.contentNonXmlCharPolicy.ordinal) {
32.21247 +          case 1:
32.21248 +            $fatal(this$static, 'Forbidden code point ' + $toUPlusString(c) + '.');
32.21249 +            break;
32.21250 +          case 2:
32.21251 +            c = buf[pos] = 65533;
32.21252 +          case 0:
32.21253 +            'Forbidden code point ' + $toUPlusString(c) + '.';
32.21254 +        }
32.21255 +      }
32.21256 +       else if (c >= 127 && c <= 159 || c >= 64976 && c <= 64991) {
32.21257 +        'Forbidden code point ' + $toUPlusString(c) + '.';
32.21258 +      }
32.21259 +       else if (c >= 57344 && c <= 63743) {
32.21260 +        $warnAboutPrivateUseChar(this$static);
32.21261 +      }
32.21262 +
32.21263 +  }
32.21264 +  this$static.prev = c;
32.21265 +  return c;
32.21266 +}
32.21267 +
32.21268 +function $errLtOrEqualsInUnquotedAttributeOrNull(c){
32.21269 +  switch (c) {
32.21270 +    case 61:
32.21271 +      return;
32.21272 +    case 60:
32.21273 +      return;
32.21274 +  }
32.21275 +}
32.21276 +
32.21277 +function $flushChars(this$static, buf, pos){
32.21278 +  var currCol, currLine;
32.21279 +  if (pos > this$static.cstart) {
32.21280 +    currLine = this$static.line;
32.21281 +    currCol = this$static.col;
32.21282 +    this$static.line = this$static.linePrev;
32.21283 +    this$static.col = this$static.colPrev;
32.21284 +    $characters(this$static.tokenHandler, buf, this$static.cstart, pos - this$static.cstart);
32.21285 +    this$static.line = currLine;
32.21286 +    this$static.col = currCol;
32.21287 +  }
32.21288 +  this$static.cstart = 2147483647;
32.21289 +}
32.21290 +
32.21291 +function $getColumnNumber(this$static){
32.21292 +  if (this$static.col > 0) {
32.21293 +    return this$static.col;
32.21294 +  }
32.21295 +   else {
32.21296 +    return -1;
32.21297 +  }
32.21298 +}
32.21299 +
32.21300 +function $getLineNumber(this$static){
32.21301 +  if (this$static.line > 0) {
32.21302 +    return this$static.line;
32.21303 +  }
32.21304 +   else {
32.21305 +    return -1;
32.21306 +  }
32.21307 +}
32.21308 +
32.21309 +function $toUPlusString(c){
32.21310 +  var hexString;
32.21311 +  hexString = toPowerOfTwoString(c, 4);
32.21312 +  switch (hexString.length) {
32.21313 +    case 1:
32.21314 +      return 'U+000' + hexString;
32.21315 +    case 2:
32.21316 +      return 'U+00' + hexString;
32.21317 +    case 3:
32.21318 +      return 'U+0' + hexString;
32.21319 +    case 4:
32.21320 +      return 'U+' + hexString;
32.21321 +    default:throw $RuntimeException(new RuntimeException(), 'Unreachable.');
32.21322 +  }
32.21323 +}
32.21324 +
32.21325 +function $warnAboutPrivateUseChar(this$static){
32.21326 +  if (!this$static.alreadyWarnedAboutPrivateUseCharacters) {
32.21327 +    this$static.alreadyWarnedAboutPrivateUseCharacters = true;
32.21328 +  }
32.21329 +}
32.21330 +
32.21331 +function getClass_52(){
32.21332 +  return Lnu_validator_htmlparser_impl_ErrorReportingTokenizer_2_classLit;
32.21333 +}
32.21334 +
32.21335 +function ErrorReportingTokenizer(){
32.21336 +}
32.21337 +
32.21338 +_ = ErrorReportingTokenizer.prototype = new Tokenizer();
32.21339 +_.getClass$ = getClass_52;
32.21340 +_.typeId$ = 0;
32.21341 +_.alreadyComplainedAboutNonAscii = false;
32.21342 +_.alreadyWarnedAboutPrivateUseCharacters = false;
32.21343 +_.col = 0;
32.21344 +_.colPrev = 0;
32.21345 +_.line = 0;
32.21346 +_.linePrev = 0;
32.21347 +_.nextCharOnNewLine = false;
32.21348 +_.prev = 0;
32.21349 +function $clinit_91(){
32.21350 +  $clinit_91 = nullMethod;
32.21351 +  EMPTY_ATTRIBUTENAMES = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 49, 9, 0, 0);
32.21352 +  EMPTY_STRINGS = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 0, 0);
32.21353 +  EMPTY_ATTRIBUTES = $HtmlAttributes(new HtmlAttributes(), 0);
32.21354 +}
32.21355 +
32.21356 +function $HtmlAttributes(this$static, mode){
32.21357 +  $clinit_91();
32.21358 +  this$static.mode = mode;
32.21359 +  this$static.length_0 = 0;
32.21360 +  this$static.names = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 49, 9, 5, 0);
32.21361 +  this$static.values = initDim(_3Ljava_lang_String_2_classLit, 48, 1, 5, 0);
32.21362 +  this$static.xmlnsLength = 0;
32.21363 +  this$static.xmlnsNames = EMPTY_ATTRIBUTENAMES;
32.21364 +  this$static.xmlnsValues = EMPTY_STRINGS;
32.21365 +  return this$static;
32.21366 +}
32.21367 +
32.21368 +function $addAttribute(this$static, name, value, xmlnsPolicy){
32.21369 +  var newLen, newNames, newValues;
32.21370 +  name == ($clinit_87() , ID);
32.21371 +  if (name.xmlns) {
32.21372 +    if (this$static.xmlnsNames.length == this$static.xmlnsLength) {
32.21373 +      newLen = this$static.xmlnsLength == 0?2:this$static.xmlnsLength << 1;
32.21374 +      newNames = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 49, 9, newLen, 0);
32.21375 +      arraycopy(this$static.xmlnsNames, 0, newNames, 0, this$static.xmlnsNames.length);
32.21376 +      this$static.xmlnsNames = newNames;
32.21377 +      newValues = initDim(_3Ljava_lang_String_2_classLit, 48, 1, newLen, 0);
32.21378 +      arraycopy(this$static.xmlnsValues, 0, newValues, 0, this$static.xmlnsValues.length);
32.21379 +      this$static.xmlnsValues = newValues;
32.21380 +    }
32.21381 +    this$static.xmlnsNames[this$static.xmlnsLength] = name;
32.21382 +    this$static.xmlnsValues[this$static.xmlnsLength] = value;
32.21383 +    ++this$static.xmlnsLength;
32.21384 +    switch (xmlnsPolicy.ordinal) {
32.21385 +      case 1:
32.21386 +        throw $SAXException(new SAXException(), 'Saw an xmlns attribute.');
32.21387 +      case 2:
32.21388 +        return;
32.21389 +    }
32.21390 +  }
32.21391 +  if (this$static.names.length == this$static.length_0) {
32.21392 +    newLen = this$static.length_0 << 1;
32.21393 +    newNames = initDim(_3Lnu_validator_htmlparser_impl_AttributeName_2_classLit, 49, 9, newLen, 0);
32.21394 +    arraycopy(this$static.names, 0, newNames, 0, this$static.names.length);
32.21395 +    this$static.names = newNames;
32.21396 +    newValues = initDim(_3Ljava_lang_String_2_classLit, 48, 1, newLen, 0);
32.21397 +    arraycopy(this$static.values, 0, newValues, 0, this$static.values.length);
32.21398 +    this$static.values = newValues;
32.21399 +  }
32.21400 +  this$static.names[this$static.length_0] = name;
32.21401 +  this$static.values[this$static.length_0] = value;
32.21402 +  ++this$static.length_0;
32.21403 +}
32.21404 +
32.21405 +function $clear_0(this$static, m){
32.21406 +  var i;
32.21407 +  for (i = 0; i < this$static.length_0; ++i) {
32.21408 +    setCheck(this$static.names, i, null);
32.21409 +    setCheck(this$static.values, i, null);
32.21410 +  }
32.21411 +  this$static.length_0 = 0;
32.21412 +  this$static.mode = m;
32.21413 +  for (i = 0; i < this$static.xmlnsLength; ++i) {
32.21414 +    setCheck(this$static.xmlnsNames, i, null);
32.21415 +    setCheck(this$static.xmlnsValues, i, null);
32.21416 +  }
32.21417 +  this$static.xmlnsLength = 0;
32.21418 +}
32.21419 +
32.21420 +function $clearWithoutReleasingContents(this$static){
32.21421 +  var i;
32.21422 +  for (i = 0; i < this$static.length_0; ++i) {
32.21423 +    setCheck(this$static.names, i, null);
32.21424 +    setCheck(this$static.values, i, null);
32.21425 +  }
32.21426 +  this$static.length_0 = 0;
32.21427 +}
32.21428 +
32.21429 +function $cloneAttributes(this$static){
32.21430 +  var clone, i;
32.21431 +  clone = $HtmlAttributes(new HtmlAttributes(), 0);
32.21432 +  for (i = 0; i < this$static.length_0; ++i) {
32.21433 +    $addAttribute(clone, this$static.names[i], this$static.values[i], ($clinit_80() , ALLOW));
32.21434 +  }
32.21435 +  for (i = 0; i < this$static.xmlnsLength; ++i) {
32.21436 +    $addAttribute(clone, this$static.xmlnsNames[i], this$static.xmlnsValues[i], ($clinit_80() , ALLOW));
32.21437 +  }
32.21438 +  return clone;
32.21439 +}
32.21440 +
32.21441 +function $contains(this$static, name){
32.21442 +  var i;
32.21443 +  for (i = 0; i < this$static.length_0; ++i) {
32.21444 +    if (name.local[0] == this$static.names[i].local[0]) {
32.21445 +      return true;
32.21446 +    }
32.21447 +  }
32.21448 +  for (i = 0; i < this$static.xmlnsLength; ++i) {
32.21449 +    if (name.local[0] == this$static.xmlnsNames[i].local[0]) {
32.21450 +      return true;
32.21451 +    }
32.21452 +  }
32.21453 +  return false;
32.21454 +}
32.21455 +
32.21456 +function $getAttributeName(this$static, index){
32.21457 +  if (index < this$static.length_0 && index >= 0) {
32.21458 +    return this$static.names[index];
32.21459 +  }
32.21460 +   else {
32.21461 +    return null;
32.21462 +  }
32.21463 +}
32.21464 +
32.21465 +function $getIndex(this$static, name){
32.21466 +  var i;
32.21467 +  for (i = 0; i < this$static.length_0; ++i) {
32.21468 +    if (this$static.names[i] == name) {
32.21469 +      return i;
32.21470 +    }
32.21471 +  }
32.21472 +  return -1;
32.21473 +}
32.21474 +
32.21475 +function $getLocalName(this$static, index){
32.21476 +  if (index < this$static.length_0 && index >= 0) {
32.21477 +    return this$static.names[index].local[this$static.mode];
32.21478 +  }
32.21479 +   else {
32.21480 +    return null;
32.21481 +  }
32.21482 +}
32.21483 +
32.21484 +function $getURI(this$static, index){
32.21485 +  if (index < this$static.length_0 && index >= 0) {
32.21486 +    return this$static.names[index].uri[this$static.mode];
32.21487 +  }
32.21488 +   else {
32.21489 +    return null;
32.21490 +  }
32.21491 +}
32.21492 +
32.21493 +function $getValue(this$static, index){
32.21494 +  if (index < this$static.length_0 && index >= 0) {
32.21495 +    return this$static.values[index];
32.21496 +  }
32.21497 +   else {
32.21498 +    return null;
32.21499 +  }
32.21500 +}
32.21501 +
32.21502 +function $getValue_0(this$static, name){
32.21503 +  var index;
32.21504 +  index = $getIndex(this$static, name);
32.21505 +  if (index == -1) {
32.21506 +    return null;
32.21507 +  }
32.21508 +   else {
32.21509 +    return $getValue(this$static, index);
32.21510 +  }
32.21511 +}
32.21512 +
32.21513 +function $processNonNcNames(this$static, treeBuilder, namePolicy){
32.21514 +  var attName, i, name;
32.21515 +  for (i = 0; i < this$static.length_0; ++i) {
32.21516 +    attName = this$static.names[i];
32.21517 +    if (!attName.ncname[this$static.mode]) {
32.21518 +      name = attName.local[this$static.mode];
32.21519 +      switch (namePolicy.ordinal) {
32.21520 +        case 2:
32.21521 +          this$static.names[i] = ($clinit_87() , $AttributeName(new AttributeName(), ALL_NO_NS, SAME_LOCAL(escapeName(name)), ALL_NO_PREFIX, ALL_NCNAME, false));
32.21522 +        case 0:
32.21523 +          attName != ($clinit_87() , XML_LANG);
32.21524 +          break;
32.21525 +        case 1:
32.21526 +          $fatal_1(treeBuilder, 'Attribute \u201C' + name + '\u201D is not serializable as XML 1.0.');
32.21527 +      }
32.21528 +    }
32.21529 +  }
32.21530 +}
32.21531 +
32.21532 +function getClass_53(){
32.21533 +  return Lnu_validator_htmlparser_impl_HtmlAttributes_2_classLit;
32.21534 +}
32.21535 +
32.21536 +function HtmlAttributes(){
32.21537 +}
32.21538 +
32.21539 +_ = HtmlAttributes.prototype = new Object_0();
32.21540 +_.getClass$ = getClass_53;
32.21541 +_.typeId$ = 0;
32.21542 +_.length_0 = 0;
32.21543 +_.mode = 0;
32.21544 +_.names = null;
32.21545 +_.values = null;
32.21546 +_.xmlnsLength = 0;
32.21547 +_.xmlnsNames = null;
32.21548 +_.xmlnsValues = null;
32.21549 +var EMPTY_ATTRIBUTENAMES, EMPTY_ATTRIBUTES, EMPTY_STRINGS;
32.21550 +function $LocatorImpl(this$static, locator){
32.21551 +  $getColumnNumber(locator);
32.21552 +  $getLineNumber(locator);
32.21553 +  return this$static;
32.21554 +}
32.21555 +
32.21556 +function getClass_54(){
32.21557 +  return Lnu_validator_htmlparser_impl_LocatorImpl_2_classLit;
32.21558 +}
32.21559 +
32.21560 +function LocatorImpl(){
32.21561 +}
32.21562 +
32.21563 +_ = LocatorImpl.prototype = new Object_0();
32.21564 +_.getClass$ = getClass_54;
32.21565 +_.typeId$ = 0;
32.21566 +function $clinit_93(){
32.21567 +  $clinit_93 = nullMethod;
32.21568 +  HEX_TABLE = $toCharArray('0123456789ABCDEF');
32.21569 +}
32.21570 +
32.21571 +function appendUHexTo(sb, c){
32.21572 +  var i;
32.21573 +  $append_0(sb, 'U');
32.21574 +  for (i = 0; i < 6; ++i) {
32.21575 +    $append_0(sb, String.fromCharCode(HEX_TABLE[(c & 15728640) >> 20]));
32.21576 +    c <<= 4;
32.21577 +  }
32.21578 +}
32.21579 +
32.21580 +function escapeName(str){
32.21581 +  $clinit_93();
32.21582 +  var c, i, next, sb;
32.21583 +  sb = $StringBuilder(new StringBuilder());
32.21584 +  for (i = 0; i < str.length; ++i) {
32.21585 +    c = str.charCodeAt(i);
32.21586 +    if ((c & 64512) == 55296) {
32.21587 +      next = str.charCodeAt(++i);
32.21588 +      appendUHexTo(sb, (c << 10) + next + -56613888);
32.21589 +    }
32.21590 +     else if (i == 0 && !(c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95)) {
32.21591 +      appendUHexTo(sb, c);
32.21592 +    }
32.21593 +     else if (i != 0 && !(c >= 48 && c <= 57 || c >= 1632 && c <= 1641 || c >= 1776 && c <= 1785 || c >= 2406 && c <= 2415 || c >= 2534 && c <= 2543 || c >= 2662 && c <= 2671 || c >= 2790 && c <= 2799 || c >= 2918 && c <= 2927 || c >= 3047 && c <= 3055 || c >= 3174 && c <= 3183 || c >= 3302 && c <= 3311 || c >= 3430 && c <= 3439 || c >= 3664 && c <= 3673 || c >= 3792 && c <= 3801 || c >= 3872 && c <= 3881 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95 || c == 46 || c == 45 || c >= 768 && c <= 837 || c >= 864 && c <= 865 || c >= 1155 && c <= 1158 || c >= 1425 && c <= 1441 || c >= 1443 && c <= 1465 || c >= 1467 && c <= 1469 || c == 1471 || c >= 1473 && c <= 1474 || c == 1476 || c >= 1611 && c <= 1618 || c == 1648 || c >= 1750 && c <= 1756 || c >= 1757 && c <= 1759 || c >= 1760 && c <= 1764 || c >= 1767 && c <= 1768 || c >= 1770 && c <= 1773 || c >= 2305 && c <= 2307 || c == 2364 || c >= 2366 && c <= 2380 || c == 2381 || c >= 2385 && c <= 2388 || c >= 2402 && c <= 2403 || c >= 2433 && c <= 2435 || c == 2492 || c == 2494 || c == 2495 || c >= 2496 && c <= 2500 || c >= 2503 && c <= 2504 || c >= 2507 && c <= 2509 || c == 2519 || c >= 2530 && c <= 2531 || c == 2562 || c == 2620 || c == 2622 || c == 2623 || c >= 2624 && c <= 2626 || c >= 2631 && c <= 2632 || c >= 2635 && c <= 2637 || c >= 2672 && c <= 2673 || c >= 2689 && c <= 2691 || c == 2748 || c >= 2750 && c <= 2757 || c >= 2759 && c <= 2761 || c >= 2763 && c <= 2765 || c >= 2817 && c <= 2819 || c == 2876 || c >= 2878 && c <= 2883 || c >= 2887 && c <= 2888 || c >= 2891 && c <= 2893 || c >= 2902 && c <= 2903 || c >= 2946 && c <= 2947 || c >= 3006 && c <= 3010 || c >= 3014 && c <= 3016 || c >= 3018 && c <= 3021 || c == 3031 || c >= 3073 && c <= 3075 || c >= 3134 && c <= 3140 || c >= 3142 && c <= 3144 || c >= 3146 && c <= 3149 || c >= 3157 && c <= 3158 || c >= 3202 && c <= 3203 || c >= 3262 && c <= 3268 || c >= 3270 && c <= 3272 || c >= 3274 && c <= 3277 || c >= 3285 && c <= 3286 || c >= 3330 && c <= 3331 || c >= 3390 && c <= 3395 || c >= 3398 && c <= 3400 || c >= 3402 && c <= 3405 || c == 3415 || c == 3633 || c >= 3636 && c <= 3642 || c >= 3655 && c <= 3662 || c == 3761 || c >= 3764 && c <= 3769 || c >= 3771 && c <= 3772 || c >= 3784 && c <= 3789 || c >= 3864 && c <= 3865 || c == 3893 || c == 3895 || c == 3897 || c == 3902 || c == 3903 || c >= 3953 && c <= 3972 || c >= 3974 && c <= 3979 || c >= 3984 && c <= 3989 || c == 3991 || c >= 3993 && c <= 4013 || c >= 4017 && c <= 4023 || c == 4025 || c >= 8400 && c <= 8412 || c == 8417 || c >= 12330 && c <= 12335 || c == 12441 || c == 12442 || c == 183 || c == 720 || c == 721 || c == 903 || c == 1600 || c == 3654 || c == 3782 || c == 12293 || c >= 12337 && c <= 12341 || c >= 12445 && c <= 12446 || c >= 12540 && c <= 12542)) {
32.21594 +      appendUHexTo(sb, c);
32.21595 +    }
32.21596 +     else {
32.21597 +      $append_0(sb, String.fromCharCode(c));
32.21598 +    }
32.21599 +  }
32.21600 +  return String($toString_0(sb));
32.21601 +}
32.21602 +
32.21603 +function isNCName(str){
32.21604 +  $clinit_93();
32.21605 +  var i, len;
32.21606 +  if (str == null) {
32.21607 +    return false;
32.21608 +  }
32.21609 +   else {
32.21610 +    len = str.length;
32.21611 +    switch (len) {
32.21612 +      case 0:
32.21613 +        return false;
32.21614 +      case 1:
32.21615 +        return isNCNameStart(str.charCodeAt(0));
32.21616 +      default:if (!isNCNameStart(str.charCodeAt(0))) {
32.21617 +          return false;
32.21618 +        }
32.21619 +
32.21620 +        for (i = 1; i < len; ++i) {
32.21621 +          if (!isNCNameTrail(str.charCodeAt(i))) {
32.21622 +            return false;
32.21623 +          }
32.21624 +        }
32.21625 +
32.21626 +    }
32.21627 +    return true;
32.21628 +  }
32.21629 +}
32.21630 +
32.21631 +function isNCNameStart(c){
32.21632 +  return c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95;
32.21633 +}
32.21634 +
32.21635 +function isNCNameTrail(c){
32.21636 +  return c >= 48 && c <= 57 || c >= 1632 && c <= 1641 || c >= 1776 && c <= 1785 || c >= 2406 && c <= 2415 || c >= 2534 && c <= 2543 || c >= 2662 && c <= 2671 || c >= 2790 && c <= 2799 || c >= 2918 && c <= 2927 || c >= 3047 && c <= 3055 || c >= 3174 && c <= 3183 || c >= 3302 && c <= 3311 || c >= 3430 && c <= 3439 || c >= 3664 && c <= 3673 || c >= 3792 && c <= 3801 || c >= 3872 && c <= 3881 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 255 || c >= 256 && c <= 305 || c >= 308 && c <= 318 || c >= 321 && c <= 328 || c >= 330 && c <= 382 || c >= 384 && c <= 451 || c >= 461 && c <= 496 || c >= 500 && c <= 501 || c >= 506 && c <= 535 || c >= 592 && c <= 680 || c >= 699 && c <= 705 || c == 902 || c >= 904 && c <= 906 || c == 908 || c >= 910 && c <= 929 || c >= 931 && c <= 974 || c >= 976 && c <= 982 || c == 986 || c == 988 || c == 990 || c == 992 || c >= 994 && c <= 1011 || c >= 1025 && c <= 1036 || c >= 1038 && c <= 1103 || c >= 1105 && c <= 1116 || c >= 1118 && c <= 1153 || c >= 1168 && c <= 1220 || c >= 1223 && c <= 1224 || c >= 1227 && c <= 1228 || c >= 1232 && c <= 1259 || c >= 1262 && c <= 1269 || c >= 1272 && c <= 1273 || c >= 1329 && c <= 1366 || c == 1369 || c >= 1377 && c <= 1414 || c >= 1488 && c <= 1514 || c >= 1520 && c <= 1522 || c >= 1569 && c <= 1594 || c >= 1601 && c <= 1610 || c >= 1649 && c <= 1719 || c >= 1722 && c <= 1726 || c >= 1728 && c <= 1742 || c >= 1744 && c <= 1747 || c == 1749 || c >= 1765 && c <= 1766 || c >= 2309 && c <= 2361 || c == 2365 || c >= 2392 && c <= 2401 || c >= 2437 && c <= 2444 || c >= 2447 && c <= 2448 || c >= 2451 && c <= 2472 || c >= 2474 && c <= 2480 || c == 2482 || c >= 2486 && c <= 2489 || c >= 2524 && c <= 2525 || c >= 2527 && c <= 2529 || c >= 2544 && c <= 2545 || c >= 2565 && c <= 2570 || c >= 2575 && c <= 2576 || c >= 2579 && c <= 2600 || c >= 2602 && c <= 2608 || c >= 2610 && c <= 2611 || c >= 2613 && c <= 2614 || c >= 2616 && c <= 2617 || c >= 2649 && c <= 2652 || c == 2654 || c >= 2674 && c <= 2676 || c >= 2693 && c <= 2699 || c == 2701 || c >= 2703 && c <= 2705 || c >= 2707 && c <= 2728 || c >= 2730 && c <= 2736 || c >= 2738 && c <= 2739 || c >= 2741 && c <= 2745 || c == 2749 || c == 2784 || c >= 2821 && c <= 2828 || c >= 2831 && c <= 2832 || c >= 2835 && c <= 2856 || c >= 2858 && c <= 2864 || c >= 2866 && c <= 2867 || c >= 2870 && c <= 2873 || c == 2877 || c >= 2908 && c <= 2909 || c >= 2911 && c <= 2913 || c >= 2949 && c <= 2954 || c >= 2958 && c <= 2960 || c >= 2962 && c <= 2965 || c >= 2969 && c <= 2970 || c == 2972 || c >= 2974 && c <= 2975 || c >= 2979 && c <= 2980 || c >= 2984 && c <= 2986 || c >= 2990 && c <= 2997 || c >= 2999 && c <= 3001 || c >= 3077 && c <= 3084 || c >= 3086 && c <= 3088 || c >= 3090 && c <= 3112 || c >= 3114 && c <= 3123 || c >= 3125 && c <= 3129 || c >= 3168 && c <= 3169 || c >= 3205 && c <= 3212 || c >= 3214 && c <= 3216 || c >= 3218 && c <= 3240 || c >= 3242 && c <= 3251 || c >= 3253 && c <= 3257 || c == 3294 || c >= 3296 && c <= 3297 || c >= 3333 && c <= 3340 || c >= 3342 && c <= 3344 || c >= 3346 && c <= 3368 || c >= 3370 && c <= 3385 || c >= 3424 && c <= 3425 || c >= 3585 && c <= 3630 || c == 3632 || c >= 3634 && c <= 3635 || c >= 3648 && c <= 3653 || c >= 3713 && c <= 3714 || c == 3716 || c >= 3719 && c <= 3720 || c == 3722 || c == 3725 || c >= 3732 && c <= 3735 || c >= 3737 && c <= 3743 || c >= 3745 && c <= 3747 || c == 3749 || c == 3751 || c >= 3754 && c <= 3755 || c >= 3757 && c <= 3758 || c == 3760 || c >= 3762 && c <= 3763 || c == 3773 || c >= 3776 && c <= 3780 || c >= 3904 && c <= 3911 || c >= 3913 && c <= 3945 || c >= 4256 && c <= 4293 || c >= 4304 && c <= 4342 || c == 4352 || c >= 4354 && c <= 4355 || c >= 4357 && c <= 4359 || c == 4361 || c >= 4363 && c <= 4364 || c >= 4366 && c <= 4370 || c == 4412 || c == 4414 || c == 4416 || c == 4428 || c == 4430 || c == 4432 || c >= 4436 && c <= 4437 || c == 4441 || c >= 4447 && c <= 4449 || c == 4451 || c == 4453 || c == 4455 || c == 4457 || c >= 4461 && c <= 4462 || c >= 4466 && c <= 4467 || c == 4469 || c == 4510 || c == 4520 || c == 4523 || c >= 4526 && c <= 4527 || c >= 4535 && c <= 4536 || c == 4538 || c >= 4540 && c <= 4546 || c == 4587 || c == 4592 || c == 4601 || c >= 7680 && c <= 7835 || c >= 7840 && c <= 7929 || c >= 7936 && c <= 7957 || c >= 7960 && c <= 7965 || c >= 7968 && c <= 8005 || c >= 8008 && c <= 8013 || c >= 8016 && c <= 8023 || c == 8025 || c == 8027 || c == 8029 || c >= 8031 && c <= 8061 || c >= 8064 && c <= 8116 || c >= 8118 && c <= 8124 || c == 8126 || c >= 8130 && c <= 8132 || c >= 8134 && c <= 8140 || c >= 8144 && c <= 8147 || c >= 8150 && c <= 8155 || c >= 8160 && c <= 8172 || c >= 8178 && c <= 8180 || c >= 8182 && c <= 8188 || c == 8486 || c >= 8490 && c <= 8491 || c == 8494 || c >= 8576 && c <= 8578 || c >= 12353 && c <= 12436 || c >= 12449 && c <= 12538 || c >= 12549 && c <= 12588 || c >= 44032 && c <= 55203 || c >= 19968 && c <= 40869 || c == 12295 || c >= 12321 && c <= 12329 || c == 95 || c == 46 || c == 45 || c >= 768 && c <= 837 || c >= 864 && c <= 865 || c >= 1155 && c <= 1158 || c >= 1425 && c <= 1441 || c >= 1443 && c <= 1465 || c >= 1467 && c <= 1469 || c == 1471 || c >= 1473 && c <= 1474 || c == 1476 || c >= 1611 && c <= 1618 || c == 1648 || c >= 1750 && c <= 1756 || c >= 1757 && c <= 1759 || c >= 1760 && c <= 1764 || c >= 1767 && c <= 1768 || c >= 1770 && c <= 1773 || c >= 2305 && c <= 2307 || c == 2364 || c >= 2366 && c <= 2380 || c == 2381 || c >= 2385 && c <= 2388 || c >= 2402 && c <= 2403 || c >= 2433 && c <= 2435 || c == 2492 || c == 2494 || c == 2495 || c >= 2496 && c <= 2500 || c >= 2503 && c <= 2504 || c >= 2507 && c <= 2509 || c == 2519 || c >= 2530 && c <= 2531 || c == 2562 || c == 2620 || c == 2622 || c == 2623 || c >= 2624 && c <= 2626 || c >= 2631 && c <= 2632 || c >= 2635 && c <= 2637 || c >= 2672 && c <= 2673 || c >= 2689 && c <= 2691 || c == 2748 || c >= 2750 && c <= 2757 || c >= 2759 && c <= 2761 || c >= 2763 && c <= 2765 || c >= 2817 && c <= 2819 || c == 2876 || c >= 2878 && c <= 2883 || c >= 2887 && c <= 2888 || c >= 2891 && c <= 2893 || c >= 2902 && c <= 2903 || c >= 2946 && c <= 2947 || c >= 3006 && c <= 3010 || c >= 3014 && c <= 3016 || c >= 3018 && c <= 3021 || c == 3031 || c >= 3073 && c <= 3075 || c >= 3134 && c <= 3140 || c >= 3142 && c <= 3144 || c >= 3146 && c <= 3149 || c >= 3157 && c <= 3158 || c >= 3202 && c <= 3203 || c >= 3262 && c <= 3268 || c >= 3270 && c <= 3272 || c >= 3274 && c <= 3277 || c >= 3285 && c <= 3286 || c >= 3330 && c <= 3331 || c >= 3390 && c <= 3395 || c >= 3398 && c <= 3400 || c >= 3402 && c <= 3405 || c == 3415 || c == 3633 || c >= 3636 && c <= 3642 || c >= 3655 && c <= 3662 || c == 3761 || c >= 3764 && c <= 3769 || c >= 3771 && c <= 3772 || c >= 3784 && c <= 3789 || c >= 3864 && c <= 3865 || c == 3893 || c == 3895 || c == 3897 || c == 3902 || c == 3903 || c >= 3953 && c <= 3972 || c >= 3974 && c <= 3979 || c >= 3984 && c <= 3989 || c == 3991 || c >= 3993 && c <= 4013 || c >= 4017 && c <= 4023 || c == 4025 || c >= 8400 && c <= 8412 || c == 8417 || c >= 12330 && c <= 12335 || c == 12441 || c == 12442 || c == 183 || c == 720 || c == 721 || c == 903 || c == 1600 || c == 3654 || c == 3782 || c == 12293 || c >= 12337 && c <= 12341 || c >= 12445 && c <= 12446 || c >= 12540 && c <= 12542;
32.21637 +}
32.21638 +
32.21639 +var HEX_TABLE;
32.21640 +function $clinit_94(){
32.21641 +  $clinit_94 = nullMethod;
32.21642 +  NAMES = initValues(_3_3C_classLit, 52, 12, [$toCharArray('AElig'), $toCharArray('AElig;'), $toCharArray('AMP'), $toCharArray('AMP;'), $toCharArray('Aacute'), $toCharArray('Aacute;'), $toCharArray('Abreve;'), $toCharArray('Acirc'), $toCharArray('Acirc;'), $toCharArray('Acy;'), $toCharArray('Afr;'), $toCharArray('Agrave'), $toCharArray('Agrave;'), $toCharArray('Alpha;'), $toCharArray('Amacr;'), $toCharArray('And;'), $toCharArray('Aogon;'), $toCharArray('Aopf;'), $toCharArray('ApplyFunction;'), $toCharArray('Aring'), $toCharArray('Aring;'), $toCharArray('Ascr;'), $toCharArray('Assign;'), $toCharArray('Atilde'), $toCharArray('Atilde;'), $toCharArray('Auml'), $toCharArray('Auml;'), $toCharArray('Backslash;'), $toCharArray('Barv;'), $toCharArray('Barwed;'), $toCharArray('Bcy;'), $toCharArray('Because;'), $toCharArray('Bernoullis;'), $toCharArray('Beta;'), $toCharArray('Bfr;'), $toCharArray('Bopf;'), $toCharArray('Breve;'), $toCharArray('Bscr;'), $toCharArray('Bumpeq;'), $toCharArray('CHcy;'), $toCharArray('COPY'), $toCharArray('COPY;'), $toCharArray('Cacute;'), $toCharArray('Cap;'), $toCharArray('CapitalDifferentialD;'), $toCharArray('Cayleys;'), $toCharArray('Ccaron;'), $toCharArray('Ccedil'), $toCharArray('Ccedil;'), $toCharArray('Ccirc;'), $toCharArray('Cconint;'), $toCharArray('Cdot;'), $toCharArray('Cedilla;'), $toCharArray('CenterDot;'), $toCharArray('Cfr;'), $toCharArray('Chi;'), $toCharArray('CircleDot;'), $toCharArray('CircleMinus;'), $toCharArray('CirclePlus;'), $toCharArray('CircleTimes;'), $toCharArray('ClockwiseContourIntegral;'), $toCharArray('CloseCurlyDoubleQuote;'), $toCharArray('CloseCurlyQuote;'), $toCharArray('Colon;'), $toCharArray('Colone;'), $toCharArray('Congruent;'), $toCharArray('Conint;'), $toCharArray('ContourIntegral;'), $toCharArray('Copf;'), $toCharArray('Coproduct;'), $toCharArray('CounterClockwiseContourIntegral;'), $toCharArray('Cross;'), $toCharArray('Cscr;'), $toCharArray('Cup;'), $toCharArray('CupCap;'), $toCharArray('DD;'), $toCharArray('DDotrahd;'), $toCharArray('DJcy;'), $toCharArray('DScy;'), $toCharArray('DZcy;'), $toCharArray('Dagger;'), $toCharArray('Darr;'), $toCharArray('Dashv;'), $toCharArray('Dcaron;'), $toCharArray('Dcy;'), $toCharArray('Del;'), $toCharArray('Delta;'), $toCharArray('Dfr;'), $toCharArray('DiacriticalAcute;'), $toCharArray('DiacriticalDot;'), $toCharArray('DiacriticalDoubleAcute;'), $toCharArray('DiacriticalGrave;'), $toCharArray('DiacriticalTilde;'), $toCharArray('Diamond;'), $toCharArray('DifferentialD;'), $toCharArray('Dopf;'), $toCharArray('Dot;'), $toCharArray('DotDot;'), $toCharArray('DotEqual;'), $toCharArray('DoubleContourIntegral;'), $toCharArray('DoubleDot;'), $toCharArray('DoubleDownArrow;'), $toCharArray('DoubleLeftArrow;'), $toCharArray('DoubleLeftRightArrow;'), $toCharArray('DoubleLeftTee;'), $toCharArray('DoubleLongLeftArrow;'), $toCharArray('DoubleLongLeftRightArrow;'), $toCharArray('DoubleLongRightArrow;'), $toCharArray('DoubleRightArrow;'), $toCharArray('DoubleRightTee;'), $toCharArray('DoubleUpArrow;'), $toCharArray('DoubleUpDownArrow;'), $toCharArray('DoubleVerticalBar;'), $toCharArray('DownArrow;'), $toCharArray('DownArrowBar;'), $toCharArray('DownArrowUpArrow;'), $toCharArray('DownBreve;'), $toCharArray('DownLeftRightVector;'), $toCharArray('DownLeftTeeVector;'), $toCharArray('DownLeftVector;'), $toCharArray('DownLeftVectorBar;'), $toCharArray('DownRightTeeVector;'), $toCharArray('DownRightVector;'), $toCharArray('DownRightVectorBar;'), $toCharArray('DownTee;'), $toCharArray('DownTeeArrow;'), $toCharArray('Downarrow;'), $toCharArray('Dscr;'), $toCharArray('Dstrok;'), $toCharArray('ENG;'), $toCharArray('ETH'), $toCharArray('ETH;'), $toCharArray('Eacute'), $toCharArray('Eacute;'), $toCharArray('Ecaron;'), $toCharArray('Ecirc'), $toCharArray('Ecirc;'), $toCharArray('Ecy;'), $toCharArray('Edot;'), $toCharArray('Efr;'), $toCharArray('Egrave'), $toCharArray('Egrave;'), $toCharArray('Element;'), $toCharArray('Emacr;'), $toCharArray('EmptySmallSquare;'), $toCharArray('EmptyVerySmallSquare;'), $toCharArray('Eogon;'), $toCharArray('Eopf;'), $toCharArray('Epsilon;'), $toCharArray('Equal;'), $toCharArray('EqualTilde;'), $toCharArray('Equilibrium;'), $toCharArray('Escr;'), $toCharArray('Esim;'), $toCharArray('Eta;'), $toCharArray('Euml'), $toCharArray('Euml;'), $toCharArray('Exists;'), $toCharArray('ExponentialE;'), $toCharArray('Fcy;'), $toCharArray('Ffr;'), $toCharArray('FilledSmallSquare;'), $toCharArray('FilledVerySmallSquare;'), $toCharArray('Fopf;'), $toCharArray('ForAll;'), $toCharArray('Fouriertrf;'), $toCharArray('Fscr;'), $toCharArray('GJcy;'), $toCharArray('GT'), $toCharArray('GT;'), $toCharArray('Gamma;'), $toCharArray('Gammad;'), $toCharArray('Gbreve;'), $toCharArray('Gcedil;'), $toCharArray('Gcirc;'), $toCharArray('Gcy;'), $toCharArray('Gdot;'), $toCharArray('Gfr;'), $toCharArray('Gg;'), $toCharArray('Gopf;'), $toCharArray('GreaterEqual;'), $toCharArray('GreaterEqualLess;'), $toCharArray('GreaterFullEqual;'), $toCharArray('GreaterGreater;'), $toCharArray('GreaterLess;'), $toCharArray('GreaterSlantEqual;'), $toCharArray('GreaterTilde;'), $toCharArray('Gscr;'), $toCharArray('Gt;'), $toCharArray('HARDcy;'), $toCharArray('Hacek;'), $toCharArray('Hat;'), $toCharArray('Hcirc;'), $toCharArray('Hfr;'), $toCharArray('HilbertSpace;'), $toCharArray('Hopf;'), $toCharArray('HorizontalLine;'), $toCharArray('Hscr;'), $toCharArray('Hstrok;'), $toCharArray('HumpDownHump;'), $toCharArray('HumpEqual;'), $toCharArray('IEcy;'), $toCharArray('IJlig;'), $toCharArray('IOcy;'), $toCharArray('Iacute'), $toCharArray('Iacute;'), $toCharArray('Icirc'), $toCharArray('Icirc;'), $toCharArray('Icy;'), $toCharArray('Idot;'), $toCharArray('Ifr;'), $toCharArray('Igrave'), $toCharArray('Igrave;'), $toCharArray('Im;'), $toCharArray('Imacr;'), $toCharArray('ImaginaryI;'), $toCharArray('Implies;'), $toCharArray('Int;'), $toCharArray('Integral;'), $toCharArray('Intersection;'), $toCharArray('InvisibleComma;'), $toCharArray('InvisibleTimes;'), $toCharArray('Iogon;'), $toCharArray('Iopf;'), $toCharArray('Iota;'), $toCharArray('Iscr;'), $toCharArray('Itilde;'), $toCharArray('Iukcy;'), $toCharArray('Iuml'), $toCharArray('Iuml;'), $toCharArray('Jcirc;'), $toCharArray('Jcy;'), $toCharArray('Jfr;'), $toCharArray('Jopf;'), $toCharArray('Jscr;'), $toCharArray('Jsercy;'), $toCharArray('Jukcy;'), $toCharArray('KHcy;'), $toCharArray('KJcy;'), $toCharArray('Kappa;'), $toCharArray('Kcedil;'), $toCharArray('Kcy;'), $toCharArray('Kfr;'), $toCharArray('Kopf;'), $toCharArray('Kscr;'), $toCharArray('LJcy;'), $toCharArray('LT'), $toCharArray('LT;'), $toCharArray('Lacute;'), $toCharArray('Lambda;'), $toCharArray('Lang;'), $toCharArray('Laplacetrf;'), $toCharArray('Larr;'), $toCharArray('Lcaron;'), $toCharArray('Lcedil;'), $toCharArray('Lcy;'), $toCharArray('LeftAngleBracket;'), $toCharArray('LeftArrow;'), $toCharArray('LeftArrowBar;'), $toCharArray('LeftArrowRightArrow;'), $toCharArray('LeftCeiling;'), $toCharArray('LeftDoubleBracket;'), $toCharArray('LeftDownTeeVector;'), $toCharArray('LeftDownVector;'), $toCharArray('LeftDownVectorBar;'), $toCharArray('LeftFloor;'), $toCharArray('LeftRightArrow;'), $toCharArray('LeftRightVector;'), $toCharArray('LeftTee;'), $toCharArray('LeftTeeArrow;'), $toCharArray('LeftTeeVector;'), $toCharArray('LeftTriangle;'), $toCharArray('LeftTriangleBar;'), $toCharArray('LeftTriangleEqual;'), $toCharArray('LeftUpDownVector;'), $toCharArray('LeftUpTeeVector;'), $toCharArray('LeftUpVector;'), $toCharArray('LeftUpVectorBar;'), $toCharArray('LeftVector;'), $toCharArray('LeftVectorBar;'), $toCharArray('Leftarrow;'), $toCharArray('Leftrightarrow;'), $toCharArray('LessEqualGreater;'), $toCharArray('LessFullEqual;'), $toCharArray('LessGreater;'), $toCharArray('LessLess;'), $toCharArray('LessSlantEqual;'), $toCharArray('LessTilde;'), $toCharArray('Lfr;'), $toCharArray('Ll;'), $toCharArray('Lleftarrow;'), $toCharArray('Lmidot;'), $toCharArray('LongLeftArrow;'), $toCharArray('LongLeftRightArrow;'), $toCharArray('LongRightArrow;'), $toCharArray('Longleftarrow;'), $toCharArray('Longleftrightarrow;'), $toCharArray('Longrightarrow;'), $toCharArray('Lopf;'), $toCharArray('LowerLeftArrow;'), $toCharArray('LowerRightArrow;'), $toCharArray('Lscr;'), $toCharArray('Lsh;'), $toCharArray('Lstrok;'), $toCharArray('Lt;'), $toCharArray('Map;'), $toCharArray('Mcy;'), $toCharArray('MediumSpace;'), $toCharArray('Mellintrf;'), $toCharArray('Mfr;'), $toCharArray('MinusPlus;'), $toCharArray('Mopf;'), $toCharArray('Mscr;'), $toCharArray('Mu;'), $toCharArray('NJcy;'), $toCharArray('Nacute;'), $toCharArray('Ncaron;'), $toCharArray('Ncedil;'), $toCharArray('Ncy;'), $toCharArray('NegativeMediumSpace;'), $toCharArray('NegativeThickSpace;'), $toCharArray('NegativeThinSpace;'), $toCharArray('NegativeVeryThinSpace;'), $toCharArray('NestedGreaterGreater;'), $toCharArray('NestedLessLess;'), $toCharArray('NewLine;'), $toCharArray('Nfr;'), $toCharArray('NoBreak;'), $toCharArray('NonBreakingSpace;'), $toCharArray('Nopf;'), $toCharArray('Not;'), $toCharArray('NotCongruent;'), $toCharArray('NotCupCap;'), $toCharArray('NotDoubleVerticalBar;'), $toCharArray('NotElement;'), $toCharArray('NotEqual;'), $toCharArray('NotExists;'), $toCharArray('NotGreater;'), $toCharArray('NotGreaterEqual;'), $toCharArray('NotGreaterLess;'), $toCharArray('NotGreaterTilde;'), $toCharArray('NotLeftTriangle;'), $toCharArray('NotLeftTriangleEqual;'), $toCharArray('NotLess;'), $toCharArray('NotLessEqual;'), $toCharArray('NotLessGreater;'), $toCharArray('NotLessTilde;'), $toCharArray('NotPrecedes;'), $toCharArray('NotPrecedesSlantEqual;'), $toCharArray('NotReverseElement;'), $toCharArray('NotRightTriangle;'), $toCharArray('NotRightTriangleEqual;'), $toCharArray('NotSquareSubsetEqual;'), $toCharArray('NotSquareSupersetEqual;'), $toCharArray('NotSubsetEqual;'), $toCharArray('NotSucceeds;'), $toCharArray('NotSucceedsSlantEqual;'), $toCharArray('NotSupersetEqual;'), $toCharArray('NotTilde;'), $toCharArray('NotTildeEqual;'), $toCharArray('NotTildeFullEqual;'), $toCharArray('NotTildeTilde;'), $toCharArray('NotVerticalBar;'), $toCharArray('Nscr;'), $toCharArray('Ntilde'), $toCharArray('Ntilde;'), $toCharArray('Nu;'), $toCharArray('OElig;'), $toCharArray('Oacute'), $toCharArray('Oacute;'), $toCharArray('Ocirc'), $toCharArray('Ocirc;'), $toCharArray('Ocy;'), $toCharArray('Odblac;'), $toCharArray('Ofr;'), $toCharArray('Ograve'), $toCharArray('Ograve;'), $toCharArray('Omacr;'), $toCharArray('Omega;'), $toCharArray('Omicron;'), $toCharArray('Oopf;'), $toCharArray('OpenCurlyDoubleQuote;'), $toCharArray('OpenCurlyQuote;'), $toCharArray('Or;'), $toCharArray('Oscr;'), $toCharArray('Oslash'), $toCharArray('Oslash;'), $toCharArray('Otilde'), $toCharArray('Otilde;'), $toCharArray('Otimes;'), $toCharArray('Ouml'), $toCharArray('Ouml;'), $toCharArray('OverBar;'), $toCharArray('OverBrace;'), $toCharArray('OverBracket;'), $toCharArray('OverParenthesis;'), $toCharArray('PartialD;'), $toCharArray('Pcy;'), $toCharArray('Pfr;'), $toCharArray('Phi;'), $toCharArray('Pi;'), $toCharArray('PlusMinus;'), $toCharArray('Poincareplane;'), $toCharArray('Popf;'), $toCharArray('Pr;'), $toCharArray('Precedes;'), $toCharArray('PrecedesEqual;'), $toCharArray('PrecedesSlantEqual;'), $toCharArray('PrecedesTilde;'), $toCharArray('Prime;'), $toCharArray('Product;'), $toCharArray('Proportion;'), $toCharArray('Proportional;'), $toCharArray('Pscr;'), $toCharArray('Psi;'), $toCharArray('QUOT'), $toCharArray('QUOT;'), $toCharArray('Qfr;'), $toCharArray('Qopf;'), $toCharArray('Qscr;'), $toCharArray('RBarr;'), $toCharArray('REG'), $toCharArray('REG;'), $toCharArray('Racute;'), $toCharArray('Rang;'), $toCharArray('Rarr;'), $toCharArray('Rarrtl;'), $toCharArray('Rcaron;'), $toCharArray('Rcedil;'), $toCharArray('Rcy;'), $toCharArray('Re;'), $toCharArray('ReverseElement;'), $toCharArray('ReverseEquilibrium;'), $toCharArray('ReverseUpEquilibrium;'), $toCharArray('Rfr;'), $toCharArray('Rho;'), $toCharArray('RightAngleBracket;'), $toCharArray('RightArrow;'), $toCharArray('RightArrowBar;'), $toCharArray('RightArrowLeftArrow;'), $toCharArray('RightCeiling;'), $toCharArray('RightDoubleBracket;'), $toCharArray('RightDownTeeVector;'), $toCharArray('RightDownVector;'), $toCharArray('RightDownVectorBar;'), $toCharArray('RightFloor;'), $toCharArray('RightTee;'), $toCharArray('RightTeeArrow;'), $toCharArray('RightTeeVector;'), $toCharArray('RightTriangle;'), $toCharArray('RightTriangleBar;'), $toCharArray('RightTriangleEqual;'), $toCharArray('RightUpDownVector;'), $toCharArray('RightUpTeeVector;'), $toCharArray('RightUpVector;'), $toCharArray('RightUpVectorBar;'), $toCharArray('RightVector;'), $toCharArray('RightVectorBar;'), $toCharArray('Rightarrow;'), $toCharArray('Ropf;'), $toCharArray('RoundImplies;'), $toCharArray('Rrightarrow;'), $toCharArray('Rscr;'), $toCharArray('Rsh;'), $toCharArray('RuleDelayed;'), $toCharArray('SHCHcy;'), $toCharArray('SHcy;'), $toCharArray('SOFTcy;'), $toCharArray('Sacute;'), $toCharArray('Sc;'), $toCharArray('Scaron;'), $toCharArray('Scedil;'), $toCharArray('Scirc;'), $toCharArray('Scy;'), $toCharArray('Sfr;'), $toCharArray('ShortDownArrow;'), $toCharArray('ShortLeftArrow;'), $toCharArray('ShortRightArrow;'), $toCharArray('ShortUpArrow;'), $toCharArray('Sigma;'), $toCharArray('SmallCircle;'), $toCharArray('Sopf;'), $toCharArray('Sqrt;'), $toCharArray('Square;'), $toCharArray('SquareIntersection;'), $toCharArray('SquareSubset;'), $toCharArray('SquareSubsetEqual;'), $toCharArray('SquareSuperset;'), $toCharArray('SquareSupersetEqual;'), $toCharArray('SquareUnion;'), $toCharArray('Sscr;'), $toCharArray('Star;'), $toCharArray('Sub;'), $toCharArray('Subset;'), $toCharArray('SubsetEqual;'), $toCharArray('Succeeds;'), $toCharArray('SucceedsEqual;'), $toCharArray('SucceedsSlantEqual;'), $toCharArray('SucceedsTilde;'), $toCharArray('SuchThat;'), $toCharArray('Sum;'), $toCharArray('Sup;'), $toCharArray('Superset;'), $toCharArray('SupersetEqual;'), $toCharArray('Supset;'), $toCharArray('THORN'), $toCharArray('THORN;'), $toCharArray('TRADE;'), $toCharArray('TSHcy;'), $toCharArray('TScy;'), $toCharArray('Tab;'), $toCharArray('Tau;'), $toCharArray('Tcaron;'), $toCharArray('Tcedil;'), $toCharArray('Tcy;'), $toCharArray('Tfr;'), $toCharArray('Therefore;'), $toCharArray('Theta;'), $toCharArray('ThinSpace;'), $toCharArray('Tilde;'), $toCharArray('TildeEqual;'), $toCharArray('TildeFullEqual;'), $toCharArray('TildeTilde;'), $toCharArray('Topf;'), $toCharArray('TripleDot;'), $toCharArray('Tscr;'), $toCharArray('Tstrok;'), $toCharArray('Uacute'), $toCharArray('Uacute;'), $toCharArray('Uarr;'), $toCharArray('Uarrocir;'), $toCharArray('Ubrcy;'), $toCharArray('Ubreve;'), $toCharArray('Ucirc'), $toCharArray('Ucirc;'), $toCharArray('Ucy;'), $toCharArray('Udblac;'), $toCharArray('Ufr;'), $toCharArray('Ugrave'), $toCharArray('Ugrave;'), $toCharArray('Umacr;'), $toCharArray('UnderBar;'), $toCharArray('UnderBrace;'), $toCharArray('UnderBracket;'), $toCharArray('UnderParenthesis;'), $toCharArray('Union;'), $toCharArray('UnionPlus;'), $toCharArray('Uogon;'), $toCharArray('Uopf;'), $toCharArray('UpArrow;'), $toCharArray('UpArrowBar;'), $toCharArray('UpArrowDownArrow;'), $toCharArray('UpDownArrow;'), $toCharArray('UpEquilibrium;'), $toCharArray('UpTee;'), $toCharArray('UpTeeArrow;'), $toCharArray('Uparrow;'), $toCharArray('Updownarrow;'), $toCharArray('UpperLeftArrow;'), $toCharArray('UpperRightArrow;'), $toCharArray('Upsi;'), $toCharArray('Upsilon;'), $toCharArray('Uring;'), $toCharArray('Uscr;'), $toCharArray('Utilde;'), $toCharArray('Uuml'), $toCharArray('Uuml;'), $toCharArray('VDash;'), $toCharArray('Vbar;'), $toCharArray('Vcy;'), $toCharArray('Vdash;'), $toCharArray('Vdashl;'), $toCharArray('Vee;'), $toCharArray('Verbar;'), $toCharArray('Vert;'), $toCharArray('VerticalBar;'), $toCharArray('VerticalLine;'), $toCharArray('VerticalSeparator;'), $toCharArray('VerticalTilde;'), $toCharArray('VeryThinSpace;'), $toCharArray('Vfr;'), $toCharArray('Vopf;'), $toCharArray('Vscr;'), $toCharArray('Vvdash;'), $toCharArray('Wcirc;'), $toCharArray('Wedge;'), $toCharArray('Wfr;'), $toCharArray('Wopf;'), $toCharArray('Wscr;'), $toCharArray('Xfr;'), $toCharArray('Xi;'), $toCharArray('Xopf;'), $toCharArray('Xscr;'), $toCharArray('YAcy;'), $toCharArray('YIcy;'), $toCharArray('YUcy;'), $toCharArray('Yacute'), $toCharArray('Yacute;'), $toCharArray('Ycirc;'), $toCharArray('Ycy;'), $toCharArray('Yfr;'), $toCharArray('Yopf;'), $toCharArray('Yscr;'), $toCharArray('Yuml;'), $toCharArray('ZHcy;'), $toCharArray('Zacute;'), $toCharArray('Zcaron;'), $toCharArray('Zcy;'), $toCharArray('Zdot;'), $toCharArray('ZeroWidthSpace;'), $toCharArray('Zeta;'), $toCharArray('Zfr;'), $toCharArray('Zopf;'), $toCharArray('Zscr;'), $toCharArray('aacute'), $toCharArray('aacute;'), $toCharArray('abreve;'), $toCharArray('ac;'), $toCharArray('acd;'), $toCharArray('acirc'), $toCharArray('acirc;'), $toCharArray('acute'), $toCharArray('acute;'), $toCharArray('acy;'), $toCharArray('aelig'), $toCharArray('aelig;'), $toCharArray('af;'), $toCharArray('afr;'), $toCharArray('agrave'), $toCharArray('agrave;'), $toCharArray('alefsym;'), $toCharArray('aleph;'), $toCharArray('alpha;'), $toCharArray('amacr;'), $toCharArray('amalg;'), $toCharArray('amp'), $toCharArray('amp;'), $toCharArray('and;'), $toCharArray('andand;'), $toCharArray('andd;'), $toCharArray('andslope;'), $toCharArray('andv;'), $toCharArray('ang;'), $toCharArray('ange;'), $toCharArray('angle;'), $toCharArray('angmsd;'), $toCharArray('angmsdaa;'), $toCharArray('angmsdab;'), $toCharArray('angmsdac;'), $toCharArray('angmsdad;'), $toCharArray('angmsdae;'), $toCharArray('angmsdaf;'), $toCharArray('angmsdag;'), $toCharArray('angmsdah;'), $toCharArray('angrt;'), $toCharArray('angrtvb;'), $toCharArray('angrtvbd;'), $toCharArray('angsph;'), $toCharArray('angst;'), $toCharArray('angzarr;'), $toCharArray('aogon;'), $toCharArray('aopf;'), $toCharArray('ap;'), $toCharArray('apE;'), $toCharArray('apacir;'), $toCharArray('ape;'), $toCharArray('apid;'), $toCharArray('apos;'), $toCharArray('approx;'), $toCharArray('approxeq;'), $toCharArray('aring'), $toCharArray('aring;'), $toCharArray('ascr;'), $toCharArray('ast;'), $toCharArray('asymp;'), $toCharArray('asympeq;'), $toCharArray('atilde'), $toCharArray('atilde;'), $toCharArray('auml'), $toCharArray('auml;'), $toCharArray('awconint;'), $toCharArray('awint;'), $toCharArray('bNot;'), $toCharArray('backcong;'), $toCharArray('backepsilon;'), $toCharArray('backprime;'), $toCharArray('backsim;'), $toCharArray('backsimeq;'), $toCharArray('barvee;'), $toCharArray('barwed;'), $toCharArray('barwedge;'), $toCharArray('bbrk;'), $toCharArray('bbrktbrk;'), $toCharArray('bcong;'), $toCharArray('bcy;'), $toCharArray('bdquo;'), $toCharArray('becaus;'), $toCharArray('because;'), $toCharArray('bemptyv;'), $toCharArray('bepsi;'), $toCharArray('bernou;'), $toCharArray('beta;'), $toCharArray('beth;'), $toCharArray('between;'), $toCharArray('bfr;'), $toCharArray('bigcap;'), $toCharArray('bigcirc;'), $toCharArray('bigcup;'), $toCharArray('bigodot;'), $toCharArray('bigoplus;'), $toCharArray('bigotimes;'), $toCharArray('bigsqcup;'), $toCharArray('bigstar;'), $toCharArray('bigtriangledown;'), $toCharArray('bigtriangleup;'), $toCharArray('biguplus;'), $toCharArray('bigvee;'), $toCharArray('bigwedge;'), $toCharArray('bkarow;'), $toCharArray('blacklozenge;'), $toCharArray('blacksquare;'), $toCharArray('blacktriangle;'), $toCharArray('blacktriangledown;'), $toCharArray('blacktriangleleft;'), $toCharArray('blacktriangleright;'), $toCharArray('blank;'), $toCharArray('blk12;'), $toCharArray('blk14;'), $toCharArray('blk34;'), $toCharArray('block;'), $toCharArray('bnot;'), $toCharArray('bopf;'), $toCharArray('bot;'), $toCharArray('bottom;'), $toCharArray('bowtie;'), $toCharArray('boxDL;'), $toCharArray('boxDR;'), $toCharArray('boxDl;'), $toCharArray('boxDr;'), $toCharArray('boxH;'), $toCharArray('boxHD;'), $toCharArray('boxHU;'), $toCharArray('boxHd;'), $toCharArray('boxHu;'), $toCharArray('boxUL;'), $toCharArray('boxUR;'), $toCharArray('boxUl;'), $toCharArray('boxUr;'), $toCharArray('boxV;'), $toCharArray('boxVH;'), $toCharArray('boxVL;'), $toCharArray('boxVR;'), $toCharArray('boxVh;'), $toCharArray('boxVl;'), $toCharArray('boxVr;'), $toCharArray('boxbox;'), $toCharArray('boxdL;'), $toCharArray('boxdR;'), $toCharArray('boxdl;'), $toCharArray('boxdr;'), $toCharArray('boxh;'), $toCharArray('boxhD;'), $toCharArray('boxhU;'), $toCharArray('boxhd;'), $toCharArray('boxhu;'), $toCharArray('boxminus;'), $toCharArray('boxplus;'), $toCharArray('boxtimes;'), $toCharArray('boxuL;'), $toCharArray('boxuR;'), $toCharArray('boxul;'), $toCharArray('boxur;'), $toCharArray('boxv;'), $toCharArray('boxvH;'), $toCharArray('boxvL;'), $toCharArray('boxvR;'), $toCharArray('boxvh;'), $toCharArray('boxvl;'), $toCharArray('boxvr;'), $toCharArray('bprime;'), $toCharArray('breve;'), $toCharArray('brvbar'), $toCharArray('brvbar;'), $toCharArray('bscr;'), $toCharArray('bsemi;'), $toCharArray('bsim;'), $toCharArray('bsime;'), $toCharArray('bsol;'), $toCharArray('bsolb;'), $toCharArray('bull;'), $toCharArray('bullet;'), $toCharArray('bump;'), $toCharArray('bumpE;'), $toCharArray('bumpe;'), $toCharArray('bumpeq;'), $toCharArray('cacute;'), $toCharArray('cap;'), $toCharArray('capand;'), $toCharArray('capbrcup;'), $toCharArray('capcap;'), $toCharArray('capcup;'), $toCharArray('capdot;'), $toCharArray('caret;'), $toCharArray('caron;'), $toCharArray('ccaps;'), $toCharArray('ccaron;'), $toCharArray('ccedil'), $toCharArray('ccedil;'), $toCharArray('ccirc;'), $toCharArray('ccups;'), $toCharArray('ccupssm;'), $toCharArray('cdot;'), $toCharArray('cedil'), $toCharArray('cedil;'), $toCharArray('cemptyv;'), $toCharArray('cent'), $toCharArray('cent;'), $toCharArray('centerdot;'), $toCharArray('cfr;'), $toCharArray('chcy;'), $toCharArray('check;'), $toCharArray('checkmark;'), $toCharArray('chi;'), $toCharArray('cir;'), $toCharArray('cirE;'), $toCharArray('circ;'), $toCharArray('circeq;'), $toCharArray('circlearrowleft;'), $toCharArray('circlearrowright;'), $toCharArray('circledR;'), $toCharArray('circledS;'), $toCharArray('circledast;'), $toCharArray('circledcirc;'), $toCharArray('circleddash;'), $toCharArray('cire;'), $toCharArray('cirfnint;'), $toCharArray('cirmid;'), $toCharArray('cirscir;'), $toCharArray('clubs;'), $toCharArray('clubsuit;'), $toCharArray('colon;'), $toCharArray('colone;'), $toCharArray('coloneq;'), $toCharArray('comma;'), $toCharArray('commat;'), $toCharArray('comp;'), $toCharArray('compfn;'), $toCharArray('complement;'), $toCharArray('complexes;'), $toCharArray('cong;'), $toCharArray('congdot;'), $toCharArray('conint;'), $toCharArray('copf;'), $toCharArray('coprod;'), $toCharArray('copy'), $toCharArray('copy;'), $toCharArray('copysr;'), $toCharArray('crarr;'), $toCharArray('cross;'), $toCharArray('cscr;'), $toCharArray('csub;'), $toCharArray('csube;'), $toCharArray('csup;'), $toCharArray('csupe;'), $toCharArray('ctdot;'), $toCharArray('cudarrl;'), $toCharArray('cudarrr;'), $toCharArray('cuepr;'), $toCharArray('cuesc;'), $toCharArray('cularr;'), $toCharArray('cularrp;'), $toCharArray('cup;'), $toCharArray('cupbrcap;'), $toCharArray('cupcap;'), $toCharArray('cupcup;'), $toCharArray('cupdot;'), $toCharArray('cupor;'), $toCharArray('curarr;'), $toCharArray('curarrm;'), $toCharArray('curlyeqprec;'), $toCharArray('curlyeqsucc;'), $toCharArray('curlyvee;'), $toCharArray('curlywedge;'), $toCharArray('curren'), $toCharArray('curren;'), $toCharArray('curvearrowleft;'), $toCharArray('curvearrowright;'), $toCharArray('cuvee;'), $toCharArray('cuwed;'), $toCharArray('cwconint;'), $toCharArray('cwint;'), $toCharArray('cylcty;'), $toCharArray('dArr;'), $toCharArray('dHar;'), $toCharArray('dagger;'), $toCharArray('daleth;'), $toCharArray('darr;'), $toCharArray('dash;'), $toCharArray('dashv;'), $toCharArray('dbkarow;'), $toCharArray('dblac;'), $toCharArray('dcaron;'), $toCharArray('dcy;'), $toCharArray('dd;'), $toCharArray('ddagger;'), $toCharArray('ddarr;'), $toCharArray('ddotseq;'), $toCharArray('deg'), $toCharArray('deg;'), $toCharArray('delta;'), $toCharArray('demptyv;'), $toCharArray('dfisht;'), $toCharArray('dfr;'), $toCharArray('dharl;'), $toCharArray('dharr;'), $toCharArray('diam;'), $toCharArray('diamond;'), $toCharArray('diamondsuit;'), $toCharArray('diams;'), $toCharArray('die;'), $toCharArray('digamma;'), $toCharArray('disin;'), $toCharArray('div;'), $toCharArray('divide'), $toCharArray('divide;'), $toCharArray('divideontimes;'), $toCharArray('divonx;'), $toCharArray('djcy;'), $toCharArray('dlcorn;'), $toCharArray('dlcrop;'), $toCharArray('dollar;'), $toCharArray('dopf;'), $toCharArray('dot;'), $toCharArray('doteq;'), $toCharArray('doteqdot;'), $toCharArray('dotminus;'), $toCharArray('dotplus;'), $toCharArray('dotsquare;'), $toCharArray('doublebarwedge;'), $toCharArray('downarrow;'), $toCharArray('downdownarrows;'), $toCharArray('downharpoonleft;'), $toCharArray('downharpoonright;'), $toCharArray('drbkarow;'), $toCharArray('drcorn;'), $toCharArray('drcrop;'), $toCharArray('dscr;'), $toCharArray('dscy;'), $toCharArray('dsol;'), $toCharArray('dstrok;'), $toCharArray('dtdot;'), $toCharArray('dtri;'), $toCharArray('dtrif;'), $toCharArray('duarr;'), $toCharArray('duhar;'), $toCharArray('dwangle;'), $toCharArray('dzcy;'), $toCharArray('dzigrarr;'), $toCharArray('eDDot;'), $toCharArray('eDot;'), $toCharArray('eacute'), $toCharArray('eacute;'), $toCharArray('easter;'), $toCharArray('ecaron;'), $toCharArray('ecir;'), $toCharArray('ecirc'), $toCharArray('ecirc;'), $toCharArray('ecolon;'), $toCharArray('ecy;'), $toCharArray('edot;'), $toCharArray('ee;'), $toCharArray('efDot;'), $toCharArray('efr;'), $toCharArray('eg;'), $toCharArray('egrave'), $toCharArray('egrave;'), $toCharArray('egs;'), $toCharArray('egsdot;'), $toCharArray('el;'), $toCharArray('elinters;'), $toCharArray('ell;'), $toCharArray('els;'), $toCharArray('elsdot;'), $toCharArray('emacr;'), $toCharArray('empty;'), $toCharArray('emptyset;'), $toCharArray('emptyv;'), $toCharArray('emsp13;'), $toCharArray('emsp14;'), $toCharArray('emsp;'), $toCharArray('eng;'), $toCharArray('ensp;'), $toCharArray('eogon;'), $toCharArray('eopf;'), $toCharArray('epar;'), $toCharArray('eparsl;'), $toCharArray('eplus;'), $toCharArray('epsi;'), $toCharArray('epsilon;'), $toCharArray('epsiv;'), $toCharArray('eqcirc;'), $toCharArray('eqcolon;'), $toCharArray('eqsim;'), $toCharArray('eqslantgtr;'), $toCharArray('eqslantless;'), $toCharArray('equals;'), $toCharArray('equest;'), $toCharArray('equiv;'), $toCharArray('equivDD;'), $toCharArray('eqvparsl;'), $toCharArray('erDot;'), $toCharArray('erarr;'), $toCharArray('escr;'), $toCharArray('esdot;'), $toCharArray('esim;'), $toCharArray('eta;'), $toCharArray('eth'), $toCharArray('eth;'), $toCharArray('euml'), $toCharArray('euml;'), $toCharArray('euro;'), $toCharArray('excl;'), $toCharArray('exist;'), $toCharArray('expectation;'), $toCharArray('exponentiale;'), $toCharArray('fallingdotseq;'), $toCharArray('fcy;'), $toCharArray('female;'), $toCharArray('ffilig;'), $toCharArray('fflig;'), $toCharArray('ffllig;'), $toCharArray('ffr;'), $toCharArray('filig;'), $toCharArray('flat;'), $toCharArray('fllig;'), $toCharArray('fltns;'), $toCharArray('fnof;'), $toCharArray('fopf;'), $toCharArray('forall;'), $toCharArray('fork;'), $toCharArray('forkv;'), $toCharArray('fpartint;'), $toCharArray('frac12'), $toCharArray('frac12;'), $toCharArray('frac13;'), $toCharArray('frac14'), $toCharArray('frac14;'), $toCharArray('frac15;'), $toCharArray('frac16;'), $toCharArray('frac18;'), $toCharArray('frac23;'), $toCharArray('frac25;'), $toCharArray('frac34'), $toCharArray('frac34;'), $toCharArray('frac35;'), $toCharArray('frac38;'), $toCharArray('frac45;'), $toCharArray('frac56;'), $toCharArray('frac58;'), $toCharArray('frac78;'), $toCharArray('frasl;'), $toCharArray('frown;'), $toCharArray('fscr;'), $toCharArray('gE;'), $toCharArray('gEl;'), $toCharArray('gacute;'), $toCharArray('gamma;'), $toCharArray('gammad;'), $toCharArray('gap;'), $toCharArray('gbreve;'), $toCharArray('gcirc;'), $toCharArray('gcy;'), $toCharArray('gdot;'), $toCharArray('ge;'), $toCharArray('gel;'), $toCharArray('geq;'), $toCharArray('geqq;'), $toCharArray('geqslant;'), $toCharArray('ges;'), $toCharArray('gescc;'), $toCharArray('gesdot;'), $toCharArray('gesdoto;'), $toCharArray('gesdotol;'), $toCharArray('gesles;'), $toCharArray('gfr;'), $toCharArray('gg;'), $toCharArray('ggg;'), $toCharArray('gimel;'), $toCharArray('gjcy;'), $toCharArray('gl;'), $toCharArray('glE;'), $toCharArray('gla;'), $toCharArray('glj;'), $toCharArray('gnE;'), $toCharArray('gnap;'), $toCharArray('gnapprox;'), $toCharArray('gne;'), $toCharArray('gneq;'), $toCharArray('gneqq;'), $toCharArray('gnsim;'), $toCharArray('gopf;'), $toCharArray('grave;'), $toCharArray('gscr;'), $toCharArray('gsim;'), $toCharArray('gsime;'), $toCharArray('gsiml;'), $toCharArray('gt'), $toCharArray('gt;'), $toCharArray('gtcc;'), $toCharArray('gtcir;'), $toCharArray('gtdot;'), $toCharArray('gtlPar;'), $toCharArray('gtquest;'), $toCharArray('gtrapprox;'), $toCharArray('gtrarr;'), $toCharArray('gtrdot;'), $toCharArray('gtreqless;'), $toCharArray('gtreqqless;'), $toCharArray('gtrless;'), $toCharArray('gtrsim;'), $toCharArray('hArr;'), $toCharArray('hairsp;'), $toCharArray('half;'), $toCharArray('hamilt;'), $toCharArray('hardcy;'), $toCharArray('harr;'), $toCharArray('harrcir;'), $toCharArray('harrw;'), $toCharArray('hbar;'), $toCharArray('hcirc;'), $toCharArray('hearts;'), $toCharArray('heartsuit;'), $toCharArray('hellip;'), $toCharArray('hercon;'), $toCharArray('hfr;'), $toCharArray('hksearow;'), $toCharArray('hkswarow;'), $toCharArray('hoarr;'), $toCharArray('homtht;'), $toCharArray('hookleftarrow;'), $toCharArray('hookrightarrow;'), $toCharArray('hopf;'), $toCharArray('horbar;'), $toCharArray('hscr;'), $toCharArray('hslash;'), $toCharArray('hstrok;'), $toCharArray('hybull;'), $toCharArray('hyphen;'), $toCharArray('iacute'), $toCharArray('iacute;'), $toCharArray('ic;'), $toCharArray('icirc'), $toCharArray('icirc;'), $toCharArray('icy;'), $toCharArray('iecy;'), $toCharArray('iexcl'), $toCharArray('iexcl;'), $toCharArray('iff;'), $toCharArray('ifr;'), $toCharArray('igrave'), $toCharArray('igrave;'), $toCharArray('ii;'), $toCharArray('iiiint;'), $toCharArray('iiint;'), $toCharArray('iinfin;'), $toCharArray('iiota;'), $toCharArray('ijlig;'), $toCharArray('imacr;'), $toCharArray('image;'), $toCharArray('imagline;'), $toCharArray('imagpart;'), $toCharArray('imath;'), $toCharArray('imof;'), $toCharArray('imped;'), $toCharArray('in;'), $toCharArray('incare;'), $toCharArray('infin;'), $toCharArray('infintie;'), $toCharArray('inodot;'), $toCharArray('int;'), $toCharArray('intcal;'), $toCharArray('integers;'), $toCharArray('intercal;'), $toCharArray('intlarhk;'), $toCharArray('intprod;'), $toCharArray('iocy;'), $toCharArray('iogon;'), $toCharArray('iopf;'), $toCharArray('iota;'), $toCharArray('iprod;'), $toCharArray('iquest'), $toCharArray('iquest;'), $toCharArray('iscr;'), $toCharArray('isin;'), $toCharArray('isinE;'), $toCharArray('isindot;'), $toCharArray('isins;'), $toCharArray('isinsv;'), $toCharArray('isinv;'), $toCharArray('it;'), $toCharArray('itilde;'), $toCharArray('iukcy;'), $toCharArray('iuml'), $toCharArray('iuml;'), $toCharArray('jcirc;'), $toCharArray('jcy;'), $toCharArray('jfr;'), $toCharArray('jmath;'), $toCharArray('jopf;'), $toCharArray('jscr;'), $toCharArray('jsercy;'), $toCharArray('jukcy;'), $toCharArray('kappa;'), $toCharArray('kappav;'), $toCharArray('kcedil;'), $toCharArray('kcy;'), $toCharArray('kfr;'), $toCharArray('kgreen;'), $toCharArray('khcy;'), $toCharArray('kjcy;'), $toCharArray('kopf;'), $toCharArray('kscr;'), $toCharArray('lAarr;'), $toCharArray('lArr;'), $toCharArray('lAtail;'), $toCharArray('lBarr;'), $toCharArray('lE;'), $toCharArray('lEg;'), $toCharArray('lHar;'), $toCharArray('lacute;'), $toCharArray('laemptyv;'), $toCharArray('lagran;'), $toCharArray('lambda;'), $toCharArray('lang;'), $toCharArray('langd;'), $toCharArray('langle;'), $toCharArray('lap;'), $toCharArray('laquo'), $toCharArray('laquo;'), $toCharArray('larr;'), $toCharArray('larrb;'), $toCharArray('larrbfs;'), $toCharArray('larrfs;'), $toCharArray('larrhk;'), $toCharArray('larrlp;'), $toCharArray('larrpl;'), $toCharArray('larrsim;'), $toCharArray('larrtl;'), $toCharArray('lat;'), $toCharArray('latail;'), $toCharArray('late;'), $toCharArray('lbarr;'), $toCharArray('lbbrk;'), $toCharArray('lbrace;'), $toCharArray('lbrack;'), $toCharArray('lbrke;'), $toCharArray('lbrksld;'), $toCharArray('lbrkslu;'), $toCharArray('lcaron;'), $toCharArray('lcedil;'), $toCharArray('lceil;'), $toCharArray('lcub;'), $toCharArray('lcy;'), $toCharArray('ldca;'), $toCharArray('ldquo;'), $toCharArray('ldquor;'), $toCharArray('ldrdhar;'), $toCharArray('ldrushar;'), $toCharArray('ldsh;'), $toCharArray('le;'), $toCharArray('leftarrow;'), $toCharArray('leftarrowtail;'), $toCharArray('leftharpoondown;'), $toCharArray('leftharpoonup;'), $toCharArray('leftleftarrows;'), $toCharArray('leftrightarrow;'), $toCharArray('leftrightarrows;'), $toCharArray('leftrightharpoons;'), $toCharArray('leftrightsquigarrow;'), $toCharArray('leftthreetimes;'), $toCharArray('leg;'), $toCharArray('leq;'), $toCharArray('leqq;'), $toCharArray('leqslant;'), $toCharArray('les;'), $toCharArray('lescc;'), $toCharArray('lesdot;'), $toCharArray('lesdoto;'), $toCharArray('lesdotor;'), $toCharArray('lesges;'), $toCharArray('lessapprox;'), $toCharArray('lessdot;'), $toCharArray('lesseqgtr;'), $toCharArray('lesseqqgtr;'), $toCharArray('lessgtr;'), $toCharArray('lesssim;'), $toCharArray('lfisht;'), $toCharArray('lfloor;'), $toCharArray('lfr;'), $toCharArray('lg;'), $toCharArray('lgE;'), $toCharArray('lhard;'), $toCharArray('lharu;'), $toCharArray('lharul;'), $toCharArray('lhblk;'), $toCharArray('ljcy;'), $toCharArray('ll;'), $toCharArray('llarr;'), $toCharArray('llcorner;'), $toCharArray('llhard;'), $toCharArray('lltri;'), $toCharArray('lmidot;'), $toCharArray('lmoust;'), $toCharArray('lmoustache;'), $toCharArray('lnE;'), $toCharArray('lnap;'), $toCharArray('lnapprox;'), $toCharArray('lne;'), $toCharArray('lneq;'), $toCharArray('lneqq;'), $toCharArray('lnsim;'), $toCharArray('loang;'), $toCharArray('loarr;'), $toCharArray('lobrk;'), $toCharArray('longleftarrow;'), $toCharArray('longleftrightarrow;'), $toCharArray('longmapsto;'), $toCharArray('longrightarrow;'), $toCharArray('looparrowleft;'), $toCharArray('looparrowright;'), $toCharArray('lopar;'), $toCharArray('lopf;'), $toCharArray('loplus;'), $toCharArray('lotimes;'), $toCharArray('lowast;'), $toCharArray('lowbar;'), $toCharArray('loz;'), $toCharArray('lozenge;'), $toCharArray('lozf;'), $toCharArray('lpar;'), $toCharArray('lparlt;'), $toCharArray('lrarr;'), $toCharArray('lrcorner;'), $toCharArray('lrhar;'), $toCharArray('lrhard;'), $toCharArray('lrm;'), $toCharArray('lrtri;'), $toCharArray('lsaquo;'), $toCharArray('lscr;'), $toCharArray('lsh;'), $toCharArray('lsim;'), $toCharArray('lsime;'), $toCharArray('lsimg;'), $toCharArray('lsqb;'), $toCharArray('lsquo;'), $toCharArray('lsquor;'), $toCharArray('lstrok;'), $toCharArray('lt'), $toCharArray('lt;'), $toCharArray('ltcc;'), $toCharArray('ltcir;'), $toCharArray('ltdot;'), $toCharArray('lthree;'), $toCharArray('ltimes;'), $toCharArray('ltlarr;'), $toCharArray('ltquest;'), $toCharArray('ltrPar;'), $toCharArray('ltri;'), $toCharArray('ltrie;'), $toCharArray('ltrif;'), $toCharArray('lurdshar;'), $toCharArray('luruhar;'), $toCharArray('mDDot;'), $toCharArray('macr'), $toCharArray('macr;'), $toCharArray('male;'), $toCharArray('malt;'), $toCharArray('maltese;'), $toCharArray('map;'), $toCharArray('mapsto;'), $toCharArray('mapstodown;'), $toCharArray('mapstoleft;'), $toCharArray('mapstoup;'), $toCharArray('marker;'), $toCharArray('mcomma;'), $toCharArray('mcy;'), $toCharArray('mdash;'), $toCharArray('measuredangle;'), $toCharArray('mfr;'), $toCharArray('mho;'), $toCharArray('micro'), $toCharArray('micro;'), $toCharArray('mid;'), $toCharArray('midast;'), $toCharArray('midcir;'), $toCharArray('middot'), $toCharArray('middot;'), $toCharArray('minus;'), $toCharArray('minusb;'), $toCharArray('minusd;'), $toCharArray('minusdu;'), $toCharArray('mlcp;'), $toCharArray('mldr;'), $toCharArray('mnplus;'), $toCharArray('models;'), $toCharArray('mopf;'), $toCharArray('mp;'), $toCharArray('mscr;'), $toCharArray('mstpos;'), $toCharArray('mu;'), $toCharArray('multimap;'), $toCharArray('mumap;'), $toCharArray('nLeftarrow;'), $toCharArray('nLeftrightarrow;'), $toCharArray('nRightarrow;'), $toCharArray('nVDash;'), $toCharArray('nVdash;'), $toCharArray('nabla;'), $toCharArray('nacute;'), $toCharArray('nap;'), $toCharArray('napos;'), $toCharArray('napprox;'), $toCharArray('natur;'), $toCharArray('natural;'), $toCharArray('naturals;'), $toCharArray('nbsp'), $toCharArray('nbsp;'), $toCharArray('ncap;'), $toCharArray('ncaron;'), $toCharArray('ncedil;'), $toCharArray('ncong;'), $toCharArray('ncup;'), $toCharArray('ncy;'), $toCharArray('ndash;'), $toCharArray('ne;'), $toCharArray('neArr;'), $toCharArray('nearhk;'), $toCharArray('nearr;'), $toCharArray('nearrow;'), $toCharArray('nequiv;'), $toCharArray('nesear;'), $toCharArray('nexist;'), $toCharArray('nexists;'), $toCharArray('nfr;'), $toCharArray('nge;'), $toCharArray('ngeq;'), $toCharArray('ngsim;'), $toCharArray('ngt;'), $toCharArray('ngtr;'), $toCharArray('nhArr;'), $toCharArray('nharr;'), $toCharArray('nhpar;'), $toCharArray('ni;'), $toCharArray('nis;'), $toCharArray('nisd;'), $toCharArray('niv;'), $toCharArray('njcy;'), $toCharArray('nlArr;'), $toCharArray('nlarr;'), $toCharArray('nldr;'), $toCharArray('nle;'), $toCharArray('nleftarrow;'), $toCharArray('nleftrightarrow;'), $toCharArray('nleq;'), $toCharArray('nless;'), $toCharArray('nlsim;'), $toCharArray('nlt;'), $toCharArray('nltri;'), $toCharArray('nltrie;'), $toCharArray('nmid;'), $toCharArray('nopf;'), $toCharArray('not'), $toCharArray('not;'), $toCharArray('notin;'), $toCharArray('notinva;'), $toCharArray('notinvb;'), $toCharArray('notinvc;'), $toCharArray('notni;'), $toCharArray('notniva;'), $toCharArray('notnivb;'), $toCharArray('notnivc;'), $toCharArray('npar;'), $toCharArray('nparallel;'), $toCharArray('npolint;'), $toCharArray('npr;'), $toCharArray('nprcue;'), $toCharArray('nprec;'), $toCharArray('nrArr;'), $toCharArray('nrarr;'), $toCharArray('nrightarrow;'), $toCharArray('nrtri;'), $toCharArray('nrtrie;'), $toCharArray('nsc;'), $toCharArray('nsccue;'), $toCharArray('nscr;'), $toCharArray('nshortmid;'), $toCharArray('nshortparallel;'), $toCharArray('nsim;'), $toCharArray('nsime;'), $toCharArray('nsimeq;'), $toCharArray('nsmid;'), $toCharArray('nspar;'), $toCharArray('nsqsube;'), $toCharArray('nsqsupe;'), $toCharArray('nsub;'), $toCharArray('nsube;'), $toCharArray('nsubseteq;'), $toCharArray('nsucc;'), $toCharArray('nsup;'), $toCharArray('nsupe;'), $toCharArray('nsupseteq;'), $toCharArray('ntgl;'), $toCharArray('ntilde'), $toCharArray('ntilde;'), $toCharArray('ntlg;'), $toCharArray('ntriangleleft;'), $toCharArray('ntrianglelefteq;'), $toCharArray('ntriangleright;'), $toCharArray('ntrianglerighteq;'), $toCharArray('nu;'), $toCharArray('num;'), $toCharArray('numero;'), $toCharArray('numsp;'), $toCharArray('nvDash;'), $toCharArray('nvHarr;'), $toCharArray('nvdash;'), $toCharArray('nvinfin;'), $toCharArray('nvlArr;'), $toCharArray('nvrArr;'), $toCharArray('nwArr;'), $toCharArray('nwarhk;'), $toCharArray('nwarr;'), $toCharArray('nwarrow;'), $toCharArray('nwnear;'), $toCharArray('oS;'), $toCharArray('oacute'), $toCharArray('oacute;'), $toCharArray('oast;'), $toCharArray('ocir;'), $toCharArray('ocirc'), $toCharArray('ocirc;'), $toCharArray('ocy;'), $toCharArray('odash;'), $toCharArray('odblac;'), $toCharArray('odiv;'), $toCharArray('odot;'), $toCharArray('odsold;'), $toCharArray('oelig;'), $toCharArray('ofcir;'), $toCharArray('ofr;'), $toCharArray('ogon;'), $toCharArray('ograve'), $toCharArray('ograve;'), $toCharArray('ogt;'), $toCharArray('ohbar;'), $toCharArray('ohm;'), $toCharArray('oint;'), $toCharArray('olarr;'), $toCharArray('olcir;'), $toCharArray('olcross;'), $toCharArray('oline;'), $toCharArray('olt;'), $toCharArray('omacr;'), $toCharArray('omega;'), $toCharArray('omicron;'), $toCharArray('omid;'), $toCharArray('ominus;'), $toCharArray('oopf;'), $toCharArray('opar;'), $toCharArray('operp;'), $toCharArray('oplus;'), $toCharArray('or;'), $toCharArray('orarr;'), $toCharArray('ord;'), $toCharArray('order;'), $toCharArray('orderof;'), $toCharArray('ordf'), $toCharArray('ordf;'), $toCharArray('ordm'), $toCharArray('ordm;'), $toCharArray('origof;'), $toCharArray('oror;'), $toCharArray('orslope;'), $toCharArray('orv;'), $toCharArray('oscr;'), $toCharArray('oslash'), $toCharArray('oslash;'), $toCharArray('osol;'), $toCharArray('otilde'), $toCharArray('otilde;'), $toCharArray('otimes;'), $toCharArray('otimesas;'), $toCharArray('ouml'), $toCharArray('ouml;'), $toCharArray('ovbar;'), $toCharArray('par;'), $toCharArray('para'), $toCharArray('para;'), $toCharArray('parallel;'), $toCharArray('parsim;'), $toCharArray('parsl;'), $toCharArray('part;'), $toCharArray('pcy;'), $toCharArray('percnt;'), $toCharArray('period;'), $toCharArray('permil;'), $toCharArray('perp;'), $toCharArray('pertenk;'), $toCharArray('pfr;'), $toCharArray('phi;'), $toCharArray('phiv;'), $toCharArray('phmmat;'), $toCharArray('phone;'), $toCharArray('pi;'), $toCharArray('pitchfork;'), $toCharArray('piv;'), $toCharArray('planck;'), $toCharArray('planckh;'), $toCharArray('plankv;'), $toCharArray('plus;'), $toCharArray('plusacir;'), $toCharArray('plusb;'), $toCharArray('pluscir;'), $toCharArray('plusdo;'), $toCharArray('plusdu;'), $toCharArray('pluse;'), $toCharArray('plusmn'), $toCharArray('plusmn;'), $toCharArray('plussim;'), $toCharArray('plustwo;'), $toCharArray('pm;'), $toCharArray('pointint;'), $toCharArray('popf;'), $toCharArray('pound'), $toCharArray('pound;'), $toCharArray('pr;'), $toCharArray('prE;'), $toCharArray('prap;'), $toCharArray('prcue;'), $toCharArray('pre;'), $toCharArray('prec;'), $toCharArray('precapprox;'), $toCharArray('preccurlyeq;'), $toCharArray('preceq;'), $toCharArray('precnapprox;'), $toCharArray('precneqq;'), $toCharArray('precnsim;'), $toCharArray('precsim;'), $toCharArray('prime;'), $toCharArray('primes;'), $toCharArray('prnE;'), $toCharArray('prnap;'), $toCharArray('prnsim;'), $toCharArray('prod;'), $toCharArray('profalar;'), $toCharArray('profline;'), $toCharArray('profsurf;'), $toCharArray('prop;'), $toCharArray('propto;'), $toCharArray('prsim;'), $toCharArray('prurel;'), $toCharArray('pscr;'), $toCharArray('psi;'), $toCharArray('puncsp;'), $toCharArray('qfr;'), $toCharArray('qint;'), $toCharArray('qopf;'), $toCharArray('qprime;'), $toCharArray('qscr;'), $toCharArray('quaternions;'), $toCharArray('quatint;'), $toCharArray('quest;'), $toCharArray('questeq;'), $toCharArray('quot'), $toCharArray('quot;'), $toCharArray('rAarr;'), $toCharArray('rArr;'), $toCharArray('rAtail;'), $toCharArray('rBarr;'), $toCharArray('rHar;'), $toCharArray('race;'), $toCharArray('racute;'), $toCharArray('radic;'), $toCharArray('raemptyv;'), $toCharArray('rang;'), $toCharArray('rangd;'), $toCharArray('range;'), $toCharArray('rangle;'), $toCharArray('raquo'), $toCharArray('raquo;'), $toCharArray('rarr;'), $toCharArray('rarrap;'), $toCharArray('rarrb;'), $toCharArray('rarrbfs;'), $toCharArray('rarrc;'), $toCharArray('rarrfs;'), $toCharArray('rarrhk;'), $toCharArray('rarrlp;'), $toCharArray('rarrpl;'), $toCharArray('rarrsim;'), $toCharArray('rarrtl;'), $toCharArray('rarrw;'), $toCharArray('ratail;'), $toCharArray('ratio;'), $toCharArray('rationals;'), $toCharArray('rbarr;'), $toCharArray('rbbrk;'), $toCharArray('rbrace;'), $toCharArray('rbrack;'), $toCharArray('rbrke;'), $toCharArray('rbrksld;'), $toCharArray('rbrkslu;'), $toCharArray('rcaron;'), $toCharArray('rcedil;'), $toCharArray('rceil;'), $toCharArray('rcub;'), $toCharArray('rcy;'), $toCharArray('rdca;'), $toCharArray('rdldhar;'), $toCharArray('rdquo;'), $toCharArray('rdquor;'), $toCharArray('rdsh;'), $toCharArray('real;'), $toCharArray('realine;'), $toCharArray('realpart;'), $toCharArray('reals;'), $toCharArray('rect;'), $toCharArray('reg'), $toCharArray('reg;'), $toCharArray('rfisht;'), $toCharArray('rfloor;'), $toCharArray('rfr;'), $toCharArray('rhard;'), $toCharArray('rharu;'), $toCharArray('rharul;'), $toCharArray('rho;'), $toCharArray('rhov;'), $toCharArray('rightarrow;'), $toCharArray('rightarrowtail;'), $toCharArray('rightharpoondown;'), $toCharArray('rightharpoonup;'), $toCharArray('rightleftarrows;'), $toCharArray('rightleftharpoons;'), $toCharArray('rightrightarrows;'), $toCharArray('rightsquigarrow;'), $toCharArray('rightthreetimes;'), $toCharArray('ring;'), $toCharArray('risingdotseq;'), $toCharArray('rlarr;'), $toCharArray('rlhar;'), $toCharArray('rlm;'), $toCharArray('rmoust;'), $toCharArray('rmoustache;'), $toCharArray('rnmid;'), $toCharArray('roang;'), $toCharArray('roarr;'), $toCharArray('robrk;'), $toCharArray('ropar;'), $toCharArray('ropf;'), $toCharArray('roplus;'), $toCharArray('rotimes;'), $toCharArray('rpar;'), $toCharArray('rpargt;'), $toCharArray('rppolint;'), $toCharArray('rrarr;'), $toCharArray('rsaquo;'), $toCharArray('rscr;'), $toCharArray('rsh;'), $toCharArray('rsqb;'), $toCharArray('rsquo;'), $toCharArray('rsquor;'), $toCharArray('rthree;'), $toCharArray('rtimes;'), $toCharArray('rtri;'), $toCharArray('rtrie;'), $toCharArray('rtrif;'), $toCharArray('rtriltri;'), $toCharArray('ruluhar;'), $toCharArray('rx;'), $toCharArray('sacute;'), $toCharArray('sbquo;'), $toCharArray('sc;'), $toCharArray('scE;'), $toCharArray('scap;'), $toCharArray('scaron;'), $toCharArray('sccue;'), $toCharArray('sce;'), $toCharArray('scedil;'), $toCharArray('scirc;'), $toCharArray('scnE;'), $toCharArray('scnap;'), $toCharArray('scnsim;'), $toCharArray('scpolint;'), $toCharArray('scsim;'), $toCharArray('scy;'), $toCharArray('sdot;'), $toCharArray('sdotb;'), $toCharArray('sdote;'), $toCharArray('seArr;'), $toCharArray('searhk;'), $toCharArray('searr;'), $toCharArray('searrow;'), $toCharArray('sect'), $toCharArray('sect;'), $toCharArray('semi;'), $toCharArray('seswar;'), $toCharArray('setminus;'), $toCharArray('setmn;'), $toCharArray('sext;'), $toCharArray('sfr;'), $toCharArray('sfrown;'), $toCharArray('sharp;'), $toCharArray('shchcy;'), $toCharArray('shcy;'), $toCharArray('shortmid;'), $toCharArray('shortparallel;'), $toCharArray('shy'), $toCharArray('shy;'), $toCharArray('sigma;'), $toCharArray('sigmaf;'), $toCharArray('sigmav;'), $toCharArray('sim;'), $toCharArray('simdot;'), $toCharArray('sime;'), $toCharArray('simeq;'), $toCharArray('simg;'), $toCharArray('simgE;'), $toCharArray('siml;'), $toCharArray('simlE;'), $toCharArray('simne;'), $toCharArray('simplus;'), $toCharArray('simrarr;'), $toCharArray('slarr;'), $toCharArray('smallsetminus;'), $toCharArray('smashp;'), $toCharArray('smeparsl;'), $toCharArray('smid;'), $toCharArray('smile;'), $toCharArray('smt;'), $toCharArray('smte;'), $toCharArray('softcy;'), $toCharArray('sol;'), $toCharArray('solb;'), $toCharArray('solbar;'), $toCharArray('sopf;'), $toCharArray('spades;'), $toCharArray('spadesuit;'), $toCharArray('spar;'), $toCharArray('sqcap;'), $toCharArray('sqcup;'), $toCharArray('sqsub;'), $toCharArray('sqsube;'), $toCharArray('sqsubset;'), $toCharArray('sqsubseteq;'), $toCharArray('sqsup;'), $toCharArray('sqsupe;'), $toCharArray('sqsupset;'), $toCharArray('sqsupseteq;'), $toCharArray('squ;'), $toCharArray('square;'), $toCharArray('squarf;'), $toCharArray('squf;'), $toCharArray('srarr;'), $toCharArray('sscr;'), $toCharArray('ssetmn;'), $toCharArray('ssmile;'), $toCharArray('sstarf;'), $toCharArray('star;'), $toCharArray('starf;'), $toCharArray('straightepsilon;'), $toCharArray('straightphi;'), $toCharArray('strns;'), $toCharArray('sub;'), $toCharArray('subE;'), $toCharArray('subdot;'), $toCharArray('sube;'), $toCharArray('subedot;'), $toCharArray('submult;'), $toCharArray('subnE;'), $toCharArray('subne;'), $toCharArray('subplus;'), $toCharArray('subrarr;'), $toCharArray('subset;'), $toCharArray('subseteq;'), $toCharArray('subseteqq;'), $toCharArray('subsetneq;'), $toCharArray('subsetneqq;'), $toCharArray('subsim;'), $toCharArray('subsub;'), $toCharArray('subsup;'), $toCharArray('succ;'), $toCharArray('succapprox;'), $toCharArray('succcurlyeq;'), $toCharArray('succeq;'), $toCharArray('succnapprox;'), $toCharArray('succneqq;'), $toCharArray('succnsim;'), $toCharArray('succsim;'), $toCharArray('sum;'), $toCharArray('sung;'), $toCharArray('sup1'), $toCharArray('sup1;'), $toCharArray('sup2'), $toCharArray('sup2;'), $toCharArray('sup3'), $toCharArray('sup3;'), $toCharArray('sup;'), $toCharArray('supE;'), $toCharArray('supdot;'), $toCharArray('supdsub;'), $toCharArray('supe;'), $toCharArray('supedot;'), $toCharArray('suphsub;'), $toCharArray('suplarr;'), $toCharArray('supmult;'), $toCharArray('supnE;'), $toCharArray('supne;'), $toCharArray('supplus;'), $toCharArray('supset;'), $toCharArray('supseteq;'), $toCharArray('supseteqq;'), $toCharArray('supsetneq;'), $toCharArray('supsetneqq;'), $toCharArray('supsim;'), $toCharArray('supsub;'), $toCharArray('supsup;'), $toCharArray('swArr;'), $toCharArray('swarhk;'), $toCharArray('swarr;'), $toCharArray('swarrow;'), $toCharArray('swnwar;'), $toCharArray('szlig'), $toCharArray('szlig;'), $toCharArray('target;'), $toCharArray('tau;'), $toCharArray('tbrk;'), $toCharArray('tcaron;'), $toCharArray('tcedil;'), $toCharArray('tcy;'), $toCharArray('tdot;'), $toCharArray('telrec;'), $toCharArray('tfr;'), $toCharArray('there4;'), $toCharArray('therefore;'), $toCharArray('theta;'), $toCharArray('thetasym;'), $toCharArray('thetav;'), $toCharArray('thickapprox;'), $toCharArray('thicksim;'), $toCharArray('thinsp;'), $toCharArray('thkap;'), $toCharArray('thksim;'), $toCharArray('thorn'), $toCharArray('thorn;'), $toCharArray('tilde;'), $toCharArray('times'), $toCharArray('times;'), $toCharArray('timesb;'), $toCharArray('timesbar;'), $toCharArray('timesd;'), $toCharArray('tint;'), $toCharArray('toea;'), $toCharArray('top;'), $toCharArray('topbot;'), $toCharArray('topcir;'), $toCharArray('topf;'), $toCharArray('topfork;'), $toCharArray('tosa;'), $toCharArray('tprime;'), $toCharArray('trade;'), $toCharArray('triangle;'), $toCharArray('triangledown;'), $toCharArray('triangleleft;'), $toCharArray('trianglelefteq;'), $toCharArray('triangleq;'), $toCharArray('triangleright;'), $toCharArray('trianglerighteq;'), $toCharArray('tridot;'), $toCharArray('trie;'), $toCharArray('triminus;'), $toCharArray('triplus;'), $toCharArray('trisb;'), $toCharArray('tritime;'), $toCharArray('trpezium;'), $toCharArray('tscr;'), $toCharArray('tscy;'), $toCharArray('tshcy;'), $toCharArray('tstrok;'), $toCharArray('twixt;'), $toCharArray('twoheadleftarrow;'), $toCharArray('twoheadrightarrow;'), $toCharArray('uArr;'), $toCharArray('uHar;'), $toCharArray('uacute'), $toCharArray('uacute;'), $toCharArray('uarr;'), $toCharArray('ubrcy;'), $toCharArray('ubreve;'), $toCharArray('ucirc'), $toCharArray('ucirc;'), $toCharArray('ucy;'), $toCharArray('udarr;'), $toCharArray('udblac;'), $toCharArray('udhar;'), $toCharArray('ufisht;'), $toCharArray('ufr;'), $toCharArray('ugrave'), $toCharArray('ugrave;'), $toCharArray('uharl;'), $toCharArray('uharr;'), $toCharArray('uhblk;'), $toCharArray('ulcorn;'), $toCharArray('ulcorner;'), $toCharArray('ulcrop;'), $toCharArray('ultri;'), $toCharArray('umacr;'), $toCharArray('uml'), $toCharArray('uml;'), $toCharArray('uogon;'), $toCharArray('uopf;'), $toCharArray('uparrow;'), $toCharArray('updownarrow;'), $toCharArray('upharpoonleft;'), $toCharArray('upharpoonright;'), $toCharArray('uplus;'), $toCharArray('upsi;'), $toCharArray('upsih;'), $toCharArray('upsilon;'), $toCharArray('upuparrows;'), $toCharArray('urcorn;'), $toCharArray('urcorner;'), $toCharArray('urcrop;'), $toCharArray('uring;'), $toCharArray('urtri;'), $toCharArray('uscr;'), $toCharArray('utdot;'), $toCharArray('utilde;'), $toCharArray('utri;'), $toCharArray('utrif;'), $toCharArray('uuarr;'), $toCharArray('uuml'), $toCharArray('uuml;'), $toCharArray('uwangle;'), $toCharArray('vArr;'), $toCharArray('vBar;'), $toCharArray('vBarv;'), $toCharArray('vDash;'), $toCharArray('vangrt;'), $toCharArray('varepsilon;'), $toCharArray('varkappa;'), $toCharArray('varnothing;'), $toCharArray('varphi;'), $toCharArray('varpi;'), $toCharArray('varpropto;'), $toCharArray('varr;'), $toCharArray('varrho;'), $toCharArray('varsigma;'), $toCharArray('vartheta;'), $toCharArray('vartriangleleft;'), $toCharArray('vartriangleright;'), $toCharArray('vcy;'), $toCharArray('vdash;'), $toCharArray('vee;'), $toCharArray('veebar;'), $toCharArray('veeeq;'), $toCharArray('vellip;'), $toCharArray('verbar;'), $toCharArray('vert;'), $toCharArray('vfr;'), $toCharArray('vltri;'), $toCharArray('vopf;'), $toCharArray('vprop;'), $toCharArray('vrtri;'), $toCharArray('vscr;'), $toCharArray('vzigzag;'), $toCharArray('wcirc;'), $toCharArray('wedbar;'), $toCharArray('wedge;'), $toCharArray('wedgeq;'), $toCharArray('weierp;'), $toCharArray('wfr;'), $toCharArray('wopf;'), $toCharArray('wp;'), $toCharArray('wr;'), $toCharArray('wreath;'), $toCharArray('wscr;'), $toCharArray('xcap;'), $toCharArray('xcirc;'), $toCharArray('xcup;'), $toCharArray('xdtri;'), $toCharArray('xfr;'), $toCharArray('xhArr;'), $toCharArray('xharr;'), $toCharArray('xi;'), $toCharArray('xlArr;'), $toCharArray('xlarr;'), $toCharArray('xmap;'), $toCharArray('xnis;'), $toCharArray('xodot;'), $toCharArray('xopf;'), $toCharArray('xoplus;'), $toCharArray('xotime;'), $toCharArray('xrArr;'), $toCharArray('xrarr;'), $toCharArray('xscr;'), $toCharArray('xsqcup;'), $toCharArray('xuplus;'), $toCharArray('xutri;'), $toCharArray('xvee;'), $toCharArray('xwedge;'), $toCharArray('yacute'), $toCharArray('yacute;'), $toCharArray('yacy;'), $toCharArray('ycirc;'), $toCharArray('ycy;'), $toCharArray('yen'), $toCharArray('yen;'), $toCharArray('yfr;'), $toCharArray('yicy;'), $toCharArray('yopf;'), $toCharArray('yscr;'), $toCharArray('yucy;'), $toCharArray('yuml'), $toCharArray('yuml;'), $toCharArray('zacute;'), $toCharArray('zcaron;'), $toCharArray('zcy;'), $toCharArray('zdot;'), $toCharArray('zeetrf;'), $toCharArray('zeta;'), $toCharArray('zfr;'), $toCharArray('zhcy;'), $toCharArray('zigrarr;'), $toCharArray('zopf;'), $toCharArray('zscr;'), $toCharArray('zwj;'), $toCharArray('zwnj;')]);
32.21643 +  VALUES_0 = initValues(_3_3C_classLit, 52, 12, [initValues(_3C_classLit, 42, -1, [198]), initValues(_3C_classLit, 42, -1, [198]), initValues(_3C_classLit, 42, -1, [38]), initValues(_3C_classLit, 42, -1, [38]), initValues(_3C_classLit, 42, -1, [193]), initValues(_3C_classLit, 42, -1, [193]), initValues(_3C_classLit, 42, -1, [258]), initValues(_3C_classLit, 42, -1, [194]), initValues(_3C_classLit, 42, -1, [194]), initValues(_3C_classLit, 42, -1, [1040]), initValues(_3C_classLit, 42, -1, [55349, 56580]), initValues(_3C_classLit, 42, -1, [192]), initValues(_3C_classLit, 42, -1, [192]), initValues(_3C_classLit, 42, -1, [913]), initValues(_3C_classLit, 42, -1, [256]), initValues(_3C_classLit, 42, -1, [10835]), initValues(_3C_classLit, 42, -1, [260]), initValues(_3C_classLit, 42, -1, [55349, 56632]), initValues(_3C_classLit, 42, -1, [8289]), initValues(_3C_classLit, 42, -1, [197]), initValues(_3C_classLit, 42, -1, [197]), initValues(_3C_classLit, 42, -1, [55349, 56476]), initValues(_3C_classLit, 42, -1, [8788]), initValues(_3C_classLit, 42, -1, [195]), initValues(_3C_classLit, 42, -1, [195]), initValues(_3C_classLit, 42, -1, [196]), initValues(_3C_classLit, 42, -1, [196]), initValues(_3C_classLit, 42, -1, [8726]), initValues(_3C_classLit, 42, -1, [10983]), initValues(_3C_classLit, 42, -1, [8966]), initValues(_3C_classLit, 42, -1, [1041]), initValues(_3C_classLit, 42, -1, [8757]), initValues(_3C_classLit, 42, -1, [8492]), initValues(_3C_classLit, 42, -1, [914]), initValues(_3C_classLit, 42, -1, [55349, 56581]), initValues(_3C_classLit, 42, -1, [55349, 56633]), initValues(_3C_classLit, 42, -1, [728]), initValues(_3C_classLit, 42, -1, [8492]), initValues(_3C_classLit, 42, -1, [8782]), initValues(_3C_classLit, 42, -1, [1063]), initValues(_3C_classLit, 42, -1, [169]), initValues(_3C_classLit, 42, -1, [169]), initValues(_3C_classLit, 42, -1, [262]), initValues(_3C_classLit, 42, -1, [8914]), initValues(_3C_classLit, 42, -1, [8517]), initValues(_3C_classLit, 42, -1, [8493]), initValues(_3C_classLit, 42, -1, [268]), initValues(_3C_classLit, 42, -1, [199]), initValues(_3C_classLit, 42, -1, [199]), initValues(_3C_classLit, 42, -1, [264]), initValues(_3C_classLit, 42, -1, [8752]), initValues(_3C_classLit, 42, -1, [266]), initValues(_3C_classLit, 42, -1, [184]), initValues(_3C_classLit, 42, -1, [183]), initValues(_3C_classLit, 42, -1, [8493]), initValues(_3C_classLit, 42, -1, [935]), initValues(_3C_classLit, 42, -1, [8857]), initValues(_3C_classLit, 42, -1, [8854]), initValues(_3C_classLit, 42, -1, [8853]), initValues(_3C_classLit, 42, -1, [8855]), initValues(_3C_classLit, 42, -1, [8754]), initValues(_3C_classLit, 42, -1, [8221]), initValues(_3C_classLit, 42, -1, [8217]), initValues(_3C_classLit, 42, -1, [8759]), initValues(_3C_classLit, 42, -1, [10868]), initValues(_3C_classLit, 42, -1, [8801]), initValues(_3C_classLit, 42, -1, [8751]), initValues(_3C_classLit, 42, -1, [8750]), initValues(_3C_classLit, 42, -1, [8450]), initValues(_3C_classLit, 42, -1, [8720]), initValues(_3C_classLit, 42, -1, [8755]), initValues(_3C_classLit, 42, -1, [10799]), initValues(_3C_classLit, 42, -1, [55349, 56478]), initValues(_3C_classLit, 42, -1, [8915]), initValues(_3C_classLit, 42, -1, [8781]), initValues(_3C_classLit, 42, -1, [8517]), initValues(_3C_classLit, 42, -1, [10513]), initValues(_3C_classLit, 42, -1, [1026]), initValues(_3C_classLit, 42, -1, [1029]), initValues(_3C_classLit, 42, -1, [1039]), initValues(_3C_classLit, 42, -1, [8225]), initValues(_3C_classLit, 42, -1, [8609]), initValues(_3C_classLit, 42, -1, [10980]), initValues(_3C_classLit, 42, -1, [270]), initValues(_3C_classLit, 42, -1, [1044]), initValues(_3C_classLit, 42, -1, [8711]), initValues(_3C_classLit, 42, -1, [916]), initValues(_3C_classLit, 42, -1, [55349, 56583]), initValues(_3C_classLit, 42, -1, [180]), initValues(_3C_classLit, 42, -1, [729]), initValues(_3C_classLit, 42, -1, [733]), initValues(_3C_classLit, 42, -1, [96]), initValues(_3C_classLit, 42, -1, [732]), initValues(_3C_classLit, 42, -1, [8900]), initValues(_3C_classLit, 42, -1, [8518]), initValues(_3C_classLit, 42, -1, [55349, 56635]), initValues(_3C_classLit, 42, -1, [168]), initValues(_3C_classLit, 42, -1, [8412]), initValues(_3C_classLit, 42, -1, [8784]), initValues(_3C_classLit, 42, -1, [8751]), initValues(_3C_classLit, 42, -1, [168]), initValues(_3C_classLit, 42, -1, [8659]), initValues(_3C_classLit, 42, -1, [8656]), initValues(_3C_classLit, 42, -1, [8660]), initValues(_3C_classLit, 42, -1, [10980]), initValues(_3C_classLit, 42, -1, [10232]), initValues(_3C_classLit, 42, -1, [10234]), initValues(_3C_classLit, 42, -1, [10233]), initValues(_3C_classLit, 42, -1, [8658]), initValues(_3C_classLit, 42, -1, [8872]), initValues(_3C_classLit, 42, -1, [8657]), initValues(_3C_classLit, 42, -1, [8661]), initValues(_3C_classLit, 42, -1, [8741]), initValues(_3C_classLit, 42, -1, [8595]), initValues(_3C_classLit, 42, -1, [10515]), initValues(_3C_classLit, 42, -1, [8693]), initValues(_3C_classLit, 42, -1, [785]), initValues(_3C_classLit, 42, -1, [10576]), initValues(_3C_classLit, 42, -1, [10590]), initValues(_3C_classLit, 42, -1, [8637]), initValues(_3C_classLit, 42, -1, [10582]), initValues(_3C_classLit, 42, -1, [10591]), initValues(_3C_classLit, 42, -1, [8641]), initValues(_3C_classLit, 42, -1, [10583]), initValues(_3C_classLit, 42, -1, [8868]), initValues(_3C_classLit, 42, -1, [8615]), initValues(_3C_classLit, 42, -1, [8659]), initValues(_3C_classLit, 42, -1, [55349, 56479]), initValues(_3C_classLit, 42, -1, [272]), initValues(_3C_classLit, 42, -1, [330]), initValues(_3C_classLit, 42, -1, [208]), initValues(_3C_classLit, 42, -1, [208]), initValues(_3C_classLit, 42, -1, [201]), initValues(_3C_classLit, 42, -1, [201]), initValues(_3C_classLit, 42, -1, [282]), initValues(_3C_classLit, 42, -1, [202]), initValues(_3C_classLit, 42, -1, [202]), initValues(_3C_classLit, 42, -1, [1069]), initValues(_3C_classLit, 42, -1, [278]), initValues(_3C_classLit, 42, -1, [55349, 56584]), initValues(_3C_classLit, 42, -1, [200]), initValues(_3C_classLit, 42, -1, [200]), initValues(_3C_classLit, 42, -1, [8712]), initValues(_3C_classLit, 42, -1, [274]), initValues(_3C_classLit, 42, -1, [9723]), initValues(_3C_classLit, 42, -1, [9643]), initValues(_3C_classLit, 42, -1, [280]), initValues(_3C_classLit, 42, -1, [55349, 56636]), initValues(_3C_classLit, 42, -1, [917]), initValues(_3C_classLit, 42, -1, [10869]), initValues(_3C_classLit, 42, -1, [8770]), initValues(_3C_classLit, 42, -1, [8652]), initValues(_3C_classLit, 42, -1, [8496]), initValues(_3C_classLit, 42, -1, [10867]), initValues(_3C_classLit, 42, -1, [919]), initValues(_3C_classLit, 42, -1, [203]), initValues(_3C_classLit, 42, -1, [203]), initValues(_3C_classLit, 42, -1, [8707]), initValues(_3C_classLit, 42, -1, [8519]), initValues(_3C_classLit, 42, -1, [1060]), initValues(_3C_classLit, 42, -1, [55349, 56585]), initValues(_3C_classLit, 42, -1, [9724]), initValues(_3C_classLit, 42, -1, [9642]), initValues(_3C_classLit, 42, -1, [55349, 56637]), initValues(_3C_classLit, 42, -1, [8704]), initValues(_3C_classLit, 42, -1, [8497]), initValues(_3C_classLit, 42, -1, [8497]), initValues(_3C_classLit, 42, -1, [1027]), initValues(_3C_classLit, 42, -1, [62]), initValues(_3C_classLit, 42, -1, [62]), initValues(_3C_classLit, 42, -1, [915]), initValues(_3C_classLit, 42, -1, [988]), initValues(_3C_classLit, 42, -1, [286]), initValues(_3C_classLit, 42, -1, [290]), initValues(_3C_classLit, 42, -1, [284]), initValues(_3C_classLit, 42, -1, [1043]), initValues(_3C_classLit, 42, -1, [288]), initValues(_3C_classLit, 42, -1, [55349, 56586]), initValues(_3C_classLit, 42, -1, [8921]), initValues(_3C_classLit, 42, -1, [55349, 56638]), initValues(_3C_classLit, 42, -1, [8805]), initValues(_3C_classLit, 42, -1, [8923]), initValues(_3C_classLit, 42, -1, [8807]), initValues(_3C_classLit, 42, -1, [10914]), initValues(_3C_classLit, 42, -1, [8823]), initValues(_3C_classLit, 42, -1, [10878]), initValues(_3C_classLit, 42, -1, [8819]), initValues(_3C_classLit, 42, -1, [55349, 56482]), initValues(_3C_classLit, 42, -1, [8811]), initValues(_3C_classLit, 42, -1, [1066]), initValues(_3C_classLit, 42, -1, [711]), initValues(_3C_classLit, 42, -1, [94]), initValues(_3C_classLit, 42, -1, [292]), initValues(_3C_classLit, 42, -1, [8460]), initValues(_3C_classLit, 42, -1, [8459]), initValues(_3C_classLit, 42, -1, [8461]), initValues(_3C_classLit, 42, -1, [9472]), initValues(_3C_classLit, 42, -1, [8459]), initValues(_3C_classLit, 42, -1, [294]), initValues(_3C_classLit, 42, -1, [8782]), initValues(_3C_classLit, 42, -1, [8783]), initValues(_3C_classLit, 42, -1, [1045]), initValues(_3C_classLit, 42, -1, [306]), initValues(_3C_classLit, 42, -1, [1025]), initValues(_3C_classLit, 42, -1, [205]), initValues(_3C_classLit, 42, -1, [205]), initValues(_3C_classLit, 42, -1, [206]), initValues(_3C_classLit, 42, -1, [206]), initValues(_3C_classLit, 42, -1, [1048]), initValues(_3C_classLit, 42, -1, [304]), initValues(_3C_classLit, 42, -1, [8465]), initValues(_3C_classLit, 42, -1, [204]), initValues(_3C_classLit, 42, -1, [204]), initValues(_3C_classLit, 42, -1, [8465]), initValues(_3C_classLit, 42, -1, [298]), initValues(_3C_classLit, 42, -1, [8520]), initValues(_3C_classLit, 42, -1, [8658]), initValues(_3C_classLit, 42, -1, [8748]), initValues(_3C_classLit, 42, -1, [8747]), initValues(_3C_classLit, 42, -1, [8898]), initValues(_3C_classLit, 42, -1, [8291]), initValues(_3C_classLit, 42, -1, [8290]), initValues(_3C_classLit, 42, -1, [302]), initValues(_3C_classLit, 42, -1, [55349, 56640]), initValues(_3C_classLit, 42, -1, [921]), initValues(_3C_classLit, 42, -1, [8464]), initValues(_3C_classLit, 42, -1, [296]), initValues(_3C_classLit, 42, -1, [1030]), initValues(_3C_classLit, 42, -1, [207]), initValues(_3C_classLit, 42, -1, [207]), initValues(_3C_classLit, 42, -1, [308]), initValues(_3C_classLit, 42, -1, [1049]), initValues(_3C_classLit, 42, -1, [55349, 56589]), initValues(_3C_classLit, 42, -1, [55349, 56641]), initValues(_3C_classLit, 42, -1, [55349, 56485]), initValues(_3C_classLit, 42, -1, [1032]), initValues(_3C_classLit, 42, -1, [1028]), initValues(_3C_classLit, 42, -1, [1061]), initValues(_3C_classLit, 42, -1, [1036]), initValues(_3C_classLit, 42, -1, [922]), initValues(_3C_classLit, 42, -1, [310]), initValues(_3C_classLit, 42, -1, [1050]), initValues(_3C_classLit, 42, -1, [55349, 56590]), initValues(_3C_classLit, 42, -1, [55349, 56642]), initValues(_3C_classLit, 42, -1, [55349, 56486]), initValues(_3C_classLit, 42, -1, [1033]), initValues(_3C_classLit, 42, -1, [60]), initValues(_3C_classLit, 42, -1, [60]), initValues(_3C_classLit, 42, -1, [313]), initValues(_3C_classLit, 42, -1, [923]), initValues(_3C_classLit, 42, -1, [10218]), initValues(_3C_classLit, 42, -1, [8466]), initValues(_3C_classLit, 42, -1, [8606]), initValues(_3C_classLit, 42, -1, [317]), initValues(_3C_classLit, 42, -1, [315]), initValues(_3C_classLit, 42, -1, [1051]), initValues(_3C_classLit, 42, -1, [10216]), initValues(_3C_classLit, 42, -1, [8592]), initValues(_3C_classLit, 42, -1, [8676]), initValues(_3C_classLit, 42, -1, [8646]), initValues(_3C_classLit, 42, -1, [8968]), initValues(_3C_classLit, 42, -1, [10214]), initValues(_3C_classLit, 42, -1, [10593]), initValues(_3C_classLit, 42, -1, [8643]), initValues(_3C_classLit, 42, -1, [10585]), initValues(_3C_classLit, 42, -1, [8970]), initValues(_3C_classLit, 42, -1, [8596]), initValues(_3C_classLit, 42, -1, [10574]), initValues(_3C_classLit, 42, -1, [8867]), initValues(_3C_classLit, 42, -1, [8612]), initValues(_3C_classLit, 42, -1, [10586]), initValues(_3C_classLit, 42, -1, [8882]), initValues(_3C_classLit, 42, -1, [10703]), initValues(_3C_classLit, 42, -1, [8884]), initValues(_3C_classLit, 42, -1, [10577]), initValues(_3C_classLit, 42, -1, [10592]), initValues(_3C_classLit, 42, -1, [8639]), initValues(_3C_classLit, 42, -1, [10584]), initValues(_3C_classLit, 42, -1, [8636]), initValues(_3C_classLit, 42, -1, [10578]), initValues(_3C_classLit, 42, -1, [8656]), initValues(_3C_classLit, 42, -1, [8660]), initValues(_3C_classLit, 42, -1, [8922]), initValues(_3C_classLit, 42, -1, [8806]), initValues(_3C_classLit, 42, -1, [8822]), initValues(_3C_classLit, 42, -1, [10913]), initValues(_3C_classLit, 42, -1, [10877]), initValues(_3C_classLit, 42, -1, [8818]), initValues(_3C_classLit, 42, -1, [55349, 56591]), initValues(_3C_classLit, 42, -1, [8920]), initValues(_3C_classLit, 42, -1, [8666]), initValues(_3C_classLit, 42, -1, [319]), initValues(_3C_classLit, 42, -1, [10229]), initValues(_3C_classLit, 42, -1, [10231]), initValues(_3C_classLit, 42, -1, [10230]), initValues(_3C_classLit, 42, -1, [10232]), initValues(_3C_classLit, 42, -1, [10234]), initValues(_3C_classLit, 42, -1, [10233]), initValues(_3C_classLit, 42, -1, [55349, 56643]), initValues(_3C_classLit, 42, -1, [8601]), initValues(_3C_classLit, 42, -1, [8600]), initValues(_3C_classLit, 42, -1, [8466]), initValues(_3C_classLit, 42, -1, [8624]), initValues(_3C_classLit, 42, -1, [321]), initValues(_3C_classLit, 42, -1, [8810]), initValues(_3C_classLit, 42, -1, [10501]), initValues(_3C_classLit, 42, -1, [1052]), initValues(_3C_classLit, 42, -1, [8287]), initValues(_3C_classLit, 42, -1, [8499]), initValues(_3C_classLit, 42, -1, [55349, 56592]), initValues(_3C_classLit, 42, -1, [8723]), initValues(_3C_classLit, 42, -1, [55349, 56644]), initValues(_3C_classLit, 42, -1, [8499]), initValues(_3C_classLit, 42, -1, [924]), initValues(_3C_classLit, 42, -1, [1034]), initValues(_3C_classLit, 42, -1, [323]), initValues(_3C_classLit, 42, -1, [327]), initValues(_3C_classLit, 42, -1, [325]), initValues(_3C_classLit, 42, -1, [1053]), initValues(_3C_classLit, 42, -1, [8203]), initValues(_3C_classLit, 42, -1, [8203]), initValues(_3C_classLit, 42, -1, [8203]), initValues(_3C_classLit, 42, -1, [8203]), initValues(_3C_classLit, 42, -1, [8811]), initValues(_3C_classLit, 42, -1, [8810]), initValues(_3C_classLit, 42, -1, [10]), initValues(_3C_classLit, 42, -1, [55349, 56593]), initValues(_3C_classLit, 42, -1, [8288]), initValues(_3C_classLit, 42, -1, [160]), initValues(_3C_classLit, 42, -1, [8469]), initValues(_3C_classLit, 42, -1, [10988]), initValues(_3C_classLit, 42, -1, [8802]), initValues(_3C_classLit, 42, -1, [8813]), initValues(_3C_classLit, 42, -1, [8742]), initValues(_3C_classLit, 42, -1, [8713]), initValues(_3C_classLit, 42, -1, [8800]), initValues(_3C_classLit, 42, -1, [8708]), initValues(_3C_classLit, 42, -1, [8815]), initValues(_3C_classLit, 42, -1, [8817]), initValues(_3C_classLit, 42, -1, [8825]), initValues(_3C_classLit, 42, -1, [8821]), initValues(_3C_classLit, 42, -1, [8938]), initValues(_3C_classLit, 42, -1, [8940]), initValues(_3C_classLit, 42, -1, [8814]), initValues(_3C_classLit, 42, -1, [8816]), initValues(_3C_classLit, 42, -1, [8824]), initValues(_3C_classLit, 42, -1, [8820]), initValues(_3C_classLit, 42, -1, [8832]), initValues(_3C_classLit, 42, -1, [8928]), initValues(_3C_classLit, 42, -1, [8716]), initValues(_3C_classLit, 42, -1, [8939]), initValues(_3C_classLit, 42, -1, [8941]), initValues(_3C_classLit, 42, -1, [8930]), initValues(_3C_classLit, 42, -1, [8931]), initValues(_3C_classLit, 42, -1, [8840]), initValues(_3C_classLit, 42, -1, [8833]), initValues(_3C_classLit, 42, -1, [8929]), initValues(_3C_classLit, 42, -1, [8841]), initValues(_3C_classLit, 42, -1, [8769]), initValues(_3C_classLit, 42, -1, [8772]), initValues(_3C_classLit, 42, -1, [8775]), initValues(_3C_classLit, 42, -1, [8777]), initValues(_3C_classLit, 42, -1, [8740]), initValues(_3C_classLit, 42, -1, [55349, 56489]), initValues(_3C_classLit, 42, -1, [209]), initValues(_3C_classLit, 42, -1, [209]), initValues(_3C_classLit, 42, -1, [925]), initValues(_3C_classLit, 42, -1, [338]), initValues(_3C_classLit, 42, -1, [211]), initValues(_3C_classLit, 42, -1, [211]), initValues(_3C_classLit, 42, -1, [212]), initValues(_3C_classLit, 42, -1, [212]), initValues(_3C_classLit, 42, -1, [1054]), initValues(_3C_classLit, 42, -1, [336]), initValues(_3C_classLit, 42, -1, [55349, 56594]), initValues(_3C_classLit, 42, -1, [210]), initValues(_3C_classLit, 42, -1, [210]), initValues(_3C_classLit, 42, -1, [332]), initValues(_3C_classLit, 42, -1, [937]), initValues(_3C_classLit, 42, -1, [927]), initValues(_3C_classLit, 42, -1, [55349, 56646]), initValues(_3C_classLit, 42, -1, [8220]), initValues(_3C_classLit, 42, -1, [8216]), initValues(_3C_classLit, 42, -1, [10836]), initValues(_3C_classLit, 42, -1, [55349, 56490]), initValues(_3C_classLit, 42, -1, [216]), initValues(_3C_classLit, 42, -1, [216]), initValues(_3C_classLit, 42, -1, [213]), initValues(_3C_classLit, 42, -1, [213]), initValues(_3C_classLit, 42, -1, [10807]), initValues(_3C_classLit, 42, -1, [214]), initValues(_3C_classLit, 42, -1, [214]), initValues(_3C_classLit, 42, -1, [175]), initValues(_3C_classLit, 42, -1, [9182]), initValues(_3C_classLit, 42, -1, [9140]), initValues(_3C_classLit, 42, -1, [9180]), initValues(_3C_classLit, 42, -1, [8706]), initValues(_3C_classLit, 42, -1, [1055]), initValues(_3C_classLit, 42, -1, [55349, 56595]), initValues(_3C_classLit, 42, -1, [934]), initValues(_3C_classLit, 42, -1, [928]), initValues(_3C_classLit, 42, -1, [177]), initValues(_3C_classLit, 42, -1, [8460]), initValues(_3C_classLit, 42, -1, [8473]), initValues(_3C_classLit, 42, -1, [10939]), initValues(_3C_classLit, 42, -1, [8826]), initValues(_3C_classLit, 42, -1, [10927]), initValues(_3C_classLit, 42, -1, [8828]), initValues(_3C_classLit, 42, -1, [8830]), initValues(_3C_classLit, 42, -1, [8243]), initValues(_3C_classLit, 42, -1, [8719]), initValues(_3C_classLit, 42, -1, [8759]), initValues(_3C_classLit, 42, -1, [8733]), initValues(_3C_classLit, 42, -1, [55349, 56491]), initValues(_3C_classLit, 42, -1, [936]), initValues(_3C_classLit, 42, -1, [34]), initValues(_3C_classLit, 42, -1, [34]), initValues(_3C_classLit, 42, -1, [55349, 56596]), initValues(_3C_classLit, 42, -1, [8474]), initValues(_3C_classLit, 42, -1, [55349, 56492]), initValues(_3C_classLit, 42, -1, [10512]), initValues(_3C_classLit, 42, -1, [174]), initValues(_3C_classLit, 42, -1, [174]), initValues(_3C_classLit, 42, -1, [340]), initValues(_3C_classLit, 42, -1, [10219]), initValues(_3C_classLit, 42, -1, [8608]), initValues(_3C_classLit, 42, -1, [10518]), initValues(_3C_classLit, 42, -1, [344]), initValues(_3C_classLit, 42, -1, [342]), initValues(_3C_classLit, 42, -1, [1056]), initValues(_3C_classLit, 42, -1, [8476]), initValues(_3C_classLit, 42, -1, [8715]), initValues(_3C_classLit, 42, -1, [8651]), initValues(_3C_classLit, 42, -1, [10607]), initValues(_3C_classLit, 42, -1, [8476]), initValues(_3C_classLit, 42, -1, [929]), initValues(_3C_classLit, 42, -1, [10217]), initValues(_3C_classLit, 42, -1, [8594]), initValues(_3C_classLit, 42, -1, [8677]), initValues(_3C_classLit, 42, -1, [8644]), initValues(_3C_classLit, 42, -1, [8969]), initValues(_3C_classLit, 42, -1, [10215]), initValues(_3C_classLit, 42, -1, [10589]), initValues(_3C_classLit, 42, -1, [8642]), initValues(_3C_classLit, 42, -1, [10581]), initValues(_3C_classLit, 42, -1, [8971]), initValues(_3C_classLit, 42, -1, [8866]), initValues(_3C_classLit, 42, -1, [8614]), initValues(_3C_classLit, 42, -1, [10587]), initValues(_3C_classLit, 42, -1, [8883]), initValues(_3C_classLit, 42, -1, [10704]), initValues(_3C_classLit, 42, -1, [8885]), initValues(_3C_classLit, 42, -1, [10575]), initValues(_3C_classLit, 42, -1, [10588]), initValues(_3C_classLit, 42, -1, [8638]), initValues(_3C_classLit, 42, -1, [10580]), initValues(_3C_classLit, 42, -1, [8640]), initValues(_3C_classLit, 42, -1, [10579]), initValues(_3C_classLit, 42, -1, [8658]), initValues(_3C_classLit, 42, -1, [8477]), initValues(_3C_classLit, 42, -1, [10608]), initValues(_3C_classLit, 42, -1, [8667]), initValues(_3C_classLit, 42, -1, [8475]), initValues(_3C_classLit, 42, -1, [8625]), initValues(_3C_classLit, 42, -1, [10740]), initValues(_3C_classLit, 42, -1, [1065]), initValues(_3C_classLit, 42, -1, [1064]), initValues(_3C_classLit, 42, -1, [1068]), initValues(_3C_classLit, 42, -1, [346]), initValues(_3C_classLit, 42, -1, [10940]), initValues(_3C_classLit, 42, -1, [352]), initValues(_3C_classLit, 42, -1, [350]), initValues(_3C_classLit, 42, -1, [348]), initValues(_3C_classLit, 42, -1, [1057]), initValues(_3C_classLit, 42, -1, [55349, 56598]), initValues(_3C_classLit, 42, -1, [8595]), initValues(_3C_classLit, 42, -1, [8592]), initValues(_3C_classLit, 42, -1, [8594]), initValues(_3C_classLit, 42, -1, [8593]), initValues(_3C_classLit, 42, -1, [931]), initValues(_3C_classLit, 42, -1, [8728]), initValues(_3C_classLit, 42, -1, [55349, 56650]), initValues(_3C_classLit, 42, -1, [8730]), initValues(_3C_classLit, 42, -1, [9633]), initValues(_3C_classLit, 42, -1, [8851]), initValues(_3C_classLit, 42, -1, [8847]), initValues(_3C_classLit, 42, -1, [8849]), initValues(_3C_classLit, 42, -1, [8848]), initValues(_3C_classLit, 42, -1, [8850]), initValues(_3C_classLit, 42, -1, [8852]), initValues(_3C_classLit, 42, -1, [55349, 56494]), initValues(_3C_classLit, 42, -1, [8902]), initValues(_3C_classLit, 42, -1, [8912]), initValues(_3C_classLit, 42, -1, [8912]), initValues(_3C_classLit, 42, -1, [8838]), initValues(_3C_classLit, 42, -1, [8827]), initValues(_3C_classLit, 42, -1, [10928]), initValues(_3C_classLit, 42, -1, [8829]), initValues(_3C_classLit, 42, -1, [8831]), initValues(_3C_classLit, 42, -1, [8715]), initValues(_3C_classLit, 42, -1, [8721]), initValues(_3C_classLit, 42, -1, [8913]), initValues(_3C_classLit, 42, -1, [8835]), initValues(_3C_classLit, 42, -1, [8839]), initValues(_3C_classLit, 42, -1, [8913]), initValues(_3C_classLit, 42, -1, [222]), initValues(_3C_classLit, 42, -1, [222]), initValues(_3C_classLit, 42, -1, [8482]), initValues(_3C_classLit, 42, -1, [1035]), initValues(_3C_classLit, 42, -1, [1062]), initValues(_3C_classLit, 42, -1, [9]), initValues(_3C_classLit, 42, -1, [932]), initValues(_3C_classLit, 42, -1, [356]), initValues(_3C_classLit, 42, -1, [354]), initValues(_3C_classLit, 42, -1, [1058]), initValues(_3C_classLit, 42, -1, [55349, 56599]), initValues(_3C_classLit, 42, -1, [8756]), initValues(_3C_classLit, 42, -1, [920]), initValues(_3C_classLit, 42, -1, [8201]), initValues(_3C_classLit, 42, -1, [8764]), initValues(_3C_classLit, 42, -1, [8771]), initValues(_3C_classLit, 42, -1, [8773]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [55349, 56651]), initValues(_3C_classLit, 42, -1, [8411]), initValues(_3C_classLit, 42, -1, [55349, 56495]), initValues(_3C_classLit, 42, -1, [358]), initValues(_3C_classLit, 42, -1, [218]), initValues(_3C_classLit, 42, -1, [218]), initValues(_3C_classLit, 42, -1, [8607]), initValues(_3C_classLit, 42, -1, [10569]), initValues(_3C_classLit, 42, -1, [1038]), initValues(_3C_classLit, 42, -1, [364]), initValues(_3C_classLit, 42, -1, [219]), initValues(_3C_classLit, 42, -1, [219]), initValues(_3C_classLit, 42, -1, [1059]), initValues(_3C_classLit, 42, -1, [368]), initValues(_3C_classLit, 42, -1, [55349, 56600]), initValues(_3C_classLit, 42, -1, [217]), initValues(_3C_classLit, 42, -1, [217]), initValues(_3C_classLit, 42, -1, [362]), initValues(_3C_classLit, 42, -1, [818]), initValues(_3C_classLit, 42, -1, [9183]), initValues(_3C_classLit, 42, -1, [9141]), initValues(_3C_classLit, 42, -1, [9181]), initValues(_3C_classLit, 42, -1, [8899]), initValues(_3C_classLit, 42, -1, [8846]), initValues(_3C_classLit, 42, -1, [370]), initValues(_3C_classLit, 42, -1, [55349, 56652]), initValues(_3C_classLit, 42, -1, [8593]), initValues(_3C_classLit, 42, -1, [10514]), initValues(_3C_classLit, 42, -1, [8645]), initValues(_3C_classLit, 42, -1, [8597]), initValues(_3C_classLit, 42, -1, [10606]), initValues(_3C_classLit, 42, -1, [8869]), initValues(_3C_classLit, 42, -1, [8613]), initValues(_3C_classLit, 42, -1, [8657]), initValues(_3C_classLit, 42, -1, [8661]), initValues(_3C_classLit, 42, -1, [8598]), initValues(_3C_classLit, 42, -1, [8599]), initValues(_3C_classLit, 42, -1, [978]), initValues(_3C_classLit, 42, -1, [933]), initValues(_3C_classLit, 42, -1, [366]), initValues(_3C_classLit, 42, -1, [55349, 56496]), initValues(_3C_classLit, 42, -1, [360]), initValues(_3C_classLit, 42, -1, [220]), initValues(_3C_classLit, 42, -1, [220]), initValues(_3C_classLit, 42, -1, [8875]), initValues(_3C_classLit, 42, -1, [10987]), initValues(_3C_classLit, 42, -1, [1042]), initValues(_3C_classLit, 42, -1, [8873]), initValues(_3C_classLit, 42, -1, [10982]), initValues(_3C_classLit, 42, -1, [8897]), initValues(_3C_classLit, 42, -1, [8214]), initValues(_3C_classLit, 42, -1, [8214]), initValues(_3C_classLit, 42, -1, [8739]), initValues(_3C_classLit, 42, -1, [124]), initValues(_3C_classLit, 42, -1, [10072]), initValues(_3C_classLit, 42, -1, [8768]), initValues(_3C_classLit, 42, -1, [8202]), initValues(_3C_classLit, 42, -1, [55349, 56601]), initValues(_3C_classLit, 42, -1, [55349, 56653]), initValues(_3C_classLit, 42, -1, [55349, 56497]), initValues(_3C_classLit, 42, -1, [8874]), initValues(_3C_classLit, 42, -1, [372]), initValues(_3C_classLit, 42, -1, [8896]), initValues(_3C_classLit, 42, -1, [55349, 56602]), initValues(_3C_classLit, 42, -1, [55349, 56654]), initValues(_3C_classLit, 42, -1, [55349, 56498]), initValues(_3C_classLit, 42, -1, [55349, 56603]), initValues(_3C_classLit, 42, -1, [926]), initValues(_3C_classLit, 42, -1, [55349, 56655]), initValues(_3C_classLit, 42, -1, [55349, 56499]), initValues(_3C_classLit, 42, -1, [1071]), initValues(_3C_classLit, 42, -1, [1031]), initValues(_3C_classLit, 42, -1, [1070]), initValues(_3C_classLit, 42, -1, [221]), initValues(_3C_classLit, 42, -1, [221]), initValues(_3C_classLit, 42, -1, [374]), initValues(_3C_classLit, 42, -1, [1067]), initValues(_3C_classLit, 42, -1, [55349, 56604]), initValues(_3C_classLit, 42, -1, [55349, 56656]), initValues(_3C_classLit, 42, -1, [55349, 56500]), initValues(_3C_classLit, 42, -1, [376]), initValues(_3C_classLit, 42, -1, [1046]), initValues(_3C_classLit, 42, -1, [377]), initValues(_3C_classLit, 42, -1, [381]), initValues(_3C_classLit, 42, -1, [1047]), initValues(_3C_classLit, 42, -1, [379]), initValues(_3C_classLit, 42, -1, [8203]), initValues(_3C_classLit, 42, -1, [918]), initValues(_3C_classLit, 42, -1, [8488]), initValues(_3C_classLit, 42, -1, [8484]), initValues(_3C_classLit, 42, -1, [55349, 56501]), initValues(_3C_classLit, 42, -1, [225]), initValues(_3C_classLit, 42, -1, [225]), initValues(_3C_classLit, 42, -1, [259]), initValues(_3C_classLit, 42, -1, [8766]), initValues(_3C_classLit, 42, -1, [8767]), initValues(_3C_classLit, 42, -1, [226]), initValues(_3C_classLit, 42, -1, [226]), initValues(_3C_classLit, 42, -1, [180]), initValues(_3C_classLit, 42, -1, [180]), initValues(_3C_classLit, 42, -1, [1072]), initValues(_3C_classLit, 42, -1, [230]), initValues(_3C_classLit, 42, -1, [230]), initValues(_3C_classLit, 42, -1, [8289]), initValues(_3C_classLit, 42, -1, [55349, 56606]), initValues(_3C_classLit, 42, -1, [224]), initValues(_3C_classLit, 42, -1, [224]), initValues(_3C_classLit, 42, -1, [8501]), initValues(_3C_classLit, 42, -1, [8501]), initValues(_3C_classLit, 42, -1, [945]), initValues(_3C_classLit, 42, -1, [257]), initValues(_3C_classLit, 42, -1, [10815]), initValues(_3C_classLit, 42, -1, [38]), initValues(_3C_classLit, 42, -1, [38]), initValues(_3C_classLit, 42, -1, [8743]), initValues(_3C_classLit, 42, -1, [10837]), initValues(_3C_classLit, 42, -1, [10844]), initValues(_3C_classLit, 42, -1, [10840]), initValues(_3C_classLit, 42, -1, [10842]), initValues(_3C_classLit, 42, -1, [8736]), initValues(_3C_classLit, 42, -1, [10660]), initValues(_3C_classLit, 42, -1, [8736]), initValues(_3C_classLit, 42, -1, [8737]), initValues(_3C_classLit, 42, -1, [10664]), initValues(_3C_classLit, 42, -1, [10665]), initValues(_3C_classLit, 42, -1, [10666]), initValues(_3C_classLit, 42, -1, [10667]), initValues(_3C_classLit, 42, -1, [10668]), initValues(_3C_classLit, 42, -1, [10669]), initValues(_3C_classLit, 42, -1, [10670]), initValues(_3C_classLit, 42, -1, [10671]), initValues(_3C_classLit, 42, -1, [8735]), initValues(_3C_classLit, 42, -1, [8894]), initValues(_3C_classLit, 42, -1, [10653]), initValues(_3C_classLit, 42, -1, [8738]), initValues(_3C_classLit, 42, -1, [8491]), initValues(_3C_classLit, 42, -1, [9084]), initValues(_3C_classLit, 42, -1, [261]), initValues(_3C_classLit, 42, -1, [55349, 56658]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [10864]), initValues(_3C_classLit, 42, -1, [10863]), initValues(_3C_classLit, 42, -1, [8778]), initValues(_3C_classLit, 42, -1, [8779]), initValues(_3C_classLit, 42, -1, [39]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [8778]), initValues(_3C_classLit, 42, -1, [229]), initValues(_3C_classLit, 42, -1, [229]), initValues(_3C_classLit, 42, -1, [55349, 56502]), initValues(_3C_classLit, 42, -1, [42]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [8781]), initValues(_3C_classLit, 42, -1, [227]), initValues(_3C_classLit, 42, -1, [227]), initValues(_3C_classLit, 42, -1, [228]), initValues(_3C_classLit, 42, -1, [228]), initValues(_3C_classLit, 42, -1, [8755]), initValues(_3C_classLit, 42, -1, [10769]), initValues(_3C_classLit, 42, -1, [10989]), initValues(_3C_classLit, 42, -1, [8780]), initValues(_3C_classLit, 42, -1, [1014]), initValues(_3C_classLit, 42, -1, [8245]), initValues(_3C_classLit, 42, -1, [8765]), initValues(_3C_classLit, 42, -1, [8909]), initValues(_3C_classLit, 42, -1, [8893]), initValues(_3C_classLit, 42, -1, [8965]), initValues(_3C_classLit, 42, -1, [8965]), initValues(_3C_classLit, 42, -1, [9141]), initValues(_3C_classLit, 42, -1, [9142]), initValues(_3C_classLit, 42, -1, [8780]), initValues(_3C_classLit, 42, -1, [1073]), initValues(_3C_classLit, 42, -1, [8222]), initValues(_3C_classLit, 42, -1, [8757]), initValues(_3C_classLit, 42, -1, [8757]), initValues(_3C_classLit, 42, -1, [10672]), initValues(_3C_classLit, 42, -1, [1014]), initValues(_3C_classLit, 42, -1, [8492]), initValues(_3C_classLit, 42, -1, [946]), initValues(_3C_classLit, 42, -1, [8502]), initValues(_3C_classLit, 42, -1, [8812]), initValues(_3C_classLit, 42, -1, [55349, 56607]), initValues(_3C_classLit, 42, -1, [8898]), initValues(_3C_classLit, 42, -1, [9711]), initValues(_3C_classLit, 42, -1, [8899]), initValues(_3C_classLit, 42, -1, [10752]), initValues(_3C_classLit, 42, -1, [10753]), initValues(_3C_classLit, 42, -1, [10754]), initValues(_3C_classLit, 42, -1, [10758]), initValues(_3C_classLit, 42, -1, [9733]), initValues(_3C_classLit, 42, -1, [9661]), initValues(_3C_classLit, 42, -1, [9651]), initValues(_3C_classLit, 42, -1, [10756]), initValues(_3C_classLit, 42, -1, [8897]), initValues(_3C_classLit, 42, -1, [8896]), initValues(_3C_classLit, 42, -1, [10509]), initValues(_3C_classLit, 42, -1, [10731]), initValues(_3C_classLit, 42, -1, [9642]), initValues(_3C_classLit, 42, -1, [9652]), initValues(_3C_classLit, 42, -1, [9662]), initValues(_3C_classLit, 42, -1, [9666]), initValues(_3C_classLit, 42, -1, [9656]), initValues(_3C_classLit, 42, -1, [9251]), initValues(_3C_classLit, 42, -1, [9618]), initValues(_3C_classLit, 42, -1, [9617]), initValues(_3C_classLit, 42, -1, [9619]), initValues(_3C_classLit, 42, -1, [9608]), initValues(_3C_classLit, 42, -1, [8976]), initValues(_3C_classLit, 42, -1, [55349, 56659]), initValues(_3C_classLit, 42, -1, [8869]), initValues(_3C_classLit, 42, -1, [8869]), initValues(_3C_classLit, 42, -1, [8904]), initValues(_3C_classLit, 42, -1, [9559]), initValues(_3C_classLit, 42, -1, [9556]), initValues(_3C_classLit, 42, -1, [9558]), initValues(_3C_classLit, 42, -1, [9555]), initValues(_3C_classLit, 42, -1, [9552]), initValues(_3C_classLit, 42, -1, [9574]), initValues(_3C_classLit, 42, -1, [9577]), initValues(_3C_classLit, 42, -1, [9572]), initValues(_3C_classLit, 42, -1, [9575]), initValues(_3C_classLit, 42, -1, [9565]), initValues(_3C_classLit, 42, -1, [9562]), initValues(_3C_classLit, 42, -1, [9564]), initValues(_3C_classLit, 42, -1, [9561]), initValues(_3C_classLit, 42, -1, [9553]), initValues(_3C_classLit, 42, -1, [9580]), initValues(_3C_classLit, 42, -1, [9571]), initValues(_3C_classLit, 42, -1, [9568]), initValues(_3C_classLit, 42, -1, [9579]), initValues(_3C_classLit, 42, -1, [9570]), initValues(_3C_classLit, 42, -1, [9567]), initValues(_3C_classLit, 42, -1, [10697]), initValues(_3C_classLit, 42, -1, [9557]), initValues(_3C_classLit, 42, -1, [9554]), initValues(_3C_classLit, 42, -1, [9488]), initValues(_3C_classLit, 42, -1, [9484]), initValues(_3C_classLit, 42, -1, [9472]), initValues(_3C_classLit, 42, -1, [9573]), initValues(_3C_classLit, 42, -1, [9576]), initValues(_3C_classLit, 42, -1, [9516]), initValues(_3C_classLit, 42, -1, [9524]), initValues(_3C_classLit, 42, -1, [8863]), initValues(_3C_classLit, 42, -1, [8862]), initValues(_3C_classLit, 42, -1, [8864]), initValues(_3C_classLit, 42, -1, [9563]), initValues(_3C_classLit, 42, -1, [9560]), initValues(_3C_classLit, 42, -1, [9496]), initValues(_3C_classLit, 42, -1, [9492]), initValues(_3C_classLit, 42, -1, [9474]), initValues(_3C_classLit, 42, -1, [9578]), initValues(_3C_classLit, 42, -1, [9569]), initValues(_3C_classLit, 42, -1, [9566]), initValues(_3C_classLit, 42, -1, [9532]), initValues(_3C_classLit, 42, -1, [9508]), initValues(_3C_classLit, 42, -1, [9500]), initValues(_3C_classLit, 42, -1, [8245]), initValues(_3C_classLit, 42, -1, [728]), initValues(_3C_classLit, 42, -1, [166]), initValues(_3C_classLit, 42, -1, [166]), initValues(_3C_classLit, 42, -1, [55349, 56503]), initValues(_3C_classLit, 42, -1, [8271]), initValues(_3C_classLit, 42, -1, [8765]), initValues(_3C_classLit, 42, -1, [8909]), initValues(_3C_classLit, 42, -1, [92]), initValues(_3C_classLit, 42, -1, [10693]), initValues(_3C_classLit, 42, -1, [8226]), initValues(_3C_classLit, 42, -1, [8226]), initValues(_3C_classLit, 42, -1, [8782]), initValues(_3C_classLit, 42, -1, [10926]), initValues(_3C_classLit, 42, -1, [8783]), initValues(_3C_classLit, 42, -1, [8783]), initValues(_3C_classLit, 42, -1, [263]), initValues(_3C_classLit, 42, -1, [8745]), initValues(_3C_classLit, 42, -1, [10820]), initValues(_3C_classLit, 42, -1, [10825]), initValues(_3C_classLit, 42, -1, [10827]), initValues(_3C_classLit, 42, -1, [10823]), initValues(_3C_classLit, 42, -1, [10816]), initValues(_3C_classLit, 42, -1, [8257]), initValues(_3C_classLit, 42, -1, [711]), initValues(_3C_classLit, 42, -1, [10829]), initValues(_3C_classLit, 42, -1, [269]), initValues(_3C_classLit, 42, -1, [231]), initValues(_3C_classLit, 42, -1, [231]), initValues(_3C_classLit, 42, -1, [265]), initValues(_3C_classLit, 42, -1, [10828]), initValues(_3C_classLit, 42, -1, [10832]), initValues(_3C_classLit, 42, -1, [267]), initValues(_3C_classLit, 42, -1, [184]), initValues(_3C_classLit, 42, -1, [184]), initValues(_3C_classLit, 42, -1, [10674]), initValues(_3C_classLit, 42, -1, [162]), initValues(_3C_classLit, 42, -1, [162]), initValues(_3C_classLit, 42, -1, [183]), initValues(_3C_classLit, 42, -1, [55349, 56608]), initValues(_3C_classLit, 42, -1, [1095]), initValues(_3C_classLit, 42, -1, [10003]), initValues(_3C_classLit, 42, -1, [10003]), initValues(_3C_classLit, 42, -1, [967]), initValues(_3C_classLit, 42, -1, [9675]), initValues(_3C_classLit, 42, -1, [10691]), initValues(_3C_classLit, 42, -1, [710]), initValues(_3C_classLit, 42, -1, [8791]), initValues(_3C_classLit, 42, -1, [8634]), initValues(_3C_classLit, 42, -1, [8635]), initValues(_3C_classLit, 42, -1, [174]), initValues(_3C_classLit, 42, -1, [9416]), initValues(_3C_classLit, 42, -1, [8859]), initValues(_3C_classLit, 42, -1, [8858]), initValues(_3C_classLit, 42, -1, [8861]), initValues(_3C_classLit, 42, -1, [8791]), initValues(_3C_classLit, 42, -1, [10768]), initValues(_3C_classLit, 42, -1, [10991]), initValues(_3C_classLit, 42, -1, [10690]), initValues(_3C_classLit, 42, -1, [9827]), initValues(_3C_classLit, 42, -1, [9827]), initValues(_3C_classLit, 42, -1, [58]), initValues(_3C_classLit, 42, -1, [8788]), initValues(_3C_classLit, 42, -1, [8788]), initValues(_3C_classLit, 42, -1, [44]), initValues(_3C_classLit, 42, -1, [64]), initValues(_3C_classLit, 42, -1, [8705]), initValues(_3C_classLit, 42, -1, [8728]), initValues(_3C_classLit, 42, -1, [8705]), initValues(_3C_classLit, 42, -1, [8450]), initValues(_3C_classLit, 42, -1, [8773]), initValues(_3C_classLit, 42, -1, [10861]), initValues(_3C_classLit, 42, -1, [8750]), initValues(_3C_classLit, 42, -1, [55349, 56660]), initValues(_3C_classLit, 42, -1, [8720]), initValues(_3C_classLit, 42, -1, [169]), initValues(_3C_classLit, 42, -1, [169]), initValues(_3C_classLit, 42, -1, [8471]), initValues(_3C_classLit, 42, -1, [8629]), initValues(_3C_classLit, 42, -1, [10007]), initValues(_3C_classLit, 42, -1, [55349, 56504]), initValues(_3C_classLit, 42, -1, [10959]), initValues(_3C_classLit, 42, -1, [10961]), initValues(_3C_classLit, 42, -1, [10960]), initValues(_3C_classLit, 42, -1, [10962]), initValues(_3C_classLit, 42, -1, [8943]), initValues(_3C_classLit, 42, -1, [10552]), initValues(_3C_classLit, 42, -1, [10549]), initValues(_3C_classLit, 42, -1, [8926]), initValues(_3C_classLit, 42, -1, [8927]), initValues(_3C_classLit, 42, -1, [8630]), initValues(_3C_classLit, 42, -1, [10557]), initValues(_3C_classLit, 42, -1, [8746]), initValues(_3C_classLit, 42, -1, [10824]), initValues(_3C_classLit, 42, -1, [10822]), initValues(_3C_classLit, 42, -1, [10826]), initValues(_3C_classLit, 42, -1, [8845]), initValues(_3C_classLit, 42, -1, [10821]), initValues(_3C_classLit, 42, -1, [8631]), initValues(_3C_classLit, 42, -1, [10556]), initValues(_3C_classLit, 42, -1, [8926]), initValues(_3C_classLit, 42, -1, [8927]), initValues(_3C_classLit, 42, -1, [8910]), initValues(_3C_classLit, 42, -1, [8911]), initValues(_3C_classLit, 42, -1, [164]), initValues(_3C_classLit, 42, -1, [164]), initValues(_3C_classLit, 42, -1, [8630]), initValues(_3C_classLit, 42, -1, [8631]), initValues(_3C_classLit, 42, -1, [8910]), initValues(_3C_classLit, 42, -1, [8911]), initValues(_3C_classLit, 42, -1, [8754]), initValues(_3C_classLit, 42, -1, [8753]), initValues(_3C_classLit, 42, -1, [9005]), initValues(_3C_classLit, 42, -1, [8659]), initValues(_3C_classLit, 42, -1, [10597]), initValues(_3C_classLit, 42, -1, [8224]), initValues(_3C_classLit, 42, -1, [8504]), initValues(_3C_classLit, 42, -1, [8595]), initValues(_3C_classLit, 42, -1, [8208]), initValues(_3C_classLit, 42, -1, [8867]), initValues(_3C_classLit, 42, -1, [10511]), initValues(_3C_classLit, 42, -1, [733]), initValues(_3C_classLit, 42, -1, [271]), initValues(_3C_classLit, 42, -1, [1076]), initValues(_3C_classLit, 42, -1, [8518]), initValues(_3C_classLit, 42, -1, [8225]), initValues(_3C_classLit, 42, -1, [8650]), initValues(_3C_classLit, 42, -1, [10871]), initValues(_3C_classLit, 42, -1, [176]), initValues(_3C_classLit, 42, -1, [176]), initValues(_3C_classLit, 42, -1, [948]), initValues(_3C_classLit, 42, -1, [10673]), initValues(_3C_classLit, 42, -1, [10623]), initValues(_3C_classLit, 42, -1, [55349, 56609]), initValues(_3C_classLit, 42, -1, [8643]), initValues(_3C_classLit, 42, -1, [8642]), initValues(_3C_classLit, 42, -1, [8900]), initValues(_3C_classLit, 42, -1, [8900]), initValues(_3C_classLit, 42, -1, [9830]), initValues(_3C_classLit, 42, -1, [9830]), initValues(_3C_classLit, 42, -1, [168]), initValues(_3C_classLit, 42, -1, [989]), initValues(_3C_classLit, 42, -1, [8946]), initValues(_3C_classLit, 42, -1, [247]), initValues(_3C_classLit, 42, -1, [247]), initValues(_3C_classLit, 42, -1, [247]), initValues(_3C_classLit, 42, -1, [8903]), initValues(_3C_classLit, 42, -1, [8903]), initValues(_3C_classLit, 42, -1, [1106]), initValues(_3C_classLit, 42, -1, [8990]), initValues(_3C_classLit, 42, -1, [8973]), initValues(_3C_classLit, 42, -1, [36]), initValues(_3C_classLit, 42, -1, [55349, 56661]), initValues(_3C_classLit, 42, -1, [729]), initValues(_3C_classLit, 42, -1, [8784]), initValues(_3C_classLit, 42, -1, [8785]), initValues(_3C_classLit, 42, -1, [8760]), initValues(_3C_classLit, 42, -1, [8724]), initValues(_3C_classLit, 42, -1, [8865]), initValues(_3C_classLit, 42, -1, [8966]), initValues(_3C_classLit, 42, -1, [8595]), initValues(_3C_classLit, 42, -1, [8650]), initValues(_3C_classLit, 42, -1, [8643]), initValues(_3C_classLit, 42, -1, [8642]), initValues(_3C_classLit, 42, -1, [10512]), initValues(_3C_classLit, 42, -1, [8991]), initValues(_3C_classLit, 42, -1, [8972]), initValues(_3C_classLit, 42, -1, [55349, 56505]), initValues(_3C_classLit, 42, -1, [1109]), initValues(_3C_classLit, 42, -1, [10742]), initValues(_3C_classLit, 42, -1, [273]), initValues(_3C_classLit, 42, -1, [8945]), initValues(_3C_classLit, 42, -1, [9663]), initValues(_3C_classLit, 42, -1, [9662]), initValues(_3C_classLit, 42, -1, [8693]), initValues(_3C_classLit, 42, -1, [10607]), initValues(_3C_classLit, 42, -1, [10662]), initValues(_3C_classLit, 42, -1, [1119]), initValues(_3C_classLit, 42, -1, [10239]), initValues(_3C_classLit, 42, -1, [10871]), initValues(_3C_classLit, 42, -1, [8785]), initValues(_3C_classLit, 42, -1, [233]), initValues(_3C_classLit, 42, -1, [233]), initValues(_3C_classLit, 42, -1, [10862]), initValues(_3C_classLit, 42, -1, [283]), initValues(_3C_classLit, 42, -1, [8790]), initValues(_3C_classLit, 42, -1, [234]), initValues(_3C_classLit, 42, -1, [234]), initValues(_3C_classLit, 42, -1, [8789]), initValues(_3C_classLit, 42, -1, [1101]), initValues(_3C_classLit, 42, -1, [279]), initValues(_3C_classLit, 42, -1, [8519]), initValues(_3C_classLit, 42, -1, [8786]), initValues(_3C_classLit, 42, -1, [55349, 56610]), initValues(_3C_classLit, 42, -1, [10906]), initValues(_3C_classLit, 42, -1, [232]), initValues(_3C_classLit, 42, -1, [232]), initValues(_3C_classLit, 42, -1, [10902]), initValues(_3C_classLit, 42, -1, [10904]), initValues(_3C_classLit, 42, -1, [10905]), initValues(_3C_classLit, 42, -1, [9191]), initValues(_3C_classLit, 42, -1, [8467]), initValues(_3C_classLit, 42, -1, [10901]), initValues(_3C_classLit, 42, -1, [10903]), initValues(_3C_classLit, 42, -1, [275]), initValues(_3C_classLit, 42, -1, [8709]), initValues(_3C_classLit, 42, -1, [8709]), initValues(_3C_classLit, 42, -1, [8709]), initValues(_3C_classLit, 42, -1, [8196]), initValues(_3C_classLit, 42, -1, [8197]), initValues(_3C_classLit, 42, -1, [8195]), initValues(_3C_classLit, 42, -1, [331]), initValues(_3C_classLit, 42, -1, [8194]), initValues(_3C_classLit, 42, -1, [281]), initValues(_3C_classLit, 42, -1, [55349, 56662]), initValues(_3C_classLit, 42, -1, [8917]), initValues(_3C_classLit, 42, -1, [10723]), initValues(_3C_classLit, 42, -1, [10865]), initValues(_3C_classLit, 42, -1, [1013]), initValues(_3C_classLit, 42, -1, [949]), initValues(_3C_classLit, 42, -1, [949]), initValues(_3C_classLit, 42, -1, [8790]), initValues(_3C_classLit, 42, -1, [8789]), initValues(_3C_classLit, 42, -1, [8770]), initValues(_3C_classLit, 42, -1, [10902]), initValues(_3C_classLit, 42, -1, [10901]), initValues(_3C_classLit, 42, -1, [61]), initValues(_3C_classLit, 42, -1, [8799]), initValues(_3C_classLit, 42, -1, [8801]), initValues(_3C_classLit, 42, -1, [10872]), initValues(_3C_classLit, 42, -1, [10725]), initValues(_3C_classLit, 42, -1, [8787]), initValues(_3C_classLit, 42, -1, [10609]), initValues(_3C_classLit, 42, -1, [8495]), initValues(_3C_classLit, 42, -1, [8784]), initValues(_3C_classLit, 42, -1, [8770]), initValues(_3C_classLit, 42, -1, [951]), initValues(_3C_classLit, 42, -1, [240]), initValues(_3C_classLit, 42, -1, [240]), initValues(_3C_classLit, 42, -1, [235]), initValues(_3C_classLit, 42, -1, [235]), initValues(_3C_classLit, 42, -1, [8364]), initValues(_3C_classLit, 42, -1, [33]), initValues(_3C_classLit, 42, -1, [8707]), initValues(_3C_classLit, 42, -1, [8496]), initValues(_3C_classLit, 42, -1, [8519]), initValues(_3C_classLit, 42, -1, [8786]), initValues(_3C_classLit, 42, -1, [1092]), initValues(_3C_classLit, 42, -1, [9792]), initValues(_3C_classLit, 42, -1, [64259]), initValues(_3C_classLit, 42, -1, [64256]), initValues(_3C_classLit, 42, -1, [64260]), initValues(_3C_classLit, 42, -1, [55349, 56611]), initValues(_3C_classLit, 42, -1, [64257]), initValues(_3C_classLit, 42, -1, [9837]), initValues(_3C_classLit, 42, -1, [64258]), initValues(_3C_classLit, 42, -1, [9649]), initValues(_3C_classLit, 42, -1, [402]), initValues(_3C_classLit, 42, -1, [55349, 56663]), initValues(_3C_classLit, 42, -1, [8704]), initValues(_3C_classLit, 42, -1, [8916]), initValues(_3C_classLit, 42, -1, [10969]), initValues(_3C_classLit, 42, -1, [10765]), initValues(_3C_classLit, 42, -1, [189]), initValues(_3C_classLit, 42, -1, [189]), initValues(_3C_classLit, 42, -1, [8531]), initValues(_3C_classLit, 42, -1, [188]), initValues(_3C_classLit, 42, -1, [188]), initValues(_3C_classLit, 42, -1, [8533]), initValues(_3C_classLit, 42, -1, [8537]), initValues(_3C_classLit, 42, -1, [8539]), initValues(_3C_classLit, 42, -1, [8532]), initValues(_3C_classLit, 42, -1, [8534]), initValues(_3C_classLit, 42, -1, [190]), initValues(_3C_classLit, 42, -1, [190]), initValues(_3C_classLit, 42, -1, [8535]), initValues(_3C_classLit, 42, -1, [8540]), initValues(_3C_classLit, 42, -1, [8536]), initValues(_3C_classLit, 42, -1, [8538]), initValues(_3C_classLit, 42, -1, [8541]), initValues(_3C_classLit, 42, -1, [8542]), initValues(_3C_classLit, 42, -1, [8260]), initValues(_3C_classLit, 42, -1, [8994]), initValues(_3C_classLit, 42, -1, [55349, 56507]), initValues(_3C_classLit, 42, -1, [8807]), initValues(_3C_classLit, 42, -1, [10892]), initValues(_3C_classLit, 42, -1, [501]), initValues(_3C_classLit, 42, -1, [947]), initValues(_3C_classLit, 42, -1, [989]), initValues(_3C_classLit, 42, -1, [10886]), initValues(_3C_classLit, 42, -1, [287]), initValues(_3C_classLit, 42, -1, [285]), initValues(_3C_classLit, 42, -1, [1075]), initValues(_3C_classLit, 42, -1, [289]), initValues(_3C_classLit, 42, -1, [8805]), initValues(_3C_classLit, 42, -1, [8923]), initValues(_3C_classLit, 42, -1, [8805]), initValues(_3C_classLit, 42, -1, [8807]), initValues(_3C_classLit, 42, -1, [10878]), initValues(_3C_classLit, 42, -1, [10878]), initValues(_3C_classLit, 42, -1, [10921]), initValues(_3C_classLit, 42, -1, [10880]), initValues(_3C_classLit, 42, -1, [10882]), initValues(_3C_classLit, 42, -1, [10884]), initValues(_3C_classLit, 42, -1, [10900]), initValues(_3C_classLit, 42, -1, [55349, 56612]), initValues(_3C_classLit, 42, -1, [8811]), initValues(_3C_classLit, 42, -1, [8921]), initValues(_3C_classLit, 42, -1, [8503]), initValues(_3C_classLit, 42, -1, [1107]), initValues(_3C_classLit, 42, -1, [8823]), initValues(_3C_classLit, 42, -1, [10898]), initValues(_3C_classLit, 42, -1, [10917]), initValues(_3C_classLit, 42, -1, [10916]), initValues(_3C_classLit, 42, -1, [8809]), initValues(_3C_classLit, 42, -1, [10890]), initValues(_3C_classLit, 42, -1, [10890]), initValues(_3C_classLit, 42, -1, [10888]), initValues(_3C_classLit, 42, -1, [10888]), initValues(_3C_classLit, 42, -1, [8809]), initValues(_3C_classLit, 42, -1, [8935]), initValues(_3C_classLit, 42, -1, [55349, 56664]), initValues(_3C_classLit, 42, -1, [96]), initValues(_3C_classLit, 42, -1, [8458]), initValues(_3C_classLit, 42, -1, [8819]), initValues(_3C_classLit, 42, -1, [10894]), initValues(_3C_classLit, 42, -1, [10896]), initValues(_3C_classLit, 42, -1, [62]), initValues(_3C_classLit, 42, -1, [62]), initValues(_3C_classLit, 42, -1, [10919]), initValues(_3C_classLit, 42, -1, [10874]), initValues(_3C_classLit, 42, -1, [8919]), initValues(_3C_classLit, 42, -1, [10645]), initValues(_3C_classLit, 42, -1, [10876]), initValues(_3C_classLit, 42, -1, [10886]), initValues(_3C_classLit, 42, -1, [10616]), initValues(_3C_classLit, 42, -1, [8919]), initValues(_3C_classLit, 42, -1, [8923]), initValues(_3C_classLit, 42, -1, [10892]), initValues(_3C_classLit, 42, -1, [8823]), initValues(_3C_classLit, 42, -1, [8819]), initValues(_3C_classLit, 42, -1, [8660]), initValues(_3C_classLit, 42, -1, [8202]), initValues(_3C_classLit, 42, -1, [189]), initValues(_3C_classLit, 42, -1, [8459]), initValues(_3C_classLit, 42, -1, [1098]), initValues(_3C_classLit, 42, -1, [8596]), initValues(_3C_classLit, 42, -1, [10568]), initValues(_3C_classLit, 42, -1, [8621]), initValues(_3C_classLit, 42, -1, [8463]), initValues(_3C_classLit, 42, -1, [293]), initValues(_3C_classLit, 42, -1, [9829]), initValues(_3C_classLit, 42, -1, [9829]), initValues(_3C_classLit, 42, -1, [8230]), initValues(_3C_classLit, 42, -1, [8889]), initValues(_3C_classLit, 42, -1, [55349, 56613]), initValues(_3C_classLit, 42, -1, [10533]), initValues(_3C_classLit, 42, -1, [10534]), initValues(_3C_classLit, 42, -1, [8703]), initValues(_3C_classLit, 42, -1, [8763]), initValues(_3C_classLit, 42, -1, [8617]), initValues(_3C_classLit, 42, -1, [8618]), initValues(_3C_classLit, 42, -1, [55349, 56665]), initValues(_3C_classLit, 42, -1, [8213]), initValues(_3C_classLit, 42, -1, [55349, 56509]), initValues(_3C_classLit, 42, -1, [8463]), initValues(_3C_classLit, 42, -1, [295]), initValues(_3C_classLit, 42, -1, [8259]), initValues(_3C_classLit, 42, -1, [8208]), initValues(_3C_classLit, 42, -1, [237]), initValues(_3C_classLit, 42, -1, [237]), initValues(_3C_classLit, 42, -1, [8291]), initValues(_3C_classLit, 42, -1, [238]), initValues(_3C_classLit, 42, -1, [238]), initValues(_3C_classLit, 42, -1, [1080]), initValues(_3C_classLit, 42, -1, [1077]), initValues(_3C_classLit, 42, -1, [161]), initValues(_3C_classLit, 42, -1, [161]), initValues(_3C_classLit, 42, -1, [8660]), initValues(_3C_classLit, 42, -1, [55349, 56614]), initValues(_3C_classLit, 42, -1, [236]), initValues(_3C_classLit, 42, -1, [236]), initValues(_3C_classLit, 42, -1, [8520]), initValues(_3C_classLit, 42, -1, [10764]), initValues(_3C_classLit, 42, -1, [8749]), initValues(_3C_classLit, 42, -1, [10716]), initValues(_3C_classLit, 42, -1, [8489]), initValues(_3C_classLit, 42, -1, [307]), initValues(_3C_classLit, 42, -1, [299]), initValues(_3C_classLit, 42, -1, [8465]), initValues(_3C_classLit, 42, -1, [8464]), initValues(_3C_classLit, 42, -1, [8465]), initValues(_3C_classLit, 42, -1, [305]), initValues(_3C_classLit, 42, -1, [8887]), initValues(_3C_classLit, 42, -1, [437]), initValues(_3C_classLit, 42, -1, [8712]), initValues(_3C_classLit, 42, -1, [8453]), initValues(_3C_classLit, 42, -1, [8734]), initValues(_3C_classLit, 42, -1, [10717]), initValues(_3C_classLit, 42, -1, [305]), initValues(_3C_classLit, 42, -1, [8747]), initValues(_3C_classLit, 42, -1, [8890]), initValues(_3C_classLit, 42, -1, [8484]), initValues(_3C_classLit, 42, -1, [8890]), initValues(_3C_classLit, 42, -1, [10775]), initValues(_3C_classLit, 42, -1, [10812]), initValues(_3C_classLit, 42, -1, [1105]), initValues(_3C_classLit, 42, -1, [303]), initValues(_3C_classLit, 42, -1, [55349, 56666]), initValues(_3C_classLit, 42, -1, [953]), initValues(_3C_classLit, 42, -1, [10812]), initValues(_3C_classLit, 42, -1, [191]), initValues(_3C_classLit, 42, -1, [191]), initValues(_3C_classLit, 42, -1, [55349, 56510]), initValues(_3C_classLit, 42, -1, [8712]), initValues(_3C_classLit, 42, -1, [8953]), initValues(_3C_classLit, 42, -1, [8949]), initValues(_3C_classLit, 42, -1, [8948]), initValues(_3C_classLit, 42, -1, [8947]), initValues(_3C_classLit, 42, -1, [8712]), initValues(_3C_classLit, 42, -1, [8290]), initValues(_3C_classLit, 42, -1, [297]), initValues(_3C_classLit, 42, -1, [1110]), initValues(_3C_classLit, 42, -1, [239]), initValues(_3C_classLit, 42, -1, [239]), initValues(_3C_classLit, 42, -1, [309]), initValues(_3C_classLit, 42, -1, [1081]), initValues(_3C_classLit, 42, -1, [55349, 56615]), initValues(_3C_classLit, 42, -1, [567]), initValues(_3C_classLit, 42, -1, [55349, 56667]), initValues(_3C_classLit, 42, -1, [55349, 56511]), initValues(_3C_classLit, 42, -1, [1112]), initValues(_3C_classLit, 42, -1, [1108]), initValues(_3C_classLit, 42, -1, [954]), initValues(_3C_classLit, 42, -1, [1008]), initValues(_3C_classLit, 42, -1, [311]), initValues(_3C_classLit, 42, -1, [1082]), initValues(_3C_classLit, 42, -1, [55349, 56616]), initValues(_3C_classLit, 42, -1, [312]), initValues(_3C_classLit, 42, -1, [1093]), initValues(_3C_classLit, 42, -1, [1116]), initValues(_3C_classLit, 42, -1, [55349, 56668]), initValues(_3C_classLit, 42, -1, [55349, 56512]), initValues(_3C_classLit, 42, -1, [8666]), initValues(_3C_classLit, 42, -1, [8656]), initValues(_3C_classLit, 42, -1, [10523]), initValues(_3C_classLit, 42, -1, [10510]), initValues(_3C_classLit, 42, -1, [8806]), initValues(_3C_classLit, 42, -1, [10891]), initValues(_3C_classLit, 42, -1, [10594]), initValues(_3C_classLit, 42, -1, [314]), initValues(_3C_classLit, 42, -1, [10676]), initValues(_3C_classLit, 42, -1, [8466]), initValues(_3C_classLit, 42, -1, [955]), initValues(_3C_classLit, 42, -1, [10216]), initValues(_3C_classLit, 42, -1, [10641]), initValues(_3C_classLit, 42, -1, [10216]), initValues(_3C_classLit, 42, -1, [10885]), initValues(_3C_classLit, 42, -1, [171]), initValues(_3C_classLit, 42, -1, [171]), initValues(_3C_classLit, 42, -1, [8592]), initValues(_3C_classLit, 42, -1, [8676]), initValues(_3C_classLit, 42, -1, [10527]), initValues(_3C_classLit, 42, -1, [10525]), initValues(_3C_classLit, 42, -1, [8617]), initValues(_3C_classLit, 42, -1, [8619]), initValues(_3C_classLit, 42, -1, [10553]), initValues(_3C_classLit, 42, -1, [10611]), initValues(_3C_classLit, 42, -1, [8610]), initValues(_3C_classLit, 42, -1, [10923]), initValues(_3C_classLit, 42, -1, [10521]), initValues(_3C_classLit, 42, -1, [10925]), initValues(_3C_classLit, 42, -1, [10508]), initValues(_3C_classLit, 42, -1, [10098]), initValues(_3C_classLit, 42, -1, [123]), initValues(_3C_classLit, 42, -1, [91]), initValues(_3C_classLit, 42, -1, [10635]), initValues(_3C_classLit, 42, -1, [10639]), initValues(_3C_classLit, 42, -1, [10637]), initValues(_3C_classLit, 42, -1, [318]), initValues(_3C_classLit, 42, -1, [316]), initValues(_3C_classLit, 42, -1, [8968]), initValues(_3C_classLit, 42, -1, [123]), initValues(_3C_classLit, 42, -1, [1083]), initValues(_3C_classLit, 42, -1, [10550]), initValues(_3C_classLit, 42, -1, [8220]), initValues(_3C_classLit, 42, -1, [8222]), initValues(_3C_classLit, 42, -1, [10599]), initValues(_3C_classLit, 42, -1, [10571]), initValues(_3C_classLit, 42, -1, [8626]), initValues(_3C_classLit, 42, -1, [8804]), initValues(_3C_classLit, 42, -1, [8592]), initValues(_3C_classLit, 42, -1, [8610]), initValues(_3C_classLit, 42, -1, [8637]), initValues(_3C_classLit, 42, -1, [8636]), initValues(_3C_classLit, 42, -1, [8647]), initValues(_3C_classLit, 42, -1, [8596]), initValues(_3C_classLit, 42, -1, [8646]), initValues(_3C_classLit, 42, -1, [8651]), initValues(_3C_classLit, 42, -1, [8621]), initValues(_3C_classLit, 42, -1, [8907]), initValues(_3C_classLit, 42, -1, [8922]), initValues(_3C_classLit, 42, -1, [8804]), initValues(_3C_classLit, 42, -1, [8806]), initValues(_3C_classLit, 42, -1, [10877]), initValues(_3C_classLit, 42, -1, [10877]), initValues(_3C_classLit, 42, -1, [10920]), initValues(_3C_classLit, 42, -1, [10879]), initValues(_3C_classLit, 42, -1, [10881]), initValues(_3C_classLit, 42, -1, [10883]), initValues(_3C_classLit, 42, -1, [10899]), initValues(_3C_classLit, 42, -1, [10885]), initValues(_3C_classLit, 42, -1, [8918]), initValues(_3C_classLit, 42, -1, [8922]), initValues(_3C_classLit, 42, -1, [10891]), initValues(_3C_classLit, 42, -1, [8822]), initValues(_3C_classLit, 42, -1, [8818]), initValues(_3C_classLit, 42, -1, [10620]), initValues(_3C_classLit, 42, -1, [8970]), initValues(_3C_classLit, 42, -1, [55349, 56617]), initValues(_3C_classLit, 42, -1, [8822]), initValues(_3C_classLit, 42, -1, [10897]), initValues(_3C_classLit, 42, -1, [8637]), initValues(_3C_classLit, 42, -1, [8636]), initValues(_3C_classLit, 42, -1, [10602]), initValues(_3C_classLit, 42, -1, [9604]), initValues(_3C_classLit, 42, -1, [1113]), initValues(_3C_classLit, 42, -1, [8810]), initValues(_3C_classLit, 42, -1, [8647]), initValues(_3C_classLit, 42, -1, [8990]), initValues(_3C_classLit, 42, -1, [10603]), initValues(_3C_classLit, 42, -1, [9722]), initValues(_3C_classLit, 42, -1, [320]), initValues(_3C_classLit, 42, -1, [9136]), initValues(_3C_classLit, 42, -1, [9136]), initValues(_3C_classLit, 42, -1, [8808]), initValues(_3C_classLit, 42, -1, [10889]), initValues(_3C_classLit, 42, -1, [10889]), initValues(_3C_classLit, 42, -1, [10887]), initValues(_3C_classLit, 42, -1, [10887]), initValues(_3C_classLit, 42, -1, [8808]), initValues(_3C_classLit, 42, -1, [8934]), initValues(_3C_classLit, 42, -1, [10220]), initValues(_3C_classLit, 42, -1, [8701]), initValues(_3C_classLit, 42, -1, [10214]), initValues(_3C_classLit, 42, -1, [10229]), initValues(_3C_classLit, 42, -1, [10231]), initValues(_3C_classLit, 42, -1, [10236]), initValues(_3C_classLit, 42, -1, [10230]), initValues(_3C_classLit, 42, -1, [8619]), initValues(_3C_classLit, 42, -1, [8620]), initValues(_3C_classLit, 42, -1, [10629]), initValues(_3C_classLit, 42, -1, [55349, 56669]), initValues(_3C_classLit, 42, -1, [10797]), initValues(_3C_classLit, 42, -1, [10804]), initValues(_3C_classLit, 42, -1, [8727]), initValues(_3C_classLit, 42, -1, [95]), initValues(_3C_classLit, 42, -1, [9674]), initValues(_3C_classLit, 42, -1, [9674]), initValues(_3C_classLit, 42, -1, [10731]), initValues(_3C_classLit, 42, -1, [40]), initValues(_3C_classLit, 42, -1, [10643]), initValues(_3C_classLit, 42, -1, [8646]), initValues(_3C_classLit, 42, -1, [8991]), initValues(_3C_classLit, 42, -1, [8651]), initValues(_3C_classLit, 42, -1, [10605]), initValues(_3C_classLit, 42, -1, [8206]), initValues(_3C_classLit, 42, -1, [8895]), initValues(_3C_classLit, 42, -1, [8249]), initValues(_3C_classLit, 42, -1, [55349, 56513]), initValues(_3C_classLit, 42, -1, [8624]), initValues(_3C_classLit, 42, -1, [8818]), initValues(_3C_classLit, 42, -1, [10893]), initValues(_3C_classLit, 42, -1, [10895]), initValues(_3C_classLit, 42, -1, [91]), initValues(_3C_classLit, 42, -1, [8216]), initValues(_3C_classLit, 42, -1, [8218]), initValues(_3C_classLit, 42, -1, [322]), initValues(_3C_classLit, 42, -1, [60]), initValues(_3C_classLit, 42, -1, [60]), initValues(_3C_classLit, 42, -1, [10918]), initValues(_3C_classLit, 42, -1, [10873]), initValues(_3C_classLit, 42, -1, [8918]), initValues(_3C_classLit, 42, -1, [8907]), initValues(_3C_classLit, 42, -1, [8905]), initValues(_3C_classLit, 42, -1, [10614]), initValues(_3C_classLit, 42, -1, [10875]), initValues(_3C_classLit, 42, -1, [10646]), initValues(_3C_classLit, 42, -1, [9667]), initValues(_3C_classLit, 42, -1, [8884]), initValues(_3C_classLit, 42, -1, [9666]), initValues(_3C_classLit, 42, -1, [10570]), initValues(_3C_classLit, 42, -1, [10598]), initValues(_3C_classLit, 42, -1, [8762]), initValues(_3C_classLit, 42, -1, [175]), initValues(_3C_classLit, 42, -1, [175]), initValues(_3C_classLit, 42, -1, [9794]), initValues(_3C_classLit, 42, -1, [10016]), initValues(_3C_classLit, 42, -1, [10016]), initValues(_3C_classLit, 42, -1, [8614]), initValues(_3C_classLit, 42, -1, [8614]), initValues(_3C_classLit, 42, -1, [8615]), initValues(_3C_classLit, 42, -1, [8612]), initValues(_3C_classLit, 42, -1, [8613]), initValues(_3C_classLit, 42, -1, [9646]), initValues(_3C_classLit, 42, -1, [10793]), initValues(_3C_classLit, 42, -1, [1084]), initValues(_3C_classLit, 42, -1, [8212]), initValues(_3C_classLit, 42, -1, [8737]), initValues(_3C_classLit, 42, -1, [55349, 56618]), initValues(_3C_classLit, 42, -1, [8487]), initValues(_3C_classLit, 42, -1, [181]), initValues(_3C_classLit, 42, -1, [181]), initValues(_3C_classLit, 42, -1, [8739]), initValues(_3C_classLit, 42, -1, [42]), initValues(_3C_classLit, 42, -1, [10992]), initValues(_3C_classLit, 42, -1, [183]), initValues(_3C_classLit, 42, -1, [183]), initValues(_3C_classLit, 42, -1, [8722]), initValues(_3C_classLit, 42, -1, [8863]), initValues(_3C_classLit, 42, -1, [8760]), initValues(_3C_classLit, 42, -1, [10794]), initValues(_3C_classLit, 42, -1, [10971]), initValues(_3C_classLit, 42, -1, [8230]), initValues(_3C_classLit, 42, -1, [8723]), initValues(_3C_classLit, 42, -1, [8871]), initValues(_3C_classLit, 42, -1, [55349, 56670]), initValues(_3C_classLit, 42, -1, [8723]), initValues(_3C_classLit, 42, -1, [55349, 56514]), initValues(_3C_classLit, 42, -1, [8766]), initValues(_3C_classLit, 42, -1, [956]), initValues(_3C_classLit, 42, -1, [8888]), initValues(_3C_classLit, 42, -1, [8888]), initValues(_3C_classLit, 42, -1, [8653]), initValues(_3C_classLit, 42, -1, [8654]), initValues(_3C_classLit, 42, -1, [8655]), initValues(_3C_classLit, 42, -1, [8879]), initValues(_3C_classLit, 42, -1, [8878]), initValues(_3C_classLit, 42, -1, [8711]), initValues(_3C_classLit, 42, -1, [324]), initValues(_3C_classLit, 42, -1, [8777]), initValues(_3C_classLit, 42, -1, [329]), initValues(_3C_classLit, 42, -1, [8777]), initValues(_3C_classLit, 42, -1, [9838]), initValues(_3C_classLit, 42, -1, [9838]), initValues(_3C_classLit, 42, -1, [8469]), initValues(_3C_classLit, 42, -1, [160]), initValues(_3C_classLit, 42, -1, [160]), initValues(_3C_classLit, 42, -1, [10819]), initValues(_3C_classLit, 42, -1, [328]), initValues(_3C_classLit, 42, -1, [326]), initValues(_3C_classLit, 42, -1, [8775]), initValues(_3C_classLit, 42, -1, [10818]), initValues(_3C_classLit, 42, -1, [1085]), initValues(_3C_classLit, 42, -1, [8211]), initValues(_3C_classLit, 42, -1, [8800]), initValues(_3C_classLit, 42, -1, [8663]), initValues(_3C_classLit, 42, -1, [10532]), initValues(_3C_classLit, 42, -1, [8599]), initValues(_3C_classLit, 42, -1, [8599]), initValues(_3C_classLit, 42, -1, [8802]), initValues(_3C_classLit, 42, -1, [10536]), initValues(_3C_classLit, 42, -1, [8708]), initValues(_3C_classLit, 42, -1, [8708]), initValues(_3C_classLit, 42, -1, [55349, 56619]), initValues(_3C_classLit, 42, -1, [8817]), initValues(_3C_classLit, 42, -1, [8817]), initValues(_3C_classLit, 42, -1, [8821]), initValues(_3C_classLit, 42, -1, [8815]), initValues(_3C_classLit, 42, -1, [8815]), initValues(_3C_classLit, 42, -1, [8654]), initValues(_3C_classLit, 42, -1, [8622]), initValues(_3C_classLit, 42, -1, [10994]), initValues(_3C_classLit, 42, -1, [8715]), initValues(_3C_classLit, 42, -1, [8956]), initValues(_3C_classLit, 42, -1, [8954]), initValues(_3C_classLit, 42, -1, [8715]), initValues(_3C_classLit, 42, -1, [1114]), initValues(_3C_classLit, 42, -1, [8653]), initValues(_3C_classLit, 42, -1, [8602]), initValues(_3C_classLit, 42, -1, [8229]), initValues(_3C_classLit, 42, -1, [8816]), initValues(_3C_classLit, 42, -1, [8602]), initValues(_3C_classLit, 42, -1, [8622]), initValues(_3C_classLit, 42, -1, [8816]), initValues(_3C_classLit, 42, -1, [8814]), initValues(_3C_classLit, 42, -1, [8820]), initValues(_3C_classLit, 42, -1, [8814]), initValues(_3C_classLit, 42, -1, [8938]), initValues(_3C_classLit, 42, -1, [8940]), initValues(_3C_classLit, 42, -1, [8740]), initValues(_3C_classLit, 42, -1, [55349, 56671]), initValues(_3C_classLit, 42, -1, [172]), initValues(_3C_classLit, 42, -1, [172]), initValues(_3C_classLit, 42, -1, [8713]), initValues(_3C_classLit, 42, -1, [8713]), initValues(_3C_classLit, 42, -1, [8951]), initValues(_3C_classLit, 42, -1, [8950]), initValues(_3C_classLit, 42, -1, [8716]), initValues(_3C_classLit, 42, -1, [8716]), initValues(_3C_classLit, 42, -1, [8958]), initValues(_3C_classLit, 42, -1, [8957]), initValues(_3C_classLit, 42, -1, [8742]), initValues(_3C_classLit, 42, -1, [8742]), initValues(_3C_classLit, 42, -1, [10772]), initValues(_3C_classLit, 42, -1, [8832]), initValues(_3C_classLit, 42, -1, [8928]), initValues(_3C_classLit, 42, -1, [8832]), initValues(_3C_classLit, 42, -1, [8655]), initValues(_3C_classLit, 42, -1, [8603]), initValues(_3C_classLit, 42, -1, [8603]), initValues(_3C_classLit, 42, -1, [8939]), initValues(_3C_classLit, 42, -1, [8941]), initValues(_3C_classLit, 42, -1, [8833]), initValues(_3C_classLit, 42, -1, [8929]), initValues(_3C_classLit, 42, -1, [55349, 56515]), initValues(_3C_classLit, 42, -1, [8740]), initValues(_3C_classLit, 42, -1, [8742]), initValues(_3C_classLit, 42, -1, [8769]), initValues(_3C_classLit, 42, -1, [8772]), initValues(_3C_classLit, 42, -1, [8772]), initValues(_3C_classLit, 42, -1, [8740]), initValues(_3C_classLit, 42, -1, [8742]), initValues(_3C_classLit, 42, -1, [8930]), initValues(_3C_classLit, 42, -1, [8931]), initValues(_3C_classLit, 42, -1, [8836]), initValues(_3C_classLit, 42, -1, [8840]), initValues(_3C_classLit, 42, -1, [8840]), initValues(_3C_classLit, 42, -1, [8833]), initValues(_3C_classLit, 42, -1, [8837]), initValues(_3C_classLit, 42, -1, [8841]), initValues(_3C_classLit, 42, -1, [8841]), initValues(_3C_classLit, 42, -1, [8825]), initValues(_3C_classLit, 42, -1, [241]), initValues(_3C_classLit, 42, -1, [241]), initValues(_3C_classLit, 42, -1, [8824]), initValues(_3C_classLit, 42, -1, [8938]), initValues(_3C_classLit, 42, -1, [8940]), initValues(_3C_classLit, 42, -1, [8939]), initValues(_3C_classLit, 42, -1, [8941]), initValues(_3C_classLit, 42, -1, [957]), initValues(_3C_classLit, 42, -1, [35]), initValues(_3C_classLit, 42, -1, [8470]), initValues(_3C_classLit, 42, -1, [8199]), initValues(_3C_classLit, 42, -1, [8877]), initValues(_3C_classLit, 42, -1, [10500]), initValues(_3C_classLit, 42, -1, [8876]), initValues(_3C_classLit, 42, -1, [10718]), initValues(_3C_classLit, 42, -1, [10498]), initValues(_3C_classLit, 42, -1, [10499]), initValues(_3C_classLit, 42, -1, [8662]), initValues(_3C_classLit, 42, -1, [10531]), initValues(_3C_classLit, 42, -1, [8598]), initValues(_3C_classLit, 42, -1, [8598]), initValues(_3C_classLit, 42, -1, [10535]), initValues(_3C_classLit, 42, -1, [9416]), initValues(_3C_classLit, 42, -1, [243]), initValues(_3C_classLit, 42, -1, [243]), initValues(_3C_classLit, 42, -1, [8859]), initValues(_3C_classLit, 42, -1, [8858]), initValues(_3C_classLit, 42, -1, [244]), initValues(_3C_classLit, 42, -1, [244]), initValues(_3C_classLit, 42, -1, [1086]), initValues(_3C_classLit, 42, -1, [8861]), initValues(_3C_classLit, 42, -1, [337]), initValues(_3C_classLit, 42, -1, [10808]), initValues(_3C_classLit, 42, -1, [8857]), initValues(_3C_classLit, 42, -1, [10684]), initValues(_3C_classLit, 42, -1, [339]), initValues(_3C_classLit, 42, -1, [10687]), initValues(_3C_classLit, 42, -1, [55349, 56620]), initValues(_3C_classLit, 42, -1, [731]), initValues(_3C_classLit, 42, -1, [242]), initValues(_3C_classLit, 42, -1, [242]), initValues(_3C_classLit, 42, -1, [10689]), initValues(_3C_classLit, 42, -1, [10677]), initValues(_3C_classLit, 42, -1, [8486]), initValues(_3C_classLit, 42, -1, [8750]), initValues(_3C_classLit, 42, -1, [8634]), initValues(_3C_classLit, 42, -1, [10686]), initValues(_3C_classLit, 42, -1, [10683]), initValues(_3C_classLit, 42, -1, [8254]), initValues(_3C_classLit, 42, -1, [10688]), initValues(_3C_classLit, 42, -1, [333]), initValues(_3C_classLit, 42, -1, [969]), initValues(_3C_classLit, 42, -1, [959]), initValues(_3C_classLit, 42, -1, [10678]), initValues(_3C_classLit, 42, -1, [8854]), initValues(_3C_classLit, 42, -1, [55349, 56672]), initValues(_3C_classLit, 42, -1, [10679]), initValues(_3C_classLit, 42, -1, [10681]), initValues(_3C_classLit, 42, -1, [8853]), initValues(_3C_classLit, 42, -1, [8744]), initValues(_3C_classLit, 42, -1, [8635]), initValues(_3C_classLit, 42, -1, [10845]), initValues(_3C_classLit, 42, -1, [8500]), initValues(_3C_classLit, 42, -1, [8500]), initValues(_3C_classLit, 42, -1, [170]), initValues(_3C_classLit, 42, -1, [170]), initValues(_3C_classLit, 42, -1, [186]), initValues(_3C_classLit, 42, -1, [186]), initValues(_3C_classLit, 42, -1, [8886]), initValues(_3C_classLit, 42, -1, [10838]), initValues(_3C_classLit, 42, -1, [10839]), initValues(_3C_classLit, 42, -1, [10843]), initValues(_3C_classLit, 42, -1, [8500]), initValues(_3C_classLit, 42, -1, [248]), initValues(_3C_classLit, 42, -1, [248]), initValues(_3C_classLit, 42, -1, [8856]), initValues(_3C_classLit, 42, -1, [245]), initValues(_3C_classLit, 42, -1, [245]), initValues(_3C_classLit, 42, -1, [8855]), initValues(_3C_classLit, 42, -1, [10806]), initValues(_3C_classLit, 42, -1, [246]), initValues(_3C_classLit, 42, -1, [246]), initValues(_3C_classLit, 42, -1, [9021]), initValues(_3C_classLit, 42, -1, [8741]), initValues(_3C_classLit, 42, -1, [182]), initValues(_3C_classLit, 42, -1, [182]), initValues(_3C_classLit, 42, -1, [8741]), initValues(_3C_classLit, 42, -1, [10995]), initValues(_3C_classLit, 42, -1, [11005]), initValues(_3C_classLit, 42, -1, [8706]), initValues(_3C_classLit, 42, -1, [1087]), initValues(_3C_classLit, 42, -1, [37]), initValues(_3C_classLit, 42, -1, [46]), initValues(_3C_classLit, 42, -1, [8240]), initValues(_3C_classLit, 42, -1, [8869]), initValues(_3C_classLit, 42, -1, [8241]), initValues(_3C_classLit, 42, -1, [55349, 56621]), initValues(_3C_classLit, 42, -1, [966]), initValues(_3C_classLit, 42, -1, [966]), initValues(_3C_classLit, 42, -1, [8499]), initValues(_3C_classLit, 42, -1, [9742]), initValues(_3C_classLit, 42, -1, [960]), initValues(_3C_classLit, 42, -1, [8916]), initValues(_3C_classLit, 42, -1, [982]), initValues(_3C_classLit, 42, -1, [8463]), initValues(_3C_classLit, 42, -1, [8462]), initValues(_3C_classLit, 42, -1, [8463]), initValues(_3C_classLit, 42, -1, [43]), initValues(_3C_classLit, 42, -1, [10787]), initValues(_3C_classLit, 42, -1, [8862]), initValues(_3C_classLit, 42, -1, [10786]), initValues(_3C_classLit, 42, -1, [8724]), initValues(_3C_classLit, 42, -1, [10789]), initValues(_3C_classLit, 42, -1, [10866]), initValues(_3C_classLit, 42, -1, [177]), initValues(_3C_classLit, 42, -1, [177]), initValues(_3C_classLit, 42, -1, [10790]), initValues(_3C_classLit, 42, -1, [10791]), initValues(_3C_classLit, 42, -1, [177]), initValues(_3C_classLit, 42, -1, [10773]), initValues(_3C_classLit, 42, -1, [55349, 56673]), initValues(_3C_classLit, 42, -1, [163]), initValues(_3C_classLit, 42, -1, [163]), initValues(_3C_classLit, 42, -1, [8826]), initValues(_3C_classLit, 42, -1, [10931]), initValues(_3C_classLit, 42, -1, [10935]), initValues(_3C_classLit, 42, -1, [8828]), initValues(_3C_classLit, 42, -1, [10927]), initValues(_3C_classLit, 42, -1, [8826]), initValues(_3C_classLit, 42, -1, [10935]), initValues(_3C_classLit, 42, -1, [8828]), initValues(_3C_classLit, 42, -1, [10927]), initValues(_3C_classLit, 42, -1, [10937]), initValues(_3C_classLit, 42, -1, [10933]), initValues(_3C_classLit, 42, -1, [8936]), initValues(_3C_classLit, 42, -1, [8830]), initValues(_3C_classLit, 42, -1, [8242]), initValues(_3C_classLit, 42, -1, [8473]), initValues(_3C_classLit, 42, -1, [10933]), initValues(_3C_classLit, 42, -1, [10937]), initValues(_3C_classLit, 42, -1, [8936]), initValues(_3C_classLit, 42, -1, [8719]), initValues(_3C_classLit, 42, -1, [9006]), initValues(_3C_classLit, 42, -1, [8978]), initValues(_3C_classLit, 42, -1, [8979]), initValues(_3C_classLit, 42, -1, [8733]), initValues(_3C_classLit, 42, -1, [8733]), initValues(_3C_classLit, 42, -1, [8830]), initValues(_3C_classLit, 42, -1, [8880]), initValues(_3C_classLit, 42, -1, [55349, 56517]), initValues(_3C_classLit, 42, -1, [968]), initValues(_3C_classLit, 42, -1, [8200]), initValues(_3C_classLit, 42, -1, [55349, 56622]), initValues(_3C_classLit, 42, -1, [10764]), initValues(_3C_classLit, 42, -1, [55349, 56674]), initValues(_3C_classLit, 42, -1, [8279]), initValues(_3C_classLit, 42, -1, [55349, 56518]), initValues(_3C_classLit, 42, -1, [8461]), initValues(_3C_classLit, 42, -1, [10774]), initValues(_3C_classLit, 42, -1, [63]), initValues(_3C_classLit, 42, -1, [8799]), initValues(_3C_classLit, 42, -1, [34]), initValues(_3C_classLit, 42, -1, [34]), initValues(_3C_classLit, 42, -1, [8667]), initValues(_3C_classLit, 42, -1, [8658]), initValues(_3C_classLit, 42, -1, [10524]), initValues(_3C_classLit, 42, -1, [10511]), initValues(_3C_classLit, 42, -1, [10596]), initValues(_3C_classLit, 42, -1, [10714]), initValues(_3C_classLit, 42, -1, [341]), initValues(_3C_classLit, 42, -1, [8730]), initValues(_3C_classLit, 42, -1, [10675]), initValues(_3C_classLit, 42, -1, [10217]), initValues(_3C_classLit, 42, -1, [10642]), initValues(_3C_classLit, 42, -1, [10661]), initValues(_3C_classLit, 42, -1, [10217]), initValues(_3C_classLit, 42, -1, [187]), initValues(_3C_classLit, 42, -1, [187]), initValues(_3C_classLit, 42, -1, [8594]), initValues(_3C_classLit, 42, -1, [10613]), initValues(_3C_classLit, 42, -1, [8677]), initValues(_3C_classLit, 42, -1, [10528]), initValues(_3C_classLit, 42, -1, [10547]), initValues(_3C_classLit, 42, -1, [10526]), initValues(_3C_classLit, 42, -1, [8618]), initValues(_3C_classLit, 42, -1, [8620]), initValues(_3C_classLit, 42, -1, [10565]), initValues(_3C_classLit, 42, -1, [10612]), initValues(_3C_classLit, 42, -1, [8611]), initValues(_3C_classLit, 42, -1, [8605]), initValues(_3C_classLit, 42, -1, [10522]), initValues(_3C_classLit, 42, -1, [8758]), initValues(_3C_classLit, 42, -1, [8474]), initValues(_3C_classLit, 42, -1, [10509]), initValues(_3C_classLit, 42, -1, [10099]), initValues(_3C_classLit, 42, -1, [125]), initValues(_3C_classLit, 42, -1, [93]), initValues(_3C_classLit, 42, -1, [10636]), initValues(_3C_classLit, 42, -1, [10638]), initValues(_3C_classLit, 42, -1, [10640]), initValues(_3C_classLit, 42, -1, [345]), initValues(_3C_classLit, 42, -1, [343]), initValues(_3C_classLit, 42, -1, [8969]), initValues(_3C_classLit, 42, -1, [125]), initValues(_3C_classLit, 42, -1, [1088]), initValues(_3C_classLit, 42, -1, [10551]), initValues(_3C_classLit, 42, -1, [10601]), initValues(_3C_classLit, 42, -1, [8221]), initValues(_3C_classLit, 42, -1, [8221]), initValues(_3C_classLit, 42, -1, [8627]), initValues(_3C_classLit, 42, -1, [8476]), initValues(_3C_classLit, 42, -1, [8475]), initValues(_3C_classLit, 42, -1, [8476]), initValues(_3C_classLit, 42, -1, [8477]), initValues(_3C_classLit, 42, -1, [9645]), initValues(_3C_classLit, 42, -1, [174]), initValues(_3C_classLit, 42, -1, [174]), initValues(_3C_classLit, 42, -1, [10621]), initValues(_3C_classLit, 42, -1, [8971]), initValues(_3C_classLit, 42, -1, [55349, 56623]), initValues(_3C_classLit, 42, -1, [8641]), initValues(_3C_classLit, 42, -1, [8640]), initValues(_3C_classLit, 42, -1, [10604]), initValues(_3C_classLit, 42, -1, [961]), initValues(_3C_classLit, 42, -1, [1009]), initValues(_3C_classLit, 42, -1, [8594]), initValues(_3C_classLit, 42, -1, [8611]), initValues(_3C_classLit, 42, -1, [8641]), initValues(_3C_classLit, 42, -1, [8640]), initValues(_3C_classLit, 42, -1, [8644]), initValues(_3C_classLit, 42, -1, [8652]), initValues(_3C_classLit, 42, -1, [8649]), initValues(_3C_classLit, 42, -1, [8605]), initValues(_3C_classLit, 42, -1, [8908]), initValues(_3C_classLit, 42, -1, [730]), initValues(_3C_classLit, 42, -1, [8787]), initValues(_3C_classLit, 42, -1, [8644]), initValues(_3C_classLit, 42, -1, [8652]), initValues(_3C_classLit, 42, -1, [8207]), initValues(_3C_classLit, 42, -1, [9137]), initValues(_3C_classLit, 42, -1, [9137]), initValues(_3C_classLit, 42, -1, [10990]), initValues(_3C_classLit, 42, -1, [10221]), initValues(_3C_classLit, 42, -1, [8702]), initValues(_3C_classLit, 42, -1, [10215]), initValues(_3C_classLit, 42, -1, [10630]), initValues(_3C_classLit, 42, -1, [55349, 56675]), initValues(_3C_classLit, 42, -1, [10798]), initValues(_3C_classLit, 42, -1, [10805]), initValues(_3C_classLit, 42, -1, [41]), initValues(_3C_classLit, 42, -1, [10644]), initValues(_3C_classLit, 42, -1, [10770]), initValues(_3C_classLit, 42, -1, [8649]), initValues(_3C_classLit, 42, -1, [8250]), initValues(_3C_classLit, 42, -1, [55349, 56519]), initValues(_3C_classLit, 42, -1, [8625]), initValues(_3C_classLit, 42, -1, [93]), initValues(_3C_classLit, 42, -1, [8217]), initValues(_3C_classLit, 42, -1, [8217]), initValues(_3C_classLit, 42, -1, [8908]), initValues(_3C_classLit, 42, -1, [8906]), initValues(_3C_classLit, 42, -1, [9657]), initValues(_3C_classLit, 42, -1, [8885]), initValues(_3C_classLit, 42, -1, [9656]), initValues(_3C_classLit, 42, -1, [10702]), initValues(_3C_classLit, 42, -1, [10600]), initValues(_3C_classLit, 42, -1, [8478]), initValues(_3C_classLit, 42, -1, [347]), initValues(_3C_classLit, 42, -1, [8218]), initValues(_3C_classLit, 42, -1, [8827]), initValues(_3C_classLit, 42, -1, [10932]), initValues(_3C_classLit, 42, -1, [10936]), initValues(_3C_classLit, 42, -1, [353]), initValues(_3C_classLit, 42, -1, [8829]), initValues(_3C_classLit, 42, -1, [10928]), initValues(_3C_classLit, 42, -1, [351]), initValues(_3C_classLit, 42, -1, [349]), initValues(_3C_classLit, 42, -1, [10934]), initValues(_3C_classLit, 42, -1, [10938]), initValues(_3C_classLit, 42, -1, [8937]), initValues(_3C_classLit, 42, -1, [10771]), initValues(_3C_classLit, 42, -1, [8831]), initValues(_3C_classLit, 42, -1, [1089]), initValues(_3C_classLit, 42, -1, [8901]), initValues(_3C_classLit, 42, -1, [8865]), initValues(_3C_classLit, 42, -1, [10854]), initValues(_3C_classLit, 42, -1, [8664]), initValues(_3C_classLit, 42, -1, [10533]), initValues(_3C_classLit, 42, -1, [8600]), initValues(_3C_classLit, 42, -1, [8600]), initValues(_3C_classLit, 42, -1, [167]), initValues(_3C_classLit, 42, -1, [167]), initValues(_3C_classLit, 42, -1, [59]), initValues(_3C_classLit, 42, -1, [10537]), initValues(_3C_classLit, 42, -1, [8726]), initValues(_3C_classLit, 42, -1, [8726]), initValues(_3C_classLit, 42, -1, [10038]), initValues(_3C_classLit, 42, -1, [55349, 56624]), initValues(_3C_classLit, 42, -1, [8994]), initValues(_3C_classLit, 42, -1, [9839]), initValues(_3C_classLit, 42, -1, [1097]), initValues(_3C_classLit, 42, -1, [1096]), initValues(_3C_classLit, 42, -1, [8739]), initValues(_3C_classLit, 42, -1, [8741]), initValues(_3C_classLit, 42, -1, [173]), initValues(_3C_classLit, 42, -1, [173]), initValues(_3C_classLit, 42, -1, [963]), initValues(_3C_classLit, 42, -1, [962]), initValues(_3C_classLit, 42, -1, [962]), initValues(_3C_classLit, 42, -1, [8764]), initValues(_3C_classLit, 42, -1, [10858]), initValues(_3C_classLit, 42, -1, [8771]), initValues(_3C_classLit, 42, -1, [8771]), initValues(_3C_classLit, 42, -1, [10910]), initValues(_3C_classLit, 42, -1, [10912]), initValues(_3C_classLit, 42, -1, [10909]), initValues(_3C_classLit, 42, -1, [10911]), initValues(_3C_classLit, 42, -1, [8774]), initValues(_3C_classLit, 42, -1, [10788]), initValues(_3C_classLit, 42, -1, [10610]), initValues(_3C_classLit, 42, -1, [8592]), initValues(_3C_classLit, 42, -1, [8726]), initValues(_3C_classLit, 42, -1, [10803]), initValues(_3C_classLit, 42, -1, [10724]), initValues(_3C_classLit, 42, -1, [8739]), initValues(_3C_classLit, 42, -1, [8995]), initValues(_3C_classLit, 42, -1, [10922]), initValues(_3C_classLit, 42, -1, [10924]), initValues(_3C_classLit, 42, -1, [1100]), initValues(_3C_classLit, 42, -1, [47]), initValues(_3C_classLit, 42, -1, [10692]), initValues(_3C_classLit, 42, -1, [9023]), initValues(_3C_classLit, 42, -1, [55349, 56676]), initValues(_3C_classLit, 42, -1, [9824]), initValues(_3C_classLit, 42, -1, [9824]), initValues(_3C_classLit, 42, -1, [8741]), initValues(_3C_classLit, 42, -1, [8851]), initValues(_3C_classLit, 42, -1, [8852]), initValues(_3C_classLit, 42, -1, [8847]), initValues(_3C_classLit, 42, -1, [8849]), initValues(_3C_classLit, 42, -1, [8847]), initValues(_3C_classLit, 42, -1, [8849]), initValues(_3C_classLit, 42, -1, [8848]), initValues(_3C_classLit, 42, -1, [8850]), initValues(_3C_classLit, 42, -1, [8848]), initValues(_3C_classLit, 42, -1, [8850]), initValues(_3C_classLit, 42, -1, [9633]), initValues(_3C_classLit, 42, -1, [9633]), initValues(_3C_classLit, 42, -1, [9642]), initValues(_3C_classLit, 42, -1, [9642]), initValues(_3C_classLit, 42, -1, [8594]), initValues(_3C_classLit, 42, -1, [55349, 56520]), initValues(_3C_classLit, 42, -1, [8726]), initValues(_3C_classLit, 42, -1, [8995]), initValues(_3C_classLit, 42, -1, [8902]), initValues(_3C_classLit, 42, -1, [9734]), initValues(_3C_classLit, 42, -1, [9733]), initValues(_3C_classLit, 42, -1, [1013]), initValues(_3C_classLit, 42, -1, [981]), initValues(_3C_classLit, 42, -1, [175]), initValues(_3C_classLit, 42, -1, [8834]), initValues(_3C_classLit, 42, -1, [10949]), initValues(_3C_classLit, 42, -1, [10941]), initValues(_3C_classLit, 42, -1, [8838]), initValues(_3C_classLit, 42, -1, [10947]), initValues(_3C_classLit, 42, -1, [10945]), initValues(_3C_classLit, 42, -1, [10955]), initValues(_3C_classLit, 42, -1, [8842]), initValues(_3C_classLit, 42, -1, [10943]), initValues(_3C_classLit, 42, -1, [10617]), initValues(_3C_classLit, 42, -1, [8834]), initValues(_3C_classLit, 42, -1, [8838]), initValues(_3C_classLit, 42, -1, [10949]), initValues(_3C_classLit, 42, -1, [8842]), initValues(_3C_classLit, 42, -1, [10955]), initValues(_3C_classLit, 42, -1, [10951]), initValues(_3C_classLit, 42, -1, [10965]), initValues(_3C_classLit, 42, -1, [10963]), initValues(_3C_classLit, 42, -1, [8827]), initValues(_3C_classLit, 42, -1, [10936]), initValues(_3C_classLit, 42, -1, [8829]), initValues(_3C_classLit, 42, -1, [10928]), initValues(_3C_classLit, 42, -1, [10938]), initValues(_3C_classLit, 42, -1, [10934]), initValues(_3C_classLit, 42, -1, [8937]), initValues(_3C_classLit, 42, -1, [8831]), initValues(_3C_classLit, 42, -1, [8721]), initValues(_3C_classLit, 42, -1, [9834]), initValues(_3C_classLit, 42, -1, [185]), initValues(_3C_classLit, 42, -1, [185]), initValues(_3C_classLit, 42, -1, [178]), initValues(_3C_classLit, 42, -1, [178]), initValues(_3C_classLit, 42, -1, [179]), initValues(_3C_classLit, 42, -1, [179]), initValues(_3C_classLit, 42, -1, [8835]), initValues(_3C_classLit, 42, -1, [10950]), initValues(_3C_classLit, 42, -1, [10942]), initValues(_3C_classLit, 42, -1, [10968]), initValues(_3C_classLit, 42, -1, [8839]), initValues(_3C_classLit, 42, -1, [10948]), initValues(_3C_classLit, 42, -1, [10967]), initValues(_3C_classLit, 42, -1, [10619]), initValues(_3C_classLit, 42, -1, [10946]), initValues(_3C_classLit, 42, -1, [10956]), initValues(_3C_classLit, 42, -1, [8843]), initValues(_3C_classLit, 42, -1, [10944]), initValues(_3C_classLit, 42, -1, [8835]), initValues(_3C_classLit, 42, -1, [8839]), initValues(_3C_classLit, 42, -1, [10950]), initValues(_3C_classLit, 42, -1, [8843]), initValues(_3C_classLit, 42, -1, [10956]), initValues(_3C_classLit, 42, -1, [10952]), initValues(_3C_classLit, 42, -1, [10964]), initValues(_3C_classLit, 42, -1, [10966]), initValues(_3C_classLit, 42, -1, [8665]), initValues(_3C_classLit, 42, -1, [10534]), initValues(_3C_classLit, 42, -1, [8601]), initValues(_3C_classLit, 42, -1, [8601]), initValues(_3C_classLit, 42, -1, [10538]), initValues(_3C_classLit, 42, -1, [223]), initValues(_3C_classLit, 42, -1, [223]), initValues(_3C_classLit, 42, -1, [8982]), initValues(_3C_classLit, 42, -1, [964]), initValues(_3C_classLit, 42, -1, [9140]), initValues(_3C_classLit, 42, -1, [357]), initValues(_3C_classLit, 42, -1, [355]), initValues(_3C_classLit, 42, -1, [1090]), initValues(_3C_classLit, 42, -1, [8411]), initValues(_3C_classLit, 42, -1, [8981]), initValues(_3C_classLit, 42, -1, [55349, 56625]), initValues(_3C_classLit, 42, -1, [8756]), initValues(_3C_classLit, 42, -1, [8756]), initValues(_3C_classLit, 42, -1, [952]), initValues(_3C_classLit, 42, -1, [977]), initValues(_3C_classLit, 42, -1, [977]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [8764]), initValues(_3C_classLit, 42, -1, [8201]), initValues(_3C_classLit, 42, -1, [8776]), initValues(_3C_classLit, 42, -1, [8764]), initValues(_3C_classLit, 42, -1, [254]), initValues(_3C_classLit, 42, -1, [254]), initValues(_3C_classLit, 42, -1, [732]), initValues(_3C_classLit, 42, -1, [215]), initValues(_3C_classLit, 42, -1, [215]), initValues(_3C_classLit, 42, -1, [8864]), initValues(_3C_classLit, 42, -1, [10801]), initValues(_3C_classLit, 42, -1, [10800]), initValues(_3C_classLit, 42, -1, [8749]), initValues(_3C_classLit, 42, -1, [10536]), initValues(_3C_classLit, 42, -1, [8868]), initValues(_3C_classLit, 42, -1, [9014]), initValues(_3C_classLit, 42, -1, [10993]), initValues(_3C_classLit, 42, -1, [55349, 56677]), initValues(_3C_classLit, 42, -1, [10970]), initValues(_3C_classLit, 42, -1, [10537]), initValues(_3C_classLit, 42, -1, [8244]), initValues(_3C_classLit, 42, -1, [8482]), initValues(_3C_classLit, 42, -1, [9653]), initValues(_3C_classLit, 42, -1, [9663]), initValues(_3C_classLit, 42, -1, [9667]), initValues(_3C_classLit, 42, -1, [8884]), initValues(_3C_classLit, 42, -1, [8796]), initValues(_3C_classLit, 42, -1, [9657]), initValues(_3C_classLit, 42, -1, [8885]), initValues(_3C_classLit, 42, -1, [9708]), initValues(_3C_classLit, 42, -1, [8796]), initValues(_3C_classLit, 42, -1, [10810]), initValues(_3C_classLit, 42, -1, [10809]), initValues(_3C_classLit, 42, -1, [10701]), initValues(_3C_classLit, 42, -1, [10811]), initValues(_3C_classLit, 42, -1, [9186]), initValues(_3C_classLit, 42, -1, [55349, 56521]), initValues(_3C_classLit, 42, -1, [1094]), initValues(_3C_classLit, 42, -1, [1115]), initValues(_3C_classLit, 42, -1, [359]), initValues(_3C_classLit, 42, -1, [8812]), initValues(_3C_classLit, 42, -1, [8606]), initValues(_3C_classLit, 42, -1, [8608]), initValues(_3C_classLit, 42, -1, [8657]), initValues(_3C_classLit, 42, -1, [10595]), initValues(_3C_classLit, 42, -1, [250]), initValues(_3C_classLit, 42, -1, [250]), initValues(_3C_classLit, 42, -1, [8593]), initValues(_3C_classLit, 42, -1, [1118]), initValues(_3C_classLit, 42, -1, [365]), initValues(_3C_classLit, 42, -1, [251]), initValues(_3C_classLit, 42, -1, [251]), initValues(_3C_classLit, 42, -1, [1091]), initValues(_3C_classLit, 42, -1, [8645]), initValues(_3C_classLit, 42, -1, [369]), initValues(_3C_classLit, 42, -1, [10606]), initValues(_3C_classLit, 42, -1, [10622]), initValues(_3C_classLit, 42, -1, [55349, 56626]), initValues(_3C_classLit, 42, -1, [249]), initValues(_3C_classLit, 42, -1, [249]), initValues(_3C_classLit, 42, -1, [8639]), initValues(_3C_classLit, 42, -1, [8638]), initValues(_3C_classLit, 42, -1, [9600]), initValues(_3C_classLit, 42, -1, [8988]), initValues(_3C_classLit, 42, -1, [8988]), initValues(_3C_classLit, 42, -1, [8975]), initValues(_3C_classLit, 42, -1, [9720]), initValues(_3C_classLit, 42, -1, [363]), initValues(_3C_classLit, 42, -1, [168]), initValues(_3C_classLit, 42, -1, [168]), initValues(_3C_classLit, 42, -1, [371]), initValues(_3C_classLit, 42, -1, [55349, 56678]), initValues(_3C_classLit, 42, -1, [8593]), initValues(_3C_classLit, 42, -1, [8597]), initValues(_3C_classLit, 42, -1, [8639]), initValues(_3C_classLit, 42, -1, [8638]), initValues(_3C_classLit, 42, -1, [8846]), initValues(_3C_classLit, 42, -1, [965]), initValues(_3C_classLit, 42, -1, [978]), initValues(_3C_classLit, 42, -1, [965]), initValues(_3C_classLit, 42, -1, [8648]), initValues(_3C_classLit, 42, -1, [8989]), initValues(_3C_classLit, 42, -1, [8989]), initValues(_3C_classLit, 42, -1, [8974]), initValues(_3C_classLit, 42, -1, [367]), initValues(_3C_classLit, 42, -1, [9721]), initValues(_3C_classLit, 42, -1, [55349, 56522]), initValues(_3C_classLit, 42, -1, [8944]), initValues(_3C_classLit, 42, -1, [361]), initValues(_3C_classLit, 42, -1, [9653]), initValues(_3C_classLit, 42, -1, [9652]), initValues(_3C_classLit, 42, -1, [8648]), initValues(_3C_classLit, 42, -1, [252]), initValues(_3C_classLit, 42, -1, [252]), initValues(_3C_classLit, 42, -1, [10663]), initValues(_3C_classLit, 42, -1, [8661]), initValues(_3C_classLit, 42, -1, [10984]), initValues(_3C_classLit, 42, -1, [10985]), initValues(_3C_classLit, 42, -1, [8872]), initValues(_3C_classLit, 42, -1, [10652]), initValues(_3C_classLit, 42, -1, [949]), initValues(_3C_classLit, 42, -1, [1008]), initValues(_3C_classLit, 42, -1, [8709]), initValues(_3C_classLit, 42, -1, [966]), initValues(_3C_classLit, 42, -1, [982]), initValues(_3C_classLit, 42, -1, [8733]), initValues(_3C_classLit, 42, -1, [8597]), initValues(_3C_classLit, 42, -1, [1009]), initValues(_3C_classLit, 42, -1, [962]), initValues(_3C_classLit, 42, -1, [977]), initValues(_3C_classLit, 42, -1, [8882]), initValues(_3C_classLit, 42, -1, [8883]), initValues(_3C_classLit, 42, -1, [1074]), initValues(_3C_classLit, 42, -1, [8866]), initValues(_3C_classLit, 42, -1, [8744]), initValues(_3C_classLit, 42, -1, [8891]), initValues(_3C_classLit, 42, -1, [8794]), initValues(_3C_classLit, 42, -1, [8942]), initValues(_3C_classLit, 42, -1, [124]), initValues(_3C_classLit, 42, -1, [124]), initValues(_3C_classLit, 42, -1, [55349, 56627]), initValues(_3C_classLit, 42, -1, [8882]), initValues(_3C_classLit, 42, -1, [55349, 56679]), initValues(_3C_classLit, 42, -1, [8733]), initValues(_3C_classLit, 42, -1, [8883]), initValues(_3C_classLit, 42, -1, [55349, 56523]), initValues(_3C_classLit, 42, -1, [10650]), initValues(_3C_classLit, 42, -1, [373]), initValues(_3C_classLit, 42, -1, [10847]), initValues(_3C_classLit, 42, -1, [8743]), initValues(_3C_classLit, 42, -1, [8793]), initValues(_3C_classLit, 42, -1, [8472]), initValues(_3C_classLit, 42, -1, [55349, 56628]), initValues(_3C_classLit, 42, -1, [55349, 56680]), initValues(_3C_classLit, 42, -1, [8472]), initValues(_3C_classLit, 42, -1, [8768]), initValues(_3C_classLit, 42, -1, [8768]), initValues(_3C_classLit, 42, -1, [55349, 56524]), initValues(_3C_classLit, 42, -1, [8898]), initValues(_3C_classLit, 42, -1, [9711]), initValues(_3C_classLit, 42, -1, [8899]), initValues(_3C_classLit, 42, -1, [9661]), initValues(_3C_classLit, 42, -1, [55349, 56629]), initValues(_3C_classLit, 42, -1, [10234]), initValues(_3C_classLit, 42, -1, [10231]), initValues(_3C_classLit, 42, -1, [958]), initValues(_3C_classLit, 42, -1, [10232]), initValues(_3C_classLit, 42, -1, [10229]), initValues(_3C_classLit, 42, -1, [10236]), initValues(_3C_classLit, 42, -1, [8955]), initValues(_3C_classLit, 42, -1, [10752]), initValues(_3C_classLit, 42, -1, [55349, 56681]), initValues(_3C_classLit, 42, -1, [10753]), initValues(_3C_classLit, 42, -1, [10754]), initValues(_3C_classLit, 42, -1, [10233]), initValues(_3C_classLit, 42, -1, [10230]), initValues(_3C_classLit, 42, -1, [55349, 56525]), initValues(_3C_classLit, 42, -1, [10758]), initValues(_3C_classLit, 42, -1, [10756]), initValues(_3C_classLit, 42, -1, [9651]), initValues(_3C_classLit, 42, -1, [8897]), initValues(_3C_classLit, 42, -1, [8896]), initValues(_3C_classLit, 42, -1, [253]), initValues(_3C_classLit, 42, -1, [253]), initValues(_3C_classLit, 42, -1, [1103]), initValues(_3C_classLit, 42, -1, [375]), initValues(_3C_classLit, 42, -1, [1099]), initValues(_3C_classLit, 42, -1, [165]), initValues(_3C_classLit, 42, -1, [165]), initValues(_3C_classLit, 42, -1, [55349, 56630]), initValues(_3C_classLit, 42, -1, [1111]), initValues(_3C_classLit, 42, -1, [55349, 56682]), initValues(_3C_classLit, 42, -1, [55349, 56526]), initValues(_3C_classLit, 42, -1, [1102]), initValues(_3C_classLit, 42, -1, [255]), initValues(_3C_classLit, 42, -1, [255]), initValues(_3C_classLit, 42, -1, [378]), initValues(_3C_classLit, 42, -1, [382]), initValues(_3C_classLit, 42, -1, [1079]), initValues(_3C_classLit, 42, -1, [380]), initValues(_3C_classLit, 42, -1, [8488]), initValues(_3C_classLit, 42, -1, [950]), initValues(_3C_classLit, 42, -1, [55349, 56631]), initValues(_3C_classLit, 42, -1, [1078]), initValues(_3C_classLit, 42, -1, [8669]), initValues(_3C_classLit, 42, -1, [55349, 56683]), initValues(_3C_classLit, 42, -1, [55349, 56527]), initValues(_3C_classLit, 42, -1, [8205]), initValues(_3C_classLit, 42, -1, [8204])]);
32.21644 +  WINDOWS_1252 = initValues(_3_3C_classLit, 52, 12, [initValues(_3C_classLit, 42, -1, [8364]), initValues(_3C_classLit, 42, -1, [65533]), initValues(_3C_classLit, 42, -1, [8218]), initValues(_3C_classLit, 42, -1, [402]), initValues(_3C_classLit, 42, -1, [8222]), initValues(_3C_classLit, 42, -1, [8230]), initValues(_3C_classLit, 42, -1, [8224]), initValues(_3C_classLit, 42, -1, [8225]), initValues(_3C_classLit, 42, -1, [710]), initValues(_3C_classLit, 42, -1, [8240]), initValues(_3C_classLit, 42, -1, [352]), initValues(_3C_classLit, 42, -1, [8249]), initValues(_3C_classLit, 42, -1, [338]), initValues(_3C_classLit, 42, -1, [65533]), initValues(_3C_classLit, 42, -1, [381]), initValues(_3C_classLit, 42, -1, [65533]), initValues(_3C_classLit, 42, -1, [65533]), initValues(_3C_classLit, 42, -1, [8216]), initValues(_3C_classLit, 42, -1, [8217]), initValues(_3C_classLit, 42, -1, [8220]), initValues(_3C_classLit, 42, -1, [8221]), initValues(_3C_classLit, 42, -1, [8226]), initValues(_3C_classLit, 42, -1, [8211]), initValues(_3C_classLit, 42, -1, [8212]), initValues(_3C_classLit, 42, -1, [732]), initValues(_3C_classLit, 42, -1, [8482]), initValues(_3C_classLit, 42, -1, [353]), initValues(_3C_classLit, 42, -1, [8250]), initValues(_3C_classLit, 42, -1, [339]), initValues(_3C_classLit, 42, -1, [65533]), initValues(_3C_classLit, 42, -1, [382]), initValues(_3C_classLit, 42, -1, [376])]);
32.21645 +}
32.21646 +
32.21647 +var NAMES, VALUES_0, WINDOWS_1252;
32.21648 +function localEqualsBuffer(local, buf, offset, length){
32.21649 +  var i;
32.21650 +  if (local.length != length) {
32.21651 +    return false;
32.21652 +  }
32.21653 +  for (i = 0; i < length; ++i) {
32.21654 +    if (local.charCodeAt(i) != buf[offset + i]) {
32.21655 +      return false;
32.21656 +    }
32.21657 +  }
32.21658 +  return true;
32.21659 +}
32.21660 +
32.21661 +function lowerCaseLiteralEqualsIgnoreAsciiCaseString(lowerCaseLiteral, string){
32.21662 +  var c0, c1, i;
32.21663 +  if (string == null) {
32.21664 +    return false;
32.21665 +  }
32.21666 +  if (lowerCaseLiteral.length != string.length) {
32.21667 +    return false;
32.21668 +  }
32.21669 +  for (i = 0; i < lowerCaseLiteral.length; ++i) {
32.21670 +    c0 = lowerCaseLiteral.charCodeAt(i);
32.21671 +    c1 = string.charCodeAt(i);
32.21672 +    if (c1 >= 65 && c1 <= 90) {
32.21673 +      c1 += 32;
32.21674 +    }
32.21675 +    if (c0 != c1) {
32.21676 +      return false;
32.21677 +    }
32.21678 +  }
32.21679 +  return true;
32.21680 +}
32.21681 +
32.21682 +function lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(lowerCaseLiteral, string){
32.21683 +  var c0, c1, i;
32.21684 +  if (string == null) {
32.21685 +    return false;
32.21686 +  }
32.21687 +  if (lowerCaseLiteral.length > string.length) {
32.21688 +    return false;
32.21689 +  }
32.21690 +  for (i = 0; i < lowerCaseLiteral.length; ++i) {
32.21691 +    c0 = lowerCaseLiteral.charCodeAt(i);
32.21692 +    c1 = string.charCodeAt(i);
32.21693 +    if (c1 >= 65 && c1 <= 90) {
32.21694 +      c1 += 32;
32.21695 +    }
32.21696 +    if (c0 != c1) {
32.21697 +      return false;
32.21698 +    }
32.21699 +  }
32.21700 +  return true;
32.21701 +}
32.21702 +
32.21703 +function $StackNode(this$static, group, ns, name, node, scoping, special, fosterParenting, popName, attributes){
32.21704 +  this$static.group = group;
32.21705 +  this$static.name_0 = name;
32.21706 +  this$static.popName = popName;
32.21707 +  this$static.ns = ns;
32.21708 +  this$static.node = node;
32.21709 +  this$static.scoping = scoping;
32.21710 +  this$static.special = special;
32.21711 +  this$static.fosterParenting = fosterParenting;
32.21712 +  this$static.attributes = attributes;
32.21713 +  this$static.refcount = 1;
32.21714 +  return this$static;
32.21715 +}
32.21716 +
32.21717 +function $StackNode_0(this$static, ns, elementName, node){
32.21718 +  this$static.group = elementName.group;
32.21719 +  this$static.name_0 = elementName.name_0;
32.21720 +  this$static.popName = elementName.name_0;
32.21721 +  this$static.ns = ns;
32.21722 +  this$static.node = node;
32.21723 +  this$static.scoping = elementName.scoping;
32.21724 +  this$static.special = elementName.special;
32.21725 +  this$static.fosterParenting = elementName.fosterParenting;
32.21726 +  this$static.attributes = null;
32.21727 +  this$static.refcount = 1;
32.21728 +  return this$static;
32.21729 +}
32.21730 +
32.21731 +function $StackNode_3(this$static, ns, elementName, node, attributes){
32.21732 +  this$static.group = elementName.group;
32.21733 +  this$static.name_0 = elementName.name_0;
32.21734 +  this$static.popName = elementName.name_0;
32.21735 +  this$static.ns = ns;
32.21736 +  this$static.node = node;
32.21737 +  this$static.scoping = elementName.scoping;
32.21738 +  this$static.special = elementName.special;
32.21739 +  this$static.fosterParenting = elementName.fosterParenting;
32.21740 +  this$static.attributes = attributes;
32.21741 +  this$static.refcount = 1;
32.21742 +  return this$static;
32.21743 +}
32.21744 +
32.21745 +function $StackNode_1(this$static, ns, elementName, node, popName){
32.21746 +  this$static.group = elementName.group;
32.21747 +  this$static.name_0 = elementName.name_0;
32.21748 +  this$static.popName = popName;
32.21749 +  this$static.ns = ns;
32.21750 +  this$static.node = node;
32.21751 +  this$static.scoping = elementName.scoping;
32.21752 +  this$static.special = elementName.special;
32.21753 +  this$static.fosterParenting = elementName.fosterParenting;
32.21754 +  this$static.attributes = null;
32.21755 +  this$static.refcount = 1;
32.21756 +  return this$static;
32.21757 +}
32.21758 +
32.21759 +function $StackNode_2(this$static, ns, elementName, node, popName, scoping){
32.21760 +  this$static.group = elementName.group;
32.21761 +  this$static.name_0 = elementName.name_0;
32.21762 +  this$static.popName = popName;
32.21763 +  this$static.ns = ns;
32.21764 +  this$static.node = node;
32.21765 +  this$static.scoping = scoping;
32.21766 +  this$static.special = false;
32.21767 +  this$static.fosterParenting = false;
32.21768 +  this$static.attributes = null;
32.21769 +  this$static.refcount = 1;
32.21770 +  return this$static;
32.21771 +}
32.21772 +
32.21773 +function getClass_55(){
32.21774 +  return Lnu_validator_htmlparser_impl_StackNode_2_classLit;
32.21775 +}
32.21776 +
32.21777 +function toString_11(){
32.21778 +  return this.name_0;
32.21779 +}
32.21780 +
32.21781 +function StackNode(){
32.21782 +}
32.21783 +
32.21784 +_ = StackNode.prototype = new Object_0();
32.21785 +_.getClass$ = getClass_55;
32.21786 +_.toString$ = toString_11;
32.21787 +_.typeId$ = 38;
32.21788 +_.attributes = null;
32.21789 +_.fosterParenting = false;
32.21790 +_.group = 0;
32.21791 +_.name_0 = null;
32.21792 +_.node = null;
32.21793 +_.ns = null;
32.21794 +_.popName = null;
32.21795 +_.refcount = 1;
32.21796 +_.scoping = false;
32.21797 +_.special = false;
32.21798 +function $UTF16Buffer(this$static, buffer, start, end){
32.21799 +  this$static.buffer = buffer;
32.21800 +  this$static.start = start;
32.21801 +  this$static.end = end;
32.21802 +  return this$static;
32.21803 +}
32.21804 +
32.21805 +function $adjust(this$static, lastWasCR){
32.21806 +  if (lastWasCR && this$static.buffer[this$static.start] == 10) {
32.21807 +    ++this$static.start;
32.21808 +  }
32.21809 +}
32.21810 +
32.21811 +function getClass_58(){
32.21812 +  return Lnu_validator_htmlparser_impl_UTF16Buffer_2_classLit;
32.21813 +}
32.21814 +
32.21815 +function UTF16Buffer(){
32.21816 +}
32.21817 +
32.21818 +_ = UTF16Buffer.prototype = new Object_0();
32.21819 +_.getClass$ = getClass_58;
32.21820 +_.typeId$ = 39;
32.21821 +_.buffer = null;
32.21822 +_.end = 0;
32.21823 +_.start = 0;
32.21824 +function $SAXException(this$static, message){
32.21825 +  this$static.detailMessage = message;
32.21826 +  this$static.exception = null;
32.21827 +  return this$static;
32.21828 +}
32.21829 +
32.21830 +function $getMessage(this$static){
32.21831 +  var message;
32.21832 +  message = this$static.detailMessage;
32.21833 +  if (message == null && !!this$static.exception) {
32.21834 +    return this$static.exception.detailMessage;
32.21835 +  }
32.21836 +   else {
32.21837 +    return message;
32.21838 +  }
32.21839 +}
32.21840 +
32.21841 +function getClass_59(){
32.21842 +  return Lorg_xml_sax_SAXException_2_classLit;
32.21843 +}
32.21844 +
32.21845 +function getMessage_0(){
32.21846 +  return $getMessage(this);
32.21847 +}
32.21848 +
32.21849 +function toString_12(){
32.21850 +  if (this.exception) {
32.21851 +    return $toString_1(this.exception);
32.21852 +  }
32.21853 +   else {
32.21854 +    return $toString_1(this);
32.21855 +  }
32.21856 +}
32.21857 +
32.21858 +function SAXException(){
32.21859 +}
32.21860 +
32.21861 +_ = SAXException.prototype = new Exception();
32.21862 +_.getClass$ = getClass_59;
32.21863 +_.getMessage = getMessage_0;
32.21864 +_.toString$ = toString_12;
32.21865 +_.typeId$ = 40;
32.21866 +_.exception = null;
32.21867 +function $SAXParseException(this$static, message, locator){
32.21868 +  this$static.detailMessage = message;
32.21869 +  this$static.exception = null;
32.21870 +  if (locator) {
32.21871 +    $getLineNumber(locator);
32.21872 +    $getColumnNumber(locator);
32.21873 +  }
32.21874 +   else {
32.21875 +  }
32.21876 +  return this$static;
32.21877 +}
32.21878 +
32.21879 +function $SAXParseException_0(this$static, message, locator, e){
32.21880 +  this$static.detailMessage = message;
32.21881 +  this$static.exception = e;
32.21882 +  if (locator) {
32.21883 +    $getLineNumber(locator);
32.21884 +    $getColumnNumber(locator);
32.21885 +  }
32.21886 +   else {
32.21887 +  }
32.21888 +  return this$static;
32.21889 +}
32.21890 +
32.21891 +function getClass_60(){
32.21892 +  return Lorg_xml_sax_SAXParseException_2_classLit;
32.21893 +}
32.21894 +
32.21895 +function SAXParseException(){
32.21896 +}
32.21897 +
32.21898 +_ = SAXParseException.prototype = new SAXException();
32.21899 +_.getClass$ = getClass_60;
32.21900 +_.typeId$ = 41;
32.21901 +function init_0(){
32.21902 +  !!$stats && $stats({moduleName:$moduleName, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date()).getTime(), type:'onModuleLoadStart', className:'nu.validator.htmlparser.gwt.HtmlParserModule'});
32.21903 +  Envjs.parseHtmlDocument = parseHtmlDocument;
32.21904 +}
32.21905 +
32.21906 +__defineParser__ = function gwtOnLoad(errFn, modName, modBase){
32.21907 +  $moduleName = modName;
32.21908 +  $moduleBase = modBase;
32.21909 +  if (errFn)
32.21910 +    try {
32.21911 +      init_0();
32.21912 +    }
32.21913 +     catch (e) {
32.21914 +      errFn(modName);
32.21915 +    }
32.21916 +   else {
32.21917 +    init_0();
32.21918 +  }
32.21919 +}
32.21920 +
32.21921 +function nullMethod(){
32.21922 +}
32.21923 +
32.21924 +var Ljava_lang_Object_2_classLit = createForClass('java.lang.', 'Object'), Lcom_google_gwt_user_client_Timer_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer'), Ljava_lang_Throwable_2_classLit = createForClass('java.lang.', 'Throwable'), Ljava_lang_Exception_2_classLit = createForClass('java.lang.', 'Exception'), Ljava_lang_RuntimeException_2_classLit = createForClass('java.lang.', 'RuntimeException'), Lcom_google_gwt_core_client_JavaScriptException_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptException'), Lcom_google_gwt_core_client_JavaScriptObject_2_classLit = createForClass('com.google.gwt.core.client.', 'JavaScriptObject$'), _3Ljava_lang_String_2_classLit = createForArray('[Ljava.lang.', 'String;'), Ljava_lang_Enum_2_classLit = createForClass('java.lang.', 'Enum'), _3_3D_classLit = createForArray('', '[[D'), Ljava_util_AbstractCollection_2_classLit = createForClass('java.util.', 'AbstractCollection'), Ljava_util_AbstractList_2_classLit = createForClass('java.util.', 'AbstractList'), Ljava_util_ArrayList_2_classLit = createForClass('java.util.', 'ArrayList'), Lcom_google_gwt_user_client_Timer$1_2_classLit = createForClass('com.google.gwt.user.client.', 'Timer$1'), Ljava_lang_IndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'IndexOutOfBoundsException'), Ljava_lang_ArrayStoreException_2_classLit = createForClass('java.lang.', 'ArrayStoreException'), _3C_classLit = createForArray('', '[C'), Ljava_lang_Class_2_classLit = createForClass('java.lang.', 'Class'), Ljava_lang_ClassCastException_2_classLit = createForClass('java.lang.', 'ClassCastException'), Ljava_lang_IllegalArgumentException_2_classLit = createForClass('java.lang.', 'IllegalArgumentException'), _3I_classLit = createForArray('', '[I'), Ljava_lang_NullPointerException_2_classLit = createForClass('java.lang.', 'NullPointerException'), Ljava_lang_String_2_classLit = createForClass('java.lang.', 'String'), Ljava_lang_StringBuffer_2_classLit = createForClass('java.lang.', 'StringBuffer'), Ljava_lang_StringBuilder_2_classLit = createForClass('java.lang.', 'StringBuilder'), Ljava_lang_StringIndexOutOfBoundsException_2_classLit = createForClass('java.lang.', 'StringIndexOutOfBoundsException'), Ljava_lang_UnsupportedOperationException_2_classLit = createForClass('java.lang.', 'UnsupportedOperationException'), _3Ljava_lang_Object_2_classLit = createForArray('[Ljava.lang.', 'Object;'), Ljava_util_AbstractMap_2_classLit = createForClass('java.util.', 'AbstractMap'), Ljava_util_AbstractHashMap_2_classLit = createForClass('java.util.', 'AbstractHashMap'), Ljava_util_AbstractSet_2_classLit = createForClass('java.util.', 'AbstractSet'), Ljava_util_AbstractHashMap$EntrySet_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySet'), Ljava_util_AbstractHashMap$EntrySetIterator_2_classLit = createForClass('java.util.', 'AbstractHashMap$EntrySetIterator'), Ljava_util_AbstractMapEntry_2_classLit = createForClass('java.util.', 'AbstractMapEntry'), Ljava_util_AbstractHashMap$MapEntryNull_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryNull'), Ljava_util_AbstractHashMap$MapEntryString_2_classLit = createForClass('java.util.', 'AbstractHashMap$MapEntryString'), Ljava_util_AbstractList$IteratorImpl_2_classLit = createForClass('java.util.', 'AbstractList$IteratorImpl'), Ljava_util_AbstractList$ListIteratorImpl_2_classLit = createForClass('java.util.', 'AbstractList$ListIteratorImpl'), Ljava_util_AbstractSequentialList_2_classLit = createForClass('java.util.', 'AbstractSequentialList'), Ljava_util_Comparators$1_2_classLit = createForClass('java.util.', 'Comparators$1'), Ljava_util_HashMap_2_classLit = createForClass('java.util.', 'HashMap'), Ljava_util_LinkedList_2_classLit = createForClass('java.util.', 'LinkedList'), Ljava_util_LinkedList$ListIteratorImpl_2_classLit = createForClass('java.util.', 'LinkedList$ListIteratorImpl'), Ljava_util_LinkedList$Node_2_classLit = createForClass('java.util.', 'LinkedList$Node'), Ljava_util_NoSuchElementException_2_classLit = createForClass('java.util.', 'NoSuchElementException'), Lnu_validator_htmlparser_common_DoctypeExpectation_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'DoctypeExpectation'), Lnu_validator_htmlparser_common_DocumentMode_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'DocumentMode'), Lnu_validator_htmlparser_common_XmlViolationPolicy_2_classLit = createForEnum('nu.validator.htmlparser.common.', 'XmlViolationPolicy'), Lnu_validator_htmlparser_impl_TreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'TreeBuilder'), Lnu_validator_htmlparser_impl_CoalescingTreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'CoalescingTreeBuilder'), Lnu_validator_htmlparser_gwt_BrowserTreeBuilder_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'BrowserTreeBuilder'), Lnu_validator_htmlparser_gwt_BrowserTreeBuilder$ScriptHolder_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'BrowserTreeBuilder$ScriptHolder'), Lnu_validator_htmlparser_gwt_HtmlParser_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'HtmlParser'), Lnu_validator_htmlparser_gwt_HtmlParser$1_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'HtmlParser$1'), Lnu_validator_htmlparser_gwt_ParseEndListener_2_classLit = createForClass('nu.validator.htmlparser.gwt.', 'ParseEndListener'), _3Z_classLit = createForArray('', '[Z'), _3Lnu_validator_htmlparser_impl_AttributeName_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'AttributeName;'), Lnu_validator_htmlparser_impl_AttributeName_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'AttributeName'), _3Lnu_validator_htmlparser_impl_ElementName_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'ElementName;'), Lnu_validator_htmlparser_impl_ElementName_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'ElementName'), Lnu_validator_htmlparser_impl_Tokenizer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'Tokenizer'), Lnu_validator_htmlparser_impl_ErrorReportingTokenizer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'ErrorReportingTokenizer'), Lnu_validator_htmlparser_impl_HtmlAttributes_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'HtmlAttributes'), Lnu_validator_htmlparser_impl_LocatorImpl_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'LocatorImpl'), _3_3C_classLit = createForArray('', '[[C'), Lnu_validator_htmlparser_impl_StackNode_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'StackNode'), _3Lnu_validator_htmlparser_impl_StackNode_2_classLit = createForArray('[Lnu.validator.htmlparser.impl.', 'StackNode;'), Lnu_validator_htmlparser_impl_UTF16Buffer_2_classLit = createForClass('nu.validator.htmlparser.impl.', 'UTF16Buffer'), Lorg_xml_sax_SAXException_2_classLit = createForClass('org.xml.sax.', 'SAXException'), Lorg_xml_sax_SAXParseException_2_classLit = createForClass('org.xml.sax.', 'SAXParseException');
32.21925 +if (false) {  var __gwt_initHandlers = nu_validator_htmlparser_HtmlParser.__gwt_initHandlers;  nu_validator_htmlparser_HtmlParser.onScriptLoad(gwtOnLoad);}})();
32.21926 +
32.21927 +/**
32.21928 +* DOMParser
32.21929 +*/
32.21930 +
32.21931 +__defineParser__(function(e){
32.21932 +    console.log('Error loading html 5 parser implementation');
32.21933 +}, 'nu_validator_htmlparser_HtmlParser', '');
32.21934 +
32.21935 +/*DOMParser = function(principle, documentURI, baseURI){};
32.21936 +__extend__(DOMParser.prototype,{
32.21937 +    parseFromString: function(xmlstring, mimetype){
32.21938 +        //console.log('DOMParser.parseFromString %s', mimetype);
32.21939 +        var xmldoc = new Document(new DOMImplementation());
32.21940 +        return XMLParser.parseDocument(xmlstring, xmldoc, mimetype);
32.21941 +    }
32.21942 +});*/
32.21943 +
32.21944 +XMLParser.parseDocument = function(xmlstring, xmldoc, mimetype){
32.21945 +    //console.log('XMLParser.parseDocument');
32.21946 +    var tmpdoc = new Document(new DOMImplementation()),
32.21947 +        parent,
32.21948 +        importedNode,
32.21949 +        tmpNode;
32.21950 +
32.21951 +    if(mimetype && mimetype == 'text/xml'){
32.21952 +        //console.log('mimetype: text/xml');
32.21953 +        tmpdoc.baseURI = 'http://envjs.com/xml';
32.21954 +        xmlstring = '<html><head></head><body>'+
32.21955 +            '<envjs_1234567890 xmlns="envjs_1234567890">'
32.21956 +                +xmlstring+
32.21957 +            '</envjs_1234567890>'+
32.21958 +        '</body></html>';
32.21959 +        Envjs.parseHtmlDocument(xmlstring, tmpdoc, false, null, null);
32.21960 +        parent = tmpdoc.getElementsByTagName('envjs_1234567890')[0];
32.21961 +    }else{
32.21962 +        Envjs.parseHtmlDocument(xmlstring, tmpdoc, false, null, null);
32.21963 +        parent = tmpdoc.documentElement;
32.21964 +    }
32.21965 +
32.21966 +    while(xmldoc.firstChild != null){
32.21967 +        xmldoc.removeChild( xmldoc.firstChild );
32.21968 +    }
32.21969 +    while(parent.firstChild != null){
32.21970 +        tmpNode  = parent.removeChild( parent.firstChild );
32.21971 +        importedNode = xmldoc.importNode( tmpNode, true);
32.21972 +        xmldoc.appendChild( importedNode );
32.21973 +    }
32.21974 +    return xmldoc;
32.21975 +};
32.21976 +
32.21977 +var __fragmentCache__ = {length:0},
32.21978 +    __cachable__ = 255;
32.21979 +
32.21980 +HTMLParser.parseDocument = function(htmlstring, htmldoc){
32.21981 +    //console.log('HTMLParser.parseDocument %s', htmldoc.async);
32.21982 +    htmldoc.parsing = true;
32.21983 +    Envjs.parseHtmlDocument(htmlstring, htmldoc, htmldoc.async, null, null);
32.21984 +    //Envjs.wait(-1);
32.21985 +    return htmldoc;
32.21986 +};
32.21987 +HTMLParser.parseFragment = function(htmlstring, element){
32.21988 +    //console.log('HTMLParser.parseFragment')
32.21989 +    // fragment is allowed to be an element as well
32.21990 +    var tmpdoc,
32.21991 +        parent,
32.21992 +        importedNode,
32.21993 +        tmpNode,
32.21994 +        length,
32.21995 +        i,
32.21996 +        docstring;
32.21997 +    //console.log('parsing fragment: %s', htmlstring);
32.21998 +    //console.log('__fragmentCache__.length %s', __fragmentCache__.length)
32.21999 +    if( htmlstring.length > __cachable__ && htmlstring in __fragmentCache__){
32.22000 +        tmpdoc = __fragmentCache__[htmlstring];
32.22001 +    }else{
32.22002 +        //console.log('parsing html fragment \n%s', htmlstring);
32.22003 +        tmpdoc = new HTMLDocument(new DOMImplementation());
32.22004 +
32.22005 +
32.22006 +        // Need some indicator that this document isn't THE document
32.22007 +        // to fire off img.src change events and other items.
32.22008 +        // Otherwise, what happens is the tmpdoc fires and img.src
32.22009 +        // event, then when it's all imported to the original document
32.22010 +        // it happens again.
32.22011 +
32.22012 +        tmpdoc.fragment = true;
32.22013 +
32.22014 +        //preserves leading white space
32.22015 +        docstring = '<html><head></head><body>'+
32.22016 +            '<envjs_1234567890 xmlns="envjs_1234567890">'
32.22017 +                +htmlstring+
32.22018 +            '</envjs_1234567890>'+
32.22019 +        '</body></html>';
32.22020 +        Envjs.parseHtmlDocument(docstring,tmpdoc, false, null,null);
32.22021 +        if(htmlstring.length > __cachable__ ){
32.22022 +            tmpdoc.normalizeDocument();
32.22023 +            __fragmentCache__[htmlstring] = tmpdoc;
32.22024 +            __fragmentCache__.length += htmlstring.length;
32.22025 +            tmpdoc.cached = true;
32.22026 +        }else{
32.22027 +            tmpdoc.cached = false;
32.22028 +        }
32.22029 +    }
32.22030 +
32.22031 +    //parent is envjs_1234567890 element
32.22032 +    parent = tmpdoc.body.childNodes[0];
32.22033 +    while(element.firstChild != null){
32.22034 +        //zap the elements children so we can import
32.22035 +        element.removeChild( element.firstChild );
32.22036 +    }
32.22037 +
32.22038 +    if(tmpdoc.cached){
32.22039 +        length = parent.childNodes.length;
32.22040 +        for(i=0;i<length;i++){
32.22041 +            importedNode = element.importNode( parent.childNodes[i], true );
32.22042 +            element.appendChild( importedNode );
32.22043 +        }
32.22044 +    }else{
32.22045 +        while(parent.firstChild != null){
32.22046 +            tmpNode  = parent.removeChild( parent.firstChild );
32.22047 +            importedNode = element.importNode( tmpNode, true);
32.22048 +            element.appendChild( importedNode );
32.22049 +        }
32.22050 +    }
32.22051 +
32.22052 +    // console.log('finished fragment: %s', element.outerHTML);
32.22053 +    return element;
32.22054 +};
32.22055 +
32.22056 +var __clearFragmentCache__ = function(){
32.22057 +    __fragmentCache__ = {};
32.22058 +}
32.22059 +
32.22060 +
32.22061 +/**
32.22062 + * @name Document
32.22063 + * @w3c:domlevel 2 
32.22064 + * @uri http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html
32.22065 + */
32.22066 +__extend__(Document.prototype, {
32.22067 +    loadXML : function(xmlString) {
32.22068 +        //console.log('Parser::Document.loadXML');
32.22069 +        // create Document
32.22070 +        if(this === document){
32.22071 +            //$debug("Setting internal window.document");
32.22072 +            document = this;
32.22073 +        }
32.22074 +        // populate Document
32.22075 +        try {
32.22076 +            // make sure this document object is empty before we try to load ...
32.22077 +            this.attributes      = new NamedNodeMap(this, this);
32.22078 +            this._namespaces     = new NamespaceNodeMap(this, this);
32.22079 +            this._readonly = false;
32.22080 +
32.22081 +            XMLParser.parseDocument(xmlString, this);
32.22082 +            
32.22083 +            Envjs.wait(-1);
32.22084 +        } catch (e) {
32.22085 +            //$error(e);
32.22086 +        }
32.22087 +        return this;
32.22088 +    }
32.22089 +});
32.22090 +
32.22091 +
32.22092 +__extend__(HTMLDocument.prototype, {
32.22093 +
32.22094 +    open : function() {
32.22095 +        //console.log('opening doc for write.');
32.22096 +        if (! this._writebuffer) {
32.22097 +            this._writebuffer = [];
32.22098 +        }
32.22099 +    },
32.22100 +    close : function() {
32.22101 +        //console.log('closing doc.');
32.22102 +        if (this._writebuffer) {
32.22103 +            HTMLParser.parseDocument(this._writebuffer.join(''), this);
32.22104 +            this._writebuffer = null;
32.22105 +            //console.log('finished writing doc.');
32.22106 +        }
32.22107 +    },
32.22108 +
32.22109 +    /**
32.22110 +     * http://dev.w3.org/html5/spec/Overview.html#document.write
32.22111 +     */
32.22112 +    write: function(htmlstring) {
32.22113 +        //console.log('writing doc.');
32.22114 +        this.open();
32.22115 +        this._writebuffer.push(htmlstring);
32.22116 +    },
32.22117 +
32.22118 +    /**
32.22119 +     * http://dev.w3.org/html5/spec/Overview.html#dom-document-writeln
32.22120 +     */
32.22121 +    writeln: function(htmlstring) {
32.22122 +        this.open();
32.22123 +        this._writebuffer.push(htmlstring + '\n');
32.22124 +    }
32.22125 +});
32.22126 +
32.22127 +/**
32.22128 + * elementPopped is called by the parser in two cases
32.22129 + *
32.22130 + * - an 'tag' is * complete (all children process and end tag, real or
32.22131 + *   implied is * processed)
32.22132 + * - a replaceElement happens (this happens by making placeholder
32.22133 + *   nodes and then the real one is swapped in.
32.22134 + *
32.22135 + */
32.22136 +var __elementPopped__ = function(ns, name, node){
32.22137 +    //console.log('popped html element %s %s %s', ns, name, node);
32.22138 +    var doc = node.ownerDocument,
32.22139 +        okay,
32.22140 +        event;
32.22141 +    switch(doc.parsing){
32.22142 +        case false:
32.22143 +            //innerHTML so dont do loading patterns for parsing
32.22144 +            //console.log('element popped (implies innerHTML) not in parsing mode %s', node.nodeName);
32.22145 +            break;
32.22146 +        case true:
32.22147 +            switch(doc+''){
32.22148 +                case '[object XMLDocument]':
32.22149 +                    break;
32.22150 +                case '[object HTMLDocument]':
32.22151 +                    switch(node.namespaceURI){
32.22152 +                        case "http://n.validator.nu/placeholder/":
32.22153 +                            //console.log('got script during parsing %s', node.textContent);
32.22154 +                            break;
32.22155 +                        case null:
32.22156 +                        case "":
32.22157 +                        case "http://www.w3.org/1999/xhtml":
32.22158 +                            switch(name.toLowerCase()){
32.22159 +                                case 'script':
32.22160 +                                    try{
32.22161 +                                        okay = Envjs.loadLocalScript(node, null);
32.22162 +                                        // console.log('loaded script? %s %s', node.uuid, okay);
32.22163 +                                        // only fire event if we actually had something to load
32.22164 +                                        if (node.src && node.src.length > 0){
32.22165 +                                            event = doc.createEvent('HTMLEvents');
32.22166 +                                            event.initEvent( okay ? "load" : "error", false, false );
32.22167 +                                            node.dispatchEvent( event, false );
32.22168 +                                        }
32.22169 +                                    }catch(e){
32.22170 +                                        console.log('error loading html element %s %s %s %e', ns, name, node, e.toString());
32.22171 +                                    }
32.22172 +                                    break;
32.22173 +                                case 'frame':
32.22174 +                                case 'iframe':
32.22175 +                                    node.contentWindow = { };
32.22176 +                                    node.contentDocument = new HTMLDocument(new DOMImplementation(), node.contentWindow);
32.22177 +                                    node.contentWindow.document = node.contentDocument;
32.22178 +                                    try{
32.22179 +                                        Window;
32.22180 +                                    }catch(e){
32.22181 +                                        node.contentDocument.addEventListener('DOMContentLoaded', function(){
32.22182 +                                            event = node.contentDocument.createEvent('HTMLEvents');
32.22183 +                                            event.initEvent("load", false, false);
32.22184 +                                            node.dispatchEvent( event, false );
32.22185 +                                        });
32.22186 +                                    }
32.22187 +                                    try{
32.22188 +                                        if (node.src && node.src.length > 0){
32.22189 +                                            //console.log("getting content document for (i)frame from %s", node.src);
32.22190 +                                            Envjs.loadFrame(node, Envjs.uri(node.src));
32.22191 +                                            event = node.contentDocument.createEvent('HTMLEvents');
32.22192 +                                            event.initEvent("load", false, false);
32.22193 +                                            node.dispatchEvent( event, false );
32.22194 +                                        }else{
32.22195 +                                            //I dont like this being here:
32.22196 +                                            //TODO: better  mix-in strategy so the try/catch isnt required
32.22197 +                                            try{
32.22198 +                                                if(Window){
32.22199 +                                                    Envjs.loadFrame(node);
32.22200 +                                                    //console.log('src/html/document.js: triggering frame load');
32.22201 +                                                    event = node.contentDocument.createEvent('HTMLEvents');
32.22202 +                                                    event.initEvent("load", false, false);
32.22203 +                                                    node.dispatchEvent( event, false );
32.22204 +                                                }
32.22205 +                                            }catch(e){}
32.22206 +                                        }
32.22207 +                                    }catch(e){
32.22208 +                                        console.log('error loading html element %s %e', node, e.toString());
32.22209 +                                    }
32.22210 +                                    /*try{
32.22211 +                                        if (node.src && node.src.length > 0){
32.22212 +                                            //console.log("getting content document for (i)frame from %s", node.src);
32.22213 +                                            Envjs.loadFrame(node, Envjs.uri(node.src));
32.22214 +                                            event = node.ownerDocument.createEvent('HTMLEvents');
32.22215 +                                            event.initEvent("load", false, false);
32.22216 +                                            node.dispatchEvent( event, false );
32.22217 +                                        }else{
32.22218 +                                            //console.log('src/parser/htmldocument: triggering frame load (no src)');
32.22219 +                                        }
32.22220 +                                    }catch(e){
32.22221 +                                        console.log('error loading html element %s %s %s %e', ns, name, node, e.toString());
32.22222 +                                    }*/
32.22223 +                                    break;
32.22224 +                                case 'link':
32.22225 +                                    if (node.href) {
32.22226 +                                        __loadLink__(node, node.href);
32.22227 +                                    }
32.22228 +                                    break;
32.22229 +                                case 'option':
32.22230 +                                    node._updateoptions();
32.22231 +                                    break;
32.22232 +                                case 'img':
32.22233 +                                    if (node.src){
32.22234 +                                        __loadImage__(node, node.src);
32.22235 +                                    }
32.22236 +                                    break;
32.22237 +                                case 'html':
32.22238 +                                    //console.log('html popped');
32.22239 +                                    doc.parsing = false;
32.22240 +                                    //DOMContentLoaded event
32.22241 +                                    // try{
32.22242 +                                        if(doc.createEvent){
32.22243 +                                            event = doc.createEvent('Events');
32.22244 +                                            event.initEvent("DOMContentLoaded", false, false);
32.22245 +                                            doc.dispatchEvent( event, false );
32.22246 +                                        }
32.22247 +                                    /* }catch(e){
32.22248 +                                        console.log('%s', e);
32.22249 +                                    } */
32.22250 +                                    try{
32.22251 +                                        if(doc.createEvent){
32.22252 +                                            event = doc.createEvent('HTMLEvents');
32.22253 +                                            event.initEvent("load", false, false);
32.22254 +                                            doc.dispatchEvent( event, false );
32.22255 +                                        }
32.22256 +                                    }catch(e){
32.22257 +                                        console.log('%s', e);
32.22258 +                                    }
32.22259 +
32.22260 +                                    try{
32.22261 +                                        if(doc.parentWindow){
32.22262 +                                            event = doc.createEvent('HTMLEvents');
32.22263 +                                            event.initEvent("load", false, false);
32.22264 +                                            doc.parentWindow.dispatchEvent( event, false );
32.22265 +                                        }
32.22266 +                                    }catch(e){
32.22267 +                                        console.log('%s', e);
32.22268 +                                    }
32.22269 +                                    try{
32.22270 +                                        if(doc === window.document){
32.22271 +                                            //console.log('triggering window.load')
32.22272 +                                            event = doc.createEvent('HTMLEvents');
32.22273 +                                            event.initEvent("load", false, false);
32.22274 +                                            try{
32.22275 +                                                window.dispatchEvent( event, false );
32.22276 +                                            }catch(e){
32.22277 +                                                console.log('%s', e);
32.22278 +                                            }
32.22279 +                                        }
32.22280 +                                    }catch(e){
32.22281 +                                        //console.log('%s', e);
32.22282 +                                        //swallow
32.22283 +                                    }
32.22284 +                                default:
32.22285 +                                    if(node.getAttribute('onload')){
32.22286 +                                        //console.log('%s onload', node);
32.22287 +                                        node.onload();
32.22288 +                                    }
32.22289 +                                    break;
32.22290 +                            }//switch on name
32.22291 +                        default:
32.22292 +                            break;
32.22293 +                    }//switch on ns
32.22294 +                    break;
32.22295 +                default:
32.22296 +                    console.log('element popped: %s %s', ns, name, node.ownerDocument+'');
32.22297 +            }//switch on doc type
32.22298 +        default:
32.22299 +            break;
32.22300 +    }//switch on parsing
32.22301 +};
32.22302 +
32.22303 +__extend__(HTMLElement.prototype,{
32.22304 +    set innerHTML(html){
32.22305 +        HTMLParser.parseFragment(html, this);
32.22306 +    }
32.22307 +});
32.22308 +
32.22309 +/**
32.22310 + * @author john resig & the envjs team
32.22311 + * @uri http://www.envjs.com/
32.22312 + * @copyright 2008-2010
32.22313 + * @license MIT
32.22314 + */
32.22315 +//CLOSURE_END
32.22316 +}());
32.22317 +/*
32.22318 + * Envjs xhr.1.2.13 
32.22319 + * Pure JavaScript Browser Environment
32.22320 + * By John Resig <http://ejohn.org/> and the Envjs Team
32.22321 + * Copyright 2008-2010 John Resig, under the MIT License
32.22322 + * 
32.22323 + * Parts of the implementation originally written by Yehuda Katz.
32.22324 + * 
32.22325 + * This file simply provides the global definitions we need to 
32.22326 + * be able to correctly implement to core browser (XML)HTTPRequest 
32.22327 + * interfaces.
32.22328 + */
32.22329 +var Location,
32.22330 +    XMLHttpRequest;
32.22331 +
32.22332 +/*
32.22333 + * Envjs xhr.1.2.13 
32.22334 + * Pure JavaScript Browser Environment
32.22335 + * By John Resig <http://ejohn.org/> and the Envjs Team
32.22336 + * Copyright 2008-2010 John Resig, under the MIT License
32.22337 + */
32.22338 +
32.22339 +//CLOSURE_START
32.22340 +(function(){
32.22341 +
32.22342 +
32.22343 +
32.22344 +
32.22345 +
32.22346 +/**
32.22347 + * @author john resig
32.22348 + */
32.22349 +// Helper method for extending one object with another.
32.22350 +function __extend__(a,b) {
32.22351 +    for ( var i in b ) {
32.22352 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
32.22353 +        if ( g || s ) {
32.22354 +            if ( g ) { a.__defineGetter__(i, g); }
32.22355 +            if ( s ) { a.__defineSetter__(i, s); }
32.22356 +        } else {
32.22357 +            a[i] = b[i];
32.22358 +        }
32.22359 +    } return a;
32.22360 +}
32.22361 +
32.22362 +/**
32.22363 + * @author john resig
32.22364 + */
32.22365 +//from jQuery
32.22366 +function __setArray__( target, array ) {
32.22367 +    // Resetting the length to 0, then using the native Array push
32.22368 +    // is a super-fast way to populate an object with array-like properties
32.22369 +    target.length = 0;
32.22370 +    Array.prototype.push.apply( target, array );
32.22371 +}
32.22372 +
32.22373 +/**
32.22374 + * @author ariel flesler
32.22375 + *    http://flesler.blogspot.com/2008/11/fast-trim-function-for-javascript.html
32.22376 + * @param {Object} str
32.22377 + */
32.22378 +function __trim__( str ){
32.22379 +    return (str || "").replace( /^\s+|\s+$/g, "" );
32.22380 +}
32.22381 +
32.22382 +
32.22383 +/**
32.22384 + * @todo: document
32.22385 + */
32.22386 +__extend__(Document.prototype,{
32.22387 +    load: function(url){
32.22388 +        if(this.documentURI == 'about:html'){
32.22389 +            this.location.assign(url);
32.22390 +        }else if(this.documentURI == url){
32.22391 +            this.location.reload(false);
32.22392 +        }else{
32.22393 +            this.location.replace(url);
32.22394 +        }
32.22395 +    },
32.22396 +    get location(){
32.22397 +        return new Location(this.documentURI, this);
32.22398 +    },
32.22399 +    set location(url){
32.22400 +        //very important or you will go into an infinite
32.22401 +        //loop when creating a xml document
32.22402 +        if(url) {
32.22403 +            this.location.replace(url);
32.22404 +        }
32.22405 +    }
32.22406 +});
32.22407 +
32.22408 +
32.22409 +HTMLFormElement.prototype.submit = function(){
32.22410 +    var event = __submit__(this),
32.22411 +        serialized,
32.22412 +        xhr,
32.22413 +        method,
32.22414 +        action;
32.22415 +    if(!event.cancelled){
32.22416 +        serialized = __formSerialize__(this);
32.22417 +        xhr = new XMLHttpRequest();
32.22418 +        method = this.method !== ""?this.method:"GET";
32.22419 +        action = this.action !== ""?this.action:this.ownerDocument.baseURI;
32.22420 +        xhr.open(method, action, false);
32.22421 +        xhr.send(data, false);
32.22422 +        if(xhr.readyState === 4){
32.22423 +            __exchangeHTMLDocument__(this.ownerDocument, xhr.responseText, url);
32.22424 +        }
32.22425 +    }
32.22426 +};
32.22427 +
32.22428 +/**
32.22429 + * Form Submissions
32.22430 + *
32.22431 + * This code is borrow largely from jquery.params and jquery.form.js
32.22432 + *
32.22433 + * formToArray() gathers form element data into an array of objects that can
32.22434 + * be passed to any of the following ajax functions: $.get, $.post, or load.
32.22435 + * Each object in the array has both a 'name' and 'value' property.  An example of
32.22436 + * an array for a simple login form might be:
32.22437 + *
32.22438 + * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
32.22439 + *
32.22440 + * It is this array that is passed to pre-submit callback functions provided to the
32.22441 + * ajaxSubmit() and ajaxForm() methods.
32.22442 + *
32.22443 + * The semantic argument can be used to force form serialization in semantic order.
32.22444 + * This is normally true anyway, unless the form contains input elements of type='image'.
32.22445 + * If your form must be submitted with name/value pairs in semantic order and your form
32.22446 + * contains an input of type='image" then pass true for this arg, otherwise pass false
32.22447 + * (or nothing) to avoid the overhead for this logic.
32.22448 + *
32.22449 + *
32.22450 + * @name formToArray
32.22451 + * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
32.22452 + * @type Array<Object>
32.22453 + */
32.22454 +var __formToArray__ = function(form, semantic) {
32.22455 +    var array = [],
32.22456 +        elements = semantic ? form.getElementsByTagName('*') : form.elements,
32.22457 +        element,
32.22458 +        i,j,imax, jmax,
32.22459 +        name,
32.22460 +        value;
32.22461 +
32.22462 +    if (!elements) {
32.22463 +        return array;
32.22464 +    }
32.22465 +
32.22466 +    imax = elements.length;
32.22467 +    for(i=0; i < imax; i++) {
32.22468 +        element = elements[i];
32.22469 +        name = element.name;
32.22470 +        if (!name) {
32.22471 +            continue;
32.22472 +        }
32.22473 +        if (semantic && form.clk && element.type === "image") {
32.22474 +            // handle image inputs on the fly when semantic == true
32.22475 +            if(!element.disabled && form.clk == element) {
32.22476 +                array.push({
32.22477 +                    name: name+'.x',
32.22478 +                    value: form.clk_x
32.22479 +                },{
32.22480 +                    name: name+'.y',
32.22481 +                    value: form.clk_y
32.22482 +                });
32.22483 +            }
32.22484 +            continue;
32.22485 +        }
32.22486 +
32.22487 +        value = __fieldValue__(element, true);
32.22488 +        if (value && value.constructor == Array) {
32.22489 +            jmax = value.length;
32.22490 +            for(j=0; j < jmax; j++){
32.22491 +                array.push({name: name, value: value[j]});
32.22492 +            }
32.22493 +        } else if (value !== null && typeof value != 'undefined'){
32.22494 +            array.push({name: name, value: value});
32.22495 +        }
32.22496 +    }
32.22497 +
32.22498 +    if (!semantic && form.clk) {
32.22499 +        // input type=='image' are not found in elements array! handle them here
32.22500 +        elements = form.getElementsByTagName("input");
32.22501 +        imax = imax=elements.length;
32.22502 +        for(i=0; i < imax; i++) {
32.22503 +            element = elements[i];
32.22504 +            name = element.name;
32.22505 +            if(name && !element.disabled && element.type == "image" && form.clk == input) {
32.22506 +                array.push(
32.22507 +                    {name: name+'.x', value: form.clk_x},
32.22508 +                    {name: name+'.y', value: form.clk_y});
32.22509 +            }
32.22510 +        }
32.22511 +    }
32.22512 +    return array;
32.22513 +};
32.22514 +
32.22515 +
32.22516 +/**
32.22517 + * Serializes form data into a 'submittable' string. This method will return a string
32.22518 + * in the format: name1=value1&amp;name2=value2
32.22519 + *
32.22520 + * The semantic argument can be used to force form serialization in semantic order.
32.22521 + * If your form must be submitted with name/value pairs in semantic order then pass
32.22522 + * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
32.22523 + * this logic (which can be significant for very large forms).
32.22524 + *
32.22525 + *
32.22526 + * @name formSerialize
32.22527 + * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
32.22528 + * @type String
32.22529 + */
32.22530 +var __formSerialize__ = function(form, semantic) {
32.22531 +    //hand off to param for proper encoding
32.22532 +    return __param__(__formToArray__(form, semantic));
32.22533 +};
32.22534 +
32.22535 +
32.22536 +/**
32.22537 + * Serializes all field elements inputs Array into a query string.
32.22538 + * This method will return a string in the format: name1=value1&amp;name2=value2
32.22539 + *
32.22540 + * The successful argument controls whether or not serialization is limited to
32.22541 + * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
32.22542 + * The default value of the successful argument is true.
32.22543 + *
32.22544 + *
32.22545 + * @name fieldSerialize
32.22546 + * @param successful true if only successful controls should be serialized (default is true)
32.22547 + * @type String
32.22548 + */
32.22549 +var __fieldSerialize__ = function(inputs, successful) {
32.22550 +    var array = [],
32.22551 +        input,
32.22552 +        name,
32.22553 +        value,
32.22554 +        i,j, imax, jmax;
32.22555 +
32.22556 +    imax = inputs.length;
32.22557 +    for(i=0; i<imax; i++){
32.22558 +        input = inputs[i];
32.22559 +        name = input.name;
32.22560 +        if (!name) {
32.22561 +            return '';
32.22562 +        }
32.22563 +        value = __fieldValue__(input, successful);
32.22564 +        if (value && value.constructor == Array) {
32.22565 +            jmax = value.length;
32.22566 +            for (j=0; j < jmax; j++){
32.22567 +                array.push({
32.22568 +                    name: name,
32.22569 +                    value: value[j]
32.22570 +                });
32.22571 +            }
32.22572 +        }else if (value !== null && typeof value != 'undefined'){
32.22573 +            array.push({
32.22574 +                name: input.name,
32.22575 +                value: value
32.22576 +            });
32.22577 +        }
32.22578 +    }
32.22579 +
32.22580 +    //hand off  for proper encoding
32.22581 +    return __param__(array);
32.22582 +};
32.22583 +
32.22584 +
32.22585 +/**
32.22586 + * Returns the value(s) of the element in the matched set.  For example, consider the following form:
32.22587 + *
32.22588 + *
32.22589 + * The successful argument controls whether or not the field element must be 'successful'
32.22590 + * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
32.22591 + * The default value of the successful argument is true.  If this value is false the value(s)
32.22592 + * for each element is returned.
32.22593 + *
32.22594 + * Note: This method *always* returns an array.  If no valid value can be determined the
32.22595 + *       array will be empty, otherwise it will contain one or more values.
32.22596 + *
32.22597 + *
32.22598 + * @name fieldValue
32.22599 + * @param Boolean successful true if only the values for successful controls
32.22600 + *        should be returned (default is true)
32.22601 + * @type Array<String>
32.22602 + */
32.22603 +var __fieldValues__ = function(inputs, successful) {
32.22604 +    var i,
32.22605 +        imax = inputs.length,
32.22606 +        element,
32.22607 +        values = [],
32.22608 +        value;
32.22609 +    for (i=0; i < imax; i++) {
32.22610 +        element = inputs[i];
32.22611 +        value = __fieldValue__(element, successful);
32.22612 +        if (value === null || typeof value == 'undefined' ||
32.22613 +            (value.constructor == Array && !value.length)) {
32.22614 +            continue;
32.22615 +        }
32.22616 +        if (value.constructor == Array) {
32.22617 +            Array.prototype.push(values, value);
32.22618 +        } else {
32.22619 +            values.push(value);
32.22620 +        }
32.22621 +    }
32.22622 +    return values;
32.22623 +};
32.22624 +
32.22625 +/**
32.22626 + * Returns the value of the field element.
32.22627 + *
32.22628 + * The successful argument controls whether or not the field element must be 'successful'
32.22629 + * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
32.22630 + * The default value of the successful argument is true.  If the given element is not
32.22631 + * successful and the successful arg is not false then the returned value will be null.
32.22632 + *
32.22633 + * Note: If the successful flag is true (default) but the element is not successful, the return will be null
32.22634 + * Note: The value returned for a successful select-multiple element will always be an array.
32.22635 + * Note: If the element has no value the return value will be undefined.
32.22636 + *
32.22637 + * @name fieldValue
32.22638 + * @param Element el The DOM element for which the value will be returned
32.22639 + * @param Boolean successful true if value returned must be for a successful controls (default is true)
32.22640 + * @type String or Array<String> or null or undefined
32.22641 + */
32.22642 +var __fieldValue__ = function(element, successful) {
32.22643 +    var name = element.name,
32.22644 +        type = element.type,
32.22645 +        tag = element.tagName.toLowerCase(),
32.22646 +        index,
32.22647 +        array,
32.22648 +        options,
32.22649 +        option,
32.22650 +        one,
32.22651 +        i, imax,
32.22652 +        value;
32.22653 +
32.22654 +    if (typeof successful == 'undefined')  {
32.22655 +        successful = true;
32.22656 +    }
32.22657 +
32.22658 +    if (successful && (!name || element.disabled || type == 'reset' || type == 'button' ||
32.22659 +             (type == 'checkbox' || type == 'radio') &&  !element.checked ||
32.22660 +             (type == 'submit' || type == 'image') &&
32.22661 +             element.form && element.form.clk != element || tag === 'select' &&
32.22662 +             element.selectedIndex === -1)) {
32.22663 +            return null;
32.22664 +    }
32.22665 +
32.22666 +    if (tag === 'select') {
32.22667 +        index = element.selectedIndex;
32.22668 +        if (index < 0) {
32.22669 +            return null;
32.22670 +        }
32.22671 +        array = [];
32.22672 +        options = element.options;
32.22673 +        one = (type == 'select-one');
32.22674 +        imax = (one ? index+1 : options.length);
32.22675 +        i = (one ? index : 0);
32.22676 +        for( i; i < imax; i++) {
32.22677 +            option = options[i];
32.22678 +            if (option.selected) {
32.22679 +                value = option.value;
32.22680 +                if (one) {
32.22681 +                    return value;
32.22682 +                }
32.22683 +                array.push(value);
32.22684 +            }
32.22685 +        }
32.22686 +        return array;
32.22687 +    }
32.22688 +    return element.value;
32.22689 +};
32.22690 +
32.22691 +
32.22692 +/**
32.22693 + * Clears the form data.  Takes the following actions on the form's input fields:
32.22694 + *  - input text fields will have their 'value' property set to the empty string
32.22695 + *  - select elements will have their 'selectedIndex' property set to -1
32.22696 + *  - checkbox and radio inputs will have their 'checked' property set to false
32.22697 + *  - inputs of type submit, button, reset, and hidden will *not* be effected
32.22698 + *  - button elements will *not* be effected
32.22699 + *
32.22700 + *
32.22701 + * @name clearForm
32.22702 + */
32.22703 +var __clearForm__ = function(form) {
32.22704 +    var i,
32.22705 +        j, jmax,
32.22706 +        elements,
32.22707 +        resetable = ['input','select','textarea'];
32.22708 +    for(i=0; i<resetable.length; i++){
32.22709 +        elements = form.getElementsByTagName(resetable[i]);
32.22710 +        jmax = elements.length;
32.22711 +        for(j=0;j<jmax;j++){
32.22712 +            __clearField__(elements[j]);
32.22713 +        }
32.22714 +    }
32.22715 +};
32.22716 +
32.22717 +/**
32.22718 + * Clears the selected form element.  Takes the following actions on the element:
32.22719 + *  - input text fields will have their 'value' property set to the empty string
32.22720 + *  - select elements will have their 'selectedIndex' property set to -1
32.22721 + *  - checkbox and radio inputs will have their 'checked' property set to false
32.22722 + *  - inputs of type submit, button, reset, and hidden will *not* be effected
32.22723 + *  - button elements will *not* be effected
32.22724 + *
32.22725 + * @name clearFields
32.22726 + */
32.22727 +var __clearField__ = function(element) {
32.22728 +    var type = element.type,
32.22729 +        tag = element.tagName.toLowerCase();
32.22730 +    if (type == 'text' || type == 'password' || tag === 'textarea') {
32.22731 +        element.value = '';
32.22732 +    } else if (type == 'checkbox' || type == 'radio') {
32.22733 +        element.checked = false;
32.22734 +    } else if (tag === 'select') {
32.22735 +        element.selectedIndex = -1;
32.22736 +    }
32.22737 +};
32.22738 +
32.22739 +
32.22740 +// Serialize an array of key/values into a query string
32.22741 +var __param__= function( array ) {
32.22742 +    var i, serialized = [];
32.22743 +
32.22744 +    // Serialize the key/values
32.22745 +    for(i=0; i<array.length; i++){
32.22746 +        serialized[ serialized.length ] =
32.22747 +            encodeURIComponent(array[i].name) + '=' +
32.22748 +            encodeURIComponent(array[i].value);
32.22749 +    }
32.22750 +
32.22751 +    // Return the resulting serialization
32.22752 +    return serialized.join("&").replace(/%20/g, "+");
32.22753 +};
32.22754 +
32.22755 +/**
32.22756 + * Location
32.22757 + *
32.22758 + * Mozilla MDC:
32.22759 + * https://developer.mozilla.org/En/DOM/Window.location
32.22760 + * https://developer.mozilla.org/en/DOM/document.location
32.22761 + *
32.22762 + * HTML5: 6.10.4 The Location interface
32.22763 + * http://dev.w3.org/html5/spec/Overview.html#location
32.22764 + *
32.22765 + * HTML5: 2.5.3 Interfaces for URL manipulation
32.22766 + * http://dev.w3.org/html5/spec/Overview.html#url-decomposition-idl-attributes
32.22767 + * All of section 2.5 is worth reading, but 2.5.3 contains very
32.22768 + * detailed information on how getters/setter should work
32.22769 + *
32.22770 + * NOT IMPLEMENTED:
32.22771 + *  HTML5: Section 6.10.4.1 Security -- prevents scripts from another domain
32.22772 + *   from accessing most of the 'Location'
32.22773 + *  Not sure if anyone implements this in HTML4
32.22774 + */
32.22775 +
32.22776 +Location = function(url, doc, history) {
32.22777 +    //console.log('Location url %s', url);
32.22778 +    var $url = url,
32.22779 +    $document = doc ? doc : null,
32.22780 +    $history = history ? history : null;
32.22781 +
32.22782 +    var parts = Envjs.urlsplit($url);
32.22783 +
32.22784 +    return {
32.22785 +        get hash() {
32.22786 +            return parts.fragment ? '#' + parts.fragment : parts.fragment;
32.22787 +        },
32.22788 +        set hash(s) {
32.22789 +            if (s[0] === '#') {
32.22790 +                parts.fragment = s.substr(1);
32.22791 +            } else {
32.22792 +                parts.fragment = s;
32.22793 +            }
32.22794 +            $url = Envjs.urlunsplit(parts);
32.22795 +            if ($history) {
32.22796 +                $history.add($url, 'hash');
32.22797 +            }
32.22798 +        },
32.22799 +
32.22800 +        get host() {
32.22801 +            return parts.netloc;
32.22802 +        },
32.22803 +        set host(s) {
32.22804 +            if (!s || s === '') {
32.22805 +                return;
32.22806 +            }
32.22807 +
32.22808 +            parts.netloc = s;
32.22809 +            $url = Envjs.urlunsplit(parts);
32.22810 +
32.22811 +            // this regenerates hostname & port
32.22812 +            parts = Envjs.urlsplit($url);
32.22813 +
32.22814 +            if ($history) {
32.22815 +                $history.add( $url, 'host');
32.22816 +            }
32.22817 +            this.assign($url);
32.22818 +        },
32.22819 +
32.22820 +        get hostname() {
32.22821 +            return parts.hostname;
32.22822 +        },
32.22823 +        set hostname(s) {
32.22824 +            if (!s || s === '') {
32.22825 +                return;
32.22826 +            }
32.22827 +
32.22828 +            parts.netloc = s;
32.22829 +            if (parts.port != '') {
32.22830 +                parts.netloc += ':' + parts.port;
32.22831 +            }
32.22832 +            parts.hostname = s;
32.22833 +            $url = Envjs.urlunsplit(parts);
32.22834 +            if ($history) {
32.22835 +                $history.add( $url, 'hostname');
32.22836 +            }
32.22837 +            this.assign($url);
32.22838 +        },
32.22839 +
32.22840 +        get href() {
32.22841 +            return $url;
32.22842 +        },
32.22843 +        set href(url) {
32.22844 +            $url = url;
32.22845 +            if ($history) {
32.22846 +                $history.add($url, 'href');
32.22847 +            }
32.22848 +            this.assign($url);
32.22849 +        },
32.22850 +
32.22851 +        get pathname() {
32.22852 +            return parts.path;
32.22853 +        },
32.22854 +        set pathname(s) {
32.22855 +            if (s[0] === '/') {
32.22856 +                parts.path = s;
32.22857 +            } else {
32.22858 +                parts.path = '/' + s;
32.22859 +            }
32.22860 +            $url = Envjs.urlunsplit(parts);
32.22861 +
32.22862 +            if ($history) {
32.22863 +                $history.add($url, 'pathname');
32.22864 +            }
32.22865 +            this.assign($url);
32.22866 +        },
32.22867 +
32.22868 +        get port() {
32.22869 +            // make sure it's a string
32.22870 +            return '' + parts.port;
32.22871 +        },
32.22872 +        set port(p) {
32.22873 +            // make a string
32.22874 +            var s = '' + p;
32.22875 +            parts.port = s;
32.22876 +            parts.netloc = parts.hostname + ':' + parts.port;
32.22877 +            $url = Envjs.urlunsplit(parts);
32.22878 +            if ($history) {
32.22879 +                $history.add( $url, 'port');
32.22880 +            }
32.22881 +            this.assign($url);
32.22882 +        },
32.22883 +
32.22884 +        get protocol() {
32.22885 +            return parts.scheme + ':';
32.22886 +        },
32.22887 +        set protocol(s) {
32.22888 +            var i = s.indexOf(':');
32.22889 +            if (i != -1) {
32.22890 +                s = s.substr(0,i);
32.22891 +            }
32.22892 +            parts.scheme = s;
32.22893 +            $url = Envjs.urlunsplit(parts);
32.22894 +            if ($history) {
32.22895 +                $history.add($url, 'protocol');
32.22896 +            }
32.22897 +            this.assign($url);
32.22898 +        },
32.22899 +
32.22900 +        get search() {
32.22901 +            return (parts.query) ? '?' + parts.query : parts.query;
32.22902 +        },
32.22903 +        set search(s) {
32.22904 +            if (s[0] == '?') {
32.22905 +                s = s.substr(1);
32.22906 +            }
32.22907 +            parts.query = s;
32.22908 +            $url = Envjs.urlunsplit(parts);
32.22909 +            if ($history) {
32.22910 +                $history.add($url, 'search');
32.22911 +            }
32.22912 +            this.assign($url);
32.22913 +        },
32.22914 +
32.22915 +        toString: function() {
32.22916 +            return $url;
32.22917 +        },
32.22918 +
32.22919 +        assign: function(url) {
32.22920 +            var _this = this,
32.22921 +                xhr,
32.22922 +                event,
32.22923 +                cookie;
32.22924 +
32.22925 +            //console.log('assigning %s',url);
32.22926 +
32.22927 +            // update closure upvars
32.22928 +            $url = url;
32.22929 +            parts = Envjs.urlsplit($url);
32.22930 +
32.22931 +            //we can only assign if this Location is associated with a document
32.22932 +            if ($document) {
32.22933 +                //console.log('fetching %s (async? %s)', url, $document.async);
32.22934 +                xhr = new XMLHttpRequest();
32.22935 +
32.22936 +                // TODO: make async flag a Envjs paramter
32.22937 +                xhr.open('GET', url, false);//$document.async);
32.22938 +
32.22939 +                // TODO: is there a better way to test if a node is an HTMLDocument?
32.22940 +                if ($document.toString() === '[object HTMLDocument]') {
32.22941 +                    //tell the xhr to not parse the document as XML
32.22942 +                    //console.log('loading html document');
32.22943 +                    xhr.onreadystatechange = function() {
32.22944 +                        //console.log('readyState %s', xhr.readyState);
32.22945 +                        if (xhr.readyState === 4) {
32.22946 +                            $document.baseURI = new Location(url, $document);
32.22947 +                            //console.log('new document baseURI %s', $document.baseURI);
32.22948 +                            __exchangeHTMLDocument__($document, xhr.responseText, url);
32.22949 +                        }
32.22950 +                    };
32.22951 +                    xhr.send(null, false);
32.22952 +                } else {
32.22953 +                    //Treat as an XMLDocument
32.22954 +                    xhr.onreadystatechange = function() {
32.22955 +                        if (xhr.readyState === 4) {
32.22956 +                            $document = xhr.responseXML;
32.22957 +                            $document.baseURI = $url;
32.22958 +                            if ($document.createEvent) {
32.22959 +                                event = $document.createEvent('Event');
32.22960 +                                event.initEvent('DOMContentLoaded');
32.22961 +                                $document.dispatchEvent( event, false );
32.22962 +                            }
32.22963 +                        }
32.22964 +                    };
32.22965 +                    xhr.send();
32.22966 +                }
32.22967 +
32.22968 +            };
32.22969 +
32.22970 +        },
32.22971 +        reload: function(forceget) {
32.22972 +            //for now we have no caching so just proxy to assign
32.22973 +            //console.log('reloading %s',$url);
32.22974 +            this.assign($url);
32.22975 +        },
32.22976 +        replace: function(url) {
32.22977 +            this.assign(url);
32.22978 +        }
32.22979 +    };
32.22980 +};
32.22981 +
32.22982 +var __exchangeHTMLDocument__ = function(doc, text, url) {
32.22983 +    var html, head, title, body, event, e;
32.22984 +    // try {
32.22985 +        doc.baseURI = url;
32.22986 +        HTMLParser.parseDocument(text, doc);
32.22987 +        Envjs.wait();
32.22988 +    /* } catch (e) {
32.22989 +        console.log('parsererror %s', e);
32.22990 +        try {
32.22991 +            console.log('document \n %s', doc.documentElement.outerHTML);
32.22992 +        } catch (e) {
32.22993 +            // swallow
32.22994 +        }
32.22995 +        doc = new HTMLDocument(new DOMImplementation(), doc.ownerWindow);
32.22996 +        html =    doc.createElement('html');
32.22997 +        head =    doc.createElement('head');
32.22998 +        title =   doc.createElement('title');
32.22999 +        body =    doc.createElement('body');
32.23000 +        title.appendChild(doc.createTextNode('Error'));
32.23001 +        body.appendChild(doc.createTextNode('' + e));
32.23002 +        head.appendChild(title);
32.23003 +        html.appendChild(head);
32.23004 +        html.appendChild(body);
32.23005 +        doc.appendChild(html);
32.23006 +        //console.log('default error document \n %s', doc.documentElement.outerHTML);
32.23007 +
32.23008 +        //DOMContentLoaded event
32.23009 +        if (doc.createEvent) {
32.23010 +            event = doc.createEvent('Event');
32.23011 +            event.initEvent('DOMContentLoaded', false, false);
32.23012 +            doc.dispatchEvent( event, false );
32.23013 +
32.23014 +            event = doc.createEvent('HTMLEvents');
32.23015 +            event.initEvent('load', false, false);
32.23016 +            doc.dispatchEvent( event, false );
32.23017 +        }
32.23018 +
32.23019 +        //finally fire the window.onload event
32.23020 +        //TODO: this belongs in window.js which is a event
32.23021 +        //      event handler for DOMContentLoaded on document
32.23022 +
32.23023 +        try {
32.23024 +            if (doc === window.document) {
32.23025 +                console.log('triggering window.load');
32.23026 +                event = doc.createEvent('HTMLEvents');
32.23027 +                event.initEvent('load', false, false);
32.23028 +                window.dispatchEvent( event, false );
32.23029 +            }
32.23030 +        } catch (e) {
32.23031 +            //console.log('window load event failed %s', e);
32.23032 +            //swallow
32.23033 +        }
32.23034 +    }; */  /* closes return {... */
32.23035 +};
32.23036 +
32.23037 +/**
32.23038 + *
32.23039 + * @class XMLHttpRequest
32.23040 + * @author Originally implemented by Yehuda Katz
32.23041 + *
32.23042 + */
32.23043 +
32.23044 +// this implementation can be used without requiring a DOMParser
32.23045 +// assuming you dont try to use it to get xml/html documents
32.23046 +var domparser;
32.23047 +
32.23048 +XMLHttpRequest = function(){
32.23049 +    this.headers = {};
32.23050 +    this.responseHeaders = {};
32.23051 +    this.aborted = false;//non-standard
32.23052 +};
32.23053 +
32.23054 +// defined by the standard: http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest
32.23055 +// but not provided by Firefox.  Safari and others do define it.
32.23056 +XMLHttpRequest.UNSENT = 0;
32.23057 +XMLHttpRequest.OPEN = 1;
32.23058 +XMLHttpRequest.HEADERS_RECEIVED = 2;
32.23059 +XMLHttpRequest.LOADING = 3;
32.23060 +XMLHttpRequest.DONE = 4;
32.23061 +
32.23062 +XMLHttpRequest.prototype = {
32.23063 +    open: function(method, url, async, user, password){
32.23064 +        //console.log('openning xhr %s %s %s', method, url, async);
32.23065 +        this.readyState = 1;
32.23066 +        this.async = (async === false)?false:true;
32.23067 +        this.method = method || "GET";
32.23068 +        this.url = Envjs.uri(url);
32.23069 +        this.onreadystatechange();
32.23070 +    },
32.23071 +    setRequestHeader: function(header, value){
32.23072 +        this.headers[header] = value;
32.23073 +    },
32.23074 +    send: function(data, parsedoc/*non-standard*/){
32.23075 +        var _this = this;
32.23076 +        parsedoc = (parsedoc === undefined)?true:!!parsedoc;
32.23077 +        function makeRequest(){
32.23078 +            var cookie = Envjs.getCookies(_this.url);
32.23079 +            if(cookie){
32.23080 +                _this.setRequestHeader('COOKIE', cookie);
32.23081 +            }
32.23082 +            Envjs.connection(_this, function(){
32.23083 +                if (!_this.aborted){
32.23084 +                    var doc = null,
32.23085 +                        domparser,
32.23086 +                        cookie;
32.23087 +                    // try to parse the document if we havent explicitly set a
32.23088 +                    // flag saying not to and if we can assure the text at least
32.23089 +                    // starts with valid xml
32.23090 +                    if ( parsedoc && _this.responseText.match(/^\s*</) ) {
32.23091 +                        domparser = domparser||new DOMParser();
32.23092 +                        try {
32.23093 +                            //console.log("parsing response text into xml document");
32.23094 +                            doc = domparser.parseFromString(_this.responseText+"", 'text/xml');
32.23095 +                        } catch(e) {
32.23096 +                            //Envjs.error('response XML does not appear to be well formed xml', e);
32.23097 +                            console.warn('parseerror \n%s', e);
32.23098 +                            doc = document.implementation.createDocument('','error',null);
32.23099 +                            doc.appendChild(doc.createTextNode(e+''));
32.23100 +                        }
32.23101 +                    }else{
32.23102 +                        //Envjs.warn('response XML does not appear to be xml');
32.23103 +                    }
32.23104 +                    
32.23105 +                    try{
32.23106 +                        cookie = _this.getResponseHeader('SET-COOKIE');
32.23107 +                        if(cookie){
32.23108 +                             Envjs.setCookie(_this.url, cookie);
32.23109 +                        }
32.23110 +                    }catch(e){
32.23111 +                        console.warn("Failed to set cookie");
32.23112 +                    }
32.23113 +                    _this.__defineGetter__("responseXML", function(){
32.23114 +                        return doc;
32.23115 +                    });
32.23116 +                }
32.23117 +            }, data);
32.23118 +
32.23119 +            if (!_this.aborted){
32.23120 +                _this.onreadystatechange();
32.23121 +            }
32.23122 +        }
32.23123 +
32.23124 +        if (this.async){
32.23125 +            //TODO: what we really need to do here is rejoin the
32.23126 +            //      current thread and call onreadystatechange via
32.23127 +            //      setTimeout so the callback is essentially applied
32.23128 +            //      at the end of the current callstack
32.23129 +            //console.log('requesting async: %s', this.url);
32.23130 +            Envjs.runAsync(makeRequest);
32.23131 +        }else{
32.23132 +            //console.log('requesting sync: %s', this.url);
32.23133 +            makeRequest();
32.23134 +        }
32.23135 +    },
32.23136 +    abort: function(){
32.23137 +        this.aborted = true;
32.23138 +    },
32.23139 +    onreadystatechange: function(){
32.23140 +        //Instance specific
32.23141 +    },
32.23142 +    getResponseHeader: function(header){
32.23143 +        //$debug('GETTING RESPONSE HEADER '+header);
32.23144 +        var rHeader, returnedHeaders;
32.23145 +        if (this.readyState < 3){
32.23146 +            throw new Error("INVALID_STATE_ERR");
32.23147 +        } else {
32.23148 +            returnedHeaders = [];
32.23149 +            for (rHeader in this.responseHeaders) {
32.23150 +                if (rHeader.match(new RegExp(header, "i"))) {
32.23151 +                    returnedHeaders.push(this.responseHeaders[rHeader]);
32.23152 +                }
32.23153 +            }
32.23154 +
32.23155 +            if (returnedHeaders.length){
32.23156 +                //$debug('GOT RESPONSE HEADER '+returnedHeaders.join(", "));
32.23157 +                return returnedHeaders.join(", ");
32.23158 +            }
32.23159 +        }
32.23160 +        return null;
32.23161 +    },
32.23162 +    getAllResponseHeaders: function(){
32.23163 +        var header, returnedHeaders = [];
32.23164 +        if (this.readyState < 3){
32.23165 +            throw new Error("INVALID_STATE_ERR");
32.23166 +        } else {
32.23167 +            for (header in this.responseHeaders) {
32.23168 +                returnedHeaders.push( header + ": " + this.responseHeaders[header] );
32.23169 +            }
32.23170 +        }
32.23171 +        return returnedHeaders.join("\r\n");
32.23172 +    },
32.23173 +    async: true,
32.23174 +    readyState: 0,
32.23175 +    responseText: "",
32.23176 +    status: 0,
32.23177 +    statusText: ""
32.23178 +};
32.23179 +
32.23180 +/**
32.23181 + * @author john resig & the envjs team
32.23182 + * @uri http://www.envjs.com/
32.23183 + * @copyright 2008-2010
32.23184 + * @license MIT
32.23185 + */
32.23186 +//CLOSURE_END
32.23187 +}());
32.23188 +
32.23189 +/**
32.23190 + * @todo: document
32.23191 + */
32.23192 +var Window,
32.23193 +    Screen,
32.23194 +    History,
32.23195 +    Navigator;
32.23196 +
32.23197 +
32.23198 +/*
32.23199 + * Envjs window.1.2.13 
32.23200 + * Pure JavaScript Browser Environment
32.23201 + * By John Resig <http://ejohn.org/> and the Envjs Team
32.23202 + * Copyright 2008-2010 John Resig, under the MIT License
32.23203 + */
32.23204 +
32.23205 +//CLOSURE_START
32.23206 +(function(){
32.23207 +
32.23208 +
32.23209 +
32.23210 +
32.23211 +
32.23212 +/**
32.23213 + * @author john resig
32.23214 + */
32.23215 +// Helper method for extending one object with another.
32.23216 +function __extend__(a,b) {
32.23217 +    for ( var i in b ) {
32.23218 +        var g = b.__lookupGetter__(i), s = b.__lookupSetter__(i);
32.23219 +        if ( g || s ) {
32.23220 +            if ( g ) { a.__defineGetter__(i, g); }
32.23221 +            if ( s ) { a.__defineSetter__(i, s); }
32.23222 +        } else {
32.23223 +            a[i] = b[i];
32.23224 +        }
32.23225 +    } return a;
32.23226 +}
32.23227 +
32.23228 +/**
32.23229 + * @todo: document
32.23230 + */
32.23231 +
32.23232 +__extend__(HTMLFrameElement.prototype,{
32.23233 +
32.23234 +    get contentDocument(){
32.23235 +        return this.contentWindow?
32.23236 +            this.contentWindow.document:
32.23237 +            null;
32.23238 +    },
32.23239 +    set src(value){
32.23240 +        var event;
32.23241 +        this.setAttribute('src', value);
32.23242 +        if (this.parentNode && value && value.length > 0){
32.23243 +            //console.log('loading frame %s', value);
32.23244 +            Envjs.loadFrame(this, Envjs.uri(value));
32.23245 +
32.23246 +            //console.log('event frame load %s', value);
32.23247 +            event = this.ownerDocument.createEvent('HTMLEvents');
32.23248 +            event.initEvent("load", false, false);
32.23249 +            this.dispatchEvent( event, false );
32.23250 +        }
32.23251 +    }
32.23252 +
32.23253 +});
32.23254 +
32.23255 +/*
32.23256 + *       history.js
32.23257 + *
32.23258 + */
32.23259 +
32.23260 +History = function(owner) {
32.23261 +    var $current = 0,
32.23262 +        $history = [null],
32.23263 +        $owner = owner;
32.23264 +
32.23265 +    return {
32.23266 +        go : function(target) {
32.23267 +            if (typeof target === "number") {
32.23268 +                target = $current + target;
32.23269 +                if (target > -1 && target < $history.length){
32.23270 +                    if ($history[target].type === "hash") {
32.23271 +                        if ($owner.location) {
32.23272 +                            $owner.location.hash = $history[target].value;
32.23273 +                        }
32.23274 +                    } else {
32.23275 +                        if ($owner.location) {
32.23276 +                            $owner.location = $history[target].value;
32.23277 +                        }
32.23278 +                    }
32.23279 +                    $current = target;
32.23280 +                }
32.23281 +            } else {
32.23282 +                //TODO: walk through the history and find the 'best match'?
32.23283 +            }
32.23284 +        },
32.23285 +
32.23286 +        get length() {
32.23287 +            return $history.length;
32.23288 +        },
32.23289 +
32.23290 +        back : function(count) {
32.23291 +            if (count) {
32.23292 +                this.go(-count);
32.23293 +            } else {
32.23294 +                this.go(-1);
32.23295 +            }
32.23296 +        },
32.23297 +
32.23298 +        get current() {
32.23299 +            return this.item($current);
32.23300 +        },
32.23301 +
32.23302 +        get previous() {
32.23303 +            return this.item($current-1);
32.23304 +        },
32.23305 +
32.23306 +        forward : function(count) {
32.23307 +            if (count) {
32.23308 +                this.go(count);
32.23309 +            } else {
32.23310 +                this.go(1);
32.23311 +            }
32.23312 +        },
32.23313 +
32.23314 +        item: function(idx) {
32.23315 +            if (idx >= 0 && idx < $history.length) {
32.23316 +                return $history[idx];
32.23317 +            } else {
32.23318 +                return null;
32.23319 +            }
32.23320 +        },
32.23321 +
32.23322 +        add: function(newLocation, type) {
32.23323 +            //not a standard interface, we expose it to simplify
32.23324 +            //history state modifications
32.23325 +            if (newLocation !== $history[$current]) {
32.23326 +                $history.slice(0, $current);
32.23327 +                $history.push({
32.23328 +                    type: type || 'href',
32.23329 +                    value: newLocation
32.23330 +                });
32.23331 +            }
32.23332 +        }
32.23333 +    }; /* closes 'return {' */
32.23334 +};
32.23335 +
32.23336 +
32.23337 +/*
32.23338 + *      navigator.js
32.23339 + *  Browser Navigator
32.23340 + */
32.23341 +Navigator = function(){
32.23342 +
32.23343 +    return {
32.23344 +        get appCodeName(){
32.23345 +            return Envjs.appCodeName;
32.23346 +        },
32.23347 +        get appName(){
32.23348 +            return Envjs.appName;
32.23349 +        },
32.23350 +        get appVersion(){
32.23351 +            return Envjs.version +" ("+
32.23352 +                this.platform +"; "+
32.23353 +                "U; "+//?
32.23354 +                Envjs.os_name+" "+Envjs.os_arch+" "+Envjs.os_version+"; "+
32.23355 +                (Envjs.lang?Envjs.lang:"en-US")+"; "+
32.23356 +                "rv:"+Envjs.revision+
32.23357 +                ")";
32.23358 +        },
32.23359 +        get cookieEnabled(){
32.23360 +            return true;
32.23361 +        },
32.23362 +        get mimeTypes(){
32.23363 +            return [];
32.23364 +        },
32.23365 +        get platform(){
32.23366 +            return Envjs.platform;
32.23367 +        },
32.23368 +        get plugins(){
32.23369 +            return [];
32.23370 +        },
32.23371 +        get userAgent(){
32.23372 +            return this.appCodeName + "/" + this.appVersion + " " + this.appName;
32.23373 +        },
32.23374 +        javaEnabled : function(){
32.23375 +            return Envjs.javaEnabled;
32.23376 +        }
32.23377 +    };
32.23378 +};
32.23379 +
32.23380 +
32.23381 +/**
32.23382 + * Screen
32.23383 + * @param {Object} __window__
32.23384 + */
32.23385 +
32.23386 +Screen = function(__window__){
32.23387 +
32.23388 +    var $availHeight  = 600,
32.23389 +        $availWidth   = 800,
32.23390 +        $colorDepth   = 16,
32.23391 +        $pixelDepth   = 24,
32.23392 +        $height       = 600,
32.23393 +        $width        = 800,
32.23394 +        $top          = 0,
32.23395 +        $left         = 0,
32.23396 +        $availTop     = 0,
32.23397 +        $availLeft    = 0;
32.23398 +
32.23399 +    __extend__( __window__, {
32.23400 +        moveBy : function(dx,dy){
32.23401 +            //TODO - modify $locals to reflect change
32.23402 +        },
32.23403 +        moveTo : function(x,y) {
32.23404 +            //TODO - modify $locals to reflect change
32.23405 +        },
32.23406 +        /*print : function(){
32.23407 +            //TODO - good global to modify to ensure print is not misused
32.23408 +        };*/
32.23409 +        resizeBy : function(dw, dh){
32.23410 +            __window__resizeTo($width + dw, $height + dh);
32.23411 +        },
32.23412 +        resizeTo : function(width, height){
32.23413 +            $width = (width <= $availWidth) ? width : $availWidth;
32.23414 +            $height = (height <= $availHeight) ? height : $availHeight;
32.23415 +        },
32.23416 +        scroll : function(x,y){
32.23417 +            //TODO - modify $locals to reflect change
32.23418 +        },
32.23419 +        scrollBy : function(dx, dy){
32.23420 +            //TODO - modify $locals to reflect change
32.23421 +        },
32.23422 +        scrollTo : function(x,y){
32.23423 +            //TODO - modify $locals to reflect change
32.23424 +        }
32.23425 +    });
32.23426 +
32.23427 +    return {
32.23428 +        get top(){
32.23429 +            return $top;
32.23430 +        },
32.23431 +        get left(){
32.23432 +            return $left;
32.23433 +        },
32.23434 +        get availTop(){
32.23435 +            return $availTop;
32.23436 +        },
32.23437 +        get availLeft(){
32.23438 +            return $availLeft;
32.23439 +        },
32.23440 +        get availHeight(){
32.23441 +            return $availHeight;
32.23442 +        },
32.23443 +        get availWidth(){
32.23444 +            return $availWidth;
32.23445 +        },
32.23446 +        get colorDepth(){
32.23447 +            return $colorDepth;
32.23448 +        },
32.23449 +        get pixelDepth(){
32.23450 +            return $pixelDepth;
32.23451 +        },
32.23452 +        get height(){
32.23453 +            return $height;
32.23454 +        },
32.23455 +        get width(){
32.23456 +            return $width;
32.23457 +        }
32.23458 +    };
32.23459 +};
32.23460 +
32.23461 +/*
32.23462 + * Copyright (c) 2010 Nick Galbreath
32.23463 + * http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
32.23464 + *
32.23465 + * Permission is hereby granted, free of charge, to any person
32.23466 + * obtaining a copy of this software and associated documentation
32.23467 + * files (the "Software"), to deal in the Software without
32.23468 + * restriction, including without limitation the rights to use,
32.23469 + * copy, modify, merge, publish, distribute, sublicense, and/or sell
32.23470 + * copies of the Software, and to permit persons to whom the
32.23471 + * Software is furnished to do so, subject to the following
32.23472 + * conditions:
32.23473 + *
32.23474 + * The above copyright notice and this permission notice shall be
32.23475 + * included in all copies or substantial portions of the Software.
32.23476 + *
32.23477 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32.23478 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
32.23479 + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
32.23480 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
32.23481 + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
32.23482 + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
32.23483 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
32.23484 + * OTHER DEALINGS IN THE SOFTWARE.
32.23485 + */
32.23486 +
32.23487 +/* base64 encode/decode compatible with window.btoa/atob
32.23488 + *
32.23489 + * window.atob/btoa is a Firefox extension to convert binary data (the "b")
32.23490 + * to base64 (ascii, the "a").
32.23491 + *
32.23492 + * It is also found in Safari and Chrome.  It is not available in IE.
32.23493 + *
32.23494 + * if (!window.btoa) window.btoa = base64.encode
32.23495 + * if (!window.atob) window.atob = base64.decode
32.23496 + *
32.23497 + * The original spec's for atob/btoa are a bit lacking
32.23498 + * https://developer.mozilla.org/en/DOM/window.atob
32.23499 + * https://developer.mozilla.org/en/DOM/window.btoa
32.23500 + *
32.23501 + * window.btoa and base64.encode takes a string where charCodeAt is [0,255]
32.23502 + * If any character is not [0,255], then an DOMException(5) is thrown.
32.23503 + *
32.23504 + * window.atob and base64.decode take a base64-encoded string
32.23505 + * If the input length is not a multiple of 4, or contains invalid characters
32.23506 + *   then an DOMException(5) is thrown.
32.23507 + */
32.23508 +var base64 = {};
32.23509 +base64.PADCHAR = '=';
32.23510 +base64.ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
32.23511 +
32.23512 +base64.makeDOMException = function() {
32.23513 +    // sadly in FF,Safari,Chrome you can't make a DOMException
32.23514 +    var e, tmp;
32.23515 +
32.23516 +    try {
32.23517 +        return new DOMException(DOMException.INVALID_CHARACTER_ERR);
32.23518 +    } catch (tmp) {
32.23519 +        // not available, just passback a duck-typed equiv
32.23520 +        // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error
32.23521 +        // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error/prototype
32.23522 +        var ex = new Error("DOM Exception 5");
32.23523 +
32.23524 +        // ex.number and ex.description is IE-specific.
32.23525 +        ex.code = ex.number = 5;
32.23526 +        ex.name = ex.description = "INVALID_CHARACTER_ERR";
32.23527 +
32.23528 +        // Safari/Chrome output format
32.23529 +        ex.toString = function() { return 'Error: ' + ex.name + ': ' + ex.message; };
32.23530 +        return ex;
32.23531 +    }
32.23532 +};
32.23533 +
32.23534 +base64.getbyte64 = function(s,i) {
32.23535 +    // This is oddly fast, except on Chrome/V8.
32.23536 +    //  Minimal or no improvement in performance by using a
32.23537 +    //   object with properties mapping chars to value (eg. 'A': 0)
32.23538 +    var idx = base64.ALPHA.indexOf(s.charAt(i));
32.23539 +    if (idx === -1) {
32.23540 +        throw base64.makeDOMException();
32.23541 +    }
32.23542 +    return idx;
32.23543 +};
32.23544 +
32.23545 +base64.decode = function(s) {
32.23546 +    // convert to string
32.23547 +    s = '' + s;
32.23548 +    var getbyte64 = base64.getbyte64;
32.23549 +    var pads, i, b10;
32.23550 +    var imax = s.length;
32.23551 +    if (imax === 0) {
32.23552 +        return s;
32.23553 +    }
32.23554 +
32.23555 +    if (imax % 4 !== 0) {
32.23556 +        throw base64.makeDOMException();
32.23557 +    }
32.23558 +
32.23559 +    pads = 0;
32.23560 +    if (s.charAt(imax - 1) === base64.PADCHAR) {
32.23561 +        pads = 1;
32.23562 +        if (s.charAt(imax - 2) === base64.PADCHAR) {
32.23563 +            pads = 2;
32.23564 +        }
32.23565 +        // either way, we want to ignore this last block
32.23566 +        imax -= 4;
32.23567 +    }
32.23568 +
32.23569 +    var x = [];
32.23570 +    for (i = 0; i < imax; i += 4) {
32.23571 +        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) |
32.23572 +            (getbyte64(s,i+2) << 6) | getbyte64(s,i+3);
32.23573 +        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff, b10 & 0xff));
32.23574 +    }
32.23575 +
32.23576 +    switch (pads) {
32.23577 +    case 1:
32.23578 +        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) | (getbyte64(s,i+2) << 6);
32.23579 +        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff));
32.23580 +        break;
32.23581 +    case 2:
32.23582 +        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12);
32.23583 +        x.push(String.fromCharCode(b10 >> 16));
32.23584 +        break;
32.23585 +    }
32.23586 +    return x.join('');
32.23587 +};
32.23588 +
32.23589 +base64.getbyte = function(s,i) {
32.23590 +    var x = s.charCodeAt(i);
32.23591 +    if (x > 255) {
32.23592 +        throw base64.makeDOMException();
32.23593 +    }
32.23594 +    return x;
32.23595 +};
32.23596 +
32.23597 +base64.encode = function(s) {
32.23598 +    if (arguments.length !== 1) {
32.23599 +        throw new SyntaxError("Not enough arguments");
32.23600 +    }
32.23601 +    var padchar = base64.PADCHAR;
32.23602 +    var alpha   = base64.ALPHA;
32.23603 +    var getbyte = base64.getbyte;
32.23604 +
32.23605 +    var i, b10;
32.23606 +    var x = [];
32.23607 +
32.23608 +    // convert to string
32.23609 +    s = '' + s;
32.23610 +
32.23611 +    var imax = s.length - s.length % 3;
32.23612 +
32.23613 +    if (s.length === 0) {
32.23614 +        return s;
32.23615 +    }
32.23616 +    for (i = 0; i < imax; i += 3) {
32.23617 +        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8) | getbyte(s,i+2);
32.23618 +        x.push(alpha.charAt(b10 >> 18));
32.23619 +        x.push(alpha.charAt((b10 >> 12) & 0x3F));
32.23620 +        x.push(alpha.charAt((b10 >> 6) & 0x3f));
32.23621 +        x.push(alpha.charAt(b10 & 0x3f));
32.23622 +    }
32.23623 +    switch (s.length - imax) {
32.23624 +    case 1:
32.23625 +        b10 = getbyte(s,i) << 16;
32.23626 +        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +
32.23627 +               padchar + padchar);
32.23628 +        break;
32.23629 +    case 2:
32.23630 +        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8);
32.23631 +        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +
32.23632 +               alpha.charAt((b10 >> 6) & 0x3f) + padchar);
32.23633 +        break;
32.23634 +    }
32.23635 +    return x.join('');
32.23636 +};
32.23637 +//These descriptions of window properties are taken loosely David Flanagan's
32.23638 +//'JavaScript - The Definitive Guide' (O'Reilly)
32.23639 +
32.23640 +var __windows__ = {};
32.23641 +
32.23642 +var __top__ = function(_scope){
32.23643 +    var _parent = _scope.parent;
32.23644 +    while (_scope && _parent && _scope !== _parent) {
32.23645 +        if (_parent === _parent.parent) {
32.23646 +            break;
32.23647 +        }
32.23648 +        _parent = _parent.parent;
32.23649 +        //console.log('scope %s _parent %s', scope, _parent);
32.23650 +    }
32.23651 +    return _parent || null;
32.23652 +};
32.23653 +
32.23654 +/**
32.23655 + * Window
32.23656 + * @param {Object} scope
32.23657 + * @param {Object} parent
32.23658 + * @param {Object} opener
32.23659 + */
32.23660 +Window = function(scope, parent, opener){
32.23661 +
32.23662 +    // the window property is identical to the self property and to this obj
32.23663 +    //var proxy = new Envjs.proxy(scope, parent);
32.23664 +    //scope.__proxy__ = proxy;
32.23665 +    scope.__defineGetter__('window', function(){
32.23666 +        return scope;
32.23667 +    });
32.23668 +
32.23669 +    var $uuid = new Date().getTime()+'-'+Math.floor(Math.random()*1000000000000000);
32.23670 +    __windows__[$uuid] = scope;
32.23671 +    //console.log('opening window %s', $uuid);
32.23672 +
32.23673 +    // every window has one-and-only-one .document property which is always
32.23674 +    // an [object HTMLDocument].  also, only window.document objects are
32.23675 +    // html documents, all other documents created by the window.document are
32.23676 +    // [object XMLDocument]
32.23677 +    var $htmlImplementation =  new DOMImplementation();
32.23678 +    $htmlImplementation.namespaceAware = true;
32.23679 +    $htmlImplementation.errorChecking = false;
32.23680 +
32.23681 +    // read only reference to the Document object
32.23682 +    var $document = new HTMLDocument($htmlImplementation, scope);
32.23683 +
32.23684 +    // A read-only reference to the Window object that contains this window
32.23685 +    // or frame.  If the window is a top-level window, parent refers to
32.23686 +    // the window itself.  If this window is a frame, this property refers
32.23687 +    // to the window or frame that contains it.
32.23688 +    var $parent = parent;
32.23689 +
32.23690 +    /**> $cookies - see cookie.js <*/
32.23691 +    // read only boolean specifies whether the window has been closed
32.23692 +    var $closed = false;
32.23693 +
32.23694 +    // a read/write string that specifies the default message that
32.23695 +    // appears in the status line
32.23696 +    var $defaultStatus = "Done";
32.23697 +
32.23698 +    // IE only, refers to the most recent event object - this maybe be
32.23699 +    // removed after review
32.23700 +    var $event = null;
32.23701 +
32.23702 +    // a read-only reference to the History object
32.23703 +    var $history = new History();
32.23704 +
32.23705 +    // a read-only reference to the Location object.  the location object does
32.23706 +    // expose read/write properties
32.23707 +    var $location = new Location('about:blank', $document, $history);
32.23708 +
32.23709 +    // The name of window/frame. Set directly, when using open(), or in frameset.
32.23710 +    // May be used when specifying the target attribute of links
32.23711 +    var $name = null;
32.23712 +
32.23713 +    // a read-only reference to the Navigator object
32.23714 +    var $navigator = new Navigator();
32.23715 +
32.23716 +    // a read/write reference to the Window object that contained the script
32.23717 +    // that called open() to open this browser window.  This property is valid
32.23718 +    // only for top-level window objects.
32.23719 +    var $opener = opener?opener:null;
32.23720 +
32.23721 +    // read-only properties that specify the height and width, in pixels
32.23722 +    var $innerHeight = 600, $innerWidth = 800;
32.23723 +
32.23724 +    // Read-only properties that specify the total height and width, in pixels,
32.23725 +    // of the browser window. These dimensions include the height and width of
32.23726 +    // the menu bar, toolbars, scrollbars, window borders and so on.  These
32.23727 +    // properties are not supported by IE and IE offers no alternative
32.23728 +    // properties;
32.23729 +    var $outerHeight = $innerHeight,
32.23730 +        $outerWidth = $innerWidth;
32.23731 +
32.23732 +    // Read-only properties that specify the number of pixels that the current
32.23733 +    // document has been scrolled to the right and down.  These are not
32.23734 +    // supported by IE.
32.23735 +    var $pageXOffset = 0, $pageYOffset = 0;
32.23736 +
32.23737 +    // a read-only reference to the Screen object that specifies information
32.23738 +    // about the screen: the number of available pixels and the number of
32.23739 +    // available colors.
32.23740 +    var $screen = new Screen(scope);
32.23741 +
32.23742 +    // read only properties that specify the coordinates of the upper-left
32.23743 +    // corner of the screen.
32.23744 +    var $screenX = 1,
32.23745 +        $screenY = 1;
32.23746 +    var $screenLeft = $screenX,
32.23747 +        $screenTop = $screenY;
32.23748 +
32.23749 +    // a read/write string that specifies the current status line.
32.23750 +    var $status = '';
32.23751 +
32.23752 +    __extend__(scope, EventTarget.prototype);
32.23753 +
32.23754 +    return __extend__( scope, {
32.23755 +        get closed(){
32.23756 +            return $closed;
32.23757 +        },
32.23758 +        get defaultStatus(){
32.23759 +            return $defaultStatus;
32.23760 +        },
32.23761 +        set defaultStatus(defaultStatus){
32.23762 +            $defaultStatus = defaultStatus;
32.23763 +        },
32.23764 +        get document(){
32.23765 +            return $document;
32.23766 +        },
32.23767 +        set document(doc){
32.23768 +            $document = doc;
32.23769 +        },
32.23770 +        /*
32.23771 +        deprecated ie specific property probably not good to support
32.23772 +        get event(){
32.23773 +            return $event;
32.23774 +        },
32.23775 +        */
32.23776 +        get frames(){
32.23777 +        return new HTMLCollection($document.getElementsByTagName('frame'));
32.23778 +        },
32.23779 +        get length(){
32.23780 +            // should be frames.length,
32.23781 +            return this.frames.length;
32.23782 +        },
32.23783 +        get history(){
32.23784 +            return $history;
32.23785 +        },
32.23786 +        get innerHeight(){
32.23787 +            return $innerHeight;
32.23788 +        },
32.23789 +        get innerWidth(){
32.23790 +            return $innerWidth;
32.23791 +        },
32.23792 +        get clientHeight(){
32.23793 +            return $innerHeight;
32.23794 +        },
32.23795 +        get clientWidth(){
32.23796 +            return $innerWidth;
32.23797 +        },
32.23798 +        get location(){
32.23799 +            return $location;
32.23800 +        },
32.23801 +        set location(uri){
32.23802 +            uri = Envjs.uri(uri);
32.23803 +            //new Window(this, this.parent, this.opener);
32.23804 +            if($location.href == uri){
32.23805 +                $location.reload();
32.23806 +            }else if($location.href == 'about:blank'){
32.23807 +                $location.assign(uri);
32.23808 +            }else{
32.23809 +                $location.replace(uri);
32.23810 +            }
32.23811 +        },
32.23812 +        get name(){
32.23813 +            return $name;
32.23814 +        },
32.23815 +        set name(newName){
32.23816 +            $name = newName;
32.23817 +        },
32.23818 +        get navigator(){
32.23819 +            return $navigator;
32.23820 +        },
32.23821 +        get opener(){
32.23822 +            return $opener;
32.23823 +        },
32.23824 +        get outerHeight(){
32.23825 +            return $outerHeight;
32.23826 +        },
32.23827 +        get outerWidth(){
32.23828 +            return $outerWidth;
32.23829 +        },
32.23830 +        get pageXOffest(){
32.23831 +            return $pageXOffset;
32.23832 +        },
32.23833 +        get pageYOffset(){
32.23834 +            return $pageYOffset;
32.23835 +        },
32.23836 +        get parent(){
32.23837 +            return $parent;
32.23838 +        },
32.23839 +        get screen(){
32.23840 +            return $screen;
32.23841 +        },
32.23842 +        get screenLeft(){
32.23843 +            return $screenLeft;
32.23844 +        },
32.23845 +        get screenTop(){
32.23846 +            return $screenTop;
32.23847 +        },
32.23848 +        get screenX(){
32.23849 +            return $screenX;
32.23850 +        },
32.23851 +        get screenY(){
32.23852 +            return $screenY;
32.23853 +        },
32.23854 +        get self(){
32.23855 +            return scope;
32.23856 +        },
32.23857 +        get status(){
32.23858 +            return $status;
32.23859 +        },
32.23860 +        set status(status){
32.23861 +            $status = status;
32.23862 +        },
32.23863 +        // a read-only reference to the top-level window that contains this window.
32.23864 +        // If this window is a top-level window it is simply a reference to itself.
32.23865 +        // If this window is a frame, the top property refers to the top-level
32.23866 +        // window that contains the frame.
32.23867 +        get top(){
32.23868 +            return __top__(scope);
32.23869 +        },
32.23870 +        get window(){
32.23871 +            return this;
32.23872 +        },
32.23873 +        toString : function(){
32.23874 +            return '[Window]';
32.23875 +        },
32.23876 +
32.23877 +        /**
32.23878 +         * getComputedStyle
32.23879 +         *
32.23880 +         * Firefox 3.6:
32.23881 +         *  - Requires both elements to be present else an
32.23882 +         *    exception is thrown.
32.23883 +         *  - Returns a 'ComputedCSSStyleDeclaration' object.
32.23884 +         *    while a raw element.style returns a 'CSSStyleDeclaration' object.
32.23885 +         *  - Bogus input also throws exception
32.23886 +         *
32.23887 +         * Safari 4:
32.23888 +         *  - Requires one argument (second can be MIA)
32.23889 +         *  - Returns a CSSStyleDeclaration object
32.23890 +         *  - if bad imput, returns null
32.23891 +         *
32.23892 +         * getComputedStyle should really be an "add on" from the css
32.23893 +         * modules.  Unfortunately, 'window' comes way after the 'css'
32.23894 +         * so css can't add it.
32.23895 +         */
32.23896 +        getComputedStyle: function(element, pseudoElement) {
32.23897 +            return element.style;
32.23898 +        },
32.23899 +
32.23900 +        open: function(url, name, features, replace){
32.23901 +            if (features) {
32.23902 +                console.log("'features argument not yet implemented");
32.23903 +            }
32.23904 +            var _window = Envjs.proxy({}),
32.23905 +                open;
32.23906 +            if(replace && name){
32.23907 +                for(open in __windows__){
32.23908 +                    if(open.name === name) {
32.23909 +                        _window = open;
32.23910 +                    }
32.23911 +                }
32.23912 +            }
32.23913 +            new Window(_window, _window, this);
32.23914 +            if(name) {
32.23915 +                _window.name = name;
32.23916 +            }
32.23917 +            _window.document.async = false;
32.23918 +            _window.location.assign(Envjs.uri(url));
32.23919 +            return _window;
32.23920 +        },
32.23921 +        close: function(){
32.23922 +            //console.log('closing window %s', __windows__[$uuid]);
32.23923 +            try{
32.23924 +                delete __windows__[$uuid];
32.23925 +            }catch(e){
32.23926 +                console.log('%s',e);
32.23927 +            }
32.23928 +        },
32.23929 +        alert : function(message){
32.23930 +            Envjs.alert(message);
32.23931 +        },
32.23932 +        confirm : function(question){
32.23933 +            Envjs.confirm(question);
32.23934 +        },
32.23935 +        prompt : function(message, defaultMsg){
32.23936 +            Envjs.prompt(message, defaultMsg);
32.23937 +        },
32.23938 +        btoa: function(binary){
32.23939 +            return base64.encode(binary);
32.23940 +        },
32.23941 +        atob: function(ascii){
32.23942 +            return base64.decode(ascii);
32.23943 +        },
32.23944 +        onload: function(){},
32.23945 +        onunload: function(){},
32.23946 +        get guid(){
32.23947 +            return $uuid;
32.23948 +        }
32.23949 +    });
32.23950 +
32.23951 +};
32.23952 +
32.23953 +
32.23954 +//finally pre-supply the window with the window-like environment
32.23955 +//console.log('Default Window');
32.23956 +new Window(__this__, __this__);
32.23957 +console.log('[ %s ]',window.navigator.userAgent);
32.23958 +/**
32.23959 + *
32.23960 + * @param {Object} event
32.23961 + */
32.23962 +__extend__(Envjs.defaultEventBehaviors,{
32.23963 +
32.23964 +    'submit': function(event) {
32.23965 +        var target = event.target;
32.23966 +        while (target && target.nodeName !== 'FORM') {
32.23967 +            target = target.parentNode;
32.23968 +        }
32.23969 +        if (target && target.nodeName === 'FORM') {
32.23970 +            target.submit();
32.23971 +        }
32.23972 +    },
32.23973 +    'click': function(event) {
32.23974 +        // console.log('handling event target default behavior for click');
32.23975 +    }
32.23976 +
32.23977 +});
32.23978 +/**
32.23979 + * @author john resig & the envjs team
32.23980 + * @uri http://www.envjs.com/
32.23981 + * @copyright 2008-2010
32.23982 + * @license MIT
32.23983 + */
32.23984 +//CLOSURE_END
32.23985 +}());
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/boot-script/src/test/resources/net/java/html/boot/script/ko4j/test.html	Fri Jul 25 10:45:12 2014 +0200
    33.3 @@ -0,0 +1,56 @@
    33.4 +<!--
    33.5 +
    33.6 +    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    33.7 +
    33.8 +    Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    33.9 +
   33.10 +    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   33.11 +    Other names may be trademarks of their respective owners.
   33.12 +
   33.13 +    The contents of this file are subject to the terms of either the GNU
   33.14 +    General Public License Version 2 only ("GPL") or the Common
   33.15 +    Development and Distribution License("CDDL") (collectively, the
   33.16 +    "License"). You may not use this file except in compliance with the
   33.17 +    License. You can obtain a copy of the License at
   33.18 +    http://www.netbeans.org/cddl-gplv2.html
   33.19 +    or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   33.20 +    specific language governing permissions and limitations under the
   33.21 +    License.  When distributing the software, include this License Header
   33.22 +    Notice in each file and include the License file at
   33.23 +    nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   33.24 +    particular file as subject to the "Classpath" exception as provided
   33.25 +    by Oracle in the GPL Version 2 section of the License file that
   33.26 +    accompanied this code. If applicable, add the following below the
   33.27 +    License Header, with the fields enclosed by brackets [] replaced by
   33.28 +    your own identifying information:
   33.29 +    "Portions Copyrighted [year] [name of copyright owner]"
   33.30 +
   33.31 +    Contributor(s):
   33.32 +
   33.33 +    The Original Software is NetBeans. The Initial Developer of the Original
   33.34 +    Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   33.35 +
   33.36 +    If you wish your version of this file to be governed by only the CDDL
   33.37 +    or only the GPL Version 2, indicate your decision by adding
   33.38 +    "[Contributor] elects to include this software in this distribution
   33.39 +    under the [CDDL or GPL Version 2] license." If you do not indicate a
   33.40 +    single choice of license, a recipient has the option to distribute
   33.41 +    your version of this file under either the CDDL, the GPL Version 2 or
   33.42 +    to extend the choice of license to its licensees as provided above.
   33.43 +    However, if you add GPL Version 2 code and therefore, elected the GPL
   33.44 +    Version 2 license, then the option applies only if the new code is
   33.45 +    made subject to such option by the copyright holder.
   33.46 +
   33.47 +-->
   33.48 +<!DOCTYPE html>
   33.49 +<html>
   33.50 +    <head>
   33.51 +        <title>Knockout.fx Execution Harness</title>
   33.52 +        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   33.53 +        <meta name="viewport" content="width=device-width">
   33.54 +    </head>
   33.55 +    <body>
   33.56 +        <h1>Knockout in Env.Execution Harness</h1>
   33.57 +        <script></script>
   33.58 +    </body>
   33.59 +</html>
    34.1 --- a/boot/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    34.2 +++ b/boot/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    34.3 @@ -4,11 +4,11 @@
    34.4    <parent>
    34.5      <groupId>org.netbeans.html</groupId>
    34.6      <artifactId>pom</artifactId>
    34.7 -    <version>0.8-SNAPSHOT</version>
    34.8 +    <version>1.0-SNAPSHOT</version>
    34.9    </parent>
   34.10    <groupId>org.netbeans.html</groupId>
   34.11    <artifactId>net.java.html.boot</artifactId>
   34.12 -  <version>0.8-SNAPSHOT</version>
   34.13 +  <version>1.0-SNAPSHOT</version>
   34.14    <packaging>bundle</packaging>
   34.15    <name>Browser Bootstrap</name>
   34.16    <url>http://maven.apache.org</url>
    35.1 --- a/boot/src/main/java/net/java/html/boot/BrowserBuilder.java	Wed Mar 12 20:26:58 2014 +0100
    35.2 +++ b/boot/src/main/java/net/java/html/boot/BrowserBuilder.java	Fri Jul 25 10:45:12 2014 +0200
    35.3 @@ -43,10 +43,15 @@
    35.4  package net.java.html.boot;
    35.5  
    35.6  import java.io.File;
    35.7 +import java.io.FileNotFoundException;
    35.8  import java.io.IOException;
    35.9 +import java.io.InputStream;
   35.10  import java.lang.reflect.Method;
   35.11 +import java.net.JarURLConnection;
   35.12  import java.net.MalformedURLException;
   35.13  import java.net.URL;
   35.14 +import java.net.URLConnection;
   35.15 +import java.security.ProtectionDomain;
   35.16  import java.util.Arrays;
   35.17  import java.util.Collection;
   35.18  import java.util.Enumeration;
   35.19 @@ -67,7 +72,7 @@
   35.20   * <pre>
   35.21   * 
   35.22   * <b>public static void</b> <em>main</em>(String... args) {
   35.23 - *     BrowserBuilder.{@link #newBrowser}.
   35.24 + *     BrowserBuilder.{@link #newBrowser newBrowser()}.
   35.25   *          {@link #loadClass(java.lang.Class) loadClass(YourMain.class)}.
   35.26   *          {@link #loadPage(java.lang.String) loadPage("index.html")}.
   35.27   *          {@link #invoke(java.lang.String, java.lang.String[]) invoke("initialized", args)}.
   35.28 @@ -131,6 +136,20 @@
   35.29          this.clazz = mainClass;
   35.30          return this;
   35.31      }
   35.32 +    
   35.33 +    /** Allows one to specify a runnable that should be invoked when a load
   35.34 +     * of a page is finished. This method may be used in addition or instead
   35.35 +     * of {@link #loadClass(java.lang.Class)} and 
   35.36 +     * {@link #invoke(java.lang.String, java.lang.String...)} methods.
   35.37 +     * 
   35.38 +     * @param r the code to run when the page is loaded
   35.39 +     * @return this builder
   35.40 +     * @since 0.8.1
   35.41 +     */
   35.42 +    public BrowserBuilder loadFinished(Runnable r) {
   35.43 +        this.onLoad = r;
   35.44 +        return this;
   35.45 +    }
   35.46  
   35.47      /** Page to load into the browser. If the <code>page</code> represents
   35.48       * a {@link URL} known to the Java system, the URL is passed to the browser. 
   35.49 @@ -180,7 +199,7 @@
   35.50          }
   35.51          
   35.52          URL url = null;
   35.53 -        MalformedURLException mal = null;
   35.54 +        IOException mal = null;
   35.55          try {
   35.56              String baseURL = System.getProperty("browser.rootdir");
   35.57              if (baseURL != null) {
   35.58 @@ -191,20 +210,59 @@
   35.59          } catch (MalformedURLException ex) {
   35.60              mal = ex;
   35.61          }
   35.62 +        final Class<?> myCls;
   35.63 +        if (clazz != null) {
   35.64 +            myCls = clazz;
   35.65 +        } else if (onLoad != null) {
   35.66 +            myCls = onLoad.getClass();
   35.67 +        } else {
   35.68 +            throw new NullPointerException("loadClass, neither loadFinished was called!");
   35.69 +        }
   35.70 +        
   35.71          if (url == null) {
   35.72 -            url = clazz.getResource(resource);
   35.73 +            url = myCls.getResource(resource);
   35.74          }
   35.75          if (url == null) {
   35.76 -            URL jar = clazz.getProtectionDomain().getCodeSource().getLocation();
   35.77 -            try {
   35.78 -                url = new URL(jar, resource);
   35.79 -            } catch (MalformedURLException ex) {
   35.80 -                ex.initCause(mal);
   35.81 +            final ProtectionDomain pd = myCls.getProtectionDomain();
   35.82 +            if (pd != null && pd.getCodeSource() != null) {
   35.83 +                URL jar = pd.getCodeSource().getLocation();
   35.84 +                try {
   35.85 +                    url = new URL(jar, resource);
   35.86 +                } catch (MalformedURLException ex) {
   35.87 +                    ex.initCause(mal);
   35.88 +                    mal = ex;
   35.89 +                }
   35.90 +            }
   35.91 +        }
   35.92 +        if (url == null) {
   35.93 +            URL res = BrowserBuilder.class.getResource("html4j.txt");
   35.94 +            LOG.log(Level.FINE, "Found html4j {0}", res);
   35.95 +            if (res != null) try {
   35.96 +                URLConnection c = res.openConnection();
   35.97 +                LOG.log(Level.FINE, "testing : {0}", c);
   35.98 +                if (c instanceof JarURLConnection) {
   35.99 +                    JarURLConnection jc = (JarURLConnection)c;
  35.100 +                    URL base = jc.getJarFileURL();
  35.101 +                    for (int i = 0; i < 50; i++) {
  35.102 +                        URL u = new URL(base, resource);
  35.103 +                        try {
  35.104 +                            InputStream is = u.openStream();
  35.105 +                            is.close();
  35.106 +                            url = u;
  35.107 +                            LOG.log(Level.FINE, "found real url: {0}", url);
  35.108 +                            break;
  35.109 +                        } catch (FileNotFoundException ignore) {
  35.110 +                            LOG.log(Level.FINE, "Cannot open " + u, ignore);
  35.111 +                        }
  35.112 +                        base = new URL(base, "..");
  35.113 +                    }
  35.114 +                }
  35.115 +            } catch (IOException ex) {
  35.116                  mal = ex;
  35.117              }
  35.118          }
  35.119          if (url == null) {
  35.120 -            IllegalStateException ise = new IllegalStateException("Can't find resouce: " + resource + " relative to " + clazz);
  35.121 +            IllegalStateException ise = new IllegalStateException("Can't find resouce: " + resource + " relative to " + myCls);
  35.122              if (mal != null) {
  35.123                  ise.initCause(mal);
  35.124              }
  35.125 @@ -229,75 +287,89 @@
  35.126          }
  35.127          
  35.128          final ClassLoader loader;
  35.129 -        if (FnUtils.isJavaScriptCapable(clazz.getClassLoader())) {
  35.130 -            loader = clazz.getClassLoader();
  35.131 +        if (FnUtils.isJavaScriptCapable(myCls.getClassLoader())) {
  35.132 +            loader = myCls.getClassLoader();
  35.133          } else {
  35.134 -            FImpl impl = new FImpl(clazz.getClassLoader());
  35.135 -            loader = FnUtils.newLoader(impl, dfnr, clazz.getClassLoader().getParent());
  35.136 +            FImpl impl = new FImpl(myCls.getClassLoader());
  35.137 +            loader = FnUtils.newLoader(impl, dfnr, myCls.getClassLoader().getParent());
  35.138          }
  35.139 +        
  35.140 +        final Fn.Presenter dP = dfnr;
  35.141  
  35.142 -        final Fn.Presenter currentP = dfnr;
  35.143          class OnPageLoad implements Runnable {
  35.144 -            Class<?> newClazz;
  35.145              @Override
  35.146              public void run() {
  35.147                  try {
  35.148 -                    if (newClazz == null) {
  35.149 -                        Thread.currentThread().setContextClassLoader(loader);
  35.150 -                        newClazz = Class.forName(clazz.getName(), true, loader);
  35.151 -                        if (browserClass != null) {
  35.152 -                            browserClass[0] = newClazz;
  35.153 +                    final Fn.Presenter aP = Fn.activePresenter();
  35.154 +                    final Fn.Presenter currentP = aP != null ? aP : dP;
  35.155 +                    
  35.156 +                    Thread.currentThread().setContextClassLoader(loader);
  35.157 +                    final Class<?> newClazz = Class.forName(myCls.getName(), true, loader);
  35.158 +                    if (browserClass != null) {
  35.159 +                        browserClass[0] = newClazz;
  35.160 +                    }
  35.161 +                    Contexts.Builder cb = Contexts.newBuilder();
  35.162 +                    if (!Contexts.fillInByProviders(newClazz, cb)) {
  35.163 +                        LOG.log(Level.WARNING, "Using empty technology for {0}", newClazz);
  35.164 +                    }
  35.165 +                    if (currentP instanceof Executor) {
  35.166 +                        cb.register(Executor.class, (Executor)currentP, 1000);
  35.167 +                    }
  35.168 +                    cb.register(Fn.Presenter.class, currentP, 1000);
  35.169 +                    BrwsrCtx c = cb.build();
  35.170 +
  35.171 +                    class CallInitMethod implements Runnable {
  35.172 +                        @Override
  35.173 +                        public void run() {
  35.174 +                            Throwable firstError = null;
  35.175 +                            if (onLoad != null) {
  35.176 +                                try {
  35.177 +                                    FnContext.currentPresenter(currentP);
  35.178 +                                    onLoad.run();
  35.179 +                                } catch (Throwable ex) {
  35.180 +                                    firstError = ex;
  35.181 +                                } finally {
  35.182 +                                    FnContext.currentPresenter(null);
  35.183 +                                }
  35.184 +                            }
  35.185 +                            INIT: if (methodName != null) {
  35.186 +                                if (methodArgs.length == 0) {
  35.187 +                                    try {
  35.188 +                                        Method m = newClazz.getMethod(methodName);
  35.189 +                                        FnContext.currentPresenter(currentP);
  35.190 +                                        m.invoke(null);
  35.191 +                                        firstError = null;
  35.192 +                                        break INIT;
  35.193 +                                    } catch (Throwable ex) {
  35.194 +                                        firstError = ex;
  35.195 +                                    } finally {
  35.196 +                                        FnContext.currentPresenter(null);
  35.197 +                                    }
  35.198 +                                }
  35.199 +                                try {
  35.200 +                                    Method m = newClazz.getMethod(methodName, String[].class);
  35.201 +                                    FnContext.currentPresenter(currentP);
  35.202 +                                    m.invoke(m, (Object) methodArgs);
  35.203 +                                    firstError = null;
  35.204 +                                } catch (Throwable ex) {
  35.205 +                                    LOG.log(Level.SEVERE, "Can't call " + methodName + " with args " + Arrays.toString(methodArgs), ex);
  35.206 +                                } finally {
  35.207 +                                    FnContext.currentPresenter(null);
  35.208 +                                }
  35.209 +                            }
  35.210 +                            if (firstError != null) {
  35.211 +                                LOG.log(Level.SEVERE, "Can't initialize the view", firstError);
  35.212 +                            }
  35.213                          }
  35.214 -                        Contexts.Builder cb = Contexts.newBuilder();
  35.215 -                        if (!Contexts.fillInByProviders(newClazz, cb)) {
  35.216 -                            LOG.log(Level.WARNING, "Using empty technology for {0}", newClazz);
  35.217 -                        }
  35.218 -                        if (currentP instanceof Executor) {
  35.219 -                            cb.register(Executor.class, (Executor)currentP, 1000);
  35.220 -                        }
  35.221 -                        cb.register(Fn.Presenter.class, currentP, 1000);
  35.222 -                        BrwsrCtx c = cb.build();
  35.223 -                        c.execute(this);
  35.224 -                        return;
  35.225                      }
  35.226                      
  35.227 -                    if (onLoad != null) {
  35.228 -                        onLoad.run();
  35.229 -                    }
  35.230 -                    INIT: if (methodName != null) {
  35.231 -                        Throwable firstError = null;
  35.232 -                        if (methodArgs.length == 0) {
  35.233 -                            try {
  35.234 -                                Method m = newClazz.getMethod(methodName);
  35.235 -                                FnContext.currentPresenter(currentP);
  35.236 -                                m.invoke(null);
  35.237 -                                break INIT;
  35.238 -                            } catch (Throwable ex) {
  35.239 -                                firstError = ex;
  35.240 -                            } finally {
  35.241 -                                FnContext.currentPresenter(null);
  35.242 -                            }
  35.243 -                        }
  35.244 -                        try {
  35.245 -                            Method m = newClazz.getMethod(methodName, String[].class);
  35.246 -                            FnContext.currentPresenter(currentP);
  35.247 -                            m.invoke(m, (Object) methodArgs);
  35.248 -                        } catch (Throwable ex) {
  35.249 -                            if (firstError != null) {
  35.250 -                                LOG.log(Level.SEVERE, "Can't call " + methodName, firstError);
  35.251 -                            }
  35.252 -                            LOG.log(Level.SEVERE, "Can't call " + methodName + " with args " + Arrays.toString(methodArgs), ex);
  35.253 -                        } finally {
  35.254 -                            FnContext.currentPresenter(null);
  35.255 -                        }
  35.256 -                    }
  35.257 +                    c.execute(new CallInitMethod());
  35.258                  } catch (ClassNotFoundException ex) {
  35.259 -                    LOG.log(Level.SEVERE, "Can't load " + clazz.getName(), ex);
  35.260 +                    LOG.log(Level.SEVERE, "Can't load " + myCls.getName(), ex);
  35.261                  }
  35.262              }
  35.263          }
  35.264          dfnr.displayPage(url, new OnPageLoad());
  35.265 -        return;
  35.266      }
  35.267  
  35.268      private static final class FImpl implements FindResources {
    36.1 --- a/boot/src/main/java/net/java/html/js/package.html	Wed Mar 12 20:26:58 2014 +0100
    36.2 +++ b/boot/src/main/java/net/java/html/js/package.html	Fri Jul 25 10:45:12 2014 +0200
    36.3 @@ -290,5 +290,23 @@
    36.4  </pre>
    36.5          Play with them, modify them and enjoy
    36.6          <a href="http://html.java.net">Html for Java</a>!
    36.7 +        
    36.8 +        <a name="debugging">
    36.9 +        <h3>Mixed Java/JavaScript Debugging</h3>
   36.10 +        </a>
   36.11 +        
   36.12 +        <p>
   36.13 +        The following video shows how easy it is to use 
   36.14 +        NetBeans 8.0, JDK8 to debug an application that intermixes Java 
   36.15 +        and JavaScript calls. One can put breakpoints into Java part, 
   36.16 +        as well as JavaScript source code, inspect Java as well 
   36.17 +        as JavaScript variables and switch between these two 
   36.18 +        languages without any restrictions.
   36.19 +        </p>
   36.20 +        
   36.21 +        <iframe width="420" height="315" 
   36.22 +            src="http://www.youtube.com/embed/EvaTejQDRwA" 
   36.23 +            frameborder="0" allowfullscreen>
   36.24 +        </iframe>
   36.25      </body>
   36.26  </html>
    37.1 --- a/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java	Wed Mar 12 20:26:58 2014 +0100
    37.2 +++ b/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java	Fri Jul 25 10:45:12 2014 +0200
    37.3 @@ -43,6 +43,7 @@
    37.4  package org.apidesign.html.boot.spi;
    37.5  
    37.6  import java.io.Closeable;
    37.7 +import java.io.IOException;
    37.8  import java.io.InputStream;
    37.9  import java.io.InputStreamReader;
   37.10  import java.io.Reader;
   37.11 @@ -52,15 +53,13 @@
   37.12  import java.util.Map;
   37.13  import java.util.Set;
   37.14  import java.util.concurrent.Executor;
   37.15 -import java.util.logging.Level;
   37.16 -import java.util.logging.Logger;
   37.17  import net.java.html.js.JavaScriptBody;
   37.18  import org.netbeans.html.boot.impl.FnContext;
   37.19  
   37.20  /** Represents single JavaScript function that can be invoked. 
   37.21   * Created via {@link Presenter#defineFn(java.lang.String, java.lang.String...)}.
   37.22   *
   37.23 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
   37.24 + * @author Jaroslav Tulach
   37.25   */
   37.26  public abstract class Fn {
   37.27      private final Presenter presenter;
   37.28 @@ -164,7 +163,14 @@
   37.29                          LOADED.put(resource, there);
   37.30                      }
   37.31                      if (there.add(p)) {
   37.32 -                        InputStream is = caller.getClassLoader().getResourceAsStream(resource);
   37.33 +                        final ClassLoader l = caller.getClassLoader();
   37.34 +                        InputStream is = l.getResourceAsStream(resource);
   37.35 +                        if (is == null && resource.startsWith("/")) {
   37.36 +                            is = l.getResourceAsStream(resource.substring(1));
   37.37 +                        }
   37.38 +                        if (is == null) {
   37.39 +                            throw new IOException("Cannot find " + resource + " in " + l);
   37.40 +                        }
   37.41                          try {
   37.42                              InputStreamReader r = new InputStreamReader(is, "UTF-8");
   37.43                              p.loadScript(r);
   37.44 @@ -187,8 +193,9 @@
   37.45          return FnContext.currentPresenter(false);
   37.46      }
   37.47      
   37.48 -    /** Activates given presenter. Used by the code generated by 
   37.49 -     * {@link JavaScriptBody} annotation: 
   37.50 +    /** Activates given presenter. Used to associate the native 
   37.51 +     * JavaScript code specified by 
   37.52 +     * {@link JavaScriptBody} annotation with certain presenter:
   37.53       * <pre>
   37.54       * try ({@link Closeable} c = Fn.activate(presenter)) {
   37.55       *   doCallsInPresenterContext();
    38.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java	Wed Mar 12 20:26:58 2014 +0100
    38.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java	Fri Jul 25 10:45:12 2014 +0200
    38.3 @@ -151,7 +151,7 @@
    38.4              }
    38.5              final String res;
    38.6              if (r.value().startsWith("/")) {
    38.7 -                res = r.value();
    38.8 +                res = r.value().substring(1);
    38.9              } else {
   38.10                  res = findPkg(e).replace('.', '/') + "/" + r.value();
   38.11              }
   38.12 @@ -164,7 +164,12 @@
   38.13                      FileObject os2 = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, "", res);
   38.14                      os2.openInputStream().close();
   38.15                  } catch (IOException ex2) {
   38.16 -                    msg.printMessage(Diagnostic.Kind.ERROR, "Cannot find " + res + " in " + res + " package", e);
   38.17 +                    try {
   38.18 +                        FileObject os3 = processingEnv.getFiler().getResource(StandardLocation.CLASS_PATH, "", res);
   38.19 +                        os3.openInputStream().close();
   38.20 +                    } catch (IOException ex3) {
   38.21 +                        msg.printMessage(Diagnostic.Kind.ERROR, "Cannot find resource " + res, e);
   38.22 +                    }
   38.23                  }
   38.24              }
   38.25              
   38.26 @@ -396,7 +401,7 @@
   38.27                  }
   38.28                  source.append(") throws Throwable {\n");
   38.29                  source.append(convert);
   38.30 -                if (processingEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_7) >= 0) {
   38.31 +                if (useTryResources()) {
   38.32                      source.append("    try (java.io.Closeable a = org.apidesign.html.boot.spi.Fn.activate(p)) { \n");
   38.33                  } else {
   38.34                      source.append("    java.io.Closeable a = org.apidesign.html.boot.spi.Fn.activate(p); try {\n");
   38.35 @@ -430,7 +435,7 @@
   38.36                      source.append("    }\n");
   38.37                      source.append("    return $ret;\n");
   38.38                  }
   38.39 -                if (processingEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_7) >= 0) {
   38.40 +                if (useTryResources()) {
   38.41                      source.append("    }\n");
   38.42                  } else {
   38.43                      
   38.44 @@ -455,6 +460,15 @@
   38.45              }
   38.46          }
   38.47      }
   38.48 +
   38.49 +    private boolean useTryResources() {
   38.50 +        try {
   38.51 +            return processingEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_7) >= 0;
   38.52 +        } catch (LinkageError err) {
   38.53 +            // can happen when running on JDK6
   38.54 +            return false;
   38.55 +        }
   38.56 +    }
   38.57      
   38.58      private static String findPkg(Element e) {
   38.59          while (e.getKind() != ElementKind.PACKAGE) {
    39.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JsCallback.java	Wed Mar 12 20:26:58 2014 +0100
    39.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JsCallback.java	Fri Jul 25 10:45:12 2014 +0200
    39.3 @@ -118,7 +118,8 @@
    39.4              int sigBeg = body.indexOf('(', next);
    39.5              int sigEnd = body.indexOf(')', sigBeg);
    39.6              int colon4 = body.indexOf("::", next);
    39.7 -            if (sigBeg == -1 || sigEnd == -1 || colon4 == -1) {
    39.8 +            int paramBeg = body.indexOf('(', sigEnd + 1);
    39.9 +            if (sigBeg == -1 || sigEnd == -1 || colon4 == -1 || paramBeg == -1) {
   39.10                  throw new IllegalStateException(
   39.11                      "Wrong format of static callback. "
   39.12                      + "Should be: '@pkg.Class::staticMethod(Ljava/lang/Object;)(param)':\n" 
   39.13 @@ -129,7 +130,6 @@
   39.14              String method = body.substring(colon4 + 2, sigBeg);
   39.15              String params = body.substring(sigBeg, sigEnd + 1);
   39.16  
   39.17 -            int paramBeg = body.indexOf('(', sigEnd + 1);
   39.18              
   39.19              sb.append(callMethod(null, fqn, method, params));
   39.20              pos = paramBeg + 1;
    40.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JsClassLoader.java	Wed Mar 12 20:26:58 2014 +0100
    40.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JsClassLoader.java	Fri Jul 25 10:45:12 2014 +0200
    40.3 @@ -51,7 +51,7 @@
    40.4  
    40.5  /** 
    40.6   *
    40.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    40.8 + * @author Jaroslav Tulach
    40.9   */
   40.10  abstract class JsClassLoader extends ClassLoader {
   40.11      JsClassLoader(ClassLoader parent) {
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/boot/src/main/resources/net/java/html/boot/html4j.txt	Fri Jul 25 10:45:12 2014 +0200
    41.3 @@ -0,0 +1,43 @@
    41.4 +====
    41.5 +    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    41.6 +
    41.7 +    Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    41.8 +
    41.9 +    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   41.10 +    Other names may be trademarks of their respective owners.
   41.11 +
   41.12 +    The contents of this file are subject to the terms of either the GNU
   41.13 +    General Public License Version 2 only ("GPL") or the Common
   41.14 +    Development and Distribution License("CDDL") (collectively, the
   41.15 +    "License"). You may not use this file except in compliance with the
   41.16 +    License. You can obtain a copy of the License at
   41.17 +    http://www.netbeans.org/cddl-gplv2.html
   41.18 +    or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   41.19 +    specific language governing permissions and limitations under the
   41.20 +    License.  When distributing the software, include this License Header
   41.21 +    Notice in each file and include the License file at
   41.22 +    nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   41.23 +    particular file as subject to the "Classpath" exception as provided
   41.24 +    by Oracle in the GPL Version 2 section of the License file that
   41.25 +    accompanied this code. If applicable, add the following below the
   41.26 +    License Header, with the fields enclosed by brackets [] replaced by
   41.27 +    your own identifying information:
   41.28 +    "Portions Copyrighted [year] [name of copyright owner]"
   41.29 +
   41.30 +    Contributor(s):
   41.31 +
   41.32 +    The Original Software is NetBeans. The Initial Developer of the Original
   41.33 +    Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   41.34 +
   41.35 +    If you wish your version of this file to be governed by only the CDDL
   41.36 +    or only the GPL Version 2, indicate your decision by adding
   41.37 +    "[Contributor] elects to include this software in this distribution
   41.38 +    under the [CDDL or GPL Version 2] license." If you do not indicate a
   41.39 +    single choice of license, a recipient has the option to distribute
   41.40 +    your version of this file under either the CDDL, the GPL Version 2 or
   41.41 +    to extend the choice of license to its licensees as provided above.
   41.42 +    However, if you add GPL Version 2 code and therefore, elected the GPL
   41.43 +    Version 2 license, then the option applies only if the new code is
   41.44 +    made subject to such option by the copyright holder.
   41.45 +====
   41.46 +
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsCallbackTest.java	Fri Jul 25 10:45:12 2014 +0200
    42.3 @@ -0,0 +1,86 @@
    42.4 +/**
    42.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    42.6 + *
    42.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    42.8 + *
    42.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   42.10 + * Other names may be trademarks of their respective owners.
   42.11 + *
   42.12 + * The contents of this file are subject to the terms of either the GNU
   42.13 + * General Public License Version 2 only ("GPL") or the Common
   42.14 + * Development and Distribution License("CDDL") (collectively, the
   42.15 + * "License"). You may not use this file except in compliance with the
   42.16 + * License. You can obtain a copy of the License at
   42.17 + * http://www.netbeans.org/cddl-gplv2.html
   42.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   42.19 + * specific language governing permissions and limitations under the
   42.20 + * License.  When distributing the software, include this License Header
   42.21 + * Notice in each file and include the License file at
   42.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   42.23 + * particular file as subject to the "Classpath" exception as provided
   42.24 + * by Oracle in the GPL Version 2 section of the License file that
   42.25 + * accompanied this code. If applicable, add the following below the
   42.26 + * License Header, with the fields enclosed by brackets [] replaced by
   42.27 + * your own identifying information:
   42.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   42.29 + *
   42.30 + * Contributor(s):
   42.31 + *
   42.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   42.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   42.34 + *
   42.35 + * If you wish your version of this file to be governed by only the CDDL
   42.36 + * or only the GPL Version 2, indicate your decision by adding
   42.37 + * "[Contributor] elects to include this software in this distribution
   42.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   42.39 + * single choice of license, a recipient has the option to distribute
   42.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   42.41 + * to extend the choice of license to its licensees as provided above.
   42.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   42.43 + * Version 2 license, then the option applies only if the new code is
   42.44 + * made subject to such option by the copyright holder.
   42.45 + */
   42.46 +package org.netbeans.html.boot.impl;
   42.47 +
   42.48 +import static org.testng.Assert.*;
   42.49 +import org.testng.annotations.Test;
   42.50 +
   42.51 +/** Verify behavior of the callback parser.
   42.52 + *
   42.53 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   42.54 + */
   42.55 +public class JsCallbackTest {
   42.56 +    
   42.57 +    public JsCallbackTest() {
   42.58 +    }
   42.59 +    @Test public void missingTypeSpecification() {
   42.60 +        String body = "console[attr] = function(msg) {\n"
   42.61 +        + "  @org.apidesign.html.charts.Main::log(msg);\n"
   42.62 +        + "};\n";
   42.63 +        JsCallback instance = new JsCallbackImpl();
   42.64 +        try {
   42.65 +            String result = instance.parse(body);
   42.66 +            fail("The parsing should fail!");
   42.67 +        } catch (IllegalStateException ex) {
   42.68 +            // OK
   42.69 +        }
   42.70 +    }
   42.71 +
   42.72 +
   42.73 +    public class JsCallbackImpl extends JsCallback {
   42.74 +        private String ident;
   42.75 +        private String fqn;
   42.76 +        private String method;
   42.77 +        private String params;
   42.78 +        
   42.79 +        @Override
   42.80 +        public CharSequence callMethod(String ident, String fqn, String method, String params) {
   42.81 +            this.ident = ident;
   42.82 +            this.fqn = fqn;
   42.83 +            this.method = method;
   42.84 +            this.params = params;
   42.85 +            return "call";
   42.86 +        }
   42.87 +    }
   42.88 +    
   42.89 +}
    43.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Wed Mar 12 20:26:58 2014 +0100
    43.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Fri Jul 25 10:45:12 2014 +0200
    43.3 @@ -53,7 +53,7 @@
    43.4  
    43.5  /**
    43.6   *
    43.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    43.8 + * @author Jaroslav Tulach
    43.9   */
   43.10  public class JsClassLoaderBase {
   43.11      protected static Class<?> methodClass;
    44.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderTest.java	Wed Mar 12 20:26:58 2014 +0100
    44.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderTest.java	Fri Jul 25 10:45:12 2014 +0200
    44.3 @@ -62,7 +62,7 @@
    44.4  
    44.5  /**
    44.6   *
    44.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    44.8 + * @author Jaroslav Tulach
    44.9   */
   44.10  public class JsClassLoaderTest extends JsClassLoaderBase{
   44.11      private static Fn.Presenter loader;
    45.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Wed Mar 12 20:26:58 2014 +0100
    45.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Fri Jul 25 10:45:12 2014 +0200
    45.3 @@ -48,7 +48,7 @@
    45.4  
    45.5  /**
    45.6   *
    45.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    45.8 + * @author Jaroslav Tulach
    45.9   */
   45.10  @JavaScriptResource("jsmethods.js")
   45.11  public class JsMethods {
    46.1 --- a/context/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    46.2 +++ b/context/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    46.3 @@ -4,11 +4,11 @@
    46.4    <parent>
    46.5      <groupId>org.netbeans.html</groupId>
    46.6      <artifactId>pom</artifactId>
    46.7 -    <version>0.8-SNAPSHOT</version>
    46.8 +    <version>1.0-SNAPSHOT</version>
    46.9    </parent>
   46.10    <groupId>org.netbeans.html</groupId>
   46.11    <artifactId>net.java.html</artifactId>
   46.12 -  <version>0.8-SNAPSHOT</version>
   46.13 +  <version>1.0-SNAPSHOT</version>
   46.14    <packaging>bundle</packaging>
   46.15    <name>HTML Context</name>
   46.16    <url>http://maven.apache.org</url>
    47.1 --- a/context/src/main/java/net/java/html/BrwsrCtx.java	Wed Mar 12 20:26:58 2014 +0100
    47.2 +++ b/context/src/main/java/net/java/html/BrwsrCtx.java	Fri Jul 25 10:45:12 2014 +0200
    47.3 @@ -56,7 +56,7 @@
    47.4   * <a href="http://knockoutjs.com">knockout.js</a> and different one
    47.5   * for <a href="http://angularjs.org">angular</a>.
    47.6   *
    47.7 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    47.8 + * @author Jaroslav Tulach
    47.9   */
   47.10  public final class BrwsrCtx implements Executor {
   47.11      private static final Logger LOG = Logger.getLogger(BrwsrCtx.class.getName());
   47.12 @@ -117,6 +117,38 @@
   47.13       * policy, it may execute the runnable later (in such case this method
   47.14       * returns immediately). If the call to this method is done on the right
   47.15       * thread, the runnable should be executed synchronously.
   47.16 +     * <h5>Example Using a Timer</h5>
   47.17 +<pre>
   47.18 +<b>public final class</b> Periodicaly <b>extends</b> {@link java.util.TimerTask} {
   47.19 +    <b>private final</b> {@link BrwsrCtx} ctx;
   47.20 +
   47.21 +    <b>private</b> Periodicaly(BrwsrCtx ctx) {
   47.22 +        // remember the browser context and use it later
   47.23 +        this.ctx = ctx;
   47.24 +    }
   47.25 +    
   47.26 +    <b>public void</b> run() {
   47.27 +        // arrives on wrong thread, needs to be re-scheduled
   47.28 +        ctx.{@link #execute(java.lang.Runnable) execute}(new Runnable() {
   47.29 +            <b>public void</b> run() {
   47.30 +                // code that needs to run in a browser environment
   47.31 +            }
   47.32 +        });
   47.33 +    }
   47.34 +
   47.35 +    // called when your page is ready
   47.36 +    <b>public static void</b> onPageLoad(String... args) <b>throws</b> Exception {
   47.37 +        // the context at the time of page initialization
   47.38 +        BrwsrCtx initialCtx = BrwsrCtx.findDefault(getClass());
   47.39 +        // the task that is associated with context 
   47.40 +        Periodicaly task = new Periodicaly(initialCtx);
   47.41 +        // creates a timer
   47.42 +        {@link java.util.Timer} t = new {@link java.util.Timer}("Move the box");
   47.43 +        // run the task ever 100ms
   47.44 +        t.{@link java.util.Timer#scheduleAtFixedRate(java.util.TimerTask, long, long) scheduleAtFixedRate}(task, 0, 100);
   47.45 +    }
   47.46 +}
   47.47 +</pre>    
   47.48       * 
   47.49       * @param exec the code to execute
   47.50       * @since 0.7.6
    48.1 --- a/context/src/main/java/org/apidesign/html/context/spi/Contexts.java	Wed Mar 12 20:26:58 2014 +0100
    48.2 +++ b/context/src/main/java/org/apidesign/html/context/spi/Contexts.java	Fri Jul 25 10:45:12 2014 +0200
    48.3 @@ -51,7 +51,7 @@
    48.4   * and then assign technologies with {@link Builder#register(java.lang.Class, java.lang.Object, int)}
    48.5   * method.
    48.6   *
    48.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    48.8 + * @author Jaroslav Tulach
    48.9   */
   48.10  public final class Contexts {
   48.11      private Contexts() {
   48.12 @@ -124,7 +124,7 @@
   48.13       * {@link java.util.ServiceProvider} can find them, when their JARs are included
   48.14       * on the classpath of the running application.
   48.15       *
   48.16 -     * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
   48.17 +     * @author Jaroslav Tulach
   48.18       */
   48.19      public static interface Provider {
   48.20  
   48.21 @@ -149,7 +149,7 @@
   48.22       * designing their application with existing technologies should rather
   48.23       * point their attention to {@link BrwsrCtx} and co.
   48.24       *
   48.25 -     * @author Jaroslav Tulach <jtulach@netbeans.org>
   48.26 +     * @author Jaroslav Tulach
   48.27       */
   48.28      public static final class Builder {
   48.29          private final CtxImpl impl = new CtxImpl();
    49.1 --- a/context/src/main/java/org/netbeans/html/context/impl/CtxImpl.java	Wed Mar 12 20:26:58 2014 +0100
    49.2 +++ b/context/src/main/java/org/netbeans/html/context/impl/CtxImpl.java	Fri Jul 25 10:45:12 2014 +0200
    49.3 @@ -46,12 +46,11 @@
    49.4  import java.util.Collections;
    49.5  import java.util.List;
    49.6  import net.java.html.BrwsrCtx;
    49.7 -import org.apidesign.html.context.spi.Contexts;
    49.8  
    49.9  /** Implementation detail. Holds list of technologies for particular
   49.10   * {@link BrwsrCtx}.
   49.11   *
   49.12 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
   49.13 + * @author Jaroslav Tulach
   49.14   */
   49.15  public final class CtxImpl {
   49.16      private final List<Bind<?>> techs;
    50.1 --- a/equinox-agentclass-hook/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    50.2 +++ b/equinox-agentclass-hook/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    50.3 @@ -4,7 +4,7 @@
    50.4      <parent>
    50.5          <groupId>org.netbeans.html</groupId>
    50.6          <artifactId>pom</artifactId>
    50.7 -        <version>0.8-SNAPSHOT</version>
    50.8 +        <version>1.0-SNAPSHOT</version>
    50.9      </parent>
   50.10      <name>AgentClass Hook for Equinox</name>
   50.11      <artifactId>equinox-agentclass-hook</artifactId>
    51.1 --- a/geo/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    51.2 +++ b/geo/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    51.3 @@ -4,11 +4,11 @@
    51.4    <parent>
    51.5      <groupId>org.netbeans.html</groupId>
    51.6      <artifactId>pom</artifactId>
    51.7 -    <version>0.8-SNAPSHOT</version>
    51.8 +    <version>1.0-SNAPSHOT</version>
    51.9    </parent>
   51.10    <groupId>org.netbeans.html</groupId>
   51.11    <artifactId>net.java.html.geo</artifactId>
   51.12 -  <version>0.8-SNAPSHOT</version>
   51.13 +  <version>1.0-SNAPSHOT</version>
   51.14    <packaging>bundle</packaging>
   51.15    <name>Geolocation API</name>
   51.16    <url>http://maven.apache.org</url>
   51.17 @@ -37,6 +37,7 @@
   51.18        <groupId>org.netbeans.api</groupId>
   51.19        <artifactId>org-openide-util-lookup</artifactId>
   51.20        <type>jar</type>
   51.21 +      <scope>provided</scope>
   51.22      </dependency>
   51.23      <dependency>
   51.24        <groupId>org.netbeans.html</groupId>
    52.1 --- a/geo/src/main/java/net/java/html/geo/OnLocation.java	Wed Mar 12 20:26:58 2014 +0100
    52.2 +++ b/geo/src/main/java/net/java/html/geo/OnLocation.java	Fri Jul 25 10:45:12 2014 +0200
    52.3 @@ -64,7 +64,7 @@
    52.4   * In case something goes wrong a method in the same class named {@link #onError()}
    52.5   * can be specified (should take one {@link Exception} parameter). 
    52.6   * <p>
    52.7 - * The overall behavior of the system mimics <a href="http://www.w3.org/TR/2012/PR­geolocation­API­20120510/">
    52.8 + * The overall behavior of the system mimics <a href="http://www.w3.org/TR/geolocation-API/">
    52.9   * W3C's Geolocation API</a>.
   52.10   *
   52.11   * @author Jaroslav Tulach <jtulach@netbeans.org>
    53.1 --- a/geo/src/main/java/net/java/html/geo/Position.java	Wed Mar 12 20:26:58 2014 +0100
    53.2 +++ b/geo/src/main/java/net/java/html/geo/Position.java	Fri Jul 25 10:45:12 2014 +0200
    53.3 @@ -49,7 +49,7 @@
    53.4  /** Class that represents a geolocation position provided as a callback
    53.5   * to {@link Handle#onLocation(net.java.html.geo.Position)} method. The
    53.6   * class getters mimic closely the structure of the position object as
    53.7 - * specified by <a href="http://www.w3.org/TR/2012/PR­geolocation­API­20120510/">
    53.8 + * specified by <a href="http://www.w3.org/TR/geolocation-API/">
    53.9   * W3C's Geolocation API</a>.
   53.10   *
   53.11   * @author Jaroslav Tulach <jtulach@netbeans.org>
   53.12 @@ -80,7 +80,7 @@
   53.13      }
   53.14  
   53.15      /** Actual location of a {@link Position}. 
   53.16 -     *  Mimics closely <a href="http://www.w3.org/TR/2012/PR­geolocation­API­20120510/">
   53.17 +     *  Mimics closely <a href="http://www.w3.org/TR/geolocation-API/">
   53.18       * W3C's Geolocation API</a>.
   53.19       */
   53.20      public static final class Coordinates {
   53.21 @@ -90,30 +90,56 @@
   53.22              this.data = data;
   53.23          }
   53.24          
   53.25 +        /**
   53.26 +         * @return geographic coordinate specified in decimal degrees.
   53.27 +         */
   53.28          public double getLatitude() {
   53.29              return ((Number)JsG.get(data, "latitude")).doubleValue(); // NOI18N
   53.30          }
   53.31  
   53.32 +        /**
   53.33 +         * @return geographic coordinate specified in decimal degrees.
   53.34 +         */
   53.35          public double getLongitude() {
   53.36              return ((Number)JsG.get(data, "longitude")).doubleValue(); // NOI18N
   53.37 -        }
   53.38 +        } 
   53.39  
   53.40 +        /**
   53.41 +         * The accuracy attribute denotes the accuracy level of the latitude 
   53.42 +         * and longitude coordinates. It is specified in meters. 
   53.43 +         * The value of the accuracy attribute must be a non-negative number.
   53.44 +         * 
   53.45 +         * @return accuracy in meters
   53.46 +         */
   53.47          public double getAccuracy() {
   53.48              return ((Number)JsG.get(data, "accuracy")).doubleValue(); // NOI18N
   53.49          }
   53.50          
   53.51 +        /** Denotes the height of the position, specified in meters above the ellipsoid. 
   53.52 +         * If the implementation cannot provide altitude information, 
   53.53 +         * the value of this attribute must be null.
   53.54 +         * @return value in meters, may return null, if the information is not available 
   53.55 +         */
   53.56          public Double getAltitude() {
   53.57              return (Double)JsG.get(data, "altitude"); // NOI18N
   53.58          }
   53.59          
   53.60 +        /**  The altitude accuracy is specified in meters. 
   53.61 +         * If the implementation cannot provide altitude information, 
   53.62 +         * the value of this attribute must be null. Otherwise, the value 
   53.63 +         * must be a non-negative real number.
   53.64 +         * @return value in meters; may return null, if the information is not available 
   53.65 +         */
   53.66          public Double getAltitudeAccuracy() {
   53.67              return (Double)JsG.get(data, "altitudeAccuracy"); // NOI18N
   53.68          }
   53.69          
   53.70 +        /** @return may return null, if the information is not available */
   53.71          public Double getHeading() {
   53.72              return (Double)JsG.get(data, "heading"); // NOI18N
   53.73          }
   53.74          
   53.75 +        /** @return may return null, if the information is not available */
   53.76          public Double getSpeed() {
   53.77              return (Double)JsG.get(data, "speed"); // NOI18N
   53.78          }
   53.79 @@ -244,7 +270,7 @@
   53.80              }
   53.81  
   53.82              @Override
   53.83 -            public void onError(Object error) {
   53.84 +            public void onError(final String message, int code) {
   53.85                  if (handle != this) {
   53.86                      return;
   53.87                  }
   53.88 @@ -252,7 +278,13 @@
   53.89                      stop();
   53.90                  }
   53.91                  try {
   53.92 -                    Handle.this.onError(new Exception());
   53.93 +                    final Exception err = new Exception(message + " errno: " + code) {
   53.94 +                        @Override
   53.95 +                        public String getLocalizedMessage() {
   53.96 +                            return message;
   53.97 +                        }
   53.98 +                    };
   53.99 +                    Handle.this.onError(err);
  53.100                  } catch (Throwable ex) {
  53.101                      LOG.log(Level.SEVERE, null, ex);
  53.102                  }
    54.1 --- a/geo/src/main/java/org/netbeans/html/geo/impl/JsG.java	Wed Mar 12 20:26:58 2014 +0100
    54.2 +++ b/geo/src/main/java/org/netbeans/html/geo/impl/JsG.java	Fri Jul 25 10:45:12 2014 +0200
    54.3 @@ -57,7 +57,7 @@
    54.4      }
    54.5      
    54.6      public abstract void onLocation(Object position);
    54.7 -    public abstract void onError(Object error);
    54.8 +    public abstract void onError(String message, int code);
    54.9      
   54.10      @JavaScriptBody(args = {}, body = "return !!navigator.geolocation;")
   54.11      public static boolean hasGeolocation() {
   54.12 @@ -73,17 +73,17 @@
   54.13          "  self.@org.netbeans.html.geo.impl.JsG::onLocation(Ljava/lang/Object;)(position);\n" +
   54.14          "};\n" +
   54.15          "var fail = function (error) {\n" +
   54.16 -        "  self.@org.netbeans.html.geo.impl.JsG::onError(Ljava/lang/Object;)(error);\n" +
   54.17 +        "  self.@org.netbeans.html.geo.impl.JsG::onError(Ljava/lang/String;I)(error.message, error.code);\n" +
   54.18          "};\n" +
   54.19          "var options = {};\n" +
   54.20          "options.enableHighAccuracy = enableHighAccuracy;\n" +
   54.21          "if (timeout >= 0) options.timeout = timeout;\n" +
   54.22          "if (maximumAge >= 0) options.maximumAge = maximumAge;\n" +
   54.23          "if (onlyOnce) {\n" +
   54.24 -        "  navigator.geolocation.getCurrentPosition(ok, fail);\n" +
   54.25 +        "  navigator.geolocation.getCurrentPosition(ok, fail, options);\n" +
   54.26          "  return 0;\n" +
   54.27          "} else {\n" +
   54.28 -        "  return navigator.geolocation.watchPosition(ok, fail);\n" +
   54.29 +        "  return navigator.geolocation.watchPosition(ok, fail, options);\n" +
   54.30          "}\n"
   54.31      )
   54.32      protected long start(
    55.1 --- a/html4j-maven-plugin/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    55.2 +++ b/html4j-maven-plugin/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    55.3 @@ -4,12 +4,12 @@
    55.4    <parent>
    55.5      <groupId>org.netbeans.html</groupId>
    55.6      <artifactId>pom</artifactId>
    55.7 -    <version>0.8-SNAPSHOT</version>
    55.8 +    <version>1.0-SNAPSHOT</version>
    55.9    </parent>
   55.10    <packaging>maven-plugin</packaging>
   55.11    <groupId>org.netbeans.html</groupId>
   55.12    <artifactId>html4j-maven-plugin</artifactId>
   55.13 -  <version>0.8-SNAPSHOT</version>
   55.14 +  <version>1.0-SNAPSHOT</version>
   55.15    <name>Html for Java Maven Plugin</name>
   55.16    <url>http://maven.apache.org</url>
   55.17    <description>Maven plugin to post process the classes with @JavaScriptBody annotations</description>
    56.1 --- a/html4j-maven-plugin/src/main/java/org/netbeans/html/mojo/ProcessJsAnnotationsMojo.java	Wed Mar 12 20:26:58 2014 +0100
    56.2 +++ b/html4j-maven-plugin/src/main/java/org/netbeans/html/mojo/ProcessJsAnnotationsMojo.java	Fri Jul 25 10:45:12 2014 +0200
    56.3 @@ -56,6 +56,7 @@
    56.4  import java.net.URL;
    56.5  import java.net.URLClassLoader;
    56.6  import java.util.ArrayList;
    56.7 +import java.util.LinkedList;
    56.8  import java.util.List;
    56.9  import org.apache.maven.artifact.Artifact;
   56.10  import org.apache.maven.plugin.AbstractMojo;
   56.11 @@ -86,7 +87,7 @@
   56.12  
   56.13      @Override
   56.14      public void execute() throws MojoExecutionException, MojoFailureException {
   56.15 -        List<URL> arr = new ArrayList<URL>();
   56.16 +        LinkedList<URL> arr = new LinkedList<URL>();
   56.17          boolean foundAsm = false;
   56.18          for (Artifact a : prj.getArtifacts()) {
   56.19              final File f = a.getFile();
   56.20 @@ -103,7 +104,7 @@
   56.21          }
   56.22          if (!foundAsm) {
   56.23              URL loc = ClassReader.class.getProtectionDomain().getCodeSource().getLocation();
   56.24 -            arr.add(loc);
   56.25 +            arr.addFirst(loc);
   56.26          }
   56.27          URLClassLoader l = new URLClassLoader(arr.toArray(new URL[arr.size()]));
   56.28          try {
    57.1 --- a/json-tck/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    57.2 +++ b/json-tck/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    57.3 @@ -4,11 +4,11 @@
    57.4    <parent>
    57.5      <groupId>org.netbeans.html</groupId>
    57.6      <artifactId>pom</artifactId>
    57.7 -    <version>0.8-SNAPSHOT</version>
    57.8 +    <version>1.0-SNAPSHOT</version>
    57.9    </parent>
   57.10    <groupId>org.netbeans.html</groupId>
   57.11    <artifactId>net.java.html.json.tck</artifactId>
   57.12 -  <version>0.8-SNAPSHOT</version>
   57.13 +  <version>1.0-SNAPSHOT</version>
   57.14    <packaging>bundle</packaging>
   57.15    <name>HTML for Java TCK</name>
   57.16    <url>http://maven.apache.org</url>
   57.17 @@ -41,7 +41,7 @@
   57.18      <dependency>
   57.19        <groupId>org.netbeans.html</groupId>
   57.20        <artifactId>net.java.html.json</artifactId>
   57.21 -      <version>0.8-SNAPSHOT</version>
   57.22 +      <version>1.0-SNAPSHOT</version>
   57.23        <type>jar</type>
   57.24      </dependency>
   57.25      <dependency>
    58.1 --- a/json-tck/src/main/java/net/java/html/js/tests/Bodies.java	Wed Mar 12 20:26:58 2014 +0100
    58.2 +++ b/json-tck/src/main/java/net/java/html/js/tests/Bodies.java	Fri Jul 25 10:45:12 2014 +0200
    58.3 @@ -125,4 +125,24 @@
    58.4      enum E {
    58.5          A, B;
    58.6      }
    58.7 +    
    58.8 +    @JavaScriptBody(args = { "arr" }, body = 
    58.9 +        "var sum = 0;\n" +
   58.10 +        "for (var i = 0; i < arr.length; i++) {\n" +
   58.11 +        "  sum += arr[i];\n" +
   58.12 +        "}\n" +
   58.13 +        "return sum;\n"
   58.14 +    )
   58.15 +    public static native double sumVector(double[] arr);
   58.16 +    
   58.17 +    @JavaScriptBody(args = { "arr" }, body = 
   58.18 +        "var sum = 0;\n" +
   58.19 +        "for (var i = 0; i < arr.length; i++) {\n" +
   58.20 +        "  for (var j = 0; j < arr[i].length; j++) {\n" +
   58.21 +        "    sum += arr[i][j];\n" +
   58.22 +        "  }\n" +
   58.23 +        "}\n" +
   58.24 +        "return sum;\n"
   58.25 +    )
   58.26 +    public static native double sumMatrix(double[][] arr);
   58.27  }
    59.1 --- a/json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java	Wed Mar 12 20:26:58 2014 +0100
    59.2 +++ b/json-tck/src/main/java/net/java/html/js/tests/JavaScriptBodyTest.java	Fri Jul 25 10:45:12 2014 +0200
    59.3 @@ -272,6 +272,18 @@
    59.4          assert "Hello".equals(arr[0]) : "Hello expected: " + arr[0];
    59.5          assert "World!".equals(arr[1]) : "World! expected: " + arr[1];
    59.6      }
    59.7 +    
    59.8 +    @KOTest public void sumVector() {
    59.9 +        double[] arr = { 1.0, 2.0, 3.0 };
   59.10 +        double res = Bodies.sumVector(arr);
   59.11 +        assert 6.0 == res : "Expecting six: " + res;
   59.12 +    }
   59.13 +
   59.14 +    @KOTest public void sumMatrix() {
   59.15 +        double[][] arr = { { 1.0 }, { 1.0, 1.0 }, { 1.0, 1.0, 1.0 } };
   59.16 +        double res = Bodies.sumMatrix(arr);
   59.17 +        assert 6.0 == res : "Expecting six: " + res;
   59.18 +    }
   59.19  
   59.20      @KOTest public void truth() {
   59.21          assert Bodies.truth() : "True is true";
    60.1 --- a/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java	Wed Mar 12 20:26:58 2014 +0100
    60.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java	Fri Jul 25 10:45:12 2014 +0200
    60.3 @@ -43,9 +43,12 @@
    60.4  package net.java.html.json.tests;
    60.5  
    60.6  import java.io.ByteArrayInputStream;
    60.7 +import java.io.EOFException;
    60.8  import java.io.InputStream;
    60.9  import java.io.UnsupportedEncodingException;
   60.10 +import java.util.ArrayList;
   60.11  import java.util.HashMap;
   60.12 +import java.util.List;
   60.13  import java.util.Map;
   60.14  import net.java.html.BrwsrCtx;
   60.15  import net.java.html.json.Models;
   60.16 @@ -56,18 +59,33 @@
   60.17   * @author Jaroslav Tulach <jtulach@netbeans.org>
   60.18   */
   60.19  public final class ConvertTypesTest {
   60.20 -    private static InputStream createIS(boolean includeSex, boolean includeAddress) 
   60.21 +    private static InputStream createIS(boolean includeSex, boolean includeAddress, int array) 
   60.22      throws UnsupportedEncodingException {
   60.23          StringBuilder sb = new StringBuilder();
   60.24 -        sb.append("{ \"firstName\" : \"son\",\n");
   60.25 -        sb.append("  \"lastName\" : \"dj\" \n");
   60.26 -        if (includeSex) {
   60.27 -            sb.append(",  \"sex\" : \"MALE\" \n");
   60.28 +        int repeat;
   60.29 +        if (array != -1) {
   60.30 +            sb.append("[\n");
   60.31 +            repeat = array;
   60.32 +        } else {
   60.33 +            repeat = 1;
   60.34          }
   60.35 -        if (includeAddress) {
   60.36 -            sb.append(",  \"address\" : { \"street\" : \"Schnirchova\" } \n");
   60.37 +        for (int i = 0; i < repeat; i++) {
   60.38 +            sb.append("{ \"firstName\" : \"son\",\n");
   60.39 +            sb.append("  \"lastName\" : \"dj\" \n");
   60.40 +            if (includeSex) {
   60.41 +                sb.append(",  \"sex\" : \"MALE\" \n");
   60.42 +            }
   60.43 +            if (includeAddress) {
   60.44 +                sb.append(",  \"address\" : { \"street\" : \"Schnirchova\" } \n");
   60.45 +            }
   60.46 +            sb.append("}\n");
   60.47 +            if (i < array - 1) {
   60.48 +                sb.append(",");
   60.49 +            }
   60.50          }
   60.51 -        sb.append("}\n");
   60.52 +        if (array != -1) {
   60.53 +            sb.append(']');
   60.54 +        }
   60.55          return new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
   60.56      }
   60.57      private static Object createJSON(boolean includeSex) 
   60.58 @@ -95,7 +113,7 @@
   60.59      @KOTest
   60.60      public void parseConvertToPeople() throws Exception {
   60.61          final BrwsrCtx c = newContext();
   60.62 -        final InputStream o = createIS(true, false);
   60.63 +        final InputStream o = createIS(true, false, -1);
   60.64          
   60.65          Person p = Models.parse(c, Person.class, o);
   60.66          
   60.67 @@ -107,7 +125,7 @@
   60.68      @KOTest
   60.69      public void parseConvertToPeopleWithAddress() throws Exception {
   60.70          final BrwsrCtx c = newContext();
   60.71 -        final InputStream o = createIS(true, true);
   60.72 +        final InputStream o = createIS(true, true, -1);
   60.73          
   60.74          Person p = Models.parse(c, Person.class, o);
   60.75          
   60.76 @@ -119,6 +137,59 @@
   60.77      }
   60.78  
   60.79      @KOTest
   60.80 +    public void parseConvertToPeopleWithAddressIntoAnArray() throws Exception {
   60.81 +        final BrwsrCtx c = newContext();
   60.82 +        final InputStream o = createIS(true, true, -1);
   60.83 +        
   60.84 +        List<Person> arr = new ArrayList<Person>();
   60.85 +        Models.parse(c, Person.class, o, arr);
   60.86 +        
   60.87 +        assert arr.size() == 1 : "There is one item in " + arr;
   60.88 +        
   60.89 +        Person p = arr.get(0);
   60.90 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
   60.91 +        assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName();
   60.92 +        assert Sex.MALE.equals(p.getSex()) : "Sex: " + p.getSex();
   60.93 +        assert p.getAddress() != null : "Some address provided";
   60.94 +        assert p.getAddress().getStreet().equals("Schnirchova") : "Is Schnirchova: " + p.getAddress();
   60.95 +    }
   60.96 +    
   60.97 +    @KOTest 
   60.98 +    public void parseNullValue() throws Exception {
   60.99 +        final BrwsrCtx c = newContext();
  60.100 +        
  60.101 +        StringBuilder sb = new StringBuilder();
  60.102 +        sb.append("{ \"firstName\" : \"son\",\n");
  60.103 +        sb.append("  \"lastName\" : null } \n");  
  60.104 +        
  60.105 +        final ByteArrayInputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
  60.106 +        Person p = Models.parse(c, Person.class, is);
  60.107 +
  60.108 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.109 +        assert null == p.getLastName() : "Last name: " + p.getLastName();
  60.110 +    }
  60.111 +
  60.112 +    @KOTest 
  60.113 +    public void parseNullArrayValue() throws Exception {
  60.114 +        final BrwsrCtx c = newContext();
  60.115 +        
  60.116 +        StringBuilder sb = new StringBuilder();
  60.117 +        sb.append("[ null, { \"firstName\" : \"son\",\n");
  60.118 +        sb.append("  \"lastName\" : null } ]\n");  
  60.119 +        
  60.120 +        final ByteArrayInputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
  60.121 +        List<Person> arr = new ArrayList<Person>();
  60.122 +        Models.parse(c, Person.class, is, arr);
  60.123 +        
  60.124 +        assert arr.size() == 2 : "There are two items in " + arr;
  60.125 +        assert arr.get(0) == null : "first is null " + arr;
  60.126 +        
  60.127 +        Person p = arr.get(1);
  60.128 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.129 +        assert null == p.getLastName() : "Last name: " + p.getLastName();
  60.130 +    }
  60.131 +
  60.132 +    @KOTest
  60.133      public void testConvertToPeopleWithoutSex() throws Exception {
  60.134          final Object o = createJSON(false);
  60.135          
  60.136 @@ -132,7 +203,7 @@
  60.137      @KOTest
  60.138      public void parseConvertToPeopleWithoutSex() throws Exception {
  60.139          final BrwsrCtx c = newContext();
  60.140 -        final InputStream o = createIS(false, false);
  60.141 +        final InputStream o = createIS(false, false, -1);
  60.142          Person p = Models.parse(c, Person.class, o);
  60.143          
  60.144          assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.145 @@ -140,6 +211,73 @@
  60.146          assert p.getSex() == null : "No sex: " + p.getSex();
  60.147      }
  60.148      
  60.149 +    @KOTest
  60.150 +    public void parseConvertToPeopleWithAddressOnArray() throws Exception {
  60.151 +        final BrwsrCtx c = newContext();
  60.152 +        final InputStream o = createIS(true, true, 1);
  60.153 +        
  60.154 +        Person p = Models.parse(c, Person.class, o);
  60.155 +        
  60.156 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.157 +        assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName();
  60.158 +        assert Sex.MALE.equals(p.getSex()) : "Sex: " + p.getSex();
  60.159 +        assert p.getAddress() != null : "Some address provided";
  60.160 +        assert p.getAddress().getStreet().equals("Schnirchova") : "Is Schnirchova: " + p.getAddress();
  60.161 +    }
  60.162 +
  60.163 +    @KOTest
  60.164 +    public void parseConvertToPeopleWithoutSexOnArray() throws Exception {
  60.165 +        final BrwsrCtx c = newContext();
  60.166 +        final InputStream o = createIS(false, false, 1);
  60.167 +        Person p = Models.parse(c, Person.class, o);
  60.168 +        
  60.169 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.170 +        assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName();
  60.171 +        assert p.getSex() == null : "No sex: " + p.getSex();
  60.172 +    }
  60.173 +
  60.174 +    @KOTest
  60.175 +    public void parseFirstElementFromAbiggerArray() throws Exception {
  60.176 +        final BrwsrCtx c = newContext();
  60.177 +        final InputStream o = createIS(false, false, 5);
  60.178 +        Person p = Models.parse(c, Person.class, o);
  60.179 +        
  60.180 +        assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.181 +        assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName();
  60.182 +        assert p.getSex() == null : "No sex: " + p.getSex();
  60.183 +    }
  60.184 +
  60.185 +    @KOTest
  60.186 +    public void parseAllElementFromAbiggerArray() throws Exception {
  60.187 +        final BrwsrCtx c = newContext();
  60.188 +        final InputStream o = createIS(false, false, 5);
  60.189 +        
  60.190 +        List<Person> res = new ArrayList<Person>();
  60.191 +        Models.parse(c, Person.class, o, res);
  60.192 +        
  60.193 +        assert res.size() == 5 : "Five elements found" + res;
  60.194 +        
  60.195 +        for (Person p : res) {
  60.196 +            assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName();
  60.197 +            assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName();
  60.198 +            assert p.getSex() == null : "No sex: " + p.getSex();
  60.199 +        }
  60.200 +    }
  60.201 +    
  60.202 +    @KOTest
  60.203 +    public void parseOnEmptyArray() throws Exception {
  60.204 +        final BrwsrCtx c = newContext();
  60.205 +        final InputStream o = createIS(false, false, 0);
  60.206 +        
  60.207 +        try {
  60.208 +            Models.parse(c, Person.class, o);
  60.209 +        } catch (EOFException ex) {
  60.210 +            // OK
  60.211 +            return;
  60.212 +        }
  60.213 +        throw new IllegalStateException("Should throw end of file exception, as the array is empty");
  60.214 +    }
  60.215 +    
  60.216      private static BrwsrCtx newContext() {
  60.217          return Utils.newContext(ConvertTypesTest.class);
  60.218      }
    61.1 --- a/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java	Wed Mar 12 20:26:58 2014 +0100
    61.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java	Fri Jul 25 10:45:12 2014 +0200
    61.3 @@ -155,13 +155,13 @@
    61.4      private static BrwsrCtx onCallback;
    61.5      
    61.6      @OnReceive(url="{url}")
    61.7 -    static void fetch(Person p, JSONik model) {
    61.8 +    static void fetch(JSONik model, Person p) {
    61.9          model.setFetched(p);
   61.10          onCallback = BrwsrCtx.findDefault(model.getClass());
   61.11      }
   61.12  
   61.13      @OnReceive(url="{url}", onError = "setMessage")
   61.14 -    static void fetchArray(Person[] p, JSONik model) {
   61.15 +    static void fetchArray(JSONik model, Person[] p) {
   61.16          model.setFetchedCount(p.length);
   61.17          model.setFetched(p[0]);
   61.18          onCallback = BrwsrCtx.findDefault(model.getClass());
   61.19 @@ -173,7 +173,7 @@
   61.20      }
   61.21      
   61.22      @OnReceive(url="{url}")
   61.23 -    static void fetchPeople(People p, JSONik model) {
   61.24 +    static void fetchPeople(JSONik model, People p) {
   61.25          final int size = p.getInfo().size();
   61.26          if (size > 0) {
   61.27              model.setFetched(p.getInfo().get(0));
   61.28 @@ -182,7 +182,7 @@
   61.29      }
   61.30  
   61.31      @OnReceive(url="{url}")
   61.32 -    static void fetchPeopleAge(People p, JSONik model) {
   61.33 +    static void fetchPeopleAge(JSONik model, People p) {
   61.34          int sum = 0;
   61.35          for (int a : p.getAge()) {
   61.36              sum += a;
   61.37 @@ -215,7 +215,7 @@
   61.38      }
   61.39      
   61.40      @OnReceive(url="{url}?callme={me}", jsonp = "me")
   61.41 -    static void fetchViaJSONP(Person p, JSONik model) {
   61.42 +    static void fetchViaJSONP(JSONik model, Person p) {
   61.43          model.setFetched(p);
   61.44      }
   61.45      
   61.46 @@ -396,7 +396,7 @@
   61.47      }
   61.48      
   61.49      @OnReceive(url="{url}")
   61.50 -    static void fetchPeopleSex(People p, JSONik model) {
   61.51 +    static void fetchPeopleSex(JSONik model, People p) {
   61.52          model.setFetchedCount(1);
   61.53          model.getFetchedSex().addAll(p.getSex());
   61.54      }
    62.1 --- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Wed Mar 12 20:26:58 2014 +0100
    62.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Fri Jul 25 10:45:12 2014 +0200
    62.3 @@ -43,6 +43,8 @@
    62.4  package net.java.html.json.tests;
    62.5  
    62.6  import java.util.List;
    62.7 +import java.util.Timer;
    62.8 +import java.util.TimerTask;
    62.9  import net.java.html.BrwsrCtx;
   62.10  import net.java.html.json.ComputedProperty;
   62.11  import net.java.html.json.Function;
   62.12 @@ -64,6 +66,7 @@
   62.13      @Property(name="latitude", type=double.class)
   62.14  }) 
   62.15  public final class KnockoutTest {
   62.16 +    private KnockoutModel js;
   62.17      
   62.18      @KOTest public void modifyValueAssertChangeInModelOnDouble() throws Throwable {
   62.19          Object exp = Utils.exposeHTML(KnockoutTest.class, 
   62.20 @@ -137,15 +140,48 @@
   62.21          }
   62.22      }
   62.23      
   62.24 +    @KOTest public void modifyValueAssertAsyncChangeInModel() throws Exception {
   62.25 +        if (js == null) {
   62.26 +            Utils.exposeHTML(KnockoutTest.class, 
   62.27 +                "<h1 data-bind=\"text: helloMessage\">Loading Bck2Brwsr's Hello World...</h1>\n" +
   62.28 +                "Your name: <input id='input' data-bind=\"value: name\"></input>\n" +
   62.29 +                "<button id=\"hello\">Say Hello!</button>\n"
   62.30 +            );
   62.31 +            
   62.32 +            js = Models.bind(new KnockoutModel(), newContext());
   62.33 +            js.setName("Kukuc");
   62.34 +            js.applyBindings();
   62.35 +            
   62.36 +            String v = getSetInput(null);
   62.37 +            assert "Kukuc".equals(v) : "Value is really kukuc: " + v;
   62.38 +            
   62.39 +            Timer t = new Timer("Set to Jardo");
   62.40 +            t.schedule(new TimerTask() {
   62.41 +                @Override
   62.42 +                public void run() {
   62.43 +                    js.setName("Jardo");
   62.44 +                }
   62.45 +            }, 1);
   62.46 +        }
   62.47 +        
   62.48 +        String v = getSetInput(null);
   62.49 +        if (!"Jardo".equals(v)) {
   62.50 +            throw new InterruptedException();
   62.51 +        }
   62.52 +        
   62.53 +        Utils.exposeHTML(KnockoutTest.class, "");
   62.54 +    }
   62.55 +    
   62.56      private static String getSetInput(String value) throws Exception {
   62.57          String s = "var value = arguments[0];\n"
   62.58          + "var n = window.document.getElementById('input'); \n "
   62.59          + "if (value != null) n['value'] = value; \n "
   62.60          + "return n['value'];";
   62.61 -        return (String)Utils.executeScript(
   62.62 +        Object ret = Utils.executeScript(
   62.63              KnockoutTest.class,
   62.64              s, value
   62.65          );
   62.66 +        return ret == null ? null : ret.toString();
   62.67      }
   62.68      
   62.69      public static void triggerEvent(String id, String ev) throws Exception {
   62.70 @@ -167,12 +203,12 @@
   62.71              m.getResults().add("Ahoj");
   62.72              m.applyBindings();
   62.73  
   62.74 -            int cnt = countChildren("ul");
   62.75 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
   62.76              assert cnt == 1 : "One child, but was " + cnt;
   62.77  
   62.78              m.getResults().add("Hi");
   62.79  
   62.80 -            cnt = countChildren("ul");
   62.81 +            cnt = Utils.countChildren(KnockoutTest.class, "ul");
   62.82              assert cnt == 2 : "Two children now, but was " + cnt;
   62.83  
   62.84              triggerChildClick("ul", 1);
   62.85 @@ -184,6 +220,45 @@
   62.86          }
   62.87      }
   62.88      
   62.89 +    @KOTest public void displayContentOfAsyncArray() throws Exception {
   62.90 +        if (js == null) {
   62.91 +            Utils.exposeHTML(KnockoutTest.class, 
   62.92 +                "<ul id='ul' data-bind='foreach: results'>\n"
   62.93 +                + "  <li data-bind='text: $data, click: $root.call'/>\n"
   62.94 +                + "</ul>\n"
   62.95 +            );
   62.96 +            js = Models.bind(new KnockoutModel(), newContext());
   62.97 +            js.getResults().add("Ahoj");
   62.98 +            js.applyBindings();
   62.99 +
  62.100 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.101 +            assert cnt == 1 : "One child, but was " + cnt;
  62.102 +            
  62.103 +            Timer t = new Timer("add to array");
  62.104 +            t.schedule(new TimerTask() {
  62.105 +                @Override
  62.106 +                public void run() {
  62.107 +                    js.getResults().add("Hi");
  62.108 +                }
  62.109 +            }, 1);
  62.110 +        }
  62.111 +
  62.112 +
  62.113 +        int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.114 +        if (cnt != 2) {
  62.115 +            throw new InterruptedException();
  62.116 +        }
  62.117 +
  62.118 +        try {
  62.119 +            triggerChildClick("ul", 1);
  62.120 +
  62.121 +            assert 1 == js.getCallbackCount() : "One callback " + js.getCallbackCount();
  62.122 +            assert "Hi".equals(js.getName()) : "We got callback from 2nd child " + js.getName();
  62.123 +        } finally {
  62.124 +            Utils.exposeHTML(KnockoutTest.class, "");
  62.125 +        }
  62.126 +    }
  62.127 +    
  62.128      @KOTest public void displayContentOfComputedArray() throws Exception {
  62.129          Object exp = Utils.exposeHTML(KnockoutTest.class, 
  62.130              "<ul id='ul' data-bind='foreach: bothNames'>\n"
  62.131 @@ -194,12 +269,22 @@
  62.132              Pair m = Models.bind(new Pair("First", "Last", null), newContext());
  62.133              m.applyBindings();
  62.134  
  62.135 -            int cnt = countChildren("ul");
  62.136 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.137              assert cnt == 2 : "Two children now, but was " + cnt;
  62.138  
  62.139              triggerChildClick("ul", 1);
  62.140  
  62.141              assert "Last".equals(m.getFirstName()) : "We got callback from 2nd child " + m.getFirstName();
  62.142 +            
  62.143 +            m.setLastName("Verylast");
  62.144 +
  62.145 +            cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.146 +            assert cnt == 2 : "Two children now, but was " + cnt;
  62.147 +            
  62.148 +            triggerChildClick("ul", 1);
  62.149 +
  62.150 +            assert "Verylast".equals(m.getFirstName()) : "We got callback from 2nd child " + m.getFirstName();
  62.151 +            
  62.152          } finally {
  62.153              Utils.exposeHTML(KnockoutTest.class, "");
  62.154          }
  62.155 @@ -218,7 +303,7 @@
  62.156              Pair m = Models.bind(new Pair(null, null, new Pair("First", "Last", null)), ctx);
  62.157              m.applyBindings();
  62.158  
  62.159 -            int cnt = countChildren("ul");
  62.160 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.161              assert cnt == 2 : "Two children now, but was " + cnt;
  62.162  
  62.163              triggerChildClick("ul", 1);
  62.164 @@ -243,7 +328,7 @@
  62.165              Pair m = Models.bind(new Pair(null, null, new Pair("First", "Last", null)), newContext());
  62.166              m.applyBindings();
  62.167  
  62.168 -            int cnt = countChildren("ul");
  62.169 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.170              assert cnt == 2 : "Two children now, but was " + cnt;
  62.171  
  62.172              triggerChildClick("ul", 1);
  62.173 @@ -285,12 +370,12 @@
  62.174              m.getResults().add("Ahoj");
  62.175              m.applyBindings();
  62.176  
  62.177 -            int cnt = countChildren("ul");
  62.178 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.179              assert cnt == 1 : "One child, but was " + cnt;
  62.180  
  62.181              m.getResults().add("hello");
  62.182  
  62.183 -            cnt = countChildren("ul");
  62.184 +            cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.185              assert cnt == 2 : "Two children now, but was " + cnt;
  62.186          } finally {
  62.187              Utils.exposeHTML(KnockoutTest.class, "");
  62.188 @@ -313,21 +398,21 @@
  62.189  
  62.190              m.applyBindings();
  62.191  
  62.192 -            int cnt = countChildren("ul");
  62.193 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.194              assert cnt == 1 : "One child, but was " + cnt;
  62.195  
  62.196              final Person second = Models.bind(new Person(), c);
  62.197              second.setFirstName("second");
  62.198              m.getPeople().add(second);
  62.199  
  62.200 -            cnt = countChildren("ul");
  62.201 +            cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.202              assert cnt == 2 : "Two children now, but was " + cnt;
  62.203  
  62.204              triggerChildClick("ul", 1);
  62.205  
  62.206              assert 1 == m.getCallbackCount() : "One callback " + m.getCallbackCount();
  62.207  
  62.208 -            cnt = countChildren("ul");
  62.209 +            cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.210              assert cnt == 1 : "Again one child, but was " + cnt;
  62.211  
  62.212              String txt = childText("ul", 0);
  62.213 @@ -384,7 +469,7 @@
  62.214  
  62.215          m.applyBindings();
  62.216  
  62.217 -        int cnt = countChildren("ul");
  62.218 +        int cnt = Utils.countChildren(KnockoutTest.class, "ul");
  62.219          assert cnt == 1 : "One child, but was " + cnt;
  62.220  
  62.221  
  62.222 @@ -416,42 +501,50 @@
  62.223          return results;
  62.224      }
  62.225      
  62.226 -    private static int countChildren(String id) throws Exception {
  62.227 -        return ((Number)Utils.executeScript(
  62.228 -          KnockoutTest.class,
  62.229 -          "var e = window.document.getElementById(arguments[0]);\n "
  62.230 -        + "if (typeof e === 'undefined') return -2;\n "
  62.231 -        + "return e.children.length;", 
  62.232 -            id
  62.233 -        )).intValue();
  62.234 -    }
  62.235 -
  62.236      private static void triggerClick(String id) throws Exception {
  62.237          String s = "var id = arguments[0];"
  62.238              + "var e = window.document.getElementById(id);\n "
  62.239 +            + "if (e.checked) throw 'It should not be checked yet: ' + e;\n "
  62.240              + "var ev = window.document.createEvent('MouseEvents');\n "
  62.241              + "ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n "
  62.242 -            + "e.dispatchEvent(ev);\n ";
  62.243 +            + "e.dispatchEvent(ev);\n "
  62.244 +            + "if (!e.checked) {\n"
  62.245 +            + "  e.checked = true;\n "
  62.246 +            + "  e.dispatchEvent(ev);\n "
  62.247 +            + "}\n";
  62.248          Utils.executeScript(
  62.249              KnockoutTest.class,
  62.250              s, id);
  62.251      }
  62.252      private static void triggerChildClick(String id, int pos) throws Exception {
  62.253 -        String s = "var id = arguments[0]; var pos = arguments[1];"
  62.254 -            + "var e = window.document.getElementById(id);\n "
  62.255 -            + "var ev = window.document.createEvent('MouseEvents');\n "
  62.256 -            + "ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n "
  62.257 -            + "e.children[pos].dispatchEvent(ev);\n ";
  62.258 +        String s = 
  62.259 +            "var id = arguments[0]; var pos = arguments[1];\n" +
  62.260 +            "var e = window.document.getElementById(id);\n " +
  62.261 +            "var ev = window.document.createEvent('MouseEvents');\n " +
  62.262 +            "ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n " +
  62.263 +            "var list = e.childNodes;\n" +
  62.264 +            "var cnt = -1;\n" + 
  62.265 +            "for (var i = 0; i < list.length; i++) {\n" + 
  62.266 +            "  if (list[i].nodeType == 1) cnt++;\n" + 
  62.267 +            "  if (cnt == pos) return list[i].dispatchEvent(ev);\n" + 
  62.268 +            "}\n" + 
  62.269 +            "return null;\n";
  62.270          Utils.executeScript(
  62.271              KnockoutTest.class,
  62.272              s, id, pos);
  62.273      }
  62.274  
  62.275      private static String childText(String id, int pos) throws Exception {
  62.276 -        String s = "var id = arguments[0]; var pos = arguments[1];"
  62.277 -        + "var e = window.document.getElementById(id);\n "
  62.278 -        + "var t = e.children[pos].innerHTML;\n "
  62.279 -        + "return t ? t : null;";
  62.280 +        String s = 
  62.281 +            "var id = arguments[0]; var pos = arguments[1];" +
  62.282 +            "var e = window.document.getElementById(id);\n" +
  62.283 +            "var list = e.childNodes;\n" +
  62.284 +            "var cnt = -1;\n" + 
  62.285 +            "for (var i = 0; i < list.length; i++) {\n" + 
  62.286 +            "  if (list[i].nodeType == 1) cnt++;\n" + 
  62.287 +            "  if (cnt == pos) return list[i].innerHTML;\n" + 
  62.288 +            "}\n" + 
  62.289 +            "return null;\n";
  62.290          return (String)Utils.executeScript(
  62.291              KnockoutTest.class,
  62.292              s, id, pos);
    63.1 --- a/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java	Wed Mar 12 20:26:58 2014 +0100
    63.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java	Fri Jul 25 10:45:12 2014 +0200
    63.3 @@ -85,13 +85,13 @@
    63.4              );
    63.5              m = Models.bind(new Mines(), ctx);
    63.6              m.applyBindings();
    63.7 -            int cnt = countChildren("table");
    63.8 +            int cnt = Utils.countChildren(MinesTest.class, "table");
    63.9              assert cnt == 0 : "Table is empty: " + cnt;
   63.10              scheduleClick("init", 100);
   63.11          }
   63.12  
   63.13  
   63.14 -        int cnt = countChildren("table");
   63.15 +        int cnt = Utils.countChildren(MinesTest.class, "table");
   63.16          if (cnt == 0) {
   63.17              throw new InterruptedException();
   63.18          }
   63.19 @@ -100,16 +100,17 @@
   63.20          Utils.exposeHTML(MinesTest.class, "");
   63.21      }
   63.22      
   63.23 -    private static int countChildren(String id) throws Exception {
   63.24 -        return ((Number)Utils.executeScript(
   63.25 -          MinesTest.class,
   63.26 -          "var e = window.document.getElementById(arguments[0]);\n "
   63.27 -        + "if (typeof e === 'undefined') return -2;\n "
   63.28 -        + "return e.children.length;", 
   63.29 -            id
   63.30 -        )).intValue();
   63.31 +    @KOTest public void countAround() throws Exception {
   63.32 +        Mines mines = new Mines();
   63.33 +        mines.init(5, 5, 0);
   63.34 +        mines.getRows().get(0).getColumns().get(0).setMine(true);
   63.35 +        mines.getRows().get(1).getColumns().get(0).setMine(true);
   63.36 +        mines.getRows().get(0).getColumns().get(1).setMine(true);
   63.37 +        
   63.38 +        int cnt = around(mines, 1, 1);
   63.39 +        assert cnt == 3 : "There are three mines around. Was: " + cnt;
   63.40      }
   63.41 -
   63.42 +    
   63.43      private static void scheduleClick(String id, int delay) throws Exception {
   63.44          String s = "var id = arguments[0]; var delay = arguments[1];"
   63.45              + "var e = window.document.getElementById(id);\n "
   63.46 @@ -315,8 +316,9 @@
   63.47          }
   63.48          final Square sq = columns.get(x);
   63.49          if (sq.getState() == SquareType.UNKNOWN) {
   63.50 -            sq.setState(SquareType.N_0);
   63.51 -            model.computeMines();
   63.52 +            int around = around(model, x, y);
   63.53 +            final SquareType t = SquareType.valueOf("N_" + around);
   63.54 +            sq.setState(t);
   63.55              if (sq.getState() == SquareType.N_0) {
   63.56                  expandKnown(model, x - 1, y - 1);
   63.57                  expandKnown(model, x - 1, y);
   63.58 @@ -329,4 +331,26 @@
   63.59              }
   63.60          }
   63.61      }
   63.62 +    private static int around(Mines model, int x, int y) {
   63.63 +        return minesAt(model, x - 1, y - 1)
   63.64 +                + minesAt(model, x - 1, y)
   63.65 +                + minesAt(model, x - 1, y + 1)
   63.66 +                + minesAt(model, x, y - 1)
   63.67 +                + minesAt(model, x, y + 1)
   63.68 +                + minesAt(model, x + 1, y - 1)
   63.69 +                + minesAt(model, x + 1, y)
   63.70 +                + minesAt(model, x + 1, y + 1);
   63.71 +    }
   63.72 +
   63.73 +    private static int minesAt(Mines model, int x, int y) {
   63.74 +        if (y < 0 || y >= model.getRows().size()) {
   63.75 +            return 0;
   63.76 +        }
   63.77 +        final List<Square> columns = model.getRows().get(y).getColumns();
   63.78 +        if (x < 0 || x >= columns.size()) {
   63.79 +            return 0;
   63.80 +        }
   63.81 +        Square sq = columns.get(x);
   63.82 +        return sq.isMine() ? 1 : 0;
   63.83 +    }
   63.84  }
    64.1 --- a/json-tck/src/main/java/net/java/html/json/tests/OperationsTest.java	Wed Mar 12 20:26:58 2014 +0100
    64.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/OperationsTest.java	Fri Jul 25 10:45:12 2014 +0200
    64.3 @@ -66,19 +66,7 @@
    64.4      
    64.5      @KOTest public void asyncOperation() throws InterruptedException {
    64.6          if (js == null) {
    64.7 -            try {
    64.8 -                // needs full JVM (not Bck2Brwsr VM) to run
    64.9 -                Class<?> thread = Class.forName("java.lang.Thread");
   64.10 -                Thread t = new Thread("Empty");
   64.11 -                // following operations are supposed to generate SecurityException
   64.12 -                // on bck2brwsr VM
   64.13 -                t.setName("Different");
   64.14 -                t.setDaemon(false);
   64.15 -                t.interrupt();
   64.16 -                t.start();
   64.17 -            } catch (ClassNotFoundException ex) {
   64.18 -                return;
   64.19 -            } catch (SecurityException ex) {
   64.20 +            if (Utils.skipIfNoFullJDK()) {
   64.21                  return;
   64.22              }
   64.23              
   64.24 @@ -104,7 +92,4 @@
   64.25          assert "Sitar".equals(p.getFirstName()) : "Expecting Sitar: " + p.getFirstName();
   64.26          assert Sex.MALE.equals(p.getSex()) : "Expecting MALE: " + p.getSex();
   64.27      }
   64.28 -    
   64.29 -
   64.30 -    
   64.31  }
    65.1 --- a/json-tck/src/main/java/net/java/html/json/tests/Utils.java	Wed Mar 12 20:26:58 2014 +0100
    65.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/Utils.java	Fri Jul 25 10:45:12 2014 +0200
    65.3 @@ -55,7 +55,23 @@
    65.4   */
    65.5  public final class Utils {
    65.6      private static KnockoutTCK instantiatedTCK;
    65.7 -    
    65.8 +
    65.9 +    static boolean skipIfNoFullJDK() {
   65.10 +        try {
   65.11 +            Class<?> thread = Class.forName("java.lang.Thread");
   65.12 +            Thread t = new Thread("Empty");
   65.13 +            t.setName("Different");
   65.14 +            t.setDaemon(false);
   65.15 +            t.interrupt();
   65.16 +            t.start();
   65.17 +        } catch (ClassNotFoundException ex) {
   65.18 +            return true;
   65.19 +        } catch (SecurityException ex) {
   65.20 +            return true;
   65.21 +        }
   65.22 +        return false;
   65.23 +    }
   65.24 +
   65.25      private Utils() {
   65.26      }
   65.27      
   65.28 @@ -110,6 +126,20 @@
   65.29          return executeScript(clazz, s, html);
   65.30      }
   65.31  
   65.32 +    static int countChildren(Class<?> caller, String id) throws Exception {
   65.33 +        return ((Number) executeScript(caller, 
   65.34 +            "var e = window.document.getElementById(arguments[0]);\n" + 
   65.35 +            "if (typeof e === 'undefined') return -2;\n " + 
   65.36 +            "var list = e.childNodes;\n" +
   65.37 +            "var cnt = 0;\n" + 
   65.38 +            "for (var i = 0; i < list.length; i++) {\n" + 
   65.39 +            "  if (list[i].nodeType == 1) cnt++;\n" + 
   65.40 +            "}\n" + 
   65.41 +            "return cnt;\n"
   65.42 +            , id
   65.43 +        )).intValue();
   65.44 +    }
   65.45 +    
   65.46      static String prepareURL(
   65.47          Class<?> clazz, String content, String mimeType, String... parameters) {
   65.48          for (KnockoutTCK tck : tcks(clazz)) {
    66.1 --- a/json/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    66.2 +++ b/json/pom.xml	Fri Jul 25 10:45:12 2014 +0200
    66.3 @@ -4,11 +4,11 @@
    66.4    <parent>
    66.5      <groupId>org.netbeans.html</groupId>
    66.6      <artifactId>pom</artifactId>
    66.7 -    <version>0.8-SNAPSHOT</version>
    66.8 +    <version>1.0-SNAPSHOT</version>
    66.9    </parent>
   66.10    <groupId>org.netbeans.html</groupId>
   66.11    <artifactId>net.java.html.json</artifactId>
   66.12 -  <version>0.8-SNAPSHOT</version>
   66.13 +  <version>1.0-SNAPSHOT</version>
   66.14    <packaging>bundle</packaging>
   66.15    <name>JSON Model in Java</name>
   66.16    <url>http://maven.apache.org</url>
    67.1 --- a/json/src/main/java/net/java/html/json/Function.java	Wed Mar 12 20:26:58 2014 +0100
    67.2 +++ b/json/src/main/java/net/java/html/json/Function.java	Fri Jul 25 10:45:12 2014 +0200
    67.3 @@ -96,7 +96,7 @@
    67.4   * by selected name. 
    67.5   * Try <a target="_blank" href="http://dew.apidesign.org/dew/#8848505">this sample on-line</a>!
    67.6   * 
    67.7 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    67.8 + * @author Jaroslav Tulach
    67.9   */
   67.10  @Target(ElementType.METHOD)
   67.11  @Retention(RetentionPolicy.SOURCE)
    68.1 --- a/json/src/main/java/net/java/html/json/Model.java	Wed Mar 12 20:26:58 2014 +0100
    68.2 +++ b/json/src/main/java/net/java/html/json/Model.java	Fri Jul 25 10:45:12 2014 +0200
    68.3 @@ -129,7 +129,7 @@
    68.4   * to see a histogram driven by the {@link Model} annotation or try 
    68.5   * a little <a target="_blank" href="http://dew.apidesign.org/dew/#7263102">math test</a>.
    68.6   *
    68.7 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    68.8 + * @author Jaroslav Tulach
    68.9   */
   68.10  @Retention(RetentionPolicy.SOURCE)
   68.11  @Target(ElementType.TYPE)
    69.1 --- a/json/src/main/java/net/java/html/json/Models.java	Wed Mar 12 20:26:58 2014 +0100
    69.2 +++ b/json/src/main/java/net/java/html/json/Models.java	Fri Jul 25 10:45:12 2014 +0200
    69.3 @@ -45,13 +45,14 @@
    69.4  import net.java.html.BrwsrCtx;
    69.5  import java.io.IOException;
    69.6  import java.io.InputStream;
    69.7 +import java.util.Collection;
    69.8  import org.netbeans.html.json.impl.JSON;
    69.9  
   69.10  /** Information about and 
   69.11   * operations for classes generated by the {@link Model @Model}
   69.12   * annotation.
   69.13   *
   69.14 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
   69.15 + * @author Jaroslav Tulach
   69.16   */
   69.17  public final class Models {
   69.18      private Models() {
   69.19 @@ -90,7 +91,29 @@
   69.20       * @since 0.2
   69.21       */
   69.22      public static <M> M parse(BrwsrCtx c, Class<M> model, InputStream is) throws IOException {
   69.23 -        return JSON.readStream(c, model, is);
   69.24 +        return JSON.readStream(c, model, is, null);
   69.25 +    }
   69.26 +    
   69.27 +    /** Generic method to parse stream, that can possibly contain array
   69.28 +     * of specified objects.
   69.29 +     * 
   69.30 +     * @param <M> the type of the individal JSON object
   69.31 +     * @param c context of the technology to use for reading 
   69.32 +     * @param model the model class generated by {@link Model} annotation
   69.33 +     * @param is input stream with data
   69.34 +     * @param collectTo collection to add the individual model instances to.
   69.35 +     *   If the stream contains an object, one instance will be added, if
   69.36 +     *   it contains an array, the number of array items will be added to
   69.37 +     *   the collection
   69.38 +     * @throws IOException thrown when an I/O problem appears
   69.39 +     * @since 0.8.3
   69.40 +     */
   69.41 +    public static <M> void parse(
   69.42 +        BrwsrCtx c, Class<M> model, 
   69.43 +        InputStream is, Collection<? super M> collectTo
   69.44 +    ) throws IOException {
   69.45 +        collectTo.getClass();
   69.46 +        JSON.readStream(c, model, is, collectTo);
   69.47      }
   69.48      
   69.49      /** Converts an existing, raw, JSON object into a {@link Model model class}.
    70.1 --- a/json/src/main/java/net/java/html/json/OnPropertyChange.java	Wed Mar 12 20:26:58 2014 +0100
    70.2 +++ b/json/src/main/java/net/java/html/json/OnPropertyChange.java	Fri Jul 25 10:45:12 2014 +0200
    70.3 @@ -47,10 +47,46 @@
    70.4  import java.lang.annotation.RetentionPolicy;
    70.5  import java.lang.annotation.Target;
    70.6  
    70.7 -/** Defines a method that is supposed to be notified when a 
    70.8 - * property defined by {@link Model} has been changed.
    70.9 +/** Marks a method that is going to be notified when a 
   70.10 + * property defined by {@link Model} has been changed. This is
   70.11 + * especially useful when one wants to react to changes in the 
   70.12 + * model caused by the rendered view. In case of 
   70.13 + * <a href="http://knockoutjs.com">knockout.js</a> technology
   70.14 + * one could for example react to selection of a name from a combo
   70.15 + * box:
   70.16 + * <pre>
   70.17 + * 
   70.18 + * &lt;!-- associates the selected value with property <em>name</em> --&gt;
   70.19 + * 
   70.20 + * &lt;select data-bind="value: name"&gt;
   70.21 + *   &lt;option&gt;Jiří&lt;/option&gt;
   70.22 + *   &lt;option&gt;Jarda&lt;/option&gt;
   70.23 + *   &lt;option&gt;Petr&lt;/option&gt;
   70.24 + *   &lt;option&gt;Tomáš&lt;/option&gt;
   70.25 + * &lt;/select&gt;
   70.26 + * 
   70.27 + * // Java code snippet reacting to change of the <em>name</em> property:
   70.28 + * 
   70.29 + * {@link OnPropertyChange @OnPropertyChange}("name") 
   70.30 + * <b>static void</b> propertyChanged(AModel inst, {@link String} propertyName) {
   70.31 + *   // schedule some operation
   70.32 + *   // on the model
   70.33 + * }
   70.34 + * </pre>
   70.35 + * The method's first argument should be the instance of the 
   70.36 + * associated {@link Model model class}.
   70.37 + * There can be an optional second {@link String} argument which will be set
   70.38 + * to the name of the changed property. The second argument is only useful when
   70.39 + * a single method reacts to changes in multiple properties.
   70.40 + * <p>
   70.41 + * An online example using this technique is 
   70.42 + * <a target="_blank" href="http://dew.apidesign.org/dew/#7138581">available here</a> -
   70.43 + * it observes selection in a combo box and in case it changes 
   70.44 + * the example sends a network
   70.45 + * request and {@link net.java.html.json.OnReceive asynchronously updates}
   70.46 + * list of code snippets.
   70.47   *
   70.48 - * @author Jaroslav Tulach <jtulach@netbeans.org>
   70.49 + * @author Jaroslav Tulach
   70.50   */
   70.51  @Retention(RetentionPolicy.SOURCE)
   70.52  @Target(ElementType.METHOD)
    71.1 --- a/json/src/main/java/net/java/html/json/OnReceive.java	Wed Mar 12 20:26:58 2014 +0100
    71.2 +++ b/json/src/main/java/net/java/html/json/OnReceive.java	Fri Jul 25 10:45:12 2014 +0200
    71.3 @@ -50,9 +50,13 @@
    71.4  /** Static methods in classes annotated by {@link Model}
    71.5   * can be marked by this annotation to establish a 
    71.6   * <a href="http://en.wikipedia.org/wiki/JSON">JSON</a>
    71.7 - * communication point.
    71.8 + * communication point. The first argument should be the
    71.9 + * associated {@link Model} class. The second argument can
   71.10 + * be another class generated by {@link Model} annotation,
   71.11 + * or array of such classes or (since 0.8.1 version) a
   71.12 + * {@link java.util.List} of such classes.
   71.13   * The associated model class then gets new method to invoke a network
   71.14 - * connection. Example follows:
   71.15 + * connection asynchronously. Example follows:
   71.16   * 
   71.17   * <pre>
   71.18   * {@link Model @Model}(className="MyModel", properties={
   71.19 @@ -88,7 +92,12 @@
   71.20   * }
   71.21   * </pre>
   71.22   * When the server returns <code>{ "firstName" : "John", "lastName" : "Smith" }</code>
   71.23 - * the system will print a message <em>Adding John Smith!</em>.
   71.24 + * the system will print a message <em>Adding John Smith!</em>. It is not 
   71.25 + * necessary to fully describe the server message - enumerate only the fields
   71.26 + * in the response you are interested in. The others will be discarded. So,
   71.27 + * if the server <code>{ "firstName" : "John", "lastName" : "Smith", "age" : 33 }</code>
   71.28 + * the above code will behave the same (e.g. ignore the <code>age</code>
   71.29 + * value).
   71.30   * <p>
   71.31   * One can use this method to communicate with the server
   71.32   * via <a href="doc-files/websockets.html">WebSocket</a> protocol since version 0.6.
    72.1 --- a/json/src/main/java/net/java/html/json/package.html	Wed Mar 12 20:26:58 2014 +0100
    72.2 +++ b/json/src/main/java/net/java/html/json/package.html	Fri Jul 25 10:45:12 2014 +0200
    72.3 @@ -67,7 +67,7 @@
    72.4      <code>applyBindings()</code> on your model).
    72.5      </p>
    72.6      <p>
    72.7 -    You don't have bother with JavaScript. All your application logic is in
    72.8 +    You don't have to bother with JavaScript. All your application logic is in
    72.9      Java. The necessary JavaScript needed for the HTML bindings remains hidden
   72.10      as an implementation detail of communication between the generated model
   72.11      class(es) and appropriate technology bridge. For example
   72.12 @@ -80,13 +80,23 @@
   72.13    &lt;scope&gt;runtime&lt;/scope&gt;
   72.14  &lt;/dependency&gt;
   72.15      </pre>
   72.16 +    <p>
   72.17 +    In case you decide to use <a target="ko" href="http://knockoutjs.com">Knockout</a>
   72.18 +    as your rendering technology, it is recommended to look at its 
   72.19 +    <a target="ko" href="http://knockoutjs.com/documentation/introduction.html">documentation</a>
   72.20 +    (especially its HTML part) as <code>data-bind</code> syntax is exactly
   72.21 +    what one has to use in the HTML file(s). Of course, one does not need
   72.22 +    to bother with the JavaScript part, that is completely hidden in the
   72.23 +    code generated when processing the {@link net.java.html.json.Model}
   72.24 +    annotation.
   72.25 +    </p>
   72.26      
   72.27      <p>
   72.28      The model classes can be used for JSON based server communication. Just
   72.29      use <a href="OnReceive.html">@OnReceive</a> annotation to define a communication
   72.30      point in the model class. Please note, that the model classes can easily
   72.31      be used on server as well - the same code can run
   72.32 -    in your browser as well as on your server. Just add following to your <em>pom.xml</em>
   72.33 +    in your client as well as on your server. Just add following to your <em>pom.xml</em>
   72.34      to use your classes generated by <a href="Model.html">@Model</a> annotation
   72.35      as <a href="http://jersey.java.net" target="new">Jersey</a> entities:
   72.36      </p>
   72.37 @@ -94,7 +104,7 @@
   72.38  &lt;dependency&gt;
   72.39    &lt;groupId&gt;org.glassfish.jersey.media&lt;/groupId&gt;
   72.40    &lt;artifactId&gt;html-json&lt;/artifactId&gt;
   72.41 -  &lt;version&gt;2.6&lt;/version&gt; &lt;-- or 2.6-SNAPSHOT until it gets released --&gt;
   72.42 +  &lt;version&gt;2.6&lt;/version&gt;
   72.43    &lt;scope&gt;runtime&lt;/scope&gt;
   72.44  &lt;/dependency&gt;
   72.45      </pre>
    73.1 --- a/json/src/main/java/org/apidesign/html/json/spi/JSONCall.java	Wed Mar 12 20:26:58 2014 +0100
    73.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/JSONCall.java	Fri Jul 25 10:45:12 2014 +0200
    73.3 @@ -45,8 +45,6 @@
    73.4  import java.io.IOException;
    73.5  import java.io.OutputStream;
    73.6  import net.java.html.BrwsrCtx;
    73.7 -import org.apidesign.html.context.spi.Contexts;
    73.8 -import org.netbeans.html.json.impl.JSON;
    73.9  import org.netbeans.html.json.impl.RcvrJSON;
   73.10  
   73.11  /** Description of a JSON call request that is supposed to be processed
    74.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Wed Mar 12 20:26:58 2014 +0100
    74.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Fri Jul 25 10:45:12 2014 +0200
    74.3 @@ -61,7 +61,7 @@
    74.4   * associated {@link Technology} the necessary information about the 
    74.5   * generated {@link Model} class.
    74.6   *
    74.7 - * @author Jaroslav Tulach <jtulach@netbeans.org>
    74.8 + * @author Jaroslav Tulach
    74.9   * @since 0.7
   74.10   */
   74.11  public final class Proto {
   74.12 @@ -110,14 +110,22 @@
   74.13      }
   74.14      
   74.15      /** Whenever model changes a property. It should notify the
   74.16 -     * associated technology by calling this method.
   74.17 +     * associated technology by calling this method. 
   74.18 +     * Since 0.8.3: This method may be called by any thread - it reschedules
   74.19 +     * its actual execution into appropriate one by using
   74.20 +     * {@link BrwsrCtx#execute(java.lang.Runnable)}.
   74.21       * 
   74.22       * @param propName name of the changed property
   74.23       */
   74.24 -    public void valueHasMutated(String propName) {
   74.25 -        if (ko != null) {
   74.26 -            ko.valueHasMutated(propName, null, null);
   74.27 -        }
   74.28 +    public void valueHasMutated(final String propName) {
   74.29 +        context.execute(new Runnable() {
   74.30 +            @Override
   74.31 +            public void run() {
   74.32 +                if (ko != null) {
   74.33 +                    ko.valueHasMutated(propName, null, null);
   74.34 +                }
   74.35 +            }
   74.36 +        });
   74.37      }
   74.38  
   74.39      /** Whenever model changes a propertyit should notify the
   74.40 @@ -125,16 +133,26 @@
   74.41       * (if the new value is known and different to the old one) or
   74.42       * via (slightly ineffective) {@link #valueHasMutated(java.lang.String)}
   74.43       * method.
   74.44 +     * Since 0.8.3: This method may be called by any thread - it reschedules
   74.45 +     * its actual execution into appropriate one by using
   74.46 +     * {@link BrwsrCtx#execute(java.lang.Runnable)}.
   74.47       * 
   74.48       * @param propName name of the changed property
   74.49       * @param oldValue provides previous value of the property
   74.50       * @param newValue provides new value of the property
   74.51       * @since 0.7.6
   74.52       */
   74.53 -    public void valueHasMutated(String propName, Object oldValue, Object newValue) {
   74.54 -        if (ko != null) {
   74.55 -            ko.valueHasMutated(propName, oldValue, newValue);
   74.56 -        }
   74.57 +    public void valueHasMutated(
   74.58 +        final String propName, final Object oldValue, final Object newValue
   74.59 +    ) {
   74.60 +        context.execute(new Runnable() {
   74.61 +            @Override
   74.62 +            public void run() {
   74.63 +                if (ko != null) {
   74.64 +                    ko.valueHasMutated(propName, oldValue, newValue);
   74.65 +                }
   74.66 +            }
   74.67 +        });
   74.68      }
   74.69      
   74.70      /** Initializes the associated model in the current {@link #getContext() context}.
   74.71 @@ -226,6 +244,17 @@
   74.72          return JSON.read(context, modelClass, data);
   74.73      }
   74.74  
   74.75 +    /** Initializes asynchronous JSON connection to specified URL. Delegates
   74.76 +     * to {@link #loadJSON(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object...) }
   74.77 +     * with no extra parameters.
   74.78 +     */
   74.79 +    public void loadJSON(final int index, 
   74.80 +        String urlBefore, String urlAfter, String method,
   74.81 +        final Object data
   74.82 +    ) {
   74.83 +        loadJSON(index, urlBefore, urlAfter, method, data, new Object[0]);
   74.84 +    }
   74.85 +    
   74.86      /** Initializes asynchronous JSON connection to specified URL. The 
   74.87       * method returns immediately and later does callback later.
   74.88       * 
   74.89 @@ -237,20 +266,23 @@
   74.90       * @param method method to use for connection to the server
   74.91       * @param data string, number or a {@link Model} generated class to send to
   74.92       *    the server when doing a query
   74.93 +     * @param params extra params to pass back when calling
   74.94 +     *   {@link Type#onMessage(java.lang.Object, int, int, java.lang.Object, java.lang.Object[])}
   74.95 +     * @since 0.8.1
   74.96       */
   74.97      public void loadJSON(final int index, 
   74.98          String urlBefore, String urlAfter, String method,
   74.99 -        final Object data
  74.100 +        final Object data, final Object... params
  74.101      ) {
  74.102          class Rcvr extends RcvrJSON {
  74.103              @Override
  74.104              protected void onMessage(MsgEvnt msg) {
  74.105 -                type.onMessage(obj, index, 1, msg.getValues());
  74.106 +                type.onMessage(obj, index, 1, msg.getValues(), params);
  74.107              }
  74.108  
  74.109              @Override
  74.110              protected void onError(MsgEvnt msg) {
  74.111 -                type.onMessage(obj, index, 2, msg.getException());
  74.112 +                type.onMessage(obj, index, 2, msg.getException(), params);
  74.113              }
  74.114          }
  74.115          JSON.loadJSON(context, new Rcvr(), urlBefore, urlAfter, method, data);
  74.116 @@ -546,7 +578,7 @@
  74.117  
  74.118          /** Called to report results of asynchronous over-the-wire 
  74.119           * communication. Result of calling {@link Proto#wsOpen(int, java.lang.String, java.lang.Object)}
  74.120 -         * or {@link Proto#loadJSON(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)}.
  74.121 +         * or {@link Proto#loadJSON(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object...)}.
  74.122           * 
  74.123           * @param model the instance of the model class
  74.124           * @param index index used during initiating the communication (via <code>loadJSON</code> or <code>wsOpen</code> calls)
  74.125 @@ -555,7 +587,28 @@
  74.126           * @param data <code>null</code> or string, number or a {@link Model} class
  74.127           *   obtained to the server as a response
  74.128           */
  74.129 -        protected abstract void onMessage(Model model, int index, int type, Object data);
  74.130 +        protected void onMessage(Model model, int index, int type, Object data) {
  74.131 +            onMessage(model, index, type, data, new Object[0]);
  74.132 +        }
  74.133 +        
  74.134 +        /** Called to report results of asynchronous over-the-wire 
  74.135 +         * communication. Result of calling {@link Proto#wsOpen(int, java.lang.String, java.lang.Object)}
  74.136 +         * or {@link Proto#loadJSON(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object...)}.
  74.137 +         * 
  74.138 +         * @param model the instance of the model class
  74.139 +         * @param index index used during initiating the communication (via <code>loadJSON</code> or <code>wsOpen</code> calls)
  74.140 +         * @param type type of the message: 0 - onOpen, 1 - onMessage, 2 - onError, 3 - onClose -
  74.141 +         *   not all messages are applicable to all communication protocols (JSON has only 1 and 2).
  74.142 +         * @param data <code>null</code> or string, number or a {@link Model} class
  74.143 +         *   obtained to the server as a response
  74.144 +         * @param params extra parameters as passed for example to
  74.145 +         *   {@link Proto#loadJSON(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object...)}
  74.146 +         *   method
  74.147 +         * @since 0.8.1
  74.148 +         */
  74.149 +        protected void onMessage(Model model, int index, int type, Object data, Object[] params) {
  74.150 +            onMessage(model, index, type, data);
  74.151 +        }
  74.152  
  74.153          //
  74.154          // Various support methods the generated classes use
  74.155 @@ -704,6 +757,9 @@
  74.156              if (Float.class == type) {
  74.157                  val = val instanceof Number ? ((Number) val).floatValue() : Float.NaN;
  74.158              }
  74.159 +            if (type.isEnum() && val instanceof String) {
  74.160 +                val = Enum.valueOf(type.asSubclass(Enum.class), (String)val);
  74.161 +            }
  74.162              return type.cast(val);
  74.163          }
  74.164  
    75.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Transfer.java	Wed Mar 12 20:26:58 2014 +0100
    75.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Transfer.java	Fri Jul 25 10:45:12 2014 +0200
    75.3 @@ -68,7 +68,10 @@
    75.4      /** Reads content of a stream and creates its JSON representation.
    75.5       * The returned object is implementation dependant. It however needs
    75.6       * to be acceptable as first argument of {@link #extract(java.lang.Object, java.lang.String[], java.lang.Object[]) extract}
    75.7 -     * method.
    75.8 +     * method. If the stream contains representation or a JSON array,
    75.9 +     * an Object[] should be returned - each of its members should, by itself
   75.10 +     * be acceptable argument to 
   75.11 +     * the {@link #extract(java.lang.Object, java.lang.String[], java.lang.Object[]) extract} method.
   75.12       * 
   75.13       * @param is input stream to read data from
   75.14       * @return an object representing the JSON data
    76.1 --- a/json/src/main/java/org/netbeans/html/json/impl/Bindings.java	Wed Mar 12 20:26:58 2014 +0100
    76.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/Bindings.java	Fri Jul 25 10:45:12 2014 +0200
    76.3 @@ -97,7 +97,9 @@
    76.4      public void valueHasMutated(String firstName, Object oldValue, Object newValue) {
    76.5          if (bp instanceof Technology.ValueMutated) {
    76.6              Technology.ValueMutated<Data> vm = (Technology.ValueMutated<Data>)bp;
    76.7 -            vm.valueHasMutated(data, firstName, oldValue, newValue);
    76.8 +            Object ov = JSON.find(oldValue, this);
    76.9 +            Object nv = JSON.find(newValue, this);
   76.10 +            vm.valueHasMutated(data, firstName, ov, nv);
   76.11          } else {
   76.12              bp.valueHasMutated(data, firstName);
   76.13          }
    77.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Wed Mar 12 20:26:58 2014 +0100
    77.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Fri Jul 25 10:45:12 2014 +0200
    77.3 @@ -42,6 +42,7 @@
    77.4   */
    77.5  package org.netbeans.html.json.impl;
    77.6  
    77.7 +import java.io.EOFException;
    77.8  import java.io.IOException;
    77.9  import java.io.InputStream;
   77.10  import java.util.Collection;
   77.11 @@ -404,10 +405,28 @@
   77.12          return PropertyBindingAccessor.clone(from, model, c);
   77.13      }
   77.14      
   77.15 -    public static <T> T readStream(BrwsrCtx c, Class<T> modelClazz, InputStream data) 
   77.16 +    public static <T> T readStream(BrwsrCtx c, Class<T> modelClazz, InputStream data, Collection<? super T> collectTo) 
   77.17      throws IOException {
   77.18          Transfer tr = findTransfer(c);
   77.19 -        return read(c, modelClazz, tr.toJSON((InputStream)data));
   77.20 +        Object rawJSON = tr.toJSON((InputStream)data);
   77.21 +        if (rawJSON instanceof Object[]) {
   77.22 +            final Object[] arr = (Object[])rawJSON;
   77.23 +            if (collectTo != null) {
   77.24 +                for (int i = 0; i < arr.length; i++) {
   77.25 +                    collectTo.add(read(c, modelClazz, arr[i]));
   77.26 +                }
   77.27 +                return null;
   77.28 +            }
   77.29 +            if (arr.length == 0) {
   77.30 +                throw new EOFException("Recieved an empty array");
   77.31 +            }
   77.32 +            rawJSON = arr[0];
   77.33 +        }
   77.34 +        T res = read(c, modelClazz, rawJSON);
   77.35 +        if (collectTo != null) {
   77.36 +            collectTo.add(res);
   77.37 +        }
   77.38 +        return res;
   77.39      }
   77.40      public static <T> T read(BrwsrCtx c, Class<T> modelClazz, Object data) {
   77.41          if (data == null) {
    78.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSONList.java	Wed Mar 12 20:26:58 2014 +0100
    78.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSONList.java	Fri Jul 25 10:45:12 2014 +0200
    78.3 @@ -174,16 +174,21 @@
    78.4      }
    78.5  
    78.6      private void notifyChange() {
    78.7 -        Bindings m = PropertyBindingAccessor.getBindings(proto, false);
    78.8 -        if (m != null) {
    78.9 -            m.valueHasMutated(name, null, null);
   78.10 -            for (String dependant : deps) {
   78.11 -                m.valueHasMutated(dependant, null, null);
   78.12 +        proto.getContext().execute(new Runnable() {
   78.13 +            @Override
   78.14 +            public void run() {
   78.15 +                Bindings m = PropertyBindingAccessor.getBindings(proto, false);
   78.16 +                if (m != null) {
   78.17 +                    m.valueHasMutated(name, null, null);
   78.18 +                    for (String dependant : deps) {
   78.19 +                        m.valueHasMutated(dependant, null, null);
   78.20 +                    }
   78.21 +                    if (index >= 0) {
   78.22 +                        PropertyBindingAccessor.notifyProtoChange(proto, index);
   78.23 +                    }
   78.24 +                }
   78.25              }
   78.26 -            if (index >= 0) {
   78.27 -                PropertyBindingAccessor.notifyProtoChange(proto, index);
   78.28 -            }
   78.29 -        }
   78.30 +        });
   78.31      }
   78.32  
   78.33      @Override
    79.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Wed Mar 12 20:26:58 2014 +0100
    79.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Fri Jul 25 10:45:12 2014 +0200
    79.3 @@ -203,6 +203,14 @@
    79.4                  ok = false;
    79.5              }
    79.6              int functionsCount = functions.size() / 2;
    79.7 +            for (int i = 0; i < functions.size(); i += 2) {
    79.8 +                for (Prprt p : props) {
    79.9 +                    if (p.name().equals(functions.get(i))) {
   79.10 +                        error("Function cannot have the name of an existing property", e);
   79.11 +                        ok = false;
   79.12 +                    }
   79.13 +                }
   79.14 +            }
   79.15              if (!generateReceive(e, body, className, e.getEnclosedElements(), onReceiveType)) {
   79.16                  ok = false;
   79.17              }
   79.18 @@ -415,7 +423,7 @@
   79.19                  for (int i = 0, cnt = 0, prop = 0; i < propsGetSet.size(); i += 5) {
   79.20                      final String pn = propsGetSet.get(i);
   79.21                      Prprt p = findPrprt(props, pn);
   79.22 -                    if (p == null) {
   79.23 +                    if (p == null || prop >= props.length) {
   79.24                          continue;
   79.25                      }
   79.26                      boolean[] isModel = { false };
   79.27 @@ -520,7 +528,7 @@
   79.28      private boolean generateProperties(
   79.29          Element where,
   79.30          Writer w, String className, Prprt[] properties,
   79.31 -        Collection<String> props, 
   79.32 +        List<String> props, 
   79.33          Map<String,Collection<String[]>> deps,
   79.34          Map<String,Collection<String>> functionDeps
   79.35      ) throws IOException {
   79.36 @@ -572,6 +580,13 @@
   79.37                  w.write("  }\n");
   79.38              }
   79.39              
   79.40 +            for (int i = 0; i < props.size(); i += 5) {
   79.41 +                if (props.get(i).equals(p.name())) {
   79.42 +                    error("Cannot have the name " + p.name() + " defined twice", where);
   79.43 +                    ok = false;
   79.44 +                }
   79.45 +            }
   79.46 +            
   79.47              props.add(p.name());
   79.48              props.add(gs[2]);
   79.49              props.add(gs[3]);
   79.50 @@ -918,7 +933,7 @@
   79.51                      } else {
   79.52                          simpleName = type.toString();
   79.53                      }
   79.54 -                    if (simpleName.toString().equals(className)) {
   79.55 +                    if (checkFirst && simpleName.toString().equals(className)) {
   79.56                          checkFirst = false;
   79.57                      } else {
   79.58                          if (checkFirst) {
   79.59 @@ -944,7 +959,7 @@
   79.60  
   79.61                  StringBuilder call = new StringBuilder();
   79.62                  call.append("{ Object[] arr = (Object[])data; ");
   79.63 -                call.append(clazz.getSimpleName()).append(".").append(m.getSimpleName()).append("(");
   79.64 +                call.append(inPckName(clazz)).append(".").append(m.getSimpleName()).append("(");
   79.65                  int i = 0;
   79.66                  for (VariableElement ve : e.getParameters()) {
   79.67                      if (i++ == 0) {
   79.68 @@ -971,7 +986,7 @@
   79.69          Element clazz, StringWriter body, String className, 
   79.70          List<? extends Element> enclosedElements, StringBuilder inType
   79.71      ) {
   79.72 -        inType.append("  @Override public void onMessage(").append(className).append(" model, int index, int type, Object data) {\n");
   79.73 +        inType.append("  @Override public void onMessage(").append(className).append(" model, int index, int type, Object data, Object[] params) {\n");
   79.74          inType.append("    switch (index) {\n");
   79.75          int index = 0;
   79.76          for (Element m : enclosedElements) {
   79.77 @@ -1007,48 +1022,66 @@
   79.78                  error("POST method needs to specify a data() class", e);
   79.79                  return false;
   79.80              }
   79.81 -            String modelClass = null;
   79.82 -            boolean expectsList = false;
   79.83 +            if (e.getParameters().size() < 2) {
   79.84 +                error("@OnReceive method needs at least two parameters", e);
   79.85 +            }
   79.86 +            int expectsList = 0;
   79.87              List<String> args = new ArrayList<String>();
   79.88 +            List<String> params = new ArrayList<String>();
   79.89 +            // first argument is model class
   79.90              {
   79.91 -                for (VariableElement ve : e.getParameters()) {
   79.92 -                    TypeMirror modelType = null;
   79.93 -                    final TypeMirror type = ve.asType();
   79.94 -                    CharSequence simpleName;
   79.95 -                    if (type.getKind() == TypeKind.DECLARED) {
   79.96 -                        simpleName = ((DeclaredType)type).asElement().getSimpleName();
   79.97 -                    } else {
   79.98 -                        simpleName = type.toString();
   79.99 +                TypeMirror type = e.getParameters().get(0).asType();
  79.100 +                CharSequence simpleName;
  79.101 +                if (type.getKind() == TypeKind.DECLARED) {
  79.102 +                    simpleName = ((DeclaredType) type).asElement().getSimpleName();
  79.103 +                } else {
  79.104 +                    simpleName = type.toString();
  79.105 +                }
  79.106 +                if (simpleName.toString().equals(className)) {
  79.107 +                    args.add("model");
  79.108 +                } else {
  79.109 +                    error("First parameter needs to be " + className, e);
  79.110 +                    return false;
  79.111 +                }                    
  79.112 +            }
  79.113 +                
  79.114 +            String modelClass;
  79.115 +            {
  79.116 +                final Types tu = processingEnv.getTypeUtils();
  79.117 +                TypeMirror type = e.getParameters().get(1).asType();
  79.118 +                TypeMirror modelType = null;
  79.119 +                TypeMirror ert = tu.erasure(type);
  79.120 +
  79.121 +                if (isModel(type)) {
  79.122 +                    modelType = type;
  79.123 +                } else if (type.getKind() == TypeKind.ARRAY) {
  79.124 +                    modelType = ((ArrayType)type).getComponentType();
  79.125 +                    expectsList = 1;
  79.126 +                } else if ("java.util.List".equals(fqn(ert, e))) {
  79.127 +                    List<? extends TypeMirror> typeArgs = ((DeclaredType)type).getTypeArguments();
  79.128 +                    if (typeArgs.size() == 1) {
  79.129 +                        modelType = typeArgs.get(0);
  79.130 +                        expectsList = 2;
  79.131                      }
  79.132 -                    if (simpleName.toString().equals(className)) {
  79.133 -                        args.add("model");
  79.134 -                    } else if (isModel(ve.asType())) {
  79.135 -                        modelType = ve.asType();
  79.136 -                    } else if (ve.asType().getKind() == TypeKind.ARRAY) {
  79.137 -                        modelType = ((ArrayType)ve.asType()).getComponentType();
  79.138 -                        expectsList = true;
  79.139 -                    } else if (ve.asType().toString().equals("java.lang.String")) {
  79.140 -                        modelType = ve.asType();
  79.141 -                    }
  79.142 -                    if (modelType != null) {
  79.143 -                        if (modelClass != null) {
  79.144 -                            error("There can be only one model class among arguments", e);
  79.145 -                        } else {
  79.146 -                            modelClass = modelType.toString();
  79.147 -                            if (expectsList) {
  79.148 -                                args.add("arr");
  79.149 -                            } else {
  79.150 -                                args.add("arr[0]");
  79.151 -                            }
  79.152 -                        }
  79.153 -                    }
  79.154 +                } else if (type.toString().equals("java.lang.String")) {
  79.155 +                    modelType = type;
  79.156 +                }
  79.157 +                if (modelType == null) {
  79.158 +                    error("Second arguments needs to be a model, String or array or List of models", e);
  79.159 +                    return false;
  79.160 +                }
  79.161 +                modelClass = modelType.toString();
  79.162 +                if (expectsList == 1) {
  79.163 +                    args.add("arr");
  79.164 +                } else if (expectsList == 2) {
  79.165 +                    args.add("java.util.Arrays.asList(arr)");
  79.166 +                } else {
  79.167 +                    args.add("arr[0]");
  79.168                  }
  79.169              }
  79.170 -            if (modelClass == null) {
  79.171 -                error("The method needs to have one @Model class as parameter", e);
  79.172 -            }
  79.173              String n = e.getSimpleName().toString();
  79.174 -            if ("WebSocket".equals(onR.method())) {
  79.175 +            final boolean isWebSocket = "WebSocket".equals(onR.method());
  79.176 +            if (isWebSocket) {
  79.177                  body.append("  /** Performs WebSocket communication. Call with <code>null</code> data parameter\n");
  79.178                  body.append("  * to open the connection (even if not required). Call with non-null data to\n");
  79.179                  body.append("  * send messages to server. Call again with <code>null</code> data to close the socket.\n");
  79.180 @@ -1080,17 +1113,34 @@
  79.181                  if (dataMirror != null) {
  79.182                      body.append(sep).append(dataMirror.toString()).append(" data");
  79.183                  }
  79.184 +                for (int i = 2; i < e.getParameters().size(); i++) {
  79.185 +                    if (isWebSocket) {
  79.186 +                        error("@OnReceive(method=\"WebSocket\") can only have two arguments", e);
  79.187 +                        return false;
  79.188 +                    }
  79.189 +                    
  79.190 +                    VariableElement ve = e.getParameters().get(i);
  79.191 +                    body.append(sep).append(ve.asType().toString()).append(" ").append(ve.getSimpleName());
  79.192 +                    final String tp = ve.asType().toString();
  79.193 +                    String btn = findBoxedType(tp);
  79.194 +                    if (btn == null) {
  79.195 +                        btn = tp;
  79.196 +                    }
  79.197 +                    args.add("(" + btn + ")params[" + (i - 2) + "]");
  79.198 +                    params.add(ve.getSimpleName().toString());
  79.199 +                    sep = ", ";
  79.200 +                }
  79.201              }
  79.202              body.append(") {\n");
  79.203              boolean webSocket = onR.method().equals("WebSocket");
  79.204              if (webSocket) {
  79.205 -                if (generateWSReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
  79.206 +                if (generateWSReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList != 0, modelClass, n, args, params, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
  79.207                      return false;
  79.208                  }
  79.209                  body.append("  }\n");
  79.210                  body.append("  private Object ws_" + e.getSimpleName() + ";\n");
  79.211              } else {
  79.212 -                if (generateJSONReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
  79.213 +                if (generateJSONReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList != 0, modelClass, n, args, params, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
  79.214                      return false;
  79.215                  }
  79.216                  body.append("  }\n");
  79.217 @@ -1102,7 +1152,7 @@
  79.218          return true;
  79.219      }
  79.220  
  79.221 -    private boolean generateJSONReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
  79.222 +    private boolean generateJSONReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, List<String> params, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
  79.223          body.append(
  79.224              "    case " + index + ": {\n" +
  79.225              "      if (type == 2) { /* on error */\n" +
  79.226 @@ -1168,11 +1218,14 @@
  79.227          } else {
  79.228              method.append(", null, null");
  79.229          }
  79.230 +        for (String a : params) {
  79.231 +            method.append(", ").append(a);
  79.232 +        }
  79.233          method.append(");\n");
  79.234          return false;
  79.235      }
  79.236      
  79.237 -    private boolean generateWSReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
  79.238 +    private boolean generateWSReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, List<String> params, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
  79.239          body.append(
  79.240              "    case " + index + ": {\n" +
  79.241              "      if (type == 0) { /* on open */\n" +
  79.242 @@ -1181,7 +1234,7 @@
  79.243              String sep = "";
  79.244              for (String arg : args) {
  79.245                  body.append(sep);
  79.246 -                if (arg.startsWith("arr")) {
  79.247 +                if (arg.startsWith("arr") || arg.startsWith("java.util.Array")) {
  79.248                      body.append("null");
  79.249                  } else {
  79.250                      body.append(arg);
  79.251 @@ -1253,7 +1306,11 @@
  79.252          method.append("= proto.wsOpen(" + index + ", ");
  79.253          method.append(urlBefore).append(", data);\n");
  79.254          method.append("    } else {\n");
  79.255 -        method.append("      proto.wsSend(this.ws_").append(e.getSimpleName()).append(", ").append(urlBefore).append(", data);\n");
  79.256 +        method.append("      proto.wsSend(this.ws_").append(e.getSimpleName()).append(", ").append(urlBefore).append(", data");
  79.257 +        for (String a : params) {
  79.258 +            method.append(", ").append(a);
  79.259 +        }
  79.260 +        method.append(");\n");
  79.261          method.append("    }\n");
  79.262          return false;
  79.263      }
    80.1 --- a/json/src/test/java/net/java/html/json/Compile.java	Wed Mar 12 20:26:58 2014 +0100
    80.2 +++ b/json/src/test/java/net/java/html/json/Compile.java	Fri Jul 25 10:45:12 2014 +0200
    80.3 @@ -68,8 +68,7 @@
    80.4  import javax.tools.StandardJavaFileManager;
    80.5  import javax.tools.StandardLocation;
    80.6  import javax.tools.ToolProvider;
    80.7 -import static org.testng.Assert.assertFalse;
    80.8 -import static org.testng.Assert.fail;
    80.9 +import static org.testng.Assert.*;
   80.10  
   80.11  /**
   80.12   *
   80.13 @@ -269,6 +268,9 @@
   80.14      void assertErrors() {
   80.15          assertFalse(getErrors().isEmpty(), "There are supposed to be some errors");
   80.16      }
   80.17 +    void assertNoErrors() {
   80.18 +        assertTrue(getErrors().isEmpty(), "There are supposed to be no errors: " + getErrors());
   80.19 +    }
   80.20  
   80.21      void assertError(String expMsg) {
   80.22          StringBuilder sb = new StringBuilder();
    81.1 --- a/json/src/test/java/net/java/html/json/MapModelTest.java	Wed Mar 12 20:26:58 2014 +0100
    81.2 +++ b/json/src/test/java/net/java/html/json/MapModelTest.java	Fri Jul 25 10:45:12 2014 +0200
    81.3 @@ -119,6 +119,22 @@
    81.4          assertEquals(o.changes, 2, "Snd change");
    81.5      }
    81.6      
    81.7 +    @Test public void canSetEnumAsString() throws Exception {
    81.8 +        Person p = Models.bind(new Person(), c);
    81.9 +        p.setFirstName("Jirka");
   81.10 +        p.setSex(Sex.MALE);
   81.11 +        
   81.12 +        Map m = (Map)Models.toRaw(p);
   81.13 +        Object v = m.get("sex");
   81.14 +        assertNotNull(v, "Value should be in the map");
   81.15 +        assertEquals(v.getClass(), One.class, "It is instance of One");
   81.16 +        One o = (One)v;
   81.17 +        
   81.18 +        o.set("FEMALE");
   81.19 +
   81.20 +        assertEquals(p.getSex(), Sex.FEMALE, "Changed to female");
   81.21 +    }
   81.22 +    
   81.23      @Test public void derivedProperty() throws Exception {
   81.24          Person p = Models.bind(new Person(), c);
   81.25          
    82.1 --- a/json/src/test/java/net/java/html/json/ModelProcessorTest.java	Wed Mar 12 20:26:58 2014 +0100
    82.2 +++ b/json/src/test/java/net/java/html/json/ModelProcessorTest.java	Fri Jul 25 10:45:12 2014 +0200
    82.3 @@ -278,7 +278,84 @@
    82.4          res.assertErrors();
    82.5          res.assertError("not find doesNotExist");
    82.6      }
    82.7 +    
    82.8 +    @Test public void usingListIsOK() throws IOException {
    82.9 +        Compile res = Compile.create("", "package x;\n"
   82.10 +            + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
   82.11 +            + "  @net.java.html.json.Property(name=\"x\", type=String.class)\n"
   82.12 +            + "})\n"
   82.13 +            + "class UseOnReceive {\n"
   82.14 +            + "  @net.java.html.json.OnReceive(url=\"http://nowhere.com\")\n"
   82.15 +            + "  static void onMessage(MyModel model, java.util.List<MyData> value) {\n"
   82.16 +            + "  }\n"
   82.17 +            + "\n"
   82.18 +            + "  @net.java.html.json.Model(className=\"MyData\", properties={\n"
   82.19 +            + "  })\n"
   82.20 +            + "  static class MyDataModel {\n"
   82.21 +            + "  }\n"
   82.22 +            + "}\n"
   82.23 +        );
   82.24 +        res.assertNoErrors();
   82.25 +    }
   82.26  
   82.27 +    @Test public void functionAndPropertyCollide() throws IOException {
   82.28 +        Compile res = Compile.create("", "package x;\n"
   82.29 +            + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
   82.30 +            + "  @net.java.html.json.Property(name=\"x\", type=String.class)\n"
   82.31 +            + "})\n"
   82.32 +            + "class Collision {\n"
   82.33 +            + "  @net.java.html.json.Function\n"
   82.34 +            + "  static void x(MyModel model, String value) {\n"
   82.35 +            + "  }\n"
   82.36 +            + "}\n"
   82.37 +        );
   82.38 +        res.assertErrors();
   82.39 +        res.assertError("cannot have the name");
   82.40 +    }
   82.41 +
   82.42 +    @Test public void twoPropertiesCollide() throws IOException {
   82.43 +        Compile res = Compile.create("", "package x;\n"
   82.44 +            + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
   82.45 +            + "  @net.java.html.json.Property(name=\"x\", type=String.class),\n"
   82.46 +            + "  @net.java.html.json.Property(name=\"x\", type=int.class)\n"
   82.47 +            + "})\n"
   82.48 +            + "class Collision {\n"
   82.49 +            + "}\n"
   82.50 +        );
   82.51 +        res.assertErrors();
   82.52 +        res.assertError("Cannot have the name");
   82.53 +    }
   82.54 +
   82.55 +    @Test public void propertyAndComputedOneCollide() throws IOException {
   82.56 +        Compile res = Compile.create("", "package x;\n"
   82.57 +            + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
   82.58 +            + "  @net.java.html.json.Property(name=\"x\", type=String.class),\n"
   82.59 +            + "})\n"
   82.60 +            + "class Collision {\n"
   82.61 +            + "  @net.java.html.json.ComputedProperty static int x(String x) {\n"
   82.62 +            + "    return x.length();\n"
   82.63 +            + "  }\n"
   82.64 +            + "}\n"
   82.65 +        );
   82.66 +        res.assertErrors();
   82.67 +        res.assertError("Cannot have the name");
   82.68 +    }
   82.69 +    
   82.70 +    @Test public void onWebSocketJustTwoArgs() throws IOException {
   82.71 +        Compile res = Compile.create("", "package x;\n"
   82.72 +            + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
   82.73 +            + "  @net.java.html.json.Property(name=\"x\", type=String.class)\n"
   82.74 +            + "})\n"
   82.75 +            + "class UseOnReceive {\n"
   82.76 +            + "  @net.java.html.json.OnReceive(url=\"http://nowhere.com\", method=\"WebSocket\")\n"
   82.77 +            + "  static void onMessage(MyModel model, String value, int arg) {\n"
   82.78 +            + "  }\n"
   82.79 +            + "}\n"
   82.80 +        );
   82.81 +        res.assertErrors();
   82.82 +        res.assertError("only have two arg");
   82.83 +    }
   82.84 +    
   82.85      @Test public void onErrorWouldHaveToBeStatic() throws IOException {
   82.86          Compile res = Compile.create("", "package x;\n"
   82.87              + "@net.java.html.json.Model(className=\"MyModel\", properties= {\n"
    83.1 --- a/json/src/test/java/net/java/html/json/ModelsTest.java	Wed Mar 12 20:26:58 2014 +0100
    83.2 +++ b/json/src/test/java/net/java/html/json/ModelsTest.java	Fri Jul 25 10:45:12 2014 +0200
    83.3 @@ -47,7 +47,7 @@
    83.4  
    83.5  /**
    83.6   *
    83.7 - * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    83.8 + * @author Jaroslav Tulach
    83.9   */
   83.10  public class ModelsTest {
   83.11      
    84.1 --- a/json/src/test/java/net/java/html/json/OperationTest.java	Wed Mar 12 20:26:58 2014 +0100
    84.2 +++ b/json/src/test/java/net/java/html/json/OperationTest.java	Fri Jul 25 10:45:12 2014 +0200
    84.3 @@ -67,6 +67,11 @@
    84.4              m.getNames().add(name.toUpperCase());
    84.5          }
    84.6      }
    84.7 +    
    84.8 +    @ModelOperation static void copy(OpModel m, OpModel orig) {
    84.9 +        m.getNames().clear();
   84.10 +        m.getNames().addAll(orig.getNames());
   84.11 +    }
   84.12  
   84.13      @Test public void addOneToTheModel() {
   84.14          BrwsrCtx ctx = Contexts.newBuilder().build();
   84.15 @@ -108,4 +113,13 @@
   84.16              fail("There should be at least one inner class: " + cnt);
   84.17          }
   84.18      }
   84.19 +    
   84.20 +    @Test public void copyOperation() {
   84.21 +        OpModel orig = new OpModel("Ahoj", "Jardo");
   84.22 +        OpModel n = new OpModel();
   84.23 +        n.copy(orig);
   84.24 +        assertEquals(n.getNames().size(), 2, "Two elems");
   84.25 +        assertEquals(n.getNames().get(0), "Ahoj", "1st");
   84.26 +        assertEquals(n.getNames().get(1), "Jardo", "2nd");
   84.27 +    }
   84.28  }
    85.1 --- a/json/src/test/java/net/java/html/json/PersonImpl.java	Wed Mar 12 20:26:58 2014 +0100
    85.2 +++ b/json/src/test/java/net/java/html/json/PersonImpl.java	Fri Jul 25 10:45:12 2014 +0200
    85.3 @@ -98,6 +98,10 @@
    85.4          @Property(array = true, name = "sex", type = Sex.class)
    85.5      })
    85.6      public static class PeopleImpl {
    85.7 +        @ModelOperation static void addAge42(People p) {
    85.8 +            p.getAge().add(42);
    85.9 +        }
   85.10 +        
   85.11          @Function static void inInnerClass(People p) throws IOException {
   85.12          }
   85.13      }
    86.1 --- a/json/src/test/java/org/netbeans/html/json/impl/EmployeeImpl.java	Wed Mar 12 20:26:58 2014 +0100
    86.2 +++ b/json/src/test/java/org/netbeans/html/json/impl/EmployeeImpl.java	Fri Jul 25 10:45:12 2014 +0200
    86.3 @@ -42,6 +42,7 @@
    86.4   */
    86.5  package org.netbeans.html.json.impl;
    86.6  
    86.7 +import java.util.List;
    86.8  import net.java.html.json.Model;
    86.9  import net.java.html.json.OnReceive;
   86.10  import net.java.html.json.Person;
   86.11 @@ -53,11 +54,48 @@
   86.12   */
   86.13  @Model(className = "Employee", properties = {
   86.14      @Property(name = "person", type = Person.class),
   86.15 -    @Property(name = "employer", type = Employer.class)
   86.16 +    @Property(name = "employer", type = Employer.class),
   86.17 +    @Property(name = "call", type = Call.class)
   86.18  })
   86.19  public class EmployeeImpl {
   86.20      @OnReceive(url = "some/url")
   86.21      static void changePersonality(Employee e, Person p) {
   86.22          e.setPerson(p);
   86.23      }
   86.24 +
   86.25 +    private static void callChangePers(Employee e) {
   86.26 +        Person per = new Person();
   86.27 +        e.changePersonalities(10, 3.14, "Ahoj", per);
   86.28 +        e.updatePersonalities("kuk", new Person(), 1, 2, "3", new Person());
   86.29 +        e.socketPersonalities("where", null);
   86.30 +    }
   86.31 +
   86.32 +    @OnReceive(url = "some/other/url")
   86.33 +    static void changePersonalities(Employee e, List<Person> data, int i, double d, String s, Person o) {
   86.34 +        e.setCall(new Call(i, d, s, o, data.toArray(new Person[0])));
   86.35 +    }
   86.36 +
   86.37 +    @OnReceive(url = "{url}", method = "PUT", data = Person.class)
   86.38 +    static void updatePersonalities(Employee e, List<Person> p, int i, double d, String s, Person o) {
   86.39 +        e.setPerson(p.get(0));
   86.40 +    }
   86.41 +
   86.42 +    @OnReceive(url = "{url}", method = "WebSocket", data = Person.class)
   86.43 +    static void socketPersonalities(Employee e, List<Person> p) {
   86.44 +        e.setPerson(p.get(0));
   86.45 +    }
   86.46 +    @OnReceive(url = "{url}", method = "WebSocket", data = Person.class)
   86.47 +    static void socketArrayPersonalities(Employee e, Person[] p) {
   86.48 +        e.setPerson(p[0]);
   86.49 +    }
   86.50 +    
   86.51 +    @Model(className="Call", properties = {
   86.52 +        @Property(name = "i", type=int.class),
   86.53 +        @Property(name = "d", type=double.class),
   86.54 +        @Property(name = "s", type=String.class),
   86.55 +        @Property(name = "p", type=Person.class),
   86.56 +        @Property(name = "data", type=Person.class, array = true)
   86.57 +    })
   86.58 +    static class CallModel {
   86.59 +    }
   86.60  }
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/json/src/test/java/org/netbeans/html/json/impl/OnReceiveTest.java	Fri Jul 25 10:45:12 2014 +0200
    87.3 @@ -0,0 +1,112 @@
    87.4 +/**
    87.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    87.6 + *
    87.7 + * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    87.8 + *
    87.9 + * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   87.10 + * Other names may be trademarks of their respective owners.
   87.11 + *
   87.12 + * The contents of this file are subject to the terms of either the GNU
   87.13 + * General Public License Version 2 only ("GPL") or the Common
   87.14 + * Development and Distribution License("CDDL") (collectively, the
   87.15 + * "License"). You may not use this file except in compliance with the
   87.16 + * License. You can obtain a copy of the License at
   87.17 + * http://www.netbeans.org/cddl-gplv2.html
   87.18 + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   87.19 + * specific language governing permissions and limitations under the
   87.20 + * License.  When distributing the software, include this License Header
   87.21 + * Notice in each file and include the License file at
   87.22 + * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   87.23 + * particular file as subject to the "Classpath" exception as provided
   87.24 + * by Oracle in the GPL Version 2 section of the License file that
   87.25 + * accompanied this code. If applicable, add the following below the
   87.26 + * License Header, with the fields enclosed by brackets [] replaced by
   87.27 + * your own identifying information:
   87.28 + * "Portions Copyrighted [year] [name of copyright owner]"
   87.29 + *
   87.30 + * Contributor(s):
   87.31 + *
   87.32 + * The Original Software is NetBeans. The Initial Developer of the Original
   87.33 + * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   87.34 + *
   87.35 + * If you wish your version of this file to be governed by only the CDDL
   87.36 + * or only the GPL Version 2, indicate your decision by adding
   87.37 + * "[Contributor] elects to include this software in this distribution
   87.38 + * under the [CDDL or GPL Version 2] license." If you do not indicate a
   87.39 + * single choice of license, a recipient has the option to distribute
   87.40 + * your version of this file under either the CDDL, the GPL Version 2 or
   87.41 + * to extend the choice of license to its licensees as provided above.
   87.42 + * However, if you add GPL Version 2 code and therefore, elected the GPL
   87.43 + * Version 2 license, then the option applies only if the new code is
   87.44 + * made subject to such option by the copyright holder.
   87.45 + */
   87.46 +package org.netbeans.html.json.impl;
   87.47 +
   87.48 +import java.io.IOException;
   87.49 +import java.io.InputStream;
   87.50 +import java.util.HashMap;
   87.51 +import java.util.Map;
   87.52 +import net.java.html.BrwsrCtx;
   87.53 +import net.java.html.json.Models;
   87.54 +import net.java.html.json.Person;
   87.55 +import org.apidesign.html.context.spi.Contexts;
   87.56 +import org.apidesign.html.json.spi.JSONCall;
   87.57 +import org.apidesign.html.json.spi.Transfer;
   87.58 +import static org.testng.Assert.*;
   87.59 +import org.testng.annotations.Test;
   87.60 +
   87.61 +/**
   87.62 + *
   87.63 + * @author Jaroslav Tulach <jtulach@netbeans.org>
   87.64 + */
   87.65 +public class OnReceiveTest {
   87.66 +    @Test public void performJSONCall() {
   87.67 +        MockTrans mt = new MockTrans();
   87.68 +        BrwsrCtx ctx = Contexts.newBuilder().register(Transfer.class, mt, 1).build();
   87.69 +        
   87.70 +        Employee e = Models.bind(new Employee(), ctx);
   87.71 +        e.setCall(null);
   87.72 +        Person p = new Person();
   87.73 +        
   87.74 +        mt.result = new HashMap<String, String>();
   87.75 +        mt.result.put("firstName", "Jarda");
   87.76 +        mt.result.put("lastName", "Tulach");
   87.77 +        e.changePersonalities(1, 2.0, "3", p);
   87.78 +        final Call c = e.getCall();
   87.79 +        assertNotNull(c, "A call has been made");
   87.80 +        assertEquals(c.getI(), 1);
   87.81 +        assertEquals(c.getD(), 2.0);
   87.82 +        assertEquals(c.getS(), "3");
   87.83 +        assertEquals(c.getP(), p);
   87.84 +        assertEquals(c.getData().size(), 1, "One result sent over wire");
   87.85 +        assertEquals(c.getData().get(0).getFirstName(), "Jarda");
   87.86 +        assertEquals(c.getData().get(0).getLastName(), "Tulach");
   87.87 +    }
   87.88 +
   87.89 +    
   87.90 +    public static class MockTrans implements Transfer {
   87.91 +        Map<String,String> result;
   87.92 +        
   87.93 +        @Override
   87.94 +        public void extract(Object obj, String[] props, Object[] values) {
   87.95 +            assertTrue(obj instanceof Map, "It is a map: " + obj);
   87.96 +            Map<?,?> mt = (Map<?,?>) obj;
   87.97 +            for (int i = 0; i < props.length; i++) {
   87.98 +                values[i] = mt.get(props[i]);
   87.99 +            }
  87.100 +        }
  87.101 +
  87.102 +        @Override
  87.103 +        public Object toJSON(InputStream is) throws IOException {
  87.104 +            throw new IOException();
  87.105 +        }
  87.106 +
  87.107 +        @Override
  87.108 +        public void loadJSON(JSONCall call) {
  87.109 +            Object r = result;
  87.110 +            assertNotNull(r, "We need a reply!");
  87.111 +            result = null;
  87.112 +            call.notifySuccess(r);
  87.113 +        }
  87.114 +    }
  87.115 +}
    88.1 --- a/ko-archetype-test/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    88.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.3 @@ -1,58 +0,0 @@
    88.4 -<?xml version="1.0"?>
    88.5 -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    88.6 -    <modelVersion>4.0.0</modelVersion>
    88.7 -    <parent>
    88.8 -        <groupId>org.netbeans.html</groupId>
    88.9 -        <artifactId>pom</artifactId>
   88.10 -        <version>0.8-SNAPSHOT</version>
   88.11 -    </parent>
   88.12 -    <groupId>org.netbeans.html</groupId>
   88.13 -    <artifactId>ko-archetype-test</artifactId>
   88.14 -    <version>0.8-SNAPSHOT</version>
   88.15 -    <name>Knockout 4 Java Archetype Test</name>
   88.16 -    <url>http://maven.apache.org</url>
   88.17 -    <description>Verifies the Knockout &amp; net.java.html.json archetype behaves properly.</description>
   88.18 -    <properties>
   88.19 -        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   88.20 -    </properties>
   88.21 -    <build>
   88.22 -        <plugins>
   88.23 -            <plugin>
   88.24 -                <artifactId>maven-failsafe-plugin</artifactId>
   88.25 -                <version>2.16</version>
   88.26 -                <executions>
   88.27 -                    <execution>
   88.28 -                        <goals>
   88.29 -                            <goal>integration-test</goal>
   88.30 -                            <goal>verify</goal>
   88.31 -                        </goals>
   88.32 -                    </execution>
   88.33 -                </executions>
   88.34 -            </plugin>
   88.35 -        </plugins>
   88.36 -    </build>
   88.37 -    <dependencies>
   88.38 -        <dependency>
   88.39 -            <groupId>org.apidesign.html</groupId>
   88.40 -            <artifactId>knockout4j-archetype</artifactId>
   88.41 -            <version>${project.version}</version>
   88.42 -        </dependency>
   88.43 -        <dependency>
   88.44 -            <groupId>org.testng</groupId>
   88.45 -            <artifactId>testng</artifactId>
   88.46 -            <scope>test</scope>
   88.47 -        </dependency>
   88.48 -        <dependency>                                
   88.49 -            <groupId>org.apache.maven.shared</groupId>
   88.50 -            <artifactId>maven-verifier</artifactId>
   88.51 -            <version>1.4</version>
   88.52 -            <scope>test</scope>
   88.53 -        </dependency>
   88.54 -        <dependency>
   88.55 -            <groupId>${project.groupId}</groupId>
   88.56 -            <artifactId>ko4j</artifactId>
   88.57 -            <version>${project.version}</version>
   88.58 -            <scope>provided</scope>
   88.59 -        </dependency>
   88.60 -    </dependencies>
   88.61 -</project>
    89.1 --- a/ko-archetype-test/src/test/java/org/netbeans/html/archetype/test/ArchetypeVersionIT.java	Wed Mar 12 20:26:58 2014 +0100
    89.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.3 @@ -1,128 +0,0 @@
    89.4 -/**
    89.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    89.6 - *
    89.7 - * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    89.8 - *
    89.9 - * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   89.10 - * Other names may be trademarks of their respective owners.
   89.11 - *
   89.12 - * The contents of this file are subject to the terms of either the GNU
   89.13 - * General Public License Version 2 only ("GPL") or the Common
   89.14 - * Development and Distribution License("CDDL") (collectively, the
   89.15 - * "License"). You may not use this file except in compliance with the
   89.16 - * License. You can obtain a copy of the License at
   89.17 - * http://www.netbeans.org/cddl-gplv2.html
   89.18 - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   89.19 - * specific language governing permissions and limitations under the
   89.20 - * License.  When distributing the software, include this License Header
   89.21 - * Notice in each file and include the License file at
   89.22 - * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   89.23 - * particular file as subject to the "Classpath" exception as provided
   89.24 - * by Oracle in the GPL Version 2 section of the License file that
   89.25 - * accompanied this code. If applicable, add the following below the
   89.26 - * License Header, with the fields enclosed by brackets [] replaced by
   89.27 - * your own identifying information:
   89.28 - * "Portions Copyrighted [year] [name of copyright owner]"
   89.29 - *
   89.30 - * Contributor(s):
   89.31 - *
   89.32 - * The Original Software is NetBeans. The Initial Developer of the Original
   89.33 - * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   89.34 - *
   89.35 - * If you wish your version of this file to be governed by only the CDDL
   89.36 - * or only the GPL Version 2, indicate your decision by adding
   89.37 - * "[Contributor] elects to include this software in this distribution
   89.38 - * under the [CDDL or GPL Version 2] license." If you do not indicate a
   89.39 - * single choice of license, a recipient has the option to distribute
   89.40 - * your version of this file under either the CDDL, the GPL Version 2 or
   89.41 - * to extend the choice of license to its licensees as provided above.
   89.42 - * However, if you add GPL Version 2 code and therefore, elected the GPL
   89.43 - * Version 2 license, then the option applies only if the new code is
   89.44 - * made subject to such option by the copyright holder.
   89.45 - */
   89.46 -package org.netbeans.html.archetype.test;
   89.47 -
   89.48 -import java.io.IOException;
   89.49 -import java.net.URL;
   89.50 -import javax.xml.XMLConstants;
   89.51 -import javax.xml.parsers.DocumentBuilderFactory;
   89.52 -import javax.xml.parsers.ParserConfigurationException;
   89.53 -import javax.xml.xpath.XPathConstants;
   89.54 -import javax.xml.xpath.XPathExpression;
   89.55 -import javax.xml.xpath.XPathExpressionException;
   89.56 -import javax.xml.xpath.XPathFactory;
   89.57 -import javax.xml.xpath.XPathFactoryConfigurationException;
   89.58 -import org.testng.annotations.Test;
   89.59 -import static org.testng.Assert.*;
   89.60 -import org.testng.annotations.BeforeClass;
   89.61 -import org.w3c.dom.Document;
   89.62 -import org.w3c.dom.NodeList;
   89.63 -import org.xml.sax.SAXException;
   89.64 -
   89.65 -/**
   89.66 - *
   89.67 - * @author Jaroslav Tulach <jtulach@netbeans.org>
   89.68 - */
   89.69 -public class ArchetypeVersionIT {
   89.70 -    private String version;
   89.71 -    
   89.72 -    public ArchetypeVersionIT() {
   89.73 -    }
   89.74 -    
   89.75 -    @BeforeClass public void readCurrentVersion() throws Exception {
   89.76 -        version = findCurrentVersion();
   89.77 -        assertFalse(version.isEmpty(), "There should be some version string");
   89.78 -    }
   89.79 -    
   89.80 -
   89.81 -    @Test public void testComparePomDepsVersions() throws Exception {
   89.82 -        final ClassLoader l = ArchetypeVersionIT.class.getClassLoader();
   89.83 -        URL r = l.getResource("archetype-resources/pom.xml");
   89.84 -        assertNotNull(r, "Archetype pom found");
   89.85 -        
   89.86 -        final XPathFactory fact = XPathFactory.newInstance();
   89.87 -        XPathExpression xp2 = fact.newXPath().compile(
   89.88 -            "//properties/net.java.html.version/text()"
   89.89 -        );
   89.90 -        
   89.91 -        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(r.openStream());
   89.92 -        String arch = (String) xp2.evaluate(dom, XPathConstants.STRING);
   89.93 -
   89.94 -        assertEquals(arch, version, "net.java.html.json dependency needs to be on latest version");
   89.95 -    }
   89.96 -    
   89.97 -    @Test public void testNbActions() throws Exception {
   89.98 -        final ClassLoader l = ArchetypeVersionIT.class.getClassLoader();
   89.99 -        URL r = l.getResource("archetype-resources/nbactions.xml");
  89.100 -        assertNotNull(r, "Archetype nb file found");
  89.101 -        
  89.102 -        final XPathFactory fact = XPathFactory.newInstance();
  89.103 -        XPathExpression xp2 = fact.newXPath().compile(
  89.104 -            "//goal/text()"
  89.105 -        );
  89.106 -        
  89.107 -        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(r.openStream());
  89.108 -        NodeList goals = (NodeList) xp2.evaluate(dom, XPathConstants.NODESET);
  89.109 -        
  89.110 -        for (int i = 0; i < goals.getLength(); i++) {
  89.111 -            String s = goals.item(i).getTextContent();
  89.112 -            if (s.contains("netbeans")) {
  89.113 -                assertFalse(s.matches(".*netbeans.*[0-9].*"), "No numbers: " + s);
  89.114 -            }
  89.115 -        }
  89.116 -    }
  89.117 -
  89.118 -    static String findCurrentVersion() throws XPathExpressionException, IOException, ParserConfigurationException, SAXException, XPathFactoryConfigurationException {
  89.119 -        final ClassLoader l = ArchetypeVersionIT.class.getClassLoader();
  89.120 -        URL u = l.getResource("META-INF/maven/org.apidesign.html/knockout4j-archetype/pom.xml");
  89.121 -        assertNotNull(u, "Own pom found: " + System.getProperty("java.class.path"));
  89.122 -
  89.123 -        final XPathFactory fact = XPathFactory.newInstance();
  89.124 -        fact.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
  89.125 -
  89.126 -        XPathExpression xp = fact.newXPath().compile("project/version/text()");
  89.127 -        
  89.128 -        Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(u.openStream());
  89.129 -        return xp.evaluate(dom);
  89.130 -    }
  89.131 -}
    90.1 --- a/ko-archetype-test/src/test/java/org/netbeans/html/archetype/test/VerifyArchetypeIT.java	Wed Mar 12 20:26:58 2014 +0100
    90.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.3 @@ -1,99 +0,0 @@
    90.4 -/**
    90.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    90.6 - *
    90.7 - * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    90.8 - *
    90.9 - * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   90.10 - * Other names may be trademarks of their respective owners.
   90.11 - *
   90.12 - * The contents of this file are subject to the terms of either the GNU
   90.13 - * General Public License Version 2 only ("GPL") or the Common
   90.14 - * Development and Distribution License("CDDL") (collectively, the
   90.15 - * "License"). You may not use this file except in compliance with the
   90.16 - * License. You can obtain a copy of the License at
   90.17 - * http://www.netbeans.org/cddl-gplv2.html
   90.18 - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   90.19 - * specific language governing permissions and limitations under the
   90.20 - * License.  When distributing the software, include this License Header
   90.21 - * Notice in each file and include the License file at
   90.22 - * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   90.23 - * particular file as subject to the "Classpath" exception as provided
   90.24 - * by Oracle in the GPL Version 2 section of the License file that
   90.25 - * accompanied this code. If applicable, add the following below the
   90.26 - * License Header, with the fields enclosed by brackets [] replaced by
   90.27 - * your own identifying information:
   90.28 - * "Portions Copyrighted [year] [name of copyright owner]"
   90.29 - *
   90.30 - * Contributor(s):
   90.31 - *
   90.32 - * The Original Software is NetBeans. The Initial Developer of the Original
   90.33 - * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   90.34 - *
   90.35 - * If you wish your version of this file to be governed by only the CDDL
   90.36 - * or only the GPL Version 2, indicate your decision by adding
   90.37 - * "[Contributor] elects to include this software in this distribution
   90.38 - * under the [CDDL or GPL Version 2] license." If you do not indicate a
   90.39 - * single choice of license, a recipient has the option to distribute
   90.40 - * your version of this file under either the CDDL, the GPL Version 2 or
   90.41 - * to extend the choice of license to its licensees as provided above.
   90.42 - * However, if you add GPL Version 2 code and therefore, elected the GPL
   90.43 - * Version 2 license, then the option applies only if the new code is
   90.44 - * made subject to such option by the copyright holder.
   90.45 - */
   90.46 -package org.netbeans.html.archetype.test;
   90.47 -
   90.48 -import java.io.File;
   90.49 -import java.util.Properties;
   90.50 -import org.apache.maven.it.Verifier;
   90.51 -import org.testng.annotations.Test;
   90.52 -import static org.testng.Assert.*;
   90.53 -
   90.54 -/**
   90.55 - *
   90.56 - * @author Jaroslav Tulach <jtulach@netbeans.org>
   90.57 - */
   90.58 -public class VerifyArchetypeIT {
   90.59 -    @Test public void projectCompiles() throws Exception {
   90.60 -        final File dir = new File("target/tests/fxcompile/").getAbsoluteFile();
   90.61 -        generateFromArchetype(dir);
   90.62 -        
   90.63 -        File created = new File(dir, "o-a-test");
   90.64 -        assertTrue(created.isDirectory(), "Project created");
   90.65 -        assertTrue(new File(created, "pom.xml").isFile(), "Pom file is in there");
   90.66 -        
   90.67 -        Verifier v = new Verifier(created.getAbsolutePath());
   90.68 -        v.executeGoal("verify");
   90.69 -        
   90.70 -        v.verifyErrorFreeLog();
   90.71 -        
   90.72 -        for (String l : v.loadFile(v.getBasedir(), v.getLogFileName(), false)) {
   90.73 -            if (l.contains("j2js")) {
   90.74 -                fail("No pre-compilaton:\n" + l);
   90.75 -            }
   90.76 -        }
   90.77 -        
   90.78 -        v.verifyTextInLog("fxcompile/o-a-test/target/o-a-test-1.0-SNAPSHOT-html.java.net.zip");
   90.79 -    }
   90.80 -    
   90.81 -    private Verifier generateFromArchetype(final File dir, String... params) throws Exception {
   90.82 -        Verifier v = new Verifier(dir.getAbsolutePath());
   90.83 -        v.setAutoclean(false);
   90.84 -        v.setLogFileName("generate.log");
   90.85 -        v.deleteDirectory("");
   90.86 -        dir.mkdirs();
   90.87 -        Properties sysProp = v.getSystemProperties();
   90.88 -        sysProp.put("groupId", "org.someuser.test");
   90.89 -        sysProp.put("artifactId", "o-a-test");
   90.90 -        sysProp.put("package", "org.someuser.test.oat");
   90.91 -        sysProp.put("archetypeGroupId", "org.apidesign.html");
   90.92 -        sysProp.put("archetypeArtifactId", "knockout4j-archetype");
   90.93 -        sysProp.put("archetypeVersion", ArchetypeVersionIT.findCurrentVersion());
   90.94 -        
   90.95 -        for (String p : params) {
   90.96 -            v.addCliOption(p);
   90.97 -        }
   90.98 -        v.executeGoal("archetype:generate");
   90.99 -        v.verifyErrorFreeLog();
  90.100 -        return v;
  90.101 -    }
  90.102 -}
    91.1 --- a/ko-archetype/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    91.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.3 @@ -1,57 +0,0 @@
    91.4 -<?xml version="1.0" encoding="UTF-8"?>
    91.5 -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    91.6 -  <modelVersion>4.0.0</modelVersion>
    91.7 -  <parent>
    91.8 -    <groupId>org.netbeans.html</groupId>
    91.9 -    <artifactId>pom</artifactId>
   91.10 -    <version>0.8-SNAPSHOT</version>
   91.11 -  </parent>
   91.12 -  <groupId>org.apidesign.html</groupId>
   91.13 -  <artifactId>knockout4j-archetype</artifactId>
   91.14 -  <version>0.8-SNAPSHOT</version>
   91.15 -  <packaging>jar</packaging>
   91.16 -  <name>Knockout 4 Java Maven Archetype</name>
   91.17 -  <description>
   91.18 -      HTML page with Knockout.js bindings driven by application model
   91.19 -      written in Java. Use your favorite language to code. Use
   91.20 -      HTML as a lightweight rendering toolkit. Deploy using JavaFX and 
   91.21 -      Java virtual machine.
   91.22 -  </description>
   91.23 -  <build>
   91.24 -      <resources>
   91.25 -          <resource>
   91.26 -            <directory>src/main/resources</directory>
   91.27 -            <filtering>true</filtering>
   91.28 -            <includes>
   91.29 -                <include>**/pom.xml</include>
   91.30 -            </includes>
   91.31 -          </resource>
   91.32 -          <resource>
   91.33 -            <directory>src/main/resources</directory>
   91.34 -            <filtering>false</filtering>
   91.35 -            <excludes>
   91.36 -                <exclude>**/pom.xml</exclude>
   91.37 -            </excludes>
   91.38 -          </resource>
   91.39 -      </resources>      
   91.40 -      <plugins>
   91.41 -          <plugin>
   91.42 -              <groupId>org.apache.maven.plugins</groupId>
   91.43 -              <artifactId>maven-resources-plugin</artifactId>
   91.44 -              <version>2.6</version>
   91.45 -              <configuration>
   91.46 -                  <escapeString>\</escapeString>
   91.47 -                  <target>1.6</target>
   91.48 -              </configuration>
   91.49 -          </plugin>
   91.50 -          <plugin>
   91.51 -              <artifactId>maven-javadoc-plugin</artifactId>
   91.52 -              <version>2.9</version>
   91.53 -              <configuration>
   91.54 -                  <subpackages />
   91.55 -                  <skip>true</skip>
   91.56 -              </configuration>
   91.57 -          </plugin>          
   91.58 -      </plugins>
   91.59 -  </build>
   91.60 -</project>
    92.1 --- a/ko-archetype/src/main/java/org/netbeans/html/archetype/package-info.java	Wed Mar 12 20:26:58 2014 +0100
    92.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.3 @@ -1,43 +0,0 @@
    92.4 -/**
    92.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    92.6 - *
    92.7 - * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
    92.8 - *
    92.9 - * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   92.10 - * Other names may be trademarks of their respective owners.
   92.11 - *
   92.12 - * The contents of this file are subject to the terms of either the GNU
   92.13 - * General Public License Version 2 only ("GPL") or the Common
   92.14 - * Development and Distribution License("CDDL") (collectively, the
   92.15 - * "License"). You may not use this file except in compliance with the
   92.16 - * License. You can obtain a copy of the License at
   92.17 - * http://www.netbeans.org/cddl-gplv2.html
   92.18 - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
   92.19 - * specific language governing permissions and limitations under the
   92.20 - * License.  When distributing the software, include this License Header
   92.21 - * Notice in each file and include the License file at
   92.22 - * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
   92.23 - * particular file as subject to the "Classpath" exception as provided
   92.24 - * by Oracle in the GPL Version 2 section of the License file that
   92.25 - * accompanied this code. If applicable, add the following below the
   92.26 - * License Header, with the fields enclosed by brackets [] replaced by
   92.27 - * your own identifying information:
   92.28 - * "Portions Copyrighted [year] [name of copyright owner]"
   92.29 - *
   92.30 - * Contributor(s):
   92.31 - *
   92.32 - * The Original Software is NetBeans. The Initial Developer of the Original
   92.33 - * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
   92.34 - *
   92.35 - * If you wish your version of this file to be governed by only the CDDL
   92.36 - * or only the GPL Version 2, indicate your decision by adding
   92.37 - * "[Contributor] elects to include this software in this distribution
   92.38 - * under the [CDDL or GPL Version 2] license." If you do not indicate a
   92.39 - * single choice of license, a recipient has the option to distribute
   92.40 - * your version of this file under either the CDDL, the GPL Version 2 or
   92.41 - * to extend the choice of license to its licensees as provided above.
   92.42 - * However, if you add GPL Version 2 code and therefore, elected the GPL
   92.43 - * Version 2 license, then the option applies only if the new code is
   92.44 - * made subject to such option by the copyright holder.
   92.45 - */
   92.46 -package org.netbeans.html.archetype;
    93.1 --- a/ko-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml	Wed Mar 12 20:26:58 2014 +0100
    93.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.3 @@ -1,43 +0,0 @@
    93.4 -<?xml version="1.0" encoding="UTF-8"?>
    93.5 -<archetype-descriptor name="Knockout4Java Example">
    93.6 -  <fileSets>
    93.7 -    <fileSet filtered="true" packaged="true">
    93.8 -      <directory>src/main/java</directory>
    93.9 -      <includes>
   93.10 -        <include>**/*.java</include>
   93.11 -      </includes>
   93.12 -    </fileSet>
   93.13 -    <fileSet filtered="true" packaged="false">
   93.14 -      <directory>src/main/webapp/pages</directory>
   93.15 -      <includes>
   93.16 -        <include>**/*.xhtml</include>
   93.17 -        <include>**/*.html</include>
   93.18 -        <include>**/*.css</include>
   93.19 -      </includes>
   93.20 -    </fileSet>
   93.21 -    <fileSet filtered="true" packaged="true">
   93.22 -      <directory>src/test/java</directory>
   93.23 -      <includes>
   93.24 -        <include>**/*Test.java</include>
   93.25 -      </includes>
   93.26 -    </fileSet>
   93.27 -    <fileSet filtered="true" packaged="false">
   93.28 -      <directory>src/main/assembly</directory>
   93.29 -      <includes>
   93.30 -        <include>**/*.xml</include>
   93.31 -      </includes>
   93.32 -    </fileSet>
   93.33 -    <fileSet filtered="false" packaged="false">
   93.34 -      <directory></directory>
   93.35 -      <includes>
   93.36 -        <include>nbactions*.xml</include>
   93.37 -      </includes>
   93.38 -    </fileSet>
   93.39 -    <fileSet filtered="true" packaged="false">
   93.40 -      <directory>assembly</directory>
   93.41 -      <includes>
   93.42 -        <include>html.java.net-assembly.xml</include>
   93.43 -      </includes>
   93.44 -    </fileSet>
   93.45 -  </fileSets>    
   93.46 -</archetype-descriptor>
   93.47 \ No newline at end of file
    94.1 --- a/ko-archetype/src/main/resources/archetype-resources/nbactions.xml	Wed Mar 12 20:26:58 2014 +0100
    94.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.3 @@ -1,20 +0,0 @@
    94.4 -<?xml version="1.0" encoding="UTF-8"?>
    94.5 -<actions>
    94.6 -    <action>
    94.7 -        <actionName>run</actionName>
    94.8 -        <goals>
    94.9 -            <goal>process-classes</goal>
   94.10 -            <goal>exec:java</goal>
   94.11 -        </goals>
   94.12 -    </action>
   94.13 -    <action>
   94.14 -        <actionName>debug</actionName>
   94.15 -        <goals>
   94.16 -            <goal>process-classes</goal>
   94.17 -            <goal>exec:java</goal>
   94.18 -        </goals>
   94.19 -        <properties>
   94.20 -            <jpda.listen>maven</jpda.listen>
   94.21 -        </properties>
   94.22 -    </action>
   94.23 -</actions>
    95.1 --- a/ko-archetype/src/main/resources/archetype-resources/pom.xml	Wed Mar 12 20:26:58 2014 +0100
    95.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.3 @@ -1,170 +0,0 @@
    95.4 -<?xml version="1.0"?>
    95.5 -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    95.6 -  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    95.7 -  <modelVersion>4.0.0</modelVersion>
    95.8 -
    95.9 -  <groupId>\${groupId}</groupId>
   95.10 -  <artifactId>\${artifactId}</artifactId>
   95.11 -  <version>\${version}</version>
   95.12 -  <packaging>jar</packaging>
   95.13 -
   95.14 -  <name>\${artifactId}</name>
   95.15 -
   95.16 -  <repositories>
   95.17 -      <repository>
   95.18 -          <id>java.net</id>
   95.19 -          <name>Java.net</name>
   95.20 -          <url>https://maven.java.net/content/repositories/releases/</url>
   95.21 -          <snapshots>
   95.22 -              <enabled>true</enabled>
   95.23 -          </snapshots>
   95.24 -      </repository>
   95.25 -      <repository>
   95.26 -          <id>netbeans</id>
   95.27 -          <name>NetBeans</name>
   95.28 -          <url>http://bits.netbeans.org/maven2/</url>
   95.29 -      </repository>
   95.30 -  </repositories>
   95.31 -  <pluginRepositories>
   95.32 -      <pluginRepository>
   95.33 -          <id>java.net</id>
   95.34 -          <name>Java.net</name>
   95.35 -          <url>https://maven.java.net/content/repositories/releases/</url>
   95.36 -          <snapshots>
   95.37 -              <enabled>true</enabled>
   95.38 -          </snapshots>
   95.39 -      </pluginRepository>
   95.40 -  </pluginRepositories>
   95.41 -
   95.42 -  <properties>
   95.43 -    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   95.44 -    <net.java.html.version>${project.version}</net.java.html.version>
   95.45 -    <netbeans.compile.on.save>none</netbeans.compile.on.save>
   95.46 -  </properties>
   95.47 -  <build>
   95.48 -      <plugins>
   95.49 -          <plugin>
   95.50 -              <groupId>org.netbeans.html</groupId>
   95.51 -              <artifactId>html4j-maven-plugin</artifactId>
   95.52 -              <version>${net.java.html.version}</version>
   95.53 -              <executions>
   95.54 -                  <execution>
   95.55 -                      <id>js-classes</id>
   95.56 -                      <goals>
   95.57 -                          <goal>process-js-annotations</goal>
   95.58 -                      </goals>
   95.59 -                  </execution>
   95.60 -              </executions>
   95.61 -          </plugin>          
   95.62 -          <plugin>
   95.63 -              <groupId>org.apache.maven.plugins</groupId>
   95.64 -              <artifactId>maven-compiler-plugin</artifactId>
   95.65 -              <version>2.3.2</version>
   95.66 -              <configuration>
   95.67 -                  <source>1.7</source>
   95.68 -                  <target>1.7</target>
   95.69 -              </configuration>
   95.70 -          </plugin>
   95.71 -          <plugin>
   95.72 -              <groupId>org.apache.maven.plugins</groupId>
   95.73 -              <artifactId>maven-jar-plugin</artifactId>
   95.74 -              <version>2.4</version>
   95.75 -              <configuration>
   95.76 -                  <archive>
   95.77 -                      <manifest>
   95.78 -                          <mainClass>\${package}.Main</mainClass>
   95.79 -                          <addClasspath>true</addClasspath>
   95.80 -                          <classpathPrefix>lib/</classpathPrefix>
   95.81 -                      </manifest>
   95.82 -                  </archive>
   95.83 -              </configuration>
   95.84 -          </plugin>
   95.85 -          <plugin>
   95.86 -              <groupId>org.codehaus.mojo</groupId>
   95.87 -              <artifactId>exec-maven-plugin</artifactId>
   95.88 -              <version>1.2.1</version>
   95.89 -              <configuration>
   95.90 -                  <systemProperties>
   95.91 -                      <systemProperty>
   95.92 -                          <key>browser.rootdir</key>
   95.93 -                          <value>\${basedir}/src/main/webapp/</value>
   95.94 -                      </systemProperty>
   95.95 -                  </systemProperties>
   95.96 -                  <mainClass>\${package}.Main</mainClass>
   95.97 -              </configuration>
   95.98 -          </plugin>      
   95.99 -          <plugin>
  95.100 -              <artifactId>maven-assembly-plugin</artifactId>
  95.101 -              <version>2.4</version>
  95.102 -              <executions>
  95.103 -                  <execution>
  95.104 -                      <id>distro-assembly</id>
  95.105 -                      <phase>package</phase>
  95.106 -                      <goals>
  95.107 -                          <goal>single</goal>
  95.108 -                      </goals>
  95.109 -                      <configuration>
  95.110 -                          <descriptors>
  95.111 -                              <descriptor>src/main/assembly/html.java.net.xml</descriptor>
  95.112 -                          </descriptors>
  95.113 -                      </configuration>
  95.114 -                  </execution>
  95.115 -              </executions>                
  95.116 -          </plugin>      
  95.117 -      </plugins>
  95.118 -  </build>
  95.119 -  <dependencies>
  95.120 -    <dependency>
  95.121 -        <groupId>org.netbeans.html</groupId>
  95.122 -        <artifactId>net.java.html.json</artifactId>
  95.123 -        <version>\${net.java.html.version}</version>
  95.124 -    </dependency>
  95.125 -    <dependency>
  95.126 -        <groupId>org.netbeans.html</groupId>
  95.127 -        <artifactId>net.java.html.boot</artifactId>
  95.128 -        <version>\${net.java.html.version}</version>
  95.129 -    </dependency>
  95.130 -    <dependency>
  95.131 -        <groupId>org.netbeans.html</groupId>
  95.132 -        <artifactId>ko4j</artifactId>
  95.133 -        <version>\${net.java.html.version}</version>
  95.134 -        <scope>runtime</scope>
  95.135 -    </dependency>
  95.136 -    <dependency>
  95.137 -        <groupId>org.netbeans.html</groupId>
  95.138 -        <artifactId>net.java.html.boot.fx</artifactId>
  95.139 -        <version>\${net.java.html.version}</version>
  95.140 -        <scope>runtime</scope>
  95.141 -    </dependency>
  95.142 -    <dependency>
  95.143 -      <groupId>org.testng</groupId>
  95.144 -      <artifactId>testng</artifactId>
  95.145 -      <version>6.7</version>
  95.146 -      <scope>test</scope>
  95.147 -    </dependency>
  95.148 -  </dependencies>
  95.149 -  <profiles>
  95.150 -      <profile>
  95.151 -          <id>jdk18</id>
  95.152 -          <activation>
  95.153 -              <jdk>1.8</jdk>
  95.154 -          </activation>
  95.155 -          <build>
  95.156 -              <plugins>
  95.157 -                  <plugin>
  95.158 -                      <groupId>org.apache.maven.plugins</groupId>
  95.159 -                      <artifactId>maven-compiler-plugin</artifactId>
  95.160 -                      <version>2.3.2</version>
  95.161 -                      <configuration>
  95.162 -                        <source>1.7</source>
  95.163 -                        <target>1.8</target>
  95.164 -                        <compilerArguments>
  95.165 -                            <profile>compact1</profile>
  95.166 -                        </compilerArguments>
  95.167 -                      </configuration>
  95.168 -                  </plugin>
  95.169 -              </plugins>
  95.170 -          </build>
  95.171 -      </profile>
  95.172 -  </profiles>  
  95.173 -</project>
    96.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/main/assembly/html.java.net.xml	Wed Mar 12 20:26:58 2014 +0100
    96.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.3 @@ -1,32 +0,0 @@
    96.4 -<?xml version="1.0"?>
    96.5 -<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    96.6 -  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    96.7 -  
    96.8 -  <id>html.java.net</id>
    96.9 -  <formats>
   96.10 -      <format>zip</format>
   96.11 -  </formats>
   96.12 -  <baseDirectory>${project.build.finalName}-app</baseDirectory>
   96.13 -  <dependencySets>
   96.14 -    <dependencySet>
   96.15 -        <useProjectArtifact>false</useProjectArtifact>
   96.16 -        <scope>runtime</scope>
   96.17 -        <outputDirectory>lib</outputDirectory>
   96.18 -    </dependencySet>
   96.19 -  </dependencySets> 
   96.20 -  <files>
   96.21 -    <file>
   96.22 -      <source>${project.build.directory}/${project.build.finalName}.jar</source>
   96.23 -      <outputDirectory>/</outputDirectory>
   96.24 -    </file>
   96.25 -  </files>
   96.26 -  <fileSets>
   96.27 -    <fileSet>
   96.28 -       <directory>src/main/webapp/</directory>
   96.29 -       <outputDirectory>/</outputDirectory>
   96.30 -       <includes>
   96.31 -          <include>pages/**</include>
   96.32 -       </includes>
   96.33 -    </fileSet>
   96.34 -  </fileSets>
   96.35 -</assembly>
   96.36 \ No newline at end of file
    97.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/main/java/DataModel.java	Wed Mar 12 20:26:58 2014 +0100
    97.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.3 @@ -1,45 +0,0 @@
    97.4 -package ${package};
    97.5 -
    97.6 -import net.java.html.json.ComputedProperty;
    97.7 -import net.java.html.json.Function;
    97.8 -import net.java.html.json.Model;
    97.9 -import net.java.html.json.Property;
   97.10 -
   97.11 -/** Model annotation generates class Data with 
   97.12 - * one message property, boolean property and read only words property
   97.13 - */
   97.14 -@Model(className = "Data", properties = {
   97.15 -    @Property(name = "message", type = String.class),
   97.16 -    @Property(name = "on", type = boolean.class)
   97.17 -})
   97.18 -final class DataModel {
   97.19 -    @ComputedProperty static java.util.List<String> words(String message) {
   97.20 -        String[] arr = new String[6];
   97.21 -        String[] words = message == null ? new String[0] : message.split(" ", 6);
   97.22 -        for (int i = 0; i < 6; i++) {
   97.23 -            arr[i] = words.length > i ? words[i] : "!";
   97.24 -        }
   97.25 -        return java.util.Arrays.asList(arr);
   97.26 -    }
   97.27 -    
   97.28 -    @Function static void turnOn(Data model) {
   97.29 -        model.setOn(true);
   97.30 -    }
   97.31 -    
   97.32 -    @Function static void turnOff(final Data model) {
   97.33 -        confirmByUser("Really turn off?", new Runnable() {
   97.34 -            @Override
   97.35 -            public void run() {
   97.36 -                model.setOn(false);
   97.37 -            }
   97.38 -        });
   97.39 -    }
   97.40 -    
   97.41 -    /** Shows direct interaction with JavaScript */
   97.42 -    @net.java.html.js.JavaScriptBody(
   97.43 -        args = { "msg", "callback" }, 
   97.44 -        javacall = true, 
   97.45 -        body = "alert(msg); callback.@java.lang.Runnable::run()();"
   97.46 -    )
   97.47 -    static native void confirmByUser(String msg, Runnable callback);
   97.48 -}
    98.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/main/java/Main.java	Wed Mar 12 20:26:58 2014 +0100
    98.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.3 @@ -1,27 +0,0 @@
    98.4 -package ${package};
    98.5 -
    98.6 -import net.java.html.boot.BrowserBuilder;
    98.7 -
    98.8 -public final class Main {
    98.9 -    private Main() {
   98.10 -    }
   98.11 -    
   98.12 -    public static void main(String... args) throws Exception {
   98.13 -        BrowserBuilder.newBrowser().
   98.14 -            loadPage("pages/index.html").
   98.15 -            loadClass(Main.class).
   98.16 -            invoke("onPageLoad", args).
   98.17 -            showAndWait();
   98.18 -        System.exit(0);
   98.19 -    }
   98.20 -
   98.21 -    /**
   98.22 -     * Called when the page is ready.
   98.23 -     */
   98.24 -    public static void onPageLoad(String... args) throws Exception {
   98.25 -        Data d = new Data();
   98.26 -        d.setMessage("Hello World from HTML and Java!");
   98.27 -        d.applyBindings();
   98.28 -    }
   98.29 -    
   98.30 -}
    99.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/main/webapp/pages/index.html	Wed Mar 12 20:26:58 2014 +0100
    99.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.3 @@ -1,58 +0,0 @@
    99.4 -<!DOCTYPE html>
    99.5 -<html>
    99.6 -    <head>
    99.7 -        <title></title>
    99.8 -        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    99.9 -
   99.10 -        <style type="text/css">
   99.11 -            @-webkit-keyframes spin {
   99.12 -                0% { -webkit-transform: rotate(0deg); }
   99.13 -                100% { -webkit-transform: rotate(360deg); }
   99.14 -            }
   99.15 -
   99.16 -            .rotate {
   99.17 -                -webkit-animation-name: spin;
   99.18 -                -webkit-animation-duration: 3s;
   99.19 -                -webkit-animation-iteration-count: infinite;
   99.20 -                -webkit-animation-direction: alternate;
   99.21 -            }
   99.22 -
   99.23 -            #scene {
   99.24 -                position: relative;
   99.25 -                top: 60px;
   99.26 -                text-align: center;
   99.27 -            }
   99.28 -            
   99.29 -            #words span {
   99.30 -                border: 1px solid #ccc;
   99.31 -                background: rgba(255,255,155,0.8);
   99.32 -                text-align: center;
   99.33 -                font-size: 30px;                
   99.34 -                -webkit-box-shadow: inset 0 0 40px rgba(0,0,0,0.4);
   99.35 -                position: absolute;
   99.36 -            }
   99.37 -
   99.38 -            #words span:nth-child(1) { left: 45%; top: 0px; }
   99.39 -            #words span:nth-child(2) { left: 25%; top: 100px; }
   99.40 -            #words span:nth-child(3) { left: 65%; top: 100px; }
   99.41 -            #words span:nth-child(4) { left: 10%; top: 200px; }
   99.42 -            #words span:nth-child(5) { left: 45%; top: 200px; }
   99.43 -            #words span:nth-child(6) { left: 80%; top: 200px; }
   99.44 -            
   99.45 -        </style>
   99.46 -
   99.47 -    </head>
   99.48 -    <body>
   99.49 -        <h1>Words Demo</h1>
   99.50 -        <input data-bind="value: message, valueUpdate: 'afterkeydown'" size="80">
   99.51 -        <br>
   99.52 -        <button data-bind="enable: !on(), click: $root.turnOn">Start</button>
   99.53 -        <button data-bind="enable: on, click: $root.turnOff">Stop</button>
   99.54 -
   99.55 -        <div id="scene">
   99.56 -            <span id="words" data-bind="foreach: words">
   99.57 -                <span data-bind="text: $data, css: { 'rotate' : $root.on } "></span>
   99.58 -            </span>
   99.59 -        </div>
   99.60 -    </body>
   99.61 -</html>
   100.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/test/java/DataModelTest.java	Wed Mar 12 20:26:58 2014 +0100
   100.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.3 @@ -1,16 +0,0 @@
   100.4 -package ${package};
   100.5 -
   100.6 -import static org.testng.Assert.*;
   100.7 -import org.testng.annotations.Test;
   100.8 -
   100.9 -public class DataModelTest {
  100.10 -    @Test public void areHelloWorldTwoWords() {
  100.11 -        Data model = new Data();
  100.12 -        model.setMessage("Hello World!");
  100.13 -        
  100.14 -        java.util.List<String> arr = model.getWords();
  100.15 -        assertEquals(arr.size(), 6, "Six words always");
  100.16 -        assertEquals("Hello", arr.get(0), "Hello is the first word");
  100.17 -        assertEquals("World!", arr.get(1), "World is the second word");
  100.18 -    }
  100.19 -}
   101.1 --- a/ko-archetype/src/main/resources/archetype-resources/src/test/java/JsInteractionTest.java	Wed Mar 12 20:26:58 2014 +0100
   101.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.3 @@ -1,103 +0,0 @@
   101.4 -package ${package};
   101.5 -
   101.6 -import java.io.Closeable;
   101.7 -import java.io.Reader;
   101.8 -import java.net.URL;
   101.9 -import java.util.ArrayList;
  101.10 -import java.util.List;
  101.11 -import javax.script.Invocable;
  101.12 -import javax.script.ScriptEngine;
  101.13 -import javax.script.ScriptEngineManager;
  101.14 -import javax.script.ScriptException;
  101.15 -import org.apidesign.html.boot.spi.Fn;
  101.16 -import static org.testng.Assert.assertEquals;
  101.17 -import org.testng.annotations.AfterMethod;
  101.18 -import org.testng.annotations.BeforeMethod;
  101.19 -import org.testng.annotations.Test;
  101.20 -
  101.21 -/** Tests for behavior of @JavaScriptBody methods. Set your JavaScript 
  101.22 - * environment up (for example define <code>alert</code> or use some
  101.23 - * emulation library like <em>env.js</em>), register script presenter 
  101.24 - * and then you can call methods that deal with JavaScript in your tests.
  101.25 - */
  101.26 -public class JsInteractionTest {
  101.27 -    private Closeable jsEngine;
  101.28 -    @BeforeMethod public void initializeJSEngine() throws Exception {
  101.29 -        jsEngine = Fn.activate(new ScriptPresenter());
  101.30 -    }
  101.31 -    
  101.32 -    @AfterMethod public void shutdownJSEngine() throws Exception {
  101.33 -        jsEngine.close();
  101.34 -    }
  101.35 -    
  101.36 -    @Test public void testCallbackFromJavaScript() throws Exception {
  101.37 -        class R implements Runnable {
  101.38 -            int called;
  101.39 -
  101.40 -            @Override
  101.41 -            public void run() {
  101.42 -                called++;
  101.43 -            }
  101.44 -        }
  101.45 -        R callback = new R();
  101.46 -        
  101.47 -        DataModel.confirmByUser("Hello", callback);
  101.48 -        
  101.49 -        assertEquals(callback.called, 1, "One immediate callback");
  101.50 -    }
  101.51 -
  101.52 -    private static class ScriptPresenter implements Fn.Presenter {
  101.53 -        private final ScriptEngine eng;
  101.54 -        
  101.55 -        public ScriptPresenter() throws ScriptException {
  101.56 -            eng = new ScriptEngineManager().getEngineByName("javascript");
  101.57 -            eng.eval("function alert(msg) { Packages.java.lang.System.out.println(msg); };");
  101.58 -        }
  101.59 -
  101.60 -        @Override
  101.61 -        public Fn defineFn(String code, String... names) {
  101.62 -            StringBuilder sb = new StringBuilder();
  101.63 -            sb.append("(function() {");
  101.64 -            sb.append("  return function(");
  101.65 -            String sep = "";
  101.66 -            for (String n : names) {
  101.67 -                sb.append(sep).append(n);
  101.68 -                sep = ",";
  101.69 -            }
  101.70 -            sb.append(") {\n");
  101.71 -            sb.append(code);
  101.72 -            sb.append("};");
  101.73 -            sb.append("})()");
  101.74 -            
  101.75 -            final Object fn;
  101.76 -            try {
  101.77 -                fn = eng.eval(sb.toString());
  101.78 -            } catch (ScriptException ex) {
  101.79 -                throw new IllegalStateException(ex);
  101.80 -            }
  101.81 -            return new Fn(this) {
  101.82 -                @Override
  101.83 -                public Object invoke(Object thiz, Object... args) throws Exception {
  101.84 -                    List<Object> all = new ArrayList<Object>(args.length + 1);
  101.85 -                    all.add(thiz == null ? fn : thiz);
  101.86 -                    for (int i = 0; i < args.length; i++) {
  101.87 -                        all.add(args[i]);
  101.88 -                    }
  101.89 -                    Object ret = ((Invocable)eng).invokeMethod(fn, "call", all.toArray()); // NOI18N
  101.90 -                    return fn.equals(ret) ? null : thiz;
  101.91 -                }
  101.92 -            };
  101.93 -        }
  101.94 -
  101.95 -        @Override
  101.96 -        public void displayPage(URL page, Runnable onPageLoad) {
  101.97 -            // not really displaying anything
  101.98 -            onPageLoad.run();
  101.99 -        }
 101.100 -
 101.101 -        @Override
 101.102 -        public void loadScript(Reader code) throws Exception {
 101.103 -            eng.eval(code);
 101.104 -        }
 101.105 -    }
 101.106 -}
   102.1 --- a/ko-osgi-test/pom.xml	Wed Mar 12 20:26:58 2014 +0100
   102.2 +++ b/ko-osgi-test/pom.xml	Fri Jul 25 10:45:12 2014 +0200
   102.3 @@ -4,7 +4,7 @@
   102.4      <parent>
   102.5          <groupId>org.netbeans.html</groupId>
   102.6          <artifactId>pom</artifactId>
   102.7 -        <version>0.8-SNAPSHOT</version>
   102.8 +        <version>1.0-SNAPSHOT</version>
   102.9      </parent>
  102.10      <name>KO Tests in an OSGi Container</name>
  102.11      <artifactId>ko-osgi-test</artifactId>
   103.1 --- a/ko-osgi-test/src/main/java/org/netbeans/html/ko/osgi/test/KnockoutEquinoxTCKImpl.java	Wed Mar 12 20:26:58 2014 +0100
   103.2 +++ b/ko-osgi-test/src/main/java/org/netbeans/html/ko/osgi/test/KnockoutEquinoxTCKImpl.java	Fri Jul 25 10:45:12 2014 +0200
   103.3 @@ -212,13 +212,7 @@
   103.4  
   103.5      @Override
   103.6      public boolean canFailWebSocketTest() {
   103.7 -        try {
   103.8 -            Class.forName("java.util.function.Function");
   103.9 -            return false;
  103.10 -        } catch (ClassNotFoundException ex) {
  103.11 -            // running on JDK7, FX WebView WebSocket impl does not work
  103.12 -            return true;
  103.13 -        }
  103.14 +        return true;
  103.15      }
  103.16  
  103.17  }
   104.1 --- a/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/KnockoutEquinoxIT.java	Wed Mar 12 20:26:58 2014 +0100
   104.2 +++ b/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/KnockoutEquinoxIT.java	Fri Jul 25 10:45:12 2014 +0200
   104.3 @@ -95,6 +95,7 @@
   104.4              config.put(Constants.FRAMEWORK_STORAGE_CLEAN, "true");
   104.5              config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "sun.misc,"
   104.6                  + "javafx.application,"
   104.7 +                + "javafx.beans,"
   104.8                  + "javafx.beans.property,"
   104.9                  + "javafx.beans.value,"
  104.10                  + "javafx.collections,"
  104.11 @@ -103,6 +104,7 @@
  104.12                  + "javafx.geometry,"
  104.13                  + "javafx.scene,"
  104.14                  + "javafx.scene.control,"
  104.15 +                + "javafx.scene.image,"
  104.16                  + "javafx.scene.layout,"
  104.17                  + "javafx.scene.text,"
  104.18                  + "javafx.scene.web,"
   105.1 --- a/ko-ws-tyrus/pom.xml	Wed Mar 12 20:26:58 2014 +0100
   105.2 +++ b/ko-ws-tyrus/pom.xml	Fri Jul 25 10:45:12 2014 +0200
   105.3 @@ -4,11 +4,11 @@
   105.4    <parent>
   105.5      <groupId>org.netbeans.html</groupId>
   105.6      <artifactId>pom</artifactId>
   105.7 -    <version>0.8-SNAPSHOT</version>
   105.8 +    <version>1.0-SNAPSHOT</version>
   105.9    </parent>
  105.10    <groupId>org.netbeans.html</groupId>
  105.11    <artifactId>ko-ws-tyrus</artifactId>
  105.12 -  <version>0.8-SNAPSHOT</version>
  105.13 +  <version>1.0-SNAPSHOT</version>
  105.14    <packaging>bundle</packaging>
  105.15    <name>Tyrus Based WebSockets</name>
  105.16    <url>http://maven.apache.org</url>
   106.1 --- a/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Wed Mar 12 20:26:58 2014 +0100
   106.2 +++ b/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Fri Jul 25 10:45:12 2014 +0200
   106.3 @@ -123,43 +123,15 @@
   106.4              final PushbackInputStream is = new PushbackInputStream(
   106.5                  conn.getInputStream(), 1
   106.6              );
   106.7 -            boolean array = false;
   106.8 -            boolean string = false;
   106.9 -            if (call.isJSONP()) {
  106.10 -                for (;;) {
  106.11 -                    int ch = is.read();
  106.12 -                    if (ch == -1) {
  106.13 -                        break;
  106.14 -                    }
  106.15 -                    if (ch == '[') {
  106.16 -                        is.unread(ch);
  106.17 -                        array = true;
  106.18 -                        break;
  106.19 -                    }
  106.20 -                    if (ch == '{') {
  106.21 -                        is.unread(ch);
  106.22 -                        break;
  106.23 -                    }
  106.24 -                }
  106.25 -            } else {
  106.26 -                int ch = is.read();
  106.27 -                if (ch == -1) {
  106.28 -                    string = true;
  106.29 -                } else {
  106.30 -                    array = ch == '[';
  106.31 -                    is.unread(ch);
  106.32 -                    if (!array && ch != '{') {
  106.33 -                        string = true;
  106.34 -                    }
  106.35 -                }
  106.36 -            }
  106.37 +            boolean[] arrayOrString = { false, false };
  106.38 +            detectJSONType(call.isJSONP(), is, arrayOrString);
  106.39              try {
  106.40 -                if (string) {
  106.41 +                if (arrayOrString[1]) {
  106.42                      throw new JSONException("");
  106.43                  }
  106.44                  JSONTokener tok = createTokener(is);
  106.45                  Object obj;
  106.46 -                obj = array ? new JSONArray(tok) : new JSONObject(tok);
  106.47 +                obj = arrayOrString[0] ? new JSONArray(tok) : new JSONObject(tok);
  106.48                  json = convertToArray(obj);
  106.49              } catch (JSONException ex) {
  106.50                  Reader r = new InputStreamReader(is, "UTF-8");
  106.51 @@ -184,6 +156,34 @@
  106.52          }
  106.53      }
  106.54  
  106.55 +    private static void detectJSONType(boolean skipAnything, final PushbackInputStream is, boolean[] arrayOrString) throws IOException {
  106.56 +        for (;;) {
  106.57 +            int ch = is.read();
  106.58 +            if (ch == -1) {
  106.59 +                arrayOrString[1] = true;
  106.60 +                break;
  106.61 +            }
  106.62 +            if (Character.isWhitespace(ch)) {
  106.63 +                continue;
  106.64 +            }
  106.65 +
  106.66 +            if (ch == '[') {
  106.67 +                is.unread(ch);
  106.68 +                arrayOrString[0] = true;
  106.69 +                break;
  106.70 +            }
  106.71 +            if (ch == '{') {
  106.72 +                is.unread(ch);
  106.73 +                break;
  106.74 +            }
  106.75 +            if (!skipAnything) {
  106.76 +                is.unread(ch);
  106.77 +                arrayOrString[1] = true;
  106.78 +                break;
  106.79 +            }
  106.80 +        }
  106.81 +    }
  106.82 +
  106.83      private static JSONTokener createTokener(InputStream is) throws IOException {
  106.84          Reader r = new InputStreamReader(is, "UTF-8");
  106.85          try {
  106.86 @@ -218,6 +218,8 @@
  106.87                  obj.put(key, convertToArray(obj.get(key)));
  106.88              }
  106.89              return obj;
  106.90 +        } else if (o == JSONObject.NULL) {
  106.91 +            return null;
  106.92          } else {
  106.93              return o;
  106.94          }
  106.95 @@ -227,11 +229,11 @@
  106.96          if (jsonObject instanceof JSONObject) {
  106.97              JSONObject obj = (JSONObject)jsonObject;
  106.98              for (int i = 0; i < props.length; i++) {
  106.99 -                try {
 106.100 -                    values[i] = obj.has(props[i]) ? obj.get(props[i]) : null;
 106.101 -                } catch (JSONException ex) {
 106.102 -                    LoadJSON.LOG.log(Level.SEVERE, "Can't read " + props[i] + " from " + jsonObject, ex);
 106.103 +                Object val = obj.opt(props[i]);
 106.104 +                if (val == JSONObject.NULL) {
 106.105 +                    val = null;
 106.106                  }
 106.107 +                values[i] = val;
 106.108              }
 106.109              return;
 106.110          }
 106.111 @@ -252,8 +254,12 @@
 106.112      
 106.113      public static Object parse(InputStream is) throws IOException {
 106.114          try {
 106.115 -            JSONTokener t = createTokener(is);
 106.116 -            return new JSONObject(t);
 106.117 +            PushbackInputStream push = new PushbackInputStream(is, 1);
 106.118 +            boolean[] arrayOrString = { false, false };
 106.119 +            detectJSONType(false, push, arrayOrString);
 106.120 +            JSONTokener t = createTokener(push);
 106.121 +            Object obj = arrayOrString[0] ? new JSONArray(t) : new JSONObject(t);
 106.122 +            return convertToArray(obj);
 106.123          } catch (JSONException ex) {
 106.124              throw new IOException(ex);
 106.125          }
   107.1 --- a/ko4j/pom.xml	Wed Mar 12 20:26:58 2014 +0100
   107.2 +++ b/ko4j/pom.xml	Fri Jul 25 10:45:12 2014 +0200
   107.3 @@ -4,11 +4,11 @@
   107.4    <parent>
   107.5      <groupId>org.netbeans.html</groupId>
   107.6      <artifactId>pom</artifactId>
   107.7 -    <version>0.8-SNAPSHOT</version>
   107.8 +    <version>1.0-SNAPSHOT</version>
   107.9    </parent>
  107.10    <groupId>org.netbeans.html</groupId>
  107.11    <artifactId>ko4j</artifactId>
  107.12 -  <version>0.8-SNAPSHOT</version>
  107.13 +  <version>1.0-SNAPSHOT</version>
  107.14    <packaging>bundle</packaging>
  107.15    <name>Knockout.js for Java</name>
  107.16    <url>http://maven.apache.org</url>
   108.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java	Wed Mar 12 20:26:58 2014 +0100
   108.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java	Fri Jul 25 10:45:12 2014 +0200
   108.3 @@ -106,21 +106,22 @@
   108.4          + "  }\n"
   108.5          + "  var activeGetter = function() { return value; };\n"
   108.6          + "  var bnd = {\n"
   108.7 -        + "    read: function() {\n"
   108.8 +        + "    'read': function() {\n"
   108.9          + "      var r = activeGetter();\n"
  108.10          + "      activeGetter = realGetter;\n"
  108.11 -        + "      return r == null ? null : r.valueOf();\n"
  108.12 +        + "      if (r) try { r = r.valueOf(); } catch (err) {}\n"
  108.13 +        + "      return r;\n"
  108.14          + "    },\n"
  108.15 -        + "    owner: ret\n"
  108.16 +        + "    'owner': ret\n"
  108.17          + "  };\n"
  108.18          + "  if (!readOnly) {\n"
  108.19 -        + "    bnd.write = function(val) {\n"
  108.20 +        + "    bnd['write'] = function(val) {\n"
  108.21          + "      prop.@org.apidesign.html.json.spi.PropertyBinding::setValue(Ljava/lang/Object;)(val);\n"
  108.22          + "    };\n"
  108.23          + "  };\n"
  108.24 -        + "  var cmpt = ko.computed(bnd);\n"
  108.25 -        + "  var vhm = cmpt.valueHasMutated;\n"
  108.26 -        + "  cmpt.valueHasMutated = function(val) {\n"
  108.27 +        + "  var cmpt = ko['computed'](bnd);\n"
  108.28 +        + "  var vhm = cmpt['valueHasMutated'];\n"
  108.29 +        + "  cmpt['valueHasMutated'] = function(val) {\n"
  108.30          + "    if (arguments.length === 1) activeGetter = function() { return val; };\n"
  108.31          + "    vhm();\n"
  108.32          + "  };\n"
   109.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java	Wed Mar 12 20:26:58 2014 +0100
   109.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java	Fri Jul 25 10:45:12 2014 +0200
   109.3 @@ -163,16 +163,18 @@
   109.4          + "request.open(method, url, true);\n"
   109.5          + "request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');\n"
   109.6          + "request.onreadystatechange = function() {\n"
   109.7 -        + "  if (this.readyState!==4) return;\n"
   109.8 +        + "  if (request.readyState !== 4) return;\n"
   109.9 +        + "  var r = request.response || request.responseText;\n"
  109.10          + "  try {\n"
  109.11 -        + "    var r = this.response;\n"
  109.12 -        + "    try { r = eval('(' + this.response + ')'); } catch (ignore) { }"
  109.13 +        + "    if (request.status < 100 || request.status >= 400) throw request.status + ': ' + request.statusText;"
  109.14 +        + "    try { r = eval('(' + r + ')'); } catch (ignore) { }"
  109.15          + "    done.@org.apidesign.html.json.spi.JSONCall::notifySuccess(Ljava/lang/Object;)(r);\n"
  109.16          + "  } catch (error) {;\n"
  109.17 -        + "    @org.netbeans.html.ko4j.LoadJSON::notifyError(Ljava/lang/Object;Ljava/lang/Object;)(done, this.response);\n"
  109.18 +        + "    @org.netbeans.html.ko4j.LoadJSON::notifyError(Ljava/lang/Object;Ljava/lang/Object;)(done, error);\n"
  109.19          + "  }\n"
  109.20          + "};\n"
  109.21 -        + "request.onerror = function (e) {console.log('eeeor:' + Object.getOwnPropertyNames(e));\n"
  109.22 +        + "request.onerror = function (e) {\n"
  109.23 +        + "  console.log('error loading :' + url + ' props: ' + Object.getOwnPropertyNames(e));\n"
  109.24          + "  @org.netbeans.html.ko4j.LoadJSON::notifyError(Ljava/lang/Object;Ljava/lang/Object;)(done, e);\n"
  109.25          + "}\n"
  109.26          + "if (data) request.send(data);"
   110.1 --- a/ko4j/src/main/resources/org/netbeans/html/ko4j/knockout-2.2.1.js	Wed Mar 12 20:26:58 2014 +0100
   110.2 +++ b/ko4j/src/main/resources/org/netbeans/html/ko4j/knockout-2.2.1.js	Fri Jul 25 10:45:12 2014 +0200
   110.3 @@ -1312,6 +1312,7 @@
   110.4      ko.subscribable.call(dependentObservable);
   110.5      ko.utils.extend(dependentObservable, ko.dependentObservable['fn']);
   110.6  
   110.7 +    ko.exportProperty(dependentObservable, 'valueHasMutated', dependentObservable.valueHasMutated);
   110.8      ko.exportProperty(dependentObservable, 'peek', dependentObservable.peek);
   110.9      ko.exportProperty(dependentObservable, 'dispose', dependentObservable.dispose);
  110.10      ko.exportProperty(dependentObservable, 'isActive', dependentObservable.isActive);
   111.1 --- a/pom.xml	Wed Mar 12 20:26:58 2014 +0100
   111.2 +++ b/pom.xml	Fri Jul 25 10:45:12 2014 +0200
   111.3 @@ -3,7 +3,7 @@
   111.4    <modelVersion>4.0.0</modelVersion>
   111.5    <groupId>org.netbeans.html</groupId>
   111.6    <artifactId>pom</artifactId>
   111.7 -  <version>0.8-SNAPSHOT</version>
   111.8 +  <version>1.0-SNAPSHOT</version>
   111.9    <packaging>pom</packaging>
  111.10    <name>HTML APIs via Java</name>
  111.11    <parent> 
  111.12 @@ -13,7 +13,7 @@
  111.13    </parent>  
  111.14    <properties>
  111.15        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  111.16 -      <netbeans.version>RELEASE73</netbeans.version>
  111.17 +      <netbeans.version>RELEASE80</netbeans.version>
  111.18        <grizzly.version>2.3.8</grizzly.version>
  111.19        <license>COPYING</license>
  111.20        <publicPackages />
  111.21 @@ -22,8 +22,6 @@
  111.22    <modules>
  111.23      <module>json</module>
  111.24      <module>json-tck</module>
  111.25 -    <module>ko-archetype</module>
  111.26 -    <module>ko-archetype-test</module>
  111.27      <module>ko4j</module>
  111.28      <module>sound</module>
  111.29      <module>context</module>
  111.30 @@ -34,6 +32,7 @@
  111.31      <module>html4j-maven-plugin</module>
  111.32      <module>ko-osgi-test</module>
  111.33      <module>equinox-agentclass-hook</module>
  111.34 +    <module>boot-script</module>
  111.35    </modules>
  111.36    <licenses>
  111.37        <license>
  111.38 @@ -95,8 +94,9 @@
  111.39                    <excludes>
  111.40                         <exclude>*</exclude>
  111.41                         <exclude>.*/**</exclude>
  111.42 -                       <exclude>ko-archetype/src/main/resources/**</exclude>
  111.43                         <exclude>ko4j/src/main/resources/org/netbeans/html/ko4j/knockout*.js</exclude>
  111.44 +                       <exclude>boot-script/src/test/resources/net/java/html/boot/script/ko4j/env.nashorn.1.2-debug.js</exclude>
  111.45 +                       <exclude>src/main/javadoc/resources/teavm.js</exclude>
  111.46                    </excludes>
  111.47                </configuration>
  111.48            </plugin>
  111.49 @@ -115,6 +115,7 @@
  111.50                <artifactId>maven-javadoc-plugin</artifactId>
  111.51                <version>2.9</version>
  111.52                <configuration>
  111.53 +                  <docfilessubdirs>true</docfilessubdirs>
  111.54                    <subpackages>${publicPackages}</subpackages>
  111.55                    <skip>false</skip>
  111.56                    <excludePackageNames>org.netbeans.html.*:net.java.html.js.tests:net.java.html.json.tests</excludePackageNames>
  111.57 @@ -136,13 +137,18 @@
  111.58                      <packages>net.java.html.sound</packages>
  111.59                    </group>
  111.60                    <group>
  111.61 +                    <title>Testing and Headless API</title>
  111.62 +                    <packages>net.java.html.boot.script</packages>
  111.63 +                  </group>
  111.64 +                  <group>
  111.65                      <title>Service Provider APIs (not commonly interesting)</title>
  111.66                      <packages>org.apidesign.html.*</packages>
  111.67                    </group>
  111.68                  </groups>   
  111.69                  <links>
  111.70                      <link>http://testng.org/javadocs/</link>
  111.71 -                    <link>http://bits.netbeans.org/7.4/javadoc/org-openide-util-lookup/</link>
  111.72 +                    <link>http://bits.netbeans.org/8.0/javadoc/org-openide-util-lookup/</link>
  111.73 +                    <link>http://docs.oracle.com/javase/8/javafx/api/</link>
  111.74                  </links>              
  111.75                </configuration>
  111.76              </plugin>
   112.1 --- a/sound/pom.xml	Wed Mar 12 20:26:58 2014 +0100
   112.2 +++ b/sound/pom.xml	Fri Jul 25 10:45:12 2014 +0200
   112.3 @@ -4,11 +4,11 @@
   112.4      <parent>
   112.5          <groupId>org.netbeans.html</groupId>
   112.6          <artifactId>pom</artifactId>
   112.7 -        <version>0.8-SNAPSHOT</version>
   112.8 +        <version>1.0-SNAPSHOT</version>
   112.9      </parent>
  112.10      <groupId>org.netbeans.html</groupId>
  112.11      <artifactId>net.java.html.sound</artifactId>
  112.12 -    <version>0.8-SNAPSHOT</version>
  112.13 +    <version>1.0-SNAPSHOT</version>
  112.14      <packaging>bundle</packaging>
  112.15      <name>Sound API via HTML</name>
  112.16      <url>http://maven.apache.org</url>
  112.17 @@ -37,7 +37,7 @@
  112.18          <dependency>
  112.19              <groupId>org.netbeans.html</groupId>
  112.20              <artifactId>net.java.html.boot</artifactId>
  112.21 -            <version>0.8-SNAPSHOT</version>
  112.22 +            <version>1.0-SNAPSHOT</version>
  112.23              <type>jar</type>
  112.24          </dependency>
  112.25          <dependency>
   113.1 --- a/sound/src/main/java/net/java/html/sound/AudioClip.java	Wed Mar 12 20:26:58 2014 +0100
   113.2 +++ b/sound/src/main/java/net/java/html/sound/AudioClip.java	Fri Jul 25 10:45:12 2014 +0200
   113.3 @@ -43,7 +43,10 @@
   113.4  package net.java.html.sound;
   113.5  
   113.6  import java.util.ServiceLoader;
   113.7 +import net.java.html.BrwsrCtx;
   113.8 +import org.apidesign.html.context.spi.Contexts;
   113.9  import org.apidesign.html.sound.spi.AudioEnvironment;
  113.10 +import org.netbeans.html.sound.impl.BrowserAudioEnv;
  113.11  
  113.12  /** Handle to an audio clip which can be {@link #play() played}, {@link #pause() paused}
  113.13   * and etc. Obtain new instance via {@link #create(java.lang.String) create} factory 
  113.14 @@ -59,6 +62,10 @@
  113.15       * If no suitable audio environment provider is found, the method 
  113.16       * returns a dummy instance that does nothing and only returns
  113.17       * false from its {@link #isSupported()} method.
  113.18 +     * <p>
  113.19 +     * The <code>src</code> can be absolute URL or it can be relative
  113.20 +     * to current {@link BrwsrCtx browser context} - e.g. usually to the
  113.21 +     * page that is just being displayed.
  113.22       * 
  113.23       * @param src the URL where to find the audio clip
  113.24       * @return the audio clip handle
  113.25 @@ -66,13 +73,22 @@
  113.26       */
  113.27      public static AudioClip create(String src) {
  113.28          src.getClass();
  113.29 +        BrwsrCtx brwsrCtx = BrwsrCtx.findDefault(AudioClip.class);
  113.30 +        AudioEnvironment brwsrAE = Contexts.find(brwsrCtx, AudioEnvironment.class);
  113.31 +        if (brwsrAE != null) {
  113.32 +            Impl handle = create(brwsrAE, src);
  113.33 +            if (handle != null) {
  113.34 +                return handle;
  113.35 +            }
  113.36 +        }
  113.37          for (AudioEnvironment<?> ae : ServiceLoader.load(AudioEnvironment.class)) {
  113.38              Impl handle = create(ae, src);
  113.39              if (handle != null) {
  113.40                  return handle;
  113.41              }
  113.42          }
  113.43 -        return DummyClip.INSTANCE;
  113.44 +        Impl handle = create(BrowserAudioEnv.DEFAULT, src);
  113.45 +        return handle != null ? handle : DummyClip.INSTANCE;
  113.46      }
  113.47      
  113.48      /** Plays the clip from begining to the end.
   114.1 --- a/sound/src/main/java/org/apidesign/html/sound/spi/AudioEnvironment.java	Wed Mar 12 20:26:58 2014 +0100
   114.2 +++ b/sound/src/main/java/org/apidesign/html/sound/spi/AudioEnvironment.java	Fri Jul 25 10:45:12 2014 +0200
   114.3 @@ -42,9 +42,15 @@
   114.4   */
   114.5  package org.apidesign.html.sound.spi;
   114.6  
   114.7 +import net.java.html.BrwsrCtx;
   114.8 +import org.apidesign.html.context.spi.Contexts;
   114.9 +
  114.10  /** Basic interface for sound playback providers. Register your implementation
  114.11   * in a way {@link java.util.ServiceLoader} can find it - e.g. use
  114.12 - * {@link org.openide.util.lookup.ServiceProvider} annotation.
  114.13 + * {@link org.openide.util.lookup.ServiceProvider} annotation. Possibly
  114.14 + * one can register the provider into {@link Contexts#newBuilder()}, in
  114.15 + * case the implementation is somehow associated 
  114.16 + * with the actual {@link BrwsrCtx} (works since version 0.8.3).
  114.17   *
  114.18   * @author antonepple
  114.19   * @param <Audio> custom type representing the internal audio state
   115.1 --- a/sound/src/main/java/org/netbeans/html/sound/impl/BrowserAudioEnv.java	Wed Mar 12 20:26:58 2014 +0100
   115.2 +++ b/sound/src/main/java/org/netbeans/html/sound/impl/BrowserAudioEnv.java	Fri Jul 25 10:45:12 2014 +0200
   115.3 @@ -44,14 +44,18 @@
   115.4  
   115.5  import net.java.html.js.JavaScriptBody;
   115.6  import org.apidesign.html.sound.spi.AudioEnvironment;
   115.7 -import org.openide.util.lookup.ServiceProvider;
   115.8  
   115.9 -/** Registers an audio provider that delegates to HTML5 Audio tag.
  115.10 +/** The default audio provider that delegates to HTML5 Audio tag
  115.11 + * it is used if no other {@link AudioEnvironment} is found.
  115.12   *
  115.13   * @author Jaroslav Tulach <jtulach@netbeans.org>
  115.14   */
  115.15 -@ServiceProvider(service = AudioEnvironment.class, position = 100)
  115.16  public final class BrowserAudioEnv implements AudioEnvironment<Object> {
  115.17 +    public static final AudioEnvironment<?> DEFAULT = new BrowserAudioEnv();
  115.18 +    
  115.19 +    private BrowserAudioEnv() {
  115.20 +    }
  115.21 +    
  115.22      @Override
  115.23      @JavaScriptBody(args = { "src" }, body = ""
  115.24          + "if (!Audio) return null;"
   116.1 --- a/src/main/javadoc/overview.html	Wed Mar 12 20:26:58 2014 +0100
   116.2 +++ b/src/main/javadoc/overview.html	Fri Jul 25 10:45:12 2014 +0200
   116.3 @@ -52,7 +52,8 @@
   116.4      <body>
   116.5          <p>
   116.6           Use Java to write application logic; Use HTML5 to render the UI; 
   116.7 -         {@link net.java.html.json.Model Animate an HTML page from Java};
   116.8 +         {@link net.java.html.json.Model Animate an HTML page from Java}
   116.9 +         (see <a target="_blank" href="http://dew.apidesign.org/dew/#7212206">Duke being rotated</a> by CSS);
  116.10           Use {@link net.java.html.json.OnReceive REST} or
  116.11           <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>;
  116.12           interact with <a href="net/java/html/js/package-summary.html">JavaScript</a>;
  116.13 @@ -70,10 +71,87 @@
  116.14           component to display the <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>. 
  116.15           We eliminate the need to manipulate the DOM directly, 
  116.16           there is a special {@link net.java.html.json Java to Knockout.js binding}. 
  116.17 -         As a result the <a href="http://wiki.apidesign.org/wiki/Knockout4Java">HTML uses Knockout.js syntax</a>, 
  116.18 +         As a result the <a href="http://knockoutjs.com">HTML uses Knockout.js syntax</a>, 
  116.19           yet the application code can be written in Java.
  116.20          </p>
  116.21          
  116.22 +        <h3>What's New in Version 0.8.3?</h3>
  116.23 +        
  116.24 +        <p>
  116.25 +            Setters or array properties on classes generated by {@link net.java.html.json.Model}
  116.26 +            annotation can be accessed from any thread. {@link org.apidesign.html.sound.spi.AudioEnvironment}
  116.27 +            can be registered into {@link net.java.html.BrwsrCtx}. There is
  116.28 +            a {@link net.java.html.json.Models#parse(net.java.html.BrwsrCtx, java.lang.Class, java.io.InputStream, java.util.Collection)  method}
  116.29 +            to parse a JSON array and convert it into 
  116.30 +            {@link net.java.html.json.Model model classes}.
  116.31 +        </p>
  116.32 +        
  116.33 +        <h3>What's New in Version 0.8.2?</h3>
  116.34 +        
  116.35 +        <p>
  116.36 +            Few bugfixes for better portability. 
  116.37 +            New API for {@link net.java.html.boot.script.Scripts headless execution}
  116.38 +            on top of <em>Nashorn</em> - does not run <em>knockout for Java</em>
  116.39 +            fully yet 
  116.40 +            (reported as <a href="https://bugs.openjdk.java.net/browse/JDK-8046013">JDK-8046013</a>),
  116.41 +            however even in current state it is quite 
  116.42 +            {@link net.java.html.boot.script.Scripts useful for testing}
  116.43 +            of 
  116.44 +            {@link net.java.html.js Java/JavaScript interactions}.
  116.45 +        </p>
  116.46 +        
  116.47 +        <h3>What's New in Version 0.8.1?</h3>
  116.48 +        
  116.49 +        <p>
  116.50 +            {@link net.java.html.boot.fx.FXBrowsers} has been extended
  116.51 +            with new helper methods to make it easier to use HTML+Java
  116.52 +            API in existing JavaFX applications.
  116.53 +            The annotation processor is made
  116.54 +            more robust with respect to errors in callback syntax of
  116.55 +            {@link net.java.html.js.JavaScriptBody} body parameter.
  116.56 +            Javadoc of {@link net.java.html.BrwsrCtx#execute} method
  116.57 +            has been improved based on a failure of its usability study.
  116.58 +            There can be additional parameters to methods annotated by
  116.59 +            {@link net.java.html.json.OnReceive} that allows one to
  116.60 +            pass state when a JSON call is made and use it when it finishes.
  116.61 +            The mechanism of discovery of sibling HTML page has been
  116.62 +            extended to work on systems that don't support
  116.63 +            {@link java.lang.Class#getProtectionDomain}.
  116.64 +        </p>
  116.65 +        
  116.66 +        <h3>What's New in Version 0.8?</h3>
  116.67 +        
  116.68 +        <p>
  116.69 +            The first argument of method annotated by
  116.70 +            {@link net.java.html.json.OnReceive} annotation has to
  116.71 +            be the associated {@link net.java.html.json.Model model class}.
  116.72 +        </p>
  116.73 +        
  116.74 +        <p>
  116.75 +            {@link net.java.html.json.OnReceive} annotation now accepts
  116.76 +            {@link java.util.List} of data values as second argument
  116.77 +            (previously required an array).
  116.78 +        </p>
  116.79 +        
  116.80 +        
  116.81 +        <h3>What's New in Older Versions?</h3>
  116.82 +        
  116.83 +        <p>
  116.84 +            {@link net.java.html.js.JavaScriptBody} annotation has new attribute
  116.85 +            {@link net.java.html.js.JavaScriptBody#wait4js()} which allows
  116.86 +            asynchronous execution. Libraries using
  116.87 +            {@link net.java.html.js.JavaScriptBody} are urged to use this
  116.88 +            new attribute as much as possible, as it can speed up execution
  116.89 +            in certain environments.
  116.90 +        </p>
  116.91 +        
  116.92 +        <p>
  116.93 +            Use {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable)} in
  116.94 +            multi-threaded environment to execute your code on the browser thread.
  116.95 +            See example 
  116.96 +            {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable) using Java timer}.
  116.97 +        </p>
  116.98 +        
  116.99          <h3>Interesting Entry Points</h3>
 116.100          
 116.101          <p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
 116.102 @@ -96,14 +174,16 @@
 116.103          However to be sure one chooses the most recent setup, it is recommended
 116.104          to switch to good old command line and use a 
 116.105          <a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
 116.106 -        associated with every version of this project. Just type:
 116.107 +        associated with every version of this project. Make sure at least 
 116.108 +        <em>JDK7</em> is your installed Java and type:
 116.109          <pre>      
 116.110  $ mvn archetype:generate \
 116.111   -DarchetypeGroupId=org.apidesign.html \
 116.112   -DarchetypeArtifactId=knockout4j-archetype \
 116.113 - -DarchetypeVersion=x.y
 116.114 + -DarchetypeVersion=0.7.5 <em># or newer version, if available</em>
 116.115          </pre>
 116.116 -        Answer few questions (for example choose myfirstbrwsrpage as artifactId) and then you can:
 116.117 +        Answer few questions (for example choose myfirstbrwsrpage as artifactId) 
 116.118 +        and then you can:
 116.119          <pre>
 116.120  $ cd myfirstbrwsrpage
 116.121  $ mvn process-classes exec:java
 116.122 @@ -111,17 +191,242 @@
 116.123          In a few seconds (or minutes if 
 116.124          <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
 116.125          decides to download the whole Internet of dependencies) you should 
 116.126 -        see a sample Hello World application. It is basically composed from one 
 116.127 -        Java and one HTML file:
 116.128 +        see a sample Hello World application rendered in a 
 116.129 +        <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
 116.130 +        web view component (that of course requires your JDK to come
 116.131 +        with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>; 
 116.132 +        <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7 
 116.133 +            and JDK8 from Oracle</a> contain everything that is needed). 
 116.134 +        The generated application is built around one 
 116.135 +        Java source (uses the {@link net.java.html.json.Model} annotation to
 116.136 +        auto-generate another <code>Data.java</code> class during compilation)
 116.137 +        and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
 116.138 +        syntax to <code>data-bind</code> the HTML elements to the 
 116.139 +        generated <code>Data</code> model):
 116.140          <pre>
 116.141  $ ls src/main/java/**/DataModel.java
 116.142  $ ls src/main/webapp/pages/index.html
 116.143          </pre>
 116.144 -        Play with them, modify them and enjoy
 116.145 +        That is all you need to get started. Play with the sources, 
 116.146 +        modify them and enjoy
 116.147          <a href="http://html.java.net">Html for Java</a>!
 116.148          
 116.149 +        <h2>IDE Support</h2>
 116.150 +        
 116.151          <p>
 116.152 -        <img src="net/java/html/json/doc-files/DukeHTML.png" width="640" height="480" alt="Duke and HTML5. Together at last!"/>
 116.153 +            This API is part of <a target="_blank"
 116.154 +            href="http://netbeans.org">NetBeans.org</a> project and as such
 116.155 +            it works naturally with the <a target="_blank"
 116.156 +            href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
 116.157 +            On the other hand, the API is using nothing NetBeans specific,
 116.158 +            it builds on standard Java6 APIs and as such it shall work fine
 116.159 +            in any IDE.
 116.160          </p>
 116.161 +        
 116.162 +        <p>
 116.163 +            A lot of work is done by 
 116.164 +            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
 116.165 +            annotation processors</a>
 116.166 +            that generate various boiler plate code during compilation. This
 116.167 +            is a standard part of Java since JDK6, but for example Eclipse
 116.168 +            is known not to deal with processors well and developers using
 116.169 +            it need to be careful. IntelliJ users hasn't reported any issues
 116.170 +            and of course, NetBeans IDE support for 
 116.171 +            <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
 116.172 +            is outstanding.
 116.173 +        </p>
 116.174 +        
 116.175 +        <p>
 116.176 +            When using {@link net.java.html.js.JavaScriptBody} annotation, it is
 116.177 +            useful to do a bit of post processing of classes. There is a
 116.178 +            <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a> 
 116.179 +            plugin for that.
 116.180 +            NetBeans IDE will invoke it when doing a build. Other IDEs may 
 116.181 +            need some hint to do so. 
 116.182 +            Anyway: If one does not see all (generated) sources or is getting
 116.183 +            {@link java.lang.LinkageError}s when executing the application, 
 116.184 +            switch to command line and do clean build
 116.185 +            from there:
 116.186 +        </p>
 116.187 +        <pre>$ mvn clean install</pre>
 116.188 +        <p>
 116.189 +            If that succeeds, your IDE of choice will hopefully
 116.190 +            pick the generated sources up and present the result of the build 
 116.191 +            properly. If not, 
 116.192 +            <a href="https://netbeans.org/downloads/">download NetBeans</a>, 
 116.193 +            you will be pleasantly 
 116.194 +            surprised - for example with our excellent 
 116.195 +            <a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript 
 116.196 +            debugging</a> support.
 116.197 +        </p>
 116.198 +        
 116.199 +        <a name="deploy">
 116.200 +        <h2>Deploy Your Application</h2>
 116.201 +        </a>
 116.202 +        
 116.203 +        <p>
 116.204 +        It is not goal of this documentation to list all possible ways
 116.205 +        to package and deploy applications which use this API. However it is 
 116.206 +        important for new comers to see the benefits of using the
 116.207 +        <a href="http://html.java.net">HTML for Java</a> API and as such
 116.208 +        let's list at least few bundling options, known to work at the time of writing 
 116.209 +        this documentation.
 116.210 +        </p>
 116.211 +        
 116.212 +        <p>
 116.213 +        First of all, this is a <em>client technology</em>. You write client applications
 116.214 +        with it which may, but need not connect to a server. You don't need
 116.215 +        Tomcat or WebLogic to deploy 
 116.216 +        <a href="http://html.java.net">HTML for Java</a> applications.
 116.217 +        </p>
 116.218 +        
 116.219 +        <p>
 116.220 +            <img src='resources/javafx_logo.jpg' width="64"
 116.221 +                 height="64" align="left"/>
 116.222 +            The sample project generated by
 116.223 +            <code>org.apidesign.html knockout4j-archetype</code> is configured
 116.224 +            to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
 116.225 +            as the rendering technology. This setup is primarily suitable for 
 116.226 +            development - it needs no special packaging, starts quickly and
 116.227 +            allows you to use classical HotSpot VM debuggers. A final 
 116.228 +            artifact from the build is also a ZIP file which you can use
 116.229 +            and distribute to your users. Good for desktop applications.
 116.230 +        </p>
 116.231 +        
 116.232 +        <p>
 116.233 +            <img src='resources/netbeans_logo.jpg' width="64"
 116.234 +                 height="64" align="right"/>
 116.235 +            <img src='resources/eclipse_logo.png' width="64"
 116.236 +                 height="64" align="right"/>
 116.237 +            All the <a href="http://html.java.net">HTML for Java</a> libraries
 116.238 +            are packaged as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
 116.239 +            bundles and as such they can easily be run in NetBeans as well as
 116.240 +            in Eclipse. As a result one can use 
 116.241 +            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
 116.242 +            and have a common module system for both platforms. In addition to that 
 116.243 +            one can render using
 116.244 +            HTML and have a common UI in both platforms. In such case
 116.245 +            your application would be packaged as a set of
 116.246 +            <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
 116.247 +            Read 
 116.248 +            <a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
 116.249 +        </p>
 116.250 +        
 116.251 +        <p>
 116.252 +            <img src='resources/chrome_logo.png' width="64"
 116.253 +                 height="64" align="left"/>
 116.254 +            <img src='resources/safari_logo.png' width="64"
 116.255 +                 height="64" align="left"/>
 116.256 +            <img src='resources/ie_logo.png' width="64"
 116.257 +                 height="64" align="left"/>
 116.258 +            <img src='resources/firefox_logo.png' width="64"
 116.259 +                 height="64" align="left"/>
 116.260 +            
 116.261 +            There is more and more attempts to execute Java bytecode
 116.262 +            in a browser, without any special Java plugin installed.
 116.263 +            The <a href="http://html.java.net">HTML for Java</a> is
 116.264 +            carefully designed to produce lightweight, well performing
 116.265 +            applications even on such restricted environments. It uses
 116.266 +            no reflection calls and that allows to statically pre-compile
 116.267 +            the applications into JavaScript. One of such environments
 116.268 +            is called <a href="http://wiki.apidesign.org/wiki/Bck2Brwsr">Bck2Brwsr</a>, 
 116.269 +            another <a href="http://wiki.apidesign.org/wiki/TeaVM">TeaVM</a>. Both support the
 116.270 +            {@link net.java.html.js.JavaScriptBody} annotation. Read 
 116.271 +            <a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
 116.272 +            a minesweeper game packaged for your browser 
 116.273 +            (of course <a target="_blank"
 116.274 +                href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
 116.275 +                written</a> in Java):
 116.276 +        </p>
 116.277 +        
 116.278 +        <script type="text/html" id="field">
 116.279 +            <table class="field">
 116.280 +                <tbody>
 116.281 +                    <!-- ko foreach: rows -->
 116.282 +                    <tr>
 116.283 +                        <!-- ko foreach: columns -->
 116.284 +                        <td data-bind="css: style, click: $parents[1].click" >
 116.285 +                            <div data-bind='html: html'></div>
 116.286 +                        </td>
 116.287 +                        <!-- /ko -->
 116.288 +                    </tr>
 116.289 +                    <!-- /ko -->
 116.290 +                </tbody>
 116.291 +            </table>
 116.292 +        </script>
 116.293 +
 116.294 +        <div data-bind="template: { name : 'field', if: fieldShowing }"></div>
 116.295 +
 116.296 +        <!-- boot bck2brwsr -->
 116.297 +        <script type="text/javascript" src="resources/teavm.js"></script>
 116.298 +        <script>
 116.299 +            var vm = new VM();
 116.300 +            vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
 116.301 +        </script>
 116.302 +
 116.303 +        <p>
 116.304 +            <img src='resources/ios_logo.jpg' width="64"
 116.305 +                 height="64" align="right"/>
 116.306 +            <img src='resources/android_logo.jpg' width="64"
 116.307 +                 height="64" align="right"/>
 116.308 +            
 116.309 +            Now when we have seen that the 
 116.310 +            <a href="http://html.java.net">HTML for Java</a> applications 
 116.311 +            can run on any modern browser, we can ask whether they can also
 116.312 +            fit into a phone!? Yes, they can and especially to phones 
 116.313 +            that can execute Java code already! Just by changing your
 116.314 +            packaging you can create an APK file and deploy it to your
 116.315 +            Android phone. 
 116.316 +            Read <a target="_blank" href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
 116.317 +            In case you'd like your application to reach out to second biggest
 116.318 +            group of smartphone users, don't despair: It 
 116.319 +            seems the set of devices that can execute
 116.320 +            <a href="http://html.java.net">HTML for Java</a> applications 
 116.321 +            has been extended to <em>iPads</em> and <em>iPhones</em>. Get the 
 116.322 +            <a target="_blank" href="http://wiki.apidesign.org/wiki/IBrwsr">details here</a>
 116.323 +            and deploy everywhere!
 116.324 +        </p>
 116.325 +        <p>
 116.326 +            Convinced it makes sense to use 
 116.327 +            <a href="http://html.java.net">HTML for Java</a>
 116.328 +            APIs for writing applications that are 
 116.329 +            <em>written once, displayed anywhere</em>? Or do you have an
 116.330 +            environment which is not supported? In such case you can bring
 116.331 +            <a href="http://html.java.net">HTML for Java</a>
 116.332 +            to your environment yourself. Just implement your own
 116.333 +            {@link org.apidesign.html.boot.spi.Fn.Presenter}!
 116.334 +        </p>
 116.335 +        
 116.336 +        <h2>Other Resources</h2>
 116.337 +        
 116.338 +        <img src="net/java/html/json/doc-files/DukeHTML.png" width="256" height="184" alt="Duke and HTML5. Together at last!" align="right"/>
 116.339 +        
 116.340 +        The javadoc for latest and previous versions is also available
 116.341 +        online:
 116.342 +        <ul>
 116.343 +            <li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
 116.344 +            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8">0.8</a>
 116.345 +            <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>
 116.346 +        </ul>
 116.347 +        
 116.348 +<style type="text/css">
 116.349 +table.field td {
 116.350 +    padding: 4px;
 116.351 +    width: 18px;
 116.352 +    height: 18px;
 116.353 +    font-size: 1.5em;
 116.354 +    border: 1px solid black;
 116.355 +}
 116.356 +table.field td.UNKNOWN {
 116.357 +    background-color: #D6E4E1;
 116.358 +    cursor: pointer;
 116.359 +}
 116.360 +table.field td.EXPLOSION {
 116.361 +    background-color: #A31E39;
 116.362 +}
 116.363 +table.field td.DISCOVERED {
 116.364 +    background-color: #9DB2B1;
 116.365 +}
 116.366 +</style>        
 116.367      </body>
 116.368  </html>
   117.1 Binary file src/main/javadoc/resources/android_logo.jpg has changed
   118.1 Binary file src/main/javadoc/resources/chrome_logo.png has changed
   119.1 Binary file src/main/javadoc/resources/eclipse_logo.png has changed
   120.1 Binary file src/main/javadoc/resources/firefox_logo.png has changed
   121.1 Binary file src/main/javadoc/resources/ie_logo.png has changed
   122.1 Binary file src/main/javadoc/resources/ios_logo.jpg has changed
   123.1 Binary file src/main/javadoc/resources/javafx_logo.jpg has changed
   124.1 Binary file src/main/javadoc/resources/netbeans_logo.jpg has changed
   125.1 Binary file src/main/javadoc/resources/safari_logo.png has changed
   126.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2 +++ b/src/main/javadoc/resources/teavm.js	Fri Jul 25 10:45:12 2014 +0200
   126.3 @@ -0,0 +1,13845 @@
   126.4 +// Resource knockout-2.2.1.js included by org.netbeans.html.ko4j.Knockout
   126.5 +// Knockout JavaScript library v2.2.1
   126.6 +// (c) Steven Sanderson - http://knockoutjs.com/
   126.7 +// License: MIT (http://www.opensource.org/licenses/mit-license.php)
   126.8 +
   126.9 +(function(){
  126.10 +var DEBUG=true;
  126.11 +(function(window,document,navigator,jQuery,undefined){
  126.12 +!function(factory) {
  126.13 +    // Support three module loading scenarios
  126.14 +    if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {
  126.15 +        // [1] CommonJS/Node.js
  126.16 +        var target = module['exports'] || exports; // module.exports is for Node.js
  126.17 +        factory(target);
  126.18 +    } else if (typeof define === 'function' && define['amd']) {
  126.19 +        // [2] AMD anonymous module
  126.20 +        define(['exports'], factory);
  126.21 +    } else {
  126.22 +        // [3] No module loader (plain <script> tag) - put directly in global namespace
  126.23 +        factory(window['ko'] = {});
  126.24 +    }
  126.25 +}(function(koExports){
  126.26 +// Internally, all KO objects are attached to koExports (even the non-exported ones whose names will be minified by the closure compiler).
  126.27 +// In the future, the following "ko" variable may be made distinct from "koExports" so that private objects are not externally reachable.
  126.28 +var ko = typeof koExports !== 'undefined' ? koExports : {};
  126.29 +// Google Closure Compiler helpers (used only to make the minified file smaller)
  126.30 +ko.exportSymbol = function(koPath, object) {
  126.31 +	var tokens = koPath.split(".");
  126.32 +
  126.33 +	// In the future, "ko" may become distinct from "koExports" (so that non-exported objects are not reachable)
  126.34 +	// At that point, "target" would be set to: (typeof koExports !== "undefined" ? koExports : ko)
  126.35 +	var target = ko;
  126.36 +
  126.37 +	for (var i = 0; i < tokens.length - 1; i++)
  126.38 +		target = target[tokens[i]];
  126.39 +	target[tokens[tokens.length - 1]] = object;
  126.40 +};
  126.41 +ko.exportProperty = function(owner, publicName, object) {
  126.42 +  owner[publicName] = object;
  126.43 +};
  126.44 +ko.version = "2.2.1";
  126.45 +
  126.46 +ko.exportSymbol('version', ko.version);
  126.47 +ko.utils = new (function () {
  126.48 +    var stringTrimRegex = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
  126.49 +
  126.50 +    // Represent the known event types in a compact way, then at runtime transform it into a hash with event name as key (for fast lookup)
  126.51 +    var knownEvents = {}, knownEventTypesByEventName = {};
  126.52 +    var keyEventTypeName = /Firefox\/2/i.test(navigator.userAgent) ? 'KeyboardEvent' : 'UIEvents';
  126.53 +    knownEvents[keyEventTypeName] = ['keyup', 'keydown', 'keypress'];
  126.54 +    knownEvents['MouseEvents'] = ['click', 'dblclick', 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave'];
  126.55 +    for (var eventType in knownEvents) {
  126.56 +        var knownEventsForType = knownEvents[eventType];
  126.57 +        if (knownEventsForType.length) {
  126.58 +            for (var i = 0, j = knownEventsForType.length; i < j; i++)
  126.59 +                knownEventTypesByEventName[knownEventsForType[i]] = eventType;
  126.60 +        }
  126.61 +    }
  126.62 +    var eventsThatMustBeRegisteredUsingAttachEvent = { 'propertychange': true }; // Workaround for an IE9 issue - https://github.com/SteveSanderson/knockout/issues/406
  126.63 +
  126.64 +    // Detect IE versions for bug workarounds (uses IE conditionals, not UA string, for robustness)
  126.65 +    // Note that, since IE 10 does not support conditional comments, the following logic only detects IE < 10.
  126.66 +    // Currently this is by design, since IE 10+ behaves correctly when treated as a standard browser.
  126.67 +    // If there is a future need to detect specific versions of IE10+, we will amend this.
  126.68 +    var ieVersion = (function() {
  126.69 +        var version = 3, div = document.createElement('div'), iElems = div.getElementsByTagName('i');
  126.70 +
  126.71 +        // Keep constructing conditional HTML blocks until we hit one that resolves to an empty fragment
  126.72 +        while (
  126.73 +            div.innerHTML = '<!--[if gt IE ' + (++version) + ']><i></i><![endif]-->',
  126.74 +            iElems[0]
  126.75 +        );
  126.76 +        return version > 4 ? version : undefined;
  126.77 +    }());
  126.78 +    var isIe6 = ieVersion === 6,
  126.79 +        isIe7 = ieVersion === 7;
  126.80 +
  126.81 +    function isClickOnCheckableElement(element, eventType) {
  126.82 +        if ((ko.utils.tagNameLower(element) !== "input") || !element.type) return false;
  126.83 +        if (eventType.toLowerCase() != "click") return false;
  126.84 +        var inputType = element.type;
  126.85 +        return (inputType == "checkbox") || (inputType == "radio");
  126.86 +    }
  126.87 +
  126.88 +    return {
  126.89 +        fieldsIncludedWithJsonPost: ['authenticity_token', /^__RequestVerificationToken(_.*)?$/],
  126.90 +
  126.91 +        arrayForEach: function (array, action) {
  126.92 +            for (var i = 0, j = array.length; i < j; i++)
  126.93 +                action(array[i]);
  126.94 +        },
  126.95 +
  126.96 +        arrayIndexOf: function (array, item) {
  126.97 +            if (typeof Array.prototype.indexOf == "function")
  126.98 +                return Array.prototype.indexOf.call(array, item);
  126.99 +            for (var i = 0, j = array.length; i < j; i++)
 126.100 +                if (array[i] === item)
 126.101 +                    return i;
 126.102 +            return -1;
 126.103 +        },
 126.104 +
 126.105 +        arrayFirst: function (array, predicate, predicateOwner) {
 126.106 +            for (var i = 0, j = array.length; i < j; i++)
 126.107 +                if (predicate.call(predicateOwner, array[i]))
 126.108 +                    return array[i];
 126.109 +            return null;
 126.110 +        },
 126.111 +
 126.112 +        arrayRemoveItem: function (array, itemToRemove) {
 126.113 +            var index = ko.utils.arrayIndexOf(array, itemToRemove);
 126.114 +            if (index >= 0)
 126.115 +                array.splice(index, 1);
 126.116 +        },
 126.117 +
 126.118 +        arrayGetDistinctValues: function (array) {
 126.119 +            array = array || [];
 126.120 +            var result = [];
 126.121 +            for (var i = 0, j = array.length; i < j; i++) {
 126.122 +                if (ko.utils.arrayIndexOf(result, array[i]) < 0)
 126.123 +                    result.push(array[i]);
 126.124 +            }
 126.125 +            return result;
 126.126 +        },
 126.127 +
 126.128 +        arrayMap: function (array, mapping) {
 126.129 +            array = array || [];
 126.130 +            var result = [];
 126.131 +            for (var i = 0, j = array.length; i < j; i++)
 126.132 +                result.push(mapping(array[i]));
 126.133 +            return result;
 126.134 +        },
 126.135 +
 126.136 +        arrayFilter: function (array, predicate) {
 126.137 +            array = array || [];
 126.138 +            var result = [];
 126.139 +            for (var i = 0, j = array.length; i < j; i++)
 126.140 +                if (predicate(array[i]))
 126.141 +                    result.push(array[i]);
 126.142 +            return result;
 126.143 +        },
 126.144 +
 126.145 +        arrayPushAll: function (array, valuesToPush) {
 126.146 +            if (valuesToPush instanceof Array)
 126.147 +                array.push.apply(array, valuesToPush);
 126.148 +            else
 126.149 +                for (var i = 0, j = valuesToPush.length; i < j; i++)
 126.150 +                    array.push(valuesToPush[i]);
 126.151 +            return array;
 126.152 +        },
 126.153 +
 126.154 +        extend: function (target, source) {
 126.155 +            if (source) {
 126.156 +                for(var prop in source) {
 126.157 +                    if(source.hasOwnProperty(prop)) {
 126.158 +                        target[prop] = source[prop];
 126.159 +                    }
 126.160 +                }
 126.161 +            }
 126.162 +            return target;
 126.163 +        },
 126.164 +
 126.165 +        emptyDomNode: function (domNode) {
 126.166 +            while (domNode.firstChild) {
 126.167 +                ko.removeNode(domNode.firstChild);
 126.168 +            }
 126.169 +        },
 126.170 +
 126.171 +        moveCleanedNodesToContainerElement: function(nodes) {
 126.172 +            // Ensure it's a real array, as we're about to reparent the nodes and
 126.173 +            // we don't want the underlying collection to change while we're doing that.
 126.174 +            var nodesArray = ko.utils.makeArray(nodes);
 126.175 +
 126.176 +            var container = document.createElement('div');
 126.177 +            for (var i = 0, j = nodesArray.length; i < j; i++) {
 126.178 +                container.appendChild(ko.cleanNode(nodesArray[i]));
 126.179 +            }
 126.180 +            return container;
 126.181 +        },
 126.182 +
 126.183 +        cloneNodes: function (nodesArray, shouldCleanNodes) {
 126.184 +            for (var i = 0, j = nodesArray.length, newNodesArray = []; i < j; i++) {
 126.185 +                var clonedNode = nodesArray[i].cloneNode(true);
 126.186 +                newNodesArray.push(shouldCleanNodes ? ko.cleanNode(clonedNode) : clonedNode);
 126.187 +            }
 126.188 +            return newNodesArray;
 126.189 +        },
 126.190 +
 126.191 +        setDomNodeChildren: function (domNode, childNodes) {
 126.192 +            ko.utils.emptyDomNode(domNode);
 126.193 +            if (childNodes) {
 126.194 +                for (var i = 0, j = childNodes.length; i < j; i++)
 126.195 +                    domNode.appendChild(childNodes[i]);
 126.196 +            }
 126.197 +        },
 126.198 +
 126.199 +        replaceDomNodes: function (nodeToReplaceOrNodeArray, newNodesArray) {
 126.200 +            var nodesToReplaceArray = nodeToReplaceOrNodeArray.nodeType ? [nodeToReplaceOrNodeArray] : nodeToReplaceOrNodeArray;
 126.201 +            if (nodesToReplaceArray.length > 0) {
 126.202 +                var insertionPoint = nodesToReplaceArray[0];
 126.203 +                var parent = insertionPoint.parentNode;
 126.204 +                for (var i = 0, j = newNodesArray.length; i < j; i++)
 126.205 +                    parent.insertBefore(newNodesArray[i], insertionPoint);
 126.206 +                for (var i = 0, j = nodesToReplaceArray.length; i < j; i++) {
 126.207 +                    ko.removeNode(nodesToReplaceArray[i]);
 126.208 +                }
 126.209 +            }
 126.210 +        },
 126.211 +
 126.212 +        setOptionNodeSelectionState: function (optionNode, isSelected) {
 126.213 +            // IE6 sometimes throws "unknown error" if you try to write to .selected directly, whereas Firefox struggles with setAttribute. Pick one based on browser.
 126.214 +            if (ieVersion < 7)
 126.215 +                optionNode.setAttribute("selected", isSelected);
 126.216 +            else
 126.217 +                optionNode.selected = isSelected;
 126.218 +        },
 126.219 +
 126.220 +        stringTrim: function (string) {
 126.221 +            return (string || "").replace(stringTrimRegex, "");
 126.222 +        },
 126.223 +
 126.224 +        stringTokenize: function (string, delimiter) {
 126.225 +            var result = [];
 126.226 +            var tokens = (string || "").split(delimiter);
 126.227 +            for (var i = 0, j = tokens.length; i < j; i++) {
 126.228 +                var trimmed = ko.utils.stringTrim(tokens[i]);
 126.229 +                if (trimmed !== "")
 126.230 +                    result.push(trimmed);
 126.231 +            }
 126.232 +            return result;
 126.233 +        },
 126.234 +
 126.235 +        stringStartsWith: function (string, startsWith) {
 126.236 +            string = string || "";
 126.237 +            if (startsWith.length > string.length)
 126.238 +                return false;
 126.239 +            return string.substring(0, startsWith.length) === startsWith;
 126.240 +        },
 126.241 +
 126.242 +        domNodeIsContainedBy: function (node, containedByNode) {
 126.243 +            if (containedByNode.compareDocumentPosition)
 126.244 +                return (containedByNode.compareDocumentPosition(node) & 16) == 16;
 126.245 +            while (node != null) {
 126.246 +                if (node == containedByNode)
 126.247 +                    return true;
 126.248 +                node = node.parentNode;
 126.249 +            }
 126.250 +            return false;
 126.251 +        },
 126.252 +
 126.253 +        domNodeIsAttachedToDocument: function (node) {
 126.254 +            return ko.utils.domNodeIsContainedBy(node, node.ownerDocument);
 126.255 +        },
 126.256 +
 126.257 +        tagNameLower: function(element) {
 126.258 +            // For HTML elements, tagName will always be upper case; for XHTML elements, it'll be lower case.
 126.259 +            // Possible future optimization: If we know it's an element from an XHTML document (not HTML),
 126.260 +            // we don't need to do the .toLowerCase() as it will always be lower case anyway.
 126.261 +            return element && element.tagName && element.tagName.toLowerCase();
 126.262 +        },
 126.263 +
 126.264 +        registerEventHandler: function (element, eventType, handler) {
 126.265 +            var mustUseAttachEvent = ieVersion && eventsThatMustBeRegisteredUsingAttachEvent[eventType];
 126.266 +            if (!mustUseAttachEvent && typeof jQuery != "undefined") {
 126.267 +                if (isClickOnCheckableElement(element, eventType)) {
 126.268 +                    // For click events on checkboxes, jQuery interferes with the event handling in an awkward way:
 126.269 +                    // it toggles the element checked state *after* the click event handlers run, whereas native
 126.270 +                    // click events toggle the checked state *before* the event handler.
 126.271 +                    // Fix this by intecepting the handler and applying the correct checkedness before it runs.
 126.272 +                    var originalHandler = handler;
 126.273 +                    handler = function(event, eventData) {
 126.274 +                        var jQuerySuppliedCheckedState = this.checked;
 126.275 +                        if (eventData)
 126.276 +                            this.checked = eventData.checkedStateBeforeEvent !== true;
 126.277 +                        originalHandler.call(this, event);
 126.278 +                        this.checked = jQuerySuppliedCheckedState; // Restore the state jQuery applied
 126.279 +                    };
 126.280 +                }
 126.281 +                jQuery(element)['bind'](eventType, handler);
 126.282 +            } else if (!mustUseAttachEvent && typeof element.addEventListener == "function")
 126.283 +                element.addEventListener(eventType, handler, false);
 126.284 +            else if (typeof element.attachEvent != "undefined")
 126.285 +                element.attachEvent("on" + eventType, function (event) {
 126.286 +                    handler.call(element, event);
 126.287 +                });
 126.288 +            else
 126.289 +                throw new Error("Browser doesn't support addEventListener or attachEvent");
 126.290 +        },
 126.291 +
 126.292 +        triggerEvent: function (element, eventType) {
 126.293 +            if (!(element && element.nodeType))
 126.294 +                throw new Error("element must be a DOM node when calling triggerEvent");
 126.295 +
 126.296 +            if (typeof jQuery != "undefined") {
 126.297 +                var eventData = [];
 126.298 +                if (isClickOnCheckableElement(element, eventType)) {
 126.299 +                    // Work around the jQuery "click events on checkboxes" issue described above by storing the original checked state before triggering the handler
 126.300 +                    eventData.push({ checkedStateBeforeEvent: element.checked });
 126.301 +                }
 126.302 +                jQuery(element)['trigger'](eventType, eventData);
 126.303 +            } else if (typeof document.createEvent == "function") {
 126.304 +                if (typeof element.dispatchEvent == "function") {
 126.305 +                    var eventCategory = knownEventTypesByEventName[eventType] || "HTMLEvents";
 126.306 +                    var event = document.createEvent(eventCategory);
 126.307 +                    event.initEvent(eventType, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, element);
 126.308 +                    element.dispatchEvent(event);
 126.309 +                }
 126.310 +                else
 126.311 +                    throw new Error("The supplied element doesn't support dispatchEvent");
 126.312 +            } else if (typeof element.fireEvent != "undefined") {
 126.313 +                // Unlike other browsers, IE doesn't change the checked state of checkboxes/radiobuttons when you trigger their "click" event
 126.314 +                // so to make it consistent, we'll do it manually here
 126.315 +                if (isClickOnCheckableElement(element, eventType))
 126.316 +                    element.checked = element.checked !== true;
 126.317 +                element.fireEvent("on" + eventType);
 126.318 +            }
 126.319 +            else
 126.320 +                throw new Error("Browser doesn't support triggering events");
 126.321 +        },
 126.322 +
 126.323 +        unwrapObservable: function (value) {
 126.324 +            return ko.isObservable(value) ? value() : value;
 126.325 +        },
 126.326 +
 126.327 +        peekObservable: function (value) {
 126.328 +            return ko.isObservable(value) ? value.peek() : value;
 126.329 +        },
 126.330 +
 126.331 +        toggleDomNodeCssClass: function (node, classNames, shouldHaveClass) {
 126.332 +            if (classNames) {
 126.333 +                var cssClassNameRegex = /[\w-]+/g,
 126.334 +                    currentClassNames = node.className.match(cssClassNameRegex) || [];
 126.335 +                ko.utils.arrayForEach(classNames.match(cssClassNameRegex), function(className) {
 126.336 +                    var indexOfClass = ko.utils.arrayIndexOf(currentClassNames, className);
 126.337 +                    if (indexOfClass >= 0) {
 126.338 +                        if (!shouldHaveClass)
 126.339 +                            currentClassNames.splice(indexOfClass, 1);
 126.340 +                    } else {
 126.341 +                        if (shouldHaveClass)
 126.342 +                            currentClassNames.push(className);
 126.343 +                    }
 126.344 +                });
 126.345 +                node.className = currentClassNames.join(" ");
 126.346 +            }
 126.347 +        },
 126.348 +
 126.349 +        setTextContent: function(element, textContent) {
 126.350 +            var value = ko.utils.unwrapObservable(textContent);
 126.351 +            if ((value === null) || (value === undefined))
 126.352 +                value = "";
 126.353 +
 126.354 +            if (element.nodeType === 3) {
 126.355 +                element.data = value;
 126.356 +            } else {
 126.357 +                // We need there to be exactly one child: a text node.
 126.358 +                // If there are no children, more than one, or if it's not a text node,
 126.359 +                // we'll clear everything and create a single text node.
 126.360 +                var innerTextNode = ko.virtualElements.firstChild(element);
 126.361 +                if (!innerTextNode || innerTextNode.nodeType != 3 || ko.virtualElements.nextSibling(innerTextNode)) {
 126.362 +                    ko.virtualElements.setDomNodeChildren(element, [document.createTextNode(value)]);
 126.363 +                } else {
 126.364 +                    innerTextNode.data = value;
 126.365 +                }
 126.366 +
 126.367 +                ko.utils.forceRefresh(element);
 126.368 +            }
 126.369 +        },
 126.370 +
 126.371 +        setElementName: function(element, name) {
 126.372 +            element.name = name;
 126.373 +
 126.374 +            // Workaround IE 6/7 issue
 126.375 +            // - https://github.com/SteveSanderson/knockout/issues/197
 126.376 +            // - http://www.matts411.com/post/setting_the_name_attribute_in_ie_dom/
 126.377 +            if (ieVersion <= 7) {
 126.378 +                try {
 126.379 +                    element.mergeAttributes(document.createElement("<input name='" + element.name + "'/>"), false);
 126.380 +                }
 126.381 +                catch(e) {} // For IE9 with doc mode "IE9 Standards" and browser mode "IE9 Compatibility View"
 126.382 +            }
 126.383 +        },
 126.384 +
 126.385 +        forceRefresh: function(node) {
 126.386 +            // Workaround for an IE9 rendering bug - https://github.com/SteveSanderson/knockout/issues/209
 126.387 +            if (ieVersion >= 9) {
 126.388 +                // For text nodes and comment nodes (most likely virtual elements), we will have to refresh the container
 126.389 +                var elem = node.nodeType == 1 ? node : node.parentNode;
 126.390 +                if (elem.style)
 126.391 +                    elem.style.zoom = elem.style.zoom;
 126.392 +            }
 126.393 +        },
 126.394 +
 126.395 +        ensureSelectElementIsRenderedCorrectly: function(selectElement) {
 126.396 +            // Workaround for IE9 rendering bug - it doesn't reliably display all the text in dynamically-added select boxes unless you force it to re-render by updating the width.
 126.397 +            // (See https://github.com/SteveSanderson/knockout/issues/312, http://stackoverflow.com/questions/5908494/select-only-shows-first-char-of-selected-option)
 126.398 +            if (ieVersion >= 9) {
 126.399 +                var originalWidth = selectElement.style.width;
 126.400 +                selectElement.style.width = 0;
 126.401 +                selectElement.style.width = originalWidth;
 126.402 +            }
 126.403 +        },
 126.404 +
 126.405 +        range: function (min, max) {
 126.406 +            min = ko.utils.unwrapObservable(min);
 126.407 +            max = ko.utils.unwrapObservable(max);
 126.408 +            var result = [];
 126.409 +            for (var i = min; i <= max; i++)
 126.410 +                result.push(i);
 126.411 +            return result;
 126.412 +        },
 126.413 +
 126.414 +        makeArray: function(arrayLikeObject) {
 126.415 +            var result = [];
 126.416 +            for (var i = 0, j = arrayLikeObject.length; i < j; i++) {
 126.417 +                result.push(arrayLikeObject[i]);
 126.418 +            };
 126.419 +            return result;
 126.420 +        },
 126.421 +
 126.422 +        isIe6 : isIe6,
 126.423 +        isIe7 : isIe7,
 126.424 +        ieVersion : ieVersion,
 126.425 +
 126.426 +        getFormFields: function(form, fieldName) {
 126.427 +            var fields = ko.utils.makeArray(form.getElementsByTagName("input")).concat(ko.utils.makeArray(form.getElementsByTagName("textarea")));
 126.428 +            var isMatchingField = (typeof fieldName == 'string')
 126.429 +                ? function(field) { return field.name === fieldName }
 126.430 +                : function(field) { return fieldName.test(field.name) }; // Treat fieldName as regex or object containing predicate
 126.431 +            var matches = [];
 126.432 +            for (var i = fields.length - 1; i >= 0; i--) {
 126.433 +                if (isMatchingField(fields[i]))
 126.434 +                    matches.push(fields[i]);
 126.435 +            };
 126.436 +            return matches;
 126.437 +        },
 126.438 +
 126.439 +        parseJson: function (jsonString) {
 126.440 +            if (typeof jsonString == "string") {
 126.441 +                jsonString = ko.utils.stringTrim(jsonString);
 126.442 +                if (jsonString) {
 126.443 +                    if (window.JSON && window.JSON.parse) // Use native parsing where available
 126.444 +                        return window.JSON.parse(jsonString);
 126.445 +                    return (new Function("return " + jsonString))(); // Fallback on less safe parsing for older browsers
 126.446 +                }
 126.447 +            }
 126.448 +            return null;
 126.449 +        },
 126.450 +
 126.451 +        stringifyJson: function (data, replacer, space) {   // replacer and space are optional
 126.452 +            if ((typeof JSON == "undefined") || (typeof JSON.stringify == "undefined"))
 126.453 +                throw new Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
 126.454 +            return JSON.stringify(ko.utils.unwrapObservable(data), replacer, space);
 126.455 +        },
 126.456 +
 126.457 +        postJson: function (urlOrForm, data, options) {
 126.458 +            options = options || {};
 126.459 +            var params = options['params'] || {};
 126.460 +            var includeFields = options['includeFields'] || this.fieldsIncludedWithJsonPost;
 126.461 +            var url = urlOrForm;
 126.462 +
 126.463 +            // If we were given a form, use its 'action' URL and pick out any requested field values
 126.464 +            if((typeof urlOrForm == 'object') && (ko.utils.tagNameLower(urlOrForm) === "form")) {
 126.465 +                var originalForm = urlOrForm;
 126.466 +                url = originalForm.action;
 126.467 +                for (var i = includeFields.length - 1; i >= 0; i--) {
 126.468 +                    var fields = ko.utils.getFormFields(originalForm, includeFields[i]);
 126.469 +                    for (var j = fields.length - 1; j >= 0; j--)
 126.470 +                        params[fields[j].name] = fields[j].value;
 126.471 +                }
 126.472 +            }
 126.473 +
 126.474 +            data = ko.utils.unwrapObservable(data);
 126.475 +            var form = document.createElement("form");
 126.476 +            form.style.display = "none";
 126.477 +            form.action = url;
 126.478 +            form.method = "post";
 126.479 +            for (var key in data) {
 126.480 +                var input = document.createElement("input");
 126.481 +                input.name = key;
 126.482 +                input.value = ko.utils.stringifyJson(ko.utils.unwrapObservable(data[key]));
 126.483 +                form.appendChild(input);
 126.484 +            }
 126.485 +            for (var key in params) {
 126.486 +                var input = document.createElement("input");
 126.487 +                input.name = key;
 126.488 +                input.value = params[key];
 126.489 +                form.appendChild(input);
 126.490 +            }
 126.491 +            document.body.appendChild(form);
 126.492 +            options['submitter'] ? options['submitter'](form) : form.submit();
 126.493 +            setTimeout(function () { form.parentNode.removeChild(form); }, 0);
 126.494 +        }
 126.495 +    }
 126.496 +})();
 126.497 +
 126.498 +ko.exportSymbol('utils', ko.utils);
 126.499 +ko.exportSymbol('utils.arrayForEach', ko.utils.arrayForEach);
 126.500 +ko.exportSymbol('utils.arrayFirst', ko.utils.arrayFirst);
 126.501 +ko.exportSymbol('utils.arrayFilter', ko.utils.arrayFilter);
 126.502 +ko.exportSymbol('utils.arrayGetDistinctValues', ko.utils.arrayGetDistinctValues);
 126.503 +ko.exportSymbol('utils.arrayIndexOf', ko.utils.arrayIndexOf);
 126.504 +ko.exportSymbol('utils.arrayMap', ko.utils.arrayMap);
 126.505 +ko.exportSymbol('utils.arrayPushAll', ko.utils.arrayPushAll);
 126.506 +ko.exportSymbol('utils.arrayRemoveItem', ko.utils.arrayRemoveItem);
 126.507 +ko.exportSymbol('utils.extend', ko.utils.extend);
 126.508 +ko.exportSymbol('utils.fieldsIncludedWithJsonPost', ko.utils.fieldsIncludedWithJsonPost);
 126.509 +ko.exportSymbol('utils.getFormFields', ko.utils.getFormFields);
 126.510 +ko.exportSymbol('utils.peekObservable', ko.utils.peekObservable);
 126.511 +ko.exportSymbol('utils.postJson', ko.utils.postJson);
 126.512 +ko.exportSymbol('utils.parseJson', ko.utils.parseJson);
 126.513 +ko.exportSymbol('utils.registerEventHandler', ko.utils.registerEventHandler);
 126.514 +ko.exportSymbol('utils.stringifyJson', ko.utils.stringifyJson);
 126.515 +ko.exportSymbol('utils.range', ko.utils.range);
 126.516 +ko.exportSymbol('utils.toggleDomNodeCssClass', ko.utils.toggleDomNodeCssClass);
 126.517 +ko.exportSymbol('utils.triggerEvent', ko.utils.triggerEvent);
 126.518 +ko.exportSymbol('utils.unwrapObservable', ko.utils.unwrapObservable);
 126.519 +
 126.520 +if (!Function.prototype['bind']) {
 126.521 +    // Function.prototype.bind is a standard part of ECMAScript 5th Edition (December 2009, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf)
 126.522 +    // In case the browser doesn't implement it natively, provide a JavaScript implementation. This implementation is based on the one in prototype.js
 126.523 +    Function.prototype['bind'] = function (object) {
 126.524 +        var originalFunction = this, args = Array.prototype.slice.call(arguments), object = args.shift();
 126.525 +        return function () {
 126.526 +            return originalFunction.apply(object, args.concat(Array.prototype.slice.call(arguments)));
 126.527 +        };
 126.528 +    };
 126.529 +}
 126.530 +
 126.531 +ko.utils.domData = new (function () {
 126.532 +    var uniqueId = 0;
 126.533 +    var dataStoreKeyExpandoPropertyName = "__ko__" + (new Date).getTime();
 126.534 +    var dataStore = {};
 126.535 +    return {
 126.536 +        get: function (node, key) {
 126.537 +            var allDataForNode = ko.utils.domData.getAll(node, false);
 126.538 +            return allDataForNode === undefined ? undefined : allDataForNode[key];
 126.539 +        },
 126.540 +        set: function (node, key, value) {
 126.541 +            if (value === undefined) {
 126.542 +                // Make sure we don't actually create a new domData key if we are actually deleting a value
 126.543 +                if (ko.utils.domData.getAll(node, false) === undefined)
 126.544 +                    return;
 126.545 +            }
 126.546 +            var allDataForNode = ko.utils.domData.getAll(node, true);
 126.547 +            allDataForNode[key] = value;
 126.548 +        },
 126.549 +        getAll: function (node, createIfNotFound) {
 126.550 +            var dataStoreKey = node[dataStoreKeyExpandoPropertyName];
 126.551 +            var hasExistingDataStore = dataStoreKey && (dataStoreKey !== "null") && dataStore[dataStoreKey];
 126.552 +            if (!hasExistingDataStore) {
 126.553 +                if (!createIfNotFound)
 126.554 +                    return undefined;
 126.555 +                dataStoreKey = node[dataStoreKeyExpandoPropertyName] = "ko" + uniqueId++;
 126.556 +                dataStore[dataStoreKey] = {};
 126.557 +            }
 126.558 +            return dataStore[dataStoreKey];
 126.559 +        },
 126.560 +        clear: function (node) {
 126.561 +            var dataStoreKey = node[dataStoreKeyExpandoPropertyName];
 126.562 +            if (dataStoreKey) {
 126.563 +                delete dataStore[dataStoreKey];
 126.564 +                node[dataStoreKeyExpandoPropertyName] = null;
 126.565 +                return true; // Exposing "did clean" flag purely so specs can infer whether things have been cleaned up as intended
 126.566 +            }
 126.567 +            return false;
 126.568 +        }
 126.569 +    }
 126.570 +})();
 126.571 +
 126.572 +ko.exportSymbol('utils.domData', ko.utils.domData);
 126.573 +ko.exportSymbol('utils.domData.clear', ko.utils.domData.clear); // Exporting only so specs can clear up after themselves fully
 126.574 +
 126.575 +ko.utils.domNodeDisposal = new (function () {
 126.576 +    var domDataKey = "__ko_domNodeDisposal__" + (new Date).getTime();
 126.577 +    var cleanableNodeTypes = { 1: true, 8: true, 9: true };       // Element, Comment, Document
 126.578 +    var cleanableNodeTypesWithDescendants = { 1: true, 9: true }; // Element, Document
 126.579 +
 126.580 +    function getDisposeCallbacksCollection(node, createIfNotFound) {
 126.581 +        var allDisposeCallbacks = ko.utils.domData.get(node, domDataKey);
 126.582 +        if ((allDisposeCallbacks === undefined) && createIfNotFound) {
 126.583 +            allDisposeCallbacks = [];
 126.584 +            ko.utils.domData.set(node, domDataKey, allDisposeCallbacks);
 126.585 +        }
 126.586 +        return allDisposeCallbacks;
 126.587 +    }
 126.588 +    function destroyCallbacksCollection(node) {
 126.589 +        ko.utils.domData.set(node, domDataKey, undefined);
 126.590 +    }
 126.591 +
 126.592 +    function cleanSingleNode(node) {
 126.593 +        // Run all the dispose callbacks
 126.594 +        var callbacks = getDisposeCallbacksCollection(node, false);
 126.595 +        if (callbacks) {
 126.596 +            callbacks = callbacks.slice(0); // Clone, as the array may be modified during iteration (typically, callbacks will remove themselves)
 126.597 +            for (var i = 0; i < callbacks.length; i++)
 126.598 +                callbacks[i](node);
 126.599 +        }
 126.600 +
 126.601 +        // Also erase the DOM data
 126.602 +        ko.utils.domData.clear(node);
 126.603 +
 126.604 +        // Special support for jQuery here because it's so commonly used.
 126.605 +        // Many jQuery plugins (including jquery.tmpl) store data using jQuery's equivalent of domData
 126.606 +        // so notify it to tear down any resources associated with the node & descendants here.
 126.607 +        if ((typeof jQuery == "function") && (typeof jQuery['cleanData'] == "function"))
 126.608 +            jQuery['cleanData']([node]);
 126.609 +
 126.610 +        // Also clear any immediate-child comment nodes, as these wouldn't have been found by
 126.611 +        // node.getElementsByTagName("*") in cleanNode() (comment nodes aren't elements)
 126.612 +        if (cleanableNodeTypesWithDescendants[node.nodeType])
 126.613 +            cleanImmediateCommentTypeChildren(node);
 126.614 +    }
 126.615 +
 126.616 +    function cleanImmediateCommentTypeChildren(nodeWithChildren) {
 126.617 +        var child, nextChild = nodeWithChildren.firstChild;
 126.618 +        while (child = nextChild) {
 126.619 +            nextChild = child.nextSibling;
 126.620 +            if (child.nodeType === 8)
 126.621 +                cleanSingleNode(child);
 126.622 +        }
 126.623 +    }
 126.624 +
 126.625 +    return {
 126.626 +        addDisposeCallback : function(node, callback) {
 126.627 +            if (typeof callback != "function")
 126.628 +                throw new Error("Callback must be a function");
 126.629 +            getDisposeCallbacksCollection(node, true).push(callback);
 126.630 +        },
 126.631 +
 126.632 +        removeDisposeCallback : function(node, callback) {
 126.633 +            var callbacksCollection = getDisposeCallbacksCollection(node, false);
 126.634 +            if (callbacksCollection) {
 126.635 +                ko.utils.arrayRemoveItem(callbacksCollection, callback);
 126.636 +                if (callbacksCollection.length == 0)
 126.637 +                    destroyCallbacksCollection(node);
 126.638 +            }
 126.639 +        },
 126.640 +
 126.641 +        cleanNode : function(node) {
 126.642 +            // First clean this node, where applicable
 126.643 +            if (cleanableNodeTypes[node.nodeType]) {
 126.644 +                cleanSingleNode(node);
 126.645 +
 126.646 +                // ... then its descendants, where applicable
 126.647 +                if (cleanableNodeTypesWithDescendants[node.nodeType]) {
 126.648 +                    // Clone the descendants list in case it changes during iteration
 126.649 +                    var descendants = [];
 126.650 +                    ko.utils.arrayPushAll(descendants, node.getElementsByTagName("*"));
 126.651 +                    for (var i = 0, j = descendants.length; i < j; i++)
 126.652 +                        cleanSingleNode(descendants[i]);
 126.653 +                }
 126.654 +            }
 126.655 +            return node;
 126.656 +        },
 126.657 +
 126.658 +        removeNode : function(node) {
 126.659 +            ko.cleanNode(node);
 126.660 +            if (node.parentNode)
 126.661 +                node.parentNode.removeChild(node);
 126.662 +        }
 126.663 +    }
 126.664 +})();
 126.665 +ko.cleanNode = ko.utils.domNodeDisposal.cleanNode; // Shorthand name for convenience
 126.666 +ko.removeNode = ko.utils.domNodeDisposal.removeNode; // Shorthand name for convenience
 126.667 +ko.exportSymbol('cleanNode', ko.cleanNode);
 126.668 +ko.exportSymbol('removeNode', ko.removeNode);
 126.669 +ko.exportSymbol('utils.domNodeDisposal', ko.utils.domNodeDisposal);
 126.670 +ko.exportSymbol('utils.domNodeDisposal.addDisposeCallback', ko.utils.domNodeDisposal.addDisposeCallback);
 126.671 +ko.exportSymbol('utils.domNodeDisposal.removeDisposeCallback', ko.utils.domNodeDisposal.removeDisposeCallback);
 126.672 +(function () {
 126.673 +    var leadingCommentRegex = /^(\s*)<!--(.*?)-->/;
 126.674 +
 126.675 +    function simpleHtmlParse(html) {
 126.676 +        // Based on jQuery's "clean" function, but only accounting for table-related elements.
 126.677 +        // If you have referenced jQuery, this won't be used anyway - KO will use jQuery's "clean" function directly
 126.678 +
 126.679 +        // Note that there's still an issue in IE < 9 whereby it will discard comment nodes that are the first child of
 126.680 +        // a descendant node. For example: "<div><!-- mycomment -->abc</div>" will get parsed as "<div>abc</div>"
 126.681 +        // This won't affect anyone who has referenced jQuery, and there's always the workaround of inserting a dummy node
 126.682 +        // (possibly a text node) in front of the comment. So, KO does not attempt to workaround this IE issue automatically at present.
 126.683 +
 126.684 +        // Trim whitespace, otherwise indexOf won't work as expected
 126.685 +        var tags = ko.utils.stringTrim(html).toLowerCase(), div = document.createElement("div");
 126.686 +
 126.687 +        // Finds the first match from the left column, and returns the corresponding "wrap" data from the right column
 126.688 +        var wrap = tags.match(/^<(thead|tbody|tfoot)/)              && [1, "<table>", "</table>"] ||
 126.689 +                   !tags.indexOf("<tr")                             && [2, "<table><tbody>", "</tbody></table>"] ||
 126.690 +                   (!tags.indexOf("<td") || !tags.indexOf("<th"))   && [3, "<table><tbody><tr>", "</tr></tbody></table>"] ||
 126.691 +                   /* anything else */                                 [0, "", ""];
 126.692 +
 126.693 +        // Go to html and back, then peel off extra wrappers
 126.694 +        // Note that we always prefix with some dummy text, because otherwise, IE<9 will strip out leading comment nodes in descendants. Total madness.
 126.695 +        var markup = "ignored<div>" + wrap[1] + html + wrap[2] + "</div>";
 126.696 +        if (typeof window['innerShiv'] == "function") {
 126.697 +            div.appendChild(window['innerShiv'](markup));
 126.698 +        } else {
 126.699 +            div.innerHTML = markup;
 126.700 +        }
 126.701 +
 126.702 +        // Move to the right depth
 126.703 +        while (wrap[0]--)
 126.704 +            div = div.lastChild;
 126.705 +
 126.706 +        return ko.utils.makeArray(div.lastChild.childNodes);
 126.707 +    }
 126.708 +
 126.709 +    function jQueryHtmlParse(html) {
 126.710 +        // jQuery's "parseHTML" function was introduced in jQuery 1.8.0 and is a documented public API.
 126.711 +        if (jQuery['parseHTML']) {
 126.712 +            return jQuery['parseHTML'](html);
 126.713 +        } else {
 126.714 +            // For jQuery < 1.8.0, we fall back on the undocumented internal "clean" function.
 126.715 +            var elems = jQuery['clean']([html]);
 126.716 +
 126.717 +            // As of jQuery 1.7.1, jQuery parses the HTML by appending it to some dummy parent nodes held in an in-memory document fragment.
 126.718 +            // Unfortunately, it never clears the dummy parent nodes from the document fragment, so it leaks memory over time.
 126.719 +            // Fix this by finding the top-most dummy parent element, and detaching it from its owner fragment.
 126.720 +            if (elems && elems[0]) {
 126.721 +                // Find the top-most parent element that's a direct child of a document fragment
 126.722 +                var elem = elems[0];
 126.723 +                while (elem.parentNode && elem.parentNode.nodeType !== 11 /* i.e., DocumentFragment */)
 126.724 +                    elem = elem.parentNode;
 126.725 +                // ... then detach it
 126.726 +                if (elem.parentNode)
 126.727 +                    elem.parentNode.removeChild(elem);
 126.728 +            }
 126.729 +
 126.730 +            return elems;
 126.731 +        }
 126.732 +    }
 126.733 +
 126.734 +    ko.utils.parseHtmlFragment = function(html) {
 126.735 +        return typeof jQuery != 'undefined' ? jQueryHtmlParse(html)   // As below, benefit from jQuery's optimisations where possible
 126.736 +                                            : simpleHtmlParse(html);  // ... otherwise, this simple logic will do in most common cases.
 126.737 +    };
 126.738 +
 126.739 +    ko.utils.setHtml = function(node, html) {
 126.740 +        ko.utils.emptyDomNode(node);
 126.741 +
 126.742 +        // There's no legitimate reason to display a stringified observable without unwrapping it, so we'll unwrap it
 126.743 +        html = ko.utils.unwrapObservable(html);
 126.744 +
 126.745 +        if ((html !== null) && (html !== undefined)) {
 126.746 +            if (typeof html != 'string')
 126.747 +                html = html.toString();
 126.748 +
 126.749 +            // jQuery contains a lot of sophisticated code to parse arbitrary HTML fragments,
 126.750 +            // for example <tr> elements which are not normally allowed to exist on their own.
 126.751 +            // If you've referenced jQuery we'll use that rather than duplicating its code.
 126.752 +            if (typeof jQuery != 'undefined') {
 126.753 +                jQuery(node)['html'](html);
 126.754 +            } else {
 126.755 +                // ... otherwise, use KO's own parsing logic.
 126.756 +                var parsedNodes = ko.utils.parseHtmlFragment(html);
 126.757 +                for (var i = 0; i < parsedNodes.length; i++)
 126.758 +                    node.appendChild(parsedNodes[i]);
 126.759 +            }
 126.760 +        }
 126.761 +    };
 126.762 +})();
 126.763 +
 126.764 +ko.exportSymbol('utils.parseHtmlFragment', ko.utils.parseHtmlFragment);
 126.765 +ko.exportSymbol('utils.setHtml', ko.utils.setHtml);
 126.766 +
 126.767 +ko.memoization = (function () {
 126.768 +    var memos = {};
 126.769 +
 126.770 +    function randomMax8HexChars() {
 126.771 +        return (((1 + Math.random()) * 0x100000000) | 0).toString(16).substring(1);
 126.772 +    }
 126.773 +    function generateRandomId() {
 126.774 +        return randomMax8HexChars() + randomMax8HexChars();
 126.775 +    }
 126.776 +    function findMemoNodes(rootNode, appendToArray) {
 126.777 +        if (!rootNode)
 126.778 +            return;
 126.779 +        if (rootNode.nodeType == 8) {
 126.780 +            var memoId = ko.memoization.parseMemoText(rootNode.nodeValue);
 126.781 +            if (memoId != null)
 126.782 +                appendToArray.push({ domNode: rootNode, memoId: memoId });
 126.783 +        } else if (rootNode.nodeType == 1) {
 126.784 +            for (var i = 0, childNodes = rootNode.childNodes, j = childNodes.length; i < j; i++)
 126.785 +                findMemoNodes(childNodes[i], appendToArray);
 126.786 +        }
 126.787 +    }
 126.788 +
 126.789 +    return {
 126.790 +        memoize: function (callback) {
 126.791 +            if (typeof callback != "function")
 126.792 +                throw new Error("You can only pass a function to ko.memoization.memoize()");
 126.793 +            var memoId = generateRandomId();
 126.794 +            memos[memoId] = callback;
 126.795 +            return "<!--[ko_memo:" + memoId + "]-->";
 126.796 +        },
 126.797 +
 126.798 +        unmemoize: function (memoId, callbackParams) {
 126.799 +            var callback = memos[memoId];
 126.800 +            if (callback === undefined)
 126.801 +                throw new Error("Couldn't find any memo with ID " + memoId + ". Perhaps it's already been unmemoized.");
 126.802 +            try {
 126.803 +                callback.apply(null, callbackParams || []);
 126.804 +                return true;
 126.805 +            }
 126.806 +            finally { delete memos[memoId]; }
 126.807 +        },
 126.808 +
 126.809 +        unmemoizeDomNodeAndDescendants: function (domNode, extraCallbackParamsArray) {
 126.810 +            var memos = [];
 126.811 +            findMemoNodes(domNode, memos);
 126.812 +            for (var i = 0, j = memos.length; i < j; i++) {
 126.813 +                var node = memos[i].domNode;
 126.814 +                var combinedParams = [node];
 126.815 +                if (extraCallbackParamsArray)
 126.816 +                    ko.utils.arrayPushAll(combinedParams, extraCallbackParamsArray);
 126.817 +                ko.memoization.unmemoize(memos[i].memoId, combinedParams);
 126.818 +                node.nodeValue = ""; // Neuter this node so we don't try to unmemoize it again
 126.819 +                if (node.parentNode)
 126.820 +                    node.parentNode.removeChild(node); // If possible, erase it totally (not always possible - someone else might just hold a reference to it then call unmemoizeDomNodeAndDescendants again)
 126.821 +            }
 126.822 +        },
 126.823 +
 126.824 +        parseMemoText: function (memoText) {
 126.825 +            var match = memoText.match(/^\[ko_memo\:(.*?)\]$/);
 126.826 +            return match ? match[1] : null;
 126.827 +        }
 126.828 +    };
 126.829 +})();
 126.830 +
 126.831 +ko.exportSymbol('memoization', ko.memoization);
 126.832 +ko.exportSymbol('memoization.memoize', ko.memoization.memoize);
 126.833 +ko.exportSymbol('memoization.unmemoize', ko.memoization.unmemoize);
 126.834 +ko.exportSymbol('memoization.parseMemoText', ko.memoization.parseMemoText);
 126.835 +ko.exportSymbol('memoization.unmemoizeDomNodeAndDescendants', ko.memoization.unmemoizeDomNodeAndDescendants);
 126.836 +ko.extenders = {
 126.837 +    'throttle': function(target, timeout) {
 126.838 +        // Throttling means two things:
 126.839 +
 126.840 +        // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies
 126.841 +        //     notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate
 126.842 +        target['throttleEvaluation'] = timeout;
 126.843 +
 126.844 +        // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*
 126.845 +        //     so the target cannot change value synchronously or faster than a certain rate
 126.846 +        var writeTimeoutInstance = null;
 126.847 +        return ko.dependentObservable({
 126.848 +            'read': target,
 126.849 +            'write': function(value) {
 126.850 +                clearTimeout(writeTimeoutInstance);
 126.851 +                writeTimeoutInstance = setTimeout(function() {
 126.852 +                    target(value);
 126.853 +                }, timeout);
 126.854 +            }
 126.855 +        });
 126.856 +    },
 126.857 +
 126.858 +    'notify': function(target, notifyWhen) {
 126.859 +        target["equalityComparer"] = notifyWhen == "always"
 126.860 +            ? function() { return false } // Treat all values as not equal
 126.861 +            : ko.observable["fn"]["equalityComparer"];
 126.862 +        return target;
 126.863 +    }
 126.864 +};
 126.865 +
 126.866 +function applyExtenders(requestedExtenders) {
 126.867 +    var target = this;
 126.868 +    if (requestedExtenders) {
 126.869 +        for (var key in requestedExtenders) {
 126.870 +            var extenderHandler = ko.extenders[key];
 126.871 +            if (typeof extenderHandler == 'function') {
 126.872 +                target = extenderHandler(target, requestedExtenders[key]);
 126.873 +            }
 126.874 +        }
 126.875 +    }
 126.876 +    return target;
 126.877 +}
 126.878 +
 126.879 +ko.exportSymbol('extenders', ko.extenders);
 126.880 +
 126.881 +ko.subscription = function (target, callback, disposeCallback) {
 126.882 +    this.target = target;
 126.883 +    this.callback = callback;
 126.884 +    this.disposeCallback = disposeCallback;
 126.885 +    ko.exportProperty(this, 'dispose', this.dispose);
 126.886 +};
 126.887 +ko.subscription.prototype.dispose = function () {
 126.888 +    this.isDisposed = true;
 126.889 +    this.disposeCallback();
 126.890 +};
 126.891 +
 126.892 +ko.subscribable = function () {
 126.893 +    this._subscriptions = {};
 126.894 +
 126.895 +    ko.utils.extend(this, ko.subscribable['fn']);
 126.896 +    ko.exportProperty(this, 'subscribe', this.subscribe);
 126.897 +    ko.exportProperty(this, 'extend', this.extend);
 126.898 +    ko.exportProperty(this, 'getSubscriptionsCount', this.getSubscriptionsCount);
 126.899 +}
 126.900 +
 126.901 +var defaultEvent = "change";
 126.902 +
 126.903 +ko.subscribable['fn'] = {
 126.904 +    subscribe: function (callback, callbackTarget, event) {
 126.905 +        event = event || defaultEvent;
 126.906 +        var boundCallback = callbackTarget ? callback.bind(callbackTarget) : callback;
 126.907 +
 126.908 +        var subscription = new ko.subscription(this, boundCallback, function () {
 126.909 +            ko.utils.arrayRemoveItem(this._subscriptions[event], subscription);
 126.910 +        }.bind(this));
 126.911 +
 126.912 +        if (!this._subscriptions[event])
 126.913 +            this._subscriptions[event] = [];
 126.914 +        this._subscriptions[event].push(subscription);
 126.915 +        return subscription;
 126.916 +    },
 126.917 +
 126.918 +    "notifySubscribers": function (valueToNotify, event) {
 126.919 +        event = event || defaultEvent;
 126.920 +        if (this._subscriptions[event]) {
 126.921 +            ko.dependencyDetection.ignore(function() {
 126.922 +                ko.utils.arrayForEach(this._subscriptions[event].slice(0), function (subscription) {
 126.923 +                    // In case a subscription was disposed during the arrayForEach cycle, check
 126.924 +                    // for isDisposed on each subscription before invoking its callback
 126.925 +                    if (subscription && (subscription.isDisposed !== true))
 126.926 +                        subscription.callback(valueToNotify);
 126.927 +                });
 126.928 +            }, this);
 126.929 +        }
 126.930 +    },
 126.931 +
 126.932 +    getSubscriptionsCount: function () {
 126.933 +        var total = 0;
 126.934 +        for (var eventName in this._subscriptions) {
 126.935 +            if (this._subscriptions.hasOwnProperty(eventName))
 126.936 +                total += this._subscriptions[eventName].length;
 126.937 +        }
 126.938 +        return total;
 126.939 +    },
 126.940 +
 126.941 +    extend: applyExtenders
 126.942 +};
 126.943 +
 126.944 +
 126.945 +ko.isSubscribable = function (instance) {
 126.946 +    return typeof instance.subscribe == "function" && typeof instance["notifySubscribers"] == "function";
 126.947 +};
 126.948 +
 126.949 +ko.exportSymbol('subscribable', ko.subscribable);
 126.950 +ko.exportSymbol('isSubscribable', ko.isSubscribable);
 126.951 +
 126.952 +ko.dependencyDetection = (function () {
 126.953 +    var _frames = [];
 126.954 +
 126.955 +    return {
 126.956 +        begin: function (callback) {
 126.957 +            _frames.push({ callback: callback, distinctDependencies:[] });
 126.958 +        },
 126.959 +
 126.960 +        end: function () {
 126.961 +            _frames.pop();
 126.962 +        },
 126.963 +
 126.964 +        registerDependency: function (subscribable) {
 126.965 +            if (!ko.isSubscribable(subscribable))
 126.966 +                throw new Error("Only subscribable things can act as dependencies");
 126.967 +            if (_frames.length > 0) {
 126.968 +                var topFrame = _frames[_frames.length - 1];
 126.969 +                if (!topFrame || ko.utils.arrayIndexOf(topFrame.distinctDependencies, subscribable) >= 0)
 126.970 +                    return;
 126.971 +                topFrame.distinctDependencies.push(subscribable);
 126.972 +                topFrame.callback(subscribable);
 126.973 +            }
 126.974 +        },
 126.975 +
 126.976 +        ignore: function(callback, callbackTarget, callbackArgs) {
 126.977 +            try {
 126.978 +                _frames.push(null);
 126.979 +                return callback.apply(callbackTarget, callbackArgs || []);
 126.980 +            } finally {
 126.981 +                _frames.pop();
 126.982 +            }
 126.983 +        }
 126.984 +    };
 126.985 +})();
 126.986 +var primitiveTypes = { 'undefined':true, 'boolean':true, 'number':true, 'string':true };
 126.987 +
 126.988 +ko.observable = function (initialValue) {
 126.989 +    var _latestValue = initialValue;
 126.990 +
 126.991 +    function observable() {
 126.992 +        if (arguments.length > 0) {
 126.993 +            // Write
 126.994 +
 126.995 +            // Ignore writes if the value hasn't changed
 126.996 +            if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue, arguments[0])) {
 126.997 +                observable.valueWillMutate();
 126.998 +                _latestValue = arguments[0];
 126.999 +                if (DEBUG) observable._latestValue = _latestValue;
126.1000 +                observable.valueHasMutated();
126.1001 +            }
126.1002 +            return this; // Permits chained assignments
126.1003 +        }
126.1004 +        else {
126.1005 +            // Read
126.1006 +            ko.dependencyDetection.registerDependency(observable); // The caller only needs to be notified of changes if they did a "read" operation
126.1007 +            return _latestValue;
126.1008 +        }
126.1009 +    }
126.1010 +    if (DEBUG) observable._latestValue = _latestValue;
126.1011 +    ko.subscribable.call(observable);
126.1012 +    observable.peek = function() { return _latestValue };
126.1013 +    observable.valueHasMutated = function () { observable["notifySubscribers"](_latestValue); }
126.1014 +    observable.valueWillMutate = function () { observable["notifySubscribers"](_latestValue, "beforeChange"); }
126.1015 +    ko.utils.extend(observable, ko.observable['fn']);
126.1016 +
126.1017 +    ko.exportProperty(observable, 'peek', observable.peek);
126.1018 +    ko.exportProperty(observable, "valueHasMutated", observable.valueHasMutated);
126.1019 +    ko.exportProperty(observable, "valueWillMutate", observable.valueWillMutate);
126.1020 +
126.1021 +    return observable;
126.1022 +}
126.1023 +
126.1024 +ko.observable['fn'] = {
126.1025 +    "equalityComparer": function valuesArePrimitiveAndEqual(a, b) {
126.1026 +        var oldValueIsPrimitive = (a === null) || (typeof(a) in primitiveTypes);
126.1027 +        return oldValueIsPrimitive ? (a === b) : false;
126.1028 +    }
126.1029 +};
126.1030 +
126.1031 +var protoProperty = ko.observable.protoProperty = "__ko_proto__";
126.1032 +ko.observable['fn'][protoProperty] = ko.observable;
126.1033 +
126.1034 +ko.hasPrototype = function(instance, prototype) {
126.1035 +    if ((instance === null) || (instance === undefined) || (instance[protoProperty] === undefined)) return false;
126.1036 +    if (instance[protoProperty] === prototype) return true;
126.1037 +    return ko.hasPrototype(instance[protoProperty], prototype); // Walk the prototype chain
126.1038 +};
126.1039 +
126.1040 +ko.isObservable = function (instance) {
126.1041 +    return ko.hasPrototype(instance, ko.observable);
126.1042 +}
126.1043 +ko.isWriteableObservable = function (instance) {
126.1044 +    // Observable
126.1045 +    if ((typeof instance == "function") && instance[protoProperty] === ko.observable)
126.1046 +        return true;
126.1047 +    // Writeable dependent observable
126.1048 +    if ((typeof instance == "function") && (instance[protoProperty] === ko.dependentObservable) && (instance.hasWriteFunction))
126.1049 +        return true;
126.1050 +    // Anything else
126.1051 +    return false;
126.1052 +}
126.1053 +
126.1054 +
126.1055 +ko.exportSymbol('observable', ko.observable);
126.1056 +ko.exportSymbol('isObservable', ko.isObservable);
126.1057 +ko.exportSymbol('isWriteableObservable', ko.isWriteableObservable);
126.1058 +ko.observableArray = function (initialValues) {
126.1059 +    if (arguments.length == 0) {
126.1060 +        // Zero-parameter constructor initializes to empty array
126.1061 +        initialValues = [];
126.1062 +    }
126.1063 +    if ((initialValues !== null) && (initialValues !== undefined) && !('length' in initialValues))
126.1064 +        throw new Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");
126.1065 +
126.1066 +    var result = ko.observable(initialValues);
126.1067 +    ko.utils.extend(result, ko.observableArray['fn']);
126.1068 +    return result;
126.1069 +}
126.1070 +
126.1071 +ko.observableArray['fn'] = {
126.1072 +    'remove': function (valueOrPredicate) {
126.1073 +        var underlyingArray = this.peek();
126.1074 +        var removedValues = [];
126.1075 +        var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };
126.1076 +        for (var i = 0; i < underlyingArray.length; i++) {
126.1077 +            var value = underlyingArray[i];
126.1078 +            if (predicate(value)) {
126.1079 +                if (removedValues.length === 0) {
126.1080 +                    this.valueWillMutate();
126.1081 +                }
126.1082 +                removedValues.push(value);
126.1083 +                underlyingArray.splice(i, 1);
126.1084 +                i--;
126.1085 +            }
126.1086 +        }
126.1087 +        if (removedValues.length) {
126.1088 +            this.valueHasMutated();
126.1089 +        }
126.1090 +        return removedValues;
126.1091 +    },
126.1092 +
126.1093 +    'removeAll': function (arrayOfValues) {
126.1094 +        // If you passed zero args, we remove everything
126.1095 +        if (arrayOfValues === undefined) {
126.1096 +            var underlyingArray = this.peek();
126.1097 +            var allValues = underlyingArray.slice(0);
126.1098 +            this.valueWillMutate();
126.1099 +            underlyingArray.splice(0, underlyingArray.length);
126.1100 +            this.valueHasMutated();
126.1101 +            return allValues;
126.1102 +        }
126.1103 +        // If you passed an arg, we interpret it as an array of entries to remove
126.1104 +        if (!arrayOfValues)
126.1105 +            return [];
126.1106 +        return this['remove'](function (value) {
126.1107 +            return ko.utils.arrayIndexOf(arrayOfValues, value) >= 0;
126.1108 +        });
126.1109 +    },
126.1110 +
126.1111 +    'destroy': function (valueOrPredicate) {
126.1112 +        var underlyingArray = this.peek();
126.1113 +        var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) { return value === valueOrPredicate; };
126.1114 +        this.valueWillMutate();
126.1115 +        for (var i = underlyingArray.length - 1; i >= 0; i--) {
126.1116 +            var value = underlyingArray[i];
126.1117 +            if (predicate(value))
126.1118 +                underlyingArray[i]["_destroy"] = true;
126.1119 +        }
126.1120 +        this.valueHasMutated();
126.1121 +    },
126.1122 +
126.1123 +    'destroyAll': function (arrayOfValues) {
126.1124 +        // If you passed zero args, we destroy everything
126.1125 +        if (arrayOfValues === undefined)
126.1126 +            return this['destroy'](function() { return true });
126.1127 +
126.1128 +        // If you passed an arg, we interpret it as an array of entries to destroy
126.1129 +        if (!arrayOfValues)
126.1130 +            return [];
126.1131 +        return this['destroy'](function (value) {
126.1132 +            return ko.utils.arrayIndexOf(arrayOfValues, value) >= 0;
126.1133 +        });
126.1134 +    },
126.1135 +
126.1136 +    'indexOf': function (item) {
126.1137 +        var underlyingArray = this();
126.1138 +        return ko.utils.arrayIndexOf(underlyingArray, item);
126.1139 +    },
126.1140 +
126.1141 +    'replace': function(oldItem, newItem) {
126.1142 +        var index = this['indexOf'](oldItem);
126.1143 +        if (index >= 0) {
126.1144 +            this.valueWillMutate();
126.1145 +            this.peek()[index] = newItem;
126.1146 +            this.valueHasMutated();
126.1147 +        }
126.1148 +    }
126.1149 +}
126.1150 +
126.1151 +// Populate ko.observableArray.fn with read/write functions from native arrays
126.1152 +// Important: Do not add any additional functions here that may reasonably be used to *read* data from the array
126.1153 +// because we'll eval them without causing subscriptions, so ko.computed output could end up getting stale
126.1154 +ko.utils.arrayForEach(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (methodName) {
126.1155 +    ko.observableArray['fn'][methodName] = function () {
126.1156 +        // Use "peek" to avoid creating a subscription in any computed that we're executing in the context of
126.1157 +        // (for consistency with mutating regular observables)
126.1158 +        var underlyingArray = this.peek();
126.1159 +        this.valueWillMutate();
126.1160 +        var methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments);
126.1161 +        this.valueHasMutated();
126.1162 +        return methodCallResult;
126.1163 +    };
126.1164 +});
126.1165 +
126.1166 +// Populate ko.observableArray.fn with read-only functions from native arrays
126.1167 +ko.utils.arrayForEach(["slice"], function (methodName) {
126.1168 +    ko.observableArray['fn'][methodName] = function () {
126.1169 +        var underlyingArray = this();
126.1170 +        return underlyingArray[methodName].apply(underlyingArray, arguments);
126.1171 +    };
126.1172 +});
126.1173 +
126.1174 +ko.exportSymbol('observableArray', ko.observableArray);
126.1175 +ko.dependentObservable = function (evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) {
126.1176 +    var _latestValue,
126.1177 +        _hasBeenEvaluated = false,
126.1178 +        _isBeingEvaluated = false,
126.1179 +        readFunction = evaluatorFunctionOrOptions;
126.1180 +
126.1181 +    if (readFunction && typeof readFunction == "object") {
126.1182 +        // Single-parameter syntax - everything is on this "options" param
126.1183 +        options = readFunction;
126.1184 +        readFunction = options["read"];
126.1185 +    } else {
126.1186 +        // Multi-parameter syntax - construct the options according to the params passed
126.1187 +        options = options || {};
126.1188 +        if (!readFunction)
126.1189 +            readFunction = options["read"];
126.1190 +    }
126.1191 +    if (typeof readFunction != "function")
126.1192 +        throw new Error("Pass a function that returns the value of the ko.computed");
126.1193 +
126.1194 +    function addSubscriptionToDependency(subscribable) {
126.1195 +        _subscriptionsToDependencies.push(subscribable.subscribe(evaluatePossiblyAsync));
126.1196 +    }
126.1197 +
126.1198 +    function disposeAllSubscriptionsToDependencies() {
126.1199 +        ko.utils.arrayForEach(_subscriptionsToDependencies, function (subscription) {
126.1200 +            subscription.dispose();
126.1201 +        });
126.1202 +        _subscriptionsToDependencies = [];
126.1203 +    }
126.1204 +
126.1205 +    function evaluatePossiblyAsync() {
126.1206 +        var throttleEvaluationTimeout = dependentObservable['throttleEvaluation'];
126.1207 +        if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {
126.1208 +            clearTimeout(evaluationTimeoutInstance);
126.1209 +            evaluationTimeoutInstance = setTimeout(evaluateImmediate, throttleEvaluationTimeout);
126.1210 +        } else
126.1211 +            evaluateImmediate();
126.1212 +    }
126.1213 +
126.1214 +    function evaluateImmediate() {
126.1215 +        if (_isBeingEvaluated) {
126.1216 +            // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.
126.1217 +            // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost
126.1218 +            // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing
126.1219 +            // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387
126.1220 +            return;
126.1221 +        }
126.1222 +
126.1223 +        // Don't dispose on first evaluation, because the "disposeWhen" callback might
126.1224 +        // e.g., dispose when the associated DOM element isn't in the doc, and it's not
126.1225 +        // going to be in the doc until *after* the first evaluation
126.1226 +        if (_hasBeenEvaluated && disposeWhen()) {
126.1227 +            dispose();
126.1228 +            return;
126.1229 +        }
126.1230 +
126.1231 +        _isBeingEvaluated = true;
126.1232 +        try {
126.1233 +            // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).
126.1234 +            // Then, during evaluation, we cross off any that are in fact still being used.
126.1235 +            var disposalCandidates = ko.utils.arrayMap(_subscriptionsToDependencies, function(item) {return item.target;});
126.1236 +
126.1237 +            ko.dependencyDetection.begin(function(subscribable) {
126.1238 +                var inOld;
126.1239 +                if ((inOld = ko.utils.arrayIndexOf(disposalCandidates, subscribable)) >= 0)
126.1240 +                    disposalCandidates[inOld] = undefined; // Don't want to dispose this subscription, as it's still being used
126.1241 +                else
126.1242 +                    addSubscriptionToDependency(subscribable); // Brand new subscription - add it
126.1243 +            });
126.1244 +
126.1245 +            var newValue = readFunction.call(evaluatorFunctionTarget);
126.1246 +
126.1247 +            // For each subscription no longer being used, remove it from the active subscriptions list and dispose it
126.1248 +            for (var i = disposalCandidates.length - 1; i >= 0; i--) {
126.1249 +                if (disposalCandidates[i])
126.1250 +                    _subscriptionsToDependencies.splice(i, 1)[0].dispose();
126.1251 +            }
126.1252 +            _hasBeenEvaluated = true;
126.1253 +
126.1254 +            dependentObservable["notifySubscribers"](_latestValue, "beforeChange");
126.1255 +            _latestValue = newValue;
126.1256 +            if (DEBUG) dependentObservable._latestValue = _latestValue;
126.1257 +        } finally {
126.1258 +            ko.dependencyDetection.end();
126.1259 +        }
126.1260 +
126.1261 +        dependentObservable["notifySubscribers"](_latestValue);
126.1262 +        _isBeingEvaluated = false;
126.1263 +        if (!_subscriptionsToDependencies.length)
126.1264 +            dispose();
126.1265 +    }
126.1266 +
126.1267 +    function dependentObservable() {
126.1268 +        if (arguments.length > 0) {
126.1269 +            if (typeof writeFunction === "function") {
126.1270 +                // Writing a value
126.1271 +                writeFunction.apply(evaluatorFunctionTarget, arguments);
126.1272 +            } else {
126.1273 +                throw new Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
126.1274 +            }
126.1275 +            return this; // Permits chained assignments
126.1276 +        } else {
126.1277 +            // Reading the value
126.1278 +            if (!_hasBeenEvaluated)
126.1279 +                evaluateImmediate();
126.1280 +            ko.dependencyDetection.registerDependency(dependentObservable);
126.1281 +            return _latestValue;
126.1282 +        }
126.1283 +    }
126.1284 +
126.1285 +    function peek() {
126.1286 +        if (!_hasBeenEvaluated)
126.1287 +            evaluateImmediate();
126.1288 +        return _latestValue;
126.1289 +    }
126.1290 +
126.1291 +    function isActive() {
126.1292 +        return !_hasBeenEvaluated || _subscriptionsToDependencies.length > 0;
126.1293 +    }
126.1294 +
126.1295 +    // By here, "options" is always non-null
126.1296 +    var writeFunction = options["write"],
126.1297 +        disposeWhenNodeIsRemoved = options["disposeWhenNodeIsRemoved"] || options.disposeWhenNodeIsRemoved || null,
126.1298 +        disposeWhen = options["disposeWhen"] || options.disposeWhen || function() { return false; },
126.1299 +        dispose = disposeAllSubscriptionsToDependencies,
126.1300 +        _subscriptionsToDependencies = [],
126.1301 +        evaluationTimeoutInstance = null;
126.1302 +
126.1303 +    if (!evaluatorFunctionTarget)
126.1304 +        evaluatorFunctionTarget = options["owner"];
126.1305 +
126.1306 +    dependentObservable.peek = peek;
126.1307 +    dependentObservable.getDependenciesCount = function () { return _subscriptionsToDependencies.length; };
126.1308 +    dependentObservable.hasWriteFunction = typeof options["write"] === "function";
126.1309 +    dependentObservable.dispose = function () { dispose(); };
126.1310 +    dependentObservable.isActive = isActive;
126.1311 +    dependentObservable.valueHasMutated = function() {
126.1312 +        _hasBeenEvaluated = false;
126.1313 +        evaluateImmediate();
126.1314 +    };
126.1315 +
126.1316 +    ko.subscribable.call(dependentObservable);
126.1317 +    ko.utils.extend(dependentObservable, ko.dependentObservable['fn']);
126.1318 +
126.1319 +    ko.exportProperty(dependentObservable, 'peek', dependentObservable.peek);
126.1320 +    ko.exportProperty(dependentObservable, 'dispose', dependentObservable.dispose);
126.1321 +    ko.exportProperty(dependentObservable, 'isActive', dependentObservable.isActive);
126.1322 +    ko.exportProperty(dependentObservable, 'getDependenciesCount', dependentObservable.getDependenciesCount);
126.1323 +
126.1324 +    // Evaluate, unless deferEvaluation is true
126.1325 +    if (options['deferEvaluation'] !== true)
126.1326 +        evaluateImmediate();
126.1327 +
126.1328 +    // Build "disposeWhenNodeIsRemoved" and "disposeWhenNodeIsRemovedCallback" option values.
126.1329 +    // But skip if isActive is false (there will never be any dependencies to dispose).
126.1330 +    // (Note: "disposeWhenNodeIsRemoved" option both proactively disposes as soon as the node is removed using ko.removeNode(),
126.1331 +    // plus adds a "disposeWhen" callback that, on each evaluation, disposes if the node was removed by some other means.)
126.1332 +    if (disposeWhenNodeIsRemoved && isActive()) {
126.1333 +        dispose = function() {
126.1334 +            ko.utils.domNodeDisposal.removeDisposeCallback(disposeWhenNodeIsRemoved, arguments.callee);
126.1335 +            disposeAllSubscriptionsToDependencies();
126.1336 +        };
126.1337 +        ko.utils.domNodeDisposal.addDisposeCallback(disposeWhenNodeIsRemoved, dispose);
126.1338 +        var existingDisposeWhenFunction = disposeWhen;
126.1339 +        disposeWhen = function () {
126.1340 +            return !ko.utils.domNodeIsAttachedToDocument(disposeWhenNodeIsRemoved) || existingDisposeWhenFunction();
126.1341 +        }
126.1342 +    }
126.1343 +
126.1344 +    return dependentObservable;
126.1345 +};
126.1346 +
126.1347 +ko.isComputed = function(instance) {
126.1348 +    return ko.hasPrototype(instance, ko.dependentObservable);
126.1349 +};
126.1350 +
126.1351 +var protoProp = ko.observable.protoProperty; // == "__ko_proto__"
126.1352 +ko.dependentObservable[protoProp] = ko.observable;
126.1353 +
126.1354 +ko.dependentObservable['fn'] = {};
126.1355 +ko.dependentObservable['fn'][protoProp] = ko.dependentObservable;
126.1356 +
126.1357 +ko.exportSymbol('dependentObservable', ko.dependentObservable);
126.1358 +ko.exportSymbol('computed', ko.dependentObservable); // Make "ko.computed" an alias for "ko.dependentObservable"
126.1359 +ko.exportSymbol('isComputed', ko.isComputed);
126.1360 +
126.1361 +(function() {
126.1362 +    var maxNestedObservableDepth = 10; // Escape the (unlikely) pathalogical case where an observable's current value is itself (or similar reference cycle)
126.1363 +
126.1364 +    ko.toJS = function(rootObject) {
126.1365 +        if (arguments.length == 0)
126.1366 +            throw new Error("When calling ko.toJS, pass the object you want to convert.");
126.1367 +
126.1368 +        // We just unwrap everything at every level in the object graph
126.1369 +        return mapJsObjectGraph(rootObject, function(valueToMap) {
126.1370 +            // Loop because an observable's value might in turn be another observable wrapper
126.1371 +            for (var i = 0; ko.isObservable(valueToMap) && (i < maxNestedObservableDepth); i++)
126.1372 +                valueToMap = valueToMap();
126.1373 +            return valueToMap;
126.1374 +        });
126.1375 +    };
126.1376 +
126.1377 +    ko.toJSON = function(rootObject, replacer, space) {     // replacer and space are optional
126.1378 +        var plainJavaScriptObject = ko.toJS(rootObject);
126.1379 +        return ko.utils.stringifyJson(plainJavaScriptObject, replacer, space);
126.1380 +    };
126.1381 +
126.1382 +    function mapJsObjectGraph(rootObject, mapInputCallback, visitedObjects) {
126.1383 +        visitedObjects = visitedObjects || new objectLookup();
126.1384 +
126.1385 +        rootObject = mapInputCallback(rootObject);
126.1386 +        var canHaveProperties = (typeof rootObject == "object") && (rootObject !== null) && (rootObject !== undefined) && (!(rootObject instanceof Date));
126.1387 +        if (!canHaveProperties)
126.1388 +            return rootObject;
126.1389 +
126.1390 +        var outputProperties = rootObject instanceof Array ? [] : {};
126.1391 +        visitedObjects.save(rootObject, outputProperties);
126.1392 +
126.1393 +        visitPropertiesOrArrayEntries(rootObject, function(indexer) {
126.1394 +            var propertyValue = mapInputCallback(rootObject[indexer]);
126.1395 +
126.1396 +            switch (typeof propertyValue) {
126.1397 +                case "boolean":
126.1398 +                case "number":
126.1399 +                case "string":
126.1400 +                case "function":
126.1401 +                    outputProperties[indexer] = propertyValue;
126.1402 +                    break;
126.1403 +                case "object":
126.1404 +                case "undefined":
126.1405 +                    var previouslyMappedValue = visitedObjects.get(propertyValue);
126.1406 +                    outputProperties[indexer] = (previouslyMappedValue !== undefined)
126.1407 +                        ? previouslyMappedValue
126.1408 +                        : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects);
126.1409 +                    break;
126.1410 +            }
126.1411 +        });
126.1412 +
126.1413 +        return outputProperties;
126.1414 +    }
126.1415 +
126.1416 +    function visitPropertiesOrArrayEntries(rootObject, visitorCallback) {
126.1417 +        if (rootObject instanceof Array) {
126.1418 +            for (var i = 0; i < rootObject.length; i++)
126.1419 +                visitorCallback(i);
126.1420 +
126.1421 +            // For arrays, also respect toJSON property for custom mappings (fixes #278)
126.1422 +            if (typeof rootObject['toJSON'] == 'function')
126.1423 +                visitorCallback('toJSON');
126.1424 +        } else {
126.1425 +            for (var propertyName in rootObject)
126.1426 +                visitorCallback(propertyName);
126.1427 +        }
126.1428 +    };
126.1429 +
126.1430 +    function objectLookup() {
126.1431 +        var keys = [];
126.1432 +        var values = [];
126.1433 +        this.save = function(key, value) {
126.1434 +            var existingIndex = ko.utils.arrayIndexOf(keys, key);
126.1435 +            if (existingIndex >= 0)
126.1436 +                values[existingIndex] = value;
126.1437 +            else {
126.1438 +                keys.push(key);
126.1439 +                values.push(value);
126.1440 +            }
126.1441 +        };
126.1442 +        this.get = function(key) {
126.1443 +            var existingIndex = ko.utils.arrayIndexOf(keys, key);
126.1444 +            return (existingIndex >= 0) ? values[existingIndex] : undefined;
126.1445 +        };
126.1446 +    };
126.1447 +})();
126.1448 +
126.1449 +ko.exportSymbol('toJS', ko.toJS);
126.1450 +ko.exportSymbol('toJSON', ko.toJSON);
126.1451 +(function () {
126.1452 +    var hasDomDataExpandoProperty = '__ko__hasDomDataOptionValue__';
126.1453 +
126.1454 +    // Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values
126.1455 +    // are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values
126.1456 +    // that are arbitrary objects. This is very convenient when implementing things like cascading dropdowns.
126.1457 +    ko.selectExtensions = {
126.1458 +        readValue : function(element) {
126.1459 +            switch (ko.utils.tagNameLower(element)) {
126.1460 +                case 'option':
126.1461 +                    if (element[hasDomDataExpandoProperty] === true)
126.1462 +                        return ko.utils.domData.get(element, ko.bindingHandlers.options.optionValueDomDataKey);
126.1463 +                    return ko.utils.ieVersion <= 7
126.1464 +                        ? (element.getAttributeNode('value').specified ? element.value : element.text)
126.1465 +                        : element.value;
126.1466 +                case 'select':
126.1467 +                    return element.selectedIndex >= 0 ? ko.selectExtensions.readValue(element.options[element.selectedIndex]) : undefined;
126.1468 +                default:
126.1469 +                    return element.value;
126.1470 +            }
126.1471 +        },
126.1472 +
126.1473 +        writeValue: function(element, value) {
126.1474 +            switch (ko.utils.tagNameLower(element)) {
126.1475 +                case 'option':
126.1476 +                    switch(typeof value) {
126.1477 +                        case "string":
126.1478 +                            ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, undefined);
126.1479 +                            if (hasDomDataExpandoProperty in element) { // IE <= 8 throws errors if you delete non-existent properties from a DOM node
126.1480 +                                delete element[hasDomDataExpandoProperty];
126.1481 +                            }
126.1482 +                            element.value = value;
126.1483 +                            break;
126.1484 +                        default:
126.1485 +                            // Store arbitrary object using DomData
126.1486 +                            ko.utils.domData.set(element, ko.bindingHandlers.options.optionValueDomDataKey, value);
126.1487 +                            element[hasDomDataExpandoProperty] = true;
126.1488 +
126.1489 +                            // Special treatment of numbers is just for backward compatibility. KO 1.2.1 wrote numerical values to element.value.
126.1490 +                            element.value = typeof value === "number" ? value : "";
126.1491 +                            break;
126.1492 +                    }
126.1493 +                    break;
126.1494 +                case 'select':
126.1495 +                    for (var i = element.options.length - 1; i >= 0; i--) {
126.1496 +                        if (ko.selectExtensions.readValue(element.options[i]) == value) {
126.1497 +                            element.selectedIndex = i;
126.1498 +                            break;
126.1499 +                        }
126.1500 +                    }
126.1501 +                    break;
126.1502 +                default:
126.1503 +                    if ((value === null) || (value === undefined))
126.1504 +                        value = "";
126.1505 +                    element.value = value;
126.1506 +                    break;
126.1507 +            }
126.1508 +        }
126.1509 +    };
126.1510 +})();
126.1511 +
126.1512 +ko.exportSymbol('selectExtensions', ko.selectExtensions);
126.1513 +ko.exportSymbol('selectExtensions.readValue', ko.selectExtensions.readValue);
126.1514 +ko.exportSymbol('selectExtensions.writeValue', ko.selectExtensions.writeValue);
126.1515 +ko.expressionRewriting = (function () {
126.1516 +    var restoreCapturedTokensRegex = /\@ko_token_(\d+)\@/g;
126.1517 +    var javaScriptReservedWords = ["true", "false"];
126.1518 +
126.1519 +    // Matches something that can be assigned to--either an isolated identifier or something ending with a property accessor
126.1520 +    // This is designed to be simple and avoid false negatives, but could produce false positives (e.g., a+b.c).
126.1521 +    var javaScriptAssignmentTarget = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i;
126.1522 +
126.1523 +    function restoreTokens(string, tokens) {
126.1524 +        var prevValue = null;
126.1525 +        while (string != prevValue) { // Keep restoring tokens until it no longer makes a difference (they may be nested)
126.1526 +            prevValue = string;
126.1527 +            string = string.replace(restoreCapturedTokensRegex, function (match, tokenIndex) {
126.1528 +                return tokens[tokenIndex];
126.1529 +            });
126.1530 +        }
126.1531 +        return string;
126.1532 +    }
126.1533 +
126.1534 +    function getWriteableValue(expression) {
126.1535 +        if (ko.utils.arrayIndexOf(javaScriptReservedWords, ko.utils.stringTrim(expression).toLowerCase()) >= 0)
126.1536 +            return false;
126.1537 +        var match = expression.match(javaScriptAssignmentTarget);
126.1538 +        return match === null ? false : match[1] ? ('Object(' + match[1] + ')' + match[2]) : expression;
126.1539 +    }
126.1540 +
126.1541 +    function ensureQuoted(key) {
126.1542 +        var trimmedKey = ko.utils.stringTrim(key);
126.1543 +        switch (trimmedKey.length && trimmedKey.charAt(0)) {
126.1544 +            case "'":
126.1545 +            case '"':
126.1546 +                return key;
126.1547 +            default:
126.1548 +                return "'" + trimmedKey + "'";
126.1549 +        }
126.1550 +    }
126.1551 +
126.1552 +    return {
126.1553 +        bindingRewriteValidators: [],
126.1554 +
126.1555 +        parseObjectLiteral: function(objectLiteralString) {
126.1556 +            // A full tokeniser+lexer would add too much weight to this library, so here's a simple parser
126.1557 +            // that is sufficient just to split an object literal string into a set of top-level key-value pairs
126.1558 +
126.1559 +            var str = ko.utils.stringTrim(objectLiteralString);
126.1560 +            if (str.length < 3)
126.1561 +                return [];
126.1562 +            if (str.charAt(0) === "{")// Ignore any braces surrounding the whole object literal
126.1563 +                str = str.substring(1, str.length - 1);
126.1564 +
126.1565 +            // Pull out any string literals and regex literals
126.1566 +            var tokens = [];
126.1567 +            var tokenStart = null, tokenEndChar;
126.1568 +            for (var position = 0; position < str.length; position++) {
126.1569 +                var c = str.charAt(position);
126.1570 +                if (tokenStart === null) {
126.1571 +                    switch (c) {
126.1572 +                        case '"':
126.1573 +                        case "'":
126.1574 +                        case "/":
126.1575 +                            tokenStart = position;
126.1576 +                            tokenEndChar = c;
126.1577 +                            break;
126.1578 +                    }
126.1579 +                } else if ((c == tokenEndChar) && (str.charAt(position - 1) !== "\\")) {
126.1580 +                    var token = str.substring(tokenStart, position + 1);
126.1581 +                    tokens.push(token);
126.1582 +                    var replacement = "@ko_token_" + (tokens.length - 1) + "@";
126.1583 +                    str = str.substring(0, tokenStart) + replacement + str.substring(position + 1);
126.1584 +                    position -= (token.length - replacement.length);
126.1585 +                    tokenStart = null;
126.1586 +                }
126.1587 +            }
126.1588 +
126.1589 +            // Next pull out balanced paren, brace, and bracket blocks
126.1590 +            tokenStart = null;
126.1591 +            tokenEndChar = null;
126.1592 +            var tokenDepth = 0, tokenStartChar = null;
126.1593 +            for (var position = 0; position < str.length; position++) {
126.1594 +                var c = str.charAt(position);
126.1595 +                if (tokenStart === null) {
126.1596 +                    switch (c) {
126.1597 +                        case "{": tokenStart = position; tokenStartChar = c;
126.1598 +                                  tokenEndChar = "}";
126.1599 +                                  break;
126.1600 +                        case "(": tokenStart = position; tokenStartChar = c;
126.1601 +                                  tokenEndChar = ")";
126.1602 +                                  break;
126.1603 +                        case "[": tokenStart = position; tokenStartChar = c;
126.1604 +                                  tokenEndChar = "]";
126.1605 +                                  break;
126.1606 +                    }
126.1607 +                }
126.1608 +
126.1609 +                if (c === tokenStartChar)
126.1610 +                    tokenDepth++;
126.1611 +                else if (c === tokenEndChar) {
126.1612 +                    tokenDepth--;
126.1613 +                    if (tokenDepth === 0) {
126.1614 +                        var token = str.substring(tokenStart, position + 1);
126.1615 +                        tokens.push(token);
126.1616 +                        var replacement = "@ko_token_" + (tokens.length - 1) + "@";
126.1617 +                        str = str.substring(0, tokenStart) + replacement + str.substring(position + 1);
126.1618 +                        position -= (token.length - replacement.length);
126.1619 +                        tokenStart = null;
126.1620 +                    }
126.1621 +                }
126.1622 +            }
126.1623 +
126.1624 +            // Now we can safely split on commas to get the key/value pairs
126.1625 +            var result = [];
126.1626 +            var keyValuePairs = str.split(",");
126.1627 +            for (var i = 0, j = keyValuePairs.length; i < j; i++) {
126.1628 +                var pair = keyValuePairs[i];
126.1629 +                var colonPos = pair.indexOf(":");
126.1630 +                if ((colonPos > 0) && (colonPos < pair.length - 1)) {
126.1631 +                    var key = pair.substring(0, colonPos);
126.1632 +                    var value = pair.substring(colonPos + 1);
126.1633 +                    result.push({ 'key': restoreTokens(key, tokens), 'value': restoreTokens(value, tokens) });
126.1634 +                } else {
126.1635 +                    result.push({ 'unknown': restoreTokens(pair, tokens) });
126.1636 +                }
126.1637 +            }
126.1638 +            return result;
126.1639 +        },
126.1640 +
126.1641 +        preProcessBindings: function (objectLiteralStringOrKeyValueArray) {
126.1642 +            var keyValueArray = typeof objectLiteralStringOrKeyValueArray === "string"
126.1643 +                ? ko.expressionRewriting.parseObjectLiteral(objectLiteralStringOrKeyValueArray)
126.1644 +                : objectLiteralStringOrKeyValueArray;
126.1645 +            var resultStrings = [], propertyAccessorResultStrings = [];
126.1646 +
126.1647 +            var keyValueEntry;
126.1648 +            for (var i = 0; keyValueEntry = keyValueArray[i]; i++) {
126.1649 +                if (resultStrings.length > 0)
126.1650 +                    resultStrings.push(",");
126.1651 +
126.1652 +                if (keyValueEntry['key']) {
126.1653 +                    var quotedKey = ensureQuoted(keyValueEntry['key']), val = keyValueEntry['value'];
126.1654 +                    resultStrings.push(quotedKey);
126.1655 +                    resultStrings.push(":");
126.1656 +                    resultStrings.push(val);
126.1657 +
126.1658 +                    if (val = getWriteableValue(ko.utils.stringTrim(val))) {
126.1659 +                        if (propertyAccessorResultStrings.length > 0)
126.1660 +                            propertyAccessorResultStrings.push(", ");
126.1661 +                        propertyAccessorResultStrings.push(quotedKey + " : function(__ko_value) { " + val + " = __ko_value; }");
126.1662 +                    }
126.1663 +                } else if (keyValueEntry['unknown']) {
126.1664 +                    resultStrings.push(keyValueEntry['unknown']);
126.1665 +                }
126.1666 +            }
126.1667 +
126.1668 +            var combinedResult = resultStrings.join("");
126.1669 +            if (propertyAccessorResultStrings.length > 0) {
126.1670 +                var allPropertyAccessors = propertyAccessorResultStrings.join("");
126.1671 +                combinedResult = combinedResult + ", '_ko_property_writers' : { " + allPropertyAccessors + " } ";
126.1672 +            }
126.1673 +
126.1674 +            return combinedResult;
126.1675 +        },
126.1676 +
126.1677 +        keyValueArrayContainsKey: function(keyValueArray, key) {
126.1678 +            for (var i = 0; i < keyValueArray.length; i++)
126.1679 +                if (ko.utils.stringTrim(keyValueArray[i]['key']) == key)
126.1680 +                    return true;
126.1681 +            return false;
126.1682 +        },
126.1683 +
126.1684 +        // Internal, private KO utility for updating model properties from within bindings
126.1685 +        // property:            If the property being updated is (or might be) an observable, pass it here
126.1686 +        //                      If it turns out to be a writable observable, it will be written to directly
126.1687 +        // allBindingsAccessor: All bindings in the current execution context.
126.1688 +        //                      This will be searched for a '_ko_property_writers' property in case you're writing to a non-observable
126.1689 +        // key:                 The key identifying the property to be written. Example: for { hasFocus: myValue }, write to 'myValue' by specifying the key 'hasFocus'
126.1690 +        // value:               The value to be written
126.1691 +        // checkIfDifferent:    If true, and if the property being written is a writable observable, the value will only be written if
126.1692 +        //                      it is !== existing value on that writable observable
126.1693 +        writeValueToProperty: function(property, allBindingsAccessor, key, value, checkIfDifferent) {
126.1694 +            if (!property || !ko.isWriteableObservable(property)) {
126.1695 +                var propWriters = allBindingsAccessor()['_ko_property_writers'];
126.1696 +                if (propWriters && propWriters[key])
126.1697 +                    propWriters[key](value);
126.1698 +            } else if (!checkIfDifferent || property.peek() !== value) {
126.1699 +                property(value);
126.1700 +            }
126.1701 +        }
126.1702 +    };
126.1703 +})();
126.1704 +
126.1705 +ko.exportSymbol('expressionRewriting', ko.expressionRewriting);
126.1706 +ko.exportSymbol('expressionRewriting.bindingRewriteValidators', ko.expressionRewriting.bindingRewriteValidators);
126.1707 +ko.exportSymbol('expressionRewriting.parseObjectLiteral', ko.expressionRewriting.parseObjectLiteral);
126.1708 +ko.exportSymbol('expressionRewriting.preProcessBindings', ko.expressionRewriting.preProcessBindings);
126.1709 +
126.1710 +// For backward compatibility, define the following aliases. (Previously, these function names were misleading because
126.1711 +// they referred to JSON specifically, even though they actually work with arbitrary JavaScript object literal expressions.)
126.1712 +ko.exportSymbol('jsonExpressionRewriting', ko.expressionRewriting);
126.1713 +ko.exportSymbol('jsonExpressionRewriting.insertPropertyAccessorsIntoJson', ko.expressionRewriting.preProcessBindings);(function() {
126.1714 +    // "Virtual elements" is an abstraction on top of the usual DOM API which understands the notion that comment nodes
126.1715 +    // may be used to represent hierarchy (in addition to the DOM's natural hierarchy).
126.1716 +    // If you call the DOM-manipulating functions on ko.virtualElements, you will be able to read and write the state
126.1717 +    // of that virtual hierarchy
126.1718 +    //
126.1719 +    // The point of all this is to support containerless templates (e.g., <!-- ko foreach:someCollection -->blah<!-- /ko -->)
126.1720 +    // without having to scatter special cases all over the binding and templating code.
126.1721 +
126.1722 +    // IE 9 cannot reliably read the "nodeValue" property of a comment node (see https://github.com/SteveSanderson/knockout/issues/186)
126.1723 +    // but it does give them a nonstandard alternative property called "text" that it can read reliably. Other browsers don't have that property.
126.1724 +    // So, use node.text where available, and node.nodeValue elsewhere
126.1725 +    var commentNodesHaveTextProperty = document.createComment("test").text === "<!--test-->";
126.1726 +
126.1727 +    var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*-->$/ : /^\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*$/;
126.1728 +    var endCommentRegex =   commentNodesHaveTextProperty ? /^<!--\s*\/ko\s*-->$/ : /^\s*\/ko\s*$/;
126.1729 +    var htmlTagsWithOptionallyClosingChildren = { 'ul': true, 'ol': true };
126.1730 +
126.1731 +    function isStartComment(node) {
126.1732 +        return (node.nodeType == 8) && (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(startCommentRegex);
126.1733 +    }
126.1734 +
126.1735 +    function isEndComment(node) {
126.1736 +        return (node.nodeType == 8) && (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(endCommentRegex);
126.1737 +    }
126.1738 +
126.1739 +    function getVirtualChildren(startComment, allowUnbalanced) {
126.1740 +        var currentNode = startComment;
126.1741 +        var depth = 1;
126.1742 +        var children = [];
126.1743 +        while (currentNode = currentNode.nextSibling) {
126.1744 +            if (isEndComment(currentNode)) {
126.1745 +                depth--;
126.1746 +                if (depth === 0)
126.1747 +                    return children;
126.1748 +            }
126.1749 +
126.1750 +            children.push(currentNode);
126.1751 +
126.1752 +            if (isStartComment(currentNode))
126.1753 +                depth++;
126.1754 +        }
126.1755 +        if (!allowUnbalanced)
126.1756 +            throw new Error("Cannot find closing comment tag to match: " + startComment.nodeValue);
126.1757 +        return null;
126.1758 +    }
126.1759 +
126.1760 +    function getMatchingEndComment(startComment, allowUnbalanced) {
126.1761 +        var allVirtualChildren = getVirtualChildren(startComment, allowUnbalanced);
126.1762 +        if (allVirtualChildren) {
126.1763 +            if (allVirtualChildren.length > 0)
126.1764 +                return allVirtualChildren[allVirtualChildren.length - 1].nextSibling;
126.1765 +            return startComment.nextSibling;
126.1766 +        } else
126.1767 +            return null; // Must have no matching end comment, and allowUnbalanced is true
126.1768 +    }
126.1769 +
126.1770 +    function getUnbalancedChildTags(node) {
126.1771 +        // e.g., from <div>OK</div><!-- ko blah --><span>Another</span>, returns: <!-- ko blah --><span>Another</span>
126.1772 +        //       from <div>OK</div><!-- /ko --><!-- /ko -->,             returns: <!-- /ko --><!-- /ko -->
126.1773 +        var childNode = node.firstChild, captureRemaining = null;
126.1774 +        if (childNode) {
126.1775 +            do {
126.1776 +                if (captureRemaining)                   // We already hit an unbalanced node and are now just scooping up all subsequent nodes
126.1777 +                    captureRemaining.push(childNode);
126.1778 +                else if (isStartComment(childNode)) {
126.1779 +                    var matchingEndComment = getMatchingEndComment(childNode, /* allowUnbalanced: */ true);
126.1780 +                    if (matchingEndComment)             // It's a balanced tag, so skip immediately to the end of this virtual set
126.1781 +                        childNode = matchingEndComment;
126.1782 +                    else
126.1783 +                        captureRemaining = [childNode]; // It's unbalanced, so start capturing from this point
126.1784 +                } else if (isEndComment(childNode)) {
126.1785 +                    captureRemaining = [childNode];     // It's unbalanced (if it wasn't, we'd have skipped over it already), so start capturing
126.1786 +                }
126.1787 +            } while (childNode = childNode.nextSibling);
126.1788 +        }
126.1789 +        return captureRemaining;
126.1790 +    }
126.1791 +
126.1792 +    ko.virtualElements = {
126.1793 +        allowedBindings: {},
126.1794 +
126.1795 +        childNodes: function(node) {
126.1796 +            return isStartComment(node) ? getVirtualChildren(node) : node.childNodes;
126.1797 +        },
126.1798 +
126.1799 +        emptyNode: function(node) {
126.1800 +            if (!isStartComment(node))
126.1801 +                ko.utils.emptyDomNode(node);
126.1802 +            else {
126.1803 +                var virtualChildren = ko.virtualElements.childNodes(node);
126.1804 +                for (var i = 0, j = virtualChildren.length; i < j; i++)
126.1805 +                    ko.removeNode(virtualChildren[i]);
126.1806 +            }
126.1807 +        },
126.1808 +
126.1809 +        setDomNodeChildren: function(node, childNodes) {
126.1810 +            if (!isStartComment(node))
126.1811 +                ko.utils.setDomNodeChildren(node, childNodes);
126.1812 +            else {
126.1813 +                ko.virtualElements.emptyNode(node);
126.1814 +                var endCommentNode = node.nextSibling; // Must be the next sibling, as we just emptied the children
126.1815 +                for (var i = 0, j = childNodes.length; i < j; i++)
126.1816 +                    endCommentNode.parentNode.insertBefore(childNodes[i], endCommentNode);
126.1817 +            }
126.1818 +        },
126.1819 +
126.1820 +        prepend: function(containerNode, nodeToPrepend) {
126.1821 +            if (!isStartComment(containerNode)) {
126.1822 +                if (containerNode.firstChild)
126.1823 +                    containerNode.insertBefore(nodeToPrepend, containerNode.firstChild);
126.1824 +                else
126.1825 +                    containerNode.appendChild(nodeToPrepend);
126.1826 +            } else {
126.1827 +                // Start comments must always have a parent and at least one following sibling (the end comment)
126.1828 +                containerNode.parentNode.insertBefore(nodeToPrepend, containerNode.nextSibling);
126.1829 +            }
126.1830 +        },
126.1831 +
126.1832 +        insertAfter: function(containerNode, nodeToInsert, insertAfterNode) {
126.1833 +            if (!insertAfterNode) {
126.1834 +                ko.virtualElements.prepend(containerNode, nodeToInsert);
126.1835 +            } else if (!isStartComment(containerNode)) {
126.1836 +                // Insert after insertion point
126.1837 +                if (insertAfterNode.nextSibling)
126.1838 +                    containerNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);
126.1839 +                else
126.1840 +                    containerNode.appendChild(nodeToInsert);
126.1841 +            } else {
126.1842 +                // Children of start comments must always have a parent and at least one following sibling (the end comment)
126.1843 +                containerNode.parentNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);
126.1844 +            }
126.1845 +        },
126.1846 +
126.1847 +        firstChild: function(node) {
126.1848 +            if (!isStartComment(node))
126.1849 +                return node.firstChild;
126.1850 +            if (!node.nextSibling || isEndComment(node.nextSibling))
126.1851 +                return null;
126.1852 +            return node.nextSibling;
126.1853 +        },
126.1854 +
126.1855 +        nextSibling: function(node) {
126.1856 +            if (isStartComment(node))
126.1857 +                node = getMatchingEndComment(node);
126.1858 +            if (node.nextSibling && isEndComment(node.nextSibling))
126.1859 +                return null;
126.1860 +            return node.nextSibling;
126.1861 +        },
126.1862 +
126.1863 +        virtualNodeBindingValue: function(node) {
126.1864 +            var regexMatch = isStartComment(node);
126.1865 +            return regexMatch ? regexMatch[1] : null;
126.1866 +        },
126.1867 +
126.1868 +        normaliseVirtualElementDomStructure: function(elementVerified) {
126.1869 +            // Workaround for https://github.com/SteveSanderson/knockout/issues/155
126.1870 +            // (IE <= 8 or IE 9 quirks mode parses your HTML weirdly, treating closing </li> tags as if they don't exist, thereby moving comment nodes
126.1871 +            // that are direct descendants of <ul> into the preceding <li>)
126.1872 +            if (!htmlTagsWithOptionallyClosingChildren[ko.utils.tagNameLower(elementVerified)])
126.1873 +                return;
126.1874 +
126.1875 +            // Scan immediate children to see if they contain unbalanced comment tags. If they do, those comment tags
126.1876 +            // must be intended to appear *after* that child, so move them there.
126.1877 +            var childNode = elementVerified.firstChild;
126.1878 +            if (childNode) {
126.1879 +                do {
126.1880 +                    if (childNode.nodeType === 1) {
126.1881 +                        var unbalancedTags = getUnbalancedChildTags(childNode);
126.1882 +                        if (unbalancedTags) {
126.1883 +                            // Fix up the DOM by moving the unbalanced tags to where they most likely were intended to be placed - *after* the child
126.1884 +                            var nodeToInsertBefore = childNode.nextSibling;
126.1885 +                            for (var i = 0; i < unbalancedTags.length; i++) {
126.1886 +                                if (nodeToInsertBefore)
126.1887 +                                    elementVerified.insertBefore(unbalancedTags[i], nodeToInsertBefore);
126.1888 +                                else
126.1889 +                                    elementVerified.appendChild(unbalancedTags[i]);
126.1890 +                            }
126.1891 +                        }
126.1892 +                    }
126.1893 +                } while (childNode = childNode.nextSibling);
126.1894 +            }
126.1895 +        }
126.1896 +    };
126.1897 +})();
126.1898 +ko.exportSymbol('virtualElements', ko.virtualElements);
126.1899 +ko.exportSymbol('virtualElements.allowedBindings', ko.virtualElements.allowedBindings);
126.1900 +ko.exportSymbol('virtualElements.emptyNode', ko.virtualElements.emptyNode);
126.1901 +//ko.exportSymbol('virtualElements.firstChild', ko.virtualElements.firstChild);     // firstChild is not minified
126.1902 +ko.exportSymbol('virtualElements.insertAfter', ko.virtualElements.insertAfter);
126.1903 +//ko.exportSymbol('virtualElements.nextSibling', ko.virtualElements.nextSibling);   // nextSibling is not minified
126.1904 +ko.exportSymbol('virtualElements.prepend', ko.virtualElements.prepend);
126.1905 +ko.exportSymbol('virtualElements.setDomNodeChildren', ko.virtualElements.setDomNodeChildren);
126.1906 +(function() {
126.1907 +    var defaultBindingAttributeName = "data-bind";
126.1908 +
126.1909 +    ko.bindingProvider = function() {
126.1910 +        this.bindingCache = {};
126.1911 +    };
126.1912 +
126.1913 +    ko.utils.extend(ko.bindingProvider.prototype, {
126.1914 +        'nodeHasBindings': function(node) {
126.1915 +            switch (node.nodeType) {
126.1916 +                case 1: return node.getAttribute(defaultBindingAttributeName) != null;   // Element
126.1917 +                case 8: return ko.virtualElements.virtualNodeBindingValue(node) != null; // Comment node
126.1918 +                default: return false;
126.1919 +            }
126.1920 +        },
126.1921 +
126.1922 +        'getBindings': function(node, bindingContext) {
126.1923 +            var bindingsString = this['getBindingsString'](node, bindingContext);
126.1924 +            return bindingsString ? this['parseBindingsString'](bindingsString, bindingContext, node) : null;
126.1925 +        },
126.1926 +
126.1927 +        // The following function is only used internally by this default provider.
126.1928 +        // It's not part of the interface definition for a general binding provider.
126.1929 +        'getBindingsString': function(node, bindingContext) {
126.1930 +            switch (node.nodeType) {
126.1931 +                case 1: return node.getAttribute(defaultBindingAttributeName);   // Element
126.1932 +                case 8: return ko.virtualElements.virtualNodeBindingValue(node); // Comment node
126.1933 +                default: return null;
126.1934 +            }
126.1935 +        },
126.1936 +
126.1937 +        // The following function is only used internally by this default provider.
126.1938 +        // It's not part of the interface definition for a general binding provider.
126.1939 +        'parseBindingsString': function(bindingsString, bindingContext, node) {
126.1940 +            try {
126.1941 +                var bindingFunction = createBindingsStringEvaluatorViaCache(bindingsString, this.bindingCache);
126.1942 +                return bindingFunction(bindingContext, node);
126.1943 +            } catch (ex) {
126.1944 +                throw new Error("Unable to parse bindings.\nMessage: " + ex + ";\nBindings value: " + bindingsString);
126.1945 +            }
126.1946 +        }
126.1947 +    });
126.1948 +
126.1949 +    ko.bindingProvider['instance'] = new ko.bindingProvider();
126.1950 +
126.1951 +    function createBindingsStringEvaluatorViaCache(bindingsString, cache) {
126.1952 +        var cacheKey = bindingsString;
126.1953 +        return cache[cacheKey]
126.1954 +            || (cache[cacheKey] = createBindingsStringEvaluator(bindingsString));
126.1955 +    }
126.1956 +
126.1957 +    function createBindingsStringEvaluator(bindingsString) {
126.1958 +        // Build the source for a function that evaluates "expression"
126.1959 +        // For each scope variable, add an extra level of "with" nesting
126.1960 +        // Example result: with(sc1) { with(sc0) { return (expression) } }
126.1961 +        var rewrittenBindings = ko.expressionRewriting.preProcessBindings(bindingsString),
126.1962 +            functionBody = "with($context){with($data||{}){return{" + rewrittenBindings + "}}}";
126.1963 +        return new Function("$context", "$element", functionBody);
126.1964 +    }
126.1965 +})();
126.1966 +
126.1967 +ko.exportSymbol('bindingProvider', ko.bindingProvider);
126.1968 +(function () {
126.1969 +    ko.bindingHandlers = {};
126.1970 +
126.1971 +    ko.bindingContext = function(dataItem, parentBindingContext, dataItemAlias) {
126.1972 +        if (parentBindingContext) {
126.1973 +            ko.utils.extend(this, parentBindingContext); // Inherit $root and any custom properties
126.1974 +            this['$parentContext'] = parentBindingContext;
126.1975 +            this['$parent'] = parentBindingContext['$data'];
126.1976 +            this['$parents'] = (parentBindingContext['$parents'] || []).slice(0);
126.1977 +            this['$parents'].unshift(this['$parent']);
126.1978 +        } else {
126.1979 +            this['$parents'] = [];
126.1980 +            this['$root'] = dataItem;
126.1981 +            // Export 'ko' in the binding context so it will be available in bindings and templates
126.1982 +            // even if 'ko' isn't exported as a global, such as when using an AMD loader.
126.1983 +            // See https://github.com/SteveSanderson/knockout/issues/490
126.1984 +            this['ko'] = ko;
126.1985 +        }
126.1986 +        this['$data'] = dataItem;
126.1987 +        if (dataItemAlias)
126.1988 +            this[dataItemAlias] = dataItem;
126.1989 +    }
126.1990 +    ko.bindingContext.prototype['createChildContext'] = function (dataItem, dataItemAlias) {
126.1991 +        return new ko.bindingContext(dataItem, this, dataItemAlias);
126.1992 +    };
126.1993 +    ko.bindingContext.prototype['extend'] = function(properties) {
126.1994 +        var clone = ko.utils.extend(new ko.bindingContext(), this);
126.1995 +        return ko.utils.extend(clone, properties);
126.1996 +    };
126.1997 +
126.1998 +    function validateThatBindingIsAllowedForVirtualElements(bindingName) {
126.1999 +        var validator = ko.virtualElements.allowedBindings[bindingName];
126.2000 +        if (!validator)
126.2001 +            throw new Error("The binding '" + bindingName + "' cannot be used with virtual elements")
126.2002 +    }
126.2003 +
126.2004 +    function applyBindingsToDescendantsInternal (viewModel, elementOrVirtualElement, bindingContextsMayDifferFromDomParentElement) {
126.2005 +        var currentChild, nextInQueue = ko.virtualElements.firstChild(elementOrVirtualElement);
126.2006 +        while (currentChild = nextInQueue) {
126.2007 +            // Keep a record of the next child *before* applying bindings, in case the binding removes the current child from its position
126.2008 +            nextInQueue = ko.virtualElements.nextSibling(currentChild);
126.2009 +            applyBindingsToNodeAndDescendantsInternal(viewModel, currentChild, bindingContextsMayDifferFromDomParentElement);
126.2010 +        }
126.2011 +    }
126.2012 +
126.2013 +    function applyBindingsToNodeAndDescendantsInternal (viewModel, nodeVerified, bindingContextMayDifferFromDomParentElement) {
126.2014 +        var shouldBindDescendants = true;
126.2015 +
126.2016 +        // Perf optimisation: Apply bindings only if...
126.2017 +        // (1) We need to store the binding context on this node (because it may differ from the DOM parent node's binding context)
126.2018 +        //     Note that we can't store binding contexts on non-elements (e.g., text nodes), as IE doesn't allow expando properties for those
126.2019 +        // (2) It might have bindings (e.g., it has a data-bind attribute, or it's a marker for a containerless template)
126.2020 +        var isElement = (nodeVerified.nodeType === 1);
126.2021 +        if (isElement) // Workaround IE <= 8 HTML parsing weirdness
126.2022 +            ko.virtualElements.normaliseVirtualElementDomStructure(nodeVerified);
126.2023 +
126.2024 +        var shouldApplyBindings = (isElement && bindingContextMayDifferFromDomParentElement)             // Case (1)
126.2025 +                               || ko.bindingProvider['instance']['nodeHasBindings'](nodeVerified);       // Case (2)
126.2026 +        if (shouldApplyBindings)
126.2027 +            shouldBindDescendants = applyBindingsToNodeInternal(nodeVerified, null, viewModel, bindingContextMayDifferFromDomParentElement).shouldBindDescendants;
126.2028 +
126.2029 +        if (shouldBindDescendants) {
126.2030 +            // We're recursing automatically into (real or virtual) child nodes without changing binding contexts. So,
126.2031 +            //  * For children of a *real* element, the binding context is certainly the same as on their DOM .parentNode,
126.2032 +            //    hence bindingContextsMayDifferFromDomParentElement is false
126.2033 +            //  * For children of a *virtual* element, we can't be sure. Evaluating .parentNode on those children may
126.2034 +            //    skip over any number of intermediate virtual elements, any of which might define a custom binding context,
126.2035 +            //    hence bindingContextsMayDifferFromDomParentElement is true
126.2036 +            applyBindingsToDescendantsInternal(viewModel, nodeVerified, /* bindingContextsMayDifferFromDomParentElement: */ !isElement);
126.2037 +        }
126.2038 +    }
126.2039 +
126.2040 +    function applyBindingsToNodeInternal (node, bindings, viewModelOrBindingContext, bindingContextMayDifferFromDomParentElement) {
126.2041 +        // Need to be sure that inits are only run once, and updates never run until all the inits have been run
126.2042 +        var initPhase = 0; // 0 = before all inits, 1 = during inits, 2 = after all inits
126.2043 +
126.2044 +        // Each time the dependentObservable is evaluated (after data changes),
126.2045 +        // the binding attribute is reparsed so that it can pick out the correct
126.2046 +        // model properties in the context of the changed data.
126.2047 +        // DOM event callbacks need to be able to access this changed data,
126.2048 +        // so we need a single parsedBindings variable (shared by all callbacks
126.2049 +        // associated with this node's bindings) that all the closures can access.
126.2050 +        var parsedBindings;
126.2051 +        function makeValueAccessor(bindingKey) {
126.2052 +            return function () { return parsedBindings[bindingKey] }
126.2053 +        }
126.2054 +        function parsedBindingsAccessor() {
126.2055 +            return parsedBindings;
126.2056 +        }
126.2057 +
126.2058 +        var bindingHandlerThatControlsDescendantBindings;
126.2059 +        ko.dependentObservable(
126.2060 +            function () {
126.2061 +                // Ensure we have a nonnull binding context to work with
126.2062 +                var bindingContextInstance = viewModelOrBindingContext && (viewModelOrBindingContext instanceof ko.bindingContext)
126.2063 +                    ? viewModelOrBindingContext
126.2064 +                    : new ko.bindingContext(ko.utils.unwrapObservable(viewModelOrBindingContext));
126.2065 +                var viewModel = bindingContextInstance['$data'];
126.2066 +
126.2067 +                // Optimization: Don't store the binding context on this node if it's definitely the same as on node.parentNode, because
126.2068 +                // we can easily recover it just by scanning up the node's ancestors in the DOM
126.2069 +                // (note: here, parent node means "real DOM parent" not "virtual parent", as there's no O(1) way to find the virtual parent)
126.2070 +                if (bindingContextMayDifferFromDomParentElement)
126.2071 +                    ko.storedBindingContextForNode(node, bindingContextInstance);
126.2072 +
126.2073 +                // Use evaluatedBindings if given, otherwise fall back on asking the bindings provider to give us some bindings
126.2074 +                var evaluatedBindings = (typeof bindings == "function") ? bindings(bindingContextInstance, node) : bindings;
126.2075 +                parsedBindings = evaluatedBindings || ko.bindingProvider['instance']['getBindings'](node, bindingContextInstance);
126.2076 +
126.2077 +                if (parsedBindings) {
126.2078 +                    // First run all the inits, so bindings can register for notification on changes
126.2079 +                    if (initPhase === 0) {
126.2080 +                        initPhase = 1;
126.2081 +                        for (var bindingKey in parsedBindings) {
126.2082 +                            var binding = ko.bindingHandlers[bindingKey];
126.2083 +                            if (binding && node.nodeType === 8)
126.2084 +                                validateThatBindingIsAllowedForVirtualElements(bindingKey);
126.2085 +
126.2086 +                            if (binding && typeof binding["init"] == "function") {
126.2087 +                                var handlerInitFn = binding["init"];
126.2088 +                                var initResult = handlerInitFn(node, makeValueAccessor(bindingKey), parsedBindingsAccessor, viewModel, bindingContextInstance);
126.2089 +
126.2090 +                                // If this binding handler claims to control descendant bindings, make a note of this
126.2091 +                                if (initResult && initResult['controlsDescendantBindings']) {
126.2092 +                                    if (bindingHandlerThatControlsDescendantBindings !== undefined)
126.2093 +                                        throw new Error("Multiple bindings (" + bindingHandlerThatControlsDescendantBindings + " and " + bindingKey + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
126.2094 +                                    bindingHandlerThatControlsDescendantBindings = bindingKey;
126.2095 +                                }
126.2096 +                            }
126.2097 +                        }
126.2098 +                        initPhase = 2;
126.2099 +                    }
126.2100 +
126.2101 +                    // ... then run all the updates, which might trigger changes even on the first evaluation
126.2102 +                    if (initPhase === 2) {
126.2103 +                        for (var bindingKey in parsedBindings) {
126.2104 +                            var binding = ko.bindingHandlers[bindingKey];
126.2105 +                            if (binding && typeof binding["update"] == "function") {
126.2106 +                                var handlerUpdateFn = binding["update"];
126.2107 +                                handlerUpdateFn(node, makeValueAccessor(bindingKey), parsedBindingsAccessor, viewModel, bindingContextInstance);
126.2108 +                            }
126.2109 +                        }
126.2110 +                    }
126.2111 +                }
126.2112 +            },
126.2113 +            null,
126.2114 +            { disposeWhenNodeIsRemoved : node }
126.2115 +        );
126.2116 +
126.2117 +        return {
126.2118 +            shouldBindDescendants: bindingHandlerThatControlsDescendantBindings === undefined
126.2119 +        };
126.2120 +    };
126.2121 +
126.2122 +    var storedBindingContextDomDataKey = "__ko_bindingContext__";
126.2123 +    ko.storedBindingContextForNode = function (node, bindingContext) {
126.2124 +        if (arguments.length == 2)
126.2125 +            ko.utils.domData.set(node, storedBindingContextDomDataKey, bindingContext);
126.2126 +        else
126.2127 +            return ko.utils.domData.get(node, storedBindingContextDomDataKey);
126.2128 +    }
126.2129 +
126.2130 +    ko.applyBindingsToNode = function (node, bindings, viewModel) {
126.2131 +        if (node.nodeType === 1) // If it's an element, workaround IE <= 8 HTML parsing weirdness
126.2132 +            ko.virtualElements.normaliseVirtualElementDomStructure(node);
126.2133 +        return applyBindingsToNodeInternal(node, bindings, viewModel, true);
126.2134 +    };
126.2135 +
126.2136 +    ko.applyBindingsToDescendants = function(viewModel, rootNode) {
126.2137 +        if (rootNode.nodeType === 1 || rootNode.nodeType === 8)
126.2138 +            applyBindingsToDescendantsInternal(viewModel, rootNode, true);
126.2139 +    };
126.2140 +
126.2141 +    ko.applyBindings = function (viewModel, rootNode) {
126.2142 +        if (rootNode && (rootNode.nodeType !== 1) && (rootNode.nodeType !== 8))
126.2143 +            throw new Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");
126.2144 +        rootNode = rootNode || window.document.body; // Make "rootNode" parameter optional
126.2145 +
126.2146 +        applyBindingsToNodeAndDescendantsInternal(viewModel, rootNode, true);
126.2147 +    };
126.2148 +
126.2149 +    // Retrieving binding context from arbitrary nodes
126.2150 +    ko.contextFor = function(node) {
126.2151 +        // We can only do something meaningful for elements and comment nodes (in particular, not text nodes, as IE can't store domdata for them)
126.2152 +        switch (node.nodeType) {
126.2153 +            case 1:
126.2154 +            case 8:
126.2155 +                var context = ko.storedBindingContextForNode(node);
126.2156 +                if (context) return context;
126.2157 +                if (node.parentNode) return ko.contextFor(node.parentNode);
126.2158 +                break;
126.2159 +        }
126.2160 +        return undefined;
126.2161 +    };
126.2162 +    ko.dataFor = function(node) {
126.2163 +        var context = ko.contextFor(node);
126.2164 +        return context ? context['$data'] : undefined;
126.2165 +    };
126.2166 +
126.2167 +    ko.exportSymbol('bindingHandlers', ko.bindingHandlers);
126.2168 +    ko.exportSymbol('applyBindings', ko.applyBindings);
126.2169 +    ko.exportSymbol('applyBindingsToDescendants', ko.applyBindingsToDescendants);
126.2170 +    ko.exportSymbol('applyBindingsToNode', ko.applyBindingsToNode);
126.2171 +    ko.exportSymbol('contextFor', ko.contextFor);
126.2172 +    ko.exportSymbol('dataFor', ko.dataFor);
126.2173 +})();
126.2174 +var attrHtmlToJavascriptMap = { 'class': 'className', 'for': 'htmlFor' };
126.2175 +ko.bindingHandlers['attr'] = {
126.2176 +    'update': function(element, valueAccessor, allBindingsAccessor) {
126.2177 +        var value = ko.utils.unwrapObservable(valueAccessor()) || {};
126.2178 +        for (var attrName in value) {
126.2179 +            if (typeof attrName == "string") {
126.2180 +                var attrValue = ko.utils.unwrapObservable(value[attrName]);
126.2181 +
126.2182 +                // To cover cases like "attr: { checked:someProp }", we want to remove the attribute entirely
126.2183 +                // when someProp is a "no value"-like value (strictly null, false, or undefined)
126.2184 +                // (because the absence of the "checked" attr is how to mark an element as not checked, etc.)
126.2185 +                var toRemove = (attrValue === false) || (attrValue === null) || (attrValue === undefined);
126.2186 +                if (toRemove)
126.2187 +                    element.removeAttribute(attrName);
126.2188 +
126.2189 +                // In IE <= 7 and IE8 Quirks Mode, you have to use the Javascript property name instead of the
126.2190 +                // HTML attribute name for certain attributes. IE8 Standards Mode supports the correct behavior,
126.2191 +                // but instead of figuring out the mode, we'll just set the attribute through the Javascript
126.2192 +                // property for IE <= 8.
126.2193 +                if (ko.utils.ieVersion <= 8 && attrName in attrHtmlToJavascriptMap) {
126.2194 +                    attrName = attrHtmlToJavascriptMap[attrName];
126.2195 +                    if (toRemove)
126.2196 +                        element.removeAttribute(attrName);
126.2197 +                    else
126.2198 +                        element[attrName] = attrValue;
126.2199 +                } else if (!toRemove) {
126.2200 +                    try {
126.2201 +                        element.setAttribute(attrName, attrValue.toString());
126.2202 +                    } catch (err) {
126.2203 +                        // ignore for now
126.2204 +                        if (console) {
126.2205 +                            console.log("Can't set attribute " + attrName + " to " + attrValue + " error: " + err);
126.2206 +                        }
126.2207 +                    }
126.2208 +                }
126.2209 +
126.2210 +                // Treat "name" specially - although you can think of it as an attribute, it also needs
126.2211 +                // special handling on older versions of IE (https://github.com/SteveSanderson/knockout/pull/333)
126.2212 +                // Deliberately being case-sensitive here because XHTML would regard "Name" as a different thing
126.2213 +                // entirely, and there's no strong reason to allow for such casing in HTML.
126.2214 +                if (attrName === "name") {
126.2215 +                    ko.utils.setElementName(element, toRemove ? "" : attrValue.toString());
126.2216 +                }
126.2217 +            }
126.2218 +        }
126.2219 +    }
126.2220 +};
126.2221 +ko.bindingHandlers['checked'] = {
126.2222 +    'init': function (element, valueAccessor, allBindingsAccessor) {
126.2223 +        var updateHandler = function() {
126.2224 +            var valueToWrite;
126.2225 +            if (element.type == "checkbox") {
126.2226 +                valueToWrite = element.checked;
126.2227 +            } else if ((element.type == "radio") && (element.checked)) {
126.2228 +                valueToWrite = element.value;
126.2229 +            } else {
126.2230 +                return; // "checked" binding only responds to checkboxes and selected radio buttons
126.2231 +            }
126.2232 +
126.2233 +            var modelValue = valueAccessor(), unwrappedValue = ko.utils.unwrapObservable(modelValue);
126.2234 +            if ((element.type == "checkbox") && (unwrappedValue instanceof Array)) {
126.2235 +                // For checkboxes bound to an array, we add/remove the checkbox value to that array
126.2236 +                // This works for both observable and non-observable arrays
126.2237 +                var existingEntryIndex = ko.utils.arrayIndexOf(unwrappedValue, element.value);
126.2238 +                if (element.checked && (existingEntryIndex < 0))
126.2239 +                    modelValue.push(element.value);
126.2240 +                else if ((!element.checked) && (existingEntryIndex >= 0))
126.2241 +                    modelValue.splice(existingEntryIndex, 1);
126.2242 +            } else {
126.2243 +                ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'checked', valueToWrite, true);
126.2244 +            }
126.2245 +        };
126.2246 +        ko.utils.registerEventHandler(element, "click", updateHandler);
126.2247 +
126.2248 +        // IE 6 won't allow radio buttons to be selected unless they have a name
126.2249 +        if ((element.type == "radio") && !element.name)
126.2250 +            ko.bindingHandlers['uniqueName']['init'](element, function() { return true });
126.2251 +    },
126.2252 +    'update': function (element, valueAccessor) {
126.2253 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2254 +
126.2255 +        if (element.type == "checkbox") {
126.2256 +            if (value instanceof Array) {
126.2257 +                // When bound to an array, the checkbox being checked represents its value being present in that array
126.2258 +                element.checked = ko.utils.arrayIndexOf(value, element.value) >= 0;
126.2259 +            } else {
126.2260 +                // When bound to anything other value (not an array), the checkbox being checked represents the value being trueish
126.2261 +                element.checked = value;
126.2262 +            }
126.2263 +        } else if (element.type == "radio") {
126.2264 +            element.checked = (element.value == value);
126.2265 +        }
126.2266 +    }
126.2267 +};
126.2268 +var classesWrittenByBindingKey = '__ko__cssValue';
126.2269 +ko.bindingHandlers['css'] = {
126.2270 +    'update': function (element, valueAccessor) {
126.2271 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2272 +        if (typeof value == "object") {
126.2273 +            for (var className in value) {
126.2274 +                var shouldHaveClass = ko.utils.unwrapObservable(value[className]);
126.2275 +                ko.utils.toggleDomNodeCssClass(element, className, shouldHaveClass);
126.2276 +            }
126.2277 +        } else {
126.2278 +            value = String(value || ''); // Make sure we don't try to store or set a non-string value
126.2279 +            ko.utils.toggleDomNodeCssClass(element, element[classesWrittenByBindingKey], false);
126.2280 +            element[classesWrittenByBindingKey] = value;
126.2281 +            ko.utils.toggleDomNodeCssClass(element, value, true);
126.2282 +        }
126.2283 +    }
126.2284 +};
126.2285 +ko.bindingHandlers['enable'] = {
126.2286 +    'update': function (element, valueAccessor) {
126.2287 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2288 +        if (value && element.disabled)
126.2289 +            element.removeAttribute("disabled");
126.2290 +        else if ((!value) && (!element.disabled))
126.2291 +            element.disabled = true;
126.2292 +    }
126.2293 +};
126.2294 +
126.2295 +ko.bindingHandlers['disable'] = {
126.2296 +    'update': function (element, valueAccessor) {
126.2297 +        ko.bindingHandlers['enable']['update'](element, function() { return !ko.utils.unwrapObservable(valueAccessor()) });
126.2298 +    }
126.2299 +};
126.2300 +// For certain common events (currently just 'click'), allow a simplified data-binding syntax
126.2301 +// e.g. click:handler instead of the usual full-length event:{click:handler}
126.2302 +function makeEventHandlerShortcut(eventName) {
126.2303 +    ko.bindingHandlers[eventName] = {
126.2304 +        'init': function(element, valueAccessor, allBindingsAccessor, viewModel) {
126.2305 +            var newValueAccessor = function () {
126.2306 +                var result = {};
126.2307 +                result[eventName] = valueAccessor();
126.2308 +                return result;
126.2309 +            };
126.2310 +            return ko.bindingHandlers['event']['init'].call(this, element, newValueAccessor, allBindingsAccessor, viewModel);
126.2311 +        }
126.2312 +    }
126.2313 +}
126.2314 +
126.2315 +ko.bindingHandlers['event'] = {
126.2316 +    'init' : function (element, valueAccessor, allBindingsAccessor, viewModel) {
126.2317 +        var eventsToHandle = valueAccessor() || {};
126.2318 +        for(var eventNameOutsideClosure in eventsToHandle) {
126.2319 +            (function() {
126.2320 +                var eventName = eventNameOutsideClosure; // Separate variable to be captured by event handler closure
126.2321 +                if (typeof eventName == "string") {
126.2322 +                    ko.utils.registerEventHandler(element, eventName, function (event) {
126.2323 +                        var handlerReturnValue;
126.2324 +                        var handlerFunction = valueAccessor()[eventName];
126.2325 +                        if (!handlerFunction)
126.2326 +                            return;
126.2327 +                        var allBindings = allBindingsAccessor();
126.2328 +
126.2329 +                        try {
126.2330 +                            // Take all the event args, and prefix with the viewmodel
126.2331 +                            var argsForHandler = ko.utils.makeArray(arguments);
126.2332 +                            argsForHandler.unshift(viewModel);
126.2333 +                            handlerReturnValue = handlerFunction.apply(viewModel, argsForHandler);
126.2334 +                        } finally {
126.2335 +                            if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true.
126.2336 +                                if (event.preventDefault)
126.2337 +                                    event.preventDefault();
126.2338 +                                else
126.2339 +                                    event.returnValue = false;
126.2340 +                            }
126.2341 +                        }
126.2342 +
126.2343 +                        var bubble = allBindings[eventName + 'Bubble'] !== false;
126.2344 +                        if (!bubble) {
126.2345 +                            event.cancelBubble = true;
126.2346 +                            if (event.stopPropagation)
126.2347 +                                event.stopPropagation();
126.2348 +                        }
126.2349 +                    });
126.2350 +                }
126.2351 +            })();
126.2352 +        }
126.2353 +    }
126.2354 +};
126.2355 +// "foreach: someExpression" is equivalent to "template: { foreach: someExpression }"
126.2356 +// "foreach: { data: someExpression, afterAdd: myfn }" is equivalent to "template: { foreach: someExpression, afterAdd: myfn }"
126.2357 +ko.bindingHandlers['foreach'] = {
126.2358 +    makeTemplateValueAccessor: function(valueAccessor) {
126.2359 +        return function() {
126.2360 +            var modelValue = valueAccessor(),
126.2361 +                unwrappedValue = ko.utils.peekObservable(modelValue);    // Unwrap without setting a dependency here
126.2362 +
126.2363 +            // If unwrappedValue is the array, pass in the wrapped value on its own
126.2364 +            // The value will be unwrapped and tracked within the template binding
126.2365 +            // (See https://github.com/SteveSanderson/knockout/issues/523)
126.2366 +            if ((!unwrappedValue) || typeof unwrappedValue.length == "number")
126.2367 +                return { 'foreach': modelValue, 'templateEngine': ko.nativeTemplateEngine.instance };
126.2368 +
126.2369 +            // If unwrappedValue.data is the array, preserve all relevant options and unwrap again value so we get updates
126.2370 +            ko.utils.unwrapObservable(modelValue);
126.2371 +            return {
126.2372 +                'foreach': unwrappedValue['data'],
126.2373 +                'as': unwrappedValue['as'],
126.2374 +                'includeDestroyed': unwrappedValue['includeDestroyed'],
126.2375 +                'afterAdd': unwrappedValue['afterAdd'],
126.2376 +                'beforeRemove': unwrappedValue['beforeRemove'],
126.2377 +                'afterRender': unwrappedValue['afterRender'],
126.2378 +                'beforeMove': unwrappedValue['beforeMove'],
126.2379 +                'afterMove': unwrappedValue['afterMove'],
126.2380 +                'templateEngine': ko.nativeTemplateEngine.instance
126.2381 +            };
126.2382 +        };
126.2383 +    },
126.2384 +    'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
126.2385 +        return ko.bindingHandlers['template']['init'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor));
126.2386 +    },
126.2387 +    'update': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
126.2388 +        return ko.bindingHandlers['template']['update'](element, ko.bindingHandlers['foreach'].makeTemplateValueAccessor(valueAccessor), allBindingsAccessor, viewModel, bindingContext);
126.2389 +    }
126.2390 +};
126.2391 +ko.expressionRewriting.bindingRewriteValidators['foreach'] = false; // Can't rewrite control flow bindings
126.2392 +ko.virtualElements.allowedBindings['foreach'] = true;
126.2393 +var hasfocusUpdatingProperty = '__ko_hasfocusUpdating';
126.2394 +ko.bindingHandlers['hasfocus'] = {
126.2395 +    'init': function(element, valueAccessor, allBindingsAccessor) {
126.2396 +        var handleElementFocusChange = function(isFocused) {
126.2397 +            // Where possible, ignore which event was raised and determine focus state using activeElement,
126.2398 +            // as this avoids phantom focus/blur events raised when changing tabs in modern browsers.
126.2399 +            // However, not all KO-targeted browsers (Firefox 2) support activeElement. For those browsers,
126.2400 +            // prevent a loss of focus when changing tabs/windows by setting a flag that prevents hasfocus
126.2401 +            // from calling 'blur()' on the element when it loses focus.
126.2402 +            // Discussion at https://github.com/SteveSanderson/knockout/pull/352
126.2403 +            element[hasfocusUpdatingProperty] = true;
126.2404 +            var ownerDoc = element.ownerDocument;
126.2405 +            if ("activeElement" in ownerDoc) {
126.2406 +                isFocused = (ownerDoc.activeElement === element);
126.2407 +            }
126.2408 +            var modelValue = valueAccessor();
126.2409 +            ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'hasfocus', isFocused, true);
126.2410 +            element[hasfocusUpdatingProperty] = false;
126.2411 +        };
126.2412 +        var handleElementFocusIn = handleElementFocusChange.bind(null, true);
126.2413 +        var handleElementFocusOut = handleElementFocusChange.bind(null, false);
126.2414 +
126.2415 +        ko.utils.registerEventHandler(element, "focus", handleElementFocusIn);
126.2416 +        ko.utils.registerEventHandler(element, "focusin", handleElementFocusIn); // For IE
126.2417 +        ko.utils.registerEventHandler(element, "blur",  handleElementFocusOut);
126.2418 +        ko.utils.registerEventHandler(element, "focusout",  handleElementFocusOut); // For IE
126.2419 +    },
126.2420 +    'update': function(element, valueAccessor) {
126.2421 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2422 +        if (!element[hasfocusUpdatingProperty]) {
126.2423 +            value ? element.focus() : element.blur();
126.2424 +            ko.dependencyDetection.ignore(ko.utils.triggerEvent, null, [element, value ? "focusin" : "focusout"]); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously
126.2425 +        }
126.2426 +    }
126.2427 +};
126.2428 +ko.bindingHandlers['html'] = {
126.2429 +    'init': function() {
126.2430 +        // Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications)
126.2431 +        return { 'controlsDescendantBindings': true };
126.2432 +    },
126.2433 +    'update': function (element, valueAccessor) {
126.2434 +        // setHtml will unwrap the value if needed
126.2435 +        ko.utils.setHtml(element, valueAccessor());
126.2436 +    }
126.2437 +};
126.2438 +var withIfDomDataKey = '__ko_withIfBindingData';
126.2439 +// Makes a binding like with or if
126.2440 +function makeWithIfBinding(bindingKey, isWith, isNot, makeContextCallback) {
126.2441 +    ko.bindingHandlers[bindingKey] = {
126.2442 +        'init': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
126.2443 +            ko.utils.domData.set(element, withIfDomDataKey, {});
126.2444 +            return { 'controlsDescendantBindings': true };
126.2445 +        },
126.2446 +        'update': function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
126.2447 +            var withIfData = ko.utils.domData.get(element, withIfDomDataKey),
126.2448 +                dataValue = ko.utils.unwrapObservable(valueAccessor()),
126.2449 +                shouldDisplay = !isNot !== !dataValue, // equivalent to isNot ? !dataValue : !!dataValue
126.2450 +                isFirstRender = !withIfData.savedNodes,
126.2451 +                needsRefresh = isFirstRender || isWith || (shouldDisplay !== withIfData.didDisplayOnLastUpdate);
126.2452 +
126.2453 +            if (needsRefresh) {
126.2454 +                if (isFirstRender) {
126.2455 +                    withIfData.savedNodes = ko.utils.cloneNodes(ko.virtualElements.childNodes(element), true /* shouldCleanNodes */);
126.2456 +                }
126.2457 +
126.2458 +                if (shouldDisplay) {
126.2459 +                    if (!isFirstRender) {
126.2460 +                        ko.virtualElements.setDomNodeChildren(element, ko.utils.cloneNodes(withIfData.savedNodes));
126.2461 +                    }
126.2462 +                    ko.applyBindingsToDescendants(makeContextCallback ? makeContextCallback(bindingContext, dataValue) : bindingContext, element);
126.2463 +                } else {
126.2464 +                    ko.virtualElements.emptyNode(element);
126.2465 +                }
126.2466 +
126.2467 +                withIfData.didDisplayOnLastUpdate = shouldDisplay;
126.2468 +            }
126.2469 +        }
126.2470 +    };
126.2471 +    ko.expressionRewriting.bindingRewriteValidators[bindingKey] = false; // Can't rewrite control flow bindings
126.2472 +    ko.virtualElements.allowedBindings[bindingKey] = true;
126.2473 +}
126.2474 +
126.2475 +// Construct the actual binding handlers
126.2476 +makeWithIfBinding('if');
126.2477 +makeWithIfBinding('ifnot', false /* isWith */, true /* isNot */);
126.2478 +makeWithIfBinding('with', true /* isWith */, false /* isNot */,
126.2479 +    function(bindingContext, dataValue) {
126.2480 +        return bindingContext['createChildContext'](dataValue);
126.2481 +    }
126.2482 +);
126.2483 +function ensureDropdownSelectionIsConsistentWithModelValue(element, modelValue, preferModelValue) {
126.2484 +    if (preferModelValue) {
126.2485 +        if (modelValue !== ko.selectExtensions.readValue(element))
126.2486 +            ko.selectExtensions.writeValue(element, modelValue);
126.2487 +    }
126.2488 +
126.2489 +    // No matter which direction we're syncing in, we want the end result to be equality between dropdown value and model value.
126.2490 +    // If they aren't equal, either we prefer the dropdown value, or the model value couldn't be represented, so either way,
126.2491 +    // change the model value to match the dropdown.
126.2492 +    if (modelValue !== ko.selectExtensions.readValue(element))
126.2493 +        ko.dependencyDetection.ignore(ko.utils.triggerEvent, null, [element, "change"]);
126.2494 +};
126.2495 +
126.2496 +ko.bindingHandlers['options'] = {
126.2497 +    'update': function (element, valueAccessor, allBindingsAccessor) {
126.2498 +        if (ko.utils.tagNameLower(element) !== "select")
126.2499 +            throw new Error("options binding applies only to SELECT elements");
126.2500 +
126.2501 +        var selectWasPreviouslyEmpty = element.length == 0;
126.2502 +        var previousSelectedValues = ko.utils.arrayMap(ko.utils.arrayFilter(element.childNodes, function (node) {
126.2503 +            return node.tagName && (ko.utils.tagNameLower(node) === "option") && node.selected;
126.2504 +        }), function (node) {
126.2505 +            return ko.selectExtensions.readValue(node) || node.innerText || node.textContent;
126.2506 +        });
126.2507 +        var previousScrollTop = element.scrollTop;
126.2508 +
126.2509 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2510 +        var selectedValue = element.value;
126.2511 +
126.2512 +        // Remove all existing <option>s.
126.2513 +        // Need to use .remove() rather than .removeChild() for <option>s otherwise IE behaves oddly (https://github.com/SteveSanderson/knockout/issues/134)
126.2514 +        while (element.length > 0) {
126.2515 +            ko.cleanNode(element.options[0]);
126.2516 +            element.remove(0);
126.2517 +        }
126.2518 +
126.2519 +        if (value) {
126.2520 +            var allBindings = allBindingsAccessor(),
126.2521 +                includeDestroyed = allBindings['optionsIncludeDestroyed'];
126.2522 +
126.2523 +            if (typeof value.length != "number")
126.2524 +                value = [value];
126.2525 +            if (allBindings['optionsCaption']) {
126.2526 +                var option = document.createElement("option");
126.2527 +                ko.utils.setHtml(option, allBindings['optionsCaption']);
126.2528 +                ko.selectExtensions.writeValue(option, undefined);
126.2529 +                element.appendChild(option);
126.2530 +            }
126.2531 +
126.2532 +            for (var i = 0, j = value.length; i < j; i++) {
126.2533 +                // Skip destroyed items
126.2534 +                var arrayEntry = value[i];
126.2535 +                if (arrayEntry && arrayEntry['_destroy'] && !includeDestroyed)
126.2536 +                    continue;
126.2537 +
126.2538 +                var option = document.createElement("option");
126.2539 +
126.2540 +                function applyToObject(object, predicate, defaultValue) {
126.2541 +                    var predicateType = typeof predicate;
126.2542 +                    if (predicateType == "function")    // Given a function; run it against the data value
126.2543 +                        return predicate(object);
126.2544 +                    else if (predicateType == "string") // Given a string; treat it as a property name on the data value
126.2545 +                        return object[predicate];
126.2546 +                    else                                // Given no optionsText arg; use the data value itself
126.2547 +                        return defaultValue;
126.2548 +                }
126.2549 +
126.2550 +                // Apply a value to the option element
126.2551 +                var optionValue = applyToObject(arrayEntry, allBindings['optionsValue'], arrayEntry);
126.2552 +                ko.selectExtensions.writeValue(option, ko.utils.unwrapObservable(optionValue));
126.2553 +
126.2554 +                // Apply some text to the option element
126.2555 +                var optionText = applyToObject(arrayEntry, allBindings['optionsText'], optionValue);
126.2556 +                ko.utils.setTextContent(option, optionText);
126.2557 +
126.2558 +                element.appendChild(option);
126.2559 +            }
126.2560 +
126.2561 +            // IE6 doesn't like us to assign selection to OPTION nodes before they're added to the document.
126.2562 +            // That's why we first added them without selection. Now it's time to set the selection.
126.2563 +            var newOptions = element.getElementsByTagName("option");
126.2564 +            var countSelectionsRetained = 0;
126.2565 +            for (var i = 0, j = newOptions.length; i < j; i++) {
126.2566 +                if (ko.utils.arrayIndexOf(previousSelectedValues, ko.selectExtensions.readValue(newOptions[i])) >= 0) {
126.2567 +                    ko.utils.setOptionNodeSelectionState(newOptions[i], true);
126.2568 +                    countSelectionsRetained++;
126.2569 +                }
126.2570 +            }
126.2571 +
126.2572 +            element.scrollTop = previousScrollTop;
126.2573 +
126.2574 +            if (selectWasPreviouslyEmpty && ('value' in allBindings)) {
126.2575 +                // Ensure consistency between model value and selected option.
126.2576 +                // If the dropdown is being populated for the first time here (or was otherwise previously empty),
126.2577 +                // the dropdown selection state is meaningless, so we preserve the model value.
126.2578 +                ensureDropdownSelectionIsConsistentWithModelValue(element, ko.utils.peekObservable(allBindings['value']), /* preferModelValue */ true);
126.2579 +            }
126.2580 +
126.2581 +            // Workaround for IE9 bug
126.2582 +            ko.utils.ensureSelectElementIsRenderedCorrectly(element);
126.2583 +        }
126.2584 +    }
126.2585 +};
126.2586 +ko.bindingHandlers['options'].optionValueDomDataKey = '__ko.optionValueDomData__';
126.2587 +ko.bindingHandlers['selectedOptions'] = {
126.2588 +    'init': function (element, valueAccessor, allBindingsAccessor) {
126.2589 +        ko.utils.registerEventHandler(element, "change", function () {
126.2590 +            var value = valueAccessor(), valueToWrite = [];
126.2591 +            ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) {
126.2592 +                if (node.selected)
126.2593 +                    valueToWrite.push(ko.selectExtensions.readValue(node));
126.2594 +            });
126.2595 +            ko.expressionRewriting.writeValueToProperty(value, allBindingsAccessor, 'value', valueToWrite);
126.2596 +        });
126.2597 +    },
126.2598 +    'update': function (element, valueAccessor) {
126.2599 +        if (ko.utils.tagNameLower(element) != "select")
126.2600 +            throw new Error("values binding applies only to SELECT elements");
126.2601 +
126.2602 +        var newValue = ko.utils.unwrapObservable(valueAccessor());
126.2603 +        if (newValue && typeof newValue.length == "number") {
126.2604 +            ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) {
126.2605 +                var isSelected = ko.utils.arrayIndexOf(newValue, ko.selectExtensions.readValue(node)) >= 0;
126.2606 +                ko.utils.setOptionNodeSelectionState(node, isSelected);
126.2607 +            });
126.2608 +        }
126.2609 +    }
126.2610 +};
126.2611 +ko.bindingHandlers['style'] = {
126.2612 +    'update': function (element, valueAccessor) {
126.2613 +        var value = ko.utils.unwrapObservable(valueAccessor() || {});
126.2614 +        for (var styleName in value) {
126.2615 +            if (typeof styleName == "string") {
126.2616 +                var styleValue = ko.utils.unwrapObservable(value[styleName]);
126.2617 +                element.style[styleName] = styleValue || ""; // Empty string removes the value, whereas null/undefined have no effect
126.2618 +            }
126.2619 +        }
126.2620 +    }
126.2621 +};
126.2622 +ko.bindingHandlers['submit'] = {
126.2623 +    'init': function (element, valueAccessor, allBindingsAccessor, viewModel) {
126.2624 +        if (typeof valueAccessor() != "function")
126.2625 +            throw new Error("The value for a submit binding must be a function");
126.2626 +        ko.utils.registerEventHandler(element, "submit", function (event) {
126.2627 +            var handlerReturnValue;
126.2628 +            var value = valueAccessor();
126.2629 +            try { handlerReturnValue = value.call(viewModel, element); }
126.2630 +            finally {
126.2631 +                if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true.
126.2632 +                    if (event.preventDefault)
126.2633 +                        event.preventDefault();
126.2634 +                    else
126.2635 +                        event.returnValue = false;
126.2636 +                }
126.2637 +            }
126.2638 +        });
126.2639 +    }
126.2640 +};
126.2641 +ko.bindingHandlers['text'] = {
126.2642 +    'update': function (element, valueAccessor) {
126.2643 +        ko.utils.setTextContent(element, valueAccessor());
126.2644 +    }
126.2645 +};
126.2646 +ko.virtualElements.allowedBindings['text'] = true;
126.2647 +ko.bindingHandlers['uniqueName'] = {
126.2648 +    'init': function (element, valueAccessor) {
126.2649 +        if (valueAccessor()) {
126.2650 +            var name = "ko_unique_" + (++ko.bindingHandlers['uniqueName'].currentIndex);
126.2651 +            ko.utils.setElementName(element, name);
126.2652 +        }
126.2653 +    }
126.2654 +};
126.2655 +ko.bindingHandlers['uniqueName'].currentIndex = 0;
126.2656 +ko.bindingHandlers['value'] = {
126.2657 +    'init': function (element, valueAccessor, allBindingsAccessor) {
126.2658 +        // Always catch "change" event; possibly other events too if asked
126.2659 +        var eventsToCatch = ["change"];
126.2660 +        var requestedEventsToCatch = allBindingsAccessor()["valueUpdate"];
126.2661 +        var propertyChangedFired = false;
126.2662 +        if (requestedEventsToCatch) {
126.2663 +            if (typeof requestedEventsToCatch == "string") // Allow both individual event names, and arrays of event names
126.2664 +                requestedEventsToCatch = [requestedEventsToCatch];
126.2665 +            ko.utils.arrayPushAll(eventsToCatch, requestedEventsToCatch);
126.2666 +            eventsToCatch = ko.utils.arrayGetDistinctValues(eventsToCatch);
126.2667 +        }
126.2668 +
126.2669 +        var valueUpdateHandler = function() {
126.2670 +            propertyChangedFired = false;
126.2671 +            var modelValue = valueAccessor();
126.2672 +            var elementValue = ko.selectExtensions.readValue(element);
126.2673 +            ko.expressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'value', elementValue);
126.2674 +        }
126.2675 +
126.2676 +        // Workaround for https://github.com/SteveSanderson/knockout/issues/122
126.2677 +        // IE doesn't fire "change" events on textboxes if the user selects a value from its autocomplete list
126.2678 +        var ieAutoCompleteHackNeeded = ko.utils.ieVersion && element.tagName.toLowerCase() == "input" && element.type == "text"
126.2679 +                                       && element.autocomplete != "off" && (!element.form || element.form.autocomplete != "off");
126.2680 +        if (ieAutoCompleteHackNeeded && ko.utils.arrayIndexOf(eventsToCatch, "propertychange") == -1) {
126.2681 +            ko.utils.registerEventHandler(element, "propertychange", function () { propertyChangedFired = true });
126.2682 +            ko.utils.registerEventHandler(element, "blur", function() {
126.2683 +                if (propertyChangedFired) {
126.2684 +                    valueUpdateHandler();
126.2685 +                }
126.2686 +            });
126.2687 +        }
126.2688 +
126.2689 +        ko.utils.arrayForEach(eventsToCatch, function(eventName) {
126.2690 +            // The syntax "after<eventname>" means "run the handler asynchronously after the event"
126.2691 +            // This is useful, for example, to catch "keydown" events after the browser has updated the control
126.2692 +            // (otherwise, ko.selectExtensions.readValue(this) will receive the control's value *before* the key event)
126.2693 +            var handler = valueUpdateHandler;
126.2694 +            if (ko.utils.stringStartsWith(eventName, "after")) {
126.2695 +                handler = function() { setTimeout(valueUpdateHandler, 0) };
126.2696 +                eventName = eventName.substring("after".length);
126.2697 +            }
126.2698 +            ko.utils.registerEventHandler(element, eventName, handler);
126.2699 +        });
126.2700 +    },
126.2701 +    'update': function (element, valueAccessor) {
126.2702 +        var valueIsSelectOption = ko.utils.tagNameLower(element) === "select";
126.2703 +        var newValue = ko.utils.unwrapObservable(valueAccessor());
126.2704 +        var elementValue = ko.selectExtensions.readValue(element);
126.2705 +        var valueHasChanged = (newValue != elementValue);
126.2706 +
126.2707 +        // JavaScript's 0 == "" behavious is unfortunate here as it prevents writing 0 to an empty text box (loose equality suggests the values are the same).
126.2708 +        // We don't want to do a strict equality comparison as that is more confusing for developers in certain cases, so we specifically special case 0 != "" here.
126.2709 +        if ((newValue === 0) && (elementValue !== 0) && (elementValue !== "0"))
126.2710 +            valueHasChanged = true;
126.2711 +
126.2712 +        if (valueHasChanged) {
126.2713 +            var applyValueAction = function () { ko.selectExtensions.writeValue(element, newValue); };
126.2714 +            applyValueAction();
126.2715 +
126.2716 +            // Workaround for IE6 bug: It won't reliably apply values to SELECT nodes during the same execution thread
126.2717 +            // right after you've changed the set of OPTION nodes on it. So for that node type, we'll schedule a second thread
126.2718 +            // to apply the value as well.
126.2719 +            var alsoApplyAsynchronously = valueIsSelectOption;
126.2720 +            if (alsoApplyAsynchronously)
126.2721 +                setTimeout(applyValueAction, 0);
126.2722 +        }
126.2723 +
126.2724 +        // If you try to set a model value that can't be represented in an already-populated dropdown, reject that change,
126.2725 +        // because you're not allowed to have a model value that disagrees with a visible UI selection.
126.2726 +        if (valueIsSelectOption && (element.length > 0))
126.2727 +            ensureDropdownSelectionIsConsistentWithModelValue(element, newValue, /* preferModelValue */ false);
126.2728 +    }
126.2729 +};
126.2730 +ko.bindingHandlers['visible'] = {
126.2731 +    'update': function (element, valueAccessor) {
126.2732 +        var value = ko.utils.unwrapObservable(valueAccessor());
126.2733 +        var isCurrentlyVisible = !(element.style.display == "none");
126.2734 +        if (value && !isCurrentlyVisible)
126.2735 +            element.style.display = "";
126.2736 +        else if ((!value) && isCurrentlyVisible)
126.2737 +            element.style.display = "none";
126.2738 +    }
126.2739 +};
126.2740 +// 'click' is just a shorthand for the usual full-length event:{click:handler}
126.2741 +makeEventHandlerShortcut('click');
126.2742 +// If you want to make a custom template engine,
126.2743 +//
126.2744 +// [1] Inherit from this class (like ko.nativeTemplateEngine does)
126.2745 +// [2] Override 'renderTemplateSource', supplying a function with this signature:
126.2746 +//
126.2747 +//        function (templateSource, bindingContext, options) {
126.2748 +//            // - templateSource.text() is the text of the template you should render
126.2749 +//            // - bindingContext.$data is the data you should pass into the template
126.2750 +//            //   - you might also want to make bindingContext.$parent, bindingContext.$parents,
126.2751 +//            //     and bindingContext.$root available in the template too
126.2752 +//            // - options gives you access to any other properties set on "data-bind: { template: options }"
126.2753 +//            //
126.2754 +//            // Return value: an array of DOM nodes
126.2755 +//        }
126.2756 +//
126.2757 +// [3] Override 'createJavaScriptEvaluatorBlock', supplying a function with this signature:
126.2758 +//
126.2759 +//        function (script) {
126.2760 +//            // Return value: Whatever syntax means "Evaluate the JavaScript statement 'script' and output the result"
126.2761 +//            //               For example, the jquery.tmpl template engine converts 'someScript' to '${ someScript }'
126.2762 +//        }
126.2763 +//
126.2764 +//     This is only necessary if you want to allow data-bind attributes to reference arbitrary template variables.
126.2765 +//     If you don't want to allow that, you can set the property 'allowTemplateRewriting' to false (like ko.nativeTemplateEngine does)
126.2766 +//     and then you don't need to override 'createJavaScriptEvaluatorBlock'.
126.2767 +
126.2768 +ko.templateEngine = function () { };
126.2769 +
126.2770 +ko.templateEngine.prototype['renderTemplateSource'] = function (templateSource, bindingContext, options) {
126.2771 +    throw new Error("Override renderTemplateSource");
126.2772 +};
126.2773 +
126.2774 +ko.templateEngine.prototype['createJavaScriptEvaluatorBlock'] = function (script) {
126.2775 +    throw new Error("Override createJavaScriptEvaluatorBlock");
126.2776 +};
126.2777 +
126.2778 +ko.templateEngine.prototype['makeTemplateSource'] = function(template, templateDocument) {
126.2779 +    // Named template
126.2780 +    if (typeof template == "string") {
126.2781 +        templateDocument = templateDocument || document;
126.2782 +        var elem = templateDocument.getElementById(template);
126.2783 +        if (!elem)
126.2784 +            throw new Error("Cannot find template with ID " + template);
126.2785 +        return new ko.templateSources.domElement(elem);
126.2786 +    } else if ((template.nodeType == 1) || (template.nodeType == 8)) {
126.2787 +        // Anonymous template
126.2788 +        return new ko.templateSources.anonymousTemplate(template);
126.2789 +    } else
126.2790 +        throw new Error("Unknown template type: " + template);
126.2791 +};
126.2792 +
126.2793 +ko.templateEngine.prototype['renderTemplate'] = function (template, bindingContext, options, templateDocument) {
126.2794 +    var templateSource = this['makeTemplateSource'](template, templateDocument);
126.2795 +    return this['renderTemplateSource'](templateSource, bindingContext, options);
126.2796 +};
126.2797 +
126.2798 +ko.templateEngine.prototype['isTemplateRewritten'] = function (template, templateDocument) {
126.2799 +    // Skip rewriting if requested
126.2800 +    if (this['allowTemplateRewriting'] === false)
126.2801 +        return true;
126.2802 +    return this['makeTemplateSource'](template, templateDocument)['data']("isRewritten");
126.2803 +};
126.2804 +
126.2805 +ko.templateEngine.prototype['rewriteTemplate'] = function (template, rewriterCallback, templateDocument) {
126.2806 +    var templateSource = this['makeTemplateSource'](template, templateDocument);
126.2807 +    var rewritten = rewriterCallback(templateSource['text']());
126.2808 +    templateSource['text'](rewritten);
126.2809 +    templateSource['data']("isRewritten", true);
126.2810 +};
126.2811 +
126.2812 +ko.exportSymbol('templateEngine', ko.templateEngine);
126.2813 +
126.2814 +ko.templateRewriting = (function () {
126.2815 +    var memoizeDataBindingAttributeSyntaxRegex = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi;
126.2816 +    var memoizeVirtualContainerBindingSyntaxRegex = /<!--\s*ko\b\s*([\s\S]*?)\s*-->/g;
126.2817 +
126.2818 +    function validateDataBindValuesForRewriting(keyValueArray) {
126.2819 +        var allValidators = ko.expressionRewriting.bindingRewriteValidators;
126.2820 +        for (var i = 0; i < keyValueArray.length; i++) {
126.2821 +            var key = keyValueArray[i]['key'];
126.2822 +            if (allValidators.hasOwnProperty(key)) {
126.2823 +                var validator = allValidators[key];
126.2824 +
126.2825 +                if (typeof validator === "function") {
126.2826 +                    var possibleErrorMessage = validator(keyValueArray[i]['value']);
126.2827 +                    if (possibleErrorMessage)
126.2828 +                        throw new Error(possibleErrorMessage);
126.2829 +                } else if (!validator) {
126.2830 +                    throw new Error("This template engine does not support the '" + key + "' binding within its templates");
126.2831 +                }
126.2832 +            }
126.2833 +        }
126.2834 +    }
126.2835 +
126.2836 +    function constructMemoizedTagReplacement(dataBindAttributeValue, tagToRetain, templateEngine) {
126.2837 +        var dataBindKeyValueArray = ko.expressionRewriting.parseObjectLiteral(dataBindAttributeValue);
126.2838 +        validateDataBindValuesForRewriting(dataBindKeyValueArray);
126.2839 +        var rewrittenDataBindAttributeValue = ko.expressionRewriting.preProcessBindings(dataBindKeyValueArray);
126.2840 +
126.2841 +        // For no obvious reason, Opera fails to evaluate rewrittenDataBindAttributeValue unless it's wrapped in an additional
126.2842 +        // anonymous function, even though Opera's built-in debugger can evaluate it anyway. No other browser requires this
126.2843 +        // extra indirection.
126.2844 +        var applyBindingsToNextSiblingScript =
126.2845 +            "ko.__tr_ambtns(function($context,$element){return(function(){return{ " + rewrittenDataBindAttributeValue + " } })()})";
126.2846 +        return templateEngine['createJavaScriptEvaluatorBlock'](applyBindingsToNextSiblingScript) + tagToRetain;
126.2847 +    }
126.2848 +
126.2849 +    return {
126.2850 +        ensureTemplateIsRewritten: function (template, templateEngine, templateDocument) {
126.2851 +            if (!templateEngine['isTemplateRewritten'](template, templateDocument))
126.2852 +                templateEngine['rewriteTemplate'](template, function (htmlString) {
126.2853 +                    return ko.templateRewriting.memoizeBindingAttributeSyntax(htmlString, templateEngine);
126.2854 +                }, templateDocument);
126.2855 +        },
126.2856 +
126.2857 +        memoizeBindingAttributeSyntax: function (htmlString, templateEngine) {
126.2858 +            return htmlString.replace(memoizeDataBindingAttributeSyntaxRegex, function () {
126.2859 +                return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[6], /* tagToRetain: */ arguments[1], templateEngine);
126.2860 +            }).replace(memoizeVirtualContainerBindingSyntaxRegex, function() {
126.2861 +                return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[1], /* tagToRetain: */ "<!-- ko -->", templateEngine);
126.2862 +            });
126.2863 +        },
126.2864 +
126.2865 +        applyMemoizedBindingsToNextSibling: function (bindings) {
126.2866 +            return ko.memoization.memoize(function (domNode, bindingContext) {
126.2867 +                if (domNode.nextSibling)
126.2868 +                    ko.applyBindingsToNode(domNode.nextSibling, bindings, bindingContext);
126.2869 +            });
126.2870 +        }
126.2871 +    }
126.2872 +})();
126.2873 +
126.2874 +
126.2875 +// Exported only because it has to be referenced by string lookup from within rewritten template
126.2876 +ko.exportSymbol('__tr_ambtns', ko.templateRewriting.applyMemoizedBindingsToNextSibling);
126.2877 +(function() {
126.2878 +    // A template source represents a read/write way of accessing a template. This is to eliminate the need for template loading/saving
126.2879 +    // logic to be duplicated in every template engine (and means they can all work with anonymous templates, etc.)
126.2880 +    //
126.2881 +    // Two are provided by default:
126.2882 +    //  1. ko.templateSources.domElement       - reads/writes the text content of an arbitrary DOM element
126.2883 +    //  2. ko.templateSources.anonymousElement - uses ko.utils.domData to read/write text *associated* with the DOM element, but
126.2884 +    //                                           without reading/writing the actual element text content, since it will be overwritten
126.2885 +    //                                           with the rendered template output.
126.2886 +    // You can implement your own template source if you want to fetch/store templates somewhere other than in DOM elements.
126.2887 +    // Template sources need to have the following functions:
126.2888 +    //   text() 			- returns the template text from your storage location
126.2889 +    //   text(value)		- writes the supplied template text to your storage location
126.2890 +    //   data(key)			- reads values stored using data(key, value) - see below
126.2891 +    //   data(key, value)	- associates "value" with this template and the key "key". Is used to store information like "isRewritten".
126.2892 +    //
126.2893 +    // Optionally, template sources can also have the following functions:
126.2894 +    //   nodes()            - returns a DOM element containing the nodes of this template, where available
126.2895 +    //   nodes(value)       - writes the given DOM element to your storage location
126.2896 +    // If a DOM element is available for a given template source, template engines are encouraged to use it in preference over text()
126.2897 +    // for improved speed. However, all templateSources must supply text() even if they don't supply nodes().
126.2898 +    //
126.2899 +    // Once you've implemented a templateSource, make your template engine use it by subclassing whatever template engine you were
126.2900 +    // using and overriding "makeTemplateSource" to return an instance of your custom template source.
126.2901 +
126.2902 +    ko.templateSources = {};
126.2903 +
126.2904 +    // ---- ko.templateSources.domElement -----
126.2905 +
126.2906 +    ko.templateSources.domElement = function(element) {
126.2907 +        this.domElement = element;
126.2908 +    }
126.2909 +
126.2910 +    ko.templateSources.domElement.prototype['text'] = function(/* valueToWrite */) {
126.2911 +        var tagNameLower = ko.utils.tagNameLower(this.domElement),
126.2912 +            elemContentsProperty = tagNameLower === "script" ? "text"
126.2913 +                                 : tagNameLower === "textarea" ? "value"
126.2914 +                                 : "innerHTML";
126.2915 +
126.2916 +        if (arguments.length == 0) {
126.2917 +            return this.domElement[elemContentsProperty];
126.2918 +        } else {
126.2919 +            var valueToWrite = arguments[0];
126.2920 +            if (elemContentsProperty === "innerHTML")
126.2921 +                ko.utils.setHtml(this.domElement, valueToWrite);
126.2922 +            else
126.2923 +                this.domElement[elemContentsProperty] = valueToWrite;
126.2924 +        }
126.2925 +    };
126.2926 +
126.2927 +    ko.templateSources.domElement.prototype['data'] = function(key /*, valueToWrite */) {
126.2928 +        if (arguments.length === 1) {
126.2929 +            return ko.utils.domData.get(this.domElement, "templateSourceData_" + key);
126.2930 +        } else {
126.2931 +            ko.utils.domData.set(this.domElement, "templateSourceData_" + key, arguments[1]);
126.2932 +        }
126.2933 +    };
126.2934 +
126.2935 +    // ---- ko.templateSources.anonymousTemplate -----
126.2936 +    // Anonymous templates are normally saved/retrieved as DOM nodes through "nodes".
126.2937 +    // For compatibility, you can also read "text"; it will be serialized from the nodes on demand.
126.2938 +    // Writing to "text" is still supported, but then the template data will not be available as DOM nodes.
126.2939 +
126.2940 +    var anonymousTemplatesDomDataKey = "__ko_anon_template__";
126.2941 +    ko.templateSources.anonymousTemplate = function(element) {
126.2942 +        this.domElement = element;
126.2943 +    }
126.2944 +    ko.templateSources.anonymousTemplate.prototype = new ko.templateSources.domElement();
126.2945 +    ko.templateSources.anonymousTemplate.prototype['text'] = function(/* valueToWrite */) {
126.2946 +        if (arguments.length == 0) {
126.2947 +            var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {};
126.2948 +            if (templateData.textData === undefined && templateData.containerData)
126.2949 +                templateData.textData = templateData.containerData.innerHTML;
126.2950 +            return templateData.textData;
126.2951 +        } else {
126.2952 +            var valueToWrite = arguments[0];
126.2953 +            ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {textData: valueToWrite});
126.2954 +        }
126.2955 +    };
126.2956 +    ko.templateSources.domElement.prototype['nodes'] = function(/* valueToWrite */) {
126.2957 +        if (arguments.length == 0) {
126.2958 +            var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {};
126.2959 +            return templateData.containerData;
126.2960 +        } else {
126.2961 +            var valueToWrite = arguments[0];
126.2962 +            ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {containerData: valueToWrite});
126.2963 +        }
126.2964 +    };
126.2965 +
126.2966 +    ko.exportSymbol('templateSources', ko.templateSources);
126.2967 +    ko.exportSymbol('templateSources.domElement', ko.templateSources.domElement);
126.2968 +    ko.exportSymbol('templateSources.anonymousTemplate', ko.templateSources.anonymousTemplate);
126.2969 +})();
126.2970 +(function () {
126.2971 +    var _templateEngine;
126.2972 +    ko.setTemplateEngine = function (templateEngine) {
126.2973 +        if ((templateEngine != undefined) && !(templateEngine instanceof ko.templateEngine))
126.2974 +            throw new Error("templateEngine must inherit from ko.templateEngine");
126.2975 +        _templateEngine = templateEngine;
126.2976 +    }
126.2977 +
126.2978 +    function invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, action) {
126.2979 +        var node, nextInQueue = firstNode, firstOutOfRangeNode = ko.virtualElements.nextSibling(lastNode);
126.2980 +        while (nextInQueue && ((node = nextInQueue) !== firstOutOfRangeNode)) {
126.2981 +            nextInQueue = ko.virtualElements.nextSibling(node);
126.2982 +            if (node.nodeType === 1 || node.nodeType === 8)
126.2983 +                action(node);
126.2984 +        }
126.2985 +    }
126.2986 +
126.2987 +    function activateBindingsOnContinuousNodeArray(continuousNodeArray, bindingContext) {
126.2988 +        // To be used on any nodes that have been rendered by a template and have been inserted into some parent element
126.2989 +        // Walks through continuousNodeArray (which *must* be continuous, i.e., an uninterrupted sequence of sibling nodes, because
126.2990 +        // the algorithm for walking them relies on this), and for each top-level item in the virtual-element sense,
126.2991 +        // (1) Does a regular "applyBindings" to associate bindingContext with this node and to activate any non-memoized bindings
126.2992 +        // (2) Unmemoizes any memos in the DOM subtree (e.g., to activate bindings that had been memoized during template rewriting)
126.2993 +
126.2994 +        if (continuousNodeArray.length) {
126.2995 +            var firstNode = continuousNodeArray[0], lastNode = continuousNodeArray[continuousNodeArray.length - 1];
126.2996 +
126.2997 +            // Need to applyBindings *before* unmemoziation, because unmemoization might introduce extra nodes (that we don't want to re-bind)
126.2998 +            // whereas a regular applyBindings won't introduce new memoized nodes
126.2999 +            invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, function(node) {
126.3000 +                ko.applyBindings(bindingContext, node);
126.3001 +            });
126.3002 +            invokeForEachNodeOrCommentInContinuousRange(firstNode, lastNode, function(node) {
126.3003 +                ko.memoization.unmemoizeDomNodeAndDescendants(node, [bindingContext]);
126.3004 +            });
126.3005 +        }
126.3006 +    }
126.3007 +
126.3008 +    function getFirstNodeFromPossibleArray(nodeOrNodeArray) {
126.3009 +        return nodeOrNodeArray.nodeType ? nodeOrNodeArray
126.3010 +                                        : nodeOrNodeArray.length > 0 ? nodeOrNodeArray[0]
126.3011 +                                        : null;
126.3012 +    }
126.3013 +
126.3014 +    function executeTemplate(targetNodeOrNodeArray, renderMode, template, bindingContext, options) {
126.3015 +        options = options || {};
126.3016 +        var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
126.3017 +        var templateDocument = firstTargetNode && firstTargetNode.ownerDocument;
126.3018 +        var templateEngineToUse = (options['templateEngine'] || _templateEngine);
126.3019 +        ko.templateRewriting.ensureTemplateIsRewritten(template, templateEngineToUse, templateDocument);
126.3020 +        var renderedNodesArray = templateEngineToUse['renderTemplate'](template, bindingContext, options, templateDocument);
126.3021 +
126.3022 +        // Loosely check result is an array of DOM nodes
126.3023 +        if ((typeof renderedNodesArray.length != "number") || (renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType != "number"))
126.3024 +            throw new Error("Template engine must return an array of DOM nodes");
126.3025 +
126.3026 +        var haveAddedNodesToParent = false;
126.3027 +        switch (renderMode) {
126.3028 +            case "replaceChildren":
126.3029 +                ko.virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);
126.3030 +                haveAddedNodesToParent = true;
126.3031 +                break;
126.3032 +            case "replaceNode":
126.3033 +                ko.utils.replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray);
126.3034 +                haveAddedNodesToParent = true;
126.3035 +                break;
126.3036 +            case "ignoreTargetNode": break;
126.3037 +            default:
126.3038 +                throw new Error("Unknown renderMode: " + renderMode);
126.3039 +        }
126.3040 +
126.3041 +        if (haveAddedNodesToParent) {
126.3042 +            activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext);
126.3043 +            if (options['afterRender'])
126.3044 +                ko.dependencyDetection.ignore(options['afterRender'], null, [renderedNodesArray, bindingContext['$data']]);
126.3045 +        }
126.3046 +
126.3047 +        return renderedNodesArray;
126.3048 +    }
126.3049 +
126.3050 +    ko.renderTemplate = function (template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode) {
126.3051 +        options = options || {};
126.3052 +        if ((options['templateEngine'] || _templateEngine) == undefined)
126.3053 +            throw new Error("Set a template engine before calling renderTemplate");
126.3054 +        renderMode = renderMode || "replaceChildren";
126.3055 +
126.3056 +        if (targetNodeOrNodeArray) {
126.3057 +            var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
126.3058 +
126.3059 +            var whenToDispose = function () { return (!firstTargetNode) || !ko.utils.domNodeIsAttachedToDocument(firstTargetNode); }; // Passive disposal (on next evaluation)
126.3060 +            var activelyDisposeWhenNodeIsRemoved = (firstTargetNode && renderMode == "replaceNode") ? firstTargetNode.parentNode : firstTargetNode;
126.3061 +
126.3062 +            return ko.dependentObservable( // So the DOM is automatically updated when any dependency changes
126.3063 +                function () {
126.3064 +                    // Ensure we've got a proper binding context to work with
126.3065 +                    var bindingContext = (dataOrBindingContext && (dataOrBindingContext instanceof ko.bindingContext))
126.3066 +                        ? dataOrBindingContext
126.3067 +                        : new ko.bindingContext(ko.utils.unwrapObservable(dataOrBindingContext));
126.3068 +
126.3069 +                    // Support selecting template as a function of the data being rendered
126.3070 +                    var templateName = typeof(template) == 'function' ? template(bindingContext['$data'], bindingContext) : template;
126.3071 +
126.3072 +                    var renderedNodesArray = executeTemplate(targetNodeOrNodeArray, renderMode, templateName, bindingContext, options);
126.3073 +                    if (renderMode == "replaceNode") {
126.3074 +                        targetNodeOrNodeArray = renderedNodesArray;
126.3075 +                        firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
126.3076 +                    }
126.3077 +                },
126.3078 +                null,
126.3079 +                { disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved }
126.3080 +            );
126.3081 +        } else {
126.3082 +            // We don't yet have a DOM node to evaluate, so use a memo and render the template later when there is a DOM node
126.3083 +            return ko.memoization.memoize(function (domNode) {
126.3084 +                ko.renderTemplate(template, dataOrBindingContext, options, domNode, "replaceNode");
126.3085 +            });
126.3086 +        }
126.3087 +    };
126.3088 +
126.3089 +    ko.renderTemplateForEach = function (template, arrayOrObservableArray, options, targetNode, parentBindingContext) {
126.3090 +        // Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then
126.3091 +        // activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.
126.3092 +        var arrayItemContext;
126.3093 +
126.3094 +        // This will be called by setDomNodeChildrenFromArrayMapping to get the nodes to add to targetNode
126.3095 +        var executeTemplateForArrayItem = function (arrayValue, index) {
126.3096 +            // Support selecting template as a function of the data being rendered
126.3097 +            arrayItemContext = parentBindingContext['createChildContext'](ko.utils.unwrapObservable(arrayValue), options['as']);
126.3098 +            arrayItemContext['$index'] = index;
126.3099 +            var templateName = typeof(template) == 'function' ? template(arrayValue, arrayItemContext) : template;
126.3100 +            return executeTemplate(null, "ignoreTargetNode", templateName, arrayItemContext, options);
126.3101 +        }
126.3102 +
126.3103 +        // This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode
126.3104 +        var activateBindingsCallback = function(arrayValue, addedNodesArray, index) {
126.3105 +            activateBindingsOnContinuousNodeArray(addedNodesArray, arrayItemContext);
126.3106 +            if (options['afterRender'])
126.3107 +                options['afterRender'](addedNodesArray, arrayValue);
126.3108 +        };
126.3109 +
126.3110 +        return ko.dependentObservable(function () {
126.3111 +            var unwrappedArray = ko.utils.unwrapObservable(arrayOrObservableArray) || [];
126.3112 +            if (typeof unwrappedArray.length == "undefined") // Coerce single value into array
126.3113 +                unwrappedArray = [unwrappedArray];
126.3114 +
126.3115 +            // Filter out any entries marked as destroyed
126.3116 +            var filteredArray = ko.utils.arrayFilter(unwrappedArray, function(item) {
126.3117 +                return options['includeDestroyed'] || item === undefined || item === null || !ko.utils.unwrapObservable(item['_destroy']);
126.3118 +            });
126.3119 +
126.3120 +            // Call setDomNodeChildrenFromArrayMapping, ignoring any observables unwrapped within (most likely from a callback function).
126.3121 +            // If the array items are observables, though, they will be unwrapped in executeTemplateForArrayItem and managed within setDomNodeChildrenFromArrayMapping.
126.3122 +            ko.dependencyDetection.ignore(ko.utils.setDomNodeChildrenFromArrayMapping, null, [targetNode, filteredArray, executeTemplateForArrayItem, options, activateBindingsCallback]);
126.3123 +
126.3124 +        }, null, { disposeWhenNodeIsRemoved: targetNode });
126.3125 +    };
126.3126 +
126.3127 +    var templateComputedDomDataKey = '__ko__templateComputedDomDataKey__';
126.3128 +    function disposeOldComputedAndStoreNewOne(element, newComputed) {
126.3129 +        var oldComputed = ko.utils.domData.get(element, templateComputedDomDataKey);
126.3130 +        if (oldComputed && (typeof(oldComputed.dispose) == 'function'))
126.3131 +            oldComputed.dispose();
126.3132 +        ko.utils.domData.set(element, templateComputedDomDataKey, (newComputed && newComputed.isActive()) ? newComputed : undefined);
126.3133 +    }
126.3134 +
126.3135 +    ko.bindingHandlers['template'] = {
126.3136 +        'init': function(element, valueAccessor) {
126.3137 +            // Support anonymous templates
126.3138 +            var bindingValue = ko.utils.unwrapObservable(valueAccessor());
126.3139 +            if ((typeof bindingValue != "string") && (!bindingValue['name']) && (element.nodeType == 1 || element.nodeType == 8)) {
126.3140 +                // It's an anonymous template - store the element contents, then clear the element
126.3141 +                var templateNodes = element.nodeType == 1 ? element.childNodes : ko.virtualElements.childNodes(element),
126.3142 +                    container = ko.utils.moveCleanedNodesToContainerElement(templateNodes); // This also removes the nodes from their current parent
126.3143 +                new ko.templateSources.anonymousTemplate(element)['nodes'](container);
126.3144 +            }
126.3145 +            return { 'controlsDescendantBindings': true };
126.3146 +        },
126.3147 +        'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
126.3148 +            var templateName = ko.utils.unwrapObservable(valueAccessor()),
126.3149 +                options = {},
126.3150 +                shouldDisplay = true,
126.3151 +                dataValue,
126.3152 +                templateComputed = null;
126.3153 +
126.3154 +            if (typeof templateName != "string") {
126.3155 +                options = templateName;
126.3156 +                templateName = options['name'];
126.3157 +
126.3158 +                // Support "if"/"ifnot" conditions
126.3159 +                if ('if' in options)
126.3160 +                    shouldDisplay = ko.utils.unwrapObservable(options['if']);
126.3161 +                if (shouldDisplay && 'ifnot' in options)
126.3162 +                    shouldDisplay = !ko.utils.unwrapObservable(options['ifnot']);
126.3163 +
126.3164 +                dataValue = ko.utils.unwrapObservable(options['data']);
126.3165 +            }
126.3166 +
126.3167 +            if ('foreach' in options) {
126.3168 +                // Render once for each data point (treating data set as empty if shouldDisplay==false)
126.3169 +                var dataArray = (shouldDisplay && options['foreach']) || [];
126.3170 +                templateComputed = ko.renderTemplateForEach(templateName || element, dataArray, options, element, bindingContext);
126.3171 +            } else if (!shouldDisplay) {
126.3172 +                ko.virtualElements.emptyNode(element);
126.3173 +            } else {
126.3174 +                // Render once for this single data point (or use the viewModel if no data was provided)
126.3175 +                var innerBindingContext = ('data' in options) ?
126.3176 +                    bindingContext['createChildContext'](dataValue, options['as']) :  // Given an explitit 'data' value, we create a child binding context for it
126.3177 +                    bindingContext;                                                        // Given no explicit 'data' value, we retain the same binding context
126.3178 +                templateComputed = ko.renderTemplate(templateName || element, innerBindingContext, options, element);
126.3179 +            }
126.3180 +
126.3181 +            // It only makes sense to have a single template computed per element (otherwise which one should have its output displayed?)
126.3182 +            disposeOldComputedAndStoreNewOne(element, templateComputed);
126.3183 +        }
126.3184 +    };
126.3185 +
126.3186 +    // Anonymous templates can't be rewritten. Give a nice error message if you try to do it.
126.3187 +    ko.expressionRewriting.bindingRewriteValidators['template'] = function(bindingValue) {
126.3188 +        var parsedBindingValue = ko.expressionRewriting.parseObjectLiteral(bindingValue);
126.3189 +
126.3190 +        if ((parsedBindingValue.length == 1) && parsedBindingValue[0]['unknown'])
126.3191 +            return null; // It looks like a string literal, not an object literal, so treat it as a named template (which is allowed for rewriting)
126.3192 +
126.3193 +        if (ko.expressionRewriting.keyValueArrayContainsKey(parsedBindingValue, "name"))
126.3194 +            return null; // Named templates can be rewritten, so return "no error"
126.3195 +        return "This template engine does not support anonymous templates nested within its templates";
126.3196 +    };
126.3197 +
126.3198 +    ko.virtualElements.allowedBindings['template'] = true;
126.3199 +})();
126.3200 +
126.3201 +ko.exportSymbol('setTemplateEngine', ko.setTemplateEngine);
126.3202 +ko.exportSymbol('renderTemplate', ko.renderTemplate);
126.3203 +
126.3204 +ko.utils.compareArrays = (function () {
126.3205 +    var statusNotInOld = 'added', statusNotInNew = 'deleted';
126.3206 +
126.3207 +    // Simple calculation based on Levenshtein distance.
126.3208 +    function compareArrays(oldArray, newArray, dontLimitMoves) {
126.3209 +        oldArray = oldArray || [];
126.3210 +        newArray = newArray || [];
126.3211 +
126.3212 +        if (oldArray.length <= newArray.length)
126.3213 +            return compareSmallArrayToBigArray(oldArray, newArray, statusNotInOld, statusNotInNew, dontLimitMoves);
126.3214 +        else
126.3215 +            return compareSmallArrayToBigArray(newArray, oldArray, statusNotInNew, statusNotInOld, dontLimitMoves);
126.3216 +    }
126.3217 +
126.3218 +    function compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, dontLimitMoves) {
126.3219 +        var myMin = Math.min,
126.3220 +            myMax = Math.max,
126.3221 +            editDistanceMatrix = [],
126.3222 +            smlIndex, smlIndexMax = smlArray.length,
126.3223 +            bigIndex, bigIndexMax = bigArray.length,
126.3224 +            compareRange = (bigIndexMax - smlIndexMax) || 1,
126.3225 +            maxDistance = smlIndexMax + bigIndexMax + 1,
126.3226 +            thisRow, lastRow,
126.3227 +            bigIndexMaxForRow, bigIndexMinForRow;
126.3228 +
126.3229 +        for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) {
126.3230 +            lastRow = thisRow;
126.3231 +            editDistanceMatrix.push(thisRow = []);
126.3232 +            bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange);
126.3233 +            bigIndexMinForRow = myMax(0, smlIndex - 1);
126.3234 +            for (bigIndex = bigIndexMinForRow; bigIndex <= bigIndexMaxForRow; bigIndex++) {
126.3235 +                if (!bigIndex)
126.3236 +                    thisRow[bigIndex] = smlIndex + 1;
126.3237 +                else if (!smlIndex)  // Top row - transform empty array into new array via additions
126.3238 +                    thisRow[bigIndex] = bigIndex + 1;
126.3239 +                else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1])
126.3240 +                    thisRow[bigIndex] = lastRow[bigIndex - 1];                  // copy value (no edit)
126.3241 +                else {
126.3242 +                    var northDistance = lastRow[bigIndex] || maxDistance;       // not in big (deletion)
126.3243 +                    var westDistance = thisRow[bigIndex - 1] || maxDistance;    // not in small (addition)
126.3244 +                    thisRow[bigIndex] = myMin(northDistance, westDistance) + 1;
126.3245 +                }
126.3246 +            }
126.3247 +        }
126.3248 +
126.3249 +        var editScript = [], meMinusOne, notInSml = [], notInBig = [];
126.3250 +        for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex;) {
126.3251 +            meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1;
126.3252 +            if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex-1]) {
126.3253 +                notInSml.push(editScript[editScript.length] = {     // added
126.3254 +                    'status': statusNotInSml,
126.3255 +                    'value': bigArray[--bigIndex],
126.3256 +                    'index': bigIndex });
126.3257 +            } else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) {
126.3258 +                notInBig.push(editScript[editScript.length] = {     // deleted
126.3259 +                    'status': statusNotInBig,
126.3260 +                    'value': smlArray[--smlIndex],
126.3261 +                    'index': smlIndex });
126.3262 +            } else {
126.3263 +                editScript.push({
126.3264 +                    'status': "retained",
126.3265 +                    'value': bigArray[--bigIndex] });
126.3266 +                --smlIndex;
126.3267 +            }
126.3268 +        }
126.3269 +
126.3270 +        if (notInSml.length && notInBig.length) {
126.3271 +            // Set a limit on the number of consecutive non-matching comparisons; having it a multiple of
126.3272 +            // smlIndexMax keeps the time complexity of this algorithm linear.
126.3273 +            var limitFailedCompares = smlIndexMax * 10, failedCompares,
126.3274 +                a, d, notInSmlItem, notInBigItem;
126.3275 +            // Go through the items that have been added and deleted and try to find matches between them.
126.3276 +            for (failedCompares = a = 0; (dontLimitMoves || failedCompares < limitFailedCompares) && (notInSmlItem = notInSml[a]); a++) {
126.3277 +                for (d = 0; notInBigItem = notInBig[d]; d++) {
126.3278 +                    if (notInSmlItem['value'] === notInBigItem['value']) {
126.3279 +                        notInSmlItem['moved'] = notInBigItem['index'];
126.3280 +                        notInBigItem['moved'] = notInSmlItem['index'];
126.3281 +                        notInBig.splice(d,1);       // This item is marked as moved; so remove it from notInBig list
126.3282 +                        failedCompares = d = 0;     // Reset failed compares count because we're checking for consecutive failures
126.3283 +                        break;
126.3284 +                    }
126.3285 +                }
126.3286 +                failedCompares += d;
126.3287 +            }
126.3288 +        }
126.3289 +        return editScript.reverse();
126.3290 +    }
126.3291 +
126.3292 +    return compareArrays;
126.3293 +})();
126.3294 +
126.3295 +ko.exportSymbol('utils.compareArrays', ko.utils.compareArrays);
126.3296 +
126.3297 +(function () {
126.3298 +    // Objective:
126.3299 +    // * Given an input array, a container DOM node, and a function from array elements to arrays of DOM nodes,
126.3300 +    //   map the array elements to arrays of DOM nodes, concatenate together all these arrays, and use them to populate the container DOM node
126.3301 +    // * Next time we're given the same combination of things (with the array possibly having mutated), update the container DOM node
126.3302 +    //   so that its children is again the concatenation of the mappings of the array elements, but don't re-map any array elements that we
126.3303 +    //   previously mapped - retain those nodes, and just insert/delete other ones
126.3304 +
126.3305 +    // "callbackAfterAddingNodes" will be invoked after any "mapping"-generated nodes are inserted into the container node
126.3306 +    // You can use this, for example, to activate bindings on those nodes.
126.3307 +
126.3308 +    function fixUpNodesToBeMovedOrRemoved(contiguousNodeArray) {
126.3309 +        // Before moving, deleting, or replacing a set of nodes that were previously outputted by the "map" function, we have to reconcile
126.3310 +        // them against what is in the DOM right now. It may be that some of the nodes have already been removed from the document,
126.3311 +        // or that new nodes might have been inserted in the middle, for example by a binding. Also, there may previously have been
126.3312 +        // leading comment nodes (created by rewritten string-based templates) that have since been removed during binding.
126.3313 +        // So, this function translates the old "map" output array into its best guess of what set of current DOM nodes should be removed.
126.3314 +        //
126.3315 +        // Rules:
126.3316 +        //   [A] Any leading nodes that aren't in the document any more should be ignored
126.3317 +        //       These most likely correspond to memoization nodes that were already removed during binding
126.3318 +        //       See https://github.com/SteveSanderson/knockout/pull/440
126.3319 +        //   [B] We want to output a contiguous series of nodes that are still in the document. So, ignore any nodes that
126.3320 +        //       have already been removed, and include any nodes that have been inserted among the previous collection
126.3321 +
126.3322 +        // Rule [A]
126.3323 +        while (contiguousNodeArray.length && !ko.utils.domNodeIsAttachedToDocument(contiguousNodeArray[0]))
126.3324 +            contiguousNodeArray.splice(0, 1);
126.3325 +
126.3326 +        // Rule [B]
126.3327 +        if (contiguousNodeArray.length > 1) {
126.3328 +            // Build up the actual new contiguous node set
126.3329 +            var current = contiguousNodeArray[0], last = contiguousNodeArray[contiguousNodeArray.length - 1], newContiguousSet = [current];
126.3330 +            while (current !== last) {
126.3331 +                current = current.nextSibling;
126.3332 +                if (!current) // Won't happen, except if the developer has manually removed some DOM elements (then we're in an undefined scenario)
126.3333 +                    return;
126.3334 +                newContiguousSet.push(current);
126.3335 +            }
126.3336 +
126.3337 +            // ... then mutate the input array to match this.
126.3338 +            // (The following line replaces the contents of contiguousNodeArray with newContiguousSet)
126.3339 +            Array.prototype.splice.apply(contiguousNodeArray, [0, contiguousNodeArray.length].concat(newContiguousSet));
126.3340 +        }
126.3341 +        return contiguousNodeArray;
126.3342 +    }
126.3343 +
126.3344 +    function mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) {
126.3345 +        // Map this array value inside a dependentObservable so we re-map when any dependency changes
126.3346 +        var mappedNodes = [];
126.3347 +        var dependentObservable = ko.dependentObservable(function() {
126.3348 +            var newMappedNodes = mapping(valueToMap, index) || [];
126.3349 +
126.3350 +            // On subsequent evaluations, just replace the previously-inserted DOM nodes
126.3351 +            if (mappedNodes.length > 0) {
126.3352 +                ko.utils.replaceDomNodes(fixUpNodesToBeMovedOrRemoved(mappedNodes), newMappedNodes);
126.3353 +                if (callbackAfterAddingNodes)
126.3354 +                    ko.dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);
126.3355 +            }
126.3356 +
126.3357 +            // Replace the contents of the mappedNodes array, thereby updating the record
126.3358 +            // of which nodes would be deleted if valueToMap was itself later removed
126.3359 +            mappedNodes.splice(0, mappedNodes.length);
126.3360 +            ko.utils.arrayPushAll(mappedNodes, newMappedNodes);
126.3361 +        }, null, { disposeWhenNodeIsRemoved: containerNode, disposeWhen: function() { return (mappedNodes.length == 0) || !ko.utils.domNodeIsAttachedToDocument(mappedNodes[0]) } });
126.3362 +        return { mappedNodes : mappedNodes, dependentObservable : (dependentObservable.isActive() ? dependentObservable : undefined) };
126.3363 +    }
126.3364 +
126.3365 +    var lastMappingResultDomDataKey = "setDomNodeChildrenFromArrayMapping_lastMappingResult";
126.3366 +
126.3367 +    ko.utils.setDomNodeChildrenFromArrayMapping = function (domNode, array, mapping, options, callbackAfterAddingNodes) {
126.3368 +        // Compare the provided array against the previous one
126.3369 +        array = array || [];
126.3370 +        options = options || {};
126.3371 +        var isFirstExecution = ko.utils.domData.get(domNode, lastMappingResultDomDataKey) === undefined;
126.3372 +        var lastMappingResult = ko.utils.domData.get(domNode, lastMappingResultDomDataKey) || [];
126.3373 +        var lastArray = ko.utils.arrayMap(lastMappingResult, function (x) { return x.arrayEntry; });
126.3374 +        var editScript = ko.utils.compareArrays(lastArray, array);
126.3375 +
126.3376 +        // Build the new mapping result
126.3377 +        var newMappingResult = [];
126.3378 +        var lastMappingResultIndex = 0;
126.3379 +        var newMappingResultIndex = 0;
126.3380 +
126.3381 +        var nodesToDelete = [];
126.3382 +        var itemsToProcess = [];
126.3383 +        var itemsForBeforeRemoveCallbacks = [];
126.3384 +        var itemsForMoveCallbacks = [];
126.3385 +        var itemsForAfterAddCallbacks = [];
126.3386 +        var mapData;
126.3387 +
126.3388 +        function itemMovedOrRetained(editScriptIndex, oldPosition) {
126.3389 +            mapData = lastMappingResult[oldPosition];
126.3390 +            if (newMappingResultIndex !== oldPosition)
126.3391 +                itemsForMoveCallbacks[editScriptIndex] = mapData;
126.3392 +            // Since updating the index might change the nodes, do so before calling fixUpNodesToBeMovedOrRemoved
126.3393 +            mapData.indexObservable(newMappingResultIndex++);
126.3394 +            fixUpNodesToBeMovedOrRemoved(mapData.mappedNodes);
126.3395 +            newMappingResult.push(mapData);
126.3396 +            itemsToProcess.push(mapData);
126.3397 +        }
126.3398 +
126.3399 +        function callCallback(callback, items) {
126.3400 +            if (callback) {
126.3401 +                for (var i = 0, n = items.length; i < n; i++) {
126.3402 +                    if (items[i]) {
126.3403 +                        ko.utils.arrayForEach(items[i].mappedNodes, function(node) {
126.3404 +                            callback(node, i, items[i].arrayEntry);
126.3405 +                        });
126.3406 +                    }
126.3407 +                }
126.3408 +            }
126.3409 +        }
126.3410 +
126.3411 +        for (var i = 0, editScriptItem, movedIndex; editScriptItem = editScript[i]; i++) {
126.3412 +            movedIndex = editScriptItem['moved'];
126.3413 +            switch (editScriptItem['status']) {
126.3414 +                case "deleted":
126.3415 +                    if (movedIndex === undefined) {
126.3416 +                        mapData = lastMappingResult[lastMappingResultIndex];
126.3417 +
126.3418 +                        // Stop tracking changes to the mapping for these nodes
126.3419 +                        if (mapData.dependentObservable)
126.3420 +                            mapData.dependentObservable.dispose();
126.3421 +
126.3422 +                        // Queue these nodes for later removal
126.3423 +                        nodesToDelete.push.apply(nodesToDelete, fixUpNodesToBeMovedOrRemoved(mapData.mappedNodes));
126.3424 +                        if (options['beforeRemove']) {
126.3425 +                            itemsForBeforeRemoveCallbacks[i] = mapData;
126.3426 +                            itemsToProcess.push(mapData);
126.3427 +                        }
126.3428 +                    }
126.3429 +                    lastMappingResultIndex++;
126.3430 +                    break;
126.3431 +
126.3432 +                case "retained":
126.3433 +                    itemMovedOrRetained(i, lastMappingResultIndex++);
126.3434 +                    break;
126.3435 +
126.3436 +                case "added":
126.3437 +                    if (movedIndex !== undefined) {
126.3438 +                        itemMovedOrRetained(i, movedIndex);
126.3439 +                    } else {
126.3440 +                        mapData = { arrayEntry: editScriptItem['value'], indexObservable: ko.observable(newMappingResultIndex++) };
126.3441 +                        newMappingResult.push(mapData);
126.3442 +                        itemsToProcess.push(mapData);
126.3443 +                        if (!isFirstExecution)
126.3444 +                            itemsForAfterAddCallbacks[i] = mapData;
126.3445 +                    }
126.3446 +                    break;
126.3447 +            }
126.3448 +        }
126.3449 +
126.3450 +        // Call beforeMove first before any changes have been made to the DOM
126.3451 +        callCallback(options['beforeMove'], itemsForMoveCallbacks);
126.3452 +
126.3453 +        // Next remove nodes for deleted items (or just clean if there's a beforeRemove callback)
126.3454 +        ko.utils.arrayForEach(nodesToDelete, options['beforeRemove'] ? ko.cleanNode : ko.removeNode);
126.3455 +
126.3456 +        // Next add/reorder the remaining items (will include deleted items if there's a beforeRemove callback)
126.3457 +        for (var i = 0, nextNode = ko.virtualElements.firstChild(domNode), lastNode, node; mapData = itemsToProcess[i]; i++) {
126.3458 +            // Get nodes for newly added items
126.3459 +            if (!mapData.mappedNodes)
126.3460 +                ko.utils.extend(mapData, mapNodeAndRefreshWhenChanged(domNode, mapping, mapData.arrayEntry, callbackAfterAddingNodes, mapData.indexObservable));
126.3461 +
126.3462 +            // Put nodes in the right place if they aren't there already
126.3463 +            for (var j = 0; node = mapData.mappedNodes[j]; nextNode = node.nextSibling, lastNode = node, j++) {
126.3464 +                if (node !== nextNode)
126.3465 +                    ko.virtualElements.insertAfter(domNode, node, lastNode);
126.3466 +            }
126.3467 +
126.3468 +            // Run the callbacks for newly added nodes (for example, to apply bindings, etc.)
126.3469 +            if (!mapData.initialized && callbackAfterAddingNodes) {
126.3470 +                callbackAfterAddingNodes(mapData.arrayEntry, mapData.mappedNodes, mapData.indexObservable);
126.3471 +                mapData.initialized = true;
126.3472 +            }
126.3473 +        }
126.3474 +
126.3475 +        // If there's a beforeRemove callback, call it after reordering.
126.3476 +        // Note that we assume that the beforeRemove callback will usually be used to remove the nodes using
126.3477 +        // some sort of animation, which is why we first reorder the nodes that will be removed. If the
126.3478 +        // callback instead removes the nodes right away, it would be more efficient to skip reordering them.
126.3479 +        // Perhaps we'll make that change in the future if this scenario becomes more common.
126.3480 +        callCallback(options['beforeRemove'], itemsForBeforeRemoveCallbacks);
126.3481 +
126.3482 +        // Finally call afterMove and afterAdd callbacks
126.3483 +        callCallback(options['afterMove'], itemsForMoveCallbacks);
126.3484 +        callCallback(options['afterAdd'], itemsForAfterAddCallbacks);
126.3485 +
126.3486 +        // Store a copy of the array items we just considered so we can difference it next time
126.3487 +        ko.utils.domData.set(domNode, lastMappingResultDomDataKey, newMappingResult);
126.3488 +    }
126.3489 +})();
126.3490 +
126.3491 +ko.exportSymbol('utils.setDomNodeChildrenFromArrayMapping', ko.utils.setDomNodeChildrenFromArrayMapping);
126.3492 +ko.nativeTemplateEngine = function () {
126.3493 +    this['allowTemplateRewriting'] = false;
126.3494 +}
126.3495 +
126.3496 +ko.nativeTemplateEngine.prototype = new ko.templateEngine();
126.3497 +ko.nativeTemplateEngine.prototype['renderTemplateSource'] = function (templateSource, bindingContext, options) {
126.3498 +    var useNodesIfAvailable = !(ko.utils.ieVersion < 9), // IE<9 cloneNode doesn't work properly
126.3499 +        templateNodesFunc = useNodesIfAvailable ? templateSource['nodes'] : null,
126.3500 +        templateNodes = templateNodesFunc ? templateSource['nodes']() : null;
126.3501 +
126.3502 +    if (templateNodes) {
126.3503 +        return ko.utils.makeArray(templateNodes.cloneNode(true).childNodes);
126.3504 +    } else {
126.3505 +        var templateText = templateSource['text']();
126.3506 +        return ko.utils.parseHtmlFragment(templateText);
126.3507 +    }
126.3508 +};
126.3509 +
126.3510 +ko.nativeTemplateEngine.instance = new ko.nativeTemplateEngine();
126.3511 +ko.setTemplateEngine(ko.nativeTemplateEngine.instance);
126.3512 +
126.3513 +ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine);
126.3514 +(function() {
126.3515 +    ko.jqueryTmplTemplateEngine = function () {
126.3516 +        // Detect which version of jquery-tmpl you're using. Unfortunately jquery-tmpl
126.3517 +        // doesn't expose a version number, so we have to infer it.
126.3518 +        // Note that as of Knockout 1.3, we only support jQuery.tmpl 1.0.0pre and later,
126.3519 +        // which KO internally refers to as version "2", so older versions are no longer detected.
126.3520 +        var jQueryTmplVersion = this.jQueryTmplVersion = (function() {
126.3521 +            if ((typeof(jQuery) == "undefined") || !(jQuery['tmpl']))
126.3522 +                return 0;
126.3523 +            // Since it exposes no official version number, we use our own numbering system. To be updated as jquery-tmpl evolves.
126.3524 +            try {
126.3525 +                if (jQuery['tmpl']['tag']['tmpl']['open'].toString().indexOf('__') >= 0) {
126.3526 +                    // Since 1.0.0pre, custom tags should append markup to an array called "__"
126.3527 +                    return 2; // Final version of jquery.tmpl
126.3528 +                }
126.3529 +            } catch(ex) { /* Apparently not the version we were looking for */ }
126.3530 +
126.3531 +            return 1; // Any older version that we don't support
126.3532 +        })();
126.3533 +
126.3534 +        function ensureHasReferencedJQueryTemplates() {
126.3535 +            if (jQueryTmplVersion < 2)
126.3536 +                throw new Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");
126.3537 +        }
126.3538 +
126.3539 +        function executeTemplate(compiledTemplate, data, jQueryTemplateOptions) {
126.3540 +            return jQuery['tmpl'](compiledTemplate, data, jQueryTemplateOptions);
126.3541 +        }
126.3542 +
126.3543 +        this['renderTemplateSource'] = function(templateSource, bindingContext, options) {
126.3544 +            options = options || {};
126.3545 +            ensureHasReferencedJQueryTemplates();
126.3546 +
126.3547 +            // Ensure we have stored a precompiled version of this template (don't want to reparse on every render)
126.3548 +            var precompiled = templateSource['data']('precompiled');
126.3549 +            if (!precompiled) {
126.3550 +                var templateText = templateSource['text']() || "";
126.3551 +                // Wrap in "with($whatever.koBindingContext) { ... }"
126.3552 +                templateText = "{{ko_with $item.koBindingContext}}" + templateText + "{{/ko_with}}";
126.3553 +
126.3554 +                precompiled = jQuery['template'](null, templateText);
126.3555 +                templateSource['data']('precompiled', precompiled);
126.3556 +            }
126.3557 +
126.3558 +            var data = [bindingContext['$data']]; // Prewrap the data in an array to stop jquery.tmpl from trying to unwrap any arrays
126.3559 +            var jQueryTemplateOptions = jQuery['extend']({ 'koBindingContext': bindingContext }, options['templateOptions']);
126.3560 +
126.3561 +            var resultNodes = executeTemplate(precompiled, data, jQueryTemplateOptions);
126.3562 +            resultNodes['appendTo'](document.createElement("div")); // Using "appendTo" forces jQuery/jQuery.tmpl to perform necessary cleanup work
126.3563 +
126.3564 +            jQuery['fragments'] = {}; // Clear jQuery's fragment cache to avoid a memory leak after a large number of template renders
126.3565 +            return resultNodes;
126.3566 +        };
126.3567 +
126.3568 +        this['createJavaScriptEvaluatorBlock'] = function(script) {
126.3569 +            return "{{ko_code ((function() { return " + script + " })()) }}";
126.3570 +        };
126.3571 +
126.3572 +        this['addTemplate'] = function(templateName, templateMarkup) {
126.3573 +            document.write("<script type='text/html' id='" + templateName + "'>" + templateMarkup + "</script>");
126.3574 +        };
126.3575 +
126.3576 +        if (jQueryTmplVersion > 0) {
126.3577 +            jQuery['tmpl']['tag']['ko_code'] = {
126.3578 +                open: "__.push($1 || '');"
126.3579 +            };
126.3580 +            jQuery['tmpl']['tag']['ko_with'] = {
126.3581 +                open: "with($1) {",
126.3582 +                close: "} "
126.3583 +            };
126.3584 +        }
126.3585 +    };
126.3586 +
126.3587 +    ko.jqueryTmplTemplateEngine.prototype = new ko.templateEngine();
126.3588 +
126.3589 +    // Use this one by default *only if jquery.tmpl is referenced*
126.3590 +    var jqueryTmplTemplateEngineInstance = new ko.jqueryTmplTemplateEngine();
126.3591 +    if (jqueryTmplTemplateEngineInstance.jQueryTmplVersion > 0)
126.3592 +        ko.setTemplateEngine(jqueryTmplTemplateEngineInstance);
126.3593 +
126.3594 +    ko.exportSymbol('jqueryTmplTemplateEngine', ko.jqueryTmplTemplateEngine);
126.3595 +})();
126.3596 +});
126.3597 +})(window,document,navigator,window["jQuery"]);
126.3598 +})();
126.3599 +
126.3600 +// TeaVM generated classes
126.3601 +/*
126.3602 + *  Copyright 2013 Alexey Andreev.
126.3603 + *
126.3604 + *  Licensed under the Apache License, Version 2.0 (the "License");
126.3605 + *  you may not use this file except in compliance with the License.
126.3606 + *  You may obtain a copy of the License at
126.3607 + *
126.3608 + *       http://www.apache.org/licenses/LICENSE-2.0
126.3609 + *
126.3610 + *  Unless required by applicable law or agreed to in writing, software
126.3611 + *  distributed under the License is distributed on an "AS IS" BASIS,
126.3612 + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
126.3613 + *  See the License for the specific language governing permissions and
126.3614 + *  limitations under the License.
126.3615 + */
126.3616 +$rt_lastObjectId = 0;
126.3617 +$rt_nextId = function() {
126.3618 +    return $rt_lastObjectId++;
126.3619 +}
126.3620 +$rt_compare = function(a, b) {
126.3621 +    return a > b ? 1 : a < b ? -1 : 0;
126.3622 +}
126.3623 +$rt_isInstance = function(obj, cls) {
126.3624 +    return obj != null && obj.constructor.$meta && $rt_isAssignable(obj.constructor, cls);
126.3625 +}
126.3626 +$rt_isAssignable = function(from, to) {
126.3627 +    if (from === to) {
126.3628 +        return true;
126.3629 +    }
126.3630 +    var supertypes = from.$meta.supertypes;
126.3631 +    for (var i = 0; i < supertypes.length; i = (i + 1) | 0) {
126.3632 +        if ($rt_isAssignable(supertypes[i], to)) {
126.3633 +            return true;
126.3634 +        }
126.3635 +    }
126.3636 +    return false;
126.3637 +}
126.3638 +$rt_createArray = function(cls, sz) {
126.3639 +    var data = new Array(sz);
126.3640 +    var arr = new ($rt_arraycls(cls))(data);
126.3641 +    for (var i = 0; i < sz; i = (i + 1) | 0) {
126.3642 +        data[i] = null;
126.3643 +    }
126.3644 +    return arr;
126.3645 +}
126.3646 +$rt_wrapArray = function(cls, data) {
126.3647 +    var arr = new ($rt_arraycls(cls))(data);
126.3648 +    return arr;
126.3649 +}
126.3650 +$rt_createUnfilledArray = function(cls, sz) {
126.3651 +    return new ($rt_arraycls(cls))(new Array(sz));
126.3652 +}
126.3653 +$rt_createLongArray = function(sz) {
126.3654 +    var data = new Array(sz);
126.3655 +    var arr = new ($rt_arraycls($rt_longcls()))(data);
126.3656 +    for (var i = 0; i < sz; i = (i + 1) | 0) {
126.3657 +        data[i] = Long.ZERO;
126.3658 +    }
126.3659 +    return arr;
126.3660 +}
126.3661 +if (ArrayBuffer) {
126.3662 +    $rt_createNumericArray = function(cls, nativeArray) {
126.3663 +        return new ($rt_arraycls(cls))(nativeArray);
126.3664 +    }
126.3665 +    $rt_createByteArray = function(sz) {
126.3666 +        return $rt_createNumericArray($rt_bytecls(), new Int8Array(new ArrayBuffer(sz)), 0);
126.3667 +    };
126.3668 +    $rt_createShortArray = function(sz) {
126.3669 +        return $rt_createNumericArray($rt_shortcls(), new Int16Array(new ArrayBuffer(sz << 1)), 0);
126.3670 +    };
126.3671 +    $rt_createIntArray = function(sz) {
126.3672 +        return $rt_createNumericArray($rt_intcls(), new Int32Array(new ArrayBuffer(sz << 2)), 0);
126.3673 +    };
126.3674 +    $rt_createBooleanArray = function(sz) {
126.3675 +        return $rt_createNumericArray($rt_booleancls(), new Int8Array(new ArrayBuffer(sz)), 0);
126.3676 +    };
126.3677 +    $rt_createFloatArray = function(sz) {
126.3678 +        return $rt_createNumericArray($rt_floatcls(), new Float32Array(new ArrayBuffer(sz << 2)), 0);
126.3679 +    };
126.3680 +    $rt_createDoubleArray = function(sz) {
126.3681 +        return $rt_createNumericArray($rt_doublecls(), new Float64Array(new ArrayBuffer(sz << 3)), 0);
126.3682 +    };
126.3683 +    $rt_createCharArray = function(sz) {
126.3684 +        return $rt_createNumericArray($rt_charcls(), new Uint16Array(new ArrayBuffer(sz << 1)), 0);
126.3685 +    };
126.3686 +} else {
126.3687 +    $rt_createNumericArray = function(cls, sz) {
126.3688 +        var data = new Array(sz);
126.3689 +        var arr = new ($rt_arraycls(cls))(data);
126.3690 +        for (var i = 0; i < sz; i = (i + 1) | 0) {
126.3691 +            data[i] = 0;
126.3692 +        }
126.3693 +        return arr;
126.3694 +    }
126.3695 +    $rt_createByteArray = function(sz) { return $rt_createNumericArray($rt_bytecls(), sz); }
126.3696 +    $rt_createShortArray = function(sz) { return $rt_createNumericArray($rt_shortcls(), sz); }
126.3697 +    $rt_createIntArray = function(sz) { return $rt_createNumericArray($rt_intcls(), sz); }
126.3698 +    $rt_createBooleanArray = function(sz) { return $rt_createNumericArray($rt_booleancls(), sz); }
126.3699 +    $rt_createFloatArray = function(sz) { return $rt_createNumericArray($rt_floatcls(), sz); }
126.3700 +    $rt_createDoubleArray = function(sz) { return $rt_createNumericArray($rt_doublecls(), sz); }
126.3701 +    $rt_createCharArray = function(sz) { return $rt_createNumericArray($rt_charcls(), sz); }
126.3702 +}
126.3703 +$rt_arraycls = function(cls) {
126.3704 +    if (cls.$array == undefined) {
126.3705 +        var arraycls = function(data) {
126.3706 +            this.data = data;
126.3707 +            this.$id = $rt_nextId();
126.3708 +        };
126.3709 +        arraycls.prototype = new ($rt_objcls())();
126.3710 +        arraycls.prototype.constructor = arraycls;
126.3711 +        arraycls.$meta = { item : cls, supertypes : [$rt_objcls()], primitive : false, superclass : $rt_objcls() };
126.3712 +        cls.$array = arraycls;
126.3713 +    }
126.3714 +    return cls.$array;
126.3715 +}
126.3716 +$rt_createcls = function() {
126.3717 +    return {
126.3718 +        $meta : {
126.3719 +            supertypes : []
126.3720 +        }
126.3721 +    };
126.3722 +}
126.3723 +$rt_booleanclsCache = null;
126.3724 +$rt_booleancls = function() {
126.3725 +    if ($rt_booleanclsCache == null) {
126.3726 +        $rt_booleanclsCache = $rt_createcls();
126.3727 +        $rt_booleanclsCache.primitive = true;
126.3728 +        $rt_booleanclsCache.name = "boolean";
126.3729 +    }
126.3730 +    return $rt_booleanclsCache;
126.3731 +}
126.3732 +$rt_charclsCache = null;
126.3733 +$rt_charcls = function() {
126.3734 +    if ($rt_charclsCache == null) {
126.3735 +        $rt_charclsCache = $rt_createcls();
126.3736 +        $rt_charclsCache.primitive = true;
126.3737 +        $rt_charclsCache.name = "char";
126.3738 +    }
126.3739 +    return $rt_charclsCache;
126.3740 +}
126.3741 +$rt_byteclsCache = null;
126.3742 +$rt_bytecls = function() {
126.3743 +    if ($rt_byteclsCache == null) {
126.3744 +        $rt_byteclsCache = $rt_createcls();
126.3745 +        $rt_byteclsCache.primitive = true;
126.3746 +        $rt_byteclsCache.name = "byte";
126.3747 +    }
126.3748 +    return $rt_byteclsCache;
126.3749 +}
126.3750 +$rt_shortclsCache = null;
126.3751 +$rt_shortcls = function() {
126.3752 +    if ($rt_shortclsCache == null) {
126.3753 +        $rt_shortclsCache = $rt_createcls();
126.3754 +        $rt_shortclsCache.primitive = true;
126.3755 +        $rt_shortclsCache.name = "short";
126.3756 +    }
126.3757 +    return $rt_shortclsCache;
126.3758 +}
126.3759 +$rt_intclsCache = null;
126.3760 +$rt_intcls = function() {
126.3761 +    if ($rt_intclsCache === null) {
126.3762 +        $rt_intclsCache = $rt_createcls();
126.3763 +        $rt_intclsCache.primitive = true;
126.3764 +        $rt_intclsCache.name = "int";
126.3765 +    }
126.3766 +    return $rt_intclsCache;
126.3767 +}
126.3768 +$rt_longclsCache = null;
126.3769 +$rt_longcls = function() {
126.3770 +    if ($rt_longclsCache === null) {
126.3771 +        $rt_longclsCache = $rt_createcls();
126.3772 +        $rt_longclsCache.primitive = true;
126.3773 +        $rt_longclsCache.name = "long";
126.3774 +    }
126.3775 +    return $rt_longclsCache;
126.3776 +}
126.3777 +$rt_floatclsCache = null;
126.3778 +$rt_floatcls = function() {
126.3779 +    if ($rt_floatclsCache === null) {
126.3780 +        $rt_floatclsCache = $rt_createcls();
126.3781 +        $rt_floatclsCache.primitive = true;
126.3782 +        $rt_floatclsCache.name = "float";
126.3783 +    }
126.3784 +    return $rt_floatclsCache;
126.3785 +}
126.3786 +$rt_doubleclsCache = null;
126.3787 +$rt_doublecls = function() {
126.3788 +    if ($rt_doubleclsCache === null) {
126.3789 +        $rt_doubleclsCache = $rt_createcls();
126.3790 +        $rt_doubleclsCache.primitive = true;
126.3791 +        $rt_doubleclsCache.name = "double";
126.3792 +    }
126.3793 +    return $rt_doubleclsCache;
126.3794 +}
126.3795 +$rt_voidclsCache = null;
126.3796 +$rt_voidcls = function() {
126.3797 +    if ($rt_voidclsCache === null) {
126.3798 +        $rt_voidclsCache = $rt_createcls();
126.3799 +        $rt_voidclsCache.primitive = true;
126.3800 +        $rt_voidclsCache.name = "void";
126.3801 +    }
126.3802 +    return $rt_voidclsCache;
126.3803 +}
126.3804 +$rt_equals = function(a, b) {
126.3805 +    if (a === b) {
126.3806 +        return true;
126.3807 +    }
126.3808 +    if (a === null || b === null) {
126.3809 +        return false;
126.3810 +    }
126.3811 +    if (typeof(a) == 'object') {
126.3812 +        return a.equals(b);
126.3813 +    } else {
126.3814 +        return false;
126.3815 +    }
126.3816 +}
126.3817 +$rt_clinit = function(cls) {
126.3818 +    if (cls.$clinit) {
126.3819 +        var f = cls.$clinit;
126.3820 +        delete cls.$clinit;
126.3821 +        f();
126.3822 +    }
126.3823 +    return cls;
126.3824 +}
126.3825 +$rt_init = function(cls, constructor, args) {
126.3826 +    var obj = new cls();
126.3827 +    cls.prototype[constructor].apply(obj, args);
126.3828 +    return obj;
126.3829 +}
126.3830 +$rt_throw = function(ex) {
126.3831 +    var err = ex.$jsException;
126.3832 +    if (!err) {
126.3833 +        var err = new Error("Java exception thrown");
126.3834 +        err.$javaException = ex;
126.3835 +        ex.$jsException = err;
126.3836 +    }
126.3837 +    throw err;
126.3838 +}
126.3839 +$rt_byteToInt = function(value) {
126.3840 +    return value > 0xFF ? value | 0xFFFFFF00 : value;
126.3841 +}
126.3842 +$rt_shortToInt = function(value) {
126.3843 +    return value > 0xFFFF ? value | 0xFFFF0000 : value;
126.3844 +}
126.3845 +$rt_createMultiArray = function(cls, dimensions) {
126.3846 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3847 +    var firstDim = dimensions[0] | 0;
126.3848 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3849 +        arrays[i] = $rt_createArray(cls, firstDim);
126.3850 +    }
126.3851 +    return $rt_createMultiArrayImpl(cls, arrays, dimensions);
126.3852 +}
126.3853 +$rt_createByteMultiArray = function(dimensions) {
126.3854 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3855 +    var firstDim = dimensions[0] | 0;
126.3856 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3857 +        arrays[i] = $rt_createByteArray(firstDim);
126.3858 +    }
126.3859 +    return $rt_createMultiArrayImpl($rt_bytecls(), arrays, dimensions);
126.3860 +}
126.3861 +$rt_createBooleanMultiArray = function(dimensions) {
126.3862 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3863 +    var firstDim = dimensions[0] | 0;
126.3864 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3865 +        arrays[i] = $rt_createBooleanArray(firstDim);
126.3866 +    }
126.3867 +    return $rt_createMultiArrayImpl($rt_booleancls(), arrays, dimensions);
126.3868 +}
126.3869 +$rt_createShortMultiArray = function(dimensions) {
126.3870 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3871 +    var firstDim = dimensions[0] | 0;
126.3872 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3873 +        arrays[i] = $rt_createShortArray(firstDim);
126.3874 +    }
126.3875 +    return $rt_createMultiArrayImpl($rt_shortcls(), arrays, dimensions);
126.3876 +}
126.3877 +$rt_createIntMultiArray = function(dimensions) {
126.3878 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3879 +    var firstDim = dimensions[0] | 0;
126.3880 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3881 +        arrays[i] = $rt_createIntArray(firstDim);
126.3882 +    }
126.3883 +    return $rt_createMultiArrayImpl($rt_intcls(), arrays, dimensions);
126.3884 +}
126.3885 +$rt_createLongMultiArray = function(dimensions) {
126.3886 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3887 +    var firstDim = dimensions[0] | 0;
126.3888 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3889 +        arrays[i] = $rt_createLongArray(firstDim);
126.3890 +    }
126.3891 +    return $rt_createMultiArrayImpl($rt_longcls(), arrays, dimensions);
126.3892 +}
126.3893 +$rt_createFloatMultiArray = function(dimensions) {
126.3894 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3895 +    var firstDim = dimensions[0] | 0;
126.3896 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3897 +        arrays[i] = $rt_createFloatArray(firstDim);
126.3898 +    }
126.3899 +    return $rt_createMultiArrayImpl($rt_floatcls(), arrays, dimensions);
126.3900 +}
126.3901 +$rt_createDoubleMultiArray = function(dimensions) {
126.3902 +    var arrays = new Array($rt_primitiveArrayCount(dimensions));
126.3903 +    var firstDim = dimensions[0] | 0;
126.3904 +    for (var i = 0 | 0; i < arrays.length; i = (i + 1) | 0) {
126.3905 +        arrays[i] = $rt_createDoubleArray(firstDim);
126.3906 +    }
126.3907 +    return $rt_createMultiArrayImpl($rt_doublecls(), arrays, dimensions);
126.3908 +}
126.3909 +$rt_primitiveArrayCount = function(dimensions) {
126.3910 +    var val = dimensions[1] | 0;
126.3911 +    for (var i = 2 | 0; i < dimensions.length; i = (i + 1) | 0) {
126.3912 +        val = (val * (dimensions[i] | 0)) | 0;
126.3913 +    }
126.3914 +    return val;
126.3915 +}
126.3916 +$rt_createMultiArrayImpl = function(cls, arrays, dimensions) {
126.3917 +    var limit = arrays.length;
126.3918 +    for (var i = 1 | 0; i < dimensions.length; i = (i + 1) | 0) {
126.3919 +        cls = $rt_arraycls(cls);
126.3920 +        var dim = dimensions[i];
126.3921 +        var index = 0;
126.3922 +        var packedIndex = 0;
126.3923 +        while (index < limit) {
126.3924 +            var arr = $rt_createUnfilledArray(cls, dim);
126.3925 +            for (var j = 0; j < dim; j = (j + 1) | 0) {
126.3926 +                arr.data[j] = arrays[index];
126.3927 +                index = (index + 1) | 0;
126.3928 +            }
126.3929 +            arrays[packedIndex] = arr;
126.3930 +            packedIndex = (packedIndex + 1) | 0;
126.3931 +        }
126.3932 +        limit = packedIndex;
126.3933 +    }
126.3934 +    return arrays[0];
126.3935 +}
126.3936 +$rt_assertNotNaN = function(value) {
126.3937 +    if (typeof value == 'number' && isNaN(value)) {
126.3938 +        throw "NaN";
126.3939 +    }
126.3940 +    return value;
126.3941 +}
126.3942 +$rt_methodStubs = function(clinit, names) {
126.3943 +    for (var i = 0; i < names.length; i = (i + 1) | 0) {
126.3944 +        window[names[i]] = (function(name) {
126.3945 +            return function() {
126.3946 +                clinit();
126.3947 +                return window[name].apply(window, arguments);
126.3948 +            }
126.3949 +        })(names[i]);
126.3950 +    }
126.3951 +}
126.3952 +$rt_stdoutBuffer = "";
126.3953 +$rt_putStdout = function(ch) {
126.3954 +    if (ch === 0xA) {
126.3955 +        if (console) {
126.3956 +            console.info($rt_stdoutBuffer);
126.3957 +        }
126.3958 +        $rt_stdoutBuffer = "";
126.3959 +    } else {
126.3960 +        $rt_stdoutBuffer += String.fromCharCode(ch);
126.3961 +    }
126.3962 +}
126.3963 +$rt_stderrBuffer = "";
126.3964 +$rt_putStderr = function(ch) {
126.3965 +    if (ch === 0xA) {
126.3966 +        if (console) {
126.3967 +            console.info($rt_stderrBuffer);
126.3968 +        }
126.3969 +        $rt_stderrBuffer = "";
126.3970 +    } else {
126.3971 +        $rt_stderrBuffer += String.fromCharCode(ch);
126.3972 +    }
126.3973 +}
126.3974 +function $rt_declClass(cls, data) {
126.3975 +    cls.name = data.name;
126.3976 +    cls.$meta = {};
126.3977 +    cls.$meta.superclass = data.superclass;
126.3978 +    cls.$meta.supertypes = data.interfaces ? data.interfaces.slice() : [];
126.3979 +    if (data.superclass) {
126.3980 +        cls.$meta.supertypes.push(data.superclass);
126.3981 +        cls.prototype = new data.superclass();
126.3982 +    } else {
126.3983 +        cls.prototype = new Object();
126.3984 +    }
126.3985 +    cls.$meta.name = data.name;
126.3986 +    cls.$meta.enum = data.enum;
126.3987 +    cls.prototype.constructor = cls;
126.3988 +    cls.$clinit = data.clinit;
126.3989 +}
126.3990 +function $rt_virtualMethods(cls) {
126.3991 +    for (var i = 1; i < arguments.length; i += 2) {
126.3992 +        var name = arguments[i];
126.3993 +        var func = arguments[i + 1];
126.3994 +        if (typeof name == 'string') {
126.3995 +            cls.prototype[name] = func;
126.3996 +        } else {
126.3997 +            for (var j = 0; j < name.length; ++j) {
126.3998 +                cls.prototype[name[j]] = func;
126.3999 +            }
126.4000 +        }
126.4001 +    }
126.4002 +}
126.4003 +
126.4004 +Long = function(lo, hi) {
126.4005 +    this.lo = lo | 0;
126.4006 +    this.hi = hi | 0;
126.4007 +}
126.4008 +Long_ZERO = new Long(0, 0);
126.4009 +Long_fromInt = function(val) {
126.4010 +    return val >= 0 ? new Long(val, 0) : new Long(val, -1);
126.4011 +}
126.4012 +Long_fromNumber = function(val) {
126.4013 +    return new Long(val | 0, (val / 0x100000000) | 0);
126.4014 +}
126.4015 +Long_toNumber = function(val) {
126.4016 +    return val.lo + 0x100000000 * val.hi;
126.4017 +}
126.4018 +Long_add = function(a, b) {
126.4019 +    var a_lolo = a.lo & 0xFFFF;
126.4020 +    var a_lohi = a.lo >>> 16;
126.4021 +    var a_hilo = a.hi & 0xFFFF;
126.4022 +    var a_hihi = a.hi >>> 16;
126.4023 +    var b_lolo = b.lo & 0xFFFF;
126.4024 +    var b_lohi = b.lo >>> 16;
126.4025 +    var b_hilo = b.hi & 0xFFFF;
126.4026 +    var b_hihi = b.hi >>> 16;
126.4027 +
126.4028 +    var lolo = (a_lolo + b_lolo) | 0;
126.4029 +    var lohi = (a_lohi + b_lohi + (lolo >> 16)) | 0;
126.4030 +    var hilo = (a_hilo + b_hilo + (lohi >> 16)) | 0;
126.4031 +    var hihi = (a_hihi + b_hihi + (hilo >> 16)) | 0;
126.4032 +    return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
126.4033 +            (hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
126.4034 +}
126.4035 +Long_inc = function(a) {
126.4036 +    var lo = (a.lo + 1) | 0;
126.4037 +    var hi = a.hi;
126.4038 +    if (lo === 0) {
126.4039 +        hi = (hi + 1) | 0;
126.4040 +    }
126.4041 +    return new Long(lo, hi);
126.4042 +}
126.4043 +Long_dec = function(a) {
126.4044 +    var lo = (a.lo - 1) | 0;
126.4045 +    var hi = a.hi;
126.4046 +    if (lo === -1) {
126.4047 +        hi = (hi - 1) | 0;
126.4048 +    }
126.4049 +    return new Long(lo, hi);
126.4050 +}
126.4051 +Long_neg = function(a) {
126.4052 +    return Long_inc(new Long(a.lo ^ 0xFFFFFFFF, a.hi ^ 0xFFFFFFFF));
126.4053 +}
126.4054 +Long_sub = function(a, b) {
126.4055 +    var a_lolo = a.lo & 0xFFFF;
126.4056 +    var a_lohi = a.lo >>> 16;
126.4057 +    var a_hilo = a.hi & 0xFFFF;
126.4058 +    var a_hihi = a.hi >>> 16;
126.4059 +    var b_lolo = b.lo & 0xFFFF;
126.4060 +    var b_lohi = b.lo >>> 16;
126.4061 +    var b_hilo = b.hi & 0xFFFF;
126.4062 +    var b_hihi = b.hi >>> 16;
126.4063 +
126.4064 +    var lolo = (a_lolo - b_lolo) | 0;
126.4065 +    var lohi = (a_lohi - b_lohi + (lolo >> 16)) | 0;
126.4066 +    var hilo = (a_hilo - b_hilo + (lohi >> 16)) | 0;
126.4067 +    var hihi = (a_hihi - b_hihi + (hilo >> 16)) | 0;
126.4068 +    return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16),
126.4069 +            (hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
126.4070 +}
126.4071 +Long_compare = function(a, b) {
126.4072 +    var r = a.hi - b.hi;
126.4073 +    if (r !== 0) {
126.4074 +        return r;
126.4075 +    }
126.4076 +    var r = (a.lo >>> 1) - (b.lo >>> 1);
126.4077 +    if (r !== 0) {
126.4078 +        return r;
126.4079 +    }
126.4080 +    return (a.lo & 1) - (b.lo & 1);
126.4081 +}
126.4082 +Long_isPositive = function(a) {
126.4083 +    return (a.hi & 0x80000000) === 0;
126.4084 +}
126.4085 +Long_isNegative = function(a) {
126.4086 +    return (a.hi & 0x80000000) !== 0;
126.4087 +}
126.4088 +Long_mul = function(a, b) {
126.4089 +    var a_lolo = a.lo & 0xFFFF;
126.4090 +    var a_lohi = a.lo >>> 16;
126.4091 +    var a_hilo = a.hi & 0xFFFF;
126.4092 +    var a_hihi = a.hi >>> 16;
126.4093 +    var b_lolo = b.lo & 0xFFFF;
126.4094 +    var b_lohi = b.lo >>> 16;
126.4095 +    var b_hilo = b.hi & 0xFFFF;
126.4096 +    var b_hihi = b.hi >>> 16;
126.4097 +
126.4098 +    var lolo = (a_lolo * b_lolo) | 0;
126.4099 +    var lohi = (a_lohi * b_lolo + a_lolo * b_lohi + (lolo >> 16)) | 0;
126.4100 +    var hilo = (a_hilo * b_lolo + a_lohi * b_lohi + a_lolo * b_hilo + (lohi >> 16)) | 0;
126.4101 +    var hihi = (a_hihi * b_lolo + a_hilo * b_lohi + a_lohi * b_hilo + a_lolo * b_hihi + (hilo >> 16)) | 0;
126.4102 +    return new Long((lolo & 0xFFFF) | ((lohi & 0xFFFF) << 16), (hilo & 0xFFFF) | ((hihi & 0xFFFF) << 16));
126.4103 +}
126.4104 +Long_div = function(a, b) {
126.4105 +    return Long_divRem(a, b)[0];
126.4106 +}
126.4107 +Long_rem = function(a, b) {
126.4108 +    return Long_divRem(a, b)[1];
126.4109 +}
126.4110 +Long_divRem = function(a, b) {
126.4111 +    var positive = Long_isNegative(a) === Long_isNegative(b);
126.4112 +    if (Long_isNegative(a)) {
126.4113 +        a = Long_neg(a);
126.4114 +    }
126.4115 +    if (Long_isNegative(b)) {
126.4116 +        b = Long_neg(b);
126.4117 +    }
126.4118 +    a = new LongInt(a.lo, a.hi, 0);
126.4119 +    b = new LongInt(b.lo, b.hi, 0);
126.4120 +    var q = LongInt_div(a, b);
126.4121 +    a = new Long(a.lo, a.hi);
126.4122 +    q = new Long(q.lo, q.hi);
126.4123 +    return positive ? [q, a] : [Long_neg(q), Long_neg(a)];
126.4124 +}
126.4125 +Long_shiftLeft16 = function(a) {
126.4126 +    return new Long(a.lo << 16, (a.lo >>> 16) | (a.hi << 16));
126.4127 +}
126.4128 +Long_shiftRight16 = function(a) {
126.4129 +    return new Long((a.lo >>> 16) | (a.hi << 16), a.hi >>> 16);
126.4130 +}
126.4131 +Long_and = function(a, b) {
126.4132 +    return new Long(a.lo & b.lo, a.hi & b.hi);
126.4133 +}
126.4134 +Long_or = function(a, b) {
126.4135 +    return new Long(a.lo | b.lo, a.hi | b.hi);
126.4136 +}
126.4137 +Long_xor = function(a, b) {
126.4138 +    return new Long(a.lo ^ b.lo, a.hi ^ b.hi);
126.4139 +}
126.4140 +Long_shl = function(a, b) {
126.4141 +    if (b < 32) {
126.4142 +        return new Long(a.lo << b, (a.lo >>> (32 - b)) | (a.hi << b));
126.4143 +    } else {
126.4144 +        return new Long(0, a.lo << (b - 32));
126.4145 +    }
126.4146 +}
126.4147 +Long_shr = function(a, b) {
126.4148 +    if (b < 32) {
126.4149 +        return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >> b);
126.4150 +    } else {
126.4151 +        return new Long((a.hi >> (b - 32)), -1);
126.4152 +    }
126.4153 +}
126.4154 +Long_shru = function(a, b) {
126.4155 +    if (b < 32) {
126.4156 +        return new Long((a.lo >>> b) | (a.hi << (32 - b)), a.hi >>> b);
126.4157 +    } else {
126.4158 +        return new Long((a.hi >>> (b - 32)), 0);
126.4159 +    }
126.4160 +}
126.4161 +
126.4162 +// Represents a mutable 80-bit unsigned integer
126.4163 +LongInt = function(lo, hi, sup) {
126.4164 +    this.lo = lo;
126.4165 +    this.hi = hi;
126.4166 +    this.sup = sup;
126.4167 +}
126.4168 +LongInt_mul = function(a, b) {
126.4169 +    var a_lolo = ((a.lo & 0xFFFF) * b) | 0;
126.4170 +    var a_lohi = ((a.lo >>> 16) * b) | 0;
126.4171 +    var a_hilo = ((a.hi & 0xFFFF) * b) | 0;
126.4172 +    var a_hihi = ((a.hi >>> 16) * b) | 0;
126.4173 +    var sup = (a.sup * b) | 0;
126.4174 +
126.4175 +    a_lohi = (a_lohi + (a_lolo >> 16)) | 0;
126.4176 +    a_hilo = (a_hilo + (a_lohi >> 16)) | 0;
126.4177 +    a_hihi = (a_hihi + (a_hilo >> 16)) | 0;
126.4178 +    sup = (sup + (a_hihi >> 16)) | 0;
126.4179 +    a.lo = (a_lolo & 0xFFFF) | (a_lohi << 16);
126.4180 +    a.hi = (a_hilo & 0xFFFF) | (a_hihi << 16);
126.4181 +    a.sup = sup & 0xFFFF;
126.4182 +}
126.4183 +LongInt_sub = function(a, b) {
126.4184 +    var a_lolo = a.lo & 0xFFFF;
126.4185 +    var a_lohi = a.lo >>> 16;
126.4186 +    var a_hilo = a.hi & 0xFFFF;
126.4187 +    var a_hihi = a.hi >>> 16;
126.4188 +    var b_lolo = b.lo & 0xFFFF;
126.4189 +    var b_lohi = b.lo >>> 16;
126.4190 +    var b_hilo = b.hi & 0xFFFF;
126.4191 +    var b_hihi = b.hi >>> 16;
126.4192 +
126.4193 +    a_lolo = (a_lolo - b_lolo) | 0;
126.4194 +    a_lohi = (a_lohi - b_lohi + (a_lolo >> 16)) | 0;
126.4195 +    a_hilo = (a_hilo - b_hilo + (a_lohi >> 16)) | 0;
126.4196 +    a_hihi = (a_hihi - b_hihi + (a_hilo >> 16)) | 0;
126.4197 +    sup = (a.sup - b.sup + (a_hihi >> 16)) | 0;
126.4198 +    a.lo = (a_lolo & 0xFFFF) | ((a_lohi & 0xFFFF) << 16);
126.4199 +    a.hi = (a_hilo & 0xFFFF) | ((a_hihi & 0xFFFF) << 16);
126.4200 +    a.sup = sup;
126.4201 +}
126.4202 +LongInt_add = function(a, b) {
126.4203 +    var a_lolo = a.lo & 0xFFFF;
126.4204 +    var a_lohi = a.lo >>> 16;
126.4205 +    var a_hilo = a.hi & 0xFFFF;
126.4206 +    var a_hihi = a.hi >>> 16;
126.4207 +    var b_lolo = b.lo & 0xFFFF;
126.4208 +    var b_lohi = b.lo >>> 16;
126.4209 +    var b_hilo = b.hi & 0xFFFF;
126.4210 +    var b_hihi = b.hi >>> 16;
126.4211 +
126.4212 +    a_lolo = (a_lolo + b_lolo) | 0;
126.4213 +    a_lohi = (a_lohi + b_lohi + (a_lolo >> 16)) | 0;
126.4214 +    a_hilo = (a_hilo + b_hilo + (a_lohi >> 16)) | 0;
126.4215 +    a_hihi = (a_hihi + b_hihi + (a_hilo >> 16)) | 0;
126.4216 +    sup = (a.sup + b.sup + (a_hihi >> 16)) | 0;
126.4217 +    a.lo = (a_lolo & 0xFFFF) | (a_lohi << 16);
126.4218 +    a.hi = (a_hilo & 0xFFFF) | (a_hihi << 16);
126.4219 +    a.sup = sup;
126.4220 +}
126.4221 +LongInt_ucompare = function(a, b) {
126.4222 +    var r = (a.sup - b.sup);
126.4223 +    if (r != 0) {
126.4224 +        return r;
126.4225 +    }
126.4226 +    var r = (a.hi >>> 1) - (b.hi >>> 1);
126.4227 +    if (r != 0) {
126.4228 +        return r;
126.4229 +    }
126.4230 +    var r = (a.hi & 1) - (b.hi & 1);
126.4231 +    if (r != 0) {
126.4232 +        return r;
126.4233 +    }
126.4234 +    var r = (a.lo >>> 1) - (b.lo >>> 1);
126.4235 +    if (r != 0) {
126.4236 +        return r;
126.4237 +    }
126.4238 +    return (a.lo & 1) - (b.lo & 1);
126.4239 +}
126.4240 +LongInt_numOfLeadingZeroBits = function(a) {
126.4241 +    var n = 0;
126.4242 +    var d = 16;
126.4243 +    while (d > 0) {
126.4244 +        if ((a >>> d) !== 0) {
126.4245 +            a >>>= d;
126.4246 +            n = (n + d) | 0;
126.4247 +        }
126.4248 +        d = (d / 2) | 0;
126.4249 +    }
126.4250 +    return 31 - n;
126.4251 +}
126.4252 +LongInt_shl = function(a, b) {
126.4253 +    if (b < 32) {
126.4254 +        a.sup = ((a.hi >>> (32 - b)) | (a.sup << b)) & 0xFFFF;
126.4255 +        a.hi = (a.lo >>> (32 - b)) | (a.hi << b);
126.4256 +        a.lo <<= b;
126.4257 +    } else if (b < 64) {
126.4258 +        a.sup = ((a.lo >>> (64 - b)) | (a.hi << (b - 32))) & 0xFFFF;
126.4259 +        a.hi = a.lo << b;
126.4260 +        a.lo = 0;
126.4261 +    } else {
126.4262 +        a.sup = (a.lo << (b - 64)) & 0xFFFF;
126.4263 +        a.hi = 0;
126.4264 +        a.lo = 0;
126.4265 +    }
126.4266 +}
126.4267 +LongInt_shr = function(a, b) {
126.4268 +    if (b < 32) {
126.4269 +        a.lo = (a.lo >>> b) | (a.hi << (32 - b));
126.4270 +        a.hi = (a.hi >>> b) | (a.sup << (32 - b));
126.4271 +        a.sup >>>= b;
126.4272 +    } else if (b < 64) {
126.4273 +        a.lo = (a.hi >>> (b - 32)) | (a.sup << (64 - b));
126.4274 +        a.hi = a.sup >>> (b - 32);
126.4275 +        a.sup = 0;
126.4276 +    } else {
126.4277 +        a.lo = a.sup >>> (b - 64);
126.4278 +        a.hi = 0;
126.4279 +        a.sup = 0;
126.4280 +    }
126.4281 +}
126.4282 +LongInt_copy = function(a) {
126.4283 +    return new LongInt(a.lo, a.hi, a.sup);
126.4284 +}
126.4285 +LongInt_div = function(a, b) {
126.4286 +    // Normalize divisor
126.4287 +    var bits = b.hi !== 0 ? LongInt_numOfLeadingZeroBits(b.hi) : LongInt_numOfLeadingZeroBits(b.lo) + 32;
126.4288 +    var sz = 1 + ((bits / 16) | 0);
126.4289 +    var dividentBits = bits % 16;
126.4290 +    LongInt_shl(b, bits);
126.4291 +    LongInt_shl(a, dividentBits);
126.4292 +    q = new LongInt(0, 0, 0);
126.4293 +    while (sz-- > 0) {
126.4294 +        LongInt_shl(q, 16);
126.4295 +        // Calculate approximate q
126.4296 +        var digitA = (a.hi >>> 16) + (0x10000 * a.sup);
126.4297 +        var digitB = b.hi >>> 16;
126.4298 +        var digit = (digitA / digitB) | 0;
126.4299 +        var t = LongInt_copy(b);
126.4300 +        LongInt_mul(t, digit);
126.4301 +        // Adjust q either down or up
126.4302 +        if (LongInt_ucompare(t, a) >= 0) {
126.4303 +            while (LongInt_ucompare(t, a) > 0) {
126.4304 +                LongInt_sub(t, b);
126.4305 +                q = (q - 1) | 0;
126.4306 +            }
126.4307 +        } else {
126.4308 +            while (true) {
126.4309 +                var nextT = LongInt_copy(t);
126.4310 +                LongInt_add(nextT, b);
126.4311 +                if (LongInt_ucompare(nextT, a) > 0) {
126.4312 +                    break;
126.4313 +                }
126.4314 +                t = nextT;
126.4315 +                q = (q + 1) | 0;
126.4316 +            }
126.4317 +        }
126.4318 +        LongInt_sub(a, t);
126.4319 +        q.lo |= digit;
126.4320 +        LongInt_shl(a, 16);
126.4321 +    }
126.4322 +    LongInt_shr(a, bits + 16);
126.4323 +    return q;
126.4324 +}
126.4325 +$rt_cls = function(clsProto) {
126.4326 +    var cls = clsProto.classObject;
126.4327 +    if (cls === undefined) {
126.4328 +        cls = jl_Class0_createNew1();
126.4329 +        cls.$data = clsProto;
126.4330 +        cls.name2 = clsProto.$meta.name !== undefined ? $rt_str(clsProto.$meta.name) : null;
126.4331 +        clsProto.classObject = cls;
126.4332 +    }
126.4333 +    return cls;
126.4334 +}
126.4335 +$rt_str = function(str) {
126.4336 +    var characters = $rt_createCharArray(str.length);
126.4337 +    var charsBuffer = characters.data;
126.4338 +    for (var i = 0; i < str.length; i = (i + 1) | 0) {
126.4339 +        charsBuffer[i] = str.charCodeAt(i) & 0xFFFF;
126.4340 +    }
126.4341 +    return jl_String3.$init4(characters);
126.4342 +}
126.4343 +$rt_ustr = function(str) {
126.4344 +    var result = "";
126.4345 +    var sz = jl_String3_length5(str);
126.4346 +    var array = $rt_createCharArray(sz);
126.4347 +    jl_String3_getChars6(str, 0, sz, array, 0);
126.4348 +    for (var i = 0; i < sz; i = (i + 1) | 0) {
126.4349 +        result += String.fromCharCode(array.data[i]);
126.4350 +    }
126.4351 +    return result;
126.4352 +}
126.4353 +$rt_objcls = function() { return jl_Object7; }
126.4354 +$rt_nullCheck = function(val) {
126.4355 +    if (val === null) {
126.4356 +        $rt_throw(jl_NullPointerException8.$init9());
126.4357 +    }
126.4358 +    return val;
126.4359 +}
126.4360 +function jl_Object7() {
126.4361 +}
126.4362 +$rt_declClass(jl_Object7, {
126.4363 +    name : "java.lang.Object",
126.4364 +    clinit : function() { jl_Object7_$clinit(); } });
126.4365 +function jl_Object7_$clinit() {
126.4366 +    jl_Object7_$clinit = function(){};
126.4367 +    jl_Object7_$init10 = function($this) {
126.4368 +        $this.$id = $rt_nextId();
126.4369 +    }
126.4370 +}
126.4371 +$rt_methodStubs(jl_Object7_$clinit, ['jl_Object7_$init10']);
126.4372 +function jl_Object7_identity11($this) {
126.4373 +    return $this.$id;
126.4374 +}
126.4375 +function jl_Object7_clone12($this) {
126.4376 +    var copy = new $this.constructor();
126.4377 +    for (var field in $this) {
126.4378 +        if (!$this.hasOwnProperty(field)) {
126.4379 +            continue;
126.4380 +        }
126.4381 +        copy[field] = $this[field];
126.4382 +    }
126.4383 +    return copy;
126.4384 +}
126.4385 +function jl_Object7_equals13($this, a) {
126.4386 +    if (($this !== a)) {
126.4387 +        a = 0;
126.4388 +    } else {
126.4389 +        a = 1;
126.4390 +    }
126.4391 +    return a;
126.4392 +}
126.4393 +function jl_Object7_hashCode14($this) {
126.4394 +    return $this.$id;
126.4395 +}
126.4396 +function jl_Object7_toString15($this) {
126.4397 +    var a, b;
126.4398 +    a = jl_StringBuilder16.$init17();
126.4399 +    b = $rt_nullCheck($this);
126.4400 +    return jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append18($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(a), jl_Class0_getName20($rt_nullCheck($rt_cls(b.constructor))))), $rt_str("@"))), jl_Object7_identity11(b))));
126.4401 +}
126.4402 +jl_Object7.$init10 = function() {
126.4403 +    var result = new jl_Object7();
126.4404 +    result.$init10();
126.4405 +    return result;
126.4406 +}
126.4407 +$rt_virtualMethods(jl_Object7,
126.4408 +    "identity11", function() { return jl_Object7_identity11(this); },
126.4409 +    "clone12", function() { return jl_Object7_clone12(this); },
126.4410 +    "equals13", function(a) { return jl_Object7_equals13(this, a); },
126.4411 +    "hashCode14", function() { return jl_Object7_hashCode14(this); },
126.4412 +    "$init10", function() { jl_Object7_$init10(this); },
126.4413 +    "toString15", function() { return jl_Object7_toString15(this); });
126.4414 +function oahjs_PropertyBinding21() {
126.4415 +}
126.4416 +$rt_declClass(oahjs_PropertyBinding21, {
126.4417 +    name : "org.apidesign.html.json.spi.PropertyBinding",
126.4418 +    superclass : jl_Object7,
126.4419 +    clinit : function() { oahjs_PropertyBinding21_$clinit(); } });
126.4420 +function oahjs_PropertyBinding21_$clinit() {
126.4421 +    oahjs_PropertyBinding21_$clinit = function(){};
126.4422 +    oahjs_PropertyBinding21_$clinit22 = function() {
126.4423 +        oahjs_PropertyBinding$123_$init24(new oahjs_PropertyBinding$123());
126.4424 +        return;
126.4425 +    }
126.4426 +    oahjs_PropertyBinding21_$init25 = function($this) {
126.4427 +        jl_Object7_$init10($this);
126.4428 +        return;
126.4429 +    }
126.4430 +    oahjs_PropertyBinding21_$clinit22();
126.4431 +}
126.4432 +$rt_methodStubs(oahjs_PropertyBinding21_$clinit, ['oahjs_PropertyBinding21_$clinit22', 'oahjs_PropertyBinding21_$init25']);
126.4433 +oahjs_PropertyBinding21.$init25 = function() {
126.4434 +    var result = new oahjs_PropertyBinding21();
126.4435 +    result.$init25();
126.4436 +    return result;
126.4437 +}
126.4438 +$rt_virtualMethods(oahjs_PropertyBinding21,
126.4439 +    "$init25", function() { oahjs_PropertyBinding21_$init25(this); });
126.4440 +function oahjs_PropertyBinding$Impl26() {
126.4441 +    this.index27 = 0;
126.4442 +    this.model28 = null;
126.4443 +    this.readOnly29 = false;
126.4444 +    this.bindings30 = null;
126.4445 +    this.name31 = null;
126.4446 +    this.access32 = null;
126.4447 +}
126.4448 +$rt_declClass(oahjs_PropertyBinding$Impl26, {
126.4449 +    name : "org.apidesign.html.json.spi.PropertyBinding$Impl",
126.4450 +    superclass : oahjs_PropertyBinding21,
126.4451 +    clinit : function() { oahjs_PropertyBinding$Impl26_$clinit(); } });
126.4452 +function oahjs_PropertyBinding$Impl26_$clinit() {
126.4453 +    oahjs_PropertyBinding$Impl26_$clinit = function(){};
126.4454 +    oahjs_PropertyBinding$Impl26_$init33 = function($this, a, b, c, d, e, f) {
126.4455 +        oahjs_PropertyBinding21_$init25($this);
126.4456 +        $this.bindings30 = a;
126.4457 +        $this.name31 = b;
126.4458 +        $this.index27 = c;
126.4459 +        $this.model28 = d;
126.4460 +        $this.access32 = e;
126.4461 +        $this.readOnly29 = f;
126.4462 +        return;
126.4463 +    }
126.4464 +}
126.4465 +$rt_methodStubs(oahjs_PropertyBinding$Impl26_$clinit, ['oahjs_PropertyBinding$Impl26_$init33']);
126.4466 +function oahjs_PropertyBinding$Impl26_isReadOnly34($this) {
126.4467 +    return $this.readOnly29;
126.4468 +}
126.4469 +function oahjs_PropertyBinding$Impl26_setValue35($this, a) {
126.4470 +    var b, c, d;
126.4471 +    b = $this.access32;
126.4472 +    c = $this.model28;
126.4473 +    d = $this.index27;
126.4474 +    $rt_nullCheck(b).setValue37(c, d, a);
126.4475 +    return;
126.4476 +}
126.4477 +function oahjs_PropertyBinding$Impl26_getValue38($this) {
126.4478 +    var a, b;
126.4479 +    a = $rt_nullCheck($this.access32).getValue39($this.model28, $this.index27);
126.4480 +    b = onhji_JSON40_find41(a, $this.bindings30);
126.4481 +    if ((b === null)) {
126.4482 +        b = a;
126.4483 +    }
126.4484 +    return b;
126.4485 +}
126.4486 +function oahjs_PropertyBinding$Impl26_getPropertyName42($this) {
126.4487 +    return $this.name31;
126.4488 +}
126.4489 +oahjs_PropertyBinding$Impl26.$init33 = function(a, b, c, d, e, f) {
126.4490 +    var result = new oahjs_PropertyBinding$Impl26();
126.4491 +    result.$init33(a, b, c, d, e, f);
126.4492 +    return result;
126.4493 +}
126.4494 +$rt_virtualMethods(oahjs_PropertyBinding$Impl26,
126.4495 +    "isReadOnly34", function() { return oahjs_PropertyBinding$Impl26_isReadOnly34(this); },
126.4496 +    "setValue35", function(a) { oahjs_PropertyBinding$Impl26_setValue35(this, a); },
126.4497 +    "getValue38", function() { return oahjs_PropertyBinding$Impl26_getValue38(this); },
126.4498 +    "getPropertyName42", function() { return oahjs_PropertyBinding$Impl26_getPropertyName42(this); },
126.4499 +    "$init33", function(a, b, c, d, e, f) { oahjs_PropertyBinding$Impl26_$init33(this, a, b, c, d, e, f); });
126.4500 +function oadm_MinesModel43() {
126.4501 +}
126.4502 +$rt_declClass(oadm_MinesModel43, {
126.4503 +    name : "org.apidesign.demo.minesweeper.MinesModel",
126.4504 +    superclass : jl_Object7,
126.4505 +    clinit : function() { oadm_MinesModel43_$clinit(); } });
126.4506 +function oadm_MinesModel43_$clinit() {
126.4507 +    oadm_MinesModel43_$clinit = function(){};
126.4508 +    oadm_MinesModel43_giveUp44 = function(a) {
126.4509 +        oadm_MinesModel$SquareType45_$clinit();
126.4510 +        oadm_MinesModel43_showAllBombs46(a, oadm_MinesModel$SquareType45.EXPLOSION47);
126.4511 +        return;
126.4512 +    }
126.4513 +    oadm_MinesModel43_smallGame48 = function(a) {
126.4514 +        var b, c, d;
126.4515 +        b = 5;
126.4516 +        c = 5;
126.4517 +        d = 5;
126.4518 +        oadm_Mines49_init50($rt_nullCheck(a), b, c, d);
126.4519 +        return;
126.4520 +    }
126.4521 +    oadm_MinesModel43_normalGame51 = function(a) {
126.4522 +        var b, c, d;
126.4523 +        b = 10;
126.4524 +        c = 10;
126.4525 +        d = 10;
126.4526 +        oadm_Mines49_init50($rt_nullCheck(a), b, c, d);
126.4527 +        return;
126.4528 +    }
126.4529 +    oadm_MinesModel43_expandKnown52 = function(a, b) {
126.4530 +        var c, d, e, f, g;
126.4531 +        c = oadm_Mines49_getRows53($rt_nullCheck(a));
126.4532 +        d = 0;
126.4533 +        while (true) {
126.4534 +            e = $rt_nullCheck(c);
126.4535 +            if ((d >= ju_ArrayList54_size55(e))) {
126.4536 +                break;
126.4537 +            }
126.4538 +            f = oadm_Row56_getColumns57($rt_nullCheck(ju_ArrayList54_get58(e, d)));
126.4539 +            g = 0;
126.4540 +            block3: {
126.4541 +                while (true) {
126.4542 +                    e = $rt_nullCheck(f);
126.4543 +                    if ((g >= ju_ArrayList54_size55(e))) {
126.4544 +                        break block3;
126.4545 +                    }
126.4546 +                    if ((ju_ArrayList54_get58(e, g) === b)) {
126.4547 +                        break;
126.4548 +                    }
126.4549 +                    g = ((g + 1) | 0);
126.4550 +                }
126.4551 +                oadm_MinesModel43_expandKnown59(a, g, d);
126.4552 +                return;
126.4553 +            }
126.4554 +            d = ((d + 1) | 0);
126.4555 +        }
126.4556 +        return;
126.4557 +    }
126.4558 +    oadm_MinesModel43_init60 = function(a, b, c, d) {
126.4559 +        var e, f, g, h, i;
126.4560 +        e = ju_ArrayList54.$init61(c);
126.4561 +        f = 0;
126.4562 +        while ((f < c)) {
126.4563 +            g = $rt_createArray(oadm_Square62, b);
126.4564 +            h = 0;
126.4565 +            while ((h < b)) {
126.4566 +                i = new oadm_Square62();
126.4567 +                oadm_MinesModel$SquareType45_$clinit();
126.4568 +                oadm_Square62_$init63(i, oadm_MinesModel$SquareType45.UNKNOWN64, 0);
126.4569 +                g.data[h] = i;
126.4570 +                h = ((h + 1) | 0);
126.4571 +            }
126.4572 +            h = oadm_Row56.$init65(g);
126.4573 +            ju_AbstractList66_add67($rt_nullCheck(e), h);
126.4574 +            f = ((f + 1) | 0);
126.4575 +        }
126.4576 +        f = ju_Random68.$init69();
126.4577 +        while ((d > 0)) {
126.4578 +            h = $rt_nullCheck(f);
126.4579 +            h = $rt_nullCheck(ju_ArrayList54_get58($rt_nullCheck(oadm_Row56_getColumns57($rt_nullCheck(ju_ArrayList54_get58($rt_nullCheck(e), ju_Random68_nextInt70(h, c))))), ju_Random68_nextInt70(h, b)));
126.4580 +            if ((oadm_Square62_isMine71(h) == 0)) {
126.4581 +                oadm_Square62_setMine72(h, 1);
126.4582 +                d = ((d + -1) | 0);
126.4583 +                continue;
126.4584 +            }
126.4585 +        }
126.4586 +        oadm_MinesModel$GameState73_$clinit();
126.4587 +        b = oadm_MinesModel$GameState73.IN_PROGRESS74;
126.4588 +        c = $rt_nullCheck(a);
126.4589 +        oadm_Mines49_setState75(c, b);
126.4590 +        onhji_JSONList76_clear77($rt_nullCheck(oadm_Mines49_getRows53(c)));
126.4591 +        onhji_JSONList76_addAll78($rt_nullCheck(oadm_Mines49_getRows53(c)), e);
126.4592 +        return;
126.4593 +    }
126.4594 +    oadm_MinesModel43_computeMines79 = function(a) {
126.4595 +        var b, c, d, e, f, g, h, i, j, k, m, n;
126.4596 +        b = ju_ArrayList54.$init80();
126.4597 +        c = ju_ArrayList54.$init80();
126.4598 +        d = $rt_nullCheck(a);
126.4599 +        e = oadm_Mines49_getRows53(d);
126.4600 +        f = 0;
126.4601 +        g = $rt_nullCheck(e);
126.4602 +        h = $rt_createArray($rt_arraycls(oadm_MinesModel$SquareType45), ju_ArrayList54_size55(g));
126.4603 +        i = 0;
126.4604 +        while ((i < ju_ArrayList54_size55(g))) {
126.4605 +            j = $rt_nullCheck(oadm_Row56_getColumns57($rt_nullCheck(ju_ArrayList54_get58(g, i))));
126.4606 +            k = $rt_createArray(oadm_MinesModel$SquareType45, ju_ArrayList54_size55(j));
126.4607 +            e = h.data;
126.4608 +            e[i] = k;
126.4609 +            k = 0;
126.4610 +            while ((k < ju_ArrayList54_size55(j))) {
126.4611 +                m = $rt_nullCheck(ju_ArrayList54_get58(j, k));
126.4612 +                if ((oadm_Square62_isMine71(m) != 0)) {
126.4613 +                    ju_AbstractList66_add67($rt_nullCheck(b), jl_Integer81_valueOf82(k));
126.4614 +                    ju_AbstractList66_add67($rt_nullCheck(c), jl_Integer81_valueOf82(i));
126.4615 +                }
126.4616 +                if ((oadm_MinesModel$SquareType45_isVisible83($rt_nullCheck(oadm_Square62_getState84(m))) != 0)) {
126.4617 +                    n = e[i];
126.4618 +                    oadm_MinesModel$SquareType45_$clinit();
126.4619 +                    n.data[k] = oadm_MinesModel$SquareType45.N_085;
126.4620 +                } else if ((oadm_Square62_isMine71(m) == 0)) {
126.4621 +                    f = 1;
126.4622 +                }
126.4623 +                k = ((k + 1) | 0);
126.4624 +            }
126.4625 +            i = ((i + 1) | 0);
126.4626 +        }
126.4627 +        j = 0;
126.4628 +        while (true) {
126.4629 +            k = $rt_nullCheck(b);
126.4630 +            if ((j >= ju_ArrayList54_size55(k))) {
126.4631 +                break;
126.4632 +            }
126.4633 +            oadm_MinesModel43_incrementAround86(h, jl_Integer81_intValue87($rt_nullCheck(ju_ArrayList54_get58(k, j))), jl_Integer81_intValue87($rt_nullCheck(ju_ArrayList54_get58($rt_nullCheck(c), j))));
126.4634 +            j = ((j + 1) | 0);
126.4635 +        }
126.4636 +        j = 0;
126.4637 +        while ((j < ju_ArrayList54_size55(g))) {
126.4638 +            k = oadm_Row56_getColumns57($rt_nullCheck(ju_ArrayList54_get58(g, j)));
126.4639 +            e = 0;
126.4640 +            while (true) {
126.4641 +                c = $rt_nullCheck(k);
126.4642 +                if ((e >= ju_ArrayList54_size55(c))) {
126.4643 +                    break;
126.4644 +                }
126.4645 +                b = ju_ArrayList54_get58(c, e);
126.4646 +                c = h.data[j].data[e];
126.4647 +                if ((c !== null)) {
126.4648 +                    i = $rt_nullCheck(b);
126.4649 +                    if ((c !== oadm_Square62_getState84(i))) {
126.4650 +                        oadm_Square62_setState88(i, c);
126.4651 +                    }
126.4652 +                }
126.4653 +                e = ((e + 1) | 0);
126.4654 +            }
126.4655 +            j = ((j + 1) | 0);
126.4656 +        }
126.4657 +        if ((f == 0)) {
126.4658 +            oadm_MinesModel$GameState73_$clinit();
126.4659 +            oadm_Mines49_setState75(d, oadm_MinesModel$GameState73.WON89);
126.4660 +            oadm_MinesModel$SquareType45_$clinit();
126.4661 +            oadm_MinesModel43_showAllBombs46(a, oadm_MinesModel$SquareType45.DISCOVERED90);
126.4662 +        }
126.4663 +        return;
126.4664 +    }
126.4665 +    oadm_MinesModel43_fieldShowing91 = function(a) {
126.4666 +        if ((a === null)) {
126.4667 +            a = 0;
126.4668 +        } else {
126.4669 +            a = 1;
126.4670 +        }
126.4671 +        return a;
126.4672 +    }
126.4673 +    oadm_MinesModel43_main92 = function(a) {
126.4674 +        var b, c, d;
126.4675 +        a = oadm_Mines49.$init93();
126.4676 +        b = 10;
126.4677 +        c = 10;
126.4678 +        d = 10;
126.4679 +        a = $rt_nullCheck(a);
126.4680 +        oadm_Mines49_init50(a, b, c, d);
126.4681 +        oadm_Mines49_applyBindings94(a);
126.4682 +        return;
126.4683 +    }
126.4684 +    oadm_MinesModel43_incrementAt95 = function(a, b, c) {
126.4685 +        if ((c >= 0)) {
126.4686 +            a = a.data;
126.4687 +            if ((c < a.length)) {
126.4688 +                a = a[c];
126.4689 +                if ((b >= 0)) {
126.4690 +                    a = a.data;
126.4691 +                    if ((b < a.length)) {
126.4692 +                        c = a[b];
126.4693 +                        if ((c !== null)) {
126.4694 +                            a[b] = oadm_MinesModel$SquareType45_moreBombsAround96($rt_nullCheck(c));
126.4695 +                        }
126.4696 +                    }
126.4697 +                }
126.4698 +            }
126.4699 +        }
126.4700 +        return;
126.4701 +    }
126.4702 +    oadm_MinesModel43_$init97 = function($this) {
126.4703 +        jl_Object7_$init10($this);
126.4704 +        return;
126.4705 +    }
126.4706 +    oadm_MinesModel43_click98 = function(a, b) {
126.4707 +        var c, d, e;
126.4708 +        c = $rt_nullCheck(a);
126.4709 +        d = oadm_Mines49_getState99(c);
126.4710 +        oadm_MinesModel$GameState73_$clinit();
126.4711 +        if ((d === oadm_MinesModel$GameState73.IN_PROGRESS74)) {
126.4712 +            block2: {
126.4713 +                oadm_MinesModel$1100_$clinit();
126.4714 +                d = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.4715 +                e = $rt_nullCheck(b);
126.4716 +                switch (d.data[jl_Enum102_ordinal103($rt_nullCheck(oadm_Square62_getState84(e)))]) {
126.4717 +                    case 2:
126.4718 +                        break;
126.4719 +                    default:
126.4720 +                        break block2;
126.4721 +                }
126.4722 +                if ((oadm_Square62_isMine71(e) == 0)) {
126.4723 +                    oadm_MinesModel43_expandKnown52(a, b);
126.4724 +                } else {
126.4725 +                    oadm_MinesModel$SquareType45_$clinit();
126.4726 +                    oadm_MinesModel43_showAllBombs46(a, oadm_MinesModel$SquareType45.EXPLOSION47);
126.4727 +                    oadm_MinesModel$GameState73_$clinit();
126.4728 +                    oadm_Mines49_setState75(c, oadm_MinesModel$GameState73.LOST104);
126.4729 +                }
126.4730 +            }
126.4731 +            return;
126.4732 +        }
126.4733 +        oadm_Mines49_init50(c, 10, 10, 10);
126.4734 +        return;
126.4735 +    }
126.4736 +    oadm_MinesModel43_showHelp105 = function(a) {
126.4737 +        var b;
126.4738 +        b = null;
126.4739 +        oadm_Mines49_setState75($rt_nullCheck(a), b);
126.4740 +        return;
126.4741 +    }
126.4742 +    oadm_MinesModel43_incrementAround86 = function(a, b, c) {
126.4743 +        oadm_MinesModel43_incrementAt95(a, ((b - 1) | 0), ((c - 1) | 0));
126.4744 +        oadm_MinesModel43_incrementAt95(a, ((b - 1) | 0), c);
126.4745 +        oadm_MinesModel43_incrementAt95(a, ((b - 1) | 0), ((c + 1) | 0));
126.4746 +        oadm_MinesModel43_incrementAt95(a, ((b + 1) | 0), ((c - 1) | 0));
126.4747 +        oadm_MinesModel43_incrementAt95(a, ((b + 1) | 0), c);
126.4748 +        oadm_MinesModel43_incrementAt95(a, ((b + 1) | 0), ((c + 1) | 0));
126.4749 +        oadm_MinesModel43_incrementAt95(a, b, ((c - 1) | 0));
126.4750 +        oadm_MinesModel43_incrementAt95(a, b, ((c + 1) | 0));
126.4751 +        return;
126.4752 +    }
126.4753 +    oadm_MinesModel43_expandKnown59 = function(a, b, c) {
126.4754 +        var d, e, f;
126.4755 +        if ((c >= 0)) {
126.4756 +            d = $rt_nullCheck(a);
126.4757 +            if ((c < ju_ArrayList54_size55($rt_nullCheck(oadm_Mines49_getRows53(d))))) {
126.4758 +                e = oadm_Row56_getColumns57($rt_nullCheck(ju_ArrayList54_get58($rt_nullCheck(oadm_Mines49_getRows53(d)), c)));
126.4759 +                if ((b >= 0)) {
126.4760 +                    e = $rt_nullCheck(e);
126.4761 +                    if ((b < ju_ArrayList54_size55(e))) {
126.4762 +                        e = $rt_nullCheck(ju_ArrayList54_get58(e, b));
126.4763 +                        f = oadm_Square62_getState84(e);
126.4764 +                        oadm_MinesModel$SquareType45_$clinit();
126.4765 +                        if ((f === oadm_MinesModel$SquareType45.UNKNOWN64)) {
126.4766 +                            oadm_MinesModel$SquareType45_$clinit();
126.4767 +                            oadm_Square62_setState88(e, oadm_MinesModel$SquareType45.N_085);
126.4768 +                            oadm_Mines49_computeMines106(d);
126.4769 +                            d = oadm_Square62_getState84(e);
126.4770 +                            oadm_MinesModel$SquareType45_$clinit();
126.4771 +                            if ((d === oadm_MinesModel$SquareType45.N_085)) {
126.4772 +                                oadm_MinesModel43_expandKnown59(a, ((b - 1) | 0), ((c - 1) | 0));
126.4773 +                                oadm_MinesModel43_expandKnown59(a, ((b - 1) | 0), c);
126.4774 +                                oadm_MinesModel43_expandKnown59(a, ((b - 1) | 0), ((c + 1) | 0));
126.4775 +                                oadm_MinesModel43_expandKnown59(a, b, ((c - 1) | 0));
126.4776 +                                oadm_MinesModel43_expandKnown59(a, b, ((c + 1) | 0));
126.4777 +                                oadm_MinesModel43_expandKnown59(a, ((b + 1) | 0), ((c - 1) | 0));
126.4778 +                                oadm_MinesModel43_expandKnown59(a, ((b + 1) | 0), c);
126.4779 +                                oadm_MinesModel43_expandKnown59(a, ((b + 1) | 0), ((c + 1) | 0));
126.4780 +                            }
126.4781 +                        }
126.4782 +                        return;
126.4783 +                    }
126.4784 +                }
126.4785 +                return;
126.4786 +            }
126.4787 +        }
126.4788 +        return;
126.4789 +    }
126.4790 +    oadm_MinesModel43_showAllBombs46 = function(a, b) {
126.4791 +        var c, d, e;
126.4792 +        a = ju_AbstractList66_iterator107($rt_nullCheck(oadm_Mines49_getRows53($rt_nullCheck(a))));
126.4793 +        while (true) {
126.4794 +            c = $rt_nullCheck(a);
126.4795 +            if ((ju_AbstractList$1108_hasNext109(c) == 0)) {
126.4796 +                break;
126.4797 +            }
126.4798 +            d = ju_AbstractList66_iterator107($rt_nullCheck(oadm_Row56_getColumns57($rt_nullCheck(ju_AbstractList$1108_next110(c)))));
126.4799 +            while (true) {
126.4800 +                e = $rt_nullCheck(d);
126.4801 +                if ((ju_AbstractList$1108_hasNext109(e) == 0)) {
126.4802 +                    break;
126.4803 +                }
126.4804 +                e = $rt_nullCheck(ju_AbstractList$1108_next110(e));
126.4805 +                if ((oadm_Square62_isMine71(e) != 0)) {
126.4806 +                    oadm_Square62_setState88(e, b);
126.4807 +                }
126.4808 +            }
126.4809 +        }
126.4810 +        return;
126.4811 +    }
126.4812 +}
126.4813 +$rt_methodStubs(oadm_MinesModel43_$clinit, ['oadm_MinesModel43_giveUp44', 'oadm_MinesModel43_smallGame48', 'oadm_MinesModel43_normalGame51', 'oadm_MinesModel43_expandKnown52', 'oadm_MinesModel43_init60', 'oadm_MinesModel43_computeMines79', 'oadm_MinesModel43_fieldShowing91', 'oadm_MinesModel43_main92', 'oadm_MinesModel43_incrementAt95', 'oadm_MinesModel43_$init97', 'oadm_MinesModel43_click98', 'oadm_MinesModel43_showHelp105', 'oadm_MinesModel43_incrementAround86', 'oadm_MinesModel43_expandKnown59', 'oadm_MinesModel43_showAllBombs46']);
126.4814 +oadm_MinesModel43.$init97 = function() {
126.4815 +    var result = new oadm_MinesModel43();
126.4816 +    result.$init97();
126.4817 +    return result;
126.4818 +}
126.4819 +$rt_virtualMethods(oadm_MinesModel43,
126.4820 +    "$init97", function() { oadm_MinesModel43_$init97(this); });
126.4821 +function jl_Throwable111() {
126.4822 +    this.message112 = null;
126.4823 +    this.cause113 = null;
126.4824 +    this.suppressionEnabled114 = false;
126.4825 +    this.writableStackTrace115 = false;
126.4826 +}
126.4827 +$rt_declClass(jl_Throwable111, {
126.4828 +    name : "java.lang.Throwable",
126.4829 +    superclass : jl_Object7,
126.4830 +    clinit : function() { jl_Throwable111_$clinit(); } });
126.4831 +function jl_Throwable111_$clinit() {
126.4832 +    jl_Throwable111_$clinit = function(){};
126.4833 +    jl_Throwable111_$init116 = function($this, a) {
126.4834 +        $this.suppressionEnabled114 = 1;
126.4835 +        $this.writableStackTrace115 = 1;
126.4836 +        jl_Throwable111_fillInStackTrace117($rt_nullCheck($this));
126.4837 +        $this.cause113 = a;
126.4838 +        return;
126.4839 +    }
126.4840 +    jl_Throwable111_$init118 = function($this) {
126.4841 +        $this.suppressionEnabled114 = 1;
126.4842 +        $this.writableStackTrace115 = 1;
126.4843 +        jl_Throwable111_fillInStackTrace117($rt_nullCheck($this));
126.4844 +        return;
126.4845 +    }
126.4846 +    jl_Throwable111_$init119 = function($this, a) {
126.4847 +        $this.suppressionEnabled114 = 1;
126.4848 +        $this.writableStackTrace115 = 1;
126.4849 +        jl_Throwable111_fillInStackTrace117($rt_nullCheck($this));
126.4850 +        $this.message112 = a;
126.4851 +        return;
126.4852 +    }
126.4853 +}
126.4854 +$rt_methodStubs(jl_Throwable111_$clinit, ['jl_Throwable111_$init116', 'jl_Throwable111_$init118', 'jl_Throwable111_$init119']);
126.4855 +function jl_Throwable111_printStackTrace120($this, a) {
126.4856 +    var b, c;
126.4857 +    b = jl_StringBuilder16.$init17();
126.4858 +    c = $rt_nullCheck($this);
126.4859 +    b = jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(b), jl_Class0_getName20($rt_nullCheck($rt_cls(c.constructor))))), $rt_str(": "))), jl_Throwable111_getMessage121(c))));
126.4860 +    ji_PrintStream122_println123($rt_nullCheck(a), b);
126.4861 +    return;
126.4862 +}
126.4863 +function jl_Throwable111_printStackTrace124($this) {
126.4864 +    var a;
126.4865 +    jl_System125_$clinit();
126.4866 +    a = jl_System125.err126;
126.4867 +    jl_Throwable111_printStackTrace120($rt_nullCheck($this), a);
126.4868 +    return;
126.4869 +}
126.4870 +function jl_Throwable111_fillInStackTrace117($this) {
126.4871 +    return $this;
126.4872 +}
126.4873 +function jl_Throwable111_getMessage121($this) {
126.4874 +    return $this.message112;
126.4875 +}
126.4876 +jl_Throwable111.$init116 = function(a) {
126.4877 +    var result = new jl_Throwable111();
126.4878 +    result.$init116(a);
126.4879 +    return result;
126.4880 +}
126.4881 +jl_Throwable111.$init118 = function() {
126.4882 +    var result = new jl_Throwable111();
126.4883 +    result.$init118();
126.4884 +    return result;
126.4885 +}
126.4886 +jl_Throwable111.$init119 = function(a) {
126.4887 +    var result = new jl_Throwable111();
126.4888 +    result.$init119(a);
126.4889 +    return result;
126.4890 +}
126.4891 +$rt_virtualMethods(jl_Throwable111,
126.4892 +    "$init116", function(a) { jl_Throwable111_$init116(this, a); },
126.4893 +    "printStackTrace120", function(a) { jl_Throwable111_printStackTrace120(this, a); },
126.4894 +    "printStackTrace124", function() { jl_Throwable111_printStackTrace124(this); },
126.4895 +    "fillInStackTrace117", function() { return jl_Throwable111_fillInStackTrace117(this); },
126.4896 +    "$init118", function() { jl_Throwable111_$init118(this); },
126.4897 +    "$init119", function(a) { jl_Throwable111_$init119(this, a); },
126.4898 +    "getMessage121", function() { return jl_Throwable111_getMessage121(this); });
126.4899 +function jl_Exception127() {
126.4900 +}
126.4901 +$rt_declClass(jl_Exception127, {
126.4902 +    name : "java.lang.Exception",
126.4903 +    superclass : jl_Throwable111,
126.4904 +    clinit : function() { jl_Exception127_$clinit(); } });
126.4905 +function jl_Exception127_$clinit() {
126.4906 +    jl_Exception127_$clinit = function(){};
126.4907 +    jl_Exception127_$init128 = function($this) {
126.4908 +        jl_Throwable111_$init118($this);
126.4909 +        return;
126.4910 +    }
126.4911 +    jl_Exception127_$init129 = function($this, a) {
126.4912 +        jl_Throwable111_$init116($this, a);
126.4913 +        return;
126.4914 +    }
126.4915 +    jl_Exception127_$init130 = function($this, a) {
126.4916 +        jl_Throwable111_$init119($this, a);
126.4917 +        return;
126.4918 +    }
126.4919 +}
126.4920 +$rt_methodStubs(jl_Exception127_$clinit, ['jl_Exception127_$init128', 'jl_Exception127_$init129', 'jl_Exception127_$init130']);
126.4921 +jl_Exception127.$init128 = function() {
126.4922 +    var result = new jl_Exception127();
126.4923 +    result.$init128();
126.4924 +    return result;
126.4925 +}
126.4926 +jl_Exception127.$init129 = function(a) {
126.4927 +    var result = new jl_Exception127();
126.4928 +    result.$init129(a);
126.4929 +    return result;
126.4930 +}
126.4931 +jl_Exception127.$init130 = function(a) {
126.4932 +    var result = new jl_Exception127();
126.4933 +    result.$init130(a);
126.4934 +    return result;
126.4935 +}
126.4936 +$rt_virtualMethods(jl_Exception127,
126.4937 +    "$init128", function() { jl_Exception127_$init128(this); },
126.4938 +    "$init129", function(a) { jl_Exception127_$init129(this, a); },
126.4939 +    "$init130", function(a) { jl_Exception127_$init130(this, a); });
126.4940 +function jl_RuntimeException131() {
126.4941 +}
126.4942 +$rt_declClass(jl_RuntimeException131, {
126.4943 +    name : "java.lang.RuntimeException",
126.4944 +    superclass : jl_Exception127,
126.4945 +    clinit : function() { jl_RuntimeException131_$clinit(); } });
126.4946 +function jl_RuntimeException131_$clinit() {
126.4947 +    jl_RuntimeException131_$clinit = function(){};
126.4948 +    jl_RuntimeException131_$init132 = function($this) {
126.4949 +        jl_Exception127_$init128($this);
126.4950 +        return;
126.4951 +    }
126.4952 +    jl_RuntimeException131_$init133 = function($this, a) {
126.4953 +        jl_Exception127_$init130($this, a);
126.4954 +        return;
126.4955 +    }
126.4956 +}
126.4957 +$rt_methodStubs(jl_RuntimeException131_$clinit, ['jl_RuntimeException131_$init132', 'jl_RuntimeException131_$init133']);
126.4958 +jl_RuntimeException131.$init132 = function() {
126.4959 +    var result = new jl_RuntimeException131();
126.4960 +    result.$init132();
126.4961 +    return result;
126.4962 +}
126.4963 +jl_RuntimeException131.$init133 = function(a) {
126.4964 +    var result = new jl_RuntimeException131();
126.4965 +    result.$init133(a);
126.4966 +    return result;
126.4967 +}
126.4968 +$rt_virtualMethods(jl_RuntimeException131,
126.4969 +    "$init132", function() { jl_RuntimeException131_$init132(this); },
126.4970 +    "$init133", function(a) { jl_RuntimeException131_$init133(this, a); });
126.4971 +function jl_IllegalArgumentException134() {
126.4972 +}
126.4973 +$rt_declClass(jl_IllegalArgumentException134, {
126.4974 +    name : "java.lang.IllegalArgumentException",
126.4975 +    superclass : jl_RuntimeException131,
126.4976 +    clinit : function() { jl_IllegalArgumentException134_$clinit(); } });
126.4977 +function jl_IllegalArgumentException134_$clinit() {
126.4978 +    jl_IllegalArgumentException134_$clinit = function(){};
126.4979 +    jl_IllegalArgumentException134_$init135 = function($this) {
126.4980 +        jl_RuntimeException131_$init132($this);
126.4981 +        return;
126.4982 +    }
126.4983 +    jl_IllegalArgumentException134_$init136 = function($this, a) {
126.4984 +        jl_RuntimeException131_$init133($this, a);
126.4985 +        return;
126.4986 +    }
126.4987 +}
126.4988 +$rt_methodStubs(jl_IllegalArgumentException134_$clinit, ['jl_IllegalArgumentException134_$init135', 'jl_IllegalArgumentException134_$init136']);
126.4989 +jl_IllegalArgumentException134.$init135 = function() {
126.4990 +    var result = new jl_IllegalArgumentException134();
126.4991 +    result.$init135();
126.4992 +    return result;
126.4993 +}
126.4994 +jl_IllegalArgumentException134.$init136 = function(a) {
126.4995 +    var result = new jl_IllegalArgumentException134();
126.4996 +    result.$init136(a);
126.4997 +    return result;
126.4998 +}
126.4999 +$rt_virtualMethods(jl_IllegalArgumentException134,
126.5000 +    "$init135", function() { jl_IllegalArgumentException134_$init135(this); },
126.5001 +    "$init136", function(a) { jl_IllegalArgumentException134_$init136(this, a); });
126.5002 +function jl_NumberFormatException137() {
126.5003 +}
126.5004 +$rt_declClass(jl_NumberFormatException137, {
126.5005 +    name : "java.lang.NumberFormatException",
126.5006 +    superclass : jl_IllegalArgumentException134,
126.5007 +    clinit : function() { jl_NumberFormatException137_$clinit(); } });
126.5008 +function jl_NumberFormatException137_$clinit() {
126.5009 +    jl_NumberFormatException137_$clinit = function(){};
126.5010 +    jl_NumberFormatException137_$init138 = function($this) {
126.5011 +        jl_IllegalArgumentException134_$init135($this);
126.5012 +        return;
126.5013 +    }
126.5014 +    jl_NumberFormatException137_$init139 = function($this, a) {
126.5015 +        jl_IllegalArgumentException134_$init136($this, a);
126.5016 +        return;
126.5017 +    }
126.5018 +}
126.5019 +$rt_methodStubs(jl_NumberFormatException137_$clinit, ['jl_NumberFormatException137_$init138', 'jl_NumberFormatException137_$init139']);
126.5020 +jl_NumberFormatException137.$init138 = function() {
126.5021 +    var result = new jl_NumberFormatException137();
126.5022 +    result.$init138();
126.5023 +    return result;
126.5024 +}
126.5025 +jl_NumberFormatException137.$init139 = function(a) {
126.5026 +    var result = new jl_NumberFormatException137();
126.5027 +    result.$init139(a);
126.5028 +    return result;
126.5029 +}
126.5030 +$rt_virtualMethods(jl_NumberFormatException137,
126.5031 +    "$init138", function() { jl_NumberFormatException137_$init138(this); },
126.5032 +    "$init139", function(a) { jl_NumberFormatException137_$init139(this, a); });
126.5033 +function oadm_MinesModel$RowModel140() {
126.5034 +}
126.5035 +$rt_declClass(oadm_MinesModel$RowModel140, {
126.5036 +    name : "org.apidesign.demo.minesweeper.MinesModel$RowModel",
126.5037 +    superclass : jl_Object7,
126.5038 +    clinit : function() { oadm_MinesModel$RowModel140_$clinit(); } });
126.5039 +function oadm_MinesModel$RowModel140_$clinit() {
126.5040 +    oadm_MinesModel$RowModel140_$clinit = function(){};
126.5041 +    oadm_MinesModel$RowModel140_$init141 = function($this) {
126.5042 +        jl_Object7_$init10($this);
126.5043 +        return;
126.5044 +    }
126.5045 +}
126.5046 +$rt_methodStubs(oadm_MinesModel$RowModel140_$clinit, ['oadm_MinesModel$RowModel140_$init141']);
126.5047 +oadm_MinesModel$RowModel140.$init141 = function() {
126.5048 +    var result = new oadm_MinesModel$RowModel140();
126.5049 +    result.$init141();
126.5050 +    return result;
126.5051 +}
126.5052 +$rt_virtualMethods(oadm_MinesModel$RowModel140,
126.5053 +    "$init141", function() { oadm_MinesModel$RowModel140_$init141(this); });
126.5054 +function ju_Arrays142() {
126.5055 +}
126.5056 +$rt_declClass(ju_Arrays142, {
126.5057 +    name : "java.util.Arrays",
126.5058 +    superclass : jl_Object7,
126.5059 +    clinit : function() { ju_Arrays142_$clinit(); } });
126.5060 +function ju_Arrays142_$clinit() {
126.5061 +    ju_Arrays142_$clinit = function(){};
126.5062 +    ju_Arrays142_merge143 = function(a, b, c, d, e, f) {
126.5063 +        var g, h, i, j, k;
126.5064 +        g = c;
126.5065 +        h = d;
126.5066 +        block1: {
126.5067 +            block2: {
126.5068 +                while (true) {
126.5069 +                    if ((c == d)) {
126.5070 +                        break block2;
126.5071 +                    }
126.5072 +                    if ((h == e)) {
126.5073 +                        break;
126.5074 +                    }
126.5075 +                    i = a.data;
126.5076 +                    j = i[c];
126.5077 +                    k = i[h];
126.5078 +                    if ((ju_Collections$8144_compare145($rt_nullCheck(f), j, k) > 0)) {
126.5079 +                        i = ((g + 1) | 0);
126.5080 +                        b.data[g] = k;
126.5081 +                        h = ((h + 1) | 0);
126.5082 +                    } else {
126.5083 +                        i = ((g + 1) | 0);
126.5084 +                        b.data[g] = j;
126.5085 +                        c = ((c + 1) | 0);
126.5086 +                    }
126.5087 +                    g = i;
126.5088 +                }
126.5089 +                while (true) {
126.5090 +                    if ((c >= d)) {
126.5091 +                        break block1;
126.5092 +                    }
126.5093 +                    e = ((g + 1) | 0);
126.5094 +                    f = ((c + 1) | 0);
126.5095 +                    c = a.data[c];
126.5096 +                    b.data[g] = c;
126.5097 +                    g = e;
126.5098 +                    c = f;
126.5099 +                }
126.5100 +            }
126.5101 +            while ((h < e)) {
126.5102 +                c = ((g + 1) | 0);
126.5103 +                d = ((h + 1) | 0);
126.5104 +                f = a.data[h];
126.5105 +                b.data[g] = f;
126.5106 +                g = c;
126.5107 +                h = d;
126.5108 +            }
126.5109 +        }
126.5110 +        return;
126.5111 +    }
126.5112 +    ju_Arrays142_copyOf146 = function(a, b) {
126.5113 +        var c, d, e;
126.5114 +        c = $rt_createCharArray(b);
126.5115 +        a = a.data;
126.5116 +        b = jl_Math147_min148(b, a.length);
126.5117 +        d = 0;
126.5118 +        while ((d < b)) {
126.5119 +            e = a[d];
126.5120 +            c.data[d] = e;
126.5121 +            d = ((d + 1) | 0);
126.5122 +        }
126.5123 +        return c;
126.5124 +    }
126.5125 +    ju_Arrays142_copyOf149 = function(a, b) {
126.5126 +        var c, d, e;
126.5127 +        c = jlr_Array150_newInstance151(jl_Class0_getComponentType152($rt_nullCheck($rt_cls($rt_nullCheck(a).constructor))), b);
126.5128 +        a = a.data;
126.5129 +        b = jl_Math147_min148(b, a.length);
126.5130 +        d = 0;
126.5131 +        while ((d < b)) {
126.5132 +            e = a[d];
126.5133 +            c.data[d] = e;
126.5134 +            d = ((d + 1) | 0);
126.5135 +        }
126.5136 +        return c;
126.5137 +    }
126.5138 +    ju_Arrays142_fill153 = function(a, b, c, d) {
126.5139 +        var e;
126.5140 +        if ((b <= c)) {
126.5141 +            while ((b < c)) {
126.5142 +                e = ((b + 1) | 0);
126.5143 +                a.data[b] = d;
126.5144 +                b = e;
126.5145 +            }
126.5146 +            return;
126.5147 +        }
126.5148 +        $rt_throw(jl_IllegalArgumentException134.$init135());
126.5149 +    }
126.5150 +    ju_Arrays142_sort154 = function(a, b) {
126.5151 +        var c, d, e, f, g, h;
126.5152 +        c = a.data.length;
126.5153 +        if ((c != 0)) {
126.5154 +            d = $rt_createArray(jl_Object7, c);
126.5155 +            e = 1;
126.5156 +            f = a;
126.5157 +            while ((e < c)) {
126.5158 +                g = 0;
126.5159 +                while (true) {
126.5160 +                    h = f.data.length;
126.5161 +                    if ((g >= h)) {
126.5162 +                        break;
126.5163 +                    }
126.5164 +                    ju_Arrays142_merge143(f, d, g, jl_Math147_min148(h, ((g + e) | 0)), jl_Math147_min148(h, ((g + ((2 * e) | 0)) | 0)), b);
126.5165 +                    g = ((g + ((e * 2) | 0)) | 0);
126.5166 +                }
126.5167 +                e = ((e * 2) | 0);
126.5168 +                g = f;
126.5169 +                f = d;
126.5170 +                d = g;
126.5171 +            }
126.5172 +            if ((f !== a)) {
126.5173 +                a = 0;
126.5174 +                while (true) {
126.5175 +                    b = f.data;
126.5176 +                    if ((a >= b.length)) {
126.5177 +                        break;
126.5178 +                    }
126.5179 +                    d.data[a] = b[a];
126.5180 +                    a = ((a + 1) | 0);
126.5181 +                }
126.5182 +            }
126.5183 +            return;
126.5184 +        }
126.5185 +        return;
126.5186 +    }
126.5187 +    ju_Arrays142_$init155 = function($this) {
126.5188 +        jl_Object7_$init10($this);
126.5189 +        return;
126.5190 +    }
126.5191 +}
126.5192 +$rt_methodStubs(ju_Arrays142_$clinit, ['ju_Arrays142_merge143', 'ju_Arrays142_copyOf146', 'ju_Arrays142_copyOf149', 'ju_Arrays142_fill153', 'ju_Arrays142_sort154', 'ju_Arrays142_$init155']);
126.5193 +ju_Arrays142.$init155 = function() {
126.5194 +    var result = new ju_Arrays142();
126.5195 +    result.$init155();
126.5196 +    return result;
126.5197 +}
126.5198 +$rt_virtualMethods(ju_Arrays142,
126.5199 +    "$init155", function() { ju_Arrays142_$init155(this); });
126.5200 +function oahjs_Technology156() {
126.5201 +}
126.5202 +$rt_declClass(oahjs_Technology156, {
126.5203 +    name : "org.apidesign.html.json.spi.Technology",
126.5204 +    superclass : jl_Object7 });
126.5205 +function jl_IndexOutOfBoundsException157() {
126.5206 +}
126.5207 +$rt_declClass(jl_IndexOutOfBoundsException157, {
126.5208 +    name : "java.lang.IndexOutOfBoundsException",
126.5209 +    superclass : jl_RuntimeException131,
126.5210 +    clinit : function() { jl_IndexOutOfBoundsException157_$clinit(); } });
126.5211 +function jl_IndexOutOfBoundsException157_$clinit() {
126.5212 +    jl_IndexOutOfBoundsException157_$clinit = function(){};
126.5213 +    jl_IndexOutOfBoundsException157_$init158 = function($this) {
126.5214 +        jl_RuntimeException131_$init132($this);
126.5215 +        return;
126.5216 +    }
126.5217 +    jl_IndexOutOfBoundsException157_$init159 = function($this, a) {
126.5218 +        jl_RuntimeException131_$init133($this, a);
126.5219 +        return;
126.5220 +    }
126.5221 +}
126.5222 +$rt_methodStubs(jl_IndexOutOfBoundsException157_$clinit, ['jl_IndexOutOfBoundsException157_$init158', 'jl_IndexOutOfBoundsException157_$init159']);
126.5223 +jl_IndexOutOfBoundsException157.$init158 = function() {
126.5224 +    var result = new jl_IndexOutOfBoundsException157();
126.5225 +    result.$init158();
126.5226 +    return result;
126.5227 +}
126.5228 +jl_IndexOutOfBoundsException157.$init159 = function(a) {
126.5229 +    var result = new jl_IndexOutOfBoundsException157();
126.5230 +    result.$init159(a);
126.5231 +    return result;
126.5232 +}
126.5233 +$rt_virtualMethods(jl_IndexOutOfBoundsException157,
126.5234 +    "$init158", function() { jl_IndexOutOfBoundsException157_$init158(this); },
126.5235 +    "$init159", function(a) { jl_IndexOutOfBoundsException157_$init159(this, a); });
126.5236 +function jl_ArrayIndexOutOfBoundsException160() {
126.5237 +}
126.5238 +$rt_declClass(jl_ArrayIndexOutOfBoundsException160, {
126.5239 +    name : "java.lang.ArrayIndexOutOfBoundsException",
126.5240 +    superclass : jl_IndexOutOfBoundsException157,
126.5241 +    clinit : function() { jl_ArrayIndexOutOfBoundsException160_$clinit(); } });
126.5242 +function jl_ArrayIndexOutOfBoundsException160_$clinit() {
126.5243 +    jl_ArrayIndexOutOfBoundsException160_$clinit = function(){};
126.5244 +    jl_ArrayIndexOutOfBoundsException160_$init161 = function($this) {
126.5245 +        jl_IndexOutOfBoundsException157_$init158($this);
126.5246 +        return;
126.5247 +    }
126.5248 +}
126.5249 +$rt_methodStubs(jl_ArrayIndexOutOfBoundsException160_$clinit, ['jl_ArrayIndexOutOfBoundsException160_$init161']);
126.5250 +jl_ArrayIndexOutOfBoundsException160.$init161 = function() {
126.5251 +    var result = new jl_ArrayIndexOutOfBoundsException160();
126.5252 +    result.$init161();
126.5253 +    return result;
126.5254 +}
126.5255 +$rt_virtualMethods(jl_ArrayIndexOutOfBoundsException160,
126.5256 +    "$init161", function() { jl_ArrayIndexOutOfBoundsException160_$init161(this); });
126.5257 +function jl_CharSequence162() {
126.5258 +}
126.5259 +$rt_declClass(jl_CharSequence162, {
126.5260 +    name : "java.lang.CharSequence",
126.5261 +    superclass : jl_Object7 });
126.5262 +function jl_Comparable163() {
126.5263 +}
126.5264 +$rt_declClass(jl_Comparable163, {
126.5265 +    name : "java.lang.Comparable",
126.5266 +    superclass : jl_Object7 });
126.5267 +function ji_Serializable164() {
126.5268 +}
126.5269 +$rt_declClass(ji_Serializable164, {
126.5270 +    name : "java.io.Serializable",
126.5271 +    superclass : jl_Object7 });
126.5272 +function jl_String3() {
126.5273 +    this.hashCode165 = 0;
126.5274 +    this.characters166 = null;
126.5275 +}
126.5276 +$rt_declClass(jl_String3, {
126.5277 +    name : "java.lang.String",
126.5278 +    interfaces : [jl_CharSequence162, jl_Comparable163, ji_Serializable164],
126.5279 +    superclass : jl_Object7,
126.5280 +    clinit : function() { jl_String3_$clinit(); } });
126.5281 +function jl_String3_$clinit() {
126.5282 +    jl_String3_$clinit = function(){};
126.5283 +    jl_String3_$init167 = function($this, a, b, c) {
126.5284 +        var d, e, f;
126.5285 +        jl_Object7_$init10($this);
126.5286 +        $this.characters166 = $rt_createCharArray(c);
126.5287 +        d = 0;
126.5288 +        while ((d < c)) {
126.5289 +            e = $this.characters166;
126.5290 +            f = a.data[((d + b) | 0)];
126.5291 +            e.data[d] = f;
126.5292 +            d = ((d + 1) | 0);
126.5293 +        }
126.5294 +        return;
126.5295 +    }
126.5296 +    jl_String3_$init168 = function($this, a, b, c) {
126.5297 +        var d, e, f, g, h;
126.5298 +        jl_Object7_$init10($this);
126.5299 +        $this.characters166 = $rt_createCharArray(((c * 2) | 0));
126.5300 +        d = 0;
126.5301 +        e = 0;
126.5302 +        while ((e < c)) {
126.5303 +            f = ((b + 1) | 0);
126.5304 +            b = a.data[b];
126.5305 +            if ((b < 65536)) {
126.5306 +                g = $this.characters166;
126.5307 +                h = ((d + 1) | 0);
126.5308 +                g.data[d] = (b & 65535);
126.5309 +            } else {
126.5310 +                h = $this.characters166;
126.5311 +                g = ((d + 1) | 0);
126.5312 +                h.data[d] = otcic_UTF16Helper169_highSurrogate170(b);
126.5313 +                d = $this.characters166;
126.5314 +                h = ((g + 1) | 0);
126.5315 +                d.data[g] = otcic_UTF16Helper169_lowSurrogate171(b);
126.5316 +            }
126.5317 +            e = ((e + 1) | 0);
126.5318 +            b = f;
126.5319 +            d = h;
126.5320 +        }
126.5321 +        if ((d < $this.characters166.data.length)) {
126.5322 +            $this.characters166 = ju_Arrays142_copyOf146($this.characters166, d);
126.5323 +        }
126.5324 +        return;
126.5325 +    }
126.5326 +    jl_String3_$init4 = function($this, a) {
126.5327 +        var b, c, d, e;
126.5328 +        jl_Object7_$init10($this);
126.5329 +        a = a.data;
126.5330 +        b = a.length;
126.5331 +        $this.characters166 = $rt_createCharArray(b);
126.5332 +        c = 0;
126.5333 +        while ((c < b)) {
126.5334 +            d = $this.characters166;
126.5335 +            e = a[c];
126.5336 +            d.data[c] = e;
126.5337 +            c = ((c + 1) | 0);
126.5338 +        }
126.5339 +        return;
126.5340 +    }
126.5341 +    jl_String3_$init172 = function($this) {
126.5342 +        jl_Object7_$init10($this);
126.5343 +        $this.characters166 = $rt_createCharArray(0);
126.5344 +        return;
126.5345 +    }
126.5346 +    jl_String3_$init173 = function($this, a) {
126.5347 +        jl_Object7_$init10($this);
126.5348 +        $this.characters166 = a.characters166;
126.5349 +        return;
126.5350 +    }
126.5351 +}
126.5352 +$rt_methodStubs(jl_String3_$clinit, ['jl_String3_$init167', 'jl_String3_$init168', 'jl_String3_$init4', 'jl_String3_$init172', 'jl_String3_$init173']);
126.5353 +function jl_String3_startsWith174($this, a) {
126.5354 +    if (($this !== a)) {
126.5355 +        return jl_String3_startsWith175($rt_nullCheck($this), a, 0);
126.5356 +    }
126.5357 +    return 1;
126.5358 +}
126.5359 +function jl_String3_charAt176($this, a) {
126.5360 +    if (((a >= 0) && (a < $this.characters166.data.length))) {
126.5361 +        return $this.characters166.data[a];
126.5362 +    }
126.5363 +    $rt_throw(jl_StringIndexOutOfBoundsException177.$init178());
126.5364 +}
126.5365 +function jl_String3_substring179($this, a, b) {
126.5366 +    if ((a <= b)) {
126.5367 +        return jl_String3.$init167($this.characters166, a, ((b - a) | 0));
126.5368 +    }
126.5369 +    $rt_throw(jl_IndexOutOfBoundsException157.$init158());
126.5370 +}
126.5371 +function jl_String3_hashCode14($this) {
126.5372 +    var a, b, c, d;
126.5373 +    if (($this.hashCode165 == 0)) {
126.5374 +        $this.hashCode165 = ($this.hashCode165 ^ 734262231);
126.5375 +        a = $this.characters166.data;
126.5376 +        b = a.length;
126.5377 +        c = 0;
126.5378 +        while ((c < b)) {
126.5379 +            d = a[c];
126.5380 +            $this.hashCode165 = (($this.hashCode165 << 4) | ($this.hashCode165 >>> 28));
126.5381 +            $this.hashCode165 = ($this.hashCode165 ^ (347236277 ^ d));
126.5382 +            if (($this.hashCode165 == 0)) {
126.5383 +                $this.hashCode165 = (($this.hashCode165 + 1) | 0);
126.5384 +            }
126.5385 +            c = ((c + 1) | 0);
126.5386 +        }
126.5387 +    }
126.5388 +    return $this.hashCode165;
126.5389 +}
126.5390 +function jl_String3_indexOf180($this, a, b) {
126.5391 +    var c;
126.5392 +    if ((a >= 65536)) {
126.5393 +        c = otcic_UTF16Helper169_highSurrogate170(a);
126.5394 +        a = otcic_UTF16Helper169_lowSurrogate171(a);
126.5395 +        block2: {
126.5396 +            while (true) {
126.5397 +                if ((b >= (($this.characters166.data.length - 1) | 0))) {
126.5398 +                    break block2;
126.5399 +                }
126.5400 +                if ((($this.characters166.data[b] == c) && ($this.characters166.data[((b + 1) | 0)] == a))) {
126.5401 +                    break;
126.5402 +                }
126.5403 +                b = ((b + 1) | 0);
126.5404 +            }
126.5405 +            return b;
126.5406 +        }
126.5407 +        return -1;
126.5408 +    }
126.5409 +    a = (a & 65535);
126.5410 +    block6: {
126.5411 +        while (true) {
126.5412 +            if ((b >= $this.characters166.data.length)) {
126.5413 +                break block6;
126.5414 +            }
126.5415 +            if (($this.characters166.data[b] == a)) {
126.5416 +                break;
126.5417 +            }
126.5418 +            b = ((b + 1) | 0);
126.5419 +        }
126.5420 +        return b;
126.5421 +    }
126.5422 +    return -1;
126.5423 +}
126.5424 +function jl_String3_compareTo181($this, a) {
126.5425 +    return jl_String3_compareTo182($rt_nullCheck($this), a);
126.5426 +}
126.5427 +function jl_String3_toLowerCase183($this) {
126.5428 +    var a, b, c, d;
126.5429 +    if ((jl_String3_isEmpty184($rt_nullCheck($this)) == 0)) {
126.5430 +        a = $rt_createIntArray($this.characters166.data.length);
126.5431 +        b = 0;
126.5432 +        c = 0;
126.5433 +        while ((c < $this.characters166.data.length)) {
126.5434 +            if (((c != (($this.characters166.data.length - 1) | 0)) && ((otcic_UTF16Helper169_isHighSurrogate185($this.characters166.data[c]) != 0) && (otcic_UTF16Helper169_isLowSurrogate186($this.characters166.data[((c + 1) | 0)]) != 0)))) {
126.5435 +                d = ((b + 1) | 0);
126.5436 +                a.data[b] = jl_Character187_toLowerCase188(otcic_UTF16Helper169_buildCodePoint189($this.characters166.data[c], $this.characters166.data[((c + 1) | 0)]));
126.5437 +                c = ((c + 1) | 0);
126.5438 +            } else {
126.5439 +                d = ((b + 1) | 0);
126.5440 +                a.data[b] = jl_Character187_toLowerCase190($this.characters166.data[c]);
126.5441 +            }
126.5442 +            c = ((c + 1) | 0);
126.5443 +            b = d;
126.5444 +        }
126.5445 +        return jl_String3.$init168(a, 0, b);
126.5446 +    }
126.5447 +    return $this;
126.5448 +}
126.5449 +function jl_String3_getChars6($this, a, b, c, d) {
126.5450 +    var e, f, g;
126.5451 +    if (((a >= 0) && (a <= b))) {
126.5452 +        e = $rt_nullCheck($this);
126.5453 +        if (((b <= e.length5()) && (d >= 0))) {
126.5454 +            f = ((d + ((b - a) | 0)) | 0);
126.5455 +            g = c.data;
126.5456 +            if ((f <= g.length)) {
126.5457 +                while ((a < b)) {
126.5458 +                    f = ((d + 1) | 0);
126.5459 +                    c = ((a + 1) | 0);
126.5460 +                    g[d] = e.charAt176(a);
126.5461 +                    d = f;
126.5462 +                    a = c;
126.5463 +                }
126.5464 +                return;
126.5465 +            }
126.5466 +        }
126.5467 +    }
126.5468 +    $rt_throw(jl_IndexOutOfBoundsException157.$init158());
126.5469 +}
126.5470 +function jl_String3_isEmpty184($this) {
126.5471 +    var a;
126.5472 +    if (($this.characters166.data.length != 0)) {
126.5473 +        a = 0;
126.5474 +    } else {
126.5475 +        a = 1;
126.5476 +    }
126.5477 +    return a;
126.5478 +}
126.5479 +function jl_String3_startsWith175($this, a, b) {
126.5480 +    var c, d, e, f;
126.5481 +    c = $rt_nullCheck(a);
126.5482 +    a = ((b + jl_String3_length5(c)) | 0);
126.5483 +    d = $rt_nullCheck($this);
126.5484 +    if ((a <= jl_String3_length5(d))) {
126.5485 +        a = 0;
126.5486 +        block2: {
126.5487 +            while (true) {
126.5488 +                if ((a >= jl_String3_length5(c))) {
126.5489 +                    break block2;
126.5490 +                }
126.5491 +                e = jl_String3_charAt176(c, a);
126.5492 +                f = ((b + 1) | 0);
126.5493 +                if ((e != jl_String3_charAt176(d, b))) {
126.5494 +                    break;
126.5495 +                }
126.5496 +                a = ((a + 1) | 0);
126.5497 +                b = f;
126.5498 +            }
126.5499 +            return 0;
126.5500 +        }
126.5501 +        return 1;
126.5502 +    }
126.5503 +    return 0;
126.5504 +}
126.5505 +function jl_String3_length5($this) {
126.5506 +    return $this.characters166.data.length;
126.5507 +}
126.5508 +function jl_String3_equals13($this, a) {
126.5509 +    var b, c;
126.5510 +    if (($this !== a)) {
126.5511 +        if (((a instanceof jl_String3) != 0)) {
126.5512 +            b = $rt_nullCheck(a);
126.5513 +            a = jl_String3_length5(b);
126.5514 +            c = $rt_nullCheck($this);
126.5515 +            if ((a == jl_String3_length5(c))) {
126.5516 +                a = 0;
126.5517 +                block4: {
126.5518 +                    while (true) {
126.5519 +                        if ((a >= jl_String3_length5(b))) {
126.5520 +                            break block4;
126.5521 +                        }
126.5522 +                        if ((jl_String3_charAt176(c, a) != jl_String3_charAt176(b, a))) {
126.5523 +                            break;
126.5524 +                        }
126.5525 +                        a = ((a + 1) | 0);
126.5526 +                    }
126.5527 +                    return 0;
126.5528 +                }
126.5529 +                return 1;
126.5530 +            }
126.5531 +            return 0;
126.5532 +        }
126.5533 +        return 0;
126.5534 +    }
126.5535 +    return 1;
126.5536 +}
126.5537 +function jl_String3_lastIndexOf191($this, a, b) {
126.5538 +    var c, d;
126.5539 +    if ((a >= 65536)) {
126.5540 +        c = otcic_UTF16Helper169_highSurrogate170(a);
126.5541 +        d = otcic_UTF16Helper169_lowSurrogate171(a);
126.5542 +        block2: {
126.5543 +            while (true) {
126.5544 +                if ((b < 1)) {
126.5545 +                    break block2;
126.5546 +                }
126.5547 +                if ((($this.characters166.data[b] == d) && ($this.characters166.data[((b - 1) | 0)] == c))) {
126.5548 +                    break;
126.5549 +                }
126.5550 +                b = ((b + -1) | 0);
126.5551 +            }
126.5552 +            return b;
126.5553 +        }
126.5554 +        return -1;
126.5555 +    }
126.5556 +    a = (a & 65535);
126.5557 +    block6: {
126.5558 +        while (true) {
126.5559 +            if ((b < 0)) {
126.5560 +                break block6;
126.5561 +            }
126.5562 +            if (($this.characters166.data[b] == a)) {
126.5563 +                break;
126.5564 +            }
126.5565 +            b = ((b + -1) | 0);
126.5566 +        }
126.5567 +        return b;
126.5568 +    }
126.5569 +    return -1;
126.5570 +}
126.5571 +function jl_String3_trim192($this) {
126.5572 +    var a, b, c;
126.5573 +    a = 0;
126.5574 +    b = $rt_nullCheck($this);
126.5575 +    c = ((jl_String3_length5(b) - 1) | 0);
126.5576 +    block1: {
126.5577 +        block2: {
126.5578 +            while (true) {
126.5579 +                if ((a > c)) {
126.5580 +                    break block2;
126.5581 +                }
126.5582 +                if ((jl_String3_charAt176(b, a) > 32)) {
126.5583 +                    break;
126.5584 +                }
126.5585 +                a = ((a + 1) | 0);
126.5586 +            }
126.5587 +            break block1;
126.5588 +        }
126.5589 +    }
126.5590 +    while (((a <= c) && (jl_String3_charAt176(b, c) <= 32))) {
126.5591 +        c = ((c + -1) | 0);
126.5592 +    }
126.5593 +    return jl_String3_substring179(b, a, ((c + 1) | 0));
126.5594 +}
126.5595 +function jl_String3_lastIndexOf193($this, a) {
126.5596 +    var b;
126.5597 +    b = $rt_nullCheck($this);
126.5598 +    return jl_String3_lastIndexOf191(b, a, ((jl_String3_length5(b) - 1) | 0));
126.5599 +}
126.5600 +function jl_String3_compareTo182($this, a) {
126.5601 +    var b, c, d, e;
126.5602 +    if (($this !== a)) {
126.5603 +        b = $rt_nullCheck($this);
126.5604 +        c = jl_String3_length5(b);
126.5605 +        d = $rt_nullCheck(a);
126.5606 +        a = jl_Math147_min148(c, jl_String3_length5(d));
126.5607 +        c = 0;
126.5608 +        block2: {
126.5609 +            while (true) {
126.5610 +                if ((c >= a)) {
126.5611 +                    break block2;
126.5612 +                }
126.5613 +                e = ((jl_String3_charAt176(b, c) - jl_String3_charAt176(d, c)) | 0);
126.5614 +                if ((e != 0)) {
126.5615 +                    break;
126.5616 +                }
126.5617 +                c = ((c + 1) | 0);
126.5618 +            }
126.5619 +            return e;
126.5620 +        }
126.5621 +        return ((jl_String3_length5(b) - jl_String3_length5(d)) | 0);
126.5622 +    }
126.5623 +    return 0;
126.5624 +}
126.5625 +function jl_String3_toString15($this) {
126.5626 +    return $this;
126.5627 +}
126.5628 +function jl_String3_endsWith194($this, a) {
126.5629 +    var b, c, d, e, f;
126.5630 +    if (($this !== a)) {
126.5631 +        b = $rt_nullCheck(a);
126.5632 +        a = jl_String3_length5(b);
126.5633 +        c = $rt_nullCheck($this);
126.5634 +        if ((a <= jl_String3_length5(c))) {
126.5635 +            a = 0;
126.5636 +            d = ((jl_String3_length5(c) - jl_String3_length5(b)) | 0);
126.5637 +            block3: {
126.5638 +                while (true) {
126.5639 +                    if ((d >= jl_String3_length5(c))) {
126.5640 +                        break block3;
126.5641 +                    }
126.5642 +                    e = jl_String3_charAt176(c, d);
126.5643 +                    f = ((a + 1) | 0);
126.5644 +                    if ((e != jl_String3_charAt176(b, a))) {
126.5645 +                        break;
126.5646 +                    }
126.5647 +                    d = ((d + 1) | 0);
126.5648 +                    a = f;
126.5649 +                }
126.5650 +                return 0;
126.5651 +            }
126.5652 +            return 1;
126.5653 +        }
126.5654 +        return 0;
126.5655 +    }
126.5656 +    return 1;
126.5657 +}
126.5658 +jl_String3.$init167 = function(a, b, c) {
126.5659 +    var result = new jl_String3();
126.5660 +    result.$init167(a, b, c);
126.5661 +    return result;
126.5662 +}
126.5663 +jl_String3.$init168 = function(a, b, c) {
126.5664 +    var result = new jl_String3();
126.5665 +    result.$init168(a, b, c);
126.5666 +    return result;
126.5667 +}
126.5668 +jl_String3.$init4 = function(a) {
126.5669 +    var result = new jl_String3();
126.5670 +    result.$init4(a);
126.5671 +    return result;
126.5672 +}
126.5673 +jl_String3.$init172 = function() {
126.5674 +    var result = new jl_String3();
126.5675 +    result.$init172();
126.5676 +    return result;
126.5677 +}
126.5678 +jl_String3.$init173 = function(a) {
126.5679 +    var result = new jl_String3();
126.5680 +    result.$init173(a);
126.5681 +    return result;
126.5682 +}
126.5683 +$rt_virtualMethods(jl_String3,
126.5684 +    "$init167", function(a, b, c) { jl_String3_$init167(this, a, b, c); },
126.5685 +    "startsWith174", function(a) { return jl_String3_startsWith174(this, a); },
126.5686 +    "charAt176", function(a) { return jl_String3_charAt176(this, a); },
126.5687 +    "substring179", function(a, b) { return jl_String3_substring179(this, a, b); },
126.5688 +    "hashCode14", function() { return jl_String3_hashCode14(this); },
126.5689 +    "indexOf180", function(a, b) { return jl_String3_indexOf180(this, a, b); },
126.5690 +    "compareTo181", function(a) { return jl_String3_compareTo181(this, a); },
126.5691 +    "toLowerCase183", function() { return jl_String3_toLowerCase183(this); },
126.5692 +    "getChars6", function(a, b, c, d) { jl_String3_getChars6(this, a, b, c, d); },
126.5693 +    "isEmpty184", function() { return jl_String3_isEmpty184(this); },
126.5694 +    "startsWith175", function(a, b) { return jl_String3_startsWith175(this, a, b); },
126.5695 +    "length5", function() { return jl_String3_length5(this); },
126.5696 +    "equals13", function(a) { return jl_String3_equals13(this, a); },
126.5697 +    "lastIndexOf191", function(a, b) { return jl_String3_lastIndexOf191(this, a, b); },
126.5698 +    "trim192", function() { return jl_String3_trim192(this); },
126.5699 +    "lastIndexOf193", function(a) { return jl_String3_lastIndexOf193(this, a); },
126.5700 +    "compareTo182", function(a) { return jl_String3_compareTo182(this, a); },
126.5701 +    "toString15", function() { return jl_String3_toString15(this); },
126.5702 +    "$init168", function(a, b, c) { jl_String3_$init168(this, a, b, c); },
126.5703 +    "$init4", function(a) { jl_String3_$init4(this, a); },
126.5704 +    "endsWith194", function(a) { return jl_String3_endsWith194(this, a); },
126.5705 +    "$init172", function() { jl_String3_$init172(this); },
126.5706 +    "$init173", function(a) { jl_String3_$init173(this, a); });
126.5707 +function ju_Collections195() {
126.5708 +}
126.5709 +$rt_declClass(ju_Collections195, {
126.5710 +    name : "java.util.Collections",
126.5711 +    superclass : jl_Object7,
126.5712 +    clinit : function() { ju_Collections195_$clinit(); } });
126.5713 +function ju_Collections195_$clinit() {
126.5714 +    ju_Collections195_$clinit = function(){};
126.5715 +    ju_Collections195_sort196 = function(a) {
126.5716 +        ju_Collections195_sort197(a, ju_Collections$8144.$init198());
126.5717 +        return;
126.5718 +    }
126.5719 +    ju_Collections195_$init199 = function($this) {
126.5720 +        jl_Object7_$init10($this);
126.5721 +        return;
126.5722 +    }
126.5723 +    ju_Collections195_unmodifiableList200 = function(a) {
126.5724 +        return ju_Collections$6201.$init202(a);
126.5725 +    }
126.5726 +    ju_Collections195_sort197 = function(a, b) {
126.5727 +        var c, d;
126.5728 +        c = $rt_nullCheck(a);
126.5729 +        a = $rt_createArray(jl_Object7, c.size55());
126.5730 +        ju_AbstractCollection204_toArray205(c, a);
126.5731 +        ju_Arrays142_sort154(a, b);
126.5732 +        b = 0;
126.5733 +        while (true) {
126.5734 +            d = a.data;
126.5735 +            if ((b >= d.length)) {
126.5736 +                break;
126.5737 +            }
126.5738 +            c.set207(b, d[b]);
126.5739 +            b = ((b + 1) | 0);
126.5740 +        }
126.5741 +        return;
126.5742 +    }
126.5743 +}
126.5744 +$rt_methodStubs(ju_Collections195_$clinit, ['ju_Collections195_sort196', 'ju_Collections195_$init199', 'ju_Collections195_unmodifiableList200', 'ju_Collections195_sort197']);
126.5745 +ju_Collections195.$init199 = function() {
126.5746 +    var result = new ju_Collections195();
126.5747 +    result.$init199();
126.5748 +    return result;
126.5749 +}
126.5750 +$rt_virtualMethods(ju_Collections195,
126.5751 +    "$init199", function() { ju_Collections195_$init199(this); });
126.5752 +function jl_Error208() {
126.5753 +}
126.5754 +$rt_declClass(jl_Error208, {
126.5755 +    name : "java.lang.Error",
126.5756 +    superclass : jl_Throwable111,
126.5757 +    clinit : function() { jl_Error208_$clinit(); } });
126.5758 +function jl_Error208_$clinit() {
126.5759 +    jl_Error208_$clinit = function(){};
126.5760 +    jl_Error208_$init209 = function($this) {
126.5761 +        jl_Throwable111_$init118($this);
126.5762 +        return;
126.5763 +    }
126.5764 +}
126.5765 +$rt_methodStubs(jl_Error208_$clinit, ['jl_Error208_$init209']);
126.5766 +jl_Error208.$init209 = function() {
126.5767 +    var result = new jl_Error208();
126.5768 +    result.$init209();
126.5769 +    return result;
126.5770 +}
126.5771 +$rt_virtualMethods(jl_Error208,
126.5772 +    "$init209", function() { jl_Error208_$init209(this); });
126.5773 +function jl_LinkageError210() {
126.5774 +}
126.5775 +$rt_declClass(jl_LinkageError210, {
126.5776 +    name : "java.lang.LinkageError",
126.5777 +    superclass : jl_Error208,
126.5778 +    clinit : function() { jl_LinkageError210_$clinit(); } });
126.5779 +function jl_LinkageError210_$clinit() {
126.5780 +    jl_LinkageError210_$clinit = function(){};
126.5781 +    jl_LinkageError210_$init211 = function($this) {
126.5782 +        jl_Error208_$init209($this);
126.5783 +        return;
126.5784 +    }
126.5785 +}
126.5786 +$rt_methodStubs(jl_LinkageError210_$clinit, ['jl_LinkageError210_$init211']);
126.5787 +jl_LinkageError210.$init211 = function() {
126.5788 +    var result = new jl_LinkageError210();
126.5789 +    result.$init211();
126.5790 +    return result;
126.5791 +}
126.5792 +$rt_virtualMethods(jl_LinkageError210,
126.5793 +    "$init211", function() { jl_LinkageError210_$init211(this); });
126.5794 +function jl_IncompatibleClassChangeError212() {
126.5795 +}
126.5796 +$rt_declClass(jl_IncompatibleClassChangeError212, {
126.5797 +    name : "java.lang.IncompatibleClassChangeError",
126.5798 +    superclass : jl_LinkageError210,
126.5799 +    clinit : function() { jl_IncompatibleClassChangeError212_$clinit(); } });
126.5800 +function jl_IncompatibleClassChangeError212_$clinit() {
126.5801 +    jl_IncompatibleClassChangeError212_$clinit = function(){};
126.5802 +    jl_IncompatibleClassChangeError212_$init213 = function($this) {
126.5803 +        jl_LinkageError210_$init211($this);
126.5804 +        return;
126.5805 +    }
126.5806 +}
126.5807 +$rt_methodStubs(jl_IncompatibleClassChangeError212_$clinit, ['jl_IncompatibleClassChangeError212_$init213']);
126.5808 +jl_IncompatibleClassChangeError212.$init213 = function() {
126.5809 +    var result = new jl_IncompatibleClassChangeError212();
126.5810 +    result.$init213();
126.5811 +    return result;
126.5812 +}
126.5813 +$rt_virtualMethods(jl_IncompatibleClassChangeError212,
126.5814 +    "$init213", function() { jl_IncompatibleClassChangeError212_$init213(this); });
126.5815 +function jl_AutoCloseable214() {
126.5816 +}
126.5817 +$rt_declClass(jl_AutoCloseable214, {
126.5818 +    name : "java.lang.AutoCloseable",
126.5819 +    superclass : jl_Object7 });
126.5820 +function ji_Closeable215() {
126.5821 +}
126.5822 +$rt_declClass(ji_Closeable215, {
126.5823 +    name : "java.io.Closeable",
126.5824 +    interfaces : [jl_AutoCloseable214],
126.5825 +    superclass : jl_Object7 });
126.5826 +function jl_NoSuchFieldError216() {
126.5827 +}
126.5828 +$rt_declClass(jl_NoSuchFieldError216, {
126.5829 +    name : "java.lang.NoSuchFieldError",
126.5830 +    superclass : jl_IncompatibleClassChangeError212,
126.5831 +    clinit : function() { jl_NoSuchFieldError216_$clinit(); } });
126.5832 +function jl_NoSuchFieldError216_$clinit() {
126.5833 +    jl_NoSuchFieldError216_$clinit = function(){};
126.5834 +    jl_NoSuchFieldError216_$init217 = function($this) {
126.5835 +        jl_IncompatibleClassChangeError212_$init213($this);
126.5836 +        return;
126.5837 +    }
126.5838 +}
126.5839 +$rt_methodStubs(jl_NoSuchFieldError216_$clinit, ['jl_NoSuchFieldError216_$init217']);
126.5840 +jl_NoSuchFieldError216.$init217 = function() {
126.5841 +    var result = new jl_NoSuchFieldError216();
126.5842 +    result.$init217();
126.5843 +    return result;
126.5844 +}
126.5845 +$rt_virtualMethods(jl_NoSuchFieldError216,
126.5846 +    "$init217", function() { jl_NoSuchFieldError216_$init217(this); });
126.5847 +function jl_Iterable218() {
126.5848 +}
126.5849 +$rt_declClass(jl_Iterable218, {
126.5850 +    name : "java.lang.Iterable",
126.5851 +    superclass : jl_Object7 });
126.5852 +function ju_Collection203() {
126.5853 +}
126.5854 +$rt_declClass(ju_Collection203, {
126.5855 +    name : "java.util.Collection",
126.5856 +    interfaces : [jl_Iterable218],
126.5857 +    superclass : jl_Object7 });
126.5858 +function ju_AbstractCollection204() {
126.5859 +}
126.5860 +$rt_declClass(ju_AbstractCollection204, {
126.5861 +    name : "java.util.AbstractCollection",
126.5862 +    interfaces : [ju_Collection203],
126.5863 +    superclass : jl_Object7,
126.5864 +    clinit : function() { ju_AbstractCollection204_$clinit(); } });
126.5865 +function ju_AbstractCollection204_$clinit() {
126.5866 +    ju_AbstractCollection204_$clinit = function(){};
126.5867 +    ju_AbstractCollection204_$init219 = function($this) {
126.5868 +        jl_Object7_$init10($this);
126.5869 +        return;
126.5870 +    }
126.5871 +}
126.5872 +$rt_methodStubs(ju_AbstractCollection204_$clinit, ['ju_AbstractCollection204_$init219']);
126.5873 +function ju_AbstractCollection204_addAll78($this, a) {
126.5874 +    var b, c;
126.5875 +    b = 0;
126.5876 +    a = ju_AbstractList66_iterator107($rt_nullCheck(a));
126.5877 +    while (true) {
126.5878 +        c = $rt_nullCheck(a);
126.5879 +        if ((ju_AbstractList$1108_hasNext109(c) == 0)) {
126.5880 +            break;
126.5881 +        }
126.5882 +        if ((onhji_JSONList76_add67($rt_nullCheck($this), ju_AbstractList$1108_next110(c)) == 0)) {
126.5883 +            continue;
126.5884 +        }
126.5885 +        b = 1;
126.5886 +    }
126.5887 +    return b;
126.5888 +}
126.5889 +function ju_AbstractCollection204_toArray205($this, a) {
126.5890 +    var b, c, d, e, f;
126.5891 +    b = $rt_nullCheck($this);
126.5892 +    c = b.size55();
126.5893 +    d = a.data;
126.5894 +    e = d.length;
126.5895 +    if ((e >= c)) {
126.5896 +        while ((c < e)) {
126.5897 +            d[c] = null;
126.5898 +            c = ((c + 1) | 0);
126.5899 +        }
126.5900 +    } else {
126.5901 +        a = jlr_Array150_newInstance151(jl_Class0_getComponentType152($rt_nullCheck($rt_cls($rt_nullCheck(a).constructor))), c);
126.5902 +    }
126.5903 +    c = 0;
126.5904 +    d = ju_AbstractList66_iterator107(b);
126.5905 +    while (true) {
126.5906 +        f = $rt_nullCheck(d);
126.5907 +        if ((ju_AbstractList$1108_hasNext109(f) == 0)) {
126.5908 +            break;
126.5909 +        }
126.5910 +        e = ((c + 1) | 0);
126.5911 +        f = ju_AbstractList$1108_next110(f);
126.5912 +        a.data[c] = f;
126.5913 +        c = e;
126.5914 +    }
126.5915 +    return a;
126.5916 +}
126.5917 +ju_AbstractCollection204.$init219 = function() {
126.5918 +    var result = new ju_AbstractCollection204();
126.5919 +    result.$init219();
126.5920 +    return result;
126.5921 +}
126.5922 +$rt_virtualMethods(ju_AbstractCollection204,
126.5923 +    "$init219", function() { ju_AbstractCollection204_$init219(this); },
126.5924 +    "addAll78", function(a) { return ju_AbstractCollection204_addAll78(this, a); },
126.5925 +    "toArray205", function(a) { return ju_AbstractCollection204_toArray205(this, a); });
126.5926 +function ju_List206() {
126.5927 +}
126.5928 +$rt_declClass(ju_List206, {
126.5929 +    name : "java.util.List",
126.5930 +    interfaces : [ju_Collection203],
126.5931 +    superclass : jl_Object7 });
126.5932 +function ju_AbstractList66() {
126.5933 +    this.modCount220 = 0;
126.5934 +}
126.5935 +$rt_declClass(ju_AbstractList66, {
126.5936 +    name : "java.util.AbstractList",
126.5937 +    interfaces : [ju_List206],
126.5938 +    superclass : ju_AbstractCollection204,
126.5939 +    clinit : function() { ju_AbstractList66_$clinit(); } });
126.5940 +function ju_AbstractList66_$clinit() {
126.5941 +    ju_AbstractList66_$clinit = function(){};
126.5942 +    ju_AbstractList66_$init221 = function($this) {
126.5943 +        ju_AbstractCollection204_$init219($this);
126.5944 +        return;
126.5945 +    }
126.5946 +}
126.5947 +$rt_methodStubs(ju_AbstractList66_$clinit, ['ju_AbstractList66_$init221']);
126.5948 +function ju_AbstractList66_set207($this, a, b) {
126.5949 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.5950 +}
126.5951 +function ju_AbstractList66_add224($this, a, b) {
126.5952 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.5953 +}
126.5954 +function ju_AbstractList66_add67($this, a) {
126.5955 +    var b;
126.5956 +    b = $rt_nullCheck($this);
126.5957 +    b.add224(b.size55(), a);
126.5958 +    return 1;
126.5959 +}
126.5960 +function ju_AbstractList66_iterator107($this) {
126.5961 +    return ju_AbstractList$1108.$init225($this);
126.5962 +}
126.5963 +ju_AbstractList66.$init221 = function() {
126.5964 +    var result = new ju_AbstractList66();
126.5965 +    result.$init221();
126.5966 +    return result;
126.5967 +}
126.5968 +$rt_virtualMethods(ju_AbstractList66,
126.5969 +    "set207", function(a, b) { return ju_AbstractList66_set207(this, a, b); },
126.5970 +    "add224", function(a, b) { ju_AbstractList66_add224(this, a, b); },
126.5971 +    "add67", function(a) { return ju_AbstractList66_add67(this, a); },
126.5972 +    "iterator107", function() { return ju_AbstractList66_iterator107(this); },
126.5973 +    "$init221", function() { ju_AbstractList66_$init221(this); });
126.5974 +function oahjs_Technology$BatchInit226() {
126.5975 +}
126.5976 +$rt_declClass(oahjs_Technology$BatchInit226, {
126.5977 +    name : "org.apidesign.html.json.spi.Technology$BatchInit",
126.5978 +    interfaces : [oahjs_Technology156],
126.5979 +    superclass : jl_Object7 });
126.5980 +function oadm_MainBrwsr227() {
126.5981 +}
126.5982 +$rt_declClass(oadm_MainBrwsr227, {
126.5983 +    name : "org.apidesign.demo.minesweeper.MainBrwsr",
126.5984 +    superclass : jl_Object7,
126.5985 +    clinit : function() { oadm_MainBrwsr227_$clinit(); } });
126.5986 +function oadm_MainBrwsr227_$clinit() {
126.5987 +    oadm_MainBrwsr227_$clinit = function(){};
126.5988 +    oadm_MainBrwsr227_$clinit228 = function() {
126.5989 +        var a;
126.5990 +        block1: {
126.5991 +            try {
126.5992 +                oadm_MinesModel43_main92($rt_createArray(jl_String3, 0));
126.5993 +            } catch ($e) {
126.5994 +                $je = $e.$javaException;
126.5995 +                if ($je && $je instanceof jl_Exception127) {
126.5996 +                    a = $je;
126.5997 +                    break block1;
126.5998 +                } else {
126.5999 +                    throw $e;
126.6000 +                }
126.6001 +            }
126.6002 +            return;
126.6003 +        }
126.6004 +        $rt_throw(jl_IllegalStateException229.$init230(a));
126.6005 +    }
126.6006 +    oadm_MainBrwsr227_$init231 = function($this) {
126.6007 +        jl_Object7_$init10($this);
126.6008 +        return;
126.6009 +    }
126.6010 +    oadm_MainBrwsr227_$clinit228();
126.6011 +}
126.6012 +$rt_methodStubs(oadm_MainBrwsr227_$clinit, ['oadm_MainBrwsr227_$clinit228', 'oadm_MainBrwsr227_$init231']);
126.6013 +oadm_MainBrwsr227.$init231 = function() {
126.6014 +    var result = new oadm_MainBrwsr227();
126.6015 +    result.$init231();
126.6016 +    return result;
126.6017 +}
126.6018 +$rt_virtualMethods(oadm_MainBrwsr227,
126.6019 +    "$init231", function() { oadm_MainBrwsr227_$init231(this); });
126.6020 +function jl_Runnable232() {
126.6021 +}
126.6022 +$rt_declClass(jl_Runnable232, {
126.6023 +    name : "java.lang.Runnable",
126.6024 +    superclass : jl_Object7 });
126.6025 +function jl_Thread233() {
126.6026 +    this.name234 = null;
126.6027 +    this.target235 = null;
126.6028 +}
126.6029 +jl_Thread233.currentThread236 = null;
126.6030 +$rt_declClass(jl_Thread233, {
126.6031 +    name : "java.lang.Thread",
126.6032 +    interfaces : [jl_Runnable232],
126.6033 +    superclass : jl_Object7,
126.6034 +    clinit : function() { jl_Thread233_$clinit(); } });
126.6035 +function jl_Thread233_$clinit() {
126.6036 +    jl_Thread233_$clinit = function(){};
126.6037 +    jl_Thread233_$clinit237 = function() {
126.6038 +        jl_Thread233.currentThread236 = jl_Thread233.$init238($rt_str("main"));
126.6039 +        return;
126.6040 +    }
126.6041 +    jl_Thread233_currentThread239 = function() {
126.6042 +        return jl_Thread233.currentThread236;
126.6043 +    }
126.6044 +    jl_Thread233_$init240 = function($this) {
126.6045 +        jl_Thread233_$init241($this, null, null);
126.6046 +        return;
126.6047 +    }
126.6048 +    jl_Thread233_$init238 = function($this, a) {
126.6049 +        jl_Thread233_$init241($this, a, null);
126.6050 +        return;
126.6051 +    }
126.6052 +    jl_Thread233_$init241 = function($this, a, b) {
126.6053 +        jl_Object7_$init10($this);
126.6054 +        $this.name234 = a;
126.6055 +        $this.target235 = b;
126.6056 +        return;
126.6057 +    }
126.6058 +    jl_Thread233_$clinit237();
126.6059 +}
126.6060 +$rt_methodStubs(jl_Thread233_$clinit, ['jl_Thread233_$clinit237', 'jl_Thread233_currentThread239', 'jl_Thread233_$init240', 'jl_Thread233_$init238', 'jl_Thread233_$init241']);
126.6061 +function jl_Thread233_getId242($this) {
126.6062 +    return Long_fromInt(1);
126.6063 +}
126.6064 +jl_Thread233.$init240 = function() {
126.6065 +    var result = new jl_Thread233();
126.6066 +    result.$init240();
126.6067 +    return result;
126.6068 +}
126.6069 +jl_Thread233.$init238 = function(a) {
126.6070 +    var result = new jl_Thread233();
126.6071 +    result.$init238(a);
126.6072 +    return result;
126.6073 +}
126.6074 +jl_Thread233.$init241 = function(a, b) {
126.6075 +    var result = new jl_Thread233();
126.6076 +    result.$init241(a, b);
126.6077 +    return result;
126.6078 +}
126.6079 +$rt_virtualMethods(jl_Thread233,
126.6080 +    "getId242", function() { return jl_Thread233_getId242(this); },
126.6081 +    "$init240", function() { jl_Thread233_$init240(this); },
126.6082 +    "$init238", function(a) { jl_Thread233_$init238(this, a); },
126.6083 +    "$init241", function(a, b) { jl_Thread233_$init241(this, a, b); });
126.6084 +function jl_Character187() {
126.6085 +    this.value243 = 0;
126.6086 +}
126.6087 +jl_Character187.digitMapping244 = null;
126.6088 +jl_Character187.TYPE245 = null;
126.6089 +jl_Character187.characterCache246 = null;
126.6090 +$rt_declClass(jl_Character187, {
126.6091 +    name : "java.lang.Character",
126.6092 +    interfaces : [jl_Comparable163],
126.6093 +    superclass : jl_Object7,
126.6094 +    clinit : function() { jl_Character187_$clinit(); } });
126.6095 +function jl_Character187_$clinit() {
126.6096 +    jl_Character187_$clinit = function(){};
126.6097 +    jl_Character187_getNumericValue247 = function(a) {
126.6098 +        var b, c, d, e, f;
126.6099 +        b = jl_Character187_getDigitMapping248();
126.6100 +        c = 0;
126.6101 +        b = b.data;
126.6102 +        d = ((((b.length / 2) | 0) - 1) | 0);
126.6103 +        while ((d >= c)) {
126.6104 +            block3: {
126.6105 +                e = ((((c + d) | 0) / 2) | 0);
126.6106 +                f = $rt_compare(a, b[((e * 2) | 0)]);
126.6107 +                if ((f <= 0)) {
126.6108 +                    if ((f < 0)) {
126.6109 +                        d = ((e - 1) | 0);
126.6110 +                        break block3;
126.6111 +                    }
126.6112 +                    return b[((((e * 2) | 0) + 1) | 0)];
126.6113 +                }
126.6114 +                c = ((e + 1) | 0);
126.6115 +            }
126.6116 +        }
126.6117 +        return -1;
126.6118 +    }
126.6119 +    jl_Character187_toChars249 = function(a) {
126.6120 +        var b, c, d, e;
126.6121 +        if ((a < 65536)) {
126.6122 +            b = $rt_createCharArray(1);
126.6123 +            b.data[0] = (a & 65535);
126.6124 +            return b;
126.6125 +        }
126.6126 +        b = $rt_createCharArray(2);
126.6127 +        c = 0;
126.6128 +        d = otcic_UTF16Helper169_highSurrogate170(a);
126.6129 +        e = b.data;
126.6130 +        e[c] = d;
126.6131 +        e[1] = otcic_UTF16Helper169_lowSurrogate171(a);
126.6132 +        return b;
126.6133 +    }
126.6134 +    jl_Character187_obtainDigitMapping250 = function() {
126.6135 +        return $rt_str("zzzªzzzz«{zzz¬|zzz­}zzz®~zzz¯zzz°€zzz±zzz²‚zzz³ƒzzz»„zzz¼…zzz½†zzz¾‡zzz¿ˆzzzÀ‰zzzÁŠzzz‹zzzÌzzzčzzzŎzzzƏzzzǐzzzȑzzzɒzzzʓzzz˔zzz̕zzz͖zzzΗzzzϘzzzЙzzzњzzzқzzzӜzzzԝzzzۄzzz܅zzz݆zzzއzzz߈zzzà‰zzzáŠzzzâ‹zzzãŒzzzäzzzåŽzzzæzzzçzzzè‘zzzé’zzzê“zzzë”zzzì•zzzí–zzzî—zzzï˜zzzð™zzzñšzzzò›zzzóœzzzôzz€Úzzz€Û{zz€Ü|zz€Ý}zz€Þ~zz€ßzz€à€zz€ázz€â‚zz€ãƒzz€Ūzzz€ū{zz€Ŭ|zz€ŭ}zz€Ů~zz€ůzz€Ű€zz€űzz€Ų‚zz€ųƒzzĺzzzĻ{zzļ|zzĽ}zzľ~zzĿzzŀ€zzŁzzł‚zzŃƒzzƒàzzzƒá{zzƒâ|zzƒã}zzƒä~zzƒåzzƒæ€zzƒçzzƒè‚zzƒéƒzz" +
126.6136 +        "ƒŠzzzƒš{zzƒŢ|zzƒţ}zzƒŤ~zzƒťzzƒŦ€zzƒŧzzƒŨ‚zzƒũƒzz„àzzz„á{zz„â|zz„ã}zz„ä~zz„åzz„æ€zz„çzz„è‚zz„éƒzz„Šzzz„š{zz„Ţ|zz„ţ}zz„Ť~zz„ťzz„Ŧ€zz„ŧzz„Ũ‚zz„ũƒzz…àzzz…á{zz…â|zz…ã}zz…ä~zz…åzz…æ€zz…çzz…è‚zz…éƒzz…Šzzz…š{zz…Ţ|zz…ţ}zz…Ť~zz…ťzz…Ŧ€zz…ŧzz…Ũ‚zz…ũƒzz†àzzz†á{zz†â|zz†ã}zz†ä~zz†åzz†æ€zz†çzz†è‚zz†éƒzz†Šzzz†š{zz†Ţ|zz†ţ}zz†Ť~zz†ťzz†Ŧ€zz†ŧzz†Ũ‚zz†ũƒzz‡àzzz‡á{zz‡â|zz‡ã}zz‡ä~zz‡åzz‡æ€zz‡çzz‡è‚zz‡éƒzzˆÊzzzˆË{zzˆÌ|zzˆÍ}zzˆÎ~zzˆÏzzˆÐ€zzˆÑzzˆÒ‚zzˆÓƒzzˆŊzzzˆŋ{zzˆŌ|zzˆō}zzˆŎ~zzˆŏzzˆŐ€zzˆőzzˆŒ‚zzˆœƒzz‰šzzz‰›{zz‰œ" +
126.6137 +        "|zz‰}zz‰ž~zz‰Ÿzz‰ €zz‰¡zz‰¢‚zz‰£ƒzzŠºzzzŠ»{zzŠ¼|zzŠ½}zzŠ¾~zzŠ¿zzŠÀ€zzŠÁzzŠÂ‚zzŠÃƒzzŠĊzzzŠċ{zzŠČ|zzŠč}zzŠĎ~zzŠďzzŠĐ€zzŠđzzŠĒ‚zzŠēƒzz‘Śzzz‘ś{zz‘Ŝ|zz‘ŝ}zz‘Ş~zz‘şzz‘Š€zz‘šzz‘Ţ‚zz‘ţƒzz’Šzzz’‹{zz’Œ|zz’}zz’Ž~zz’zz’€zz’‘zz’’‚zz’“ƒzz“Àzzz“Á{zz“Â|zz“Ã}zz“Ä~zz“Åzz“Æ€zz“ǁzz“È‚zz“Ƀzz“Ŋzzz“ŋ{zz“Ō|zz“ō}zz“Ŏ~zz“ŏzz“Ő€zz“őzz“Œ‚zz“œƒzz”úzzz”û{zz”ü|zz”ý}zz”þ~zz”ÿzz”Ā€zz”āzz”Ă‚zz”ăƒzz”Ċzzz”ċ{zz”Č|zz”č}zz”Ď~zz”ďzz”Đ€zz”đzz”Ē‚zz”ēƒzz•Êzzz•Ë{zz•Ì|zz•Í}zz•Î~zz•Ïzz•Ð€zz•Ñzz•Ò‚zz•Óƒzz•Īzzz•ī{zz•Ĭ|zz•ĭ}zz•Į~z" +
126.6138 +        "z•įzz•İ€zz•ızz•IJ‚zz•ijƒzz–ºzzz–»{zz–¼|zz–½}zz–¾~zz–¿zz–À€zz–Ázz–‚zz–Ãzz–Êzzz–Ë{zz–Ì|zz–Í}zz–Î~zz–Ïzz–Ѐzz–сzz–Ò‚zz–ÓƒzzĠšzzzĠ›{zzĠœ|zzĠ}zzĠž~zzĠŸzzĠ €zzĠ¡zzĠ¢‚zzĠ£ƒzzĢŊzzzĢŋ{zzĢŌ|zzĢō}zzĢŎ~zzĢŏzzĢՀzzĢőzzĢŒ‚zzĢœƒzzģzzzzģ{{zzģ||zzģ}}zzģ~~zzģzzģ€€zzģzzģ‚‚zzģƒƒzzģŊzzzģŋ{zzģŌ|zzģō}zzģŎ~zzģŏzzģՀzzģőzzģŒ‚zzģœƒzzĤÊzzzĤË{zzĤÌ|zzĤÍ}zzĤÎ~zzĤÏzzĤЀzzĤсzzĤ҂zzĤӃzzĥŪzzzĥū{zzĥŬ|zzĥŭ}zzĥŮ~zzĥůzzĥۀzzĥűzzĥŲ‚zzĥųƒzzŹŠzzzŹ‹{zzŹŒ|zzŹ}zzŹŽ~zzŹzzŹ€zzŹ‘zzŹ’‚zzŹ“ƒzzŹ›„zzŹœ…zzŹ†zzŹž‡zzŹŸˆzzŹ ‰zzŹ¡ŠzzŹ" +
126.6139 +        "¢‹zzŹ£ŒzzŹ¤zzŹ¥ŽzzŹ¦zzŹ§zzŹ¨‘zzŹ©’zzŹª“zzŹ«”zzŹ¬•zzŹ­–zzŹ®—zzŹ¯˜zzŹ°™zzŹ±šzzŹ²›zzŹ³œzzŹ´zzŹ»„zzŹ¼…zzŹ½†zzŹ¾‡zzŹ¿ˆzzŹÀ‰zzŹÁŠzzŹÂ‹zzŹÃŒzzŹÄzzŹÅŽzzŹÆzzŹÇzzŹÈ‘zzŹÉ’zzŹÊ“zzŹË”zzŹÌ•zzŹÍ–zzŹÎ—zzŹÏ˜zzŹÐ™zzŹÑšzzŹÒ›zzŹÓœzzŹÔzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" +
126.6140 +        "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz");
126.6141 +    }
126.6142 +    jl_Character187_toLowerCase190 = function(a) {
126.6143 +        return String.fromCharCode(a).toLowerCase().charCodeAt(0)|0;
126.6144 +    }
126.6145 +    jl_Character187_compare251 = function(a, b) {
126.6146 +        return ((a - b) | 0);
126.6147 +    }
126.6148 +    jl_Character187_forDigit252 = function(a, b) {
126.6149 +        if (((b >= 2) && ((b <= 36) && (a < b)))) {
126.6150 +            if ((a >= 10)) {
126.6151 +                a = (((((97 + a) | 0) - 10) | 0) & 65535);
126.6152 +            } else {
126.6153 +                a = (((48 + a) | 0) & 65535);
126.6154 +            }
126.6155 +            return a;
126.6156 +        }
126.6157 +        return 0;
126.6158 +    }
126.6159 +    jl_Character187_valueOf253 = function(a) {
126.6160 +        var b;
126.6161 +        if ((a >= jl_Character187.characterCache246.data.length)) {
126.6162 +            return jl_Character187.$init254(a);
126.6163 +        }
126.6164 +        b = jl_Character187.characterCache246.data[a];
126.6165 +        if ((b === null)) {
126.6166 +            b = jl_Character187.$init254(a);
126.6167 +            jl_Character187.characterCache246.data[a] = b;
126.6168 +        }
126.6169 +        return b;
126.6170 +    }
126.6171 +    jl_Character187_$clinit255 = function() {
126.6172 +        jl_Character187.TYPE245 = $rt_cls($rt_charcls());
126.6173 +        jl_Character187.characterCache246 = $rt_createArray(jl_Character187, 128);
126.6174 +        return;
126.6175 +    }
126.6176 +    jl_Character187_getDigitMapping248 = function() {
126.6177 +        if ((jl_Character187.digitMapping244 === null)) {
126.6178 +            jl_Character187.digitMapping244 = otciu_UnicodeHelper256_decodeIntByte257(jl_Character187_obtainDigitMapping250());
126.6179 +        }
126.6180 +        return jl_Character187.digitMapping244;
126.6181 +    }
126.6182 +    jl_Character187_toLowerCase188 = function(a) {
126.6183 +        return String.fromCharCode(a).toLowerCase().charCodeAt(0)|0;
126.6184 +    }
126.6185 +    jl_Character187_$init254 = function($this, a) {
126.6186 +        jl_Object7_$init10($this);
126.6187 +        $this.value243 = a;
126.6188 +        return;
126.6189 +    }
126.6190 +    jl_Character187_getNumericValue258 = function(a) {
126.6191 +        return jl_Character187_getNumericValue247(a);
126.6192 +    }
126.6193 +    jl_Character187_$clinit255();
126.6194 +}
126.6195 +$rt_methodStubs(jl_Character187_$clinit, ['jl_Character187_getNumericValue247', 'jl_Character187_toChars249', 'jl_Character187_obtainDigitMapping250', 'jl_Character187_toLowerCase190', 'jl_Character187_compare251', 'jl_Character187_forDigit252', 'jl_Character187_valueOf253', 'jl_Character187_$clinit255', 'jl_Character187_getDigitMapping248', 'jl_Character187_toLowerCase188', 'jl_Character187_$init254', 'jl_Character187_getNumericValue258']);
126.6196 +function jl_Character187_compareTo259($this, a) {
126.6197 +    return jl_Character187_compare251($this.value243, a.value243);
126.6198 +}
126.6199 +function jl_Character187_compareTo181($this, a) {
126.6200 +    return jl_Character187_compareTo259($rt_nullCheck($this), a);
126.6201 +}
126.6202 +function jl_Character187_charValue260($this) {
126.6203 +    return $this.value243;
126.6204 +}
126.6205 +jl_Character187.$init254 = function(a) {
126.6206 +    var result = new jl_Character187();
126.6207 +    result.$init254(a);
126.6208 +    return result;
126.6209 +}
126.6210 +$rt_virtualMethods(jl_Character187,
126.6211 +    "compareTo259", function(a) { return jl_Character187_compareTo259(this, a); },
126.6212 +    "compareTo181", function(a) { return jl_Character187_compareTo181(this, a); },
126.6213 +    "charValue260", function() { return jl_Character187_charValue260(this); },
126.6214 +    "$init254", function(a) { jl_Character187_$init254(this, a); });
126.6215 +function ju_Map$Entry261() {
126.6216 +}
126.6217 +$rt_declClass(ju_Map$Entry261, {
126.6218 +    name : "java.util.Map$Entry",
126.6219 +    superclass : jl_Object7 });
126.6220 +function jl_Cloneable262() {
126.6221 +}
126.6222 +$rt_declClass(jl_Cloneable262, {
126.6223 +    name : "java.lang.Cloneable",
126.6224 +    superclass : jl_Object7 });
126.6225 +function ju_MapEntry263() {
126.6226 +    this.value264 = null;
126.6227 +    this.key265 = null;
126.6228 +}
126.6229 +$rt_declClass(ju_MapEntry263, {
126.6230 +    name : "java.util.MapEntry",
126.6231 +    interfaces : [ju_Map$Entry261, jl_Cloneable262],
126.6232 +    superclass : jl_Object7,
126.6233 +    clinit : function() { ju_MapEntry263_$clinit(); } });
126.6234 +function ju_MapEntry263_$clinit() {
126.6235 +    ju_MapEntry263_$clinit = function(){};
126.6236 +    ju_MapEntry263_$init266 = function($this, a, b) {
126.6237 +        jl_Object7_$init10($this);
126.6238 +        $this.key265 = a;
126.6239 +        $this.value264 = b;
126.6240 +        return;
126.6241 +    }
126.6242 +}
126.6243 +$rt_methodStubs(ju_MapEntry263_$clinit, ['ju_MapEntry263_$init266']);
126.6244 +ju_MapEntry263.$init266 = function(a, b) {
126.6245 +    var result = new ju_MapEntry263();
126.6246 +    result.$init266(a, b);
126.6247 +    return result;
126.6248 +}
126.6249 +$rt_virtualMethods(ju_MapEntry263,
126.6250 +    "$init266", function(a, b) { ju_MapEntry263_$init266(this, a, b); });
126.6251 +function jl_ClassCastException267() {
126.6252 +}
126.6253 +$rt_declClass(jl_ClassCastException267, {
126.6254 +    name : "java.lang.ClassCastException",
126.6255 +    superclass : jl_RuntimeException131,
126.6256 +    clinit : function() { jl_ClassCastException267_$clinit(); } });
126.6257 +function jl_ClassCastException267_$clinit() {
126.6258 +    jl_ClassCastException267_$clinit = function(){};
126.6259 +    jl_ClassCastException267_$init268 = function($this) {
126.6260 +        jl_RuntimeException131_$init132($this);
126.6261 +        return;
126.6262 +    }
126.6263 +    jl_ClassCastException267_$init269 = function($this, a) {
126.6264 +        jl_RuntimeException131_$init133($this, a);
126.6265 +        return;
126.6266 +    }
126.6267 +}
126.6268 +$rt_methodStubs(jl_ClassCastException267_$clinit, ['jl_ClassCastException267_$init268', 'jl_ClassCastException267_$init269']);
126.6269 +jl_ClassCastException267.$init268 = function() {
126.6270 +    var result = new jl_ClassCastException267();
126.6271 +    result.$init268();
126.6272 +    return result;
126.6273 +}
126.6274 +jl_ClassCastException267.$init269 = function(a) {
126.6275 +    var result = new jl_ClassCastException267();
126.6276 +    result.$init269(a);
126.6277 +    return result;
126.6278 +}
126.6279 +$rt_virtualMethods(jl_ClassCastException267,
126.6280 +    "$init268", function() { jl_ClassCastException267_$init268(this); },
126.6281 +    "$init269", function(a) { jl_ClassCastException267_$init269(this, a); });
126.6282 +function onhci_CtxImpl$Bind270() {
126.6283 +    this.impl271 = null;
126.6284 +    this.priority272 = 0;
126.6285 +    this.clazz273 = null;
126.6286 +}
126.6287 +$rt_declClass(onhci_CtxImpl$Bind270, {
126.6288 +    name : "org.netbeans.html.context.impl.CtxImpl$Bind",
126.6289 +    interfaces : [jl_Comparable163],
126.6290 +    superclass : jl_Object7,
126.6291 +    clinit : function() { onhci_CtxImpl$Bind270_$clinit(); } });
126.6292 +function onhci_CtxImpl$Bind270_$clinit() {
126.6293 +    onhci_CtxImpl$Bind270_$clinit = function(){};
126.6294 +    onhci_CtxImpl$Bind270_$init274 = function($this, a, b, c) {
126.6295 +        jl_Object7_$init10($this);
126.6296 +        $this.clazz273 = a;
126.6297 +        $this.impl271 = b;
126.6298 +        $this.priority272 = c;
126.6299 +        return;
126.6300 +    }
126.6301 +    onhci_CtxImpl$Bind270_access$000275 = function(a) {
126.6302 +        return a.clazz273;
126.6303 +    }
126.6304 +    onhci_CtxImpl$Bind270_access$100276 = function(a) {
126.6305 +        return a.impl271;
126.6306 +    }
126.6307 +}
126.6308 +$rt_methodStubs(onhci_CtxImpl$Bind270_$clinit, ['onhci_CtxImpl$Bind270_$init274', 'onhci_CtxImpl$Bind270_access$000275', 'onhci_CtxImpl$Bind270_access$100276']);
126.6309 +function onhci_CtxImpl$Bind270_compareTo181($this, a) {
126.6310 +    return onhci_CtxImpl$Bind270_compareTo277($rt_nullCheck($this), a);
126.6311 +}
126.6312 +function onhci_CtxImpl$Bind270_compareTo277($this, a) {
126.6313 +    if (($this.priority272 == a.priority272)) {
126.6314 +        return jl_String3_compareTo182($rt_nullCheck(jl_Class0_getName20($rt_nullCheck($this.clazz273))), jl_Class0_getName20($rt_nullCheck(a.clazz273)));
126.6315 +    }
126.6316 +    return (($this.priority272 - a.priority272) | 0);
126.6317 +}
126.6318 +onhci_CtxImpl$Bind270.$init274 = function(a, b, c) {
126.6319 +    var result = new onhci_CtxImpl$Bind270();
126.6320 +    result.$init274(a, b, c);
126.6321 +    return result;
126.6322 +}
126.6323 +$rt_virtualMethods(onhci_CtxImpl$Bind270,
126.6324 +    "compareTo181", function(a) { return onhci_CtxImpl$Bind270_compareTo181(this, a); },
126.6325 +    "compareTo277", function(a) { return onhci_CtxImpl$Bind270_compareTo277(this, a); },
126.6326 +    "$init274", function(a, b, c) { onhci_CtxImpl$Bind270_$init274(this, a, b, c); });
126.6327 +function ju_Iterator278() {
126.6328 +}
126.6329 +$rt_declClass(ju_Iterator278, {
126.6330 +    name : "java.util.Iterator",
126.6331 +    superclass : jl_Object7 });
126.6332 +function ju_ServiceLoader$1279() {
126.6333 +    this.index280 = 0;
126.6334 +    this.this$0281 = null;
126.6335 +}
126.6336 +$rt_declClass(ju_ServiceLoader$1279, {
126.6337 +    name : "java.util.ServiceLoader$1",
126.6338 +    interfaces : [ju_Iterator278],
126.6339 +    superclass : jl_Object7,
126.6340 +    clinit : function() { ju_ServiceLoader$1279_$clinit(); } });
126.6341 +function ju_ServiceLoader$1279_$clinit() {
126.6342 +    ju_ServiceLoader$1279_$clinit = function(){};
126.6343 +    ju_ServiceLoader$1279_$init282 = function($this, a) {
126.6344 +        $this.this$0281 = a;
126.6345 +        jl_Object7_$init10($this);
126.6346 +        return;
126.6347 +    }
126.6348 +}
126.6349 +$rt_methodStubs(ju_ServiceLoader$1279_$clinit, ['ju_ServiceLoader$1279_$init282']);
126.6350 +function ju_ServiceLoader$1279_hasNext109($this) {
126.6351 +    var a;
126.6352 +    if (($this.index280 >= ju_ServiceLoader283_access$000284($this.this$0281).data.length)) {
126.6353 +        a = 0;
126.6354 +    } else {
126.6355 +        a = 1;
126.6356 +    }
126.6357 +    return a;
126.6358 +}
126.6359 +function ju_ServiceLoader$1279_next110($this) {
126.6360 +    var a, b;
126.6361 +    if (($this.index280 != ju_ServiceLoader283_access$000284($this.this$0281).data.length)) {
126.6362 +        a = ju_ServiceLoader283_access$000284($this.this$0281);
126.6363 +        b = $this.index280;
126.6364 +        $this.index280 = ((b + 1) | 0);
126.6365 +        return a.data[b];
126.6366 +    }
126.6367 +    $rt_throw(ju_NoSuchElementException285.$init286());
126.6368 +}
126.6369 +ju_ServiceLoader$1279.$init282 = function(a) {
126.6370 +    var result = new ju_ServiceLoader$1279();
126.6371 +    result.$init282(a);
126.6372 +    return result;
126.6373 +}
126.6374 +$rt_virtualMethods(ju_ServiceLoader$1279,
126.6375 +    "$init282", function(a) { ju_ServiceLoader$1279_$init282(this, a); },
126.6376 +    "hasNext109", function() { return ju_ServiceLoader$1279_hasNext109(this); },
126.6377 +    "next110", function() { return ju_ServiceLoader$1279_next110(this); });
126.6378 +function otcic_CharBuffer287() {
126.6379 +    this.data288 = null;
126.6380 +    this.end289 = 0;
126.6381 +    this.pos290 = 0;
126.6382 +}
126.6383 +$rt_declClass(otcic_CharBuffer287, {
126.6384 +    name : "org.teavm.classlib.impl.charset.CharBuffer",
126.6385 +    superclass : jl_Object7,
126.6386 +    clinit : function() { otcic_CharBuffer287_$clinit(); } });
126.6387 +function otcic_CharBuffer287_$clinit() {
126.6388 +    otcic_CharBuffer287_$clinit = function(){};
126.6389 +    otcic_CharBuffer287_$init291 = function($this, a, b, c) {
126.6390 +        jl_Object7_$init10($this);
126.6391 +        $this.data288 = a;
126.6392 +        $this.end289 = c;
126.6393 +        $this.pos290 = b;
126.6394 +        return;
126.6395 +    }
126.6396 +}
126.6397 +$rt_methodStubs(otcic_CharBuffer287_$clinit, ['otcic_CharBuffer287_$init291']);
126.6398 +function otcic_CharBuffer287_get292($this) {
126.6399 +    var a, b;
126.6400 +    a = $this.data288;
126.6401 +    b = $this.pos290;
126.6402 +    $this.pos290 = ((b + 1) | 0);
126.6403 +    return a.data[b];
126.6404 +}
126.6405 +function otcic_CharBuffer287_end293($this) {
126.6406 +    var a;
126.6407 +    if (($this.pos290 != $this.end289)) {
126.6408 +        a = 0;
126.6409 +    } else {
126.6410 +        a = 1;
126.6411 +    }
126.6412 +    return a;
126.6413 +}
126.6414 +function otcic_CharBuffer287_back294($this, a) {
126.6415 +    $this.pos290 = (($this.pos290 - a) | 0);
126.6416 +    return;
126.6417 +}
126.6418 +otcic_CharBuffer287.$init291 = function(a, b, c) {
126.6419 +    var result = new otcic_CharBuffer287();
126.6420 +    result.$init291(a, b, c);
126.6421 +    return result;
126.6422 +}
126.6423 +$rt_virtualMethods(otcic_CharBuffer287,
126.6424 +    "get292", function() { return otcic_CharBuffer287_get292(this); },
126.6425 +    "end293", function() { return otcic_CharBuffer287_end293(this); },
126.6426 +    "$init291", function(a, b, c) { otcic_CharBuffer287_$init291(this, a, b, c); },
126.6427 +    "back294", function(a) { otcic_CharBuffer287_back294(this, a); });
126.6428 +function jlr_Array150() {
126.6429 +}
126.6430 +$rt_declClass(jlr_Array150, {
126.6431 +    name : "java.lang.reflect.Array",
126.6432 +    superclass : jl_Object7,
126.6433 +    clinit : function() { jlr_Array150_$clinit(); } });
126.6434 +function jlr_Array150_$clinit() {
126.6435 +    jlr_Array150_$clinit = function(){};
126.6436 +    jlr_Array150_newInstanceImpl295 = function(a, b) {
126.6437 +        var cls = a.$data;
126.6438 +        if (cls.primitive) {
126.6439 +            if (cls == $rt_bytecls()) {
126.6440 +                return $rt_createByteArray(b);
126.6441 +            }
126.6442 +            if (cls == $rt_shortcls()) {
126.6443 +                return $rt_createShortArray(b);
126.6444 +            }
126.6445 +            if (cls == $rt_charcls()) {
126.6446 +                return $rt_createCharArray(b);
126.6447 +            }
126.6448 +            if (cls == $rt_intcls()) {
126.6449 +                return $rt_createIntArray(b);
126.6450 +            }
126.6451 +            if (cls == $rt_longcls()) {
126.6452 +                return $rt_createLongArray(b);
126.6453 +            }
126.6454 +            if (cls == $rt_floatcls()) {
126.6455 +                return $rt_createFloatArray(b);
126.6456 +            }
126.6457 +            if (cls == $rt_doublecls()) {
126.6458 +                return $rt_createDoubleArray(b);
126.6459 +            }
126.6460 +            if (cls == $rt_booleancls()) {
126.6461 +                return $rt_createBooleanArray(b);
126.6462 +            }
126.6463 +        } else {
126.6464 +            return $rt_createArray(cls, b)
126.6465 +        }
126.6466 +    }
126.6467 +    jlr_Array150_getImpl296 = function(a, b) {
126.6468 +        var item = a.data[b];
126.6469 +        var type = a.constructor.$meta.item;
126.6470 +        if (type === $rt_intcls()) {
126.6471 +            item = jl_Integer81_valueOf82(item);
126.6472 +        } else if (type === $rt_charcls()) {
126.6473 +            item = jl_Character187_valueOf253(item);
126.6474 +        }
126.6475 +        return item;
126.6476 +    }
126.6477 +    jlr_Array150_getLength297 = function(a) {
126.6478 +        if (a === null || a.constructor.$meta.item === undefined) {
126.6479 +            $rt_throw(jl_IllegalArgumentException134.$init135());
126.6480 +        }
126.6481 +        return a.data.length;
126.6482 +    }
126.6483 +    jlr_Array150_newInstance151 = function(a, b) {
126.6484 +        if ((a !== null)) {
126.6485 +            jl_Void298_$clinit();
126.6486 +            if ((a !== jl_Void298.TYPE299)) {
126.6487 +                if ((b >= 0)) {
126.6488 +                    return jlr_Array150_newInstanceImpl295(a, b);
126.6489 +                }
126.6490 +                $rt_throw(jl_NegativeArraySizeException300.$init301());
126.6491 +            }
126.6492 +            $rt_throw(jl_IllegalArgumentException134.$init135());
126.6493 +        }
126.6494 +        $rt_throw(jl_NullPointerException8.$init9());
126.6495 +    }
126.6496 +    jlr_Array150_$init302 = function($this) {
126.6497 +        jl_Object7_$init10($this);
126.6498 +        return;
126.6499 +    }
126.6500 +    jlr_Array150_get303 = function(a, b) {
126.6501 +        if (((b >= 0) && (b < jlr_Array150_getLength297(a)))) {
126.6502 +            return jlr_Array150_getImpl296(a, b);
126.6503 +        }
126.6504 +        $rt_throw(jl_ArrayIndexOutOfBoundsException160.$init161());
126.6505 +    }
126.6506 +}
126.6507 +$rt_methodStubs(jlr_Array150_$clinit, ['jlr_Array150_newInstanceImpl295', 'jlr_Array150_getImpl296', 'jlr_Array150_getLength297', 'jlr_Array150_newInstance151', 'jlr_Array150_$init302', 'jlr_Array150_get303']);
126.6508 +jlr_Array150.$init302 = function() {
126.6509 +    var result = new jlr_Array150();
126.6510 +    result.$init302();
126.6511 +    return result;
126.6512 +}
126.6513 +$rt_virtualMethods(jlr_Array150,
126.6514 +    "$init302", function() { jlr_Array150_$init302(this); });
126.6515 +function ju_Map304() {
126.6516 +}
126.6517 +$rt_declClass(ju_Map304, {
126.6518 +    name : "java.util.Map",
126.6519 +    superclass : jl_Object7 });
126.6520 +function ju_AbstractMap305() {
126.6521 +}
126.6522 +$rt_declClass(ju_AbstractMap305, {
126.6523 +    name : "java.util.AbstractMap",
126.6524 +    interfaces : [ju_Map304],
126.6525 +    superclass : jl_Object7,
126.6526 +    clinit : function() { ju_AbstractMap305_$clinit(); } });
126.6527 +function ju_AbstractMap305_$clinit() {
126.6528 +    ju_AbstractMap305_$clinit = function(){};
126.6529 +    ju_AbstractMap305_$init306 = function($this) {
126.6530 +        jl_Object7_$init10($this);
126.6531 +        return;
126.6532 +    }
126.6533 +}
126.6534 +$rt_methodStubs(ju_AbstractMap305_$clinit, ['ju_AbstractMap305_$init306']);
126.6535 +ju_AbstractMap305.$init306 = function() {
126.6536 +    var result = new ju_AbstractMap305();
126.6537 +    result.$init306();
126.6538 +    return result;
126.6539 +}
126.6540 +$rt_virtualMethods(ju_AbstractMap305,
126.6541 +    "$init306", function() { ju_AbstractMap305_$init306(this); });
126.6542 +function oahjs_Proto$Type36() {
126.6543 +    this.functions307 = null;
126.6544 +    this.propertyReadOnly308 = null;
126.6545 +    this.propertyNames309 = null;
126.6546 +    this.clazz310 = null;
126.6547 +}
126.6548 +oahjs_Proto$Type36.$assertionsDisabled311 = false;
126.6549 +$rt_declClass(oahjs_Proto$Type36, {
126.6550 +    name : "org.apidesign.html.json.spi.Proto$Type",
126.6551 +    superclass : jl_Object7,
126.6552 +    clinit : function() { oahjs_Proto$Type36_$clinit(); } });
126.6553 +function oahjs_Proto$Type36_$clinit() {
126.6554 +    oahjs_Proto$Type36_$clinit = function(){};
126.6555 +    oahjs_Proto$Type36_access$300312 = function(a) {
126.6556 +        return a.propertyReadOnly308;
126.6557 +    }
126.6558 +    oahjs_Proto$Type36_$init313 = function($this, a, b, c, d) {
126.6559 +        jl_Object7_$init10($this);
126.6560 +        if ((!((oahjs_Proto$Type36.$assertionsDisabled311 == 0) && (jl_String3_endsWith194($rt_nullCheck(jl_Class0_getName20($rt_nullCheck($rt_cls($rt_nullCheck($this).constructor)))), $rt_str("$Html4JavaType")) == 0)))) {
126.6561 +            block3: {
126.6562 +                block4: {
126.6563 +                    block5: {
126.6564 +                        block6: {
126.6565 +                            try {
126.6566 +                                if ((oahjs_Proto$Type36.$assertionsDisabled311 != 0)) {
126.6567 +                                    break block6;
126.6568 +                                }
126.6569 +                            } catch ($e) {
126.6570 +                                $je = $e.$javaException;
126.6571 +                                if ($je && $je instanceof jl_SecurityException314) {
126.6572 +                                    a = $je;
126.6573 +                                    break block4;
126.6574 +                                } else {
126.6575 +                                    throw $e;
126.6576 +                                }
126.6577 +                            }
126.6578 +                            try {
126.6579 +                                if ((jl_Class0_getDeclaringClass315($rt_nullCheck($rt_cls($rt_nullCheck($this).constructor))) !== a)) {
126.6580 +                                    break block5;
126.6581 +                                }
126.6582 +                            } catch ($e) {
126.6583 +                                $je = $e.$javaException;
126.6584 +                                if ($je && $je instanceof jl_SecurityException314) {
126.6585 +                                    a = $je;
126.6586 +                                    break block4;
126.6587 +                                } else {
126.6588 +                                    throw $e;
126.6589 +                                }
126.6590 +                            }
126.6591 +                        }
126.6592 +                        break block3;
126.6593 +                    }
126.6594 +                    try {
126.6595 +                        $rt_throw(jl_AssertionError316.$init317());
126.6596 +                    } catch ($e) {
126.6597 +                        $je = $e.$javaException;
126.6598 +                        if ($je && $je instanceof jl_SecurityException314) {
126.6599 +                            a = $je;
126.6600 +                        } else {
126.6601 +                            throw $e;
126.6602 +                        }
126.6603 +                    }
126.6604 +                }
126.6605 +            }
126.6606 +            $this.clazz310 = a;
126.6607 +            $this.propertyNames309 = $rt_createArray(jl_String3, c);
126.6608 +            $this.propertyReadOnly308 = $rt_createBooleanArray(c);
126.6609 +            $this.functions307 = $rt_createArray(jl_String3, d);
126.6610 +            onhji_JSON40_register318(a, $this);
126.6611 +            return;
126.6612 +        }
126.6613 +        $rt_throw(jl_AssertionError316.$init317());
126.6614 +    }
126.6615 +    oahjs_Proto$Type36_$clinit319 = function() {
126.6616 +        var a;
126.6617 +        if ((jl_Class0_desiredAssertionStatus320($rt_nullCheck($rt_cls(oahjs_Proto321))) != 0)) {
126.6618 +            a = 0;
126.6619 +        } else {
126.6620 +            a = 1;
126.6621 +        }
126.6622 +        oahjs_Proto$Type36.$assertionsDisabled311 = a;
126.6623 +        return;
126.6624 +    }
126.6625 +    oahjs_Proto$Type36_access$400322 = function(a) {
126.6626 +        return a.functions307;
126.6627 +    }
126.6628 +    oahjs_Proto$Type36_access$200323 = function(a) {
126.6629 +        return a.propertyNames309;
126.6630 +    }
126.6631 +    oahjs_Proto$Type36_$clinit319();
126.6632 +}
126.6633 +$rt_methodStubs(oahjs_Proto$Type36_$clinit, ['oahjs_Proto$Type36_access$300312', 'oahjs_Proto$Type36_$init313', 'oahjs_Proto$Type36_$clinit319', 'oahjs_Proto$Type36_access$400322', 'oahjs_Proto$Type36_access$200323']);
126.6634 +function oahjs_Proto$Type36_extractValue324($this, a, b) {
126.6635 +    if (($rt_isAssignable(a.$data, $rt_nullCheck($rt_cls(jl_Number325)).$data) != 0)) {
126.6636 +        b = oahjs_Proto$Type36_numberValue326($rt_nullCheck($this), b);
126.6637 +    }
126.6638 +    if (($rt_cls(jl_Boolean327) === a)) {
126.6639 +        b = oahjs_Proto$Type36_boolValue328($rt_nullCheck($this), b);
126.6640 +    }
126.6641 +    if (($rt_cls(jl_String3) === a)) {
126.6642 +        b = oahjs_Proto$Type36_stringValue329($rt_nullCheck($this), b);
126.6643 +    }
126.6644 +    if (($rt_cls(jl_Character187) === a)) {
126.6645 +        b = oahjs_Proto$Type36_charValue330($rt_nullCheck($this), b);
126.6646 +    }
126.6647 +    if (($rt_cls(jl_Integer81) === a)) {
126.6648 +        if (((b instanceof jl_Number325) == 0)) {
126.6649 +            b = 0;
126.6650 +        } else {
126.6651 +            b = $rt_nullCheck(b).intValue87();
126.6652 +        }
126.6653 +        b = jl_Integer81_valueOf82(b);
126.6654 +    }
126.6655 +    if (($rt_cls(jl_Long331) === a)) {
126.6656 +        if (((b instanceof jl_Number325) == 0)) {
126.6657 +            b = Long_ZERO;
126.6658 +        } else {
126.6659 +            b = $rt_nullCheck(b).longValue332();
126.6660 +        }
126.6661 +        b = jl_Long331_valueOf333(b);
126.6662 +    }
126.6663 +    if (($rt_cls(jl_Short334) === a)) {
126.6664 +        if (((b instanceof jl_Number325) == 0)) {
126.6665 +            b = 0;
126.6666 +        } else {
126.6667 +            b = $rt_nullCheck(b).shortValue335();
126.6668 +        }
126.6669 +        b = jl_Short334_valueOf336(b);
126.6670 +    }
126.6671 +    if (($rt_cls(jl_Byte337) === a)) {
126.6672 +        if (((b instanceof jl_Number325) == 0)) {
126.6673 +            b = 0;
126.6674 +        } else {
126.6675 +            b = $rt_nullCheck(b).byteValue338();
126.6676 +        }
126.6677 +        b = jl_Byte337_valueOf339(b);
126.6678 +    }
126.6679 +    if (($rt_cls(jl_Double340) === a)) {
126.6680 +        if (((b instanceof jl_Number325) == 0)) {
126.6681 +            b = NaN;
126.6682 +        } else {
126.6683 +            b = $rt_nullCheck(b).doubleValue341();
126.6684 +        }
126.6685 +        b = jl_Double340_valueOf342(b);
126.6686 +    }
126.6687 +    if (($rt_cls(jl_Float343) === a)) {
126.6688 +        if (((b instanceof jl_Number325) == 0)) {
126.6689 +            b = NaN;
126.6690 +        } else {
126.6691 +            b = $rt_nullCheck(b).floatValue344();
126.6692 +        }
126.6693 +        b = jl_Float343_valueOf345(b);
126.6694 +    }
126.6695 +    return jl_Class0_cast346($rt_nullCheck(a), b);
126.6696 +}
126.6697 +function oahjs_Proto$Type36_registerProperty347($this, a, b, c) {
126.6698 +    if ((!((oahjs_Proto$Type36.$assertionsDisabled311 == 0) && ($this.propertyNames309.data[b] !== null)))) {
126.6699 +        $this.propertyNames309.data[b] = a;
126.6700 +        $this.propertyReadOnly308.data[b] = c;
126.6701 +        return;
126.6702 +    }
126.6703 +    $rt_throw(jl_AssertionError316.$init317());
126.6704 +}
126.6705 +function oahjs_Proto$Type36_numberValue326($this, a) {
126.6706 +    return onhji_JSON40_numberValue348(a);
126.6707 +}
126.6708 +function oahjs_Proto$Type36_createProto349($this, a, b) {
126.6709 +    return oahjs_Proto321.$init350(a, $this, b);
126.6710 +}
126.6711 +function oahjs_Proto$Type36_boolValue328($this, a) {
126.6712 +    return onhji_JSON40_boolValue351(a);
126.6713 +}
126.6714 +function oahjs_Proto$Type36_stringValue329($this, a) {
126.6715 +    return onhji_JSON40_stringValue352(a);
126.6716 +}
126.6717 +function oahjs_Proto$Type36_charValue330($this, a) {
126.6718 +    return onhji_JSON40_charValue353(a);
126.6719 +}
126.6720 +function oahjs_Proto$Type36_registerFunction354($this, a, b) {
126.6721 +    if ((!((oahjs_Proto$Type36.$assertionsDisabled311 == 0) && ($this.functions307.data[b] !== null)))) {
126.6722 +        $this.functions307.data[b] = a;
126.6723 +        return;
126.6724 +    }
126.6725 +    $rt_throw(jl_AssertionError316.$init317());
126.6726 +}
126.6727 +function oahjs_Proto$Type36_isSame355($this, a, b) {
126.6728 +    if ((a !== b)) {
126.6729 +        if (((a !== null) && (b !== null))) {
126.6730 +            return $rt_nullCheck(a).equals13(b);
126.6731 +        }
126.6732 +        return 0;
126.6733 +    }
126.6734 +    return 1;
126.6735 +}
126.6736 +oahjs_Proto$Type36.$init313 = function(a, b, c, d) {
126.6737 +    var result = new oahjs_Proto$Type36();
126.6738 +    result.$init313(a, b, c, d);
126.6739 +    return result;
126.6740 +}
126.6741 +$rt_virtualMethods(oahjs_Proto$Type36,
126.6742 +    "extractValue324", function(a, b) { return oahjs_Proto$Type36_extractValue324(this, a, b); },
126.6743 +    "registerProperty347", function(a, b, c) { oahjs_Proto$Type36_registerProperty347(this, a, b, c); },
126.6744 +    "$init313", function(a, b, c, d) { oahjs_Proto$Type36_$init313(this, a, b, c, d); },
126.6745 +    "numberValue326", function(a) { return oahjs_Proto$Type36_numberValue326(this, a); },
126.6746 +    "createProto349", function(a, b) { return oahjs_Proto$Type36_createProto349(this, a, b); },
126.6747 +    "boolValue328", function(a) { return oahjs_Proto$Type36_boolValue328(this, a); },
126.6748 +    "stringValue329", function(a) { return oahjs_Proto$Type36_stringValue329(this, a); },
126.6749 +    "charValue330", function(a) { return oahjs_Proto$Type36_charValue330(this, a); },
126.6750 +    "registerFunction354", function(a, b) { oahjs_Proto$Type36_registerFunction354(this, a, b); },
126.6751 +    "isSame355", function(a, b) { return oahjs_Proto$Type36_isSame355(this, a, b); });
126.6752 +function oadm_Mines$Html4JavaType356() {
126.6753 +}
126.6754 +$rt_declClass(oadm_Mines$Html4JavaType356, {
126.6755 +    name : "org.apidesign.demo.minesweeper.Mines$Html4JavaType",
126.6756 +    superclass : oahjs_Proto$Type36,
126.6757 +    clinit : function() { oadm_Mines$Html4JavaType356_$clinit(); } });
126.6758 +function oadm_Mines$Html4JavaType356_$clinit() {
126.6759 +    oadm_Mines$Html4JavaType356_$clinit = function(){};
126.6760 +    oadm_Mines$Html4JavaType356_$init357 = function($this) {
126.6761 +        var a, b, c, d;
126.6762 +        oahjs_Proto$Type36_$init313($this, $rt_cls(oadm_Mines49), $rt_cls(oadm_MinesModel43), 3, 5);
126.6763 +        a = $rt_str("fieldShowing");
126.6764 +        b = 0;
126.6765 +        c = 1;
126.6766 +        d = $rt_nullCheck($this);
126.6767 +        oahjs_Proto$Type36_registerProperty347(d, a, b, c);
126.6768 +        oahjs_Proto$Type36_registerProperty347(d, $rt_str("state"), 1, 0);
126.6769 +        oahjs_Proto$Type36_registerProperty347(d, $rt_str("rows"), 2, 1);
126.6770 +        oahjs_Proto$Type36_registerFunction354(d, $rt_str("showHelp"), 0);
126.6771 +        oahjs_Proto$Type36_registerFunction354(d, $rt_str("smallGame"), 1);
126.6772 +        oahjs_Proto$Type36_registerFunction354(d, $rt_str("normalGame"), 2);
126.6773 +        oahjs_Proto$Type36_registerFunction354(d, $rt_str("giveUp"), 3);
126.6774 +        oahjs_Proto$Type36_registerFunction354(d, $rt_str("click"), 4);
126.6775 +        return;
126.6776 +    }
126.6777 +    oadm_Mines$Html4JavaType356_$init358 = function($this, a) {
126.6778 +        oadm_Mines$Html4JavaType356_$init357($this);
126.6779 +        return;
126.6780 +    }
126.6781 +}
126.6782 +$rt_methodStubs(oadm_Mines$Html4JavaType356_$clinit, ['oadm_Mines$Html4JavaType356_$init357', 'oadm_Mines$Html4JavaType356_$init358']);
126.6783 +function oadm_Mines$Html4JavaType356_call359($this, a, b, c, d) {
126.6784 +    a = a;
126.6785 +    oadm_Mines$Html4JavaType356_call360($rt_nullCheck($this), a, b, c, d);
126.6786 +    return;
126.6787 +}
126.6788 +function oadm_Mines$Html4JavaType356_setValue37($this, a, b, c) {
126.6789 +    a = a;
126.6790 +    oadm_Mines$Html4JavaType356_setValue361($rt_nullCheck($this), a, b, c);
126.6791 +    return;
126.6792 +}
126.6793 +function oadm_Mines$Html4JavaType356_getValue362($this, a, b) {
126.6794 +    block1: {
126.6795 +        block2: {
126.6796 +            block3: {
126.6797 +                switch (b) {
126.6798 +                    case 0:
126.6799 +                        break;
126.6800 +                    case 1:
126.6801 +                        break block3;
126.6802 +                    case 2:
126.6803 +                        break block2;
126.6804 +                    default:
126.6805 +                        break block1;
126.6806 +                }
126.6807 +                return jl_Boolean327_valueOf363(oadm_Mines49_isFieldShowing364($rt_nullCheck(a)));
126.6808 +            }
126.6809 +            return oadm_Mines49_getState99($rt_nullCheck(a));
126.6810 +        }
126.6811 +        return oadm_Mines49_getRows53($rt_nullCheck(a));
126.6812 +    }
126.6813 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.6814 +}
126.6815 +function oadm_Mines$Html4JavaType356_call360($this, a, b, c, d) {
126.6816 +    block1: {
126.6817 +        block2: {
126.6818 +            block3: {
126.6819 +                block4: {
126.6820 +                    block5: {
126.6821 +                        switch (b) {
126.6822 +                            case 0:
126.6823 +                                break;
126.6824 +                            case 1:
126.6825 +                                break block5;
126.6826 +                            case 2:
126.6827 +                                break block4;
126.6828 +                            case 3:
126.6829 +                                break block3;
126.6830 +                            case 4:
126.6831 +                                break block2;
126.6832 +                            default:
126.6833 +                                break block1;
126.6834 +                        }
126.6835 +                        oadm_Mines49_access$200365(a, c, d);
126.6836 +                        return;
126.6837 +                    }
126.6838 +                    oadm_Mines49_access$300366(a, c, d);
126.6839 +                    return;
126.6840 +                }
126.6841 +                oadm_Mines49_access$400367(a, c, d);
126.6842 +                return;
126.6843 +            }
126.6844 +            oadm_Mines49_access$500368(a, c, d);
126.6845 +            return;
126.6846 +        }
126.6847 +        oadm_Mines49_access$600369(a, c, d);
126.6848 +        return;
126.6849 +    }
126.6850 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.6851 +}
126.6852 +function oadm_Mines$Html4JavaType356_protoFor370($this, a) {
126.6853 +    return oadm_Mines49_access$700371(a);
126.6854 +}
126.6855 +function oadm_Mines$Html4JavaType356_onChange372($this, a, b) {
126.6856 +    a = a;
126.6857 +    oadm_Mines$Html4JavaType356_onChange373($rt_nullCheck($this), a, b);
126.6858 +    return;
126.6859 +}
126.6860 +function oadm_Mines$Html4JavaType356_getValue39($this, a, b) {
126.6861 +    return oadm_Mines$Html4JavaType356_getValue362($rt_nullCheck($this), a, b);
126.6862 +}
126.6863 +function oadm_Mines$Html4JavaType356_onChange373($this, a, b) {
126.6864 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.6865 +}
126.6866 +function oadm_Mines$Html4JavaType356_setValue361($this, a, b, c) {
126.6867 +    block1: {
126.6868 +        switch (b) {
126.6869 +            case 1:
126.6870 +                break;
126.6871 +            default:
126.6872 +                break block1;
126.6873 +        }
126.6874 +        b = oahjs_Proto$Type36_extractValue324($rt_nullCheck(oadm_Mines49_access$100374()), $rt_cls(oadm_MinesModel$GameState73), c);
126.6875 +        oadm_Mines49_setState75($rt_nullCheck(a), b);
126.6876 +        return;
126.6877 +    }
126.6878 +    return;
126.6879 +}
126.6880 +oadm_Mines$Html4JavaType356.$init357 = function() {
126.6881 +    var result = new oadm_Mines$Html4JavaType356();
126.6882 +    result.$init357();
126.6883 +    return result;
126.6884 +}
126.6885 +oadm_Mines$Html4JavaType356.$init358 = function(a) {
126.6886 +    var result = new oadm_Mines$Html4JavaType356();
126.6887 +    result.$init358(a);
126.6888 +    return result;
126.6889 +}
126.6890 +$rt_virtualMethods(oadm_Mines$Html4JavaType356,
126.6891 +    "call359", function(a, b, c, d) { oadm_Mines$Html4JavaType356_call359(this, a, b, c, d); },
126.6892 +    "setValue37", function(a, b, c) { oadm_Mines$Html4JavaType356_setValue37(this, a, b, c); },
126.6893 +    "getValue362", function(a, b) { return oadm_Mines$Html4JavaType356_getValue362(this, a, b); },
126.6894 +    "call360", function(a, b, c, d) { oadm_Mines$Html4JavaType356_call360(this, a, b, c, d); },
126.6895 +    "protoFor370", function(a) { return oadm_Mines$Html4JavaType356_protoFor370(this, a); },
126.6896 +    "onChange372", function(a, b) { oadm_Mines$Html4JavaType356_onChange372(this, a, b); },
126.6897 +    "getValue39", function(a, b) { return oadm_Mines$Html4JavaType356_getValue39(this, a, b); },
126.6898 +    "$init357", function() { oadm_Mines$Html4JavaType356_$init357(this); },
126.6899 +    "$init358", function(a) { oadm_Mines$Html4JavaType356_$init358(this, a); },
126.6900 +    "onChange373", function(a, b) { oadm_Mines$Html4JavaType356_onChange373(this, a, b); },
126.6901 +    "setValue361", function(a, b, c) { oadm_Mines$Html4JavaType356_setValue361(this, a, b, c); });
126.6902 +function oadm_Mines$1375() {
126.6903 +    this.val$mines376 = 0;
126.6904 +    this.val$width377 = 0;
126.6905 +    this.val$height378 = 0;
126.6906 +    this.this$0379 = null;
126.6907 +}
126.6908 +$rt_declClass(oadm_Mines$1375, {
126.6909 +    name : "org.apidesign.demo.minesweeper.Mines$1",
126.6910 +    interfaces : [jl_Runnable232],
126.6911 +    superclass : jl_Object7,
126.6912 +    clinit : function() { oadm_Mines$1375_$clinit(); } });
126.6913 +function oadm_Mines$1375_$clinit() {
126.6914 +    oadm_Mines$1375_$clinit = function(){};
126.6915 +    oadm_Mines$1375_$init380 = function($this, a, b, c, d) {
126.6916 +        $this.this$0379 = a;
126.6917 +        $this.val$width377 = b;
126.6918 +        $this.val$height378 = c;
126.6919 +        $this.val$mines376 = d;
126.6920 +        jl_Object7_$init10($this);
126.6921 +        return;
126.6922 +    }
126.6923 +}
126.6924 +$rt_methodStubs(oadm_Mines$1375_$clinit, ['oadm_Mines$1375_$init380']);
126.6925 +function oadm_Mines$1375_run381($this) {
126.6926 +    oadm_MinesModel43_init60($this.this$0379, $this.val$width377, $this.val$height378, $this.val$mines376);
126.6927 +    return;
126.6928 +}
126.6929 +oadm_Mines$1375.$init380 = function(a, b, c, d) {
126.6930 +    var result = new oadm_Mines$1375();
126.6931 +    result.$init380(a, b, c, d);
126.6932 +    return result;
126.6933 +}
126.6934 +$rt_virtualMethods(oadm_Mines$1375,
126.6935 +    "run381", function() { oadm_Mines$1375_run381(this); },
126.6936 +    "$init380", function(a, b, c, d) { oadm_Mines$1375_$init380(this, a, b, c, d); });
126.6937 +function otcic_Charset382() {
126.6938 +}
126.6939 +$rt_declClass(otcic_Charset382, {
126.6940 +    name : "org.teavm.classlib.impl.charset.Charset",
126.6941 +    superclass : jl_Object7,
126.6942 +    clinit : function() { otcic_Charset382_$clinit(); } });
126.6943 +function otcic_Charset382_$clinit() {
126.6944 +    otcic_Charset382_$clinit = function(){};
126.6945 +    otcic_Charset382_$init383 = function($this) {
126.6946 +        jl_Object7_$init10($this);
126.6947 +        return;
126.6948 +    }
126.6949 +    otcic_Charset382_get384 = function(a) {
126.6950 +        if ((jl_String3_equals13($rt_nullCheck(a), $rt_str("UTF-8")) == 0)) {
126.6951 +            return null;
126.6952 +        }
126.6953 +        return otcic_UTF8Charset385.$init386();
126.6954 +    }
126.6955 +}
126.6956 +$rt_methodStubs(otcic_Charset382_$clinit, ['otcic_Charset382_$init383', 'otcic_Charset382_get384']);
126.6957 +otcic_Charset382.$init383 = function() {
126.6958 +    var result = new otcic_Charset382();
126.6959 +    result.$init383();
126.6960 +    return result;
126.6961 +}
126.6962 +$rt_virtualMethods(otcic_Charset382,
126.6963 +    "$init383", function() { otcic_Charset382_$init383(this); });
126.6964 +function onhji_JSON40() {
126.6965 +}
126.6966 +onhji_JSON40.modelTypes387 = null;
126.6967 +$rt_declClass(onhji_JSON40, {
126.6968 +    name : "org.netbeans.html.json.impl.JSON",
126.6969 +    superclass : jl_Object7,
126.6970 +    clinit : function() { onhji_JSON40_$clinit(); } });
126.6971 +function onhji_JSON40_$clinit() {
126.6972 +    onhji_JSON40_$clinit = function(){};
126.6973 +    onhji_JSON40_toModel388 = function(a, b, c, d) {
126.6974 +        return jl_Class0_cast346($rt_nullCheck(b), $rt_nullCheck(onhji_JSON40_findTechnology390(a)).toModel389(b, c));
126.6975 +    }
126.6976 +    onhji_JSON40_runInBrowser391 = function(a, b) {
126.6977 +        $rt_nullCheck(onhji_JSON40_findTechnology390(a)).runSafe392(b);
126.6978 +        return;
126.6979 +    }
126.6980 +    onhji_JSON40_findType393 = function(a) {
126.6981 +        var b, c;
126.6982 +        b = 0;
126.6983 +        block1: {
126.6984 +            while (true) {
126.6985 +                if ((b >= 2)) {
126.6986 +                    break block1;
126.6987 +                }
126.6988 +                c = ju_HashMap394_get395($rt_nullCheck(onhji_JSON40.modelTypes387), a);
126.6989 +                if ((c !== null)) {
126.6990 +                    break;
126.6991 +                }
126.6992 +                onhji_JSON40_initClass396(a);
126.6993 +                b = ((b + 1) | 0);
126.6994 +            }
126.6995 +            return c;
126.6996 +        }
126.6997 +        return null;
126.6998 +    }
126.6999 +    onhji_JSON40_register318 = function(a, b) {
126.7000 +        ju_HashMap394_put397($rt_nullCheck(onhji_JSON40.modelTypes387), a, b);
126.7001 +        return;
126.7002 +    }
126.7003 +    onhji_JSON40_findTechnology390 = function(a) {
126.7004 +        a = oahcs_Contexts398_find399(a, $rt_cls(oahjs_Technology156));
126.7005 +        if ((a === null)) {
126.7006 +            a = onhji_JSON$EmptyTech400_access$000401();
126.7007 +        }
126.7008 +        return a;
126.7009 +    }
126.7010 +    onhji_JSON40_isNumeric402 = function(a) {
126.7011 +        if ((((a instanceof jl_Integer81) == 0) && (((a instanceof jl_Long331) == 0) && (((a instanceof jl_Short334) == 0) && ((a instanceof jl_Byte337) == 0))))) {
126.7012 +            a = 0;
126.7013 +        } else {
126.7014 +            a = 1;
126.7015 +        }
126.7016 +        return a;
126.7017 +    }
126.7018 +    onhji_JSON40_find41 = function(a, b) {
126.7019 +        if ((a !== null)) {
126.7020 +            if (((a instanceof onhji_JSONList76) == 0)) {
126.7021 +                if (($rt_isInstance(a, ju_Collection203) == 0)) {
126.7022 +                    a = onhji_JSON40_findProto403(a);
126.7023 +                    if ((a !== null)) {
126.7024 +                        a = onhji_PropertyBindingAccessor404_getBindings405(a, 1);
126.7025 +                        if ((a !== null)) {
126.7026 +                            a = onhji_Bindings406_koData407($rt_nullCheck(a));
126.7027 +                        } else {
126.7028 +                            a = null;
126.7029 +                        }
126.7030 +                        return a;
126.7031 +                    }
126.7032 +                    return null;
126.7033 +                }
126.7034 +                return onhji_JSONList76_koData408(a, b);
126.7035 +            }
126.7036 +            return onhji_JSONList76_koData407($rt_nullCheck(a));
126.7037 +        }
126.7038 +        return null;
126.7039 +    }
126.7040 +    onhji_JSON40_numberValue348 = function(a) {
126.7041 +        if (((a instanceof jl_String3) == 0)) {
126.7042 +            if (((a instanceof jl_Boolean327) == 0)) {
126.7043 +                return a;
126.7044 +            }
126.7045 +            if ((jl_Boolean327_booleanValue409($rt_nullCheck(a)) == 0)) {
126.7046 +                a = 0;
126.7047 +            } else {
126.7048 +                a = 1;
126.7049 +            }
126.7050 +            return jl_Integer81_valueOf82(a);
126.7051 +        }
126.7052 +        block5: {
126.7053 +            try {
126.7054 +                a = jl_Double340_valueOf410(a);
126.7055 +            } catch ($e) {
126.7056 +                $je = $e.$javaException;
126.7057 +                if ($je && $je instanceof jl_NumberFormatException137) {
126.7058 +                    a = $je;
126.7059 +                    break block5;
126.7060 +                } else {
126.7061 +                    throw $e;
126.7062 +                }
126.7063 +            }
126.7064 +            return a;
126.7065 +        }
126.7066 +        return jl_Double340_valueOf342(NaN);
126.7067 +    }
126.7068 +    onhji_JSON40_$clinit411 = function() {
126.7069 +        onhji_JSON40.modelTypes387 = ju_HashMap394.$init412();
126.7070 +        return;
126.7071 +    }
126.7072 +    onhji_JSON40_boolValue351 = function(a) {
126.7073 +        if (((a instanceof jl_String3) == 0)) {
126.7074 +            if (((a instanceof jl_Number325) == 0)) {
126.7075 +                jl_Boolean327_$clinit();
126.7076 +                return jl_Boolean327_valueOf363(jl_Boolean327_equals13($rt_nullCheck(jl_Boolean327.TRUE413), a));
126.7077 +            }
126.7078 +            if (($rt_nullCheck(onhji_JSON40_numberValue348(a)).doubleValue341() == 0.0)) {
126.7079 +                a = 0;
126.7080 +            } else {
126.7081 +                a = 1;
126.7082 +            }
126.7083 +            return jl_Boolean327_valueOf363(a);
126.7084 +        }
126.7085 +        return jl_Boolean327_valueOf363(jl_Boolean327_parseBoolean414(a));
126.7086 +    }
126.7087 +    onhji_JSON40_$init415 = function($this) {
126.7088 +        jl_Object7_$init10($this);
126.7089 +        return;
126.7090 +    }
126.7091 +    onhji_JSON40_stringValue352 = function(a) {
126.7092 +        if (((a instanceof jl_Boolean327) == 0)) {
126.7093 +            if ((onhji_JSON40_isNumeric402(a) == 0)) {
126.7094 +                if (((a instanceof jl_Float343) == 0)) {
126.7095 +                    if (((a instanceof jl_Double340) == 0)) {
126.7096 +                        return a;
126.7097 +                    }
126.7098 +                    return jl_Double340_toString416(jl_Double340_doubleValue341($rt_nullCheck(a)));
126.7099 +                }
126.7100 +                return jl_Float343_toString417(jl_Float343_floatValue344($rt_nullCheck(a)));
126.7101 +            }
126.7102 +            return jl_Long331_toString418($rt_nullCheck(a).longValue332());
126.7103 +        }
126.7104 +        if ((jl_Boolean327_booleanValue409($rt_nullCheck(a)) == 0)) {
126.7105 +            a = $rt_str("false");
126.7106 +        } else {
126.7107 +            a = $rt_str("true");
126.7108 +        }
126.7109 +        return a;
126.7110 +    }
126.7111 +    onhji_JSON40_charValue353 = function(a) {
126.7112 +        var b;
126.7113 +        if (((a instanceof jl_Number325) == 0)) {
126.7114 +            if (((a instanceof jl_Boolean327) == 0)) {
126.7115 +                if (((a instanceof jl_String3) == 0)) {
126.7116 +                    return a;
126.7117 +                }
126.7118 +                b = $rt_nullCheck(a);
126.7119 +                if ((jl_String3_isEmpty184(b) == 0)) {
126.7120 +                    a = jl_String3_charAt176(b, 0);
126.7121 +                } else {
126.7122 +                    a = 0;
126.7123 +                }
126.7124 +                return jl_Character187_valueOf253(a);
126.7125 +            }
126.7126 +            if ((jl_Boolean327_booleanValue409($rt_nullCheck(a)) == 0)) {
126.7127 +                a = 0;
126.7128 +            } else {
126.7129 +                a = 1;
126.7130 +            }
126.7131 +            return jl_Character187_valueOf253(a);
126.7132 +        }
126.7133 +        return jl_Character187_valueOf253(jl_Character187_toChars249($rt_nullCheck(onhji_JSON40_numberValue348(a)).intValue87()).data[0]);
126.7134 +    }
126.7135 +    onhji_JSON40_findProto403 = function(a) {
126.7136 +        var b;
126.7137 +        b = onhji_JSON40_findType393($rt_cls($rt_nullCheck(a).constructor));
126.7138 +        if ((b !== null)) {
126.7139 +            return onhji_PropertyBindingAccessor404_protoFor419(b, a);
126.7140 +        }
126.7141 +        return null;
126.7142 +    }
126.7143 +    onhji_JSON40_initClass396 = function(a) {
126.7144 +        var b;
126.7145 +        block1: {
126.7146 +            block2: {
126.7147 +                block3: {
126.7148 +                    block4: {
126.7149 +                        try {
126.7150 +                            b = $rt_nullCheck(a);
126.7151 +                            a = jl_Class0_getClassLoader420(b);
126.7152 +                        } catch ($e) {
126.7153 +                            $je = $e.$javaException;
126.7154 +                            if ($je && $je instanceof jl_Exception127) {
126.7155 +                                a = $je;
126.7156 +                                break block2;
126.7157 +                            } else if ($je && $je instanceof jl_SecurityException314) {
126.7158 +                                a = $je;
126.7159 +                                break block4;
126.7160 +                            } else {
126.7161 +                                throw $e;
126.7162 +                            }
126.7163 +                        }
126.7164 +                        try {
126.7165 +                            break block3;
126.7166 +                        } catch ($e) {
126.7167 +                            $je = $e.$javaException;
126.7168 +                            if ($je && $je instanceof jl_Exception127) {
126.7169 +                                a = $je;
126.7170 +                                break block2;
126.7171 +                            } else {
126.7172 +                                throw $e;
126.7173 +                            }
126.7174 +                        }
126.7175 +                    }
126.7176 +                    try {
126.7177 +                        a = null;
126.7178 +                    } catch ($e) {
126.7179 +                        $je = $e.$javaException;
126.7180 +                        if ($je && $je instanceof jl_Exception127) {
126.7181 +                            a = $je;
126.7182 +                            break block2;
126.7183 +                        } else {
126.7184 +                            throw $e;
126.7185 +                        }
126.7186 +                    }
126.7187 +                }
126.7188 +                block5: {
126.7189 +                    try {
126.7190 +                        if ((a === null)) {
126.7191 +                            break block5;
126.7192 +                        }
126.7193 +                    } catch ($e) {
126.7194 +                        $je = $e.$javaException;
126.7195 +                        if ($je && $je instanceof jl_Exception127) {
126.7196 +                            a = $je;
126.7197 +                            break block2;
126.7198 +                        } else {
126.7199 +                            throw $e;
126.7200 +                        }
126.7201 +                    }
126.7202 +                    try {
126.7203 +                        jl_Class0_forName421(jl_Class0_getName20(b), 1, a);
126.7204 +                    } catch ($e) {
126.7205 +                        $je = $e.$javaException;
126.7206 +                        if ($je && $je instanceof jl_Exception127) {
126.7207 +                            a = $je;
126.7208 +                            break block2;
126.7209 +                        } else {
126.7210 +                            throw $e;
126.7211 +                        }
126.7212 +                    }
126.7213 +                }
126.7214 +                try {
126.7215 +                    jl_Class0_newInstance422(b);
126.7216 +                } catch ($e) {
126.7217 +                    $je = $e.$javaException;
126.7218 +                    if ($je && $je instanceof jl_Exception127) {
126.7219 +                        a = $je;
126.7220 +                        break block2;
126.7221 +                    } else {
126.7222 +                        throw $e;
126.7223 +                    }
126.7224 +                }
126.7225 +                break block1;
126.7226 +            }
126.7227 +        }
126.7228 +        return;
126.7229 +    }
126.7230 +    onhji_JSON40_$clinit411();
126.7231 +}
126.7232 +$rt_methodStubs(onhji_JSON40_$clinit, ['onhji_JSON40_toModel388', 'onhji_JSON40_runInBrowser391', 'onhji_JSON40_findType393', 'onhji_JSON40_register318', 'onhji_JSON40_findTechnology390', 'onhji_JSON40_isNumeric402', 'onhji_JSON40_find41', 'onhji_JSON40_numberValue348', 'onhji_JSON40_$clinit411', 'onhji_JSON40_boolValue351', 'onhji_JSON40_$init415', 'onhji_JSON40_stringValue352', 'onhji_JSON40_charValue353', 'onhji_JSON40_findProto403', 'onhji_JSON40_initClass396']);
126.7233 +onhji_JSON40.$init415 = function() {
126.7234 +    var result = new onhji_JSON40();
126.7235 +    result.$init415();
126.7236 +    return result;
126.7237 +}
126.7238 +$rt_virtualMethods(onhji_JSON40,
126.7239 +    "$init415", function() { onhji_JSON40_$init415(this); });
126.7240 +function jl_NegativeArraySizeException300() {
126.7241 +}
126.7242 +$rt_declClass(jl_NegativeArraySizeException300, {
126.7243 +    name : "java.lang.NegativeArraySizeException",
126.7244 +    superclass : jl_RuntimeException131,
126.7245 +    clinit : function() { jl_NegativeArraySizeException300_$clinit(); } });
126.7246 +function jl_NegativeArraySizeException300_$clinit() {
126.7247 +    jl_NegativeArraySizeException300_$clinit = function(){};
126.7248 +    jl_NegativeArraySizeException300_$init301 = function($this) {
126.7249 +        jl_RuntimeException131_$init132($this);
126.7250 +        return;
126.7251 +    }
126.7252 +}
126.7253 +$rt_methodStubs(jl_NegativeArraySizeException300_$clinit, ['jl_NegativeArraySizeException300_$init301']);
126.7254 +jl_NegativeArraySizeException300.$init301 = function() {
126.7255 +    var result = new jl_NegativeArraySizeException300();
126.7256 +    result.$init301();
126.7257 +    return result;
126.7258 +}
126.7259 +$rt_virtualMethods(jl_NegativeArraySizeException300,
126.7260 +    "$init301", function() { jl_NegativeArraySizeException300_$init301(this); });
126.7261 +function jl_Number325() {
126.7262 +}
126.7263 +$rt_declClass(jl_Number325, {
126.7264 +    name : "java.lang.Number",
126.7265 +    interfaces : [ji_Serializable164],
126.7266 +    superclass : jl_Object7,
126.7267 +    clinit : function() { jl_Number325_$clinit(); } });
126.7268 +function jl_Number325_$clinit() {
126.7269 +    jl_Number325_$clinit = function(){};
126.7270 +    jl_Number325_$init423 = function($this) {
126.7271 +        jl_Object7_$init10($this);
126.7272 +        return;
126.7273 +    }
126.7274 +}
126.7275 +$rt_methodStubs(jl_Number325_$clinit, ['jl_Number325_$init423']);
126.7276 +function jl_Number325_shortValue335($this) {
126.7277 +    return ($rt_nullCheck($this).intValue87() & 65535);
126.7278 +}
126.7279 +function jl_Number325_byteValue338($this) {
126.7280 +    return ($rt_nullCheck($this).intValue87() & 255);
126.7281 +}
126.7282 +jl_Number325.$init423 = function() {
126.7283 +    var result = new jl_Number325();
126.7284 +    result.$init423();
126.7285 +    return result;
126.7286 +}
126.7287 +$rt_virtualMethods(jl_Number325,
126.7288 +    "$init423", function() { jl_Number325_$init423(this); },
126.7289 +    "shortValue335", function() { return jl_Number325_shortValue335(this); },
126.7290 +    "byteValue338", function() { return jl_Number325_byteValue338(this); });
126.7291 +function jl_Float343() {
126.7292 +    this.value424 = 0.0;
126.7293 +}
126.7294 +jl_Float343.NaN425 = 0.0;
126.7295 +jl_Float343.TYPE426 = null;
126.7296 +$rt_declClass(jl_Float343, {
126.7297 +    name : "java.lang.Float",
126.7298 +    interfaces : [jl_Comparable163],
126.7299 +    superclass : jl_Number325,
126.7300 +    clinit : function() { jl_Float343_$clinit(); } });
126.7301 +function jl_Float343_$clinit() {
126.7302 +    jl_Float343_$clinit = function(){};
126.7303 +    jl_Float343_isNaN427 = function(a) {
126.7304 +        return (isNaN(a) ? 1 : 0 );
126.7305 +    }
126.7306 +    jl_Float343_toString417 = function(a) {
126.7307 +        return jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append428($rt_nullCheck(jl_StringBuilder16.$init17()), a)));
126.7308 +    }
126.7309 +    jl_Float343_valueOf345 = function(a) {
126.7310 +        return jl_Float343.$init429(a);
126.7311 +    }
126.7312 +    jl_Float343_isInfinite430 = function(a) {
126.7313 +        return (isFinite(a) ? 0 : 1);
126.7314 +    }
126.7315 +    jl_Float343_$init429 = function($this, a) {
126.7316 +        jl_Number325_$init423($this);
126.7317 +        $this.value424 = a;
126.7318 +        return;
126.7319 +    }
126.7320 +    jl_Float343_compare431 = function(a, b) {
126.7321 +        if ((a <= b)) {
126.7322 +            if ((b >= a)) {
126.7323 +                a = 0;
126.7324 +            } else {
126.7325 +                a = -1;
126.7326 +            }
126.7327 +        } else {
126.7328 +            a = 1;
126.7329 +        }
126.7330 +        return a;
126.7331 +    }
126.7332 +    jl_Float343_getNaN432 = function() {
126.7333 +    }
126.7334 +    jl_Float343_$clinit433 = function() {
126.7335 +        jl_Float343.NaN425 = jl_Float343_getNaN432();
126.7336 +        jl_Float343.TYPE426 = $rt_cls($rt_floatcls());
126.7337 +        return;
126.7338 +    }
126.7339 +    jl_Float343_$clinit433();
126.7340 +}
126.7341 +$rt_methodStubs(jl_Float343_$clinit, ['jl_Float343_isNaN427', 'jl_Float343_toString417', 'jl_Float343_valueOf345', 'jl_Float343_isInfinite430', 'jl_Float343_$init429', 'jl_Float343_compare431', 'jl_Float343_getNaN432', 'jl_Float343_$clinit433']);
126.7342 +function jl_Float343_intValue87($this) {
126.7343 +    return ($this.value424 | 0);
126.7344 +}
126.7345 +function jl_Float343_floatValue344($this) {
126.7346 +    return $this.value424;
126.7347 +}
126.7348 +function jl_Float343_compareTo434($this, a) {
126.7349 +    return jl_Float343_compare431($this.value424, a.value424);
126.7350 +}
126.7351 +function jl_Float343_doubleValue341($this) {
126.7352 +    return $this.value424;
126.7353 +}
126.7354 +function jl_Float343_longValue332($this) {
126.7355 +    return Long_fromNumber($this.value424);
126.7356 +}
126.7357 +function jl_Float343_compareTo181($this, a) {
126.7358 +    return jl_Float343_compareTo434($rt_nullCheck($this), a);
126.7359 +}
126.7360 +jl_Float343.$init429 = function(a) {
126.7361 +    var result = new jl_Float343();
126.7362 +    result.$init429(a);
126.7363 +    return result;
126.7364 +}
126.7365 +$rt_virtualMethods(jl_Float343,
126.7366 +    "intValue87", function() { return jl_Float343_intValue87(this); },
126.7367 +    "floatValue344", function() { return jl_Float343_floatValue344(this); },
126.7368 +    "$init429", function(a) { jl_Float343_$init429(this, a); },
126.7369 +    "compareTo434", function(a) { return jl_Float343_compareTo434(this, a); },
126.7370 +    "doubleValue341", function() { return jl_Float343_doubleValue341(this); },
126.7371 +    "longValue332", function() { return jl_Float343_longValue332(this); },
126.7372 +    "compareTo181", function(a) { return jl_Float343_compareTo181(this, a); });
126.7373 +function jl_SecurityException314() {
126.7374 +}
126.7375 +$rt_declClass(jl_SecurityException314, {
126.7376 +    name : "java.lang.SecurityException",
126.7377 +    superclass : jl_RuntimeException131,
126.7378 +    clinit : function() { jl_SecurityException314_$clinit(); } });
126.7379 +function jl_SecurityException314_$clinit() {
126.7380 +    jl_SecurityException314_$clinit = function(){};
126.7381 +    jl_SecurityException314_$init435 = function($this) {
126.7382 +        jl_RuntimeException131_$init132($this);
126.7383 +        return;
126.7384 +    }
126.7385 +}
126.7386 +$rt_methodStubs(jl_SecurityException314_$clinit, ['jl_SecurityException314_$init435']);
126.7387 +jl_SecurityException314.$init435 = function() {
126.7388 +    var result = new jl_SecurityException314();
126.7389 +    result.$init435();
126.7390 +    return result;
126.7391 +}
126.7392 +$rt_virtualMethods(jl_SecurityException314,
126.7393 +    "$init435", function() { jl_SecurityException314_$init435(this); });
126.7394 +function oahjs_Proto321() {
126.7395 +    this.ko436 = null;
126.7396 +    this.context437 = null;
126.7397 +    this.obj438 = null;
126.7398 +    this.locked439 = false;
126.7399 +    this.type440 = null;
126.7400 +}
126.7401 +$rt_declClass(oahjs_Proto321, {
126.7402 +    name : "org.apidesign.html.json.spi.Proto",
126.7403 +    superclass : jl_Object7,
126.7404 +    clinit : function() { oahjs_Proto321_$clinit(); } });
126.7405 +function oahjs_Proto321_$clinit() {
126.7406 +    oahjs_Proto321_$clinit = function(){};
126.7407 +    oahjs_Proto321_$init350 = function($this, a, b, c) {
126.7408 +        jl_Object7_$init10($this);
126.7409 +        $this.obj438 = a;
126.7410 +        $this.type440 = b;
126.7411 +        $this.context437 = c;
126.7412 +        return;
126.7413 +    }
126.7414 +}
126.7415 +$rt_methodStubs(oahjs_Proto321_$clinit, ['oahjs_Proto321_$init350']);
126.7416 +function oahjs_Proto321_getBindings441($this) {
126.7417 +    return $this.ko436;
126.7418 +}
126.7419 +function oahjs_Proto321_createList442($this, a, b, c) {
126.7420 +    return onhji_JSONList76.$init443($this, a, b, c);
126.7421 +}
126.7422 +function oahjs_Proto321_runInBrowser444($this, a) {
126.7423 +    onhji_JSON40_runInBrowser391($this.context437, a);
126.7424 +    return;
126.7425 +}
126.7426 +function oahjs_Proto321_initBindings445($this) {
126.7427 +    var a, b, c, d, e;
126.7428 +    if (($this.ko436 === null)) {
126.7429 +        a = onhji_Bindings406_apply446($this.context437, $this.obj438);
126.7430 +        b = $rt_createArray(oahjs_PropertyBinding21, oahjs_Proto$Type36_access$200323($this.type440).data.length);
126.7431 +        c = 0;
126.7432 +        while (true) {
126.7433 +            d = b.data;
126.7434 +            if ((c >= d.length)) {
126.7435 +                break;
126.7436 +            }
126.7437 +            d[c] = onhji_Bindings406_registerProperty447($rt_nullCheck(a), oahjs_Proto$Type36_access$200323($this.type440).data[c], c, $this.obj438, $this.type440, $rt_byteToInt(oahjs_Proto$Type36_access$300312($this.type440).data[c]));
126.7438 +            c = ((c + 1) | 0);
126.7439 +        }
126.7440 +        c = $rt_createArray(oahjs_FunctionBinding448, oahjs_Proto$Type36_access$400322($this.type440).data.length);
126.7441 +        d = 0;
126.7442 +        while (true) {
126.7443 +            e = c.data;
126.7444 +            if ((d >= e.length)) {
126.7445 +                break;
126.7446 +            }
126.7447 +            e[d] = oahjs_FunctionBinding448_registerFunction449(oahjs_Proto$Type36_access$400322($this.type440).data[d], d, $this.obj438, $this.type440);
126.7448 +            d = ((d + 1) | 0);
126.7449 +        }
126.7450 +        $this.ko436 = a;
126.7451 +        onhji_Bindings406_finish450($rt_nullCheck(a), $this.obj438, b, c);
126.7452 +    }
126.7453 +    return $this.ko436;
126.7454 +}
126.7455 +function oahjs_Proto321_acquireLock451($this) {
126.7456 +    if (($this.locked439 == 0)) {
126.7457 +        $this.locked439 = 1;
126.7458 +        return;
126.7459 +    }
126.7460 +    $rt_throw(jl_IllegalStateException229.$init452());
126.7461 +}
126.7462 +function oahjs_Proto321_verifyUnlocked453($this) {
126.7463 +    if (($this.locked439 == 0)) {
126.7464 +        return;
126.7465 +    }
126.7466 +    $rt_throw(jl_IllegalStateException229.$init452());
126.7467 +}
126.7468 +function oahjs_Proto321_releaseLock454($this) {
126.7469 +    $this.locked439 = 0;
126.7470 +    return;
126.7471 +}
126.7472 +function oahjs_Proto321_onChange455($this, a) {
126.7473 +    var b, c;
126.7474 +    b = $this.type440;
126.7475 +    c = $this.obj438;
126.7476 +    $rt_nullCheck(b).onChange372(c, a);
126.7477 +    return;
126.7478 +}
126.7479 +function oahjs_Proto321_valueHasMutated456($this, a) {
126.7480 +    if (($this.ko436 !== null)) {
126.7481 +        onhji_Bindings406_valueHasMutated456($rt_nullCheck($this.ko436), a);
126.7482 +    }
126.7483 +    return;
126.7484 +}
126.7485 +function oahjs_Proto321_initTo457($this, a, b) {
126.7486 +    if (($this.ko436 === null)) {
126.7487 +        if (((a instanceof onhji_JSONList76) == 0)) {
126.7488 +            onhji_JSONList76_init458(a, b);
126.7489 +        } else {
126.7490 +            onhji_JSONList76_init459($rt_nullCheck(a), b);
126.7491 +        }
126.7492 +        return;
126.7493 +    }
126.7494 +    $rt_throw(jl_IllegalStateException229.$init452());
126.7495 +}
126.7496 +function oahjs_Proto321_applyBindings460($this) {
126.7497 +    onhji_Bindings406_applyBindings460($rt_nullCheck(oahjs_Proto321_initBindings445($rt_nullCheck($this))));
126.7498 +    return;
126.7499 +}
126.7500 +function oahjs_Proto321_toModel389($this, a, b) {
126.7501 +    return onhji_JSON40_toModel388($this.context437, a, b, null);
126.7502 +}
126.7503 +oahjs_Proto321.$init350 = function(a, b, c) {
126.7504 +    var result = new oahjs_Proto321();
126.7505 +    result.$init350(a, b, c);
126.7506 +    return result;
126.7507 +}
126.7508 +$rt_virtualMethods(oahjs_Proto321,
126.7509 +    "getBindings441", function() { return oahjs_Proto321_getBindings441(this); },
126.7510 +    "createList442", function(a, b, c) { return oahjs_Proto321_createList442(this, a, b, c); },
126.7511 +    "$init350", function(a, b, c) { oahjs_Proto321_$init350(this, a, b, c); },
126.7512 +    "runInBrowser444", function(a) { oahjs_Proto321_runInBrowser444(this, a); },
126.7513 +    "initBindings445", function() { return oahjs_Proto321_initBindings445(this); },
126.7514 +    "acquireLock451", function() { oahjs_Proto321_acquireLock451(this); },
126.7515 +    "verifyUnlocked453", function() { oahjs_Proto321_verifyUnlocked453(this); },
126.7516 +    "releaseLock454", function() { oahjs_Proto321_releaseLock454(this); },
126.7517 +    "onChange455", function(a) { oahjs_Proto321_onChange455(this, a); },
126.7518 +    "valueHasMutated456", function(a) { oahjs_Proto321_valueHasMutated456(this, a); },
126.7519 +    "initTo457", function(a, b) { oahjs_Proto321_initTo457(this, a, b); },
126.7520 +    "applyBindings460", function() { oahjs_Proto321_applyBindings460(this); },
126.7521 +    "toModel389", function(a, b) { return oahjs_Proto321_toModel389(this, a, b); });
126.7522 +function jl_Math147() {
126.7523 +}
126.7524 +jl_Math147.E461 = 0.0;
126.7525 +jl_Math147.PI462 = 0.0;
126.7526 +$rt_declClass(jl_Math147, {
126.7527 +    name : "java.lang.Math",
126.7528 +    superclass : jl_Object7,
126.7529 +    clinit : function() { jl_Math147_$clinit(); } });
126.7530 +function jl_Math147_$clinit() {
126.7531 +    jl_Math147_$clinit = function(){};
126.7532 +    jl_Math147_max463 = function(a, b) {
126.7533 +        if ((a > b)) {
126.7534 +            b = a;
126.7535 +        }
126.7536 +        return b;
126.7537 +    }
126.7538 +    jl_Math147_$clinit464 = function() {
126.7539 +        jl_Math147.E461 = 2.718281828459045;
126.7540 +        jl_Math147.PI462 = 3.141592653589793;
126.7541 +        return;
126.7542 +    }
126.7543 +    jl_Math147_min148 = function(a, b) {
126.7544 +        if ((a < b)) {
126.7545 +            b = a;
126.7546 +        }
126.7547 +        return b;
126.7548 +    }
126.7549 +    jl_Math147_$init465 = function($this) {
126.7550 +        jl_Object7_$init10($this);
126.7551 +        return;
126.7552 +    }
126.7553 +    jl_Math147_$clinit464();
126.7554 +}
126.7555 +$rt_methodStubs(jl_Math147_$clinit, ['jl_Math147_max463', 'jl_Math147_$clinit464', 'jl_Math147_min148', 'jl_Math147_$init465']);
126.7556 +jl_Math147.$init465 = function() {
126.7557 +    var result = new jl_Math147();
126.7558 +    result.$init465();
126.7559 +    return result;
126.7560 +}
126.7561 +$rt_virtualMethods(jl_Math147,
126.7562 +    "$init465", function() { jl_Math147_$init465(this); });
126.7563 +function oahbs_Fn466() {
126.7564 +    this.presenter467 = null;
126.7565 +}
126.7566 +oahbs_Fn466.LOADED468 = null;
126.7567 +$rt_declClass(oahbs_Fn466, {
126.7568 +    name : "org.apidesign.html.boot.spi.Fn",
126.7569 +    superclass : jl_Object7,
126.7570 +    clinit : function() { oahbs_Fn466_$clinit(); } });
126.7571 +function oahbs_Fn466_$clinit() {
126.7572 +    oahbs_Fn466_$clinit = function(){};
126.7573 +    oahbs_Fn466_$clinit469 = function() {
126.7574 +        oahbs_Fn466.LOADED468 = ju_HashMap394.$init412();
126.7575 +        return;
126.7576 +    }
126.7577 +    oahbs_Fn466_$init470 = function($this, a) {
126.7578 +        jl_Object7_$init10($this);
126.7579 +        $this.presenter467 = a;
126.7580 +        return;
126.7581 +    }
126.7582 +    oahbs_Fn466_$init471 = function($this) {
126.7583 +        oahbs_Fn466_$init470($this, null);
126.7584 +        return;
126.7585 +    }
126.7586 +    oahbs_Fn466_activate472 = function(a) {
126.7587 +        return onhbi_FnContext473_activate474(a);
126.7588 +    }
126.7589 +    oahbs_Fn466_activePresenter475 = function() {
126.7590 +        return onhbi_FnContext473_currentPresenter476(0);
126.7591 +    }
126.7592 +    oahbs_Fn466_$clinit469();
126.7593 +}
126.7594 +$rt_methodStubs(oahbs_Fn466_$clinit, ['oahbs_Fn466_$clinit469', 'oahbs_Fn466_$init470', 'oahbs_Fn466_$init471', 'oahbs_Fn466_activate472', 'oahbs_Fn466_activePresenter475']);
126.7595 +oahbs_Fn466.$init470 = function(a) {
126.7596 +    var result = new oahbs_Fn466();
126.7597 +    result.$init470(a);
126.7598 +    return result;
126.7599 +}
126.7600 +oahbs_Fn466.$init471 = function() {
126.7601 +    var result = new oahbs_Fn466();
126.7602 +    result.$init471();
126.7603 +    return result;
126.7604 +}
126.7605 +$rt_virtualMethods(oahbs_Fn466,
126.7606 +    "$init470", function(a) { oahbs_Fn466_$init470(this, a); },
126.7607 +    "$init471", function() { oahbs_Fn466_$init471(this); });
126.7608 +function ji_Flushable477() {
126.7609 +}
126.7610 +$rt_declClass(ji_Flushable477, {
126.7611 +    name : "java.io.Flushable",
126.7612 +    superclass : jl_Object7 });
126.7613 +function jl_NullPointerException8() {
126.7614 +}
126.7615 +$rt_declClass(jl_NullPointerException8, {
126.7616 +    name : "java.lang.NullPointerException",
126.7617 +    superclass : jl_RuntimeException131,
126.7618 +    clinit : function() { jl_NullPointerException8_$clinit(); } });
126.7619 +function jl_NullPointerException8_$clinit() {
126.7620 +    jl_NullPointerException8_$clinit = function(){};
126.7621 +    jl_NullPointerException8_$init9 = function($this) {
126.7622 +        jl_RuntimeException131_$init132($this);
126.7623 +        return;
126.7624 +    }
126.7625 +}
126.7626 +$rt_methodStubs(jl_NullPointerException8_$clinit, ['jl_NullPointerException8_$init9']);
126.7627 +jl_NullPointerException8.$init9 = function() {
126.7628 +    var result = new jl_NullPointerException8();
126.7629 +    result.$init9();
126.7630 +    return result;
126.7631 +}
126.7632 +$rt_virtualMethods(jl_NullPointerException8,
126.7633 +    "$init9", function() { jl_NullPointerException8_$init9(this); });
126.7634 +function oadm_Mines49() {
126.7635 +    this.prop_rows478 = null;
126.7636 +    this.prop_state479 = null;
126.7637 +    this.proto480 = null;
126.7638 +}
126.7639 +oadm_Mines49.TYPE481 = null;
126.7640 +$rt_declClass(oadm_Mines49, {
126.7641 +    name : "org.apidesign.demo.minesweeper.Mines",
126.7642 +    interfaces : [jl_Cloneable262],
126.7643 +    superclass : jl_Object7,
126.7644 +    clinit : function() { oadm_Mines49_$clinit(); } });
126.7645 +function oadm_Mines49_$clinit() {
126.7646 +    oadm_Mines49_$clinit = function(){};
126.7647 +    oadm_Mines49_access$200365 = function(a, b, c) {
126.7648 +        oadm_Mines49_showHelp482(a, b, c);
126.7649 +        return;
126.7650 +    }
126.7651 +    oadm_Mines49_access$500368 = function(a, b, c) {
126.7652 +        oadm_Mines49_giveUp483(a, b, c);
126.7653 +        return;
126.7654 +    }
126.7655 +    oadm_Mines49_access$300366 = function(a, b, c) {
126.7656 +        oadm_Mines49_smallGame484(a, b, c);
126.7657 +        return;
126.7658 +    }
126.7659 +    oadm_Mines49_$clinit485 = function() {
126.7660 +        oadm_Mines49.TYPE481 = oadm_Mines$Html4JavaType356.$init358(null);
126.7661 +        return;
126.7662 +    }
126.7663 +    oadm_Mines49_$init486 = function($this, a) {
126.7664 +        jl_Object7_$init10($this);
126.7665 +        $this.proto480 = oahjs_Proto$Type36_createProto349($rt_nullCheck(oadm_Mines49.TYPE481), $this, a);
126.7666 +        $this.prop_rows478 = oahjs_Proto321_createList442($rt_nullCheck($this.proto480), $rt_str("rows"), -1, $rt_createArray(jl_String3, 0));
126.7667 +        return;
126.7668 +    }
126.7669 +    oadm_Mines49_access$100374 = function() {
126.7670 +        return oadm_Mines49.TYPE481;
126.7671 +    }
126.7672 +    oadm_Mines49_access$700371 = function(a) {
126.7673 +        return a.proto480;
126.7674 +    }
126.7675 +    oadm_Mines49_access$600369 = function(a, b, c) {
126.7676 +        oadm_Mines49_click487(a, b, c);
126.7677 +        return;
126.7678 +    }
126.7679 +    oadm_Mines49_$init93 = function($this) {
126.7680 +        oadm_Mines49_$init486($this, njh_BrwsrCtx488_findDefault489($rt_cls(oadm_Mines49)));
126.7681 +        return;
126.7682 +    }
126.7683 +    oadm_Mines49_access$400367 = function(a, b, c) {
126.7684 +        oadm_Mines49_normalGame490(a, b, c);
126.7685 +        return;
126.7686 +    }
126.7687 +    oadm_Mines49_$clinit485();
126.7688 +}
126.7689 +$rt_methodStubs(oadm_Mines49_$clinit, ['oadm_Mines49_access$200365', 'oadm_Mines49_access$500368', 'oadm_Mines49_access$300366', 'oadm_Mines49_$clinit485', 'oadm_Mines49_$init486', 'oadm_Mines49_access$100374', 'oadm_Mines49_access$700371', 'oadm_Mines49_access$600369', 'oadm_Mines49_$init93', 'oadm_Mines49_access$400367']);
126.7690 +function oadm_Mines49_showHelp482($this, a, b) {
126.7691 +    oadm_MinesModel43_showHelp105($this);
126.7692 +    return;
126.7693 +}
126.7694 +function oadm_Mines49_giveUp483($this, a, b) {
126.7695 +    oadm_MinesModel43_giveUp44($this);
126.7696 +    return;
126.7697 +}
126.7698 +function oadm_Mines49_getState99($this) {
126.7699 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto480));
126.7700 +    return $this.prop_state479;
126.7701 +}
126.7702 +function oadm_Mines49_normalGame490($this, a, b) {
126.7703 +    oadm_MinesModel43_normalGame51($this);
126.7704 +    return;
126.7705 +}
126.7706 +function oadm_Mines49_click487($this, a, b) {
126.7707 +    oadm_MinesModel43_click98($this, oahjs_Proto321_toModel389($rt_nullCheck($this.proto480), $rt_cls(oadm_Square62), a));
126.7708 +    return;
126.7709 +}
126.7710 +function oadm_Mines49_setState75($this, a) {
126.7711 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto480));
126.7712 +    if ((oahjs_Proto$Type36_isSame355($rt_nullCheck(oadm_Mines49.TYPE481), $this.prop_state479, a) == 0)) {
126.7713 +        $this.prop_state479 = a;
126.7714 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto480), $rt_str("state"));
126.7715 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto480), $rt_str("fieldShowing"));
126.7716 +        return;
126.7717 +    }
126.7718 +    return;
126.7719 +}
126.7720 +function oadm_Mines49_applyBindings94($this) {
126.7721 +    oahjs_Proto321_applyBindings460($rt_nullCheck($this.proto480));
126.7722 +    return $this;
126.7723 +}
126.7724 +function oadm_Mines49_computeMines106($this) {
126.7725 +    var a, b;
126.7726 +    a = $this.proto480;
126.7727 +    b = oadm_Mines$2491.$init492($this);
126.7728 +    oahjs_Proto321_runInBrowser444($rt_nullCheck(a), b);
126.7729 +    return;
126.7730 +}
126.7731 +function oadm_Mines49_init50($this, a, b, c) {
126.7732 +    var d, e;
126.7733 +    d = $this.proto480;
126.7734 +    e = oadm_Mines$1375.$init380($this, a, b, c);
126.7735 +    oahjs_Proto321_runInBrowser444($rt_nullCheck(d), e);
126.7736 +    return;
126.7737 +}
126.7738 +function oadm_Mines49_smallGame484($this, a, b) {
126.7739 +    oadm_MinesModel43_smallGame48($this);
126.7740 +    return;
126.7741 +}
126.7742 +function oadm_Mines49_isFieldShowing364($this) {
126.7743 +    var a, b;
126.7744 +    a = oadm_Mines49_getState99($rt_nullCheck($this));
126.7745 +    block1: {
126.7746 +        try {
126.7747 +            oahjs_Proto321_acquireLock451($rt_nullCheck($this.proto480));
126.7748 +            a = oadm_MinesModel43_fieldShowing91(a);
126.7749 +        } catch ($e) {
126.7750 +            $je = $e.$javaException;
126.7751 +            if ($je) {
126.7752 +                b = $je;
126.7753 +                break block1;
126.7754 +            } else {
126.7755 +                throw $e;
126.7756 +            }
126.7757 +        }
126.7758 +        oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto480));
126.7759 +        return a;
126.7760 +    }
126.7761 +    oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto480));
126.7762 +    $rt_throw(b);
126.7763 +}
126.7764 +function oadm_Mines49_getRows53($this) {
126.7765 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto480));
126.7766 +    return $this.prop_rows478;
126.7767 +}
126.7768 +oadm_Mines49.$init486 = function(a) {
126.7769 +    var result = new oadm_Mines49();
126.7770 +    result.$init486(a);
126.7771 +    return result;
126.7772 +}
126.7773 +oadm_Mines49.$init93 = function() {
126.7774 +    var result = new oadm_Mines49();
126.7775 +    result.$init93();
126.7776 +    return result;
126.7777 +}
126.7778 +$rt_virtualMethods(oadm_Mines49,
126.7779 +    "showHelp482", function(a, b) { oadm_Mines49_showHelp482(this, a, b); },
126.7780 +    "giveUp483", function(a, b) { oadm_Mines49_giveUp483(this, a, b); },
126.7781 +    "getState99", function() { return oadm_Mines49_getState99(this); },
126.7782 +    "normalGame490", function(a, b) { oadm_Mines49_normalGame490(this, a, b); },
126.7783 +    "click487", function(a, b) { oadm_Mines49_click487(this, a, b); },
126.7784 +    "setState75", function(a) { oadm_Mines49_setState75(this, a); },
126.7785 +    "applyBindings94", function() { return oadm_Mines49_applyBindings94(this); },
126.7786 +    "computeMines106", function() { oadm_Mines49_computeMines106(this); },
126.7787 +    "$init486", function(a) { oadm_Mines49_$init486(this, a); },
126.7788 +    "init50", function(a, b, c) { oadm_Mines49_init50(this, a, b, c); },
126.7789 +    "$init93", function() { oadm_Mines49_$init93(this); },
126.7790 +    "smallGame484", function(a, b) { oadm_Mines49_smallGame484(this, a, b); },
126.7791 +    "isFieldShowing364", function() { return oadm_Mines49_isFieldShowing364(this); },
126.7792 +    "getRows53", function() { return oadm_Mines49_getRows53(this); });
126.7793 +function jl_ReflectiveOperationException493() {
126.7794 +}
126.7795 +$rt_declClass(jl_ReflectiveOperationException493, {
126.7796 +    name : "java.lang.ReflectiveOperationException",
126.7797 +    superclass : jl_Exception127,
126.7798 +    clinit : function() { jl_ReflectiveOperationException493_$clinit(); } });
126.7799 +function jl_ReflectiveOperationException493_$clinit() {
126.7800 +    jl_ReflectiveOperationException493_$clinit = function(){};
126.7801 +    jl_ReflectiveOperationException493_$init494 = function($this) {
126.7802 +        jl_Exception127_$init128($this);
126.7803 +        return;
126.7804 +    }
126.7805 +}
126.7806 +$rt_methodStubs(jl_ReflectiveOperationException493_$clinit, ['jl_ReflectiveOperationException493_$init494']);
126.7807 +jl_ReflectiveOperationException493.$init494 = function() {
126.7808 +    var result = new jl_ReflectiveOperationException493();
126.7809 +    result.$init494();
126.7810 +    return result;
126.7811 +}
126.7812 +$rt_virtualMethods(jl_ReflectiveOperationException493,
126.7813 +    "$init494", function() { jl_ReflectiveOperationException493_$init494(this); });
126.7814 +function onhji_PropertyBindingAccessor404() {
126.7815 +}
126.7816 +onhji_PropertyBindingAccessor404.DEFAULT495 = null;
126.7817 +$rt_declClass(onhji_PropertyBindingAccessor404, {
126.7818 +    name : "org.netbeans.html.json.impl.PropertyBindingAccessor",
126.7819 +    superclass : jl_Object7,
126.7820 +    clinit : function() { onhji_PropertyBindingAccessor404_$clinit(); } });
126.7821 +function onhji_PropertyBindingAccessor404_$clinit() {
126.7822 +    onhji_PropertyBindingAccessor404_$clinit = function(){};
126.7823 +    onhji_PropertyBindingAccessor404_$clinit496 = function() {
126.7824 +        onhji_JSON40_initClass396($rt_cls(oahjs_PropertyBinding21));
126.7825 +        return;
126.7826 +    }
126.7827 +    onhji_PropertyBindingAccessor404_create497 = function(a, b, c, d, e, f) {
126.7828 +        return oahjs_PropertyBinding$123_newBinding498($rt_nullCheck(onhji_PropertyBindingAccessor404.DEFAULT495), a, b, c, d, e, f);
126.7829 +    }
126.7830 +    onhji_PropertyBindingAccessor404_$init499 = function($this) {
126.7831 +        jl_Object7_$init10($this);
126.7832 +        if ((onhji_PropertyBindingAccessor404.DEFAULT495 === null)) {
126.7833 +            onhji_PropertyBindingAccessor404.DEFAULT495 = $this;
126.7834 +            return;
126.7835 +        }
126.7836 +        $rt_throw(jl_IllegalStateException229.$init452());
126.7837 +    }
126.7838 +    onhji_PropertyBindingAccessor404_protoFor419 = function(a, b) {
126.7839 +        return oahjs_PropertyBinding$123_findProto500($rt_nullCheck(onhji_PropertyBindingAccessor404.DEFAULT495), a, b);
126.7840 +    }
126.7841 +    onhji_PropertyBindingAccessor404_getBindings405 = function(a, b) {
126.7842 +        return oahjs_PropertyBinding$123_bindings501($rt_nullCheck(onhji_PropertyBindingAccessor404.DEFAULT495), a, b);
126.7843 +    }
126.7844 +    onhji_PropertyBindingAccessor404_notifyProtoChange502 = function(a, b) {
126.7845 +        oahjs_PropertyBinding$123_notifyChange503($rt_nullCheck(onhji_PropertyBindingAccessor404.DEFAULT495), a, b);
126.7846 +        return;
126.7847 +    }
126.7848 +    onhji_PropertyBindingAccessor404_$clinit496();
126.7849 +}
126.7850 +$rt_methodStubs(onhji_PropertyBindingAccessor404_$clinit, ['onhji_PropertyBindingAccessor404_$clinit496', 'onhji_PropertyBindingAccessor404_create497', 'onhji_PropertyBindingAccessor404_$init499', 'onhji_PropertyBindingAccessor404_protoFor419', 'onhji_PropertyBindingAccessor404_getBindings405', 'onhji_PropertyBindingAccessor404_notifyProtoChange502']);
126.7851 +onhji_PropertyBindingAccessor404.$init499 = function() {
126.7852 +    var result = new onhji_PropertyBindingAccessor404();
126.7853 +    result.$init499();
126.7854 +    return result;
126.7855 +}
126.7856 +$rt_virtualMethods(onhji_PropertyBindingAccessor404,
126.7857 +    "$init499", function() { onhji_PropertyBindingAccessor404_$init499(this); });
126.7858 +function ju_ServiceLoader283() {
126.7859 +    this.services504 = null;
126.7860 +}
126.7861 +$rt_declClass(ju_ServiceLoader283, {
126.7862 +    name : "java.util.ServiceLoader",
126.7863 +    interfaces : [jl_Iterable218],
126.7864 +    superclass : jl_Object7,
126.7865 +    clinit : function() { ju_ServiceLoader283_$clinit(); } });
126.7866 +function ju_ServiceLoader283_$clinit() {
126.7867 +    ju_ServiceLoader283_$clinit = function(){};
126.7868 +    ju_ServiceLoader283_loadServices505 = function(a) {
126.7869 +        if (!ju_ServiceLoader283.$$services$$) {
126.7870 +            ju_ServiceLoader283$$services$$ = true;
126.7871 +            oahcs_Contexts$Provider506.$$serviceList$$ = [[onhk_KO4J507, onhk_KO4J507_$init508]];
126.7872 +        }
126.7873 +        var cls = a.$data;
126.7874 +        if (!cls.$$serviceList$$) {
126.7875 +            return $rt_createArray($rt_objcls(), 0);
126.7876 +        }
126.7877 +        var result = $rt_createArray($rt_objcls(), cls.$$serviceList$$.length);
126.7878 +        for (var i = 0; i < result.data.length; ++i) {
126.7879 +            var serviceDesc = cls.$$serviceList$$[i];
126.7880 +            result.data[i] = new serviceDesc[0]();
126.7881 +            serviceDesc[1](result.data[i]);
126.7882 +        }
126.7883 +        return result;
126.7884 +    }
126.7885 +    ju_ServiceLoader283_access$000284 = function(a) {
126.7886 +        return a.services504;
126.7887 +    }
126.7888 +    ju_ServiceLoader283_load509 = function(a) {
126.7889 +        return ju_ServiceLoader283.$init510(ju_ServiceLoader283_loadServices505(a));
126.7890 +    }
126.7891 +    ju_ServiceLoader283_load511 = function(a, b) {
126.7892 +        return ju_ServiceLoader283_load509(a);
126.7893 +    }
126.7894 +    ju_ServiceLoader283_$init510 = function($this, a) {
126.7895 +        jl_Object7_$init10($this);
126.7896 +        $this.services504 = a;
126.7897 +        return;
126.7898 +    }
126.7899 +}
126.7900 +$rt_methodStubs(ju_ServiceLoader283_$clinit, ['ju_ServiceLoader283_loadServices505', 'ju_ServiceLoader283_access$000284', 'ju_ServiceLoader283_load509', 'ju_ServiceLoader283_load511', 'ju_ServiceLoader283_$init510']);
126.7901 +function ju_ServiceLoader283_iterator107($this) {
126.7902 +    return ju_ServiceLoader$1279.$init282($this);
126.7903 +}
126.7904 +ju_ServiceLoader283.$init510 = function(a) {
126.7905 +    var result = new ju_ServiceLoader283();
126.7906 +    result.$init510(a);
126.7907 +    return result;
126.7908 +}
126.7909 +$rt_virtualMethods(ju_ServiceLoader283,
126.7910 +    "iterator107", function() { return ju_ServiceLoader283_iterator107(this); },
126.7911 +    "$init510", function(a) { ju_ServiceLoader283_$init510(this, a); });
126.7912 +function jl_ClassLoader512() {
126.7913 +    this.parent513 = null;
126.7914 +}
126.7915 +jl_ClassLoader512.systemClassLoader514 = null;
126.7916 +$rt_declClass(jl_ClassLoader512, {
126.7917 +    name : "java.lang.ClassLoader",
126.7918 +    superclass : jl_Object7,
126.7919 +    clinit : function() { jl_ClassLoader512_$clinit(); } });
126.7920 +function jl_ClassLoader512_$clinit() {
126.7921 +    jl_ClassLoader512_$clinit = function(){};
126.7922 +    jl_ClassLoader512_$init515 = function($this, a) {
126.7923 +        jl_Object7_$init10($this);
126.7924 +        $this.parent513 = a;
126.7925 +        return;
126.7926 +    }
126.7927 +    jl_ClassLoader512_$clinit516 = function() {
126.7928 +        jl_ClassLoader512.systemClassLoader514 = jl_SystemClassLoader517.$init518();
126.7929 +        return;
126.7930 +    }
126.7931 +    jl_ClassLoader512_$init519 = function($this) {
126.7932 +        jl_ClassLoader512_$init515($this, null);
126.7933 +        return;
126.7934 +    }
126.7935 +    jl_ClassLoader512_getSystemClassLoader520 = function() {
126.7936 +        return jl_ClassLoader512.systemClassLoader514;
126.7937 +    }
126.7938 +    jl_ClassLoader512_$clinit516();
126.7939 +}
126.7940 +$rt_methodStubs(jl_ClassLoader512_$clinit, ['jl_ClassLoader512_$init515', 'jl_ClassLoader512_$clinit516', 'jl_ClassLoader512_$init519', 'jl_ClassLoader512_getSystemClassLoader520']);
126.7941 +jl_ClassLoader512.$init515 = function(a) {
126.7942 +    var result = new jl_ClassLoader512();
126.7943 +    result.$init515(a);
126.7944 +    return result;
126.7945 +}
126.7946 +jl_ClassLoader512.$init519 = function() {
126.7947 +    var result = new jl_ClassLoader512();
126.7948 +    result.$init519();
126.7949 +    return result;
126.7950 +}
126.7951 +$rt_virtualMethods(jl_ClassLoader512,
126.7952 +    "$init515", function(a) { jl_ClassLoader512_$init515(this, a); },
126.7953 +    "$init519", function() { jl_ClassLoader512_$init519(this); });
126.7954 +function oahjs_FunctionBinding448() {
126.7955 +}
126.7956 +$rt_declClass(oahjs_FunctionBinding448, {
126.7957 +    name : "org.apidesign.html.json.spi.FunctionBinding",
126.7958 +    superclass : jl_Object7,
126.7959 +    clinit : function() { oahjs_FunctionBinding448_$clinit(); } });
126.7960 +function oahjs_FunctionBinding448_$clinit() {
126.7961 +    oahjs_FunctionBinding448_$clinit = function(){};
126.7962 +    oahjs_FunctionBinding448_$init521 = function($this) {
126.7963 +        jl_Object7_$init10($this);
126.7964 +        return;
126.7965 +    }
126.7966 +    oahjs_FunctionBinding448_registerFunction449 = function(a, b, c, d) {
126.7967 +        return oahjs_FunctionBinding$Impl522.$init523(a, b, c, d);
126.7968 +    }
126.7969 +}
126.7970 +$rt_methodStubs(oahjs_FunctionBinding448_$clinit, ['oahjs_FunctionBinding448_$init521', 'oahjs_FunctionBinding448_registerFunction449']);
126.7971 +oahjs_FunctionBinding448.$init521 = function() {
126.7972 +    var result = new oahjs_FunctionBinding448();
126.7973 +    result.$init521();
126.7974 +    return result;
126.7975 +}
126.7976 +$rt_virtualMethods(oahjs_FunctionBinding448,
126.7977 +    "$init521", function() { oahjs_FunctionBinding448_$init521(this); });
126.7978 +function ji_OutputStream524() {
126.7979 +}
126.7980 +$rt_declClass(ji_OutputStream524, {
126.7981 +    name : "java.io.OutputStream",
126.7982 +    interfaces : [ji_Closeable215, ji_Flushable477],
126.7983 +    superclass : jl_Object7,
126.7984 +    clinit : function() { ji_OutputStream524_$clinit(); } });
126.7985 +function ji_OutputStream524_$clinit() {
126.7986 +    ji_OutputStream524_$clinit = function(){};
126.7987 +    ji_OutputStream524_$init525 = function($this) {
126.7988 +        jl_Object7_$init10($this);
126.7989 +        return;
126.7990 +    }
126.7991 +}
126.7992 +$rt_methodStubs(ji_OutputStream524_$clinit, ['ji_OutputStream524_$init525']);
126.7993 +function ji_OutputStream524_write526($this, a, b, c) {
126.7994 +    var d, e;
126.7995 +    d = 0;
126.7996 +    while ((d < c)) {
126.7997 +        e = ((b + 1) | 0);
126.7998 +        b = $rt_byteToInt(a.data[b]);
126.7999 +        $rt_nullCheck($this).write527(b);
126.8000 +        d = ((d + 1) | 0);
126.8001 +        b = e;
126.8002 +    }
126.8003 +    return;
126.8004 +}
126.8005 +ji_OutputStream524.$init525 = function() {
126.8006 +    var result = new ji_OutputStream524();
126.8007 +    result.$init525();
126.8008 +    return result;
126.8009 +}
126.8010 +$rt_virtualMethods(ji_OutputStream524,
126.8011 +    "$init525", function() { ji_OutputStream524_$init525(this); },
126.8012 +    "write526", function(a, b, c) { ji_OutputStream524_write526(this, a, b, c); });
126.8013 +function jl_ConsoleOutputStream_stdout528() {
126.8014 +}
126.8015 +$rt_declClass(jl_ConsoleOutputStream_stdout528, {
126.8016 +    name : "java.lang.ConsoleOutputStream_stdout",
126.8017 +    superclass : ji_OutputStream524,
126.8018 +    clinit : function() { jl_ConsoleOutputStream_stdout528_$clinit(); } });
126.8019 +function jl_ConsoleOutputStream_stdout528_$clinit() {
126.8020 +    jl_ConsoleOutputStream_stdout528_$clinit = function(){};
126.8021 +    jl_ConsoleOutputStream_stdout528_$init529 = function($this) {
126.8022 +        ji_OutputStream524_$init525($this);
126.8023 +        return;
126.8024 +    }
126.8025 +}
126.8026 +$rt_methodStubs(jl_ConsoleOutputStream_stdout528_$clinit, ['jl_ConsoleOutputStream_stdout528_$init529']);
126.8027 +function jl_ConsoleOutputStream_stdout528_write527($this, a) {
126.8028 +    $rt_putStdout(a);
126.8029 +}
126.8030 +jl_ConsoleOutputStream_stdout528.$init529 = function() {
126.8031 +    var result = new jl_ConsoleOutputStream_stdout528();
126.8032 +    result.$init529();
126.8033 +    return result;
126.8034 +}
126.8035 +$rt_virtualMethods(jl_ConsoleOutputStream_stdout528,
126.8036 +    "write527", function(a) { jl_ConsoleOutputStream_stdout528_write527(this, a); },
126.8037 +    "$init529", function() { jl_ConsoleOutputStream_stdout528_$init529(this); });
126.8038 +function ju_ArrayList54() {
126.8039 +    this.array530 = null;
126.8040 +    this.size531 = 0;
126.8041 +}
126.8042 +$rt_declClass(ju_ArrayList54, {
126.8043 +    name : "java.util.ArrayList",
126.8044 +    interfaces : [ji_Serializable164, jl_Cloneable262],
126.8045 +    superclass : ju_AbstractList66,
126.8046 +    clinit : function() { ju_ArrayList54_$clinit(); } });
126.8047 +function ju_ArrayList54_$clinit() {
126.8048 +    ju_ArrayList54_$clinit = function(){};
126.8049 +    ju_ArrayList54_$init61 = function($this, a) {
126.8050 +        ju_AbstractList66_$init221($this);
126.8051 +        $this.array530 = $rt_createArray(jl_Object7, a);
126.8052 +        return;
126.8053 +    }
126.8054 +    ju_ArrayList54_$init80 = function($this) {
126.8055 +        ju_ArrayList54_$init61($this, 10);
126.8056 +        return;
126.8057 +    }
126.8058 +}
126.8059 +$rt_methodStubs(ju_ArrayList54_$clinit, ['ju_ArrayList54_$init61', 'ju_ArrayList54_$init80']);
126.8060 +function ju_ArrayList54_checkIndexForAdd532($this, a) {
126.8061 +    if (((a >= 0) && (a <= $this.size531))) {
126.8062 +        return;
126.8063 +    }
126.8064 +    $rt_throw(jl_IndexOutOfBoundsException157.$init158());
126.8065 +}
126.8066 +function ju_ArrayList54_ensureCapacity533($this, a) {
126.8067 +    if (($this.array530.data.length < a)) {
126.8068 +        $this.array530 = ju_Arrays142_copyOf149($this.array530, (($this.array530.data.length + jl_Math147_min148(5, (($this.array530.data.length / 2) | 0))) | 0));
126.8069 +    }
126.8070 +    return;
126.8071 +}
126.8072 +function ju_ArrayList54_size55($this) {
126.8073 +    return $this.size531;
126.8074 +}
126.8075 +function ju_ArrayList54_clear77($this) {
126.8076 +    ju_Arrays142_fill153($this.array530, 0, $this.size531, null);
126.8077 +    $this.size531 = 0;
126.8078 +    return;
126.8079 +}
126.8080 +function ju_ArrayList54_set207($this, a, b) {
126.8081 +    var c;
126.8082 +    ju_ArrayList54_checkIndex534($this, a);
126.8083 +    c = $this.array530.data[a];
126.8084 +    $this.array530.data[a] = b;
126.8085 +    return c;
126.8086 +}
126.8087 +function ju_ArrayList54_add224($this, a, b) {
126.8088 +    var c, d, e, f;
126.8089 +    ju_ArrayList54_checkIndexForAdd532($this, a);
126.8090 +    c = (($this.size531 + 1) | 0);
126.8091 +    ju_ArrayList54_ensureCapacity533($rt_nullCheck($this), c);
126.8092 +    c = $this.size531;
126.8093 +    while ((c > a)) {
126.8094 +        d = $this.array530;
126.8095 +        e = $this.array530;
126.8096 +        f = ((c - 1) | 0);
126.8097 +        e = e.data[f];
126.8098 +        d.data[c] = e;
126.8099 +        c = ((c + -1) | 0);
126.8100 +    }
126.8101 +    $this.array530.data[a] = b;
126.8102 +    $this.size531 = (($this.size531 + 1) | 0);
126.8103 +    $this.modCount220 = (($this.modCount220 + 1) | 0);
126.8104 +    return;
126.8105 +}
126.8106 +function ju_ArrayList54_checkIndex534($this, a) {
126.8107 +    if (((a >= 0) && (a < $this.size531))) {
126.8108 +        return;
126.8109 +    }
126.8110 +    $rt_throw(jl_IndexOutOfBoundsException157.$init158());
126.8111 +}
126.8112 +function ju_ArrayList54_get58($this, a) {
126.8113 +    ju_ArrayList54_checkIndex534($this, a);
126.8114 +    return $this.array530.data[a];
126.8115 +}
126.8116 +ju_ArrayList54.$init61 = function(a) {
126.8117 +    var result = new ju_ArrayList54();
126.8118 +    result.$init61(a);
126.8119 +    return result;
126.8120 +}
126.8121 +ju_ArrayList54.$init80 = function() {
126.8122 +    var result = new ju_ArrayList54();
126.8123 +    result.$init80();
126.8124 +    return result;
126.8125 +}
126.8126 +$rt_virtualMethods(ju_ArrayList54,
126.8127 +    "$init61", function(a) { ju_ArrayList54_$init61(this, a); },
126.8128 +    "checkIndexForAdd532", function(a) { ju_ArrayList54_checkIndexForAdd532(this, a); },
126.8129 +    "ensureCapacity533", function(a) { ju_ArrayList54_ensureCapacity533(this, a); },
126.8130 +    "size55", function() { return ju_ArrayList54_size55(this); },
126.8131 +    "clear77", function() { ju_ArrayList54_clear77(this); },
126.8132 +    "set207", function(a, b) { return ju_ArrayList54_set207(this, a, b); },
126.8133 +    "add224", function(a, b) { ju_ArrayList54_add224(this, a, b); },
126.8134 +    "checkIndex534", function(a) { ju_ArrayList54_checkIndex534(this, a); },
126.8135 +    "get58", function(a) { return ju_ArrayList54_get58(this, a); },
126.8136 +    "$init80", function() { ju_ArrayList54_$init80(this); });
126.8137 +function jl_Long331() {
126.8138 +    this.value535 = Long_ZERO;
126.8139 +}
126.8140 +$rt_declClass(jl_Long331, {
126.8141 +    name : "java.lang.Long",
126.8142 +    superclass : jl_Number325,
126.8143 +    clinit : function() { jl_Long331_$clinit(); } });
126.8144 +function jl_Long331_$clinit() {
126.8145 +    jl_Long331_$clinit = function(){};
126.8146 +    jl_Long331_$init536 = function($this, a) {
126.8147 +        jl_Number325_$init423($this);
126.8148 +        $this.value535 = a;
126.8149 +        return;
126.8150 +    }
126.8151 +    jl_Long331_valueOf333 = function(a) {
126.8152 +        return jl_Long331.$init536(a);
126.8153 +    }
126.8154 +}
126.8155 +$rt_methodStubs(jl_Long331_$clinit, ['jl_Long331_$init536', 'jl_Long331_valueOf333']);
126.8156 +function jl_Long331_toString418($this, a) {
126.8157 +    return jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append537($rt_nullCheck(jl_StringBuilder16.$init17()), a)));
126.8158 +}
126.8159 +function jl_Long331_doubleValue341($this) {
126.8160 +    return Long_toNumber($this.value535);
126.8161 +}
126.8162 +function jl_Long331_intValue87($this) {
126.8163 +    return Long_toNumber($this.value535);
126.8164 +}
126.8165 +function jl_Long331_floatValue344($this) {
126.8166 +    return Long_toNumber($this.value535);
126.8167 +}
126.8168 +function jl_Long331_longValue332($this) {
126.8169 +    return $this.value535;
126.8170 +}
126.8171 +jl_Long331.$init536 = function(a) {
126.8172 +    var result = new jl_Long331();
126.8173 +    result.$init536(a);
126.8174 +    return result;
126.8175 +}
126.8176 +$rt_virtualMethods(jl_Long331,
126.8177 +    "toString418", function(a) { return jl_Long331_toString418(this, a); },
126.8178 +    "doubleValue341", function() { return jl_Long331_doubleValue341(this); },
126.8179 +    "$init536", function(a) { jl_Long331_$init536(this, a); },
126.8180 +    "intValue87", function() { return jl_Long331_intValue87(this); },
126.8181 +    "floatValue344", function() { return jl_Long331_floatValue344(this); },
126.8182 +    "longValue332", function() { return jl_Long331_longValue332(this); });
126.8183 +function ji_IOException538() {
126.8184 +}
126.8185 +$rt_declClass(ji_IOException538, {
126.8186 +    name : "java.io.IOException",
126.8187 +    superclass : jl_Exception127,
126.8188 +    clinit : function() { ji_IOException538_$clinit(); } });
126.8189 +function ji_IOException538_$clinit() {
126.8190 +    ji_IOException538_$clinit = function(){};
126.8191 +    ji_IOException538_$init539 = function($this) {
126.8192 +        jl_Exception127_$init128($this);
126.8193 +        return;
126.8194 +    }
126.8195 +}
126.8196 +$rt_methodStubs(ji_IOException538_$clinit, ['ji_IOException538_$init539']);
126.8197 +ji_IOException538.$init539 = function() {
126.8198 +    var result = new ji_IOException538();
126.8199 +    result.$init539();
126.8200 +    return result;
126.8201 +}
126.8202 +$rt_virtualMethods(ji_IOException538,
126.8203 +    "$init539", function() { ji_IOException538_$init539(this); });
126.8204 +function jul_LogRecord540() {
126.8205 +    this.message541 = null;
126.8206 +    this.threadID542 = Long_ZERO;
126.8207 +    this.level543 = null;
126.8208 +    this.parameters544 = null;
126.8209 +    this.millis545 = Long_ZERO;
126.8210 +    this.sequenceNumber546 = Long_ZERO;
126.8211 +}
126.8212 +jul_LogRecord540.sequenceNumberGenerator547 = Long_ZERO;
126.8213 +$rt_declClass(jul_LogRecord540, {
126.8214 +    name : "java.util.logging.LogRecord",
126.8215 +    interfaces : [ji_Serializable164],
126.8216 +    superclass : jl_Object7,
126.8217 +    clinit : function() { jul_LogRecord540_$clinit(); } });
126.8218 +function jul_LogRecord540_$clinit() {
126.8219 +    jul_LogRecord540_$clinit = function(){};
126.8220 +    jul_LogRecord540_$init548 = function($this, a, b) {
126.8221 +        jl_Object7_$init10($this);
126.8222 +        $this.level543 = a;
126.8223 +        $this.message541 = b;
126.8224 +        $this.millis545 = jl_System125_currentTimeMillis549();
126.8225 +        a = jul_LogRecord540.sequenceNumberGenerator547;
126.8226 +        jul_LogRecord540.sequenceNumberGenerator547 = Long_add(a, Long_fromInt(1));
126.8227 +        $this.sequenceNumber546 = a;
126.8228 +        $this.threadID542 = jl_Thread233_getId242($rt_nullCheck(jl_Thread233_currentThread239()));
126.8229 +        return;
126.8230 +    }
126.8231 +}
126.8232 +$rt_methodStubs(jul_LogRecord540_$clinit, ['jul_LogRecord540_$init548']);
126.8233 +function jul_LogRecord540_getParameters550($this) {
126.8234 +    return $this.parameters544;
126.8235 +}
126.8236 +function jul_LogRecord540_getLevel551($this) {
126.8237 +    return $this.level543;
126.8238 +}
126.8239 +function jul_LogRecord540_getMessage121($this) {
126.8240 +    return $this.message541;
126.8241 +}
126.8242 +jul_LogRecord540.$init548 = function(a, b) {
126.8243 +    var result = new jul_LogRecord540();
126.8244 +    result.$init548(a, b);
126.8245 +    return result;
126.8246 +}
126.8247 +$rt_virtualMethods(jul_LogRecord540,
126.8248 +    "getParameters550", function() { return jul_LogRecord540_getParameters550(this); },
126.8249 +    "$init548", function(a, b) { jul_LogRecord540_$init548(this, a, b); },
126.8250 +    "getLevel551", function() { return jul_LogRecord540_getLevel551(this); },
126.8251 +    "getMessage121", function() { return jul_LogRecord540_getMessage121(this); });
126.8252 +function oadm_Mines$2491() {
126.8253 +    this.this$0552 = null;
126.8254 +}
126.8255 +$rt_declClass(oadm_Mines$2491, {
126.8256 +    name : "org.apidesign.demo.minesweeper.Mines$2",
126.8257 +    interfaces : [jl_Runnable232],
126.8258 +    superclass : jl_Object7,
126.8259 +    clinit : function() { oadm_Mines$2491_$clinit(); } });
126.8260 +function oadm_Mines$2491_$clinit() {
126.8261 +    oadm_Mines$2491_$clinit = function(){};
126.8262 +    oadm_Mines$2491_$init492 = function($this, a) {
126.8263 +        $this.this$0552 = a;
126.8264 +        jl_Object7_$init10($this);
126.8265 +        return;
126.8266 +    }
126.8267 +}
126.8268 +$rt_methodStubs(oadm_Mines$2491_$clinit, ['oadm_Mines$2491_$init492']);
126.8269 +function oadm_Mines$2491_run381($this) {
126.8270 +    oadm_MinesModel43_computeMines79($this.this$0552);
126.8271 +    return;
126.8272 +}
126.8273 +oadm_Mines$2491.$init492 = function(a) {
126.8274 +    var result = new oadm_Mines$2491();
126.8275 +    result.$init492(a);
126.8276 +    return result;
126.8277 +}
126.8278 +$rt_virtualMethods(oadm_Mines$2491,
126.8279 +    "$init492", function(a) { oadm_Mines$2491_$init492(this, a); },
126.8280 +    "run381", function() { oadm_Mines$2491_run381(this); });
126.8281 +function ju_Comparator553() {
126.8282 +}
126.8283 +$rt_declClass(ju_Comparator553, {
126.8284 +    name : "java.util.Comparator",
126.8285 +    superclass : jl_Object7 });
126.8286 +function ju_HashMap$Entry554() {
126.8287 +    this.next555 = null;
126.8288 +    this.origKeyHash556 = 0;
126.8289 +}
126.8290 +$rt_declClass(ju_HashMap$Entry554, {
126.8291 +    name : "java.util.HashMap$Entry",
126.8292 +    superclass : ju_MapEntry263,
126.8293 +    clinit : function() { ju_HashMap$Entry554_$clinit(); } });
126.8294 +function ju_HashMap$Entry554_$clinit() {
126.8295 +    ju_HashMap$Entry554_$clinit = function(){};
126.8296 +    ju_HashMap$Entry554_$init557 = function($this, a, b) {
126.8297 +        ju_MapEntry263_$init266($this, a, null);
126.8298 +        $this.origKeyHash556 = b;
126.8299 +        return;
126.8300 +    }
126.8301 +}
126.8302 +$rt_methodStubs(ju_HashMap$Entry554_$clinit, ['ju_HashMap$Entry554_$init557']);
126.8303 +ju_HashMap$Entry554.$init557 = function(a, b) {
126.8304 +    var result = new ju_HashMap$Entry554();
126.8305 +    result.$init557(a, b);
126.8306 +    return result;
126.8307 +}
126.8308 +$rt_virtualMethods(ju_HashMap$Entry554,
126.8309 +    "$init557", function(a, b) { ju_HashMap$Entry554_$init557(this, a, b); });
126.8310 +function otcic_UTF16Helper169() {
126.8311 +}
126.8312 +$rt_declClass(otcic_UTF16Helper169, {
126.8313 +    name : "org.teavm.classlib.impl.charset.UTF16Helper",
126.8314 +    superclass : jl_Object7,
126.8315 +    clinit : function() { otcic_UTF16Helper169_$clinit(); } });
126.8316 +function otcic_UTF16Helper169_$clinit() {
126.8317 +    otcic_UTF16Helper169_$clinit = function(){};
126.8318 +    otcic_UTF16Helper169_$init558 = function($this) {
126.8319 +        jl_Object7_$init10($this);
126.8320 +        return;
126.8321 +    }
126.8322 +    otcic_UTF16Helper169_buildCodePoint189 = function(a, b) {
126.8323 +        return (((a & 1023) << 10) | (((b & 1023) + 65536) | 0));
126.8324 +    }
126.8325 +    otcic_UTF16Helper169_isLowSurrogate186 = function(a) {
126.8326 +        if (((a & 64512) != 56320)) {
126.8327 +            a = 0;
126.8328 +        } else {
126.8329 +            a = 1;
126.8330 +        }
126.8331 +        return a;
126.8332 +    }
126.8333 +    otcic_UTF16Helper169_isSurrogate559 = function(a) {
126.8334 +        if (((a & 63488) != 55296)) {
126.8335 +            a = 0;
126.8336 +        } else {
126.8337 +            a = 1;
126.8338 +        }
126.8339 +        return a;
126.8340 +    }
126.8341 +    otcic_UTF16Helper169_lowSurrogate171 = function(a) {
126.8342 +        return ((56320 | (a & 1023)) & 65535);
126.8343 +    }
126.8344 +    otcic_UTF16Helper169_highSurrogate170 = function(a) {
126.8345 +        return ((55296 | ((a >> 10) & 1023)) & 65535);
126.8346 +    }
126.8347 +    otcic_UTF16Helper169_isHighSurrogate185 = function(a) {
126.8348 +        if (((a & 64512) != 55296)) {
126.8349 +            a = 0;
126.8350 +        } else {
126.8351 +            a = 1;
126.8352 +        }
126.8353 +        return a;
126.8354 +    }
126.8355 +}
126.8356 +$rt_methodStubs(otcic_UTF16Helper169_$clinit, ['otcic_UTF16Helper169_$init558', 'otcic_UTF16Helper169_buildCodePoint189', 'otcic_UTF16Helper169_isLowSurrogate186', 'otcic_UTF16Helper169_isSurrogate559', 'otcic_UTF16Helper169_lowSurrogate171', 'otcic_UTF16Helper169_highSurrogate170', 'otcic_UTF16Helper169_isHighSurrogate185']);
126.8357 +otcic_UTF16Helper169.$init558 = function() {
126.8358 +    var result = new otcic_UTF16Helper169();
126.8359 +    result.$init558();
126.8360 +    return result;
126.8361 +}
126.8362 +$rt_virtualMethods(otcic_UTF16Helper169,
126.8363 +    "$init558", function() { otcic_UTF16Helper169_$init558(this); });
126.8364 +function ju_Random68() {
126.8365 +}
126.8366 +$rt_declClass(ju_Random68, {
126.8367 +    name : "java.util.Random",
126.8368 +    interfaces : [ji_Serializable164],
126.8369 +    superclass : jl_Object7,
126.8370 +    clinit : function() { ju_Random68_$clinit(); } });
126.8371 +function ju_Random68_$clinit() {
126.8372 +    ju_Random68_$clinit = function(){};
126.8373 +    ju_Random68_$init69 = function($this) {
126.8374 +        jl_Object7_$init10($this);
126.8375 +        return;
126.8376 +    }
126.8377 +    ju_Random68_random560 = function() {
126.8378 +        return Math.random();
126.8379 +    }
126.8380 +}
126.8381 +$rt_methodStubs(ju_Random68_$clinit, ['ju_Random68_$init69', 'ju_Random68_random560']);
126.8382 +function ju_Random68_nextInt70($this, a) {
126.8383 +    return ((ju_Random68_random560() * a) | 0);
126.8384 +}
126.8385 +ju_Random68.$init69 = function() {
126.8386 +    var result = new ju_Random68();
126.8387 +    result.$init69();
126.8388 +    return result;
126.8389 +}
126.8390 +$rt_virtualMethods(ju_Random68,
126.8391 +    "$init69", function() { ju_Random68_$init69(this); },
126.8392 +    "nextInt70", function(a) { return ju_Random68_nextInt70(this, a); });
126.8393 +function jl_UnsupportedOperationException222() {
126.8394 +}
126.8395 +$rt_declClass(jl_UnsupportedOperationException222, {
126.8396 +    name : "java.lang.UnsupportedOperationException",
126.8397 +    superclass : jl_RuntimeException131,
126.8398 +    clinit : function() { jl_UnsupportedOperationException222_$clinit(); } });
126.8399 +function jl_UnsupportedOperationException222_$clinit() {
126.8400 +    jl_UnsupportedOperationException222_$clinit = function(){};
126.8401 +    jl_UnsupportedOperationException222_$init223 = function($this) {
126.8402 +        jl_RuntimeException131_$init132($this);
126.8403 +        return;
126.8404 +    }
126.8405 +}
126.8406 +$rt_methodStubs(jl_UnsupportedOperationException222_$clinit, ['jl_UnsupportedOperationException222_$init223']);
126.8407 +jl_UnsupportedOperationException222.$init223 = function() {
126.8408 +    var result = new jl_UnsupportedOperationException222();
126.8409 +    result.$init223();
126.8410 +    return result;
126.8411 +}
126.8412 +$rt_virtualMethods(jl_UnsupportedOperationException222,
126.8413 +    "$init223", function() { jl_UnsupportedOperationException222_$init223(this); });
126.8414 +function oadm_MinesModel$1100() {
126.8415 +}
126.8416 +oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101 = null;
126.8417 +$rt_declClass(oadm_MinesModel$1100, {
126.8418 +    name : "org.apidesign.demo.minesweeper.MinesModel$1",
126.8419 +    superclass : jl_Object7,
126.8420 +    clinit : function() { oadm_MinesModel$1100_$clinit(); } });
126.8421 +function oadm_MinesModel$1100_$clinit() {
126.8422 +    oadm_MinesModel$1100_$clinit = function(){};
126.8423 +    oadm_MinesModel$1100_$clinit561 = function() {
126.8424 +        var a, b, c;
126.8425 +        oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101 = $rt_createIntArray(oadm_MinesModel$SquareType45_values562().data.length);
126.8426 +        block1: {
126.8427 +            block2: {
126.8428 +                try {
126.8429 +                    a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.8430 +                    oadm_MinesModel$SquareType45_$clinit();
126.8431 +                    b = jl_Enum102_ordinal103($rt_nullCheck(oadm_MinesModel$SquareType45.EXPLOSION47));
126.8432 +                    c = 1;
126.8433 +                    a.data[b] = c;
126.8434 +                } catch ($e) {
126.8435 +                    $je = $e.$javaException;
126.8436 +                    if ($je && $je instanceof jl_NoSuchFieldError216) {
126.8437 +                        a = $je;
126.8438 +                        break block2;
126.8439 +                    } else {
126.8440 +                        throw $e;
126.8441 +                    }
126.8442 +                }
126.8443 +                break block1;
126.8444 +            }
126.8445 +        }
126.8446 +        block3: {
126.8447 +            block4: {
126.8448 +                try {
126.8449 +                    a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.8450 +                    oadm_MinesModel$SquareType45_$clinit();
126.8451 +                    b = jl_Enum102_ordinal103($rt_nullCheck(oadm_MinesModel$SquareType45.UNKNOWN64));
126.8452 +                    c = 2;
126.8453 +                    a.data[b] = c;
126.8454 +                } catch ($e) {
126.8455 +                    $je = $e.$javaException;
126.8456 +                    if ($je && $je instanceof jl_NoSuchFieldError216) {
126.8457 +                        a = $je;
126.8458 +                        break block4;
126.8459 +                    } else {
126.8460 +                        throw $e;
126.8461 +                    }
126.8462 +                }
126.8463 +                break block3;
126.8464 +            }
126.8465 +        }
126.8466 +        block5: {
126.8467 +            block6: {
126.8468 +                try {
126.8469 +                    a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.8470 +                    oadm_MinesModel$SquareType45_$clinit();
126.8471 +                    b = jl_Enum102_ordinal103($rt_nullCheck(oadm_MinesModel$SquareType45.DISCOVERED90));
126.8472 +                    c = 3;
126.8473 +                    a.data[b] = c;
126.8474 +                } catch ($e) {
126.8475 +                    $je = $e.$javaException;
126.8476 +                    if ($je && $je instanceof jl_NoSuchFieldError216) {
126.8477 +                        a = $je;
126.8478 +                        break block6;
126.8479 +                    } else {
126.8480 +                        throw $e;
126.8481 +                    }
126.8482 +                }
126.8483 +                break block5;
126.8484 +            }
126.8485 +        }
126.8486 +        block7: {
126.8487 +            block8: {
126.8488 +                try {
126.8489 +                    a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.8490 +                    oadm_MinesModel$SquareType45_$clinit();
126.8491 +                    b = jl_Enum102_ordinal103($rt_nullCheck(oadm_MinesModel$SquareType45.N_085));
126.8492 +                    c = 4;
126.8493 +                    a.data[b] = c;
126.8494 +                } catch ($e) {
126.8495 +                    $je = $e.$javaException;
126.8496 +                    if ($je && $je instanceof jl_NoSuchFieldError216) {
126.8497 +                        a = $je;
126.8498 +                        break block8;
126.8499 +                    } else {
126.8500 +                        throw $e;
126.8501 +                    }
126.8502 +                }
126.8503 +                break block7;
126.8504 +            }
126.8505 +        }
126.8506 +        block9: {
126.8507 +            block10: {
126.8508 +                try {
126.8509 +                    a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.8510 +                    oadm_MinesModel$SquareType45_$clinit();
126.8511 +                    b = jl_Enum102_ordinal103($rt_nullCheck(oadm_MinesModel$SquareType45.N_8563));
126.8512 +                    c = 5;
126.8513 +                    a.data[b] = c;
126.8514 +                } catch ($e) {
126.8515 +                    $je = $e.$javaException;
126.8516 +                    if ($je && $je instanceof jl_NoSuchFieldError216) {
126.8517 +                        a = $je;
126.8518 +                        break block10;
126.8519 +                    } else {
126.8520 +                        throw $e;
126.8521 +                    }
126.8522 +                }
126.8523 +                break block9;
126.8524 +            }
126.8525 +        }
126.8526 +        return;
126.8527 +    }
126.8528 +    oadm_MinesModel$1100_$clinit561();
126.8529 +}
126.8530 +$rt_methodStubs(oadm_MinesModel$1100_$clinit, ['oadm_MinesModel$1100_$clinit561']);
126.8531 +function ju_AbstractList$1108() {
126.8532 +    this.index564 = 0;
126.8533 +    this.this$0565 = null;
126.8534 +    this.modCount566 = 0;
126.8535 +    this.size567 = 0;
126.8536 +}
126.8537 +$rt_declClass(ju_AbstractList$1108, {
126.8538 +    name : "java.util.AbstractList$1",
126.8539 +    interfaces : [ju_Iterator278],
126.8540 +    superclass : jl_Object7,
126.8541 +    clinit : function() { ju_AbstractList$1108_$clinit(); } });
126.8542 +function ju_AbstractList$1108_$clinit() {
126.8543 +    ju_AbstractList$1108_$clinit = function(){};
126.8544 +    ju_AbstractList$1108_$init225 = function($this, a) {
126.8545 +        $this.this$0565 = a;
126.8546 +        jl_Object7_$init10($this);
126.8547 +        $this.modCount566 = $this.this$0565.modCount220;
126.8548 +        $this.size567 = $rt_nullCheck($this.this$0565).size55();
126.8549 +        return;
126.8550 +    }
126.8551 +}
126.8552 +$rt_methodStubs(ju_AbstractList$1108_$clinit, ['ju_AbstractList$1108_$init225']);
126.8553 +function ju_AbstractList$1108_hasNext109($this) {
126.8554 +    var a;
126.8555 +    if (($this.index564 >= $this.size567)) {
126.8556 +        a = 0;
126.8557 +    } else {
126.8558 +        a = 1;
126.8559 +    }
126.8560 +    return a;
126.8561 +}
126.8562 +function ju_AbstractList$1108_next110($this) {
126.8563 +    var a, b;
126.8564 +    ju_AbstractList$1108_checkConcurrentModification568($this);
126.8565 +    a = $this.this$0565;
126.8566 +    b = $this.index564;
126.8567 +    $this.index564 = ((b + 1) | 0);
126.8568 +    return $rt_nullCheck(a).get58(b);
126.8569 +}
126.8570 +function ju_AbstractList$1108_checkConcurrentModification568($this) {
126.8571 +    if (($this.modCount566 >= $this.this$0565.modCount220)) {
126.8572 +        return;
126.8573 +    }
126.8574 +    $rt_throw(ju_ConcurrentModificationException569.$init570());
126.8575 +}
126.8576 +ju_AbstractList$1108.$init225 = function(a) {
126.8577 +    var result = new ju_AbstractList$1108();
126.8578 +    result.$init225(a);
126.8579 +    return result;
126.8580 +}
126.8581 +$rt_virtualMethods(ju_AbstractList$1108,
126.8582 +    "$init225", function(a) { ju_AbstractList$1108_$init225(this, a); },
126.8583 +    "hasNext109", function() { return ju_AbstractList$1108_hasNext109(this); },
126.8584 +    "next110", function() { return ju_AbstractList$1108_next110(this); },
126.8585 +    "checkConcurrentModification568", function() { ju_AbstractList$1108_checkConcurrentModification568(this); });
126.8586 +function onhk_Knockout571() {
126.8587 +}
126.8588 +$rt_declClass(onhk_Knockout571, {
126.8589 +    name : "org.netbeans.html.ko4j.Knockout",
126.8590 +    superclass : jl_Object7,
126.8591 +    clinit : function() { onhk_Knockout571_$clinit(); } });
126.8592 +function onhk_Knockout571_$clinit() {
126.8593 +    onhk_Knockout571_$clinit = function(){};
126.8594 +    onhk_Knockout571_wrapModel572 = function(a, b, c, d, e, f, g) {
126.8595 +        var result = (function(model, propNames, propReadOnly, propValues, propArr, funcNames, funcArr) {
126.8596 +            var ret = {};
126.8597 +ret['ko-fx.model'] = model;
126.8598 +function koComputed(name, readOnly, value, prop) {
126.8599 +  function realGetter() {
126.8600 +    try {
126.8601 +      var v = (function($this) { return oth_JavaScriptConv573_toJavaScript574($this.getValue38()); })(prop);
126.8602 +      return v;
126.8603 +    } catch (e) {
126.8604 +      alert("Cannot call getValue on " + model + " prop: " + name + " error: " + e);
126.8605 +    }
126.8606 +  }
126.8607 +  var activeGetter = function() { return value; };
126.8608 +  var bnd = {
126.8609 +    read: function() {
126.8610 +      var r = activeGetter();
126.8611 +      activeGetter = realGetter;
126.8612 +      return r == null ? null : r.valueOf();
126.8613 +    },
126.8614 +    owner: ret
126.8615 +  };
126.8616 +  if (!readOnly) {
126.8617 +    bnd.write = function(val) {
126.8618 +      (function($this, p0) { return oth_JavaScriptConv573_toJavaScript574($this.setValue35(oth_JavaScriptConv573_fromJavaScript575(p0, jl_Object7))); })(prop,val);
126.8619 +    };
126.8620 +  };
126.8621 +  ret[name] = ko.computed(bnd);
126.8622 +}
126.8623 +for (var i = 0; i < propNames.length; i++) {
126.8624 +  koComputed(propNames[i], propReadOnly[i], propValues[i], propArr[i]);
126.8625 +}
126.8626 +function koExpose(name, func) {
126.8627 +  ret[name] = function(data, ev) {
126.8628 +    (function($this, p0, p1) { return oth_JavaScriptConv573_toJavaScript574($this.call576(oth_JavaScriptConv573_fromJavaScript575(p0, jl_Object7), oth_JavaScriptConv573_fromJavaScript575(p1, jl_Object7))); })(func,data, ev);
126.8629 +  };
126.8630 +}
126.8631 +for (var i = 0; i < funcNames.length; i++) {
126.8632 +  koExpose(funcNames[i], funcArr[i]);
126.8633 +}
126.8634 +return ret;
126.8635 +
126.8636 +        }).call(null, oth_JavaScriptConv573_toJavaScript574(a), oth_JavaScriptConv573_toJavaScript574(b), oth_JavaScriptConv573_toJavaScript574(c), oth_JavaScriptConv573_toJavaScript574(d), oth_JavaScriptConv573_toJavaScript574(e), oth_JavaScriptConv573_toJavaScript574(f), oth_JavaScriptConv573_toJavaScript574(g));
126.8637 +        return oth_JavaScriptConv573_fromJavaScript575(result, jl_Object7);
126.8638 +    }
126.8639 +    onhk_Knockout571_toModel577 = function(a) {
126.8640 +        var result = (function(o) {
126.8641 +            return o['ko-fx.model'] ? o['ko-fx.model'] : o;
126.8642 +        }).call(null, oth_JavaScriptConv573_toJavaScript574(a));
126.8643 +        return oth_JavaScriptConv573_fromJavaScript575(result, jl_Object7);
126.8644 +    }
126.8645 +    onhk_Knockout571_$init578 = function($this) {
126.8646 +        jl_Object7_$init10($this);
126.8647 +        return;
126.8648 +    }
126.8649 +    onhk_Knockout571_applyBindings579 = function(a) {
126.8650 +        var result = (function(bindings) {
126.8651 +            ko.applyBindings(bindings);
126.8652 +
126.8653 +        }).call(null, oth_JavaScriptConv573_toJavaScript574(a));
126.8654 +        return oth_JavaScriptConv573_fromJavaScript575(result, $rt_voidcls());
126.8655 +    }
126.8656 +    onhk_Knockout571_valueHasMutated580 = function(a, b) {
126.8657 +        var result = (function(model, prop) {
126.8658 +            if (model) {
126.8659 +  var koProp = model[prop];
126.8660 +  if (koProp && koProp['valueHasMutated']) {
126.8661 +    koProp['valueHasMutated']();
126.8662 +  }
126.8663 +}
126.8664 +
126.8665 +        }).call(null, oth_JavaScriptConv573_toJavaScript574(a), oth_JavaScriptConv573_toJavaScript574(b));
126.8666 +        return oth_JavaScriptConv573_fromJavaScript575(result, $rt_voidcls());
126.8667 +    }
126.8668 +}
126.8669 +$rt_methodStubs(onhk_Knockout571_$clinit, ['onhk_Knockout571_wrapModel572', 'onhk_Knockout571_toModel577', 'onhk_Knockout571_$init578', 'onhk_Knockout571_applyBindings579', 'onhk_Knockout571_valueHasMutated580']);
126.8670 +onhk_Knockout571.$init578 = function() {
126.8671 +    var result = new onhk_Knockout571();
126.8672 +    result.$init578();
126.8673 +    return result;
126.8674 +}
126.8675 +$rt_virtualMethods(onhk_Knockout571,
126.8676 +    "$init578", function() { onhk_Knockout571_$init578(this); });
126.8677 +function jl_SystemClassLoader517() {
126.8678 +}
126.8679 +$rt_declClass(jl_SystemClassLoader517, {
126.8680 +    name : "java.lang.SystemClassLoader",
126.8681 +    superclass : jl_ClassLoader512,
126.8682 +    clinit : function() { jl_SystemClassLoader517_$clinit(); } });
126.8683 +function jl_SystemClassLoader517_$clinit() {
126.8684 +    jl_SystemClassLoader517_$clinit = function(){};
126.8685 +    jl_SystemClassLoader517_$init518 = function($this) {
126.8686 +        jl_ClassLoader512_$init519($this);
126.8687 +        return;
126.8688 +    }
126.8689 +}
126.8690 +$rt_methodStubs(jl_SystemClassLoader517_$clinit, ['jl_SystemClassLoader517_$init518']);
126.8691 +jl_SystemClassLoader517.$init518 = function() {
126.8692 +    var result = new jl_SystemClassLoader517();
126.8693 +    result.$init518();
126.8694 +    return result;
126.8695 +}
126.8696 +$rt_virtualMethods(jl_SystemClassLoader517,
126.8697 +    "$init518", function() { jl_SystemClassLoader517_$init518(this); });
126.8698 +function jul_Level581() {
126.8699 +    this.name582 = null;
126.8700 +    this.value583 = 0;
126.8701 +}
126.8702 +jul_Level581.CONFIG584 = null;
126.8703 +jul_Level581.FINE585 = null;
126.8704 +jul_Level581.FINEST586 = null;
126.8705 +jul_Level581.FINER587 = null;
126.8706 +jul_Level581.WARNING588 = null;
126.8707 +jul_Level581.SEVERE589 = null;
126.8708 +jul_Level581.OFF590 = null;
126.8709 +jul_Level581.INFO591 = null;
126.8710 +jul_Level581.ALL592 = null;
126.8711 +$rt_declClass(jul_Level581, {
126.8712 +    name : "java.util.logging.Level",
126.8713 +    interfaces : [ji_Serializable164],
126.8714 +    superclass : jl_Object7,
126.8715 +    clinit : function() { jul_Level581_$clinit(); } });
126.8716 +function jul_Level581_$clinit() {
126.8717 +    jul_Level581_$clinit = function(){};
126.8718 +    jul_Level581_$clinit593 = function() {
126.8719 +        jul_Level581.OFF590 = jul_Level581.$init594($rt_str("OFF"), 2147483647);
126.8720 +        jul_Level581.SEVERE589 = jul_Level581.$init594($rt_str("SEVERE"), 1000);
126.8721 +        jul_Level581.WARNING588 = jul_Level581.$init594($rt_str("WARNING"), 900);
126.8722 +        jul_Level581.INFO591 = jul_Level581.$init594($rt_str("INFO"), 800);
126.8723 +        jul_Level581.CONFIG584 = jul_Level581.$init594($rt_str("CONFIG"), 700);
126.8724 +        jul_Level581.FINE585 = jul_Level581.$init594($rt_str("FINE"), 500);
126.8725 +        jul_Level581.FINER587 = jul_Level581.$init594($rt_str("FINER"), 400);
126.8726 +        jul_Level581.FINEST586 = jul_Level581.$init594($rt_str("FINEST"), 300);
126.8727 +        jul_Level581.ALL592 = jul_Level581.$init594($rt_str("FINEST"), -2147483648);
126.8728 +        return;
126.8729 +    }
126.8730 +    jul_Level581_$init594 = function($this, a, b) {
126.8731 +        jl_Object7_$init10($this);
126.8732 +        $this.name582 = a;
126.8733 +        $this.value583 = b;
126.8734 +        return;
126.8735 +    }
126.8736 +    jul_Level581_$clinit593();
126.8737 +}
126.8738 +$rt_methodStubs(jul_Level581_$clinit, ['jul_Level581_$clinit593', 'jul_Level581_$init594']);
126.8739 +function jul_Level581_intValue87($this) {
126.8740 +    return $this.value583;
126.8741 +}
126.8742 +jul_Level581.$init594 = function(a, b) {
126.8743 +    var result = new jul_Level581();
126.8744 +    result.$init594(a, b);
126.8745 +    return result;
126.8746 +}
126.8747 +$rt_virtualMethods(jul_Level581,
126.8748 +    "intValue87", function() { return jul_Level581_intValue87(this); },
126.8749 +    "$init594", function(a, b) { jul_Level581_$init594(this, a, b); });
126.8750 +function jl_ConsoleOutputStream_stderr595() {
126.8751 +}
126.8752 +$rt_declClass(jl_ConsoleOutputStream_stderr595, {
126.8753 +    name : "java.lang.ConsoleOutputStream_stderr",
126.8754 +    superclass : ji_OutputStream524,
126.8755 +    clinit : function() { jl_ConsoleOutputStream_stderr595_$clinit(); } });
126.8756 +function jl_ConsoleOutputStream_stderr595_$clinit() {
126.8757 +    jl_ConsoleOutputStream_stderr595_$clinit = function(){};
126.8758 +    jl_ConsoleOutputStream_stderr595_$init596 = function($this) {
126.8759 +        ji_OutputStream524_$init525($this);
126.8760 +        return;
126.8761 +    }
126.8762 +}
126.8763 +$rt_methodStubs(jl_ConsoleOutputStream_stderr595_$clinit, ['jl_ConsoleOutputStream_stderr595_$init596']);
126.8764 +function jl_ConsoleOutputStream_stderr595_write527($this, a) {
126.8765 +    $rt_putStderr(a);
126.8766 +}
126.8767 +jl_ConsoleOutputStream_stderr595.$init596 = function() {
126.8768 +    var result = new jl_ConsoleOutputStream_stderr595();
126.8769 +    result.$init596();
126.8770 +    return result;
126.8771 +}
126.8772 +$rt_virtualMethods(jl_ConsoleOutputStream_stderr595,
126.8773 +    "write527", function(a) { jl_ConsoleOutputStream_stderr595_write527(this, a); },
126.8774 +    "$init596", function() { jl_ConsoleOutputStream_stderr595_$init596(this); });
126.8775 +function onhci_CtxAccssr597() {
126.8776 +}
126.8777 +onhci_CtxAccssr597.DEFAULT598 = null;
126.8778 +$rt_declClass(onhci_CtxAccssr597, {
126.8779 +    name : "org.netbeans.html.context.impl.CtxAccssr",
126.8780 +    superclass : jl_Object7,
126.8781 +    clinit : function() { onhci_CtxAccssr597_$clinit(); } });
126.8782 +function onhci_CtxAccssr597_$clinit() {
126.8783 +    onhci_CtxAccssr597_$clinit = function(){};
126.8784 +    onhci_CtxAccssr597_$clinit599 = function() {
126.8785 +        var a;
126.8786 +        block1: {
126.8787 +            block2: {
126.8788 +                try {
126.8789 +                    njh_BrwsrCtx488_$clinit();
126.8790 +                    $rt_cls($rt_nullCheck(njh_BrwsrCtx488.EMPTY600).constructor);
126.8791 +                } catch ($e) {
126.8792 +                    $je = $e.$javaException;
126.8793 +                    if ($je && $je instanceof jl_NullPointerException8) {
126.8794 +                        a = $je;
126.8795 +                        break block2;
126.8796 +                    } else {
126.8797 +                        throw $e;
126.8798 +                    }
126.8799 +                }
126.8800 +                break block1;
126.8801 +            }
126.8802 +        }
126.8803 +        return;
126.8804 +    }
126.8805 +    onhci_CtxAccssr597_$init601 = function($this) {
126.8806 +        jl_Object7_$init10($this);
126.8807 +        if ((onhci_CtxAccssr597.DEFAULT598 === null)) {
126.8808 +            onhci_CtxAccssr597.DEFAULT598 = $this;
126.8809 +            return;
126.8810 +        }
126.8811 +        $rt_throw(jl_IllegalStateException229.$init452());
126.8812 +    }
126.8813 +    onhci_CtxAccssr597_getDefault602 = function() {
126.8814 +        return onhci_CtxAccssr597.DEFAULT598;
126.8815 +    }
126.8816 +    onhci_CtxAccssr597_$clinit599();
126.8817 +}
126.8818 +$rt_methodStubs(onhci_CtxAccssr597_$clinit, ['onhci_CtxAccssr597_$clinit599', 'onhci_CtxAccssr597_$init601', 'onhci_CtxAccssr597_getDefault602']);
126.8819 +onhci_CtxAccssr597.$init601 = function() {
126.8820 +    var result = new onhci_CtxAccssr597();
126.8821 +    result.$init601();
126.8822 +    return result;
126.8823 +}
126.8824 +$rt_virtualMethods(onhci_CtxAccssr597,
126.8825 +    "$init601", function() { onhci_CtxAccssr597_$init601(this); });
126.8826 +function njh_BrwsrCtx$1603() {
126.8827 +}
126.8828 +$rt_declClass(njh_BrwsrCtx$1603, {
126.8829 +    name : "net.java.html.BrwsrCtx$1",
126.8830 +    superclass : onhci_CtxAccssr597,
126.8831 +    clinit : function() { njh_BrwsrCtx$1603_$clinit(); } });
126.8832 +function njh_BrwsrCtx$1603_$clinit() {
126.8833 +    njh_BrwsrCtx$1603_$clinit = function(){};
126.8834 +    njh_BrwsrCtx$1603_$init604 = function($this) {
126.8835 +        onhci_CtxAccssr597_$init601($this);
126.8836 +        return;
126.8837 +    }
126.8838 +}
126.8839 +$rt_methodStubs(njh_BrwsrCtx$1603_$clinit, ['njh_BrwsrCtx$1603_$init604']);
126.8840 +function njh_BrwsrCtx$1603_newContext605($this, a) {
126.8841 +    return njh_BrwsrCtx488.$init606(a, null);
126.8842 +}
126.8843 +function njh_BrwsrCtx$1603_find607($this, a) {
126.8844 +    return njh_BrwsrCtx488_access$100608(a);
126.8845 +}
126.8846 +njh_BrwsrCtx$1603.$init604 = function() {
126.8847 +    var result = new njh_BrwsrCtx$1603();
126.8848 +    result.$init604();
126.8849 +    return result;
126.8850 +}
126.8851 +$rt_virtualMethods(njh_BrwsrCtx$1603,
126.8852 +    "$init604", function() { njh_BrwsrCtx$1603_$init604(this); },
126.8853 +    "newContext605", function(a) { return njh_BrwsrCtx$1603_newContext605(this, a); },
126.8854 +    "find607", function(a) { return njh_BrwsrCtx$1603_find607(this, a); });
126.8855 +function jl_Enum102() {
126.8856 +    this.name609 = null;
126.8857 +    this.ordinal610 = 0;
126.8858 +}
126.8859 +$rt_declClass(jl_Enum102, {
126.8860 +    name : "java.lang.Enum",
126.8861 +    interfaces : [jl_Comparable163, ji_Serializable164],
126.8862 +    superclass : jl_Object7,
126.8863 +    clinit : function() { jl_Enum102_$clinit(); } });
126.8864 +function jl_Enum102_$clinit() {
126.8865 +    jl_Enum102_$clinit = function(){};
126.8866 +    jl_Enum102_$init611 = function($this, a, b) {
126.8867 +        jl_Object7_$init10($this);
126.8868 +        $this.name609 = a;
126.8869 +        $this.ordinal610 = b;
126.8870 +        return;
126.8871 +    }
126.8872 +}
126.8873 +$rt_methodStubs(jl_Enum102_$clinit, ['jl_Enum102_$init611']);
126.8874 +function jl_Enum102_compareTo181($this, a) {
126.8875 +    return jl_Enum102_compareTo612($rt_nullCheck($this), a);
126.8876 +}
126.8877 +function jl_Enum102_compareTo612($this, a) {
126.8878 +    var b, c;
126.8879 +    b = $rt_nullCheck(a);
126.8880 +    a = jl_Enum102_getDeclaringClass315(b);
126.8881 +    c = $rt_nullCheck($this);
126.8882 +    if ((a === jl_Enum102_getDeclaringClass315(c))) {
126.8883 +        return jl_Integer81_compare613($this.ordinal610, jl_Enum102_ordinal103(b));
126.8884 +    }
126.8885 +    $rt_throw(jl_IllegalArgumentException134.$init136(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("Can\'t compare "))), jl_String3_toString15($rt_nullCheck(jl_Class0_getName20($rt_nullCheck(jl_Enum102_getDeclaringClass315(c))))))), $rt_str(" to "))), jl_String3_toString15($rt_nullCheck(jl_Class0_getName20($rt_nullCheck(jl_Enum102_getDeclaringClass315(b))))))))));
126.8886 +}
126.8887 +function jl_Enum102_toString15($this) {
126.8888 +    return $this.name609;
126.8889 +}
126.8890 +function jl_Enum102_ordinal103($this) {
126.8891 +    return $this.ordinal610;
126.8892 +}
126.8893 +function jl_Enum102_equals13($this, a) {
126.8894 +    if (($this !== a)) {
126.8895 +        a = 0;
126.8896 +    } else {
126.8897 +        a = 1;
126.8898 +    }
126.8899 +    return a;
126.8900 +}
126.8901 +function jl_Enum102_getDeclaringClass315($this) {
126.8902 +    return $rt_cls($rt_nullCheck($this).constructor);
126.8903 +}
126.8904 +function jl_Enum102_name614($this) {
126.8905 +    return $this.name609;
126.8906 +}
126.8907 +jl_Enum102.$init611 = function(a, b) {
126.8908 +    var result = new jl_Enum102();
126.8909 +    result.$init611(a, b);
126.8910 +    return result;
126.8911 +}
126.8912 +$rt_virtualMethods(jl_Enum102,
126.8913 +    "compareTo181", function(a) { return jl_Enum102_compareTo181(this, a); },
126.8914 +    "compareTo612", function(a) { return jl_Enum102_compareTo612(this, a); },
126.8915 +    "toString15", function() { return jl_Enum102_toString15(this); },
126.8916 +    "ordinal103", function() { return jl_Enum102_ordinal103(this); },
126.8917 +    "equals13", function(a) { return jl_Enum102_equals13(this, a); },
126.8918 +    "getDeclaringClass315", function() { return jl_Enum102_getDeclaringClass315(this); },
126.8919 +    "name614", function() { return jl_Enum102_name614(this); },
126.8920 +    "$init611", function(a, b) { jl_Enum102_$init611(this, a, b); });
126.8921 +function otcic_ByteBuffer615() {
126.8922 +    this.data616 = null;
126.8923 +    this.end617 = 0;
126.8924 +    this.pos618 = 0;
126.8925 +}
126.8926 +$rt_declClass(otcic_ByteBuffer615, {
126.8927 +    name : "org.teavm.classlib.impl.charset.ByteBuffer",
126.8928 +    superclass : jl_Object7,
126.8929 +    clinit : function() { otcic_ByteBuffer615_$clinit(); } });
126.8930 +function otcic_ByteBuffer615_$clinit() {
126.8931 +    otcic_ByteBuffer615_$clinit = function(){};
126.8932 +    otcic_ByteBuffer615_$init619 = function($this, a) {
126.8933 +        otcic_ByteBuffer615_$init620($this, a, 0, a.data.length);
126.8934 +        return;
126.8935 +    }
126.8936 +    otcic_ByteBuffer615_$init620 = function($this, a, b, c) {
126.8937 +        jl_Object7_$init10($this);
126.8938 +        $this.data616 = a;
126.8939 +        $this.end617 = c;
126.8940 +        $this.pos618 = b;
126.8941 +        return;
126.8942 +    }
126.8943 +}
126.8944 +$rt_methodStubs(otcic_ByteBuffer615_$clinit, ['otcic_ByteBuffer615_$init619', 'otcic_ByteBuffer615_$init620']);
126.8945 +function otcic_ByteBuffer615_available621($this) {
126.8946 +    return (($this.end617 - $this.pos618) | 0);
126.8947 +}
126.8948 +function otcic_ByteBuffer615_rewind622($this, a) {
126.8949 +    $this.pos618 = a;
126.8950 +    return;
126.8951 +}
126.8952 +function otcic_ByteBuffer615_put623($this, a) {
126.8953 +    var b, c;
126.8954 +    b = $this.data616;
126.8955 +    c = $this.pos618;
126.8956 +    $this.pos618 = ((c + 1) | 0);
126.8957 +    b.data[c] = a;
126.8958 +    return;
126.8959 +}
126.8960 +function otcic_ByteBuffer615_position624($this) {
126.8961 +    return $this.pos618;
126.8962 +}
126.8963 +otcic_ByteBuffer615.$init619 = function(a) {
126.8964 +    var result = new otcic_ByteBuffer615();
126.8965 +    result.$init619(a);
126.8966 +    return result;
126.8967 +}
126.8968 +otcic_ByteBuffer615.$init620 = function(a, b, c) {
126.8969 +    var result = new otcic_ByteBuffer615();
126.8970 +    result.$init620(a, b, c);
126.8971 +    return result;
126.8972 +}
126.8973 +$rt_virtualMethods(otcic_ByteBuffer615,
126.8974 +    "$init619", function(a) { otcic_ByteBuffer615_$init619(this, a); },
126.8975 +    "available621", function() { return otcic_ByteBuffer615_available621(this); },
126.8976 +    "rewind622", function(a) { otcic_ByteBuffer615_rewind622(this, a); },
126.8977 +    "put623", function(a) { otcic_ByteBuffer615_put623(this, a); },
126.8978 +    "$init620", function(a, b, c) { otcic_ByteBuffer615_$init620(this, a, b, c); },
126.8979 +    "position624", function() { return otcic_ByteBuffer615_position624(this); });
126.8980 +function onhji_Bindings406() {
126.8981 +    this.bp625 = null;
126.8982 +    this.data626 = null;
126.8983 +}
126.8984 +onhji_Bindings406.$assertionsDisabled627 = false;
126.8985 +$rt_declClass(onhji_Bindings406, {
126.8986 +    name : "org.netbeans.html.json.impl.Bindings",
126.8987 +    superclass : jl_Object7,
126.8988 +    clinit : function() { onhji_Bindings406_$clinit(); } });
126.8989 +function onhji_Bindings406_$clinit() {
126.8990 +    onhji_Bindings406_$clinit = function(){};
126.8991 +    onhji_Bindings406_$clinit628 = function() {
126.8992 +        var a;
126.8993 +        if ((jl_Class0_desiredAssertionStatus320($rt_nullCheck($rt_cls(onhji_Bindings406))) != 0)) {
126.8994 +            a = 0;
126.8995 +        } else {
126.8996 +            a = 1;
126.8997 +        }
126.8998 +        onhji_Bindings406.$assertionsDisabled627 = a;
126.8999 +        return;
126.9000 +    }
126.9001 +    onhji_Bindings406_apply446 = function(a, b) {
126.9002 +        return onhji_Bindings406_apply629(onhji_JSON40_findTechnology390(a));
126.9003 +    }
126.9004 +    onhji_Bindings406_apply629 = function(a) {
126.9005 +        return onhji_Bindings406.$init630(a);
126.9006 +    }
126.9007 +    onhji_Bindings406_$init630 = function($this, a) {
126.9008 +        jl_Object7_$init10($this);
126.9009 +        $this.bp625 = a;
126.9010 +        return;
126.9011 +    }
126.9012 +    onhji_Bindings406_$clinit628();
126.9013 +}
126.9014 +$rt_methodStubs(onhji_Bindings406_$clinit, ['onhji_Bindings406_$clinit628', 'onhji_Bindings406_apply446', 'onhji_Bindings406_apply629', 'onhji_Bindings406_$init630']);
126.9015 +function onhji_Bindings406_valueHasMutated456($this, a) {
126.9016 +    var b, c;
126.9017 +    b = $this.bp625;
126.9018 +    c = $this.data626;
126.9019 +    $rt_nullCheck(b).valueHasMutated631(c, a);
126.9020 +    return;
126.9021 +}
126.9022 +function onhji_Bindings406_registerProperty447($this, a, b, c, d, e) {
126.9023 +    return onhji_PropertyBindingAccessor404_create497(d, $this, a, b, c, e);
126.9024 +}
126.9025 +function onhji_Bindings406_koData407($this) {
126.9026 +    return $this.data626;
126.9027 +}
126.9028 +function onhji_Bindings406_wrapArray632($this, a) {
126.9029 +    return $rt_nullCheck($this.bp625).wrapArray632(a);
126.9030 +}
126.9031 +function onhji_Bindings406_finish450($this, a, b, c) {
126.9032 +    var d, e;
126.9033 +    if ((!((onhji_Bindings406.$assertionsDisabled627 == 0) && ($this.data626 !== null)))) {
126.9034 +        block3: {
126.9035 +            if (($rt_isInstance($this.bp625, oahjs_Technology$BatchInit226) == 0)) {
126.9036 +                $this.data626 = $rt_nullCheck($this.bp625).wrapModel633(a);
126.9037 +                b = b.data;
126.9038 +                d = b.length;
126.9039 +                e = 0;
126.9040 +                while ((e < d)) {
126.9041 +                    $rt_nullCheck($this.bp625).bind634(b[e], a, $this.data626);
126.9042 +                    e = ((e + 1) | 0);
126.9043 +                }
126.9044 +                b = c.data;
126.9045 +                c = b.length;
126.9046 +                d = 0;
126.9047 +                while (true) {
126.9048 +                    if ((d >= c)) {
126.9049 +                        break block3;
126.9050 +                    }
126.9051 +                    $rt_nullCheck($this.bp625).expose635(b[d], a, $this.data626);
126.9052 +                    d = ((d + 1) | 0);
126.9053 +                }
126.9054 +            }
126.9055 +            $this.data626 = onhk_FXContext636_wrapModel637($rt_nullCheck($this.bp625), a, b, c);
126.9056 +        }
126.9057 +        return;
126.9058 +    }
126.9059 +    $rt_throw(jl_AssertionError316.$init317());
126.9060 +}
126.9061 +function onhji_Bindings406_applyBindings460($this) {
126.9062 +    var a, b;
126.9063 +    a = $this.bp625;
126.9064 +    b = $this.data626;
126.9065 +    $rt_nullCheck(a).applyBindings638(b);
126.9066 +    return;
126.9067 +}
126.9068 +onhji_Bindings406.$init630 = function(a) {
126.9069 +    var result = new onhji_Bindings406();
126.9070 +    result.$init630(a);
126.9071 +    return result;
126.9072 +}
126.9073 +$rt_virtualMethods(onhji_Bindings406,
126.9074 +    "valueHasMutated456", function(a) { onhji_Bindings406_valueHasMutated456(this, a); },
126.9075 +    "registerProperty447", function(a, b, c, d, e) { return onhji_Bindings406_registerProperty447(this, a, b, c, d, e); },
126.9076 +    "koData407", function() { return onhji_Bindings406_koData407(this); },
126.9077 +    "$init630", function(a) { onhji_Bindings406_$init630(this, a); },
126.9078 +    "wrapArray632", function(a) { return onhji_Bindings406_wrapArray632(this, a); },
126.9079 +    "finish450", function(a, b, c) { onhji_Bindings406_finish450(this, a, b, c); },
126.9080 +    "applyBindings460", function() { onhji_Bindings406_applyBindings460(this); });
126.9081 +function oahjs_Transfer639() {
126.9082 +}
126.9083 +$rt_declClass(oahjs_Transfer639, {
126.9084 +    name : "org.apidesign.html.json.spi.Transfer",
126.9085 +    superclass : jl_Object7 });
126.9086 +function juc_Executor640() {
126.9087 +}
126.9088 +$rt_declClass(juc_Executor640, {
126.9089 +    name : "java.util.concurrent.Executor",
126.9090 +    superclass : jl_Object7 });
126.9091 +function oahcs_Contexts$Provider506() {
126.9092 +}
126.9093 +$rt_declClass(oahcs_Contexts$Provider506, {
126.9094 +    name : "org.apidesign.html.context.spi.Contexts$Provider",
126.9095 +    superclass : jl_Object7 });
126.9096 +function jl_IllegalStateException229() {
126.9097 +}
126.9098 +$rt_declClass(jl_IllegalStateException229, {
126.9099 +    name : "java.lang.IllegalStateException",
126.9100 +    superclass : jl_Exception127,
126.9101 +    clinit : function() { jl_IllegalStateException229_$clinit(); } });
126.9102 +function jl_IllegalStateException229_$clinit() {
126.9103 +    jl_IllegalStateException229_$clinit = function(){};
126.9104 +    jl_IllegalStateException229_$init452 = function($this) {
126.9105 +        jl_Exception127_$init128($this);
126.9106 +        return;
126.9107 +    }
126.9108 +    jl_IllegalStateException229_$init230 = function($this, a) {
126.9109 +        jl_Exception127_$init129($this, a);
126.9110 +        return;
126.9111 +    }
126.9112 +    jl_IllegalStateException229_$init641 = function($this, a) {
126.9113 +        jl_Exception127_$init130($this, a);
126.9114 +        return;
126.9115 +    }
126.9116 +}
126.9117 +$rt_methodStubs(jl_IllegalStateException229_$clinit, ['jl_IllegalStateException229_$init452', 'jl_IllegalStateException229_$init230', 'jl_IllegalStateException229_$init641']);
126.9118 +jl_IllegalStateException229.$init452 = function() {
126.9119 +    var result = new jl_IllegalStateException229();
126.9120 +    result.$init452();
126.9121 +    return result;
126.9122 +}
126.9123 +jl_IllegalStateException229.$init230 = function(a) {
126.9124 +    var result = new jl_IllegalStateException229();
126.9125 +    result.$init230(a);
126.9126 +    return result;
126.9127 +}
126.9128 +jl_IllegalStateException229.$init641 = function(a) {
126.9129 +    var result = new jl_IllegalStateException229();
126.9130 +    result.$init641(a);
126.9131 +    return result;
126.9132 +}
126.9133 +$rt_virtualMethods(jl_IllegalStateException229,
126.9134 +    "$init452", function() { jl_IllegalStateException229_$init452(this); },
126.9135 +    "$init230", function(a) { jl_IllegalStateException229_$init230(this, a); },
126.9136 +    "$init641", function(a) { jl_IllegalStateException229_$init641(this, a); });
126.9137 +function ju_NoSuchElementException285() {
126.9138 +}
126.9139 +$rt_declClass(ju_NoSuchElementException285, {
126.9140 +    name : "java.util.NoSuchElementException",
126.9141 +    superclass : jl_RuntimeException131,
126.9142 +    clinit : function() { ju_NoSuchElementException285_$clinit(); } });
126.9143 +function ju_NoSuchElementException285_$clinit() {
126.9144 +    ju_NoSuchElementException285_$clinit = function(){};
126.9145 +    ju_NoSuchElementException285_$init286 = function($this) {
126.9146 +        jl_RuntimeException131_$init132($this);
126.9147 +        return;
126.9148 +    }
126.9149 +}
126.9150 +$rt_methodStubs(ju_NoSuchElementException285_$clinit, ['ju_NoSuchElementException285_$init286']);
126.9151 +ju_NoSuchElementException285.$init286 = function() {
126.9152 +    var result = new ju_NoSuchElementException285();
126.9153 +    result.$init286();
126.9154 +    return result;
126.9155 +}
126.9156 +$rt_virtualMethods(ju_NoSuchElementException285,
126.9157 +    "$init286", function() { ju_NoSuchElementException285_$init286(this); });
126.9158 +function jl_Boolean327() {
126.9159 +    this.value642 = false;
126.9160 +}
126.9161 +jl_Boolean327.FALSE643 = null;
126.9162 +jl_Boolean327.TRUE413 = null;
126.9163 +jl_Boolean327.TYPE644 = null;
126.9164 +$rt_declClass(jl_Boolean327, {
126.9165 +    name : "java.lang.Boolean",
126.9166 +    interfaces : [jl_Comparable163, ji_Serializable164],
126.9167 +    superclass : jl_Object7,
126.9168 +    clinit : function() { jl_Boolean327_$clinit(); } });
126.9169 +function jl_Boolean327_$clinit() {
126.9170 +    jl_Boolean327_$clinit = function(){};
126.9171 +    jl_Boolean327_$clinit645 = function() {
126.9172 +        jl_Boolean327.TRUE413 = jl_Boolean327.$init646(1);
126.9173 +        jl_Boolean327.FALSE643 = jl_Boolean327.$init646(0);
126.9174 +        jl_Boolean327.TYPE644 = $rt_cls($rt_booleancls());
126.9175 +        return;
126.9176 +    }
126.9177 +    jl_Boolean327_valueOf363 = function(a) {
126.9178 +        if ((a == 0)) {
126.9179 +            a = jl_Boolean327.FALSE643;
126.9180 +        } else {
126.9181 +            a = jl_Boolean327.TRUE413;
126.9182 +        }
126.9183 +        return a;
126.9184 +    }
126.9185 +    jl_Boolean327_compare647 = function(a, b) {
126.9186 +        block1: {
126.9187 +            block2: {
126.9188 +                if ((a == 0)) {
126.9189 +                    if ((b == 0)) {
126.9190 +                        break block2;
126.9191 +                    }
126.9192 +                    return -1;
126.9193 +                }
126.9194 +                if ((b == 0)) {
126.9195 +                    break block1;
126.9196 +                }
126.9197 +            }
126.9198 +            return 0;
126.9199 +        }
126.9200 +        return 1;
126.9201 +    }
126.9202 +    jl_Boolean327_parseBoolean414 = function(a) {
126.9203 +        if ((!((a !== null) && (jl_String3_equals13($rt_nullCheck(jl_String3_toLowerCase183($rt_nullCheck(a))), $rt_str("true")) != 0)))) {
126.9204 +            a = 0;
126.9205 +        } else {
126.9206 +            a = 1;
126.9207 +        }
126.9208 +        return a;
126.9209 +    }
126.9210 +    jl_Boolean327_$init646 = function($this, a) {
126.9211 +        jl_Object7_$init10($this);
126.9212 +        $this.value642 = a;
126.9213 +        return;
126.9214 +    }
126.9215 +    jl_Boolean327_$clinit645();
126.9216 +}
126.9217 +$rt_methodStubs(jl_Boolean327_$clinit, ['jl_Boolean327_$clinit645', 'jl_Boolean327_valueOf363', 'jl_Boolean327_compare647', 'jl_Boolean327_parseBoolean414', 'jl_Boolean327_$init646']);
126.9218 +function jl_Boolean327_equals13($this, a) {
126.9219 +    if (($this !== a)) {
126.9220 +        if ((!(((a instanceof jl_Boolean327) != 0) && (a.value642 == $this.value642)))) {
126.9221 +            a = 0;
126.9222 +        } else {
126.9223 +            a = 1;
126.9224 +        }
126.9225 +        return a;
126.9226 +    }
126.9227 +    return 1;
126.9228 +}
126.9229 +function jl_Boolean327_compareTo181($this, a) {
126.9230 +    return jl_Boolean327_compareTo648($rt_nullCheck($this), a);
126.9231 +}
126.9232 +function jl_Boolean327_booleanValue409($this) {
126.9233 +    return $this.value642;
126.9234 +}
126.9235 +function jl_Boolean327_compareTo648($this, a) {
126.9236 +    return jl_Boolean327_compare647($this.value642, a.value642);
126.9237 +}
126.9238 +jl_Boolean327.$init646 = function(a) {
126.9239 +    var result = new jl_Boolean327();
126.9240 +    result.$init646(a);
126.9241 +    return result;
126.9242 +}
126.9243 +$rt_virtualMethods(jl_Boolean327,
126.9244 +    "equals13", function(a) { return jl_Boolean327_equals13(this, a); },
126.9245 +    "compareTo181", function(a) { return jl_Boolean327_compareTo181(this, a); },
126.9246 +    "$init646", function(a) { jl_Boolean327_$init646(this, a); },
126.9247 +    "booleanValue409", function() { return jl_Boolean327_booleanValue409(this); },
126.9248 +    "compareTo648", function(a) { return jl_Boolean327_compareTo648(this, a); });
126.9249 +function oth_JavaScriptConv573() {
126.9250 +}
126.9251 +$rt_declClass(oth_JavaScriptConv573, {
126.9252 +    name : "org.teavm.html4j.JavaScriptConv",
126.9253 +    superclass : jl_Object7,
126.9254 +    clinit : function() { oth_JavaScriptConv573_$clinit(); } });
126.9255 +function oth_JavaScriptConv573_$clinit() {
126.9256 +    oth_JavaScriptConv573_$clinit = function(){};
126.9257 +    oth_JavaScriptConv573_fromJavaScript575 = function(a, b) {
126.9258 +        if (a === null || a === undefined) {
126.9259 +            return a;
126.9260 +        } else if (b.$meta.item) {
126.9261 +            var arr = $rt_createArray(b.$meta.item, a.length);
126.9262 +            for (var i = 0; i < arr.data.length; ++i) {
126.9263 +                arr.data[i] = oth_JavaScriptConv573_fromJavaScript575(a[i], b.$meta.item);
126.9264 +            }
126.9265 +            return arr;
126.9266 +        } else if (b === jl_String3) {
126.9267 +            return $rt_str(a);
126.9268 +        } else if (b === jl_Integer81) {
126.9269 +            return jl_Integer81_valueOf82(a);
126.9270 +        } else if (b === jl_Double340) {
126.9271 +            return jl_Double340_valueOf342(a);
126.9272 +        } else if (b === $rt_intcls()) {
126.9273 +            return a|0;
126.9274 +        } else if (b === jl_Boolean327) {
126.9275 +            return jl_Boolean327_valueOf363(a?1:0);
126.9276 +        } else if (b === jl_Character187) {
126.9277 +            return jl_Character187_valueOf253(typeof a === 'number' ? a0xFFFF : a.charCodeAt(0));
126.9278 +        } else if (b === $rt_booleancls()) {
126.9279 +            return a?1:0;
126.9280 +        } else if (a instanceof Array) {
126.9281 +            var arr = $rt_createArray($rt_objcls(), a.length);
126.9282 +            for (var i = 0; i < arr.data.length; ++i) {
126.9283 +                arr.data[i] = oth_JavaScriptConv573_fromJavaScript575(a[i], $rt_objcls());
126.9284 +            }
126.9285 +            return arr;
126.9286 +        } else if (typeof a === 'string') {
126.9287 +            return $rt_str(a);
126.9288 +        } else if (typeof a === 'number') {
126.9289 +            if (a|0 === a) {
126.9290 +                return jl_Integer81_valueOf82(a);
126.9291 +            } else {
126.9292 +                return jl_Double340_valueOf342(a);
126.9293 +            }
126.9294 +        } else if (typeof a === 'boolean') {
126.9295 +            return jl_Boolean327_valueOf363(a?1:0);
126.9296 +        } else {
126.9297 +            return a;
126.9298 +        }
126.9299 +    }
126.9300 +    oth_JavaScriptConv573_toJavaScript574 = function(a) {
126.9301 +        if (a === null || a === undefined) {
126.9302 +            return a;
126.9303 +        } else if (typeof a === 'number') {
126.9304 +            return a;
126.9305 +        } else if (a.constructor.$meta && a.constructor.$meta.item) {
126.9306 +            var arr = new Array(a.data.length);
126.9307 +            for (var i = 0; i < arr.length; ++i) {
126.9308 +                arr[i] = oth_JavaScriptConv573_toJavaScript574(a.data[i]);
126.9309 +            }
126.9310 +            return arr;
126.9311 +        } else if (a.constructor === jl_String3) {
126.9312 +            var result = "";
126.9313 +            var data = a.characters166.data;
126.9314 +            for (var i = 0; i < data.length; i = (i + 1) | 0) {
126.9315 +                result += String.fromCharCode(data[i]);
126.9316 +            }
126.9317 +            return result;
126.9318 +        } else if (a.constructor === jl_Integer81) {
126.9319 +            return jl_Integer81_intValue87(a)|0;
126.9320 +        } else if (a.constructor === jl_Boolean327) {
126.9321 +            return jl_Boolean327_booleanValue409(a)!==0;
126.9322 +        } else if (a.constructor === jl_Double340) {
126.9323 +            return jl_Double340_doubleValue341(a);
126.9324 +        } else if (a.constructor === jl_Character187) {
126.9325 +            return jl_Character187_charValue260(a);
126.9326 +        } else {
126.9327 +            return a;
126.9328 +        }
126.9329 +    }
126.9330 +    oth_JavaScriptConv573_$init649 = function($this) {
126.9331 +        jl_Object7_$init10($this);
126.9332 +        return;
126.9333 +    }
126.9334 +}
126.9335 +$rt_methodStubs(oth_JavaScriptConv573_$clinit, ['oth_JavaScriptConv573_fromJavaScript575', 'oth_JavaScriptConv573_toJavaScript574', 'oth_JavaScriptConv573_$init649']);
126.9336 +oth_JavaScriptConv573.$init649 = function() {
126.9337 +    var result = new oth_JavaScriptConv573();
126.9338 +    result.$init649();
126.9339 +    return result;
126.9340 +}
126.9341 +$rt_virtualMethods(oth_JavaScriptConv573,
126.9342 +    "$init649", function() { oth_JavaScriptConv573_$init649(this); });
126.9343 +function oahjs_WSTransfer650() {
126.9344 +}
126.9345 +$rt_declClass(oahjs_WSTransfer650, {
126.9346 +    name : "org.apidesign.html.json.spi.WSTransfer",
126.9347 +    superclass : jl_Object7 });
126.9348 +function onhji_JSON$EmptyTech400() {
126.9349 +}
126.9350 +onhji_JSON$EmptyTech400.EMPTY651 = null;
126.9351 +$rt_declClass(onhji_JSON$EmptyTech400, {
126.9352 +    name : "org.netbeans.html.json.impl.JSON$EmptyTech",
126.9353 +    interfaces : [oahjs_Transfer639, oahjs_WSTransfer650, oahjs_Technology156],
126.9354 +    superclass : jl_Object7,
126.9355 +    clinit : function() { onhji_JSON$EmptyTech400_$clinit(); } });
126.9356 +function onhji_JSON$EmptyTech400_$clinit() {
126.9357 +    onhji_JSON$EmptyTech400_$clinit = function(){};
126.9358 +    onhji_JSON$EmptyTech400_$clinit652 = function() {
126.9359 +        onhji_JSON$EmptyTech400.EMPTY651 = onhji_JSON$EmptyTech400.$init653();
126.9360 +        return;
126.9361 +    }
126.9362 +    onhji_JSON$EmptyTech400_access$000401 = function() {
126.9363 +        return onhji_JSON$EmptyTech400.EMPTY651;
126.9364 +    }
126.9365 +    onhji_JSON$EmptyTech400_$init653 = function($this) {
126.9366 +        jl_Object7_$init10($this);
126.9367 +        return;
126.9368 +    }
126.9369 +    onhji_JSON$EmptyTech400_$clinit652();
126.9370 +}
126.9371 +$rt_methodStubs(onhji_JSON$EmptyTech400_$clinit, ['onhji_JSON$EmptyTech400_$clinit652', 'onhji_JSON$EmptyTech400_access$000401', 'onhji_JSON$EmptyTech400_$init653']);
126.9372 +function onhji_JSON$EmptyTech400_wrapArray632($this, a) {
126.9373 +    return a;
126.9374 +}
126.9375 +function onhji_JSON$EmptyTech400_runSafe392($this, a) {
126.9376 +    $rt_nullCheck(a).run381();
126.9377 +    return;
126.9378 +}
126.9379 +function onhji_JSON$EmptyTech400_wrapModel633($this, a) {
126.9380 +    return a;
126.9381 +}
126.9382 +function onhji_JSON$EmptyTech400_bind634($this, a, b, c) {
126.9383 +    return;
126.9384 +}
126.9385 +function onhji_JSON$EmptyTech400_expose635($this, a, b, c) {
126.9386 +    return;
126.9387 +}
126.9388 +function onhji_JSON$EmptyTech400_valueHasMutated631($this, a, b) {
126.9389 +    return;
126.9390 +}
126.9391 +function onhji_JSON$EmptyTech400_applyBindings638($this, a) {
126.9392 +    return;
126.9393 +}
126.9394 +function onhji_JSON$EmptyTech400_toModel389($this, a, b) {
126.9395 +    return jl_Class0_cast346($rt_nullCheck(a), b);
126.9396 +}
126.9397 +onhji_JSON$EmptyTech400.$init653 = function() {
126.9398 +    var result = new onhji_JSON$EmptyTech400();
126.9399 +    result.$init653();
126.9400 +    return result;
126.9401 +}
126.9402 +$rt_virtualMethods(onhji_JSON$EmptyTech400,
126.9403 +    "wrapArray632", function(a) { return onhji_JSON$EmptyTech400_wrapArray632(this, a); },
126.9404 +    "$init653", function() { onhji_JSON$EmptyTech400_$init653(this); },
126.9405 +    "runSafe392", function(a) { onhji_JSON$EmptyTech400_runSafe392(this, a); },
126.9406 +    "wrapModel633", function(a) { return onhji_JSON$EmptyTech400_wrapModel633(this, a); },
126.9407 +    "bind634", function(a, b, c) { onhji_JSON$EmptyTech400_bind634(this, a, b, c); },
126.9408 +    "expose635", function(a, b, c) { onhji_JSON$EmptyTech400_expose635(this, a, b, c); },
126.9409 +    "valueHasMutated631", function(a, b) { onhji_JSON$EmptyTech400_valueHasMutated631(this, a, b); },
126.9410 +    "applyBindings638", function(a) { onhji_JSON$EmptyTech400_applyBindings638(this, a); },
126.9411 +    "toModel389", function(a, b) { return onhji_JSON$EmptyTech400_toModel389(this, a, b); });
126.9412 +function jl_InstantiationException654() {
126.9413 +}
126.9414 +$rt_declClass(jl_InstantiationException654, {
126.9415 +    name : "java.lang.InstantiationException",
126.9416 +    superclass : jl_ReflectiveOperationException493,
126.9417 +    clinit : function() { jl_InstantiationException654_$clinit(); } });
126.9418 +function jl_InstantiationException654_$clinit() {
126.9419 +    jl_InstantiationException654_$clinit = function(){};
126.9420 +    jl_InstantiationException654_$init655 = function($this) {
126.9421 +        jl_ReflectiveOperationException493_$init494($this);
126.9422 +        return;
126.9423 +    }
126.9424 +}
126.9425 +$rt_methodStubs(jl_InstantiationException654_$clinit, ['jl_InstantiationException654_$init655']);
126.9426 +jl_InstantiationException654.$init655 = function() {
126.9427 +    var result = new jl_InstantiationException654();
126.9428 +    result.$init655();
126.9429 +    return result;
126.9430 +}
126.9431 +$rt_virtualMethods(jl_InstantiationException654,
126.9432 +    "$init655", function() { jl_InstantiationException654_$init655(this); });
126.9433 +function onhk_FXContext$1Wrap656() {
126.9434 +    this.val$r657 = null;
126.9435 +    this.this$0658 = null;
126.9436 +}
126.9437 +$rt_declClass(onhk_FXContext$1Wrap656, {
126.9438 +    name : "org.netbeans.html.ko4j.FXContext$1Wrap",
126.9439 +    interfaces : [jl_Runnable232],
126.9440 +    superclass : jl_Object7,
126.9441 +    clinit : function() { onhk_FXContext$1Wrap656_$clinit(); } });
126.9442 +function onhk_FXContext$1Wrap656_$clinit() {
126.9443 +    onhk_FXContext$1Wrap656_$clinit = function(){};
126.9444 +    onhk_FXContext$1Wrap656_$init659 = function($this, a, b) {
126.9445 +        $this.this$0658 = a;
126.9446 +        $this.val$r657 = b;
126.9447 +        jl_Object7_$init10($this);
126.9448 +        return;
126.9449 +    }
126.9450 +}
126.9451 +$rt_methodStubs(onhk_FXContext$1Wrap656_$clinit, ['onhk_FXContext$1Wrap656_$init659']);
126.9452 +function onhk_FXContext$1Wrap656_run381($this) {
126.9453 +    var a, b;
126.9454 +    a = oahbs_Fn466_activate472(onhk_FXContext636_access$100660($this.this$0658));
126.9455 +    block1: {
126.9456 +        try {
126.9457 +            $rt_nullCheck($this.val$r657).run381();
126.9458 +        } catch ($e) {
126.9459 +            $je = $e.$javaException;
126.9460 +            if ($je) {
126.9461 +                b = $je;
126.9462 +                break block1;
126.9463 +            } else {
126.9464 +                throw $e;
126.9465 +            }
126.9466 +        }
126.9467 +        block2: {
126.9468 +            block3: {
126.9469 +                try {
126.9470 +                    onhbi_FnContext473_close661($rt_nullCheck(a));
126.9471 +                } catch ($e) {
126.9472 +                    $je = $e.$javaException;
126.9473 +                    if ($je && $je instanceof ji_IOException538) {
126.9474 +                        b = $je;
126.9475 +                        break block3;
126.9476 +                    } else {
126.9477 +                        throw $e;
126.9478 +                    }
126.9479 +                }
126.9480 +                break block2;
126.9481 +            }
126.9482 +        }
126.9483 +        return;
126.9484 +    }
126.9485 +    block4: {
126.9486 +        block5: {
126.9487 +            try {
126.9488 +                onhbi_FnContext473_close661($rt_nullCheck(a));
126.9489 +            } catch ($e) {
126.9490 +                $je = $e.$javaException;
126.9491 +                if ($je && $je instanceof ji_IOException538) {
126.9492 +                    b = $je;
126.9493 +                    break block5;
126.9494 +                } else {
126.9495 +                    throw $e;
126.9496 +                }
126.9497 +            }
126.9498 +            break block4;
126.9499 +        }
126.9500 +    }
126.9501 +    $rt_throw(b);
126.9502 +}
126.9503 +onhk_FXContext$1Wrap656.$init659 = function(a, b) {
126.9504 +    var result = new onhk_FXContext$1Wrap656();
126.9505 +    result.$init659(a, b);
126.9506 +    return result;
126.9507 +}
126.9508 +$rt_virtualMethods(onhk_FXContext$1Wrap656,
126.9509 +    "$init659", function(a, b) { onhk_FXContext$1Wrap656_$init659(this, a, b); },
126.9510 +    "run381", function() { onhk_FXContext$1Wrap656_run381(this); });
126.9511 +function oahcs_Contexts$Builder662() {
126.9512 +    this.impl663 = null;
126.9513 +}
126.9514 +$rt_declClass(oahcs_Contexts$Builder662, {
126.9515 +    name : "org.apidesign.html.context.spi.Contexts$Builder",
126.9516 +    superclass : jl_Object7,
126.9517 +    clinit : function() { oahcs_Contexts$Builder662_$clinit(); } });
126.9518 +function oahcs_Contexts$Builder662_$clinit() {
126.9519 +    oahcs_Contexts$Builder662_$clinit = function(){};
126.9520 +    oahcs_Contexts$Builder662_$init664 = function($this) {
126.9521 +        jl_Object7_$init10($this);
126.9522 +        $this.impl663 = onhci_CtxImpl665.$init666();
126.9523 +        return;
126.9524 +    }
126.9525 +}
126.9526 +$rt_methodStubs(oahcs_Contexts$Builder662_$clinit, ['oahcs_Contexts$Builder662_$init664']);
126.9527 +function oahcs_Contexts$Builder662_build667($this) {
126.9528 +    return onhci_CtxImpl665_build667($rt_nullCheck($this.impl663));
126.9529 +}
126.9530 +function oahcs_Contexts$Builder662_register668($this, a, b, c) {
126.9531 +    if ((b !== null)) {
126.9532 +        if ((c > 0)) {
126.9533 +            onhci_CtxImpl665_register669($rt_nullCheck($this.impl663), a, b, c);
126.9534 +            return $this;
126.9535 +        }
126.9536 +        $rt_throw(jl_IllegalStateException229.$init452());
126.9537 +    }
126.9538 +    return $this;
126.9539 +}
126.9540 +oahcs_Contexts$Builder662.$init664 = function() {
126.9541 +    var result = new oahcs_Contexts$Builder662();
126.9542 +    result.$init664();
126.9543 +    return result;
126.9544 +}
126.9545 +$rt_virtualMethods(oahcs_Contexts$Builder662,
126.9546 +    "$init664", function() { oahcs_Contexts$Builder662_$init664(this); },
126.9547 +    "build667", function() { return oahcs_Contexts$Builder662_build667(this); },
126.9548 +    "register668", function(a, b, c) { return oahcs_Contexts$Builder662_register668(this, a, b, c); });
126.9549 +function jl_ThreadLocal670() {
126.9550 +    this.value671 = null;
126.9551 +    this.initialized672 = false;
126.9552 +}
126.9553 +$rt_declClass(jl_ThreadLocal670, {
126.9554 +    name : "java.lang.ThreadLocal",
126.9555 +    superclass : jl_Object7,
126.9556 +    clinit : function() { jl_ThreadLocal670_$clinit(); } });
126.9557 +function jl_ThreadLocal670_$clinit() {
126.9558 +    jl_ThreadLocal670_$clinit = function(){};
126.9559 +    jl_ThreadLocal670_$init673 = function($this) {
126.9560 +        jl_Object7_$init10($this);
126.9561 +        return;
126.9562 +    }
126.9563 +}
126.9564 +$rt_methodStubs(jl_ThreadLocal670_$clinit, ['jl_ThreadLocal670_$init673']);
126.9565 +function jl_ThreadLocal670_initialValue674($this) {
126.9566 +    return null;
126.9567 +}
126.9568 +function jl_ThreadLocal670_get675($this) {
126.9569 +    if (($this.initialized672 == 0)) {
126.9570 +        $this.value671 = jl_ThreadLocal670_initialValue674($rt_nullCheck($this));
126.9571 +        $this.initialized672 = 1;
126.9572 +    }
126.9573 +    return $this.value671;
126.9574 +}
126.9575 +function jl_ThreadLocal670_set676($this, a) {
126.9576 +    $this.value671 = a;
126.9577 +    return;
126.9578 +}
126.9579 +jl_ThreadLocal670.$init673 = function() {
126.9580 +    var result = new jl_ThreadLocal670();
126.9581 +    result.$init673();
126.9582 +    return result;
126.9583 +}
126.9584 +$rt_virtualMethods(jl_ThreadLocal670,
126.9585 +    "initialValue674", function() { return jl_ThreadLocal670_initialValue674(this); },
126.9586 +    "$init673", function() { jl_ThreadLocal670_$init673(this); },
126.9587 +    "get675", function() { return jl_ThreadLocal670_get675(this); },
126.9588 +    "set676", function(a) { jl_ThreadLocal670_set676(this, a); });
126.9589 +function njh_BrwsrCtx488() {
126.9590 +    this.impl677 = null;
126.9591 +}
126.9592 +njh_BrwsrCtx488.LOG678 = null;
126.9593 +njh_BrwsrCtx488.CURRENT679 = null;
126.9594 +njh_BrwsrCtx488.EMPTY600 = null;
126.9595 +$rt_declClass(njh_BrwsrCtx488, {
126.9596 +    name : "net.java.html.BrwsrCtx",
126.9597 +    interfaces : [juc_Executor640],
126.9598 +    superclass : jl_Object7,
126.9599 +    clinit : function() { njh_BrwsrCtx488_$clinit(); } });
126.9600 +function njh_BrwsrCtx488_$clinit() {
126.9601 +    njh_BrwsrCtx488_$clinit = function(){};
126.9602 +    njh_BrwsrCtx488_$clinit680 = function() {
126.9603 +        njh_BrwsrCtx488.LOG678 = jul_Logger681_getLogger682(jl_Class0_getName20($rt_nullCheck($rt_cls(njh_BrwsrCtx488))));
126.9604 +        njh_BrwsrCtx$1603_$init604(new njh_BrwsrCtx$1603());
126.9605 +        njh_BrwsrCtx488.EMPTY600 = oahcs_Contexts$Builder662_build667($rt_nullCheck(oahcs_Contexts398_newBuilder683()));
126.9606 +        njh_BrwsrCtx488.CURRENT679 = jl_ThreadLocal670.$init673();
126.9607 +        return;
126.9608 +    }
126.9609 +    njh_BrwsrCtx488_findDefault489 = function(a) {
126.9610 +        var b;
126.9611 +        b = jl_ThreadLocal670_get675($rt_nullCheck(njh_BrwsrCtx488.CURRENT679));
126.9612 +        if ((b === null)) {
126.9613 +            b = oahcs_Contexts398_newBuilder683();
126.9614 +            if ((oahcs_Contexts398_fillInByProviders684(a, b) != 0)) {
126.9615 +                return oahcs_Contexts$Builder662_build667($rt_nullCheck(b));
126.9616 +            }
126.9617 +            jul_Logger681_warning685($rt_nullCheck(njh_BrwsrCtx488.LOG678), $rt_str("No browser context found. Returning empty technology!"));
126.9618 +            return njh_BrwsrCtx488.EMPTY600;
126.9619 +        }
126.9620 +        return b;
126.9621 +    }
126.9622 +    njh_BrwsrCtx488_$init606 = function($this, a, b) {
126.9623 +        njh_BrwsrCtx488_$init686($this, a);
126.9624 +        return;
126.9625 +    }
126.9626 +    njh_BrwsrCtx488_$init686 = function($this, a) {
126.9627 +        jl_Object7_$init10($this);
126.9628 +        $this.impl677 = a;
126.9629 +        return;
126.9630 +    }
126.9631 +    njh_BrwsrCtx488_access$100608 = function(a) {
126.9632 +        return a.impl677;
126.9633 +    }
126.9634 +    njh_BrwsrCtx488_$clinit680();
126.9635 +}
126.9636 +$rt_methodStubs(njh_BrwsrCtx488_$clinit, ['njh_BrwsrCtx488_$clinit680', 'njh_BrwsrCtx488_findDefault489', 'njh_BrwsrCtx488_$init606', 'njh_BrwsrCtx488_$init686', 'njh_BrwsrCtx488_access$100608']);
126.9637 +njh_BrwsrCtx488.$init606 = function(a, b) {
126.9638 +    var result = new njh_BrwsrCtx488();
126.9639 +    result.$init606(a, b);
126.9640 +    return result;
126.9641 +}
126.9642 +njh_BrwsrCtx488.$init686 = function(a) {
126.9643 +    var result = new njh_BrwsrCtx488();
126.9644 +    result.$init686(a);
126.9645 +    return result;
126.9646 +}
126.9647 +$rt_virtualMethods(njh_BrwsrCtx488,
126.9648 +    "$init606", function(a, b) { njh_BrwsrCtx488_$init606(this, a, b); },
126.9649 +    "$init686", function(a) { njh_BrwsrCtx488_$init686(this, a); });
126.9650 +function oadm_MinesModel$SquareModel687() {
126.9651 +}
126.9652 +$rt_declClass(oadm_MinesModel$SquareModel687, {
126.9653 +    name : "org.apidesign.demo.minesweeper.MinesModel$SquareModel",
126.9654 +    superclass : jl_Object7,
126.9655 +    clinit : function() { oadm_MinesModel$SquareModel687_$clinit(); } });
126.9656 +function oadm_MinesModel$SquareModel687_$clinit() {
126.9657 +    oadm_MinesModel$SquareModel687_$clinit = function(){};
126.9658 +    oadm_MinesModel$SquareModel687_$init688 = function($this) {
126.9659 +        jl_Object7_$init10($this);
126.9660 +        return;
126.9661 +    }
126.9662 +    oadm_MinesModel$SquareModel687_style689 = function(a) {
126.9663 +        if ((a !== null)) {
126.9664 +            a = jl_Enum102_toString15($rt_nullCheck(a));
126.9665 +        } else {
126.9666 +            a = null;
126.9667 +        }
126.9668 +        return a;
126.9669 +    }
126.9670 +    oadm_MinesModel$SquareModel687_html690 = function(a) {
126.9671 +        var b, c;
126.9672 +        if ((a !== null)) {
126.9673 +            block2: {
126.9674 +                block3: {
126.9675 +                    block4: {
126.9676 +                        block5: {
126.9677 +                            oadm_MinesModel$1100_$clinit();
126.9678 +                            b = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.9679 +                            c = $rt_nullCheck(a);
126.9680 +                            switch (b.data[jl_Enum102_ordinal103(c)]) {
126.9681 +                                case 1:
126.9682 +                                    break;
126.9683 +                                case 2:
126.9684 +                                    break block5;
126.9685 +                                case 3:
126.9686 +                                    break block4;
126.9687 +                                case 4:
126.9688 +                                    break block3;
126.9689 +                                default:
126.9690 +                                    break block2;
126.9691 +                            }
126.9692 +                            return $rt_str("&#x2717;");
126.9693 +                        }
126.9694 +                        return $rt_str("&nbsp;");
126.9695 +                    }
126.9696 +                    return $rt_str("&#x2714;");
126.9697 +                }
126.9698 +                return $rt_str("&nbsp;");
126.9699 +            }
126.9700 +            return jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append18($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("&#x278"))), ((jl_Enum102_ordinal103(c) - 1) | 0))));
126.9701 +        }
126.9702 +        return $rt_str("&nbsp;");
126.9703 +    }
126.9704 +}
126.9705 +$rt_methodStubs(oadm_MinesModel$SquareModel687_$clinit, ['oadm_MinesModel$SquareModel687_$init688', 'oadm_MinesModel$SquareModel687_style689', 'oadm_MinesModel$SquareModel687_html690']);
126.9706 +oadm_MinesModel$SquareModel687.$init688 = function() {
126.9707 +    var result = new oadm_MinesModel$SquareModel687();
126.9708 +    result.$init688();
126.9709 +    return result;
126.9710 +}
126.9711 +$rt_virtualMethods(oadm_MinesModel$SquareModel687,
126.9712 +    "$init688", function() { oadm_MinesModel$SquareModel687_$init688(this); });
126.9713 +function jul_Logger681() {
126.9714 +    this.name691 = null;
126.9715 +    this.parent692 = null;
126.9716 +}
126.9717 +jul_Logger681.GLOBAL_LOGGER_NAME693 = null;
126.9718 +jul_Logger681.loggerCache694 = null;
126.9719 +$rt_declClass(jul_Logger681, {
126.9720 +    name : "java.util.logging.Logger",
126.9721 +    superclass : jl_Object7,
126.9722 +    clinit : function() { jul_Logger681_$clinit(); } });
126.9723 +function jul_Logger681_$clinit() {
126.9724 +    jul_Logger681_$clinit = function(){};
126.9725 +    jul_Logger681_$clinit695 = function() {
126.9726 +        jul_Logger681.GLOBAL_LOGGER_NAME693 = $rt_str("global");
126.9727 +        jul_Logger681.loggerCache694 = ju_HashMap394.$init412();
126.9728 +        return;
126.9729 +    }
126.9730 +    jul_Logger681_digits696 = function(a, b) {
126.9731 +        var c, d;
126.9732 +        block1: {
126.9733 +            while (true) {
126.9734 +                c = $rt_nullCheck(b);
126.9735 +                if ((a >= jl_String3_length5(c))) {
126.9736 +                    break block1;
126.9737 +                }
126.9738 +                d = ((a + 1) | 0);
126.9739 +                a = jl_String3_charAt176(c, a);
126.9740 +                if ((a <= 48)) {
126.9741 +                    break;
126.9742 +                }
126.9743 +                if ((a >= 57)) {
126.9744 +                    break;
126.9745 +                }
126.9746 +                a = d;
126.9747 +            }
126.9748 +            return d;
126.9749 +        }
126.9750 +        return -1;
126.9751 +    }
126.9752 +    jul_Logger681_$init697 = function($this, a) {
126.9753 +        jl_Object7_$init10($this);
126.9754 +        $this.name691 = a;
126.9755 +        return;
126.9756 +    }
126.9757 +    jul_Logger681_getLogger682 = function(a) {
126.9758 +        var b, c, d;
126.9759 +        b = ju_HashMap394_get395($rt_nullCheck(jul_Logger681.loggerCache694), a);
126.9760 +        if ((b === null)) {
126.9761 +            b = jul_Logger681.$init697(a);
126.9762 +            c = 46;
126.9763 +            d = $rt_nullCheck(a);
126.9764 +            c = jl_String3_lastIndexOf193(d, c);
126.9765 +            if ((c >= 0)) {
126.9766 +                b.parent692 = jul_Logger681_getLogger682(jl_String3_substring179(d, 0, c));
126.9767 +            } else if ((jl_String3_isEmpty184(d) == 0)) {
126.9768 +                b.parent692 = jul_Logger681_getLogger682($rt_str(""));
126.9769 +            }
126.9770 +            ju_HashMap394_put397($rt_nullCheck(jul_Logger681.loggerCache694), a, b);
126.9771 +        }
126.9772 +        return b;
126.9773 +    }
126.9774 +    jul_Logger681_$clinit695();
126.9775 +}
126.9776 +$rt_methodStubs(jul_Logger681_$clinit, ['jul_Logger681_$clinit695', 'jul_Logger681_digits696', 'jul_Logger681_$init697', 'jul_Logger681_getLogger682']);
126.9777 +function jul_Logger681_warn698($this, a) {
126.9778 +    if (console) {
126.9779 +        console.warn($rt_ustr(a));
126.9780 +    }
126.9781 +}
126.9782 +function jul_Logger681_log699($this, a) {
126.9783 +    var b, c;
126.9784 +    b = $rt_nullCheck(a);
126.9785 +    a = jul_Logger681_format700($this, jul_LogRecord540_getMessage121(b), jul_LogRecord540_getParameters550(b));
126.9786 +    c = jul_Level581_intValue87($rt_nullCheck(jul_LogRecord540_getLevel551(b)));
126.9787 +    jul_Level581_$clinit();
126.9788 +    if ((c < jul_Level581_intValue87($rt_nullCheck(jul_Level581.SEVERE589)))) {
126.9789 +        c = jul_Level581_intValue87($rt_nullCheck(jul_LogRecord540_getLevel551(b)));
126.9790 +        jul_Level581_$clinit();
126.9791 +        if ((c < jul_Level581_intValue87($rt_nullCheck(jul_Level581.WARNING588)))) {
126.9792 +            jul_Logger681_info701($rt_nullCheck($this), a);
126.9793 +        } else {
126.9794 +            jul_Logger681_warn698($this, a);
126.9795 +        }
126.9796 +    } else {
126.9797 +        jul_Logger681_error702($this, a);
126.9798 +    }
126.9799 +    return;
126.9800 +}
126.9801 +function jul_Logger681_warning685($this, a) {
126.9802 +    var b;
126.9803 +    jul_Level581_$clinit();
126.9804 +    b = jul_Level581.WARNING588;
126.9805 +    jul_Logger681_log703($rt_nullCheck($this), b, a);
126.9806 +    return;
126.9807 +}
126.9808 +function jul_Logger681_info701($this, a) {
126.9809 +    if (console) {
126.9810 +        console.info($rt_ustr(a));
126.9811 +    }
126.9812 +}
126.9813 +function jul_Logger681_error702($this, a) {
126.9814 +    if (console) {
126.9815 +        console.error($rt_ustr(a));
126.9816 +    }
126.9817 +}
126.9818 +function jul_Logger681_log703($this, a, b) {
126.9819 +    var c;
126.9820 +    c = jul_LogRecord540.$init548(a, b);
126.9821 +    jul_Logger681_log699($rt_nullCheck($this), c);
126.9822 +    return;
126.9823 +}
126.9824 +function jul_Logger681_format700($this, a, b) {
126.9825 +    var c, d, e, f, g, h;
126.9826 +    if ((b !== null)) {
126.9827 +        c = jl_StringBuilder16.$init17();
126.9828 +        d = 0;
126.9829 +        block2: {
126.9830 +            block3: {
126.9831 +                while (true) {
126.9832 +                    e = $rt_nullCheck(a);
126.9833 +                    if ((d >= jl_String3_length5(e))) {
126.9834 +                        break block2;
126.9835 +                    }
126.9836 +                    f = jl_String3_indexOf180(e, 123, d);
126.9837 +                    if ((f < 0)) {
126.9838 +                        break block3;
126.9839 +                    }
126.9840 +                    f = jul_Logger681_digits696(((f + 1) | 0), a);
126.9841 +                    if ((f < 0)) {
126.9842 +                        break;
126.9843 +                    }
126.9844 +                    if ((jl_String3_charAt176(e, f) == 125)) {
126.9845 +                        g = jl_Integer81_parseInt704(jl_String3_substring179(e, d, ((f - 1) | 0)));
126.9846 +                        h = b.data;
126.9847 +                        if ((g < h.length)) {
126.9848 +                            jl_StringBuilder16_append705($rt_nullCheck(c), h[g]);
126.9849 +                            d = ((f + 1) | 0);
126.9850 +                            continue;
126.9851 +                        }
126.9852 +                        jl_StringBuilder16_append19($rt_nullCheck(c), jl_String3_substring179(e, d, f));
126.9853 +                        d = f;
126.9854 +                        continue;
126.9855 +                    }
126.9856 +                    jl_StringBuilder16_append19($rt_nullCheck(c), jl_String3_substring179(e, d, f));
126.9857 +                    d = f;
126.9858 +                }
126.9859 +                break block2;
126.9860 +            }
126.9861 +        }
126.9862 +        return jl_StringBuilder16_toString15($rt_nullCheck(c));
126.9863 +    }
126.9864 +    return a;
126.9865 +}
126.9866 +jul_Logger681.$init697 = function(a) {
126.9867 +    var result = new jul_Logger681();
126.9868 +    result.$init697(a);
126.9869 +    return result;
126.9870 +}
126.9871 +$rt_virtualMethods(jul_Logger681,
126.9872 +    "warn698", function(a) { jul_Logger681_warn698(this, a); },
126.9873 +    "log699", function(a) { jul_Logger681_log699(this, a); },
126.9874 +    "warning685", function(a) { jul_Logger681_warning685(this, a); },
126.9875 +    "info701", function(a) { jul_Logger681_info701(this, a); },
126.9876 +    "error702", function(a) { jul_Logger681_error702(this, a); },
126.9877 +    "log703", function(a, b) { jul_Logger681_log703(this, a, b); },
126.9878 +    "$init697", function(a) { jul_Logger681_$init697(this, a); },
126.9879 +    "format700", function(a, b) { return jul_Logger681_format700(this, a, b); });
126.9880 +function otciu_UnicodeHelper256() {
126.9881 +}
126.9882 +$rt_declClass(otciu_UnicodeHelper256, {
126.9883 +    name : "org.teavm.classlib.impl.unicode.UnicodeHelper",
126.9884 +    superclass : jl_Object7,
126.9885 +    clinit : function() { otciu_UnicodeHelper256_$clinit(); } });
126.9886 +function otciu_UnicodeHelper256_$clinit() {
126.9887 +    otciu_UnicodeHelper256_$clinit = function(){};
126.9888 +    otciu_UnicodeHelper256_$init706 = function($this) {
126.9889 +        jl_Object7_$init10($this);
126.9890 +        return;
126.9891 +    }
126.9892 +    otciu_UnicodeHelper256_decodeIntByte257 = function(a) {
126.9893 +        var b, c, d, e, f, g, h, i;
126.9894 +        b = 2;
126.9895 +        c = $rt_nullCheck(a);
126.9896 +        a = $rt_createIntArray(((b * ((jl_String3_length5(c) / 5) | 0)) | 0));
126.9897 +        b = 0;
126.9898 +        d = 0;
126.9899 +        while (true) {
126.9900 +            e = a.data;
126.9901 +            if ((d >= e.length)) {
126.9902 +                break;
126.9903 +            }
126.9904 +            f = 0;
126.9905 +            g = 0;
126.9906 +            while ((g < 4)) {
126.9907 +                h = (f << 8);
126.9908 +                i = ((b + 1) | 0);
126.9909 +                f = (h | ((jl_String3_charAt176(c, b) - 122) | 0));
126.9910 +                g = ((g + 1) | 0);
126.9911 +                b = i;
126.9912 +            }
126.9913 +            g = ((d + 1) | 0);
126.9914 +            e[d] = f;
126.9915 +            d = ((g + 1) | 0);
126.9916 +            f = ((b + 1) | 0);
126.9917 +            e[g] = ((jl_String3_charAt176(c, b) - 122) | 0);
126.9918 +            b = f;
126.9919 +        }
126.9920 +        return a;
126.9921 +    }
126.9922 +}
126.9923 +$rt_methodStubs(otciu_UnicodeHelper256_$clinit, ['otciu_UnicodeHelper256_$init706', 'otciu_UnicodeHelper256_decodeIntByte257']);
126.9924 +otciu_UnicodeHelper256.$init706 = function() {
126.9925 +    var result = new otciu_UnicodeHelper256();
126.9926 +    result.$init706();
126.9927 +    return result;
126.9928 +}
126.9929 +$rt_virtualMethods(otciu_UnicodeHelper256,
126.9930 +    "$init706", function() { otciu_UnicodeHelper256_$init706(this); });
126.9931 +function ju_Collections$8144() {
126.9932 +}
126.9933 +$rt_declClass(ju_Collections$8144, {
126.9934 +    name : "java.util.Collections$8",
126.9935 +    interfaces : [ju_Comparator553],
126.9936 +    superclass : jl_Object7,
126.9937 +    clinit : function() { ju_Collections$8144_$clinit(); } });
126.9938 +function ju_Collections$8144_$clinit() {
126.9939 +    ju_Collections$8144_$clinit = function(){};
126.9940 +    ju_Collections$8144_$init198 = function($this) {
126.9941 +        jl_Object7_$init10($this);
126.9942 +        return;
126.9943 +    }
126.9944 +}
126.9945 +$rt_methodStubs(ju_Collections$8144_$clinit, ['ju_Collections$8144_$init198']);
126.9946 +function ju_Collections$8144_compare145($this, a, b) {
126.9947 +    return ju_Collections$8144_compare707($rt_nullCheck($this), a, b);
126.9948 +}
126.9949 +function ju_Collections$8144_compare707($this, a, b) {
126.9950 +    if ((a === null)) {
126.9951 +        a = ((-$rt_nullCheck(b).compareTo181(a)) | 0);
126.9952 +    } else {
126.9953 +        a = $rt_nullCheck(a).compareTo181(b);
126.9954 +    }
126.9955 +    return a;
126.9956 +}
126.9957 +ju_Collections$8144.$init198 = function() {
126.9958 +    var result = new ju_Collections$8144();
126.9959 +    result.$init198();
126.9960 +    return result;
126.9961 +}
126.9962 +$rt_virtualMethods(ju_Collections$8144,
126.9963 +    "$init198", function() { ju_Collections$8144_$init198(this); },
126.9964 +    "compare145", function(a, b) { return ju_Collections$8144_compare145(this, a, b); },
126.9965 +    "compare707", function(a, b) { return ju_Collections$8144_compare707(this, a, b); });
126.9966 +function oadm_Row$Html4JavaType708() {
126.9967 +}
126.9968 +$rt_declClass(oadm_Row$Html4JavaType708, {
126.9969 +    name : "org.apidesign.demo.minesweeper.Row$Html4JavaType",
126.9970 +    superclass : oahjs_Proto$Type36,
126.9971 +    clinit : function() { oadm_Row$Html4JavaType708_$clinit(); } });
126.9972 +function oadm_Row$Html4JavaType708_$clinit() {
126.9973 +    oadm_Row$Html4JavaType708_$clinit = function(){};
126.9974 +    oadm_Row$Html4JavaType708_$init709 = function($this) {
126.9975 +        var a, b, c;
126.9976 +        oahjs_Proto$Type36_$init313($this, $rt_cls(oadm_Row56), $rt_cls(oadm_MinesModel$RowModel140), 1, 0);
126.9977 +        a = $rt_str("columns");
126.9978 +        b = 0;
126.9979 +        c = 1;
126.9980 +        oahjs_Proto$Type36_registerProperty347($rt_nullCheck($this), a, b, c);
126.9981 +        return;
126.9982 +    }
126.9983 +    oadm_Row$Html4JavaType708_$init710 = function($this, a) {
126.9984 +        oadm_Row$Html4JavaType708_$init709($this);
126.9985 +        return;
126.9986 +    }
126.9987 +}
126.9988 +$rt_methodStubs(oadm_Row$Html4JavaType708_$clinit, ['oadm_Row$Html4JavaType708_$init709', 'oadm_Row$Html4JavaType708_$init710']);
126.9989 +function oadm_Row$Html4JavaType708_call359($this, a, b, c, d) {
126.9990 +    a = a;
126.9991 +    oadm_Row$Html4JavaType708_call711($rt_nullCheck($this), a, b, c, d);
126.9992 +    return;
126.9993 +}
126.9994 +function oadm_Row$Html4JavaType708_onChange712($this, a, b) {
126.9995 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.9996 +}
126.9997 +function oadm_Row$Html4JavaType708_setValue37($this, a, b, c) {
126.9998 +    a = a;
126.9999 +    oadm_Row$Html4JavaType708_setValue713($rt_nullCheck($this), a, b, c);
126.10000 +    return;
126.10001 +}
126.10002 +function oadm_Row$Html4JavaType708_protoFor370($this, a) {
126.10003 +    return oadm_Row56_access$100714(a);
126.10004 +}
126.10005 +function oadm_Row$Html4JavaType708_onChange372($this, a, b) {
126.10006 +    a = a;
126.10007 +    oadm_Row$Html4JavaType708_onChange712($rt_nullCheck($this), a, b);
126.10008 +    return;
126.10009 +}
126.10010 +function oadm_Row$Html4JavaType708_getValue39($this, a, b) {
126.10011 +    return oadm_Row$Html4JavaType708_getValue715($rt_nullCheck($this), a, b);
126.10012 +}
126.10013 +function oadm_Row$Html4JavaType708_call711($this, a, b, c, d) {
126.10014 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.10015 +}
126.10016 +function oadm_Row$Html4JavaType708_getValue715($this, a, b) {
126.10017 +    block1: {
126.10018 +        switch (b) {
126.10019 +            case 0:
126.10020 +                break;
126.10021 +            default:
126.10022 +                break block1;
126.10023 +        }
126.10024 +        return oadm_Row56_getColumns57($rt_nullCheck(a));
126.10025 +    }
126.10026 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.10027 +}
126.10028 +function oadm_Row$Html4JavaType708_setValue713($this, a, b, c) {
126.10029 +    return;
126.10030 +}
126.10031 +oadm_Row$Html4JavaType708.$init709 = function() {
126.10032 +    var result = new oadm_Row$Html4JavaType708();
126.10033 +    result.$init709();
126.10034 +    return result;
126.10035 +}
126.10036 +oadm_Row$Html4JavaType708.$init710 = function(a) {
126.10037 +    var result = new oadm_Row$Html4JavaType708();
126.10038 +    result.$init710(a);
126.10039 +    return result;
126.10040 +}
126.10041 +$rt_virtualMethods(oadm_Row$Html4JavaType708,
126.10042 +    "call359", function(a, b, c, d) { oadm_Row$Html4JavaType708_call359(this, a, b, c, d); },
126.10043 +    "onChange712", function(a, b) { oadm_Row$Html4JavaType708_onChange712(this, a, b); },
126.10044 +    "setValue37", function(a, b, c) { oadm_Row$Html4JavaType708_setValue37(this, a, b, c); },
126.10045 +    "protoFor370", function(a) { return oadm_Row$Html4JavaType708_protoFor370(this, a); },
126.10046 +    "onChange372", function(a, b) { oadm_Row$Html4JavaType708_onChange372(this, a, b); },
126.10047 +    "getValue39", function(a, b) { return oadm_Row$Html4JavaType708_getValue39(this, a, b); },
126.10048 +    "call711", function(a, b, c, d) { oadm_Row$Html4JavaType708_call711(this, a, b, c, d); },
126.10049 +    "getValue715", function(a, b) { return oadm_Row$Html4JavaType708_getValue715(this, a, b); },
126.10050 +    "$init709", function() { oadm_Row$Html4JavaType708_$init709(this); },
126.10051 +    "$init710", function(a) { oadm_Row$Html4JavaType708_$init710(this, a); },
126.10052 +    "setValue713", function(a, b, c) { oadm_Row$Html4JavaType708_setValue713(this, a, b, c); });
126.10053 +function ji_FilterOutputStream716() {
126.10054 +    this.out717 = null;
126.10055 +}
126.10056 +$rt_declClass(ji_FilterOutputStream716, {
126.10057 +    name : "java.io.FilterOutputStream",
126.10058 +    superclass : ji_OutputStream524,
126.10059 +    clinit : function() { ji_FilterOutputStream716_$clinit(); } });
126.10060 +function ji_FilterOutputStream716_$clinit() {
126.10061 +    ji_FilterOutputStream716_$clinit = function(){};
126.10062 +    ji_FilterOutputStream716_$init718 = function($this, a) {
126.10063 +        ji_OutputStream524_$init525($this);
126.10064 +        $this.out717 = a;
126.10065 +        return;
126.10066 +    }
126.10067 +}
126.10068 +$rt_methodStubs(ji_FilterOutputStream716_$clinit, ['ji_FilterOutputStream716_$init718']);
126.10069 +ji_FilterOutputStream716.$init718 = function(a) {
126.10070 +    var result = new ji_FilterOutputStream716();
126.10071 +    result.$init718(a);
126.10072 +    return result;
126.10073 +}
126.10074 +$rt_virtualMethods(ji_FilterOutputStream716,
126.10075 +    "$init718", function(a) { ji_FilterOutputStream716_$init718(this, a); });
126.10076 +function ji_PrintStream122() {
126.10077 +    this.buffer719 = null;
126.10078 +    this.autoFlush720 = false;
126.10079 +    this.errorState721 = false;
126.10080 +    this.sb722 = null;
126.10081 +    this.charset723 = null;
126.10082 +}
126.10083 +$rt_declClass(ji_PrintStream122, {
126.10084 +    name : "java.io.PrintStream",
126.10085 +    superclass : ji_FilterOutputStream716,
126.10086 +    clinit : function() { ji_PrintStream122_$clinit(); } });
126.10087 +function ji_PrintStream122_$clinit() {
126.10088 +    ji_PrintStream122_$clinit = function(){};
126.10089 +    ji_PrintStream122_$init724 = function($this, a, b) {
126.10090 +        ji_FilterOutputStream716_$init718($this, a);
126.10091 +        $this.sb722 = jl_StringBuilder16.$init17();
126.10092 +        $this.buffer719 = $rt_createCharArray(32);
126.10093 +        $this.autoFlush720 = b;
126.10094 +        $this.charset723 = otcic_Charset382_get384($rt_str("UTF-8"));
126.10095 +        return;
126.10096 +    }
126.10097 +}
126.10098 +$rt_methodStubs(ji_PrintStream122_$clinit, ['ji_PrintStream122_$init724']);
126.10099 +function ji_PrintStream122_println123($this, a) {
126.10100 +    var b;
126.10101 +    a = jl_StringBuilder16_append19($rt_nullCheck($this.sb722), a);
126.10102 +    b = 10;
126.10103 +    jl_StringBuilder16_append725($rt_nullCheck(a), b);
126.10104 +    ji_PrintStream122_printSB726($this);
126.10105 +    return;
126.10106 +}
126.10107 +function ji_PrintStream122_printSB726($this) {
126.10108 +    var a, b, c, d, e;
126.10109 +    if ((jl_StringBuilder16_length5($rt_nullCheck($this.sb722)) <= $this.buffer719.data.length)) {
126.10110 +        a = $this.buffer719;
126.10111 +    } else {
126.10112 +        a = $rt_createCharArray(jl_StringBuilder16_length5($rt_nullCheck($this.sb722)));
126.10113 +    }
126.10114 +    b = $this.sb722;
126.10115 +    c = 0;
126.10116 +    d = jl_StringBuilder16_length5($rt_nullCheck($this.sb722));
126.10117 +    e = 0;
126.10118 +    jl_StringBuilder16_getChars6($rt_nullCheck(b), c, d, a, e);
126.10119 +    ji_PrintStream122_print727($this, a, 0, jl_StringBuilder16_length5($rt_nullCheck($this.sb722)));
126.10120 +    b = $this.sb722;
126.10121 +    c = 0;
126.10122 +    jl_StringBuilder16_setLength728($rt_nullCheck(b), c);
126.10123 +    return;
126.10124 +}
126.10125 +function ji_PrintStream122_print727($this, a, b, c) {
126.10126 +    var d, e, f;
126.10127 +    d = otcic_CharBuffer287.$init291(a, b, c);
126.10128 +    a = $rt_createByteArray(jl_Math147_max463(16, jl_Math147_min148(a.data.length, 1024)));
126.10129 +    b = otcic_ByteBuffer615.$init619(a);
126.10130 +    while ((otcic_CharBuffer287_end293($rt_nullCheck(d)) == 0)) {
126.10131 +        otcic_UTF8Charset385_encode729($rt_nullCheck($this.charset723), d, b);
126.10132 +        c = 0;
126.10133 +        e = $rt_nullCheck(b);
126.10134 +        f = otcic_ByteBuffer615_position624(e);
126.10135 +        ji_PrintStream122_write526($rt_nullCheck($this), a, c, f);
126.10136 +        otcic_ByteBuffer615_rewind622(e, 0);
126.10137 +    }
126.10138 +    return;
126.10139 +}
126.10140 +function ji_PrintStream122_check730($this) {
126.10141 +    var a;
126.10142 +    if (($this.out717 === null)) {
126.10143 +        $this.errorState721 = 1;
126.10144 +    }
126.10145 +    if (($this.errorState721 != 0)) {
126.10146 +        a = 0;
126.10147 +    } else {
126.10148 +        a = 1;
126.10149 +    }
126.10150 +    return a;
126.10151 +}
126.10152 +function ji_PrintStream122_write526($this, a, b, c) {
126.10153 +    if ((ji_PrintStream122_check730($this) != 0)) {
126.10154 +        block2: {
126.10155 +            block3: {
126.10156 +                try {
126.10157 +                    ji_OutputStream524_write526($rt_nullCheck($this.out717), a, b, c);
126.10158 +                } catch ($e) {
126.10159 +                    $je = $e.$javaException;
126.10160 +                    if ($je && $je instanceof ji_IOException538) {
126.10161 +                        a = $je;
126.10162 +                        break block3;
126.10163 +                    } else {
126.10164 +                        throw $e;
126.10165 +                    }
126.10166 +                }
126.10167 +                break block2;
126.10168 +            }
126.10169 +            $this.errorState721 = 1;
126.10170 +        }
126.10171 +        return;
126.10172 +    }
126.10173 +    return;
126.10174 +}
126.10175 +ji_PrintStream122.$init724 = function(a, b) {
126.10176 +    var result = new ji_PrintStream122();
126.10177 +    result.$init724(a, b);
126.10178 +    return result;
126.10179 +}
126.10180 +$rt_virtualMethods(ji_PrintStream122,
126.10181 +    "$init724", function(a, b) { ji_PrintStream122_$init724(this, a, b); },
126.10182 +    "println123", function(a) { ji_PrintStream122_println123(this, a); },
126.10183 +    "printSB726", function() { ji_PrintStream122_printSB726(this); },
126.10184 +    "print727", function(a, b, c) { ji_PrintStream122_print727(this, a, b, c); },
126.10185 +    "check730", function() { return ji_PrintStream122_check730(this); },
126.10186 +    "write526", function(a, b, c) { ji_PrintStream122_write526(this, a, b, c); });
126.10187 +function jl_StringIndexOutOfBoundsException177() {
126.10188 +}
126.10189 +$rt_declClass(jl_StringIndexOutOfBoundsException177, {
126.10190 +    name : "java.lang.StringIndexOutOfBoundsException",
126.10191 +    superclass : jl_IndexOutOfBoundsException157,
126.10192 +    clinit : function() { jl_StringIndexOutOfBoundsException177_$clinit(); } });
126.10193 +function jl_StringIndexOutOfBoundsException177_$clinit() {
126.10194 +    jl_StringIndexOutOfBoundsException177_$clinit = function(){};
126.10195 +    jl_StringIndexOutOfBoundsException177_$init178 = function($this) {
126.10196 +        jl_IndexOutOfBoundsException157_$init158($this);
126.10197 +        return;
126.10198 +    }
126.10199 +}
126.10200 +$rt_methodStubs(jl_StringIndexOutOfBoundsException177_$clinit, ['jl_StringIndexOutOfBoundsException177_$init178']);
126.10201 +jl_StringIndexOutOfBoundsException177.$init178 = function() {
126.10202 +    var result = new jl_StringIndexOutOfBoundsException177();
126.10203 +    result.$init178();
126.10204 +    return result;
126.10205 +}
126.10206 +$rt_virtualMethods(jl_StringIndexOutOfBoundsException177,
126.10207 +    "$init178", function() { jl_StringIndexOutOfBoundsException177_$init178(this); });
126.10208 +function jl_Appendable731() {
126.10209 +}
126.10210 +$rt_declClass(jl_Appendable731, {
126.10211 +    name : "java.lang.Appendable",
126.10212 +    superclass : jl_Object7 });
126.10213 +function jl_Byte337() {
126.10214 +    this.value732 = 0;
126.10215 +}
126.10216 +jl_Byte337.TYPE733 = null;
126.10217 +$rt_declClass(jl_Byte337, {
126.10218 +    name : "java.lang.Byte",
126.10219 +    interfaces : [jl_Comparable163],
126.10220 +    superclass : jl_Number325,
126.10221 +    clinit : function() { jl_Byte337_$clinit(); } });
126.10222 +function jl_Byte337_$clinit() {
126.10223 +    jl_Byte337_$clinit = function(){};
126.10224 +    jl_Byte337_valueOf339 = function(a) {
126.10225 +        return jl_Byte337.$init734(a);
126.10226 +    }
126.10227 +    jl_Byte337_$clinit735 = function() {
126.10228 +        jl_Byte337.TYPE733 = $rt_cls($rt_bytecls());
126.10229 +        return;
126.10230 +    }
126.10231 +    jl_Byte337_$init734 = function($this, a) {
126.10232 +        jl_Number325_$init423($this);
126.10233 +        $this.value732 = a;
126.10234 +        return;
126.10235 +    }
126.10236 +    jl_Byte337_compare736 = function(a, b) {
126.10237 +        return ((a - b) | 0);
126.10238 +    }
126.10239 +    jl_Byte337_$clinit735();
126.10240 +}
126.10241 +$rt_methodStubs(jl_Byte337_$clinit, ['jl_Byte337_valueOf339', 'jl_Byte337_$clinit735', 'jl_Byte337_$init734', 'jl_Byte337_compare736']);
126.10242 +function jl_Byte337_doubleValue341($this) {
126.10243 +    return $this.value732;
126.10244 +}
126.10245 +function jl_Byte337_intValue87($this) {
126.10246 +    return $this.value732;
126.10247 +}
126.10248 +function jl_Byte337_byteValue338($this) {
126.10249 +    return $this.value732;
126.10250 +}
126.10251 +function jl_Byte337_longValue332($this) {
126.10252 +    return Long_fromInt($this.value732);
126.10253 +}
126.10254 +function jl_Byte337_compareTo737($this, a) {
126.10255 +    return jl_Byte337_compare736($this.value732, a.value732);
126.10256 +}
126.10257 +function jl_Byte337_compareTo181($this, a) {
126.10258 +    return jl_Byte337_compareTo737($rt_nullCheck($this), a);
126.10259 +}
126.10260 +function jl_Byte337_floatValue344($this) {
126.10261 +    return $this.value732;
126.10262 +}
126.10263 +jl_Byte337.$init734 = function(a) {
126.10264 +    var result = new jl_Byte337();
126.10265 +    result.$init734(a);
126.10266 +    return result;
126.10267 +}
126.10268 +$rt_virtualMethods(jl_Byte337,
126.10269 +    "doubleValue341", function() { return jl_Byte337_doubleValue341(this); },
126.10270 +    "$init734", function(a) { jl_Byte337_$init734(this, a); },
126.10271 +    "intValue87", function() { return jl_Byte337_intValue87(this); },
126.10272 +    "byteValue338", function() { return jl_Byte337_byteValue338(this); },
126.10273 +    "longValue332", function() { return jl_Byte337_longValue332(this); },
126.10274 +    "compareTo737", function(a) { return jl_Byte337_compareTo737(this, a); },
126.10275 +    "compareTo181", function(a) { return jl_Byte337_compareTo181(this, a); },
126.10276 +    "floatValue344", function() { return jl_Byte337_floatValue344(this); });
126.10277 +function jl_System125() {
126.10278 +}
126.10279 +jl_System125.err126 = null;
126.10280 +jl_System125.out738 = null;
126.10281 +$rt_declClass(jl_System125, {
126.10282 +    name : "java.lang.System",
126.10283 +    superclass : jl_Object7,
126.10284 +    clinit : function() { jl_System125_$clinit(); } });
126.10285 +function jl_System125_$clinit() {
126.10286 +    jl_System125_$clinit = function(){};
126.10287 +    jl_System125_$clinit739 = function() {
126.10288 +        jl_System125.out738 = ji_PrintStream122.$init724(jl_ConsoleOutputStream_stdout528.$init529(), 0);
126.10289 +        jl_System125.err126 = ji_PrintStream122.$init724(jl_ConsoleOutputStream_stderr595.$init596(), 0);
126.10290 +        return;
126.10291 +    }
126.10292 +    jl_System125_currentTimeMillis549 = function() {
126.10293 +        return Long_fromNumber(new Date().getTime());
126.10294 +    }
126.10295 +    jl_System125_$init740 = function($this) {
126.10296 +        jl_Object7_$init10($this);
126.10297 +        return;
126.10298 +    }
126.10299 +    jl_System125_$clinit739();
126.10300 +}
126.10301 +$rt_methodStubs(jl_System125_$clinit, ['jl_System125_$clinit739', 'jl_System125_currentTimeMillis549', 'jl_System125_$init740']);
126.10302 +jl_System125.$init740 = function() {
126.10303 +    var result = new jl_System125();
126.10304 +    result.$init740();
126.10305 +    return result;
126.10306 +}
126.10307 +$rt_virtualMethods(jl_System125,
126.10308 +    "$init740", function() { jl_System125_$init740(this); });
126.10309 +function jl_AbstractStringBuilder741() {
126.10310 +    this.buffer742 = null;
126.10311 +    this.length743 = 0;
126.10312 +}
126.10313 +jl_AbstractStringBuilder741.longPowersOfTen744 = null;
126.10314 +jl_AbstractStringBuilder741.doublePowersOfTen745 = null;
126.10315 +jl_AbstractStringBuilder741.negDoublePowersOfTen746 = null;
126.10316 +jl_AbstractStringBuilder741.longLogPowersOfTen747 = null;
126.10317 +jl_AbstractStringBuilder741.intPowersOfTen748 = null;
126.10318 +jl_AbstractStringBuilder741.negPowersOfTen749 = null;
126.10319 +jl_AbstractStringBuilder741.powersOfTen750 = null;
126.10320 +$rt_declClass(jl_AbstractStringBuilder741, {
126.10321 +    name : "java.lang.AbstractStringBuilder",
126.10322 +    interfaces : [jl_CharSequence162, ji_Serializable164],
126.10323 +    superclass : jl_Object7,
126.10324 +    clinit : function() { jl_AbstractStringBuilder741_$clinit(); } });
126.10325 +function jl_AbstractStringBuilder741_$clinit() {
126.10326 +    jl_AbstractStringBuilder741_$clinit = function(){};
126.10327 +    jl_AbstractStringBuilder741_$init751 = function($this, a) {
126.10328 +        jl_Object7_$init10($this);
126.10329 +        $this.buffer742 = $rt_createCharArray(a);
126.10330 +        return;
126.10331 +    }
126.10332 +    jl_AbstractStringBuilder741_trailingDecimalZeros752 = function(a) {
126.10333 +        var b, c, d, e;
126.10334 +        b = Long_fromInt(1);
126.10335 +        c = 0;
126.10336 +        d = 16;
126.10337 +        e = ((jl_AbstractStringBuilder741.longLogPowersOfTen747.data.length - 1) | 0);
126.10338 +        while ((e >= 0)) {
126.10339 +            if ((Long_compare(Long_rem(a, Long_mul(b, jl_AbstractStringBuilder741.longLogPowersOfTen747.data[e])), Long_ZERO) == 0)) {
126.10340 +                c = (c | d);
126.10341 +                b = Long_mul(b, jl_AbstractStringBuilder741.longLogPowersOfTen747.data[e]);
126.10342 +            }
126.10343 +            d = (d >>> 1);
126.10344 +            e = ((e + -1) | 0);
126.10345 +        }
126.10346 +        return c;
126.10347 +    }
126.10348 +    jl_AbstractStringBuilder741_trailingDecimalZeros753 = function(a) {
126.10349 +        var b, c;
126.10350 +        if (((a % 1000000000) != 0)) {
126.10351 +            b = 0;
126.10352 +            c = 1;
126.10353 +            if (((a % 100000000) == 0)) {
126.10354 +                b = (b | 8);
126.10355 +                c = ((c * 100000000) | 0);
126.10356 +            }
126.10357 +            if (((a % ((c * 10000) | 0)) == 0)) {
126.10358 +                b = (b | 4);
126.10359 +                c = ((c * 10000) | 0);
126.10360 +            }
126.10361 +            if (((a % ((c * 100) | 0)) == 0)) {
126.10362 +                b = (b | 2);
126.10363 +                c = ((c * 100) | 0);
126.10364 +            }
126.10365 +            if (((a % ((c * 10) | 0)) == 0)) {
126.10366 +                b = (b | 1);
126.10367 +            }
126.10368 +            return b;
126.10369 +        }
126.10370 +        return 9;
126.10371 +    }
126.10372 +    jl_AbstractStringBuilder741_$clinit754 = function() {
126.10373 +        var a, b, c, d;
126.10374 +        a = $rt_createFloatArray(6);
126.10375 +        b = 0;
126.10376 +        c = 10.0;
126.10377 +        d = a.data;
126.10378 +        d[b] = c;
126.10379 +        d[1] = 100.0;
126.10380 +        d[2] = 10000.0;
126.10381 +        d[3] = 1.0E8;
126.10382 +        d[4] = 1.00000003E16;
126.10383 +        d[5] = 1.0E32;
126.10384 +        jl_AbstractStringBuilder741.powersOfTen750 = a;
126.10385 +        a = $rt_createDoubleArray(9);
126.10386 +        b = 0;
126.10387 +        c = 10.0;
126.10388 +        d = a.data;
126.10389 +        d[b] = c;
126.10390 +        d[1] = 100.0;
126.10391 +        d[2] = 10000.0;
126.10392 +        d[3] = 1.0E8;
126.10393 +        d[4] = 1.0E16;
126.10394 +        d[5] = 1.0E32;
126.10395 +        d[6] = 1.0E64;
126.10396 +        d[7] = 1.0E128;
126.10397 +        d[8] = 1.0E256;
126.10398 +        jl_AbstractStringBuilder741.doublePowersOfTen745 = a;
126.10399 +        a = $rt_createFloatArray(6);
126.10400 +        b = 0;
126.10401 +        c = 0.1;
126.10402 +        d = a.data;
126.10403 +        d[b] = c;
126.10404 +        d[1] = 0.01;
126.10405 +        d[2] = 1.0E-4;
126.10406 +        d[3] = 1.0E-8;
126.10407 +        d[4] = 1.0E-16;
126.10408 +        d[5] = 1.0E-32;
126.10409 +        jl_AbstractStringBuilder741.negPowersOfTen749 = a;
126.10410 +        a = $rt_createDoubleArray(9);
126.10411 +        b = 0;
126.10412 +        c = 0.1;
126.10413 +        d = a.data;
126.10414 +        d[b] = c;
126.10415 +        d[1] = 0.01;
126.10416 +        d[2] = 1.0E-4;
126.10417 +        d[3] = 1.0E-8;
126.10418 +        d[4] = 1.0E-16;
126.10419 +        d[5] = 1.0E-32;
126.10420 +        d[6] = 1.0E-64;
126.10421 +        d[7] = 1.0E-128;
126.10422 +        d[8] = 1.0E-256;
126.10423 +        jl_AbstractStringBuilder741.negDoublePowersOfTen746 = a;
126.10424 +        a = $rt_createIntArray(10);
126.10425 +        b = 0;
126.10426 +        c = 1;
126.10427 +        d = a.data;
126.10428 +        d[b] = c;
126.10429 +        d[1] = 10;
126.10430 +        d[2] = 100;
126.10431 +        d[3] = 1000;
126.10432 +        d[4] = 10000;
126.10433 +        d[5] = 100000;
126.10434 +        d[6] = 1000000;
126.10435 +        d[7] = 10000000;
126.10436 +        d[8] = 100000000;
126.10437 +        d[9] = 1000000000;
126.10438 +        jl_AbstractStringBuilder741.intPowersOfTen748 = a;
126.10439 +        a = $rt_createLongArray(19);
126.10440 +        b = 0;
126.10441 +        c = Long_fromInt(1);
126.10442 +        d = a.data;
126.10443 +        d[b] = c;
126.10444 +        d[1] = Long_fromInt(10);
126.10445 +        d[2] = Long_fromInt(100);
126.10446 +        d[3] = Long_fromInt(1000);
126.10447 +        d[4] = Long_fromInt(10000);
126.10448 +        d[5] = Long_fromInt(100000);
126.10449 +        d[6] = Long_fromInt(1000000);
126.10450 +        d[7] = Long_fromInt(10000000);
126.10451 +        d[8] = Long_fromInt(100000000);
126.10452 +        d[9] = Long_fromInt(1000000000);
126.10453 +        d[10] = new Long(1410065408, 2);
126.10454 +        d[11] = new Long(1215752192, 23);
126.10455 +        d[12] = new Long(3567587328, 232);
126.10456 +        d[13] = new Long(1316134912, 2328);
126.10457 +        d[14] = new Long(276447232, 23283);
126.10458 +        d[15] = new Long(2764472320, 232830);
126.10459 +        d[16] = new Long(1874919424, 2328306);
126.10460 +        d[17] = new Long(1569325056, 23283064);
126.10461 +        d[18] = new Long(2808348672, 232830643);
126.10462 +        jl_AbstractStringBuilder741.longPowersOfTen744 = a;
126.10463 +        a = $rt_createLongArray(6);
126.10464 +        b = 0;
126.10465 +        c = Long_fromInt(1);
126.10466 +        d = a.data;
126.10467 +        d[b] = c;
126.10468 +        d[1] = Long_fromInt(10);
126.10469 +        d[2] = Long_fromInt(100);
126.10470 +        d[3] = Long_fromInt(10000);
126.10471 +        d[4] = Long_fromInt(100000000);
126.10472 +        d[5] = new Long(1874919424, 2328306);
126.10473 +        jl_AbstractStringBuilder741.longLogPowersOfTen747 = a;
126.10474 +        return;
126.10475 +    }
126.10476 +    jl_AbstractStringBuilder741_$init755 = function($this) {
126.10477 +        jl_AbstractStringBuilder741_$init751($this, 16);
126.10478 +        return;
126.10479 +    }
126.10480 +    jl_AbstractStringBuilder741_$clinit754();
126.10481 +}
126.10482 +$rt_methodStubs(jl_AbstractStringBuilder741_$clinit, ['jl_AbstractStringBuilder741_$init751', 'jl_AbstractStringBuilder741_trailingDecimalZeros752', 'jl_AbstractStringBuilder741_trailingDecimalZeros753', 'jl_AbstractStringBuilder741_$clinit754', 'jl_AbstractStringBuilder741_$init755']);
126.10483 +function jl_AbstractStringBuilder741_ensureCapacity756($this, a) {
126.10484 +    if (($this.buffer742.data.length < a)) {
126.10485 +        $this.buffer742 = ju_Arrays142_copyOf146($this.buffer742, ((((a * 2) | 0) + 1) | 0));
126.10486 +        return;
126.10487 +    }
126.10488 +    return;
126.10489 +}
126.10490 +function jl_AbstractStringBuilder741_length5($this) {
126.10491 +    return $this.length743;
126.10492 +}
126.10493 +function jl_AbstractStringBuilder741_append757($this, a) {
126.10494 +    var b, c, d;
126.10495 +    b = 1;
126.10496 +    if ((Long_compare(a, Long_ZERO) < 0)) {
126.10497 +        b = 0;
126.10498 +        a = Long_neg(a);
126.10499 +    }
126.10500 +    block3: {
126.10501 +        if ((Long_compare(a, Long_fromInt(10)) >= 0)) {
126.10502 +            c = Long_fromInt(10);
126.10503 +            d = 1;
126.10504 +            while (((Long_compare(c, new Long(2808348672, 232830643)) < 0) && (Long_compare(Long_mul(c, Long_fromInt(10)), a) <= 0))) {
126.10505 +                c = Long_mul(c, Long_fromInt(10));
126.10506 +                d = ((d + 1) | 0);
126.10507 +            }
126.10508 +            if ((b == 0)) {
126.10509 +                d = ((d + 1) | 0);
126.10510 +            }
126.10511 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + d) | 0));
126.10512 +            if ((b == 0)) {
126.10513 +                b = $this.buffer742;
126.10514 +                d = $this.length743;
126.10515 +                $this.length743 = ((d + 1) | 0);
126.10516 +                b.data[d] = 45;
126.10517 +            }
126.10518 +            while (true) {
126.10519 +                if ((Long_compare(c, Long_ZERO) <= 0)) {
126.10520 +                    break block3;
126.10521 +                }
126.10522 +                b = $this.buffer742;
126.10523 +                d = $this.length743;
126.10524 +                $this.length743 = ((d + 1) | 0);
126.10525 +                b.data[d] = (Long_toNumber(Long_add(Long_fromInt(48), Long_div(a, c))) & 65535);
126.10526 +                a = Long_rem(a, c);
126.10527 +                c = Long_div(c, Long_fromInt(10));
126.10528 +            }
126.10529 +        }
126.10530 +        if ((b != 0)) {
126.10531 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 1) | 0));
126.10532 +        } else {
126.10533 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 2) | 0));
126.10534 +            c = $this.buffer742;
126.10535 +            b = $this.length743;
126.10536 +            $this.length743 = ((b + 1) | 0);
126.10537 +            c.data[b] = 45;
126.10538 +        }
126.10539 +        c = $this.buffer742;
126.10540 +        b = $this.length743;
126.10541 +        $this.length743 = ((b + 1) | 0);
126.10542 +        a = (Long_toNumber(Long_add(Long_fromInt(48), a)) & 65535);
126.10543 +        c.data[b] = a;
126.10544 +    }
126.10545 +    return $this;
126.10546 +}
126.10547 +function jl_AbstractStringBuilder741_insert758($this, a, b) {
126.10548 +    var c, d, e;
126.10549 +    if (((a >= 0) && (a <= $this.length743))) {
126.10550 +        block2: {
126.10551 +            if ((b !== null)) {
126.10552 +                if ((jl_String3_isEmpty184($rt_nullCheck(b)) == 0)) {
126.10553 +                    break block2;
126.10554 +                }
126.10555 +                return $this;
126.10556 +            }
126.10557 +            b = $rt_str("null");
126.10558 +        }
126.10559 +        c = $this.length743;
126.10560 +        d = $rt_nullCheck(b);
126.10561 +        jl_AbstractStringBuilder741_ensureCapacity756($this, ((c + jl_String3_length5(d)) | 0));
126.10562 +        if ((a < $this.length743)) {
126.10563 +            b = (($this.length743 - 1) | 0);
126.10564 +            while ((b >= a)) {
126.10565 +                $this.buffer742.data[((b + jl_String3_length5(d)) | 0)] = $this.buffer742.data[b];
126.10566 +                b = ((b + -1) | 0);
126.10567 +            }
126.10568 +            $this.length743 = (($this.length743 + jl_String3_length5(d)) | 0);
126.10569 +        }
126.10570 +        b = 0;
126.10571 +        while ((b < jl_String3_length5(d))) {
126.10572 +            c = $this.buffer742;
126.10573 +            e = ((a + 1) | 0);
126.10574 +            c.data[a] = jl_String3_charAt176(d, b);
126.10575 +            b = ((b + 1) | 0);
126.10576 +            a = e;
126.10577 +        }
126.10578 +        $this.length743 = a;
126.10579 +        return $this;
126.10580 +    }
126.10581 +    $rt_throw(jl_StringIndexOutOfBoundsException177.$init178());
126.10582 +}
126.10583 +function jl_AbstractStringBuilder741_append759($this, a) {
126.10584 +    var b, c, d, e, f, g, h, i;
126.10585 +    if ((a != 0.0)) {
126.10586 +        if ((a != 0.0)) {
126.10587 +            if ((jl_Float343_isNaN427(a) == 0)) {
126.10588 +                if ((jl_Float343_isInfinite430(a) == 0)) {
126.10589 +                    b = 0;
126.10590 +                    c = 1;
126.10591 +                    if ((a < 0.0)) {
126.10592 +                        b = 1;
126.10593 +                        a = (-a);
126.10594 +                        c = ((c + 1) | 0);
126.10595 +                    }
126.10596 +                    d = 1;
126.10597 +                    if ((a < 1.0)) {
126.10598 +                        c = ((c + 1) | 0);
126.10599 +                        e = 32;
126.10600 +                        f = 0;
126.10601 +                        g = 1.0;
126.10602 +                        h = ((jl_AbstractStringBuilder741.negPowersOfTen749.data.length - 1) | 0);
126.10603 +                        while ((h >= 0)) {
126.10604 +                            i = (f | e);
126.10605 +                            if (((i <= 38) && (((jl_AbstractStringBuilder741.negPowersOfTen749.data[h] * g) * 10.0) > a))) {
126.10606 +                                g = (g * jl_AbstractStringBuilder741.negPowersOfTen749.data[h]);
126.10607 +                                f = i;
126.10608 +                            }
126.10609 +                            e = (e >> 1);
126.10610 +                            h = ((h + -1) | 0);
126.10611 +                        }
126.10612 +                        f = ((-f) | 0);
126.10613 +                        g = ((((a * 1000000.0) / g) + 0.5) | 0);
126.10614 +                    } else {
126.10615 +                        e = 32;
126.10616 +                        f = 0;
126.10617 +                        g = 1.0;
126.10618 +                        h = ((jl_AbstractStringBuilder741.powersOfTen750.data.length - 1) | 0);
126.10619 +                        while ((h >= 0)) {
126.10620 +                            i = (f | e);
126.10621 +                            if (((i <= 38) && ((jl_AbstractStringBuilder741.powersOfTen750.data[h] * g) < a))) {
126.10622 +                                g = (g * jl_AbstractStringBuilder741.powersOfTen750.data[h]);
126.10623 +                                f = i;
126.10624 +                            }
126.10625 +                            e = (e >> 1);
126.10626 +                            h = ((h + -1) | 0);
126.10627 +                        }
126.10628 +                        g = (((a / (g / 1000000.0)) + 0.5) | 0);
126.10629 +                    }
126.10630 +                    h = 7;
126.10631 +                    a = jl_AbstractStringBuilder741_trailingDecimalZeros753(g);
126.10632 +                    if ((a > 0)) {
126.10633 +                        h = ((h - a) | 0);
126.10634 +                    }
126.10635 +                    if (((f < 7) && (f >= -3))) {
126.10636 +                        if ((f >= 0)) {
126.10637 +                            d = ((f + 1) | 0);
126.10638 +                            h = jl_Math147_max463(h, ((d + 1) | 0));
126.10639 +                            f = 0;
126.10640 +                        } else if ((f < 0)) {
126.10641 +                            g = ((g / jl_AbstractStringBuilder741.intPowersOfTen748.data[((-f) | 0)]) | 0);
126.10642 +                            h = ((h - f) | 0);
126.10643 +                            f = 0;
126.10644 +                        }
126.10645 +                    }
126.10646 +                    a = ((c + h) | 0);
126.10647 +                    if ((f != 0)) {
126.10648 +                        a = ((a + 2) | 0);
126.10649 +                        if ((!((f > -10) && (f < 10)))) {
126.10650 +                            a = ((a + 1) | 0);
126.10651 +                        }
126.10652 +                    }
126.10653 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + a) | 0));
126.10654 +                    if ((b != 0)) {
126.10655 +                        a = $this.buffer742;
126.10656 +                        b = $this.length743;
126.10657 +                        $this.length743 = ((b + 1) | 0);
126.10658 +                        a.data[b] = 45;
126.10659 +                    }
126.10660 +                    a = 1000000;
126.10661 +                    b = 0;
126.10662 +                    while ((b < h)) {
126.10663 +                        if ((a <= 0)) {
126.10664 +                            e = 0;
126.10665 +                        } else {
126.10666 +                            e = ((g / a) | 0);
126.10667 +                            g = (g % a);
126.10668 +                        }
126.10669 +                        i = $this.buffer742;
126.10670 +                        c = $this.length743;
126.10671 +                        $this.length743 = ((c + 1) | 0);
126.10672 +                        i.data[c] = (((48 + e) | 0) & 65535);
126.10673 +                        d = ((d + -1) | 0);
126.10674 +                        if ((d == 0)) {
126.10675 +                            e = $this.buffer742;
126.10676 +                            i = $this.length743;
126.10677 +                            $this.length743 = ((i + 1) | 0);
126.10678 +                            e.data[i] = 46;
126.10679 +                        }
126.10680 +                        a = ((a / 10) | 0);
126.10681 +                        b = ((b + 1) | 0);
126.10682 +                    }
126.10683 +                    if ((f != 0)) {
126.10684 +                        a = $this.buffer742;
126.10685 +                        b = $this.length743;
126.10686 +                        $this.length743 = ((b + 1) | 0);
126.10687 +                        a.data[b] = 69;
126.10688 +                        if ((f < 0)) {
126.10689 +                            f = ((-f) | 0);
126.10690 +                            a = $this.buffer742;
126.10691 +                            b = $this.length743;
126.10692 +                            $this.length743 = ((b + 1) | 0);
126.10693 +                            a.data[b] = 45;
126.10694 +                        }
126.10695 +                        if ((f >= 10)) {
126.10696 +                            a = $this.buffer742;
126.10697 +                            b = $this.length743;
126.10698 +                            $this.length743 = ((b + 1) | 0);
126.10699 +                            a.data[b] = (((48 + ((f / 10) | 0)) | 0) & 65535);
126.10700 +                        }
126.10701 +                        a = $this.buffer742;
126.10702 +                        b = $this.length743;
126.10703 +                        $this.length743 = ((b + 1) | 0);
126.10704 +                        a.data[b] = (((48 + (f % 10)) | 0) & 65535);
126.10705 +                    }
126.10706 +                    return $this;
126.10707 +                }
126.10708 +                if ((a <= 0.0)) {
126.10709 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 9) | 0));
126.10710 +                    a = $this.buffer742;
126.10711 +                    b = $this.length743;
126.10712 +                    $this.length743 = ((b + 1) | 0);
126.10713 +                    a.data[b] = 45;
126.10714 +                } else {
126.10715 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 8) | 0));
126.10716 +                }
126.10717 +                a = $this.buffer742;
126.10718 +                b = $this.length743;
126.10719 +                $this.length743 = ((b + 1) | 0);
126.10720 +                a.data[b] = 73;
126.10721 +                a = $this.buffer742;
126.10722 +                b = $this.length743;
126.10723 +                $this.length743 = ((b + 1) | 0);
126.10724 +                a.data[b] = 110;
126.10725 +                a = $this.buffer742;
126.10726 +                b = $this.length743;
126.10727 +                $this.length743 = ((b + 1) | 0);
126.10728 +                a.data[b] = 102;
126.10729 +                a = $this.buffer742;
126.10730 +                b = $this.length743;
126.10731 +                $this.length743 = ((b + 1) | 0);
126.10732 +                a.data[b] = 105;
126.10733 +                a = $this.buffer742;
126.10734 +                b = $this.length743;
126.10735 +                $this.length743 = ((b + 1) | 0);
126.10736 +                a.data[b] = 110;
126.10737 +                a = $this.buffer742;
126.10738 +                b = $this.length743;
126.10739 +                $this.length743 = ((b + 1) | 0);
126.10740 +                a.data[b] = 105;
126.10741 +                a = $this.buffer742;
126.10742 +                b = $this.length743;
126.10743 +                $this.length743 = ((b + 1) | 0);
126.10744 +                a.data[b] = 116;
126.10745 +                a = $this.buffer742;
126.10746 +                b = $this.length743;
126.10747 +                $this.length743 = ((b + 1) | 0);
126.10748 +                a.data[b] = 121;
126.10749 +                return $this;
126.10750 +            }
126.10751 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 3) | 0));
126.10752 +            a = $this.buffer742;
126.10753 +            b = $this.length743;
126.10754 +            $this.length743 = ((b + 1) | 0);
126.10755 +            a.data[b] = 78;
126.10756 +            a = $this.buffer742;
126.10757 +            b = $this.length743;
126.10758 +            $this.length743 = ((b + 1) | 0);
126.10759 +            a.data[b] = 97;
126.10760 +            a = $this.buffer742;
126.10761 +            b = $this.length743;
126.10762 +            $this.length743 = ((b + 1) | 0);
126.10763 +            a.data[b] = 78;
126.10764 +            return $this;
126.10765 +        }
126.10766 +        jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 4) | 0));
126.10767 +        a = $this.buffer742;
126.10768 +        b = $this.length743;
126.10769 +        $this.length743 = ((b + 1) | 0);
126.10770 +        a.data[b] = 45;
126.10771 +        a = $this.buffer742;
126.10772 +        b = $this.length743;
126.10773 +        $this.length743 = ((b + 1) | 0);
126.10774 +        a.data[b] = 48;
126.10775 +        a = $this.buffer742;
126.10776 +        b = $this.length743;
126.10777 +        $this.length743 = ((b + 1) | 0);
126.10778 +        a.data[b] = 46;
126.10779 +        a = $this.buffer742;
126.10780 +        b = $this.length743;
126.10781 +        $this.length743 = ((b + 1) | 0);
126.10782 +        a.data[b] = 48;
126.10783 +        return $this;
126.10784 +    }
126.10785 +    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 3) | 0));
126.10786 +    a = $this.buffer742;
126.10787 +    b = $this.length743;
126.10788 +    $this.length743 = ((b + 1) | 0);
126.10789 +    e = 48;
126.10790 +    a.data[b] = e;
126.10791 +    a = $this.buffer742;
126.10792 +    b = $this.length743;
126.10793 +    $this.length743 = ((b + 1) | 0);
126.10794 +    e = 46;
126.10795 +    a.data[b] = e;
126.10796 +    a = $this.buffer742;
126.10797 +    b = $this.length743;
126.10798 +    $this.length743 = ((b + 1) | 0);
126.10799 +    e = 48;
126.10800 +    a.data[b] = e;
126.10801 +    return $this;
126.10802 +}
126.10803 +function jl_AbstractStringBuilder741_append760($this, a) {
126.10804 +    return jl_AbstractStringBuilder741_append761($rt_nullCheck($this), a, 10);
126.10805 +}
126.10806 +function jl_AbstractStringBuilder741_toString15($this) {
126.10807 +    return jl_String3.$init167($this.buffer742, 0, $this.length743);
126.10808 +}
126.10809 +function jl_AbstractStringBuilder741_append761($this, a, b) {
126.10810 +    var c, d, e, f;
126.10811 +    c = 1;
126.10812 +    if ((a < 0)) {
126.10813 +        c = 0;
126.10814 +        a = ((-a) | 0);
126.10815 +    }
126.10816 +    block3: {
126.10817 +        if ((a >= b)) {
126.10818 +            d = 1;
126.10819 +            e = 1;
126.10820 +            f = a;
126.10821 +            while ((f > b)) {
126.10822 +                d = ((d * b) | 0);
126.10823 +                f = ((f / b) | 0);
126.10824 +                e = ((e + 1) | 0);
126.10825 +            }
126.10826 +            if ((c == 0)) {
126.10827 +                e = ((e + 1) | 0);
126.10828 +            }
126.10829 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + e) | 0));
126.10830 +            if ((c == 0)) {
126.10831 +                f = $this.buffer742;
126.10832 +                e = $this.length743;
126.10833 +                $this.length743 = ((e + 1) | 0);
126.10834 +                f.data[e] = 45;
126.10835 +            }
126.10836 +            while (true) {
126.10837 +                if ((d <= 0)) {
126.10838 +                    break block3;
126.10839 +                }
126.10840 +                f = $this.buffer742;
126.10841 +                e = $this.length743;
126.10842 +                $this.length743 = ((e + 1) | 0);
126.10843 +                f.data[e] = jl_Character187_forDigit252(((a / d) | 0), b);
126.10844 +                a = (a % d);
126.10845 +                d = ((d / b) | 0);
126.10846 +            }
126.10847 +        }
126.10848 +        if ((c != 0)) {
126.10849 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 1) | 0));
126.10850 +        } else {
126.10851 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 2) | 0));
126.10852 +            b = $this.buffer742;
126.10853 +            f = $this.length743;
126.10854 +            $this.length743 = ((f + 1) | 0);
126.10855 +            b.data[f] = 45;
126.10856 +        }
126.10857 +        b = $this.buffer742;
126.10858 +        f = $this.length743;
126.10859 +        $this.length743 = ((f + 1) | 0);
126.10860 +        a = (((48 + a) | 0) & 65535);
126.10861 +        b.data[f] = a;
126.10862 +    }
126.10863 +    return $this;
126.10864 +}
126.10865 +function jl_AbstractStringBuilder741_append762($this, a) {
126.10866 +    var b, c;
126.10867 +    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 1) | 0));
126.10868 +    b = $this.buffer742;
126.10869 +    c = $this.length743;
126.10870 +    $this.length743 = ((c + 1) | 0);
126.10871 +    b.data[c] = a;
126.10872 +    return $this;
126.10873 +}
126.10874 +function jl_AbstractStringBuilder741_setLength728($this, a) {
126.10875 +    $this.length743 = a;
126.10876 +    return;
126.10877 +}
126.10878 +function jl_AbstractStringBuilder741_append763($this, a) {
126.10879 +    var b, c, d, e, f, g, h, i;
126.10880 +    if ((a != 0.0)) {
126.10881 +        if ((a != 0.0)) {
126.10882 +            if ((jl_Double340_isNaN764(a) == 0)) {
126.10883 +                if ((jl_Double340_isInfinite765(a) == 0)) {
126.10884 +                    b = 0;
126.10885 +                    c = 1;
126.10886 +                    if ((a < 0.0)) {
126.10887 +                        b = 1;
126.10888 +                        a = (-a);
126.10889 +                        c = ((c + 1) | 0);
126.10890 +                    }
126.10891 +                    d = 1;
126.10892 +                    if ((a < 1.0)) {
126.10893 +                        c = ((c + 1) | 0);
126.10894 +                        e = 256;
126.10895 +                        f = 0;
126.10896 +                        g = 1.0;
126.10897 +                        h = ((jl_AbstractStringBuilder741.negDoublePowersOfTen746.data.length - 1) | 0);
126.10898 +                        while ((h >= 0)) {
126.10899 +                            i = (f | e);
126.10900 +                            if (((i <= 308) && (((jl_AbstractStringBuilder741.negDoublePowersOfTen746.data[h] * g) * 10.0) > a))) {
126.10901 +                                g = (g * jl_AbstractStringBuilder741.negDoublePowersOfTen746.data[h]);
126.10902 +                                f = i;
126.10903 +                            }
126.10904 +                            e = (e >> 1);
126.10905 +                            h = ((h + -1) | 0);
126.10906 +                        }
126.10907 +                        h = ((-f) | 0);
126.10908 +                        a = Long_fromNumber((((a * 1.0E15) / g) + 0.5));
126.10909 +                    } else {
126.10910 +                        g = 256;
126.10911 +                        h = 0;
126.10912 +                        i = 1.0;
126.10913 +                        f = ((jl_AbstractStringBuilder741.doublePowersOfTen745.data.length - 1) | 0);
126.10914 +                        while ((f >= 0)) {
126.10915 +                            e = (h | g);
126.10916 +                            if (((e <= 308) && ((jl_AbstractStringBuilder741.doublePowersOfTen745.data[f] * i) < a))) {
126.10917 +                                i = (i * jl_AbstractStringBuilder741.doublePowersOfTen745.data[f]);
126.10918 +                                h = e;
126.10919 +                            }
126.10920 +                            g = (g >> 1);
126.10921 +                            f = ((f + -1) | 0);
126.10922 +                        }
126.10923 +                        a = Long_fromNumber((((a / i) * 1.0E15) + 0.5));
126.10924 +                    }
126.10925 +                    e = 16;
126.10926 +                    f = jl_AbstractStringBuilder741_trailingDecimalZeros752(a);
126.10927 +                    if ((f > 0)) {
126.10928 +                        e = ((e - f) | 0);
126.10929 +                    }
126.10930 +                    if (((h < 7) && (h >= -3))) {
126.10931 +                        if ((h >= 0)) {
126.10932 +                            d = ((h + 1) | 0);
126.10933 +                            e = jl_Math147_max463(e, ((d + 1) | 0));
126.10934 +                            h = 0;
126.10935 +                        } else if ((h < 0)) {
126.10936 +                            a = Long_div(a, jl_AbstractStringBuilder741.longPowersOfTen744.data[((-h) | 0)]);
126.10937 +                            e = ((e - h) | 0);
126.10938 +                            h = 0;
126.10939 +                        }
126.10940 +                    }
126.10941 +                    f = ((c + e) | 0);
126.10942 +                    if ((h != 0)) {
126.10943 +                        f = ((f + 2) | 0);
126.10944 +                        if ((!((h > -10) && (h < 10)))) {
126.10945 +                            f = ((f + 1) | 0);
126.10946 +                        }
126.10947 +                        if ((!((h > -100) && (h < 100)))) {
126.10948 +                            f = ((f + 1) | 0);
126.10949 +                        }
126.10950 +                    }
126.10951 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + f) | 0));
126.10952 +                    if ((b != 0)) {
126.10953 +                        b = $this.buffer742;
126.10954 +                        f = $this.length743;
126.10955 +                        $this.length743 = ((f + 1) | 0);
126.10956 +                        b.data[f] = 45;
126.10957 +                    }
126.10958 +                    b = new Long(2764472320, 232830);
126.10959 +                    f = 0;
126.10960 +                    while ((f < e)) {
126.10961 +                        if ((Long_compare(b, Long_ZERO) <= 0)) {
126.10962 +                            c = 0;
126.10963 +                        } else {
126.10964 +                            c = Long_toNumber(Long_div(a, b));
126.10965 +                            a = Long_rem(a, b);
126.10966 +                        }
126.10967 +                        g = $this.buffer742;
126.10968 +                        i = $this.length743;
126.10969 +                        $this.length743 = ((i + 1) | 0);
126.10970 +                        g.data[i] = (((48 + c) | 0) & 65535);
126.10971 +                        d = ((d + -1) | 0);
126.10972 +                        if ((d == 0)) {
126.10973 +                            c = $this.buffer742;
126.10974 +                            g = $this.length743;
126.10975 +                            $this.length743 = ((g + 1) | 0);
126.10976 +                            c.data[g] = 46;
126.10977 +                        }
126.10978 +                        b = Long_div(b, Long_fromInt(10));
126.10979 +                        f = ((f + 1) | 0);
126.10980 +                    }
126.10981 +                    if ((h != 0)) {
126.10982 +                        a = $this.buffer742;
126.10983 +                        b = $this.length743;
126.10984 +                        $this.length743 = ((b + 1) | 0);
126.10985 +                        a.data[b] = 69;
126.10986 +                        if ((h < 0)) {
126.10987 +                            h = ((-h) | 0);
126.10988 +                            a = $this.buffer742;
126.10989 +                            b = $this.length743;
126.10990 +                            $this.length743 = ((b + 1) | 0);
126.10991 +                            a.data[b] = 45;
126.10992 +                        }
126.10993 +                        if ((h >= 100)) {
126.10994 +                            a = $this.buffer742;
126.10995 +                            b = $this.length743;
126.10996 +                            $this.length743 = ((b + 1) | 0);
126.10997 +                            a.data[b] = (((48 + ((h / 100) | 0)) | 0) & 65535);
126.10998 +                            h = (h % 100);
126.10999 +                            a = $this.buffer742;
126.11000 +                            b = $this.length743;
126.11001 +                            $this.length743 = ((b + 1) | 0);
126.11002 +                            a.data[b] = (((48 + ((h / 10) | 0)) | 0) & 65535);
126.11003 +                        } else if ((h >= 10)) {
126.11004 +                            a = $this.buffer742;
126.11005 +                            b = $this.length743;
126.11006 +                            $this.length743 = ((b + 1) | 0);
126.11007 +                            a.data[b] = (((48 + ((h / 10) | 0)) | 0) & 65535);
126.11008 +                        }
126.11009 +                        a = $this.buffer742;
126.11010 +                        b = $this.length743;
126.11011 +                        $this.length743 = ((b + 1) | 0);
126.11012 +                        a.data[b] = (((48 + (h % 10)) | 0) & 65535);
126.11013 +                    }
126.11014 +                    return $this;
126.11015 +                }
126.11016 +                if ((a <= 0.0)) {
126.11017 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 9) | 0));
126.11018 +                    a = $this.buffer742;
126.11019 +                    b = $this.length743;
126.11020 +                    $this.length743 = ((b + 1) | 0);
126.11021 +                    a.data[b] = 45;
126.11022 +                } else {
126.11023 +                    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 8) | 0));
126.11024 +                }
126.11025 +                a = $this.buffer742;
126.11026 +                b = $this.length743;
126.11027 +                $this.length743 = ((b + 1) | 0);
126.11028 +                a.data[b] = 73;
126.11029 +                a = $this.buffer742;
126.11030 +                b = $this.length743;
126.11031 +                $this.length743 = ((b + 1) | 0);
126.11032 +                a.data[b] = 110;
126.11033 +                a = $this.buffer742;
126.11034 +                b = $this.length743;
126.11035 +                $this.length743 = ((b + 1) | 0);
126.11036 +                a.data[b] = 102;
126.11037 +                a = $this.buffer742;
126.11038 +                b = $this.length743;
126.11039 +                $this.length743 = ((b + 1) | 0);
126.11040 +                a.data[b] = 105;
126.11041 +                a = $this.buffer742;
126.11042 +                b = $this.length743;
126.11043 +                $this.length743 = ((b + 1) | 0);
126.11044 +                a.data[b] = 110;
126.11045 +                a = $this.buffer742;
126.11046 +                b = $this.length743;
126.11047 +                $this.length743 = ((b + 1) | 0);
126.11048 +                a.data[b] = 105;
126.11049 +                a = $this.buffer742;
126.11050 +                b = $this.length743;
126.11051 +                $this.length743 = ((b + 1) | 0);
126.11052 +                a.data[b] = 116;
126.11053 +                a = $this.buffer742;
126.11054 +                b = $this.length743;
126.11055 +                $this.length743 = ((b + 1) | 0);
126.11056 +                a.data[b] = 121;
126.11057 +                return $this;
126.11058 +            }
126.11059 +            jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 3) | 0));
126.11060 +            a = $this.buffer742;
126.11061 +            b = $this.length743;
126.11062 +            $this.length743 = ((b + 1) | 0);
126.11063 +            a.data[b] = 78;
126.11064 +            a = $this.buffer742;
126.11065 +            b = $this.length743;
126.11066 +            $this.length743 = ((b + 1) | 0);
126.11067 +            a.data[b] = 97;
126.11068 +            a = $this.buffer742;
126.11069 +            b = $this.length743;
126.11070 +            $this.length743 = ((b + 1) | 0);
126.11071 +            a.data[b] = 78;
126.11072 +            return $this;
126.11073 +        }
126.11074 +        jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 4) | 0));
126.11075 +        a = $this.buffer742;
126.11076 +        b = $this.length743;
126.11077 +        $this.length743 = ((b + 1) | 0);
126.11078 +        a.data[b] = 45;
126.11079 +        a = $this.buffer742;
126.11080 +        b = $this.length743;
126.11081 +        $this.length743 = ((b + 1) | 0);
126.11082 +        a.data[b] = 48;
126.11083 +        a = $this.buffer742;
126.11084 +        b = $this.length743;
126.11085 +        $this.length743 = ((b + 1) | 0);
126.11086 +        a.data[b] = 46;
126.11087 +        a = $this.buffer742;
126.11088 +        b = $this.length743;
126.11089 +        $this.length743 = ((b + 1) | 0);
126.11090 +        a.data[b] = 48;
126.11091 +        return $this;
126.11092 +    }
126.11093 +    jl_AbstractStringBuilder741_ensureCapacity756($this, (($this.length743 + 3) | 0));
126.11094 +    a = $this.buffer742;
126.11095 +    b = $this.length743;
126.11096 +    $this.length743 = ((b + 1) | 0);
126.11097 +    e = 48;
126.11098 +    a.data[b] = e;
126.11099 +    a = $this.buffer742;
126.11100 +    b = $this.length743;
126.11101 +    $this.length743 = ((b + 1) | 0);
126.11102 +    e = 46;
126.11103 +    a.data[b] = e;
126.11104 +    a = $this.buffer742;
126.11105 +    b = $this.length743;
126.11106 +    $this.length743 = ((b + 1) | 0);
126.11107 +    e = 48;
126.11108 +    a.data[b] = e;
126.11109 +    return $this;
126.11110 +}
126.11111 +function jl_AbstractStringBuilder741_append766($this, a) {
126.11112 +    if ((a === null)) {
126.11113 +        a = $rt_str("null");
126.11114 +    } else {
126.11115 +        a = $rt_nullCheck(a).toString15();
126.11116 +    }
126.11117 +    return jl_StringBuilder16_append767($rt_nullCheck($this), a);
126.11118 +}
126.11119 +function jl_AbstractStringBuilder741_append767($this, a) {
126.11120 +    return jl_StringBuilder16_insert758($rt_nullCheck($this), $this.length743, a);
126.11121 +}
126.11122 +function jl_AbstractStringBuilder741_getChars6($this, a, b, c, d) {
126.11123 +    var e, f, g;
126.11124 +    if ((a <= b)) {
126.11125 +        while ((a < b)) {
126.11126 +            e = ((d + 1) | 0);
126.11127 +            f = $this.buffer742;
126.11128 +            g = ((a + 1) | 0);
126.11129 +            c.data[d] = f.data[a];
126.11130 +            d = e;
126.11131 +            a = g;
126.11132 +        }
126.11133 +        return;
126.11134 +    }
126.11135 +    $rt_throw(jl_IndexOutOfBoundsException157.$init159($rt_str("Index out of bounds")));
126.11136 +}
126.11137 +jl_AbstractStringBuilder741.$init751 = function(a) {
126.11138 +    var result = new jl_AbstractStringBuilder741();
126.11139 +    result.$init751(a);
126.11140 +    return result;
126.11141 +}
126.11142 +jl_AbstractStringBuilder741.$init755 = function() {
126.11143 +    var result = new jl_AbstractStringBuilder741();
126.11144 +    result.$init755();
126.11145 +    return result;
126.11146 +}
126.11147 +$rt_virtualMethods(jl_AbstractStringBuilder741,
126.11148 +    "$init751", function(a) { jl_AbstractStringBuilder741_$init751(this, a); },
126.11149 +    "ensureCapacity756", function(a) { jl_AbstractStringBuilder741_ensureCapacity756(this, a); },
126.11150 +    "length5", function() { return jl_AbstractStringBuilder741_length5(this); },
126.11151 +    "append757", function(a) { return jl_AbstractStringBuilder741_append757(this, a); },
126.11152 +    "insert758", function(a, b) { return jl_AbstractStringBuilder741_insert758(this, a, b); },
126.11153 +    "append759", function(a) { return jl_AbstractStringBuilder741_append759(this, a); },
126.11154 +    "append760", function(a) { return jl_AbstractStringBuilder741_append760(this, a); },
126.11155 +    "toString15", function() { return jl_AbstractStringBuilder741_toString15(this); },
126.11156 +    "append761", function(a, b) { return jl_AbstractStringBuilder741_append761(this, a, b); },
126.11157 +    "append762", function(a) { return jl_AbstractStringBuilder741_append762(this, a); },
126.11158 +    "setLength728", function(a) { jl_AbstractStringBuilder741_setLength728(this, a); },
126.11159 +    "append763", function(a) { return jl_AbstractStringBuilder741_append763(this, a); },
126.11160 +    "$init755", function() { jl_AbstractStringBuilder741_$init755(this); },
126.11161 +    "append766", function(a) { return jl_AbstractStringBuilder741_append766(this, a); },
126.11162 +    "append767", function(a) { return jl_AbstractStringBuilder741_append767(this, a); },
126.11163 +    "getChars6", function(a, b, c, d) { jl_AbstractStringBuilder741_getChars6(this, a, b, c, d); });
126.11164 +function oadm_MinesModel$SquareType45() {
126.11165 +}
126.11166 +oadm_MinesModel$SquareType45.UNKNOWN64 = null;
126.11167 +oadm_MinesModel$SquareType45.DISCOVERED90 = null;
126.11168 +oadm_MinesModel$SquareType45.$VALUES768 = null;
126.11169 +oadm_MinesModel$SquareType45.EXPLOSION47 = null;
126.11170 +oadm_MinesModel$SquareType45.N_085 = null;
126.11171 +oadm_MinesModel$SquareType45.N_4769 = null;
126.11172 +oadm_MinesModel$SquareType45.N_3770 = null;
126.11173 +oadm_MinesModel$SquareType45.N_2771 = null;
126.11174 +oadm_MinesModel$SquareType45.N_1772 = null;
126.11175 +oadm_MinesModel$SquareType45.N_8563 = null;
126.11176 +oadm_MinesModel$SquareType45.N_7773 = null;
126.11177 +oadm_MinesModel$SquareType45.N_6774 = null;
126.11178 +oadm_MinesModel$SquareType45.N_5775 = null;
126.11179 +$rt_declClass(oadm_MinesModel$SquareType45, {
126.11180 +    name : "org.apidesign.demo.minesweeper.MinesModel$SquareType",
126.11181 +    enum : true,
126.11182 +    superclass : jl_Enum102,
126.11183 +    clinit : function() { oadm_MinesModel$SquareType45_$clinit(); } });
126.11184 +function oadm_MinesModel$SquareType45_$clinit() {
126.11185 +    oadm_MinesModel$SquareType45_$clinit = function(){};
126.11186 +    oadm_MinesModel$SquareType45_values562 = function() {
126.11187 +        return oadm_MinesModel$SquareType45.$VALUES768.clone12();
126.11188 +    }
126.11189 +    oadm_MinesModel$SquareType45_$clinit776 = function() {
126.11190 +        var a, b, c, d;
126.11191 +        oadm_MinesModel$SquareType45.N_085 = oadm_MinesModel$SquareType45.$init777($rt_str("N_0"), 0);
126.11192 +        oadm_MinesModel$SquareType45.N_1772 = oadm_MinesModel$SquareType45.$init777($rt_str("N_1"), 1);
126.11193 +        oadm_MinesModel$SquareType45.N_2771 = oadm_MinesModel$SquareType45.$init777($rt_str("N_2"), 2);
126.11194 +        oadm_MinesModel$SquareType45.N_3770 = oadm_MinesModel$SquareType45.$init777($rt_str("N_3"), 3);
126.11195 +        oadm_MinesModel$SquareType45.N_4769 = oadm_MinesModel$SquareType45.$init777($rt_str("N_4"), 4);
126.11196 +        oadm_MinesModel$SquareType45.N_5775 = oadm_MinesModel$SquareType45.$init777($rt_str("N_5"), 5);
126.11197 +        oadm_MinesModel$SquareType45.N_6774 = oadm_MinesModel$SquareType45.$init777($rt_str("N_6"), 6);
126.11198 +        oadm_MinesModel$SquareType45.N_7773 = oadm_MinesModel$SquareType45.$init777($rt_str("N_7"), 7);
126.11199 +        oadm_MinesModel$SquareType45.N_8563 = oadm_MinesModel$SquareType45.$init777($rt_str("N_8"), 8);
126.11200 +        oadm_MinesModel$SquareType45.UNKNOWN64 = oadm_MinesModel$SquareType45.$init777($rt_str("UNKNOWN"), 9);
126.11201 +        oadm_MinesModel$SquareType45.EXPLOSION47 = oadm_MinesModel$SquareType45.$init777($rt_str("EXPLOSION"), 10);
126.11202 +        oadm_MinesModel$SquareType45.DISCOVERED90 = oadm_MinesModel$SquareType45.$init777($rt_str("DISCOVERED"), 11);
126.11203 +        a = $rt_createArray(oadm_MinesModel$SquareType45, 12);
126.11204 +        b = 0;
126.11205 +        c = oadm_MinesModel$SquareType45.N_085;
126.11206 +        d = a.data;
126.11207 +        d[b] = c;
126.11208 +        d[1] = oadm_MinesModel$SquareType45.N_1772;
126.11209 +        d[2] = oadm_MinesModel$SquareType45.N_2771;
126.11210 +        d[3] = oadm_MinesModel$SquareType45.N_3770;
126.11211 +        d[4] = oadm_MinesModel$SquareType45.N_4769;
126.11212 +        d[5] = oadm_MinesModel$SquareType45.N_5775;
126.11213 +        d[6] = oadm_MinesModel$SquareType45.N_6774;
126.11214 +        d[7] = oadm_MinesModel$SquareType45.N_7773;
126.11215 +        d[8] = oadm_MinesModel$SquareType45.N_8563;
126.11216 +        d[9] = oadm_MinesModel$SquareType45.UNKNOWN64;
126.11217 +        d[10] = oadm_MinesModel$SquareType45.EXPLOSION47;
126.11218 +        d[11] = oadm_MinesModel$SquareType45.DISCOVERED90;
126.11219 +        oadm_MinesModel$SquareType45.$VALUES768 = a;
126.11220 +        return;
126.11221 +    }
126.11222 +    oadm_MinesModel$SquareType45_$init777 = function($this, a, b) {
126.11223 +        jl_Enum102_$init611($this, a, b);
126.11224 +        return;
126.11225 +    }
126.11226 +    oadm_MinesModel$SquareType45_$clinit776();
126.11227 +}
126.11228 +oadm_MinesModel$SquareType45.values562 = function() {
126.11229 +    return oadm_MinesModel$SquareType45_values562();
126.11230 +}
126.11231 +oadm_MinesModel$SquareType45.values = oadm_MinesModel$SquareType45.values562;
126.11232 +$rt_methodStubs(oadm_MinesModel$SquareType45_$clinit, ['oadm_MinesModel$SquareType45_values562', 'oadm_MinesModel$SquareType45_$clinit776', 'oadm_MinesModel$SquareType45_$init777']);
126.11233 +function oadm_MinesModel$SquareType45_moreBombsAround96($this) {
126.11234 +    var a, b;
126.11235 +    block1: {
126.11236 +        oadm_MinesModel$1100_$clinit();
126.11237 +        a = oadm_MinesModel$1100.$SwitchMap$org$apidesign$demo$minesweeper$MinesModel$SquareType101;
126.11238 +        b = $rt_nullCheck($this);
126.11239 +        switch (a.data[jl_Enum102_ordinal103(b)]) {
126.11240 +            case 1:
126.11241 +            case 2:
126.11242 +            case 3:
126.11243 +            case 5:
126.11244 +                break;
126.11245 +            case 4:
126.11246 +                break block1;
126.11247 +            default:
126.11248 +                break block1;
126.11249 +        }
126.11250 +        return $this;
126.11251 +    }
126.11252 +    return oadm_MinesModel$SquareType45_values562().data[((jl_Enum102_ordinal103(b) + 1) | 0)];
126.11253 +}
126.11254 +function oadm_MinesModel$SquareType45_isVisible83($this) {
126.11255 +    return jl_String3_startsWith174($rt_nullCheck(jl_Enum102_name614($rt_nullCheck($this))), $rt_str("N_"));
126.11256 +}
126.11257 +oadm_MinesModel$SquareType45.$init777 = function(a, b) {
126.11258 +    var result = new oadm_MinesModel$SquareType45();
126.11259 +    result.$init777(a, b);
126.11260 +    return result;
126.11261 +}
126.11262 +$rt_virtualMethods(oadm_MinesModel$SquareType45,
126.11263 +    "moreBombsAround96", function() { return oadm_MinesModel$SquareType45_moreBombsAround96(this); },
126.11264 +    "isVisible83", function() { return oadm_MinesModel$SquareType45_isVisible83(this); },
126.11265 +    "$init777", function(a, b) { oadm_MinesModel$SquareType45_$init777(this, a, b); });
126.11266 +function otcic_UTF8Charset385() {
126.11267 +}
126.11268 +$rt_declClass(otcic_UTF8Charset385, {
126.11269 +    name : "org.teavm.classlib.impl.charset.UTF8Charset",
126.11270 +    superclass : otcic_Charset382,
126.11271 +    clinit : function() { otcic_UTF8Charset385_$clinit(); } });
126.11272 +function otcic_UTF8Charset385_$clinit() {
126.11273 +    otcic_UTF8Charset385_$clinit = function(){};
126.11274 +    otcic_UTF8Charset385_$init386 = function($this) {
126.11275 +        otcic_Charset382_$init383($this);
126.11276 +        return;
126.11277 +    }
126.11278 +}
126.11279 +$rt_methodStubs(otcic_UTF8Charset385_$clinit, ['otcic_UTF8Charset385_$init386']);
126.11280 +function otcic_UTF8Charset385_encode729($this, a, b) {
126.11281 +    var c, d, e, f;
126.11282 +    while (true) {
126.11283 +        c = $rt_nullCheck(a);
126.11284 +        if ((otcic_CharBuffer287_end293(c) != 0)) {
126.11285 +            break;
126.11286 +        }
126.11287 +        d = $rt_nullCheck(b);
126.11288 +        if ((otcic_ByteBuffer615_available621(d) < 4)) {
126.11289 +            break;
126.11290 +        }
126.11291 +        e = otcic_CharBuffer287_get292(c);
126.11292 +        if ((e >= 128)) {
126.11293 +            if ((e >= 1024)) {
126.11294 +                if ((otcic_UTF16Helper169_isSurrogate559(e) != 0)) {
126.11295 +                    if ((otcic_UTF16Helper169_isHighSurrogate185(e) == 0)) {
126.11296 +                        otcic_ByteBuffer615_put623(d, 63);
126.11297 +                    } else {
126.11298 +                        f = otcic_CharBuffer287_get292(c);
126.11299 +                        if ((otcic_UTF16Helper169_isLowSurrogate186(e) != 0)) {
126.11300 +                            e = otcic_UTF16Helper169_buildCodePoint189(e, f);
126.11301 +                            otcic_ByteBuffer615_put623(d, ((240 | (e >> 18)) & 255));
126.11302 +                            otcic_ByteBuffer615_put623(d, ((128 | ((e >> 12) & 63)) & 255));
126.11303 +                            otcic_ByteBuffer615_put623(d, ((128 | ((e >> 6) & 63)) & 255));
126.11304 +                            otcic_ByteBuffer615_put623(d, ((128 | (e & 63)) & 255));
126.11305 +                        } else {
126.11306 +                            otcic_CharBuffer287_back294(c, 1);
126.11307 +                            otcic_ByteBuffer615_put623(d, 63);
126.11308 +                        }
126.11309 +                    }
126.11310 +                } else {
126.11311 +                    otcic_ByteBuffer615_put623(d, ((224 | (e >> 12)) & 255));
126.11312 +                    otcic_ByteBuffer615_put623(d, ((128 | ((e >> 6) & 63)) & 255));
126.11313 +                    otcic_ByteBuffer615_put623(d, ((128 | (e & 63)) & 255));
126.11314 +                }
126.11315 +            } else {
126.11316 +                otcic_ByteBuffer615_put623(d, ((192 | (e >> 6)) & 255));
126.11317 +                otcic_ByteBuffer615_put623(d, ((128 | (e & 63)) & 255));
126.11318 +            }
126.11319 +        } else {
126.11320 +            otcic_ByteBuffer615_put623(d, (e & 255));
126.11321 +        }
126.11322 +    }
126.11323 +    return;
126.11324 +}
126.11325 +otcic_UTF8Charset385.$init386 = function() {
126.11326 +    var result = new otcic_UTF8Charset385();
126.11327 +    result.$init386();
126.11328 +    return result;
126.11329 +}
126.11330 +$rt_virtualMethods(otcic_UTF8Charset385,
126.11331 +    "$init386", function() { otcic_UTF8Charset385_$init386(this); },
126.11332 +    "encode729", function(a, b) { otcic_UTF8Charset385_encode729(this, a, b); });
126.11333 +function jl_Double340() {
126.11334 +    this.value778 = 0.0;
126.11335 +}
126.11336 +jl_Double340.NaN779 = 0.0;
126.11337 +jl_Double340.TYPE780 = null;
126.11338 +$rt_declClass(jl_Double340, {
126.11339 +    name : "java.lang.Double",
126.11340 +    interfaces : [jl_Comparable163],
126.11341 +    superclass : jl_Number325,
126.11342 +    clinit : function() { jl_Double340_$clinit(); } });
126.11343 +function jl_Double340_$clinit() {
126.11344 +    jl_Double340_$clinit = function(){};
126.11345 +    jl_Double340_decimalExponent781 = function(a) {
126.11346 +        var b, c;
126.11347 +        if ((a >= 0)) {
126.11348 +            b = 10.0;
126.11349 +        } else {
126.11350 +            b = 0.1;
126.11351 +            a = ((-a) | 0);
126.11352 +        }
126.11353 +        c = 1.0;
126.11354 +        while ((a != 0)) {
126.11355 +            if (((a % 2) != 0)) {
126.11356 +                c = (c * b);
126.11357 +            }
126.11358 +            b = (b * b);
126.11359 +            a = ((a / 2) | 0);
126.11360 +        }
126.11361 +        return c;
126.11362 +    }
126.11363 +    jl_Double340_compare782 = function(a, b) {
126.11364 +        a = $rt_compare(a, a);
126.11365 +        if ((a <= 0)) {
126.11366 +            if ((a >= 0)) {
126.11367 +                a = 0;
126.11368 +            } else {
126.11369 +                a = -1;
126.11370 +            }
126.11371 +        } else {
126.11372 +            a = 1;
126.11373 +        }
126.11374 +        return a;
126.11375 +    }
126.11376 +    jl_Double340_isInfinite765 = function(a) {
126.11377 +        return (isFinite(a) ? 0 : 1);
126.11378 +    }
126.11379 +    jl_Double340_valueOf410 = function(a) {
126.11380 +        return jl_Double340_valueOf342(jl_Double340_parseDouble783(a));
126.11381 +    }
126.11382 +    jl_Double340_$clinit784 = function() {
126.11383 +        jl_Double340.NaN779 = NaN;
126.11384 +        jl_Double340.TYPE780 = $rt_cls($rt_doublecls());
126.11385 +        return;
126.11386 +    }
126.11387 +    jl_Double340_toString416 = function(a) {
126.11388 +        return jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append785($rt_nullCheck(jl_StringBuilder16.$init17()), a)));
126.11389 +    }
126.11390 +    jl_Double340_parseDouble783 = function(a) {
126.11391 +        var b, c, d, e, f, g, h, i;
126.11392 +        a = jl_String3_trim192($rt_nullCheck(a));
126.11393 +        b = 0;
126.11394 +        c = 0;
126.11395 +        d = $rt_nullCheck(a);
126.11396 +        if ((jl_String3_charAt176(d, c) == 45)) {
126.11397 +            c = ((c + 1) | 0);
126.11398 +            b = 1;
126.11399 +        } else if ((jl_String3_charAt176(d, c) == 43)) {
126.11400 +            c = ((c + 1) | 0);
126.11401 +        }
126.11402 +        a = jl_String3_charAt176(d, c);
126.11403 +        if (((a >= 48) && (a <= 57))) {
126.11404 +            e = Long_ZERO;
126.11405 +            a = 0;
126.11406 +            block5: {
126.11407 +                while (true) {
126.11408 +                    if ((jl_String3_charAt176(d, c) != 48)) {
126.11409 +                        break block5;
126.11410 +                    }
126.11411 +                    c = ((c + 1) | 0);
126.11412 +                    if ((c == jl_String3_length5(d))) {
126.11413 +                        break;
126.11414 +                    }
126.11415 +                }
126.11416 +                return 0.0;
126.11417 +            }
126.11418 +            block8: {
126.11419 +                while (true) {
126.11420 +                    if ((c >= jl_String3_length5(d))) {
126.11421 +                        break block8;
126.11422 +                    }
126.11423 +                    f = jl_String3_charAt176(d, c);
126.11424 +                    if ((f < 48)) {
126.11425 +                        break block8;
126.11426 +                    }
126.11427 +                    if ((f > 57)) {
126.11428 +                        break;
126.11429 +                    }
126.11430 +                    if ((Long_toNumber(e) >= 1.0E17)) {
126.11431 +                        a = ((a + 1) | 0);
126.11432 +                    } else {
126.11433 +                        e = Long_add(Long_mul(e, Long_fromInt(10)), Long_fromInt(((f - 48) | 0)));
126.11434 +                    }
126.11435 +                    c = ((c + 1) | 0);
126.11436 +                }
126.11437 +            }
126.11438 +            block13: {
126.11439 +                if (((c < jl_String3_length5(d)) && (jl_String3_charAt176(d, c) == 46))) {
126.11440 +                    c = ((c + 1) | 0);
126.11441 +                    f = 0;
126.11442 +                    block17: {
126.11443 +                        while (true) {
126.11444 +                            if ((c >= jl_String3_length5(d))) {
126.11445 +                                break block17;
126.11446 +                            }
126.11447 +                            g = jl_String3_charAt176(d, c);
126.11448 +                            if ((g < 48)) {
126.11449 +                                break block17;
126.11450 +                            }
126.11451 +                            if ((g > 57)) {
126.11452 +                                break;
126.11453 +                            }
126.11454 +                            if ((Long_toNumber(e) < 1.0E17)) {
126.11455 +                                e = Long_add(Long_mul(e, Long_fromInt(10)), Long_fromInt(((g - 48) | 0)));
126.11456 +                                a = ((a + -1) | 0);
126.11457 +                            }
126.11458 +                            c = ((c + 1) | 0);
126.11459 +                            f = 1;
126.11460 +                        }
126.11461 +                    }
126.11462 +                    if ((f == 0)) {
126.11463 +                        break block13;
126.11464 +                    }
126.11465 +                }
126.11466 +                block22: {
126.11467 +                    block23: {
126.11468 +                        if ((c < jl_String3_length5(d))) {
126.11469 +                            f = jl_String3_charAt176(d, c);
126.11470 +                            if (((f != 101) && (f != 69))) {
126.11471 +                                break block22;
126.11472 +                            }
126.11473 +                            c = ((c + 1) | 0);
126.11474 +                            f = 0;
126.11475 +                            if ((jl_String3_charAt176(d, c) == 45)) {
126.11476 +                                c = ((c + 1) | 0);
126.11477 +                                f = 1;
126.11478 +                            } else if ((jl_String3_charAt176(d, c) == 43)) {
126.11479 +                                c = ((c + 1) | 0);
126.11480 +                            }
126.11481 +                            g = 0;
126.11482 +                            h = 0;
126.11483 +                            block30: {
126.11484 +                                while (true) {
126.11485 +                                    if ((c >= jl_String3_length5(d))) {
126.11486 +                                        break block30;
126.11487 +                                    }
126.11488 +                                    i = jl_String3_charAt176(d, c);
126.11489 +                                    if ((i < 48)) {
126.11490 +                                        break block30;
126.11491 +                                    }
126.11492 +                                    if ((i > 57)) {
126.11493 +                                        break;
126.11494 +                                    }
126.11495 +                                    g = ((((10 * g) | 0) + ((i - 48) | 0)) | 0);
126.11496 +                                    h = 1;
126.11497 +                                    c = ((c + 1) | 0);
126.11498 +                                }
126.11499 +                            }
126.11500 +                            if ((h == 0)) {
126.11501 +                                break block23;
126.11502 +                            }
126.11503 +                            if ((f != 0)) {
126.11504 +                                g = ((-g) | 0);
126.11505 +                            }
126.11506 +                            a = ((a + g) | 0);
126.11507 +                        }
126.11508 +                        if (((a <= 308) && (!((a == 308) && (Long_compare(e, new Long(2133831477, 4185580)) > 0))))) {
126.11509 +                            if ((b != 0)) {
126.11510 +                                e = Long_neg(e);
126.11511 +                            }
126.11512 +                            return (Long_toNumber(e) * jl_Double340_decimalExponent781(a));
126.11513 +                        }
126.11514 +                        if ((b != 0)) {
126.11515 +                            a = -Infinity;
126.11516 +                        } else {
126.11517 +                            a = Infinity;
126.11518 +                        }
126.11519 +                        return a;
126.11520 +                    }
126.11521 +                    $rt_throw(jl_NumberFormatException137.$init138());
126.11522 +                }
126.11523 +                $rt_throw(jl_NumberFormatException137.$init138());
126.11524 +            }
126.11525 +            $rt_throw(jl_NumberFormatException137.$init138());
126.11526 +        }
126.11527 +        $rt_throw(jl_NumberFormatException137.$init138());
126.11528 +    }
126.11529 +    jl_Double340_valueOf342 = function(a) {
126.11530 +        return jl_Double340.$init786(a);
126.11531 +    }
126.11532 +    jl_Double340_$init786 = function($this, a) {
126.11533 +        jl_Number325_$init423($this);
126.11534 +        $this.value778 = a;
126.11535 +        return;
126.11536 +    }
126.11537 +    jl_Double340_isNaN764 = function(a) {
126.11538 +        return (isNaN(a) ? 1 : 0 );
126.11539 +    }
126.11540 +    jl_Double340_$clinit784();
126.11541 +}
126.11542 +$rt_methodStubs(jl_Double340_$clinit, ['jl_Double340_decimalExponent781', 'jl_Double340_compare782', 'jl_Double340_isInfinite765', 'jl_Double340_valueOf410', 'jl_Double340_$clinit784', 'jl_Double340_toString416', 'jl_Double340_parseDouble783', 'jl_Double340_valueOf342', 'jl_Double340_$init786', 'jl_Double340_isNaN764']);
126.11543 +function jl_Double340_intValue87($this) {
126.11544 +    return ($this.value778 | 0);
126.11545 +}
126.11546 +function jl_Double340_floatValue344($this) {
126.11547 +    return $this.value778;
126.11548 +}
126.11549 +function jl_Double340_doubleValue341($this) {
126.11550 +    return $this.value778;
126.11551 +}
126.11552 +function jl_Double340_longValue332($this) {
126.11553 +    return Long_fromNumber($this.value778);
126.11554 +}
126.11555 +function jl_Double340_compareTo787($this, a) {
126.11556 +    return jl_Double340_compare782($this.value778, a.value778);
126.11557 +}
126.11558 +function jl_Double340_compareTo181($this, a) {
126.11559 +    return jl_Double340_compareTo787($rt_nullCheck($this), a);
126.11560 +}
126.11561 +jl_Double340.$init786 = function(a) {
126.11562 +    var result = new jl_Double340();
126.11563 +    result.$init786(a);
126.11564 +    return result;
126.11565 +}
126.11566 +$rt_virtualMethods(jl_Double340,
126.11567 +    "intValue87", function() { return jl_Double340_intValue87(this); },
126.11568 +    "floatValue344", function() { return jl_Double340_floatValue344(this); },
126.11569 +    "doubleValue341", function() { return jl_Double340_doubleValue341(this); },
126.11570 +    "$init786", function(a) { jl_Double340_$init786(this, a); },
126.11571 +    "longValue332", function() { return jl_Double340_longValue332(this); },
126.11572 +    "compareTo787", function(a) { return jl_Double340_compareTo787(this, a); },
126.11573 +    "compareTo181", function(a) { return jl_Double340_compareTo181(this, a); });
126.11574 +function oahcs_Contexts398() {
126.11575 +}
126.11576 +$rt_declClass(oahcs_Contexts398, {
126.11577 +    name : "org.apidesign.html.context.spi.Contexts",
126.11578 +    superclass : jl_Object7,
126.11579 +    clinit : function() { oahcs_Contexts398_$clinit(); } });
126.11580 +function oahcs_Contexts398_$clinit() {
126.11581 +    oahcs_Contexts398_$clinit = function(){};
126.11582 +    oahcs_Contexts398_fillInByProviders684 = function(a, b) {
126.11583 +        var c, d, e, f, g;
126.11584 +        c = 0;
126.11585 +        block1: {
126.11586 +            block2: {
126.11587 +                try {
126.11588 +                    d = jl_Class0_getClassLoader420($rt_nullCheck(a));
126.11589 +                } catch ($e) {
126.11590 +                    $je = $e.$javaException;
126.11591 +                    if ($je && $je instanceof jl_SecurityException314) {
126.11592 +                        a = $je;
126.11593 +                        break block2;
126.11594 +                    } else {
126.11595 +                        throw $e;
126.11596 +                    }
126.11597 +                }
126.11598 +                break block1;
126.11599 +            }
126.11600 +            d = null;
126.11601 +        }
126.11602 +        d = ju_ServiceLoader283_iterator107($rt_nullCheck(ju_ServiceLoader283_load511($rt_cls(oahcs_Contexts$Provider506), d)));
126.11603 +        while (true) {
126.11604 +            e = $rt_nullCheck(d);
126.11605 +            if ((ju_ServiceLoader$1279_hasNext109(e) == 0)) {
126.11606 +                break;
126.11607 +            }
126.11608 +            onhk_KO4J507_fillContext788($rt_nullCheck(ju_ServiceLoader$1279_next110(e)), b, a);
126.11609 +            c = 1;
126.11610 +        }
126.11611 +        block5: {
126.11612 +            block6: {
126.11613 +                block7: {
126.11614 +                    try {
126.11615 +                        d = ju_ServiceLoader283_iterator107($rt_nullCheck(ju_ServiceLoader283_load511($rt_cls(oahcs_Contexts$Provider506), jl_Class0_getClassLoader420($rt_nullCheck($rt_cls(oahcs_Contexts$Provider506))))));
126.11616 +                    } catch ($e) {
126.11617 +                        $je = $e.$javaException;
126.11618 +                        if ($je && $je instanceof jl_SecurityException314) {
126.11619 +                            f = $je;
126.11620 +                            break block7;
126.11621 +                        } else {
126.11622 +                            throw $e;
126.11623 +                        }
126.11624 +                    }
126.11625 +                    while (true) {
126.11626 +                        try {
126.11627 +                            e = $rt_nullCheck(d);
126.11628 +                            if ((ju_ServiceLoader$1279_hasNext109(e) == 0)) {
126.11629 +                                break;
126.11630 +                            }
126.11631 +                        } catch ($e) {
126.11632 +                            $je = $e.$javaException;
126.11633 +                            if ($je && $je instanceof jl_SecurityException314) {
126.11634 +                                f = $je;
126.11635 +                                break block7;
126.11636 +                            } else {
126.11637 +                                throw $e;
126.11638 +                            }
126.11639 +                        }
126.11640 +                        try {
126.11641 +                            onhk_KO4J507_fillContext788($rt_nullCheck(ju_ServiceLoader$1279_next110(e)), b, a);
126.11642 +                        } catch ($e) {
126.11643 +                            $je = $e.$javaException;
126.11644 +                            if ($je && $je instanceof jl_SecurityException314) {
126.11645 +                                f = $je;
126.11646 +                                break block7;
126.11647 +                            } else {
126.11648 +                                throw $e;
126.11649 +                            }
126.11650 +                        }
126.11651 +                    }
126.11652 +                    break block6;
126.11653 +                }
126.11654 +                if ((c == 0)) {
126.11655 +                    break block5;
126.11656 +                }
126.11657 +            }
126.11658 +            if ((c == 0)) {
126.11659 +                f = ju_ServiceLoader283_iterator107($rt_nullCheck(ju_ServiceLoader283_load509($rt_cls(oahcs_Contexts$Provider506))));
126.11660 +                while (true) {
126.11661 +                    g = $rt_nullCheck(f);
126.11662 +                    if ((ju_ServiceLoader$1279_hasNext109(g) == 0)) {
126.11663 +                        break;
126.11664 +                    }
126.11665 +                    onhk_KO4J507_fillContext788($rt_nullCheck(ju_ServiceLoader$1279_next110(g)), b, a);
126.11666 +                    c = 1;
126.11667 +                }
126.11668 +            }
126.11669 +            return c;
126.11670 +        }
126.11671 +        $rt_throw(f);
126.11672 +    }
126.11673 +    oahcs_Contexts398_newBuilder683 = function() {
126.11674 +        return oahcs_Contexts$Builder662.$init664();
126.11675 +    }
126.11676 +    oahcs_Contexts398_$init789 = function($this) {
126.11677 +        jl_Object7_$init10($this);
126.11678 +        return;
126.11679 +    }
126.11680 +    oahcs_Contexts398_find399 = function(a, b) {
126.11681 +        return onhci_CtxImpl665_find790(a, b);
126.11682 +    }
126.11683 +}
126.11684 +$rt_methodStubs(oahcs_Contexts398_$clinit, ['oahcs_Contexts398_fillInByProviders684', 'oahcs_Contexts398_newBuilder683', 'oahcs_Contexts398_$init789', 'oahcs_Contexts398_find399']);
126.11685 +oahcs_Contexts398.$init789 = function() {
126.11686 +    var result = new oahcs_Contexts398();
126.11687 +    result.$init789();
126.11688 +    return result;
126.11689 +}
126.11690 +$rt_virtualMethods(oahcs_Contexts398,
126.11691 +    "$init789", function() { oahcs_Contexts398_$init789(this); });
126.11692 +function jl_Class0() {
126.11693 +    this.componentTypeDirty791 = false;
126.11694 +    this.name2 = null;
126.11695 +    this.componentType792 = null;
126.11696 +}
126.11697 +$rt_declClass(jl_Class0, {
126.11698 +    name : "java.lang.Class",
126.11699 +    superclass : jl_Object7,
126.11700 +    clinit : function() { jl_Class0_$clinit(); } });
126.11701 +function jl_Class0_$clinit() {
126.11702 +    jl_Class0_$clinit = function(){};
126.11703 +    jl_Class0_forNameImpl793 = function(a) {
126.11704 +        switch ($rt_ustr(a)) {
126.11705 +            case "org.apidesign.html.json.spi.PropertyBinding$Impl": oahjs_PropertyBinding$Impl26.$clinit(); return $rt_cls(oahjs_PropertyBinding$Impl26);
126.11706 +            case "org.apidesign.demo.minesweeper.MinesModel": oadm_MinesModel43.$clinit(); return $rt_cls(oadm_MinesModel43);
126.11707 +            case "java.lang.NumberFormatException": jl_NumberFormatException137.$clinit(); return $rt_cls(jl_NumberFormatException137);
126.11708 +            case "org.apidesign.demo.minesweeper.MinesModel$RowModel": oadm_MinesModel$RowModel140.$clinit(); return $rt_cls(oadm_MinesModel$RowModel140);
126.11709 +            case "java.util.Arrays": ju_Arrays142.$clinit(); return $rt_cls(ju_Arrays142);
126.11710 +            case "org.apidesign.html.json.spi.Technology": oahjs_Technology156.$clinit(); return $rt_cls(oahjs_Technology156);
126.11711 +            case "java.lang.ArrayIndexOutOfBoundsException": jl_ArrayIndexOutOfBoundsException160.$clinit(); return $rt_cls(jl_ArrayIndexOutOfBoundsException160);
126.11712 +            case "java.lang.String": jl_String3.$clinit(); return $rt_cls(jl_String3);
126.11713 +            case "java.util.Collections": ju_Collections195.$clinit(); return $rt_cls(ju_Collections195);
126.11714 +            case "java.lang.IncompatibleClassChangeError": jl_IncompatibleClassChangeError212.$clinit(); return $rt_cls(jl_IncompatibleClassChangeError212);
126.11715 +            case "java.io.Closeable": ji_Closeable215.$clinit(); return $rt_cls(ji_Closeable215);
126.11716 +            case "java.lang.NoSuchFieldError": jl_NoSuchFieldError216.$clinit(); return $rt_cls(jl_NoSuchFieldError216);
126.11717 +            case "java.util.AbstractList": ju_AbstractList66.$clinit(); return $rt_cls(ju_AbstractList66);
126.11718 +            case "org.apidesign.html.json.spi.Technology$BatchInit": oahjs_Technology$BatchInit226.$clinit(); return $rt_cls(oahjs_Technology$BatchInit226);
126.11719 +            case "org.apidesign.demo.minesweeper.MainBrwsr": oadm_MainBrwsr227.$clinit(); return $rt_cls(oadm_MainBrwsr227);
126.11720 +            case "java.lang.Thread": jl_Thread233.$clinit(); return $rt_cls(jl_Thread233);
126.11721 +            case "java.lang.Character": jl_Character187.$clinit(); return $rt_cls(jl_Character187);
126.11722 +            case "java.lang.Throwable": jl_Throwable111.$clinit(); return $rt_cls(jl_Throwable111);
126.11723 +            case "java.util.MapEntry": ju_MapEntry263.$clinit(); return $rt_cls(ju_MapEntry263);
126.11724 +            case "java.lang.ClassCastException": jl_ClassCastException267.$clinit(); return $rt_cls(jl_ClassCastException267);
126.11725 +            case "org.netbeans.html.context.impl.CtxImpl$Bind": onhci_CtxImpl$Bind270.$clinit(); return $rt_cls(onhci_CtxImpl$Bind270);
126.11726 +            case "java.util.ServiceLoader$1": ju_ServiceLoader$1279.$clinit(); return $rt_cls(ju_ServiceLoader$1279);
126.11727 +            case "org.teavm.classlib.impl.charset.CharBuffer": otcic_CharBuffer287.$clinit(); return $rt_cls(otcic_CharBuffer287);
126.11728 +            case "java.lang.AutoCloseable": jl_AutoCloseable214.$clinit(); return $rt_cls(jl_AutoCloseable214);
126.11729 +            case "java.lang.Cloneable": jl_Cloneable262.$clinit(); return $rt_cls(jl_Cloneable262);
126.11730 +            case "java.lang.reflect.Array": jlr_Array150.$clinit(); return $rt_cls(jlr_Array150);
126.11731 +            case "java.util.AbstractMap": ju_AbstractMap305.$clinit(); return $rt_cls(ju_AbstractMap305);
126.11732 +            case "org.apidesign.demo.minesweeper.Mines$Html4JavaType": oadm_Mines$Html4JavaType356.$clinit(); return $rt_cls(oadm_Mines$Html4JavaType356);
126.11733 +            case "org.apidesign.demo.minesweeper.Mines$1": oadm_Mines$1375.$clinit(); return $rt_cls(oadm_Mines$1375);
126.11734 +            case "org.teavm.classlib.impl.charset.Charset": otcic_Charset382.$clinit(); return $rt_cls(otcic_Charset382);
126.11735 +            case "java.lang.IndexOutOfBoundsException": jl_IndexOutOfBoundsException157.$clinit(); return $rt_cls(jl_IndexOutOfBoundsException157);
126.11736 +            case "org.netbeans.html.json.impl.JSON": onhji_JSON40.$clinit(); return $rt_cls(onhji_JSON40);
126.11737 +            case "java.lang.NegativeArraySizeException": jl_NegativeArraySizeException300.$clinit(); return $rt_cls(jl_NegativeArraySizeException300);
126.11738 +            case "java.lang.Float": jl_Float343.$clinit(); return $rt_cls(jl_Float343);
126.11739 +            case "java.lang.SecurityException": jl_SecurityException314.$clinit(); return $rt_cls(jl_SecurityException314);
126.11740 +            case "java.lang.CharSequence": jl_CharSequence162.$clinit(); return $rt_cls(jl_CharSequence162);
126.11741 +            case "org.apidesign.html.json.spi.Proto": oahjs_Proto321.$clinit(); return $rt_cls(oahjs_Proto321);
126.11742 +            case "java.lang.RuntimeException": jl_RuntimeException131.$clinit(); return $rt_cls(jl_RuntimeException131);
126.11743 +            case "java.lang.Math": jl_Math147.$clinit(); return $rt_cls(jl_Math147);
126.11744 +            case "org.apidesign.html.boot.spi.Fn": oahbs_Fn466.$clinit(); return $rt_cls(oahbs_Fn466);
126.11745 +            case "java.io.Flushable": ji_Flushable477.$clinit(); return $rt_cls(ji_Flushable477);
126.11746 +            case "java.util.Map": ju_Map304.$clinit(); return $rt_cls(ju_Map304);
126.11747 +            case "java.lang.NullPointerException": jl_NullPointerException8.$clinit(); return $rt_cls(jl_NullPointerException8);
126.11748 +            case "org.apidesign.demo.minesweeper.Mines": oadm_Mines49.$clinit(); return $rt_cls(oadm_Mines49);
126.11749 +            case "java.lang.ReflectiveOperationException": jl_ReflectiveOperationException493.$clinit(); return $rt_cls(jl_ReflectiveOperationException493);
126.11750 +            case "org.netbeans.html.json.impl.PropertyBindingAccessor": onhji_PropertyBindingAccessor404.$clinit(); return $rt_cls(onhji_PropertyBindingAccessor404);
126.11751 +            case "java.util.ServiceLoader": ju_ServiceLoader283.$clinit(); return $rt_cls(ju_ServiceLoader283);
126.11752 +            case "java.lang.Number": jl_Number325.$clinit(); return $rt_cls(jl_Number325);
126.11753 +            case "java.lang.ClassLoader": jl_ClassLoader512.$clinit(); return $rt_cls(jl_ClassLoader512);
126.11754 +            case "org.apidesign.html.json.spi.FunctionBinding": oahjs_FunctionBinding448.$clinit(); return $rt_cls(oahjs_FunctionBinding448);
126.11755 +            case "java.util.List": ju_List206.$clinit(); return $rt_cls(ju_List206);
126.11756 +            case "java.lang.ConsoleOutputStream_stdout": jl_ConsoleOutputStream_stdout528.$clinit(); return $rt_cls(jl_ConsoleOutputStream_stdout528);
126.11757 +            case "java.util.ArrayList": ju_ArrayList54.$clinit(); return $rt_cls(ju_ArrayList54);
126.11758 +            case "java.lang.Long": jl_Long331.$clinit(); return $rt_cls(jl_Long331);
126.11759 +            case "java.lang.LinkageError": jl_LinkageError210.$clinit(); return $rt_cls(jl_LinkageError210);
126.11760 +            case "java.io.IOException": ji_IOException538.$clinit(); return $rt_cls(ji_IOException538);
126.11761 +            case "java.util.logging.LogRecord": jul_LogRecord540.$clinit(); return $rt_cls(jul_LogRecord540);
126.11762 +            case "org.apidesign.demo.minesweeper.Mines$2": oadm_Mines$2491.$clinit(); return $rt_cls(oadm_Mines$2491);
126.11763 +            case "java.util.Comparator": ju_Comparator553.$clinit(); return $rt_cls(ju_Comparator553);
126.11764 +            case "java.util.HashMap$Entry": ju_HashMap$Entry554.$clinit(); return $rt_cls(ju_HashMap$Entry554);
126.11765 +            case "org.teavm.classlib.impl.charset.UTF16Helper": otcic_UTF16Helper169.$clinit(); return $rt_cls(otcic_UTF16Helper169);
126.11766 +            case "java.util.Random": ju_Random68.$clinit(); return $rt_cls(ju_Random68);
126.11767 +            case "java.lang.Iterable": jl_Iterable218.$clinit(); return $rt_cls(jl_Iterable218);
126.11768 +            case "java.lang.UnsupportedOperationException": jl_UnsupportedOperationException222.$clinit(); return $rt_cls(jl_UnsupportedOperationException222);
126.11769 +            case "org.apidesign.demo.minesweeper.MinesModel$1": oadm_MinesModel$1100.$clinit(); return $rt_cls(oadm_MinesModel$1100);
126.11770 +            case "java.util.AbstractList$1": ju_AbstractList$1108.$clinit(); return $rt_cls(ju_AbstractList$1108);
126.11771 +            case "org.netbeans.html.ko4j.Knockout": onhk_Knockout571.$clinit(); return $rt_cls(onhk_Knockout571);
126.11772 +            case "java.lang.Error": jl_Error208.$clinit(); return $rt_cls(jl_Error208);
126.11773 +            case "java.lang.SystemClassLoader": jl_SystemClassLoader517.$clinit(); return $rt_cls(jl_SystemClassLoader517);
126.11774 +            case "java.util.logging.Level": jul_Level581.$clinit(); return $rt_cls(jul_Level581);
126.11775 +            case "java.lang.ConsoleOutputStream_stderr": jl_ConsoleOutputStream_stderr595.$clinit(); return $rt_cls(jl_ConsoleOutputStream_stderr595);
126.11776 +            case "java.lang.IllegalArgumentException": jl_IllegalArgumentException134.$clinit(); return $rt_cls(jl_IllegalArgumentException134);
126.11777 +            case "net.java.html.BrwsrCtx$1": njh_BrwsrCtx$1603.$clinit(); return $rt_cls(njh_BrwsrCtx$1603);
126.11778 +            case "java.lang.Enum": jl_Enum102.$clinit(); return $rt_cls(jl_Enum102);
126.11779 +            case "org.teavm.classlib.impl.charset.ByteBuffer": otcic_ByteBuffer615.$clinit(); return $rt_cls(otcic_ByteBuffer615);
126.11780 +            case "org.netbeans.html.json.impl.Bindings": onhji_Bindings406.$clinit(); return $rt_cls(onhji_Bindings406);
126.11781 +            case "org.apidesign.html.json.spi.Transfer": oahjs_Transfer639.$clinit(); return $rt_cls(oahjs_Transfer639);
126.11782 +            case "java.util.concurrent.Executor": juc_Executor640.$clinit(); return $rt_cls(juc_Executor640);
126.11783 +            case "org.apidesign.html.context.spi.Contexts$Provider": oahcs_Contexts$Provider506.$clinit(); return $rt_cls(oahcs_Contexts$Provider506);
126.11784 +            case "java.lang.IllegalStateException": jl_IllegalStateException229.$clinit(); return $rt_cls(jl_IllegalStateException229);
126.11785 +            case "java.util.Map$Entry": ju_Map$Entry261.$clinit(); return $rt_cls(ju_Map$Entry261);
126.11786 +            case "java.util.NoSuchElementException": ju_NoSuchElementException285.$clinit(); return $rt_cls(ju_NoSuchElementException285);
126.11787 +            case "org.netbeans.html.context.impl.CtxAccssr": onhci_CtxAccssr597.$clinit(); return $rt_cls(onhci_CtxAccssr597);
126.11788 +            case "java.lang.Boolean": jl_Boolean327.$clinit(); return $rt_cls(jl_Boolean327);
126.11789 +            case "org.teavm.html4j.JavaScriptConv": oth_JavaScriptConv573.$clinit(); return $rt_cls(oth_JavaScriptConv573);
126.11790 +            case "java.util.Collection": ju_Collection203.$clinit(); return $rt_cls(ju_Collection203);
126.11791 +            case "org.netbeans.html.json.impl.JSON$EmptyTech": onhji_JSON$EmptyTech400.$clinit(); return $rt_cls(onhji_JSON$EmptyTech400);
126.11792 +            case "java.lang.InstantiationException": jl_InstantiationException654.$clinit(); return $rt_cls(jl_InstantiationException654);
126.11793 +            case "org.netbeans.html.ko4j.FXContext$1Wrap": onhk_FXContext$1Wrap656.$clinit(); return $rt_cls(onhk_FXContext$1Wrap656);
126.11794 +            case "org.apidesign.html.context.spi.Contexts$Builder": oahcs_Contexts$Builder662.$clinit(); return $rt_cls(oahcs_Contexts$Builder662);
126.11795 +            case "java.lang.ThreadLocal": jl_ThreadLocal670.$clinit(); return $rt_cls(jl_ThreadLocal670);
126.11796 +            case "org.apidesign.html.json.spi.Proto$Type": oahjs_Proto$Type36.$clinit(); return $rt_cls(oahjs_Proto$Type36);
126.11797 +            case "net.java.html.BrwsrCtx": njh_BrwsrCtx488.$clinit(); return $rt_cls(njh_BrwsrCtx488);
126.11798 +            case "org.apidesign.demo.minesweeper.MinesModel$SquareModel": oadm_MinesModel$SquareModel687.$clinit(); return $rt_cls(oadm_MinesModel$SquareModel687);
126.11799 +            case "java.util.logging.Logger": jul_Logger681.$clinit(); return $rt_cls(jul_Logger681);
126.11800 +            case "org.teavm.classlib.impl.unicode.UnicodeHelper": otciu_UnicodeHelper256.$clinit(); return $rt_cls(otciu_UnicodeHelper256);
126.11801 +            case "java.util.Collections$8": ju_Collections$8144.$clinit(); return $rt_cls(ju_Collections$8144);
126.11802 +            case "org.apidesign.demo.minesweeper.Row$Html4JavaType": oadm_Row$Html4JavaType708.$clinit(); return $rt_cls(oadm_Row$Html4JavaType708);
126.11803 +            case "java.io.PrintStream": ji_PrintStream122.$clinit(); return $rt_cls(ji_PrintStream122);
126.11804 +            case "java.lang.StringIndexOutOfBoundsException": jl_StringIndexOutOfBoundsException177.$clinit(); return $rt_cls(jl_StringIndexOutOfBoundsException177);
126.11805 +            case "java.lang.Appendable": jl_Appendable731.$clinit(); return $rt_cls(jl_Appendable731);
126.11806 +            case "org.apidesign.html.json.spi.PropertyBinding": oahjs_PropertyBinding21.$clinit(); return $rt_cls(oahjs_PropertyBinding21);
126.11807 +            case "java.lang.Byte": jl_Byte337.$clinit(); return $rt_cls(jl_Byte337);
126.11808 +            case "java.lang.System": jl_System125.$clinit(); return $rt_cls(jl_System125);
126.11809 +            case "org.apidesign.html.json.spi.WSTransfer": oahjs_WSTransfer650.$clinit(); return $rt_cls(oahjs_WSTransfer650);
126.11810 +            case "java.io.FilterOutputStream": ji_FilterOutputStream716.$clinit(); return $rt_cls(ji_FilterOutputStream716);
126.11811 +            case "java.lang.AbstractStringBuilder": jl_AbstractStringBuilder741.$clinit(); return $rt_cls(jl_AbstractStringBuilder741);
126.11812 +            case "java.lang.Runnable": jl_Runnable232.$clinit(); return $rt_cls(jl_Runnable232);
126.11813 +            case "java.util.AbstractCollection": ju_AbstractCollection204.$clinit(); return $rt_cls(ju_AbstractCollection204);
126.11814 +            case "org.apidesign.demo.minesweeper.MinesModel$SquareType": oadm_MinesModel$SquareType45.$clinit(); return $rt_cls(oadm_MinesModel$SquareType45);
126.11815 +            case "java.io.OutputStream": ji_OutputStream524.$clinit(); return $rt_cls(ji_OutputStream524);
126.11816 +            case "org.teavm.classlib.impl.charset.UTF8Charset": otcic_UTF8Charset385.$clinit(); return $rt_cls(otcic_UTF8Charset385);
126.11817 +            case "java.util.Iterator": ju_Iterator278.$clinit(); return $rt_cls(ju_Iterator278);
126.11818 +            case "java.lang.Double": jl_Double340.$clinit(); return $rt_cls(jl_Double340);
126.11819 +            case "org.apidesign.html.context.spi.Contexts": oahcs_Contexts398.$clinit(); return $rt_cls(oahcs_Contexts398);
126.11820 +            case "java.lang.Class": jl_Class0.$clinit(); return $rt_cls(jl_Class0);
126.11821 +            case "org.netbeans.html.ko4j.FXContext$TrueFn": onhk_FXContext$TrueFn794.$clinit(); return $rt_cls(onhk_FXContext$TrueFn794);
126.11822 +            case "java.lang.Void": jl_Void298.$clinit(); return $rt_cls(jl_Void298);
126.11823 +            case "org.apidesign.html.json.spi.PropertyBinding$1": oahjs_PropertyBinding$123.$clinit(); return $rt_cls(oahjs_PropertyBinding$123);
126.11824 +            case "org.netbeans.html.ko4j.KO4J": onhk_KO4J507.$clinit(); return $rt_cls(onhk_KO4J507);
126.11825 +            case "java.lang.Comparable": jl_Comparable163.$clinit(); return $rt_cls(jl_Comparable163);
126.11826 +            case "java.lang.Short": jl_Short334.$clinit(); return $rt_cls(jl_Short334);
126.11827 +            case "org.apidesign.demo.minesweeper.Square$Html4JavaType": oadm_Square$Html4JavaType795.$clinit(); return $rt_cls(oadm_Square$Html4JavaType795);
126.11828 +            case "java.util.HashMap": ju_HashMap394.$clinit(); return $rt_cls(ju_HashMap394);
126.11829 +            case "org.netbeans.html.ko4j.FXContext": onhk_FXContext636.$clinit(); return $rt_cls(onhk_FXContext636);
126.11830 +            case "java.lang.ClassNotFoundException": jl_ClassNotFoundException796.$clinit(); return $rt_cls(jl_ClassNotFoundException796);
126.11831 +            case "java.io.Serializable": ji_Serializable164.$clinit(); return $rt_cls(ji_Serializable164);
126.11832 +            case "java.lang.Integer": jl_Integer81.$clinit(); return $rt_cls(jl_Integer81);
126.11833 +            case "java.lang.Object": jl_Object7.$clinit(); return $rt_cls(jl_Object7);
126.11834 +            case "org.netbeans.html.context.impl.CtxImpl": onhci_CtxImpl665.$clinit(); return $rt_cls(onhci_CtxImpl665);
126.11835 +            case "org.apidesign.demo.minesweeper.Row": oadm_Row56.$clinit(); return $rt_cls(oadm_Row56);
126.11836 +            case "org.apidesign.html.json.spi.FunctionBinding$Impl": oahjs_FunctionBinding$Impl522.$clinit(); return $rt_cls(oahjs_FunctionBinding$Impl522);
126.11837 +            case "java.lang.StringBuilder": jl_StringBuilder16.$clinit(); return $rt_cls(jl_StringBuilder16);
126.11838 +            case "org.apidesign.demo.minesweeper.Square": oadm_Square62.$clinit(); return $rt_cls(oadm_Square62);
126.11839 +            case "org.apidesign.html.boot.spi.Fn$Presenter": oahbs_Fn$Presenter797.$clinit(); return $rt_cls(oahbs_Fn$Presenter797);
126.11840 +            case "java.util.Collections$6": ju_Collections$6201.$clinit(); return $rt_cls(ju_Collections$6201);
126.11841 +            case "org.netbeans.html.json.impl.JSONList": onhji_JSONList76.$clinit(); return $rt_cls(onhji_JSONList76);
126.11842 +            case "java.lang.AssertionError": jl_AssertionError316.$clinit(); return $rt_cls(jl_AssertionError316);
126.11843 +            case "org.netbeans.html.boot.impl.FnContext": onhbi_FnContext473.$clinit(); return $rt_cls(onhbi_FnContext473);
126.11844 +            case "java.util.ConcurrentModificationException": ju_ConcurrentModificationException569.$clinit(); return $rt_cls(ju_ConcurrentModificationException569);
126.11845 +            case "java.lang.Exception": jl_Exception127.$clinit(); return $rt_cls(jl_Exception127);
126.11846 +            case "org.apidesign.demo.minesweeper.MinesModel$GameState": oadm_MinesModel$GameState73.$clinit(); return $rt_cls(oadm_MinesModel$GameState73);
126.11847 +            default: return null;
126.11848 +        }
126.11849 +    }
126.11850 +    jl_Class0_forName421 = function(a, b, c) {
126.11851 +        return jl_Class0_forName798(a);
126.11852 +    }
126.11853 +    jl_Class0_createNew1 = function() {
126.11854 +        return jl_Class0.$init799();
126.11855 +    }
126.11856 +    jl_Class0_$init799 = function($this) {
126.11857 +        jl_Object7_$init10($this);
126.11858 +        $this.componentTypeDirty791 = 1;
126.11859 +        return;
126.11860 +    }
126.11861 +    jl_Class0_forName798 = function(a) {
126.11862 +        a = jl_Class0_forNameImpl793(a);
126.11863 +        if ((a !== null)) {
126.11864 +            return a;
126.11865 +        }
126.11866 +        $rt_throw(jl_ClassNotFoundException796.$init800());
126.11867 +    }
126.11868 +}
126.11869 +$rt_methodStubs(jl_Class0_$clinit, ['jl_Class0_forNameImpl793', 'jl_Class0_forName421', 'jl_Class0_createNew1', 'jl_Class0_$init799', 'jl_Class0_forName798']);
126.11870 +function jl_Class0_cast346($this, a) {
126.11871 +    var b;
126.11872 +    block1: {
126.11873 +        if ((a !== null)) {
126.11874 +            b = $rt_nullCheck(a);
126.11875 +            if (($rt_isAssignable($rt_cls(b.constructor).$data, $rt_nullCheck($this).$data) == 0)) {
126.11876 +                break block1;
126.11877 +            }
126.11878 +        }
126.11879 +        return a;
126.11880 +    }
126.11881 +    $rt_throw(jl_ClassCastException267.$init269(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), jl_Class0_getName20($rt_nullCheck($rt_cls(b.constructor))))), $rt_str(" is not subtype of "))), $this.name2)))));
126.11882 +}
126.11883 +function jl_Class0_getName20($this) {
126.11884 +    return jl_String3.$init173($this.name2);
126.11885 +}
126.11886 +function jl_Class0_getClassLoader420($this) {
126.11887 +    return jl_ClassLoader512_getSystemClassLoader520();
126.11888 +}
126.11889 +function jl_Class0_getComponentType152($this) {
126.11890 +    if (($this.componentTypeDirty791 != 0)) {
126.11891 +        $this.componentType792 = jl_Class0_getComponentType0801($this);
126.11892 +        $this.componentTypeDirty791 = 0;
126.11893 +    }
126.11894 +    return $this.componentType792;
126.11895 +}
126.11896 +function jl_Class0_getComponentType0801($this) {
126.11897 +    var item = $this.$data.$meta.item;
126.11898 +    return item != null ? $rt_cls(item) : null;
126.11899 +}
126.11900 +function jl_Class0_desiredAssertionStatus320($this) {
126.11901 +    return 1;
126.11902 +}
126.11903 +function jl_Class0_newInstance422($this) {
126.11904 +    if (!jl_Class0.$$constructors$$) {
126.11905 +        jl_Class0.$$constructors$$ = true;
126.11906 +        oadm_MinesModel43.$$constructor$$ = oadm_MinesModel43_$init97;
126.11907 +        jl_NumberFormatException137.$$constructor$$ = jl_NumberFormatException137_$init138;
126.11908 +        oadm_MinesModel$RowModel140.$$constructor$$ = oadm_MinesModel$RowModel140_$init141;
126.11909 +        ju_Arrays142.$$constructor$$ = ju_Arrays142_$init155;
126.11910 +        jl_ArrayIndexOutOfBoundsException160.$$constructor$$ = jl_ArrayIndexOutOfBoundsException160_$init161;
126.11911 +        jl_String3.$$constructor$$ = jl_String3_$init172;
126.11912 +        ju_Collections195.$$constructor$$ = ju_Collections195_$init199;
126.11913 +        jl_IncompatibleClassChangeError212.$$constructor$$ = jl_IncompatibleClassChangeError212_$init213;
126.11914 +        jl_NoSuchFieldError216.$$constructor$$ = jl_NoSuchFieldError216_$init217;
126.11915 +        ju_AbstractList66.$$constructor$$ = ju_AbstractList66_$init221;
126.11916 +        oadm_MainBrwsr227.$$constructor$$ = oadm_MainBrwsr227_$init231;
126.11917 +        jl_Thread233.$$constructor$$ = jl_Thread233_$init240;
126.11918 +        jl_Throwable111.$$constructor$$ = jl_Throwable111_$init118;
126.11919 +        jl_ClassCastException267.$$constructor$$ = jl_ClassCastException267_$init268;
126.11920 +        jlr_Array150.$$constructor$$ = jlr_Array150_$init302;
126.11921 +        ju_AbstractMap305.$$constructor$$ = ju_AbstractMap305_$init306;
126.11922 +        oadm_Mines$Html4JavaType356.$$constructor$$ = oadm_Mines$Html4JavaType356_$init357;
126.11923 +        otcic_Charset382.$$constructor$$ = otcic_Charset382_$init383;
126.11924 +        jl_IndexOutOfBoundsException157.$$constructor$$ = jl_IndexOutOfBoundsException157_$init158;
126.11925 +        onhji_JSON40.$$constructor$$ = onhji_JSON40_$init415;
126.11926 +        jl_NegativeArraySizeException300.$$constructor$$ = jl_NegativeArraySizeException300_$init301;
126.11927 +        jl_SecurityException314.$$constructor$$ = jl_SecurityException314_$init435;
126.11928 +        jl_RuntimeException131.$$constructor$$ = jl_RuntimeException131_$init132;
126.11929 +        jl_Math147.$$constructor$$ = jl_Math147_$init465;
126.11930 +        oahbs_Fn466.$$constructor$$ = oahbs_Fn466_$init471;
126.11931 +        jl_NullPointerException8.$$constructor$$ = jl_NullPointerException8_$init9;
126.11932 +        oadm_Mines49.$$constructor$$ = oadm_Mines49_$init93;
126.11933 +        jl_ReflectiveOperationException493.$$constructor$$ = jl_ReflectiveOperationException493_$init494;
126.11934 +        onhji_PropertyBindingAccessor404.$$constructor$$ = onhji_PropertyBindingAccessor404_$init499;
126.11935 +        jl_Number325.$$constructor$$ = jl_Number325_$init423;
126.11936 +        jl_ClassLoader512.$$constructor$$ = jl_ClassLoader512_$init519;
126.11937 +        oahjs_FunctionBinding448.$$constructor$$ = oahjs_FunctionBinding448_$init521;
126.11938 +        jl_ConsoleOutputStream_stdout528.$$constructor$$ = jl_ConsoleOutputStream_stdout528_$init529;
126.11939 +        ju_ArrayList54.$$constructor$$ = ju_ArrayList54_$init80;
126.11940 +        jl_LinkageError210.$$constructor$$ = jl_LinkageError210_$init211;
126.11941 +        ji_IOException538.$$constructor$$ = ji_IOException538_$init539;
126.11942 +        otcic_UTF16Helper169.$$constructor$$ = otcic_UTF16Helper169_$init558;
126.11943 +        ju_Random68.$$constructor$$ = ju_Random68_$init69;
126.11944 +        jl_UnsupportedOperationException222.$$constructor$$ = jl_UnsupportedOperationException222_$init223;
126.11945 +        onhk_Knockout571.$$constructor$$ = onhk_Knockout571_$init578;
126.11946 +        jl_Error208.$$constructor$$ = jl_Error208_$init209;
126.11947 +        jl_SystemClassLoader517.$$constructor$$ = jl_SystemClassLoader517_$init518;
126.11948 +        jl_ConsoleOutputStream_stderr595.$$constructor$$ = jl_ConsoleOutputStream_stderr595_$init596;
126.11949 +        jl_IllegalArgumentException134.$$constructor$$ = jl_IllegalArgumentException134_$init135;
126.11950 +        njh_BrwsrCtx$1603.$$constructor$$ = njh_BrwsrCtx$1603_$init604;
126.11951 +        jl_IllegalStateException229.$$constructor$$ = jl_IllegalStateException229_$init452;
126.11952 +        ju_NoSuchElementException285.$$constructor$$ = ju_NoSuchElementException285_$init286;
126.11953 +        onhci_CtxAccssr597.$$constructor$$ = onhci_CtxAccssr597_$init601;
126.11954 +        oth_JavaScriptConv573.$$constructor$$ = oth_JavaScriptConv573_$init649;
126.11955 +        onhji_JSON$EmptyTech400.$$constructor$$ = onhji_JSON$EmptyTech400_$init653;
126.11956 +        jl_InstantiationException654.$$constructor$$ = jl_InstantiationException654_$init655;
126.11957 +        oahcs_Contexts$Builder662.$$constructor$$ = oahcs_Contexts$Builder662_$init664;
126.11958 +        jl_ThreadLocal670.$$constructor$$ = jl_ThreadLocal670_$init673;
126.11959 +        oadm_MinesModel$SquareModel687.$$constructor$$ = oadm_MinesModel$SquareModel687_$init688;
126.11960 +        otciu_UnicodeHelper256.$$constructor$$ = otciu_UnicodeHelper256_$init706;
126.11961 +        ju_Collections$8144.$$constructor$$ = ju_Collections$8144_$init198;
126.11962 +        oadm_Row$Html4JavaType708.$$constructor$$ = oadm_Row$Html4JavaType708_$init709;
126.11963 +        jl_StringIndexOutOfBoundsException177.$$constructor$$ = jl_StringIndexOutOfBoundsException177_$init178;
126.11964 +        oahjs_PropertyBinding21.$$constructor$$ = oahjs_PropertyBinding21_$init25;
126.11965 +        jl_System125.$$constructor$$ = jl_System125_$init740;
126.11966 +        jl_AbstractStringBuilder741.$$constructor$$ = jl_AbstractStringBuilder741_$init755;
126.11967 +        ju_AbstractCollection204.$$constructor$$ = ju_AbstractCollection204_$init219;
126.11968 +        ji_OutputStream524.$$constructor$$ = ji_OutputStream524_$init525;
126.11969 +        otcic_UTF8Charset385.$$constructor$$ = otcic_UTF8Charset385_$init386;
126.11970 +        oahcs_Contexts398.$$constructor$$ = oahcs_Contexts398_$init789;
126.11971 +        jl_Class0.$$constructor$$ = jl_Class0_$init799;
126.11972 +        onhk_FXContext$TrueFn794.$$constructor$$ = onhk_FXContext$TrueFn794_$init802;
126.11973 +        jl_Void298.$$constructor$$ = jl_Void298_$init803;
126.11974 +        oahjs_PropertyBinding$123.$$constructor$$ = oahjs_PropertyBinding$123_$init24;
126.11975 +        onhk_KO4J507.$$constructor$$ = onhk_KO4J507_$init508;
126.11976 +        oadm_Square$Html4JavaType795.$$constructor$$ = oadm_Square$Html4JavaType795_$init804;
126.11977 +        ju_HashMap394.$$constructor$$ = ju_HashMap394_$init412;
126.11978 +        jl_ClassNotFoundException796.$$constructor$$ = jl_ClassNotFoundException796_$init800;
126.11979 +        jl_Object7.$$constructor$$ = jl_Object7_$init10;
126.11980 +        onhci_CtxImpl665.$$constructor$$ = onhci_CtxImpl665_$init666;
126.11981 +        oadm_Row56.$$constructor$$ = oadm_Row56_$init805;
126.11982 +        jl_StringBuilder16.$$constructor$$ = jl_StringBuilder16_$init17;
126.11983 +        oadm_Square62.$$constructor$$ = oadm_Square62_$init806;
126.11984 +        jl_AssertionError316.$$constructor$$ = jl_AssertionError316_$init317;
126.11985 +        ju_ConcurrentModificationException569.$$constructor$$ = ju_ConcurrentModificationException569_$init570;
126.11986 +        jl_Exception127.$$constructor$$ = jl_Exception127_$init128;
126.11987 +    }
126.11988 +    var cls = $this.$data;
126.11989 +    var ctor = cls.$$constructor$$;
126.11990 +    if (!ctor) {
126.11991 +        var ex = new jl_InstantiationException654();
126.11992 +        jl_InstantiationException654_$init655(ex);
126.11993 +        $rt_throw(ex);
126.11994 +    }
126.11995 +    var instance = new cls();
126.11996 +    ctor(instance);
126.11997 +    return instance;
126.11998 +}
126.11999 +function jl_Class0_getDeclaringClass315($this) {
126.12000 +    if (!jl_Class0.$$owners$$) {
126.12001 +        jl_Class0.$$owners$$ = true;
126.12002 +        oahjs_PropertyBinding$Impl26.$$owner$$ = oahjs_PropertyBinding21;
126.12003 +        oadm_MinesModel43.$$owner$$ = null;
126.12004 +        jl_NumberFormatException137.$$owner$$ = null;
126.12005 +        oadm_MinesModel$RowModel140.$$owner$$ = oadm_MinesModel43;
126.12006 +        ju_Arrays142.$$owner$$ = null;
126.12007 +        oahjs_Technology156.$$owner$$ = null;
126.12008 +        jl_ArrayIndexOutOfBoundsException160.$$owner$$ = null;
126.12009 +        jl_String3.$$owner$$ = null;
126.12010 +        ju_Collections195.$$owner$$ = null;
126.12011 +        jl_IncompatibleClassChangeError212.$$owner$$ = null;
126.12012 +        ji_Closeable215.$$owner$$ = null;
126.12013 +        jl_NoSuchFieldError216.$$owner$$ = null;
126.12014 +        ju_AbstractList66.$$owner$$ = null;
126.12015 +        oahjs_Technology$BatchInit226.$$owner$$ = oahjs_Technology156;
126.12016 +        oadm_MainBrwsr227.$$owner$$ = null;
126.12017 +        jl_Thread233.$$owner$$ = null;
126.12018 +        jl_Character187.$$owner$$ = null;
126.12019 +        jl_Throwable111.$$owner$$ = null;
126.12020 +        ju_MapEntry263.$$owner$$ = null;
126.12021 +        jl_ClassCastException267.$$owner$$ = null;
126.12022 +        onhci_CtxImpl$Bind270.$$owner$$ = onhci_CtxImpl665;
126.12023 +        ju_ServiceLoader$1279.$$owner$$ = ju_ServiceLoader283;
126.12024 +        otcic_CharBuffer287.$$owner$$ = null;
126.12025 +        jl_AutoCloseable214.$$owner$$ = null;
126.12026 +        jl_Cloneable262.$$owner$$ = null;
126.12027 +        jlr_Array150.$$owner$$ = null;
126.12028 +        ju_AbstractMap305.$$owner$$ = null;
126.12029 +        oadm_Mines$Html4JavaType356.$$owner$$ = oadm_Mines49;
126.12030 +        oadm_Mines$1375.$$owner$$ = oadm_Mines49;
126.12031 +        otcic_Charset382.$$owner$$ = null;
126.12032 +        jl_IndexOutOfBoundsException157.$$owner$$ = null;
126.12033 +        onhji_JSON40.$$owner$$ = null;
126.12034 +        jl_NegativeArraySizeException300.$$owner$$ = null;
126.12035 +        jl_Float343.$$owner$$ = null;
126.12036 +        jl_SecurityException314.$$owner$$ = null;
126.12037 +        jl_CharSequence162.$$owner$$ = null;
126.12038 +        oahjs_Proto321.$$owner$$ = null;
126.12039 +        jl_RuntimeException131.$$owner$$ = null;
126.12040 +        jl_Math147.$$owner$$ = null;
126.12041 +        oahbs_Fn466.$$owner$$ = null;
126.12042 +        ji_Flushable477.$$owner$$ = null;
126.12043 +        ju_Map304.$$owner$$ = null;
126.12044 +        jl_NullPointerException8.$$owner$$ = null;
126.12045 +        oadm_Mines49.$$owner$$ = null;
126.12046 +        jl_ReflectiveOperationException493.$$owner$$ = null;
126.12047 +        onhji_PropertyBindingAccessor404.$$owner$$ = null;
126.12048 +        ju_ServiceLoader283.$$owner$$ = null;
126.12049 +        jl_Number325.$$owner$$ = null;
126.12050 +        jl_ClassLoader512.$$owner$$ = null;
126.12051 +        oahjs_FunctionBinding448.$$owner$$ = null;
126.12052 +        ju_List206.$$owner$$ = null;
126.12053 +        jl_ConsoleOutputStream_stdout528.$$owner$$ = null;
126.12054 +        ju_ArrayList54.$$owner$$ = null;
126.12055 +        jl_Long331.$$owner$$ = null;
126.12056 +        jl_LinkageError210.$$owner$$ = null;
126.12057 +        ji_IOException538.$$owner$$ = null;
126.12058 +        jul_LogRecord540.$$owner$$ = null;
126.12059 +        oadm_Mines$2491.$$owner$$ = oadm_Mines49;
126.12060 +        ju_Comparator553.$$owner$$ = null;
126.12061 +        ju_HashMap$Entry554.$$owner$$ = ju_HashMap394;
126.12062 +        otcic_UTF16Helper169.$$owner$$ = null;
126.12063 +        ju_Random68.$$owner$$ = null;
126.12064 +        jl_Iterable218.$$owner$$ = null;
126.12065 +        jl_UnsupportedOperationException222.$$owner$$ = null;
126.12066 +        oadm_MinesModel$1100.$$owner$$ = oadm_MinesModel43;
126.12067 +        ju_AbstractList$1108.$$owner$$ = ju_AbstractList66;
126.12068 +        onhk_Knockout571.$$owner$$ = null;
126.12069 +        jl_Error208.$$owner$$ = null;
126.12070 +        jl_SystemClassLoader517.$$owner$$ = null;
126.12071 +        jul_Level581.$$owner$$ = null;
126.12072 +        jl_ConsoleOutputStream_stderr595.$$owner$$ = null;
126.12073 +        jl_IllegalArgumentException134.$$owner$$ = null;
126.12074 +        njh_BrwsrCtx$1603.$$owner$$ = njh_BrwsrCtx488;
126.12075 +        jl_Enum102.$$owner$$ = null;
126.12076 +        otcic_ByteBuffer615.$$owner$$ = null;
126.12077 +        onhji_Bindings406.$$owner$$ = null;
126.12078 +        oahjs_Transfer639.$$owner$$ = null;
126.12079 +        juc_Executor640.$$owner$$ = null;
126.12080 +        oahcs_Contexts$Provider506.$$owner$$ = oahcs_Contexts398;
126.12081 +        jl_IllegalStateException229.$$owner$$ = null;
126.12082 +        ju_Map$Entry261.$$owner$$ = ju_Map304;
126.12083 +        ju_NoSuchElementException285.$$owner$$ = null;
126.12084 +        onhci_CtxAccssr597.$$owner$$ = null;
126.12085 +        jl_Boolean327.$$owner$$ = null;
126.12086 +        oth_JavaScriptConv573.$$owner$$ = null;
126.12087 +        ju_Collection203.$$owner$$ = null;
126.12088 +        onhji_JSON$EmptyTech400.$$owner$$ = onhji_JSON40;
126.12089 +        jl_InstantiationException654.$$owner$$ = null;
126.12090 +        onhk_FXContext$1Wrap656.$$owner$$ = onhk_FXContext636;
126.12091 +        oahcs_Contexts$Builder662.$$owner$$ = oahcs_Contexts398;
126.12092 +        jl_ThreadLocal670.$$owner$$ = null;
126.12093 +        oahjs_Proto$Type36.$$owner$$ = oahjs_Proto321;
126.12094 +        njh_BrwsrCtx488.$$owner$$ = null;
126.12095 +        oadm_MinesModel$SquareModel687.$$owner$$ = oadm_MinesModel43;
126.12096 +        jul_Logger681.$$owner$$ = null;
126.12097 +        otciu_UnicodeHelper256.$$owner$$ = null;
126.12098 +        ju_Collections$8144.$$owner$$ = ju_Collections195;
126.12099 +        oadm_Row$Html4JavaType708.$$owner$$ = oadm_Row56;
126.12100 +        ji_PrintStream122.$$owner$$ = null;
126.12101 +        jl_StringIndexOutOfBoundsException177.$$owner$$ = null;
126.12102 +        jl_Appendable731.$$owner$$ = null;
126.12103 +        oahjs_PropertyBinding21.$$owner$$ = null;
126.12104 +        jl_Byte337.$$owner$$ = null;
126.12105 +        jl_System125.$$owner$$ = null;
126.12106 +        oahjs_WSTransfer650.$$owner$$ = null;
126.12107 +        ji_FilterOutputStream716.$$owner$$ = null;
126.12108 +        jl_AbstractStringBuilder741.$$owner$$ = null;
126.12109 +        jl_Runnable232.$$owner$$ = null;
126.12110 +        ju_AbstractCollection204.$$owner$$ = null;
126.12111 +        oadm_MinesModel$SquareType45.$$owner$$ = oadm_MinesModel43;
126.12112 +        ji_OutputStream524.$$owner$$ = null;
126.12113 +        otcic_UTF8Charset385.$$owner$$ = null;
126.12114 +        ju_Iterator278.$$owner$$ = null;
126.12115 +        jl_Double340.$$owner$$ = null;
126.12116 +        oahcs_Contexts398.$$owner$$ = null;
126.12117 +        jl_Class0.$$owner$$ = null;
126.12118 +        onhk_FXContext$TrueFn794.$$owner$$ = onhk_FXContext636;
126.12119 +        jl_Void298.$$owner$$ = null;
126.12120 +        oahjs_PropertyBinding$123.$$owner$$ = oahjs_PropertyBinding21;
126.12121 +        onhk_KO4J507.$$owner$$ = null;
126.12122 +        jl_Comparable163.$$owner$$ = null;
126.12123 +        jl_Short334.$$owner$$ = null;
126.12124 +        oadm_Square$Html4JavaType795.$$owner$$ = oadm_Square62;
126.12125 +        ju_HashMap394.$$owner$$ = null;
126.12126 +        onhk_FXContext636.$$owner$$ = null;
126.12127 +        jl_ClassNotFoundException796.$$owner$$ = null;
126.12128 +        ji_Serializable164.$$owner$$ = null;
126.12129 +        jl_Integer81.$$owner$$ = null;
126.12130 +        jl_Object7.$$owner$$ = null;
126.12131 +        onhci_CtxImpl665.$$owner$$ = null;
126.12132 +        oadm_Row56.$$owner$$ = null;
126.12133 +        oahjs_FunctionBinding$Impl522.$$owner$$ = oahjs_FunctionBinding448;
126.12134 +        jl_StringBuilder16.$$owner$$ = null;
126.12135 +        oadm_Square62.$$owner$$ = null;
126.12136 +        oahbs_Fn$Presenter797.$$owner$$ = oahbs_Fn466;
126.12137 +        ju_Collections$6201.$$owner$$ = ju_Collections195;
126.12138 +        onhji_JSONList76.$$owner$$ = null;
126.12139 +        jl_AssertionError316.$$owner$$ = null;
126.12140 +        onhbi_FnContext473.$$owner$$ = null;
126.12141 +        ju_ConcurrentModificationException569.$$owner$$ = null;
126.12142 +        jl_Exception127.$$owner$$ = null;
126.12143 +        oadm_MinesModel$GameState73.$$owner$$ = oadm_MinesModel43;
126.12144 +    }
126.12145 +    var cls = $this.$data;
126.12146 +    return cls.$$owner$$ != null ? $rt_cls(cls.$$owner$$) : null;
126.12147 +}
126.12148 +jl_Class0.$init799 = function() {
126.12149 +    var result = new jl_Class0();
126.12150 +    result.$init799();
126.12151 +    return result;
126.12152 +}
126.12153 +$rt_virtualMethods(jl_Class0,
126.12154 +    "cast346", function(a) { return jl_Class0_cast346(this, a); },
126.12155 +    "getName20", function() { return jl_Class0_getName20(this); },
126.12156 +    "getClassLoader420", function() { return jl_Class0_getClassLoader420(this); },
126.12157 +    "getComponentType152", function() { return jl_Class0_getComponentType152(this); },
126.12158 +    "getComponentType0801", function() { return jl_Class0_getComponentType0801(this); },
126.12159 +    "desiredAssertionStatus320", function() { return jl_Class0_desiredAssertionStatus320(this); },
126.12160 +    "$init799", function() { jl_Class0_$init799(this); },
126.12161 +    "newInstance422", function() { return jl_Class0_newInstance422(this); },
126.12162 +    "getDeclaringClass315", function() { return jl_Class0_getDeclaringClass315(this); });
126.12163 +function oahbs_Fn$Presenter797() {
126.12164 +}
126.12165 +$rt_declClass(oahbs_Fn$Presenter797, {
126.12166 +    name : "org.apidesign.html.boot.spi.Fn$Presenter",
126.12167 +    superclass : jl_Object7 });
126.12168 +function onhk_FXContext$TrueFn794() {
126.12169 +}
126.12170 +$rt_declClass(onhk_FXContext$TrueFn794, {
126.12171 +    name : "org.netbeans.html.ko4j.FXContext$TrueFn",
126.12172 +    interfaces : [oahbs_Fn$Presenter797],
126.12173 +    superclass : oahbs_Fn466,
126.12174 +    clinit : function() { onhk_FXContext$TrueFn794_$clinit(); } });
126.12175 +function onhk_FXContext$TrueFn794_$clinit() {
126.12176 +    onhk_FXContext$TrueFn794_$clinit = function(){};
126.12177 +    onhk_FXContext$TrueFn794_$init802 = function($this) {
126.12178 +        oahbs_Fn466_$init471($this);
126.12179 +        return;
126.12180 +    }
126.12181 +    onhk_FXContext$TrueFn794_$init807 = function($this, a) {
126.12182 +        onhk_FXContext$TrueFn794_$init802($this);
126.12183 +        return;
126.12184 +    }
126.12185 +}
126.12186 +$rt_methodStubs(onhk_FXContext$TrueFn794_$clinit, ['onhk_FXContext$TrueFn794_$init802', 'onhk_FXContext$TrueFn794_$init807']);
126.12187 +onhk_FXContext$TrueFn794.$init802 = function() {
126.12188 +    var result = new onhk_FXContext$TrueFn794();
126.12189 +    result.$init802();
126.12190 +    return result;
126.12191 +}
126.12192 +onhk_FXContext$TrueFn794.$init807 = function(a) {
126.12193 +    var result = new onhk_FXContext$TrueFn794();
126.12194 +    result.$init807(a);
126.12195 +    return result;
126.12196 +}
126.12197 +$rt_virtualMethods(onhk_FXContext$TrueFn794,
126.12198 +    "$init802", function() { onhk_FXContext$TrueFn794_$init802(this); },
126.12199 +    "$init807", function(a) { onhk_FXContext$TrueFn794_$init807(this, a); });
126.12200 +function jl_Void298() {
126.12201 +}
126.12202 +jl_Void298.TYPE299 = null;
126.12203 +$rt_declClass(jl_Void298, {
126.12204 +    name : "java.lang.Void",
126.12205 +    superclass : jl_Object7,
126.12206 +    clinit : function() { jl_Void298_$clinit(); } });
126.12207 +function jl_Void298_$clinit() {
126.12208 +    jl_Void298_$clinit = function(){};
126.12209 +    jl_Void298_$clinit808 = function() {
126.12210 +        jl_Void298.TYPE299 = $rt_cls($rt_voidcls());
126.12211 +        return;
126.12212 +    }
126.12213 +    jl_Void298_$init803 = function($this) {
126.12214 +        jl_Object7_$init10($this);
126.12215 +        return;
126.12216 +    }
126.12217 +    jl_Void298_$clinit808();
126.12218 +}
126.12219 +$rt_methodStubs(jl_Void298_$clinit, ['jl_Void298_$clinit808', 'jl_Void298_$init803']);
126.12220 +jl_Void298.$init803 = function() {
126.12221 +    var result = new jl_Void298();
126.12222 +    result.$init803();
126.12223 +    return result;
126.12224 +}
126.12225 +$rt_virtualMethods(jl_Void298,
126.12226 +    "$init803", function() { jl_Void298_$init803(this); });
126.12227 +function oahjs_PropertyBinding$123() {
126.12228 +}
126.12229 +$rt_declClass(oahjs_PropertyBinding$123, {
126.12230 +    name : "org.apidesign.html.json.spi.PropertyBinding$1",
126.12231 +    superclass : onhji_PropertyBindingAccessor404,
126.12232 +    clinit : function() { oahjs_PropertyBinding$123_$clinit(); } });
126.12233 +function oahjs_PropertyBinding$123_$clinit() {
126.12234 +    oahjs_PropertyBinding$123_$clinit = function(){};
126.12235 +    oahjs_PropertyBinding$123_$init24 = function($this) {
126.12236 +        onhji_PropertyBindingAccessor404_$init499($this);
126.12237 +        return;
126.12238 +    }
126.12239 +}
126.12240 +$rt_methodStubs(oahjs_PropertyBinding$123_$clinit, ['oahjs_PropertyBinding$123_$init24']);
126.12241 +function oahjs_PropertyBinding$123_newBinding498($this, a, b, c, d, e, f) {
126.12242 +    return oahjs_PropertyBinding$Impl26.$init33(b, c, d, e, a, f);
126.12243 +}
126.12244 +function oahjs_PropertyBinding$123_findProto500($this, a, b) {
126.12245 +    return $rt_nullCheck(a).protoFor370(b);
126.12246 +}
126.12247 +function oahjs_PropertyBinding$123_notifyChange503($this, a, b) {
126.12248 +    oahjs_Proto321_onChange455($rt_nullCheck(a), b);
126.12249 +    return;
126.12250 +}
126.12251 +function oahjs_PropertyBinding$123_bindings501($this, a, b) {
126.12252 +    if ((b == 0)) {
126.12253 +        a = oahjs_Proto321_getBindings441($rt_nullCheck(a));
126.12254 +    } else {
126.12255 +        a = oahjs_Proto321_initBindings445($rt_nullCheck(a));
126.12256 +    }
126.12257 +    return a;
126.12258 +}
126.12259 +oahjs_PropertyBinding$123.$init24 = function() {
126.12260 +    var result = new oahjs_PropertyBinding$123();
126.12261 +    result.$init24();
126.12262 +    return result;
126.12263 +}
126.12264 +$rt_virtualMethods(oahjs_PropertyBinding$123,
126.12265 +    "$init24", function() { oahjs_PropertyBinding$123_$init24(this); },
126.12266 +    "newBinding498", function(a, b, c, d, e, f) { return oahjs_PropertyBinding$123_newBinding498(this, a, b, c, d, e, f); },
126.12267 +    "findProto500", function(a, b) { return oahjs_PropertyBinding$123_findProto500(this, a, b); },
126.12268 +    "notifyChange503", function(a, b) { oahjs_PropertyBinding$123_notifyChange503(this, a, b); },
126.12269 +    "bindings501", function(a, b) { return oahjs_PropertyBinding$123_bindings501(this, a, b); });
126.12270 +function onhk_KO4J507() {
126.12271 +    this.c809 = null;
126.12272 +    this.presenter810 = null;
126.12273 +}
126.12274 +$rt_declClass(onhk_KO4J507, {
126.12275 +    name : "org.netbeans.html.ko4j.KO4J",
126.12276 +    interfaces : [oahcs_Contexts$Provider506],
126.12277 +    superclass : jl_Object7,
126.12278 +    clinit : function() { onhk_KO4J507_$clinit(); } });
126.12279 +function onhk_KO4J507_$clinit() {
126.12280 +    onhk_KO4J507_$clinit = function(){};
126.12281 +    onhk_KO4J507_$init508 = function($this) {
126.12282 +        onhk_KO4J507_$init811($this, null);
126.12283 +        return;
126.12284 +    }
126.12285 +    onhk_KO4J507_$init811 = function($this, a) {
126.12286 +        jl_Object7_$init10($this);
126.12287 +        $this.presenter810 = a;
126.12288 +        return;
126.12289 +    }
126.12290 +}
126.12291 +$rt_methodStubs(onhk_KO4J507_$clinit, ['onhk_KO4J507_$init508', 'onhk_KO4J507_$init811']);
126.12292 +function onhk_KO4J507_fillContext788($this, a, b) {
126.12293 +    var c, d, e, f;
126.12294 +    if ((onhk_FXContext636_isJavaScriptEnabled812() != 0)) {
126.12295 +        b = $rt_cls(oahjs_Technology156);
126.12296 +        c = $rt_nullCheck($this);
126.12297 +        d = onhk_KO4J507_knockout813(c);
126.12298 +        e = 100;
126.12299 +        f = $rt_nullCheck(a);
126.12300 +        oahcs_Contexts$Builder662_register668(f, b, d, e);
126.12301 +        oahcs_Contexts$Builder662_register668(f, $rt_cls(oahjs_Transfer639), onhk_KO4J507_transfer814(c), 100);
126.12302 +        if ((onhk_FXContext636_areWebSocketsSupported815($rt_nullCheck($this.c809)) != 0)) {
126.12303 +            oahcs_Contexts$Builder662_register668(f, $rt_cls(oahjs_WSTransfer650), onhk_KO4J507_websockets816(c), 100);
126.12304 +        }
126.12305 +    }
126.12306 +    return;
126.12307 +}
126.12308 +function onhk_KO4J507_getKO817($this) {
126.12309 +    var a, b;
126.12310 +    if (($this.c809 === null)) {
126.12311 +        a = new onhk_FXContext636();
126.12312 +        if (($this.presenter810 !== null)) {
126.12313 +            b = $this.presenter810;
126.12314 +        } else {
126.12315 +            b = oahbs_Fn466_activePresenter475();
126.12316 +        }
126.12317 +        onhk_FXContext636_$init818(a, b);
126.12318 +        $this.c809 = a;
126.12319 +    }
126.12320 +    return $this.c809;
126.12321 +}
126.12322 +function onhk_KO4J507_transfer814($this) {
126.12323 +    return onhk_KO4J507_getKO817($this);
126.12324 +}
126.12325 +function onhk_KO4J507_knockout813($this) {
126.12326 +    return onhk_KO4J507_getKO817($this);
126.12327 +}
126.12328 +function onhk_KO4J507_websockets816($this) {
126.12329 +    var a;
126.12330 +    if ((onhk_FXContext636_areWebSocketsSupported815($rt_nullCheck(onhk_KO4J507_getKO817($this))) == 0)) {
126.12331 +        a = null;
126.12332 +    } else {
126.12333 +        a = onhk_KO4J507_getKO817($this);
126.12334 +    }
126.12335 +    return a;
126.12336 +}
126.12337 +onhk_KO4J507.$init508 = function() {
126.12338 +    var result = new onhk_KO4J507();
126.12339 +    result.$init508();
126.12340 +    return result;
126.12341 +}
126.12342 +onhk_KO4J507.$init811 = function(a) {
126.12343 +    var result = new onhk_KO4J507();
126.12344 +    result.$init811(a);
126.12345 +    return result;
126.12346 +}
126.12347 +$rt_virtualMethods(onhk_KO4J507,
126.12348 +    "fillContext788", function(a, b) { onhk_KO4J507_fillContext788(this, a, b); },
126.12349 +    "getKO817", function() { return onhk_KO4J507_getKO817(this); },
126.12350 +    "$init508", function() { onhk_KO4J507_$init508(this); },
126.12351 +    "transfer814", function() { return onhk_KO4J507_transfer814(this); },
126.12352 +    "knockout813", function() { return onhk_KO4J507_knockout813(this); },
126.12353 +    "$init811", function(a) { onhk_KO4J507_$init811(this, a); },
126.12354 +    "websockets816", function() { return onhk_KO4J507_websockets816(this); });
126.12355 +function jl_Short334() {
126.12356 +    this.value819 = 0;
126.12357 +}
126.12358 +jl_Short334.TYPE820 = null;
126.12359 +$rt_declClass(jl_Short334, {
126.12360 +    name : "java.lang.Short",
126.12361 +    interfaces : [jl_Comparable163],
126.12362 +    superclass : jl_Number325,
126.12363 +    clinit : function() { jl_Short334_$clinit(); } });
126.12364 +function jl_Short334_$clinit() {
126.12365 +    jl_Short334_$clinit = function(){};
126.12366 +    jl_Short334_$clinit821 = function() {
126.12367 +        jl_Short334.TYPE820 = $rt_cls($rt_shortcls());
126.12368 +        return;
126.12369 +    }
126.12370 +    jl_Short334_compare822 = function(a, b) {
126.12371 +        return ((a - b) | 0);
126.12372 +    }
126.12373 +    jl_Short334_$init823 = function($this, a) {
126.12374 +        jl_Number325_$init423($this);
126.12375 +        $this.value819 = a;
126.12376 +        return;
126.12377 +    }
126.12378 +    jl_Short334_valueOf336 = function(a) {
126.12379 +        return jl_Short334.$init823(a);
126.12380 +    }
126.12381 +    jl_Short334_$clinit821();
126.12382 +}
126.12383 +$rt_methodStubs(jl_Short334_$clinit, ['jl_Short334_$clinit821', 'jl_Short334_compare822', 'jl_Short334_$init823', 'jl_Short334_valueOf336']);
126.12384 +function jl_Short334_doubleValue341($this) {
126.12385 +    return $this.value819;
126.12386 +}
126.12387 +function jl_Short334_intValue87($this) {
126.12388 +    return $this.value819;
126.12389 +}
126.12390 +function jl_Short334_shortValue335($this) {
126.12391 +    return $this.value819;
126.12392 +}
126.12393 +function jl_Short334_longValue332($this) {
126.12394 +    return Long_fromInt($this.value819);
126.12395 +}
126.12396 +function jl_Short334_compareTo181($this, a) {
126.12397 +    return jl_Short334_compareTo824($rt_nullCheck($this), a);
126.12398 +}
126.12399 +function jl_Short334_floatValue344($this) {
126.12400 +    return $this.value819;
126.12401 +}
126.12402 +function jl_Short334_compareTo824($this, a) {
126.12403 +    return jl_Short334_compare822($this.value819, a.value819);
126.12404 +}
126.12405 +jl_Short334.$init823 = function(a) {
126.12406 +    var result = new jl_Short334();
126.12407 +    result.$init823(a);
126.12408 +    return result;
126.12409 +}
126.12410 +$rt_virtualMethods(jl_Short334,
126.12411 +    "doubleValue341", function() { return jl_Short334_doubleValue341(this); },
126.12412 +    "intValue87", function() { return jl_Short334_intValue87(this); },
126.12413 +    "shortValue335", function() { return jl_Short334_shortValue335(this); },
126.12414 +    "longValue332", function() { return jl_Short334_longValue332(this); },
126.12415 +    "$init823", function(a) { jl_Short334_$init823(this, a); },
126.12416 +    "compareTo181", function(a) { return jl_Short334_compareTo181(this, a); },
126.12417 +    "floatValue344", function() { return jl_Short334_floatValue344(this); },
126.12418 +    "compareTo824", function(a) { return jl_Short334_compareTo824(this, a); });
126.12419 +function oadm_Square$Html4JavaType795() {
126.12420 +}
126.12421 +$rt_declClass(oadm_Square$Html4JavaType795, {
126.12422 +    name : "org.apidesign.demo.minesweeper.Square$Html4JavaType",
126.12423 +    superclass : oahjs_Proto$Type36,
126.12424 +    clinit : function() { oadm_Square$Html4JavaType795_$clinit(); } });
126.12425 +function oadm_Square$Html4JavaType795_$clinit() {
126.12426 +    oadm_Square$Html4JavaType795_$clinit = function(){};
126.12427 +    oadm_Square$Html4JavaType795_$init804 = function($this) {
126.12428 +        var a, b, c, d;
126.12429 +        oahjs_Proto$Type36_$init313($this, $rt_cls(oadm_Square62), $rt_cls(oadm_MinesModel$SquareModel687), 4, 0);
126.12430 +        a = $rt_str("html");
126.12431 +        b = 0;
126.12432 +        c = 1;
126.12433 +        d = $rt_nullCheck($this);
126.12434 +        oahjs_Proto$Type36_registerProperty347(d, a, b, c);
126.12435 +        oahjs_Proto$Type36_registerProperty347(d, $rt_str("style"), 1, 1);
126.12436 +        oahjs_Proto$Type36_registerProperty347(d, $rt_str("state"), 2, 0);
126.12437 +        oahjs_Proto$Type36_registerProperty347(d, $rt_str("mine"), 3, 0);
126.12438 +        return;
126.12439 +    }
126.12440 +    oadm_Square$Html4JavaType795_$init825 = function($this, a) {
126.12441 +        oadm_Square$Html4JavaType795_$init804($this);
126.12442 +        return;
126.12443 +    }
126.12444 +}
126.12445 +$rt_methodStubs(oadm_Square$Html4JavaType795_$clinit, ['oadm_Square$Html4JavaType795_$init804', 'oadm_Square$Html4JavaType795_$init825']);
126.12446 +function oadm_Square$Html4JavaType795_call359($this, a, b, c, d) {
126.12447 +    a = a;
126.12448 +    oadm_Square$Html4JavaType795_call826($rt_nullCheck($this), a, b, c, d);
126.12449 +    return;
126.12450 +}
126.12451 +function oadm_Square$Html4JavaType795_call826($this, a, b, c, d) {
126.12452 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12453 +}
126.12454 +function oadm_Square$Html4JavaType795_setValue37($this, a, b, c) {
126.12455 +    a = a;
126.12456 +    oadm_Square$Html4JavaType795_setValue827($rt_nullCheck($this), a, b, c);
126.12457 +    return;
126.12458 +}
126.12459 +function oadm_Square$Html4JavaType795_onChange828($this, a, b) {
126.12460 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12461 +}
126.12462 +function oadm_Square$Html4JavaType795_getValue829($this, a, b) {
126.12463 +    block1: {
126.12464 +        block2: {
126.12465 +            block3: {
126.12466 +                block4: {
126.12467 +                    switch (b) {
126.12468 +                        case 0:
126.12469 +                            break;
126.12470 +                        case 1:
126.12471 +                            break block4;
126.12472 +                        case 2:
126.12473 +                            break block3;
126.12474 +                        case 3:
126.12475 +                            break block2;
126.12476 +                        default:
126.12477 +                            break block1;
126.12478 +                    }
126.12479 +                    return oadm_Square62_getHtml830($rt_nullCheck(a));
126.12480 +                }
126.12481 +                return oadm_Square62_getStyle831($rt_nullCheck(a));
126.12482 +            }
126.12483 +            return oadm_Square62_getState84($rt_nullCheck(a));
126.12484 +        }
126.12485 +        return jl_Boolean327_valueOf363(oadm_Square62_isMine71($rt_nullCheck(a)));
126.12486 +    }
126.12487 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12488 +}
126.12489 +function oadm_Square$Html4JavaType795_protoFor370($this, a) {
126.12490 +    return oadm_Square62_access$200832(a);
126.12491 +}
126.12492 +function oadm_Square$Html4JavaType795_onChange372($this, a, b) {
126.12493 +    a = a;
126.12494 +    oadm_Square$Html4JavaType795_onChange828($rt_nullCheck($this), a, b);
126.12495 +    return;
126.12496 +}
126.12497 +function oadm_Square$Html4JavaType795_getValue39($this, a, b) {
126.12498 +    return oadm_Square$Html4JavaType795_getValue829($rt_nullCheck($this), a, b);
126.12499 +}
126.12500 +function oadm_Square$Html4JavaType795_setValue827($this, a, b, c) {
126.12501 +    block1: {
126.12502 +        block2: {
126.12503 +            switch (b) {
126.12504 +                case 2:
126.12505 +                    break;
126.12506 +                case 3:
126.12507 +                    break block2;
126.12508 +                default:
126.12509 +                    break block1;
126.12510 +            }
126.12511 +            b = oahjs_Proto$Type36_extractValue324($rt_nullCheck(oadm_Square62_access$100833()), $rt_cls(oadm_MinesModel$SquareType45), c);
126.12512 +            oadm_Square62_setState88($rt_nullCheck(a), b);
126.12513 +            return;
126.12514 +        }
126.12515 +        b = jl_Boolean327_booleanValue409($rt_nullCheck(oahjs_Proto$Type36_extractValue324($rt_nullCheck(oadm_Square62_access$100833()), $rt_cls(jl_Boolean327), c)));
126.12516 +        oadm_Square62_setMine72($rt_nullCheck(a), b);
126.12517 +        return;
126.12518 +    }
126.12519 +    return;
126.12520 +}
126.12521 +oadm_Square$Html4JavaType795.$init804 = function() {
126.12522 +    var result = new oadm_Square$Html4JavaType795();
126.12523 +    result.$init804();
126.12524 +    return result;
126.12525 +}
126.12526 +oadm_Square$Html4JavaType795.$init825 = function(a) {
126.12527 +    var result = new oadm_Square$Html4JavaType795();
126.12528 +    result.$init825(a);
126.12529 +    return result;
126.12530 +}
126.12531 +$rt_virtualMethods(oadm_Square$Html4JavaType795,
126.12532 +    "call359", function(a, b, c, d) { oadm_Square$Html4JavaType795_call359(this, a, b, c, d); },
126.12533 +    "call826", function(a, b, c, d) { oadm_Square$Html4JavaType795_call826(this, a, b, c, d); },
126.12534 +    "setValue37", function(a, b, c) { oadm_Square$Html4JavaType795_setValue37(this, a, b, c); },
126.12535 +    "onChange828", function(a, b) { oadm_Square$Html4JavaType795_onChange828(this, a, b); },
126.12536 +    "getValue829", function(a, b) { return oadm_Square$Html4JavaType795_getValue829(this, a, b); },
126.12537 +    "protoFor370", function(a) { return oadm_Square$Html4JavaType795_protoFor370(this, a); },
126.12538 +    "onChange372", function(a, b) { oadm_Square$Html4JavaType795_onChange372(this, a, b); },
126.12539 +    "getValue39", function(a, b) { return oadm_Square$Html4JavaType795_getValue39(this, a, b); },
126.12540 +    "$init804", function() { oadm_Square$Html4JavaType795_$init804(this); },
126.12541 +    "setValue827", function(a, b, c) { oadm_Square$Html4JavaType795_setValue827(this, a, b, c); },
126.12542 +    "$init825", function(a) { oadm_Square$Html4JavaType795_$init825(this, a); });
126.12543 +function ju_HashMap394() {
126.12544 +    this.elementData834 = null;
126.12545 +    this.elementCount835 = 0;
126.12546 +    this.loadFactor836 = 0.0;
126.12547 +    this.modCount837 = 0;
126.12548 +    this.threshold838 = 0;
126.12549 +}
126.12550 +$rt_declClass(ju_HashMap394, {
126.12551 +    name : "java.util.HashMap",
126.12552 +    interfaces : [ji_Serializable164],
126.12553 +    superclass : ju_AbstractMap305,
126.12554 +    clinit : function() { ju_HashMap394_$clinit(); } });
126.12555 +function ju_HashMap394_$clinit() {
126.12556 +    ju_HashMap394_$clinit = function(){};
126.12557 +    ju_HashMap394_$init839 = function($this, a) {
126.12558 +        ju_HashMap394_$init840($this, a, 0.75);
126.12559 +        return;
126.12560 +    }
126.12561 +    ju_HashMap394_areEqualKeys841 = function(a, b) {
126.12562 +        if (((a !== b) && ($rt_nullCheck(a).equals13(b) == 0))) {
126.12563 +            a = 0;
126.12564 +        } else {
126.12565 +            a = 1;
126.12566 +        }
126.12567 +        return a;
126.12568 +    }
126.12569 +    ju_HashMap394_calculateCapacity842 = function(a) {
126.12570 +        if ((a < 1073741824)) {
126.12571 +            if ((a != 0)) {
126.12572 +                a = ((a - 1) | 0);
126.12573 +                a = (a | (a >> 1));
126.12574 +                a = (a | (a >> 2));
126.12575 +                a = (a | (a >> 4));
126.12576 +                a = (a | (a >> 8));
126.12577 +                return (((a | (a >> 16)) + 1) | 0);
126.12578 +            }
126.12579 +            return 16;
126.12580 +        }
126.12581 +        return 1073741824;
126.12582 +    }
126.12583 +    ju_HashMap394_$init412 = function($this) {
126.12584 +        ju_HashMap394_$init839($this, 16);
126.12585 +        return;
126.12586 +    }
126.12587 +    ju_HashMap394_$init840 = function($this, a, b) {
126.12588 +        ju_AbstractMap305_$init306($this);
126.12589 +        $this.modCount837 = 0;
126.12590 +        if ((!((a >= 0) && (b > 0.0)))) {
126.12591 +            $rt_throw(jl_IllegalArgumentException134.$init135());
126.12592 +        }
126.12593 +        a = ju_HashMap394_calculateCapacity842(a);
126.12594 +        $this.elementCount835 = 0;
126.12595 +        $this.elementData834 = ju_HashMap394_newElementArray843($rt_nullCheck($this), a);
126.12596 +        $this.loadFactor836 = b;
126.12597 +        ju_HashMap394_computeThreshold844($this);
126.12598 +        return;
126.12599 +    }
126.12600 +    ju_HashMap394_computeHashCode845 = function(a) {
126.12601 +        return $rt_nullCheck(a).hashCode14();
126.12602 +    }
126.12603 +}
126.12604 +$rt_methodStubs(ju_HashMap394_$clinit, ['ju_HashMap394_$init839', 'ju_HashMap394_areEqualKeys841', 'ju_HashMap394_calculateCapacity842', 'ju_HashMap394_$init412', 'ju_HashMap394_$init840', 'ju_HashMap394_computeHashCode845']);
126.12605 +function ju_HashMap394_rehash846($this, a) {
126.12606 +    var b, c, d, e, f, g;
126.12607 +    if ((a != 0)) {
126.12608 +        a = (a << 1);
126.12609 +    } else {
126.12610 +        a = 1;
126.12611 +    }
126.12612 +    a = ju_HashMap394_calculateCapacity842(a);
126.12613 +    b = ju_HashMap394_newElementArray843($rt_nullCheck($this), a);
126.12614 +    c = 0;
126.12615 +    while ((c < $this.elementData834.data.length)) {
126.12616 +        d = $this.elementData834.data[c];
126.12617 +        e = $this.elementData834;
126.12618 +        f = null;
126.12619 +        e.data[c] = f;
126.12620 +        while ((d !== null)) {
126.12621 +            f = (d.origKeyHash556 & ((a - 1) | 0));
126.12622 +            e = d.next555;
126.12623 +            g = b.data;
126.12624 +            d.next555 = g[f];
126.12625 +            g[f] = d;
126.12626 +            d = e;
126.12627 +        }
126.12628 +        c = ((c + 1) | 0);
126.12629 +    }
126.12630 +    $this.elementData834 = b;
126.12631 +    ju_HashMap394_computeThreshold844($this);
126.12632 +    return;
126.12633 +}
126.12634 +function ju_HashMap394_putImpl847($this, a, b) {
126.12635 +    var c, d, e, f;
126.12636 +    if ((a !== null)) {
126.12637 +        c = ju_HashMap394_computeHashCode845(a);
126.12638 +        d = (c & (($this.elementData834.data.length - 1) | 0));
126.12639 +        e = $rt_nullCheck($this);
126.12640 +        f = ju_HashMap394_findNonNullKeyEntry848(e, a, d, c);
126.12641 +        if ((f === null)) {
126.12642 +            $this.modCount837 = (($this.modCount837 + 1) | 0);
126.12643 +            f = ju_HashMap394_createHashedEntry849(e, a, d, c);
126.12644 +            a = (($this.elementCount835 + 1) | 0);
126.12645 +            $this.elementCount835 = a;
126.12646 +            if ((a > $this.threshold838)) {
126.12647 +                ju_HashMap394_rehash850(e);
126.12648 +            }
126.12649 +        }
126.12650 +    } else {
126.12651 +        e = $rt_nullCheck($this);
126.12652 +        f = ju_HashMap394_findNullKeyEntry851(e);
126.12653 +        if ((f === null)) {
126.12654 +            $this.modCount837 = (($this.modCount837 + 1) | 0);
126.12655 +            f = ju_HashMap394_createHashedEntry849(e, null, 0, 0);
126.12656 +            d = (($this.elementCount835 + 1) | 0);
126.12657 +            $this.elementCount835 = d;
126.12658 +            if ((d > $this.threshold838)) {
126.12659 +                ju_HashMap394_rehash850(e);
126.12660 +            }
126.12661 +        }
126.12662 +    }
126.12663 +    a = f.value264;
126.12664 +    f.value264 = b;
126.12665 +    return a;
126.12666 +}
126.12667 +function ju_HashMap394_put397($this, a, b) {
126.12668 +    return ju_HashMap394_putImpl847($rt_nullCheck($this), a, b);
126.12669 +}
126.12670 +function ju_HashMap394_createHashedEntry849($this, a, b, c) {
126.12671 +    var d;
126.12672 +    d = ju_HashMap$Entry554.$init557(a, c);
126.12673 +    d.next555 = $this.elementData834.data[b];
126.12674 +    $this.elementData834.data[b] = d;
126.12675 +    return d;
126.12676 +}
126.12677 +function ju_HashMap394_newElementArray843($this, a) {
126.12678 +    return $rt_createArray(ju_HashMap$Entry554, a);
126.12679 +}
126.12680 +function ju_HashMap394_computeThreshold844($this) {
126.12681 +    $this.threshold838 = (($this.elementData834.data.length * $this.loadFactor836) | 0);
126.12682 +    return;
126.12683 +}
126.12684 +function ju_HashMap394_get395($this, a) {
126.12685 +    a = ju_HashMap394_getEntry852($rt_nullCheck($this), a);
126.12686 +    if ((a === null)) {
126.12687 +        return null;
126.12688 +    }
126.12689 +    return a.value264;
126.12690 +}
126.12691 +function ju_HashMap394_rehash850($this) {
126.12692 +    var a;
126.12693 +    a = $this.elementData834.data.length;
126.12694 +    ju_HashMap394_rehash846($rt_nullCheck($this), a);
126.12695 +    return;
126.12696 +}
126.12697 +function ju_HashMap394_findNullKeyEntry851($this) {
126.12698 +    var a, b;
126.12699 +    a = $this.elementData834;
126.12700 +    b = 0;
126.12701 +    a = a.data[b];
126.12702 +    while (((a !== null) && (a.key265 !== null))) {
126.12703 +        a = a.next555;
126.12704 +    }
126.12705 +    return a;
126.12706 +}
126.12707 +function ju_HashMap394_getEntry852($this, a) {
126.12708 +    var b;
126.12709 +    if ((a !== null)) {
126.12710 +        b = ju_HashMap394_computeHashCode845(a);
126.12711 +        a = ju_HashMap394_findNonNullKeyEntry848($rt_nullCheck($this), a, (b & (($this.elementData834.data.length - 1) | 0)), b);
126.12712 +    } else {
126.12713 +        a = ju_HashMap394_findNullKeyEntry851($rt_nullCheck($this));
126.12714 +    }
126.12715 +    return a;
126.12716 +}
126.12717 +function ju_HashMap394_findNonNullKeyEntry848($this, a, b, c) {
126.12718 +    b = $this.elementData834.data[b];
126.12719 +    while (((b !== null) && (!((b.origKeyHash556 == c) && (ju_HashMap394_areEqualKeys841(a, b.key265) != 0))))) {
126.12720 +        b = b.next555;
126.12721 +    }
126.12722 +    return b;
126.12723 +}
126.12724 +ju_HashMap394.$init839 = function(a) {
126.12725 +    var result = new ju_HashMap394();
126.12726 +    result.$init839(a);
126.12727 +    return result;
126.12728 +}
126.12729 +ju_HashMap394.$init412 = function() {
126.12730 +    var result = new ju_HashMap394();
126.12731 +    result.$init412();
126.12732 +    return result;
126.12733 +}
126.12734 +ju_HashMap394.$init840 = function(a, b) {
126.12735 +    var result = new ju_HashMap394();
126.12736 +    result.$init840(a, b);
126.12737 +    return result;
126.12738 +}
126.12739 +$rt_virtualMethods(ju_HashMap394,
126.12740 +    "$init839", function(a) { ju_HashMap394_$init839(this, a); },
126.12741 +    "rehash846", function(a) { ju_HashMap394_rehash846(this, a); },
126.12742 +    "putImpl847", function(a, b) { return ju_HashMap394_putImpl847(this, a, b); },
126.12743 +    "put397", function(a, b) { return ju_HashMap394_put397(this, a, b); },
126.12744 +    "createHashedEntry849", function(a, b, c) { return ju_HashMap394_createHashedEntry849(this, a, b, c); },
126.12745 +    "newElementArray843", function(a) { return ju_HashMap394_newElementArray843(this, a); },
126.12746 +    "computeThreshold844", function() { ju_HashMap394_computeThreshold844(this); },
126.12747 +    "get395", function(a) { return ju_HashMap394_get395(this, a); },
126.12748 +    "rehash850", function() { ju_HashMap394_rehash850(this); },
126.12749 +    "findNullKeyEntry851", function() { return ju_HashMap394_findNullKeyEntry851(this); },
126.12750 +    "getEntry852", function(a) { return ju_HashMap394_getEntry852(this, a); },
126.12751 +    "$init412", function() { ju_HashMap394_$init412(this); },
126.12752 +    "$init840", function(a, b) { ju_HashMap394_$init840(this, a, b); },
126.12753 +    "findNonNullKeyEntry848", function(a, b, c) { return ju_HashMap394_findNonNullKeyEntry848(this, a, b, c); });
126.12754 +function onhk_FXContext636() {
126.12755 +    this.browserContext853 = null;
126.12756 +}
126.12757 +onhk_FXContext636.javaScriptEnabled854 = null;
126.12758 +onhk_FXContext636.LOG855 = null;
126.12759 +$rt_declClass(onhk_FXContext636, {
126.12760 +    name : "org.netbeans.html.ko4j.FXContext",
126.12761 +    interfaces : [oahjs_Transfer639, oahjs_WSTransfer650, oahjs_Technology$BatchInit226],
126.12762 +    superclass : jl_Object7,
126.12763 +    clinit : function() { onhk_FXContext636_$clinit(); } });
126.12764 +function onhk_FXContext636_$clinit() {
126.12765 +    onhk_FXContext636_$clinit = function(){};
126.12766 +    onhk_FXContext636_$clinit856 = function() {
126.12767 +        onhk_FXContext636.LOG855 = jul_Logger681_getLogger682(jl_Class0_getName20($rt_nullCheck($rt_cls(onhk_FXContext636))));
126.12768 +        return;
126.12769 +    }
126.12770 +    onhk_FXContext636_isWebSocket857 = function() {
126.12771 +        var result = (function() {
126.12772 +            if (window.WebSocket) return true; else return false;
126.12773 +        }).call(null);
126.12774 +        return oth_JavaScriptConv573_fromJavaScript575(result, $rt_booleancls());
126.12775 +    }
126.12776 +    onhk_FXContext636_isJavaScriptEnabled812 = function() {
126.12777 +        var a, b;
126.12778 +        if ((onhk_FXContext636.javaScriptEnabled854 === null)) {
126.12779 +            block2: {
126.12780 +                block3: {
126.12781 +                    a = jl_Boolean327_valueOf363(onhk_FXContext636_isJavaScriptEnabledJs858());
126.12782 +                    onhk_FXContext636.javaScriptEnabled854 = a;
126.12783 +                    if ((jl_Boolean327_booleanValue409($rt_nullCheck(a)) == 0)) {
126.12784 +                        a = oahbs_Fn466_activate472(onhk_FXContext$TrueFn794.$init807(null));
126.12785 +                        try {
126.12786 +                            onhk_FXContext636.javaScriptEnabled854 = jl_Boolean327_valueOf363(onhk_FXContext636_isJavaScriptEnabledJs858());
126.12787 +                        } catch ($e) {
126.12788 +                            $je = $e.$javaException;
126.12789 +                            if ($je) {
126.12790 +                                b = $je;
126.12791 +                                break block2;
126.12792 +                            } else {
126.12793 +                                throw $e;
126.12794 +                            }
126.12795 +                        }
126.12796 +                        block4: {
126.12797 +                            try {
126.12798 +                                onhbi_FnContext473_close661($rt_nullCheck(a));
126.12799 +                            } catch ($e) {
126.12800 +                                $je = $e.$javaException;
126.12801 +                                if ($je && $je instanceof ji_IOException538) {
126.12802 +                                    a = $je;
126.12803 +                                    break block4;
126.12804 +                                } else {
126.12805 +                                    throw $e;
126.12806 +                                }
126.12807 +                            }
126.12808 +                            break block3;
126.12809 +                        }
126.12810 +                    }
126.12811 +                }
126.12812 +                return jl_Boolean327_booleanValue409($rt_nullCheck(onhk_FXContext636.javaScriptEnabled854));
126.12813 +            }
126.12814 +            block5: {
126.12815 +                block6: {
126.12816 +                    try {
126.12817 +                        onhbi_FnContext473_close661($rt_nullCheck(a));
126.12818 +                    } catch ($e) {
126.12819 +                        $je = $e.$javaException;
126.12820 +                        if ($je && $je instanceof ji_IOException538) {
126.12821 +                            a = $je;
126.12822 +                            break block6;
126.12823 +                        } else {
126.12824 +                            throw $e;
126.12825 +                        }
126.12826 +                    }
126.12827 +                    break block5;
126.12828 +                }
126.12829 +            }
126.12830 +            $rt_throw(b);
126.12831 +        }
126.12832 +        return jl_Boolean327_booleanValue409($rt_nullCheck(onhk_FXContext636.javaScriptEnabled854));
126.12833 +    }
126.12834 +    onhk_FXContext636_$init818 = function($this, a) {
126.12835 +        jl_Object7_$init10($this);
126.12836 +        $this.browserContext853 = a;
126.12837 +        return;
126.12838 +    }
126.12839 +    onhk_FXContext636_access$100660 = function(a) {
126.12840 +        return a.browserContext853;
126.12841 +    }
126.12842 +    onhk_FXContext636_isJavaScriptEnabledJs858 = function() {
126.12843 +        var result = (function() {
126.12844 +            if (window) return true; else return false;
126.12845 +        }).call(null);
126.12846 +        return oth_JavaScriptConv573_fromJavaScript575(result, $rt_booleancls());
126.12847 +    }
126.12848 +    onhk_FXContext636_$clinit856();
126.12849 +}
126.12850 +$rt_methodStubs(onhk_FXContext636_$clinit, ['onhk_FXContext636_$clinit856', 'onhk_FXContext636_isWebSocket857', 'onhk_FXContext636_isJavaScriptEnabled812', 'onhk_FXContext636_$init818', 'onhk_FXContext636_access$100660', 'onhk_FXContext636_isJavaScriptEnabledJs858']);
126.12851 +function onhk_FXContext636_areWebSocketsSupported815($this) {
126.12852 +    return onhk_FXContext636_isWebSocket857();
126.12853 +}
126.12854 +function onhk_FXContext636_wrapArray632($this, a) {
126.12855 +    return a;
126.12856 +}
126.12857 +function onhk_FXContext636_wrapModel637($this, a, b, c) {
126.12858 +    var d, e, f, g, h, i, j;
126.12859 +    d = b.data;
126.12860 +    e = d.length;
126.12861 +    f = $rt_createArray(jl_String3, e);
126.12862 +    g = $rt_createBooleanArray(e);
126.12863 +    h = $rt_createArray(jl_Object7, e);
126.12864 +    i = 0;
126.12865 +    while (true) {
126.12866 +        j = f.data;
126.12867 +        if ((i >= j.length)) {
126.12868 +            break;
126.12869 +        }
126.12870 +        j[i] = oahjs_PropertyBinding$Impl26_getPropertyName42($rt_nullCheck(d[i]));
126.12871 +        e = oahjs_PropertyBinding$Impl26_isReadOnly34($rt_nullCheck(d[i]));
126.12872 +        g.data[i] = e;
126.12873 +        e = oahjs_PropertyBinding$Impl26_getValue38($rt_nullCheck(d[i]));
126.12874 +        h.data[i] = e;
126.12875 +        i = ((i + 1) | 0);
126.12876 +    }
126.12877 +    e = c.data;
126.12878 +    d = $rt_createArray(jl_String3, e.length);
126.12879 +    i = 0;
126.12880 +    while (true) {
126.12881 +        j = d.data;
126.12882 +        if ((i >= j.length)) {
126.12883 +            break;
126.12884 +        }
126.12885 +        j[i] = oahjs_FunctionBinding$Impl522_getFunctionName859($rt_nullCheck(e[i]));
126.12886 +        i = ((i + 1) | 0);
126.12887 +    }
126.12888 +    return onhk_Knockout571_wrapModel572(a, f, g, h, b, d, c);
126.12889 +}
126.12890 +function onhk_FXContext636_runSafe392($this, a) {
126.12891 +    var b;
126.12892 +    b = onhk_FXContext$1Wrap656.$init659($this, a);
126.12893 +    if (($rt_isInstance($this.browserContext853, juc_Executor640) == 0)) {
126.12894 +        onhk_FXContext$1Wrap656_run381($rt_nullCheck(b));
126.12895 +    } else {
126.12896 +        $rt_nullCheck($this.browserContext853).execute860(b);
126.12897 +    }
126.12898 +    return;
126.12899 +}
126.12900 +function onhk_FXContext636_wrapModel633($this, a) {
126.12901 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12902 +}
126.12903 +function onhk_FXContext636_bind634($this, a, b, c) {
126.12904 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12905 +}
126.12906 +function onhk_FXContext636_expose635($this, a, b, c) {
126.12907 +    $rt_throw(jl_UnsupportedOperationException222.$init223());
126.12908 +}
126.12909 +function onhk_FXContext636_valueHasMutated631($this, a, b) {
126.12910 +    onhk_Knockout571_valueHasMutated580(a, b);
126.12911 +    return;
126.12912 +}
126.12913 +function onhk_FXContext636_applyBindings638($this, a) {
126.12914 +    onhk_Knockout571_applyBindings579(a);
126.12915 +    return;
126.12916 +}
126.12917 +function onhk_FXContext636_toModel389($this, a, b) {
126.12918 +    return jl_Class0_cast346($rt_nullCheck(a), onhk_Knockout571_toModel577(b));
126.12919 +}
126.12920 +onhk_FXContext636.$init818 = function(a) {
126.12921 +    var result = new onhk_FXContext636();
126.12922 +    result.$init818(a);
126.12923 +    return result;
126.12924 +}
126.12925 +$rt_virtualMethods(onhk_FXContext636,
126.12926 +    "areWebSocketsSupported815", function() { return onhk_FXContext636_areWebSocketsSupported815(this); },
126.12927 +    "$init818", function(a) { onhk_FXContext636_$init818(this, a); },
126.12928 +    "wrapArray632", function(a) { return onhk_FXContext636_wrapArray632(this, a); },
126.12929 +    "wrapModel637", function(a, b, c) { return onhk_FXContext636_wrapModel637(this, a, b, c); },
126.12930 +    "runSafe392", function(a) { onhk_FXContext636_runSafe392(this, a); },
126.12931 +    "wrapModel633", function(a) { return onhk_FXContext636_wrapModel633(this, a); },
126.12932 +    "bind634", function(a, b, c) { onhk_FXContext636_bind634(this, a, b, c); },
126.12933 +    "expose635", function(a, b, c) { onhk_FXContext636_expose635(this, a, b, c); },
126.12934 +    "valueHasMutated631", function(a, b) { onhk_FXContext636_valueHasMutated631(this, a, b); },
126.12935 +    "applyBindings638", function(a) { onhk_FXContext636_applyBindings638(this, a); },
126.12936 +    "toModel389", function(a, b) { return onhk_FXContext636_toModel389(this, a, b); });
126.12937 +function jl_ClassNotFoundException796() {
126.12938 +}
126.12939 +$rt_declClass(jl_ClassNotFoundException796, {
126.12940 +    name : "java.lang.ClassNotFoundException",
126.12941 +    superclass : jl_ReflectiveOperationException493,
126.12942 +    clinit : function() { jl_ClassNotFoundException796_$clinit(); } });
126.12943 +function jl_ClassNotFoundException796_$clinit() {
126.12944 +    jl_ClassNotFoundException796_$clinit = function(){};
126.12945 +    jl_ClassNotFoundException796_$init800 = function($this) {
126.12946 +        jl_ReflectiveOperationException493_$init494($this);
126.12947 +        return;
126.12948 +    }
126.12949 +}
126.12950 +$rt_methodStubs(jl_ClassNotFoundException796_$clinit, ['jl_ClassNotFoundException796_$init800']);
126.12951 +jl_ClassNotFoundException796.$init800 = function() {
126.12952 +    var result = new jl_ClassNotFoundException796();
126.12953 +    result.$init800();
126.12954 +    return result;
126.12955 +}
126.12956 +$rt_virtualMethods(jl_ClassNotFoundException796,
126.12957 +    "$init800", function() { jl_ClassNotFoundException796_$init800(this); });
126.12958 +function jl_Integer81() {
126.12959 +    this.value861 = 0;
126.12960 +}
126.12961 +jl_Integer81.integerCache862 = null;
126.12962 +jl_Integer81.TYPE863 = null;
126.12963 +$rt_declClass(jl_Integer81, {
126.12964 +    name : "java.lang.Integer",
126.12965 +    interfaces : [jl_Comparable163],
126.12966 +    superclass : jl_Number325,
126.12967 +    clinit : function() { jl_Integer81_$clinit(); } });
126.12968 +function jl_Integer81_$clinit() {
126.12969 +    jl_Integer81_$clinit = function(){};
126.12970 +    jl_Integer81_ensureIntegerCache864 = function() {
126.12971 +        var a;
126.12972 +        if ((jl_Integer81.integerCache862 === null)) {
126.12973 +            jl_Integer81.integerCache862 = $rt_createArray(jl_Integer81, 256);
126.12974 +            a = 0;
126.12975 +            while ((a < jl_Integer81.integerCache862.data.length)) {
126.12976 +                jl_Integer81.integerCache862.data[a] = jl_Integer81.$init865(((a - 128) | 0));
126.12977 +                a = ((a + 1) | 0);
126.12978 +            }
126.12979 +        }
126.12980 +        return;
126.12981 +    }
126.12982 +    jl_Integer81_$init865 = function($this, a) {
126.12983 +        jl_Number325_$init423($this);
126.12984 +        $this.value861 = a;
126.12985 +        return;
126.12986 +    }
126.12987 +    jl_Integer81_parseInt704 = function(a) {
126.12988 +        return jl_Integer81_parseInt866(a, 10);
126.12989 +    }
126.12990 +    jl_Integer81_$clinit867 = function() {
126.12991 +        jl_Integer81.TYPE863 = $rt_cls($rt_intcls());
126.12992 +        return;
126.12993 +    }
126.12994 +    jl_Integer81_valueOf82 = function(a) {
126.12995 +        if ((!((a >= -128) && (a <= 127)))) {
126.12996 +            return jl_Integer81.$init865(a);
126.12997 +        }
126.12998 +        jl_Integer81_ensureIntegerCache864();
126.12999 +        return jl_Integer81.integerCache862.data[((a + 128) | 0)];
126.13000 +    }
126.13001 +    jl_Integer81_compare613 = function(a, b) {
126.13002 +        a = $rt_compare(a, b);
126.13003 +        if ((a <= 0)) {
126.13004 +            if ((a >= 0)) {
126.13005 +                a = 0;
126.13006 +            } else {
126.13007 +                a = -1;
126.13008 +            }
126.13009 +        } else {
126.13010 +            a = 1;
126.13011 +        }
126.13012 +        return a;
126.13013 +    }
126.13014 +    jl_Integer81_parseInt866 = function(a, b) {
126.13015 +        var c, d, e, f, g;
126.13016 +        if (((b >= 2) && (b <= 36))) {
126.13017 +            if ((a !== null)) {
126.13018 +                c = $rt_nullCheck(a);
126.13019 +                if ((jl_String3_isEmpty184(c) == 0)) {
126.13020 +                    block3: {
126.13021 +                        block4: {
126.13022 +                            block5: {
126.13023 +                                d = 0;
126.13024 +                                e = 0;
126.13025 +                                switch (jl_String3_charAt176(c, 0)) {
126.13026 +                                    case 43:
126.13027 +                                        break;
126.13028 +                                    case 45:
126.13029 +                                        break block5;
126.13030 +                                    default:
126.13031 +                                        break block4;
126.13032 +                                }
126.13033 +                                e = 1;
126.13034 +                                break block3;
126.13035 +                            }
126.13036 +                            d = 1;
126.13037 +                            e = 1;
126.13038 +                            break block3;
126.13039 +                        }
126.13040 +                    }
126.13041 +                    f = 0;
126.13042 +                    block6: {
126.13043 +                        block7: {
126.13044 +                            block8: {
126.13045 +                                while (true) {
126.13046 +                                    if ((e >= jl_String3_length5(c))) {
126.13047 +                                        break block6;
126.13048 +                                    }
126.13049 +                                    g = ((e + 1) | 0);
126.13050 +                                    e = jl_Character187_getNumericValue258(jl_String3_charAt176(c, e));
126.13051 +                                    if ((e < 0)) {
126.13052 +                                        break block7;
126.13053 +                                    }
126.13054 +                                    if ((e >= b)) {
126.13055 +                                        break block8;
126.13056 +                                    }
126.13057 +                                    f = ((((b * f) | 0) + e) | 0);
126.13058 +                                    if ((f < 0)) {
126.13059 +                                        break;
126.13060 +                                    }
126.13061 +                                    e = g;
126.13062 +                                }
126.13063 +                                if ((!((g == jl_String3_length5(c)) && ((f == -2147483648) && (d != 0))))) {
126.13064 +                                    $rt_throw(jl_NumberFormatException137.$init139(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append705($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("The value is too big for int type: "))), a)))));
126.13065 +                                }
126.13066 +                                return -2147483648;
126.13067 +                            }
126.13068 +                            $rt_throw(jl_NumberFormatException137.$init139(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append705($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16_append18($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("String contains digits out of radix "))), b)), $rt_str(": "))), a)))));
126.13069 +                        }
126.13070 +                        $rt_throw(jl_NumberFormatException137.$init139(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append705($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("String contains invalid digits: "))), a)))));
126.13071 +                    }
126.13072 +                    if ((d != 0)) {
126.13073 +                        f = ((-f) | 0);
126.13074 +                    }
126.13075 +                    return f;
126.13076 +                }
126.13077 +            }
126.13078 +            $rt_throw(jl_NumberFormatException137.$init139($rt_str("String is null or empty")));
126.13079 +        }
126.13080 +        $rt_throw(jl_NumberFormatException137.$init139(jl_StringBuilder16_toString15($rt_nullCheck(jl_StringBuilder16_append18($rt_nullCheck(jl_StringBuilder16_append19($rt_nullCheck(jl_StringBuilder16.$init17()), $rt_str("Illegal radix: "))), b)))));
126.13081 +    }
126.13082 +    jl_Integer81_$clinit867();
126.13083 +}
126.13084 +$rt_methodStubs(jl_Integer81_$clinit, ['jl_Integer81_ensureIntegerCache864', 'jl_Integer81_$init865', 'jl_Integer81_parseInt704', 'jl_Integer81_$clinit867', 'jl_Integer81_valueOf82', 'jl_Integer81_compare613', 'jl_Integer81_parseInt866']);
126.13085 +function jl_Integer81_intValue87($this) {
126.13086 +    return $this.value861;
126.13087 +}
126.13088 +function jl_Integer81_floatValue344($this) {
126.13089 +    return $this.value861;
126.13090 +}
126.13091 +function jl_Integer81_doubleValue341($this) {
126.13092 +    return $this.value861;
126.13093 +}
126.13094 +function jl_Integer81_longValue332($this) {
126.13095 +    return Long_fromInt($this.value861);
126.13096 +}
126.13097 +function jl_Integer81_compareTo868($this, a) {
126.13098 +    return jl_Integer81_compare613($this.value861, a.value861);
126.13099 +}
126.13100 +function jl_Integer81_compareTo181($this, a) {
126.13101 +    return jl_Integer81_compareTo868($rt_nullCheck($this), a);
126.13102 +}
126.13103 +jl_Integer81.$init865 = function(a) {
126.13104 +    var result = new jl_Integer81();
126.13105 +    result.$init865(a);
126.13106 +    return result;
126.13107 +}
126.13108 +$rt_virtualMethods(jl_Integer81,
126.13109 +    "$init865", function(a) { jl_Integer81_$init865(this, a); },
126.13110 +    "intValue87", function() { return jl_Integer81_intValue87(this); },
126.13111 +    "floatValue344", function() { return jl_Integer81_floatValue344(this); },
126.13112 +    "doubleValue341", function() { return jl_Integer81_doubleValue341(this); },
126.13113 +    "longValue332", function() { return jl_Integer81_longValue332(this); },
126.13114 +    "compareTo868", function(a) { return jl_Integer81_compareTo868(this, a); },
126.13115 +    "compareTo181", function(a) { return jl_Integer81_compareTo181(this, a); });
126.13116 +function onhci_CtxImpl665() {
126.13117 +    this.techs869 = null;
126.13118 +}
126.13119 +$rt_declClass(onhci_CtxImpl665, {
126.13120 +    name : "org.netbeans.html.context.impl.CtxImpl",
126.13121 +    superclass : jl_Object7,
126.13122 +    clinit : function() { onhci_CtxImpl665_$clinit(); } });
126.13123 +function onhci_CtxImpl665_$clinit() {
126.13124 +    onhci_CtxImpl665_$clinit = function(){};
126.13125 +    onhci_CtxImpl665_$init870 = function($this, a) {
126.13126 +        jl_Object7_$init10($this);
126.13127 +        $this.techs869 = a;
126.13128 +        return;
126.13129 +    }
126.13130 +    onhci_CtxImpl665_$init666 = function($this) {
126.13131 +        jl_Object7_$init10($this);
126.13132 +        $this.techs869 = ju_ArrayList54.$init80();
126.13133 +        return;
126.13134 +    }
126.13135 +    onhci_CtxImpl665_find790 = function(a, b) {
126.13136 +        var c, d;
126.13137 +        a = ju_AbstractList66_iterator107($rt_nullCheck(njh_BrwsrCtx$1603_find607($rt_nullCheck(onhci_CtxAccssr597_getDefault602()), a).techs869));
126.13138 +        block1: {
126.13139 +            while (true) {
126.13140 +                c = $rt_nullCheck(a);
126.13141 +                if ((ju_AbstractList$1108_hasNext109(c) == 0)) {
126.13142 +                    break block1;
126.13143 +                }
126.13144 +                d = ju_AbstractList$1108_next110(c);
126.13145 +                if ((b === onhci_CtxImpl$Bind270_access$000275(d))) {
126.13146 +                    break;
126.13147 +                }
126.13148 +            }
126.13149 +            return jl_Class0_cast346($rt_nullCheck(b), onhci_CtxImpl$Bind270_access$100276(d));
126.13150 +        }
126.13151 +        return null;
126.13152 +    }
126.13153 +}
126.13154 +$rt_methodStubs(onhci_CtxImpl665_$clinit, ['onhci_CtxImpl665_$init870', 'onhci_CtxImpl665_$init666', 'onhci_CtxImpl665_find790']);
126.13155 +function onhci_CtxImpl665_register669($this, a, b, c) {
126.13156 +    var d, e;
126.13157 +    d = $this.techs869;
126.13158 +    e = onhci_CtxImpl$Bind270.$init274(a, b, c);
126.13159 +    ju_AbstractList66_add67($rt_nullCheck(d), e);
126.13160 +    return;
126.13161 +}
126.13162 +function onhci_CtxImpl665_build667($this) {
126.13163 +    ju_Collections195_sort196($this.techs869);
126.13164 +    return njh_BrwsrCtx$1603_newContext605($rt_nullCheck(onhci_CtxAccssr597_getDefault602()), onhci_CtxImpl665.$init870(ju_Collections195_unmodifiableList200($this.techs869)));
126.13165 +}
126.13166 +onhci_CtxImpl665.$init870 = function(a) {
126.13167 +    var result = new onhci_CtxImpl665();
126.13168 +    result.$init870(a);
126.13169 +    return result;
126.13170 +}
126.13171 +onhci_CtxImpl665.$init666 = function() {
126.13172 +    var result = new onhci_CtxImpl665();
126.13173 +    result.$init666();
126.13174 +    return result;
126.13175 +}
126.13176 +$rt_virtualMethods(onhci_CtxImpl665,
126.13177 +    "$init870", function(a) { onhci_CtxImpl665_$init870(this, a); },
126.13178 +    "register669", function(a, b, c) { onhci_CtxImpl665_register669(this, a, b, c); },
126.13179 +    "$init666", function() { onhci_CtxImpl665_$init666(this); },
126.13180 +    "build667", function() { return onhci_CtxImpl665_build667(this); });
126.13181 +function oadm_Row56() {
126.13182 +    this.prop_columns871 = null;
126.13183 +    this.proto872 = null;
126.13184 +}
126.13185 +oadm_Row56.TYPE873 = null;
126.13186 +$rt_declClass(oadm_Row56, {
126.13187 +    name : "org.apidesign.demo.minesweeper.Row",
126.13188 +    interfaces : [jl_Cloneable262],
126.13189 +    superclass : jl_Object7,
126.13190 +    clinit : function() { oadm_Row56_$clinit(); } });
126.13191 +function oadm_Row56_$clinit() {
126.13192 +    oadm_Row56_$clinit = function(){};
126.13193 +    oadm_Row56_$clinit874 = function() {
126.13194 +        oadm_Row56.TYPE873 = oadm_Row$Html4JavaType708.$init710(null);
126.13195 +        return;
126.13196 +    }
126.13197 +    oadm_Row56_$init875 = function($this, a) {
126.13198 +        jl_Object7_$init10($this);
126.13199 +        $this.proto872 = oahjs_Proto$Type36_createProto349($rt_nullCheck(oadm_Row56.TYPE873), $this, a);
126.13200 +        $this.prop_columns871 = oahjs_Proto321_createList442($rt_nullCheck($this.proto872), $rt_str("columns"), -1, $rt_createArray(jl_String3, 0));
126.13201 +        return;
126.13202 +    }
126.13203 +    oadm_Row56_$init65 = function($this, a) {
126.13204 +        var b, c;
126.13205 +        oadm_Row56_$init875($this, njh_BrwsrCtx488_findDefault489($rt_cls(oadm_Row56)));
126.13206 +        b = $this.proto872;
126.13207 +        c = $this.prop_columns871;
126.13208 +        oahjs_Proto321_initTo457($rt_nullCheck(b), c, a);
126.13209 +        return;
126.13210 +    }
126.13211 +    oadm_Row56_$init805 = function($this) {
126.13212 +        oadm_Row56_$init875($this, njh_BrwsrCtx488_findDefault489($rt_cls(oadm_Row56)));
126.13213 +        return;
126.13214 +    }
126.13215 +    oadm_Row56_access$100714 = function(a) {
126.13216 +        return a.proto872;
126.13217 +    }
126.13218 +    oadm_Row56_$clinit874();
126.13219 +}
126.13220 +$rt_methodStubs(oadm_Row56_$clinit, ['oadm_Row56_$clinit874', 'oadm_Row56_$init875', 'oadm_Row56_$init65', 'oadm_Row56_$init805', 'oadm_Row56_access$100714']);
126.13221 +function oadm_Row56_getColumns57($this) {
126.13222 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto872));
126.13223 +    return $this.prop_columns871;
126.13224 +}
126.13225 +oadm_Row56.$init875 = function(a) {
126.13226 +    var result = new oadm_Row56();
126.13227 +    result.$init875(a);
126.13228 +    return result;
126.13229 +}
126.13230 +oadm_Row56.$init65 = function(a) {
126.13231 +    var result = new oadm_Row56();
126.13232 +    result.$init65(a);
126.13233 +    return result;
126.13234 +}
126.13235 +oadm_Row56.$init805 = function() {
126.13236 +    var result = new oadm_Row56();
126.13237 +    result.$init805();
126.13238 +    return result;
126.13239 +}
126.13240 +$rt_virtualMethods(oadm_Row56,
126.13241 +    "$init875", function(a) { oadm_Row56_$init875(this, a); },
126.13242 +    "$init65", function(a) { oadm_Row56_$init65(this, a); },
126.13243 +    "$init805", function() { oadm_Row56_$init805(this); },
126.13244 +    "getColumns57", function() { return oadm_Row56_getColumns57(this); });
126.13245 +function oahjs_FunctionBinding$Impl522() {
126.13246 +    this.index876 = 0;
126.13247 +    this.model877 = null;
126.13248 +    this.name878 = null;
126.13249 +    this.access879 = null;
126.13250 +}
126.13251 +$rt_declClass(oahjs_FunctionBinding$Impl522, {
126.13252 +    name : "org.apidesign.html.json.spi.FunctionBinding$Impl",
126.13253 +    superclass : oahjs_FunctionBinding448,
126.13254 +    clinit : function() { oahjs_FunctionBinding$Impl522_$clinit(); } });
126.13255 +function oahjs_FunctionBinding$Impl522_$clinit() {
126.13256 +    oahjs_FunctionBinding$Impl522_$clinit = function(){};
126.13257 +    oahjs_FunctionBinding$Impl522_$init523 = function($this, a, b, c, d) {
126.13258 +        oahjs_FunctionBinding448_$init521($this);
126.13259 +        $this.name878 = a;
126.13260 +        $this.index876 = b;
126.13261 +        $this.model877 = c;
126.13262 +        $this.access879 = d;
126.13263 +        return;
126.13264 +    }
126.13265 +}
126.13266 +$rt_methodStubs(oahjs_FunctionBinding$Impl522_$clinit, ['oahjs_FunctionBinding$Impl522_$init523']);
126.13267 +function oahjs_FunctionBinding$Impl522_call576($this, a, b) {
126.13268 +    var c, d, e, f;
126.13269 +    block1: {
126.13270 +        block2: {
126.13271 +            try {
126.13272 +                c = $this.access879;
126.13273 +                d = $this.model877;
126.13274 +                e = $this.index876;
126.13275 +                $rt_nullCheck(c).call359(d, e, a, b);
126.13276 +            } catch ($e) {
126.13277 +                $je = $e.$javaException;
126.13278 +                if ($je && $je instanceof jl_Throwable111) {
126.13279 +                    f = $je;
126.13280 +                    break block2;
126.13281 +                } else {
126.13282 +                    throw $e;
126.13283 +                }
126.13284 +            }
126.13285 +            break block1;
126.13286 +        }
126.13287 +        jl_Throwable111_printStackTrace124($rt_nullCheck(f));
126.13288 +    }
126.13289 +    return;
126.13290 +}
126.13291 +function oahjs_FunctionBinding$Impl522_getFunctionName859($this) {
126.13292 +    return $this.name878;
126.13293 +}
126.13294 +oahjs_FunctionBinding$Impl522.$init523 = function(a, b, c, d) {
126.13295 +    var result = new oahjs_FunctionBinding$Impl522();
126.13296 +    result.$init523(a, b, c, d);
126.13297 +    return result;
126.13298 +}
126.13299 +$rt_virtualMethods(oahjs_FunctionBinding$Impl522,
126.13300 +    "call576", function(a, b) { oahjs_FunctionBinding$Impl522_call576(this, a, b); },
126.13301 +    "getFunctionName859", function() { return oahjs_FunctionBinding$Impl522_getFunctionName859(this); },
126.13302 +    "$init523", function(a, b, c, d) { oahjs_FunctionBinding$Impl522_$init523(this, a, b, c, d); });
126.13303 +function jl_StringBuilder16() {
126.13304 +}
126.13305 +$rt_declClass(jl_StringBuilder16, {
126.13306 +    name : "java.lang.StringBuilder",
126.13307 +    interfaces : [jl_Appendable731],
126.13308 +    superclass : jl_AbstractStringBuilder741,
126.13309 +    clinit : function() { jl_StringBuilder16_$clinit(); } });
126.13310 +function jl_StringBuilder16_$clinit() {
126.13311 +    jl_StringBuilder16_$clinit = function(){};
126.13312 +    jl_StringBuilder16_$init17 = function($this) {
126.13313 +        jl_AbstractStringBuilder741_$init755($this);
126.13314 +        return;
126.13315 +    }
126.13316 +}
126.13317 +$rt_methodStubs(jl_StringBuilder16_$clinit, ['jl_StringBuilder16_$init17']);
126.13318 +function jl_StringBuilder16_append19($this, a) {
126.13319 +    jl_AbstractStringBuilder741_append767($this, a);
126.13320 +    return $this;
126.13321 +}
126.13322 +function jl_StringBuilder16_length5($this) {
126.13323 +    return jl_AbstractStringBuilder741_length5($this);
126.13324 +}
126.13325 +function jl_StringBuilder16_insert880($this, a, b) {
126.13326 +    jl_AbstractStringBuilder741_insert758($this, a, b);
126.13327 +    return $this;
126.13328 +}
126.13329 +function jl_StringBuilder16_insert758($this, a, b) {
126.13330 +    return jl_StringBuilder16_insert880($rt_nullCheck($this), a, b);
126.13331 +}
126.13332 +function jl_StringBuilder16_append428($this, a) {
126.13333 +    jl_AbstractStringBuilder741_append759($this, a);
126.13334 +    return $this;
126.13335 +}
126.13336 +function jl_StringBuilder16_append725($this, a) {
126.13337 +    jl_AbstractStringBuilder741_append762($this, a);
126.13338 +    return $this;
126.13339 +}
126.13340 +function jl_StringBuilder16_toString15($this) {
126.13341 +    return jl_AbstractStringBuilder741_toString15($this);
126.13342 +}
126.13343 +function jl_StringBuilder16_append705($this, a) {
126.13344 +    jl_AbstractStringBuilder741_append766($this, a);
126.13345 +    return $this;
126.13346 +}
126.13347 +function jl_StringBuilder16_append18($this, a) {
126.13348 +    jl_AbstractStringBuilder741_append760($this, a);
126.13349 +    return $this;
126.13350 +}
126.13351 +function jl_StringBuilder16_append785($this, a) {
126.13352 +    jl_AbstractStringBuilder741_append763($this, a);
126.13353 +    return $this;
126.13354 +}
126.13355 +function jl_StringBuilder16_append537($this, a) {
126.13356 +    jl_AbstractStringBuilder741_append757($this, a);
126.13357 +    return $this;
126.13358 +}
126.13359 +function jl_StringBuilder16_setLength728($this, a) {
126.13360 +    jl_AbstractStringBuilder741_setLength728($this, a);
126.13361 +    return;
126.13362 +}
126.13363 +function jl_StringBuilder16_append767($this, a) {
126.13364 +    return jl_StringBuilder16_append19($rt_nullCheck($this), a);
126.13365 +}
126.13366 +function jl_StringBuilder16_getChars6($this, a, b, c, d) {
126.13367 +    jl_AbstractStringBuilder741_getChars6($this, a, b, c, d);
126.13368 +    return;
126.13369 +}
126.13370 +jl_StringBuilder16.$init17 = function() {
126.13371 +    var result = new jl_StringBuilder16();
126.13372 +    result.$init17();
126.13373 +    return result;
126.13374 +}
126.13375 +$rt_virtualMethods(jl_StringBuilder16,
126.13376 +    "append19", function(a) { return jl_StringBuilder16_append19(this, a); },
126.13377 +    "length5", function() { return jl_StringBuilder16_length5(this); },
126.13378 +    "insert880", function(a, b) { return jl_StringBuilder16_insert880(this, a, b); },
126.13379 +    "insert758", function(a, b) { return jl_StringBuilder16_insert758(this, a, b); },
126.13380 +    "append428", function(a) { return jl_StringBuilder16_append428(this, a); },
126.13381 +    "append725", function(a) { return jl_StringBuilder16_append725(this, a); },
126.13382 +    "toString15", function() { return jl_StringBuilder16_toString15(this); },
126.13383 +    "append705", function(a) { return jl_StringBuilder16_append705(this, a); },
126.13384 +    "append18", function(a) { return jl_StringBuilder16_append18(this, a); },
126.13385 +    "append785", function(a) { return jl_StringBuilder16_append785(this, a); },
126.13386 +    "append537", function(a) { return jl_StringBuilder16_append537(this, a); },
126.13387 +    "setLength728", function(a) { jl_StringBuilder16_setLength728(this, a); },
126.13388 +    "$init17", function() { jl_StringBuilder16_$init17(this); },
126.13389 +    "append767", function(a) { return jl_StringBuilder16_append767(this, a); },
126.13390 +    "getChars6", function(a, b, c, d) { jl_StringBuilder16_getChars6(this, a, b, c, d); });
126.13391 +function oadm_Square62() {
126.13392 +    this.prop_mine881 = false;
126.13393 +    this.prop_state882 = null;
126.13394 +    this.proto883 = null;
126.13395 +}
126.13396 +oadm_Square62.TYPE884 = null;
126.13397 +$rt_declClass(oadm_Square62, {
126.13398 +    name : "org.apidesign.demo.minesweeper.Square",
126.13399 +    interfaces : [jl_Cloneable262],
126.13400 +    superclass : jl_Object7,
126.13401 +    clinit : function() { oadm_Square62_$clinit(); } });
126.13402 +function oadm_Square62_$clinit() {
126.13403 +    oadm_Square62_$clinit = function(){};
126.13404 +    oadm_Square62_$clinit885 = function() {
126.13405 +        oadm_Square62.TYPE884 = oadm_Square$Html4JavaType795.$init825(null);
126.13406 +        return;
126.13407 +    }
126.13408 +    oadm_Square62_$init886 = function($this, a) {
126.13409 +        jl_Object7_$init10($this);
126.13410 +        $this.proto883 = oahjs_Proto$Type36_createProto349($rt_nullCheck(oadm_Square62.TYPE884), $this, a);
126.13411 +        return;
126.13412 +    }
126.13413 +    oadm_Square62_access$100833 = function() {
126.13414 +        return oadm_Square62.TYPE884;
126.13415 +    }
126.13416 +    oadm_Square62_$init806 = function($this) {
126.13417 +        oadm_Square62_$init886($this, njh_BrwsrCtx488_findDefault489($rt_cls(oadm_Square62)));
126.13418 +        return;
126.13419 +    }
126.13420 +    oadm_Square62_access$200832 = function(a) {
126.13421 +        return a.proto883;
126.13422 +    }
126.13423 +    oadm_Square62_$init63 = function($this, a, b) {
126.13424 +        oadm_Square62_$init886($this, njh_BrwsrCtx488_findDefault489($rt_cls(oadm_Square62)));
126.13425 +        $this.prop_state882 = a;
126.13426 +        $this.prop_mine881 = b;
126.13427 +        return;
126.13428 +    }
126.13429 +    oadm_Square62_$clinit885();
126.13430 +}
126.13431 +$rt_methodStubs(oadm_Square62_$clinit, ['oadm_Square62_$clinit885', 'oadm_Square62_$init886', 'oadm_Square62_access$100833', 'oadm_Square62_$init806', 'oadm_Square62_access$200832', 'oadm_Square62_$init63']);
126.13432 +function oadm_Square62_getState84($this) {
126.13433 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto883));
126.13434 +    return $this.prop_state882;
126.13435 +}
126.13436 +function oadm_Square62_getStyle831($this) {
126.13437 +    var a, b;
126.13438 +    a = oadm_Square62_getState84($rt_nullCheck($this));
126.13439 +    block1: {
126.13440 +        try {
126.13441 +            oahjs_Proto321_acquireLock451($rt_nullCheck($this.proto883));
126.13442 +            a = oadm_MinesModel$SquareModel687_style689(a);
126.13443 +        } catch ($e) {
126.13444 +            $je = $e.$javaException;
126.13445 +            if ($je) {
126.13446 +                b = $je;
126.13447 +                break block1;
126.13448 +            } else {
126.13449 +                throw $e;
126.13450 +            }
126.13451 +        }
126.13452 +        oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto883));
126.13453 +        return a;
126.13454 +    }
126.13455 +    oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto883));
126.13456 +    $rt_throw(b);
126.13457 +}
126.13458 +function oadm_Square62_isMine71($this) {
126.13459 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto883));
126.13460 +    return $this.prop_mine881;
126.13461 +}
126.13462 +function oadm_Square62_setMine72($this, a) {
126.13463 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto883));
126.13464 +    if ((oahjs_Proto$Type36_isSame355($rt_nullCheck(oadm_Square62.TYPE884), jl_Boolean327_valueOf363($this.prop_mine881), jl_Boolean327_valueOf363(a)) == 0)) {
126.13465 +        $this.prop_mine881 = a;
126.13466 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto883), $rt_str("mine"));
126.13467 +        return;
126.13468 +    }
126.13469 +    return;
126.13470 +}
126.13471 +function oadm_Square62_setState88($this, a) {
126.13472 +    oahjs_Proto321_verifyUnlocked453($rt_nullCheck($this.proto883));
126.13473 +    if ((oahjs_Proto$Type36_isSame355($rt_nullCheck(oadm_Square62.TYPE884), $this.prop_state882, a) == 0)) {
126.13474 +        $this.prop_state882 = a;
126.13475 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto883), $rt_str("state"));
126.13476 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto883), $rt_str("html"));
126.13477 +        oahjs_Proto321_valueHasMutated456($rt_nullCheck($this.proto883), $rt_str("style"));
126.13478 +        return;
126.13479 +    }
126.13480 +    return;
126.13481 +}
126.13482 +function oadm_Square62_getHtml830($this) {
126.13483 +    var a, b;
126.13484 +    a = oadm_Square62_getState84($rt_nullCheck($this));
126.13485 +    block1: {
126.13486 +        try {
126.13487 +            oahjs_Proto321_acquireLock451($rt_nullCheck($this.proto883));
126.13488 +            a = oadm_MinesModel$SquareModel687_html690(a);
126.13489 +        } catch ($e) {
126.13490 +            $je = $e.$javaException;
126.13491 +            if ($je) {
126.13492 +                b = $je;
126.13493 +                break block1;
126.13494 +            } else {
126.13495 +                throw $e;
126.13496 +            }
126.13497 +        }
126.13498 +        oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto883));
126.13499 +        return a;
126.13500 +    }
126.13501 +    oahjs_Proto321_releaseLock454($rt_nullCheck($this.proto883));
126.13502 +    $rt_throw(b);
126.13503 +}
126.13504 +oadm_Square62.$init886 = function(a) {
126.13505 +    var result = new oadm_Square62();
126.13506 +    result.$init886(a);
126.13507 +    return result;
126.13508 +}
126.13509 +oadm_Square62.$init806 = function() {
126.13510 +    var result = new oadm_Square62();
126.13511 +    result.$init806();
126.13512 +    return result;
126.13513 +}
126.13514 +oadm_Square62.$init63 = function(a, b) {
126.13515 +    var result = new oadm_Square62();
126.13516 +    result.$init63(a, b);
126.13517 +    return result;
126.13518 +}
126.13519 +$rt_virtualMethods(oadm_Square62,
126.13520 +    "getState84", function() { return oadm_Square62_getState84(this); },
126.13521 +    "getStyle831", function() { return oadm_Square62_getStyle831(this); },
126.13522 +    "isMine71", function() { return oadm_Square62_isMine71(this); },
126.13523 +    "$init886", function(a) { oadm_Square62_$init886(this, a); },
126.13524 +    "setMine72", function(a) { oadm_Square62_setMine72(this, a); },
126.13525 +    "$init806", function() { oadm_Square62_$init806(this); },
126.13526 +    "setState88", function(a) { oadm_Square62_setState88(this, a); },
126.13527 +    "$init63", function(a, b) { oadm_Square62_$init63(this, a, b); },
126.13528 +    "getHtml830", function() { return oadm_Square62_getHtml830(this); });
126.13529 +function ju_Collections$6201() {
126.13530 +    this.val$list887 = null;
126.13531 +}
126.13532 +$rt_declClass(ju_Collections$6201, {
126.13533 +    name : "java.util.Collections$6",
126.13534 +    superclass : ju_AbstractList66,
126.13535 +    clinit : function() { ju_Collections$6201_$clinit(); } });
126.13536 +function ju_Collections$6201_$clinit() {
126.13537 +    ju_Collections$6201_$clinit = function(){};
126.13538 +    ju_Collections$6201_$init202 = function($this, a) {
126.13539 +        $this.val$list887 = a;
126.13540 +        ju_AbstractList66_$init221($this);
126.13541 +        return;
126.13542 +    }
126.13543 +}
126.13544 +$rt_methodStubs(ju_Collections$6201_$clinit, ['ju_Collections$6201_$init202']);
126.13545 +function ju_Collections$6201_get58($this, a) {
126.13546 +    return $rt_nullCheck($this.val$list887).get58(a);
126.13547 +}
126.13548 +function ju_Collections$6201_size55($this) {
126.13549 +    return $rt_nullCheck($this.val$list887).size55();
126.13550 +}
126.13551 +ju_Collections$6201.$init202 = function(a) {
126.13552 +    var result = new ju_Collections$6201();
126.13553 +    result.$init202(a);
126.13554 +    return result;
126.13555 +}
126.13556 +$rt_virtualMethods(ju_Collections$6201,
126.13557 +    "$init202", function(a) { ju_Collections$6201_$init202(this, a); },
126.13558 +    "get58", function(a) { return ju_Collections$6201_get58(this, a); },
126.13559 +    "size55", function() { return ju_Collections$6201_size55(this); });
126.13560 +function onhji_JSONList76() {
126.13561 +    this.index888 = 0;
126.13562 +    this.name889 = null;
126.13563 +    this.deps890 = null;
126.13564 +    this.proto891 = null;
126.13565 +}
126.13566 +$rt_declClass(onhji_JSONList76, {
126.13567 +    name : "org.netbeans.html.json.impl.JSONList",
126.13568 +    superclass : ju_ArrayList54,
126.13569 +    clinit : function() { onhji_JSONList76_$clinit(); } });
126.13570 +function onhji_JSONList76_$clinit() {
126.13571 +    onhji_JSONList76_$clinit = function(){};
126.13572 +    onhji_JSONList76_koData408 = function(a, b) {
126.13573 +        var c, d, e;
126.13574 +        c = $rt_nullCheck(a);
126.13575 +        a = ju_AbstractCollection204_toArray205(c, $rt_createArray(jl_Object7, c.size55()));
126.13576 +        c = 0;
126.13577 +        while (true) {
126.13578 +            d = a.data;
126.13579 +            if ((c >= d.length)) {
126.13580 +                break;
126.13581 +            }
126.13582 +            e = onhji_JSON40_find41(d[c], b);
126.13583 +            if ((e !== null)) {
126.13584 +                d[c] = e;
126.13585 +            }
126.13586 +            c = ((c + 1) | 0);
126.13587 +        }
126.13588 +        return onhji_Bindings406_wrapArray632($rt_nullCheck(b), a);
126.13589 +    }
126.13590 +    onhji_JSONList76_init458 = function(a, b) {
126.13591 +        var c, d;
126.13592 +        if ((b !== null)) {
126.13593 +            c = jlr_Array150_getLength297(b);
126.13594 +            if ((c != 0)) {
126.13595 +                d = 0;
126.13596 +                while ((d < c)) {
126.13597 +                    onhji_JSONList76_add67($rt_nullCheck(a), jlr_Array150_get303(b, d));
126.13598 +                    d = ((d + 1) | 0);
126.13599 +                }
126.13600 +                return;
126.13601 +            }
126.13602 +        }
126.13603 +        return;
126.13604 +    }
126.13605 +    onhji_JSONList76_$init443 = function($this, a, b, c, d) {
126.13606 +        ju_ArrayList54_$init80($this);
126.13607 +        $this.proto891 = a;
126.13608 +        $this.name889 = b;
126.13609 +        $this.deps890 = d;
126.13610 +        $this.index888 = c;
126.13611 +        return;
126.13612 +    }
126.13613 +}
126.13614 +$rt_methodStubs(onhji_JSONList76_$clinit, ['onhji_JSONList76_koData408', 'onhji_JSONList76_init458', 'onhji_JSONList76_$init443']);
126.13615 +function onhji_JSONList76_clear77($this) {
126.13616 +    ju_ArrayList54_clear77($this);
126.13617 +    onhji_JSONList76_notifyChange892($this);
126.13618 +    return;
126.13619 +}
126.13620 +function onhji_JSONList76_add224($this, a, b) {
126.13621 +    ju_ArrayList54_add224($this, a, b);
126.13622 +    onhji_JSONList76_notifyChange892($this);
126.13623 +    return;
126.13624 +}
126.13625 +function onhji_JSONList76_notifyChange892($this) {
126.13626 +    var a, b, c, d;
126.13627 +    a = onhji_PropertyBindingAccessor404_getBindings405($this.proto891, 0);
126.13628 +    if ((a !== null)) {
126.13629 +        b = $this.name889;
126.13630 +        c = $rt_nullCheck(a);
126.13631 +        onhji_Bindings406_valueHasMutated456(c, b);
126.13632 +        a = $this.deps890.data;
126.13633 +        b = a.length;
126.13634 +        d = 0;
126.13635 +        while ((d < b)) {
126.13636 +            onhji_Bindings406_valueHasMutated456(c, a[d]);
126.13637 +            d = ((d + 1) | 0);
126.13638 +        }
126.13639 +        if (($this.index888 >= 0)) {
126.13640 +            onhji_PropertyBindingAccessor404_notifyProtoChange502($this.proto891, $this.index888);
126.13641 +        }
126.13642 +    }
126.13643 +    return;
126.13644 +}
126.13645 +function onhji_JSONList76_add67($this, a) {
126.13646 +    a = ju_AbstractList66_add67($this, a);
126.13647 +    onhji_JSONList76_notifyChange892($this);
126.13648 +    return a;
126.13649 +}
126.13650 +function onhji_JSONList76_addAll78($this, a) {
126.13651 +    a = ju_AbstractCollection204_addAll78($this, a);
126.13652 +    onhji_JSONList76_notifyChange892($this);
126.13653 +    return a;
126.13654 +}
126.13655 +function onhji_JSONList76_koData407($this) {
126.13656 +    return onhji_JSONList76_koData408($this, onhji_PropertyBindingAccessor404_getBindings405($this.proto891, 1));
126.13657 +}
126.13658 +function onhji_JSONList76_init459($this, a) {
126.13659 +    var b, c;
126.13660 +    if ((a !== null)) {
126.13661 +        b = jlr_Array150_getLength297(a);
126.13662 +        if ((b != 0)) {
126.13663 +            c = 0;
126.13664 +            while ((c < b)) {
126.13665 +                ju_AbstractList66_add67($this, jlr_Array150_get303(a, c));
126.13666 +                c = ((c + 1) | 0);
126.13667 +            }
126.13668 +            return;
126.13669 +        }
126.13670 +    }
126.13671 +    return;
126.13672 +}
126.13673 +onhji_JSONList76.$init443 = function(a, b, c, d) {
126.13674 +    var result = new onhji_JSONList76();
126.13675 +    result.$init443(a, b, c, d);
126.13676 +    return result;
126.13677 +}
126.13678 +$rt_virtualMethods(onhji_JSONList76,
126.13679 +    "clear77", function() { onhji_JSONList76_clear77(this); },
126.13680 +    "add224", function(a, b) { onhji_JSONList76_add224(this, a, b); },
126.13681 +    "notifyChange892", function() { onhji_JSONList76_notifyChange892(this); },
126.13682 +    "add67", function(a) { return onhji_JSONList76_add67(this, a); },
126.13683 +    "$init443", function(a, b, c, d) { onhji_JSONList76_$init443(this, a, b, c, d); },
126.13684 +    "addAll78", function(a) { return onhji_JSONList76_addAll78(this, a); },
126.13685 +    "koData407", function() { return onhji_JSONList76_koData407(this); },
126.13686 +    "init459", function(a) { onhji_JSONList76_init459(this, a); });
126.13687 +function jl_AssertionError316() {
126.13688 +}
126.13689 +$rt_declClass(jl_AssertionError316, {
126.13690 +    name : "java.lang.AssertionError",
126.13691 +    superclass : jl_Error208,
126.13692 +    clinit : function() { jl_AssertionError316_$clinit(); } });
126.13693 +function jl_AssertionError316_$clinit() {
126.13694 +    jl_AssertionError316_$clinit = function(){};
126.13695 +    jl_AssertionError316_$init317 = function($this) {
126.13696 +        jl_Error208_$init209($this);
126.13697 +        return;
126.13698 +    }
126.13699 +}
126.13700 +$rt_methodStubs(jl_AssertionError316_$clinit, ['jl_AssertionError316_$init317']);
126.13701 +jl_AssertionError316.$init317 = function() {
126.13702 +    var result = new jl_AssertionError316();
126.13703 +    result.$init317();
126.13704 +    return result;
126.13705 +}
126.13706 +$rt_virtualMethods(jl_AssertionError316,
126.13707 +    "$init317", function() { jl_AssertionError316_$init317(this); });
126.13708 +function onhbi_FnContext473() {
126.13709 +    this.current893 = null;
126.13710 +    this.prev894 = null;
126.13711 +}
126.13712 +onhbi_FnContext473.LOG895 = null;
126.13713 +onhbi_FnContext473.CURRENT896 = null;
126.13714 +onhbi_FnContext473.DUMMY897 = null;
126.13715 +$rt_declClass(onhbi_FnContext473, {
126.13716 +    name : "org.netbeans.html.boot.impl.FnContext",
126.13717 +    interfaces : [ji_Closeable215],
126.13718 +    superclass : jl_Object7,
126.13719 +    clinit : function() { onhbi_FnContext473_$clinit(); } });
126.13720 +function onhbi_FnContext473_$clinit() {
126.13721 +    onhbi_FnContext473_$clinit = function(){};
126.13722 +    onhbi_FnContext473_$clinit898 = function() {
126.13723 +        onhbi_FnContext473.LOG895 = jul_Logger681_getLogger682(jl_Class0_getName20($rt_nullCheck($rt_cls(onhbi_FnContext473))));
126.13724 +        onhbi_FnContext473.DUMMY897 = onhbi_FnContext473.$init899(null, null);
126.13725 +        onhbi_FnContext473.DUMMY897.prev894 = onhbi_FnContext473.DUMMY897;
126.13726 +        onhbi_FnContext473.CURRENT896 = jl_ThreadLocal670.$init673();
126.13727 +        return;
126.13728 +    }
126.13729 +    onhbi_FnContext473_$init899 = function($this, a, b) {
126.13730 +        jl_Object7_$init10($this);
126.13731 +        $this.current893 = b;
126.13732 +        $this.prev894 = a;
126.13733 +        return;
126.13734 +    }
126.13735 +    onhbi_FnContext473_currentPresenter476 = function(a) {
126.13736 +        var b;
126.13737 +        b = jl_ThreadLocal670_get675($rt_nullCheck(onhbi_FnContext473.CURRENT896));
126.13738 +        if ((!((b === null) && (a != 0)))) {
126.13739 +            return b;
126.13740 +        }
126.13741 +        $rt_throw(jl_IllegalStateException229.$init641($rt_str("No current WebView context around!")));
126.13742 +    }
126.13743 +    onhbi_FnContext473_activate474 = function(a) {
126.13744 +        var b;
126.13745 +        b = onhbi_FnContext473_currentPresenter900(a);
126.13746 +        if ((b !== a)) {
126.13747 +            return onhbi_FnContext473.$init899(b, a);
126.13748 +        }
126.13749 +        return onhbi_FnContext473.DUMMY897;
126.13750 +    }
126.13751 +    onhbi_FnContext473_currentPresenter900 = function(a) {
126.13752 +        var b;
126.13753 +        b = jl_ThreadLocal670_get675($rt_nullCheck(onhbi_FnContext473.CURRENT896));
126.13754 +        jl_ThreadLocal670_set676($rt_nullCheck(onhbi_FnContext473.CURRENT896), a);
126.13755 +        return b;
126.13756 +    }
126.13757 +    onhbi_FnContext473_$clinit898();
126.13758 +}
126.13759 +$rt_methodStubs(onhbi_FnContext473_$clinit, ['onhbi_FnContext473_$clinit898', 'onhbi_FnContext473_$init899', 'onhbi_FnContext473_currentPresenter476', 'onhbi_FnContext473_activate474', 'onhbi_FnContext473_currentPresenter900']);
126.13760 +function onhbi_FnContext473_close661($this) {
126.13761 +    if (($this.prev894 !== $this)) {
126.13762 +        onhbi_FnContext473_currentPresenter900($this.prev894);
126.13763 +        $this.prev894 = $this;
126.13764 +        if (($rt_isInstance($this.current893, ji_Flushable477) != 0)) {
126.13765 +            $rt_nullCheck($this.current893).flush901();
126.13766 +        }
126.13767 +    }
126.13768 +    return;
126.13769 +}
126.13770 +onhbi_FnContext473.$init899 = function(a, b) {
126.13771 +    var result = new onhbi_FnContext473();
126.13772 +    result.$init899(a, b);
126.13773 +    return result;
126.13774 +}
126.13775 +$rt_virtualMethods(onhbi_FnContext473,
126.13776 +    "$init899", function(a, b) { onhbi_FnContext473_$init899(this, a, b); },
126.13777 +    "close661", function() { onhbi_FnContext473_close661(this); });
126.13778 +function ju_ConcurrentModificationException569() {
126.13779 +}
126.13780 +$rt_declClass(ju_ConcurrentModificationException569, {
126.13781 +    name : "java.util.ConcurrentModificationException",
126.13782 +    superclass : jl_RuntimeException131,
126.13783 +    clinit : function() { ju_ConcurrentModificationException569_$clinit(); } });
126.13784 +function ju_ConcurrentModificationException569_$clinit() {
126.13785 +    ju_ConcurrentModificationException569_$clinit = function(){};
126.13786 +    ju_ConcurrentModificationException569_$init570 = function($this) {
126.13787 +        jl_RuntimeException131_$init132($this);
126.13788 +        return;
126.13789 +    }
126.13790 +}
126.13791 +$rt_methodStubs(ju_ConcurrentModificationException569_$clinit, ['ju_ConcurrentModificationException569_$init570']);
126.13792 +ju_ConcurrentModificationException569.$init570 = function() {
126.13793 +    var result = new ju_ConcurrentModificationException569();
126.13794 +    result.$init570();
126.13795 +    return result;
126.13796 +}
126.13797 +$rt_virtualMethods(ju_ConcurrentModificationException569,
126.13798 +    "$init570", function() { ju_ConcurrentModificationException569_$init570(this); });
126.13799 +function oadm_MinesModel$GameState73() {
126.13800 +}
126.13801 +oadm_MinesModel$GameState73.WON89 = null;
126.13802 +oadm_MinesModel$GameState73.LOST104 = null;
126.13803 +oadm_MinesModel$GameState73.$VALUES902 = null;
126.13804 +oadm_MinesModel$GameState73.IN_PROGRESS74 = null;
126.13805 +$rt_declClass(oadm_MinesModel$GameState73, {
126.13806 +    name : "org.apidesign.demo.minesweeper.MinesModel$GameState",
126.13807 +    enum : true,
126.13808 +    superclass : jl_Enum102,
126.13809 +    clinit : function() { oadm_MinesModel$GameState73_$clinit(); } });
126.13810 +function oadm_MinesModel$GameState73_$clinit() {
126.13811 +    oadm_MinesModel$GameState73_$clinit = function(){};
126.13812 +    oadm_MinesModel$GameState73_$clinit903 = function() {
126.13813 +        var a, b, c, d;
126.13814 +        oadm_MinesModel$GameState73.IN_PROGRESS74 = oadm_MinesModel$GameState73.$init904($rt_str("IN_PROGRESS"), 0);
126.13815 +        oadm_MinesModel$GameState73.WON89 = oadm_MinesModel$GameState73.$init904($rt_str("WON"), 1);
126.13816 +        oadm_MinesModel$GameState73.LOST104 = oadm_MinesModel$GameState73.$init904($rt_str("LOST"), 2);
126.13817 +        a = $rt_createArray(oadm_MinesModel$GameState73, 3);
126.13818 +        b = 0;
126.13819 +        c = oadm_MinesModel$GameState73.IN_PROGRESS74;
126.13820 +        d = a.data;
126.13821 +        d[b] = c;
126.13822 +        d[1] = oadm_MinesModel$GameState73.WON89;
126.13823 +        d[2] = oadm_MinesModel$GameState73.LOST104;
126.13824 +        oadm_MinesModel$GameState73.$VALUES902 = a;
126.13825 +        return;
126.13826 +    }
126.13827 +    oadm_MinesModel$GameState73_$init904 = function($this, a, b) {
126.13828 +        jl_Enum102_$init611($this, a, b);
126.13829 +        return;
126.13830 +    }
126.13831 +    oadm_MinesModel$GameState73_$clinit903();
126.13832 +}
126.13833 +$rt_methodStubs(oadm_MinesModel$GameState73_$clinit, ['oadm_MinesModel$GameState73_$clinit903', 'oadm_MinesModel$GameState73_$init904']);
126.13834 +oadm_MinesModel$GameState73.$init904 = function(a, b) {
126.13835 +    var result = new oadm_MinesModel$GameState73();
126.13836 +    result.$init904(a, b);
126.13837 +    return result;
126.13838 +}
126.13839 +$rt_virtualMethods(oadm_MinesModel$GameState73,
126.13840 +    "$init904", function(a, b) { oadm_MinesModel$GameState73_$init904(this, a, b); });
126.13841 +function VM() {
126.13842 +}
126.13843 +VM.prototype.loadClass = function(className) {
126.13844 +    switch (className) {
126.13845 +        case "org.apidesign.demo.minesweeper.MainBrwsr": oadm_MainBrwsr227.$clinit(); break;
126.13846 +        default: throw "Can't load class " + className;
126.13847 +    }
126.13848 +}