Import wpt@c875b4212a473363afe8c09f012edf201386cb5b

Using update-w3c-deps in Chromium 1e9dc390f0cdd1de753f16eb706c3cc29c27f0b3.

BUG=490511, 505364, 612924, 627706
[email protected], [email protected]

Review-Url: https://codereview.chromium.org/2143653006
Cr-Commit-Position: refs/heads/master@{#405102}
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 212c376..bb90382 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -446,6 +446,8 @@
 crbug.com/490511 imported/wpt/html/rendering/replaced-elements/embedded-content-rendering-rules/canvas-fallback.html [ Failure ]
 crbug.com/490511 imported/wpt/html/semantics/document-metadata/styling/LinkStyle.html [ Failure Pass ]
 crbug.com/490511 imported/wpt/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html [ Failure ]
+crbug.com/627706 imported/wpt/html/semantics/embedded-content/the-img-element/invalid-src.html [ Skip ]
+crbug.com/490511 imported/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html [ NeedsRebaseline ]
 crbug.com/525889 imported/wpt/html/webappapis/scripting/processing-model-2/compile-error-in-setInterval.html [ Failure ]
 crbug.com/525889 imported/wpt/html/webappapis/scripting/processing-model-2/compile-error-in-setTimeout.html [ Failure ]
 crbug.com/525889 imported/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Failure ]
@@ -488,9 +490,6 @@
 
 # Web Components related tests (Shadow DOM, Custom Elements) failures.
 crbug.com/505364 imported/wpt/shadow-dom/untriaged/styles/test-003.html [ Failure ]
-crbug.com/505364 imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html [ Failure ]
-crbug.com/505364 imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html [ Failure ]
-crbug.com/505364 imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html [ Failure ]
 crbug.com/505364 imported/wpt/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-event-interface/event-path-001.html [ Failure ]
 crbug.com/505364 imported/wpt/custom-elements/v0/instantiating/extensions-to-document-interface/create-element-interface-type-is-a-type-extension.html [ Failure ]
 crbug.com/505364 imported/csswg-test/css-scoping-1/css-scoping-shadow-slot-display-override.html [ Failure ]
@@ -925,10 +924,10 @@
 crbug.com/619060 imported/wpt/pointerevents/pointerevent_pointerleave_after_pointercancel_touch-manual.html  [ Skip ]
 crbug.com/619060 imported/wpt/pointerevents/pointerevent_pointerleave_after_pointerup_nohover-manual.html  [ Skip ]
 crbug.com/619060 imported/wpt/pointerevents/pointerevent_pointerleave_touch-manual.html  [ Skip ]
-crbug.com/620236 imported/wpt/pointerevents/pointerevent_properties_mouse-manual.html [ Skip ]
 crbug.com/620236 imported/wpt/pointerevents/pointerevent_releasepointercapture_onpointercancel_touch-manual.html  [ Skip ]
+crbug.com/620236 imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_click.html [ Skip ]
+crbug.com/620236 imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html [ Skip ]
 crbug.com/620236 imported/wpt/pointerevents/pointerevent_touch-action-auto-css_touch-manual.html  [ Skip ]
-crbug.com/620236 imported/wpt/pointerevents/pointerevent_touch-action-button-test_touch-manual.html  [ Skip ]
 crbug.com/620236 imported/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch-manual.html  [ Skip ]
 crbug.com/620236 imported/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch-manual.html  [ Skip ]
 crbug.com/620236 imported/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch-manual.html  [ Skip ]
@@ -947,6 +946,7 @@
 
 crbug.com/583413 imported/wpt/pointerevents/pointerevent_pointerleave_pen-manual.html  [ Failure ]
 
+crbug.com/627716 imported/wpt/pointerevents/pointerevent_touch-action-button-test_touch-manual.html [ Skip ]
 
 # These testcases are incorrect, mark them as failing until they're fixed in the testsuite.
 # https://lists.w3.org/Archives/Public/www-style/2016Jan/0275.html
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations
index 0db0697..cda5870 100644
--- a/third_party/WebKit/LayoutTests/W3CImportExpectations
+++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -196,6 +196,7 @@
 imported/wpt/XMLHttpRequest [ Skip ]
 imported/wpt/ambient-light [ Skip ]
 imported/wpt/animation-timing [ Skip ]
+imported/wpt/annotation-model [ Skip ]
 imported/wpt/app-uri [ Skip ]
 imported/wpt/battery-status [ Skip ]
 ## Owners: none; No tests in the directory.
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness-expected.txt
index cfaa630..4c03728c 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness-expected.txt
@@ -95,5 +95,6 @@
 PASS FileReader interface: new FileReader() must inherit property "onabort" with the proper type (13) 
 PASS FileReader interface: new FileReader() must inherit property "onerror" with the proper type (14) 
 PASS FileReader interface: new FileReader() must inherit property "onloadend" with the proper type (15) 
+PASS FileReaderSync interface: existence and properties of interface object 
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.idl b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.idl
index ae83a9cb..62e6c5d 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.idl
+++ b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.idl
@@ -79,3 +79,13 @@
   static void revokeObjectURL(DOMString url);
 
 };
+
+[Constructor, Exposed=Worker]
+interface FileReaderSync {
+
+  // Synchronously return strings
+
+  ArrayBuffer readAsArrayBuffer(Blob blob);
+  DOMString readAsText(Blob blob, optional DOMString label);
+  DOMString readAsDataURL(Blob blob);
+};
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.worker.js
index 40ba816..3243e34 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.worker.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/idlharness.worker.js
@@ -18,20 +18,7 @@
     idl_array.add_untested_idls("[TreatNonCallableAsNull] callback EventHandlerNonNull = any (Event event);");
     idl_array.add_untested_idls("typedef EventHandlerNonNull? EventHandler;");
 
-
-    var worker_idls =
-            '[Constructor, Exposed=Worker]\n' +
-            'interface FileReaderSync {\n' +
-            '\n' +
-            '  // Synchronously return strings\n' +
-            '\n' +
-            '  ArrayBuffer readAsArrayBuffer(Blob blob);\n' +
-            '  DOMString readAsText(Blob blob, optional DOMString label);\n' +
-            '  DOMString readAsDataURL(Blob blob);\n' +
-            '};';
-
     idl_array.add_idls(idls);
-    idl_array.add_idls(worker_idls);
 
     idl_array.add_objects({
         Blob: ['new Blob(["TEST"])'],
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/common/entities.json b/third_party/WebKit/LayoutTests/imported/wpt/common/entities.json
new file mode 100644
index 0000000..8a1f590
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/common/entities.json
@@ -0,0 +1,2233 @@
+{
+  "Á": { "codepoints": [193], "characters": "\u00C1" },
+  "&Aacute": { "codepoints": [193], "characters": "\u00C1" },
+  "á": { "codepoints": [225], "characters": "\u00E1" },
+  "&aacute": { "codepoints": [225], "characters": "\u00E1" },
+  "Ă": { "codepoints": [258], "characters": "\u0102" },
+  "ă": { "codepoints": [259], "characters": "\u0103" },
+  "∾": { "codepoints": [8766], "characters": "\u223E" },
+  "∿": { "codepoints": [8767], "characters": "\u223F" },
+  "∾̳": { "codepoints": [8766, 819], "characters": "\u223E\u0333" },
+  "Â": { "codepoints": [194], "characters": "\u00C2" },
+  "&Acirc": { "codepoints": [194], "characters": "\u00C2" },
+  "â": { "codepoints": [226], "characters": "\u00E2" },
+  "&acirc": { "codepoints": [226], "characters": "\u00E2" },
+  "´": { "codepoints": [180], "characters": "\u00B4" },
+  "&acute": { "codepoints": [180], "characters": "\u00B4" },
+  "А": { "codepoints": [1040], "characters": "\u0410" },
+  "а": { "codepoints": [1072], "characters": "\u0430" },
+  "Æ": { "codepoints": [198], "characters": "\u00C6" },
+  "&AElig": { "codepoints": [198], "characters": "\u00C6" },
+  "æ": { "codepoints": [230], "characters": "\u00E6" },
+  "&aelig": { "codepoints": [230], "characters": "\u00E6" },
+  "⁡": { "codepoints": [8289], "characters": "\u2061" },
+  "𝔄": { "codepoints": [120068], "characters": "\uD835\uDD04" },
+  "𝔞": { "codepoints": [120094], "characters": "\uD835\uDD1E" },
+  "À": { "codepoints": [192], "characters": "\u00C0" },
+  "&Agrave": { "codepoints": [192], "characters": "\u00C0" },
+  "à": { "codepoints": [224], "characters": "\u00E0" },
+  "&agrave": { "codepoints": [224], "characters": "\u00E0" },
+  "ℵ": { "codepoints": [8501], "characters": "\u2135" },
+  "ℵ": { "codepoints": [8501], "characters": "\u2135" },
+  "Α": { "codepoints": [913], "characters": "\u0391" },
+  "α": { "codepoints": [945], "characters": "\u03B1" },
+  "Ā": { "codepoints": [256], "characters": "\u0100" },
+  "ā": { "codepoints": [257], "characters": "\u0101" },
+  "⨿": { "codepoints": [10815], "characters": "\u2A3F" },
+  "&": { "codepoints": [38], "characters": "\u0026" },
+  "&amp": { "codepoints": [38], "characters": "\u0026" },
+  "&": { "codepoints": [38], "characters": "\u0026" },
+  "&AMP": { "codepoints": [38], "characters": "\u0026" },
+  "⩕": { "codepoints": [10837], "characters": "\u2A55" },
+  "⩓": { "codepoints": [10835], "characters": "\u2A53" },
+  "∧": { "codepoints": [8743], "characters": "\u2227" },
+  "⩜": { "codepoints": [10844], "characters": "\u2A5C" },
+  "⩘": { "codepoints": [10840], "characters": "\u2A58" },
+  "⩚": { "codepoints": [10842], "characters": "\u2A5A" },
+  "∠": { "codepoints": [8736], "characters": "\u2220" },
+  "⦤": { "codepoints": [10660], "characters": "\u29A4" },
+  "∠": { "codepoints": [8736], "characters": "\u2220" },
+  "⦨": { "codepoints": [10664], "characters": "\u29A8" },
+  "⦩": { "codepoints": [10665], "characters": "\u29A9" },
+  "⦪": { "codepoints": [10666], "characters": "\u29AA" },
+  "⦫": { "codepoints": [10667], "characters": "\u29AB" },
+  "⦬": { "codepoints": [10668], "characters": "\u29AC" },
+  "⦭": { "codepoints": [10669], "characters": "\u29AD" },
+  "⦮": { "codepoints": [10670], "characters": "\u29AE" },
+  "⦯": { "codepoints": [10671], "characters": "\u29AF" },
+  "∡": { "codepoints": [8737], "characters": "\u2221" },
+  "∟": { "codepoints": [8735], "characters": "\u221F" },
+  "⊾": { "codepoints": [8894], "characters": "\u22BE" },
+  "⦝": { "codepoints": [10653], "characters": "\u299D" },
+  "∢": { "codepoints": [8738], "characters": "\u2222" },
+  "Å": { "codepoints": [197], "characters": "\u00C5" },
+  "⍼": { "codepoints": [9084], "characters": "\u237C" },
+  "Ą": { "codepoints": [260], "characters": "\u0104" },
+  "ą": { "codepoints": [261], "characters": "\u0105" },
+  "𝔸": { "codepoints": [120120], "characters": "\uD835\uDD38" },
+  "𝕒": { "codepoints": [120146], "characters": "\uD835\uDD52" },
+  "⩯": { "codepoints": [10863], "characters": "\u2A6F" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "⩰": { "codepoints": [10864], "characters": "\u2A70" },
+  "≊": { "codepoints": [8778], "characters": "\u224A" },
+  "≋": { "codepoints": [8779], "characters": "\u224B" },
+  "'": { "codepoints": [39], "characters": "\u0027" },
+  "⁡": { "codepoints": [8289], "characters": "\u2061" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "≊": { "codepoints": [8778], "characters": "\u224A" },
+  "Å": { "codepoints": [197], "characters": "\u00C5" },
+  "&Aring": { "codepoints": [197], "characters": "\u00C5" },
+  "å": { "codepoints": [229], "characters": "\u00E5" },
+  "&aring": { "codepoints": [229], "characters": "\u00E5" },
+  "𝒜": { "codepoints": [119964], "characters": "\uD835\uDC9C" },
+  "𝒶": { "codepoints": [119990], "characters": "\uD835\uDCB6" },
+  "≔": { "codepoints": [8788], "characters": "\u2254" },
+  "*": { "codepoints": [42], "characters": "\u002A" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "≍": { "codepoints": [8781], "characters": "\u224D" },
+  "Ã": { "codepoints": [195], "characters": "\u00C3" },
+  "&Atilde": { "codepoints": [195], "characters": "\u00C3" },
+  "ã": { "codepoints": [227], "characters": "\u00E3" },
+  "&atilde": { "codepoints": [227], "characters": "\u00E3" },
+  "Ä": { "codepoints": [196], "characters": "\u00C4" },
+  "&Auml": { "codepoints": [196], "characters": "\u00C4" },
+  "ä": { "codepoints": [228], "characters": "\u00E4" },
+  "&auml": { "codepoints": [228], "characters": "\u00E4" },
+  "∳": { "codepoints": [8755], "characters": "\u2233" },
+  "⨑": { "codepoints": [10769], "characters": "\u2A11" },
+  "≌": { "codepoints": [8780], "characters": "\u224C" },
+  "϶": { "codepoints": [1014], "characters": "\u03F6" },
+  "‵": { "codepoints": [8245], "characters": "\u2035" },
+  "∽": { "codepoints": [8765], "characters": "\u223D" },
+  "⋍": { "codepoints": [8909], "characters": "\u22CD" },
+  "∖": { "codepoints": [8726], "characters": "\u2216" },
+  "⫧": { "codepoints": [10983], "characters": "\u2AE7" },
+  "⊽": { "codepoints": [8893], "characters": "\u22BD" },
+  "⌅": { "codepoints": [8965], "characters": "\u2305" },
+  "⌆": { "codepoints": [8966], "characters": "\u2306" },
+  "⌅": { "codepoints": [8965], "characters": "\u2305" },
+  "⎵": { "codepoints": [9141], "characters": "\u23B5" },
+  "⎶": { "codepoints": [9142], "characters": "\u23B6" },
+  "≌": { "codepoints": [8780], "characters": "\u224C" },
+  "Б": { "codepoints": [1041], "characters": "\u0411" },
+  "б": { "codepoints": [1073], "characters": "\u0431" },
+  "„": { "codepoints": [8222], "characters": "\u201E" },
+  "∵": { "codepoints": [8757], "characters": "\u2235" },
+  "∵": { "codepoints": [8757], "characters": "\u2235" },
+  "∵": { "codepoints": [8757], "characters": "\u2235" },
+  "⦰": { "codepoints": [10672], "characters": "\u29B0" },
+  "϶": { "codepoints": [1014], "characters": "\u03F6" },
+  "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+  "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+  "Β": { "codepoints": [914], "characters": "\u0392" },
+  "β": { "codepoints": [946], "characters": "\u03B2" },
+  "ℶ": { "codepoints": [8502], "characters": "\u2136" },
+  "≬": { "codepoints": [8812], "characters": "\u226C" },
+  "𝔅": { "codepoints": [120069], "characters": "\uD835\uDD05" },
+  "𝔟": { "codepoints": [120095], "characters": "\uD835\uDD1F" },
+  "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+  "◯": { "codepoints": [9711], "characters": "\u25EF" },
+  "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+  "⨀": { "codepoints": [10752], "characters": "\u2A00" },
+  "⨁": { "codepoints": [10753], "characters": "\u2A01" },
+  "⨂": { "codepoints": [10754], "characters": "\u2A02" },
+  "⨆": { "codepoints": [10758], "characters": "\u2A06" },
+  "★": { "codepoints": [9733], "characters": "\u2605" },
+  "▽": { "codepoints": [9661], "characters": "\u25BD" },
+  "△": { "codepoints": [9651], "characters": "\u25B3" },
+  "⨄": { "codepoints": [10756], "characters": "\u2A04" },
+  "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+  "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+  "⤍": { "codepoints": [10509], "characters": "\u290D" },
+  "⧫": { "codepoints": [10731], "characters": "\u29EB" },
+  "▪": { "codepoints": [9642], "characters": "\u25AA" },
+  "▴": { "codepoints": [9652], "characters": "\u25B4" },
+  "▾": { "codepoints": [9662], "characters": "\u25BE" },
+  "◂": { "codepoints": [9666], "characters": "\u25C2" },
+  "▸": { "codepoints": [9656], "characters": "\u25B8" },
+  "␣": { "codepoints": [9251], "characters": "\u2423" },
+  "▒": { "codepoints": [9618], "characters": "\u2592" },
+  "░": { "codepoints": [9617], "characters": "\u2591" },
+  "▓": { "codepoints": [9619], "characters": "\u2593" },
+  "█": { "codepoints": [9608], "characters": "\u2588" },
+  "=⃥": { "codepoints": [61, 8421], "characters": "\u003D\u20E5" },
+  "≡⃥": { "codepoints": [8801, 8421], "characters": "\u2261\u20E5" },
+  "⫭": { "codepoints": [10989], "characters": "\u2AED" },
+  "⌐": { "codepoints": [8976], "characters": "\u2310" },
+  "𝔹": { "codepoints": [120121], "characters": "\uD835\uDD39" },
+  "𝕓": { "codepoints": [120147], "characters": "\uD835\uDD53" },
+  "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+  "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+  "⋈": { "codepoints": [8904], "characters": "\u22C8" },
+  "⧉": { "codepoints": [10697], "characters": "\u29C9" },
+  "┐": { "codepoints": [9488], "characters": "\u2510" },
+  "╕": { "codepoints": [9557], "characters": "\u2555" },
+  "╖": { "codepoints": [9558], "characters": "\u2556" },
+  "╗": { "codepoints": [9559], "characters": "\u2557" },
+  "┌": { "codepoints": [9484], "characters": "\u250C" },
+  "╒": { "codepoints": [9554], "characters": "\u2552" },
+  "╓": { "codepoints": [9555], "characters": "\u2553" },
+  "╔": { "codepoints": [9556], "characters": "\u2554" },
+  "─": { "codepoints": [9472], "characters": "\u2500" },
+  "═": { "codepoints": [9552], "characters": "\u2550" },
+  "┬": { "codepoints": [9516], "characters": "\u252C" },
+  "╤": { "codepoints": [9572], "characters": "\u2564" },
+  "╥": { "codepoints": [9573], "characters": "\u2565" },
+  "╦": { "codepoints": [9574], "characters": "\u2566" },
+  "┴": { "codepoints": [9524], "characters": "\u2534" },
+  "╧": { "codepoints": [9575], "characters": "\u2567" },
+  "╨": { "codepoints": [9576], "characters": "\u2568" },
+  "╩": { "codepoints": [9577], "characters": "\u2569" },
+  "⊟": { "codepoints": [8863], "characters": "\u229F" },
+  "⊞": { "codepoints": [8862], "characters": "\u229E" },
+  "⊠": { "codepoints": [8864], "characters": "\u22A0" },
+  "┘": { "codepoints": [9496], "characters": "\u2518" },
+  "╛": { "codepoints": [9563], "characters": "\u255B" },
+  "╜": { "codepoints": [9564], "characters": "\u255C" },
+  "╝": { "codepoints": [9565], "characters": "\u255D" },
+  "└": { "codepoints": [9492], "characters": "\u2514" },
+  "╘": { "codepoints": [9560], "characters": "\u2558" },
+  "╙": { "codepoints": [9561], "characters": "\u2559" },
+  "╚": { "codepoints": [9562], "characters": "\u255A" },
+  "│": { "codepoints": [9474], "characters": "\u2502" },
+  "║": { "codepoints": [9553], "characters": "\u2551" },
+  "┼": { "codepoints": [9532], "characters": "\u253C" },
+  "╪": { "codepoints": [9578], "characters": "\u256A" },
+  "╫": { "codepoints": [9579], "characters": "\u256B" },
+  "╬": { "codepoints": [9580], "characters": "\u256C" },
+  "┤": { "codepoints": [9508], "characters": "\u2524" },
+  "╡": { "codepoints": [9569], "characters": "\u2561" },
+  "╢": { "codepoints": [9570], "characters": "\u2562" },
+  "╣": { "codepoints": [9571], "characters": "\u2563" },
+  "├": { "codepoints": [9500], "characters": "\u251C" },
+  "╞": { "codepoints": [9566], "characters": "\u255E" },
+  "╟": { "codepoints": [9567], "characters": "\u255F" },
+  "╠": { "codepoints": [9568], "characters": "\u2560" },
+  "‵": { "codepoints": [8245], "characters": "\u2035" },
+  "˘": { "codepoints": [728], "characters": "\u02D8" },
+  "˘": { "codepoints": [728], "characters": "\u02D8" },
+  "¦": { "codepoints": [166], "characters": "\u00A6" },
+  "&brvbar": { "codepoints": [166], "characters": "\u00A6" },
+  "𝒷": { "codepoints": [119991], "characters": "\uD835\uDCB7" },
+  "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+  "⁏": { "codepoints": [8271], "characters": "\u204F" },
+  "∽": { "codepoints": [8765], "characters": "\u223D" },
+  "⋍": { "codepoints": [8909], "characters": "\u22CD" },
+  "⧅": { "codepoints": [10693], "characters": "\u29C5" },
+  "\": { "codepoints": [92], "characters": "\u005C" },
+  "⟈": { "codepoints": [10184], "characters": "\u27C8" },
+  "•": { "codepoints": [8226], "characters": "\u2022" },
+  "•": { "codepoints": [8226], "characters": "\u2022" },
+  "≎": { "codepoints": [8782], "characters": "\u224E" },
+  "⪮": { "codepoints": [10926], "characters": "\u2AAE" },
+  "≏": { "codepoints": [8783], "characters": "\u224F" },
+  "≎": { "codepoints": [8782], "characters": "\u224E" },
+  "≏": { "codepoints": [8783], "characters": "\u224F" },
+  "Ć": { "codepoints": [262], "characters": "\u0106" },
+  "ć": { "codepoints": [263], "characters": "\u0107" },
+  "⩄": { "codepoints": [10820], "characters": "\u2A44" },
+  "⩉": { "codepoints": [10825], "characters": "\u2A49" },
+  "⩋": { "codepoints": [10827], "characters": "\u2A4B" },
+  "∩": { "codepoints": [8745], "characters": "\u2229" },
+  "⋒": { "codepoints": [8914], "characters": "\u22D2" },
+  "⩇": { "codepoints": [10823], "characters": "\u2A47" },
+  "⩀": { "codepoints": [10816], "characters": "\u2A40" },
+  "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
+  "∩︀": { "codepoints": [8745, 65024], "characters": "\u2229\uFE00" },
+  "⁁": { "codepoints": [8257], "characters": "\u2041" },
+  "ˇ": { "codepoints": [711], "characters": "\u02C7" },
+  "ℭ": { "codepoints": [8493], "characters": "\u212D" },
+  "⩍": { "codepoints": [10829], "characters": "\u2A4D" },
+  "Č": { "codepoints": [268], "characters": "\u010C" },
+  "č": { "codepoints": [269], "characters": "\u010D" },
+  "Ç": { "codepoints": [199], "characters": "\u00C7" },
+  "&Ccedil": { "codepoints": [199], "characters": "\u00C7" },
+  "ç": { "codepoints": [231], "characters": "\u00E7" },
+  "&ccedil": { "codepoints": [231], "characters": "\u00E7" },
+  "Ĉ": { "codepoints": [264], "characters": "\u0108" },
+  "ĉ": { "codepoints": [265], "characters": "\u0109" },
+  "∰": { "codepoints": [8752], "characters": "\u2230" },
+  "⩌": { "codepoints": [10828], "characters": "\u2A4C" },
+  "⩐": { "codepoints": [10832], "characters": "\u2A50" },
+  "Ċ": { "codepoints": [266], "characters": "\u010A" },
+  "ċ": { "codepoints": [267], "characters": "\u010B" },
+  "¸": { "codepoints": [184], "characters": "\u00B8" },
+  "&cedil": { "codepoints": [184], "characters": "\u00B8" },
+  "¸": { "codepoints": [184], "characters": "\u00B8" },
+  "⦲": { "codepoints": [10674], "characters": "\u29B2" },
+  "¢": { "codepoints": [162], "characters": "\u00A2" },
+  "&cent": { "codepoints": [162], "characters": "\u00A2" },
+  "·": { "codepoints": [183], "characters": "\u00B7" },
+  "·": { "codepoints": [183], "characters": "\u00B7" },
+  "𝔠": { "codepoints": [120096], "characters": "\uD835\uDD20" },
+  "ℭ": { "codepoints": [8493], "characters": "\u212D" },
+  "Ч": { "codepoints": [1063], "characters": "\u0427" },
+  "ч": { "codepoints": [1095], "characters": "\u0447" },
+  "✓": { "codepoints": [10003], "characters": "\u2713" },
+  "✓": { "codepoints": [10003], "characters": "\u2713" },
+  "Χ": { "codepoints": [935], "characters": "\u03A7" },
+  "χ": { "codepoints": [967], "characters": "\u03C7" },
+  "ˆ": { "codepoints": [710], "characters": "\u02C6" },
+  "≗": { "codepoints": [8791], "characters": "\u2257" },
+  "↺": { "codepoints": [8634], "characters": "\u21BA" },
+  "↻": { "codepoints": [8635], "characters": "\u21BB" },
+  "⊛": { "codepoints": [8859], "characters": "\u229B" },
+  "⊚": { "codepoints": [8858], "characters": "\u229A" },
+  "⊝": { "codepoints": [8861], "characters": "\u229D" },
+  "⊙": { "codepoints": [8857], "characters": "\u2299" },
+  "®": { "codepoints": [174], "characters": "\u00AE" },
+  "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
+  "⊖": { "codepoints": [8854], "characters": "\u2296" },
+  "⊕": { "codepoints": [8853], "characters": "\u2295" },
+  "⊗": { "codepoints": [8855], "characters": "\u2297" },
+  "○": { "codepoints": [9675], "characters": "\u25CB" },
+  "⧃": { "codepoints": [10691], "characters": "\u29C3" },
+  "≗": { "codepoints": [8791], "characters": "\u2257" },
+  "⨐": { "codepoints": [10768], "characters": "\u2A10" },
+  "⫯": { "codepoints": [10991], "characters": "\u2AEF" },
+  "⧂": { "codepoints": [10690], "characters": "\u29C2" },
+  "∲": { "codepoints": [8754], "characters": "\u2232" },
+  "”": { "codepoints": [8221], "characters": "\u201D" },
+  "’": { "codepoints": [8217], "characters": "\u2019" },
+  "♣": { "codepoints": [9827], "characters": "\u2663" },
+  "♣": { "codepoints": [9827], "characters": "\u2663" },
+  ":": { "codepoints": [58], "characters": "\u003A" },
+  "∷": { "codepoints": [8759], "characters": "\u2237" },
+  "⩴": { "codepoints": [10868], "characters": "\u2A74" },
+  "≔": { "codepoints": [8788], "characters": "\u2254" },
+  "≔": { "codepoints": [8788], "characters": "\u2254" },
+  ",": { "codepoints": [44], "characters": "\u002C" },
+  "@": { "codepoints": [64], "characters": "\u0040" },
+  "∁": { "codepoints": [8705], "characters": "\u2201" },
+  "∘": { "codepoints": [8728], "characters": "\u2218" },
+  "∁": { "codepoints": [8705], "characters": "\u2201" },
+  "ℂ": { "codepoints": [8450], "characters": "\u2102" },
+  "≅": { "codepoints": [8773], "characters": "\u2245" },
+  "⩭": { "codepoints": [10861], "characters": "\u2A6D" },
+  "≡": { "codepoints": [8801], "characters": "\u2261" },
+  "∮": { "codepoints": [8750], "characters": "\u222E" },
+  "∯": { "codepoints": [8751], "characters": "\u222F" },
+  "∮": { "codepoints": [8750], "characters": "\u222E" },
+  "𝕔": { "codepoints": [120148], "characters": "\uD835\uDD54" },
+  "ℂ": { "codepoints": [8450], "characters": "\u2102" },
+  "∐": { "codepoints": [8720], "characters": "\u2210" },
+  "∐": { "codepoints": [8720], "characters": "\u2210" },
+  "©": { "codepoints": [169], "characters": "\u00A9" },
+  "&copy": { "codepoints": [169], "characters": "\u00A9" },
+  "©": { "codepoints": [169], "characters": "\u00A9" },
+  "&COPY": { "codepoints": [169], "characters": "\u00A9" },
+  "℗": { "codepoints": [8471], "characters": "\u2117" },
+  "&CounterClockwiseContourIntegral;": { "codepoints": [8755], "characters": "\u2233" },
+  "↵": { "codepoints": [8629], "characters": "\u21B5" },
+  "✗": { "codepoints": [10007], "characters": "\u2717" },
+  "⨯": { "codepoints": [10799], "characters": "\u2A2F" },
+  "𝒞": { "codepoints": [119966], "characters": "\uD835\uDC9E" },
+  "𝒸": { "codepoints": [119992], "characters": "\uD835\uDCB8" },
+  "⫏": { "codepoints": [10959], "characters": "\u2ACF" },
+  "⫑": { "codepoints": [10961], "characters": "\u2AD1" },
+  "⫐": { "codepoints": [10960], "characters": "\u2AD0" },
+  "⫒": { "codepoints": [10962], "characters": "\u2AD2" },
+  "⋯": { "codepoints": [8943], "characters": "\u22EF" },
+  "⤸": { "codepoints": [10552], "characters": "\u2938" },
+  "⤵": { "codepoints": [10549], "characters": "\u2935" },
+  "⋞": { "codepoints": [8926], "characters": "\u22DE" },
+  "⋟": { "codepoints": [8927], "characters": "\u22DF" },
+  "↶": { "codepoints": [8630], "characters": "\u21B6" },
+  "⤽": { "codepoints": [10557], "characters": "\u293D" },
+  "⩈": { "codepoints": [10824], "characters": "\u2A48" },
+  "⩆": { "codepoints": [10822], "characters": "\u2A46" },
+  "≍": { "codepoints": [8781], "characters": "\u224D" },
+  "∪": { "codepoints": [8746], "characters": "\u222A" },
+  "⋓": { "codepoints": [8915], "characters": "\u22D3" },
+  "⩊": { "codepoints": [10826], "characters": "\u2A4A" },
+  "⊍": { "codepoints": [8845], "characters": "\u228D" },
+  "⩅": { "codepoints": [10821], "characters": "\u2A45" },
+  "∪︀": { "codepoints": [8746, 65024], "characters": "\u222A\uFE00" },
+  "↷": { "codepoints": [8631], "characters": "\u21B7" },
+  "⤼": { "codepoints": [10556], "characters": "\u293C" },
+  "⋞": { "codepoints": [8926], "characters": "\u22DE" },
+  "⋟": { "codepoints": [8927], "characters": "\u22DF" },
+  "⋎": { "codepoints": [8910], "characters": "\u22CE" },
+  "⋏": { "codepoints": [8911], "characters": "\u22CF" },
+  "¤": { "codepoints": [164], "characters": "\u00A4" },
+  "&curren": { "codepoints": [164], "characters": "\u00A4" },
+  "↶": { "codepoints": [8630], "characters": "\u21B6" },
+  "↷": { "codepoints": [8631], "characters": "\u21B7" },
+  "⋎": { "codepoints": [8910], "characters": "\u22CE" },
+  "⋏": { "codepoints": [8911], "characters": "\u22CF" },
+  "∲": { "codepoints": [8754], "characters": "\u2232" },
+  "∱": { "codepoints": [8753], "characters": "\u2231" },
+  "⌭": { "codepoints": [9005], "characters": "\u232D" },
+  "†": { "codepoints": [8224], "characters": "\u2020" },
+  "‡": { "codepoints": [8225], "characters": "\u2021" },
+  "ℸ": { "codepoints": [8504], "characters": "\u2138" },
+  "↓": { "codepoints": [8595], "characters": "\u2193" },
+  "↡": { "codepoints": [8609], "characters": "\u21A1" },
+  "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+  "‐": { "codepoints": [8208], "characters": "\u2010" },
+  "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
+  "⊣": { "codepoints": [8867], "characters": "\u22A3" },
+  "⤏": { "codepoints": [10511], "characters": "\u290F" },
+  "˝": { "codepoints": [733], "characters": "\u02DD" },
+  "Ď": { "codepoints": [270], "characters": "\u010E" },
+  "ď": { "codepoints": [271], "characters": "\u010F" },
+  "Д": { "codepoints": [1044], "characters": "\u0414" },
+  "д": { "codepoints": [1076], "characters": "\u0434" },
+  "‡": { "codepoints": [8225], "characters": "\u2021" },
+  "⇊": { "codepoints": [8650], "characters": "\u21CA" },
+  "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
+  "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
+  "⤑": { "codepoints": [10513], "characters": "\u2911" },
+  "⩷": { "codepoints": [10871], "characters": "\u2A77" },
+  "°": { "codepoints": [176], "characters": "\u00B0" },
+  "&deg": { "codepoints": [176], "characters": "\u00B0" },
+  "∇": { "codepoints": [8711], "characters": "\u2207" },
+  "Δ": { "codepoints": [916], "characters": "\u0394" },
+  "δ": { "codepoints": [948], "characters": "\u03B4" },
+  "⦱": { "codepoints": [10673], "characters": "\u29B1" },
+  "⥿": { "codepoints": [10623], "characters": "\u297F" },
+  "𝔇": { "codepoints": [120071], "characters": "\uD835\uDD07" },
+  "𝔡": { "codepoints": [120097], "characters": "\uD835\uDD21" },
+  "⥥": { "codepoints": [10597], "characters": "\u2965" },
+  "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+  "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+  "´": { "codepoints": [180], "characters": "\u00B4" },
+  "˙": { "codepoints": [729], "characters": "\u02D9" },
+  "˝": { "codepoints": [733], "characters": "\u02DD" },
+  "`": { "codepoints": [96], "characters": "\u0060" },
+  "˜": { "codepoints": [732], "characters": "\u02DC" },
+  "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+  "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+  "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+  "♦": { "codepoints": [9830], "characters": "\u2666" },
+  "♦": { "codepoints": [9830], "characters": "\u2666" },
+  "¨": { "codepoints": [168], "characters": "\u00A8" },
+  "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
+  "ϝ": { "codepoints": [989], "characters": "\u03DD" },
+  "⋲": { "codepoints": [8946], "characters": "\u22F2" },
+  "÷": { "codepoints": [247], "characters": "\u00F7" },
+  "÷": { "codepoints": [247], "characters": "\u00F7" },
+  "&divide": { "codepoints": [247], "characters": "\u00F7" },
+  "⋇": { "codepoints": [8903], "characters": "\u22C7" },
+  "⋇": { "codepoints": [8903], "characters": "\u22C7" },
+  "Ђ": { "codepoints": [1026], "characters": "\u0402" },
+  "ђ": { "codepoints": [1106], "characters": "\u0452" },
+  "⌞": { "codepoints": [8990], "characters": "\u231E" },
+  "⌍": { "codepoints": [8973], "characters": "\u230D" },
+  "$": { "codepoints": [36], "characters": "\u0024" },
+  "𝔻": { "codepoints": [120123], "characters": "\uD835\uDD3B" },
+  "𝕕": { "codepoints": [120149], "characters": "\uD835\uDD55" },
+  "¨": { "codepoints": [168], "characters": "\u00A8" },
+  "˙": { "codepoints": [729], "characters": "\u02D9" },
+  "⃜": { "codepoints": [8412], "characters": "\u20DC" },
+  "≐": { "codepoints": [8784], "characters": "\u2250" },
+  "≑": { "codepoints": [8785], "characters": "\u2251" },
+  "≐": { "codepoints": [8784], "characters": "\u2250" },
+  "∸": { "codepoints": [8760], "characters": "\u2238" },
+  "∔": { "codepoints": [8724], "characters": "\u2214" },
+  "⊡": { "codepoints": [8865], "characters": "\u22A1" },
+  "⌆": { "codepoints": [8966], "characters": "\u2306" },
+  "∯": { "codepoints": [8751], "characters": "\u222F" },
+  "¨": { "codepoints": [168], "characters": "\u00A8" },
+  "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+  "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+  "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+  "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
+  "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+  "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+  "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+  "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+  "⊨": { "codepoints": [8872], "characters": "\u22A8" },
+  "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+  "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+  "∥": { "codepoints": [8741], "characters": "\u2225" },
+  "⤓": { "codepoints": [10515], "characters": "\u2913" },
+  "↓": { "codepoints": [8595], "characters": "\u2193" },
+  "↓": { "codepoints": [8595], "characters": "\u2193" },
+  "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+  "⇵": { "codepoints": [8693], "characters": "\u21F5" },
+  "̑": { "codepoints": [785], "characters": "\u0311" },
+  "⇊": { "codepoints": [8650], "characters": "\u21CA" },
+  "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+  "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+  "⥐": { "codepoints": [10576], "characters": "\u2950" },
+  "⥞": { "codepoints": [10590], "characters": "\u295E" },
+  "⥖": { "codepoints": [10582], "characters": "\u2956" },
+  "↽": { "codepoints": [8637], "characters": "\u21BD" },
+  "⥟": { "codepoints": [10591], "characters": "\u295F" },
+  "⥗": { "codepoints": [10583], "characters": "\u2957" },
+  "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+  "↧": { "codepoints": [8615], "characters": "\u21A7" },
+  "⊤": { "codepoints": [8868], "characters": "\u22A4" },
+  "⤐": { "codepoints": [10512], "characters": "\u2910" },
+  "⌟": { "codepoints": [8991], "characters": "\u231F" },
+  "⌌": { "codepoints": [8972], "characters": "\u230C" },
+  "𝒟": { "codepoints": [119967], "characters": "\uD835\uDC9F" },
+  "𝒹": { "codepoints": [119993], "characters": "\uD835\uDCB9" },
+  "Ѕ": { "codepoints": [1029], "characters": "\u0405" },
+  "ѕ": { "codepoints": [1109], "characters": "\u0455" },
+  "⧶": { "codepoints": [10742], "characters": "\u29F6" },
+  "Đ": { "codepoints": [272], "characters": "\u0110" },
+  "đ": { "codepoints": [273], "characters": "\u0111" },
+  "⋱": { "codepoints": [8945], "characters": "\u22F1" },
+  "▿": { "codepoints": [9663], "characters": "\u25BF" },
+  "▾": { "codepoints": [9662], "characters": "\u25BE" },
+  "⇵": { "codepoints": [8693], "characters": "\u21F5" },
+  "⥯": { "codepoints": [10607], "characters": "\u296F" },
+  "⦦": { "codepoints": [10662], "characters": "\u29A6" },
+  "Џ": { "codepoints": [1039], "characters": "\u040F" },
+  "џ": { "codepoints": [1119], "characters": "\u045F" },
+  "⟿": { "codepoints": [10239], "characters": "\u27FF" },
+  "É": { "codepoints": [201], "characters": "\u00C9" },
+  "&Eacute": { "codepoints": [201], "characters": "\u00C9" },
+  "é": { "codepoints": [233], "characters": "\u00E9" },
+  "&eacute": { "codepoints": [233], "characters": "\u00E9" },
+  "⩮": { "codepoints": [10862], "characters": "\u2A6E" },
+  "Ě": { "codepoints": [282], "characters": "\u011A" },
+  "ě": { "codepoints": [283], "characters": "\u011B" },
+  "Ê": { "codepoints": [202], "characters": "\u00CA" },
+  "&Ecirc": { "codepoints": [202], "characters": "\u00CA" },
+  "ê": { "codepoints": [234], "characters": "\u00EA" },
+  "&ecirc": { "codepoints": [234], "characters": "\u00EA" },
+  "≖": { "codepoints": [8790], "characters": "\u2256" },
+  "≕": { "codepoints": [8789], "characters": "\u2255" },
+  "Э": { "codepoints": [1069], "characters": "\u042D" },
+  "э": { "codepoints": [1101], "characters": "\u044D" },
+  "⩷": { "codepoints": [10871], "characters": "\u2A77" },
+  "Ė": { "codepoints": [278], "characters": "\u0116" },
+  "ė": { "codepoints": [279], "characters": "\u0117" },
+  "≑": { "codepoints": [8785], "characters": "\u2251" },
+  "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+  "≒": { "codepoints": [8786], "characters": "\u2252" },
+  "𝔈": { "codepoints": [120072], "characters": "\uD835\uDD08" },
+  "𝔢": { "codepoints": [120098], "characters": "\uD835\uDD22" },
+  "⪚": { "codepoints": [10906], "characters": "\u2A9A" },
+  "È": { "codepoints": [200], "characters": "\u00C8" },
+  "&Egrave": { "codepoints": [200], "characters": "\u00C8" },
+  "è": { "codepoints": [232], "characters": "\u00E8" },
+  "&egrave": { "codepoints": [232], "characters": "\u00E8" },
+  "⪖": { "codepoints": [10902], "characters": "\u2A96" },
+  "⪘": { "codepoints": [10904], "characters": "\u2A98" },
+  "⪙": { "codepoints": [10905], "characters": "\u2A99" },
+  "∈": { "codepoints": [8712], "characters": "\u2208" },
+  "⏧": { "codepoints": [9191], "characters": "\u23E7" },
+  "ℓ": { "codepoints": [8467], "characters": "\u2113" },
+  "⪕": { "codepoints": [10901], "characters": "\u2A95" },
+  "⪗": { "codepoints": [10903], "characters": "\u2A97" },
+  "Ē": { "codepoints": [274], "characters": "\u0112" },
+  "ē": { "codepoints": [275], "characters": "\u0113" },
+  "∅": { "codepoints": [8709], "characters": "\u2205" },
+  "∅": { "codepoints": [8709], "characters": "\u2205" },
+  "◻": { "codepoints": [9723], "characters": "\u25FB" },
+  "∅": { "codepoints": [8709], "characters": "\u2205" },
+  "▫": { "codepoints": [9643], "characters": "\u25AB" },
+  " ": { "codepoints": [8196], "characters": "\u2004" },
+  " ": { "codepoints": [8197], "characters": "\u2005" },
+  " ": { "codepoints": [8195], "characters": "\u2003" },
+  "Ŋ": { "codepoints": [330], "characters": "\u014A" },
+  "ŋ": { "codepoints": [331], "characters": "\u014B" },
+  " ": { "codepoints": [8194], "characters": "\u2002" },
+  "Ę": { "codepoints": [280], "characters": "\u0118" },
+  "ę": { "codepoints": [281], "characters": "\u0119" },
+  "𝔼": { "codepoints": [120124], "characters": "\uD835\uDD3C" },
+  "𝕖": { "codepoints": [120150], "characters": "\uD835\uDD56" },
+  "⋕": { "codepoints": [8917], "characters": "\u22D5" },
+  "⧣": { "codepoints": [10723], "characters": "\u29E3" },
+  "⩱": { "codepoints": [10865], "characters": "\u2A71" },
+  "ε": { "codepoints": [949], "characters": "\u03B5" },
+  "Ε": { "codepoints": [917], "characters": "\u0395" },
+  "ε": { "codepoints": [949], "characters": "\u03B5" },
+  "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+  "≖": { "codepoints": [8790], "characters": "\u2256" },
+  "≕": { "codepoints": [8789], "characters": "\u2255" },
+  "≂": { "codepoints": [8770], "characters": "\u2242" },
+  "⪖": { "codepoints": [10902], "characters": "\u2A96" },
+  "⪕": { "codepoints": [10901], "characters": "\u2A95" },
+  "⩵": { "codepoints": [10869], "characters": "\u2A75" },
+  "=": { "codepoints": [61], "characters": "\u003D" },
+  "≂": { "codepoints": [8770], "characters": "\u2242" },
+  "≟": { "codepoints": [8799], "characters": "\u225F" },
+  "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+  "≡": { "codepoints": [8801], "characters": "\u2261" },
+  "⩸": { "codepoints": [10872], "characters": "\u2A78" },
+  "⧥": { "codepoints": [10725], "characters": "\u29E5" },
+  "⥱": { "codepoints": [10609], "characters": "\u2971" },
+  "≓": { "codepoints": [8787], "characters": "\u2253" },
+  "ℯ": { "codepoints": [8495], "characters": "\u212F" },
+  "ℰ": { "codepoints": [8496], "characters": "\u2130" },
+  "≐": { "codepoints": [8784], "characters": "\u2250" },
+  "⩳": { "codepoints": [10867], "characters": "\u2A73" },
+  "≂": { "codepoints": [8770], "characters": "\u2242" },
+  "Η": { "codepoints": [919], "characters": "\u0397" },
+  "η": { "codepoints": [951], "characters": "\u03B7" },
+  "Ð": { "codepoints": [208], "characters": "\u00D0" },
+  "&ETH": { "codepoints": [208], "characters": "\u00D0" },
+  "ð": { "codepoints": [240], "characters": "\u00F0" },
+  "&eth": { "codepoints": [240], "characters": "\u00F0" },
+  "Ë": { "codepoints": [203], "characters": "\u00CB" },
+  "&Euml": { "codepoints": [203], "characters": "\u00CB" },
+  "ë": { "codepoints": [235], "characters": "\u00EB" },
+  "&euml": { "codepoints": [235], "characters": "\u00EB" },
+  "€": { "codepoints": [8364], "characters": "\u20AC" },
+  "!": { "codepoints": [33], "characters": "\u0021" },
+  "∃": { "codepoints": [8707], "characters": "\u2203" },
+  "∃": { "codepoints": [8707], "characters": "\u2203" },
+  "ℰ": { "codepoints": [8496], "characters": "\u2130" },
+  "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+  "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+  "≒": { "codepoints": [8786], "characters": "\u2252" },
+  "Ф": { "codepoints": [1060], "characters": "\u0424" },
+  "ф": { "codepoints": [1092], "characters": "\u0444" },
+  "♀": { "codepoints": [9792], "characters": "\u2640" },
+  "ffi": { "codepoints": [64259], "characters": "\uFB03" },
+  "ff": { "codepoints": [64256], "characters": "\uFB00" },
+  "ffl": { "codepoints": [64260], "characters": "\uFB04" },
+  "𝔉": { "codepoints": [120073], "characters": "\uD835\uDD09" },
+  "𝔣": { "codepoints": [120099], "characters": "\uD835\uDD23" },
+  "fi": { "codepoints": [64257], "characters": "\uFB01" },
+  "◼": { "codepoints": [9724], "characters": "\u25FC" },
+  "▪": { "codepoints": [9642], "characters": "\u25AA" },
+  "fj": { "codepoints": [102, 106], "characters": "\u0066\u006A" },
+  "♭": { "codepoints": [9837], "characters": "\u266D" },
+  "fl": { "codepoints": [64258], "characters": "\uFB02" },
+  "▱": { "codepoints": [9649], "characters": "\u25B1" },
+  "ƒ": { "codepoints": [402], "characters": "\u0192" },
+  "𝔽": { "codepoints": [120125], "characters": "\uD835\uDD3D" },
+  "𝕗": { "codepoints": [120151], "characters": "\uD835\uDD57" },
+  "∀": { "codepoints": [8704], "characters": "\u2200" },
+  "∀": { "codepoints": [8704], "characters": "\u2200" },
+  "⋔": { "codepoints": [8916], "characters": "\u22D4" },
+  "⫙": { "codepoints": [10969], "characters": "\u2AD9" },
+  "ℱ": { "codepoints": [8497], "characters": "\u2131" },
+  "⨍": { "codepoints": [10765], "characters": "\u2A0D" },
+  "½": { "codepoints": [189], "characters": "\u00BD" },
+  "&frac12": { "codepoints": [189], "characters": "\u00BD" },
+  "⅓": { "codepoints": [8531], "characters": "\u2153" },
+  "¼": { "codepoints": [188], "characters": "\u00BC" },
+  "&frac14": { "codepoints": [188], "characters": "\u00BC" },
+  "⅕": { "codepoints": [8533], "characters": "\u2155" },
+  "⅙": { "codepoints": [8537], "characters": "\u2159" },
+  "⅛": { "codepoints": [8539], "characters": "\u215B" },
+  "⅔": { "codepoints": [8532], "characters": "\u2154" },
+  "⅖": { "codepoints": [8534], "characters": "\u2156" },
+  "¾": { "codepoints": [190], "characters": "\u00BE" },
+  "&frac34": { "codepoints": [190], "characters": "\u00BE" },
+  "⅗": { "codepoints": [8535], "characters": "\u2157" },
+  "⅜": { "codepoints": [8540], "characters": "\u215C" },
+  "⅘": { "codepoints": [8536], "characters": "\u2158" },
+  "⅚": { "codepoints": [8538], "characters": "\u215A" },
+  "⅝": { "codepoints": [8541], "characters": "\u215D" },
+  "⅞": { "codepoints": [8542], "characters": "\u215E" },
+  "⁄": { "codepoints": [8260], "characters": "\u2044" },
+  "⌢": { "codepoints": [8994], "characters": "\u2322" },
+  "𝒻": { "codepoints": [119995], "characters": "\uD835\uDCBB" },
+  "ℱ": { "codepoints": [8497], "characters": "\u2131" },
+  "ǵ": { "codepoints": [501], "characters": "\u01F5" },
+  "Γ": { "codepoints": [915], "characters": "\u0393" },
+  "γ": { "codepoints": [947], "characters": "\u03B3" },
+  "Ϝ": { "codepoints": [988], "characters": "\u03DC" },
+  "ϝ": { "codepoints": [989], "characters": "\u03DD" },
+  "⪆": { "codepoints": [10886], "characters": "\u2A86" },
+  "Ğ": { "codepoints": [286], "characters": "\u011E" },
+  "ğ": { "codepoints": [287], "characters": "\u011F" },
+  "Ģ": { "codepoints": [290], "characters": "\u0122" },
+  "Ĝ": { "codepoints": [284], "characters": "\u011C" },
+  "ĝ": { "codepoints": [285], "characters": "\u011D" },
+  "Г": { "codepoints": [1043], "characters": "\u0413" },
+  "г": { "codepoints": [1075], "characters": "\u0433" },
+  "Ġ": { "codepoints": [288], "characters": "\u0120" },
+  "ġ": { "codepoints": [289], "characters": "\u0121" },
+  "≥": { "codepoints": [8805], "characters": "\u2265" },
+  "≧": { "codepoints": [8807], "characters": "\u2267" },
+  "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
+  "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+  "≥": { "codepoints": [8805], "characters": "\u2265" },
+  "≧": { "codepoints": [8807], "characters": "\u2267" },
+  "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+  "⪩": { "codepoints": [10921], "characters": "\u2AA9" },
+  "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+  "⪀": { "codepoints": [10880], "characters": "\u2A80" },
+  "⪂": { "codepoints": [10882], "characters": "\u2A82" },
+  "⪄": { "codepoints": [10884], "characters": "\u2A84" },
+  "⋛︀": { "codepoints": [8923, 65024], "characters": "\u22DB\uFE00" },
+  "⪔": { "codepoints": [10900], "characters": "\u2A94" },
+  "𝔊": { "codepoints": [120074], "characters": "\uD835\uDD0A" },
+  "𝔤": { "codepoints": [120100], "characters": "\uD835\uDD24" },
+  "≫": { "codepoints": [8811], "characters": "\u226B" },
+  "⋙": { "codepoints": [8921], "characters": "\u22D9" },
+  "⋙": { "codepoints": [8921], "characters": "\u22D9" },
+  "ℷ": { "codepoints": [8503], "characters": "\u2137" },
+  "Ѓ": { "codepoints": [1027], "characters": "\u0403" },
+  "ѓ": { "codepoints": [1107], "characters": "\u0453" },
+  "⪥": { "codepoints": [10917], "characters": "\u2AA5" },
+  "≷": { "codepoints": [8823], "characters": "\u2277" },
+  "⪒": { "codepoints": [10898], "characters": "\u2A92" },
+  "⪤": { "codepoints": [10916], "characters": "\u2AA4" },
+  "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
+  "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
+  "⪈": { "codepoints": [10888], "characters": "\u2A88" },
+  "≩": { "codepoints": [8809], "characters": "\u2269" },
+  "⪈": { "codepoints": [10888], "characters": "\u2A88" },
+  "≩": { "codepoints": [8809], "characters": "\u2269" },
+  "⋧": { "codepoints": [8935], "characters": "\u22E7" },
+  "𝔾": { "codepoints": [120126], "characters": "\uD835\uDD3E" },
+  "𝕘": { "codepoints": [120152], "characters": "\uD835\uDD58" },
+  "`": { "codepoints": [96], "characters": "\u0060" },
+  "≥": { "codepoints": [8805], "characters": "\u2265" },
+  "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+  "≧": { "codepoints": [8807], "characters": "\u2267" },
+  "⪢": { "codepoints": [10914], "characters": "\u2AA2" },
+  "≷": { "codepoints": [8823], "characters": "\u2277" },
+  "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+  "≳": { "codepoints": [8819], "characters": "\u2273" },
+  "𝒢": { "codepoints": [119970], "characters": "\uD835\uDCA2" },
+  "ℊ": { "codepoints": [8458], "characters": "\u210A" },
+  "≳": { "codepoints": [8819], "characters": "\u2273" },
+  "⪎": { "codepoints": [10894], "characters": "\u2A8E" },
+  "⪐": { "codepoints": [10896], "characters": "\u2A90" },
+  "⪧": { "codepoints": [10919], "characters": "\u2AA7" },
+  "⩺": { "codepoints": [10874], "characters": "\u2A7A" },
+  ">": { "codepoints": [62], "characters": "\u003E" },
+  "&gt": { "codepoints": [62], "characters": "\u003E" },
+  ">": { "codepoints": [62], "characters": "\u003E" },
+  "&GT": { "codepoints": [62], "characters": "\u003E" },
+  "≫": { "codepoints": [8811], "characters": "\u226B" },
+  "⋗": { "codepoints": [8919], "characters": "\u22D7" },
+  "⦕": { "codepoints": [10645], "characters": "\u2995" },
+  "⩼": { "codepoints": [10876], "characters": "\u2A7C" },
+  "⪆": { "codepoints": [10886], "characters": "\u2A86" },
+  "⥸": { "codepoints": [10616], "characters": "\u2978" },
+  "⋗": { "codepoints": [8919], "characters": "\u22D7" },
+  "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+  "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
+  "≷": { "codepoints": [8823], "characters": "\u2277" },
+  "≳": { "codepoints": [8819], "characters": "\u2273" },
+  "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
+  "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
+  "ˇ": { "codepoints": [711], "characters": "\u02C7" },
+  " ": { "codepoints": [8202], "characters": "\u200A" },
+  "½": { "codepoints": [189], "characters": "\u00BD" },
+  "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+  "Ъ": { "codepoints": [1066], "characters": "\u042A" },
+  "ъ": { "codepoints": [1098], "characters": "\u044A" },
+  "⥈": { "codepoints": [10568], "characters": "\u2948" },
+  "↔": { "codepoints": [8596], "characters": "\u2194" },
+  "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+  "↭": { "codepoints": [8621], "characters": "\u21AD" },
+  "^": { "codepoints": [94], "characters": "\u005E" },
+  "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+  "Ĥ": { "codepoints": [292], "characters": "\u0124" },
+  "ĥ": { "codepoints": [293], "characters": "\u0125" },
+  "♥": { "codepoints": [9829], "characters": "\u2665" },
+  "♥": { "codepoints": [9829], "characters": "\u2665" },
+  "…": { "codepoints": [8230], "characters": "\u2026" },
+  "⊹": { "codepoints": [8889], "characters": "\u22B9" },
+  "𝔥": { "codepoints": [120101], "characters": "\uD835\uDD25" },
+  "ℌ": { "codepoints": [8460], "characters": "\u210C" },
+  "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+  "⤥": { "codepoints": [10533], "characters": "\u2925" },
+  "⤦": { "codepoints": [10534], "characters": "\u2926" },
+  "⇿": { "codepoints": [8703], "characters": "\u21FF" },
+  "∻": { "codepoints": [8763], "characters": "\u223B" },
+  "↩": { "codepoints": [8617], "characters": "\u21A9" },
+  "↪": { "codepoints": [8618], "characters": "\u21AA" },
+  "𝕙": { "codepoints": [120153], "characters": "\uD835\uDD59" },
+  "ℍ": { "codepoints": [8461], "characters": "\u210D" },
+  "―": { "codepoints": [8213], "characters": "\u2015" },
+  "─": { "codepoints": [9472], "characters": "\u2500" },
+  "𝒽": { "codepoints": [119997], "characters": "\uD835\uDCBD" },
+  "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+  "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+  "Ħ": { "codepoints": [294], "characters": "\u0126" },
+  "ħ": { "codepoints": [295], "characters": "\u0127" },
+  "≎": { "codepoints": [8782], "characters": "\u224E" },
+  "≏": { "codepoints": [8783], "characters": "\u224F" },
+  "⁃": { "codepoints": [8259], "characters": "\u2043" },
+  "‐": { "codepoints": [8208], "characters": "\u2010" },
+  "Í": { "codepoints": [205], "characters": "\u00CD" },
+  "&Iacute": { "codepoints": [205], "characters": "\u00CD" },
+  "í": { "codepoints": [237], "characters": "\u00ED" },
+  "&iacute": { "codepoints": [237], "characters": "\u00ED" },
+  "⁣": { "codepoints": [8291], "characters": "\u2063" },
+  "Î": { "codepoints": [206], "characters": "\u00CE" },
+  "&Icirc": { "codepoints": [206], "characters": "\u00CE" },
+  "î": { "codepoints": [238], "characters": "\u00EE" },
+  "&icirc": { "codepoints": [238], "characters": "\u00EE" },
+  "И": { "codepoints": [1048], "characters": "\u0418" },
+  "и": { "codepoints": [1080], "characters": "\u0438" },
+  "İ": { "codepoints": [304], "characters": "\u0130" },
+  "Е": { "codepoints": [1045], "characters": "\u0415" },
+  "е": { "codepoints": [1077], "characters": "\u0435" },
+  "¡": { "codepoints": [161], "characters": "\u00A1" },
+  "&iexcl": { "codepoints": [161], "characters": "\u00A1" },
+  "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+  "𝔦": { "codepoints": [120102], "characters": "\uD835\uDD26" },
+  "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+  "Ì": { "codepoints": [204], "characters": "\u00CC" },
+  "&Igrave": { "codepoints": [204], "characters": "\u00CC" },
+  "ì": { "codepoints": [236], "characters": "\u00EC" },
+  "&igrave": { "codepoints": [236], "characters": "\u00EC" },
+  "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
+  "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
+  "∭": { "codepoints": [8749], "characters": "\u222D" },
+  "⧜": { "codepoints": [10716], "characters": "\u29DC" },
+  "℩": { "codepoints": [8489], "characters": "\u2129" },
+  "IJ": { "codepoints": [306], "characters": "\u0132" },
+  "ij": { "codepoints": [307], "characters": "\u0133" },
+  "Ī": { "codepoints": [298], "characters": "\u012A" },
+  "ī": { "codepoints": [299], "characters": "\u012B" },
+  "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+  "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
+  "ℐ": { "codepoints": [8464], "characters": "\u2110" },
+  "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+  "ı": { "codepoints": [305], "characters": "\u0131" },
+  "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+  "⊷": { "codepoints": [8887], "characters": "\u22B7" },
+  "Ƶ": { "codepoints": [437], "characters": "\u01B5" },
+  "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+  "℅": { "codepoints": [8453], "characters": "\u2105" },
+  "∈": { "codepoints": [8712], "characters": "\u2208" },
+  "∞": { "codepoints": [8734], "characters": "\u221E" },
+  "⧝": { "codepoints": [10717], "characters": "\u29DD" },
+  "ı": { "codepoints": [305], "characters": "\u0131" },
+  "⊺": { "codepoints": [8890], "characters": "\u22BA" },
+  "∫": { "codepoints": [8747], "characters": "\u222B" },
+  "∬": { "codepoints": [8748], "characters": "\u222C" },
+  "ℤ": { "codepoints": [8484], "characters": "\u2124" },
+  "∫": { "codepoints": [8747], "characters": "\u222B" },
+  "⊺": { "codepoints": [8890], "characters": "\u22BA" },
+  "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+  "⨗": { "codepoints": [10775], "characters": "\u2A17" },
+  "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
+  "⁣": { "codepoints": [8291], "characters": "\u2063" },
+  "⁢": { "codepoints": [8290], "characters": "\u2062" },
+  "Ё": { "codepoints": [1025], "characters": "\u0401" },
+  "ё": { "codepoints": [1105], "characters": "\u0451" },
+  "Į": { "codepoints": [302], "characters": "\u012E" },
+  "į": { "codepoints": [303], "characters": "\u012F" },
+  "𝕀": { "codepoints": [120128], "characters": "\uD835\uDD40" },
+  "𝕚": { "codepoints": [120154], "characters": "\uD835\uDD5A" },
+  "Ι": { "codepoints": [921], "characters": "\u0399" },
+  "ι": { "codepoints": [953], "characters": "\u03B9" },
+  "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
+  "¿": { "codepoints": [191], "characters": "\u00BF" },
+  "&iquest": { "codepoints": [191], "characters": "\u00BF" },
+  "𝒾": { "codepoints": [119998], "characters": "\uD835\uDCBE" },
+  "ℐ": { "codepoints": [8464], "characters": "\u2110" },
+  "∈": { "codepoints": [8712], "characters": "\u2208" },
+  "⋵": { "codepoints": [8949], "characters": "\u22F5" },
+  "⋹": { "codepoints": [8953], "characters": "\u22F9" },
+  "⋴": { "codepoints": [8948], "characters": "\u22F4" },
+  "⋳": { "codepoints": [8947], "characters": "\u22F3" },
+  "∈": { "codepoints": [8712], "characters": "\u2208" },
+  "⁢": { "codepoints": [8290], "characters": "\u2062" },
+  "Ĩ": { "codepoints": [296], "characters": "\u0128" },
+  "ĩ": { "codepoints": [297], "characters": "\u0129" },
+  "І": { "codepoints": [1030], "characters": "\u0406" },
+  "і": { "codepoints": [1110], "characters": "\u0456" },
+  "Ï": { "codepoints": [207], "characters": "\u00CF" },
+  "&Iuml": { "codepoints": [207], "characters": "\u00CF" },
+  "ï": { "codepoints": [239], "characters": "\u00EF" },
+  "&iuml": { "codepoints": [239], "characters": "\u00EF" },
+  "Ĵ": { "codepoints": [308], "characters": "\u0134" },
+  "ĵ": { "codepoints": [309], "characters": "\u0135" },
+  "Й": { "codepoints": [1049], "characters": "\u0419" },
+  "й": { "codepoints": [1081], "characters": "\u0439" },
+  "𝔍": { "codepoints": [120077], "characters": "\uD835\uDD0D" },
+  "𝔧": { "codepoints": [120103], "characters": "\uD835\uDD27" },
+  "ȷ": { "codepoints": [567], "characters": "\u0237" },
+  "𝕁": { "codepoints": [120129], "characters": "\uD835\uDD41" },
+  "𝕛": { "codepoints": [120155], "characters": "\uD835\uDD5B" },
+  "𝒥": { "codepoints": [119973], "characters": "\uD835\uDCA5" },
+  "𝒿": { "codepoints": [119999], "characters": "\uD835\uDCBF" },
+  "Ј": { "codepoints": [1032], "characters": "\u0408" },
+  "ј": { "codepoints": [1112], "characters": "\u0458" },
+  "Є": { "codepoints": [1028], "characters": "\u0404" },
+  "є": { "codepoints": [1108], "characters": "\u0454" },
+  "Κ": { "codepoints": [922], "characters": "\u039A" },
+  "κ": { "codepoints": [954], "characters": "\u03BA" },
+  "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
+  "Ķ": { "codepoints": [310], "characters": "\u0136" },
+  "ķ": { "codepoints": [311], "characters": "\u0137" },
+  "К": { "codepoints": [1050], "characters": "\u041A" },
+  "к": { "codepoints": [1082], "characters": "\u043A" },
+  "𝔎": { "codepoints": [120078], "characters": "\uD835\uDD0E" },
+  "𝔨": { "codepoints": [120104], "characters": "\uD835\uDD28" },
+  "ĸ": { "codepoints": [312], "characters": "\u0138" },
+  "Х": { "codepoints": [1061], "characters": "\u0425" },
+  "х": { "codepoints": [1093], "characters": "\u0445" },
+  "Ќ": { "codepoints": [1036], "characters": "\u040C" },
+  "ќ": { "codepoints": [1116], "characters": "\u045C" },
+  "𝕂": { "codepoints": [120130], "characters": "\uD835\uDD42" },
+  "𝕜": { "codepoints": [120156], "characters": "\uD835\uDD5C" },
+  "𝒦": { "codepoints": [119974], "characters": "\uD835\uDCA6" },
+  "𝓀": { "codepoints": [120000], "characters": "\uD835\uDCC0" },
+  "⇚": { "codepoints": [8666], "characters": "\u21DA" },
+  "Ĺ": { "codepoints": [313], "characters": "\u0139" },
+  "ĺ": { "codepoints": [314], "characters": "\u013A" },
+  "⦴": { "codepoints": [10676], "characters": "\u29B4" },
+  "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+  "Λ": { "codepoints": [923], "characters": "\u039B" },
+  "λ": { "codepoints": [955], "characters": "\u03BB" },
+  "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+  "⟪": { "codepoints": [10218], "characters": "\u27EA" },
+  "⦑": { "codepoints": [10641], "characters": "\u2991" },
+  "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+  "⪅": { "codepoints": [10885], "characters": "\u2A85" },
+  "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+  "«": { "codepoints": [171], "characters": "\u00AB" },
+  "&laquo": { "codepoints": [171], "characters": "\u00AB" },
+  "⇤": { "codepoints": [8676], "characters": "\u21E4" },
+  "⤟": { "codepoints": [10527], "characters": "\u291F" },
+  "←": { "codepoints": [8592], "characters": "\u2190" },
+  "↞": { "codepoints": [8606], "characters": "\u219E" },
+  "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+  "⤝": { "codepoints": [10525], "characters": "\u291D" },
+  "↩": { "codepoints": [8617], "characters": "\u21A9" },
+  "↫": { "codepoints": [8619], "characters": "\u21AB" },
+  "⤹": { "codepoints": [10553], "characters": "\u2939" },
+  "⥳": { "codepoints": [10611], "characters": "\u2973" },
+  "↢": { "codepoints": [8610], "characters": "\u21A2" },
+  "⤙": { "codepoints": [10521], "characters": "\u2919" },
+  "⤛": { "codepoints": [10523], "characters": "\u291B" },
+  "⪫": { "codepoints": [10923], "characters": "\u2AAB" },
+  "⪭": { "codepoints": [10925], "characters": "\u2AAD" },
+  "⪭︀": { "codepoints": [10925, 65024], "characters": "\u2AAD\uFE00" },
+  "⤌": { "codepoints": [10508], "characters": "\u290C" },
+  "⤎": { "codepoints": [10510], "characters": "\u290E" },
+  "❲": { "codepoints": [10098], "characters": "\u2772" },
+  "{": { "codepoints": [123], "characters": "\u007B" },
+  "[": { "codepoints": [91], "characters": "\u005B" },
+  "⦋": { "codepoints": [10635], "characters": "\u298B" },
+  "⦏": { "codepoints": [10639], "characters": "\u298F" },
+  "⦍": { "codepoints": [10637], "characters": "\u298D" },
+  "Ľ": { "codepoints": [317], "characters": "\u013D" },
+  "ľ": { "codepoints": [318], "characters": "\u013E" },
+  "Ļ": { "codepoints": [315], "characters": "\u013B" },
+  "ļ": { "codepoints": [316], "characters": "\u013C" },
+  "⌈": { "codepoints": [8968], "characters": "\u2308" },
+  "{": { "codepoints": [123], "characters": "\u007B" },
+  "Л": { "codepoints": [1051], "characters": "\u041B" },
+  "л": { "codepoints": [1083], "characters": "\u043B" },
+  "⤶": { "codepoints": [10550], "characters": "\u2936" },
+  "“": { "codepoints": [8220], "characters": "\u201C" },
+  "„": { "codepoints": [8222], "characters": "\u201E" },
+  "⥧": { "codepoints": [10599], "characters": "\u2967" },
+  "⥋": { "codepoints": [10571], "characters": "\u294B" },
+  "↲": { "codepoints": [8626], "characters": "\u21B2" },
+  "≤": { "codepoints": [8804], "characters": "\u2264" },
+  "≦": { "codepoints": [8806], "characters": "\u2266" },
+  "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+  "⇤": { "codepoints": [8676], "characters": "\u21E4" },
+  "←": { "codepoints": [8592], "characters": "\u2190" },
+  "←": { "codepoints": [8592], "characters": "\u2190" },
+  "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+  "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+  "↢": { "codepoints": [8610], "characters": "\u21A2" },
+  "⌈": { "codepoints": [8968], "characters": "\u2308" },
+  "⟦": { "codepoints": [10214], "characters": "\u27E6" },
+  "⥡": { "codepoints": [10593], "characters": "\u2961" },
+  "⥙": { "codepoints": [10585], "characters": "\u2959" },
+  "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+  "⌊": { "codepoints": [8970], "characters": "\u230A" },
+  "↽": { "codepoints": [8637], "characters": "\u21BD" },
+  "↼": { "codepoints": [8636], "characters": "\u21BC" },
+  "⇇": { "codepoints": [8647], "characters": "\u21C7" },
+  "↔": { "codepoints": [8596], "characters": "\u2194" },
+  "↔": { "codepoints": [8596], "characters": "\u2194" },
+  "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+  "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+  "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+  "↭": { "codepoints": [8621], "characters": "\u21AD" },
+  "⥎": { "codepoints": [10574], "characters": "\u294E" },
+  "↤": { "codepoints": [8612], "characters": "\u21A4" },
+  "⊣": { "codepoints": [8867], "characters": "\u22A3" },
+  "⥚": { "codepoints": [10586], "characters": "\u295A" },
+  "⋋": { "codepoints": [8907], "characters": "\u22CB" },
+  "⧏": { "codepoints": [10703], "characters": "\u29CF" },
+  "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+  "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+  "⥑": { "codepoints": [10577], "characters": "\u2951" },
+  "⥠": { "codepoints": [10592], "characters": "\u2960" },
+  "⥘": { "codepoints": [10584], "characters": "\u2958" },
+  "↿": { "codepoints": [8639], "characters": "\u21BF" },
+  "⥒": { "codepoints": [10578], "characters": "\u2952" },
+  "↼": { "codepoints": [8636], "characters": "\u21BC" },
+  "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
+  "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+  "≤": { "codepoints": [8804], "characters": "\u2264" },
+  "≦": { "codepoints": [8806], "characters": "\u2266" },
+  "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+  "⪨": { "codepoints": [10920], "characters": "\u2AA8" },
+  "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+  "⩿": { "codepoints": [10879], "characters": "\u2A7F" },
+  "⪁": { "codepoints": [10881], "characters": "\u2A81" },
+  "⪃": { "codepoints": [10883], "characters": "\u2A83" },
+  "⋚︀": { "codepoints": [8922, 65024], "characters": "\u22DA\uFE00" },
+  "⪓": { "codepoints": [10899], "characters": "\u2A93" },
+  "⪅": { "codepoints": [10885], "characters": "\u2A85" },
+  "⋖": { "codepoints": [8918], "characters": "\u22D6" },
+  "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+  "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
+  "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+  "≦": { "codepoints": [8806], "characters": "\u2266" },
+  "≶": { "codepoints": [8822], "characters": "\u2276" },
+  "≶": { "codepoints": [8822], "characters": "\u2276" },
+  "⪡": { "codepoints": [10913], "characters": "\u2AA1" },
+  "≲": { "codepoints": [8818], "characters": "\u2272" },
+  "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+  "≲": { "codepoints": [8818], "characters": "\u2272" },
+  "⥼": { "codepoints": [10620], "characters": "\u297C" },
+  "⌊": { "codepoints": [8970], "characters": "\u230A" },
+  "𝔏": { "codepoints": [120079], "characters": "\uD835\uDD0F" },
+  "𝔩": { "codepoints": [120105], "characters": "\uD835\uDD29" },
+  "≶": { "codepoints": [8822], "characters": "\u2276" },
+  "⪑": { "codepoints": [10897], "characters": "\u2A91" },
+  "⥢": { "codepoints": [10594], "characters": "\u2962" },
+  "↽": { "codepoints": [8637], "characters": "\u21BD" },
+  "↼": { "codepoints": [8636], "characters": "\u21BC" },
+  "⥪": { "codepoints": [10602], "characters": "\u296A" },
+  "▄": { "codepoints": [9604], "characters": "\u2584" },
+  "Љ": { "codepoints": [1033], "characters": "\u0409" },
+  "љ": { "codepoints": [1113], "characters": "\u0459" },
+  "⇇": { "codepoints": [8647], "characters": "\u21C7" },
+  "≪": { "codepoints": [8810], "characters": "\u226A" },
+  "⋘": { "codepoints": [8920], "characters": "\u22D8" },
+  "⌞": { "codepoints": [8990], "characters": "\u231E" },
+  "⇚": { "codepoints": [8666], "characters": "\u21DA" },
+  "⥫": { "codepoints": [10603], "characters": "\u296B" },
+  "◺": { "codepoints": [9722], "characters": "\u25FA" },
+  "Ŀ": { "codepoints": [319], "characters": "\u013F" },
+  "ŀ": { "codepoints": [320], "characters": "\u0140" },
+  "⎰": { "codepoints": [9136], "characters": "\u23B0" },
+  "⎰": { "codepoints": [9136], "characters": "\u23B0" },
+  "⪉": { "codepoints": [10889], "characters": "\u2A89" },
+  "⪉": { "codepoints": [10889], "characters": "\u2A89" },
+  "⪇": { "codepoints": [10887], "characters": "\u2A87" },
+  "≨": { "codepoints": [8808], "characters": "\u2268" },
+  "⪇": { "codepoints": [10887], "characters": "\u2A87" },
+  "≨": { "codepoints": [8808], "characters": "\u2268" },
+  "⋦": { "codepoints": [8934], "characters": "\u22E6" },
+  "⟬": { "codepoints": [10220], "characters": "\u27EC" },
+  "⇽": { "codepoints": [8701], "characters": "\u21FD" },
+  "⟦": { "codepoints": [10214], "characters": "\u27E6" },
+  "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+  "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+  "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+  "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+  "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+  "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+  "⟼": { "codepoints": [10236], "characters": "\u27FC" },
+  "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+  "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+  "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+  "↫": { "codepoints": [8619], "characters": "\u21AB" },
+  "↬": { "codepoints": [8620], "characters": "\u21AC" },
+  "⦅": { "codepoints": [10629], "characters": "\u2985" },
+  "𝕃": { "codepoints": [120131], "characters": "\uD835\uDD43" },
+  "𝕝": { "codepoints": [120157], "characters": "\uD835\uDD5D" },
+  "⨭": { "codepoints": [10797], "characters": "\u2A2D" },
+  "⨴": { "codepoints": [10804], "characters": "\u2A34" },
+  "∗": { "codepoints": [8727], "characters": "\u2217" },
+  "_": { "codepoints": [95], "characters": "\u005F" },
+  "↙": { "codepoints": [8601], "characters": "\u2199" },
+  "↘": { "codepoints": [8600], "characters": "\u2198" },
+  "◊": { "codepoints": [9674], "characters": "\u25CA" },
+  "◊": { "codepoints": [9674], "characters": "\u25CA" },
+  "⧫": { "codepoints": [10731], "characters": "\u29EB" },
+  "(": { "codepoints": [40], "characters": "\u0028" },
+  "⦓": { "codepoints": [10643], "characters": "\u2993" },
+  "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+  "⌟": { "codepoints": [8991], "characters": "\u231F" },
+  "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+  "⥭": { "codepoints": [10605], "characters": "\u296D" },
+  "‎": { "codepoints": [8206], "characters": "\u200E" },
+  "⊿": { "codepoints": [8895], "characters": "\u22BF" },
+  "‹": { "codepoints": [8249], "characters": "\u2039" },
+  "𝓁": { "codepoints": [120001], "characters": "\uD835\uDCC1" },
+  "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+  "↰": { "codepoints": [8624], "characters": "\u21B0" },
+  "↰": { "codepoints": [8624], "characters": "\u21B0" },
+  "≲": { "codepoints": [8818], "characters": "\u2272" },
+  "⪍": { "codepoints": [10893], "characters": "\u2A8D" },
+  "⪏": { "codepoints": [10895], "characters": "\u2A8F" },
+  "[": { "codepoints": [91], "characters": "\u005B" },
+  "‘": { "codepoints": [8216], "characters": "\u2018" },
+  "‚": { "codepoints": [8218], "characters": "\u201A" },
+  "Ł": { "codepoints": [321], "characters": "\u0141" },
+  "ł": { "codepoints": [322], "characters": "\u0142" },
+  "⪦": { "codepoints": [10918], "characters": "\u2AA6" },
+  "⩹": { "codepoints": [10873], "characters": "\u2A79" },
+  "<": { "codepoints": [60], "characters": "\u003C" },
+  "&lt": { "codepoints": [60], "characters": "\u003C" },
+  "<": { "codepoints": [60], "characters": "\u003C" },
+  "&LT": { "codepoints": [60], "characters": "\u003C" },
+  "≪": { "codepoints": [8810], "characters": "\u226A" },
+  "⋖": { "codepoints": [8918], "characters": "\u22D6" },
+  "⋋": { "codepoints": [8907], "characters": "\u22CB" },
+  "⋉": { "codepoints": [8905], "characters": "\u22C9" },
+  "⥶": { "codepoints": [10614], "characters": "\u2976" },
+  "⩻": { "codepoints": [10875], "characters": "\u2A7B" },
+  "◃": { "codepoints": [9667], "characters": "\u25C3" },
+  "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+  "◂": { "codepoints": [9666], "characters": "\u25C2" },
+  "⦖": { "codepoints": [10646], "characters": "\u2996" },
+  "⥊": { "codepoints": [10570], "characters": "\u294A" },
+  "⥦": { "codepoints": [10598], "characters": "\u2966" },
+  "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
+  "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
+  "¯": { "codepoints": [175], "characters": "\u00AF" },
+  "&macr": { "codepoints": [175], "characters": "\u00AF" },
+  "♂": { "codepoints": [9794], "characters": "\u2642" },
+  "✠": { "codepoints": [10016], "characters": "\u2720" },
+  "✠": { "codepoints": [10016], "characters": "\u2720" },
+  "⤅": { "codepoints": [10501], "characters": "\u2905" },
+  "↦": { "codepoints": [8614], "characters": "\u21A6" },
+  "↦": { "codepoints": [8614], "characters": "\u21A6" },
+  "↧": { "codepoints": [8615], "characters": "\u21A7" },
+  "↤": { "codepoints": [8612], "characters": "\u21A4" },
+  "↥": { "codepoints": [8613], "characters": "\u21A5" },
+  "▮": { "codepoints": [9646], "characters": "\u25AE" },
+  "⨩": { "codepoints": [10793], "characters": "\u2A29" },
+  "М": { "codepoints": [1052], "characters": "\u041C" },
+  "м": { "codepoints": [1084], "characters": "\u043C" },
+  "—": { "codepoints": [8212], "characters": "\u2014" },
+  "∺": { "codepoints": [8762], "characters": "\u223A" },
+  "∡": { "codepoints": [8737], "characters": "\u2221" },
+  " ": { "codepoints": [8287], "characters": "\u205F" },
+  "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+  "𝔐": { "codepoints": [120080], "characters": "\uD835\uDD10" },
+  "𝔪": { "codepoints": [120106], "characters": "\uD835\uDD2A" },
+  "℧": { "codepoints": [8487], "characters": "\u2127" },
+  "µ": { "codepoints": [181], "characters": "\u00B5" },
+  "&micro": { "codepoints": [181], "characters": "\u00B5" },
+  "*": { "codepoints": [42], "characters": "\u002A" },
+  "⫰": { "codepoints": [10992], "characters": "\u2AF0" },
+  "∣": { "codepoints": [8739], "characters": "\u2223" },
+  "·": { "codepoints": [183], "characters": "\u00B7" },
+  "&middot": { "codepoints": [183], "characters": "\u00B7" },
+  "⊟": { "codepoints": [8863], "characters": "\u229F" },
+  "−": { "codepoints": [8722], "characters": "\u2212" },
+  "∸": { "codepoints": [8760], "characters": "\u2238" },
+  "⨪": { "codepoints": [10794], "characters": "\u2A2A" },
+  "∓": { "codepoints": [8723], "characters": "\u2213" },
+  "⫛": { "codepoints": [10971], "characters": "\u2ADB" },
+  "…": { "codepoints": [8230], "characters": "\u2026" },
+  "∓": { "codepoints": [8723], "characters": "\u2213" },
+  "⊧": { "codepoints": [8871], "characters": "\u22A7" },
+  "𝕄": { "codepoints": [120132], "characters": "\uD835\uDD44" },
+  "𝕞": { "codepoints": [120158], "characters": "\uD835\uDD5E" },
+  "∓": { "codepoints": [8723], "characters": "\u2213" },
+  "𝓂": { "codepoints": [120002], "characters": "\uD835\uDCC2" },
+  "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+  "∾": { "codepoints": [8766], "characters": "\u223E" },
+  "Μ": { "codepoints": [924], "characters": "\u039C" },
+  "μ": { "codepoints": [956], "characters": "\u03BC" },
+  "⊸": { "codepoints": [8888], "characters": "\u22B8" },
+  "⊸": { "codepoints": [8888], "characters": "\u22B8" },
+  "∇": { "codepoints": [8711], "characters": "\u2207" },
+  "Ń": { "codepoints": [323], "characters": "\u0143" },
+  "ń": { "codepoints": [324], "characters": "\u0144" },
+  "∠⃒": { "codepoints": [8736, 8402], "characters": "\u2220\u20D2" },
+  "≉": { "codepoints": [8777], "characters": "\u2249" },
+  "⩰̸": { "codepoints": [10864, 824], "characters": "\u2A70\u0338" },
+  "≋̸": { "codepoints": [8779, 824], "characters": "\u224B\u0338" },
+  "ʼn": { "codepoints": [329], "characters": "\u0149" },
+  "≉": { "codepoints": [8777], "characters": "\u2249" },
+  "♮": { "codepoints": [9838], "characters": "\u266E" },
+  "ℕ": { "codepoints": [8469], "characters": "\u2115" },
+  "♮": { "codepoints": [9838], "characters": "\u266E" },
+  " ": { "codepoints": [160], "characters": "\u00A0" },
+  "&nbsp": { "codepoints": [160], "characters": "\u00A0" },
+  "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
+  "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
+  "⩃": { "codepoints": [10819], "characters": "\u2A43" },
+  "Ň": { "codepoints": [327], "characters": "\u0147" },
+  "ň": { "codepoints": [328], "characters": "\u0148" },
+  "Ņ": { "codepoints": [325], "characters": "\u0145" },
+  "ņ": { "codepoints": [326], "characters": "\u0146" },
+  "≇": { "codepoints": [8775], "characters": "\u2247" },
+  "⩭̸": { "codepoints": [10861, 824], "characters": "\u2A6D\u0338" },
+  "⩂": { "codepoints": [10818], "characters": "\u2A42" },
+  "Н": { "codepoints": [1053], "characters": "\u041D" },
+  "н": { "codepoints": [1085], "characters": "\u043D" },
+  "–": { "codepoints": [8211], "characters": "\u2013" },
+  "⤤": { "codepoints": [10532], "characters": "\u2924" },
+  "↗": { "codepoints": [8599], "characters": "\u2197" },
+  "⇗": { "codepoints": [8663], "characters": "\u21D7" },
+  "↗": { "codepoints": [8599], "characters": "\u2197" },
+  "≠": { "codepoints": [8800], "characters": "\u2260" },
+  "≐̸": { "codepoints": [8784, 824], "characters": "\u2250\u0338" },
+  "​": { "codepoints": [8203], "characters": "\u200B" },
+  "​": { "codepoints": [8203], "characters": "\u200B" },
+  "​": { "codepoints": [8203], "characters": "\u200B" },
+  "​": { "codepoints": [8203], "characters": "\u200B" },
+  "≢": { "codepoints": [8802], "characters": "\u2262" },
+  "⤨": { "codepoints": [10536], "characters": "\u2928" },
+  "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
+  "≫": { "codepoints": [8811], "characters": "\u226B" },
+  "≪": { "codepoints": [8810], "characters": "\u226A" },
+  "
": { "codepoints": [10], "characters": "\u000A" },
+  "∄": { "codepoints": [8708], "characters": "\u2204" },
+  "∄": { "codepoints": [8708], "characters": "\u2204" },
+  "𝔑": { "codepoints": [120081], "characters": "\uD835\uDD11" },
+  "𝔫": { "codepoints": [120107], "characters": "\uD835\uDD2B" },
+  "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+  "≱": { "codepoints": [8817], "characters": "\u2271" },
+  "≱": { "codepoints": [8817], "characters": "\u2271" },
+  "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+  "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+  "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+  "⋙̸": { "codepoints": [8921, 824], "characters": "\u22D9\u0338" },
+  "≵": { "codepoints": [8821], "characters": "\u2275" },
+  "≫⃒": { "codepoints": [8811, 8402], "characters": "\u226B\u20D2" },
+  "≯": { "codepoints": [8815], "characters": "\u226F" },
+  "≯": { "codepoints": [8815], "characters": "\u226F" },
+  "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
+  "↮": { "codepoints": [8622], "characters": "\u21AE" },
+  "⇎": { "codepoints": [8654], "characters": "\u21CE" },
+  "⫲": { "codepoints": [10994], "characters": "\u2AF2" },
+  "∋": { "codepoints": [8715], "characters": "\u220B" },
+  "⋼": { "codepoints": [8956], "characters": "\u22FC" },
+  "⋺": { "codepoints": [8954], "characters": "\u22FA" },
+  "∋": { "codepoints": [8715], "characters": "\u220B" },
+  "Њ": { "codepoints": [1034], "characters": "\u040A" },
+  "њ": { "codepoints": [1114], "characters": "\u045A" },
+  "↚": { "codepoints": [8602], "characters": "\u219A" },
+  "⇍": { "codepoints": [8653], "characters": "\u21CD" },
+  "‥": { "codepoints": [8229], "characters": "\u2025" },
+  "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
+  "≰": { "codepoints": [8816], "characters": "\u2270" },
+  "↚": { "codepoints": [8602], "characters": "\u219A" },
+  "⇍": { "codepoints": [8653], "characters": "\u21CD" },
+  "↮": { "codepoints": [8622], "characters": "\u21AE" },
+  "⇎": { "codepoints": [8654], "characters": "\u21CE" },
+  "≰": { "codepoints": [8816], "characters": "\u2270" },
+  "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
+  "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+  "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+  "≮": { "codepoints": [8814], "characters": "\u226E" },
+  "⋘̸": { "codepoints": [8920, 824], "characters": "\u22D8\u0338" },
+  "≴": { "codepoints": [8820], "characters": "\u2274" },
+  "≪⃒": { "codepoints": [8810, 8402], "characters": "\u226A\u20D2" },
+  "≮": { "codepoints": [8814], "characters": "\u226E" },
+  "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+  "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+  "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
+  "∤": { "codepoints": [8740], "characters": "\u2224" },
+  "⁠": { "codepoints": [8288], "characters": "\u2060" },
+  " ": { "codepoints": [160], "characters": "\u00A0" },
+  "𝕟": { "codepoints": [120159], "characters": "\uD835\uDD5F" },
+  "ℕ": { "codepoints": [8469], "characters": "\u2115" },
+  "⫬": { "codepoints": [10988], "characters": "\u2AEC" },
+  "¬": { "codepoints": [172], "characters": "\u00AC" },
+  "&not": { "codepoints": [172], "characters": "\u00AC" },
+  "≢": { "codepoints": [8802], "characters": "\u2262" },
+  "≭": { "codepoints": [8813], "characters": "\u226D" },
+  "∦": { "codepoints": [8742], "characters": "\u2226" },
+  "∉": { "codepoints": [8713], "characters": "\u2209" },
+  "≠": { "codepoints": [8800], "characters": "\u2260" },
+  "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
+  "∄": { "codepoints": [8708], "characters": "\u2204" },
+  "≯": { "codepoints": [8815], "characters": "\u226F" },
+  "≱": { "codepoints": [8817], "characters": "\u2271" },
+  "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+  "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
+  "≹": { "codepoints": [8825], "characters": "\u2279" },
+  "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+  "≵": { "codepoints": [8821], "characters": "\u2275" },
+  "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
+  "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
+  "∉": { "codepoints": [8713], "characters": "\u2209" },
+  "⋵̸": { "codepoints": [8949, 824], "characters": "\u22F5\u0338" },
+  "⋹̸": { "codepoints": [8953, 824], "characters": "\u22F9\u0338" },
+  "∉": { "codepoints": [8713], "characters": "\u2209" },
+  "⋷": { "codepoints": [8951], "characters": "\u22F7" },
+  "⋶": { "codepoints": [8950], "characters": "\u22F6" },
+  "⧏̸": { "codepoints": [10703, 824], "characters": "\u29CF\u0338" },
+  "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+  "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+  "≮": { "codepoints": [8814], "characters": "\u226E" },
+  "≰": { "codepoints": [8816], "characters": "\u2270" },
+  "≸": { "codepoints": [8824], "characters": "\u2278" },
+  "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
+  "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+  "≴": { "codepoints": [8820], "characters": "\u2274" },
+  "⪢̸": { "codepoints": [10914, 824], "characters": "\u2AA2\u0338" },
+  "⪡̸": { "codepoints": [10913, 824], "characters": "\u2AA1\u0338" },
+  "∌": { "codepoints": [8716], "characters": "\u220C" },
+  "∌": { "codepoints": [8716], "characters": "\u220C" },
+  "⋾": { "codepoints": [8958], "characters": "\u22FE" },
+  "⋽": { "codepoints": [8957], "characters": "\u22FD" },
+  "⊀": { "codepoints": [8832], "characters": "\u2280" },
+  "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+  "⋠": { "codepoints": [8928], "characters": "\u22E0" },
+  "∌": { "codepoints": [8716], "characters": "\u220C" },
+  "⧐̸": { "codepoints": [10704, 824], "characters": "\u29D0\u0338" },
+  "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+  "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+  "⊏̸": { "codepoints": [8847, 824], "characters": "\u228F\u0338" },
+  "⋢": { "codepoints": [8930], "characters": "\u22E2" },
+  "⊐̸": { "codepoints": [8848, 824], "characters": "\u2290\u0338" },
+  "⋣": { "codepoints": [8931], "characters": "\u22E3" },
+  "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+  "⊈": { "codepoints": [8840], "characters": "\u2288" },
+  "⊁": { "codepoints": [8833], "characters": "\u2281" },
+  "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+  "⋡": { "codepoints": [8929], "characters": "\u22E1" },
+  "≿̸": { "codepoints": [8831, 824], "characters": "\u227F\u0338" },
+  "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+  "⊉": { "codepoints": [8841], "characters": "\u2289" },
+  "≁": { "codepoints": [8769], "characters": "\u2241" },
+  "≄": { "codepoints": [8772], "characters": "\u2244" },
+  "≇": { "codepoints": [8775], "characters": "\u2247" },
+  "≉": { "codepoints": [8777], "characters": "\u2249" },
+  "∤": { "codepoints": [8740], "characters": "\u2224" },
+  "∦": { "codepoints": [8742], "characters": "\u2226" },
+  "∦": { "codepoints": [8742], "characters": "\u2226" },
+  "⫽⃥": { "codepoints": [11005, 8421], "characters": "\u2AFD\u20E5" },
+  "∂̸": { "codepoints": [8706, 824], "characters": "\u2202\u0338" },
+  "⨔": { "codepoints": [10772], "characters": "\u2A14" },
+  "⊀": { "codepoints": [8832], "characters": "\u2280" },
+  "⋠": { "codepoints": [8928], "characters": "\u22E0" },
+  "⊀": { "codepoints": [8832], "characters": "\u2280" },
+  "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+  "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+  "⤳̸": { "codepoints": [10547, 824], "characters": "\u2933\u0338" },
+  "↛": { "codepoints": [8603], "characters": "\u219B" },
+  "⇏": { "codepoints": [8655], "characters": "\u21CF" },
+  "↝̸": { "codepoints": [8605, 824], "characters": "\u219D\u0338" },
+  "↛": { "codepoints": [8603], "characters": "\u219B" },
+  "⇏": { "codepoints": [8655], "characters": "\u21CF" },
+  "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+  "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+  "⊁": { "codepoints": [8833], "characters": "\u2281" },
+  "⋡": { "codepoints": [8929], "characters": "\u22E1" },
+  "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+  "𝒩": { "codepoints": [119977], "characters": "\uD835\uDCA9" },
+  "𝓃": { "codepoints": [120003], "characters": "\uD835\uDCC3" },
+  "∤": { "codepoints": [8740], "characters": "\u2224" },
+  "∦": { "codepoints": [8742], "characters": "\u2226" },
+  "≁": { "codepoints": [8769], "characters": "\u2241" },
+  "≄": { "codepoints": [8772], "characters": "\u2244" },
+  "≄": { "codepoints": [8772], "characters": "\u2244" },
+  "∤": { "codepoints": [8740], "characters": "\u2224" },
+  "∦": { "codepoints": [8742], "characters": "\u2226" },
+  "⋢": { "codepoints": [8930], "characters": "\u22E2" },
+  "⋣": { "codepoints": [8931], "characters": "\u22E3" },
+  "⊄": { "codepoints": [8836], "characters": "\u2284" },
+  "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
+  "⊈": { "codepoints": [8840], "characters": "\u2288" },
+  "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+  "⊈": { "codepoints": [8840], "characters": "\u2288" },
+  "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
+  "⊁": { "codepoints": [8833], "characters": "\u2281" },
+  "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+  "⊅": { "codepoints": [8837], "characters": "\u2285" },
+  "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
+  "⊉": { "codepoints": [8841], "characters": "\u2289" },
+  "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+  "⊉": { "codepoints": [8841], "characters": "\u2289" },
+  "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
+  "≹": { "codepoints": [8825], "characters": "\u2279" },
+  "Ñ": { "codepoints": [209], "characters": "\u00D1" },
+  "&Ntilde": { "codepoints": [209], "characters": "\u00D1" },
+  "ñ": { "codepoints": [241], "characters": "\u00F1" },
+  "&ntilde": { "codepoints": [241], "characters": "\u00F1" },
+  "≸": { "codepoints": [8824], "characters": "\u2278" },
+  "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+  "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+  "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+  "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+  "Ν": { "codepoints": [925], "characters": "\u039D" },
+  "ν": { "codepoints": [957], "characters": "\u03BD" },
+  "#": { "codepoints": [35], "characters": "\u0023" },
+  "№": { "codepoints": [8470], "characters": "\u2116" },
+  " ": { "codepoints": [8199], "characters": "\u2007" },
+  "≍⃒": { "codepoints": [8781, 8402], "characters": "\u224D\u20D2" },
+  "⊬": { "codepoints": [8876], "characters": "\u22AC" },
+  "⊭": { "codepoints": [8877], "characters": "\u22AD" },
+  "⊮": { "codepoints": [8878], "characters": "\u22AE" },
+  "⊯": { "codepoints": [8879], "characters": "\u22AF" },
+  "≥⃒": { "codepoints": [8805, 8402], "characters": "\u2265\u20D2" },
+  ">⃒": { "codepoints": [62, 8402], "characters": "\u003E\u20D2" },
+  "⤄": { "codepoints": [10500], "characters": "\u2904" },
+  "⧞": { "codepoints": [10718], "characters": "\u29DE" },
+  "⤂": { "codepoints": [10498], "characters": "\u2902" },
+  "≤⃒": { "codepoints": [8804, 8402], "characters": "\u2264\u20D2" },
+  "<⃒": { "codepoints": [60, 8402], "characters": "\u003C\u20D2" },
+  "⊴⃒": { "codepoints": [8884, 8402], "characters": "\u22B4\u20D2" },
+  "⤃": { "codepoints": [10499], "characters": "\u2903" },
+  "⊵⃒": { "codepoints": [8885, 8402], "characters": "\u22B5\u20D2" },
+  "∼⃒": { "codepoints": [8764, 8402], "characters": "\u223C\u20D2" },
+  "⤣": { "codepoints": [10531], "characters": "\u2923" },
+  "↖": { "codepoints": [8598], "characters": "\u2196" },
+  "⇖": { "codepoints": [8662], "characters": "\u21D6" },
+  "↖": { "codepoints": [8598], "characters": "\u2196" },
+  "⤧": { "codepoints": [10535], "characters": "\u2927" },
+  "Ó": { "codepoints": [211], "characters": "\u00D3" },
+  "&Oacute": { "codepoints": [211], "characters": "\u00D3" },
+  "ó": { "codepoints": [243], "characters": "\u00F3" },
+  "&oacute": { "codepoints": [243], "characters": "\u00F3" },
+  "⊛": { "codepoints": [8859], "characters": "\u229B" },
+  "Ô": { "codepoints": [212], "characters": "\u00D4" },
+  "&Ocirc": { "codepoints": [212], "characters": "\u00D4" },
+  "ô": { "codepoints": [244], "characters": "\u00F4" },
+  "&ocirc": { "codepoints": [244], "characters": "\u00F4" },
+  "⊚": { "codepoints": [8858], "characters": "\u229A" },
+  "О": { "codepoints": [1054], "characters": "\u041E" },
+  "о": { "codepoints": [1086], "characters": "\u043E" },
+  "⊝": { "codepoints": [8861], "characters": "\u229D" },
+  "Ő": { "codepoints": [336], "characters": "\u0150" },
+  "ő": { "codepoints": [337], "characters": "\u0151" },
+  "⨸": { "codepoints": [10808], "characters": "\u2A38" },
+  "⊙": { "codepoints": [8857], "characters": "\u2299" },
+  "⦼": { "codepoints": [10684], "characters": "\u29BC" },
+  "Œ": { "codepoints": [338], "characters": "\u0152" },
+  "œ": { "codepoints": [339], "characters": "\u0153" },
+  "⦿": { "codepoints": [10687], "characters": "\u29BF" },
+  "𝔒": { "codepoints": [120082], "characters": "\uD835\uDD12" },
+  "𝔬": { "codepoints": [120108], "characters": "\uD835\uDD2C" },
+  "˛": { "codepoints": [731], "characters": "\u02DB" },
+  "Ò": { "codepoints": [210], "characters": "\u00D2" },
+  "&Ograve": { "codepoints": [210], "characters": "\u00D2" },
+  "ò": { "codepoints": [242], "characters": "\u00F2" },
+  "&ograve": { "codepoints": [242], "characters": "\u00F2" },
+  "⧁": { "codepoints": [10689], "characters": "\u29C1" },
+  "⦵": { "codepoints": [10677], "characters": "\u29B5" },
+  "Ω": { "codepoints": [937], "characters": "\u03A9" },
+  "∮": { "codepoints": [8750], "characters": "\u222E" },
+  "↺": { "codepoints": [8634], "characters": "\u21BA" },
+  "⦾": { "codepoints": [10686], "characters": "\u29BE" },
+  "⦻": { "codepoints": [10683], "characters": "\u29BB" },
+  "‾": { "codepoints": [8254], "characters": "\u203E" },
+  "⧀": { "codepoints": [10688], "characters": "\u29C0" },
+  "Ō": { "codepoints": [332], "characters": "\u014C" },
+  "ō": { "codepoints": [333], "characters": "\u014D" },
+  "Ω": { "codepoints": [937], "characters": "\u03A9" },
+  "ω": { "codepoints": [969], "characters": "\u03C9" },
+  "Ο": { "codepoints": [927], "characters": "\u039F" },
+  "ο": { "codepoints": [959], "characters": "\u03BF" },
+  "⦶": { "codepoints": [10678], "characters": "\u29B6" },
+  "⊖": { "codepoints": [8854], "characters": "\u2296" },
+  "𝕆": { "codepoints": [120134], "characters": "\uD835\uDD46" },
+  "𝕠": { "codepoints": [120160], "characters": "\uD835\uDD60" },
+  "⦷": { "codepoints": [10679], "characters": "\u29B7" },
+  "“": { "codepoints": [8220], "characters": "\u201C" },
+  "‘": { "codepoints": [8216], "characters": "\u2018" },
+  "⦹": { "codepoints": [10681], "characters": "\u29B9" },
+  "⊕": { "codepoints": [8853], "characters": "\u2295" },
+  "↻": { "codepoints": [8635], "characters": "\u21BB" },
+  "⩔": { "codepoints": [10836], "characters": "\u2A54" },
+  "∨": { "codepoints": [8744], "characters": "\u2228" },
+  "⩝": { "codepoints": [10845], "characters": "\u2A5D" },
+  "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+  "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+  "ª": { "codepoints": [170], "characters": "\u00AA" },
+  "&ordf": { "codepoints": [170], "characters": "\u00AA" },
+  "º": { "codepoints": [186], "characters": "\u00BA" },
+  "&ordm": { "codepoints": [186], "characters": "\u00BA" },
+  "⊶": { "codepoints": [8886], "characters": "\u22B6" },
+  "⩖": { "codepoints": [10838], "characters": "\u2A56" },
+  "⩗": { "codepoints": [10839], "characters": "\u2A57" },
+  "⩛": { "codepoints": [10843], "characters": "\u2A5B" },
+  "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
+  "𝒪": { "codepoints": [119978], "characters": "\uD835\uDCAA" },
+  "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+  "Ø": { "codepoints": [216], "characters": "\u00D8" },
+  "&Oslash": { "codepoints": [216], "characters": "\u00D8" },
+  "ø": { "codepoints": [248], "characters": "\u00F8" },
+  "&oslash": { "codepoints": [248], "characters": "\u00F8" },
+  "⊘": { "codepoints": [8856], "characters": "\u2298" },
+  "Õ": { "codepoints": [213], "characters": "\u00D5" },
+  "&Otilde": { "codepoints": [213], "characters": "\u00D5" },
+  "õ": { "codepoints": [245], "characters": "\u00F5" },
+  "&otilde": { "codepoints": [245], "characters": "\u00F5" },
+  "⨶": { "codepoints": [10806], "characters": "\u2A36" },
+  "⨷": { "codepoints": [10807], "characters": "\u2A37" },
+  "⊗": { "codepoints": [8855], "characters": "\u2297" },
+  "Ö": { "codepoints": [214], "characters": "\u00D6" },
+  "&Ouml": { "codepoints": [214], "characters": "\u00D6" },
+  "ö": { "codepoints": [246], "characters": "\u00F6" },
+  "&ouml": { "codepoints": [246], "characters": "\u00F6" },
+  "⌽": { "codepoints": [9021], "characters": "\u233D" },
+  "‾": { "codepoints": [8254], "characters": "\u203E" },
+  "⏞": { "codepoints": [9182], "characters": "\u23DE" },
+  "⎴": { "codepoints": [9140], "characters": "\u23B4" },
+  "⏜": { "codepoints": [9180], "characters": "\u23DC" },
+  "¶": { "codepoints": [182], "characters": "\u00B6" },
+  "&para": { "codepoints": [182], "characters": "\u00B6" },
+  "∥": { "codepoints": [8741], "characters": "\u2225" },
+  "∥": { "codepoints": [8741], "characters": "\u2225" },
+  "⫳": { "codepoints": [10995], "characters": "\u2AF3" },
+  "⫽": { "codepoints": [11005], "characters": "\u2AFD" },
+  "∂": { "codepoints": [8706], "characters": "\u2202" },
+  "∂": { "codepoints": [8706], "characters": "\u2202" },
+  "П": { "codepoints": [1055], "characters": "\u041F" },
+  "п": { "codepoints": [1087], "characters": "\u043F" },
+  "%": { "codepoints": [37], "characters": "\u0025" },
+  ".": { "codepoints": [46], "characters": "\u002E" },
+  "‰": { "codepoints": [8240], "characters": "\u2030" },
+  "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+  "‱": { "codepoints": [8241], "characters": "\u2031" },
+  "𝔓": { "codepoints": [120083], "characters": "\uD835\uDD13" },
+  "𝔭": { "codepoints": [120109], "characters": "\uD835\uDD2D" },
+  "Φ": { "codepoints": [934], "characters": "\u03A6" },
+  "φ": { "codepoints": [966], "characters": "\u03C6" },
+  "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+  "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+  "☎": { "codepoints": [9742], "characters": "\u260E" },
+  "Π": { "codepoints": [928], "characters": "\u03A0" },
+  "π": { "codepoints": [960], "characters": "\u03C0" },
+  "⋔": { "codepoints": [8916], "characters": "\u22D4" },
+  "ϖ": { "codepoints": [982], "characters": "\u03D6" },
+  "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+  "ℎ": { "codepoints": [8462], "characters": "\u210E" },
+  "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+  "⨣": { "codepoints": [10787], "characters": "\u2A23" },
+  "⊞": { "codepoints": [8862], "characters": "\u229E" },
+  "⨢": { "codepoints": [10786], "characters": "\u2A22" },
+  "+": { "codepoints": [43], "characters": "\u002B" },
+  "∔": { "codepoints": [8724], "characters": "\u2214" },
+  "⨥": { "codepoints": [10789], "characters": "\u2A25" },
+  "⩲": { "codepoints": [10866], "characters": "\u2A72" },
+  "±": { "codepoints": [177], "characters": "\u00B1" },
+  "±": { "codepoints": [177], "characters": "\u00B1" },
+  "&plusmn": { "codepoints": [177], "characters": "\u00B1" },
+  "⨦": { "codepoints": [10790], "characters": "\u2A26" },
+  "⨧": { "codepoints": [10791], "characters": "\u2A27" },
+  "±": { "codepoints": [177], "characters": "\u00B1" },
+  "ℌ": { "codepoints": [8460], "characters": "\u210C" },
+  "⨕": { "codepoints": [10773], "characters": "\u2A15" },
+  "𝕡": { "codepoints": [120161], "characters": "\uD835\uDD61" },
+  "ℙ": { "codepoints": [8473], "characters": "\u2119" },
+  "£": { "codepoints": [163], "characters": "\u00A3" },
+  "&pound": { "codepoints": [163], "characters": "\u00A3" },
+  "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
+  "⪻": { "codepoints": [10939], "characters": "\u2ABB" },
+  "≺": { "codepoints": [8826], "characters": "\u227A" },
+  "≼": { "codepoints": [8828], "characters": "\u227C" },
+  "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
+  "≺": { "codepoints": [8826], "characters": "\u227A" },
+  "≼": { "codepoints": [8828], "characters": "\u227C" },
+  "≺": { "codepoints": [8826], "characters": "\u227A" },
+  "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+  "≼": { "codepoints": [8828], "characters": "\u227C" },
+  "≾": { "codepoints": [8830], "characters": "\u227E" },
+  "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+  "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
+  "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
+  "⋨": { "codepoints": [8936], "characters": "\u22E8" },
+  "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+  "⪳": { "codepoints": [10931], "characters": "\u2AB3" },
+  "≾": { "codepoints": [8830], "characters": "\u227E" },
+  "′": { "codepoints": [8242], "characters": "\u2032" },
+  "″": { "codepoints": [8243], "characters": "\u2033" },
+  "ℙ": { "codepoints": [8473], "characters": "\u2119" },
+  "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
+  "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
+  "⋨": { "codepoints": [8936], "characters": "\u22E8" },
+  "∏": { "codepoints": [8719], "characters": "\u220F" },
+  "∏": { "codepoints": [8719], "characters": "\u220F" },
+  "⌮": { "codepoints": [9006], "characters": "\u232E" },
+  "⌒": { "codepoints": [8978], "characters": "\u2312" },
+  "⌓": { "codepoints": [8979], "characters": "\u2313" },
+  "∝": { "codepoints": [8733], "characters": "\u221D" },
+  "∝": { "codepoints": [8733], "characters": "\u221D" },
+  "∷": { "codepoints": [8759], "characters": "\u2237" },
+  "∝": { "codepoints": [8733], "characters": "\u221D" },
+  "≾": { "codepoints": [8830], "characters": "\u227E" },
+  "⊰": { "codepoints": [8880], "characters": "\u22B0" },
+  "𝒫": { "codepoints": [119979], "characters": "\uD835\uDCAB" },
+  "𝓅": { "codepoints": [120005], "characters": "\uD835\uDCC5" },
+  "Ψ": { "codepoints": [936], "characters": "\u03A8" },
+  "ψ": { "codepoints": [968], "characters": "\u03C8" },
+  " ": { "codepoints": [8200], "characters": "\u2008" },
+  "𝔔": { "codepoints": [120084], "characters": "\uD835\uDD14" },
+  "𝔮": { "codepoints": [120110], "characters": "\uD835\uDD2E" },
+  "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
+  "𝕢": { "codepoints": [120162], "characters": "\uD835\uDD62" },
+  "ℚ": { "codepoints": [8474], "characters": "\u211A" },
+  "⁗": { "codepoints": [8279], "characters": "\u2057" },
+  "𝒬": { "codepoints": [119980], "characters": "\uD835\uDCAC" },
+  "𝓆": { "codepoints": [120006], "characters": "\uD835\uDCC6" },
+  "ℍ": { "codepoints": [8461], "characters": "\u210D" },
+  "⨖": { "codepoints": [10774], "characters": "\u2A16" },
+  "?": { "codepoints": [63], "characters": "\u003F" },
+  "≟": { "codepoints": [8799], "characters": "\u225F" },
+  """: { "codepoints": [34], "characters": "\u0022" },
+  "&quot": { "codepoints": [34], "characters": "\u0022" },
+  """: { "codepoints": [34], "characters": "\u0022" },
+  "&QUOT": { "codepoints": [34], "characters": "\u0022" },
+  "⇛": { "codepoints": [8667], "characters": "\u21DB" },
+  "∽̱": { "codepoints": [8765, 817], "characters": "\u223D\u0331" },
+  "Ŕ": { "codepoints": [340], "characters": "\u0154" },
+  "ŕ": { "codepoints": [341], "characters": "\u0155" },
+  "√": { "codepoints": [8730], "characters": "\u221A" },
+  "⦳": { "codepoints": [10675], "characters": "\u29B3" },
+  "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+  "⟫": { "codepoints": [10219], "characters": "\u27EB" },
+  "⦒": { "codepoints": [10642], "characters": "\u2992" },
+  "⦥": { "codepoints": [10661], "characters": "\u29A5" },
+  "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+  "»": { "codepoints": [187], "characters": "\u00BB" },
+  "&raquo": { "codepoints": [187], "characters": "\u00BB" },
+  "⥵": { "codepoints": [10613], "characters": "\u2975" },
+  "⇥": { "codepoints": [8677], "characters": "\u21E5" },
+  "⤠": { "codepoints": [10528], "characters": "\u2920" },
+  "⤳": { "codepoints": [10547], "characters": "\u2933" },
+  "→": { "codepoints": [8594], "characters": "\u2192" },
+  "↠": { "codepoints": [8608], "characters": "\u21A0" },
+  "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+  "⤞": { "codepoints": [10526], "characters": "\u291E" },
+  "↪": { "codepoints": [8618], "characters": "\u21AA" },
+  "↬": { "codepoints": [8620], "characters": "\u21AC" },
+  "⥅": { "codepoints": [10565], "characters": "\u2945" },
+  "⥴": { "codepoints": [10612], "characters": "\u2974" },
+  "⤖": { "codepoints": [10518], "characters": "\u2916" },
+  "↣": { "codepoints": [8611], "characters": "\u21A3" },
+  "↝": { "codepoints": [8605], "characters": "\u219D" },
+  "⤚": { "codepoints": [10522], "characters": "\u291A" },
+  "⤜": { "codepoints": [10524], "characters": "\u291C" },
+  "∶": { "codepoints": [8758], "characters": "\u2236" },
+  "ℚ": { "codepoints": [8474], "characters": "\u211A" },
+  "⤍": { "codepoints": [10509], "characters": "\u290D" },
+  "⤏": { "codepoints": [10511], "characters": "\u290F" },
+  "⤐": { "codepoints": [10512], "characters": "\u2910" },
+  "❳": { "codepoints": [10099], "characters": "\u2773" },
+  "}": { "codepoints": [125], "characters": "\u007D" },
+  "]": { "codepoints": [93], "characters": "\u005D" },
+  "⦌": { "codepoints": [10636], "characters": "\u298C" },
+  "⦎": { "codepoints": [10638], "characters": "\u298E" },
+  "⦐": { "codepoints": [10640], "characters": "\u2990" },
+  "Ř": { "codepoints": [344], "characters": "\u0158" },
+  "ř": { "codepoints": [345], "characters": "\u0159" },
+  "Ŗ": { "codepoints": [342], "characters": "\u0156" },
+  "ŗ": { "codepoints": [343], "characters": "\u0157" },
+  "⌉": { "codepoints": [8969], "characters": "\u2309" },
+  "}": { "codepoints": [125], "characters": "\u007D" },
+  "Р": { "codepoints": [1056], "characters": "\u0420" },
+  "р": { "codepoints": [1088], "characters": "\u0440" },
+  "⤷": { "codepoints": [10551], "characters": "\u2937" },
+  "⥩": { "codepoints": [10601], "characters": "\u2969" },
+  "”": { "codepoints": [8221], "characters": "\u201D" },
+  "”": { "codepoints": [8221], "characters": "\u201D" },
+  "↳": { "codepoints": [8627], "characters": "\u21B3" },
+  "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+  "ℛ": { "codepoints": [8475], "characters": "\u211B" },
+  "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+  "ℝ": { "codepoints": [8477], "characters": "\u211D" },
+  "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+  "▭": { "codepoints": [9645], "characters": "\u25AD" },
+  "®": { "codepoints": [174], "characters": "\u00AE" },
+  "&reg": { "codepoints": [174], "characters": "\u00AE" },
+  "®": { "codepoints": [174], "characters": "\u00AE" },
+  "&REG": { "codepoints": [174], "characters": "\u00AE" },
+  "∋": { "codepoints": [8715], "characters": "\u220B" },
+  "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+  "⥯": { "codepoints": [10607], "characters": "\u296F" },
+  "⥽": { "codepoints": [10621], "characters": "\u297D" },
+  "⌋": { "codepoints": [8971], "characters": "\u230B" },
+  "𝔯": { "codepoints": [120111], "characters": "\uD835\uDD2F" },
+  "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+  "⥤": { "codepoints": [10596], "characters": "\u2964" },
+  "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+  "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+  "⥬": { "codepoints": [10604], "characters": "\u296C" },
+  "Ρ": { "codepoints": [929], "characters": "\u03A1" },
+  "ρ": { "codepoints": [961], "characters": "\u03C1" },
+  "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
+  "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+  "⇥": { "codepoints": [8677], "characters": "\u21E5" },
+  "→": { "codepoints": [8594], "characters": "\u2192" },
+  "→": { "codepoints": [8594], "characters": "\u2192" },
+  "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+  "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+  "↣": { "codepoints": [8611], "characters": "\u21A3" },
+  "⌉": { "codepoints": [8969], "characters": "\u2309" },
+  "⟧": { "codepoints": [10215], "characters": "\u27E7" },
+  "⥝": { "codepoints": [10589], "characters": "\u295D" },
+  "⥕": { "codepoints": [10581], "characters": "\u2955" },
+  "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+  "⌋": { "codepoints": [8971], "characters": "\u230B" },
+  "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+  "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+  "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+  "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+  "⇉": { "codepoints": [8649], "characters": "\u21C9" },
+  "↝": { "codepoints": [8605], "characters": "\u219D" },
+  "↦": { "codepoints": [8614], "characters": "\u21A6" },
+  "⊢": { "codepoints": [8866], "characters": "\u22A2" },
+  "⥛": { "codepoints": [10587], "characters": "\u295B" },
+  "⋌": { "codepoints": [8908], "characters": "\u22CC" },
+  "⧐": { "codepoints": [10704], "characters": "\u29D0" },
+  "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+  "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+  "⥏": { "codepoints": [10575], "characters": "\u294F" },
+  "⥜": { "codepoints": [10588], "characters": "\u295C" },
+  "⥔": { "codepoints": [10580], "characters": "\u2954" },
+  "↾": { "codepoints": [8638], "characters": "\u21BE" },
+  "⥓": { "codepoints": [10579], "characters": "\u2953" },
+  "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+  "˚": { "codepoints": [730], "characters": "\u02DA" },
+  "≓": { "codepoints": [8787], "characters": "\u2253" },
+  "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+  "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+  "‏": { "codepoints": [8207], "characters": "\u200F" },
+  "⎱": { "codepoints": [9137], "characters": "\u23B1" },
+  "⎱": { "codepoints": [9137], "characters": "\u23B1" },
+  "⫮": { "codepoints": [10990], "characters": "\u2AEE" },
+  "⟭": { "codepoints": [10221], "characters": "\u27ED" },
+  "⇾": { "codepoints": [8702], "characters": "\u21FE" },
+  "⟧": { "codepoints": [10215], "characters": "\u27E7" },
+  "⦆": { "codepoints": [10630], "characters": "\u2986" },
+  "𝕣": { "codepoints": [120163], "characters": "\uD835\uDD63" },
+  "ℝ": { "codepoints": [8477], "characters": "\u211D" },
+  "⨮": { "codepoints": [10798], "characters": "\u2A2E" },
+  "⨵": { "codepoints": [10805], "characters": "\u2A35" },
+  "⥰": { "codepoints": [10608], "characters": "\u2970" },
+  ")": { "codepoints": [41], "characters": "\u0029" },
+  "⦔": { "codepoints": [10644], "characters": "\u2994" },
+  "⨒": { "codepoints": [10770], "characters": "\u2A12" },
+  "⇉": { "codepoints": [8649], "characters": "\u21C9" },
+  "⇛": { "codepoints": [8667], "characters": "\u21DB" },
+  "›": { "codepoints": [8250], "characters": "\u203A" },
+  "𝓇": { "codepoints": [120007], "characters": "\uD835\uDCC7" },
+  "ℛ": { "codepoints": [8475], "characters": "\u211B" },
+  "↱": { "codepoints": [8625], "characters": "\u21B1" },
+  "↱": { "codepoints": [8625], "characters": "\u21B1" },
+  "]": { "codepoints": [93], "characters": "\u005D" },
+  "’": { "codepoints": [8217], "characters": "\u2019" },
+  "’": { "codepoints": [8217], "characters": "\u2019" },
+  "⋌": { "codepoints": [8908], "characters": "\u22CC" },
+  "⋊": { "codepoints": [8906], "characters": "\u22CA" },
+  "▹": { "codepoints": [9657], "characters": "\u25B9" },
+  "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+  "▸": { "codepoints": [9656], "characters": "\u25B8" },
+  "⧎": { "codepoints": [10702], "characters": "\u29CE" },
+  "⧴": { "codepoints": [10740], "characters": "\u29F4" },
+  "⥨": { "codepoints": [10600], "characters": "\u2968" },
+  "℞": { "codepoints": [8478], "characters": "\u211E" },
+  "Ś": { "codepoints": [346], "characters": "\u015A" },
+  "ś": { "codepoints": [347], "characters": "\u015B" },
+  "‚": { "codepoints": [8218], "characters": "\u201A" },
+  "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
+  "Š": { "codepoints": [352], "characters": "\u0160" },
+  "š": { "codepoints": [353], "characters": "\u0161" },
+  "⪼": { "codepoints": [10940], "characters": "\u2ABC" },
+  "≻": { "codepoints": [8827], "characters": "\u227B" },
+  "≽": { "codepoints": [8829], "characters": "\u227D" },
+  "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+  "⪴": { "codepoints": [10932], "characters": "\u2AB4" },
+  "Ş": { "codepoints": [350], "characters": "\u015E" },
+  "ş": { "codepoints": [351], "characters": "\u015F" },
+  "Ŝ": { "codepoints": [348], "characters": "\u015C" },
+  "ŝ": { "codepoints": [349], "characters": "\u015D" },
+  "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
+  "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
+  "⋩": { "codepoints": [8937], "characters": "\u22E9" },
+  "⨓": { "codepoints": [10771], "characters": "\u2A13" },
+  "≿": { "codepoints": [8831], "characters": "\u227F" },
+  "С": { "codepoints": [1057], "characters": "\u0421" },
+  "с": { "codepoints": [1089], "characters": "\u0441" },
+  "⊡": { "codepoints": [8865], "characters": "\u22A1" },
+  "⋅": { "codepoints": [8901], "characters": "\u22C5" },
+  "⩦": { "codepoints": [10854], "characters": "\u2A66" },
+  "⤥": { "codepoints": [10533], "characters": "\u2925" },
+  "↘": { "codepoints": [8600], "characters": "\u2198" },
+  "⇘": { "codepoints": [8664], "characters": "\u21D8" },
+  "↘": { "codepoints": [8600], "characters": "\u2198" },
+  "§": { "codepoints": [167], "characters": "\u00A7" },
+  "&sect": { "codepoints": [167], "characters": "\u00A7" },
+  ";": { "codepoints": [59], "characters": "\u003B" },
+  "⤩": { "codepoints": [10537], "characters": "\u2929" },
+  "∖": { "codepoints": [8726], "characters": "\u2216" },
+  "∖": { "codepoints": [8726], "characters": "\u2216" },
+  "✶": { "codepoints": [10038], "characters": "\u2736" },
+  "𝔖": { "codepoints": [120086], "characters": "\uD835\uDD16" },
+  "𝔰": { "codepoints": [120112], "characters": "\uD835\uDD30" },
+  "⌢": { "codepoints": [8994], "characters": "\u2322" },
+  "♯": { "codepoints": [9839], "characters": "\u266F" },
+  "Щ": { "codepoints": [1065], "characters": "\u0429" },
+  "щ": { "codepoints": [1097], "characters": "\u0449" },
+  "Ш": { "codepoints": [1064], "characters": "\u0428" },
+  "ш": { "codepoints": [1096], "characters": "\u0448" },
+  "↓": { "codepoints": [8595], "characters": "\u2193" },
+  "←": { "codepoints": [8592], "characters": "\u2190" },
+  "∣": { "codepoints": [8739], "characters": "\u2223" },
+  "∥": { "codepoints": [8741], "characters": "\u2225" },
+  "→": { "codepoints": [8594], "characters": "\u2192" },
+  "↑": { "codepoints": [8593], "characters": "\u2191" },
+  "­": { "codepoints": [173], "characters": "\u00AD" },
+  "&shy": { "codepoints": [173], "characters": "\u00AD" },
+  "Σ": { "codepoints": [931], "characters": "\u03A3" },
+  "σ": { "codepoints": [963], "characters": "\u03C3" },
+  "ς": { "codepoints": [962], "characters": "\u03C2" },
+  "ς": { "codepoints": [962], "characters": "\u03C2" },
+  "∼": { "codepoints": [8764], "characters": "\u223C" },
+  "⩪": { "codepoints": [10858], "characters": "\u2A6A" },
+  "≃": { "codepoints": [8771], "characters": "\u2243" },
+  "≃": { "codepoints": [8771], "characters": "\u2243" },
+  "⪞": { "codepoints": [10910], "characters": "\u2A9E" },
+  "⪠": { "codepoints": [10912], "characters": "\u2AA0" },
+  "⪝": { "codepoints": [10909], "characters": "\u2A9D" },
+  "⪟": { "codepoints": [10911], "characters": "\u2A9F" },
+  "≆": { "codepoints": [8774], "characters": "\u2246" },
+  "⨤": { "codepoints": [10788], "characters": "\u2A24" },
+  "⥲": { "codepoints": [10610], "characters": "\u2972" },
+  "←": { "codepoints": [8592], "characters": "\u2190" },
+  "∘": { "codepoints": [8728], "characters": "\u2218" },
+  "∖": { "codepoints": [8726], "characters": "\u2216" },
+  "⨳": { "codepoints": [10803], "characters": "\u2A33" },
+  "⧤": { "codepoints": [10724], "characters": "\u29E4" },
+  "∣": { "codepoints": [8739], "characters": "\u2223" },
+  "⌣": { "codepoints": [8995], "characters": "\u2323" },
+  "⪪": { "codepoints": [10922], "characters": "\u2AAA" },
+  "⪬": { "codepoints": [10924], "characters": "\u2AAC" },
+  "⪬︀": { "codepoints": [10924, 65024], "characters": "\u2AAC\uFE00" },
+  "Ь": { "codepoints": [1068], "characters": "\u042C" },
+  "ь": { "codepoints": [1100], "characters": "\u044C" },
+  "⌿": { "codepoints": [9023], "characters": "\u233F" },
+  "⧄": { "codepoints": [10692], "characters": "\u29C4" },
+  "/": { "codepoints": [47], "characters": "\u002F" },
+  "𝕊": { "codepoints": [120138], "characters": "\uD835\uDD4A" },
+  "𝕤": { "codepoints": [120164], "characters": "\uD835\uDD64" },
+  "♠": { "codepoints": [9824], "characters": "\u2660" },
+  "♠": { "codepoints": [9824], "characters": "\u2660" },
+  "∥": { "codepoints": [8741], "characters": "\u2225" },
+  "⊓": { "codepoints": [8851], "characters": "\u2293" },
+  "⊓︀": { "codepoints": [8851, 65024], "characters": "\u2293\uFE00" },
+  "⊔": { "codepoints": [8852], "characters": "\u2294" },
+  "⊔︀": { "codepoints": [8852, 65024], "characters": "\u2294\uFE00" },
+  "√": { "codepoints": [8730], "characters": "\u221A" },
+  "⊏": { "codepoints": [8847], "characters": "\u228F" },
+  "⊑": { "codepoints": [8849], "characters": "\u2291" },
+  "⊏": { "codepoints": [8847], "characters": "\u228F" },
+  "⊑": { "codepoints": [8849], "characters": "\u2291" },
+  "⊐": { "codepoints": [8848], "characters": "\u2290" },
+  "⊒": { "codepoints": [8850], "characters": "\u2292" },
+  "⊐": { "codepoints": [8848], "characters": "\u2290" },
+  "⊒": { "codepoints": [8850], "characters": "\u2292" },
+  "□": { "codepoints": [9633], "characters": "\u25A1" },
+  "□": { "codepoints": [9633], "characters": "\u25A1" },
+  "⊓": { "codepoints": [8851], "characters": "\u2293" },
+  "⊏": { "codepoints": [8847], "characters": "\u228F" },
+  "⊑": { "codepoints": [8849], "characters": "\u2291" },
+  "⊐": { "codepoints": [8848], "characters": "\u2290" },
+  "⊒": { "codepoints": [8850], "characters": "\u2292" },
+  "⊔": { "codepoints": [8852], "characters": "\u2294" },
+  "▪": { "codepoints": [9642], "characters": "\u25AA" },
+  "□": { "codepoints": [9633], "characters": "\u25A1" },
+  "▪": { "codepoints": [9642], "characters": "\u25AA" },
+  "→": { "codepoints": [8594], "characters": "\u2192" },
+  "𝒮": { "codepoints": [119982], "characters": "\uD835\uDCAE" },
+  "𝓈": { "codepoints": [120008], "characters": "\uD835\uDCC8" },
+  "∖": { "codepoints": [8726], "characters": "\u2216" },
+  "⌣": { "codepoints": [8995], "characters": "\u2323" },
+  "⋆": { "codepoints": [8902], "characters": "\u22C6" },
+  "⋆": { "codepoints": [8902], "characters": "\u22C6" },
+  "☆": { "codepoints": [9734], "characters": "\u2606" },
+  "★": { "codepoints": [9733], "characters": "\u2605" },
+  "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+  "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+  "¯": { "codepoints": [175], "characters": "\u00AF" },
+  "⊂": { "codepoints": [8834], "characters": "\u2282" },
+  "⋐": { "codepoints": [8912], "characters": "\u22D0" },
+  "⪽": { "codepoints": [10941], "characters": "\u2ABD" },
+  "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
+  "⊆": { "codepoints": [8838], "characters": "\u2286" },
+  "⫃": { "codepoints": [10947], "characters": "\u2AC3" },
+  "⫁": { "codepoints": [10945], "characters": "\u2AC1" },
+  "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
+  "⊊": { "codepoints": [8842], "characters": "\u228A" },
+  "⪿": { "codepoints": [10943], "characters": "\u2ABF" },
+  "⥹": { "codepoints": [10617], "characters": "\u2979" },
+  "⊂": { "codepoints": [8834], "characters": "\u2282" },
+  "⋐": { "codepoints": [8912], "characters": "\u22D0" },
+  "⊆": { "codepoints": [8838], "characters": "\u2286" },
+  "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
+  "⊆": { "codepoints": [8838], "characters": "\u2286" },
+  "⊊": { "codepoints": [8842], "characters": "\u228A" },
+  "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
+  "⫇": { "codepoints": [10951], "characters": "\u2AC7" },
+  "⫕": { "codepoints": [10965], "characters": "\u2AD5" },
+  "⫓": { "codepoints": [10963], "characters": "\u2AD3" },
+  "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
+  "≻": { "codepoints": [8827], "characters": "\u227B" },
+  "≽": { "codepoints": [8829], "characters": "\u227D" },
+  "≻": { "codepoints": [8827], "characters": "\u227B" },
+  "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+  "≽": { "codepoints": [8829], "characters": "\u227D" },
+  "≿": { "codepoints": [8831], "characters": "\u227F" },
+  "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+  "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
+  "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
+  "⋩": { "codepoints": [8937], "characters": "\u22E9" },
+  "≿": { "codepoints": [8831], "characters": "\u227F" },
+  "∋": { "codepoints": [8715], "characters": "\u220B" },
+  "∑": { "codepoints": [8721], "characters": "\u2211" },
+  "∑": { "codepoints": [8721], "characters": "\u2211" },
+  "♪": { "codepoints": [9834], "characters": "\u266A" },
+  "¹": { "codepoints": [185], "characters": "\u00B9" },
+  "&sup1": { "codepoints": [185], "characters": "\u00B9" },
+  "²": { "codepoints": [178], "characters": "\u00B2" },
+  "&sup2": { "codepoints": [178], "characters": "\u00B2" },
+  "³": { "codepoints": [179], "characters": "\u00B3" },
+  "&sup3": { "codepoints": [179], "characters": "\u00B3" },
+  "⊃": { "codepoints": [8835], "characters": "\u2283" },
+  "⋑": { "codepoints": [8913], "characters": "\u22D1" },
+  "⪾": { "codepoints": [10942], "characters": "\u2ABE" },
+  "⫘": { "codepoints": [10968], "characters": "\u2AD8" },
+  "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
+  "⊇": { "codepoints": [8839], "characters": "\u2287" },
+  "⫄": { "codepoints": [10948], "characters": "\u2AC4" },
+  "⊃": { "codepoints": [8835], "characters": "\u2283" },
+  "⊇": { "codepoints": [8839], "characters": "\u2287" },
+  "⟉": { "codepoints": [10185], "characters": "\u27C9" },
+  "⫗": { "codepoints": [10967], "characters": "\u2AD7" },
+  "⥻": { "codepoints": [10619], "characters": "\u297B" },
+  "⫂": { "codepoints": [10946], "characters": "\u2AC2" },
+  "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
+  "⊋": { "codepoints": [8843], "characters": "\u228B" },
+  "⫀": { "codepoints": [10944], "characters": "\u2AC0" },
+  "⊃": { "codepoints": [8835], "characters": "\u2283" },
+  "⋑": { "codepoints": [8913], "characters": "\u22D1" },
+  "⊇": { "codepoints": [8839], "characters": "\u2287" },
+  "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
+  "⊋": { "codepoints": [8843], "characters": "\u228B" },
+  "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
+  "⫈": { "codepoints": [10952], "characters": "\u2AC8" },
+  "⫔": { "codepoints": [10964], "characters": "\u2AD4" },
+  "⫖": { "codepoints": [10966], "characters": "\u2AD6" },
+  "⤦": { "codepoints": [10534], "characters": "\u2926" },
+  "↙": { "codepoints": [8601], "characters": "\u2199" },
+  "⇙": { "codepoints": [8665], "characters": "\u21D9" },
+  "↙": { "codepoints": [8601], "characters": "\u2199" },
+  "⤪": { "codepoints": [10538], "characters": "\u292A" },
+  "ß": { "codepoints": [223], "characters": "\u00DF" },
+  "&szlig": { "codepoints": [223], "characters": "\u00DF" },
+  "	": { "codepoints": [9], "characters": "\u0009" },
+  "⌖": { "codepoints": [8982], "characters": "\u2316" },
+  "Τ": { "codepoints": [932], "characters": "\u03A4" },
+  "τ": { "codepoints": [964], "characters": "\u03C4" },
+  "⎴": { "codepoints": [9140], "characters": "\u23B4" },
+  "Ť": { "codepoints": [356], "characters": "\u0164" },
+  "ť": { "codepoints": [357], "characters": "\u0165" },
+  "Ţ": { "codepoints": [354], "characters": "\u0162" },
+  "ţ": { "codepoints": [355], "characters": "\u0163" },
+  "Т": { "codepoints": [1058], "characters": "\u0422" },
+  "т": { "codepoints": [1090], "characters": "\u0442" },
+  "⃛": { "codepoints": [8411], "characters": "\u20DB" },
+  "⌕": { "codepoints": [8981], "characters": "\u2315" },
+  "𝔗": { "codepoints": [120087], "characters": "\uD835\uDD17" },
+  "𝔱": { "codepoints": [120113], "characters": "\uD835\uDD31" },
+  "∴": { "codepoints": [8756], "characters": "\u2234" },
+  "∴": { "codepoints": [8756], "characters": "\u2234" },
+  "∴": { "codepoints": [8756], "characters": "\u2234" },
+  "Θ": { "codepoints": [920], "characters": "\u0398" },
+  "θ": { "codepoints": [952], "characters": "\u03B8" },
+  "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+  "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "∼": { "codepoints": [8764], "characters": "\u223C" },
+  "  ": { "codepoints": [8287, 8202], "characters": "\u205F\u200A" },
+  " ": { "codepoints": [8201], "characters": "\u2009" },
+  " ": { "codepoints": [8201], "characters": "\u2009" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "∼": { "codepoints": [8764], "characters": "\u223C" },
+  "Þ": { "codepoints": [222], "characters": "\u00DE" },
+  "&THORN": { "codepoints": [222], "characters": "\u00DE" },
+  "þ": { "codepoints": [254], "characters": "\u00FE" },
+  "&thorn": { "codepoints": [254], "characters": "\u00FE" },
+  "˜": { "codepoints": [732], "characters": "\u02DC" },
+  "∼": { "codepoints": [8764], "characters": "\u223C" },
+  "≃": { "codepoints": [8771], "characters": "\u2243" },
+  "≅": { "codepoints": [8773], "characters": "\u2245" },
+  "≈": { "codepoints": [8776], "characters": "\u2248" },
+  "⨱": { "codepoints": [10801], "characters": "\u2A31" },
+  "⊠": { "codepoints": [8864], "characters": "\u22A0" },
+  "×": { "codepoints": [215], "characters": "\u00D7" },
+  "&times": { "codepoints": [215], "characters": "\u00D7" },
+  "⨰": { "codepoints": [10800], "characters": "\u2A30" },
+  "∭": { "codepoints": [8749], "characters": "\u222D" },
+  "⤨": { "codepoints": [10536], "characters": "\u2928" },
+  "⌶": { "codepoints": [9014], "characters": "\u2336" },
+  "⫱": { "codepoints": [10993], "characters": "\u2AF1" },
+  "⊤": { "codepoints": [8868], "characters": "\u22A4" },
+  "𝕋": { "codepoints": [120139], "characters": "\uD835\uDD4B" },
+  "𝕥": { "codepoints": [120165], "characters": "\uD835\uDD65" },
+  "⫚": { "codepoints": [10970], "characters": "\u2ADA" },
+  "⤩": { "codepoints": [10537], "characters": "\u2929" },
+  "‴": { "codepoints": [8244], "characters": "\u2034" },
+  "™": { "codepoints": [8482], "characters": "\u2122" },
+  "™": { "codepoints": [8482], "characters": "\u2122" },
+  "▵": { "codepoints": [9653], "characters": "\u25B5" },
+  "▿": { "codepoints": [9663], "characters": "\u25BF" },
+  "◃": { "codepoints": [9667], "characters": "\u25C3" },
+  "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+  "≜": { "codepoints": [8796], "characters": "\u225C" },
+  "▹": { "codepoints": [9657], "characters": "\u25B9" },
+  "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+  "◬": { "codepoints": [9708], "characters": "\u25EC" },
+  "≜": { "codepoints": [8796], "characters": "\u225C" },
+  "⨺": { "codepoints": [10810], "characters": "\u2A3A" },
+  "⃛": { "codepoints": [8411], "characters": "\u20DB" },
+  "⨹": { "codepoints": [10809], "characters": "\u2A39" },
+  "⧍": { "codepoints": [10701], "characters": "\u29CD" },
+  "⨻": { "codepoints": [10811], "characters": "\u2A3B" },
+  "⏢": { "codepoints": [9186], "characters": "\u23E2" },
+  "𝒯": { "codepoints": [119983], "characters": "\uD835\uDCAF" },
+  "𝓉": { "codepoints": [120009], "characters": "\uD835\uDCC9" },
+  "Ц": { "codepoints": [1062], "characters": "\u0426" },
+  "ц": { "codepoints": [1094], "characters": "\u0446" },
+  "Ћ": { "codepoints": [1035], "characters": "\u040B" },
+  "ћ": { "codepoints": [1115], "characters": "\u045B" },
+  "Ŧ": { "codepoints": [358], "characters": "\u0166" },
+  "ŧ": { "codepoints": [359], "characters": "\u0167" },
+  "≬": { "codepoints": [8812], "characters": "\u226C" },
+  "↞": { "codepoints": [8606], "characters": "\u219E" },
+  "↠": { "codepoints": [8608], "characters": "\u21A0" },
+  "Ú": { "codepoints": [218], "characters": "\u00DA" },
+  "&Uacute": { "codepoints": [218], "characters": "\u00DA" },
+  "ú": { "codepoints": [250], "characters": "\u00FA" },
+  "&uacute": { "codepoints": [250], "characters": "\u00FA" },
+  "↑": { "codepoints": [8593], "characters": "\u2191" },
+  "↟": { "codepoints": [8607], "characters": "\u219F" },
+  "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+  "⥉": { "codepoints": [10569], "characters": "\u2949" },
+  "Ў": { "codepoints": [1038], "characters": "\u040E" },
+  "ў": { "codepoints": [1118], "characters": "\u045E" },
+  "Ŭ": { "codepoints": [364], "characters": "\u016C" },
+  "ŭ": { "codepoints": [365], "characters": "\u016D" },
+  "Û": { "codepoints": [219], "characters": "\u00DB" },
+  "&Ucirc": { "codepoints": [219], "characters": "\u00DB" },
+  "û": { "codepoints": [251], "characters": "\u00FB" },
+  "&ucirc": { "codepoints": [251], "characters": "\u00FB" },
+  "У": { "codepoints": [1059], "characters": "\u0423" },
+  "у": { "codepoints": [1091], "characters": "\u0443" },
+  "⇅": { "codepoints": [8645], "characters": "\u21C5" },
+  "Ű": { "codepoints": [368], "characters": "\u0170" },
+  "ű": { "codepoints": [369], "characters": "\u0171" },
+  "⥮": { "codepoints": [10606], "characters": "\u296E" },
+  "⥾": { "codepoints": [10622], "characters": "\u297E" },
+  "𝔘": { "codepoints": [120088], "characters": "\uD835\uDD18" },
+  "𝔲": { "codepoints": [120114], "characters": "\uD835\uDD32" },
+  "Ù": { "codepoints": [217], "characters": "\u00D9" },
+  "&Ugrave": { "codepoints": [217], "characters": "\u00D9" },
+  "ù": { "codepoints": [249], "characters": "\u00F9" },
+  "&ugrave": { "codepoints": [249], "characters": "\u00F9" },
+  "⥣": { "codepoints": [10595], "characters": "\u2963" },
+  "↿": { "codepoints": [8639], "characters": "\u21BF" },
+  "↾": { "codepoints": [8638], "characters": "\u21BE" },
+  "▀": { "codepoints": [9600], "characters": "\u2580" },
+  "⌜": { "codepoints": [8988], "characters": "\u231C" },
+  "⌜": { "codepoints": [8988], "characters": "\u231C" },
+  "⌏": { "codepoints": [8975], "characters": "\u230F" },
+  "◸": { "codepoints": [9720], "characters": "\u25F8" },
+  "Ū": { "codepoints": [362], "characters": "\u016A" },
+  "ū": { "codepoints": [363], "characters": "\u016B" },
+  "¨": { "codepoints": [168], "characters": "\u00A8" },
+  "&uml": { "codepoints": [168], "characters": "\u00A8" },
+  "_": { "codepoints": [95], "characters": "\u005F" },
+  "⏟": { "codepoints": [9183], "characters": "\u23DF" },
+  "⎵": { "codepoints": [9141], "characters": "\u23B5" },
+  "⏝": { "codepoints": [9181], "characters": "\u23DD" },
+  "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+  "⊎": { "codepoints": [8846], "characters": "\u228E" },
+  "Ų": { "codepoints": [370], "characters": "\u0172" },
+  "ų": { "codepoints": [371], "characters": "\u0173" },
+  "𝕌": { "codepoints": [120140], "characters": "\uD835\uDD4C" },
+  "𝕦": { "codepoints": [120166], "characters": "\uD835\uDD66" },
+  "⤒": { "codepoints": [10514], "characters": "\u2912" },
+  "↑": { "codepoints": [8593], "characters": "\u2191" },
+  "↑": { "codepoints": [8593], "characters": "\u2191" },
+  "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+  "⇅": { "codepoints": [8645], "characters": "\u21C5" },
+  "↕": { "codepoints": [8597], "characters": "\u2195" },
+  "↕": { "codepoints": [8597], "characters": "\u2195" },
+  "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+  "⥮": { "codepoints": [10606], "characters": "\u296E" },
+  "↿": { "codepoints": [8639], "characters": "\u21BF" },
+  "↾": { "codepoints": [8638], "characters": "\u21BE" },
+  "⊎": { "codepoints": [8846], "characters": "\u228E" },
+  "↖": { "codepoints": [8598], "characters": "\u2196" },
+  "↗": { "codepoints": [8599], "characters": "\u2197" },
+  "υ": { "codepoints": [965], "characters": "\u03C5" },
+  "ϒ": { "codepoints": [978], "characters": "\u03D2" },
+  "ϒ": { "codepoints": [978], "characters": "\u03D2" },
+  "Υ": { "codepoints": [933], "characters": "\u03A5" },
+  "υ": { "codepoints": [965], "characters": "\u03C5" },
+  "↥": { "codepoints": [8613], "characters": "\u21A5" },
+  "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+  "⇈": { "codepoints": [8648], "characters": "\u21C8" },
+  "⌝": { "codepoints": [8989], "characters": "\u231D" },
+  "⌝": { "codepoints": [8989], "characters": "\u231D" },
+  "⌎": { "codepoints": [8974], "characters": "\u230E" },
+  "Ů": { "codepoints": [366], "characters": "\u016E" },
+  "ů": { "codepoints": [367], "characters": "\u016F" },
+  "◹": { "codepoints": [9721], "characters": "\u25F9" },
+  "𝒰": { "codepoints": [119984], "characters": "\uD835\uDCB0" },
+  "𝓊": { "codepoints": [120010], "characters": "\uD835\uDCCA" },
+  "⋰": { "codepoints": [8944], "characters": "\u22F0" },
+  "Ũ": { "codepoints": [360], "characters": "\u0168" },
+  "ũ": { "codepoints": [361], "characters": "\u0169" },
+  "▵": { "codepoints": [9653], "characters": "\u25B5" },
+  "▴": { "codepoints": [9652], "characters": "\u25B4" },
+  "⇈": { "codepoints": [8648], "characters": "\u21C8" },
+  "Ü": { "codepoints": [220], "characters": "\u00DC" },
+  "&Uuml": { "codepoints": [220], "characters": "\u00DC" },
+  "ü": { "codepoints": [252], "characters": "\u00FC" },
+  "&uuml": { "codepoints": [252], "characters": "\u00FC" },
+  "⦧": { "codepoints": [10663], "characters": "\u29A7" },
+  "⦜": { "codepoints": [10652], "characters": "\u299C" },
+  "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+  "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
+  "∅": { "codepoints": [8709], "characters": "\u2205" },
+  "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+  "ϖ": { "codepoints": [982], "characters": "\u03D6" },
+  "∝": { "codepoints": [8733], "characters": "\u221D" },
+  "↕": { "codepoints": [8597], "characters": "\u2195" },
+  "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+  "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
+  "ς": { "codepoints": [962], "characters": "\u03C2" },
+  "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
+  "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
+  "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
+  "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
+  "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+  "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+  "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+  "⫨": { "codepoints": [10984], "characters": "\u2AE8" },
+  "⫫": { "codepoints": [10987], "characters": "\u2AEB" },
+  "⫩": { "codepoints": [10985], "characters": "\u2AE9" },
+  "В": { "codepoints": [1042], "characters": "\u0412" },
+  "в": { "codepoints": [1074], "characters": "\u0432" },
+  "⊢": { "codepoints": [8866], "characters": "\u22A2" },
+  "⊨": { "codepoints": [8872], "characters": "\u22A8" },
+  "⊩": { "codepoints": [8873], "characters": "\u22A9" },
+  "⊫": { "codepoints": [8875], "characters": "\u22AB" },
+  "⫦": { "codepoints": [10982], "characters": "\u2AE6" },
+  "⊻": { "codepoints": [8891], "characters": "\u22BB" },
+  "∨": { "codepoints": [8744], "characters": "\u2228" },
+  "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+  "≚": { "codepoints": [8794], "characters": "\u225A" },
+  "⋮": { "codepoints": [8942], "characters": "\u22EE" },
+  "|": { "codepoints": [124], "characters": "\u007C" },
+  "‖": { "codepoints": [8214], "characters": "\u2016" },
+  "|": { "codepoints": [124], "characters": "\u007C" },
+  "‖": { "codepoints": [8214], "characters": "\u2016" },
+  "∣": { "codepoints": [8739], "characters": "\u2223" },
+  "|": { "codepoints": [124], "characters": "\u007C" },
+  "❘": { "codepoints": [10072], "characters": "\u2758" },
+  "≀": { "codepoints": [8768], "characters": "\u2240" },
+  " ": { "codepoints": [8202], "characters": "\u200A" },
+  "𝔙": { "codepoints": [120089], "characters": "\uD835\uDD19" },
+  "𝔳": { "codepoints": [120115], "characters": "\uD835\uDD33" },
+  "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+  "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+  "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+  "𝕍": { "codepoints": [120141], "characters": "\uD835\uDD4D" },
+  "𝕧": { "codepoints": [120167], "characters": "\uD835\uDD67" },
+  "∝": { "codepoints": [8733], "characters": "\u221D" },
+  "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+  "𝒱": { "codepoints": [119985], "characters": "\uD835\uDCB1" },
+  "𝓋": { "codepoints": [120011], "characters": "\uD835\uDCCB" },
+  "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
+  "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
+  "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
+  "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
+  "⊪": { "codepoints": [8874], "characters": "\u22AA" },
+  "⦚": { "codepoints": [10650], "characters": "\u299A" },
+  "Ŵ": { "codepoints": [372], "characters": "\u0174" },
+  "ŵ": { "codepoints": [373], "characters": "\u0175" },
+  "⩟": { "codepoints": [10847], "characters": "\u2A5F" },
+  "∧": { "codepoints": [8743], "characters": "\u2227" },
+  "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+  "≙": { "codepoints": [8793], "characters": "\u2259" },
+  "℘": { "codepoints": [8472], "characters": "\u2118" },
+  "𝔚": { "codepoints": [120090], "characters": "\uD835\uDD1A" },
+  "𝔴": { "codepoints": [120116], "characters": "\uD835\uDD34" },
+  "𝕎": { "codepoints": [120142], "characters": "\uD835\uDD4E" },
+  "𝕨": { "codepoints": [120168], "characters": "\uD835\uDD68" },
+  "℘": { "codepoints": [8472], "characters": "\u2118" },
+  "≀": { "codepoints": [8768], "characters": "\u2240" },
+  "≀": { "codepoints": [8768], "characters": "\u2240" },
+  "𝒲": { "codepoints": [119986], "characters": "\uD835\uDCB2" },
+  "𝓌": { "codepoints": [120012], "characters": "\uD835\uDCCC" },
+  "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+  "◯": { "codepoints": [9711], "characters": "\u25EF" },
+  "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+  "▽": { "codepoints": [9661], "characters": "\u25BD" },
+  "𝔛": { "codepoints": [120091], "characters": "\uD835\uDD1B" },
+  "𝔵": { "codepoints": [120117], "characters": "\uD835\uDD35" },
+  "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+  "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+  "Ξ": { "codepoints": [926], "characters": "\u039E" },
+  "ξ": { "codepoints": [958], "characters": "\u03BE" },
+  "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+  "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+  "⟼": { "codepoints": [10236], "characters": "\u27FC" },
+  "⋻": { "codepoints": [8955], "characters": "\u22FB" },
+  "⨀": { "codepoints": [10752], "characters": "\u2A00" },
+  "𝕏": { "codepoints": [120143], "characters": "\uD835\uDD4F" },
+  "𝕩": { "codepoints": [120169], "characters": "\uD835\uDD69" },
+  "⨁": { "codepoints": [10753], "characters": "\u2A01" },
+  "⨂": { "codepoints": [10754], "characters": "\u2A02" },
+  "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+  "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+  "𝒳": { "codepoints": [119987], "characters": "\uD835\uDCB3" },
+  "𝓍": { "codepoints": [120013], "characters": "\uD835\uDCCD" },
+  "⨆": { "codepoints": [10758], "characters": "\u2A06" },
+  "⨄": { "codepoints": [10756], "characters": "\u2A04" },
+  "△": { "codepoints": [9651], "characters": "\u25B3" },
+  "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+  "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+  "Ý": { "codepoints": [221], "characters": "\u00DD" },
+  "&Yacute": { "codepoints": [221], "characters": "\u00DD" },
+  "ý": { "codepoints": [253], "characters": "\u00FD" },
+  "&yacute": { "codepoints": [253], "characters": "\u00FD" },
+  "Я": { "codepoints": [1071], "characters": "\u042F" },
+  "я": { "codepoints": [1103], "characters": "\u044F" },
+  "Ŷ": { "codepoints": [374], "characters": "\u0176" },
+  "ŷ": { "codepoints": [375], "characters": "\u0177" },
+  "Ы": { "codepoints": [1067], "characters": "\u042B" },
+  "ы": { "codepoints": [1099], "characters": "\u044B" },
+  "¥": { "codepoints": [165], "characters": "\u00A5" },
+  "&yen": { "codepoints": [165], "characters": "\u00A5" },
+  "𝔜": { "codepoints": [120092], "characters": "\uD835\uDD1C" },
+  "𝔶": { "codepoints": [120118], "characters": "\uD835\uDD36" },
+  "Ї": { "codepoints": [1031], "characters": "\u0407" },
+  "ї": { "codepoints": [1111], "characters": "\u0457" },
+  "𝕐": { "codepoints": [120144], "characters": "\uD835\uDD50" },
+  "𝕪": { "codepoints": [120170], "characters": "\uD835\uDD6A" },
+  "𝒴": { "codepoints": [119988], "characters": "\uD835\uDCB4" },
+  "𝓎": { "codepoints": [120014], "characters": "\uD835\uDCCE" },
+  "Ю": { "codepoints": [1070], "characters": "\u042E" },
+  "ю": { "codepoints": [1102], "characters": "\u044E" },
+  "ÿ": { "codepoints": [255], "characters": "\u00FF" },
+  "&yuml": { "codepoints": [255], "characters": "\u00FF" },
+  "Ÿ": { "codepoints": [376], "characters": "\u0178" },
+  "Ź": { "codepoints": [377], "characters": "\u0179" },
+  "ź": { "codepoints": [378], "characters": "\u017A" },
+  "Ž": { "codepoints": [381], "characters": "\u017D" },
+  "ž": { "codepoints": [382], "characters": "\u017E" },
+  "З": { "codepoints": [1047], "characters": "\u0417" },
+  "з": { "codepoints": [1079], "characters": "\u0437" },
+  "Ż": { "codepoints": [379], "characters": "\u017B" },
+  "ż": { "codepoints": [380], "characters": "\u017C" },
+  "ℨ": { "codepoints": [8488], "characters": "\u2128" },
+  "​": { "codepoints": [8203], "characters": "\u200B" },
+  "Ζ": { "codepoints": [918], "characters": "\u0396" },
+  "ζ": { "codepoints": [950], "characters": "\u03B6" },
+  "𝔷": { "codepoints": [120119], "characters": "\uD835\uDD37" },
+  "ℨ": { "codepoints": [8488], "characters": "\u2128" },
+  "Ж": { "codepoints": [1046], "characters": "\u0416" },
+  "ж": { "codepoints": [1078], "characters": "\u0436" },
+  "⇝": { "codepoints": [8669], "characters": "\u21DD" },
+  "𝕫": { "codepoints": [120171], "characters": "\uD835\uDD6B" },
+  "ℤ": { "codepoints": [8484], "characters": "\u2124" },
+  "𝒵": { "codepoints": [119989], "characters": "\uD835\uDCB5" },
+  "𝓏": { "codepoints": [120015], "characters": "\uD835\uDCCF" },
+  "‍": { "codepoints": [8205], "characters": "\u200D" },
+  "‌": { "codepoints": [8204], "characters": "\u200C" }
+}
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/common/form-submission.py b/third_party/WebKit/LayoutTests/imported/wpt/common/form-submission.py
index 78f96fe..4678754 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/common/form-submission.py
+++ b/third_party/WebKit/LayoutTests/imported/wpt/common/form-submission.py
@@ -1,17 +1,10 @@
 def main(request, response):
     if request.headers.get('Content-Type') == 'application/x-www-form-urlencoded':
-        if request.body == 'foo=bara':
-            return 'OK'
-        else:
-            return 'FAIL'
+        result = request.body == 'foo=bara'
     elif request.headers.get('Content-Type') == 'text/plain':
-        if request.body == 'qux=baz\r\n':
-            return 'OK'
-        else:
-            return 'FAIL'
+        result = request.body == 'qux=baz\r\n'
     else:
-        if request.POST.first('foo') == 'bar':
-            return 'OK'
-        else:
-            return 'FAIL'
+        result = request.POST.first('foo') == 'bar'
 
+    return ([("Content-Type", "text/plain")],
+            "OK" if result else "FAIL")
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context-expected.txt
new file mode 100644
index 0000000..782baefd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context-expected.txt
@@ -0,0 +1,5 @@
+This is a testharness.js-based test.
+FAIL Create a document, adopt the node assert_equals: expected "1" but got "def main(request, response):\n    try:\n        count = int(request.server.stash.take(request.GET[\"id\"]))\n    except:\n        count = 0\n    if \"count\" in request.GET:\n        return str(count)\n    request.server.stash.put(request.GET[\"id\"], str(count + 1))\n    return 'body { color: red }'\n"
+FAIL Create a stylesheet in innerHTML document assert_equals: expected "1" but got "def main(request, response):\n    try:\n        count = int(request.server.stash.take(request.GET[\"id\"]))\n    except:\n        count = 0\n    if \"count\" in request.GET:\n        return str(count)\n    request.server.stash.put(request.GET[\"id\"], str(count + 1))\n    return 'body { color: red }'\n"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html
new file mode 100644
index 0000000..127b253
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Documents without browsing contexts should not load stylesheets</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<body>
+<script>
+  function count(id, t) {
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', 'stylesheet.py?count=1&id=' + id);
+    xhr.onload = t.step_func_done(function() {
+      assert_equals(xhr.responseText, "1");
+    });
+    xhr.onerror = t.unreached_func();
+    xhr.send();
+  }
+
+  async_test(function(t) {
+    var id = token();
+    var doc = (new DOMParser()).parseFromString('<link rel="stylesheet" href="stylesheet.py?id=' + id + '"></link>', 'text/html');
+    var link = doc.querySelector('link');
+    document.head.appendChild(link);
+    t.step_timeout(function() { count(id, t) }, 500);
+  }, 'Create a document, adopt the node');
+
+  async_test(function(t) {
+    var id = token();
+    var d = document.createElement('div');
+    document.body.appendChild(d);
+    d.innerHTML = '<link rel="stylesheet" href="stylesheet.py?id=' + id + '"></link>';
+    t.step_timeout(function() { count(id, t) }, 500);
+  }, 'Create a stylesheet in innerHTML document');
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html
index ce35e03..0460846 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html
@@ -7,17 +7,32 @@
 <div id="log"></div>
 <div id="test">
 <script>
-//var t404 = async_test("Should get an error event for a 404 error.")
-//t404.step(function() {
-//  var elt = document.createElement("link");
-//  elt.onerror = t404.step_func(function() {
-//    assert_true(true, "Got error event for 404 error.")
-//    t404.done()
-//  })
-//  elt.rel = "stylesheet";
-//  elt.href = 404 error;
-//  document.getElementsByTagName("head")[0].appendChild(elt);
-//})
+var t404 = async_test("Should get an error event for a 404 error.")
+t404.step(function() {
+  var elt = document.createElement("link");
+  elt.onerror = t404.step_func(function() {
+    assert_true(true, "Got error event for 404 error.")
+    t404.step_timeout(function() { t404.done() }, 0);
+  })
+  elt.onload = t404.unreached_func("load event should not be fired");
+  elt.rel = "stylesheet";
+  elt.href = "nonexistent_stylesheet.css";
+  document.getElementsByTagName("head")[0].appendChild(elt);
+})
+
+var tUnsupported = async_test("Should get an error event for an unsupported URL.")
+tUnsupported.step(function() {
+  var elt = document.createElement("link");
+  elt.onerror = tUnsupported.step_func(function() {
+    assert_true(true, "Got error event for unsupported URL.")
+    tUnsupported.step_timeout(function() { tUnsupported.done() }, 0);
+  })
+  elt.onload = tUnsupported.unreached_func("load event should not be fired");
+  elt.rel = "stylesheet";
+  elt.href = "nonexistent:stylesheet.css";
+  document.getElementsByTagName("head")[0].appendChild(elt);
+})
+
 var tText = async_test("Should get an error event for a text/plain response.")
 tText.step(function() {
   var elt = document.createElement("link");
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/stylesheet.py b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/stylesheet.py
new file mode 100644
index 0000000..a312e9e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/document-metadata/the-link-element/stylesheet.py
@@ -0,0 +1,9 @@
+def main(request, response):
+    try:
+        count = int(request.server.stash.take(request.GET["id"]))
+    except:
+        count = 0
+    if "count" in request.GET:
+        return str(count)
+    request.server.stash.put(request.GET["id"], str(count + 1))
+    return 'body { color: red }'
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html
index 11d33b77..4b7808c9 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html
@@ -79,7 +79,7 @@
     var video = document.createElement('video');
     var t1 = video.addTextTrack('subtitles');
     var t1_cues = t1.cues;
-    t1.mode = 'showing';
+    t1.mode = 'hidden';
     var track = document.createElement('track');
     track['default'] = true;
     video.appendChild(track); // queues a task to "honor user preferences...", media element event task source
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/the-img-element/invalid-src.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/the-img-element/invalid-src.html
new file mode 100644
index 0000000..a4323da
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/embedded-content/the-img-element/invalid-src.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Loading a non-parsing URL as an image should silently fail; triggering appropriate events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<img id=myimg />
+<script>
+async_test(function(t) {
+    var img = document.getElementById("myimg");
+    img.src = "http://also a broken url";
+    var errorevent = false;
+
+    // The errors should be queued in the event loop, so they should only trigger
+    // after this block of code finishes, not during the img.src setter itself
+    img.addEventListener('error', t.step_func(function(){errorevent = true;}));
+    img.addEventListener('loadend', t.step_func_done(function() {
+        assert_true(errorevent, "error event fired");
+    }));
+});
+
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html
index 5f52573..60d591ba 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html
@@ -32,6 +32,18 @@
   },'input setSelectionRange(0,input.value.length+1)');
 
   test(function() {
+    input.setSelectionRange(input.value.length+1,input.value.length+1)
+    assert_equals(input.selectionStart, input.value.length, "Arguments (start) greater than the length of the value of the text field must be treated as pointing at the end of the text field");
+    assert_equals(input.selectionEnd, input.value.length, "Arguments (end) greater than the length of the value of the text field must be treated as pointing at the end of the text field");
+  },'input setSelectionRange(input.value.length+1,input.value.length+1)');
+
+  test(function() {
+    input.setSelectionRange(input.value.length+1,1)
+    assert_equals(input.selectionStart, 1, "If end is less than or equal to start then the start of the selection and the end of the selection must both be placed immediately before the character with offset end");
+    assert_equals(input.selectionEnd, 1, "element.selectionEnd should be 1");
+  },'input setSelectionRange(input.value.length+1,input.value.length+1)');
+
+  test(function() {
     input.setSelectionRange(2,2)
     assert_equals(input.selectionStart, 2, "If end is less than or equal to start then the start of the selection and the end of the selection must both be placed immediately before the character with offset end");
     assert_equals(input.selectionEnd, 2, "If end is less than or equal to start then the start of the selection and the end of the selection must both be placed immediately before the character with offset end");
@@ -74,6 +86,18 @@
   },'input direction of setSelectionRange(0,1)');
 
   test(function() {
+    input.setSelectionRange(1,-1);
+    assert_equals(input.selectionStart, 1, "element.selectionStart should be 1");
+    assert_equals(input.selectionEnd, input.value.length, "ECMAScript conversion to unsigned long");
+  },'input setSelectionRange(1,-1)');
+
+  test(function() {
+    input.setSelectionRange(-1,1);
+    assert_equals(input.selectionStart, 1, "ECMAScript conversion to unsigned long + if end is less than or equal to start then the start of the selection and the end of the selection must both be placed immediately before the character with offset end");
+    assert_equals(input.selectionEnd, 1, "element.selectionEnd should be 1");
+  },'input setSelectionRange(-1,1)');
+
+  test(function() {
     input.setSelectionRange("string",1);
     assert_equals(input.selectionStart, 0, "element.selectionStart should be 0");
     assert_equals(input.selectionEnd, 1, "element.selectionEnd should be 1");
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html
new file mode 100644
index 0000000..704e8ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Script is not executed after script thread is shutdown</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe id="testiframe" src="script-not-executed-after-shutdown-child.html"></iframe>
+<script>
+async_test(function(t) {
+  window.script_executed = t.unreached_func("script executed in removed iframe");
+  let iframe = document.getElementById("testiframe");
+  iframe.onload = function() {
+    iframe.parentNode.removeChild(iframe);
+  };
+  setTimeout(function() {
+    t.done();
+  }, 5000);
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.js b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.js
new file mode 100644
index 0000000..ccdf14c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.js
@@ -0,0 +1 @@
+script_executed();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm b/third_party/WebKit/LayoutTests/imported/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm
index 4494f7f3..6d19229 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-support.htm
@@ -35,8 +35,7 @@
   setup(function() {}, {explicit_done: true});
 
   var xhr = new XMLHttpRequest();
-  //xhr.open("GET", "entities.json");
-  xhr.open("GET", "https://w3c.github.io/html/entities.json");
+  xhr.open("GET", "/common/entities.json");
   xhr.onload = function () {
     // Note: for proper XML parsing of the Doctype, Edge requires a non-empty string for url part
     var entitiesJSON = JSON.parse(xhr.response);
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/README.md b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/README.md
index 07004cf..0cc01909 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/README.md
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/README.md
@@ -1,6 +1,6 @@
 Directory for Pointer Events Tests
 
-Latest Editor's Draft: https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html
+Latest Editor's Draft: https://w3c.github.io/pointerevents/
 
 Latest W3C Technical Report: http://www.w3.org/TR/pointerevents/
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_button_attribute_mouse-manual.html b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_button_attribute_mouse-manual.html
deleted file mode 100644
index a31e53d..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_button_attribute_mouse-manual.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
-    <head>
-        <title>Button and buttons attribute test for mouse</title>
-        <meta name="viewport" content="width=device-width">
-        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
-        <script src="/resources/testharness.js"></script>
-        <script src="/resources/testharnessreport.js"></script>
-        <script type="text/javascript" src="pointerevent_support.js"></script>
-    </head>
-    <body onload="run()">
-        <h1>Button attribute test for mouse</h1>
-        <h2>This test is for mouse only</h2>
-        <h4>
-            Test Description: This test checks if button attribute for mouse handled properly.
-            <p>Put your mouse over the black rectangle</p>
-        </h4>
-        <p>
-        <div id="target0" style="background:black"></div>
-        <script>
-            var eventTested = false;
-            var detected_pointertypes = {};
-
-            setup({ explicit_done: true });
-            add_completion_callback(showPointerTypes);
-
-            function run() {
-                var target0 = document.getElementById("target0");
-
-                // If pointerType is "mouse" and no mouse button is depressed, then the button attribute of the pointermove event must be -1 and the buttons attribute must be 0.
-                // TA: 5.8
-                on_event(target0, "pointerover", function (event) {
-                    detected_pointertypes[event.pointerType] = true;
-                    if(event.pointerType != "mouse") {
-                        alert("Use mouse for this test please!");
-                        return;
-                    }
-                    if (eventTested == false) {
-                        test(function() {
-                            assert_true(event.button == -1, "If mouse buttons are released button attribute is -1")
-                        }, "If mouse buttons are released button attribute is -1");
-                        test(function() {
-                            assert_true(event.buttons == 0, "If mouse buttons are released buttons attribute is 0")
-                        }, "If mouse buttons are released buttons attribute is 0");
-                        eventTested = true;
-                        done();
-                    }
-                });
-            }
-        </script>
-        <h1>Pointer Events button attribute test for mouse test</h1>
-        <div id="complete-notice">
-            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
-        </div>
-        <div id="log"></div>
-    </body>
-</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_properties_mouse-manual.html b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_properties_mouse-manual.html
deleted file mode 100644
index adea65b2..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_properties_mouse-manual.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!doctype html>
-<html>
-    <head>
-        <title>Pointer Events properties tests</title>
-        <meta name="viewport" content="width=device-width">
-        <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
-        <script src="/resources/testharness.js"></script>
-        <script src="/resources/testharnessreport.js"></script>
-        <!-- Additional helper script for common checks across event types -->
-        <script type="text/javascript" src="pointerevent_support.js"></script>
-        <script>
-            var detected_pointertypes = {};
-            var detected_eventTypes = {};
-            var test_pointerEvent = async_test("pointerdown event received");
-            // showPointerTypes is defined in pointerevent_support.js
-            // Requirements: the callback function will reference the test_pointerEvent object and
-            // will fail unless the async_test is created with the var name "test_pointerEvent".
-            add_completion_callback(showPointerTypes);
-
-            function run() {
-                var square1 = document.getElementById("square1");
-                var rectSquare1 = square1.getBoundingClientRect();
-                var pointerover_event;
-
-                var eventList = ['pointerenter', 'pointerover', 'pointermove', 'pointerdown', 'pointerup', 'pointerout', 'pointerleave'];
-                eventList.forEach(function(eventName) {
-                    on_event(square1, eventName, function (event) {
-                        if (detected_eventTypes[event.type])
-                            return;
-                        detected_pointertypes[event.pointerType] = true;
-                        test(function () {
-                            assert_equals(event.pointerType, 'mouse', 'pointerType should be mouse');
-                        }, event.type + ".pointerType attribute is correct.");
-
-                        if (event.type != 'pointerout' && event.type != 'pointerleave' ) {
-                            test(function () {
-                                assert_true(event.clientX >= rectSquare1.left && event.clientX < rectSquare1.right, "ClientX should be in the boundaries of the black box");
-                            }, event.type + ".clientX attribute is correct.");
-                            test(function () {
-                              assert_true(event.clientY >= rectSquare1.top && event.clientY < rectSquare1.bottom, "ClientY should be in the boundaries of the black box");
-                            }, event.type + ".clientY attribute is correct.");
-                        } else {
-                            test(function () {
-                                assert_true(event.clientX < rectSquare1.left || event.clientX > rectSquare1.right - 1 || event.clientY < rectSquare1.top || event.clientY > rectSquare1.bottom - 1, "ClientX/Y should be out of the boundaries of the black box");
-                            }, event.type + "'s ClientX and ClientY attributes are correct.");
-                        }
-
-                        test(function () {
-                            assert_equals(event.isPrimary, true, "isPrimary should be true");
-                        }, event.type + ".isPrimary attribute is correct.");
-
-                        check_PointerEvent(event);
-                        detected_eventTypes[event.type] = true;
-                        if (Object.keys(detected_eventTypes).length == eventList.length)
-                            test_pointerEvent.done();
-                    });
-                });
-            }
-        </script>
-    </head>
-    <body onload="run()">
-        <h1>Pointer Events pointerdown tests</h1>
-        <h4>
-            Test Description: This test checks the properties of mouse pointer events. Move your mouse over the black square and click on it. Then move it off the black square.
-        </h4>
-        Test passes if the proper behavior of the events is observed.
-        <div id="square1" class="square"></div>
-        <div class="spacer"></div>
-        <div id="complete-notice">
-            <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
-            <p>Refresh the page to run the tests again with a different pointer type.</p>
-        </div>
-        <div id="log"></div>
-    </body>
-</html>
-
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_styles.css b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_styles.css
index 70b037a..d2acf94 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_styles.css
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_styles.css
@@ -31,6 +31,17 @@
 overflow-x: auto;
 }
 
+.touchActionNone {
+touch-action: none;
+}
+
+#innerframe {
+width: 90%;
+margin: 10px;
+margin-left: 10%;
+height: 200px;
+}
+
 .scroller {
 width: 700px;
 height: 430px;
@@ -66,6 +77,10 @@
 font-weight: bold;
 }
 
+#event-log {
+font-weight: bold;
+}
+
 #listener {
 background: orange;
 border: 1px solid orange;
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_support.js b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_support.js
index b3fb661..6f39970 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_support.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_support.js
@@ -105,6 +105,14 @@
     complete_notice.style.display = "block";
 }
 
+function showLoggedEvents() {
+    var event_log_elem = document.getElementById("event-log");
+    event_log_elem.innerHTML = event_log.length ? event_log.join(", ") : "(none)";
+
+    var complete_notice = document.getElementById("complete-notice");
+    complete_notice.style.display = "block";
+}
+
 function log(msg, el) {
     if (++count > 10){
       count = 0;
@@ -167,4 +175,4 @@
     }
     catch(e) {
     }
-}
\ No newline at end of file
+}
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_click.html b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_click.html
new file mode 100644
index 0000000..71b8a082
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_click.html
@@ -0,0 +1,101 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Pointer Event: Suppress compatibility mouse events on click</title>
+    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
+    <link rel="author" title="Google" href="http://www.google.com "/>
+    <meta name="assert" content="When a pointerdown is canceled, a click/tap shouldn't fire any compatibility mouse events."/>
+    <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script type="text/javascript" src="pointerevent_support.js"></script>
+    <script type="text/javascript">
+      var test_pointerEvent = async_test("Suppress compat mouse events on click");
+      add_completion_callback(end_of_test);
+
+      var detected_pointertypes = {};
+      var event_log = [];
+
+      function end_of_test() {
+          showLoggedEvents();
+          showPointerTypes();
+      }
+
+      function end_of_interaction() {
+          test(function () {
+              assert_equals(event_log.join(", "),
+                  "mousedown@target1, mouseup@target1");
+          }, "Event log");
+
+          test_pointerEvent.done(); // complete test
+      }
+
+      function run() {
+          on_event(document.getElementById("done"), "click", end_of_interaction);
+
+          var target_list = ["target0", "target1"];
+          var pointer_event_list = ["pointerdown"];
+          var mouse_event_list = ["mousedown", "mouseup"];
+
+          target_list.forEach(function(targetId) {
+              var target = document.getElementById(targetId);
+
+              pointer_event_list.forEach(function(eventName) {
+                  on_event(target, eventName, function (event) {
+                      detected_pointertypes[event.pointerType] = true;
+                      var label = event.type + "@" + targetId;
+
+                      test(function () {
+                          assert_true(event.isPrimary);
+                      }, "primary pointer " + label);
+
+                      if (label === "pointerdown@target0")
+                          event.preventDefault();
+                  });
+              });
+
+              mouse_event_list.forEach(function(eventName) {
+                  on_event(target, eventName, function (event) {
+                      event_log.push(event.type + "@" + targetId);
+                  });
+              });
+          });
+      }
+    </script>
+    <style>
+      #target0, #target1 {
+        margin: 20px;
+      }
+
+      #done {
+        margin: 20px;
+        border: 2px solid black;
+      }
+    </style>
+  </head>
+  <body onload="run()">
+    <h1>Pointer Event: Suppress compatibility mouse events on click</h1>
+    <h4>
+      When a pointerdown is canceled, a click/tap shouldn't fire any compatibility mouse events.
+    </h4>
+    <ol>
+      <li> Click or tap on Target0.</li>
+      <li> Click or tap on Target1.</li>
+      <li> Click Done.</li>
+    </ol>
+    <div id="target0">
+      Target0
+    </div>
+    <div id="target1">
+      Target1
+    </div>
+    <div id="done">
+      Done
+    </div>
+    <div id="complete-notice">
+      <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
+      <p>The following events were logged: <span id="event-log"></span>.</p>
+    </div>
+    <div id="log"></div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html
new file mode 100644
index 0000000..02bca85
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html
@@ -0,0 +1,114 @@
+<!doctype html>
+<html>
+  <head>
+    <title>Pointer Event: Suppress compatibility mouse events on drag</title>
+    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
+    <link rel="author" title="Google" href="http://www.google.com "/>
+    <meta name="assert" content="When a pointerdown is canceled, a mouse drag shouldn't fire any compatibility mouse events."/>
+    <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script type="text/javascript" src="pointerevent_support.js"></script>
+    <script type="text/javascript">
+      var test_pointerEvent = async_test("Suppress compat mouse events on drag");
+      add_completion_callback(end_of_test);
+
+      var detected_pointertypes = {};
+      var event_log = [];
+
+      function end_of_test() {
+          showLoggedEvents();
+          showPointerTypes();
+      }
+
+      var include_next_mousemove = false;
+
+      // Limits logging/testing of mousemove.
+      function drop_event(event_type) {
+          return (event_type == "mousemove" && !include_next_mousemove);
+      }
+
+      function end_of_interaction() {
+          test(function () {
+              assert_equals(event_log.join(", "),
+                  "mousedown@target1, mousemove@target1, mouseup@target1");
+          }, "Event log");
+
+          test_pointerEvent.done(); // complete test
+      }
+
+      function run() {
+          on_event(document.getElementById("done"), "click", end_of_interaction);
+
+          var target_list = ["target0", "target1"];
+          var pointer_event_list = ["pointerdown"];
+          var mouse_event_list = ["mousedown", "mouseup", "mousemove"];
+
+          target_list.forEach(function(targetId) {
+              var target = document.getElementById(targetId);
+
+              pointer_event_list.forEach(function(eventName) {
+                  on_event(target, eventName, function (event) {
+                      detected_pointertypes[event.pointerType] = true;
+                      var label = event.type + "@" + targetId;
+
+                      test(function () {
+                          assert_true(event.isPrimary);
+                      }, "primary pointer " + label);
+
+                      if (label === "pointerdown@target0")
+                          event.preventDefault();
+                  });
+              });
+
+              mouse_event_list.forEach(function(eventName) {
+                  on_event(target, eventName, function (event) {
+                      if (drop_event(event.type))
+                          return;
+
+                      event_log.push(event.type + "@" + targetId);
+
+                      include_next_mousemove = (event.type == "mousedown");
+                  });
+              });
+          });
+      }
+    </script>
+    <style>
+      #target0, #target1 {
+        margin: 20px;
+        touch-action: none;
+      }
+
+      #done {
+        margin: 20px;
+        border: 2px solid black;
+      }
+    </style>
+  </head>
+  <body onload="run()">
+    <h1>Pointer Event: Suppress compatibility mouse events on drag</h1>
+    <h4>
+      When a pointerdown is canceled, a mouse drag shouldn't fire any compatibility mouse events.
+    </h4>
+    <ol>
+      <li> Drag mouse within Target0 &amp; release.</li>
+      <li> Drag mouse within Target1 &amp; release.</li>
+      <li> Click Done.</li>
+    </ol>
+    <div id="target0">
+      Target0
+    </div>
+    <div id="target1">
+      Target1
+    </div>
+    <div id="done">
+      Done
+    </div>
+    <div id="complete-notice">
+      <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p>
+      <p>The following events were logged: <span id="event-log"></span>.</p>
+    </div>
+    <div id="log"></div>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/resources/pointerevent_pointerId_scope-iframe.html b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/resources/pointerevent_pointerId_scope-iframe.html
new file mode 100644
index 0000000..ad1a57f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/pointerevents/resources/pointerevent_pointerId_scope-iframe.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html>
+    <!--
+Test cases for Pointer Events v1 spec
+This document references Test Assertions (abbrev TA below) written by Cathy Chan
+http://www.w3.org/wiki/PointerEvents/TestAssertions
+-->
+    <head>
+        <title>Pointer Events pointerdown tests</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css">
+        <script>
+            function run() {
+                var target1 = document.getElementById("target1");
+                var pointerover_event;
+                var ponterId = null;
+
+                var eventList = ['pointerenter', 'pointerover', 'pointermove', 'pointerout', 'pointerleave'];
+
+                eventList.forEach(function(eventName) {
+                    target1.addEventListener(eventName, function (event) {
+                        var pass_data = {
+                            'pointerId' : event.pointerId,
+                            'type' : event.type,
+                            'pointerType' : event.pointerType
+                        };
+                        top.postMessage(JSON.stringify(pass_data), "*");
+                    });
+               });
+            }
+        </script>
+    </head>
+    <body onload="run()">
+        <div id="target1" class="touchActionNone">
+        </div>
+    </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/resources/idlharness.js b/third_party/WebKit/LayoutTests/imported/wpt/resources/idlharness.js
index b6a16af..5002ec5 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/resources/idlharness.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/resources/idlharness.js
@@ -307,6 +307,28 @@
     return ret;
 };
 
+function exposed_in(globals) {
+    if ('document' in self) {
+        return globals.indexOf("Window") >= 0;
+    }
+    if ('DedicatedWorkerGlobalScope' in self &&
+        self instanceof DedicatedWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("DedicatedWorker") >= 0;
+    }
+    if ('SharedWorkerGlobalScope' in self &&
+        self instanceof SharedWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("SharedWorker") >= 0;
+    }
+    if ('ServiceWorkerGlobalScope' in self &&
+        self instanceof ServiceWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("ServiceWorker") >= 0;
+    }
+    throw "Unexpected global object";
+}
+
 //@}
 IdlArray.prototype.test = function()
 //@{
@@ -353,6 +375,23 @@
     }
     this["implements"] = {};
 
+    Object.getOwnPropertyNames(this.members).forEach(function(memberName) {
+        var member = this.members[memberName];
+        if (!(member instanceof IdlInterface)) {
+            return;
+        }
+
+        var exposed = member.extAttrs.filter(function(a) { return a.name == "Exposed" });
+        if (exposed.length > 1) {
+            throw "Unexpected Exposed extended attributes on " + memberName + ": " + exposed;
+        }
+
+        var globals = exposed.length === 1
+                    ? exposed[0].rhs.value
+                    : ["Window"];
+        member.exposed = exposed_in(globals);
+    }.bind(this));
+
     // Now run test() on every member, and test_object() for every object.
     for (var name in this.members)
     {
@@ -678,6 +717,13 @@
         return;
     }
 
+    if (!this.exposed) {
+        test(function() {
+            assert_false(this.name in self);
+        }.bind(this), this.name + " interface: existence and properties of interface object");
+        return;
+    }
+
     if (!this.untested)
     {
         // First test things to do with the exception/interface object and
@@ -701,7 +747,6 @@
     test(function()
     {
         // This function tests WebIDL as of 2015-01-13.
-        // TODO: Consider [Exposed].
 
         // "For every interface that is exposed in a given ECMAScript global
         // environment and:
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/resources/testharness.js b/third_party/WebKit/LayoutTests/imported/wpt/resources/testharness.js
index ceb3a4b..91dfab5 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/resources/testharness.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/resources/testharness.js
@@ -471,6 +471,11 @@
             self instanceof ServiceWorkerGlobalScope) {
             return new ServiceWorkerTestEnvironment();
         }
+        if ('WorkerGlobalScope' in self &&
+            self instanceof WorkerGlobalScope) {
+            return new DedicatedWorkerTestEnvironment();
+        }
+
         throw new Error("Unsupported test environment");
     }
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/Document-prototype-currentScript-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/Document-prototype-currentScript-expected.txt
index a100343..adb48a0 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/Document-prototype-currentScript-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/Document-prototype-currentScript-expected.txt
@@ -1,7 +1,7 @@
-CONSOLE ERROR: line 2440: Uncaught Error: assert_equals: expected Element node <script id="outerScriptElement">
+CONSOLE ERROR: line 2445: Uncaught Error: assert_equals: expected Element node <script id="outerScriptElement">
 
 var outerScriptElement ... but got null
-CONSOLE ERROR: line 2440: Uncaught Error: assert_equals: expected Element node <script id="outerScriptElement">
+CONSOLE ERROR: line 2445: Uncaught Error: assert_equals: expected Element node <script id="outerScriptElement">
 
 var outerScriptElement ... but got null
 This is a testharness.js-based test.
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/leaktests/html-collection.html b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/leaktests/html-collection.html
index 4f864fd..d156569 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/leaktests/html-collection.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/leaktests/html-collection.html
@@ -11,7 +11,6 @@
 <template id='collection-template'>
   <img>
   <embed></embed>
-  <plugin></plugin>
   <applet></applet>
   <object type='application/x-java-applet'></object>
   <a href='http://example.com'></a>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html
deleted file mode 100644
index 94f7d1b..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<!--
-Distributed under both the W3C Test Suite License [1] and the W3C
-3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
-policies and contribution forms [3].
-
-[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-[3] http://www.w3.org/2004/10/27-testcases
--->
-<html>
-<head>
-<title>Shadow DOM Test: A_07_02_01</title>
-<link rel="author" title="Sergey G. Grekhov" href="mailto:[email protected]">
-<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#focus-navigation">
-<meta name="assert" content="User Interaction: The navigation order within a shadow tree must be computed as a list of focusable elements in tree order as-rendered">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="../../../../html/resources/common.js"></script>
-<script src="../../../resources/shadow-dom-utils.js"></script>
-</head>
-<body>
-<div id="log"></div>
-<script>
-var A_07_02_01_T01 = async_test('A_07_02_01_T01');
-
-A_07_02_01_T01.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_01_T01.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-    }), false);
-    d.body.appendChild(chb1);
-
-    var host = d.createElement('div');
-    d.body.appendChild(host);
-    var s = host.attachShadow({mode: 'open'});
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_01_T01.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 2: wrong focus navigation order');
-    }), false);
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_01_T01.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 3: wrong focus navigation order');
-    }), false);
-    s.appendChild(inp2);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.addEventListener('focus', A_07_02_01_T01.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 4: wrong focus navigation order');
-    }), false);
-    d.body.appendChild(chb2);
-
-    chb1.focus();
-
-    //simulate TAB clicks
-    fireKeyboardEvent(d, chb1, 'U+0009');
-
-    fireKeyboardEvent(d, inp1, 'U+0009');
-
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    A_07_02_01_T01.done();
-}));
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html
deleted file mode 100644
index 14c3219..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<!DOCTYPE html>
-<!--
-Distributed under both the W3C Test Suite License [1] and the W3C
-3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
-policies and contribution forms [3].
-
-[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-[3] http://www.w3.org/2004/10/27-testcases
--->
-<html>
-<head>
-<title>Shadow DOM Test: A_07_02_02</title>
-<link rel="author" title="Sergey G. Grekhov" href="mailto:[email protected]">
-<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#focus-navigation">
-<meta name="assert" content="User Interaction: The navigation order within a shadow tree must be computed as a list of focusable elements in tree order as-rendered  with the exception of any elements, distributed its insertion points, and is called shadow DOM navigation order.">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="../../../../html/resources/common.js"></script>
-<script src="../../../resources/shadow-dom-utils.js"></script>
-</head>
-<body>
-<div id="log"></div>
-<script>
-var A_07_02_02_T01 = async_test('A_07_02_02_T01');
-var A_07_02_02_T02 = async_test('A_07_02_02_T02');
-
-A_07_02_02_T01.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var expectations = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var host = d.createElement('div');
-    d.body.appendChild(host);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        assert_true(false, 'Element shouldn\'t be rendered');
-    }), false);
-    host.appendChild(chb1);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('slot', 'shadow');
-    chb2.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-        expectations[1] = true;
-    }), false);
-    expectations[1] = false;
-    host.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('slot', 'shadow');
-    chb3.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 2: wrong focus navigation order');
-        expectations[2] = true;
-    }), false);
-    expectations[2] = false;
-    host.appendChild(chb3);
-
-    var s = host.attachShadow({mode: 'open'});
-
-    var div = d.createElement('div');
-    div.innerHTML = '<slot name="shadow"></slot>';
-    s.appendChild(div);
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        expectations[3] = false;
-    }), false);
-    expectations[3] = true;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        expectations[4] = false;
-    }), false);
-    expectations[4] = true;
-    s.appendChild(inp2);
-
-    var chb4 = d.createElement('input');
-    chb4.setAttribute('type', 'checkbox');
-    chb4.setAttribute('id', 'chb4');
-    chb4.addEventListener('focus', A_07_02_02_T01.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 5: wrong focus navigation order');
-        expectations[5] = true;
-    }), false);
-    expectations[5] = false;
-    d.body.appendChild(chb4);
-
-    chb2.focus();
-
-    //simulate TAB clicks
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    fireKeyboardEvent(d, chb3, 'U+0009');
-
-    fireKeyboardEvent(d, inp1, 'U+0009');
-
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-    fireKeyboardEvent(d, chb4, 'U+0009');
-
-    for (var i = 1; i < expectations.length; i++) {
-        if (!expectations[i]) {
-            assert_true(false, 'Point ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_02_T01.done();
-}));
-
-
-
-A_07_02_02_T02.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var expectations = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb0 = d.createElement('input');
-    chb0.setAttribute('type', 'checkbox');
-    chb0.setAttribute('id', 'chb0');
-        d.body.appendChild(chb0);
-
-
-    var host = d.createElement('div');
-    d.body.appendChild(host);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_true(false, 'Element shouldn\'t be rendered');
-    }), false);
-    host.appendChild(chb1);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('slot', 'shadow');
-    chb2.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 3: wrong focus navigation order');
-        expectations[1] = true;
-    }), false);
-    expectations[1] = false;
-    host.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('slot', 'shadow');
-    chb3.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 4: wrong focus navigation order');
-        expectations[2] = true;
-    }), false);
-    expectations[2] = false;
-    host.appendChild(chb3);
-
-    var s = host.attachShadow({mode: 'open'});
-
-    var div = d.createElement('div');
-    div.innerHTML = '<slot name="shadow"></slot>';
-    s.appendChild(div);
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-
-        expectations[3] = true;
-    }), false);
-    expectations[3] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 2: wrong focus navigation order');
-        expectations[4] = true;
-    }), false);
-    expectations[4] = false;
-    s.appendChild(inp2);
-
-    var chb4 = d.createElement('input');
-    chb4.setAttribute('type', 'checkbox');
-    chb4.setAttribute('id', 'chb4');
-    chb4.addEventListener('focus', A_07_02_02_T02.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 5: wrong focus navigation order');
-        expectations[5] = true;
-    }), false);
-    expectations[5] = false;
-    d.body.appendChild(chb4);
-
-    chb0.focus();
-
-    //simulate TAB clicks
-    fireKeyboardEvent(d, inp1, 'U+0009');
-
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    fireKeyboardEvent(d, chb3, 'U+0009');
-
-    fireKeyboardEvent(d, chb4, 'U+0009');
-
-    for (var i = 1; i < expectations.length; i++) {
-        if (!expectations[i]) {
-            assert_true(false, 'Point ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_02_T02.done();
-}));
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html
deleted file mode 100644
index eec7620..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE html>
-<!--
-Distributed under both the W3C Test Suite License [1] and the W3C
-3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
-policies and contribution forms [3].
-
-[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-[3] http://www.w3.org/2004/10/27-testcases
--->
-<html>
-<head>
-<title>Shadow DOM Test: A_07_02_03</title>
-<link rel="author" title="Sergey G. Grekhov" href="mailto:[email protected]">
-<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#focus-navigation">
-<meta name="assert" content="User Interaction: For sequential focus navigation, the shadow DOM navigation order sequence must be inserted into the document navigation order in place of the shadow host as if the shadow host were assigned the value of auto for determining its position and shadow host is not focusable">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="../../../../html/resources/common.js"></script>
-<script src="../../../resources/shadow-dom-utils.js"></script>
-</head>
-<body>
-<div id="log"></div>
-<script>
-var A_07_02_03_T01 = async_test('A_07_02_03_T01');
-
-A_07_02_03_T01.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    // TODO according CSS3 nav-index is a replacement for tabindex
-    //chb1.setAttribute('nav-index', '4');
-    chb1.setAttribute('tabindex', '4');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_03_T01.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var host = d.createElement('div');
-    d.body.appendChild(host);
-    var s = host.attachShadow({mode: 'open'});
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    //inp1.setAttribute('nav-index', '3');
-    inp1.setAttribute('tabindex', '3');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_03_T01.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    //inp2.setAttribute('nav-index', '2');
-    inp2.setAttribute('tabindex', '2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_03_T01.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    s.appendChild(inp2);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    //chb2.setAttribute('nav-index', '1');
-    chb2.setAttribute('tabindex', '1');
-    chb2.addEventListener('focus', A_07_02_03_T01.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    d.body.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    //chb3.setAttribute('nav-index', '5');
-    chb3.setAttribute('tabindex', '5');
-    chb3.addEventListener('focus', A_07_02_03_T01.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    d.body.appendChild(chb3);
-
-    chb2.focus();
-
-    //simulate TAB clicks. Expected order: chb2, chb1, chb3, inp2, inp1
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    fireKeyboardEvent(d, chb1, 'U+0009');
-
-    fireKeyboardEvent(d, chb3, 'U+0009');
-
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-    fireKeyboardEvent(d, inp1, 'U+0009');
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Piont ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_03_T01.done();
-}));
-
-// test nodes, distributed into insertion points
-var A_07_02_03_T02 = async_test('A_07_02_03_T02');
-
-A_07_02_03_T02.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var host = d.createElement('div');
-    d.body.appendChild(host);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('id', 'chb1');
-    chb1.setAttribute('tabindex', '1');
-    chb1.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('slot', 'shadow');
-    chb2.setAttribute('tabindex', '3');
-    chb2.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    host.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('slot', 'shadow');
-    chb3.setAttribute('tabindex', '2');
-    chb3.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    host.appendChild(chb3);
-
-    var s = host.attachShadow({mode: 'open'});
-
-    var div = d.createElement('div');
-    div.innerHTML = '<slot name="shadow"></slot>';
-    s.appendChild(div);
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.setAttribute('tabindex', '4');
-    inp1.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.setAttribute('tabindex', '5');
-    inp2.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 5, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    s.appendChild(inp2);
-
-    var chb4 = d.createElement('input');
-    chb4.setAttribute('type', 'checkbox');
-    chb4.setAttribute('id', 'chb4');
-    chb4.setAttribute('tabindex', '6');
-    chb4.addEventListener('focus', A_07_02_03_T02.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 6: wrong focus navigation order');
-        invoked[6] = true;
-    }), false);
-    invoked[6] = false;
-    d.body.appendChild(chb4);
-
-    chb1.focus();
-
-    //simulate TAB clicks
-    //Expected order: chb1, chb3, chb2, chb4, inp1, inp2
-    fireKeyboardEvent(d, chb1, 'U+0009');
-    fireKeyboardEvent(d, chb3, 'U+0009');
-    fireKeyboardEvent(d, chb2, 'U+0009');
-    fireKeyboardEvent(d, chb4, 'U+0009');
-    fireKeyboardEvent(d, inp1, 'U+0009');
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Piont ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_03_T02.done();
-}));
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html b/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html
deleted file mode 100644
index 29e02bd..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html
+++ /dev/null
@@ -1,427 +0,0 @@
-<!DOCTYPE html>
-<!--
-Distributed under both the W3C Test Suite License [1] and the W3C
-3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
-policies and contribution forms [3].
-
-[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-[3] http://www.w3.org/2004/10/27-testcases
--->
-<html>
-<head>
-<title>Shadow DOM Test: A_07_02_04</title>
-<link rel="author" title="Sergey G. Grekhov" href="mailto:[email protected]">
-<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#focus-navigation">
-<meta name="assert" content="User Interaction: For sequential focus navigation, the shadow DOM navigation order sequence must be inserted into the document navigation order immediately after the shadow host, if the shadow host is focusable;">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="../../../../html/resources/common.js"></script>
-<script src="../../../resources/shadow-dom-utils.js"></script>
-</head>
-<body>
-<div id="log"></div>
-<script>
-var A_07_02_04_T01 = async_test('A_07_02_04_T01');
-
-A_07_02_04_T01.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    // TODO according CSS3 nav-index is a replacement for tabindex
-    //chb1.setAttribute('nav-index', '4');
-    chb1.setAttribute('tabindex', '1');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_04_T01.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var host = d.createElement('div');
-    //make shadow host focusable
-    host.setAttribute('tabindex', '3');
-    d.body.appendChild(host);
-    var s = host.attachShadow({mode: 'open'});
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    //inp1.setAttribute('nav-index', '3');
-    inp1.setAttribute('tabindex', '2');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_04_T01.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    //inp2.setAttribute('nav-index', '2');
-    inp2.setAttribute('tabindex', '1');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_04_T01.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    s.appendChild(inp2);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    //chb2.setAttribute('nav-index', '1');
-    chb2.setAttribute('tabindex', '2');
-    chb2.addEventListener('focus', A_07_02_04_T01.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    d.body.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    //chb3.setAttribute('nav-index', '5');
-    chb3.setAttribute('tabindex', '4');
-    chb3.addEventListener('focus', A_07_02_04_T01.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    d.body.appendChild(chb3);
-
-    chb1.focus();
-
-    //simulate TAB clicks. Expected order: chb1, chb2, inp2, inp1, chb3
-    fireKeyboardEvent(d, chb1, 'U+0009');
-
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-    fireKeyboardEvent(d, inp1, 'U+0009');
-
-    fireKeyboardEvent(d, chb3, 'U+0009');
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Piont ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_04_T01.done();
-}));
-
-
-
-// test nodes, distributed into insertion points
-var A_07_02_04_T02 = async_test('A_07_02_04_T02');
-
-A_07_02_04_T02.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var host = d.createElement('div');
-    host.setAttribute('tabindex', '3');
-    d.body.appendChild(host);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('id', 'chb1');
-    chb1.setAttribute('tabindex', '1');
-    chb1.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('slot', 'shadow');
-    chb2.setAttribute('tabindex', '3');
-    chb2.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    host.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('slot', 'shadow');
-    chb3.setAttribute('tabindex', '2');
-    chb3.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    host.appendChild(chb3);
-
-    var s = host.attachShadow({mode: 'open'});
-
-    var div = d.createElement('div');
-    div.innerHTML = '<slot name="shadow"></slot>';
-    s.appendChild(div);
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.setAttribute('tabindex', '4');
-    inp1.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.setAttribute('tabindex', '4');
-    inp2.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 5, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    d.body.appendChild(inp2);
-
-    var chb4 = d.createElement('input');
-    chb4.setAttribute('type', 'checkbox');
-    chb4.setAttribute('id', 'chb4');
-    chb4.setAttribute('tabindex', '2');
-    chb4.addEventListener('focus', A_07_02_04_T02.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 6: wrong focus navigation order');
-        invoked[6] = true;
-    }), false);
-    invoked[6] = false;
-    d.body.appendChild(chb4);
-
-    chb1.focus();
-
-    //simulate TAB clicks
-    //Expected order: chb1, chb3, chb4, chb2, inp1, inp2
-    fireKeyboardEvent(d, chb1, 'U+0009');
-    fireKeyboardEvent(d, chb3, 'U+0009');
-    fireKeyboardEvent(d, chb4, 'U+0009');
-    fireKeyboardEvent(d, chb2, 'U+0009');
-    fireKeyboardEvent(d, inp1, 'U+0009');
-    fireKeyboardEvent(d, inp2, 'U+0009');
-
-
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Point ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_04_T02.done();
-}));
-
-
-
-// Shadow root is the first in nav order
-var A_07_02_04_T03 = async_test('A_07_02_04_T03');
-
-A_07_02_04_T03.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('tabindex', '3');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_04_T03.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var host = d.createElement('div');
-    host.setAttribute('tabindex', '1');
-    d.body.appendChild(host);
-    var s = host.attachShadow({mode: 'open'});
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('tabindex', '2');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_04_T03.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('tabindex', '1');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_04_T03.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    s.appendChild(inp2);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('tabindex', '3');
-    chb2.addEventListener('focus', A_07_02_04_T03.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    s.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('tabindex', '2');
-    chb3.addEventListener('focus', A_07_02_04_T03.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    d.body.appendChild(chb3);
-
-    host.focus();
-
-    //simulate TAB clicks. Expected order: inp2, inp1, chb2, chb3, chb1
-    fireKeyboardEvent(d, inp2, 'U+0009');
-    fireKeyboardEvent(d, inp1, 'U+0009');
-    fireKeyboardEvent(d, chb2, 'U+0009');
-    fireKeyboardEvent(d, chb3, 'U+0009');
-    fireKeyboardEvent(d, chb1, 'U+0009');
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Piont ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_04_T03.done();
-}));
-
-
-//Shadow root is the last in nav order
-var A_07_02_04_T04 = async_test('A_07_02_04_T04');
-
-A_07_02_04_T04.step(unit(function (ctx) {
-
-    var counter = 0;
-
-    var invoked = [];
-
-    var d = newRenderedHTMLDocument(ctx);
-
-    var chb1 = d.createElement('input');
-    chb1.setAttribute('type', 'checkbox');
-    chb1.setAttribute('tabindex', '1');
-    chb1.setAttribute('id', 'chb1');
-    chb1.addEventListener('focus', A_07_02_04_T04.step_func(function(event) {
-        assert_equals(counter++, 0, 'Point 1: wrong focus navigation order');
-        invoked[1] = true;
-    }), false);
-    invoked[1] = false;
-    d.body.appendChild(chb1);
-
-    var host = d.createElement('div');
-    host.setAttribute('tabindex', '3');
-    d.body.appendChild(host);
-    var s = host.attachShadow({mode: 'open'});
-
-    var inp1 = d.createElement('input');
-    inp1.setAttribute('type', 'text');
-    inp1.setAttribute('id', 'shInp1');
-    inp1.setAttribute('tabindex', '2');
-    inp1.setAttribute('value', 'Input 1');
-    inp1.addEventListener('focus', A_07_02_04_T04.step_func(function(event) {
-        assert_equals(counter++, 3, 'Point 2: wrong focus navigation order');
-        invoked[2] = true;
-    }), false);
-    invoked[2] = false;
-    s.appendChild(inp1);
-
-    var inp2 = d.createElement('input');
-    inp2.setAttribute('type', 'text');
-    inp2.setAttribute('id', 'shInp2');
-    inp2.setAttribute('tabindex', '1');
-    inp2.setAttribute('value', 'Input 2');
-    inp2.addEventListener('focus', A_07_02_04_T04.step_func(function(event) {
-        assert_equals(counter++, 2, 'Point 3: wrong focus navigation order');
-        invoked[3] = true;
-    }), false);
-    invoked[3] = false;
-    s.appendChild(inp2);
-
-    var chb2 = d.createElement('input');
-    chb2.setAttribute('type', 'checkbox');
-    chb2.setAttribute('id', 'chb2');
-    chb2.setAttribute('tabindex', '3');
-    chb2.addEventListener('focus', A_07_02_04_T04.step_func(function(event) {
-        assert_equals(counter++, 4, 'Point 4: wrong focus navigation order');
-        invoked[4] = true;
-    }), false);
-    invoked[4] = false;
-    s.appendChild(chb2);
-
-    var chb3 = d.createElement('input');
-    chb3.setAttribute('type', 'checkbox');
-    chb3.setAttribute('id', 'chb3');
-    chb3.setAttribute('tabindex', '2');
-    chb3.addEventListener('focus', A_07_02_04_T04.step_func(function(event) {
-        assert_equals(counter++, 1, 'Point 5: wrong focus navigation order');
-        invoked[5] = true;
-    }), false);
-    invoked[5] = false;
-    d.body.appendChild(chb3);
-
-    chb1.focus();
-
-    //simulate TAB clicks. Expected order: inp2, inp1, chb2, chb3, chb1
-    fireKeyboardEvent(d, chb1, 'U+0009');
-    fireKeyboardEvent(d, chb3, 'U+0009');
-    fireKeyboardEvent(d, inp2, 'U+0009');
-    fireKeyboardEvent(d, inp1, 'U+0009');
-    fireKeyboardEvent(d, chb2, 'U+0009');
-
-    for (var i = 1; i < invoked.length; i++) {
-        if (!invoked[i]) {
-            assert_true(false, 'Piont ' + i + ' event listener was not invoked');
-        }
-    }
-
-    A_07_02_04_T04.done();
-}));
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.css b/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.css
deleted file mode 100644
index b2add2a..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.css
+++ /dev/null
@@ -1,118 +0,0 @@
-.keyboard {
-    display: table;
-    border-collapse: separate;
-    border-spacing: 2px;
-    width: 800px;
-    border: 2px solid black;
-    border-radius: 10px;
-    padding: 5px;
-}
-
-.key-row {
-    display: table;
-    margin: 0;
-    padding: 0;
-}
-
-.key {
-    display: table-cell;
-    border: 2px solid black;
-    border-radius: 8px;
-    width: 50px;
-    height: 40px;
-    vertical-align: middle;
-    text-align: center;
-    margin: 0;
-    padding: 0;
-}
-
-.wide1 {
-    width: 70px;
-}
-
-.wide2 {
-    width: 90px;
-}
-
-.wide3 {
-    width: 110px;
-}
-
-.wide4 {
-    width: 130px;
-}
-
-.wide5 {
-    width: 300px;
-}
-
-.nextKey {
-    background-color: yellow;
-}
-
-.goodKey {
-    background-color: #80ff08;
-}
-
-.badKey {
-    background-color: #ff8080;
-}
-
-.activeModifierKey {
-    background-color: #a0a0ff;
-}
-
-.skippedKey {
-    background-color: #e0e0e0;
-}
-
-#options {
-    display: none;
-    margin: 20px;
-}
-
-#optionstoggle, #helptoggle {
-    font-size: 10pt;
-}
-
-.opttable {
-    border: 1px solid black;
-}
-
-.optcell {
-    vertical-align: top;
-    padding: 0 10px;
-}
-
-.opttitle {
-    font-weight: bold;
-}
-
-.error {
-    border: 1px solid red;
-    margin: 5px;
-    padding: 5px;
-}
-
-.error1 {
-    font-size: 12pt;
-    margin: 0 0 0 10px;
-    padding: 0;
-}
-
-.error2 {
-    font-size: 10pt;
-    margin: 0 0 0 20px;
-    padding: 0;
-}
-
-.help {
-    font-size: 11pt;
-    margin: 0 0 5px 20px;
-    padding: 0;
-}
-
-body {
-    margin: 10px;
-    padding: 0 20px;
-}
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.js b/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.js
deleted file mode 100644
index 175258b..0000000
--- a/third_party/WebKit/LayoutTests/imported/wpt/uievents/keyboard/key-manual.js
+++ /dev/null
@@ -1,671 +0,0 @@
-var _testing = false;
-
-// The index into _keyTable of the key currently being tested.
-var _currKey = 0;
-
-var _keysTotal = 0;
-var _keysGood = 0;
-var _keysBad = 0;
-var _keysSkipped = 0;
-
-var _modifierMode = "None";
-
-var _keydownCapture = [];
-var _keyupCapture = [];
-
-var CAPTURE_KEYCODE = 0;
-var CAPTURE_CODE = 1;
-var CAPTURE_KEY = 2;
-var CAPTURE_SHIFTKEY = 3;
-var CAPTURE_CONTROLKEY = 4;
-var CAPTURE_ALTKEY = 5;
-var CAPTURE_METAKEY = 6;
-
-// An array of KeyInfo for each key to be tested.
-var _keyTable = [];
-
-// KeyInfo fields.
-var KEYINFO_CODE = 0;       // |code| for this key
-var KEYINFO_ROW = 1;        // Keyboard row
-var KEYINFO_TYPE = 2;       // Key type (see below)
-var KEYINFO_WIDTH = 3;      // Width of key: 0=normal
-var KEYINFO_KEYCAP = 4;     // Keycap string to display
-var KEYINFO_KEY = 5;        // Unmodified key value
-var KEYINFO_KEY_SHIFT = 6;  // Shifted key value
-
-var KEYTYPE_NORMAL = 0;
-var KEYTYPE_DISABLED = 1;   // Key cannot be tested: e.g., CapsLock
-var KEYTYPE_END = 2;        // Used to mark end of KeyTable
-var KEYTYPE_MODIFIER = 3;   // Modifer key
-
-function clearChildren(e) {
-    while (e.firstChild !== null) {
-        e.removeChild(e.firstChild);
-    }
-}
-
-function setText(e, text) {
-    clearChildren(e);
-    e.appendChild(document.createTextNode(text));
-}
-
-function setUserAgent() {
-    var userAgent = navigator.userAgent;
-    uaDiv = document.getElementById("useragent");
-    setText(uaDiv, userAgent);
-}
-
-function addEventListener(obj, etype, handler) {
-    if (obj.addEventListener) {
-        obj.addEventListener(etype, handler, false);
-    } else if (obj.attachEvent) {
-        obj.attachEvent("on"+etype, handler);
-    } else {
-        obj["on"+etype] = handler;
-    }
-}
-
-function addClass(obj, className) {
-    obj.classList.add(className);
-}
-
-function removeClass(obj, className) {
-    obj.classList.remove(className);
-}
-
-function addInnerText(obj, text) {
-    obj.appendChild(document.createTextNode(text));
-}
-
-function calcLocation(loc) {
-    if (loc == 1) return "LEFT";
-    if (loc == 2) return "RIGHT";
-    if (loc == 3) return "NUMPAD";
-    return loc;
-}
-
-function isModifierKey(e) {
-    // Shift, Control, Alt
-    if (e.keyCode >= 16 && e.keyCode <= 18) {
-        return true;
-    }
-    // Windows, Command or Meta key.
-    if (e.keyCode == 224 // Right/Left: Gecko
-        || e.keyCode == 91    // Left: WebKit/Blink
-        || e.keyCode == 93    // Right: WebKit/Blink
-        ) {
-        return true;
-    }
-    return false;
-}
-
-function init(title, keytable) {
-    _keyTable = keytable;
-
-    createBody(title, keytable);
-
-    setUserAgent();
-
-    var input = document.getElementById("input");
-    input.disabled = true;
-    addEventListener(input, "keydown", onKeyDown);
-    addEventListener(input, "keyup", onKeyUp);
-    //addEventListener(input, "beforeInput", onBeforeInput);
-    //addEventListener(input, "input", onInput);
-}
-
-function onKeyDown(e) {
-    // Ignore modifier keys when checking modifier combinations.
-    if (_modifierMode != "None" && isModifierKey(e)) {
-        return;
-    }
-
-    _keydownInfo = [e.keyCode, e.code, e.key, e.shiftKey, e.ctrlKey, e.altKey, e.metaKey];
-    if (e.keyCode == 9 || e.code == "Tab") {
-        e.preventDefault();
-    }
-}
-
-function onKeyUp(e) {
-    // Ignore modifier keys when checking modifier combinations.
-    if (_modifierMode != "None" && isModifierKey(e)) {
-        return;
-    }
-
-    _keyupInfo = [e.keyCode, e.code, e.key, e.shiftKey, e.ctrlKey, e.altKey, e.metaKey];
-
-    if (_testing) {
-        verifyKey();
-        nextKey();
-    }
-}
-
-function onBeforeInput(e) {
-}
-
-function onInput(e) {
-}
-
-function addError(elem, str) {
-    var p = document.createElement('p');
-    p.classList.add("error2");
-    p.textContent = str;
-    elem.appendChild(p);
-}
-
-function addErrorIncorrect(elem, eventName, attrName, keyEventInfo, attr, expected) {
-    addError(elem, "Incorrect " + eventName
-        + " |" + attrName + "| = " + keyEventInfo[attr]
-        + " - Expected " + expected);
-}
-
-function verifyKeyEventFields(eventName, keyEventInfo, code, key, error) {
-    var verifyCode = document.getElementById("opt_attr_code").checked;
-    var verifyKey = document.getElementById("opt_attr_key").checked;
-    var verifyModifiers = document.getElementById("opt_attr_modifiers").checked;
-    var good = true;
-
-    if (!verifyCode && !verifyKey && !verifyModifiers) {
-        good = false;
-        addError(error, "Invalid test: At least one attribute must be selected for testing.");
-    }
-    if (verifyCode && keyEventInfo[CAPTURE_CODE] != code) {
-        good = false;
-        addErrorIncorrect(error, eventName, "code", keyEventInfo, CAPTURE_CODE, code);
-    }
-    if (verifyKey && keyEventInfo[CAPTURE_KEY] != key) {
-        good = false;
-        addErrorIncorrect(error, eventName, "key", keyEventInfo, CAPTURE_KEY, key);
-    }
-    if (verifyModifiers) {
-        if (keyEventInfo[CAPTURE_SHIFTKEY] != (_modifierMode == "Shift")) {
-            good = false;
-            addErrorIncorrect(error, eventName, "shiftKey", keyEventInfo, CAPTURE_SHIFTKEY, false);
-        }
-        if (keyEventInfo[CAPTURE_CONTROLKEY]) {
-            good = false;
-            addErrorIncorrect(error, eventName, "controlKey", keyEventInfo, CAPTURE_CONTROLKEY, false);
-        }
-        if (keyEventInfo[CAPTURE_ALTKEY]) {
-            good = false;
-            addErrorIncorrect(error, eventName, "altKey", keyEventInfo, CAPTURE_ALTKEY, false);
-        }
-        if (keyEventInfo[CAPTURE_METAKEY]) {
-            good = false;
-            addErrorIncorrect(error, eventName, "metaKey", keyEventInfo, CAPTURE_METAKEY, false);
-        }
-    }
-
-    return good;
-}
-
-function verifyKey() {
-    _keysTotal++;
-
-    var keyInfo = _keyTable[_currKey];
-    var code = keyInfo[KEYINFO_CODE];
-    var key = keyInfo[KEYINFO_KEY];
-    var keyShift = keyInfo[KEYINFO_KEY_SHIFT];
-
-    var keyCheck = key;
-    if (_modifierMode == "Shift") {
-        keyCheck = keyShift;
-    }
-
-    var verifyKeydown = document.getElementById("opt_event_keydown").checked;
-    var verifyKeyup = document.getElementById("opt_event_keyup").checked;
-
-    var error = document.createElement('div');
-    error.classList.add("error");
-    var good = true;
-
-    if (verifyKeydown) {
-        good = verifyKeyEventFields("keydown", _keydownInfo, code, keyCheck, error);
-    }
-    if (verifyKeyup) {
-        good = verifyKeyEventFields("keyup", _keyupInfo, code, keyCheck, error);
-    }
-
-    if (!verifyKeydown && !verifyKeyup) {
-        good = false;
-        addError(error, "Invalid test: At least one event must be selected for testing.");
-    }
-
-    // Allow Escape key to skip the current key.
-    var skipped = false;
-    if (_keydownInfo[CAPTURE_KEYCODE] == 27 || _keydownInfo[CAPTURE_CODE] == "Escape") {
-        good = true;
-        skipped = true;
-    }
-
-    if (!good) {
-        var p = document.createElement('p');
-        p.classList.add("error1");
-        p.textContent = "Error : " + code;
-        error.insertBefore(p, error.firstChild);
-    }
-
-    removeNextKeyHilight();
-    if (skipped) {
-        _keysSkipped++;
-        document.getElementById(code).classList.add("skippedKey")
-    } else if (good) {
-        _keysGood++;
-        document.getElementById(code).classList.add("goodKey")
-    } else {
-        _keysBad++;
-        document.getElementById(code).classList.add("badKey")
-    }
-    updateTestSummary(good ? null : error);
-}
-
-function updateTestSummary(error) {
-    document.getElementById("keys-total").textContent = _keysTotal;
-    document.getElementById("keys-good").textContent = _keysGood;
-    document.getElementById("keys-bad").textContent = _keysBad;
-    document.getElementById("keys-skipped").textContent = _keysSkipped;
-
-    if (error) {
-        var errors = document.getElementById("errors");
-        errors.insertBefore(error, errors.firstChild);
-    }
-}
-
-function resetTest() {
-    _keysTotal = 0;
-    _keysGood = 0;
-    _keysBad = 0;
-
-    _currKey = -1;
-    nextKey();
-
-    updateTestSummary();
-
-    // Remove previous test results.
-    clearChildren(document.getElementById("errors"));
-
-    // Remove highlighting from keys.
-    for (var i = 0; i < _keyTable.length; i++) {
-        var code = _keyTable[i][KEYINFO_CODE];
-        var type = _keyTable[i][KEYINFO_TYPE];
-        if (type != KEYTYPE_END) {
-            var key = document.getElementById(code);
-            key.classList.remove("goodKey");
-            key.classList.remove("badKey");
-            key.classList.remove("skippedKey");
-        }
-    }
-}
-
-function startTest() {
-    if (_testing) {
-        // Cancel the currently running test.
-        endTest();
-        return;
-    }
-
-    resetTest();
-    _testing = true;
-    document.getElementById("start").value = "Stop Test"
-
-    var input = document.getElementById("input");
-    input.value = "";
-    input.disabled = false;
-    input.focus();
-
-    // Show test instructions and info.
-    document.getElementById("test-info").style.display = 'block';
-    document.getElementById("instructions").style.display = 'block';
-    document.getElementById("test-done").style.display = 'none';
-}
-
-function endTest() {
-    _testing = false;
-    removeNextKeyHilight();
-    document.getElementById("start").value = "Restart Test"
-    document.getElementById("input").disabled = true;
-    document.getElementById("instructions").style.display = 'none';
-    document.getElementById("test-done").style.display = 'block';
-}
-
-function removeNextKeyHilight() {
-    var curr = document.getElementById(_keyTable[_currKey][KEYINFO_CODE]);
-    if (curr) {
-        removeClass(curr, "nextKey")
-    }
-}
-
-function addNextKeyHilight() {
-    var curr = document.getElementById(_keyTable[_currKey][KEYINFO_CODE]);
-    if (curr) {
-        addClass(curr, "nextKey")
-    }
-}
-
-function nextKey() {
-    var keyInfo;
-    var keepLooking = true;
-    do {
-        _currKey++;
-        keyInfo = _keyTable[_currKey];
-        var type = keyInfo[KEYINFO_TYPE];
-
-        // Skip over disabled keys.
-        keepLooking = (type == KEYTYPE_DISABLED);
-
-        // Skip over modifier keys if we're testing modifier combinations.
-        if (_modifierMode != "None" && type == KEYTYPE_MODIFIER) {
-            keepLooking = true;
-        }
-
-        // Skip over keys in disabled rows.
-        if (type != KEYTYPE_END) {
-            var row = keyInfo[KEYINFO_ROW];
-            var rowEnabled = document.getElementById("opt_row_" + row).checked;
-            keepLooking = keepLooking || !rowEnabled;
-        }
-    } while (keepLooking);
-
-    if (keyInfo[KEYINFO_TYPE] == KEYTYPE_END) {
-        endTest();
-    } else {
-        addNextKeyHilight();
-    }
-}
-
-function toggleOptions() {
-    var link = document.getElementById("optionstoggle");
-    var options = document.getElementById("options");
-    clearChildren(link);
-    if (options.style.display == "block") {
-        options.style.display = "none";
-        addInnerText(link, "Show Options");
-    }
-    else {
-        options.style.display = "block";
-        addInnerText(link, "Hide Options");
-    }
-}
-
-function toggleHelp() {
-    var link = document.getElementById("helptoggle");
-    var help = document.getElementById("help");
-    clearChildren(link);
-    if (help.style.display == "block") {
-        help.style.display = "none";
-        addInnerText(link, "Show Help");
-    }
-    else {
-        help.style.display = "block";
-        addInnerText(link, "Hide Help");
-    }
-}
-
-function createBody(title, keytable) {
-    var body = document.getElementsByTagName("body")[0];
-    var p;
-    var span;
-
-    var h1 = document.createElement('h1');
-    h1.textContent = "Keyboard Event Manual Test - " + title;
-    body.appendChild(h1);
-
-    // Display useragent.
-    p = document.createElement('p');
-    p.textContent = "UserAgent: ";
-    var useragent = document.createElement('span');
-    useragent.id = "useragent";
-    p.appendChild(useragent);
-    body.appendChild(p);
-
-    // Display input textedit.
-    p = document.createElement('p');
-    p.textContent = "Test Input: ";
-    var input1 = document.createElement('input');
-    input1.id = "input";
-    input1.type = "text";
-    input1.size = 80;
-    p.appendChild(input1);
-    p.appendChild(document.createTextNode(" "));
-    var input2 = document.createElement('input');
-    input2.id = "start";
-    input2.type = "button";
-    input2.onclick = function() { startTest(); return false; }
-    input2.value = "Start Test";
-    p.appendChild(input2);
-    p.appendChild(document.createTextNode(" "));
-    var optionsToggle = document.createElement('a');
-    optionsToggle.id = "optionstoggle";
-    optionsToggle.href = "javascript:toggleOptions()";
-    optionsToggle.textContent = "Show Options";
-    p.appendChild(optionsToggle);
-    p.appendChild(document.createTextNode(" "));
-    var helpToggle = document.createElement('a');
-    helpToggle.id = "helptoggle";
-    helpToggle.href = "javascript:toggleHelp()";
-    helpToggle.textContent = "Show Help";
-    p.appendChild(helpToggle);
-    body.appendChild(p);
-
-    createOptions(body);
-
-    createHelp(body);
-
-    createKeyboard(body, keytable);
-
-    // Test info and summary.
-    var test_info = document.createElement('div');
-    test_info.id = "test-info";
-    test_info.style.display = "none";
-
-    var instructions = document.createElement('div');
-    instructions.id = "instructions";
-    p = document.createElement('p');
-    p.textContent = "Press the highlighted key.";
-    instructions.appendChild(p);
-    test_info.appendChild(instructions);
-
-    var test_done = document.createElement('div');
-    test_done.id = "test-done";
-    p = document.createElement('p');
-    p.textContent = "Test complete!";
-    test_done.appendChild(p);
-    test_info.appendChild(test_done);
-
-    var summary = document.createElement('div');
-    summary.id = "summary";
-    p = document.createElement('p');
-    summary.appendChild(document.createTextNode("Keys Tested: "));
-    span = document.createElement('span');
-    span.id = "keys-total";
-    span.textContent = 0;
-    summary.appendChild(span);
-    summary.appendChild(document.createTextNode("; Passed "));
-    span = document.createElement('span');
-    span.id = "keys-good";
-    span.textContent = 0;
-    summary.appendChild(span);
-    summary.appendChild(document.createTextNode("; Failed "));
-    span = document.createElement('span');
-    span.id = "keys-bad";
-    span.textContent = 0;
-    summary.appendChild(span);
-    summary.appendChild(document.createTextNode("; Skipped "));
-    span = document.createElement('span');
-    span.id = "keys-skipped";
-    span.textContent = 0;
-    summary.appendChild(span);
-    test_info.appendChild(summary);
-
-    var errors = document.createElement('div');
-    errors.id = "errors";
-    test_info.appendChild(errors);
-
-    body.appendChild(test_info);
-}
-
-function addOptionTitle(cell, title) {
-    var span = document.createElement('span');
-    span.classList.add("opttitle");
-    span.textContent = title;
-    cell.appendChild(span);
-    cell.appendChild(document.createElement("br"));
-}
-
-function addOptionCheckbox(cell, id, text) {
-    var label = document.createElement("label");
-
-    var input = document.createElement("input");
-    input.type = "checkbox";
-    input.id = id;
-    input.checked = true;
-    label.appendChild(input);
-
-    label.appendChild(document.createTextNode(" " + text));
-    cell.appendChild(label);
-
-    cell.appendChild(document.createElement("br"));
-}
-
-function addOptionRadio(cell, group, text, handler, checked) {
-    var label = document.createElement("label");
-
-    var input = document.createElement("input");
-    input.type = "radio";
-    input.name = group;
-    input.value = text;
-    input.onclick = handler;
-    input.checked = checked;
-    label.appendChild(input);
-
-    label.appendChild(document.createTextNode(" " + text));
-    cell.appendChild(label);
-
-    cell.appendChild(document.createElement("br"));
-}
-
-function handleModifierGroup() {
-    var radio = document.querySelector("input[name=opt_modifier]:checked");
-    var oldMode = _modifierMode;
-    _modifierMode = radio.value;
-
-    if (oldMode == "Shift") {
-        document.getElementById("ShiftLeft").classList.remove("activeModifierKey");
-        document.getElementById("ShiftRight").classList.remove("activeModifierKey");
-    }
-
-    if (_modifierMode == "Shift") {
-        document.getElementById("ShiftLeft").classList.add("activeModifierKey");
-        document.getElementById("ShiftRight").classList.add("activeModifierKey");
-    }
-}
-
-function createOptions(body) {
-    var options = document.createElement('div');
-    options.id = "options";
-    options.style.display = "none";
-
-    var table = document.createElement('table');
-    table.classList.add("opttable");
-    var row = document.createElement('tr');
-    var cell;
-
-    cell = document.createElement('td');
-    cell.classList.add("optcell");
-    addOptionTitle(cell, "Keyboard Rows");
-    addOptionCheckbox(cell, "opt_row_0", "Row E (top)");
-    addOptionCheckbox(cell, "opt_row_1", "Row D");
-    addOptionCheckbox(cell, "opt_row_2", "Row C");
-    addOptionCheckbox(cell, "opt_row_3", "Row B");
-    addOptionCheckbox(cell, "opt_row_4", "Row A (bottom)");
-    row.appendChild(cell);
-
-    cell = document.createElement('td');
-    cell.classList.add("optcell");
-    addOptionTitle(cell, "Events");
-    addOptionCheckbox(cell, "opt_event_keydown", "keydown");
-    addOptionCheckbox(cell, "opt_event_keyup", "keyup");
-    row.appendChild(cell);
-
-    cell = document.createElement('td');
-    cell.classList.add("optcell");
-    addOptionTitle(cell, "Attributes");
-    addOptionCheckbox(cell, "opt_attr_code", "code");
-    addOptionCheckbox(cell, "opt_attr_key", "key");
-    addOptionCheckbox(cell, "opt_attr_modifiers", "modifiers");
-    row.appendChild(cell);
-
-    cell = document.createElement('td');
-    cell.classList.add("optcell");
-    addOptionTitle(cell, "Modifiers");
-    addOptionRadio(cell, "opt_modifier", "None", handleModifierGroup, true);
-    addOptionRadio(cell, "opt_modifier", "Shift", handleModifierGroup, false);
-    row.appendChild(cell);
-
-    table.appendChild(row);
-    options.appendChild(table);
-
-    body.appendChild(options);
-}
-
-function addHelpText(div, text) {
-    var p = document.createElement('p');
-    p.classList.add("help");
-    p.textContent = text;
-    div.appendChild(p);
-}
-
-function createHelp(body) {
-    var help = document.createElement('div');
-    help.id = "help";
-    help.style.display = "none";
-
-    addHelpText(help, "Click on the \"Start Test\" button to begin testing.");
-    addHelpText(help, "Press the hilighted key to test it.");
-    addHelpText(help, "Clicking anywhere outside the \"Test Input\" editbox will pause testing. To resume, click back inside the editbox.");
-    addHelpText(help, "To skip a key while testing, press Escape.");
-    addHelpText(help, "When testing with modifier keys, the modifier must be pressed before the keydown and released after the keyup of the key being tested.");
-
-    body.appendChild(help);
-}
-
-function createKeyboard(body, keytable) {
-    var keyboard = document.createElement('div');
-    keyboard.classList.add("keyboard");
-
-    var currRow = 0;
-    var row = document.createElement('div');
-    row.classList.add("key-row");
-
-    for (var i = 0; i < keytable.length; i++) {
-        var code = keytable[i][KEYINFO_CODE];
-        var rowId = keytable[i][KEYINFO_ROW];
-        var type = keytable[i][KEYINFO_TYPE];
-        var width = keytable[i][KEYINFO_WIDTH];
-        var keyCap = keytable[i][KEYINFO_KEYCAP];
-
-        if (type == KEYTYPE_END) {
-            continue;
-        }
-
-        if (rowId != currRow) {
-            keyboard.appendChild(row);
-            row = document.createElement('div');
-            row.classList.add("key-row");
-            currRow = rowId;
-        }
-
-        var key = document.createElement('div');
-        key.id = code;
-        key.classList.add("key");
-        if (width != 0) {
-            key.classList.add("wide" + width);
-        }
-        key.textContent = keyCap;
-
-        row.appendChild(key);
-    }
-
-    keyboard.appendChild(row);
-    body.appendChild(keyboard);
-}
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/README.md b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/README.md
index ca01178a..c6d7c72 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/README.md
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/README.md
@@ -12,17 +12,17 @@
     For example, if you want to test setting the start time, you might be
     tempted to put all the tests in:
 
-    > `/web-animations/Animation/startTime.html`
+    > `/web-animations/interfaces/Animation/startTime.html`
 
     However, in the spec most of the logic is in the &ldquo;Set the animation
     start time&ldquo; procedure in the &ldquo;Timing model&rdquo; section.
 
     Instead, try something like:
 
-    > *   `/web-animations/timing-model/animation/set-the-animation-start-time.html`<br>
+    > *   `/web-animations/timing-model/animations/set-the-animation-start-time.html`<br>
     >     Tests all the branches and inputs to the procedure as defined in the
     >     spec (using the `Animation.startTime` API).
-    > *   `/web-animations/Animation/startTime.html`<br>
+    > *   `/web-animations/interfaces/Animation/startTime.html`<br>
     >     Tests API-layer specific issues like mapping unresolved values to
     >      null, etc.
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes-expected.txt
new file mode 100644
index 0000000..b814546
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes-expected.txt
@@ -0,0 +1,19 @@
+This is a testharness.js-based test.
+FAIL Test distribute spacing anim.effect.getKeyframes is not a function
+FAIL Test distribute spacing with specific offsets anim.effect.getKeyframes is not a function
+FAIL Test paced spacing without any keyframe anim.effect.getKeyframes is not a function
+FAIL Test paced spacing anim.effect.getKeyframes is not a function
+FAIL Test paced spacing with specific offsets anim.effect.getKeyframes is not a function
+FAIL Test paced spacing if some paced property values are equal anim.effect.getKeyframes is not a function
+FAIL Test falling back to distribute spacing if all paced property value are equal anim.effect.getKeyframes is not a function
+FAIL Test paced spacing if there a keyframe without the paced property anim.effect.getKeyframes is not a function
+FAIL Test paced spacing if a paced property that appears on only some keyframes anim.effect.getKeyframes is not a function
+FAIL Test paced spacing if a paced property that appears on only some keyframes and there is a specific offset anim.effect.getKeyframes is not a function
+FAIL Test paced spacing where there are some keyframes without offsets and without the paced property before the first paceable keyframe and after the last paceable keyframe anim.effect.getKeyframes is not a function
+FAIL Test paced spacing for using shorthand property anim.effect.getKeyframes is not a function
+FAIL Test paced spacing using shorthand property where only the longhand components are specified anim.effect.getKeyframes is not a function
+FAIL Test falling back to distribute spacing if all keyframe miss some components anim.effect.getKeyframes is not a function
+FAIL Test paced spacing only for keyframes specifying all longhand components, and falling back to distribute spacing for the reset anim.effect.getKeyframes is not a function
+FAIL Test paced spacing only for keyframes specifying all some components, and falling back to distribute spacing for the reset with some specific offsets anim.effect.getKeyframes is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes.html
new file mode 100644
index 0000000..14dc32b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/keyframe-effects/spacing-keyframes.html
@@ -0,0 +1,328 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Keyframe spacing tests</title>
+<link rel="help" href="https://w3c.github.io/web-animations/#spacing-keyframes">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../testcommon.js"></script>
+<body>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC });
+
+  var frames = anim.effect.getKeyframes();
+  var slots = frames.length - 1;
+  assert_equals(frames[0].computedOffset, 0.0, '1st frame offset');
+  assert_equals(frames[1].computedOffset, 1.0 / slots, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 2.0 / slots, '3rd frame offset');
+  assert_equals(frames[3].computedOffset, 1.0, 'last frame offset');
+}, 'Test distribute spacing');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px', offset: 0.5 },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'distribute' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames[0].computedOffset, 0.0, '1st frame offset');
+  assert_equals(frames[1].computedOffset, 0.5 * 1 / 2, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 0.5, '3rd frame offset');
+  assert_equals(frames[3].computedOffset, 1.0, 'last frame offset');
+}, 'Test distribute spacing with specific offsets');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null,
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames.length, 0, "empty keyframe list");
+}, 'Test paced spacing without any keyframe');
+
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist = [0, 20, 140, 190];
+  assert_equals(frames[0].computedOffset, 0.0,
+                '1st frame offset');
+  assert_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                '2nd frame offset');
+  assert_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                '3rd frame offset');
+  assert_equals(frames[3].computedOffset, 1.0,
+                'last frame offset');
+}, 'Test paced spacing');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px', offset: 0.5 },
+                                    { marginLeft: '120px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist1 = [ 0, 20, 140 ];
+  var cumDist2 = [ 0, 20, 90 ];
+  assert_equals(frames[1].computedOffset, 0.5 * cumDist1[1] / cumDist1[2],
+                '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 0.5,
+                '3rd frame offset');
+  assert_equals(frames[3].computedOffset, 0.5 + 0.5 * cumDist2[1] / cumDist2[2],
+                '4th frame offset');
+}, 'Test paced spacing with specific offsets');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '0px' },
+                                    { marginLeft: '100px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist = [0, 0, 100, 150];
+  assert_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                '2nd frame offset');
+  assert_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                '3rd frame offset');
+}, 'Test paced spacing if some paced property values are equal');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '0px' },
+                                    { marginLeft: '0px' },
+                                    { marginLeft: '0px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var slots = frames.length - 1;
+  assert_equals(frames[1].computedOffset, 1.0 / slots, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 2.0 / slots, '3rd frame offset');
+}, 'Test falling back to distribute spacing if all paced property value ' +
+   'are equal');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginTop: '-20px' },
+                                    { marginLeft: '100px' },
+                                    { margin: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames[1].computedOffset, frames[2].computedOffset * 1 / 2,
+                '2nd frame offset using distribute spacing');
+  assert_equals(frames[2].computedOffset, 100 / 150,
+                '3rd frame offset using paced spacing');
+}, 'Test paced spacing if there a keyframe without the paced property');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginTop: '40px' },
+                                    { marginTop: '-20px' },
+                                    { marginLeft: '40px' },
+                                    { marginTop: '60px' },
+                                    { margin: '10px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist = [0, 0, 0, 40, 40, 70];
+  assert_equals(frames[1].computedOffset, frames[3].computedOffset * 1 / 3,
+                '2nd frame offset using distribute spacing');
+  assert_equals(frames[2].computedOffset, frames[3].computedOffset * 2 / 3,
+                '3rd frame offset using distribute spacing');
+  assert_equals(frames[3].computedOffset, cumDist[3] / cumDist[5],
+                '4th frame offset using paced spacing');
+  assert_equals(frames[4].computedOffset,
+                frames[3].computedOffset +
+                  (1 - frames[3].computedOffset) * 1 / 2,
+                '5th frame offset using distribute spacing');
+}, 'Test paced spacing if a paced property that appears on only some ' +
+   'keyframes');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginTop: '-20px', offset: 0.5 },
+                                    { marginLeft: '40px' },
+                                    { marginLeft: '100px' },
+                                    { margin: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames[2].computedOffset, 0.5 + 0.5 * 1 / 3,
+                '3rd frame offset using distribute spacing because it is the ' +
+                'first paceable keyframe');
+  assert_equals(frames[3].computedOffset,
+                frames[2].computedOffset +
+                (1.0 - frames[2].computedOffset) * 60 / 110,
+                '4th frame offset using paced spacing');
+}, 'Test paced spacing if a paced property that appears on only some ' +
+   'keyframes and there is a specific offset');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginTop: '20px', offset: 0.2 },
+                                    { marginTop: '40px' },
+                                    { marginTop: '-20px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '40px' },
+                                    { marginTop: '60px' },
+                                    { marginLeft: '100px' },
+                                    { marginTop: '50px' },
+                                    { marginTop: '100px', offset: 0.8 },
+                                    { margin: '0px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+  var frames = anim.effect.getKeyframes();
+  // Test distribute spacing in (A, Paced A] and [Paced B, frame B).
+  var slots = frames.length - 3;
+  var start = 0.2;
+  var diff = 0.8 - start;
+  assert_equals(frames[2].computedOffset, start + diff * 1.0 / slots,
+                '3nd frame offset using distribute spacing');
+  assert_equals(frames[3].computedOffset, start + diff * 2.0 / slots,
+                '4rd frame offset using distribute spacing');
+  assert_equals(frames[4].computedOffset, start + diff * 3.0 / slots,
+                '5th frame offset using distribute spacing because it is ' +
+                'the first paceable keyframe');
+  assert_equals(frames[7].computedOffset, start + diff * 6.0 / slots,
+                '8th frame offset using distribute spacing because it is ' +
+                'the last paceable keyframe');
+  assert_equals(frames[8].computedOffset, start + diff * 7.0 / slots,
+                '9th frame offset using distribute spacing');
+  // Test paced spacing and other null computed offsets in (Paced A, Paced B).
+  var cumDist = [0, 60, 60, 120];
+  assert_equals(frames[5].computedOffset,
+                frames[4].computedOffset + cumDist[2] / cumDist[3] *
+                  (frames[7].computedOffset - frames[4].computedOffset),
+                '6th frame offset using paced spacing');
+  assert_equals(frames[6].computedOffset,
+                frames[5].computedOffset + 1.0 / 2.0 *
+                  (frames[7].computedOffset - frames[5].computedOffset),
+                '7th frame offset using distribute spacing');
+}, 'Test paced spacing where there are some keyframes without offsets and ' +
+   'without the paced property before the first paceable keyframe and ' +
+   'after the last paceable keyframe');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { margin: '-20px' },
+                                    { margin: '100px' },
+                                    { margin: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist = [0, 20, 140, 190];
+  assert_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                '2nd frame offset');
+  assert_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                '3rd frame offset');
+}, 'Test paced spacing for using shorthand property');
+
+test(function(t) {
+  var anim =
+    createDiv(t).animate([ { marginLeft: '0px',   marginRight:  '0px',
+                             marginTop:  '10px',  marginBottom: '10px' },
+                           { marginLeft: '-20px', marginRight:  '-20px',
+                             marginTop:  '0px',   marginBottom: '0px' },
+                           { marginLeft: '100px', marginRight:  '100px',
+                             marginTop:  '-50px', marginBottom: '-50px' },
+                           { marginLeft: '50px',  marginRight:  '50px',
+                             marginTop:  '80px',  marginBottom: '80px' } ],
+                         { duration: 100 * MS_PER_SEC,
+                           spacing: 'paced(margin)' });
+
+  var frames = anim.effect.getKeyframes();
+  var dist = [ 0,
+               Math.sqrt(20 * 20 * 2 + 10 * 10 * 2),
+               Math.sqrt(120 * 120 * 2 + 50 * 50 * 2),
+               Math.sqrt(50 * 50 * 2 + 130 * 130 * 2) ];
+  var cumDist = [];
+  dist.reduce(function(prev, curr, i) { return cumDist[i] = prev + curr; }, 0);
+  assert_approx_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                       0.0001, '2nd frame offset');
+  assert_approx_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                       0.0001, '3rd frame offset');
+}, 'Test paced spacing using shorthand property where only the longhand ' +
+   'components are specified');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px', marginTop: '0px' },
+                                    { marginLeft: '-20px', marginTop: '-20px' },
+                                    { marginLeft: '100px', marginTop: '100px' },
+                                    { marginLeft: '50px', marginTop: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin)' });
+
+  var frames = anim.effect.getKeyframes();
+  var slots = frames.length - 1;
+  assert_equals(frames[1].computedOffset, 1 / slots, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 2 / slots, '3rd frame offset');
+}, 'Test falling back to distribute spacing if all keyframe miss some ' +
+   'components');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginTop: '40px' },
+                                    { margin: '100px' },
+                                    { margin: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin)' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames[1].computedOffset, frames[3].computedOffset * 1 / 3,
+                '2nd frame offset using distribute spacing');
+  assert_equals(frames[2].computedOffset, frames[3].computedOffset * 2 / 3,
+                '3rd frame offset using distribute spacing');
+  assert_equals(frames[3].computedOffset, 100 / 150,
+                '4th frame offset using paced spacing');
+}, 'Test paced spacing only for keyframes specifying all longhand ' +
+   'components, and falling back to distribute spacing for the reset');
+
+test(function(t) {
+  var anim = createDiv(t).animate([ { margin: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginTop: '40px', offset: 0.5 },
+                                    { margin: '100px' },
+                                    { margin: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin)' });
+
+  var frames = anim.effect.getKeyframes();
+  assert_equals(frames[1].computedOffset, 0.5 * 1 / 2,
+                '2nd frame offset using distribute spacing');
+  assert_equals(frames[3].computedOffset, 0.5 + 0.5 * 1 / 2,
+                '4th frame offset using distribute spacing because it is the ' +
+                'first paceable keyframe from a non-null offset keyframe');
+}, 'Test paced spacing only for keyframes specifying all some components, ' +
+   'and falling back to distribute spacing for the reset with some specific ' +
+   'offsets');
+
+// Bug 1276193: Test for mixing percent and pixel values.
+
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/Animation/cancel.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/Animation/cancel.html
index 73f05ee..d7b0df2 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/Animation/cancel.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/Animation/cancel.html
@@ -13,7 +13,7 @@
 
 promise_test(function(t) {
   var div = createDiv(t);
-  var animation = div.animate({transform: ['none', 'translate(100px)']},
+  var animation = div.animate({transform: ['translate(100px)', 'translate(100px)']},
                               100 * MS_PER_SEC);
   return animation.ready.then(function() {
     assert_not_equals(getComputedStyle(div).transform, 'none',
@@ -26,7 +26,7 @@
 
 test(function(t) {
   var div = createDiv(t);
-  var animation = div.animate({marginLeft: ['0px', '100px']},
+  var animation = div.animate({marginLeft: ['100px', '200px']},
                               100 * MS_PER_SEC);
   animation.effect.timing.easing = 'linear';
   animation.cancel();
@@ -34,7 +34,7 @@
                 'margin-left style is not animated after cancelling');
 
   animation.currentTime = 50 * MS_PER_SEC;
-  assert_equals(getComputedStyle(div).marginLeft, '50px',
+  assert_equals(getComputedStyle(div).marginLeft, '150px',
                 'margin-left style is updated when cancelled animation is'
                 + ' seeked');
 }, 'After cancelling an animation, it can still be seeked');
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/document-timeline.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/document-timeline.html
index e4f5133f..0f782f50 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/document-timeline.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/document-timeline.html
@@ -1,6 +1,7 @@
 <!doctype html>
 <meta charset=utf-8>
-<title>Web Animations API: DocumentTimeline tests</title>
+<title>Default document timeline tests</title>
+<link rel="help" href="https://w3c.github.io/web-animations/#the-documents-default-timeline">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
@@ -16,15 +17,9 @@
     'document.timeline returns a different object for each document');
   assert_not_equals(iframe.contentDocument.timeline, null,
     'document.timeline on an iframe is not null');
-},
-'document.timeline identity tests',
-{
-  help:   'http://dev.w3.org/fxtf/web-animations/#the-document-timeline',
-  assert: [ 'Each document has a timeline called the document timeline' ],
-  author: 'Brian Birtles'
-});
+}, 'document.timeline identity tests');
 
-async_test(function(t) {
+promise_test(function(t) {
   assert_true(document.timeline.currentTime > 0,
     'document.timeline.currentTime is positive');
   // document.timeline.currentTime should be set even before document
@@ -40,31 +35,14 @@
   // We can't just compare document.timeline.currentTime to
   // window.performance.now() because currentTime is only updated on a sample
   // so we use requestAnimationFrame instead.
-  window.requestAnimationFrame(t.step_func(function(rafTime) {
+  return window.requestAnimationFrame(t.step_func(function(rafTime) {
     assert_equals(document.timeline.currentTime, rafTime,
                   'document.timeline.currentTime matches' +
                   ' requestAnimationFrame time');
-    t.done();
   }));
-},
-'document.timeline.currentTime value tests',
-{
-  help: [
-    'http://dev.w3.org/fxtf/web-animations/#the-global-clock',
-    'http://dev.w3.org/fxtf/web-animations/#the-document-timeline'
-  ],
-  assert: [
-    'The global clock is a source of monotonically increasing time values',
-    'The time values of the document timeline are calculated as a fixed' +
-    ' offset from the global clock',
-    'the zero time corresponds to the navigationStart moment',
-    'the time value of each document timeline must be equal to the time ' +
-    'passed to animation frame request callbacks for that browsing context'
-  ],
-  author: 'Brian Birtles'
-});
+}, 'document.timeline.currentTime value tests');
 
-async_test(function(t) {
+promise_test(function(t) {
   var valueAtStart = document.timeline.currentTime;
   var timeAtStart = window.performance.now();
   while (window.performance.now() - timeAtStart < 100) {
@@ -72,18 +50,10 @@
   }
   assert_equals(document.timeline.currentTime, valueAtStart,
     'document.timeline.currentTime does not change within a script block');
-  window.requestAnimationFrame(t.step_func(function() {
+  return window.requestAnimationFrame(t.step_func(function() {
     assert_true(document.timeline.currentTime > valueAtStart,
       'document.timeline.currentTime increases between script blocks');
-    t.done();
   }));
-},
-'document.timeline.currentTime liveness tests',
-{
-  help: 'http://dev.w3.org/fxtf/web-animations/#script-execution-and-live-updates-to-the-model',
-  assert: [ 'The value returned by the currentTime attribute of a' +
-            ' document timeline will not change within a script block' ],
-  author: 'Brian Birtles'
-});
+}, 'document.timeline.currentTime liveness tests');
 
 </script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness-expected.txt
index 977c872..5cb30a0 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness-expected.txt
@@ -1,11 +1,5 @@
 This is a testharness.js-based test.
 PASS Web Animations API: DocumentTimeline tests 
-PASS AnimationTimeline interface: existence and properties of interface object 
-PASS AnimationTimeline interface object length 
-PASS AnimationTimeline interface object name 
-FAIL AnimationTimeline interface: existence and properties of interface prototype object assert_equals: class string of AnimationTimeline.prototype expected "[object AnimationTimelinePrototype]" but got "[object AnimationTimeline]"
-PASS AnimationTimeline interface: existence and properties of interface prototype object's "constructor" property 
-FAIL AnimationTimeline interface: attribute currentTime assert_equals: setter must be undefined for readonly attributes expected (undefined) undefined but got (function) function "function () { [native code] }"
 FAIL DocumentTimeline interface: existence and properties of interface object assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing
 FAIL DocumentTimeline interface object length assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing
 FAIL DocumentTimeline interface object name assert_own_property: self does not have own property "DocumentTimeline" expected property "DocumentTimeline" missing
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness.html
index 9a489086..04afcada 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/AnimationTimeline/idlharness.html
@@ -6,11 +6,13 @@
 <script src="/resources/WebIDLParser.js"></script>
 <script src="/resources/idlharness.js"></script>
 <div id="log"></div>
-<script type="text/plain" id="DocumentTimeline-IDL">
+<script type="text/plain" id="AnimationTimeline-IDL">
 interface AnimationTimeline {
   readonly attribute double? currentTime;
 };
-
+</script>
+<script type="text/plain" id="DocumentTimeline-IDL">
+[Constructor (DOMHighResTimeStamp originTime)]
 interface DocumentTimeline : AnimationTimeline {
 };
 </script>
@@ -20,6 +22,8 @@
 var idlArray;
 test(function() {
   idlArray = new IdlArray();
+  idlArray.add_untested_idls(
+    document.getElementById('AnimationTimeline-IDL').textContent);
   idlArray.add_idls(
     document.getElementById('DocumentTimeline-IDL').textContent);
   idlArray.add_objects( { DocumentTimeline: ['document.timeline'] } );
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor-expected.txt
new file mode 100644
index 0000000..e443eb4d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+FAIL zero origin time DocumentTimeline is not defined
+FAIL positive origin time DocumentTimeline is not defined
+FAIL negative origin time DocumentTimeline is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor.html
new file mode 100644
index 0000000..efdf1118
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/DocumentTimeline/constructor.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>DocumentTimeline constructor tests</title>
+<link rel="help" href="https://w3c.github.io/web-animations/#the-documenttimeline-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../testcommon.js"></script>
+<body>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(function(t) {
+  var timeline = new DocumentTimeline(0);
+
+  assert_times_equal(timeline.currentTime, document.timeline.currentTime);
+}, 'zero origin time');
+
+test(function(t) {
+  var timeline = new DocumentTimeline(10 * MS_PER_SEC);
+
+  assert_times_equal(timeline.currentTime,
+                     (document.timeline.currentTime - 10 * MS_PER_SEC));
+}, 'positive origin time');
+
+test(function(t) {
+  var timeline = new DocumentTimeline(-10 * MS_PER_SEC);
+
+  assert_times_equal(timeline.currentTime,
+                (document.timeline.currentTime + 10 * MS_PER_SEC));
+}, 'negative origin time');
+
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget-expected.txt
index 271de512..421c9d96 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget-expected.txt
@@ -3,5 +3,8 @@
 FAIL Test setting target from null to a valid target Animation is not defined
 FAIL Test setting target from a valid target to null assert_equals: Value after clearing the target expected "10px" but got "50px"
 FAIL Test setting target from a valid target to another target assert_equals: Value of 1st element (currently not targeted) after changing the effect target expected "10px" but got "50px"
+FAIL Test falling back to distribute spacing mode after setting null target anim.effect.getKeyframes is not a function
+FAIL Test falling back to distribute spacing mode if there is no context element effect.getKeyframes is not a function
+FAIL Test paced spacing mode after setting a new target anim.effect.getKeyframes is not a function
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget.html
index 49ef8402..2b07d3de 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget.html
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffect/setTarget.html
@@ -85,5 +85,76 @@
                 'changing the animation current time.');
 }, 'Test setting target from a valid target to another target');
 
+test(function(t) {
+  var anim = createDiv(t).animate([ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+
+  anim.effect.target = null;
+
+  var frames = anim.effect.getKeyframes();
+  var slots = frames.length - 1;
+  assert_equals(frames[0].computedOffset, 0.0, '1st frame offset');
+  assert_equals(frames[1].computedOffset, 1.0 / slots, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 2.0 / slots, '3rd frame offset');
+  assert_equals(frames[3].computedOffset, 1.0, 'last frame offset');
+}, 'Test falling back to distribute spacing mode after setting null target');
+
+test(function(t) {
+  var effect = new KeyframeEffect(null,
+                                  [ { marginLeft: '0px' },
+                                    { marginLeft: '-20px' },
+                                    { marginLeft: '100px' },
+                                    { marginLeft: '50px' } ],
+                                  { duration: 100 * MS_PER_SEC,
+                                    spacing: 'paced(margin-left)' });
+  var frames = effect.getKeyframes();
+  var slots = frames.length - 1;
+  assert_equals(frames[1].computedOffset, 1.0 / slots, '2nd frame offset');
+  assert_equals(frames[2].computedOffset, 2.0 / slots, '3rd frame offset');
+}, 'Test falling back to distribute spacing mode if there is no context ' +
+   'element');
+
+test(function(t) {
+  var div1 = createDiv(t);
+  var div2 = createDiv(t);
+  div1.style.marginLeft = '-20px';
+  div2.style.marginLeft = '-50px';
+  var child1 = document.createElement('div');
+  var child2 = document.createElement('div');
+  div1.appendChild(child1);
+  div2.appendChild(child2);
+  //      body
+  //    /      \
+  //  div1     div2
+  // (-20px)  (-50px)
+  //   |        |
+  // child1   child2
+  var anim = child1.animate([ { marginLeft: '0px' },
+                              { marginLeft: 'inherit' },
+                              { marginLeft: '100px' },
+                              { marginLeft: '50px' } ],
+                            { duration: 100 * MS_PER_SEC,
+                              spacing: 'paced(margin-left)' });
+
+  var frames = anim.effect.getKeyframes();
+  var cumDist = [0, 20, 140, 190];
+  assert_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                '2nd frame offset');
+  assert_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                '3rd frame offset');
+
+  anim.effect.target = child2;
+  frames = anim.effect.getKeyframes();
+  cumDist = [0, 50, 200, 250];
+  assert_equals(frames[1].computedOffset, cumDist[1] / cumDist[3],
+                '2nd frame offset after setting a new target');
+  assert_equals(frames[2].computedOffset, cumDist[2] / cumDist[3],
+                '3rd frame offset after setting a new target');
+}, 'Test paced spacing mode after setting a new target');
+
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing-expected.txt
new file mode 100644
index 0000000..f876ed2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing-expected.txt
@@ -0,0 +1,84 @@
+This is a testharness.js-based test.
+FAIL Test throwing TypeError if using empty string assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: '' });
+  }" did not throw
+FAIL Test throwing TypeError if not using the correct keyword assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'dist' });
+  }" did not throw
+FAIL Test throwing TypeError if adding leading spaces assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: ' paced(margin-left)' });
+  }" did not throw
+FAIL Test throwing TypeError if adding trailing spaces assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(margin-left) ' });
+  }" did not throw
+FAIL Test throwing TypeError if adding leading spaces before the paced property assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced( margin-left)' });
+  }" did not throw
+FAIL Test throwing TypeError if adding trailing spaces after the paced property assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(margin-left )' });
+  }" did not throw
+FAIL Test throwing TypeError if these is no paced property assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced()' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(.margin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(1margin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with an invalid escape assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(\\)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with an invalid escape (FF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(\\\fmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with an invalid escape (CR) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(\\\rmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with an invalid escape (LF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(\\\nmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with a leading minus and an invalid name-start code point assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(- )' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with a leading minus and an invalid escape assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(-\\)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with a leading minus and an invalid escape (FF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\fmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with a leading minus and an invalid escape (CR) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\rmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident started string with a leading minus and an invalid escape (LF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\nmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident string with an invalid escape assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(--\\)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident string with an invalid escape (FF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\fmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident string with an invalid escape (CR) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\rmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident string with an invalid escape (LF) assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\nmargin)' });
+  }" did not throw
+FAIL Test throwing TypeError if using a non-ident string with an invalid name code point assert_throws: function "function () {
+    createDiv(t).animate(null, { spacing: 'paced(margin.left)' });
+  }" did not throw
+FAIL Test falling back to distribute spacing if using a unrecognized property assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a unrecognized property which starts with a valid escape (Full stop) assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a unrecognized property which starts with a valid escape (white space) assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a unrecognized property which starts with a valid escape (low line) assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a unrecognized property which starts with a minus and a low line assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a unrecognized property which starts with a minus and a valid escape assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using CSS variables assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a non-animatable shorthand property assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test falling back to distribute spacing if using a non-animatable property assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test default value of spacing assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test spacing value if setting distribute assert_equals: spacing mode expected (string) "distribute" but got (undefined) undefined
+FAIL Test spacing value if setting paced assert_equals: spacing mode expected (string) "paced(margin-left)" but got (undefined) undefined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing.html
new file mode 100644
index 0000000..c83d1eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/interfaces/KeyframeEffectReadOnly/spacing.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>KeyframeEffectReadOnly spacing attribute tests</title>
+<link rel="help"
+href="https://w3c.github.io/web-animations/#dom-keyframeeffectreadonly-spacing">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../testcommon.js"></script>
+<body>
+<div id="log"></div>
+<script>
+"use strict";
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: '' });
+  });
+}, 'Test throwing TypeError if using empty string');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'dist' });
+  });
+}, 'Test throwing TypeError if not using the correct keyword');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: ' paced(margin-left)' });
+  });
+}, 'Test throwing TypeError if adding leading spaces');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(margin-left) ' });
+  });
+}, 'Test throwing TypeError if adding trailing spaces');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced( margin-left)' });
+  });
+}, 'Test throwing TypeError if adding leading spaces before the ' +
+   'paced property');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(margin-left )' });
+  });
+}, 'Test throwing TypeError if adding trailing spaces after the ' +
+   'paced property');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced()' });
+  });
+}, 'Test throwing TypeError if these is no paced property');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(.margin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(1margin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(\\)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'an invalid escape');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(\\\fmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'an invalid escape (FF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(\\\rmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'an invalid escape (CR)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(\\\nmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'an invalid escape (LF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(- )' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'a leading minus and an invalid name-start code point');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(-\\)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'a leading minus and an invalid escape');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\fmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'a leading minus and an invalid escape (FF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\rmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'a leading minus and an invalid escape (CR)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(-\\\nmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident started string with ' +
+   'a leading minus and an invalid escape (LF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(--\\)' });
+  });
+}, 'Test throwing TypeError if using a non-ident string with an invalid ' +
+   'escape');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\fmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident string with an invalid ' +
+   'escape (FF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\rmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident string with an invalid ' +
+   'escape (CR)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(--\\\nmargin)' });
+  });
+}, 'Test throwing TypeError if using a non-ident string with an invalid ' +
+   'escape (LF)');
+
+test(function(t) {
+  assert_throws(new TypeError, function() {
+    createDiv(t).animate(null, { spacing: 'paced(margin.left)' });
+  });
+}, 'Test throwing TypeError if using a non-ident string with an invalid name ' +
+   'code point');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(A)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(\\.margin)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property ' +
+   'which starts with a valid escape (Full stop)');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(\\ margin)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property ' +
+   'which starts with a valid escape (white space)');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(_margin)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property ' +
+   'which starts with a valid escape (low line)');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(-_margin)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property ' +
+   'which starts with a minus and a low line');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(-\\.margin)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a unrecognized property ' +
+   'which starts with a minus and a valid escape');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(--bg-color)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using CSS variables');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(animation)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a non-animatable ' +
+   'shorthand property');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null,
+                                  { spacing: 'paced(animation-duration)' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test falling back to distribute spacing if using a non-animatable ' +
+   'property');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null);
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test default value of spacing');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'distribute' });
+  assert_equals(anim.effect.spacing, 'distribute', 'spacing mode');
+}, 'Test spacing value if setting distribute');
+
+test(function(t) {
+  var anim = createDiv(t).animate(null, { spacing: 'paced(margin-left)' });
+  assert_equals(anim.effect.spacing, 'paced(margin-left)', 'spacing mode');
+}, 'Test spacing value if setting paced');
+
+</script>
+</body>
diff --git a/third_party/WebKit/LayoutTests/resources/idlharness.js b/third_party/WebKit/LayoutTests/resources/idlharness.js
index b6a16af..5002ec5 100644
--- a/third_party/WebKit/LayoutTests/resources/idlharness.js
+++ b/third_party/WebKit/LayoutTests/resources/idlharness.js
@@ -307,6 +307,28 @@
     return ret;
 };
 
+function exposed_in(globals) {
+    if ('document' in self) {
+        return globals.indexOf("Window") >= 0;
+    }
+    if ('DedicatedWorkerGlobalScope' in self &&
+        self instanceof DedicatedWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("DedicatedWorker") >= 0;
+    }
+    if ('SharedWorkerGlobalScope' in self &&
+        self instanceof SharedWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("SharedWorker") >= 0;
+    }
+    if ('ServiceWorkerGlobalScope' in self &&
+        self instanceof ServiceWorkerGlobalScope) {
+        return globals.indexOf("Worker") >= 0 ||
+               globals.indexOf("ServiceWorker") >= 0;
+    }
+    throw "Unexpected global object";
+}
+
 //@}
 IdlArray.prototype.test = function()
 //@{
@@ -353,6 +375,23 @@
     }
     this["implements"] = {};
 
+    Object.getOwnPropertyNames(this.members).forEach(function(memberName) {
+        var member = this.members[memberName];
+        if (!(member instanceof IdlInterface)) {
+            return;
+        }
+
+        var exposed = member.extAttrs.filter(function(a) { return a.name == "Exposed" });
+        if (exposed.length > 1) {
+            throw "Unexpected Exposed extended attributes on " + memberName + ": " + exposed;
+        }
+
+        var globals = exposed.length === 1
+                    ? exposed[0].rhs.value
+                    : ["Window"];
+        member.exposed = exposed_in(globals);
+    }.bind(this));
+
     // Now run test() on every member, and test_object() for every object.
     for (var name in this.members)
     {
@@ -678,6 +717,13 @@
         return;
     }
 
+    if (!this.exposed) {
+        test(function() {
+            assert_false(this.name in self);
+        }.bind(this), this.name + " interface: existence and properties of interface object");
+        return;
+    }
+
     if (!this.untested)
     {
         // First test things to do with the exception/interface object and
@@ -701,7 +747,6 @@
     test(function()
     {
         // This function tests WebIDL as of 2015-01-13.
-        // TODO: Consider [Exposed].
 
         // "For every interface that is exposed in a given ECMAScript global
         // environment and:
diff --git a/third_party/WebKit/LayoutTests/resources/testharness.js b/third_party/WebKit/LayoutTests/resources/testharness.js
index ceb3a4b..91dfab5 100644
--- a/third_party/WebKit/LayoutTests/resources/testharness.js
+++ b/third_party/WebKit/LayoutTests/resources/testharness.js
@@ -471,6 +471,11 @@
             self instanceof ServiceWorkerGlobalScope) {
             return new ServiceWorkerTestEnvironment();
         }
+        if ('WorkerGlobalScope' in self &&
+            self instanceof WorkerGlobalScope) {
+            return new DedicatedWorkerTestEnvironment();
+        }
+
         throw new Error("Unsupported test environment");
     }