Merge mozilla-central into mozilla-inbound
authorEhsan Akhgari <ehsan@mozilla.com>
Tue, 24 Apr 2012 21:29:44 -0400
changeset 92728 e1acc0e92a4087ad36b995baa824fb4a1f5e47a5
parent 92657 ee6e8470cb960678af90475cca3623ef937e225f (current diff)
parent 92727 f661fb83699babe666e2d5c5b6f94fd315c08ff7 (diff)
child 92729 2873865edc0b6c875faafd74b48ae502f8f7fdae
push id270
push userpvanderbeken@mozilla.com
push dateThu, 06 Mar 2014 09:24:21 +0000
milestone15.0a1
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\" 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_SM-2": {
-        "dM": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`]b[ar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" onload=\"setDesignMode()\"><p>`foo´</p><p>`]b[ar´</p><p>`baz´</p></body>"
-        },
-        "body": {
-          "valscore": 1,
-          "selscore": 1,
-          "valresult": 8,
-          "selresult": 5,
-          "output": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "innerHTML": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "outerHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`]b[ar´</p><p>`baz´</p></body>",
-          "bodyInnerHTML": "<p>`foo´</p><p>`]b[ar´</p><p>`baz´</p>",
-          "bodyOuterHTML": "<body xmlns=\"http://www.w3.org/1999/xhtml\" contenteditable=\"true\"><p>`foo´</p><p>`]b[ar´</p><p>`baz´</p></body>"
-        },
-        "div": {
-          "valscore": 1,