Merge mozilla-central into mozilla-inbound
authorEhsan Akhgari <ehsan@mozilla.com>
Tue, 24 Apr 2012 21:29:44 -0400
changeset 96875 e1acc0e92a4087ad36b995baa824fb4a1f5e47a5
parent 96874 ee6e8470cb960678af90475cca3623ef937e225f (current diff)
parent 96785 f661fb83699babe666e2d5c5b6f94fd315c08ff7 (diff)
child 96876 2873865edc0b6c875faafd74b48ae502f8f7fdae
push id173
push userlsblakk@mozilla.com
push dateFri, 24 Aug 2012 15:39:16 +0000
treeherdermozilla-release@bcc45eb1fb41 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone15.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central into mozilla-inbound
b2g/app/b2g.js
browser/config/mozconfigs/win32/vs2010-mozconfig
browser/config/mozconfigs/win64/vs2010-mozconfig
client.mk
config/autoconf.mk.in
configure.in
content/base/src/nsContentUtils.cpp
docshell/base/nsDocShell.cpp
dom/bindings/Utils.h
dom/ipc/ContentChild.cpp
dom/plugins/base/nsPluginHost.cpp
js/src/jsapi.h
js/xpconnect/src/XPCJSRuntime.cpp
js/xpconnect/src/XPCWrappedNativeScope.cpp
js/xpconnect/src/xpcprivate.h
modules/libpref/src/init/all.js
--- a/.hgtags
+++ b/.hgtags
@@ -74,8 +74,9 @@ 54bfd8bf682e295ffd7f22fa921ca343957b6c1c
 a8506ab2c65480cf2f85f54e203ea746522c62bb AURORA_BASE_20111220
 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R16
 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131
 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131
 0000000000000000000000000000000000000000 AURORA_BASE_20120131
 0000000000000000000000000000000000000000 AURORA_BASE_20120131
 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131
 b6627f28b7ec17e1b46a594df0f780d3a40847e4 FIREFOX_AURORA_13_BASE
+357da346ceb705d196a46574804c7c4ec44ac186 FIREFOX_AURORA_14_BASE
old mode 100644
new mode 100755
--- a/b2g/confvars.sh
+++ b/b2g/confvars.sh
@@ -33,17 +33,17 @@
 # the provisions above, a recipient may use your version of this file under
 # the terms of any one of the MPL, the GPL or the LGPL.
 #
 # ***** END LICENSE BLOCK *****
 
 MOZ_APP_BASENAME=B2G
 MOZ_APP_VENDOR=Mozilla
 
-MOZ_APP_VERSION=14.0a1
+MOZ_APP_VERSION=15.0a1
 MOZ_APP_UA_NAME=Firefox
 
 MOZ_BRANDING_DIRECTORY=b2g/branding/unofficial
 MOZ_OFFICIAL_BRANDING_DIRECTORY=b2g/branding/official
 # MOZ_APP_DISPLAYNAME is set by branding/configure.sh
 
 MOZ_SAFE_BROWSING=
 MOZ_SERVICES_SYNC=1
--- a/b2g/locales/generic/install.rdf
+++ b/b2g/locales/generic/install.rdf
@@ -50,13 +50,13 @@
 #ifdef MOZ_LANGPACK_CONTRIBUTORS
     @MOZ_LANGPACK_CONTRIBUTORS@
 #endif
 
     <em:targetApplication>
       <Description>
         <em:id>{3c2e2abc-06d4-11e1-ac3b-374f68613e61}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
-        <em:maxVersion>@MOZ_APP_VERSION@</em:maxVersion>
+        <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
       </Description>
     </em:targetApplication>
   </Description>
 </RDF>
--- a/browser/config/mozconfigs/win32/debug
+++ b/browser/config/mozconfigs/win32/debug
@@ -2,12 +2,12 @@ ac_add_options --enable-debug
 ac_add_options --enable-trace-malloc
 ac_add_options --enable-signmar
 
 # Needed to enable breakpad in application.ini
 export MOZILLA_OFFICIAL=1
 
 mk_add_options MOZ_MAKE_FLAGS=-j1
 
-. $topsrcdir/browser/config/mozconfigs/win32/vs2010-mozconfig
+. $topsrcdir/build/win32/mozconfig.vs2010
 
 # Package js shell.
 export MOZ_PACKAGE_JSSHELL=1
--- a/browser/config/mozconfigs/win32/l10n-mozconfig
+++ b/browser/config/mozconfigs/win32/l10n-mozconfig
@@ -1,6 +1,6 @@
 ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL}
 ac_add_options --enable-update-packaging
 ac_add_options --enable-official-branding
 ac_add_options --with-l10n-base=../../l10n-central
 
-. $topsrcdir/browser/config/mozconfigs/win32/vs2010-mozconfig
+. $topsrcdir/build/win32/mozconfig.vs2010
--- a/browser/config/mozconfigs/win32/nightly
+++ b/browser/config/mozconfigs/win32/nightly
@@ -11,12 +11,12 @@ ac_add_options --enable-js-diagnostics
 
 # Needed to enable breakpad in application.ini
 export MOZILLA_OFFICIAL=1
 
 export MOZ_TELEMETRY_REPORTING=1
 
 mk_add_options MOZ_MAKE_FLAGS=-j1
 
-. $topsrcdir/browser/config/mozconfigs/win32/vs2010-mozconfig
+. $topsrcdir/build/win32/mozconfig.vs2010
 
 # Package js shell.
 export MOZ_PACKAGE_JSSHELL=1
--- a/browser/config/mozconfigs/win32/release
+++ b/browser/config/mozconfigs/win32/release
@@ -7,12 +7,12 @@ ac_add_options --enable-update-packaging
 ac_add_options --enable-jemalloc
 ac_add_options --enable-official-branding
 
 # Needed to enable breakpad in application.ini
 export MOZILLA_OFFICIAL=1
 
 export MOZ_TELEMETRY_REPORTING=1
 
-. $topsrcdir/browser/config/mozconfigs/win32/vs2010-mozconfig
+. $topsrcdir/build/win32/mozconfig.vs2010
 
 # Package js shell.
 export MOZ_PACKAGE_JSSHELL=1
--- a/browser/config/mozconfigs/win64/debug
+++ b/browser/config/mozconfigs/win64/debug
@@ -8,9 +8,9 @@ ac_add_options --enable-signmar
 # Needed to enable breakpad in application.ini
 export MOZILLA_OFFICIAL=1
 
 mk_add_options MOZ_MAKE_FLAGS=-j1
 
 # Package js shell.
 export MOZ_PACKAGE_JSSHELL=1
 
-. $topsrcdir/browser/config/mozconfigs/win64/vs2010-mozconfig
+. $topsrcdir/build/win64/mozconfig.vs2010
--- a/browser/config/mozconfigs/win64/nightly
+++ b/browser/config/mozconfigs/win64/nightly
@@ -17,9 +17,9 @@ export MOZILLA_OFFICIAL=1
 
 export MOZ_TELEMETRY_REPORTING=1
 
 mk_add_options MOZ_MAKE_FLAGS=-j1
 
 # Package js shell.
 export MOZ_PACKAGE_JSSHELL=1
 
-. $topsrcdir/browser/config/mozconfigs/win64/vs2010-mozconfig
+. $topsrcdir/build/win64/mozconfig.vs2010
--- a/browser/config/version.txt
+++ b/browser/config/version.txt
@@ -1,1 +1,1 @@
-14.0a1
+15.0a1
--- a/browser/locales/generic/install.rdf
+++ b/browser/locales/generic/install.rdf
@@ -50,13 +50,13 @@
 #ifdef MOZ_LANGPACK_CONTRIBUTORS
     @MOZ_LANGPACK_CONTRIBUTORS@
 #endif
 
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
-        <em:maxVersion>@MOZ_APP_VERSION@</em:maxVersion>
+        <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
       </Description>
     </em:targetApplication>
   </Description>
 </RDF>
rename from browser/config/mozconfigs/win32/vs2010-mozconfig
rename to build/win32/mozconfig.vs2010
rename from browser/config/mozconfigs/win64/vs2010-mozconfig
rename to build/win64/mozconfig.vs2010
--- a/client.mk
+++ b/client.mk
@@ -193,16 +193,19 @@ all realbuild clean depend distclean exp
 	fi
 
 # Windows equivalents
 build_all: build
 build_all_dep: alldep
 build_all_depend: alldep
 clobber clobber_all: clean
 
+# helper target for mobile
+build_and_deploy: build package install
+
 # Do everything from scratch
 everything: clean build
 
 ####################################
 # Profile-Guided Optimization
 #  To use this, you should set the following variables in your mozconfig
 #    mk_add_options PROFILE_GEN_SCRIPT=/path/to/profile-script
 #
--- a/config/autoconf.mk.in
+++ b/config/autoconf.mk.in
@@ -54,16 +54,17 @@ MOZ_APP_VENDOR = @MOZ_APP_VENDOR@
 MOZ_APP_PROFILE = @MOZ_APP_PROFILE@
 MOZ_APP_ID = @MOZ_APP_ID@
 MAR_CHANNEL_ID = @MAR_CHANNEL_ID@
 ACCEPTED_MAR_CHANNEL_IDS = @ACCEPTED_MAR_CHANNEL_IDS@
 MOZ_PROFILE_MIGRATOR = @MOZ_PROFILE_MIGRATOR@
 MOZ_EXTENSION_MANAGER = @MOZ_EXTENSION_MANAGER@
 MOZ_APP_UA_NAME = @MOZ_APP_UA_NAME@
 MOZ_APP_VERSION = @MOZ_APP_VERSION@
+MOZ_APP_MAXVERSION = @MOZ_APP_MAXVERSION@
 MOZ_UA_BUILDID = @MOZ_UA_BUILDID@
 MOZ_MACBUNDLE_NAME = @MOZ_MACBUNDLE_NAME@
 MOZ_APP_STATIC_INI = @MOZ_APP_STATIC_INI@
 
 MOZ_PKG_SPECIAL = @MOZ_PKG_SPECIAL@
 
 prefix		= @prefix@
 exec_prefix	= @exec_prefix@
--- a/config/milestone.txt
+++ b/config/milestone.txt
@@ -5,9 +5,9 @@
 #    x.x.x.x
 #    x.x.x+
 #
 # Referenced by milestone.pl.
 # Hopefully I'll be able to automate replacement of *all*
 # hardcoded milestones in the tree from these two files.
 #--------------------------------------------------------
 
-14.0a1
+15.0a1
--- a/configure.in
+++ b/configure.in
@@ -8559,30 +8559,45 @@ AC_SUBST(MOZ_MACBUNDLE_NAME)
 # crash reporter server url.
 # - MOZ_PROFILE_MIGRATOR: When set, enables profile migrator.
 # - MOZ_EXTENSION_MANAGER: When set, enabled extension manager.
 
 if test -z "$MOZ_APP_NAME"; then
    MOZ_APP_NAME=`echo $MOZ_APP_BASENAME | tr A-Z a-z`
 fi
 
+# For extensions and langpacks, we require a max version that is compatible
+# across security releases. MOZ_APP_MAXVERSION is our method for doing that.
+# 10.0a1 and 10.0a2 aren't affected
+# 10.0 becomes 10.0.*
+# 10.0.1 becomes 10.0.*
+IS_ALPHA=`echo $MOZ_APP_VERSION | grep a`
+if test -z "$IS_ALPHA"; then
+  changequote(,)
+  MOZ_APP_MAXVERSION=`echo $MOZ_APP_VERSION | sed "s|\(^[0-9]*.[0-9]*\).*|\1|"`.*
+  changequote([,])
+else
+  MOZ_APP_MAXVERSION=$MOZ_APP_VERSION
+fi
+
 AC_SUBST(MOZ_APP_NAME)
 AC_SUBST(MOZ_APP_DISPLAYNAME)
 AC_SUBST(MOZ_APP_BASENAME)
 AC_SUBST(MOZ_APP_VENDOR)
 AC_SUBST(MOZ_APP_PROFILE)
 AC_SUBST(MOZ_APP_ID)
 AC_SUBST(MAR_CHANNEL_ID)
 AC_SUBST(ACCEPTED_MAR_CHANNEL_IDS)
 AC_SUBST(MOZ_PROFILE_MIGRATOR)
 AC_SUBST(MOZ_EXTENSION_MANAGER)
 AC_DEFINE_UNQUOTED(MOZ_APP_UA_NAME, "$MOZ_APP_UA_NAME")
 AC_SUBST(MOZ_APP_UA_NAME)
 AC_DEFINE_UNQUOTED(MOZ_APP_UA_VERSION, "$MOZ_APP_VERSION")
 AC_SUBST(MOZ_APP_VERSION)
+AC_SUBST(MOZ_APP_MAXVERSION)
 AC_DEFINE_UNQUOTED(MOZ_UA_FIREFOX_VERSION, "$FIREFOX_VERSION")
 AC_DEFINE_UNQUOTED(FIREFOX_VERSION,$FIREFOX_VERSION)
 AC_SUBST(FIREFOX_VERSION)
 AC_DEFINE_UNQUOTED(MOZ_UA_BUILDID, "$MOZ_UA_BUILDID")
 AC_SUBST(MOZ_UA_BUILDID)
 
 # We can't use the static application.ini data when building against
 # a libxul SDK.
--- a/content/base/public/nsContentUtils.h
+++ b/content/base/public/nsContentUtils.h
@@ -439,16 +439,25 @@ public:
    * an nsIntMargin.
    *
    * @param aString the string to parse
    * @param aResult the resulting integer
    * @return whether the value could be parsed
    */
   static bool ParseIntMarginValue(const nsAString& aString, nsIntMargin& aResult);
 
+  /**
+   * Parse the value of the <font size=""> attribute according to the HTML5
+   * spec as of April 16, 2012.
+   *
+   * @param aValue the value to parse
+   * @return 1 to 7, or 0 if the value couldn't be parsed
+   */
+  static PRInt32 ParseLegacyFontSize(const nsAString& aValue);
+
   static void Shutdown();
 
   /**
    * Checks whether two nodes come from the same origin.
    */
   static nsresult CheckSameOrigin(nsINode* aTrustedNode,
                                   nsIDOMNode* aUnTrustedNode);
   static nsresult CheckSameOrigin(nsINode* aTrustedNode,
--- a/content/base/public/nsIDocumentEncoder.idl
+++ b/content/base/public/nsIDocumentEncoder.idl
@@ -239,16 +239,22 @@ interface nsIDocumentEncoder : nsISuppor
  
   /**
    * Drop <br> elements considered "invisible" by the editor. OutputPreformatted
    * implies this flag.
    */
   const unsigned long OutputDropInvisibleBreak = (1 << 21);
 
   /**
+   * Don't check for _moz_dirty attributes when deciding whether to
+   * pretty-print if this flag is set (bug 599983).
+   */
+  const unsigned long OutputIgnoreMozDirty = (1 << 22);
+
+  /**
    * Initialize with a pointer to the document and the mime type.
    * @param aDocument Document to encode.
    * @param aMimeType MimeType to use. May also be set by SetMimeType.
    * @param aFlags Flags to use while encoding. May also be set by SetFlags.
    */
   void init(in nsIDOMDocument aDocument,
             in AString aMimeType,
             in unsigned long aFlags);
--- a/content/base/src/Link.cpp
+++ b/content/base/src/Link.cpp
@@ -50,37 +50,37 @@
 #include "mozAutoDocUpdate.h"
 
 #include "mozilla/Services.h"
 
 namespace mozilla {
 namespace dom {
 
 Link::Link(Element *aElement)
-  : mLinkState(defaultState)
+  : mElement(aElement)
+  , mHistory(services::GetHistoryService())
+  , mLinkState(defaultState)
   , mRegistered(false)
-  , mElement(aElement)
-  , mHistory(services::GetHistoryService())
 {
   NS_ABORT_IF_FALSE(mElement, "Must have an element");
 }
 
 Link::~Link()
 {
   UnregisterFromHistory();
 }
 
 nsLinkState
 Link::GetLinkState() const
 {
   NS_ASSERTION(mRegistered,
                "Getting the link state of an unregistered Link!");
   NS_ASSERTION(mLinkState != eLinkState_Unknown,
                "Getting the link state with an unknown value!");
-  return mLinkState;
+  return nsLinkState(mLinkState);
 }
 
 void
 Link::SetLinkState(nsLinkState aState)
 {
   NS_ASSERTION(mRegistered,
                "Setting the link state of an unregistered Link!");
   NS_ASSERTION(mLinkState != aState,
--- a/content/base/src/Link.h
+++ b/content/base/src/Link.h
@@ -144,27 +144,27 @@ private:
    * Unregisters from History so this node no longer gets notifications about
    * changes to visitedness.
    */
   void UnregisterFromHistory();
 
   already_AddRefed<nsIURI> GetURIToMutate();
   void SetHrefAttribute(nsIURI *aURI);
 
-  nsLinkState mLinkState;
-
   mutable nsCOMPtr<nsIURI> mCachedURI;
 
-  bool mRegistered;
-
   Element * const mElement;
 
   // Strong reference to History.  The link has to unregister before History
   // can disappear.
   nsCOMPtr<IHistory> mHistory;
+
+  PRUint16 mLinkState;
+
+  bool mRegistered;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(Link, MOZILLA_DOM_LINK_IMPLEMENTATION_IID)
 
 } // namespace dom
 } // namespace mozilla
 
 #endif // mozilla_dom_Link_h__
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -1301,16 +1301,69 @@ nsContentUtils::ParseIntMarginValue(cons
         result.left = val;
       break;
     }
     start += end + 1;
   }
   return true;
 }
 
+// static
+PRInt32
+nsContentUtils::ParseLegacyFontSize(const nsAString& aValue)
+{
+  nsAString::const_iterator iter, end;
+  aValue.BeginReading(iter);
+  aValue.EndReading(end);
+
+  while (iter != end && nsContentUtils::IsHTMLWhitespace(*iter)) {
+    ++iter;
+  }
+
+  if (iter == end) {
+    return 0;
+  }
+
+  bool relative = false;
+  bool negate = false;
+  if (*iter == PRUnichar('-')) {
+    relative = true;
+    negate = true;
+    ++iter;
+  } else if (*iter == PRUnichar('+')) {
+    relative = true;
+    ++iter;
+  }
+
+  if (*iter < PRUnichar('0') || *iter > PRUnichar('9')) {
+    return 0;
+  }
+
+  // We don't have to worry about overflow, since we can bail out as soon as
+  // we're bigger than 7.
+  PRInt32 value = 0;
+  while (iter != end && *iter >= PRUnichar('0') && *iter <= PRUnichar('9')) {
+    value = 10*value + (*iter - PRUnichar('0'));
+    if (value >= 7) {
+      break;
+    }
+    ++iter;
+  }
+
+  if (relative) {
+    if (negate) {
+      value = 3 - value;
+    } else {
+      value = 3 + value;
+    }
+  }
+
+  return clamped(value, 1, 7);
+}
+
 /* static */
 void
 nsContentUtils::GetOfflineAppManifest(nsIDocument *aDocument, nsIURI **aURI)
 {
   Element* docElement = aDocument->GetRootElement();
   if (!docElement) {
     return;
   }
--- a/content/base/src/nsHTMLContentSerializer.cpp
+++ b/content/base/src/nsHTMLContentSerializer.cpp
@@ -342,18 +342,18 @@ nsHTMLContentSerializer::AppendElementEn
   if (ns == kNameSpaceID_XHTML &&
       (name == nsGkAtoms::script ||
        name == nsGkAtoms::style ||
        name == nsGkAtoms::noscript ||
        name == nsGkAtoms::noframes)) {
     --mDisableEntityEncoding;
   }
 
-  bool forceFormat = content->HasAttr(kNameSpaceID_None,
-                                        nsGkAtoms::mozdirty);
+  bool forceFormat = !(mFlags & nsIDocumentEncoder::OutputIgnoreMozDirty) &&
+                     content->HasAttr(kNameSpaceID_None, nsGkAtoms::mozdirty);
 
   if ((mDoFormat || forceFormat) && !mPreLevel && !mDoRaw) {
     DecrIndentation(name);
   }
 
   if (name == nsGkAtoms::script) {
     nsCOMPtr<nsIScriptElement> script = do_QueryInterface(aElement);
 
--- a/content/base/src/nsXHTMLContentSerializer.cpp
+++ b/content/base/src/nsXHTMLContentSerializer.cpp
@@ -560,18 +560,18 @@ nsXHTMLContentSerializer::AppendDocument
 bool
 nsXHTMLContentSerializer::CheckElementStart(nsIContent * aContent,
                                             bool & aForceFormat,
                                             nsAString& aStr)
 {
   // The _moz_dirty attribute is emitted by the editor to
   // indicate that this element should be pretty printed
   // even if we're not in pretty printing mode
-  aForceFormat = aContent->HasAttr(kNameSpaceID_None,
-                                   nsGkAtoms::mozdirty);
+  aForceFormat = !(mFlags & nsIDocumentEncoder::OutputIgnoreMozDirty) &&
+                 aContent->HasAttr(kNameSpaceID_None, nsGkAtoms::mozdirty);
 
   nsIAtom *name = aContent->Tag();
   PRInt32 namespaceID = aContent->GetNameSpaceID();
 
   if (namespaceID == kNameSpaceID_XHTML) {
     if (name == nsGkAtoms::br && mPreLevel > 0 && 
         (mFlags & nsIDocumentEncoder::OutputNoFormattingInPre)) {
       AppendNewLineToString(aStr);
@@ -587,18 +587,18 @@ nsXHTMLContentSerializer::CheckElementSt
 
 bool
 nsXHTMLContentSerializer::CheckElementEnd(nsIContent * aContent,
                                           bool & aForceFormat,
                                           nsAString& aStr)
 {
   NS_ASSERTION(!mIsHTMLSerializer, "nsHTMLContentSerializer shouldn't call this method !");
 
-  aForceFormat = aContent->HasAttr(kNameSpaceID_None,
-                                   nsGkAtoms::mozdirty);
+  aForceFormat = !(mFlags & nsIDocumentEncoder::OutputIgnoreMozDirty) &&
+                 aContent->HasAttr(kNameSpaceID_None, nsGkAtoms::mozdirty);
 
   nsIAtom *name = aContent->Tag();
   PRInt32 namespaceID = aContent->GetNameSpaceID();
 
   // this method is not called by nsHTMLContentSerializer
   // so we don't have to check HTML element, just XHTML
   if (namespaceID == kNameSpaceID_XHTML) {
     if (mIsCopying && name == nsGkAtoms::ol) {
--- a/content/events/src/nsContentEventHandler.cpp
+++ b/content/events/src/nsContentEventHandler.cpp
@@ -352,26 +352,26 @@ static nsresult GenerateFlatTextContent(
         aString.Append(PRUnichar('\n'));
   }
   ConvertToNativeNewlines(aString);
   return NS_OK;
 }
 
 nsresult
 nsContentEventHandler::ExpandToClusterBoundary(nsIContent* aContent,
-                                                    bool aForward,
-                                                    PRUint32* aXPOffset)
+                                               bool aForward,
+                                               PRUint32* aXPOffset)
 {
   // XXX This method assumes that the frame boundaries must be cluster
   // boundaries. It's false, but no problem now, maybe.
   if (!aContent->IsNodeOfType(nsINode::eTEXT) ||
       *aXPOffset == 0 || *aXPOffset == aContent->TextLength())
     return NS_OK;
 
-  NS_ASSERTION(*aXPOffset >= 0 && *aXPOffset <= aContent->TextLength(),
+  NS_ASSERTION(*aXPOffset <= aContent->TextLength(),
                "offset is out of range.");
 
   nsRefPtr<nsFrameSelection> fs = mPresShell->FrameSelection();
   PRInt32 offsetInFrame;
   nsFrameSelection::HINT hint =
     aForward ? nsFrameSelection::HINTLEFT : nsFrameSelection::HINTRIGHT;
   nsIFrame* frame = fs->GetFrameForNodeOffset(aContent, PRInt32(*aXPOffset),
                                               hint, &offsetInFrame);
--- a/content/html/content/src/nsGenericHTMLElement.cpp
+++ b/content/html/content/src/nsGenericHTMLElement.cpp
@@ -692,23 +692,34 @@ nsGenericHTMLElement::GetMarkup(bool aIn
     // This could be some type for which we create a synthetic document.  Try
     // again as XML
     contentType.AssignLiteral("application/xml");
     docEncoder = do_CreateInstance(NS_DOC_ENCODER_CONTRACTID_BASE "application/xml");
   }
 
   NS_ENSURE_TRUE(docEncoder, NS_ERROR_FAILURE);
 
-  nsresult rv = docEncoder->NativeInit(doc, contentType,
-                                       nsIDocumentEncoder::OutputEncodeBasicEntities |
-                                       // Output DOM-standard newlines
-                                       nsIDocumentEncoder::OutputLFLineBreak |
-                                       // Don't do linebreaking that's not present in
-                                       // the source
-                                       nsIDocumentEncoder::OutputRaw);
+  PRUint32 flags = nsIDocumentEncoder::OutputEncodeBasicEntities |
+                   // Output DOM-standard newlines
+                   nsIDocumentEncoder::OutputLFLineBreak |
+                   // Don't do linebreaking that's not present in
+                   // the source
+                   nsIDocumentEncoder::OutputRaw |
+                   // Only check for mozdirty when necessary (bug 599983)
+                   nsIDocumentEncoder::OutputIgnoreMozDirty;
+
+  if (IsEditable()) {
+    nsCOMPtr<nsIEditor> editor;
+    GetEditorInternal(getter_AddRefs(editor));
+    if (editor && editor->OutputsMozDirty()) {
+      flags &= ~nsIDocumentEncoder::OutputIgnoreMozDirty;
+    }
+  }
+
+  nsresult rv = docEncoder->NativeInit(doc, contentType, flags);
   NS_ENSURE_SUCCESS(rv, rv);
 
   if (aIncludeSelf) {
     docEncoder->SetNativeNode(this);
   } else {
     docEncoder->SetNativeContainerNode(this);
   }
   rv = docEncoder->EncodeToString(aMarkup);
--- a/content/html/content/src/nsHTMLFontElement.cpp
+++ b/content/html/content/src/nsHTMLFontElement.cpp
@@ -43,16 +43,17 @@
 #include "nsGenericHTMLElement.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsPresContext.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 #include "nsIDocument.h"
 #include "nsAlgorithm.h"
+#include "nsContentUtils.h"
 
 using namespace mozilla;
 
 class nsHTMLFontElement : public nsGenericHTMLElement,
                           public nsIDOMHTMLFontElement
 {
 public:
   nsHTMLFontElement(already_AddRefed<nsINodeInfo> aNodeInfo);
@@ -111,71 +112,31 @@ NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLA
 
 NS_IMPL_ELEMENT_CLONE(nsHTMLFontElement)
 
 
 NS_IMPL_STRING_ATTR(nsHTMLFontElement, Color, color)
 NS_IMPL_STRING_ATTR(nsHTMLFontElement, Face, face)
 NS_IMPL_STRING_ATTR(nsHTMLFontElement, Size, size)
 
-static const nsAttrValue::EnumTable kRelFontSizeTable[] = {
-  { "-10", -10 },
-  { "-9", -9 },
-  { "-8", -8 },
-  { "-7", -7 },
-  { "-6", -6 },
-  { "-5", -5 },
-  { "-4", -4 },
-  { "-3", -3 },
-  { "-2", -2 },
-  { "-1", -1 },
-  { "-0", 0 },
-  { "+0", 0 },
-  { "+1", 1 },
-  { "+2", 2 },
-  { "+3", 3 },
-  { "+4", 4 },
-  { "+5", 5 },
-  { "+6", 6 },
-  { "+7", 7 },
-  { "+8", 8 },
-  { "+9", 9 },
-  { "+10", 10 },
-  { 0 }
-};
-
 
 bool
 nsHTMLFontElement::ParseAttribute(PRInt32 aNamespaceID,
                                   nsIAtom* aAttribute,
                                   const nsAString& aValue,
                                   nsAttrValue& aResult)
 {
   if (aNamespaceID == kNameSpaceID_None) {
     if (aAttribute == nsGkAtoms::size) {
-      nsAutoString tmp(aValue);
-      tmp.CompressWhitespace(true, true);
-      PRUnichar ch = tmp.IsEmpty() ? 0 : tmp.First();
-      if ((ch == '+' || ch == '-')) {
-          if (aResult.ParseEnumValue(aValue, kRelFontSizeTable, false))
-              return true;
-
-          // truncate after digit, then parse it again.
-          PRUint32 i;
-          for (i = 1; i < tmp.Length(); i++) {
-              ch = tmp.CharAt(i);
-              if (!nsCRT::IsAsciiDigit(ch)) {
-                  tmp.Truncate(i);
-                  break;
-              }
-          }
-          return aResult.ParseEnumValue(tmp, kRelFontSizeTable, false);
+      PRInt32 size = nsContentUtils::ParseLegacyFontSize(aValue);
+      if (size) {
+        aResult.SetTo(size, &aValue);
+        return true;
       }
-
-      return aResult.ParseIntValue(aValue);
+      return false;
     }
     if (aAttribute == nsGkAtoms::pointSize ||
         aAttribute == nsGkAtoms::fontWeight) {
       return aResult.ParseIntValue(aValue);
     }
     if (aAttribute == nsGkAtoms::color) {
       return aResult.ParseColor(aValue);
     }
@@ -202,30 +163,20 @@ MapAttributesIntoRule(const nsMappedAttr
 
     // pointSize: int
     nsCSSValue* fontSize = aData->ValueForFontSize();
     if (fontSize->GetUnit() == eCSSUnit_Null) {
       const nsAttrValue* value = aAttributes->GetAttr(nsGkAtoms::pointSize);
       if (value && value->Type() == nsAttrValue::eInteger)
         fontSize->SetFloatValue((float)value->GetIntegerValue(), eCSSUnit_Point);
       else {
-        // size: int, enum , 
+        // size: int
         value = aAttributes->GetAttr(nsGkAtoms::size);
-        if (value) {
-          nsAttrValue::ValueType unit = value->Type();
-          if (unit == nsAttrValue::eInteger || unit == nsAttrValue::eEnum) { 
-            PRInt32 size;
-            if (unit == nsAttrValue::eEnum) // int (+/-)
-              size = value->GetEnumValue() + 3;
-            else
-              size = value->GetIntegerValue();
-
-            size = clamped(size, 1, 7);
-            fontSize->SetIntValue(size, eCSSUnit_Enumerated);
-          }
+        if (value && value->Type() == nsAttrValue::eInteger) {
+          fontSize->SetIntValue(value->GetIntegerValue(), eCSSUnit_Enumerated);
         }
       }
     }
 
     // fontWeight: int
     nsCSSValue* fontWeight = aData->ValueForFontWeight();
     if (fontWeight->GetUnit() == eCSSUnit_Null) {
       const nsAttrValue* value = aAttributes->GetAttr(nsGkAtoms::fontWeight);
--- a/content/html/content/test/Makefile.in
+++ b/content/html/content/test/Makefile.in
@@ -296,16 +296,17 @@ include $(topsrcdir)/config/rules.mk
 		file_fullscreen-svg-element.html \
 		test_li_attributes_reflection.html \
 		test_ol_attributes_reflection.html \
 		test_bug651956.html \
 		test_bug694503.html \
 		test_object_plugin_nav.html \
 		test_bug742030.html \
 		test_bug742549.html \
+		test_bug745685.html \
 		$(NULL)
 
 _BROWSER_TEST_FILES = \
 		browser_bug649778.js \
 		file_bug649778.html \
 		file_bug649778.html^headers^ \
 		$(NULL)
 
new file mode 100644
--- /dev/null
+++ b/content/html/content/test/test_bug745685.html
@@ -0,0 +1,105 @@
+<!doctype html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=745685
+-->
+<title>Test for Bug 745685</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=745685">Mozilla Bug 745685</a>
+<font>Test text</font>
+<font size=1>1</font>
+<font size=2>2</font>
+<font size=3>3</font>
+<font size=4>4</font>
+<font size=5>5</font>
+<font size=6>6</font>
+<font size=7>7</font>
+<script>
+/** Test for Bug 745685 **/
+
+var referenceSizes = {};
+for (var i = 1; i <= 7; i++) {
+  referenceSizes[i] =
+    getComputedStyle(document.querySelector('[size="' + i + '"]'))
+    .fontSize;
+  if (i > 1) {
+    isnot(referenceSizes[i], referenceSizes[i - 1],
+          "Sanity check: different <font size>s give different .fontSize");
+  }
+}
+
+function testFontSize(input, expected) {
+  var font = document.querySelector("font");
+  font.setAttribute("size", input);
+  is(font.getAttribute("size"), input,
+     "Setting doesn't round-trip (.getAttribute)");
+  is(font.size, input,
+     "Setting doesn't round-trip (.size)");
+  is(getComputedStyle(font).fontSize, referenceSizes[expected],
+     'Incorrect size for "' + input + '" : expected the same as ' + expected);
+}
+
+function testFontSizes(input, expected) {
+  testFontSize(input, expected);
+  // Leading whitespace
+  testFontSize(" " + input, expected);
+  testFontSize("\t" + input, expected);
+  testFontSize("\n" + input, expected);
+  testFontSize("\f" + input, expected);
+  testFontSize("\r" + input, expected);
+  // Trailing garbage
+  testFontSize(input + "abcd", expected);
+  testFontSize(input + ".5", expected);
+  testFontSize(input + "e2", expected);
+}
+
+// Parse error
+testFontSizes("", 3);
+
+// No sign
+testFontSizes("0", 1);
+testFontSizes("1", 1);
+testFontSizes("2", 2);
+testFontSizes("3", 3);
+testFontSizes("4", 4);
+testFontSizes("5", 5);
+testFontSizes("6", 6);
+testFontSizes("7", 7);
+testFontSizes("8", 7);
+testFontSizes("9", 7);
+testFontSizes("10", 7);
+testFontSizes("10000000000000000000000", 7);
+
+// Minus sign
+testFontSizes("-0", 3);
+testFontSizes("-1", 2);
+testFontSizes("-2", 1);
+testFontSizes("-3", 1);
+testFontSizes("-4", 1);
+testFontSizes("-5", 1);
+testFontSizes("-6", 1);
+testFontSizes("-7", 1);
+testFontSizes("-8", 1);
+testFontSizes("-9", 1);
+testFontSizes("-10", 1);
+testFontSizes("-10000000000000000000000", 1);
+
+// Plus sign
+testFontSizes("+0", 3);
+testFontSizes("+1", 4);
+testFontSizes("+2", 5);
+testFontSizes("+3", 6);
+testFontSizes("+4", 7);
+testFontSizes("+5", 7);
+testFontSizes("+6", 7);
+testFontSizes("+7", 7);
+testFontSizes("+8", 7);
+testFontSizes("+9", 7);
+testFontSizes("+10", 7);
+testFontSizes("+10000000000000000000000", 7);
+
+// Non-HTML5 whitespace
+testFontSize("\b1", 3);
+testFontSize("\v1", 3);
+testFontSize("\0u00a01", 3);
+</script>
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -2300,17 +2300,17 @@ private:
   nsRefPtr<nsHTMLDocument> mDoc;
   nsCOMPtr<nsIContent> mElement;
 };
 
 nsresult
 nsHTMLDocument::ChangeContentEditableCount(nsIContent *aElement,
                                            PRInt32 aChange)
 {
-  NS_ASSERTION(mContentEditableCount + aChange >= 0,
+  NS_ASSERTION(PRInt32(mContentEditableCount) + aChange >= 0,
                "Trying to decrement too much.");
 
   mContentEditableCount += aChange;
 
   nsContentUtils::AddScriptRunner(
     new DeferredContentEditableCountChangeEvent(this, aElement));
 
   return NS_OK;
@@ -2872,111 +2872,124 @@ static const char* const gBlocks[] = {
   "H4",
   "H5",
   "H6",
   "P",
   "PRE"
 };
 
 static bool
-ConvertToMidasInternalCommandInner(const nsAString & inCommandID,
-                                   const nsAString & inParam,
+ConvertToMidasInternalCommandInner(const nsAString& inCommandID,
+                                   const nsAString& inParam,
                                    nsACString& outCommandID,
                                    nsACString& outParam,
                                    bool& outIsBoolean,
                                    bool& outBooleanValue,
                                    bool aIgnoreParams)
 {
   NS_ConvertUTF16toUTF8 convertedCommandID(inCommandID);
 
   // Hack to support old boolean commands that were backwards (see bug 301490).
   bool invertBool = false;
   if (convertedCommandID.LowerCaseEqualsLiteral("usecss")) {
     convertedCommandID.Assign("styleWithCSS");
     invertBool = true;
-  }
-  else if (convertedCommandID.LowerCaseEqualsLiteral("readonly")) {
+  } else if (convertedCommandID.LowerCaseEqualsLiteral("readonly")) {
     convertedCommandID.Assign("contentReadOnly");
     invertBool = true;
   }
 
   PRUint32 i;
   bool found = false;
   for (i = 0; i < MidasCommandCount; ++i) {
     if (convertedCommandID.Equals(gMidasCommandTable[i].incomingCommandString,
                                   nsCaseInsensitiveCStringComparator())) {
       found = true;
       break;
     }
   }
 
-  if (found) {
-    // set outCommandID (what we use internally)
-    outCommandID.Assign(gMidasCommandTable[i].internalCommandString);
-
-    // set outParam & outIsBoolean based on flags from the table
-    outIsBoolean = gMidasCommandTable[i].convertToBoolean;
-
-    if (!aIgnoreParams) {
-      if (gMidasCommandTable[i].useNewParam) {
-        outParam.Assign(gMidasCommandTable[i].internalParamString);
-      }
-      else {
-        // handle checking of param passed in
-        if (outIsBoolean) {
-          // if this is a boolean value and it's not explicitly false
-          // (e.g. no value) we default to "true". For old backwards commands
-          // we invert the check (see bug 301490).
-          if (invertBool) {
-            outBooleanValue = inParam.LowerCaseEqualsLiteral("false");
-          }
-          else {
-            outBooleanValue = !inParam.LowerCaseEqualsLiteral("false");
-          }
-          outParam.Truncate();
-        }
-        else {
-          // check to see if we need to convert the parameter
-          if (outCommandID.EqualsLiteral("cmd_paragraphState")) {
-            const PRUnichar *start = inParam.BeginReading();
-            const PRUnichar *end = inParam.EndReading();
-            if (start != end && *start == '<' && *(end - 1) == '>') {
-              ++start;
-              --end;
-            }
-
-            NS_ConvertUTF16toUTF8 convertedParam(Substring(start, end));
-            PRUint32 j;
-            for (j = 0; j < ArrayLength(gBlocks); ++j) {
-              if (convertedParam.Equals(gBlocks[j],
-                                        nsCaseInsensitiveCStringComparator())) {
-                outParam.Assign(gBlocks[j]);
-                break;
-              }
-            }
-
-            if (j == ArrayLength(gBlocks)) {
-              outParam.Truncate();
-            }
-          }
-          else {
-            CopyUTF16toUTF8(inParam, outParam);
-          }
-        }
-      }
-    }
-  } // end else for useNewParam (do convert existing param)
-  else {
+  if (!found) {
     // reset results if the command is not found in our table
     outCommandID.SetLength(0);
     outParam.SetLength(0);
     outIsBoolean = false;
+    return false;
   }
 
-  return found;
+  // set outCommandID (what we use internally)
+  outCommandID.Assign(gMidasCommandTable[i].internalCommandString);
+
+  // set outParam & outIsBoolean based on flags from the table
+  outIsBoolean = gMidasCommandTable[i].convertToBoolean;
+
+  if (aIgnoreParams) {
+    // No further work to do
+    return true;
+  }
+
+  if (gMidasCommandTable[i].useNewParam) {
+    // Just have to copy it, no checking
+    outParam.Assign(gMidasCommandTable[i].internalParamString);
+    return true;
+  }
+
+  // handle checking of param passed in
+  if (outIsBoolean) {
+    // If this is a boolean value and it's not explicitly false (e.g. no value)
+    // we default to "true". For old backwards commands we invert the check (see
+    // bug 301490).
+    if (invertBool) {
+      outBooleanValue = inParam.LowerCaseEqualsLiteral("false");
+    } else {
+      outBooleanValue = !inParam.LowerCaseEqualsLiteral("false");
+    }
+    outParam.Truncate();
+
+    return true;
+  }
+
+  // String parameter -- see if we need to convert it (necessary for
+  // cmd_paragraphState and cmd_fontSize)
+  if (outCommandID.EqualsLiteral("cmd_paragraphState")) {
+    const PRUnichar* start = inParam.BeginReading();
+    const PRUnichar* end = inParam.EndReading();
+    if (start != end && *start == '<' && *(end - 1) == '>') {
+      ++start;
+      --end;
+    }
+
+    NS_ConvertUTF16toUTF8 convertedParam(Substring(start, end));
+    PRUint32 j;
+    for (j = 0; j < ArrayLength(gBlocks); ++j) {
+      if (convertedParam.Equals(gBlocks[j],
+                                nsCaseInsensitiveCStringComparator())) {
+        outParam.Assign(gBlocks[j]);
+        break;
+      }
+    }
+
+    if (j == ArrayLength(gBlocks)) {
+      outParam.Truncate();
+    }
+  } else if (outCommandID.EqualsLiteral("cmd_fontSize")) {
+    // Per editing spec as of April 23, 2012, we need to reject the value if
+    // it's not a valid floating-point number surrounded by optional whitespace.
+    // Otherwise, we parse it as a legacy font size.  For now, we just parse as
+    // a legacy font size regardless (matching WebKit) -- bug 747879.
+    outParam.Truncate();
+    PRInt32 size = nsContentUtils::ParseLegacyFontSize(inParam);
+    if (size) {
+      outParam.AppendInt(size);
+    }
+  } else {
+    CopyUTF16toUTF8(inParam, outParam);
+  }
+
+  return true;
 }
 
 static bool
 ConvertToMidasInternalCommand(const nsAString & inCommandID,
                               const nsAString & inParam,
                               nsACString& outCommandID,
                               nsACString& outParam,
                               bool& outIsBoolean,
@@ -3098,17 +3111,18 @@ nsHTMLDocument::ExecCommand(const nsAStr
     return NS_ERROR_FAILURE;
 
   nsCAutoString cmdToDispatch, paramStr;
   bool isBool, boolVal;
   if (!ConvertToMidasInternalCommand(commandID, value,
                                      cmdToDispatch, paramStr, isBool, boolVal))
     return NS_OK;
 
-  if (cmdToDispatch.EqualsLiteral("cmd_paragraphState") && paramStr.IsEmpty()) {
+  if ((cmdToDispatch.EqualsLiteral("cmd_paragraphState") ||
+       cmdToDispatch.EqualsLiteral("cmd_fontSize")) && paramStr.IsEmpty()) {
     // Invalid value
     return NS_OK;
   }
 
   if (!isBool && paramStr.IsEmpty()) {
     rv = cmdMgr->DoCommand(cmdToDispatch.get(), nsnull, window);
   } else {
     // we have a command that requires a parameter, create params
--- a/content/media/nsMediaCache.cpp
+++ b/content/media/nsMediaCache.cpp
@@ -44,17 +44,16 @@
 #include "nsDirectoryServiceDefs.h"
 #include "nsXULAppAPI.h"
 #include "nsNetUtil.h"
 #include "prio.h"
 #include "nsThreadUtils.h"
 #include "MediaResource.h"
 #include "nsMathUtils.h"
 #include "prlog.h"
-#include "nsIPrivateBrowsingService.h"
 #include "mozilla/Preferences.h"
 #include "FileBlockCache.h"
 
 using namespace mozilla;
 
 #ifdef PR_LOGGING
 PRLogModuleInfo* gMediaCacheLog;
 #define LOG(type, msg) PR_LOG(gMediaCacheLog, type, msg)
@@ -118,17 +117,17 @@ void nsMediaCacheFlusher::Init()
   }
 
   gMediaCacheFlusher = new nsMediaCacheFlusher();
   NS_ADDREF(gMediaCacheFlusher);
 
   nsCOMPtr<nsIObserverService> observerService =
     mozilla::services::GetObserverService();
   if (observerService) {
-    observerService->AddObserver(gMediaCacheFlusher, NS_PRIVATE_BROWSING_SWITCH_TOPIC, true);
+    observerService->AddObserver(gMediaCacheFlusher, "last-pb-context-exited", true);
   }
 }
 
 class nsMediaCache {
 public:
   friend class nsMediaCacheStream::BlockList;
   typedef nsMediaCacheStream::BlockList BlockList;
   enum {
@@ -369,18 +368,17 @@ protected:
 #ifdef DEBUG
   bool            mInUpdate;
 #endif
 };
 
 NS_IMETHODIMP
 nsMediaCacheFlusher::Observe(nsISupports *aSubject, char const *aTopic, PRUnichar const *aData)
 {
-  if (strcmp(aTopic, NS_PRIVATE_BROWSING_SWITCH_TOPIC) == 0 &&
-      NS_LITERAL_STRING(NS_PRIVATE_BROWSING_LEAVE).Equals(aData)) {
+  if (strcmp(aTopic, "last-pb-context-exited") == 0) {
     nsMediaCache::Flush();
   }
   return NS_OK;
 }
 
 void nsMediaCacheStream::BlockList::AddFirstBlock(PRInt32 aBlock)
 {
   NS_ASSERTION(!mEntries.GetEntry(aBlock), "Block already in list");
--- a/content/xbl/src/nsXBLBinding.cpp
+++ b/content/xbl/src/nsXBLBinding.cpp
@@ -250,20 +250,20 @@ nsXBLJSClass::Destroy()
 
   return 0;
 }
 
 // Implementation /////////////////////////////////////////////////////////////////
 
 // Constructors/Destructors
 nsXBLBinding::nsXBLBinding(nsXBLPrototypeBinding* aBinding)
-  : mPrototypeBinding(aBinding),
-    mInsertionPointTable(nsnull),
-    mIsStyleBinding(true),
-    mMarkedForDeath(false)
+  : mIsStyleBinding(true),
+    mMarkedForDeath(false),
+    mPrototypeBinding(aBinding),
+    mInsertionPointTable(nsnull)
 {
   NS_ASSERTION(mPrototypeBinding, "Must have a prototype binding!");
   // Grab a ref to the document info so the prototype binding won't die
   NS_ADDREF(mPrototypeBinding->XBLDocumentInfo());
 }
 
 
 nsXBLBinding::~nsXBLBinding(void)
--- a/content/xbl/src/nsXBLBinding.h
+++ b/content/xbl/src/nsXBLBinding.h
@@ -151,22 +151,22 @@ public:
   bool AllowScripts();  // XXX make const
 
   void RemoveInsertionParent(nsIContent* aParent);
   bool HasInsertionParent(nsIContent* aParent);
 
 // MEMBER VARIABLES
 protected:
 
+  bool mIsStyleBinding;
+  bool mMarkedForDeath;
+
   nsXBLPrototypeBinding* mPrototypeBinding; // Weak, but we're holding a ref to the docinfo
   nsCOMPtr<nsIContent> mContent; // Strong. Our anonymous content stays around with us.
   nsRefPtr<nsXBLBinding> mNextBinding; // Strong. The derived binding owns the base class bindings.
   
   nsIContent* mBoundElement; // [WEAK] We have a reference, but we don't own it.
   
   // A hash from nsIContent* -> (a sorted array of nsXBLInsertionPoint)
   nsClassHashtable<nsISupportsHashKey, nsInsertionPointList>* mInsertionPointTable;
-
-  bool mIsStyleBinding;
-  bool mMarkedForDeath;
 };
 
 #endif // nsXBLBinding_h_
--- a/docshell/base/Makefile.in
+++ b/docshell/base/Makefile.in
@@ -78,16 +78,17 @@ XPIDLSRCS = \
   nsIURIFixup.idl \
   nsIEditorDocShell.idl \
   nsIWebPageDescriptor.idl \
   nsIDownloadHistory.idl \
   nsILoadContext.idl \
   nsIRefreshURI.idl \
   nsIContentViewerContainer.idl \
   nsIDocumentLoaderFactory.idl \
+  nsIPrivacyTransitionObserver.idl \
   $(NULL)
 
 EXPORTS = \
   nsDocShellLoadTypes.h \
   nsILinkHandler.h \
   nsIWebShellServices.h \
   $(NULL)
 
@@ -109,16 +110,18 @@ CPPSRCS = \
   nsAboutRedirector.cpp \
   nsDownloadHistory.cpp \
   $(NULL)
 
 # we don't want the shared lib, but we want to force the creation of a
 # static lib.
 FORCE_STATIC_LIB = 1
 
+include $(topsrcdir)/config/config.mk
+include $(topsrcdir)/ipc/chromium/chromium-config.mk
 include $(topsrcdir)/config/rules.mk
 
 LOCAL_INCLUDES += \
   -I$(srcdir)/../shistory/src \
   -I$(topsrcdir)/dom/base \
   -I$(topsrcdir)/layout/base \
   -I$(topsrcdir)/xpcom/ds \
   $(NULL)
--- a/docshell/base/nsDSURIContentListener.cpp
+++ b/docshell/base/nsDSURIContentListener.cpp
@@ -63,17 +63,18 @@ nsDSURIContentListener::nsDSURIContentLi
       mParentContentListener(nsnull)
 {
   static bool initializedPrefCache = false;
 
   // Set up a pref cache for sIgnoreXFrameOptions, if we haven't already.
   if (NS_UNLIKELY(!initializedPrefCache)) {
     // Lock the pref so that the user's changes to it, if any, are ignored.
     nsIPrefBranch *root = Preferences::GetRootBranch();
-    root->LockPref("b2g.ignoreXFrameOptions");
+    if (XRE_GetProcessType() != GeckoProcessType_Content)
+      root->LockPref("b2g.ignoreXFrameOptions");
 
     Preferences::AddBoolVarCache(&sIgnoreXFrameOptions, "b2g.ignoreXFrameOptions");
     initializedPrefCache = true;
   }
 }
 
 nsDSURIContentListener::~nsDSURIContentListener()
 {
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -36,16 +36,17 @@
  * use your version of this file under the terms of the MPL, indicate your
  * decision by deleting the provisions above and replace them with the notice
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
+#include "mozilla/dom/ContentChild.h"
 #include "mozilla/Util.h"
 
 #ifdef MOZ_LOGGING
 // so we can get logging even in release builds (but only for some things)
 #define FORCE_PR_LOG 1
 #endif
 
 #include "nsIBrowserDOMWindow.h"
@@ -101,16 +102,17 @@
 #include "nsWidgetsCID.h"
 #include "nsDOMJSUtils.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIView.h"
 #include "nsIViewManager.h"
 #include "nsIScriptChannel.h"
 #include "nsIOfflineCacheUpdate.h"
 #include "nsITimedChannel.h"
+#include "nsIPrivacyTransitionObserver.h"
 #include "nsCPrefetchService.h"
 #include "nsJSON.h"
 #include "IHistory.h"
 #include "mozilla/Services.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/AutoRestore.h"
 
@@ -710,25 +712,45 @@ ConvertLoadTypeToNavigationType(PRUint32
   }
 
   return result;
 }
 
 static nsISHEntry* GetRootSHEntry(nsISHEntry *entry);
 
 static void
+IncreasePrivateDocShellCount()
+{
+    gNumberOfPrivateDocShells++;
+    if (gNumberOfPrivateDocShells > 1 ||
+        XRE_GetProcessType() != GeckoProcessType_Content) {
+        return;
+    }
+
+    mozilla::dom::ContentChild* cc = mozilla::dom::ContentChild::GetSingleton();
+    cc->SendPrivateDocShellsExist(true);
+}
+
+static void
 DecreasePrivateDocShellCount()
 {
     MOZ_ASSERT(gNumberOfPrivateDocShells > 0);
     gNumberOfPrivateDocShells--;
     if (!gNumberOfPrivateDocShells)
     {
+        if (XRE_GetProcessType() == GeckoProcessType_Content) {
+            mozilla::dom::ContentChild* cc = mozilla::dom::ContentChild::GetSingleton();
+            cc->SendPrivateDocShellsExist(false);
+            return;
+        }
+
         nsCOMPtr<nsIObserverService> obsvc = mozilla::services::GetObserverService();
-        if (obsvc)
+        if (obsvc) {
             obsvc->NotifyObservers(nsnull, "last-pb-context-exited", nsnull);
+        }
     }
 }
 
 //*****************************************************************************
 //***    nsDocShell: Object Management
 //*****************************************************************************
 
 static PRUint64 gDocshellIDCounter = 0;
@@ -2015,33 +2037,57 @@ nsDocShell::GetUsePrivateBrowsing(bool* 
     
     *aUsePrivateBrowsing = mInPrivateBrowsing;
     return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDocShell::SetUsePrivateBrowsing(bool aUsePrivateBrowsing)
 {
-    if (aUsePrivateBrowsing != mInPrivateBrowsing) {
+    bool changed = aUsePrivateBrowsing != mInPrivateBrowsing;
+    if (changed) {
         mInPrivateBrowsing = aUsePrivateBrowsing;
         if (aUsePrivateBrowsing) {
-            gNumberOfPrivateDocShells++;
+            IncreasePrivateDocShellCount();
         } else {
             DecreasePrivateDocShellCount();
         }
     }
     
     PRInt32 count = mChildList.Count();
     for (PRInt32 i = 0; i < count; ++i) {
         nsCOMPtr<nsILoadContext> shell = do_QueryInterface(ChildAt(i));
         if (shell) {
             shell->SetUsePrivateBrowsing(aUsePrivateBrowsing);
         }
     }
-    return NS_OK;
+
+    if (changed) {
+        nsTObserverArray<nsWeakPtr>::ForwardIterator iter(mPrivacyObservers);
+        while (iter.HasMore()) {
+            nsWeakPtr ref = iter.GetNext();
+            nsCOMPtr<nsIPrivacyTransitionObserver> obs = do_QueryReferent(ref);
+            if (!obs) {
+                mPrivacyObservers.RemoveElement(ref);
+            } else {
+                obs->PrivateModeChanged(aUsePrivateBrowsing);
+            }
+        }
+    }
+    return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDocShell::AddWeakPrivacyTransitionObserver(nsIPrivacyTransitionObserver* aObserver)
+{
+    nsWeakPtr weakObs = do_GetWeakReference(aObserver);
+    if (!weakObs) {
+        return NS_ERROR_NOT_AVAILABLE;
+    }
+    return mPrivacyObservers.AppendElement(weakObs) ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP nsDocShell::GetAllowMetaRedirects(bool * aReturn)
 {
     NS_ENSURE_ARG_POINTER(aReturn);
 
     *aReturn = mAllowMetaRedirects;
     if (!mAllowMetaRedirects) {
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -842,16 +842,17 @@ protected:
 
     static nsIURIFixup *sURIFixup;
 
     nsRefPtr<nsDOMNavigationTiming> mTiming;
 
 private:
     nsCOMPtr<nsIAtom> mForcedCharset;
     nsCOMPtr<nsIAtom> mParentCharset;
+    nsTObserverArray<nsWeakPtr> mPrivacyObservers;
     PRInt32          mParentCharsetSource;
 
 #ifdef DEBUG
     // We're counting the number of |nsDocShells| to help find leaks
     static unsigned long gNumberOfDocShells;
 #endif /* DEBUG */
 
 public:
--- a/docshell/base/nsIDocShell.idl
+++ b/docshell/base/nsIDocShell.idl
@@ -66,18 +66,19 @@ interface nsIInputStream;
 interface nsIRequest;
 interface nsISHEntry;
 interface nsILayoutHistoryState;
 interface nsISecureBrowserUI;
 interface nsIDOMStorage;
 interface nsIPrincipal;
 interface nsIWebBrowserPrint;
 interface nsIVariant;
+interface nsIPrivacyTransitionObserver;
 
-[scriptable, uuid(c7325422-817e-4321-957a-c0bdd764941d)]
+[scriptable, uuid(6f60ac96-fa2c-41a5-92b4-29aaadbd7a7b)]
 interface nsIDocShell : nsISupports
 {
   /**
    * Loads a given URI.  This will give priority to loading the requested URI
    * in the object implementing	this interface.  If it can't be loaded here
    * however, the URL dispatcher will go through its normal process of content
    * loading.
    *
@@ -598,16 +599,22 @@ interface nsIDocShell : nsISupports
   attribute nsIAtom parentCharset;
 
   /*
    * In a child docshell, this is the source of parentCharset
    * @see nsIParser
    */
   attribute PRInt32 parentCharsetSource;
 
+  /**
+   * Add an observer to the list of parties to be notified when this docshell's
+   * private browsing status is changed. |obs| must support weak references.
+   */
+  void addWeakPrivacyTransitionObserver(in nsIPrivacyTransitionObserver obs);
+
   /*
    * Is this docshell a browser frame (i.e., does it correspond to an <iframe
    * mozbrowser>)?  The frameloader is responsible for setting this property
    * when it initializes the docshell.
    *
    * If so, this docshell should act like a chrome/content boundary for the
    * purposes of window.top and window.parent.
    *
new file mode 100644
--- /dev/null
+++ b/docshell/base/nsIPrivacyTransitionObserver.idl
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+
+[scriptable, function, uuid(b4b1449d-0ef0-47f5-b62e-adc57fd49702)]
+interface nsIPrivacyTransitionObserver : nsISupports
+{
+  void privateModeChanged(in bool enabled);
+};
--- a/docshell/test/Makefile.in
+++ b/docshell/test/Makefile.in
@@ -42,19 +42,23 @@ VPATH		= @srcdir@
 relativesrcdir  = docshell/test
 
 MODULE = test_docshell
 
 DIRS += chrome \
 	navigation \
 	$(NULL)
 
-XPCSHELL_TESTS = unit
+include $(DEPTH)/config/autoconf.mk
 
-include $(DEPTH)/config/autoconf.mk
+XPCSHELL_TESTS = unit
+# FIXME/bug 575918: out-of-process xpcshell is broken on OS X
+ifneq ($(OS_ARCH),Darwin)
+XPCSHELL_TESTS += unit_ipc
+endif
 
 ifneq (mobile,$(MOZ_BUILD_APP))
 	DIRS += browser
 endif
 
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES = \
new file mode 100644
--- /dev/null
+++ b/docshell/test/unit/test_pb_notification.js
@@ -0,0 +1,23 @@
+if (typeof Cc === "undefined")
+  Cc = Components.classes;
+if (typeof Ci === "undefined")
+  Ci = Components.interfaces;
+
+function destroy_transient_docshell() {
+  var docshell = Cc["@mozilla.org/docshell;1"].createInstance(Ci.nsIDocShell);
+  docshell.QueryInterface(Ci.nsILoadContext).usePrivateBrowsing = true;
+  do_test_pending();
+  do_timeout(0, Components.utils.forceGC);
+}
+
+function run_test() {
+  var obs = {
+    observe: function(aSubject, aTopic, aData) {
+      do_check_eq(aTopic, "last-pb-context-exited");
+      do_test_finished();
+    }
+  };
+  var os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
+  os.addObserver(obs, "last-pb-context-exited", false);
+  destroy_transient_docshell();
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/docshell/test/unit/test_privacy_transition.js
@@ -0,0 +1,23 @@
+var gNotifications = 0;
+
+var observer = {
+  QueryInterface: function(iid) {
+    if (Ci.nsIPrivacyTransitionObserver.equals(iid) ||
+        Ci.nsISupportsWeakReference.equals(iid) ||
+        Ci.nsISupports.equals(iid))
+      return this;
+    throw Cr.NS_ERROR_NO_INTERFACE;
+  },
+  
+  privateModeChanged: function(enabled) {
+    gNotifications++;
+  }
+}
+
+function run_test() {
+  var docshell = Cc["@mozilla.org/docshell;1"].createInstance(Ci.nsIDocShell);
+  docshell.addWeakPrivacyTransitionObserver(observer);
+  docshell.QueryInterface(Ci.nsILoadContext).usePrivateBrowsing = true;
+  docshell.QueryInterface(Ci.nsILoadContext).usePrivateBrowsing = false;
+  do_check_eq(gNotifications, 2);
+}
\ No newline at end of file
--- a/docshell/test/unit/xpcshell.ini
+++ b/docshell/test/unit/xpcshell.ini
@@ -1,7 +1,9 @@
 [DEFAULT]
 head = head_docshell.js
 tail = 
 
 [test_bug414201_jfif.js]
 [test_bug442584.js]
 [test_nsIDownloadHistory.js]
+[test_pb_notification.js]
+[test_privacy_transition.js]
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/docshell/test/unit_ipc/test_pb_notification_ipc.js
@@ -0,0 +1,20 @@
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+function run_test() {
+  var notifications = 0;
+  var obs = {
+    observe: function(aSubject, aTopic, aData) {
+      do_check_eq(aTopic, "last-pb-context-exited");
+      notifications++;
+    }
+  };
+  var os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
+  os.addObserver(obs, "last-pb-context-exited", false);
+ 
+  run_test_in_child("../unit/test_pb_notification.js",
+                    function() {
+                      do_check_eq(notifications, 1);
+                      do_test_finished();
+                    });
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/docshell/test/unit_ipc/xpcshell.ini
@@ -0,0 +1,5 @@
+[DEFAULT]
+head =
+tail =
+
+[test_pb_notification_ipc.js]
\ No newline at end of file
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -93,16 +93,17 @@
 #include "nsIDOMOfflineResourceList.h"
 #include "nsIArray.h"
 #include "nsIContent.h"
 #include "nsIIDBFactory.h"
 #include "nsFrameMessageManager.h"
 #include "mozilla/TimeStamp.h"
 #include "nsIDOMTouchEvent.h"
 #include "nsIInlineEventHandlers.h"
+#include "nsWrapperCacheInlines.h"
 
 // JS includes
 #include "jsapi.h"
 
 #define DEFAULT_HOME_PAGE "www.mozilla.org"
 #define PREF_BROWSER_STARTUP_HOMEPAGE "browser.startup.homepage"
 
 // Amount of time allowed between alert/prompt/confirm before enabling
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -183,19 +183,21 @@ class CGList(CGThing):
         CGThing.__init__(self)
         self.children = children
         self.joiner = joiner
     def append(self, child):
         self.children.append(child)
     def prepend(self, child):
         self.children.insert(0, child)
     def declare(self):
-        return self.joiner.join([child.declare() for child in self.children])
+        return self.joiner.join([child.declare() for child in self.children
+                                 if child is not None])
     def define(self):
-        return self.joiner.join([child.define() for child in self.children])
+        return self.joiner.join([child.define() for child in self.children
+                                 if child is not None])
 
 class CGGeneric(CGThing):
     """
     A class that spits out a fixed string into the codegen.  Can spit out a
     separate string for the declaration too.
     """
     def __init__(self, define="", declare=""):
         self.declareText = declare
@@ -232,30 +234,43 @@ class CGIndenter(CGThing):
             return ""
 
 class CGWrapper(CGThing):
     """
     Generic CGThing that wraps other CGThings with pre and post text.
     """
     def __init__(self, child, pre="", post="", declarePre=None,
                  declarePost=None, definePre=None, definePost=None,
-                 declareOnly=False):
+                 declareOnly=False, reindent=False):
         CGThing.__init__(self)
         self.child = child
         self.declarePre = declarePre or pre
         self.declarePost = declarePost or post
         self.definePre = definePre or pre
         self.definePost = definePost or post
         self.declareOnly = declareOnly
+        self.reindent = reindent
     def declare(self):
-        return self.declarePre + self.child.declare() + self.declarePost
+        decl = self.child.declare()
+        if self.reindent:
+            # We don't use lineStartDetector because we don't want to
+            # insert whitespace at the beginning of our _first_ line.
+            decl = stripTrailingWhitespace(
+                decl.replace("\n", "\n" + (" " * len(self.declarePre))))
+        return self.declarePre + decl + self.declarePost
     def define(self):
         if self.declareOnly:
             return ''
-        return self.definePre + self.child.define() + self.definePost
+        defn = self.child.define()
+        if self.reindent:
+            # We don't use lineStartDetector because we don't want to
+            # insert whitespace at the beginning of our _first_ line.
+            defn = stripTrailingWhitespace(
+                defn.replace("\n", "\n" + (" " * len(self.definePre))))
+        return self.definePre + defn + self.definePost
 
 class CGNamespace(CGWrapper):
     def __init__(self, namespace, child, declareOnly=False):
         pre = "namespace %s {\n" % namespace
         post = "} // namespace %s\n" % namespace
         CGWrapper.__init__(self, child, pre=pre, post=post,
                            declareOnly=declareOnly)
     @staticmethod
@@ -805,55 +820,64 @@ class CGCreateInterfaceObjectsMethod(CGA
 
         idsToInit = []
         for var in self.properties.arrayNames():
             props = getattr(self.properties, var)
             if props.hasNonChromeOnly():
                 idsToInit.append(props.variableName(False))
             if props.hasChromeOnly() and not self.descriptor.workers:
                 idsToInit.append(props.variableName(True))
-        initIds = ""
         if len(idsToInit) > 0:
-            init = ' ||\n       '.join(["!InitIds(aCx, %s, %s_ids)" % (varname, varname)
-                                        for varname in idsToInit])
+            initIds = CGList(
+                [CGGeneric("!InitIds(aCx, %s, %s_ids)" % (varname, varname)) for
+                 varname in idsToInit], ' ||\n')
             if len(idsToInit) > 1:
-                init = '(' + init + ')'
-            initIds = ("  if (%s_ids[0] == JSID_VOID &&\n" +
-                       "      %s) {\n" +
-                       "    %s_ids[0] = JSID_VOID;\n"
-                       "    return NULL;\n"
-                       "  }\n\n") % (idsToInit[0], init, idsToInit[0])
+                initIds = CGWrapper(initIds, pre="(", post=")", reindent=True)
+            initIds = CGList(
+                [CGGeneric("%s_ids[0] == JSID_VOID &&" % idsToInit[0]), initIds],
+                "\n")
+            initIds = CGWrapper(initIds, pre="if (", post=") {", reindent=True)
+            initIds = CGList(
+                [initIds,
+                 CGGeneric(("  %s_ids[0] = JSID_VOID;\n"
+                            "  return NULL;") % idsToInit[0]),
+                 CGGeneric("}")],
+                "\n")
+        else:
+            initIds = None
             
-        getParentProto = ("  JSObject* parentProto = %s;\n" +
-                          "  if (!parentProto) {\n" +
-                          "    return NULL;\n" +
-                          "  }") % getParentProto
-
-        call = """return bindings::CreateInterfaceObjects(aCx, aGlobal, parentProto,
-                                          %s, %s,
-                                          %%(methods)s, %%(attrs)s, %%(consts)s, %%(staticMethods)s,
-                                          %s);""" % (
+        getParentProto = ("JSObject* parentProto = %s;\n"
+                          "if (!parentProto) {\n"
+                          "  return NULL;\n"
+                          "}") % getParentProto
+
+        call = CGGeneric(("return bindings::CreateInterfaceObjects(aCx, aGlobal, parentProto,\n"
+                          "                                        %s, %s,\n"
+                          "                                        %%(methods)s, %%(attrs)s, %%(consts)s, %%(staticMethods)s,\n"
+                          "                                        %s);") % (
             "&PrototypeClass" if needInterfacePrototypeObject else "NULL",
             "&InterfaceObjectClass" if needInterfaceObject else "NULL",
-            '"' + self.descriptor.interface.identifier.name + '"' if needInterfaceObject else "NULL")
+            '"' + self.descriptor.interface.identifier.name + '"' if needInterfaceObject else "NULL"))
 
         if self.properties.hasChromeOnly():
             if self.descriptor.workers:
                 accessCheck = "mozilla::dom::workers::GetWorkerPrivateFromContext(aCx)->IsChromeWorker()"
             else:
                 accessCheck = "xpc::AccessCheck::isChrome(js::GetObjectCompartment(aGlobal))"
-            chrome = """
-
-  if (%s) {
-    %s
-  }
-""" % (accessCheck, call.replace("\n  ", "\n    ") % self.properties.variableNames(True))
+            accessCheck = "if (" + accessCheck + ") {\n"
+            chrome = CGWrapper(CGGeneric((CGIndenter(call).define() % self.properties.variableNames(True))),
+                               pre=accessCheck, post="\n}")
         else:
-            chrome = ""
-        return initIds + getParentProto + chrome + "\n  " + call % self.properties.variableNames(False)
+            chrome = None
+
+        functionBody = CGList(
+            [CGGeneric(getParentProto), initIds, chrome,
+             CGGeneric(call.define() % self.properties.variableNames(False))],
+            "\n\n")
+        return CGIndenter(functionBody).define()
 
 class CGGetPerInterfaceObject(CGAbstractMethod):
     """
     A method for getting a per-interface object (a prototype object or interface
     constructor object).
     """
     def __init__(self, descriptor, name, idPrefix=""):
         args = [Argument('JSContext*', 'aCx'), Argument('JSObject*', 'aGlobal')]
@@ -907,17 +931,17 @@ def CheckPref(descriptor, scopeName, var
     """
     if not descriptor.prefable:
         return ""
     if wrapperCache:
        wrapperCache = "%s->ClearIsDOMBinding();\n" % (wrapperCache)
     else:
         wrapperCache = ""
     return """
-  if (!%s->ParisBindingsEnabled()) {
+  if (!%s->ExperimentalBindingsEnabled()) {
 %s    %s = false;
     return %s;
   }
 """ % (scopeName, wrapperCache, varName, retval)
 
 class CGDefineDOMInterfaceMethod(CGAbstractMethod):
     """
     A method for resolve hooks to try to lazily define the interface object for
@@ -1214,18 +1238,18 @@ def getArgumentConversionTemplate(type, 
         # detect them?
 
         # For nullable strings that are not otherwise annotated, null
         # and undefined become null strings.
         if type.nullable():
             nullBehavior = "eNull"
             undefinedBehavior = "eNull"
         else:
-            nullBehavior = "eDefaultNullBehavior"
-            undefinedBehavior = "eDefaultUndefinedBehavior"
+            nullBehavior = "eStringify"
+            undefinedBehavior = "eStringify"
 
         return (
             "  xpc_qsDOMString ${name}(cx, ${argVal}, ${argPtr},\n"
             "                       xpc_qsDOMString::%s,\n"
             "                       xpc_qsDOMString::%s);\n"
             "  if (!${name}.IsValid()) {\n"
             "    return false;\n"
             "  }\n" % (nullBehavior, undefinedBehavior))
@@ -1483,21 +1507,25 @@ def getWrapTemplateForTypeImpl(type, res
   }
   ${jsvalRef} = JS::StringValue(result_str);
   return true;""" % { "result" : result,
                       "strings" : type.inner.identifier.name + "::strings" }
 
     if type.isCallback() and not type.isInterface():
         # XXXbz we're going to assume that callback types are always
         # nullable and always have [TreatNonCallableAsNull] for now.
+        # See comments in WrapNewBindingObject explaining why we need
+        # to wrap here.
         return """
   ${jsvalRef} = JS::ObjectOrNullValue(%s);
   return JS_WrapValue(cx, ${jsvalPtr});""" % result
 
     if type.tag() == IDLType.Tags.any:
+        # See comments in WrapNewBindingObject explaining why we need
+        # to wrap here.
         return """
   ${jsvalRef} = %s;\n
   return JS_WrapValue(cx, ${jsvalPtr});""" % result
 
     if not type.isPrimitive():
         raise TypeError("Need to learn to wrap %s" % type)
 
     if type.nullable():
@@ -1731,22 +1759,22 @@ class CGCase(CGList):
 
     Takes three constructor arguments: an expression, a CGThing for
     the body (allowed to be None if there is no body), and an optional
     argument (defaulting to False) for whether to fall through.
     """
     def __init__(self, expression, body, fallThrough=False):
         CGList.__init__(self, [], "\n")
         self.append(CGWrapper(CGGeneric(expression), pre="case ", post=": {"))
-        if body is not None:
-            self.append(CGIndenter(body))
+        bodyList = CGList([body], "\n")
         if fallThrough:
-            self.append(CGIndenter(CGGeneric("/* Fall through */")))
+            bodyList.append(CGGeneric("/* Fall through */"))
         else:
-            self.append(CGIndenter(CGGeneric("break;")))
+            bodyList.append(CGGeneric("break;"))
+        self.append(CGIndenter(bodyList));
         self.append(CGGeneric("}"))
 
 class CGMethodCall(CGThing):
     """
     A class to generate selection of a method signature from a set of
     signatures and generation of a call to that signature.
     """
     def __init__(self, argsPre, nativeMethodName, static, descriptor, method,
--- a/dom/bindings/Nullable.h
+++ b/dom/bindings/Nullable.h
@@ -31,16 +31,24 @@ public:
     , mIsNull(false)
   {}
 
   void SetValue(T aValue) {
     mValue = aValue;
     mIsNull = false;
   }
 
+  // For cases when |T| is some type with nontrivial copy behavior, we may want
+  // to get a reference to our internal copy of T and work with it directly
+  // instead of relying on the copying version of SetValue().
+  T& SetValue() {
+    mIsNull = false;
+    return mValue;
+  }
+
   void SetNull() {
     mIsNull = true;
   }
 
   T Value() const {
     MOZ_ASSERT(!mIsNull);
     return mValue;
   }
--- a/dom/bindings/Utils.cpp
+++ b/dom/bindings/Utils.cpp
@@ -64,17 +64,18 @@ CreateInterfaceObject(JSContext* cx, JSO
 
 static JSObject*
 CreateInterfacePrototypeObject(JSContext* cx, JSObject* global,
                                JSObject* parentProto, JSClass* protoClass,
                                JSFunctionSpec* methods,
                                JSPropertySpec* properties,
                                ConstantSpec* constants)
 {
-  JSObject* ourProto = JS_NewObject(cx, protoClass, parentProto, global);
+  JSObject* ourProto = JS_NewObjectWithUniqueType(cx, protoClass, parentProto,
+                                                  global);
   if (!ourProto) {
     return NULL;
   }
 
   if (methods && !JS_DefineFunctions(cx, ourProto, methods)) {
     return NULL;
   }
 
--- a/dom/bindings/Utils.h
+++ b/dom/bindings/Utils.h
@@ -265,22 +265,22 @@ WrapNewBindingObject(JSContext* cx, JSOb
       // At this point, obj is null, so just return false.  We could
       // try to communicate triedToWrap to the caller, but in practice
       // callers seem to be testing JS_IsExceptionPending(cx) to
       // figure out whether WrapObject() threw instead.
       return false;
     }
   }
 
-  // Now make sure that |obj| is wrapped for the compartment of |scope|
-  // correctly.  That means entering the compartment of |scope|.
-  JSAutoEnterCompartment ac;
-  if (!ac.enter(cx, scope)) {
-    return false;
-  }
+  // When called via XrayWrapper, we end up here while running in the
+  // chrome compartment.  But the obj we have would be created in
+  // whatever the content compartment is.  So at this point we need to
+  // make sure it's correctly wrapped for the compartment of |scope|.
+  // cx should already be in the compartment of |scope| here.
+  MOZ_ASSERT(js::IsObjectInContextCompartment(scope, cx));
   *vp = JS::ObjectValue(*obj);
   return JS_WrapValue(cx, vp);
 }
 
 // Helper for smart pointers (nsAutoPtr/nsRefPtr/nsCOMPtr).
 template <template <class> class SmartPtr, class T>
 inline bool
 WrapNewBindingObject(JSContext* cx, JSObject* scope, const SmartPtr<T>& value,
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -814,10 +814,18 @@ ContentChild::RecvSetID(const PRUint64 &
 {
     if (mID != PRUint64(-1)) {
         NS_WARNING("Setting content child's ID twice?");
     }
     mID = id;
     return true;
 }
 
+bool
+ContentChild::RecvLastPrivateDocShellDestroyed()
+{
+    nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
+    obs->NotifyObservers(nsnull, "last-pb-context-exited", nsnull);
+    return true;
+}
+
 } // namespace dom
 } // namespace mozilla
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -165,16 +165,18 @@ public:
     virtual bool RecvActivateA11y();
 
     virtual bool RecvGarbageCollect();
     virtual bool RecvCycleCollect();
 
     virtual bool RecvAppInfo(const nsCString& version, const nsCString& buildID);
     virtual bool RecvSetID(const PRUint64 &id);
 
+    virtual bool RecvLastPrivateDocShellDestroyed();
+
 #ifdef ANDROID
     gfxIntSize GetScreenSize() { return mScreenSize; }
 #endif
 
     // Get the directory for IndexedDB files. We query the parent for this and
     // cache the value
     nsString &GetIndexedDBPath();
 
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -158,16 +158,17 @@ MemoryReportRequestParent::Recv__delete_
 }
 
 MemoryReportRequestParent::~MemoryReportRequestParent()
 {
     MOZ_COUNT_DTOR(MemoryReportRequestParent);
 }
 
 nsTArray<ContentParent*>* ContentParent::gContentParents;
+nsTArray<ContentParent*>* ContentParent::gPrivateContent;
 
 // The first content child has ID 1, so the chrome process can have ID 0.
 static PRUint64 gContentChildID = 1;
 
 ContentParent*
 ContentParent::GetNewOrUsed()
 {
     if (!gContentParents)
@@ -206,16 +207,17 @@ ContentParent::Init()
     nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
     if (obs) {
         obs->AddObserver(this, "xpcom-shutdown", false);
         obs->AddObserver(this, NS_IPC_IOSERVICE_SET_OFFLINE_TOPIC, false);
         obs->AddObserver(this, "child-memory-reporter-request", false);
         obs->AddObserver(this, "memory-pressure", false);
         obs->AddObserver(this, "child-gc-request", false);
         obs->AddObserver(this, "child-cc-request", false);
+        obs->AddObserver(this, "last-pb-context-exited", false);
 #ifdef ACCESSIBILITY
         obs->AddObserver(this, "a11y-init-or-shutdown", false);
 #endif
     }
     Preferences::AddStrongObserver(this, "");
     nsCOMPtr<nsIThreadInternal>
             threadInt(do_QueryInterface(NS_GetCurrentThread()));
     if (threadInt) {
@@ -303,16 +305,17 @@ ContentParent::ActorDestroy(ActorDestroy
     nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
     if (obs) {
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "xpcom-shutdown");
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "memory-pressure");
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "child-memory-reporter-request");
         obs->RemoveObserver(static_cast<nsIObserver*>(this), NS_IPC_IOSERVICE_SET_OFFLINE_TOPIC);
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "child-gc-request");
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "child-cc-request");
+        obs->RemoveObserver(static_cast<nsIObserver*>(this), "last-pb-context-exited");
 #ifdef ACCESSIBILITY
         obs->RemoveObserver(static_cast<nsIObserver*>(this), "a11y-init-or-shutdown");
 #endif
     }
 
     mMessageManager->Disconnect();
 
     // clear the child memory reporters
@@ -334,16 +337,24 @@ ContentParent::ActorDestroy(ActorDestroy
     if (gContentParents) {
         gContentParents->RemoveElement(this);
         if (!gContentParents->Length()) {
             delete gContentParents;
             gContentParents = NULL;
         }
     }
 
+    if (gPrivateContent) {
+        gPrivateContent->RemoveElement(this);
+        if (!gPrivateContent->Length()) {
+            delete gPrivateContent;
+            gPrivateContent = NULL;
+        }
+    }
+
     mIsAlive = false;
 
     if (obs) {
         nsRefPtr<nsHashPropertyBag> props = new nsHashPropertyBag();
         props->Init();
 
         if (AbnormalShutdown == why) {
             props->SetPropertyAsBool(NS_LITERAL_STRING("abnormal"), true);
@@ -718,16 +729,19 @@ ContentParent::Observe(nsISupports* aSub
         unused << SendPMemoryReportRequestConstructor();
     }
     else if (!strcmp(aTopic, "child-gc-request")){
         SendGarbageCollect();
     }
     else if (!strcmp(aTopic, "child-cc-request")){
         SendCycleCollect();
     }
+    else if (!strcmp(aTopic, "last-pb-context-exited")) {
+        unused << SendLastPrivateDocShellDestroyed();
+    }
 #ifdef ACCESSIBILITY
     // Make sure accessibility is running in content process when accessibility
     // gets initiated in chrome process.
     else if (aData && (*aData == '1') &&
              !strcmp(aTopic, "a11y-init-or-shutdown")) {
         unused << SendActivateA11y();
     }
 #endif
@@ -1229,10 +1243,29 @@ ContentParent::RecvScriptError(const nsS
                           aLineNumber, aColNumber, aFlags, aCategory.get());
   if (NS_FAILED(rv))
     return true;
 
   svc->LogMessage(msg);
   return true;
 }
 
+bool
+ContentParent::RecvPrivateDocShellsExist(const bool& aExist)
+{
+  if (!gPrivateContent)
+    gPrivateContent = new nsTArray<ContentParent*>;
+  if (aExist) {
+    gPrivateContent->AppendElement(this);
+  } else {
+    gPrivateContent->RemoveElement(this);
+    if (!gPrivateContent->Length()) {
+      nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
+      obs->NotifyObservers(nsnull, "last-pb-context-exited", nsnull);
+      delete gPrivateContent;
+      gPrivateContent = NULL;
+    }
+  }
+  return true;
+}
+
 } // namespace dom
 } // namespace mozilla
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -105,16 +105,17 @@ public:
     }
 
 protected:
     void OnChannelConnected(int32 pid);
     virtual void ActorDestroy(ActorDestroyReason why);
 
 private:
     static nsTArray<ContentParent*>* gContentParents;
+    static nsTArray<ContentParent*>* gPrivateContent;
 
     // Hide the raw constructor methods since we don't want client code
     // using them.
     using PContentParent::SendPBrowserConstructor;
     using PContentParent::SendPTestShellConstructor;
 
     ContentParent();
     virtual ~ContentParent();
@@ -217,16 +218,18 @@ private:
     virtual bool RecvScriptError(const nsString& aMessage,
                                  const nsString& aSourceName,
                                  const nsString& aSourceLine,
                                  const PRUint32& aLineNumber,
                                  const PRUint32& aColNumber,
                                  const PRUint32& aFlags,
                                  const nsCString& aCategory);
 
+    virtual bool RecvPrivateDocShellsExist(const bool& aExist);
+
     GeckoChildProcessHost* mSubprocess;
 
     PRInt32 mGeolocationWatchID;
     int mRunToCompletionDepth;
     bool mShouldCallUnblockChild;
 
     // This is a cache of all of the memory reporters
     // registered in the child process.  To update this, one
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -144,16 +144,19 @@ child:
      * Start accessibility engine in content process.
      */
     ActivateA11y();
 
     AppInfo(nsCString version, nsCString buildID);
 
     SetID(PRUint64 id);
 
+    // Notify child that last-pb-context-exited notification was observed
+    LastPrivateDocShellDestroyed();
+
 parent:
     PAudio(PRInt32 aNumChannels, PRInt32 aRate, PRInt32 aFormat);
 
     sync PCrashReporter(NativeThreadId tid, PRUint32 processType);
 
     PHal();
 
     PNecko();
@@ -221,15 +224,18 @@ parent:
         returns (PRUint32[] colors);
 
     sync GetIconForExtension(nsCString aFileExt, PRUint32 aIconSize)
         returns (PRUint8[] bits);
 
     sync GetShowPasswordSetting()
         returns (bool showPassword);
 
+    // Notify the parent of the presence or absence of private docshells
+    PrivateDocShellsExist(bool aExist);
+
 both:
      AsyncMessage(nsString aMessage, nsString aJSON);
 
 };
 
 }
 }
--- a/dom/plugins/base/nsNPAPIPlugin.cpp
+++ b/dom/plugins/base/nsNPAPIPlugin.cpp
@@ -49,17 +49,16 @@
 #include "jsfriendapi.h"
 
 #include "nsPluginHost.h"
 #include "nsNPAPIPlugin.h"
 #include "nsNPAPIPluginInstance.h"
 #include "nsNPAPIPluginStreamListener.h"
 #include "nsIServiceManager.h"
 #include "nsThreadUtils.h"
-#include "nsIPrivateBrowsingService.h"
 #include "mozilla/Preferences.h"
 
 #include "nsIPluginStreamListener.h"
 #include "nsPluginsDir.h"
 #include "nsPluginSafety.h"
 #include "nsPluginLogging.h"
 
 #include "nsIJSContextStack.h"
@@ -100,16 +99,18 @@
 #define INCL_DOS
 #define INCL_DOSERRORS
 #include <os2.h>
 #endif
 
 #include "nsJSNPRuntime.h"
 #include "nsIHttpAuthManager.h"
 #include "nsICookieService.h"
+#include "nsILoadContext.h"
+#include "nsIDocShell.h"
 
 #include "nsNetUtil.h"
 
 #include "mozilla/Mutex.h"
 #include "mozilla/PluginLibrary.h"
 using mozilla::PluginLibrary;
 
 #include "mozilla/PluginPRLibrary.h"
@@ -2130,21 +2131,22 @@ NPError NP_CALLBACK
     *(NPBool*)result = true;
 #else
     *(NPBool*)result = false;
 #endif
     return NPERR_NO_ERROR;
   }
 
   case NPNVprivateModeBool: {
-    nsCOMPtr<nsIPrivateBrowsingService> pbs = do_GetService(NS_PRIVATE_BROWSING_SERVICE_CONTRACTID);
-    if (pbs) {
-      bool enabled;
-      pbs->GetPrivateBrowsingEnabled(&enabled);
-      *(NPBool*)result = (NPBool)enabled;
+    nsCOMPtr<nsIDocument> doc = GetDocumentFromNPP(npp);
+    nsCOMPtr<nsPIDOMWindow> domwindow = do_QueryInterface(doc);
+    if (domwindow) {
+      nsCOMPtr<nsIDocShell> docShell = domwindow->GetDocShell();
+      nsCOMPtr<nsILoadContext> loadContext = do_QueryInterface(docShell);
+      *(NPBool*)result = (NPBool)(loadContext && loadContext->UsePrivateBrowsing());
       return NPERR_NO_ERROR;
     }
     return NPERR_GENERIC_ERROR;
   }
 
   case NPNVdocumentOrigin: {
     nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)npp->ndata;
     if (!inst) {
--- a/dom/plugins/base/nsNPAPIPluginInstance.cpp
+++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp
@@ -43,17 +43,16 @@
 #include "prenv.h"
 
 #include "nsNPAPIPluginInstance.h"
 #include "nsNPAPIPlugin.h"
 #include "nsNPAPIPluginStreamListener.h"
 #include "nsPluginHost.h"
 #include "nsPluginSafety.h"
 #include "nsPluginLogging.h"
-#include "nsIPrivateBrowsingService.h"
 #include "nsContentUtils.h"
 
 #include "nsIDocument.h"
 #include "nsIScriptGlobalObject.h"
 #include "nsIScriptContext.h"
 #include "nsDirectoryServiceDefs.h"
 #include "nsJSNPRuntime.h"
 #include "nsPluginStreamListenerPeer.h"
@@ -147,17 +146,17 @@ nsresult nsNPAPIPluginInstance::Initiali
   mOwner = aOwner;
 
   if (aMIMEType) {
     mMIMEType = (char*)PR_Malloc(PL_strlen(aMIMEType) + 1);
     if (mMIMEType) {
       PL_strcpy(mMIMEType, aMIMEType);
     }
   }
-
+  
   return Start();
 }
 
 nsresult nsNPAPIPluginInstance::Stop()
 {
   PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("nsNPAPIPluginInstance::Stop this=%p\n",this));
 
   // Make sure the plugin didn't leave popups enabled.
@@ -1138,45 +1137,37 @@ nsNPAPIPluginInstance::GetPluginAPIVersi
   NPPluginFuncs* pluginFunctions = mPlugin->PluginFuncs();
 
   *version = pluginFunctions->version;
 
   return NS_OK;
 }
 
 nsresult
-nsNPAPIPluginInstance::PrivateModeStateChanged()
+nsNPAPIPluginInstance::PrivateModeStateChanged(bool enabled)
 {
   if (RUNNING != mRunning)
     return NS_OK;
 
   PLUGIN_LOG(PLUGIN_LOG_NORMAL, ("nsNPAPIPluginInstance informing plugin of private mode state change this=%p\n",this));
 
   if (!mPlugin || !mPlugin->GetLibrary())
     return NS_ERROR_FAILURE;
 
   NPPluginFuncs* pluginFunctions = mPlugin->PluginFuncs();
 
-  if (pluginFunctions->setvalue) {
-    PluginDestructionGuard guard(this);
+  if (!pluginFunctions->setvalue)
+    return NS_ERROR_FAILURE;
+
+  PluginDestructionGuard guard(this);
     
-    nsCOMPtr<nsIPrivateBrowsingService> pbs = do_GetService(NS_PRIVATE_BROWSING_SERVICE_CONTRACTID);
-    if (pbs) {
-      bool pme = false;
-      nsresult rv = pbs->GetPrivateBrowsingEnabled(&pme);
-      if (NS_FAILED(rv))
-        return rv;
-
-      NPError error;
-      NPBool value = static_cast<NPBool>(pme);
-      NS_TRY_SAFE_CALL_RETURN(error, (*pluginFunctions->setvalue)(&mNPP, NPNVprivateModeBool, &value), this);
-      return (error == NPERR_NO_ERROR) ? NS_OK : NS_ERROR_FAILURE;
-    }
-  }
-  return NS_ERROR_FAILURE;
+  NPError error;
+  NPBool value = static_cast<NPBool>(enabled);
+  NS_TRY_SAFE_CALL_RETURN(error, (*pluginFunctions->setvalue)(&mNPP, NPNVprivateModeBool, &value), this);
+  return (error == NPERR_NO_ERROR) ? NS_OK : NS_ERROR_FAILURE;
 }
 
 class DelayUnscheduleEvent : public nsRunnable {
 public:
   nsRefPtr<nsNPAPIPluginInstance> mInstance;
   uint32_t mTimerID;
   DelayUnscheduleEvent(nsNPAPIPluginInstance* aInstance, uint32_t aTimerId)
     : mInstance(aInstance)
--- a/dom/plugins/base/nsNPAPIPluginInstance.h
+++ b/dom/plugins/base/nsNPAPIPluginInstance.h
@@ -199,17 +199,17 @@ public:
   // return is only valid when the plugin is not running
   mozilla::TimeStamp StopTime();
 
   // cache this NPAPI plugin
   nsresult SetCached(bool aCache);
 
   already_AddRefed<nsPIDOMWindow> GetDOMWindow();
 
-  nsresult PrivateModeStateChanged();
+  nsresult PrivateModeStateChanged(bool aEnabled);
 
   nsresult GetDOMElement(nsIDOMElement* *result);
 
   nsNPAPITimer* TimerWithID(uint32_t id, PRUint32* index);
   uint32_t      ScheduleTimer(uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
   void          UnscheduleTimer(uint32_t timerID);
   NPError       PopUpContextMenu(NPMenu* menu);
   NPBool        ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
--- a/dom/plugins/base/nsPluginHost.cpp
+++ b/dom/plugins/base/nsPluginHost.cpp
@@ -81,17 +81,16 @@
 #include "nsIDocument.h"
 #include "nsICachingChannel.h"
 #include "nsHashtable.h"
 #include "nsIProxyInfo.h"
 #include "nsPluginLogging.h"
 #include "nsIScriptChannel.h"
 #include "nsIBlocklistService.h"
 #include "nsVersionComparator.h"
-#include "nsIPrivateBrowsingService.h"
 #include "nsIObjectLoadingContent.h"
 #include "nsIWritablePropertyBag2.h"
 #include "nsPluginStreamListenerPeer.h"
 #include "mozilla/Preferences.h"
 
 #include "nsEnumeratorUtils.h"
 #include "nsXPCOM.h"
 #include "nsXPCOMCID.h"
@@ -354,17 +353,16 @@ nsPluginHost::nsPluginHost()
   mPluginsDisabled = Preferences::GetBool("plugin.disable", false);
 
   Preferences::AddStrongObserver(this, "plugin.disable");
 
   nsCOMPtr<nsIObserverService> obsService =
     mozilla::services::GetObserverService();
   if (obsService) {
     obsService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
-    obsService->AddObserver(this, NS_PRIVATE_BROWSING_SWITCH_TOPIC, false);
 #ifdef MOZ_WIDGET_ANDROID
     obsService->AddObserver(this, "application-foreground", false);
     obsService->AddObserver(this, "application-background", false);
 #endif
   }
 
 #ifdef PLUGIN_LOGGING
   nsPluginLogging::gNPNLog = PR_NewLogModule(NPN_LOG_NAME);
@@ -2692,29 +2690,30 @@ nsPluginHost::ReadPluginInfo()
   if (2 != reader.ParseLine(values, 2))
     return rv;
 
   // VersionLiteral
   if (PL_strcmp(values[0], "Version"))
     return rv;
 
   // kPluginRegistryVersion
-  PRInt32 vdiff = NS_CompareVersions(values[1], kPluginRegistryVersion);
+  PRInt32 vdiff = mozilla::CompareVersions(values[1], kPluginRegistryVersion);
+  mozilla::Version version(values[1]);
   // If this is a registry from some future version then don't attempt to read it
   if (vdiff > 0)
     return rv;
   // If this is a registry from before the minimum then don't attempt to read it
-  if (NS_CompareVersions(values[1], kMinimumRegistryVersion) < 0)
+  if (version < kMinimumRegistryVersion)
     return rv;
 
   // Registry v0.10 and upwards includes the plugin version field
-  bool regHasVersion = NS_CompareVersions(values[1], "0.10") >= 0;
+  bool regHasVersion = (version >= "0.10");
 
   // Registry v0.13 and upwards includes the architecture
-  if (NS_CompareVersions(values[1], "0.13") >= 0) {
+  if (version >= "0.13") {
     char* archValues[6];
     
     if (!reader.NextLine()) {
       return rv;
     }
     
     // ArchLiteral, Architecture
     if (2 != reader.ParseLine(archValues, 2)) {
@@ -2738,25 +2737,25 @@ nsPluginHost::ReadPluginInfo()
       
     // If this is a registry from a different architecture then don't attempt to read it
     if (PL_strcmp(archValues[1], arch.get())) {
       return rv;
     }
   }
   
   // Registry v0.13 and upwards includes the list of invalid plugins
-  bool hasInvalidPlugins = (NS_CompareVersions(values[1], "0.13") >= 0);
+  bool hasInvalidPlugins = (version >= "0.13");
 
   if (!ReadSectionHeader(reader, "PLUGINS"))
     return rv;
 
 #if defined(XP_MACOSX)
   bool hasFullPathInFileNameField = false;
 #else
-  bool hasFullPathInFileNameField = (NS_CompareVersions(values[1], "0.11") < 0);
+  bool hasFullPathInFileNameField = (version < "0.11");
 #endif
 
   while (reader.NextLine()) {
     const char *filename;
     const char *fullpath;
     nsCAutoString derivedFileName;
     
     if (hasInvalidPlugins && *reader.LinePtr() == '[') {
@@ -3289,31 +3288,16 @@ NS_IMETHODIMP nsPluginHost::Observe(nsIS
                                     const char *aTopic,
                                     const PRUnichar *someData)
 {
   if (!nsCRT::strcmp(NS_XPCOM_SHUTDOWN_OBSERVER_ID, aTopic)) {
     OnShutdown();
     UnloadPlugins();
     sInst->Release();
   }
-  if (!nsCRT::strcmp(NS_PRIVATE_BROWSING_SWITCH_TOPIC, aTopic)) {
-    // inform all active plugins of changed private mode state
-    for (PRUint32 i = 0; i < mInstances.Length(); i++) {
-      mInstances[i]->PrivateModeStateChanged();
-    }
-  }
-  if (!nsCRT::strcmp(NS_PREFBRANCH_PREFCHANGE_TOPIC_ID, aTopic)) {
-    mPluginsDisabled = Preferences::GetBool("plugin.disable", false);
-    // Unload or load plugins as needed
-    if (mPluginsDisabled) {
-      UnloadPlugins();
-    } else {
-      LoadPlugins();
-    }
-  }
 #ifdef MOZ_WIDGET_ANDROID
   if (!nsCRT::strcmp("application-background", aTopic)) {
     for(PRUint32 i = 0; i < mInstances.Length(); i++) {
       mInstances[i]->NotifyForeground(false);
     }
   }
   if (!nsCRT::strcmp("application-foreground", aTopic)) {
     for(PRUint32 i = 0; i < mInstances.Length(); i++) {
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -95,16 +95,17 @@ using mozilla::DefaultXDisplay;
 #include "nsIDOMHTMLAppletElement.h"
 #include "nsAttrName.h"
 #include "nsIFocusManager.h"
 #include "nsFocusManager.h"
 #include "nsIDOMDragEvent.h"
 #include "nsIScrollableFrame.h"
 #include "nsIImageLoadingContent.h"
 #include "nsIObjectLoadingContent.h"
+#include "nsIDocShell.h"
 
 #include "nsContentCID.h"
 #include "nsWidgetsCID.h"
 static NS_DEFINE_CID(kWidgetCID, NS_CHILD_CID);
 static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
 
 #ifdef XP_WIN
 #include <wtypes.h>
@@ -399,20 +400,22 @@ nsPluginInstanceOwner::~nsPluginInstance
   RemovePluginView();
 #endif
 
   if (mInstance) {
     mInstance->InvalidateOwner();
   }
 }
 
-NS_IMPL_ISUPPORTS3(nsPluginInstanceOwner,
+NS_IMPL_ISUPPORTS5(nsPluginInstanceOwner,
                    nsIPluginInstanceOwner,
                    nsIPluginTagInfo,
-                   nsIDOMEventListener)
+                   nsIDOMEventListener,
+                   nsIPrivacyTransitionObserver,
+                   nsISupportsWeakReference)
 
 nsresult
 nsPluginInstanceOwner::SetInstance(nsNPAPIPluginInstance *aInstance)
 {
   NS_ASSERTION(!mInstance || !aInstance, "mInstance should only be set or unset!");
 
   // If we're going to null out mInstance after use, be sure to call
   // mInstance->InvalidateOwner() here, since it now won't be called
@@ -422,16 +425,27 @@ nsPluginInstanceOwner::SetInstance(nsNPA
 
 #ifdef MOZ_WIDGET_ANDROID
     RemovePluginView();
 #endif
   }
 
   mInstance = aInstance;
 
+  nsCOMPtr<nsIDocument> doc;
+  GetDocument(getter_AddRefs(doc));
+  if (doc) {
+    nsCOMPtr<nsPIDOMWindow> domWindow = doc->GetWindow();
+    if (domWindow) {
+      nsCOMPtr<nsIDocShell> docShell = domWindow->GetDocShell();
+      if (docShell)
+        docShell->AddWeakPrivacyTransitionObserver(this);
+    }
+  }
+
   return NS_OK;
 }
 
 NS_IMETHODIMP nsPluginInstanceOwner::GetWindow(NPWindow *&aWindow)
 {
   NS_ASSERTION(mPluginWindow, "the plugin window object being returned is null");
   aWindow = mPluginWindow;
   return NS_OK;
@@ -3793,16 +3807,21 @@ void nsPluginInstanceOwner::FixUpURLS(co
     nsCOMPtr<nsIURI> baseURI = mContent->GetBaseURI();
     nsAutoString newURL;
     NS_MakeAbsoluteURI(newURL, value, baseURI);
     if (!newURL.IsEmpty())
       value = newURL;
   }
 }
 
+NS_IMETHODIMP nsPluginInstanceOwner::PrivateModeChanged(bool aEnabled)
+{
+  return mInstance ? mInstance->PrivateModeStateChanged(aEnabled) : NS_OK;
+}
+
 // nsPluginDOMContextMenuListener class implementation
 
 nsPluginDOMContextMenuListener::nsPluginDOMContextMenuListener()
 {
 }
 
 nsPluginDOMContextMenuListener::~nsPluginDOMContextMenuListener()
 {
--- a/dom/plugins/base/nsPluginInstanceOwner.h
+++ b/dom/plugins/base/nsPluginInstanceOwner.h
@@ -47,20 +47,22 @@
 #ifndef nsPluginInstanceOwner_h_
 #define nsPluginInstanceOwner_h_
 
 #include "prtypes.h"
 #include "npapi.h"
 #include "nsCOMPtr.h"
 #include "nsIPluginInstanceOwner.h"
 #include "nsIPluginTagInfo.h"
+#include "nsIPrivacyTransitionObserver.h"
 #include "nsIDOMEventListener.h"
 #include "nsIScrollPositionListener.h"
 #include "nsPluginHost.h"
 #include "nsPluginNativeWindow.h"
+#include "nsWeakReference.h"
 #include "gfxRect.h"
 
 // X.h defines KeyPress
 #ifdef KeyPress
 #undef KeyPress
 #endif
 
 #ifdef XP_MACOSX
@@ -98,24 +100,27 @@ namespace mozilla {
 // X.h defines KeyPress
 #ifdef KeyPress
 #undef KeyPress
 #endif
 
 class nsPluginInstanceOwner : public nsIPluginInstanceOwner,
                               public nsIPluginTagInfo,
                               public nsIDOMEventListener,
-                              public nsIScrollPositionListener
+                              public nsIScrollPositionListener,
+                              public nsIPrivacyTransitionObserver,
+                              public nsSupportsWeakReference
 {
 public:
   nsPluginInstanceOwner();
   virtual ~nsPluginInstanceOwner();
   
   NS_DECL_ISUPPORTS
   NS_DECL_NSIPLUGININSTANCEOWNER
+  NS_DECL_NSIPRIVACYTRANSITIONOBSERVER
   
   NS_IMETHOD GetURL(const char *aURL, const char *aTarget,
                     nsIInputStream *aPostStream, 
                     void *aHeadersData, PRUint32 aHeadersDataLen);
   
   NS_IMETHOD ShowStatus(const PRUnichar *aStatusMsg);
   
   NPError    ShowNativeContextMenu(NPMenu* menu, void* event);
--- a/editor/idl/nsIEditor.idl
+++ b/editor/idl/nsIEditor.idl
@@ -50,17 +50,17 @@ interface nsIDocumentStateListener;
 interface nsIOutputStream;
 interface nsITransactionManager;
 interface nsITransaction;
 interface nsIEditorObserver;
 interface nsIEditActionListener;
 interface nsIInlineSpellChecker;
 interface nsITransferable;
 
-[scriptable, uuid(2e14b183-29d4-4282-9475-589277a70654)]
+[scriptable, uuid(7861fe14-9977-413f-a893-3e1000c40817)]
 
 interface nsIEditor  : nsISupports
 {
 %{C++
   typedef short EDirection;
 %}
   const short eNone = 0;
   const short eNext = 1;
@@ -492,16 +492,22 @@ interface nsIEditor  : nsISupports
                  in nsIDOMNode parent);
 
   /** 
    * deleteNode removes aChild from aParent.
    * @param aChild    The node to delete
    */
   void deleteNode(in nsIDOMNode child);
 
+  /**
+   * Returns true if markNodeDirty() has any effect.  Returns false if
+   * markNodeDirty() is a no-op.
+   */
+  [notxpcom] boolean outputsMozDirty();
+
   /** 
    * markNodeDirty() sets a special dirty attribute on the node.
    * Usually this will be called immediately after creating a new node.
    * @param aNode      The node for which to insert formatting.
    */
   void markNodeDirty(in nsIDOMNode node);
 
 /* ---------- direction controller ---------- */
--- a/editor/libeditor/base/nsEditor.cpp
+++ b/editor/libeditor/base/nsEditor.cpp
@@ -142,44 +142,38 @@ extern nsIParserService *sParserService;
 
 //---------------------------------------------------------------------------
 //
 // nsEditor: base editor class implementation
 //
 //---------------------------------------------------------------------------
 
 nsEditor::nsEditor()
-:  mModCount(0)
+:  mPlaceHolderName(nsnull)
+,  mSelState(nsnull)
+,  mPhonetic(nsnull)
+,  mModCount(0)
 ,  mFlags(0)
 ,  mUpdateCount(0)
-,  mSpellcheckCheckboxState(eTriUnset)
-,  mPlaceHolderTxn(nsnull)
-,  mPlaceHolderName(nsnull)
 ,  mPlaceHolderBatch(0)
-,  mSelState(nsnull)
-,  mSavedSel()
-,  mRangeUpdater()
 ,  mAction(nsnull)
-,  mDirection(eNone)
-,  mIMETextNode(nsnull)
+,  mHandlingActionCount(0)
 ,  mIMETextOffset(0)
 ,  mIMEBufferLength(0)
+,  mDirection(eNone)
+,  mDocDirtyState(-1)
+,  mSpellcheckCheckboxState(eTriUnset)
 ,  mInIMEMode(false)
 ,  mIsIMEComposing(false)
 ,  mShouldTxnSetSelection(true)
 ,  mDidPreDestroy(false)
 ,  mDidPostCreate(false)
-,  mDocDirtyState(-1)
-,  mDocWeak(nsnull)
-,  mPhonetic(nsnull)
-,  mHandlingActionCount(0)
 ,  mHandlingTrustedAction(false)
 ,  mDispatchInputEvent(true)
 {
-  //initialize member variables here
 }
 
 nsEditor::~nsEditor()
 {
   NS_ASSERTION(!mDocWeak || mDidPreDestroy, "Why PreDestroy hasn't been called?");
 
   mTxnMgr = nsnull;
 
@@ -1265,24 +1259,38 @@ nsEditor::RemoveAttribute(nsIDOMElement 
                                                 getter_AddRefs(txn));
   if (NS_SUCCEEDED(result))  {
     result = DoTransaction(txn);  
   }
   return result;
 }
 
 
+bool
+nsEditor::OutputsMozDirty()
+{
+  // Return true for Composer (!eEditorAllowInteraction) or mail
+  // (eEditorMailMask), but false for webpages.
+  return !(mFlags & nsIPlaintextEditor::eEditorAllowInteraction) ||
+          (mFlags & nsIPlaintextEditor::eEditorMailMask);
+}
+
+
 NS_IMETHODIMP
 nsEditor::MarkNodeDirty(nsIDOMNode* aNode)
 {  
-  //  mark the node dirty.
-  nsCOMPtr<nsIContent> element (do_QueryInterface(aNode));
-  if (element)
+  // Mark the node dirty, but not for webpages (bug 599983)
+  if (!OutputsMozDirty()) {
+    return NS_OK;
+  }
+  nsCOMPtr<dom::Element> element = do_QueryInterface(aNode);
+  if (element) {
     element->SetAttr(kNameSpaceID_None, nsEditProperty::mozdirty,
                      EmptyString(), false);
+  }
   return NS_OK;
 }
 
 NS_IMETHODIMP nsEditor::GetInlineSpellChecker(bool autoCreate,
                                               nsIInlineSpellChecker ** aInlineSpellChecker)
 {
   NS_ENSURE_ARG_POINTER(aInlineSpellChecker);
 
--- a/editor/libeditor/base/nsEditor.h
+++ b/editor/libeditor/base/nsEditor.h
@@ -213,18 +213,16 @@ public:
   virtual nsresult BeginIMEComposition();
   virtual nsresult UpdateIMEComposition(const nsAString &aCompositionString,
                                         nsIPrivateTextRangeList *aTextRange)=0;
   nsresult EndIMEComposition();
 
   void SwitchTextDirectionTo(PRUint32 aDirection);
 
 protected:
-  nsCString mContentMIMEType;       // MIME type of the doc we are editing.
-
   nsresult DetermineCurrentDirection();
 
   /** create a transaction for setting aAttribute to aValue on aElement
     */
   NS_IMETHOD CreateTxnForSetAttribute(nsIDOMElement *aElement, 
                                       const nsAString &  aAttribute, 
                                       const nsAString &  aValue,
                                       ChangeAttributeTxn ** aTxn);
@@ -788,69 +786,70 @@ public:
       } else {
         aSelf->mHandlingTrustedAction = false;
       }
       aSelf->mHandlingActionCount++;
     }
   };
 
 protected:
-
-  PRUint32        mModCount;     // number of modifications (for undo/redo stack)
-  PRUint32        mFlags;        // behavior flags. See nsIPlaintextEditor.idl for the flags we use.
-
-  nsWeakPtr       mSelConWeak;   // weak reference to the nsISelectionController
-  PRInt32         mUpdateCount;
-
-  // Spellchecking
   enum Tristate {
     eTriUnset,
     eTriFalse,
     eTriTrue
-  }                 mSpellcheckCheckboxState;
+  };
+  // Spellchecking
+  nsCString mContentMIMEType;       // MIME type of the doc we are editing.
+
   nsCOMPtr<nsIInlineSpellChecker> mInlineSpellChecker;
 
   nsCOMPtr<nsITransactionManager> mTxnMgr;
-  nsWeakPtr         mPlaceHolderTxn;     // weak reference to placeholder for begin/end batch purposes
-  nsIAtom          *mPlaceHolderName;    // name of placeholder transaction
-  PRInt32           mPlaceHolderBatch;   // nesting count for batching
-  nsSelectionState *mSelState;           // saved selection state for placeholder txn batching
-  nsSelectionState  mSavedSel;           // cached selection for nsAutoSelectionReset
-  nsRangeUpdater    mRangeUpdater;       // utility class object for maintaining preserved ranges
-  nsCOMPtr<mozilla::dom::Element> mRootElement;   // cached root node
-  PRInt32           mAction;             // the current editor action
-  EDirection        mDirection;          // the current direction of editor action
-  
-  // data necessary to build IME transactions
+  nsCOMPtr<mozilla::dom::Element> mRootElement; // cached root node
   nsCOMPtr<nsIPrivateTextRangeList> mIMETextRangeList; // IME special selection ranges
   nsCOMPtr<nsIDOMCharacterData>     mIMETextNode;      // current IME text node
-  PRUint32                          mIMETextOffset;    // offset in text node where IME comp string begins
-  PRUint32                          mIMEBufferLength;  // current length of IME comp string
-  bool                              mInIMEMode;        // are we inside an IME composition?
-  bool                              mIsIMEComposing;   // is IME in composition state?
-                                                       // This is different from mInIMEMode. see Bug 98434.
+  nsCOMPtr<nsIDOMEventTarget> mEventTarget; // The form field as an event receiver
+  nsCOMPtr<nsIDOMEventListener> mEventListener;
+  nsWeakPtr        mSelConWeak;          // weak reference to the nsISelectionController
+  nsWeakPtr        mPlaceHolderTxn;      // weak reference to placeholder for begin/end batch purposes
+  nsWeakPtr        mDocWeak;             // weak reference to the nsIDOMDocument
+  nsIAtom          *mPlaceHolderName;    // name of placeholder transaction
+  nsSelectionState *mSelState;           // saved selection state for placeholder txn batching
+  nsString         *mPhonetic;
 
-  bool                          mShouldTxnSetSelection;  // turn off for conservative selection adjustment by txns
-  bool                          mDidPreDestroy;    // whether PreDestroy has been called
-  bool                          mDidPostCreate;    // whether PostCreate has been called
-   // various listeners
+  // various listeners
   nsCOMArray<nsIEditActionListener> mActionListeners;  // listens to all low level actions on the doc
   nsCOMArray<nsIEditorObserver> mEditorObservers;  // just notify once per high level change
   nsCOMArray<nsIDocumentStateListener> mDocStateListeners;// listen to overall doc state (dirty or not, just created, etc)
 
-  PRInt8                        mDocDirtyState;		// -1 = not initialized
-  nsWeakPtr        mDocWeak;  // weak reference to the nsIDOMDocument
-  // The form field as an event receiver
-  nsCOMPtr<nsIDOMEventTarget> mEventTarget;
+  nsSelectionState  mSavedSel;           // cached selection for nsAutoSelectionReset
+  nsRangeUpdater    mRangeUpdater;       // utility class object for maintaining preserved ranges
+
+  PRUint32          mModCount;     // number of modifications (for undo/redo stack)
+  PRUint32          mFlags;        // behavior flags. See nsIPlaintextEditor.idl for the flags we use.
+
+  PRInt32           mUpdateCount;
+
+  PRInt32           mPlaceHolderBatch;   // nesting count for batching
+  PRInt32           mAction;             // the current editor action
+  PRUint32          mHandlingActionCount;
 
-  nsString* mPhonetic;
+  PRUint32          mIMETextOffset;    // offset in text node where IME comp string begins
+  PRUint32          mIMEBufferLength;  // current length of IME comp string
+
+  EDirection        mDirection;          // the current direction of editor action
+  PRInt8            mDocDirtyState;      // -1 = not initialized
+  PRUint8           mSpellcheckCheckboxState; // a Tristate value
 
- nsCOMPtr<nsIDOMEventListener> mEventListener;
+  bool mInIMEMode;        // are we inside an IME composition?
+  bool mIsIMEComposing;   // is IME in composition state?
+                                                       // This is different from mInIMEMode. see Bug 98434.
 
-  PRUint32 mHandlingActionCount;
+  bool mShouldTxnSetSelection;  // turn off for conservative selection adjustment by txns
+  bool mDidPreDestroy;    // whether PreDestroy has been called
+  bool mDidPostCreate;    // whether PostCreate has been called
   bool mHandlingTrustedAction;
   bool mDispatchInputEvent;
 
   friend bool NSCanUnload(nsISupports* serviceMgr);
   friend class nsAutoTxnsConserveSelection;
   friend class nsAutoSelectionReset;
   friend class nsAutoRules;
   friend class nsRangeUpdater;
--- a/editor/libeditor/base/tests/Makefile.in
+++ b/editor/libeditor/base/tests/Makefile.in
@@ -45,23 +45,25 @@ include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES = \
 		test_bug502673.html \
 		test_bug514156.html \
 		test_bug567213.html \
 		file_bug586662.html \
 		test_bug586662.html \
+		test_bug599983.html \
 		$(NULL)
 
 _CHROME_TEST_FILES = \
 		test_selection_move_commands.xul \
                 test_bug46555.html \
 		test_bug646194.xul \
 		test_dragdrop.html \
+		test_bug599983.xul \
 		$(NULL)
 
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
 
 libs:: $(_CHROME_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir)
 
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/base/tests/test_bug599983.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=599983
+-->
+<title>Test for Bug 599983</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="/tests/SimpleTest/EventUtils.js"></script>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=599983">Mozilla Bug 599983</a>
+<div contenteditable>foo</div>
+<script>
+getSelection().selectAllChildren(document.querySelector("div"));
+document.execCommand("bold");
+is(document.querySelector("[_moz_dirty]"), null,
+   "No _moz_dirty allowed in webpages");
+</script>
new file mode 100644
--- /dev/null
+++ b/editor/libeditor/base/tests/test_bug599983.xul
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin"
+                 type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+                 type="text/css"?>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=599983
+-->
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="Mozilla Bug 599983" onload="runTest()">
+  <script type="application/javascript"
+    src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
+
+  <body xmlns="http://www.w3.org/1999/xhtml">
+  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=599983"
+     target="_blank">Mozilla Bug 599983</a>
+  <editor xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+          id="editor"
+          editortype="html"
+          src="about:blank" />
+  </body>
+  <script type="application/javascript">
+  <![CDATA[
+
+  SimpleTest.waitForExplicitFinish();
+
+  const kAllowInteraction = Components.interfaces.nsIPlaintextEditor
+                                                 .eEditorAllowInteraction;
+  const kMailMask = Components.interfaces.nsIPlaintextEditor.eEditorMailMask;
+
+  function runTest() {
+    testEditor(false, false);
+    testEditor(false, true);
+    testEditor(true, false);
+    testEditor(true, true);
+
+    SimpleTest.finish();
+  }
+
+  function testEditor(setAllowInteraction, setMailMask) {
+    var desc = " with " + (setAllowInteraction ? "" : "no ") +
+               "eEditorAllowInteraction and " +
+               (setMailMask ? "" : "no ") + "eEditorMailMask";
+
+    var editorElem = document.getElementById("editor");
+
+    var editorObj = editorElem.getEditor(editorElem.contentWindow);
+    editorObj.flags = (setAllowInteraction ? kAllowInteraction : 0) |
+                      (setMailMask ? kMailMask : 0);
+
+    var editorDoc = editorElem.contentDocument;
+    editorDoc.body.innerHTML = "<p>foo<p>bar";
+    editorDoc.getSelection().selectAllChildren(editorDoc.body.firstChild);
+    editorDoc.execCommand("bold");
+
+    var createsDirty = !setAllowInteraction || setMailMask;
+
+    (createsDirty ? isnot : is)(editorDoc.querySelector("[_moz_dirty]"), null,
+       "Elements with _moz_dirty" + desc);
+
+    // Even if we do create _moz_dirty, we should strip it for innerHTML.
+    is(editorDoc.body.innerHTML, "<p><b>foo</b></p><p>bar</p>",
+       "innerHTML" + desc);
+  }
+
+  ]]>
+  </script>
+</window>
--- a/editor/libeditor/html/nsHTMLCSSUtils.cpp
+++ b/editor/libeditor/html/nsHTMLCSSUtils.cpp
@@ -50,16 +50,17 @@
 #include "nsTextEditUtils.h"
 #include "nsReadableUtils.h"
 #include "nsUnicharUtils.h"
 #include "nsHTMLCSSUtils.h"
 #include "nsColor.h"
 #include "nsAttrName.h"
 #include "nsAutoPtr.h"
 #include "mozilla/Preferences.h"
+#include "nsContentUtils.h"
 
 using namespace mozilla;
 
 static
 void ProcessBValue(const nsAString * aInputString, nsAString & aOutputString,
                    const char * aDefaultValueString,
                    const char * aPrependString, const char* aAppendString)
 {
@@ -189,16 +190,55 @@ void ProcessMarginRightValue(const nsASt
       aOutputString.AppendLiteral("auto"); 
     }
     else {
       aOutputString.AppendLiteral("0px"); 
     }
   }
 }
 
+static
+void ProcessFontSizeValue(const nsAString* aInputString, nsAString& aOutputString,
+                          const char* aDefaultValueString,
+                          const char* aPrependString, const char* aAppendString)
+{
+  aOutputString.Truncate();
+  if (aInputString) {
+    PRInt32 size = nsContentUtils::ParseLegacyFontSize(*aInputString);
+    switch (size) {
+      case 0:
+        // Didn't parse
+        return;
+      case 1:
+        aOutputString.AssignLiteral("x-small");
+        return;
+      case 2:
+        aOutputString.AssignLiteral("small");
+        return;
+      case 3:
+        aOutputString.AssignLiteral("medium");
+        return;
+      case 4:
+        aOutputString.AssignLiteral("large");
+        return;
+      case 5:
+        aOutputString.AssignLiteral("x-large");
+        return;
+      case 6:
+        aOutputString.AssignLiteral("xx-large");
+        return;
+      case 7:
+        // No corresponding CSS size
+        return;
+      default:
+        NS_NOTREACHED("Unexpected return value from ParseLegacyFontSize");
+    }
+  }
+}
+
 const nsHTMLCSSUtils::CSSEquivTable boldEquivTable[] = {
   { nsHTMLCSSUtils::eCSSEditableProperty_font_weight, ProcessBValue, nsnull, nsnull, nsnull, true, false },
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
 };
 
 const nsHTMLCSSUtils::CSSEquivTable italicEquivTable[] = {
   { nsHTMLCSSUtils::eCSSEditableProperty_font_style, ProcessDefaultValue, "italic", nsnull, nsnull, true, false },
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
@@ -224,16 +264,21 @@ const nsHTMLCSSUtils::CSSEquivTable font
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
 };
 
 const nsHTMLCSSUtils::CSSEquivTable fontFaceEquivTable[] = {
   { nsHTMLCSSUtils::eCSSEditableProperty_font_family, ProcessSameValue, nsnull, nsnull, nsnull, true, false },
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
 };
 
+const nsHTMLCSSUtils::CSSEquivTable fontSizeEquivTable[] = {
+  { nsHTMLCSSUtils::eCSSEditableProperty_font_size, ProcessFontSizeValue, nsnull, nsnull, nsnull, true, false },
+  { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
+};
+
 const nsHTMLCSSUtils::CSSEquivTable bgcolorEquivTable[] = {
   { nsHTMLCSSUtils::eCSSEditableProperty_background_color, ProcessSameValue, nsnull, nsnull, nsnull, true, false },
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
 };
 
 const nsHTMLCSSUtils::CSSEquivTable backgroundImageEquivTable[] = {
   { nsHTMLCSSUtils::eCSSEditableProperty_background_image, ProcessExtendedValue, nsnull, "url(", ")", true, true },
   { nsHTMLCSSUtils::eCSSEditableProperty_NONE, 0 }
@@ -307,31 +352,33 @@ nsHTMLCSSUtils::nsHTMLCSSUtils(nsHTMLEdi
 
 nsHTMLCSSUtils::~nsHTMLCSSUtils()
 {
 }
 
 // Answers true if we have some CSS equivalence for the HTML style defined
 // by aProperty and/or aAttribute for the node aNode
 bool
-nsHTMLCSSUtils::IsCSSEditableProperty(nsIDOMNode * aNode,
-                                      nsIAtom * aProperty,
-                                      const nsAString * aAttribute)
+nsHTMLCSSUtils::IsCSSEditableProperty(nsIDOMNode* aNode,
+                                      nsIAtom* aProperty,
+                                      const nsAString* aAttribute,
+                                      const nsAString* aValue)
 {
   NS_ASSERTION(aNode, "Shouldn't you pass aNode? - Bug 214025");
 
   nsCOMPtr<nsIContent> content = do_QueryInterface(aNode);
   NS_ENSURE_TRUE(content, false);
-  return IsCSSEditableProperty(content, aProperty, aAttribute);
+  return IsCSSEditableProperty(content, aProperty, aAttribute, aValue);
 }
 
 bool
 nsHTMLCSSUtils::IsCSSEditableProperty(nsIContent* aNode,
                                       nsIAtom* aProperty,
-                                      const nsAString* aAttribute)
+                                      const nsAString* aAttribute,
+                                      const nsAString* aValue)
 {
   MOZ_ASSERT(aNode);
 
   nsIContent* content = aNode;
   // we need an element node here
   if (content->NodeType() == nsIDOMNode::TEXT_NODE) {
     content = content->GetParent();
     NS_ENSURE_TRUE(content, false);
@@ -347,16 +394,26 @@ nsHTMLCSSUtils::IsCSSEditableProperty(ns
       || nsEditProperty::u == aProperty
       || nsEditProperty::strike == aProperty
       || ((nsEditProperty::font == aProperty) && aAttribute &&
            (aAttribute->EqualsLiteral("color") ||
             aAttribute->EqualsLiteral("face")))) {
     return true;
   }
 
+  // FONT SIZE doesn't work if the value is 7
+  if (nsEditProperty::font == aProperty && aAttribute &&
+      aAttribute->EqualsLiteral("size")) {
+    if (!aValue || aValue->IsEmpty()) {
+      return true;
+    }
+    PRInt32 size = nsContentUtils::ParseLegacyFontSize(*aValue);
+    return size && size != 7;
+  }
+
   // ALIGN attribute on elements supporting it
   if (aAttribute && (aAttribute->EqualsLiteral("align")) &&
       (nsEditProperty::div == tagName
        || nsEditProperty::p   == tagName
        || nsEditProperty::h1  == tagName
        || nsEditProperty::h2  == tagName
        || nsEditProperty::h3  == tagName
        || nsEditProperty::h4  == tagName
@@ -848,103 +905,94 @@ nsHTMLCSSUtils::GenerateCSSDeclarationsF
                                                      const nsAString* aAttribute,
                                                      const nsAString* aValue,
                                                      nsTArray<nsIAtom*>& cssPropertyArray,
                                                      nsTArray<nsString>& cssValueArray,
                                                      bool aGetOrRemoveRequest)
 {
   MOZ_ASSERT(aElement);
   nsIAtom* tagName = aElement->Tag();
+  const nsHTMLCSSUtils::CSSEquivTable* equivTable = nsnull;
 
   if (nsEditProperty::b == aHTMLProperty) {
-    BuildCSSDeclarations(cssPropertyArray, cssValueArray, boldEquivTable, aValue, aGetOrRemoveRequest);
-  }
-  else if (nsEditProperty::i == aHTMLProperty) {
-    BuildCSSDeclarations(cssPropertyArray, cssValueArray, italicEquivTable, aValue, aGetOrRemoveRequest);
-  }
-  else if (nsEditProperty::u == aHTMLProperty) {
-    BuildCSSDeclarations(cssPropertyArray, cssValueArray, underlineEquivTable, aValue, aGetOrRemoveRequest);
-  }
-  else if (nsEditProperty::strike == aHTMLProperty) {
-    BuildCSSDeclarations(cssPropertyArray, cssValueArray, strikeEquivTable, aValue, aGetOrRemoveRequest);
-  }
-  else if (nsEditProperty::tt == aHTMLProperty) {
-    BuildCSSDeclarations(cssPropertyArray, cssValueArray, ttEquivTable, aValue, aGetOrRemoveRequest);
-  }
-  else if (aAttribute) {
+    equivTable = boldEquivTable;
+  } else if (nsEditProperty::i == aHTMLProperty) {
+    equivTable = italicEquivTable;
+  } else if (nsEditProperty::u == aHTMLProperty) {
+    equivTable = underlineEquivTable;
+  } else if (nsEditProperty::strike == aHTMLProperty) {
+    equivTable = strikeEquivTable;
+  } else if (nsEditProperty::tt == aHTMLProperty) {
+    equivTable = ttEquivTable;
+  } else if (aAttribute) {
     if (nsEditProperty::font == aHTMLProperty &&
         aAttribute->EqualsLiteral("color")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, fontColorEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (nsEditProperty::font == aHTMLProperty &&
-             aAttribute->EqualsLiteral("face")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, fontFaceEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("bgcolor")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, bgcolorEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("background")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, backgroundImageEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("text")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, textColorEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("border")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, borderEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("align")) {
+      equivTable = fontColorEquivTable;
+    } else if (nsEditProperty::font == aHTMLProperty &&
+               aAttribute->EqualsLiteral("face")) {
+      equivTable = fontFaceEquivTable;
+    } else if (nsEditProperty::font == aHTMLProperty &&
+               aAttribute->EqualsLiteral("size")) {
+      equivTable = fontSizeEquivTable;
+    } else if (aAttribute->EqualsLiteral("bgcolor")) {
+      equivTable = bgcolorEquivTable;
+    } else if (aAttribute->EqualsLiteral("background")) {
+      equivTable = backgroundImageEquivTable;
+    } else if (aAttribute->EqualsLiteral("text")) {
+      equivTable = textColorEquivTable;
+    } else if (aAttribute->EqualsLiteral("border")) {
+      equivTable = borderEquivTable;
+    } else if (aAttribute->EqualsLiteral("align")) {
       if (nsEditProperty::table  == tagName) {
-        BuildCSSDeclarations(cssPropertyArray, cssValueArray, tableAlignEquivTable, aValue, aGetOrRemoveRequest);
-      }
-      else if (nsEditProperty::hr  == tagName) {
-        BuildCSSDeclarations(cssPropertyArray, cssValueArray, hrAlignEquivTable, aValue, aGetOrRemoveRequest);
+        equivTable = tableAlignEquivTable;
+      } else if (nsEditProperty::hr  == tagName) {
+        equivTable = hrAlignEquivTable;
+      } else if (nsEditProperty::legend  == tagName ||
+               nsEditProperty::caption == tagName) {
+        equivTable = captionAlignEquivTable;
+      } else {
+        equivTable = textAlignEquivTable;
       }
-      else if (nsEditProperty::legend  == tagName ||
-               nsEditProperty::caption == tagName) {
-        BuildCSSDeclarations(cssPropertyArray, cssValueArray, captionAlignEquivTable, aValue, aGetOrRemoveRequest);
-      }
-      else {
-        BuildCSSDeclarations(cssPropertyArray, cssValueArray, textAlignEquivTable, aValue, aGetOrRemoveRequest);
-      }
-    }
-    else if (aAttribute->EqualsLiteral("valign")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, verticalAlignEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("nowrap")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, nowrapEquivTable, aValue, aGetOrRemoveRequest);
+    } else if (aAttribute->EqualsLiteral("valign")) {
+      equivTable = verticalAlignEquivTable;
+    } else if (aAttribute->EqualsLiteral("nowrap")) {
+      equivTable = nowrapEquivTable;
+    } else if (aAttribute->EqualsLiteral("width")) {
+      equivTable = widthEquivTable;
+    } else if (aAttribute->EqualsLiteral("height") ||
+               (nsEditProperty::hr == tagName &&
+                aAttribute->EqualsLiteral("size"))) {
+      equivTable = heightEquivTable;
+    } else if (aAttribute->EqualsLiteral("type") &&
+               (nsEditProperty::ol == tagName
+                || nsEditProperty::ul == tagName
+                || nsEditProperty::li == tagName)) {
+      equivTable = listStyleTypeEquivTable;
     }
-    else if (aAttribute->EqualsLiteral("width")) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, widthEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("height") ||
-             (nsEditProperty::hr == tagName && aAttribute->EqualsLiteral("size"))) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, heightEquivTable, aValue, aGetOrRemoveRequest);
-    }
-    else if (aAttribute->EqualsLiteral("type") &&
-             (nsEditProperty::ol == tagName
-              || nsEditProperty::ul == tagName
-              || nsEditProperty::li == tagName)) {
-      BuildCSSDeclarations(cssPropertyArray, cssValueArray, listStyleTypeEquivTable, aValue, aGetOrRemoveRequest);
-    }
+  }
+  if (equivTable) {
+    BuildCSSDeclarations(cssPropertyArray, cssValueArray, equivTable,
+                         aValue, aGetOrRemoveRequest);
   }
 }
 
 // Add to aNode the CSS inline style equivalent to HTMLProperty/aAttribute/aValue for the node,
 // and return in aCount the number of CSS properties set by the call
 nsresult
 nsHTMLCSSUtils::SetCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
                                             nsIAtom *aHTMLProperty,
                                             const nsAString *aAttribute,
                                             const nsAString *aValue,
                                             PRInt32 * aCount,
                                             bool aSuppressTransaction)
 {
   nsCOMPtr<dom::Element> element = do_QueryInterface(aNode);
   *aCount = 0;
-  if (!element || !IsCSSEditableProperty(element, aHTMLProperty, aAttribute)) {
+  if (!element || !IsCSSEditableProperty(element, aHTMLProperty,
+                                         aAttribute, aValue)) {
     return NS_OK;
   }
 
   // we can apply the styles only if the node is an element and if we have
   // an equivalence for the requested HTML style in this implementation
 
   // Find the CSS equivalence to the HTML style
   nsTArray<nsIAtom*> cssPropertyArray;
@@ -1010,17 +1058,18 @@ nsHTMLCSSUtils::GetCSSEquivalentToHTMLIn
                                                      const nsAString *aAttribute,
                                                      nsAString & aValueString,
                                                      PRUint8 aStyleType)
 {
   aValueString.Truncate();
   nsCOMPtr<dom::Element> theElement = GetElementContainerOrSelf(aNode);
   NS_ENSURE_TRUE(theElement, NS_ERROR_NULL_POINTER);
 
-  if (!theElement || !IsCSSEditableProperty(theElement, aHTMLProperty, aAttribute)) {
+  if (!theElement || !IsCSSEditableProperty(theElement, aHTMLProperty,
+                                            aAttribute, &aValueString)) {
     return NS_OK;
   }
 
   // Yes, the requested HTML style has a CSS equivalence in this implementation
   // Retrieve the default ViewCSS if we are asked for computed styles
   nsCOMPtr<nsIDOMWindow> window;
   if (COMPUTED_STYLE_TYPE == aStyleType) {
     nsresult res = GetDefaultViewCSS(theElement, getter_AddRefs(window));
@@ -1043,101 +1092,89 @@ nsHTMLCSSUtils::GetCSSEquivalentToHTMLIn
     if (index) {
       aValueString.Append(PRUnichar(' '));
     }
     aValueString.Append(valueString);
   }
   return NS_OK;
 }
 
-// Does the node aNode (or his parent if it is not an element node) carries
-// the CSS equivalent styles to the HTML style aHTMLProperty/aAttribute/
-// aValueString for this node ?
-// The value of aStyleType controls the styles we retrieve : specified or
-// computed. The return value aIsSet is true is the CSS styles are set.
+// Does the node aNode (or its parent, if it's not an element node) have a CSS
+// style equivalent to the HTML style aHTMLProperty/aHTMLAttribute/valueString?
+// The value of aStyleType controls the styles we retrieve: specified or
+// computed. The return value aIsSet is true if the CSS styles are set.
 nsresult
-nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
+nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode *aNode,
                                                     nsIAtom *aHTMLProperty,
-                                                    const nsAString * aHTMLAttribute,
-                                                    bool & aIsSet,
-                                                    nsAString & valueString,
+                                                    const nsAString *aHTMLAttribute,
+                                                    bool& aIsSet,
+                                                    nsAString& valueString,
                                                     PRUint8 aStyleType)
 {
   NS_ENSURE_TRUE(aNode, NS_ERROR_NULL_POINTER);
 
   nsAutoString htmlValueString(valueString);
   aIsSet = false;
   nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
-  NS_NAMED_LITERAL_STRING(boldStr, "bold");
   do {
     valueString.Assign(htmlValueString);
     // get the value of the CSS equivalent styles
     nsresult res = GetCSSEquivalentToHTMLInlineStyleSet(node, aHTMLProperty, aHTMLAttribute,
                                                         valueString, aStyleType);
     NS_ENSURE_SUCCESS(res, res);
 
     // early way out if we can
-    if (valueString.IsEmpty()) return NS_OK;
+    if (valueString.IsEmpty()) {
+      return NS_OK;
+    }
 
     if (nsEditProperty::b == aHTMLProperty) {
-      if (valueString.Equals(boldStr)) {
+      if (valueString.EqualsLiteral("bold")) {
         aIsSet = true;
-      }
-      else if (valueString.EqualsLiteral("normal")) {
+      } else if (valueString.EqualsLiteral("normal")) {
         aIsSet = false;
-      }
-      else if (valueString.EqualsLiteral("bolder")) {
+      } else if (valueString.EqualsLiteral("bolder")) {
         aIsSet = true;
-        valueString.Assign(boldStr);
-      }
-      else {
+        valueString.AssignLiteral("bold");
+      } else {
         PRInt32 weight = 0;
         PRInt32 errorCode;
         nsAutoString value(valueString);
         weight = value.ToInteger(&errorCode, 10);
         if (400 < weight) {
           aIsSet = true;
-          valueString.Assign(boldStr);
-        }
-        else {
+          valueString.AssignLiteral("bold");
+        } else {
           aIsSet = false;
           valueString.AssignLiteral("normal");
         }
       }
-    }
-    
-    else if (nsEditProperty::i == aHTMLProperty) {
+    } else if (nsEditProperty::i == aHTMLProperty) {
       if (valueString.EqualsLiteral("italic") ||
           valueString.EqualsLiteral("oblique")) {
-        aIsSet= true;
+        aIsSet = true;
       }
-    }
-
-    else if (nsEditProperty::u == aHTMLProperty) {
+    } else if (nsEditProperty::u == aHTMLProperty) {
       nsAutoString val;
       val.AssignLiteral("underline");
       aIsSet = bool(ChangeCSSInlineStyleTxn::ValueIncludes(valueString, val, false));
-    }
-
-    else if (nsEditProperty::strike == aHTMLProperty) {
+    } else if (nsEditProperty::strike == aHTMLProperty) {
       nsAutoString val;
       val.AssignLiteral("line-through");
       aIsSet = bool(ChangeCSSInlineStyleTxn::ValueIncludes(valueString, val, false));
-    }
-
-    else if (aHTMLAttribute &&
-             ( (nsEditProperty::font == aHTMLProperty && 
-                aHTMLAttribute->EqualsLiteral("color")) ||
-               aHTMLAttribute->EqualsLiteral("bgcolor"))) {
-      if (htmlValueString.IsEmpty())
+    } else if (aHTMLAttribute &&
+               ((nsEditProperty::font == aHTMLProperty &&
+                 aHTMLAttribute->EqualsLiteral("color")) ||
+                aHTMLAttribute->EqualsLiteral("bgcolor"))) {
+      if (htmlValueString.IsEmpty()) {
         aIsSet = true;
-      else {
+      } else {
         nscolor rgba;
         nsAutoString subStr;
-        htmlValueString.Right(subStr, htmlValueString.Length()-1);
+        htmlValueString.Right(subStr, htmlValueString.Length() - 1);
         if (NS_ColorNameToRGB(htmlValueString, &rgba) ||
             NS_HexToRGB(subStr, &rgba)) {
           nsAutoString htmlColor, tmpStr;
           htmlColor.AppendLiteral("rgb(");
 
           NS_NAMED_LITERAL_STRING(comma, ", ");
 
           tmpStr.AppendInt(NS_GET_R(rgba), 10);
@@ -1149,61 +1186,65 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInl
 
           tmpStr.Truncate();
           tmpStr.AppendInt(NS_GET_B(rgba), 10);
           htmlColor.Append(tmpStr);
 
           htmlColor.Append(PRUnichar(')'));
           aIsSet = htmlColor.Equals(valueString,
                                     nsCaseInsensitiveStringComparator());
-        }
-        else
+        } else {
           aIsSet = htmlValueString.Equals(valueString,
                                     nsCaseInsensitiveStringComparator());
+        }
       }
-    }
-
-    else if (nsEditProperty::tt == aHTMLProperty) {
+    } else if (nsEditProperty::tt == aHTMLProperty) {
       aIsSet = StringBeginsWith(valueString, NS_LITERAL_STRING("monospace"));
-    }
-    
-    else if ((nsEditProperty::font == aHTMLProperty) && aHTMLAttribute
-             && aHTMLAttribute->EqualsLiteral("face")) {
+    } else if (nsEditProperty::font == aHTMLProperty && aHTMLAttribute &&
+               aHTMLAttribute->EqualsLiteral("face")) {
       if (!htmlValueString.IsEmpty()) {
         const PRUnichar commaSpace[] = { PRUnichar(','), PRUnichar(' '), 0 };
         const PRUnichar comma[] = { PRUnichar(','), 0 };
         htmlValueString.ReplaceSubstring(commaSpace, comma);
         nsAutoString valueStringNorm(valueString);
         valueStringNorm.ReplaceSubstring(commaSpace, comma);
         aIsSet = htmlValueString.Equals(valueStringNorm,
                                         nsCaseInsensitiveStringComparator());
-      }
-      else {
+      } else {
         // ignore this, it's TT or our default
         nsAutoString valueStringLower;
         ToLowerCase(valueString, valueStringLower);
         aIsSet = !valueStringLower.EqualsLiteral("monospace") &&
                  !valueStringLower.EqualsLiteral("serif");
       }
       return NS_OK;
-    }
-    else if (aHTMLAttribute
-             && aHTMLAttribute->EqualsLiteral("align")) {
+    } else if (nsEditProperty::font == aHTMLProperty && aHTMLAttribute &&
+               aHTMLAttribute->EqualsLiteral("size")) {
+      if (htmlValueString.IsEmpty()) {
+        aIsSet = true;
+      } else {
+        PRInt32 size = nsContentUtils::ParseLegacyFontSize(htmlValueString);
+        aIsSet = (size == 1 && valueString.EqualsLiteral("x-small")) ||
+                 (size == 2 && valueString.EqualsLiteral("small")) ||
+                 (size == 3 && valueString.EqualsLiteral("medium")) ||
+                 (size == 4 && valueString.EqualsLiteral("large")) ||
+                 (size == 5 && valueString.EqualsLiteral("x-large")) ||
+                 (size == 6 && valueString.EqualsLiteral("xx-large"));
+      }
+    } else if (aHTMLAttribute && aHTMLAttribute->EqualsLiteral("align")) {
       aIsSet = true;
-    }
-    else {
+    } else {
       aIsSet = false;
       return NS_OK;
     }
 
-    if (!htmlValueString.IsEmpty()) {
-      if (htmlValueString.Equals(valueString,
-                                 nsCaseInsensitiveStringComparator())) {
-        aIsSet = true;
-      }
+    if (!htmlValueString.IsEmpty() &&
+        htmlValueString.Equals(valueString,
+                               nsCaseInsensitiveStringComparator())) {
+      aIsSet = true;
     }
 
     if (nsEditProperty::u == aHTMLProperty || nsEditProperty::strike == aHTMLProperty) {
       // unfortunately, the value of the text-decoration property is not inherited.
       // that means that we have to look at ancestors of node to see if they are underlined
       node = node->GetElementParent();  // set to null if it's not a dom element
     }
   } while ((nsEditProperty::u == aHTMLProperty || nsEditProperty::strike == aHTMLProperty) &&
--- a/editor/libeditor/html/nsHTMLCSSUtils.h
+++ b/editor/libeditor/html/nsHTMLCSSUtils.h
@@ -101,20 +101,30 @@ public:
   };
 
   /** answers true if the given combination element_name/attribute_name
     * has a CSS equivalence in this implementation
     *
     * @return               a boolean saying if the tag/attribute has a css equiv
     * @param aNode          [IN] a DOM node
     * @param aProperty      [IN] an atom containing a HTML tag name
-    * @param aAttribute     [IN] a string containing the name of a HTML attribute carried by the element above
+    * @param aAttribute     [IN] a string containing the name of a HTML
+    *                            attribute carried by the element above
+    * @param aValue         [IN] an optional string containing the attribute's
+    *                            HTML value -- this matters for <font size>,
+    *                            since size=7 has no CSS equivalent.  Make sure
+    *                            you pass the HTML value (e.g. "4"), not the
+    *                            CSS value (e.g. "large").
     */
-  bool IsCSSEditableProperty(nsIContent* aNode, nsIAtom* aProperty, const nsAString* aAttribute);
-  bool IsCSSEditableProperty(nsIDOMNode* aNode, nsIAtom* aProperty, const nsAString* aAttribute);
+  bool IsCSSEditableProperty(nsIContent* aNode, nsIAtom* aProperty,
+                             const nsAString* aAttribute,
+                             const nsAString* aValue = nsnull);
+  bool IsCSSEditableProperty(nsIDOMNode* aNode, nsIAtom* aProperty,
+                             const nsAString* aAttribute,
+                             const nsAString* aValue = nsnull);
 
   /** adds/remove a CSS declaration to the STYLE atrribute carried by a given element
     *
     * @param aElement       [IN] a DOM element
     * @param aProperty      [IN] an atom containing the CSS property to set
     * @param aValue         [IN] a string containing the value of the CSS property
     * @param aSuppressTransaction [IN] a boolean indicating, when true,
     *                                  that no transaction should be recorded
--- a/editor/libeditor/html/nsHTMLEditor.h
+++ b/editor/libeditor/html/nsHTMLEditor.h
@@ -704,17 +704,17 @@ protected:
                                 nsIAtom *aProperty, 
                                 const nsAString *aAttribute,
                                 nsCOMPtr<nsIDOMNode> *outLeftNode = nsnull,
                                 nsCOMPtr<nsIDOMNode> *outRightNode = nsnull);
   nsresult ApplyDefaultProperties();
   nsresult RemoveStyleInside(nsIDOMNode *aNode, 
                              nsIAtom *aProperty, 
                              const nsAString *aAttribute, 
-                             bool aChildrenOnly = false);
+                             const bool aChildrenOnly = false);
   nsresult RemoveInlinePropertyImpl(nsIAtom *aProperty, const nsAString *aAttribute);
 
   bool NodeIsProperty(nsIDOMNode *aNode);
   bool HasAttr(nsIDOMNode *aNode, const nsAString *aAttribute);
   bool HasAttrVal(nsIDOMNode *aNode, const nsAString *aAttribute, const nsAString *aValue);
   bool IsAtFrontOfNode(nsIDOMNode *aNode, PRInt32 aOffset);
   bool IsAtEndOfNode(nsIDOMNode *aNode, PRInt32 aOffset);
   bool IsOnlyAttribute(nsIDOMNode *aElement, const nsAString *aAttribute);
@@ -967,11 +967,18 @@ protected:
 public:
 
 // friends
 friend class nsHTMLEditRules;
 friend class nsTextEditRules;
 friend class nsWSRunObject;
 friend class nsHTMLEditorEventListener;
 
+private:
+  // Helper
+  nsresult SetInlinePropertyOnNodeImpl(nsIDOMNode *aNode,
+                                       nsIAtom *aProperty,
+                                       const nsAString *aAttribute,
+                                       const nsAString *aValue);
+
 };
 #endif //nsHTMLEditor_h__
 
--- a/editor/libeditor/html/nsHTMLEditorStyle.cpp
+++ b/editor/libeditor/html/nsHTMLEditorStyle.cpp
@@ -104,175 +104,168 @@ NS_IMETHODIMP nsHTMLEditor::RemoveAllDef
   {
     delete mDefaultStyles[j];
   }
   mDefaultStyles.Clear();
   return NS_OK;
 }
 
 
-NS_IMETHODIMP nsHTMLEditor::SetInlineProperty(nsIAtom *aProperty, 
-                            const nsAString & aAttribute, 
-                            const nsAString & aValue)
+NS_IMETHODIMP
+nsHTMLEditor::SetInlineProperty(nsIAtom *aProperty,
+                                const nsAString& aAttribute,
+                                const nsAString& aValue)
 {
-  if (!aProperty) { return NS_ERROR_NULL_POINTER; }
-  if (!mRules) { return NS_ERROR_NOT_INITIALIZED; }
+  if (!aProperty) {
+    return NS_ERROR_NULL_POINTER;
+  }
+  if (!mRules) {
+    return NS_ERROR_NOT_INITIALIZED;
+  }
   ForceCompositionEnd();
 
-  nsCOMPtr<nsISelection>selection;
+  nsCOMPtr<nsISelection> selection;
   nsresult res = GetSelection(getter_AddRefs(selection));
   NS_ENSURE_SUCCESS(res, res);
   NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
   nsCOMPtr<nsISelectionPrivate> selPriv(do_QueryInterface(selection));
 
   bool isCollapsed;
   selection->GetIsCollapsed(&isCollapsed);
-  if (isCollapsed)
-  {
-    // manipulating text attributes on a collapsed selection only sets state for the next text insertion
+  if (isCollapsed) {
+    // manipulating text attributes on a collapsed selection only sets state
+    // for the next text insertion
     nsString tAttr(aAttribute);//MJUDGE SCC NEED HELP
     nsString tVal(aValue);//MJUDGE SCC NEED HELP
     return mTypeInState->SetProp(aProperty, tAttr, tVal);
   }
-  
+
   nsAutoEditBatch batchIt(this);
   nsAutoRules beginRulesSniffing(this, kOpInsertElement, nsIEditor::eNext);
   nsAutoSelectionReset selectionResetter(selection, this);
   nsAutoTxnsConserveSelection dontSpazMySelection(this);
-  
+
   bool cancel, handled;
   nsTextRulesInfo ruleInfo(nsTextEditRules::kSetTextProperty);
   res = mRules->WillDoAction(selection, &ruleInfo, &cancel, &handled);
   NS_ENSURE_SUCCESS(res, res);
-  if (!cancel && !handled)
-  {
+  if (!cancel && !handled) {
     // get selection range enumerator
     nsCOMPtr<nsIEnumerator> enumerator;
     res = selPriv->GetEnumerator(getter_AddRefs(enumerator));
     NS_ENSURE_SUCCESS(res, res);
     NS_ENSURE_TRUE(enumerator, NS_ERROR_FAILURE);
 
     // loop thru the ranges in the selection
-    enumerator->First(); 
     nsCOMPtr<nsISupports> currentItem;
-    while ((NS_ENUMERATOR_FALSE == enumerator->IsDone()))
-    {
+    for (enumerator->First(); NS_ENUMERATOR_FALSE == enumerator->IsDone();
+         enumerator->Next()) {
       res = enumerator->CurrentItem(getter_AddRefs(currentItem));
       NS_ENSURE_SUCCESS(res, res);
       NS_ENSURE_TRUE(currentItem, NS_ERROR_FAILURE);
-      
-      nsCOMPtr<nsIDOMRange> range( do_QueryInterface(currentItem) );
+
+      nsCOMPtr<nsIDOMRange> range(do_QueryInterface(currentItem));
 
-      // adjust range to include any ancestors who's children are entirely selected
+      // adjust range to include any ancestors whose children are entirely
+      // selected
       res = PromoteInlineRange(range);
       NS_ENSURE_SUCCESS(res, res);
-      
+
       // check for easy case: both range endpoints in same text node
       nsCOMPtr<nsIDOMNode> startNode, endNode;
       res = range->GetStartContainer(getter_AddRefs(startNode));
       NS_ENSURE_SUCCESS(res, res);
       res = range->GetEndContainer(getter_AddRefs(endNode));
       NS_ENSURE_SUCCESS(res, res);
-      if ((startNode == endNode) && IsTextNode(startNode))
-      {
+      if (startNode == endNode && IsTextNode(startNode)) {
         PRInt32 startOffset, endOffset;
         range->GetStartOffset(&startOffset);
         range->GetEndOffset(&endOffset);
         nsCOMPtr<nsIDOMCharacterData> nodeAsText = do_QueryInterface(startNode);
-        res = SetInlinePropertyOnTextNode(nodeAsText, startOffset, endOffset, aProperty, &aAttribute, &aValue);
+        res = SetInlinePropertyOnTextNode(nodeAsText, startOffset, endOffset,
+                                          aProperty, &aAttribute, &aValue);
         NS_ENSURE_SUCCESS(res, res);
+        continue;
       }
-      else
-      {
-        // not the easy case.  range not contained in single text node. 
-        // there are up to three phases here.  There are all the nodes
-        // reported by the subtree iterator to be processed.  And there
-        // are potentially a starting textnode and an ending textnode
-        // which are only partially contained by the range.
-        
-        // lets handle the nodes reported by the iterator.  These nodes
-        // are entirely contained in the selection range.  We build up
-        // a list of them (since doing operations on the document during
-        // iteration would perturb the iterator).
 
-        nsCOMPtr<nsIContentIterator> iter =
-          do_CreateInstance("@mozilla.org/content/subtree-content-iterator;1", &res);
-        NS_ENSURE_SUCCESS(res, res);
-        NS_ENSURE_TRUE(iter, NS_ERROR_FAILURE);
+      // Not the easy case.  Range not contained in single text node.  There
+      // are up to three phases here.  There are all the nodes reported by the
+      // subtree iterator to be processed.  And there are potentially a
+      // starting textnode and an ending textnode which are only partially
+      // contained by the range.
+
+      // Let's handle the nodes reported by the iterator.  These nodes are
+      // entirely contained in the selection range.  We build up a list of them
+      // (since doing operations on the document during iteration would perturb
+      // the iterator).
 
-        nsCOMArray<nsIDOMNode> arrayOfNodes;
+      nsCOMPtr<nsIContentIterator> iter =
+        do_CreateInstance("@mozilla.org/content/subtree-content-iterator;1", &res);
+      NS_ENSURE_SUCCESS(res, res);
+      NS_ENSURE_TRUE(iter, NS_ERROR_FAILURE);
+
+      nsCOMArray<nsIDOMNode> arrayOfNodes;
+
+      // iterate range and build up array
+      res = iter->Init(range);
+      // Init returns an error if there are no nodes in range.  This can easily
+      // happen with the subtree iterator if the selection doesn't contain any
+      // *whole* nodes.
+      if (NS_SUCCEEDED(res)) {
         nsCOMPtr<nsIDOMNode> node;
-        
-        // iterate range and build up array
-        res = iter->Init(range);
-        // init returns an error if no nodes in range.
-        // this can easily happen with the subtree 
-        // iterator if the selection doesn't contain
-        // any *whole* nodes.
-        if (NS_SUCCEEDED(res))
-        {
-          while (!iter->IsDone())
-          {
-            node = do_QueryInterface(iter->GetCurrentNode());
-            NS_ENSURE_TRUE(node, NS_ERROR_FAILURE);
+        for (; !iter->IsDone(); iter->Next()) {
+          node = do_QueryInterface(iter->GetCurrentNode());
+          NS_ENSURE_TRUE(node, NS_ERROR_FAILURE);
 
-            if (IsEditable(node))
-            { 
-              arrayOfNodes.AppendObject(node);
-            }
-
-            iter->Next();
+          if (IsEditable(node)) {
+            arrayOfNodes.AppendObject(node);
           }
         }
-        // first check the start parent of the range to see if it needs to 
-        // be separately handled (it does if it's a text node, due to how the
-        // subtree iterator works - it will not have reported it).
-        if (IsTextNode(startNode) && IsEditable(startNode))
-        {
-          nsCOMPtr<nsIDOMCharacterData> nodeAsText = do_QueryInterface(startNode);
-          PRInt32 startOffset;
-          PRUint32 textLen;
-          range->GetStartOffset(&startOffset);
-          nodeAsText->GetLength(&textLen);
-          res = SetInlinePropertyOnTextNode(nodeAsText, startOffset, textLen, aProperty, &aAttribute, &aValue);
-          NS_ENSURE_SUCCESS(res, res);
-        }
-        
-        // then loop through the list, set the property on each node
-        PRInt32 listCount = arrayOfNodes.Count();
-        PRInt32 j;
-        for (j = 0; j < listCount; j++)
-        {
-          node = arrayOfNodes[j];
-          res = SetInlinePropertyOnNode(node, aProperty, &aAttribute, &aValue);
-          NS_ENSURE_SUCCESS(res, res);
-        }
-        arrayOfNodes.Clear();
-        
-        // last check the end parent of the range to see if it needs to 
-        // be separately handled (it does if it's a text node, due to how the
-        // subtree iterator works - it will not have reported it).
-        if (IsTextNode(endNode) && IsEditable(endNode))
-        {
-          nsCOMPtr<nsIDOMCharacterData> nodeAsText = do_QueryInterface(endNode);
-          PRInt32 endOffset;
-          range->GetEndOffset(&endOffset);
-          res = SetInlinePropertyOnTextNode(nodeAsText, 0, endOffset, aProperty, &aAttribute, &aValue);
-          NS_ENSURE_SUCCESS(res, res);
-        }
+      }
+      // first check the start parent of the range to see if it needs to
+      // be separately handled (it does if it's a text node, due to how the
+      // subtree iterator works - it will not have reported it).
+      if (IsTextNode(startNode) && IsEditable(startNode)) {
+        nsCOMPtr<nsIDOMCharacterData> nodeAsText = do_QueryInterface(startNode);
+        PRInt32 startOffset;
+        PRUint32 textLen;
+        range->GetStartOffset(&startOffset);
+        nodeAsText->GetLength(&textLen);
+        res = SetInlinePropertyOnTextNode(nodeAsText, startOffset, textLen,
+                                          aProperty, &aAttribute, &aValue);
+        NS_ENSURE_SUCCESS(res, res);
       }
-      enumerator->Next();
+
+      // then loop through the list, set the property on each node
+      PRInt32 listCount = arrayOfNodes.Count();
+      PRInt32 j;
+      for (j = 0; j < listCount; j++) {
+        res = SetInlinePropertyOnNode(arrayOfNodes[j], aProperty,
+                                      &aAttribute, &aValue);
+        NS_ENSURE_SUCCESS(res, res);
+      }
+
+      // last check the end parent of the range to see if it needs to
+      // be separately handled (it does if it's a text node, due to how the
+      // subtree iterator works - it will not have reported it).
+      if (IsTextNode(endNode) && IsEditable(endNode)) {
+        nsCOMPtr<nsIDOMCharacterData> nodeAsText = do_QueryInterface(endNode);
+        PRInt32 endOffset;
+        range->GetEndOffset(&endOffset);
+        res = SetInlinePropertyOnTextNode(nodeAsText, 0, endOffset,
+                                          aProperty, &aAttribute, &aValue);
+        NS_ENSURE_SUCCESS(res, res);
+      }
     }
   }
-  if (!cancel)
-  {
+  if (!cancel) {
     // post-process
-    res = mRules->DidDoAction(selection, &ruleInfo, res);
+    return mRules->DidDoAction(selection, &ruleInfo, res);
   }
-  return res;
+  return NS_OK;
 }
 
 
 
 nsresult
 nsHTMLEditor::SetInlinePropertyOnTextNode( nsIDOMCharacterData *aTextNode, 
                                             PRInt32 aStartOffset,
                                             PRInt32 aEndOffset,
@@ -292,17 +285,18 @@ nsHTMLEditor::SetInlinePropertyOnTextNod
   // don't need to do anything if no characters actually selected
   if (aStartOffset == aEndOffset) return NS_OK;
   
   nsCOMPtr<nsIDOMNode> node = do_QueryInterface(aTextNode);
   
   // don't need to do anything if property already set on node
   bool bHasProp;
   if (IsCSSEnabled() &&
-      mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty, aAttribute)) {
+      mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty,
+                                           aAttribute, aValue)) {
     // the HTML styles defined by aProperty/aAttribute has a CSS equivalence
     // in this implementation for node; let's check if it carries those css styles
     nsAutoString value;
     if (aValue) value.Assign(*aValue);
     mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(node, aProperty, aAttribute,
                                                        bHasProp, value,
                                                        COMPUTED_STYLE_TYPE);
   }
@@ -356,165 +350,198 @@ nsHTMLEditor::SetInlinePropertyOnTextNod
   }
   
   // reparent the node inside inline node with appropriate {attribute,value}
   return SetInlinePropertyOnNode(node, aProperty, aAttribute, aValue);
 }
 
 
 nsresult
-nsHTMLEditor::SetInlinePropertyOnNode( nsIDOMNode *aNode,
-                                       nsIAtom *aProperty, 
-                                       const nsAString *aAttribute,
-                                       const nsAString *aValue)
+nsHTMLEditor::SetInlinePropertyOnNodeImpl(nsIDOMNode *aNode,
+                                          nsIAtom *aProperty,
+                                          const nsAString *aAttribute,
+                                          const nsAString *aValue)
 {
-  NS_ENSURE_TRUE(aNode && aProperty, NS_ERROR_NULL_POINTER);
+  MOZ_ASSERT(aNode && aProperty);
 
-  nsresult res = NS_OK;
+  nsresult res;
   nsCOMPtr<nsIDOMNode> tmp;
   nsAutoString tag;
   aProperty->ToString(tag);
   ToLowerCase(tag);
 
+  // If this is an element that can't be contained in a span, we have to
+  // recurse to its children.
+  if (!TagCanContain(NS_LITERAL_STRING("span"), aNode)) {
+    nsCOMPtr<nsIDOMNodeList> childNodes;
+    res = aNode->GetChildNodes(getter_AddRefs(childNodes));
+    NS_ENSURE_SUCCESS(res, res);
+    if (childNodes) {
+      PRInt32 j;
+      PRUint32 childCount;
+      childNodes->GetLength(&childCount);
+      if (childCount) {
+        nsCOMArray<nsIDOMNode> arrayOfNodes;
+
+        // populate the list
+        for (j = 0; j < (PRInt32)childCount; j++) {
+          nsCOMPtr<nsIDOMNode> childNode;
+          res = childNodes->Item(j, getter_AddRefs(childNode));
+          if (NS_SUCCEEDED(res) && childNode && IsEditable(childNode)) {
+            arrayOfNodes.AppendObject(childNode);
+          }
+        }
+
+        // then loop through the list, set the property on each node
+        PRInt32 listCount = arrayOfNodes.Count();
+        for (j = 0; j < listCount; j++) {
+          res = SetInlinePropertyOnNode(arrayOfNodes[j], aProperty,
+                                        aAttribute, aValue);
+          NS_ENSURE_SUCCESS(res, res);
+        }
+      }
+    }
+    return NS_OK;
+  }
+
   bool useCSS = (IsCSSEnabled() &&
-    mHTMLCSSUtils->IsCSSEditableProperty(aNode, aProperty, aAttribute)) ||
-    // bgcolor is always done using CSS
-    aAttribute->EqualsLiteral("bgcolor");
-  
+                 mHTMLCSSUtils->IsCSSEditableProperty(aNode, aProperty,
+                                                      aAttribute, aValue)) ||
+                // bgcolor is always done using CSS
+                aAttribute->EqualsLiteral("bgcolor");
+
   if (useCSS) {
-    nsCOMPtr<nsIDOMNode> tmp = aNode;
-    if (IsTextNode(tmp))
-    {
-      // we are working on a text node and need to create a span container
-      // that will carry the styles
-      InsertContainerAbove(aNode, 
-                           address_of(tmp), 
-                           NS_LITERAL_STRING("span"),
-                           nsnull,
-                           nsnull);
+    tmp = aNode;
+    // We only add style="" to <span>s with no attributes (bug 746515).  If we
+    // don't have one, we need to make one.
+    nsCOMPtr<dom::Element> element = do_QueryInterface(tmp);
+    if (!element || !element->IsHTML(nsGkAtoms::span) ||
+        element->GetAttrCount()) {
+      res = InsertContainerAbove(aNode, address_of(tmp),
+                                 NS_LITERAL_STRING("span"),
+                                 nsnull, nsnull);
+      NS_ENSURE_SUCCESS(res, res);
     }
-    nsCOMPtr<nsIDOMElement>element;
-    element = do_QueryInterface(tmp);
-    // first we have to remove occurences of the same style hint in the
-    // children of the aNode
-    res = RemoveStyleInside(tmp, aProperty, aAttribute, true);
-    NS_ENSURE_SUCCESS(res, res);
+    // Add the CSS styles corresponding to the HTML style request
     PRInt32 count;
-    // then we add the css styles corresponding to the HTML style request
-    res = mHTMLCSSUtils->SetCSSEquivalentToHTMLStyle(element, aProperty, aAttribute, aValue, &count, false);
+    res = mHTMLCSSUtils->SetCSSEquivalentToHTMLStyle(tmp, aProperty,
+                                                     aAttribute, aValue,
+                                                     &count, false);
     NS_ENSURE_SUCCESS(res, res);
 
     nsCOMPtr<nsIDOMNode> nextSibling, previousSibling;
     GetNextHTMLSibling(tmp, address_of(nextSibling));
     GetPriorHTMLSibling(tmp, address_of(previousSibling));
-    if (nextSibling || previousSibling)
-    {
+    if (nextSibling || previousSibling) {
       nsCOMPtr<nsIDOMNode> mergeParent;
       res = tmp->GetParentNode(getter_AddRefs(mergeParent));
       NS_ENSURE_SUCCESS(res, res);
       if (previousSibling &&
           nsEditor::NodeIsType(previousSibling, nsEditProperty::span) &&
-          NodesSameType(tmp, previousSibling))
-      {
+          NodesSameType(tmp, previousSibling)) {
         res = JoinNodes(previousSibling, tmp, mergeParent);
         NS_ENSURE_SUCCESS(res, res);
       }
       if (nextSibling &&
           nsEditor::NodeIsType(nextSibling, nsEditProperty::span) &&
-          NodesSameType(tmp, nextSibling))
-      {
+          NodesSameType(tmp, nextSibling)) {
         res = JoinNodes(tmp, nextSibling, mergeParent);
+        NS_ENSURE_SUCCESS(res, res);
       }
     }
-    return res;
+    return NS_OK;
   }
-  
-  // don't need to do anything if property already set on node
-  bool bHasProp;
-  nsCOMPtr<nsIDOMNode> styleNode;
-  IsTextPropertySetByContent(aNode, aProperty, aAttribute, aValue, bHasProp, getter_AddRefs(styleNode));
-  if (bHasProp) return NS_OK;
 
   // is it already the right kind of node, but with wrong attribute?
-  if (NodeIsType(aNode, aProperty))
-  {
-    // just set the attribute on it.
-    // but first remove any contrary style in it's children.
-    res = RemoveStyleInside(aNode, aProperty, aAttribute, true);
-    NS_ENSURE_SUCCESS(res, res);
+  if (NodeIsType(aNode, aProperty)) {
+    // Just set the attribute on it.
     nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(aNode);
     return SetAttribute(elem, *aAttribute, *aValue);
   }
-  
-  // can it be put inside inline node?
-  if (TagCanContain(tag, aNode))
-  {
-    nsCOMPtr<nsIDOMNode> priorNode, nextNode;
-    // is either of it's neighbors the right kind of node?
-    GetPriorHTMLSibling(aNode, address_of(priorNode));
-    GetNextHTMLSibling(aNode, address_of(nextNode));
-    if (priorNode && NodeIsType(priorNode, aProperty) && 
-        HasAttrVal(priorNode, aAttribute, aValue)     &&
-        IsOnlyAttribute(priorNode, aAttribute) )
-    {
-      // previous sib is already right kind of inline node; slide this over into it
-      res = MoveNode(aNode, priorNode, -1);
-    }
-    else if (nextNode && NodeIsType(nextNode, aProperty) && 
-             HasAttrVal(nextNode, aAttribute, aValue)    &&
-             IsOnlyAttribute(priorNode, aAttribute) )
-    {
-      // following sib is already right kind of inline node; slide this over into it
-      res = MoveNode(aNode, nextNode, 0);
-    }
-    else
-    {
-      // ok, chuck it in its very own container
-      res = InsertContainerAbove(aNode, address_of(tmp), tag, aAttribute, aValue);
-    }
-    NS_ENSURE_SUCCESS(res, res);
-    return RemoveStyleInside(aNode, aProperty, aAttribute);
+
+  // Either put it inside a neighboring node, or make a new one.
+
+  nsCOMPtr<nsIDOMNode> priorNode, nextNode;
+  // is either of its neighbors the right kind of node?
+  GetPriorHTMLSibling(aNode, address_of(priorNode));
+  GetNextHTMLSibling(aNode, address_of(nextNode));
+  if (priorNode && NodeIsType(priorNode, aProperty) &&
+      HasAttrVal(priorNode, aAttribute, aValue) &&
+      IsOnlyAttribute(priorNode, aAttribute)) {
+    // previous sib is already right kind of inline node; slide this over into it
+    return MoveNode(aNode, priorNode, -1);
+  }
+
+  if (nextNode && NodeIsType(nextNode, aProperty) &&
+      HasAttrVal(nextNode, aAttribute, aValue) &&
+      IsOnlyAttribute(priorNode, aAttribute)) {
+    // following sib is already right kind of inline node; slide this over into it
+    return MoveNode(aNode, nextNode, 0);
   }
-  // none of the above?  then cycle through the children.
-  nsCOMPtr<nsIDOMNodeList> childNodes;
-  res = aNode->GetChildNodes(getter_AddRefs(childNodes));
+
+  // ok, chuck it in its very own container
+  return InsertContainerAbove(aNode, address_of(tmp), tag, aAttribute, aValue);
+}
+
+
+nsresult
+nsHTMLEditor::SetInlinePropertyOnNode(nsIDOMNode *aNode,
+                                      nsIAtom *aProperty,
+                                      const nsAString *aAttribute,
+                                      const nsAString *aValue)
+{
+  // Before setting the property, we remove it if it's already set.
+  // RemoveStyleInside might remove the node we're looking at or some of its
+  // descendants, however, in which case we want to set the property on
+  // whatever wound up in its place.  We have to save the original siblings and
+  // parent to figure this out.
+  NS_ENSURE_TRUE(aNode && aProperty, NS_ERROR_NULL_POINTER);
+
+  nsCOMPtr<nsIContent> node = do_QueryInterface(aNode);
+  NS_ENSURE_STATE(node);
+  nsCOMPtr<nsIContent> previousSibling = node->GetPreviousSibling(),
+                       nextSibling = node->GetNextSibling();
+  nsCOMPtr<nsINode> parent = node->GetNodeParent();
+  NS_ENSURE_STATE(parent);
+
+  nsresult res = RemoveStyleInside(aNode, aProperty, aAttribute);
   NS_ENSURE_SUCCESS(res, res);
-  if (childNodes)
-  {
-    PRInt32 j;
-    PRUint32 childCount;
-    childNodes->GetLength(&childCount);
-    if (childCount)
-    {
-      nsCOMArray<nsIDOMNode> arrayOfNodes;
-      nsCOMPtr<nsIDOMNode> node;
-      
-      // populate the list
-      for (j=0 ; j < (PRInt32)childCount; j++)
-      {
-        nsCOMPtr<nsIDOMNode> childNode;
-        res = childNodes->Item(j, getter_AddRefs(childNode));
-        if ((NS_SUCCEEDED(res)) && (childNode) && IsEditable(childNode))
-        {
-          arrayOfNodes.AppendObject(childNode);
-        }
-      }
-      
-      // then loop through the list, set the property on each node
-      PRInt32 listCount = arrayOfNodes.Count();
-      for (j = 0; j < listCount; j++)
-      {
-        node = arrayOfNodes[j];
-        res = SetInlinePropertyOnNode(node, aProperty, aAttribute, aValue);
-        NS_ENSURE_SUCCESS(res, res);
-      }
-      arrayOfNodes.Clear();
+
+  if (node->GetNodeParent()) {
+    // The node is still where it was
+    return SetInlinePropertyOnNodeImpl(aNode, aProperty,
+                                       aAttribute, aValue);
+  }
+
+  // It's vanished.  Use the old siblings for reference to construct a
+  // list.  But first, verify that the previous/next siblings are still
+  // where we expect them; otherwise we have to give up.
+  if ((previousSibling && previousSibling->GetNodeParent() != parent) ||
+      (nextSibling && nextSibling->GetNodeParent() != parent)) {
+    return NS_ERROR_UNEXPECTED;
+  }
+  nsCOMArray<nsIContent> nodesToSet;
+  nsCOMPtr<nsIContent> cur = previousSibling
+    ? previousSibling->GetNextSibling() : parent->GetFirstChild();
+  while (cur && cur != nextSibling) {
+    if (IsEditable(cur)) {
+      nodesToSet.AppendObject(cur);
     }
+    cur = cur->GetNextSibling();
   }
-  return res;
+
+  PRInt32 nodesToSetCount = nodesToSet.Count();
+  for (PRInt32 k = 0; k < nodesToSetCount; k++) {
+    nsCOMPtr<nsIDOMNode> nodeToSet = do_QueryInterface(nodesToSet[k]);
+    res = SetInlinePropertyOnNodeImpl(nodeToSet, aProperty,
+                                      aAttribute, aValue);
+    NS_ENSURE_SUCCESS(res, res);
+  }
+
+  return NS_OK;
 }
 
 
 nsresult nsHTMLEditor::SplitStyleAboveRange(nsIDOMRange *inRange, 
                                             nsIAtom *aProperty, 
                                             const nsAString *aAttribute)
 {
   NS_ENSURE_TRUE(inRange, NS_ERROR_NULL_POINTER);
@@ -619,133 +646,123 @@ nsresult nsHTMLEditor::ApplyDefaultPrope
     NS_ENSURE_TRUE(propItem, NS_ERROR_NULL_POINTER);
     res = SetInlineProperty(propItem->tag, propItem->attr, propItem->value);
     NS_ENSURE_SUCCESS(res, res);
   }
   return res;
 }
 
 nsresult nsHTMLEditor::RemoveStyleInside(nsIDOMNode *aNode, 
-                                         nsIAtom *aProperty,   // null here means remove all properties
+                                         // null here means remove all properties
+                                         nsIAtom *aProperty,
                                          const nsAString *aAttribute,
-                                         bool aChildrenOnly)
+                                         const bool aChildrenOnly)
 {
   NS_ENSURE_TRUE(aNode, NS_ERROR_NULL_POINTER);
-  if (IsTextNode(aNode)) return NS_OK;
-  nsresult res = NS_OK;
+  if (IsTextNode(aNode)) {
+    return NS_OK;
+  }
+  nsresult res;
 
   // first process the children
   nsCOMPtr<nsIDOMNode> child, tmp;
   aNode->GetFirstChild(getter_AddRefs(child));
-  while (child)
-  {
+  while (child) {
     // cache next sibling since we might remove child
     child->GetNextSibling(getter_AddRefs(tmp));
     res = RemoveStyleInside(child, aProperty, aAttribute);
     NS_ENSURE_SUCCESS(res, res);
     child = tmp;
   }
 
   // then process the node itself
-  if ((!aChildrenOnly &&
-        ((aProperty && NodeIsType(aNode, aProperty)) || // node is prop we asked for
-        (aProperty == nsEditProperty::href && nsHTMLEditUtils::IsLink(aNode)) || // but check for link (<a href=...)
-        (aProperty == nsEditProperty::name && nsHTMLEditUtils::IsNamedAnchor(aNode)))) || // and for named anchors
-        (!aProperty && NodeIsProperty(aNode)))  // or node is any prop and we asked for that
-  {
+  if (
+    (!aChildrenOnly &&
+      (
+        // node is prop we asked for
+        (aProperty && NodeIsType(aNode, aProperty)) ||
+        // but check for link (<a href=...)
+        (aProperty == nsEditProperty::href && nsHTMLEditUtils::IsLink(aNode)) ||
+        // and for named anchors
+        (aProperty == nsEditProperty::name && nsHTMLEditUtils::IsNamedAnchor(aNode))
+      )
+    ) ||
+    // or node is any prop and we asked for that
+    (!aProperty && NodeIsProperty(aNode))
+  ) {
     // if we weren't passed an attribute, then we want to 
     // remove any matching inlinestyles entirely
-    if (!aAttribute || aAttribute->IsEmpty())
-    {
+    if (!aAttribute || aAttribute->IsEmpty()) {
       NS_NAMED_LITERAL_STRING(styleAttr, "style");
       NS_NAMED_LITERAL_STRING(classAttr, "class");
       bool hasStyleAttr = HasAttr(aNode, &styleAttr);
-      bool hasClassAtrr = HasAttr(aNode, &classAttr);
-      if (aProperty &&
-          (hasStyleAttr || hasClassAtrr)) {
+      bool hasClassAttr = HasAttr(aNode, &classAttr);
+      if (aProperty && (hasStyleAttr || hasClassAttr)) {
         // aNode carries inline styles or a class attribute so we can't
         // just remove the element... We need to create above the element
         // a span that will carry those styles or class, then we can delete
         // the node.
         nsCOMPtr<nsIDOMNode> spanNode;
         res = InsertContainerAbove(aNode, address_of(spanNode),
                                    NS_LITERAL_STRING("span"));
         NS_ENSURE_SUCCESS(res, res);
         res = CloneAttribute(styleAttr, spanNode, aNode);
         NS_ENSURE_SUCCESS(res, res);
         res = CloneAttribute(classAttr, spanNode, aNode);
         NS_ENSURE_SUCCESS(res, res);
-        if (hasStyleAttr)
-        {
-          // we need to remove the styles property corresponding to
-          // aProperty (bug 215406)
-          nsAutoString propertyValue;
-          mHTMLCSSUtils->RemoveCSSEquivalentToHTMLStyle(spanNode,
-                                                        aProperty,
-                                                        aAttribute,
-                                                        &propertyValue,
-                                                        false);
-          // remove the span if it's useless
-          RemoveElementIfNoStyleOrIdOrClass(spanNode);
-        }
       }
       res = RemoveContainer(aNode);
-    }
-    // otherwise we just want to eliminate the attribute
-    else
-    {
-      if (HasAttr(aNode, aAttribute))
-      {
+      NS_ENSURE_SUCCESS(res, res);
+    } else {
+      // otherwise we just want to eliminate the attribute
+      if (HasAttr(aNode, aAttribute)) {
         // if this matching attribute is the ONLY one on the node,
         // then remove the whole node.  Otherwise just nix the attribute.
-        if (IsOnlyAttribute(aNode, aAttribute))
-        {
+        if (IsOnlyAttribute(aNode, aAttribute)) {
           res = RemoveContainer(aNode);
-        }
-        else
-        {
+        } else {
           nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(aNode);
           NS_ENSURE_TRUE(elem, NS_ERROR_NULL_POINTER);
           res = RemoveAttribute(elem, *aAttribute);
         }
+        NS_ENSURE_SUCCESS(res, res);
       }
     }
   }
-  else {
-    if (!aChildrenOnly && IsCSSEnabled() &&
-        mHTMLCSSUtils->IsCSSEditableProperty(aNode, aProperty, aAttribute)) {
-      // the HTML style defined by aProperty/aAttribute has a CSS equivalence
-      // in this implementation for the node aNode; let's check if it carries those css styles
-      nsAutoString propertyValue;
-      bool isSet;
-      mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(aNode, aProperty, aAttribute,
-                                                         isSet, propertyValue,
-                                                         SPECIFIED_STYLE_TYPE);
-      if (isSet) {
-        // yes, tmp has the corresponding css declarations in its style attribute
-        // let's remove them
-        mHTMLCSSUtils->RemoveCSSEquivalentToHTMLStyle(aNode,
-                                                      aProperty,
-                                                      aAttribute,
-                                                      &propertyValue,
-                                                      false);
-        // remove the node if it is a span, if its style attribute is empty or absent,
-        // and if it does not have a class nor an id
-        RemoveElementIfNoStyleOrIdOrClass(aNode);
-        res = NS_OK;
-      }
+
+  if (!aChildrenOnly &&
+      mHTMLCSSUtils->IsCSSEditableProperty(aNode, aProperty, aAttribute)) {
+    // the HTML style defined by aProperty/aAttribute has a CSS equivalence in
+    // this implementation for the node aNode; let's check if it carries those
+    // css styles
+    nsAutoString propertyValue;
+    bool isSet;
+    mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(aNode, aProperty, aAttribute,
+                                                       isSet, propertyValue,
+                                                       SPECIFIED_STYLE_TYPE);
+    if (isSet) {
+      // yes, tmp has the corresponding css declarations in its style attribute
+      // let's remove them
+      mHTMLCSSUtils->RemoveCSSEquivalentToHTMLStyle(aNode,
+                                                    aProperty,
+                                                    aAttribute,
+                                                    &propertyValue,
+                                                    false);
+      // remove the node if it is a span or font, if its style attribute is
+      // empty or absent, and if it does not have a class nor an id
+      RemoveElementIfNoStyleOrIdOrClass(aNode);
     }
-  }  
-  if ( aProperty == nsEditProperty::font &&    // or node is big or small and we are setting font size
-       (nsHTMLEditUtils::IsBig(aNode) || nsHTMLEditUtils::IsSmall(aNode)) &&
-       aAttribute && aAttribute->LowerCaseEqualsLiteral("size"))       
-  {
-    res = RemoveContainer(aNode);  // if we are setting font size, remove any nested bigs and smalls
   }
-  return res;
+
+  if (aProperty == nsEditProperty::font &&    // or node is big or small and we are setting font size
+      (nsHTMLEditUtils::IsBig(aNode) || nsHTMLEditUtils::IsSmall(aNode)) &&
+      aAttribute && aAttribute->LowerCaseEqualsLiteral("size")) {
+    return RemoveContainer(aNode);  // if we are setting font size, remove any nested bigs and smalls
+  }
+  return NS_OK;
 }
 
 bool nsHTMLEditor::IsOnlyAttribute(nsIDOMNode *aNode, 
                                      const nsAString *aAttribute)
 {
   NS_ENSURE_TRUE(aNode && aAttribute, false);  // ooops
   nsCOMPtr<nsIContent> content = do_QueryInterface(aNode);
   NS_ENSURE_TRUE(content, false);  // ooops
@@ -957,35 +974,35 @@ bool nsHTMLEditor::IsAtEndOfNode(nsIDOMN
     if (offset < aOffset) return true;
     return false;
   }
 }
 
 
 nsresult
 nsHTMLEditor::GetInlinePropertyBase(nsIAtom *aProperty, 
-                             const nsAString *aAttribute,
-                             const nsAString *aValue,
-                             bool *aFirst, 
-                             bool *aAny, 
-                             bool *aAll,
-                             nsAString *outValue,
-                             bool aCheckDefaults)
+                                    const nsAString *aAttribute,
+                                    const nsAString *aValue,
+                                    bool *aFirst, 
+                                    bool *aAny, 
+                                    bool *aAll,
+                                    nsAString *outValue,
+                                    bool aCheckDefaults)
 {
   NS_ENSURE_TRUE(aProperty, NS_ERROR_NULL_POINTER);
 
   nsresult result;
-  *aAny=false;
-  *aAll=true;
-  *aFirst=false;
-  bool first=true;
+  *aAny = false;
+  *aAll = true;
+  *aFirst = false;
+  bool first = true;
 
   bool useCSS = IsCSSEnabled();
 
-  nsCOMPtr<nsISelection>selection;
+  nsCOMPtr<nsISelection> selection;
   result = GetSelection(getter_AddRefs(selection));
   NS_ENSURE_SUCCESS(result, result);
   NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
   nsCOMPtr<nsISelectionPrivate> selPriv(do_QueryInterface(selection));
 
   bool isCollapsed;
   selection->GetIsCollapsed(&isCollapsed);
   nsCOMPtr<nsIDOMNode> collapsedNode;
@@ -994,178 +1011,170 @@ nsHTMLEditor::GetInlinePropertyBase(nsIA
   NS_ENSURE_SUCCESS(result, result);
   NS_ENSURE_TRUE(enumerator, NS_ERROR_NULL_POINTER);
 
   enumerator->First(); 
   nsCOMPtr<nsISupports> currentItem;
   result = enumerator->CurrentItem(getter_AddRefs(currentItem));
   // XXX: should be a while loop, to get each separate range
   // XXX: ERROR_HANDLING can currentItem be null?
-  if ((NS_SUCCEEDED(result)) && currentItem)
-  {
+  if (NS_SUCCEEDED(result) && currentItem) {
     bool firstNodeInRange = true; // for each range, set a flag 
     nsCOMPtr<nsIDOMRange> range(do_QueryInterface(currentItem));
 
-    if (isCollapsed)
-    {
+    if (isCollapsed) {
       range->GetStartContainer(getter_AddRefs(collapsedNode));
       NS_ENSURE_TRUE(collapsedNode, NS_ERROR_FAILURE);
       bool isSet, theSetting;
-      if (aAttribute)
-      {
+      if (aAttribute) {
         nsString tString(*aAttribute); //MJUDGE SCC NEED HELP
-        nsString tOutString;//MJUDGE SCC NEED HELP
-        mTypeInState->GetTypingState(isSet, theSetting, aProperty, tString, &tOutString);
-        if (outValue)
+        nsString tOutString; //MJUDGE SCC NEED HELP
+        mTypeInState->GetTypingState(isSet, theSetting, aProperty, tString,
+                                     &tOutString);
+        if (outValue) {
           outValue->Assign(tOutString);
+        }
+      } else {
+        mTypeInState->GetTypingState(isSet, theSetting, aProperty);
       }
-      else
-        mTypeInState->GetTypingState(isSet, theSetting, aProperty);
-      if (isSet)
-      {
+      if (isSet) {
         *aFirst = *aAny = *aAll = theSetting;
         return NS_OK;
       }
       if (!useCSS) {
         nsCOMPtr<nsIDOMNode> resultNode;
         IsTextPropertySetByContent(collapsedNode, aProperty, aAttribute, aValue,
                                    isSet, getter_AddRefs(resultNode), outValue);
         *aFirst = *aAny = *aAll = isSet;
 
-        if (!isSet && aCheckDefaults) 
-        {
-          // style not set, but if it is a default then it will appear if 
-          // content is inserted, so we should report it as set (analogous to TypeInState).
+        if (!isSet && aCheckDefaults) {
+          // style not set, but if it is a default then it will appear if
+          // content is inserted, so we should report it as set (analogous to
+          // TypeInState).
           PRInt32 index;
-          if (aAttribute &&
-              TypeInState::FindPropInList(aProperty, *aAttribute, outValue, mDefaultStyles, index))
-          {
+          if (aAttribute && TypeInState::FindPropInList(aProperty, *aAttribute,
+                                                        outValue, mDefaultStyles,
+                                                        index)) {
             *aFirst = *aAny = *aAll = true;
-            if (outValue)
+            if (outValue) {
               outValue->Assign(mDefaultStyles[index]->value);
+            }
           }
         }
         return NS_OK;
       }
     }
 
     // non-collapsed selection
     nsCOMPtr<nsIContentIterator> iter =
             do_CreateInstance("@mozilla.org/content/post-content-iterator;1");
     NS_ENSURE_TRUE(iter, NS_ERROR_NULL_POINTER);
 
-    iter->Init(range);
     nsAutoString firstValue, theValue;
 
     nsCOMPtr<nsIDOMNode> endNode;
     PRInt32 endOffset;
     result = range->GetEndContainer(getter_AddRefs(endNode));
     NS_ENSURE_SUCCESS(result, result);
     result = range->GetEndOffset(&endOffset);
     NS_ENSURE_SUCCESS(result, result);
-    while (!iter->IsDone())
-    {
+
+    for (iter->Init(range); !iter->IsDone(); iter->Next()) {
       nsCOMPtr<nsIContent> content = do_QueryInterface(iter->GetCurrentNode());
-
       nsCOMPtr<nsIDOMNode> node = do_QueryInterface(content);
 
-      if (node && nsTextEditUtils::IsBody(node))
+      if (node && nsTextEditUtils::IsBody(node)) {
         break;
+      }
 
-      nsCOMPtr<nsIDOMCharacterData>text;
+      nsCOMPtr<nsIDOMCharacterData> text;
       text = do_QueryInterface(content);
       
-      bool skipNode = false;
-      
       // just ignore any non-editable nodes
-      if (text && !IsEditable(text))
-      {
-        skipNode = true;
+      if (text && !IsEditable(text)) {
+        continue;
       }
-      else if (text)
-      {
-        if (!isCollapsed && first && firstNodeInRange)
-        {
+      if (text) {
+        if (!isCollapsed && first && firstNodeInRange) {
           firstNodeInRange = false;
           PRInt32 startOffset;
           range->GetStartOffset(&startOffset);
           PRUint32 count;
           text->GetLength(&count);
-          if (startOffset==(PRInt32)count) 
-          {
-            skipNode = true;
+          if (startOffset == (PRInt32)count) {
+            continue;
           }
+        } else if (node == endNode && !endOffset) {
+          continue;
         }
-        else if (node == endNode && !endOffset)
-        {
-          skipNode = true;
-        }
-      }
-      else if (content->IsElement())
-      { // handle non-text leaf nodes here
-        skipNode = true;
+      } else if (content->IsElement()) {
+        // handle non-text leaf nodes here
+        continue;
       }
-      if (!skipNode)
-      {
-        if (node)
-        {
-          bool isSet = false;
-          nsCOMPtr<nsIDOMNode>resultNode;
-          if (first)
-          {
-            if (useCSS &&
-                mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty, aAttribute)) {
-              // the HTML styles defined by aProperty/aAttribute has a CSS equivalence
-              // in this implementation for node; let's check if it carries those css styles
-              if (aValue) firstValue.Assign(*aValue);
-              mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(node, aProperty, aAttribute,
-                                                                 isSet, firstValue,
-                                                                 COMPUTED_STYLE_TYPE);
+      if (node) {
+        bool isSet = false;
+        nsCOMPtr<nsIDOMNode> resultNode;
+        if (first) {
+          if (mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty,
+                                                   aAttribute) &&
+              // Bug 747889: we don't support CSS for fontSize values
+              (aProperty != nsEditProperty::font ||
+               !aAttribute->EqualsLiteral("size"))) {
+            // the HTML styles defined by aProperty/aAttribute has a CSS
+            // equivalence in this implementation for node; let's check if it
+            // carries those css styles
+            if (aValue) {
+              firstValue.Assign(*aValue);
             }
-            else {
-              IsTextPropertySetByContent(node, aProperty, aAttribute, aValue, isSet,
-                                         getter_AddRefs(resultNode), &firstValue);
-            }
-            *aFirst = isSet;
-            first = false;
-            if (outValue) *outValue = firstValue;
+            mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(node, aProperty, aAttribute,
+                                                               isSet, firstValue,
+                                                               COMPUTED_STYLE_TYPE);
+          } else {
+            IsTextPropertySetByContent(node, aProperty, aAttribute, aValue, isSet,
+                                       getter_AddRefs(resultNode), &firstValue);
+          }
+          *aFirst = isSet;
+          first = false;
+          if (outValue) {
+            *outValue = firstValue;
           }
-          else
-          {
-            if (useCSS &&
-                mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty, aAttribute)) {
-              // the HTML styles defined by aProperty/aAttribute has a CSS equivalence
-              // in this implementation for node; let's check if it carries those css styles
-              if (aValue) theValue.Assign(*aValue);
-              mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(node, aProperty, aAttribute,
-                                                                 isSet, theValue,
-                                                                 COMPUTED_STYLE_TYPE);
+        } else {
+          if (mHTMLCSSUtils->IsCSSEditableProperty(node, aProperty,
+                                                   aAttribute) &&
+              // Bug 747889: we don't support CSS for fontSize values
+              (aProperty != nsEditProperty::font ||
+               !aAttribute->EqualsLiteral("size"))) {
+            // the HTML styles defined by aProperty/aAttribute has a CSS equivalence
+            // in this implementation for node; let's check if it carries those css styles
+            if (aValue) {
+              theValue.Assign(*aValue);
             }
-            else {
-              IsTextPropertySetByContent(node, aProperty, aAttribute, aValue, isSet,
-                                         getter_AddRefs(resultNode), &theValue);
-            }
-            if (firstValue != theValue)
-              *aAll = false;
+            mHTMLCSSUtils->IsCSSEquivalentToHTMLInlineStyleSet(node, aProperty, aAttribute,
+                                                               isSet, theValue,
+                                                               COMPUTED_STYLE_TYPE);
+          } else {
+            IsTextPropertySetByContent(node, aProperty, aAttribute, aValue, isSet,
+                                       getter_AddRefs(resultNode), &theValue);
           }
-          
-          if (isSet) {
-            *aAny = true;
-          }
-          else {
+          if (firstValue != theValue) {
             *aAll = false;
           }
         }
+        
+        if (isSet) {
+          *aAny = true;
+        } else {
+          *aAll = false;
+        }
       }
-
-      iter->Next();
     }
   }
-  if (!*aAny) 
-  { // make sure that if none of the selection is set, we don't report all is set
+  if (!*aAny) {
+    // make sure that if none of the selection is set, we don't report all is
+    // set
     *aAll = false;
   }
   return result;
 }
 
 
 NS_IMETHODIMP nsHTMLEditor::GetInlineProperty(nsIAtom *aProperty, 
                                               const nsAString &aAttribute, 
@@ -1892,14 +1901,16 @@ nsHTMLEditor::HasStyleOrIdOrClass(dom::E
 
 nsresult
 nsHTMLEditor::RemoveElementIfNoStyleOrIdOrClass(nsIDOMNode* aElement)
 {
   nsCOMPtr<dom::Element> element = do_QueryInterface(aElement);
   NS_ENSURE_TRUE(element, NS_ERROR_NULL_POINTER);
 
   // early way out if node is not the right kind of element
-  if (!element->IsHTML(nsGkAtoms::span) || HasStyleOrIdOrClass(element)) {
+  if ((!element->IsHTML(nsGkAtoms::span) &&
+       !element->IsHTML(nsGkAtoms::font)) ||
+      HasStyleOrIdOrClass(element)) {
     return NS_OK;
   }
 
   return RemoveContainer(element);
 }
--- a/editor/libeditor/html/tests/Makefile.in
+++ b/editor/libeditor/html/tests/Makefile.in
@@ -58,16 +58,17 @@ include $(topsrcdir)/config/rules.mk
 		test_bug432225.html \
 		test_bug439808.html \
 		test_bug442186.html \
 		test_bug449243.html \
 		test_bug455992.html \
 		test_bug456244.html \
 		test_bug460740.html \
 		test_bug478725.html \
+		test_bug480647.html \
 		test_bug480972.html \
 		test_bug484181.html \
 		test_bug487524.html \
 		test_bug520189.html \
 		test_bug525389.html \
 		test_bug537046.html \
 		test_bug549262.html \
 		file_bug549262.html \
--- a/editor/libeditor/html/tests/browserscope/lib/richtext/currentStatus.js
+++ b/editor/libeditor/html/tests/browserscope/lib/richtext/currentStatus.js
@@ -14,38 +14,28 @@ var knownFailures = {
   'change' : {
     '0-undefined' : true
   },
   'query' : {
     '0-undefined' : true
   },
   'a' : {
     'createbookmark-0' : true,
-    'fontsize-1' : true,
     'subscript-1' : true,
     'superscript-1' : true,
   },
   'u': {
     'removeformat-1' : true,
     'removeformat-2' : true,
     'strikethrough-2' : true,
     'subscript-1' : true,
     'superscript-1' : true,
     'unbookmark-0' : true,
   },
   'q': {
     'fontsize-1' : true,
     'fontsize-2' : true,
   },
-  'c': {
-    'fontname-0' : true,
-    'fontname-2' : true,
-    'fontname-3' : true,
-    'fontsize-1' : true,
-    'fontsize-2' : true,
-    'forecolor-0' : true,
-    'forecolor-2' : true,
-  },
 };
 
 function isKnownFailure(type, test, param) {
   return (type in knownFailures) && ((test + "-" + param) in knownFailures[type]);
 }
--- a/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js
+++ b/editor/libeditor/html/tests/browserscope/lib/richtext2/currentStatus.js
@@ -1,23832 +1,2101 @@
 /**
  * The current status of the test suite.
  *
  * See README.Mozilla for details on how to generate this.
  */
-const TEST_RESULTS = {
-  "S": {
-    "Proposed": {
-      "SELALL_TEXT-1_SI": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{`foo bar baz´}",
-          "innerHTML": "{`foo bar baz´}",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">{`foo bar baz´}</body>",
-          "bodyInnerHTML": "{`foo bar baz´}",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">{`foo bar baz´}</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{`foo bar baz´}",
-          "innerHTML": "{`foo bar baz´}",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">{`foo bar baz´}</body>",
-          "bodyInnerHTML": "{`foo bar baz´}",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">{`foo bar baz´}</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{`foo bar baz´}",
-          "innerHTML": "{`foo bar baz´}",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">{`foo bar baz´}</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">{`foo bar baz´}</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">{`foo bar baz´}</div>CAN<br>ARY</body>"
-        }
-      },
-      "SELALL_I-1_SI": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{<i>`foo bar baz´</i>}",
-          "innerHTML": "{<i>`foo bar baz´</i>}",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">{<i>`foo bar baz´</i>}</body>",
-          "bodyInnerHTML": "{<i>`foo bar baz´</i>}",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">{<i>`foo bar baz´</i>}</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{<i>`foo bar baz´</i>}",
-          "innerHTML": "{<i>`foo bar baz´</i>}",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">{<i>`foo bar baz´</i>}</body>",
-          "bodyInnerHTML": "{<i>`foo bar baz´</i>}",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">{<i>`foo bar baz´</i>}</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "{<i>`foo bar baz´</i>}",
-          "innerHTML": "{<i>`foo bar baz´</i>}",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">{<i>`foo bar baz´</i>}</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">{<i>`foo bar baz´</i>}</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">{<i>`foo bar baz´</i>}</div>CAN<br>ARY</body>"
-        }
-      },
-      "UNSEL_TEXT-1_SI": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [bar] baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ba^r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo bar ^baz´",
-          "innerHTML": "`foo bar ^baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar ^baz´</body>",
-          "bodyInnerHTML": "`foo bar ^baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar ^baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo bar ^baz´",
-          "innerHTML": "`foo bar ^baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar ^baz´</body>",
-          "bodyInnerHTML": "`foo bar ^baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar ^baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo bar ^baz´",
-          "innerHTML": "`foo bar ^baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo bar ^baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo bar ^baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo bar ^baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ba^r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar^ baz´</body>",
-          "bodyInnerHTML": "`foo bar^ baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar^ baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar^ baz´</body>",
-          "bodyInnerHTML": "`foo bar^ baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar^ baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo bar^ baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo bar^ baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo bar^ baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-1_SC-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar^ baz´</body>",
-          "bodyInnerHTML": "`foo bar^ baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar^ baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar^ baz´</body>",
-          "bodyInnerHTML": "`foo bar^ baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar^ baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar^ baz´",
-          "innerHTML": "`foo bar^ baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo bar^ baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo bar^ baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo bar^ baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar baz^´",
-          "innerHTML": "`foo bar baz^´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar baz^´</body>",
-          "bodyInnerHTML": "`foo bar baz^´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo bar baz^´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar baz^´",
-          "innerHTML": "`foo bar baz^´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar baz^´</body>",
-          "bodyInnerHTML": "`foo bar baz^´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo bar baz^´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo bar baz^´",
-          "innerHTML": "`foo bar baz^´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo bar baz^´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo bar baz^´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo bar baz^´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.w_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.w_TEXT-1_SC-3": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.w_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-2_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö^barbaz´</body>",
-          "bodyInnerHTML": "`foö^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö^barbaz´</body>",
-          "bodyInnerHTML": "`foö^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-3_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö^barbaz´</body>",
-          "bodyInnerHTML": "`foö^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö^barbaz´</body>",
-          "bodyInnerHTML": "`foö^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö^barbaz´",
-          "innerHTML": "`foö^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-4_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̤^barbaz´",
-          "innerHTML": "`foo̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo̤^barbaz´</body>",
-          "bodyInnerHTML": "`foo̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo̤^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̤^barbaz´",
-          "innerHTML": "`foo̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo̤^barbaz´</body>",
-          "bodyInnerHTML": "`foo̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo̤^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̤^barbaz´",
-          "innerHTML": "`foo̤^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo̤^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo̤^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo̤^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-5_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-5_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-5_SI-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤b^arbaz´",
-          "innerHTML": "`foö̤b^arbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤b^arbaz´</body>",
-          "bodyInnerHTML": "`foö̤b^arbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤b^arbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤b^arbaz´",
-          "innerHTML": "`foö̤b^arbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤b^arbaz´</body>",
-          "bodyInnerHTML": "`foö̤b^arbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤b^arbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤b^arbaz´",
-          "innerHTML": "`foö̤b^arbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤b^arbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤b^arbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤b^arbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-5_SL": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>",
-          "bodyInnerHTML": "`foö̤^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foö̤^barbaz´",
-          "innerHTML": "`foö̤^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-5_SR": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤barb^az´",
-          "innerHTML": "`foö̤barb^az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤barb^az´</body>",
-          "bodyInnerHTML": "`foö̤barb^az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤barb^az´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤barb^az´",
-          "innerHTML": "`foö̤barb^az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤barb^az´</body>",
-          "bodyInnerHTML": "`foö̤barb^az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤barb^az´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤barb^az´",
-          "innerHTML": "`foö̤barb^az´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤barb^az´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤barb^az´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤barb^az´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-6_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo⃞^barbaz´",
-          "innerHTML": "`foo⃞^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo⃞^barbaz´</body>",
-          "bodyInnerHTML": "`foo⃞^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo⃞^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo⃞^barbaz´",
-          "innerHTML": "`foo⃞^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo⃞^barbaz´</body>",
-          "bodyInnerHTML": "`foo⃞^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo⃞^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo⃞^barbaz´",
-          "innerHTML": "`foo⃞^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo⃞^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo⃞^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo⃞^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_CHAR-7_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̸^barbaz´",
-          "innerHTML": "`foo̸^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo̸^barbaz´</body>",
-          "bodyInnerHTML": "`foo̸^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo̸^barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̸^barbaz´",
-          "innerHTML": "`foo̸^barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo̸^barbaz´</body>",
-          "bodyInnerHTML": "`foo̸^barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo̸^barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo̸^barbaz´",
-          "innerHTML": "`foo̸^barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo̸^barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo̸^barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo̸^barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-2_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^öbarbaz´</body>",
-          "bodyInnerHTML": "`fo^öbarbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^öbarbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^öbarbaz´</body>",
-          "bodyInnerHTML": "`fo^öbarbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^öbarbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^öbarbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^öbarbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^öbarbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-3_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^öbarbaz´</body>",
-          "bodyInnerHTML": "`fo^öbarbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^öbarbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^öbarbaz´</body>",
-          "bodyInnerHTML": "`fo^öbarbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^öbarbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^öbarbaz´",
-          "innerHTML": "`fo^öbarbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^öbarbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^öbarbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^öbarbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-4_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̤barbaz´",
-          "innerHTML": "`fo^o̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^o̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o̤barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̤barbaz´",
-          "innerHTML": "`fo^o̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^o̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o̤barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̤barbaz´",
-          "innerHTML": "`fo^o̤barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^o̤barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^o̤barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^o̤barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-5_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^ö̤barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-5_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^ö̤barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-5_SI-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^ö̤barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-5_SL": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^ö̤barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>",
-          "bodyInnerHTML": "`fo^ö̤barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^ö̤barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^ö̤barbaz´",
-          "innerHTML": "`fo^ö̤barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^ö̤barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^ö̤barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-5_SR": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤ba^rbaz´",
-          "innerHTML": "`foö̤ba^rbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤ba^rbaz´</body>",
-          "bodyInnerHTML": "`foö̤ba^rbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foö̤ba^rbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤ba^rbaz´",
-          "innerHTML": "`foö̤ba^rbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤ba^rbaz´</body>",
-          "bodyInnerHTML": "`foö̤ba^rbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foö̤ba^rbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foö̤ba^rbaz´",
-          "innerHTML": "`foö̤ba^rbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foö̤ba^rbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foö̤ba^rbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foö̤ba^rbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-6_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o⃞barbaz´",
-          "innerHTML": "`fo^o⃞barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o⃞barbaz´</body>",
-          "bodyInnerHTML": "`fo^o⃞barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o⃞barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o⃞barbaz´",
-          "innerHTML": "`fo^o⃞barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o⃞barbaz´</body>",
-          "bodyInnerHTML": "`fo^o⃞barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o⃞barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o⃞barbaz´",
-          "innerHTML": "`fo^o⃞barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^o⃞barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^o⃞barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^o⃞barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_CHAR-7_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̸barbaz´",
-          "innerHTML": "`fo^o̸barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o̸barbaz´</body>",
-          "bodyInnerHTML": "`fo^o̸barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo^o̸barbaz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̸barbaz´",
-          "innerHTML": "`fo^o̸barbaz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o̸barbaz´</body>",
-          "bodyInnerHTML": "`fo^o̸barbaz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo^o̸barbaz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`fo^o̸barbaz´",
-          "innerHTML": "`fo^o̸barbaz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo^o̸barbaz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo^o̸barbaz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo^o̸barbaz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_Pdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo ^bar baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo ^bar baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo ^bar baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo ^bar baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ^bar baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo ^bar baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p dir=\"rtl\">`foo ^bar baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo ^bar baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_Pdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo bar^ baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo bar^ baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo bar^ baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo bar^ baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo bar^ baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo bar^ baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p dir=\"rtl\">`foo bar^ baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo bar^ baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_Pdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo ba^r baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo ba^r baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo ba^r baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo ba^r baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo ba^r baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo ba^r baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p dir=\"rtl\">`foo ba^r baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo ba^r baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_Pdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo b^ar baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p dir=\"rtl\">`foo b^ar baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo b^ar baz´</p></body>",
-          "bodyInnerHTML": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p dir=\"rtl\">`foo b^ar baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "innerHTML": "<p dir=\"rtl\">`foo b^ar baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo b^ar baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p dir=\"rtl\">`foo b^ar baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p dir=\"rtl\">`foo b^ar baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXT:ar-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مرحب^ا العالم´",
-          "innerHTML": "`مرحب^ا العالم´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`مرحب^ا العالم´</body>",
-          "bodyInnerHTML": "`مرحب^ا العالم´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`مرحب^ا العالم´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مرحب^ا العالم´",
-          "innerHTML": "`مرحب^ا العالم´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`مرحب^ا العالم´</body>",
-          "bodyInnerHTML": "`مرحب^ا العالم´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`مرحب^ا العالم´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مرحب^ا العالم´",
-          "innerHTML": "`مرحب^ا العالم´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`مرحب^ا العالم´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`مرحب^ا العالم´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`مرحب^ا العالم´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXT:ar-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مر^حبا العالم´",
-          "innerHTML": "`مر^حبا العالم´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`مر^حبا العالم´</body>",
-          "bodyInnerHTML": "`مر^حبا العالم´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`مر^حبا العالم´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مر^حبا العالم´",
-          "innerHTML": "`مر^حبا العالم´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`مر^حبا العالم´</body>",
-          "bodyInnerHTML": "`مر^حبا العالم´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`مر^حبا العالم´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`مر^حبا العالم´",
-          "innerHTML": "`مر^حبا العالم´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`مر^حبا العالم´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`مر^حبا العالم´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`مر^حبا العالم´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXT:he-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`שלו^ם עולם´",
-          "innerHTML": "`שלו^ם עולם´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`שלו^ם עולם´</body>",
-          "bodyInnerHTML": "`שלו^ם עולם´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`שלו^ם עולם´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`שלו^ם עולם´",
-          "innerHTML": "`שלו^ם עולם´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`שלו^ם עולם´</body>",
-          "bodyInnerHTML": "`שלו^ם עולם´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`שלו^ם עולם´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`שלו^ם עולם´",
-          "innerHTML": "`שלו^ם עולם´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`שלו^ם עולם´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`שלו^ם עולם´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`שלו^ם עולם´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXT:he-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`ש^לום עולם´",
-          "innerHTML": "`ש^לום עולם´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`ש^לום עולם´</body>",
-          "bodyInnerHTML": "`ש^לום עולם´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`ש^לום עולם´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`ש^לום עולם´",
-          "innerHTML": "`ש^לום עולם´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`ש^לום עולם´</body>",
-          "bodyInnerHTML": "`ש^לום עולם´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`ש^לום עולם´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`ש^לום עולם´",
-          "innerHTML": "`ש^לום עולם´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`ש^לום עולם´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`ש^לום עולם´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`ש^לום עולם´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_BDOdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_BDOdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_BDOdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`b^ar´</bdo>` baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_BDOdir:rtl-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>",
-          "bodyInnerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "innerHTML": "`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ´<bdo dir=\"rtl\">`ba^r´</bdo>` baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXTrle-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXTrle-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_TEXTrle-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_TEXTrle-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXTrle-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXTrle-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_TEXTrle-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_TEXTrle-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLE)‫c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXTrlo-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXTrlo-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_TEXTrlo-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني س^يارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_TEXTrlo-1_SC-rtl-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮car يعني سيا^رة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXTrlo-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXTrlo-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_TEXTrlo-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮c^ar يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_TEXTrlo-1_SC-ltr-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>",
-          "bodyInnerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "innerHTML": "`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"(RLO)‮ca^r يعني سيارة‬(PDF)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.c_TEXTrlm-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.b.c_TEXTrlm-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.r.c_TEXTrlm-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!^?!‏(RLM)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!^?!‏(RLM)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.l.c_TEXTrlm-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>",
-          "bodyInnerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "innerHTML": "`I said, \"يعني سيارة!?^!‏(RLM)\".´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`I said, \"يعني سيارة!?^!‏(RLM)\".´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-jp_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白^い例文をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白^い例文をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白^い例文をテストしましょう。´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白^い例文をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`面白^い例文をテストしましょう。´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`面白^い例文をテストしましょう。´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-jp_SC-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白^い例文をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白^い例文をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白^い例文をテストしましょう。´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白^い例文をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白^い例文をテストしましょう。´",
-          "innerHTML": "`面白^い例文をテストしましょう。´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`面白^い例文をテストしましょう。´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`面白^い例文をテストしましょう。´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`面白^い例文をテストしましょう。´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-jp_SC-3": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文^をテストしましょう。´",
-          "innerHTML": "`面白い例文^をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文^をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白い例文^をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文^をテストしましょう。´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文^をテストしましょう。´",
-          "innerHTML": "`面白い例文^をテストしましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文^をテストしましょう。´</body>",
-          "bodyInnerHTML": "`面白い例文^をテストしましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文^をテストしましょう。´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文^をテストしましょう。´",
-          "innerHTML": "`面白い例文^をテストしましょう。´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`面白い例文^をテストしましょう。´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`面白い例文^をテストしましょう。´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`面白い例文^をテストしましょう。´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-jp_SC-4": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文をテスト^しましょう。´",
-          "innerHTML": "`面白い例文をテスト^しましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文をテスト^しましょう。´</body>",
-          "bodyInnerHTML": "`面白い例文をテスト^しましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文をテスト^しましょう。´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文をテスト^しましょう。´",
-          "innerHTML": "`面白い例文をテスト^しましょう。´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文をテスト^しましょう。´</body>",
-          "bodyInnerHTML": "`面白い例文をテスト^しましょう。´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文をテスト^しましょう。´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`面白い例文をテスト^しましょう。´",
-          "innerHTML": "`面白い例文をテスト^しましょう。´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`面白い例文をテスト^しましょう。´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`面白い例文をテスト^しましょう。´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`面白い例文をテスト^しましょう。´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:m.f.w_TEXT-jp_SC-5": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白い例文をテストしましょう。^´",
-          "innerHTML": "`面白い例文をテストしましょう。^´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文をテストしましょう。^´</body>",
-          "bodyInnerHTML": "`面白い例文をテストしましょう。^´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`面白い例文をテストしましょう。^´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白い例文をテストしましょう。^´",
-          "innerHTML": "`面白い例文をテストしましょう。^´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文をテストしましょう。^´</body>",
-          "bodyInnerHTML": "`面白い例文をテストしましょう。^´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`面白い例文をテストしましょう。^´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`面白い例文をテストしましょう。^´",
-          "innerHTML": "`面白い例文をテストしましょう。^´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`面白い例文をテストしましょう。^´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`面白い例文をテストしましょう。^´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`面白い例文をテストしましょう。^´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.c_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [b]ar baz´",
-          "innerHTML": "`foo [b]ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [b]ar baz´</body>",
-          "bodyInnerHTML": "`foo [b]ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [b]ar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [b]ar baz´",
-          "innerHTML": "`foo [b]ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [b]ar baz´</body>",
-          "bodyInnerHTML": "`foo [b]ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [b]ar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [b]ar baz´",
-          "innerHTML": "`foo [b]ar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [b]ar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [b]ar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [b]ar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.c_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [ba]r baz´</body>",
-          "bodyInnerHTML": "`foo [ba]r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [ba]r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [ba]r baz´</body>",
-          "bodyInnerHTML": "`foo [ba]r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [ba]r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [ba]r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [ba]r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [ba]r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.w_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [bar] baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.w_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar] baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>",
-          "bodyInnerHTML": "`foo [bar] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar] baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar] baz´",
-          "innerHTML": "`foo [bar] baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [bar] baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [bar] baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.w_TEXT-1_SI-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar baz]´",
-          "innerHTML": "`foo [bar baz]´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar baz]´</body>",
-          "bodyInnerHTML": "`foo [bar baz]´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar baz]´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar baz]´",
-          "innerHTML": "`foo [bar baz]´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar baz]´</body>",
-          "bodyInnerHTML": "`foo [bar baz]´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar baz]´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [bar baz]´",
-          "innerHTML": "`foo [bar baz]´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [bar baz]´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [bar baz]´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [bar baz]´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.c_TEXT-1_SI-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [ba]r baz´</body>",
-          "bodyInnerHTML": "`foo [ba]r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [ba]r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [ba]r baz´</body>",
-          "bodyInnerHTML": "`foo [ba]r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [ba]r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo [ba]r baz´",
-          "innerHTML": "`foo [ba]r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [ba]r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [ba]r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [ba]r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.c_TEXT-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SI-3": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar ]baz´",
-          "innerHTML": "`foo [bar ]baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar ]baz´</body>",
-          "bodyInnerHTML": "`foo [bar ]baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo [bar ]baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar ]baz´",
-          "innerHTML": "`foo [bar ]baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar ]baz´</body>",
-          "bodyInnerHTML": "`foo [bar ]baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo [bar ]baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo [bar ]baz´",
-          "innerHTML": "`foo [bar ]baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo [bar ]baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo [bar ]baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo [bar ]baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SI-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ^bar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>",
-          "bodyInnerHTML": "`foo ^bar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ^bar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ^bar baz´",
-          "innerHTML": "`foo ^bar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ^bar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ^bar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SI-4": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo b[ar ]baz´",
-          "innerHTML": "`foo b[ar ]baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo b[ar ]baz´</body>",
-          "bodyInnerHTML": "`foo b[ar ]baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo b[ar ]baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo b[ar ]baz´",
-          "innerHTML": "`foo b[ar ]baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo b[ar ]baz´</body>",
-          "bodyInnerHTML": "`foo b[ar ]baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo b[ar ]baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo b[ar ]baz´",
-          "innerHTML": "`foo b[ar ]baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo b[ar ]baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo b[ar ]baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo b[ar ]baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SI-5": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]b[ar baz´</body>",
-          "bodyInnerHTML": "`foo ]b[ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]b[ar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]b[ar baz´</body>",
-          "bodyInnerHTML": "`foo ]b[ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]b[ar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ]b[ar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ]b[ar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ]b[ar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.c_TEXT-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]b[ar baz´</body>",
-          "bodyInnerHTML": "`foo ]b[ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]b[ar baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]b[ar baz´</body>",
-          "bodyInnerHTML": "`foo ]b[ar baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]b[ar baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]b[ar baz´",
-          "innerHTML": "`foo ]b[ar baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ]b[ar baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ]b[ar baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ]b[ar baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.c_TEXT-1_SIR-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]ba[r baz´</body>",
-          "bodyInnerHTML": "`foo ]ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]ba[r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]ba[r baz´</body>",
-          "bodyInnerHTML": "`foo ]ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]ba[r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ]ba[r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ]ba[r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ]ba[r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SIR-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]ba[r baz´</body>",
-          "bodyInnerHTML": "`foo ]ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ]ba[r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]ba[r baz´</body>",
-          "bodyInnerHTML": "`foo ]ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ]ba[r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ]ba[r baz´",
-          "innerHTML": "`foo ]ba[r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ]ba[r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ]ba[r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ]ba[r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.w_TEXT-1_SIR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`]foo ba[r baz´",
-          "innerHTML": "`]foo ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`]foo ba[r baz´</body>",
-          "bodyInnerHTML": "`]foo ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`]foo ba[r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`]foo ba[r baz´",
-          "innerHTML": "`]foo ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`]foo ba[r baz´</body>",
-          "bodyInnerHTML": "`]foo ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`]foo ba[r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`]foo ba[r baz´",
-          "innerHTML": "`]foo ba[r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`]foo ba[r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`]foo ba[r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`]foo ba[r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.c_TEXT-1_SIR-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba^r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>",
-          "bodyInnerHTML": "`foo ba^r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba^r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo ba^r baz´",
-          "innerHTML": "`foo ba^r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ba^r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ba^r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.c_TEXT-1_SIR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo b]a[r baz´",
-          "innerHTML": "`foo b]a[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo b]a[r baz´</body>",
-          "bodyInnerHTML": "`foo b]a[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo b]a[r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo b]a[r baz´",
-          "innerHTML": "`foo b]a[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo b]a[r baz´</body>",
-          "bodyInnerHTML": "`foo b]a[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo b]a[r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo b]a[r baz´",
-          "innerHTML": "`foo b]a[r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo b]a[r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo b]a[r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo b]a[r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.w_TEXT-1_SIR-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba[r] baz´",
-          "innerHTML": "`foo ba[r] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba[r] baz´</body>",
-          "bodyInnerHTML": "`foo ba[r] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo ba[r] baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba[r] baz´",
-          "innerHTML": "`foo ba[r] baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba[r] baz´</body>",
-          "bodyInnerHTML": "`foo ba[r] baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo ba[r] baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo ba[r] baz´",
-          "innerHTML": "`foo ba[r] baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo ba[r] baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo ba[r] baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo ba[r] baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.w_TEXT-1_SIR-3": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo] ba[r baz´",
-          "innerHTML": "`foo] ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo] ba[r baz´</body>",
-          "bodyInnerHTML": "`foo] ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo] ba[r baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo] ba[r baz´",
-          "innerHTML": "`foo] ba[r baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo] ba[r baz´</body>",
-          "bodyInnerHTML": "`foo] ba[r baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo] ba[r baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo] ba[r baz´",
-          "innerHTML": "`foo] ba[r baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo] ba[r baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo] ba[r baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo] ba[r baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_BR.BR-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´}<br>`bar´<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´}<br>`bar´<br>`baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo[o´}<br>`bar´<br>`baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo[o´}<br>`bar´<br>`baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_BR.BR-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´}<br>`bar´<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´}<br>`bar´<br>`baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´}<br>`bar´<br>`baz´",
-          "innerHTML": "`fo[o´}<br>`bar´<br>`baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo[o´}<br>`bar´<br>`baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo[o´}<br>`bar´<br>`baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo[o´}<br>`bar´<br>`baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_BR.BR-1_SM-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´<br>`bar´}<br>`baz´",
-          "innerHTML": "`fo[o´<br>`bar´}<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´<br>`bar´}<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´<br>`bar´}<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`fo[o´<br>`bar´}<br>`baz´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´<br>`bar´}<br>`baz´",
-          "innerHTML": "`fo[o´<br>`bar´}<br>`baz´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´<br>`bar´}<br>`baz´</body>",
-          "bodyInnerHTML": "`fo[o´<br>`bar´}<br>`baz´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`fo[o´<br>`bar´}<br>`baz´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`fo[o´<br>`bar´}<br>`baz´",
-          "innerHTML": "`fo[o´<br>`bar´}<br>`baz´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`fo[o´<br>`bar´}<br>`baz´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`fo[o´<br>`bar´}<br>`baz´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`fo[o´<br>`bar´}<br>`baz´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_P.P.P-1_SC-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_P.P.P-1_SI-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o]´</p><p>`bar´</p><p>`baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`fo[o]´</p><p>`bar´</p><p>`baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_P.P.P-1_SM-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`fo[o´</p><p>`bar]´</p><p>`baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`fo[o´</p><p>`bar]´</p><p>`baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.f.lb_P.P.P-1_SMR-1": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "innerHTML": "<p>`foo´</p><p>`ba[r]´</p><p>`baz´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`ba[r]´</p><p>`baz´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_BR.BR-1_SC-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`bar´<br>`]b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`bar´<br>`]b[az´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo´<br>`bar´<br>`]b[az´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo´<br>`bar´<br>`]b[az´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_BR.BR-1_SIR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`bar´<br>`]b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`bar´<br>`]b[az´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "`foo´<br>`bar´<br>`]b[az´",
-          "innerHTML": "`foo´<br>`bar´<br>`]b[az´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo´<br>`bar´<br>`]b[az´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo´<br>`bar´<br>`]b[az´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo´<br>`bar´<br>`]b[az´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_BR.BR-1_SMR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`]bar´<br>`b[az´",
-          "innerHTML": "`foo´<br>`]bar´<br>`b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`]bar´<br>`b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`]bar´<br>`b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\">`foo´<br>`]bar´<br>`b[az´</body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`]bar´<br>`b[az´",
-          "innerHTML": "`foo´<br>`]bar´<br>`b[az´",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`]bar´<br>`b[az´</body>",
-          "bodyInnerHTML": "`foo´<br>`]bar´<br>`b[az´",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\">`foo´<br>`]bar´<br>`b[az´</body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "`foo´<br>`]bar´<br>`b[az´",
-          "innerHTML": "`foo´<br>`]bar´<br>`b[az´",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\">`foo´<br>`]bar´<br>`b[az´</div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\">`foo´<br>`]bar´<br>`b[az´</div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\">`foo´<br>`]bar´<br>`b[az´</div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_P.P.P-1_SC-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_P.P.P-1_SIR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 0,
-          "valresult": 8,
-          "selresult": 2,
-          "output": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`bar´</p><p>`]b[az´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\" contenteditable=\"true\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>CAN<br>ARY",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\">CAN<br>ARY<div contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`bar´</p><p>`]b[az´</p></div>CAN<br>ARY</body>"
-        }
-      },
-      "SM:e.b.lb_P.P.P-1_SMR-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`]bar´</p><p>`b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`]bar´</p><p>`b[az´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`]bar´</p><p>`b[az´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`]bar´</p><p>`b[az´</p></body>"
-        },
-        "div": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "innerHTML": "<p>`foo´</p><p>`]bar´</p><p>`b[az´</p>",
-          "outerHTML": "<div xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\" id=\"editor-div\"><p>`foo´</p><p>`]bar´</p><p>`b[az´</p></div>",
-          "bodyInnerHTML": "CAN<br>ARY<div id=\"editor-div\"